

/* ── Canonical theme palette :root{} — THE single source ────────
   Generated by palette_css_vars() from the one static BFN palette
   (palette-loader.php's palette_defaults() — no picker, no builder, no
   per-user choice as of 2026-08-21), plus an html.day-mode{} override
   block that now carries the identical values (one theme, no day/night
   colour shift). Every page that loads an emitter-backed .pcss inherits
   this block; no page defines its own colour :root anymore. */
:root{--name:BFN;--bg_base:#0D0705;--bg_dark:#060302;--bg_surface:#0D070580;--bg_raised:#1C120A;--bg_hover:#241809;--bg_press:#2C1D0C;--accent:#FF6A1F;--accent_lit:#FFA35C;--accent_dk:#C24A0F;--text:#FFF3E6;--text_dim:#D9A87A;--text_on_ac:#1A0D02;--border:#3D2313;--error:#E8391C;--warn:#FFB040;--info:#CC7A3D;--mix:#0D070580;--color_primary:var(--accent);--color_secondary:var(--error);--color_tertiary:var(--warn);--color_amber:var(--warn);--color_teal:var(--accent);--color_violet:var(--info);--color_danger:var(--error);--color_text_normal:var(--text_dim);--color_text_stressed:var(--text);--color_border:var(--border);--color_border_focus:var(--accent);--color_bg:var(--bg_base);--color_bg_normal:var(--bg_base);--color_bg_hover:var(--bg_dark);--color_bg_dark:var(--bg_dark);--theme-color-bg:var(--bg_base);--theme-color-bg-dark:var(--bg_dark);--theme-color-text-normal:var(--text_dim);--theme-color-text-stressed:var(--text);--theme-color-border:var(--border);--theme-panel-bg:color-mix(in srgb, var(--bg_surface) 68%, var(--mix));--theme-input-bg:color-mix(in srgb, var(--bg_dark) 60%, transparent);--theme-panel-shadow:0 0 0 1px color-mix(in srgb, var(--border) 60%, transparent);--theme-glow:0 0 0 1px color-mix(in srgb, var(--accent) 50%, transparent);--theme-glass-border:1px solid color-mix(in srgb, var(--accent) 45%, var(--mix));--theme-input-active-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 65%, var(--mix));--aurora-a1:color-mix(in srgb, var(--accent) 22%, var(--mix));--aurora-a2:color-mix(in srgb, var(--warn) 16%, var(--mix));--aurora-a3:color-mix(in srgb, var(--info) 14%, var(--mix));--lcars-light:var(--accent_lit);--lcars-amber:var(--warn);}html.day-mode{--name:BFN;--bg_base:#0D0705;--bg_dark:#060302;--bg_surface:#0D070580;--bg_raised:#1C120A;--bg_hover:#241809;--bg_press:#2C1D0C;--accent:#FF6A1F;--accent_lit:#FFA35C;--accent_dk:#C24A0F;--text:#FFF3E6;--text_dim:#D9A87A;--text_on_ac:#1A0D02;--border:#3D2313;--error:#E8391C;--warn:#FFB040;--info:#CC7A3D;--mix:#0D070580;}
/* ── Structural tokens (non-colour) — radius, font size, shape ── */
:root {
    --theme-input-border: 1px solid color-mix(in srgb, var(--color_border) 28%, transparent);
    --theme-input-shadow: 0 2px 5px rgba(0, 0, 0, 0.28);
    /* macOS pass (2026-08-28): reverted back to the sheet-like scale this
       token had before the 2026-08-11 Cinnamon/Mint-Y pass flattened it
       to a GTK-realistic 6/4/2px. Leo asked to favor macOS UI design
       heavily site-wide; this is the single token most call sites key
       off, so bumping it back to 12/8/5px is most of that ask by itself. */
    --theme-radius:    12px;
    --theme-radius-sm: 8px;
    --theme-radius-xs: 5px;
    --theme-panel-bg:  var(--bg_surface);

    /* ── Elevation scale (2026-08-19) — real depth, replacing the flat
       "none" stubs kept since the Pantheon pass. No live call sites used
       these before now (confirmed) — values calibrated against this
       file's own already-good ad-hoc shadows (windows: 0 10px 26px/.34,
       pickers: 0 24px 64px/.5) rather than invented from scratch, so
       newly-elevated surfaces read consistently with the ones that
       already had real depth. */
    --elevation-1: 0 2px 8px rgba(0, 0, 0, 0.18);
    --elevation-2: 0 8px 20px rgba(0, 0, 0, 0.26);
    --elevation-3: 0 14px 34px rgba(0, 0, 0, 0.34);
    --elevation-4: 0 24px 64px rgba(0, 0, 0, 0.5);

    /* ── Glass tiers (2026-08-19) — the dock/desktop-widgets/layout-
       picker overlay already carried real backdrop-filter blur with
       inconsistent hand-picked values (8/10/16px blur, 82/88/92% bg);
       these two tokens unify that into a real system: tier 1 for
       content surfaces that need to stay readable (cards, panels,
       dialogs), tier 2 for floating chrome that can be more see-through
       (menus, popovers, Start Menu). Background opacity lives per-call-
       site (color-mix(var(--bg_raised) N%, transparent)) rather than
       here, since N differs by tier and these tokens only cover the
       filter half. */
    --glass-blur-1: blur(12px) saturate(130%);
    --glass-blur-2: blur(20px) saturate(150%);

    /* Shared fluid type scale (2026-08-19 — now actually wired up, onto
       h1-h4/.lb-card-title; still not touching the ~20 remaining
       component-local ad-hoc font-size:clamp() sites elsewhere in this
       file — a full migration of those is separate scope beyond this
       pass). No live call site referenced these before now, so it was
       safe to retune the exact numbers rather than preserve them
       untouched — --fs-2xl is new, added specifically for h1 since the
       original xs..xl run topped out well below h1's existing 32px
       ceiling. */
    --fs-xs:   clamp(10px, 0.85rem, 12px);
    --fs-sm:   clamp(12px, 0.95rem, 14px);
    --fs-base: clamp(13px, 1rem, 16px);
    --fs-lg:   clamp(15px, 1.15rem, 19px);
    --fs-xl:   clamp(18px, 1.4rem, 24px);
    --fs-2xl:  clamp(20px, 1.8rem, 32px);

    /* Canonical heading typeface — one definition site for what used to
       be 25 separate font-family declarations with inconsistent fallback
       fonts. Was Spectral (2026-08-13), now Plus Jakarta Sans
       (2026-08-19 glass/depth refresh, see the @font-face block's own
       comment) — same single-family-different-weight architecture as
       before, its own 700 weight still reads distinct from body text at
       500 without needing a second imported family. */
    --font-heading: 'Plus Jakarta Sans', -apple-system, 'Segoe UI', sans-serif;
    --lcars-pill:      0;
    --lcars-r:         0;
    --doc-bg:          #fff;
}


/* ── Font face ────────────────────────────────────────────────── */
/* Was Spectral, a serif (2026-08-13 — replaced the earlier self-hosted
   'NeverEnding' TTF). Replaced again 2026-08-19 as part of the glass/
   depth refresh: a serif reads oddly against blur/translucent surfaces
   — virtually every real glass/Mica UI (macOS, Windows 11, visionOS)
   uses a geometric-humanist sans instead. Plus Jakarta Sans keeps the
   small-dense-UI-text legibility Spectral was chosen for (buttons,
   taskbar labels, table cells) while fitting the new material
   direction — picked over the two most overused "safe" sans defaults
   (Inter, Space Grotesk). Same CDN mechanism as before (CSP already
   allowlists fonts.gstatic.com under font-src), same latin-only subset.
   Four static weights now, not two — UI chrome (buttons, labels, tray
   text) wants a real medium/semibold step that Spectral's own
   weight-differentiation approach didn't need. */
@font-face {
    font-family: 'Plus Jakarta Sans';
    src: url('https://fonts.gstatic.com/s/plusjakartasans/v12/LDIbaomQNQcsA88c7O9yZ4KMCoOg4IA6-91aHEjcWuA_qU79TR_V.woff2') format('woff2');
    font-weight: 400;
    font-display: swap;
}
@font-face {
    font-family: 'Plus Jakarta Sans';
    src: url('https://fonts.gstatic.com/s/plusjakartasans/v12/LDIbaomQNQcsA88c7O9yZ4KMCoOg4IA6-91aHEjcWuA_m079TR_V.woff2') format('woff2');
    font-weight: 500;
    font-display: swap;
}
@font-face {
    font-family: 'Plus Jakarta Sans';
    src: url('https://fonts.gstatic.com/s/plusjakartasans/v12/LDIbaomQNQcsA88c7O9yZ4KMCoOg4IA6-91aHEjcWuA_d0n9TR_V.woff2') format('woff2');
    font-weight: 600;
    font-display: swap;
}
@font-face {
    font-family: 'Plus Jakarta Sans';
    src: url('https://fonts.gstatic.com/s/plusjakartasans/v12/LDIbaomQNQcsA88c7O9yZ4KMCoOg4IA6-91aHEjcWuA_Tkn9TR_V.woff2') format('woff2');
    font-weight: 700;
    font-display: swap;
}

/* ── Universal base ───────────────────────────────────────────── */
/*
 * font-size / letter-spacing / line-height / font-family are intentionally on
 * body, NOT here.  Author !important on * overrides inline styles, which breaks
 * xterm.js canvas measurement (proposeDimensions returns wrong cell dimensions →
 * corrupt output).  Setting these on body means they are inherited normally and
 * xterm's inline style="font-family:Terminus" / style="font-size:Npx" can win,
 * keeping canvas and measurement in sync.
 */
* {
    box-sizing: border-box;
    color: var(--color_text_normal) !important;
    scrollbar-color: var(--color_primary) var(--mix) !important;
    scrollbar-width: thin;
    -webkit-tap-highlight-color: var(--mix);
    touch-action: manipulation;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-shadow: none !important;
    border: none !important;
    outline: none !important;
}

/* Restore the HTML [hidden] attribute for all elements, even where we set
   display:…!important elsewhere. Attribute selector (0,0,1,0) beats element
   selector (0,0,0,1) when both carry !important, so this always wins. */
[hidden] { display: none !important; }

/* ── Text selection ───────────────────────────────────────────── */
::selection {
    background: color-mix(in srgb, var(--color_primary) 30%, var(--mix));
}

/* ── Document sizing ──────────────────────────────────────────── */
html {
    width:  100%;
    height: 100%;
    background-color: transparent !important;
    overflow-x: hidden;
    max-width: 100vw;
}


/* ── Wallpaper disabled ────────────────────────────────────────────
   Aurora gradient, scene photos, and crossfade layer all suppressed.
   Background is plain --theme-color-bg on all pages.              */
html::before,
html.scene-active::before,
body::before,
#_lb_scene_cf {
    display: none !important;
}

/* Loading splash screens suppressed site-wide */
#loading_splash, #scifi_splash { display: none !important; }

/* Subpages: both html and body fully transparent so the scene
   wallpaper (on html::before) shows through all layers.
   class="subpage" is set server-side so this applies on first paint
   with no JS dependency and no flash. */

html.subpage,
html.subpage body {
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
    padding: 0 !important;
    max-width: none !important;
    width: 100% !important;
}

html.subpage body::before {
    display: none !important;
}

/* Subpage structural containers: transparent (glass-panel/ui-surface get
   liquid glass — .wall-entry moved out of this list 2026-08-19 for the
   same reason: it's a real content card with its own glass treatment
   now, not a plain structural wrapper that should flatten to nothing). */
html.subpage .container,
html.subpage nav,
html.subpage #div_left,
html.subpage #div_top,
html.subpage #div_bottom,
html.subpage #div_right,
html.subpage .rco_div {
    background: transparent !important;
    background-color: transparent !important;
}

/* All remaining containers, panels, and UI components on sub-pages — transparent. */
html.subpage .glass-panel,
html.subpage .ui-surface,
html.subpage .gb-entry,
html.subpage .lb-voice,
html.subpage .lb-voice-play,
html.subpage .lb-voice-bar,
html.subpage .lb-voice-fill,
html.subpage .lbg-player,
html.subpage .lbg-player__viewport,
html.subpage .lbg-player__overlay,
html.subpage .lbg-player__bigplay,
html.subpage .lbg-player__controls,
html.subpage .lbg-player__track,
html.subpage .lbg-player__fill,
html.subpage #div_entries_sidebar,
html.subpage #div_wall_backdrop,
html.subpage #admin_tab_bar,
html.subpage #dm_convos_panel,
html.subpage #fm_tree,
html.subpage #db_sidebar,
html.subpage #hs_section_nav,
html.subpage #private_fto_div_sidebar_div,
html.subpage #wall_sidebar_brand,
html.subpage #admin_sidebar_brand,
html.subpage #loading_splash,
html.in-iframe .glass-panel,
html.in-iframe .ui-surface,
html.in-iframe .gb-entry,
html.in-iframe .lb-voice,
html.in-iframe .lb-voice-play,
html.in-iframe .lb-voice-bar,
html.in-iframe .lb-voice-fill,
html.in-iframe .lbg-player,
html.in-iframe .lbg-player__viewport,
html.in-iframe .lbg-player__overlay,
html.in-iframe .lbg-player__bigplay,
html.in-iframe .lbg-player__controls,
html.in-iframe .lbg-player__track,
html.in-iframe .lbg-player__fill,
html.in-iframe #div_entries_sidebar,
html.in-iframe #div_wall_backdrop,
html.in-iframe #admin_tab_bar,
html.in-iframe #dm_convos_panel,
html.in-iframe #fm_tree,
html.in-iframe #db_sidebar,
html.in-iframe #hs_section_nav,
html.in-iframe #private_fto_div_sidebar_div,
html.in-iframe #wall_sidebar_brand,
html.in-iframe #admin_sidebar_brand,
html.in-iframe #loading_splash {
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
}

html.in-iframe {
    background: transparent !important;
    background-color: transparent !important;
}

html.in-iframe,
html.in-iframe body {
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
    width: 100% !important;
    min-height: 100dvh !important;
}

html.in-iframe body::before {
    display: none !important;
}

/* Top-level page wrappers: transparent (glass-panel/ui-surface keep liquid glass). */
html.in-iframe body > .container,
html.in-iframe body > header,
html.in-iframe body > nav,
html.in-iframe body > #div_left,
html.in-iframe body > #div_top,
html.in-iframe body > #div_bottom,
html.in-iframe body > #div_right,
html.in-iframe body > .rco_div {
    background: transparent !important;
    background-color: transparent !important;
    box-shadow: none !important;
}

/* Nested structural containers within iframes: transparent.
   Also clears backdrop-filter on #div_top — the glass-panel system gives it
   blur(24px) which shows as a frosted-glass band inside the iframe even when
   background is transparent.  The arcade page restores it further down.
   .wall-entry moved out of this list 2026-08-19 — same reason as the
   html.subpage group above, it keeps its own real glass now instead of
   being forced flat like a plain structural wrapper. */
html.in-iframe .container,
html.in-iframe header,
html.in-iframe nav,
html.in-iframe #div_left,
html.in-iframe #div_top,
html.in-iframe #div_bottom,
html.in-iframe #div_right,
html.in-iframe .rco_div {
    background: transparent !important;
    background-color: transparent !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}

/* #div_top::before is a 56px solid left-accent block (var(--color_primary)).
   It remains visible even after background+backdrop-filter are cleared.
   Hide it in all iframes; arcade restores via its specific rule below. */
html.in-iframe #div_top::before {
    background: transparent !important;
}

/* Formerly forced background:transparent + border-radius:0 on every input/
   select/textarea/button inside an iframe (i.e. virtually the whole site —
   every subpage runs inside #iframe_right). That was left over from when
   the entire design was flat everywhere; its specificity (five :not()
   clauses = high) silently beat .lb-input's own background/radius rules,
   so the --theme-input-bg tint and the LBKit button/input radius below
   never actually rendered on any subpage. The shared base rules a few
   hundred lines up already style every input/select/textarea/button
   consistently regardless of iframe context, so this no longer does
   anything a subpage needs — removed rather than patched with more
   exceptions. */

/* ── Overlay layers ───────────────────────────────────────────── */
html::after {
    content: '';
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 9998;
}

body::after {
    content: '';
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 9999;
}

/* ── Root font size — anchors rem throughout the site ─────────── */
/* Formula: 2.5vw + 6px gives 14px at 320px, 15.4px at 375px,
   18px at 480px, and hits the 22px ceiling around 640px.
   Clamped at 12px min so nothing shrinks below readable.         */
html {
    font-size: clamp(12px, 2.5vw + 6px, 22px);
}

/* ── Body ─────────────────────────────────────────────────────── */
body {
    margin: 0;
    padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
    width: 100%;
    min-height: 100dvh;
    overflow-x: hidden;
    overflow-y: overlay;
    text-align: center !important;
    background: transparent !important;
    font-family: 'Plus Jakarta Sans', -apple-system, 'Segoe UI', sans-serif;
    font-size: 1rem;
    font-weight: 500;
    letter-spacing: 0.02em;
    line-height: 1.7;
    text-rendering: optimizeLegibility;
}

/* Form elements don't inherit font-family or font-size from body by default in browsers. */
input, button, select, textarea {
    font-family: inherit;
    font-size: inherit;
}

/* ── Heading sizes — fluid clamp scale ──────────────────────────── */
/* Migrated onto the shared --fs-* scale (2026-08-19, was each its own
   bespoke vw-based clamp()) — see that token's own comment in :root. */
h1 { font-size: var(--fs-2xl) !important; line-height: 1.2 !important; }
h2 { font-size: var(--fs-xl) !important; line-height: 1.25 !important; }
h3, h4 { font-size: var(--fs-lg) !important; line-height: 1.3 !important; }


/* ── Traditional touch baseline ────────────────────────────────────── */
/* min-height only on actual controls — not <a> or <textarea> which
   size themselves via content/CSS; apply only on coarse-pointer devices
   so desktop UI proportions are not disturbed. */
@media (pointer: coarse) {
    button, input[type="button"], input[type="submit"], input[type="reset"],
    select, [role="button"] {
        min-height: 44px;
    }
}

/* ── Div border/shadow defaults ───────────────────────────────── */
div div {
    box-shadow: none !important;
}

/* ── Transparent containers on all pages except the main frame ─────
 * html.main-frame = main page (excluded). Every subpage/admin/login
 * page gets fully transparent container backgrounds so content floats
 * over the scene photo without opaque panel fill.
 *
 * :is() covers all structural container element types.
 * The :not(#id) carve-outs serve two purposes:
 *   1. Exclude those elements so their own background rules are kept.
 *   2. Each #id inside :not() contributes [1,0,0] to this rule's
 *      specificity — the total (18 IDs × [1,0,0] + classes + elements)
 *      beats any per-page #container { background: ... !important } at [1,0,0].
 * Form controls (input/select/button/textarea) are not container
 * elements and are never matched by this selector.               */
html:not(.main-frame) :is(div, header, section, aside, article, main, nav, footer):not(.glass-panel):not(.ui-surface):not(#tactical_lightbox_overlay):not(#tactical_lightbox_inner_wrapper):not(#tactical_lightbox_media_container):not(#tactical_lightbox_comments_container):not(#session_warn_overlay):not(#admin-drawer-backdrop):not(#tc_div_terminal_div):not(.lb-dlg-ov):not(.lb-dlg-box):not(#dlg_overlay):not(#cleared_modal):not(#media_viewer_overlay):not(#fs_action_overlay):not(#div_entries_sidebar):not(#div_wall_backdrop):not(#admin_tab_bar):not(#div_left):not(#div_top):not(#div_rom_list_toolbox):not(#hs_new_key_display):not(#dm_convos_panel):not(#fm_tree):not(#db_sidebar):not(#hs_section_nav):not(#private_fto_div_sidebar_div):not(#wall_sidebar_brand):not(#admin_sidebar_brand):not(.wall-entry):not(.gb-entry):not(.lb-page-header):not(#editor_overflow_menu):not(#editor_component_dialog):not(#editor_component_modal):not(#editor_media_modal):not(#editor_media_dialog):not(#editor_page_wrap):not(#editor_title_row):not(#editor_meta_bar):not(#editor_tags_row):not(#editor_tabs_row):not(#editor_ribbon_tabs):not(#div_command_pallet):not(#editor_content_wrap):not(#div_content):not(#editor_preview_pane):not(#div_color_pallet_el):not(#div_color_pallet_dialog):not(#admin_palette):not(#admin_palette_backdrop):not(#lb-lightbox):not(.wall-media-counter):not(.arcade-controls-inner):not(.lb-window-chrome):not(.lb-taskbar-chrome):not(.lb-window-body):not(#lb-desktop-wallpaper):not(.lb-desktop-ctxmenu):not(.lb-wallpaper-picker-box):not(#lb-snap-preview):not(#lb-alttab-overlay):not(.lb-alttab-card):not(#lb-cmdpal-overlay):not(#lb-cmdpal-box):not(#lb-cmdpal-list):not(.lb-cmdpal-row):not(#lb-snapassist-overlay):not(#lb-snapassist-row):not(.lb-snapassist-card):not(#lb-rubberband):not(.lb-desktop-icon):not(#lb-wingpanel):not(.lb-wingpanel-left):not(.lb-wingpanel-center):not(.lb-wingpanel-right):not(#lb-layout-picker-overlay):not(#lb-layout-picker-box):not(.lb-theme-builder-preview):not(.lb-code-editor):not(.lb-code-editor-gutter):not(.lb-code-view):not(.lb-studio-canvas):not(.lb-studio-immediate):not(.lb-studio-debugbar):not(.lb-studio-variables):not(.lb-picture-box):not(.lb-list-box):not(.lb-shape):not(.lb-timer-glyph):not(.lb-image-picker-box):not(.lb-docbrowser-header):not(.lb-docbrowser-nav):not(.lb-docbrowser-content):not(.lb-code-editor-completions):not(.fs-item-selected):not(.fs-drop-target):not(.fs-move-row):not(.lb-popover):not(#mail_shell):not(#mail_topbar):not(#mail_folders):not(#mail_list_pane):not(.mail-list-row):not(#mail_reading_pane):not(.mail-provider-hint):not(#mc_app):not(#mc_titlebar):not(.mc_panel_header):not(.mc_panel_body):not(.mc_panel_footer):not(#mc_status):not(#mc_fkeys):not(#editor_posts_panel):not(#write_shell):not(#write_body):not(#write_list_pane):not(#write_editor_pane):not(#journal_shell):not(#journal_body):not(#journal_list_pane):not(#journal_entry_pane):not(#journal_entry_detail) {
    /* #div_left added to the exclusion list: this catch-all "flatten
       every div's background on sub-pages" rule's :not(#id) chain gives
       it enormous specificity (dozens of chained ID-level :not() clauses)
       that no plain #div_left or html:has(...) #div_left rule could ever
       beat — #div_left was simply missing from the list, so arcade's
       local ROM-browser sidebar (its own #div_left, not the shell's —
       that one is excluded via :not(.main-frame) already) always got
       force-flattened to transparent regardless of what its own rules
       said. #admin_tab_bar got the same fix for the same reason earlier
       in this list.
       #lb-lightbox/.wall-media-counter/.arcade-controls-inner added for
       the same reason, found while fixing day-mode text contrast: each
       has its own deliberately dark, fixed (non-theme) background — the
       wall image lightbox's scrim, the media-carousel page counter, the
       arcade controls cheat-sheet — but this rule flattened it to
       transparent, so their fixed-light text (needed because the
       background never tracks day/night) had nothing dark left to sit
       on and went invisible in day mode.
       .lb-window-chrome added for the desktop-mode window manager — a
       *class*, not an ID like everything else here, because windows are
       dynamically created/destroyed instances (LBKit.window()), not
       page singletons, so there's no fixed ID to enumerate.
       #lb-desktop-wallpaper/.lb-desktop-ctxmenu/.lb-wallpaper-picker-box
       added for the same reason as .lb-window-chrome: shell-level UI that
       hit this same forced-transparent bug in practice, not merely a
       theoretical risk from being div-tagged. #lb-desktop-wallpaper
       specifically needs this to keep its own JS-set inline
       background-image from being fought — the shorthand `background`
       this rule forces also resets background-image, and an !important
       external rule beats a non-important inline style regardless of
       origin.
       .lb-code-editor/.lb-code-editor-gutter added for the new App Studio
       work (LBKit.code_editor) — both carry their own explicit
       backgrounds that this rule would otherwise flatten.
       .lb-code-view is listed alongside them defensively, but checked
       via CDP and turned out NOT to be fixing a live bug: the class
       itself sets no background at all (see its rule below) — the
       actual color lives on the child .lb-code-view-pre, which is a
       <pre>, a tag this selector's :is() list never targets regardless.
       Left in the list as a harmless no-op rather than pulled back out,
       since it costs nothing and covers the class if a future edit ever
       gives it its own background.
       .lb-studio-canvas added for the Phase 2 form designer (App Studio) —
       it carries a real dotted-grid background, added proactively this
       time rather than found as a live bug after the fact.
       .lb-studio-immediate added for the Phase 6 Immediate Window panel —
       same proactive reasoning, it carries an explicit fixed dark
       background regardless of theme.
       .lb-studio-debugbar/.lb-studio-variables added for step debugging
       (also Phase 6) — same proactive reasoning again.
       .lb-picture-box/.lb-list-box/.lb-shape/.lb-timer-glyph added
       proactively for the new App Studio control set (ListBox/PictureBox/Shape/
       Timer) — each carries a real background/background-image
       (PictureBox's optional picture, ListBox's input-like surface and
       its item-selected highlight, Shape's fillColor, Timer's design-
       time marker box), all of which this rule would otherwise flatten
       the moment these controls get used inside Studio's own designer
       canvas or a Run-mode blob document (both are non-.main-frame
       <html> documents this selector targets). LBKit.frame/.lb-frame and
       LBKit.scrollbar/.lb-scrollbar/LBKit.line/.lb-line are deliberately
       NOT here: Frame only ever needs its border (untouched by this
       rule), and scrollbar/line render as <input>/<svg> rather than a
       div/section/etc. this selector's :is() list even matches.
       .lb-image-picker-box added for LBKit.image_picker (generalized
       from the wallpaper picker's own .lb-wallpaper-picker-box, already
       in this list) — same real solid background, same reason.
       .lb-docbrowser-header/.lb-docbrowser-nav/.lb-docbrowser-content
       added proactively for LBKit.doc_browser (the php.net-style manual
       popout) — each is a deliberately fixed-color div (dark header bar,
       light sidebar, white content pane) regardless of the site's active
       palette, same reasoning as .lb-code-editor above; the outer
       .lb-docbrowser-modal wrapper needs no entry of its own since it's
       really just a className on LBKit.modal's own .lb-dlg-box, already
       excluded.
       .lb-code-editor-completions added proactively for LBKit.code_
       editor's new completions popup (Phase E) — same fixed-dark-
       regardless-of-theme reasoning as everything else in this codebase
       that sits directly on the code editor's own fixed surface.
       #hs_new_key_display added: a class-scan audit found .hs-key-display
       (the Headscale tab's "here's your generated key" reveal box) had
       never been styled at all; giving it a real background hit this
       exact rule — !important alone wasn't enough to win since this
       selector's own dozens of chained :not(#id) clauses out-specificity
       any single class even under !important, only the exclusion list
       itself actually beats it.
       .lb-popover added 2026-08-23: LBKit.popover() (the shared tray/
       clipboard/task-manager/quicksettings popup primitive) had only ever
       been used inside the top-level shell (html.main-frame, entirely
       outside this selector's reach) until the Files app's upload panel
       became its first subpage usage — files/index.php is its own
       html.subpage document loaded in an iframe, so this rule reached it
       for the first time and flattened .lb-popover's own glass background
       to transparent. Excluding the base class, not just
       .fs-upload-popover, so any FUTURE subpage use of LBKit.popover()
       doesn't hit this same bug again. */
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
    box-shadow: none !important;
}

/* ── Div default padding ─────────────────────────────────────────
 * Slight breathing room so UI controls never sit flush against a
 * div's edge.  Excludes the fixed/absolute-positioned chrome shells,
 * whose child offsets are measured from the padding edge — adding
 * padding there would shift the top bar, sidebar, bottom bar, right
 * panel and splash/overlay screens out of place.  Any component with
 * its own ID/class padding rule (.glass-panel, #div_left_brand, etc.)
 * already overrides this default via higher selector specificity. */
/* 2026-08-15: .lb-window-titlebar added to the exclusion list — a real,
   previously-undetected bug found while shrinking App Frame windows'
   titlebar padding: this generic "give every plain div a sensible
   default padding" rule predates the window manager entirely and was
   never updated for it (unlike the OTHER giant reset just above, which
   DOES already exclude .lb-window-chrome/.lb-taskbar-chrome/.lb-window-
   body). Its huge :not(#id) chain manufactures enormous specificity
   (each :not(#id) counts as an ID-level specificity per the CSS spec),
   so it silently beat .lb-window-titlebar's own explicit padding rule
   this whole time — every window's titlebar (not just App Frame ones)
   has actually been rendering at this rule's flat 0.5rem on every side,
   not whatever .lb-window-titlebar itself declared, since at least the
   2026-08-11 Cinnamon pass that first set explicit titlebar padding.
   Confirmed via CDP's CSS.getMatchedStylesForNode, not guessed. */
html:not(.in-iframe) div:not(#div_top):not(#div_left):not(#div_bottom):not(#div_right):not(#div_loading):not(#loading_splash):not(#session_warn_overlay):not(#dlg_overlay):not(#cleared_modal):not(#media_viewer_overlay):not(#fs_action_overlay):not(#scifi_splash):not(#admin_tab_editor):not(#editor_page_wrap):not(#ide_monaco):not(#fs_browser):not(#fs_toolbar):not(#fs_body):not(#fs_nav):not(#fs_pane):not(#fm_top):not(#fm_main):not(#fm_tree):not(#fm_view):not(#fm_view_head):not(#fm_view_body):not(#media_browser):not(#media_toolbar):not(#media_body):not(#media_tree):not(#media_pane):not(#media_props_form):not(#iframe_right):not(#editor_overflow_menu):not(.lb-window-titlebar):not(#lb-cmdpal-box):not(#lb-cmdpal-list):not(.lb-cmdpal-row):not(.lb-shortcuts-help-row):not(#lb-snapassist-row):not(.lb-snapassist-card):not(.lb-desktop-icon):not(.lb-desktop-icon-glyph):not(.lb-desktop-icon-label):not(#lb-wingpanel):not(.lb-wingpanel-left):not(.lb-wingpanel-center):not(.lb-wingpanel-right):not(#lb-taskbar-windows):not(#lb-taskbar-center):not(#lb-system-tray):not(#lb-desktop-switcher):not(#lb-show-desktop):not(#lb-layout-picker-overlay):not(#lb-layout-picker-box):not(#editor_posts_panel):not(#write_shell):not(#write_body):not(#write_list_pane):not(#write_editor_pane):not(#journal_shell):not(#journal_body):not(#journal_list_pane):not(#journal_entry_pane):not(#journal_entry_detail) {
    padding: 0.5rem;
}

/* ── Glass panel system (2026-08-19, was flat) ───────────────────────
   Was a liquid-glass treatment (16%-opacity background + 24px backdrop
   blur + inset sheen highlight + a gradient ::before overlay), flattened
   during the Pantheon pass, now revived — close to that documented old
   spec but less transparent (glass tier 1, ~88% opacity vs the old 16%)
   since "broad glass" here means more surfaces getting it, not each one
   being MORE see-through than before; these are real content surfaces
   (Wall entries included), not floating chrome, so text contrast still
   matters more than on tier-2 surfaces. */
.glass-panel,
.ui-surface,
.container,
header,
nav,
#div_right,
.rco_div,
.wall-entry {
    background: color-mix(in srgb, var(--bg_surface) 88%, transparent) !important;
    backdrop-filter: var(--glass-blur-1) !important;
    -webkit-backdrop-filter: var(--glass-blur-1) !important;
    border: 1px solid var(--border) !important;
    border-radius: var(--theme-radius) !important;
    position: relative;
    overflow: hidden;
    padding: 25px;
    margin-bottom: 30px;
    box-sizing: border-box;
    box-shadow: var(--elevation-2) !important;
    animation: raise_up_glass 1.0s cubic-bezier(0.22, 1, 0.36, 1) both !important;
}

/* ── .lb-shell-bar / .lb-shell-sidebar — page-shell chrome (#div_top,
   #div_left, #div_bottom). Same flat treatment as the panel system
   above (was previously provided by listing these IDs directly in that
   selector group), now under their own LBKit-owned classes since these
   are singleton shell elements, not a repeatable content pattern. Every
   property here is copied 1:1 from the panel system so existing
   ID-scoped overrides for #div_top/#div_left/#div_bottom keep winning
   exactly as before — nothing else about their layout changes. */
.lb-shell-bar,
.lb-shell-sidebar,
.lb-window-chrome,
.lb-taskbar-chrome {
    background: var(--bg_surface) !important;
    border: 1px solid var(--border) !important;
    border-radius: var(--theme-radius) !important;
    position: relative;
    overflow: hidden;
    padding: 25px;
    margin-bottom: 30px;
    box-sizing: border-box;
    animation: raise_up_glass 1.0s cubic-bezier(0.22, 1, 0.36, 1) both !important;
}

/* Suppress ::before on structural panel types that have their own decorations */
.container::before,
header::before,
nav::before,
#div_right::before,
.rco_div::before,
.wall-entry::before,
.lb-shell-bar::before,
.lb-shell-sidebar::before {
    display: none !important;
}

/* Corner bracket removed for airy look */
.glass-panel::after,
.ui-surface::after {
    display: none !important;
}

/* Hover: no shadow lift — airy panels stay flat */
.glass-panel:hover,
.ui-surface:hover,
.container:hover,
header:hover,
nav:hover,
#div_right:hover,
.rco_div:hover,
.wall-entry:hover,
.lb-shell-bar:hover,
.lb-shell-sidebar:hover {
    box-shadow: none !important;
}

/* ── Header auto-sizing and centering ────────────────────────────
 * Override the glass-panel overflow:hidden so header content can wrap
 * instead of clipping at large font sizes. */
header {
    overflow: visible !important;
    height: auto !important;
    min-height: 3em !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    justify-content: flex-start !important;
    text-align: left !important;
    margin-bottom: 0 !important;
}

/* ── Flat corners — all divs and iframes ──────────────────────── */
div, iframe {
}

/* ── Thin border on all images and videos ──────────────────────── */
img, video {
}

/* ── Native video/audio elements ──────────────────────────────── */
video {
    display: block !important;
    max-width: 100% !important;
    border-radius: var(--theme-radius-xs) !important;
    background: var(--bg_dark) !important;
    border: 1px solid color-mix(in srgb, var(--color_border) 45%, transparent) !important;
    box-shadow: none !important;
    margin: 5px !important;
    padding: 4px !important;
    object-fit: contain !important;
}

audio {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    border-radius: var(--theme-radius-xs) !important;
    border: 1px solid color-mix(in srgb, var(--color_border) 45%, transparent) !important;
    box-shadow: none !important;
    margin: 5px !important;
    padding: 4px 8px !important;
}

/* ── Panel entrance animation ─────────────────────────────────────
 * Cinnamon/GTK pass (2026-08-11): neutralized to a no-op — Cinnamon/
 * Mint-Y doesn't animate panel/dialog/popover/card entrances at all,
 * they just appear. Redefining the shared keyframe itself (rather than
 * hunting down every individual `animation: raise_up_glass ...` call
 * site across panels/dialogs/popovers/cards) reaches every consumer at
 * once; any per-element animation-delay from a stagger loop elsewhere
 * still applies, it just delays an instant appearance now instead of a
 * delayed fade-up-and-scale. */
@keyframes raise_up_glass {
    0% {
        opacity:   1;
        transform: none;
    }
    100% {
        opacity:   1;
        transform: none;
    }
}

/* ── Neighbour de-focus (softened) ────────────────────────────── */
body:has([data-tactical-id=unit-01]:hover) [data-tactical-id=unit-01]:not(:hover) {
    filter:    grayscale(60%) !important;
    opacity:   0.65;
    transform: scale(0.96) !important;
}

body:has(.wall-entry:hover) .wall-entry:not(:hover),
body:has(.glass-panel:hover) .glass-panel:not(:hover) {
    filter:    grayscale(35%) !important;
    opacity:   0.75;
    transform: scale(0.98) !important;
}

/* ── Anchors ──────────────────────────────────────────────────── */
a, a:visited {
    color: var(--color_text_normal) !important;
    text-decoration: none;
    transition:
        color        0.3s cubic-bezier(0.25, 0.8, 0.25, 1) !important;
}

a:hover {
    color: var(--color_text_stressed) !important;
}

/* ══════════════════════════════════════════════════════════════════
   FORM CONTROLS — unified design system
   Visual language: compact, flat, primary-tinted borders; thin drop shadow.
   Element selectors here carry !important to beat browser UA defaults.
   Class selectors (0,1,0,0 specificity) beat element selectors (0,0,0,1)
   even when both carry !important, so per-page classes (.btn-primary,
   .wall-tag-btn, .lb-voice-play, etc.) win without further escalation.
   ══════════════════════════════════════════════════════════════════ */

/* ── Box-model / font reset ─────────────────────────────────────── */
input,
button,
select,
textarea {
    box-sizing: border-box !important;
    font-family: inherit !important;
    font-size: 1rem !important;
    vertical-align: middle !important;
}

/* ── Buttons ────────────────────────────────────────────────────── */
button,
input[type=submit],
input[type=button],
input[type=reset],
.lb-btn {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 4px !important;
    width: auto !important;
    min-width: 0 !important;
    min-height: 32px !important;
    padding: 0 16px !important;
    margin: 5px !important;
    /* Cinnamon/Mint-Y pass (2026-08-11): GTK buttons are flat-filled at
       rest, not a transparent ghost outline — was `transparent` +
       16%-opacity border.
       macOS pass (2026-08-28): rest/hover/active step-ladder softened
       (was 8/14/22%) — real macOS control state changes are subtle,
       this GTK-era ladder read as fairly saturated by comparison. */
    background: color-mix(in srgb, var(--color_primary) 6%, var(--bg_raised)) !important;
    border: 1px solid color-mix(in srgb, var(--color_primary) 14%, transparent) !important;
    border-radius: var(--theme-radius-sm) !important;
    color: var(--text) !important;
    cursor: pointer !important;
    font-size: 0.85rem !important;
    font-weight: 600 !important;
    /* Was 0.10em uppercase tracking — every button on the site read as a
       shouty HUD label; this is closer to normal button text. */
    letter-spacing: 0.02em !important;
    text-transform: none !important;
    text-align: center !important;
    line-height: normal !important;
    white-space: nowrap !important;
    box-shadow: none !important;
    clip-path: none !important;
    flex-shrink: 0 !important;
    box-sizing: border-box !important;
    transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease !important;
}

button:hover,
input[type=submit]:hover,
input[type=button]:hover,
input[type=reset]:hover,
.lb-btn:hover {
    border-color: color-mix(in srgb, var(--color_primary) 55%, transparent) !important;
    color: var(--color_primary) !important;
    /* Escalates from the new flat resting fill above, not from
       transparent. */
    background: color-mix(in srgb, var(--color_primary) 14%, var(--bg_raised)) !important;
    box-shadow: none !important;
    transform: none !important;
    animation: none !important;
}

button:active,
input[type=submit]:active,
input[type=button]:active,
input[type=reset]:active,
.lb-btn:active {
    background: color-mix(in srgb, var(--color_primary) 22%, var(--bg_raised)) !important;
    box-shadow: none !important;
    transform: none !important;
}

button:focus-visible,
input[type=submit]:focus-visible,
input[type=button]:focus-visible,
input[type=reset]:focus-visible,
.lb-btn:focus-visible {
    /* Cinnamon/GTK pass (2026-08-11): a solid border-color change, not a
       separate glow ring — was `box-shadow: 0 0 0 2px ...`. */
    outline: none !important;
    border-color: var(--color_primary) !important;
}

button:disabled,
button[disabled],
input[type=submit]:disabled,
input[type=button]:disabled,
input[type=reset]:disabled,
.lb-btn:disabled,
.lb-btn[disabled] {
    opacity: 0.4 !important;
    cursor: not-allowed !important;
    pointer-events: none !important;
}

button:disabled,
button[disabled],
input[type=submit]:disabled,
input[type=button]:disabled,
input[type=reset]:disabled,
.lb-btn:disabled,
.lb-btn[disabled] {
    box-shadow: none !important;
}

/* Touch devices: override the min-height: 0 !important set above.
   Same specificity but later in source order, so this wins. */
@media (pointer: coarse) {
    button, input[type="button"], input[type="submit"], input[type="reset"],
    select, [role="button"] {
        min-height: 44px !important;
    }
}

/* ── Text inputs / select ───────────────────────────────────────── */
input[type=text],
input[type=password],
input[type=email],
input[type=number],
input[type=search],
input[type=url],
input[type=tel],
input[type=date],
input[type=time],
input[type=datetime-local],
input[type=month],
input[type=week],
select,
.lb-input,
.lb-select {
    display: block !important;
    width: 100% !important;
    min-height: 32px !important;
    padding: 7px 14px !important;
    margin: 5px !important;
    background: var(--theme-input-bg) !important;
    border-radius: var(--theme-radius-sm) !important;
    color: var(--text) !important;
    font-size: 0.9rem !important;
    font-weight: 500 !important;
    text-transform: none !important;
    letter-spacing: 0.02em !important;
    text-align: left !important;
    border: var(--theme-input-border) !important;
    box-shadow: none !important;
    box-sizing: border-box !important;
    line-height: 1.4 !important;
    transition: border-color 0.15s ease !important;
}

/* Touch devices: raise the 28px baseline to the 44px touch-target minimum.
   textarea is deliberately excluded — it sizes itself via rows/content,
   same rationale as the coarse-pointer baseline above (~391). */
@media (pointer: coarse) {
    input[type=text],
    input[type=password],
    input[type=email],
    input[type=number],
    input[type=search],
    input[type=url],
    input[type=tel],
    input[type=date],
    input[type=time],
    input[type=datetime-local],
    input[type=month],
    input[type=week],
    .lb-input {
        min-height: 44px !important;
    }
}

input[type=text]:hover,
input[type=password]:hover,
input[type=email]:hover,
input[type=number]:hover,
input[type=search]:hover,
input[type=url]:hover,
input[type=tel]:hover,
input[type=date]:hover,
input[type=time]:hover,
input[type=datetime-local]:hover,
input[type=month]:hover,
input[type=week]:hover,
select:hover,
.lb-input:hover,
.lb-select:hover {
    background: var(--theme-input-bg) !important;
}

input[type=text]:focus,
input[type=password]:focus,
input[type=email]:focus,
input[type=number]:focus,
input[type=search]:focus,
input[type=url]:focus,
input[type=tel]:focus,
input[type=date]:focus,
input[type=time]:focus,
input[type=datetime-local]:focus,
input[type=month]:focus,
input[type=week]:focus,
select:focus,
.lb-input:focus,
.lb-select:focus {
    /* Cinnamon/GTK pass (2026-08-11): solid border-color change only, no
       separate glow ring — was a 65%-tint border-color plus a 2px
       box-shadow glow on top of it. */
    outline: none !important;
    background: var(--theme-input-bg) !important;
    border-color: var(--color_primary) !important;
}

/* ── Select specifics ───────────────────────────────────────────── */
select,
.lb-select {
    cursor: pointer !important;
    padding-right: 28px !important;
    /* Custom slim chevron replaces the OS-native dropdown arrow (which
       varies wildly in size/style per browser/platform) — a small flat
       triangle is closer to macOS's own minimal combo-box indicator than
       leaving the native widget in place. */
    -webkit-appearance: none !important;
    appearance: none !important;
    background-image: linear-gradient(45deg, transparent 50%, color-mix(in srgb, var(--color_primary) 70%, transparent) 50%),
                       linear-gradient(135deg, color-mix(in srgb, var(--color_primary) 70%, transparent) 50%, transparent 50%) !important;
    background-position: right 15px center, right 10px center !important;
    background-size: 5px 5px, 5px 5px !important;
    background-repeat: no-repeat !important;
}

/* ── Textarea ───────────────────────────────────────────────────── */
textarea,
.lb-textarea {
    display: block !important;
    width: 100% !important;
    min-height: 0 !important;
    padding: 10px 18px !important;
    margin: 5px !important;
    background: var(--theme-input-bg) !important;
    border-radius: var(--theme-radius-sm) !important;
    color: var(--text) !important;
    font-size: 0.9rem !important;
    font-weight: 500 !important;
    text-transform: none !important;
    letter-spacing: 0.02em !important;
    text-align: left !important;
    border: var(--theme-input-border) !important;
    box-shadow: none !important;
    box-sizing: border-box !important;
    resize: none !important;
    line-height: 1.5 !important;
    transition: border-color 0.15s ease !important;
}

textarea:hover,
.lb-textarea:hover {
    background: var(--theme-input-bg) !important;
}

textarea:focus,
.lb-textarea:focus {
    /* Cinnamon/GTK pass (2026-08-11): solid border-color change only, no
       separate glow ring — was a 65%-tint border-color plus a 2px
       box-shadow glow on top of it. */
    outline: none !important;
    background: var(--theme-input-bg) !important;
    border-color: var(--color_primary) !important;
}

/* ── Checkboxes & radios — native appearance ────────────────────── */
input[type=checkbox],
input[type=radio] {
    -webkit-appearance: auto !important;
    appearance: auto !important;
    display: inline !important;
    width: auto !important;
    min-width: 0 !important;
    height: auto !important;
    min-height: 0 !important;
    margin: 0 6px 0 0 !important;
    padding: 0 !important;
    background: none !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    overflow: visible !important;
    text-align: initial !important;
    accent-color: var(--color_primary);
    cursor: pointer;
    vertical-align: middle;
    flex: 0 0 auto;
}

input[type=checkbox]:focus,
input[type=radio]:focus {
    background: none !important;
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--color_primary) 45%, transparent) !important;
}

/* ── Range — native with accent colour ─────────────────────────── */
input[type=range] {
    -webkit-appearance: auto !important;
    appearance: auto !important;
    display: inline-block !important;
    width: auto !important;
    min-height: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    accent-color: var(--color_primary);
    cursor: pointer;
}

/* ── New App-Studio-control-set additions (LBKit.list_box/frame/picture_box/
   timer_glyph/scrollbar/shape/line) — added for App Studio's toolbox. ── */
.lb-list-box {
    display: block !important;
    width: 100% !important;
    max-height: 160px !important;
    overflow-y: auto !important;
    background: var(--theme-input-bg) !important;
    border: var(--theme-input-border) !important;
    border-radius: 8px !important;
    box-sizing: border-box !important;
    padding: 2px !important;
}
.lb-list-box-item {
    padding: 4px 10px;
    font-size: 0.9rem;
    border-radius: 6px;
    cursor: pointer;
    user-select: none;
}
.lb-list-box-item:hover {
    background: color-mix(in srgb, var(--color_primary) 10%, transparent) !important;
}
.lb-list-box-item.selected {
    background: color-mix(in srgb, var(--color_primary) 25%, transparent) !important;
    color: var(--color_primary) !important;
}

.lb-frame {
    position: relative;
    display: block;
    border: 1px solid color-mix(in srgb, var(--color_border) 55%, transparent);
    border-radius: 6px;
    box-sizing: border-box;
    padding: 14px 8px 8px;
}
.lb-frame-caption {
    position: absolute;
    top: -9px;
    left: 10px;
    padding: 0 6px;
    background: var(--color_bg, var(--bg));
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--color_text_dim);
}

.lb-picture-box {
    display: block !important;
    background-color: var(--theme-input-bg) !important;
    background-size: cover !important;
    background-position: center !important;
    background-repeat: no-repeat !important;
    border: var(--theme-input-border) !important;
    border-radius: 6px !important;
    box-sizing: border-box !important;
}

.lb-timer-glyph {
    display: inline-flex !important;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    width: 100%;
    height: 100%;
    background: color-mix(in srgb, var(--color_primary) 12%, transparent) !important;
    border: 1px dashed color-mix(in srgb, var(--color_primary) 45%, transparent);
    border-radius: 6px;
    box-sizing: border-box;
}
.lb-timer-glyph-icon {
    font-size: 1rem;
    line-height: 1;
}
.lb-timer-glyph-label {
    font-size: 0.65rem;
    color: var(--color_text_dim);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}

.lb-scrollbar {
    accent-color: var(--color_primary);
}
.lb-scrollbar-horizontal {
    width: 100% !important;
}
.lb-scrollbar-vertical {
    width: 100% !important;
    height: 100% !important;
    writing-mode: vertical-lr !important;
    direction: rtl !important;
}

.lb-shape {
    display: block;
    width: 100%;
    height: 100%;
    box-sizing: border-box;
    border-style: solid;
}
.lb-shape-square,
.lb-shape-roundedSquare {
    aspect-ratio: 1 / 1;
}

.lb-line {
    display: block !important;
    width: 100% !important;
    height: 100% !important;
    overflow: visible !important;
}

.lb-web-frame,
.lb-youtube-embed {
    position: relative;
    display: block !important;
    width: 100% !important;
    height: 100% !important;
    background-color: var(--theme-input-bg) !important;
    border: var(--theme-input-border) !important;
    border-radius: 6px !important;
    box-sizing: border-box !important;
    overflow: hidden !important;
}
.lb-web-frame-iframe,
.lb-youtube-embed-iframe {
    display: block;
    width: 100%;
    height: 100%;
    border: none;
}
.lb-web-frame-empty,
.lb-youtube-embed-empty {
    display: none;
    position: absolute;
    inset: 0;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 8px;
    font-size: 0.78rem;
    color: var(--color_text_dim);
    background: var(--theme-input-bg);
}
.lb-web-frame-is-empty .lb-web-frame-empty,
.lb-youtube-embed-is-empty .lb-youtube-embed-empty {
    display: flex;
}

/* ── File input ─────────────────────────────────────────────────── */
input[type=file] {
    display: inline-block !important;
    width: auto !important;
    min-height: 0 !important;
    padding: 0 !important;
    margin: 5px !important;
    background: transparent !important;
    box-shadow: none !important;
    cursor: pointer !important;
    color: var(--color_text_normal) !important;
    text-align: left !important;
}

/* ── Colour picker ──────────────────────────────────────────────── */
input[type=color] {
    -webkit-appearance: none !important;
    appearance: none !important;
    display: inline-block !important;
    width: 36px !important;
    height: 24px !important;
    min-height: 0 !important;
    padding: 2px !important;
    margin: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    box-shadow: none !important;
    cursor: pointer !important;
}

/* ── :focus-visible ─────────────────────────────────────────────── */
:focus-visible {
}

/* ── Typed [hidden] — beats our own display:…!important on form elements
   Plain [hidden] is (0,0,1,0); our typed selectors like input[type=file]
   are (0,0,1,1). These typed variants match that specificity and appear
   later in the file, so cascade order also favours them. */
input[hidden],
select[hidden],
textarea[hidden],
button[hidden],
video[hidden],
audio[hidden] {
    display: none !important;
}

/* ══════════════════════════════════════════════════════════════════
   STANDARD FORM CONTROL MODIFIER CLASSES
   Visual base is driven by the element-level selectors above.
   These modifier classes layer accent-fill, destructive, ghost, or
   block-width variants on top of the base element style.
   ══════════════════════════════════════════════════════════════════ */

/* Accent-filled primary action */
.lb-btn-primary {
    border-color: var(--color_primary) !important;
    color: var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 12%, transparent) !important;
}
/* Destructive action */
.lb-btn-danger {
    border-color: color-mix(in srgb, var(--color_secondary) 60%, transparent) !important;
    color: var(--color_secondary) !important;
    background: transparent !important;
}
.lb-btn-danger:hover {
    border-color: var(--color_secondary) !important;
    background: color-mix(in srgb, var(--color_secondary) 10%, transparent) !important;
    color: var(--color_secondary) !important;
}
/* Borderless ghost — for icon/emoji/compact actions. Explicit
   `background: transparent` (2026-08-11) — the base .lb-btn rule's
   resting fill is no longer transparent, so "ghost" needs to say so
   itself now instead of getting it for free. */
.lb-btn-ghost {
    border-color: transparent !important;
    background: transparent !important;
    box-shadow: none !important;
    opacity: 0.6;
}
.lb-btn-ghost:hover {
    border-color: transparent !important;
    background: transparent !important;
    box-shadow: none !important;
    opacity: 1;
}
/* Icon-only — flat rounded-square, compact, for icon/SVG-only buttons
   (share, edit, permalink, etc.) instead of hand-rolling a bespoke
   page-specific class (e.g. .wall-action-btn). Cinnamon/Mint-Y pass
   (2026-08-11): was a perfect circle with a hover lift — GTK icon
   buttons are flat squares/slightly-rounded, tint on hover, no lift. */
.lb-btn-icon {
    width: 36px !important;
    height: 36px !important;
    min-height: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    border-radius: var(--theme-radius-sm) !important;
    flex-shrink: 0;
    transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease !important;
}
.lb-btn-icon svg {
    width: 16px;
    height: 16px;
    flex-shrink: 0;
}
.lb-btn-icon:hover {
    background: color-mix(in srgb, var(--color_primary) 12%, transparent) !important;
    border-color: color-mix(in srgb, var(--color_primary) 45%, transparent) !important;
}
/* Full-width block */
.lb-btn-block {
    display: flex !important;
    width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   UI TOOLKIT COMPONENTS — lb-badge, lb-tag, lb-spinner, lb-empty,
   lb-divider, lb-status, lb-kbd, lb-card, lb-table, lb-flash-warn.
   All use palette variables so theme rotation applies automatically.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Badge — inline pill label for counts, roles, severity ──────── */
.lb-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 2px 8px;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    line-height: 1;
    white-space: nowrap;
    border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
    background: color-mix(in srgb, var(--accent) 14%, transparent);
    color: var(--accent);
    border-radius: 999px;
}
.lb-badge-primary {
    border-color: color-mix(in srgb, var(--color_primary) 40%, transparent);
    background:   color-mix(in srgb, var(--color_primary) 14%, transparent);
    color: var(--color_primary);
}
.lb-badge-success {
    border-color: color-mix(in srgb, var(--info) 40%, transparent);
    background:   color-mix(in srgb, var(--info) 14%, transparent);
    color: var(--info);
}
.lb-badge-warn {
    border-color: color-mix(in srgb, var(--warn) 40%, transparent);
    background:   color-mix(in srgb, var(--warn) 14%, transparent);
    color: var(--warn);
}
.lb-badge-danger {
    border-color: color-mix(in srgb, var(--error) 40%, transparent);
    background:   color-mix(in srgb, var(--error) 14%, transparent);
    color: var(--error);
}
.lb-badge-neutral {
    border-color: color-mix(in srgb, var(--color_text_dim) 28%, transparent);
    background:   color-mix(in srgb, var(--color_text_dim) 10%, transparent);
    color: var(--color_text_dim);
}

/* ── Tag / chip — category label, optionally removable ──────────── */
.lb-tag {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 3px 9px;
    font-size: 0.78rem;
    border: 1px solid color-mix(in srgb, var(--border) 75%, transparent);
    background: color-mix(in srgb, var(--bg_raised) 55%, transparent);
    color: var(--color_text_normal);
    white-space: nowrap;
    border-radius: 999px;
}
.lb-tag-remove {
    cursor: pointer;
    opacity: 0.55;
    line-height: 1;
    padding: 0 1px;
    background: transparent !important;
    border: none !important;
    color: inherit;
    font-size: 1em;
    height: auto !important;
    min-height: 0 !important;
}
.lb-tag-remove:hover { opacity: 1 !important; }

/* ── Spinner — animated CSS ring ────────────────────────────────── */
@keyframes lb-spin { to { transform: rotate(360deg); } }

.lb-spinner {
    display: inline-block;
    width: 16px;
    height: 16px;
    border: 2px solid color-mix(in srgb, var(--accent) 22%, transparent);
    border-top-color: var(--accent);
    border-radius: 50%;
    animation: lb-spin 0.7s linear infinite;
    vertical-align: middle;
    flex-shrink: 0;
}
.lb-spinner-lg {
    width: 28px;
    height: 28px;
    border-width: 3px;
}

/* ── Empty state — centred placeholder for zero-data panels ─────── */
.lb-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 48px 24px;
    color: var(--color_text_dim);
    font-size: 0.88rem;
    text-align: center;
    opacity: 0.6;
}
.lb-empty-icon {
    font-size: 2.2rem;
    line-height: 1;
    opacity: 0.5;
}

/* ── Section divider — full-width rule with optional centred label ─ */
.lb-divider {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 20px 0;
    color: var(--color_text_dim);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    opacity: 0.55;
}
.lb-divider::before,
.lb-divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: color-mix(in srgb, var(--border) 50%, transparent);
}
.lb-divider:empty::after { display: none; }

/* ── Status indicator — coloured dot + label ─────────────────────── */
.lb-status {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 0.8rem;
    color: var(--color_text_dim);
}
.lb-status::before {
    content: '';
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--color_text_dim);
    flex-shrink: 0;
    opacity: 0.5;
}
.lb-status-online::before {
    background: var(--info);
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--info) 22%, transparent);
    opacity: 1;
}
.lb-status-warn::before   { background: var(--warn);  opacity: 1; }
.lb-status-error::before  { background: var(--error); opacity: 1; }
.lb-status-offline::before { opacity: 0.3; }

/* ── .lb-status-corner — overlays the dot in the bottom-right corner of a
   position:relative parent (e.g. .lb-avatar), instead of sitting inline
   before a text label. Several pages (chat/dm presence, bbs status)
   used to reimplement this exact "dot badge on an avatar" pattern
   independently. */
.lb-status-corner {
    position: absolute;
    right: -1px;
    bottom: -1px;
    gap: 0;
}
.lb-status-corner::before {
    width: 10px;
    height: 10px;
    border: 2px solid var(--bg_base);
    box-sizing: content-box;
}

/* ── Keyboard key chip ───────────────────────────────────────────── */
.lb-kbd {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 2px 5px;
    min-width: 20px;
    font-family: monospace !important;
    font-size: 0.72rem !important;
    border: 1px solid color-mix(in srgb, var(--border) 65%, transparent);
    border-bottom-width: 2px;
    background: color-mix(in srgb, var(--bg_raised) 65%, transparent);
    color: var(--color_text_dim);
    border-radius: 4px;
    white-space: nowrap;
}

/* ── Card — bordered content block ──────────────────────────────── */
.lb-card {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 16px;
    border: 1px solid color-mix(in srgb, var(--border) 65%, transparent);
    border-left: 3px solid color-mix(in srgb, var(--color_primary) 50%, transparent);
    /* Was already 50% translucent but with no backdrop-filter (a plain
       see-through tint, not frosted) and box-shadow:none. Given real
       glass tier 1 + elevation-1 depth (2026-08-19). */
    background: color-mix(in srgb, var(--bg_raised) 50%, transparent);
    backdrop-filter: var(--glass-blur-1);
    -webkit-backdrop-filter: var(--glass-blur-1);
    border-radius: var(--theme-radius);
    box-shadow: var(--elevation-1);
}
/* ── .lb-card-glass — revived (2026-08-19), was flattened to a plain
   opaque surface. See the panel system's own comment just above for why
   tier 1 here is less transparent than the old documented 16%-opacity
   spec — same reasoning applies to every content surface in this pass. */
.lb-card-glass {
    border: 1px solid var(--border) !important;
    background: color-mix(in srgb, var(--bg_surface) 88%, transparent) !important;
    backdrop-filter: var(--glass-blur-1) !important;
    -webkit-backdrop-filter: var(--glass-blur-1) !important;
    box-shadow: var(--elevation-2) !important;
    position: relative;
    overflow: hidden;
    animation: raise_up_glass 1.0s cubic-bezier(0.22, 1, 0.36, 1) both !important;
}
/* .weather-container has no layout CSS of its own — it relied entirely on
   .glass-panel's padding/margin (unlike #form_editor/#login/#wall-sticky-
   header, which already override those at ID scope). Preserved here so
   swapping to .lb-card-glass doesn't lose them. */
.weather-container {
    padding: 25px;
    margin-bottom: 30px;
    box-sizing: border-box;
}
.lb-card-title {
    /* Was a flat 0.82rem (reached ~18px at max root font-size) —
       migrated onto the shared --fs-* scale (2026-08-19), see that
       token's own comment in :root. --fs-sm's 14px ceiling shrank this
       too much at large viewports on first pass; --fs-base's 16px
       ceiling is a closer match. */
    font-size: var(--fs-base);
    font-weight: 700;
    /* Was uppercase — reads as a real title now, not a HUD-style label. */
    letter-spacing: 0.02em;
    text-transform: none;
    color: var(--color_text_stressed);
}
.lb-card-body {
    font-size: 0.9rem;
    color: var(--color_text_normal);
    line-height: 1.55;
}
.lb-card-footer {
    display: flex;
    gap: 8px;
    align-items: center;
    border-top: 1px solid color-mix(in srgb, var(--border) 35%, transparent);
    padding-top: 10px;
    margin-top: 4px;
}

/* ── Data table ──────────────────────────────────────────────────── */
.lb-table-wrap { overflow-x: auto; }
.lb-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.875rem;
}
.lb-table th {
    text-align: left;
    padding: 8px 12px;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--color_text_dim);
    border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
    white-space: nowrap;
}
.lb-table td {
    padding: 9px 12px;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 22%, transparent);
    color: var(--color_text_normal);
    vertical-align: middle;
}
.lb-table tr:last-child td { border-bottom: none; }
.lb-table tbody tr { transition: background 0.1s; }
.lb-table tbody tr:hover td {
    background: color-mix(in srgb, var(--color_primary) 5%, transparent);
}

/* ── Flash message: warning variant (info/ok and error already exist) */
.lb-flash-warn {
    background: color-mix(in srgb, var(--bg_dark) 90%, transparent) !important;
    border-left: 3px solid var(--warn) !important;
    box-shadow: none !important;
    padding: 10px 16px !important;
    border-radius: 0 8px 8px 0 !important;
}


/* ── .lb-file-trigger ───────────────────────────────────────────── */
/* Wrapper created by LBKit.file_trigger(): hidden <input type=file>
   + visible styled button. Inline-flex so it flows with surrounding text. */
.lb-file-trigger {
    display: inline-flex !important;
    align-items: center !important;
    gap: 8px !important;
    vertical-align: middle !important;
}
.lb-file-trigger input[type="file"] {
    /* hidden natively via [hidden]; belt-and-suspenders */
    display: none !important;
}

/* ── textarea.lb-input ── height override (textareas need auto, not 38px) */
textarea.lb-input {
    height: auto !important;
    min-height: 80px !important;
    padding: 10px 18px !important;
    resize: vertical !important;
}

/* ── .lb-page-header class system ─────────────────────────────────
   The one canonical page/section header layout — every page using
   LBKit.page_header() (or the equivalent static markup shape) gets this
   structure instead of a bespoke per-page reimplementation. */
.lb-page-header {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 12px;
    flex-shrink: 0;
    height: auto;
    box-sizing: border-box;
    padding: 0 18px;
    background: transparent !important;
}
.lb-page-header-left {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}
.lb-page-header-right {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-left: auto;
    flex-shrink: 0;
}
.lb-page-title {
    font-size: 1rem !important;
    font-weight: 700 !important;
    /* Was uppercase — this is a real page title, not a HUD-style label. */
    letter-spacing: 0.02em !important;
    text-transform: none !important;
    color: var(--color_text_normal) !important;
    line-height: 1.2 !important;
    margin: 0 !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
}
.lb-page-subtitle {
    font-size: 0.72rem !important;
    color: var(--color_text_dim, var(--text_dim)) !important;
    letter-spacing: 0.04em !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
}

/* ── .lb-toast ────────────────────────────────────────────────────
   Dismissable inline notice banner; distinct from lb-flash in that
   it carries an explicit × close button and optional auto-dismiss. */
.lb-toast {
    display: flex !important;
    align-items: center !important;
    gap: 10px !important;
    padding: 10px 14px !important;
    border: 1px solid color-mix(in srgb, var(--color_primary) 40%, transparent) !important;
    background: color-mix(in srgb, var(--bg_raised) 88%, transparent) !important;
    color: var(--color_text_normal) !important;
    font-size: 0.82rem !important;
    letter-spacing: 0.02em !important;
    border-radius: var(--theme-radius-sm) !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
}
.lb-toast-ok    { border-color: color-mix(in srgb, var(--color_ok,    #4caf50) 50%, transparent) !important; }
.lb-toast-warn  { border-color: color-mix(in srgb, var(--color_warn,  #ff9800) 50%, transparent) !important; }
.lb-toast-error { border-color: color-mix(in srgb, var(--color_error, #f44336) 50%, transparent) !important; }
.lb-toast-msg {
    flex: 1 !important;
    min-width: 0 !important;
}
.lb-toast-close {
    background: none !important;
    border: none !important;
    color: var(--color_text_dim, var(--text_dim)) !important;
    cursor: pointer !important;
    font-size: 1rem !important;
    padding: 2px 4px !important;
    line-height: 1 !important;
    height: auto !important;
    min-height: 0 !important;
    flex-shrink: 0 !important;
}
.lb-toast-close:hover { color: var(--color_text_normal) !important; }

/* ── .lb-toast-stack ─────────────────────────────────────────────
   Fixed-position bottom-right notification stack for toasts that
   fire on their own (e.g. incoming-message alerts) rather than being
   inserted inline near the action that triggered them. */
.lb-toast-stack {
    position: fixed;
    bottom: 1rem;
    right: 1rem;
    z-index: 9999;
    display: flex;
    flex-direction: column;
    gap: .45rem;
    pointer-events: none;
}
.lb-toast-stack .lb-toast {
    pointer-events: auto;
    max-width: 300px;
    opacity: 0;
    transform: translateX(120%);
    transition: opacity .25s, transform .25s;
}
.lb-toast-stack .lb-toast.show {
    opacity: 1;
    transform: translateX(0);
}
.lb-toast-from { color: var(--color_primary) !important; font-weight: 600; margin-bottom: .15rem; }
.lb-toast-subj { color: var(--color_text_dim, var(--text_dim)); font-size: .78rem; }
@media (max-width: 600px) {
    .lb-toast-stack { right: .5rem; left: .5rem; bottom: .5rem; }
    .lb-toast-stack .lb-toast { max-width: 100%; }
}

/* ── .lb-progress ─────────────────────────────────────────────────
   Linear progress bar track + fill + optional label. */
.lb-progress {
    display: flex !important;
    flex-direction: column !important;
    gap: 6px !important;
    width: 100% !important;
}
.lb-progress-bar {
    width: 100% !important;
    height: 4px !important;
    background: color-mix(in srgb, var(--color_primary) 20%, transparent) !important;
    border-radius: 999px !important;
    overflow: hidden !important;
}
.lb-progress-fill {
    height: 100% !important;
    background: var(--color_primary) !important;
    transition: width 0.25s ease !important;
    border-radius: 999px !important;
}
.lb-progress-label {
    font-size: 0.75rem !important;
    color: var(--color_text_dim, var(--text_dim)) !important;
    letter-spacing: 0.04em !important;
}

/* ── .lb-crumb ────────────────────────────────────────────────────
   Breadcrumb / back-navigation trail. */
.lb-crumb {
    display: flex !important;
    align-items: center !important;
    gap: 10px !important;
    padding: 8px 20px !important;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 60%, transparent) !important;
    background: transparent !important;
    min-height: 0 !important;
    flex-shrink: 0 !important;
}
.lb-crumb-back {
    background: none !important;
    border: none !important;
    color: var(--color_primary) !important;
    font-size: 0.8rem !important;
    cursor: pointer !important;
    padding: 4px 8px !important;
    letter-spacing: 0.04em !important;
    height: auto !important;
    min-height: 0 !important;
    white-space: nowrap !important;
}
.lb-crumb-back:hover { text-decoration: underline !important; }
.lb-crumb-title {
    flex: 1 !important;
    font-size: 0.85rem !important;
    font-weight: 600 !important;
    letter-spacing: 0.04em !important;
    color: var(--color_text_normal) !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
}
.lb-crumb-right {
    display: flex !important;
    align-items: center !important;
    gap: 6px !important;
    flex-shrink: 0 !important;
}

/* ── .lb-tabs ─────────────────────────────────────────────────────
   Horizontal tab button bar + panel visibility system. */
.lb-tabs {
    display: flex !important;
    align-items: center !important;
    gap: 2px !important;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 60%, transparent) !important;
    padding: 0 4px !important;
    background: transparent !important;
    flex-shrink: 0 !important;
}
.lb-tab-btn {
    background: none !important;
    border: none !important;
    border-bottom: 2px solid transparent !important;
    color: var(--color_text_dim, var(--text_dim)) !important;
    font-size: 0.8rem !important;
    font-weight: 600 !important;
    letter-spacing: 0.02em !important;
    text-transform: none !important;
    padding: 8px 14px !important;
    cursor: pointer !important;
    height: auto !important;
    min-height: 0 !important;
    transition: color 0.15s, border-color 0.15s !important;
    border-radius: var(--theme-radius-xs) !important;
    margin-bottom: -1px !important;
}
.lb-tab-btn:hover { color: var(--color_text_normal) !important; }
.lb-tab-btn-active {
    color: var(--color_primary) !important;
    border-bottom-color: var(--color_primary) !important;
}
.lb-tab-panels { width: 100% !important; }
.lb-tab-panel  { display: none !important; }
.lb-tab-panel-active { display: block !important; }

/* ── .lb-overflow ─────────────────────────────────────────────────
   Three-dot ⋯ trigger + positioned dropdown menu. */
.lb-overflow {
    position: relative !important;
    display: inline-flex !important;
}
.lb-overflow-btn {
    background: none !important;
    border: none !important;
    color: var(--color_text_dim, var(--text_dim)) !important;
    font-size: 1.2rem !important;
    letter-spacing: 0.1em !important;
    cursor: pointer !important;
    padding: 4px 8px !important;
    height: auto !important;
    min-height: 0 !important;
    line-height: 1 !important;
    border-radius: var(--theme-radius-xs) !important;
}
.lb-overflow-btn:hover { color: var(--color_text_normal) !important; }
.lb-overflow-menu {
    position: absolute !important;
    top: 100% !important;
    right: 0 !important;
    min-width: 160px !important;
    background: var(--bg_raised) !important;
    border: 1px solid color-mix(in srgb, var(--border) 80%, transparent) !important;
    backdrop-filter: none !important;
    z-index: 500 !important;
    list-style: none !important;
    margin: 4px 0 0 !important;
    padding: 4px !important;
    box-shadow: none !important;
    border-radius: 12px !important;
}
.lb-overflow-item {
    display: block !important;
    width: 100% !important;
    background: none !important;
    border: none !important;
    text-align: left !important;
    padding: 8px 12px !important;
    color: var(--color_text_normal) !important;
    font-size: 0.82rem !important;
    letter-spacing: 0.04em !important;
    cursor: pointer !important;
    height: auto !important;
    min-height: 0 !important;
    white-space: nowrap !important;
    border-radius: 8px !important;
}
.lb-overflow-item:hover:not(:disabled) {
    background: color-mix(in srgb, var(--color_primary) 15%, transparent) !important;
    color: var(--color_primary) !important;
}
.lb-overflow-item:disabled {
    opacity: 0.45 !important;
    cursor: not-allowed !important;
}

/* ── .lb-poll ─────────────────────────────────────────────────────── */
.lb-poll {
    display: flex !important;
    flex-direction: column !important;
    gap: 14px !important;
}
.lb-poll-question {
    font-size: 0.9rem !important;
    font-weight: 700 !important;
    letter-spacing: 0.04em !important;
    color: var(--color_text_normal) !important;
}
.lb-poll-choices {
    display: flex !important;
    flex-direction: column !important;
    gap: 8px !important;
}
.lb-poll-choice {
    display: block !important;
    width: 100% !important;
    text-align: left !important;
    padding: 9px 14px !important;
    background: transparent !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 8px !important;
    color: var(--color_text_normal) !important;
    font-size: 0.82rem !important;
    cursor: pointer !important;
    transition: border-color 0.15s, background 0.15s !important;
}
.lb-poll-choice:hover {
    border-color: var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 10%, transparent) !important;
}
.lb-poll-choice-sel {
    border-color: var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 18%, transparent) !important;
    color: var(--color_primary) !important;
}
.lb-poll-submit {
    align-self: flex-start !important;
}
.lb-poll-results {
    display: flex !important;
    flex-direction: column !important;
    gap: 10px !important;
}
.lb-poll-result {
    display: grid !important;
    grid-template-columns: minmax(80px, 28%) 1fr 42px !important;
    align-items: center !important;
    gap: 10px !important;
    font-size: 0.8rem !important;
}
.lb-poll-result-label {
    color: var(--color_text_dim) !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
}
.lb-poll-bar-wrap {
    background: color-mix(in srgb, var(--color_border) 60%, transparent) !important;
    border-radius: 999px !important;
    height: 8px !important;
    overflow: hidden !important;
}
.lb-poll-bar {
    height: 100% !important;
    background: var(--color_primary) !important;
    border-radius: 999px !important;
    transition: width 0.4s ease !important;
    min-width: 2px !important;
}
.lb-poll-result-pct {
    color: var(--color_text_dim) !important;
    font-size: 0.75rem !important;
    text-align: right !important;
    font-variant-numeric: tabular-nums !important;
}

/* ── .lb-survey ───────────────────────────────────────────────────── */
.lb-survey {
    display: flex !important;
    flex-direction: column !important;
    gap: 0 !important;
}
.lb-survey-form {
    display: flex !important;
    flex-direction: column !important;
    gap: 22px !important;
}
.lb-survey-q {
    display: flex !important;
    flex-direction: column !important;
    gap: 8px !important;
}
.lb-survey-label {
    font-size: 0.82rem !important;
    font-weight: 600 !important;
    color: var(--color_text_normal) !important;
    letter-spacing: 0.03em !important;
}
.lb-survey-req {
    color: var(--color_error, #f44336) !important;
}
.lb-survey-field {
    max-width: 480px !important;
}
.lb-survey-choices {
    display: flex !important;
    flex-direction: column !important;
    gap: 6px !important;
}
.lb-survey-choice-row {
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
    font-size: 0.82rem !important;
    color: var(--color_text_normal) !important;
    cursor: pointer !important;
}
.lb-survey-scale {
    display: flex !important;
    align-items: center !important;
    gap: 10px !important;
}
.lb-survey-scale-track {
    display: flex !important;
    gap: 4px !important;
}
.lb-survey-scale-pip {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    gap: 4px !important;
    cursor: pointer !important;
    font-size: 0.78rem !important;
    color: var(--color_text_dim) !important;
}
.lb-survey-scale-pip input[type="radio"] {
    accent-color: var(--color_primary) !important;
    cursor: pointer !important;
}
.lb-survey-scale-edge {
    font-size: 0.75rem !important;
    color: var(--color_text_dim) !important;
    white-space: nowrap !important;
}
/* Star rating — reversed radio inputs; CSS selects previously-rendered siblings */
.lb-survey-stars {
    display: flex !important;
    flex-direction: row-reverse !important;
    gap: 2px !important;
    width: max-content !important;
}
.lb-star-inp {
    position: absolute !important;
    opacity: 0 !important;
    width: 0 !important;
    height: 0 !important;
    pointer-events: none !important;
}
.lb-star-lbl {
    font-size: 1.6rem !important;
    color: var(--color_border) !important;
    cursor: pointer !important;
    transition: color 0.1s !important;
    line-height: 1 !important;
}
.lb-star-lbl:hover,
.lb-star-lbl:hover ~ .lb-star-lbl,
.lb-star-inp:checked ~ .lb-star-lbl {
    color: var(--color_warn, #ff9800) !important;
}
.lb-survey-footer {
    padding-top: 6px !important;
}
.lb-survey-submit {
    min-width: 120px !important;
}
.lb-survey-thankyou {
    padding: 28px 0 !important;
    text-align: center !important;
    font-size: 0.9rem !important;
    color: var(--color_text_dim) !important;
}

/* ── .lb-embed ────────────────────────────────────────────────────── */
.lb-embed {
    display: block !important;
    margin: 0 !important;
    padding: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
}
.lb-embed-wrap {
    position: relative !important;
    width: 100% !important;
    overflow: hidden !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 10px !important;
    background: var(--color_bg_raised, var(--bg_raised)) !important;
}
.lb-embed-media {
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
    border: 0 !important;
    display: block !important;
    object-fit: contain !important;
}
.lb-embed-audio {
    position: static !important;
    width: 100% !important;
    height: auto !important;
}
.lb-embed-caption {
    display: block !important;
    margin-top: 6px !important;
    font-size: 0.76rem !important;
    color: var(--color_text_dim) !important;
    text-align: center !important;
}

/* ── .lb-link ─────────────────────────────────────────────────────── */
.lb-link {
    display: inline-flex !important;
    align-items: center !important;
    gap: 4px !important;
    vertical-align: middle !important;
    color: var(--color_primary) !important;
    text-decoration: none !important;
    border-bottom: 1px solid transparent !important;
    transition: border-color 0.15s !important;
}
.lb-link:hover {
    border-bottom-color: var(--color_primary) !important;
}
.lb-link-muted {
    color: var(--color_text_dim) !important;
}
.lb-link-muted:hover {
    color: var(--color_text_normal) !important;
    border-bottom-color: var(--color_text_dim) !important;
}
.lb-link-danger {
    color: var(--color_error, #f44336) !important;
}
.lb-link-danger:hover { border-bottom-color: var(--color_error, #f44336) !important; }
/* BBS file-transfer-object action links — color set dynamically in JS */
.lb-bbs-fto-link {
    font-size: 0.8em !important;
    text-decoration: none !important;
    border-bottom: 1px solid transparent !important;
    transition: opacity 0.15s, border-bottom-color 0.15s !important;
    opacity: 0.85 !important;
}
.lb-bbs-fto-link:hover {
    opacity: 1 !important;
    border-bottom-color: currentColor !important;
}

/* ── .lb-rule ─────────────────────────────────────────────────────── */
/* Semantic <hr> separator — distinct from lb-divider (styled div) */
.lb-rule {
    border: 0 !important;
    border-top: 1px solid var(--color_border) !important;
    margin: 16px 0 !important;
}
.lb-rule-sm { margin: 8px 0 !important; }
.lb-rule-lg { margin: 32px 0 !important; }

/* ── .lb-code ─────────────────────────────────────────────────────── */
/* Inline monospace snippet */
.lb-code {
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.85em !important;
    background: color-mix(in srgb, var(--color_border) 55%, transparent) !important;
    color: var(--color_primary) !important;
    padding: 1px 5px !important;
    border-radius: 3px !important;
    letter-spacing: 0 !important;
    word-break: break-word !important;
}

/* ── .lb-pre / .lb-pre-wrap ───────────────────────────────────────── */
/* Scrollable code block with optional Copy button */
.lb-pre-wrap {
    position: relative !important;
}
.lb-pre {
    background: color-mix(in srgb, var(--color_border) 20%, var(--bg_base)) !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 4px !important;
    padding: 14px 16px !important;
    overflow-x: auto !important;
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.82rem !important;
    line-height: 1.55 !important;
    tab-size: 4 !important;
    white-space: pre !important;
    color: var(--color_text_normal) !important;
    margin: 0 !important;
}
.lb-pre code {
    font: inherit !important;
    background: none !important;
    padding: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    color: inherit !important;
    letter-spacing: 0 !important;
}
.lb-pre-copy {
    position: absolute !important;
    top: 8px !important;
    right: 8px !important;
    padding: 3px 8px !important;
    font-size: 0.72rem !important;
    line-height: 1.4 !important;
    background: color-mix(in srgb, var(--color_border) 55%, transparent) !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 3px !important;
    color: var(--color_text_dim) !important;
    cursor: pointer !important;
    transition: background 0.15s, color 0.15s !important;
}
.lb-pre-copy:hover {
    background: color-mix(in srgb, var(--color_primary) 20%, transparent) !important;
    color: var(--color_primary) !important;
}
/* Off-screen textarea for clipboard fallback; must stay focusable */
.lb-clipboard-tmp {
    position: fixed !important;
    top: -9999px !important;
    left: -9999px !important;
    opacity: 0 !important;
    pointer-events: none !important;
    width: 1px !important;
    height: 1px !important;
}

/* ── .lb-tree ─────────────────────────────────────────────────────── */
/* Recursive file/directory tree — built on nested native <details> per
   folder (see LBKit.tree, ui_toolkit.pjs). */
.lb-tree {
    font-size: 0.82rem !important;
    color: var(--color_text_normal) !important;
    overflow-y: auto !important;
}
.lb-tree-dir {
    border: none !important;
}
.lb-tree-dir-label {
    padding: 4px 6px 4px 10px !important;
    cursor: pointer !important;
    font-weight: 600 !important;
    color: var(--color_text_dim) !important;
    list-style: none !important;
    display: flex !important;
    align-items: center !important;
    gap: 6px !important;
    user-select: none !important;
    white-space: nowrap !important;
    border-radius: var(--theme-radius-xs) !important;
}
.lb-tree-dir-label::-webkit-details-marker { display: none !important; }
.lb-tree-dir-label:hover {
    background: color-mix(in srgb, var(--color_primary) 8%, transparent) !important;
    color: var(--color_text_normal) !important;
}
.lb-tree-dir-label::before {
    content: '›' !important;
    display: inline-block !important;
    transition: transform 0.15s !important;
    color: var(--color_text_dim) !important;
    flex-shrink: 0 !important;
}
.lb-tree-dir[open] > .lb-tree-dir-label::before {
    transform: rotate(90deg) !important;
}
.lb-tree-children {
    padding-left: 14px !important;
    border-left: 1px solid var(--color_border) !important;
    margin-left: 14px !important;
}
.lb-tree-file {
    padding: 4px 6px 4px 10px !important;
    cursor: pointer !important;
    color: var(--color_text_dim) !important;
    white-space: nowrap !important;
    border-radius: var(--theme-radius-xs) !important;
    user-select: none !important;
}
.lb-tree-file:hover {
    background: color-mix(in srgb, var(--color_primary) 8%, transparent) !important;
    color: var(--color_text_normal) !important;
}
.lb-tree-file:focus-visible {
    outline: 1px solid var(--color_primary) !important;
    outline-offset: -1px !important;
}
.lb-tree-file-active {
    background: color-mix(in srgb, var(--color_primary) 16%, transparent) !important;
    color: var(--color_primary) !important;
    font-weight: 600 !important;
}

/* ── .lb-code-view ────────────────────────────────────────────────── */
/* Line-numbered code block (LBKit.code_view, ui_toolkit.pjs). */
.lb-code-view {
    position: relative !important;
    height: 100% !important;
    overflow: hidden !important;
}
/* Fixed-dark background + text, same reasoning and same fixed values as
   .lb-code-editor's own comment below (found together — this is the
   "also site wide" half of that same contrast bug report, Code Atlas
   being this component's other real caller beyond Studio). */
.lb-code-view-pre {
    background: #1e1e2a !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 4px !important;
    margin: 0 !important;
    height: 100% !important;
    overflow: auto !important;
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.82rem !important;
    line-height: 1.55 !important;
    tab-size: 4 !important;
}
.lb-code-line {
    display: flex !important;
    white-space: pre !important;
}
.lb-code-lineno {
    flex-shrink: 0 !important;
    width: 3.5em !important;
    padding: 0 10px !important;
    text-align: right !important;
    color: #858599 !important;
    opacity: 1 !important;
    user-select: none !important;
    position: sticky !important;
    left: 0 !important;
    background: #1e1e2a !important;
}
.lb-code-linetext {
    padding-right: 16px !important;
    color: #d4d4d8 !important;
}
.lb-code-line-flash {
    animation: lb-code-line-flash-anim 1.2s ease-out !important;
}
@keyframes lb-code-line-flash-anim {
    0%   { background: color-mix(in srgb, var(--color_primary) 30%, transparent); }
    100% { background: transparent; }
}

/* ── .lb-code-editor (LBKit.code_editor, ui_toolkit.pjs) ─────────────
   Editable sibling of .lb-code-view above — same font metrics/colors on
   purpose (matches the site's read-only code display), but structured as
   a gutter + a stacked textarea-over-pre pair instead of one flat <pre>.
   The textarea and pre MUST share identical font-family/size/line-height/
   padding/tab-size/white-space or the invisible typed text won't land on
   top of the pre's colored text underneath it — that alignment is the
   entire trick the overlay technique depends on, so every metric below
   is intentionally duplicated between the two rather than only set once
   on a shared ancestor. */
/* Fixed-dark, palette-INDEPENDENT background — was
   `color-mix(var(--color_border) 20%, var(--bg_base))`, which for some
   generated palettes (accent-driven, per palette-loader.php) computed a
   background close enough to the syntax token colors' own also-palette-
   derived hues that text became genuinely hard to read (found via a
   real screenshot: keywords stayed legible since --color_primary is
   usually bold/saturated, but identifier/operator text — closer to
   --color_text_dim/--color_text_normal — lost most of its contrast
   against a same-palette-family olive/sage background). A code editor
   re-theming its OWN syntax colors to match arbitrary app chrome was
   the actual mistake, not any one color-mix formula — real code editors
   don't restyle their token palette to match the host app's theme
   either. Fixed background + fixed token colors below (VS Code's own
   Dark+ palette, a proven, widely-tested reference rather than a fresh
   guess) sidesteps the whole problem rather than chasing it per-palette. */
.lb-code-editor {
    position: relative !important;
    display: flex !important;
    height: 100% !important;
    overflow: hidden !important;
    background: #1e1e2a !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 4px !important;
}
.lb-code-editor-gutter {
    flex-shrink: 0 !important;
    width: 3.5em !important;
    overflow: hidden !important;
    text-align: right !important;
    padding: 8px 10px !important;
    color: #858599 !important;
    opacity: 1 !important;
    user-select: none !important;
    background: #1e1e2a !important;
    border-right: 1px solid var(--color_border) !important;
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.82rem !important;
    line-height: 1.55 !important;
}
.lb-code-editor-lineno {
    white-space: pre !important;
}
.lb-code-editor-surface {
    position: relative !important;
    flex: 1 !important;
    overflow: hidden !important;
}
.lb-code-editor-highlight,
.lb-code-editor-input {
    position: absolute !important;
    inset: 0 !important;
    margin: 0 !important;
    padding: 8px 12px !important;
    border: none !important;
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.82rem !important;
    line-height: 1.55 !important;
    tab-size: 4 !important;
    white-space: pre !important;
    word-wrap: normal !important;
}
.lb-code-editor-highlight {
    /* This is a literal <pre> element (ui_toolkit.pjs's LBKit.code_editor
       creates it as one) — the generic site-wide `pre, code { background:
       color-mix(--bg_dark 90%, transparent) !important; ... }` rule
       further down this file otherwise wins by default for `background`
       specifically, since nothing here was overriding THAT property
       (only `color` was set) even though .lb-code-editor's own outer
       background was already fixed above — found via a real screenshot
       still showing a palette-tinted background after that first fix,
       not by inspection. border-left:none/padding:0 reset that same
       generic rule's other declarations, which don't belong on this
       element either (padding especially — .lb-code-editor-highlight/
       -input have to share IDENTICAL padding for the overlay-textarea
       technique to keep the invisible typed text aligned with the
       colored text underneath it). */
    background: transparent !important;
    border-left: none !important;
    padding: 8px 12px !important;
    border-radius: 0 !important;
    color: #d4d4d8 !important;
    overflow: hidden !important;
    pointer-events: none !important;
}
.lb-code-editor-line {
    white-space: pre !important;
}
.lb-code-editor-input {
    width: 100% !important;
    height: 100% !important;
    overflow: auto !important;
    resize: none !important;
    background: transparent !important;
    /* Real caret + selection stay visible; the glyphs themselves are
       transparent so only the .lb-code-editor-highlight layer underneath
       is what's actually seen — this is the other half of the overlay
       trick alongside the identical font metrics above. */
    color: transparent !important;
    caret-color: #d4d4d8 !important;
    outline: none !important;
}
.lb-code-editor-input::selection {
    background: color-mix(in srgb, var(--color_primary) 35%, transparent);
}
.lb-code-editor-line-flash {
    animation: lb-code-line-flash-anim 1.2s ease-out !important;
}

/* Completions popup (Phase E, opts.onRequestCompletions) — fixed dark
   colors, same reasoning as the code editor's own token palette right
   below: this sits directly on top of that same fixed-dark editor
   surface regardless of the site's active theme, so it needs to stay
   legible against THAT ground, not the page's own palette.
   .lb-code-editor itself already has position:relative (see its base
   rule above), which is what makes this absolutely-positioned popup
   anchor correctly — no change needed there. */
.lb-code-editor-completions {
    position: absolute !important;
    z-index: 50 !important;
    min-width: 160px !important;
    max-width: 320px !important;
    max-height: 180px !important;
    overflow-y: auto !important;
    background: #252531 !important;
    border: 1px solid #454854 !important;
    border-radius: 5px !important;
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4) !important;
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.8rem !important;
}
.lb-code-editor-completion-item {
    padding: 4px 10px !important;
    color: #d4d4d8 !important;
    cursor: pointer !important;
    white-space: nowrap !important;
}
.lb-code-editor-completion-item-active {
    background: #3a3d6b !important;
    color: #ffffff !important;
}

/* Breakpoint gutter dot — --error is the one semantic-color exception to
   this file's usual single-hue restraint, same justification the site's
   other error/danger indicators already use: a breakpoint IS a stop/
   danger marker by universal IDE convention, not a stylistic accent, so
   reaching for the neutral palette here would actively hurt recognition
   rather than preserve consistency. Cursor drops to pointer only over the
   gutter's line numbers (opts.onToggleBreakpoint's click target), not the
   whole gutter strip. */
.lb-code-editor-lineno {
    cursor: pointer !important;
    position: relative !important;
}
.lb-code-editor-lineno-bp::before {
    content: '' !important;
    position: absolute !important;
    left: 3px !important;
    top: 50% !important;
    width: 8px !important;
    height: 8px !important;
    border-radius: 50% !important;
    background: var(--error) !important;
    transform: translateY(-50%) !important;
}
.lb-code-editor-lineno-current {
    background: color-mix(in srgb, var(--color_primary) 25%, transparent) !important;
    opacity: 1 !important;
}
.lb-code-editor-line-current {
    background: color-mix(in srgb, var(--color_primary) 16%, transparent) !important;
    outline: 1px solid color-mix(in srgb, var(--color_primary) 50%, transparent) !important;
}

/* VB6 syntax token colors (LBKit.code_editor's opts.tokenize hook, fed by
   modules/js/ide/appstudio-highlight.pjs). Previously palette-relative
   (--color_primary/--info/--color_text_dim, matching the .hljs-* rules'
   own single-hue-palette convention) — moved to fixed colors instead
   (2026-08-07, see .lb-code-editor's own comment on why): a syntax
   palette needs to stay legible against ITS OWN fixed background no
   matter which of this site's generated accent palettes is active, and
   --color_text_dim in particular is tuned for contrast against
   --bg_base/--bg_surface, not against a code editor's own darker,
   fixed ground. Fixed values below are VS Code's own Dark+ token
   colors — proven readable, not a fresh guess. Idents stay unstyled
   (no .tok-ident class exists) and inherit .lb-code-editor-highlight's
   own fixed base color instead. */
.tok-keyword {
    color: #569cd6 !important;
    font-weight: 600 !important;
}
.tok-string {
    color: #ce9178 !important;
}
.tok-number {
    color: #b5cea8 !important;
}
.tok-comment {
    color: #6a9955 !important;
    opacity: 1 !important;
    font-style: italic !important;
}
.tok-operator, .tok-punct {
    color: #c9c9cf !important;
}

/* ── Doc browser (LBKit.doc_browser, ui_toolkit.pjs) ──────────────────────
   A php.net-manual-style reference popout: dark header/purple accent,
   light sidebar, white content pane — fixed colors, deliberately
   decoupled from the site's generated palette system, same reasoning as
   the code editor's own fixed VS Code Dark+ tokens above (a doc site
   modeled after a REAL other site's identity needs to look like that
   site regardless of which of this site's own accent palettes happens
   to be active). Example code blocks reuse the exact same .lb-code-
   editor-highlight background (#1e1e2a) and .tok-* palette already
   defined above for visual consistency between "the code editor" and
   "the manual" — one fixed code-block identity across the whole IDE,
   not two competing ones. */
.lb-dlg-box.lb-docbrowser-modal {
    width: 92vw !important;
    max-width: 1100px !important;
    height: 88vh !important;
    max-height: 860px !important;
    padding: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
    background: #ffffff !important;
    border-radius: var(--theme-radius-sm) !important;
}
.lb-docbrowser {
    display: flex !important;
    flex-direction: column !important;
    width: 100% !important;
    height: 100% !important;
    min-height: 0 !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif !important;
}
.lb-docbrowser-header {
    flex-shrink: 0 !important;
    display: flex !important;
    align-items: center !important;
    gap: 14px !important;
    padding: 10px 16px !important;
    background: #23252b !important;
    color: #f0f0f2 !important;
}
.lb-docbrowser-title {
    font-weight: 700 !important;
    font-size: 1rem !important;
    letter-spacing: 0.01em !important;
    white-space: nowrap !important;
    color: #f0f0f2 !important;
}
/* .lb-docbrowser-header ancestor-qualified rather than a bare
   .lb-docbrowser-search-input class selector: a real input's own
   generic site-wide input[type="text"]:focus rules (ui_style.php, the
   "modern inputs" polish pass further down this file) carry an element+
   attribute+pseudo-class specificity of (0,2,1), which beats a
   single-class selector's (0,2,0) regardless of !important or source
   order — found via CSS.getMatchedStylesForNode after a real screenshot
   showed the site's own accent green bleeding through the search box
   instead of this component's fixed dark palette. Qualifying with the
   header ancestor raises this to (0,3,0)/(0,3,1), which reliably wins. */
.lb-docbrowser-header .lb-docbrowser-search-input {
    flex: 1 !important;
    max-width: 360px !important;
    background: #34363f !important;
    color: #f0f0f2 !important;
    border: 1px solid #454854 !important;
    border-radius: 5px !important;
    padding: 6px 10px !important;
}
.lb-docbrowser-search-input::placeholder {
    color: #9698a3 !important;
}
.lb-docbrowser-header .lb-docbrowser-search-input:focus {
    outline: none !important;
    background: #34363f !important;
    border-color: #8892bf !important;
    box-shadow: 0 0 0 2px rgba(136, 146, 191, 0.35) !important;
}
.lb-docbrowser-close {
    flex-shrink: 0 !important;
    background: transparent !important;
    border: none !important;
    color: #d0d1d6 !important;
    font-size: 1.4rem !important;
    line-height: 1 !important;
    cursor: pointer !important;
    padding: 2px 6px !important;
    border-radius: 4px !important;
}
.lb-docbrowser-close:hover {
    background: #34363f !important;
    color: #ffffff !important;
}
.lb-docbrowser-print {
    flex-shrink: 0 !important;
    background: #34363f !important;
    border: 1px solid #454854 !important;
    color: #f0f0f2 !important;
    font-size: 0.85rem !important;
    line-height: 1 !important;
    cursor: pointer !important;
    padding: 6px 12px !important;
    border-radius: 5px !important;
}
.lb-docbrowser-print:hover {
    background: #454854 !important;
}
/* Hidden on screen — .lb-docbrowser-print-only only ever becomes
   visible under @media print below, populated fresh on each Print
   click (LBKit.doc_browser's own _buildPrintableHtml). */
.lb-docbrowser-print-only {
    display: none !important;
}
.lb-docbrowser-body {
    flex: 1 !important;
    display: flex !important;
    min-height: 0 !important;
}
.lb-docbrowser-nav {
    flex-shrink: 0 !important;
    width: 250px !important;
    overflow-y: auto !important;
    background: #f7f7f9 !important;
    border-right: 1px solid #dcdfe3 !important;
    padding: 10px 0 !important;
    scrollbar-color: #b8bac2 transparent !important;
}
.lb-docbrowser-section {
    margin-bottom: 14px !important;
}
.lb-docbrowser-section-title {
    font-size: 0.72rem !important;
    font-weight: 700 !important;
    text-transform: uppercase !important;
    letter-spacing: 0.04em !important;
    color: #7c7f89 !important;
    padding: 4px 16px !important;
}
.lb-docbrowser-topiclist {
    display: flex !important;
    flex-direction: column !important;
}
.lb-docbrowser-nav .lb-docbrowser-topic-link {
    display: block !important;
    padding: 5px 16px !important;
    font-size: 0.86rem !important;
    color: #2b2b2b !important;
    text-decoration: none !important;
    border-left: 3px solid transparent !important;
}
.lb-docbrowser-nav .lb-docbrowser-topic-link:hover {
    background: #edeef2 !important;
    color: #4c4f9c !important;
}
.lb-docbrowser-nav .lb-docbrowser-topic-link.lb-docbrowser-topic-active {
    background: #eceafd !important;
    border-left-color: #8892bf !important;
    color: #4c4f9c !important;
    font-weight: 600 !important;
}
.lb-docbrowser-content {
    flex: 1 !important;
    overflow-y: auto !important;
    background: #ffffff !important;
    color: #262626 !important;
    padding: 22px 32px !important;
    scrollbar-color: #c5c7ce transparent !important;
}
.lb-docbrowser-breadcrumb {
    font-size: 0.78rem !important;
    color: #8b8d96 !important;
    margin-bottom: 8px !important;
}
.lb-docbrowser-h1 {
    font-size: 1.5rem !important;
    font-weight: 700 !important;
    color: #1a1a1a !important;
    margin: 0 0 10px 0 !important;
    padding-bottom: 8px !important;
    border-bottom: 1px solid #e2e4e8 !important;
}
.lb-docbrowser-h2 {
    font-size: 1rem !important;
    font-weight: 700 !important;
    color: #4c4f9c !important;
    margin: 22px 0 8px 0 !important;
}
.lb-docbrowser-desc {
    max-width: 760px !important;
    line-height: 1.6 !important;
    color: #333333 !important;
    margin: 0 !important;
}
.lb-docbrowser-syntax {
    background: #f7f7f9 !important;
    border: 1px solid #e2e4e8 !important;
    border-left: 3px solid #8892bf !important;
    border-radius: 4px !important;
    padding: 10px 14px !important;
    margin: 4px 0 !important;
}
.lb-docbrowser-syntax code {
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.86rem !important;
    color: #2b2b2b !important;
    background: transparent !important;
}
.lb-docbrowser-params {
    border-collapse: collapse !important;
    width: 100% !important;
    max-width: 760px !important;
    font-size: 0.86rem !important;
}
.lb-docbrowser-params tr:nth-child(odd) {
    background: #f7f7f9 !important;
}
.lb-docbrowser-params td {
    padding: 6px 12px !important;
    border: 1px solid #e2e4e8 !important;
    vertical-align: top !important;
    color: #333333 !important;
}
.lb-docbrowser-param-name {
    font-family: 'Courier New', Consolas, monospace !important;
    font-weight: 600 !important;
    color: #4c4f9c !important;
    white-space: nowrap !important;
}
.lb-docbrowser-example {
    background: #1e1e2a !important;
    border-radius: 5px !important;
    padding: 12px 16px !important;
    overflow-x: auto !important;
    margin: 4px 0 !important;
}
.lb-docbrowser-example code {
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.82rem !important;
    line-height: 1.55 !important;
    color: #d4d4d8 !important;
    background: transparent !important;
    white-space: pre !important;
    /* Example bodies use \t (not literal space runs) for indentation —
       the site's file_get_raw_evaled_contents minifier (classes/php/
       standard/filesystem.php's _minify_js) collapses any run of 2+ raw
       whitespace BYTES in a .pjs file down to one space, with no
       string-literal awareness, which silently ate every example's
       indentation down to a single space before this was caught by a
       real CDP render check (not by reading the source, which still
       looked correct) — \n and \t are backslash-escape sequences in the
       SOURCE bytes (not raw whitespace themselves), so the minifier
       leaves them alone; tab-size here controls how wide the resulting
       real tab character renders. */
    tab-size: 4 !important;
}
.lb-docbrowser-seealso {
    font-size: 0.86rem !important;
    color: #4c4f9c !important;
}
.lb-docbrowser-overview-list {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 6px 18px !important;
    margin-bottom: 4px !important;
}
.lb-docbrowser-overview-list .lb-docbrowser-topic-link {
    color: #4c4f9c !important;
    text-decoration: none !important;
    font-size: 0.9rem !important;
}
.lb-docbrowser-overview-list .lb-docbrowser-topic-link:hover {
    text-decoration: underline !important;
}
@media (max-width: 767px) {
    .lb-dlg-box.lb-docbrowser-modal {
        width: 100vw !important;
        height: 100vh !important;
        max-width: 100vw !important;
        max-height: 100vh !important;
        border-radius: 0 !important;
    }
    .lb-docbrowser-body {
        flex-direction: column !important;
    }
    .lb-docbrowser-nav {
        width: 100% !important;
        max-height: 40vh !important;
        border-right: none !important;
        border-bottom: 1px solid #dcdfe3 !important;
    }
    .lb-docbrowser-search-input {
        max-width: none !important;
    }
    .lb-docbrowser-content {
        padding: 16px 18px !important;
    }
}

/* ── Static window frame (LBKit.window_frame, ui_toolkit.pjs) ───────────
   Reuses .lb-window-chrome/.lb-window-titlebar/.lb-window-btn/etc.
   verbatim for the titlebar look — this override just undoes the parts
   of .lb-window-chrome that only make sense for a REAL, absolutely-
   positioned, draggable window (App Studio's form designer, its one
   caller, wants this sitting in normal document flow filling its flex
   parent, not floating over #lb-desktop-root). The decorative min/max/
   close glyphs are real <button disabled> elements (keyboard-focus-
   skippable via tabIndex=-1, and inert to click since disabled) rather
   than plain spans, so they still LOOK exactly like the real window
   chrome's buttons pixel-for-pixel with zero new CSS needed for them. */
.lb-window-frame-static {
    position: relative !important;
    min-width: 0 !important;
    /* Neither height:100% NOR flex:1/min-height:0 actually work here —
       tried both, both measured 2px via a real getBoundingClientRect
       check. Root cause, confirmed by walking the full ancestor chain:
       #studio_form_view's own flex ancestors (the column wrapper, the
       toolbox/form/side-panel row) are ALL `flex:1; min-height:0`
       cascading with no absolute anchor anywhere in between — a
       genuinely PRE-EXISTING characteristic of Studio's layout, not
       introduced by this change (confirmed: #studio_form_view itself
       still measured 0px even after switching to flex:1). It "worked"
       before only because .lb-studio-canvas's own min-height:360px
       forced real content size, which is allowed to visually overflow
       past ancestors that computed to 0px height (nothing in the chain
       sets overflow:hidden) — not genuine flex-computed sizing. Fix:
       mirror that exact same proven pattern instead of fighting the
       chain — force a real min-height here too (titlebar ~34px + the
       canvas's own 360px + a little slack), same shape as
       .lb-studio-canvas's own rule just below. */
    box-shadow: none !important;
}
/* Non-resizable static frames (the common case — e.g. this same
   component's OWN use inside LBKit.doc_browser-adjacent chrome) fill
   their container exactly as before; a resizable one (App Studio's form
   designer) gets its width/height set explicitly by the factory itself
   instead, so this rule must not fight that with !important. */
.lb-window-frame-static:not(.lb-window-frame-resizable) {
    min-height: 400px !important;
    width: 100% !important;
}
.lb-window-frame-resizable {
    overflow: visible !important;
    /* Without this, the browser's default flex-shrink:1 actively
       compresses this element below its own explicit height to fit
       #studio_form_view's available space — confirmed via a real
       offsetHeight measurement showing 200px rendered against a 350px
       inline style, no CSS override in sight, until this was added.
       flex-shrink only ever respects min-height as a hard floor, never
       a plain height — which is exactly why the non-resizable sibling
       rule above got away with min-height instead of needing this same
       fix; a form set to whatever size the user dragged it to should
       never get silently shrunk by its container's own flex math. */
    flex-shrink: 0 !important;
}
.lb-window-frame-static .lb-window-btn {
    cursor: default !important;
    opacity: 0.55 !important;
}
.lb-window-frame-static .lb-window-btn:hover,
.lb-window-frame-static .lb-window-btn-close:hover {
    background: transparent !important;
    color: inherit !important;
}
.lb-window-frame-static .lb-window-titlebar {
    cursor: default !important;
}
/* BorderStyle=0 (None) in the Properties panel — a real VB6 form with no
   titlebar/border at all — toggled live by studio-late-bind.pjs's
   syncFormFrame() alongside Caption/ControlBox, matching real VB6's own
   form-designer behavior of reflecting BorderStyle immediately. */
.lb-window-frame-static.lb-studio-frame-borderless {
    border: none !important;
}
.lb-window-frame-static.lb-studio-frame-borderless .lb-window-titlebar {
    display: none !important;
}

/* Interactive variant — App Studio's multi-form Run windows (secondary
   forms opened via Form2.Show, see appstudio-runtime.pjs's
   __makeFormProxy). Absolutely positioned within its container
   (#run_root, already position:relative) rather than sitting in normal
   document flow like the static designer-only variant, so it can float/
   overlap/drag freely the way a real second window would. */
.lb-window-frame-interactive {
    position: absolute !important;
    min-width: 220px !important;
    max-width: calc(100% - 16px) !important;
}
.lb-window-frame-interactive .lb-window-body {
    overflow: auto !important;
}

/* ── Studio designer (StudioDesigner.createCanvas, studio-designer.pjs) ──
   Phase 2 of App Studio — a dotted-grid canvas that real LBKit widgets
   get positioned onto at design time, each behind a transparent capture
   layer that owns mouse interaction so the design-time widget itself
   never fires (see studio-designer.pjs's own header for why). */
.lb-studio-canvas {
    position: relative !important;
    width: 100% !important;
    height: 100% !important;
    min-height: 360px !important;
    overflow: auto !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 4px !important;
    background-color: var(--bg_base) !important;
    background-image:
        linear-gradient(to right, var(--color_border) 1px, transparent 1px),
        linear-gradient(to bottom, var(--color_border) 1px, transparent 1px) !important;
    background-size: 16px 16px !important;
}
.lb-studio-control {
    position: absolute !important;
}
/* The widget itself must fill its control's exact bounding box — without
   this, a real rendered <button>/<label>/<input>/etc. sits at its own
   natural, content-driven size while the (invisible) positioned box and
   the selection outline/resize handles below are sized from the
   control's STORED x/y/w/h, and the two visibly diverge the moment they
   don't happen to match (confirmed via a real screenshot: the selection
   rectangle around a CommandButton sat noticeably offset from the
   button a user could actually see/click). Matches real VB6, where
   every control genuinely occupies its exact box, not just "roughly
   near" it. */
.lb-studio-control > *:not(.lb-studio-control-capture):not(.lb-studio-resize-handle) {
    display: block !important;
    width: 100% !important;
    height: 100% !important;
    box-sizing: border-box !important;
    /* .lb-btn (and other LBKit form controls) carry their own
       `margin: 5px` and/or `min-height: 32px` — a floor/offset that
       fights width/height:100% above the same way min-height always
       overrides a smaller height regardless of !important on either
       side (a box-model rule, not a specificity contest). Confirmed via
       a real measurement: a CommandButton's rendered <button> sat 5px
       right/down from its own box and 4px taller than the box's stored
       28px height until these were reset too — not just an "off by a
       hair" rounding thing, the two rectangles were genuinely different
       sizes. */
    margin: 0 !important;
    min-height: 0 !important;
    min-width: 0 !important;
}
.lb-studio-control-capture {
    position: absolute !important;
    inset: 0 !important;
    cursor: move !important;
    background: transparent !important;
}
/* App Studio Label WordWrap=False (real VB6's own default) — clips
   instead of wrapping onto a second line within the control's fixed
   box. A generic LBKit.label modifier (not Studio-designer-only —
   Run mode/Publish's own mountControls() bootstrap applies the same
   class to the same effect), named for what it does rather than where
   it's used. */
.lb-label-nowrap {
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
}
.lb-studio-control.dragging {
    opacity: 0.85 !important;
}
.lb-studio-control-selected {
    outline: 2px solid var(--color_primary) !important;
    outline-offset: 1px !important;
}
.lb-studio-resize-handle {
    position: absolute !important;
    width: 8px !important;
    height: 8px !important;
    background: var(--color_primary) !important;
    border-radius: 2px !important;
    display: none !important;
    z-index: 1 !important;
}
.lb-studio-control-selected .lb-studio-resize-handle {
    display: block !important;
}
.lb-studio-resize-n  { top: -4px; left: 50%; margin-left: -4px; cursor: n-resize !important; }
.lb-studio-resize-s  { bottom: -4px; left: 50%; margin-left: -4px; cursor: s-resize !important; }
.lb-studio-resize-e  { right: -4px; top: 50%; margin-top: -4px; cursor: e-resize !important; }
.lb-studio-resize-w  { left: -4px; top: 50%; margin-top: -4px; cursor: w-resize !important; }
.lb-studio-resize-ne { top: -4px; right: -4px; cursor: ne-resize !important; }
.lb-studio-resize-nw { top: -4px; left: -4px; cursor: nw-resize !important; }
.lb-studio-resize-se { bottom: -4px; right: -4px; cursor: se-resize !important; }
.lb-studio-resize-sw { bottom: -4px; left: -4px; cursor: sw-resize !important; }

.lb-studio-toolbox {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 8px !important;
}

/* Dock panel chrome (2026-08-09) — header row shared by the Toolbox,
   Project Explorer/Properties, and Immediate Window panels (each panel's
   own collapse button lives here); splitters sit between panels,
   dragged by studio-late-bind.pjs's trailing panel-docking block. */
.lb-studio-panel-header {
    display: flex !important;
    align-items: center !important;
    gap: 6px !important;
    flex-shrink: 0 !important;
}
.lb-studio-panel-collapse-btn {
    flex-shrink: 0;
    width: 20px;
    height: 20px;
    padding: 0 !important;
    margin: 0 !important;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    line-height: 1;
    color: var(--color_text_normal);
    opacity: 0.6;
    background: transparent;
    border: 1px solid var(--color_border);
    border-radius: 3px;
    cursor: pointer;
}
.lb-studio-panel-collapse-btn:hover {
    opacity: 1;
    background: color-mix(in srgb, var(--color_primary) 12%, transparent);
    border-color: var(--color_primary);
}
/* A thin drag handle between two dock panels — col-resize (vertical
   panels: Toolbox|canvas|Explorer/Properties) or row-resize (horizontal:
   canvas row|Immediate Window). Slightly wider hit target than its
   visible line so it's easy to grab without pixel-hunting. */
.lb-studio-splitter {
    flex-shrink: 0;
    width: 6px;
    margin: 0 -1px;
    cursor: col-resize;
    position: relative;
    background: transparent;
}
.lb-studio-splitter::after {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    left: 50%;
    width: 1px;
    background: var(--color_border);
    transform: translateX(-50%);
}
.lb-studio-splitter:hover::after,
.lb-studio-splitter.dragging::after {
    left: 0;
    width: 100%;
    background: var(--color_primary);
    transform: none;
}
.lb-studio-splitter-h {
    width: auto;
    height: 6px;
    margin: -1px 0;
    cursor: row-resize;
}
.lb-studio-splitter-h::after {
    top: 50%;
    left: 0;
    right: 0;
    bottom: auto;
    width: auto;
    height: 1px;
    transform: translateY(-50%);
}
.lb-studio-splitter-h:hover::after,
.lb-studio-splitter-h.dragging::after {
    top: 0;
    height: 100%;
    transform: none;
}

/* Immediate Window (Phase 6) — Debug.Print output relayed via
   postMessage from a Run/blob window's own appstudio-runtime.pjs copy back to
   this Studio page (see ASRT.debugPrint's own note on why that's a
   generic "tell my parent if I have one" relay, not Studio-specific
   code). Console-like: monospace, dark ground regardless of theme (this
   is deliberately a fixed reading surface, same reasoning as the site's
   existing terminal/CLI panels — not meant to shift with day/night). */
/* Studio panel chrome (Toolbox/Explorer/Properties/Variables/Immediate
   Window headings, toolbox buttons) needs small, FIXED sizing — not the
   site's responsive root font-size, which the site-wide `h2 { font-size:
   clamp(15px, 4vw, 26px) !important }` rule (this file, ~line 412) and
   ordinary `rem` units both key off. `html`'s own font-size is itself a
   `clamp(12px, 2.5vw + 6px, 22px)` (~line 383) that reaches its 22px
   ceiling on any wide viewport, which is exactly what a dense IDE-chrome
   panel doesn't want: a "Project Explorer" h2 at the clamp's 26px
   (wrapping to 2 lines at this panel's 230px width) blew its box out to
   ~65px tall, visually colliding with the side panel's own scrollbar;
   `.lb-btn`'s `font-size: 0.85rem` at a 22px root renders at ~18.7px,
   wide enough that "CommandButton"/"OptionButton" overflowed clean past
   the 150px toolbox column. Fixed pixel sizes here sidestep both. */
#studio_toolbox_panel h2,
#studio_side_panel h2,
#studio_immediate_panel h2 {
    font-size: 13px !important;
    line-height: 1.3 !important;
    margin: 0 0 6px !important;
}
.lb-studio-toolbox .lb-btn {
    font-size: 12px !important;
    padding: 0 12px !important;
    min-height: 32px !important;
}
.lb-studio-toolbox-icon {
    display: inline-block;
    width: 14px;
    text-align: center;
    flex-shrink: 0;
    opacity: 0.75;
    color: var(--accent);
}

.lb-studio-immediate {
    background: var(--bg_base) !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 4px !important;
    padding: 6px 10px !important;
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.8rem !important;
    line-height: 1.5 !important;
    color: var(--color_text_normal) !important;
}
.lb-studio-immediate-line {
    white-space: pre-wrap !important;
    word-break: break-word !important;
}
.lb-studio-immediate-empty {
    opacity: 0.5 !important;
    font-style: italic !important;
}

/* Step-debugging paused bar + Variables panel — --error again (see the
   breakpoint-dot comment above), since "execution is stopped" is exactly
   the kind of state a neutral accent would under-communicate. */
.lb-studio-debugbar {
    background: color-mix(in srgb, var(--error) 14%, var(--bg_base)) !important;
    border: 1px solid color-mix(in srgb, var(--error) 40%, transparent) !important;
    border-radius: 4px !important;
    color: var(--color_text_normal) !important;
}
.lb-studio-variables {
    background: var(--bg_base) !important;
    border: 1px solid var(--color_border) !important;
    border-radius: 4px !important;
    padding: 6px 8px !important;
    max-height: 220px !important;
    overflow-y: auto !important;
}

/* hljs token colors — were palette-relative (--color_primary/--info/
   --warn/--color_text_normal/--color_text_dim), same bug and same fix
   as .tok-* below: only ever rendered inside .lb-code-view-pre (the
   only caller — window.hljs.highlight() is called from exactly one
   place, LBKit.code_view in ui_toolkit.pjs), which now has a fixed dark
   background, so hardcoding these to VS Code's own proven Dark+ token
   colors is safe (no other, lighter-background context exists for this
   class family to clash with) and fixes the same contrast bug this
   inherited from being palette-relative. */
.hljs-comment, .hljs-quote {
    color: #6a9955 !important;
    opacity: 1 !important;
    font-style: italic !important;
}
.hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-section, .hljs-link {
    color: #569cd6 !important;
    font-weight: 600 !important;
}
.hljs-string, .hljs-attr, .hljs-template-tag, .hljs-addition {
    color: #ce9178 !important;
}
.hljs-number, .hljs-symbol, .hljs-bullet {
    color: #b5cea8 !important;
}
.hljs-title, .hljs-title.function_, .hljs-title.class_, .hljs-name {
    color: #dcdcaa !important;
    font-weight: 700 !important;
}
.hljs-variable, .hljs-attribute, .hljs-params {
    color: #9cdcfe !important;
}
.hljs-built_in, .hljs-type {
    color: #4ec9b0 !important;
}
.hljs-deletion {
    color: #f14c4c !important;
}
.hljs-meta {
    color: #858599 !important;
    opacity: 1 !important;
}
.hljs-emphasis { font-style: italic !important; }
.hljs-strong   { font-weight: 700 !important; }

/* ── .lb-detail ───────────────────────────────────────────────────── */
/* Native <details>/<summary> disclosure widget */
.lb-detail {
    border: 1px solid var(--color_border) !important;
    border-radius: 10px !important;
    overflow: hidden !important;
}
.lb-detail-summary {
    padding: 10px 14px !important;
    cursor: pointer !important;
    font-size: 0.83rem !important;
    font-weight: 600 !important;
    letter-spacing: 0.03em !important;
    color: var(--color_text_normal) !important;
    list-style: none !important;
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
    user-select: none !important;
    transition: background 0.15s !important;
}
.lb-detail-summary::-webkit-details-marker { display: none !important; }
.lb-detail-summary:hover {
    background: color-mix(in srgb, var(--color_primary) 8%, transparent) !important;
}
.lb-detail-summary::before {
    content: '›' !important;
    display: inline-block !important;
    transition: transform 0.2s !important;
    color: var(--color_text_dim) !important;
    font-size: 1rem !important;
    line-height: 1 !important;
    flex-shrink: 0 !important;
}
.lb-detail[open] > .lb-detail-summary::before {
    transform: rotate(90deg) !important;
}
.lb-detail-body {
    padding: 12px 14px !important;
    border-top: 1px solid var(--color_border) !important;
    font-size: 0.82rem !important;
    color: var(--color_text_dim) !important;
}

/* ── .lb-toggle ───────────────────────────────────────────────────── */
/* Checkbox-based pill toggle switch */
.lb-toggle {
    display: inline-flex !important;
    align-items: center !important;
    gap: 10px !important;
    cursor: pointer !important;
    user-select: none !important;
}
/* Hide the real checkbox but keep it accessible */
.lb-toggle-inp {
    position: absolute !important;
    opacity: 0 !important;
    width: 0 !important;
    height: 0 !important;
    pointer-events: none !important;
}
.lb-toggle-track {
    display: inline-flex !important;
    align-items: center !important;
    width: 36px !important;
    height: 20px !important;
    border-radius: 10px !important;
    background: color-mix(in srgb, var(--color_border) 80%, transparent) !important;
    transition: background 0.2s !important;
    flex-shrink: 0 !important;
    padding: 2px !important;
    box-sizing: border-box !important;
}
.lb-toggle-thumb {
    width: 16px !important;
    height: 16px !important;
    border-radius: 50% !important;
    background: var(--color_text_dim) !important;
    box-shadow: none !important;
    transition: transform 0.2s, background 0.2s !important;
    flex-shrink: 0 !important;
}
/* Sibling CSS: input → track and input → track > thumb */
.lb-toggle-inp:checked ~ .lb-toggle-track {
    background: var(--color_primary) !important;
}
.lb-toggle-inp:checked ~ .lb-toggle-track .lb-toggle-thumb {
    transform: translateX(16px) !important;
    background: #fff !important;
}
.lb-toggle-inp:focus-visible ~ .lb-toggle-track {
    outline: 2px solid var(--color_primary) !important;
    outline-offset: 2px !important;
}
.lb-toggle:has(.lb-toggle-inp:disabled) {
    opacity: 0.45 !important;
    cursor: not-allowed !important;
}
.lb-toggle-label {
    font-size: 0.82rem !important;
    color: var(--color_text_normal) !important;
}

/* ── .lb-stat ─────────────────────────────────────────────────────── */
/* Big-number metric block */
.lb-stat {
    display: flex !important;
    flex-direction: column !important;
    gap: 3px !important;
}
.lb-stat-value {
    font-size: 1.65rem !important;
    font-weight: 700 !important;
    line-height: 1 !important;
    color: var(--color_text_normal) !important;
    font-variant-numeric: tabular-nums !important;
    letter-spacing: -0.02em !important;
}
.lb-stat-unit {
    font-size: 0.7em !important;
    font-weight: 400 !important;
    color: var(--color_text_dim) !important;
    margin-left: 3px !important;
}
.lb-stat-label {
    font-size: 0.73rem !important;
    color: var(--color_text_dim) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.07em !important;
}
.lb-stat-trend {
    font-size: 0.74rem !important;
    font-weight: 600 !important;
    color: var(--color_text_dim) !important;
}
.lb-stat-trend-up   { color: var(--color_ok,    #4caf50) !important; }
.lb-stat-trend-down { color: var(--color_error, #f44336) !important; }

/* ── .lb-skeleton ─────────────────────────────────────────────────── */
/* Shimmer loading placeholder */
@keyframes lb-shimmer {
    0%   { background-position: -200% 0; }
    100% { background-position:  200% 0; }
}
.lb-skeleton {
    display: block !important;
    width: 100% !important;
    height: 14px !important;
    border-radius: 3px !important;
    background: color-mix(in srgb, var(--color_border) 55%, transparent) !important;
    background-size: 200% 100% !important;
    animation: lb-shimmer 1.5s ease-in-out infinite !important;
}
.lb-skeleton-circle {
    width: 36px !important;
    height: 36px !important;
    border-radius: 50% !important;
}
.lb-skeleton-group {
    display: flex !important;
    flex-direction: column !important;
    gap: 8px !important;
}

/* ── .lb-list ─────────────────────────────────────────────────────── */
.lb-list {
    margin: 0 !important;
    padding: 0 0 0 1.4em !important;
    list-style: disc !important;
}
ol.lb-list {
    list-style: decimal !important;
}
.lb-list-unstyled {
    list-style: none !important;
    padding-left: 0 !important;
}
.lb-list-item {
    padding: 3px 0 !important;
    font-size: 0.83rem !important;
    color: var(--color_text_normal) !important;
    line-height: 1.5 !important;
}

/* ── .lb-avatar ───────────────────────────────────────────────────── */
/* Circular user image with CSS initials fallback via data-initials */
.lb-avatar {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 32px !important;
    height: 32px !important;
    min-width: 32px !important;
    border-radius: 50% !important;
    background: color-mix(in srgb, var(--color_primary) 18%, transparent) !important;
    border: 1px solid var(--color_border) !important;
    overflow: hidden !important;
    font-size: 0.72rem !important;
    font-weight: 700 !important;
    color: var(--color_primary) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.04em !important;
    flex-shrink: 0 !important;
    position: relative !important;
    vertical-align: middle !important;
}
/* Show initials text from the data attribute */
.lb-avatar[data-initials]::after {
    content: attr(data-initials) !important;
}
/* Image overlaid on top; hidden on error to reveal initials */
.lb-avatar-img {
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    border-radius: inherit !important;
}
.lb-avatar-sm  { width: 22px !important; height: 22px !important; min-width: 22px !important; font-size: 0.6rem !important; }
.lb-avatar-lg  { width: 48px !important; height: 48px !important; min-width: 48px !important; font-size: 0.9rem !important; }
.lb-avatar-xl  { width: 72px !important; height: 72px !important; min-width: 72px !important; font-size: 1.3rem !important; }
/* Container has loaded a real image — remove initial-letter backdrop */
.lb-avatar-has-img { padding: 0 !important; background: none !important; }

/* ── .lb-checkbox ────────────────────────────────────────────────── */
/* input.lb-checkbox specificity (0,1,1) beats input[type=checkbox] (0,1,1) by source order */
input.lb-checkbox {
    -webkit-appearance: none !important;
    appearance: none !important;
    display: inline-block !important;
    width: 16px !important;
    height: 16px !important;
    min-width: 16px !important;
    min-height: 0 !important;
    padding: 0 !important;
    margin: 0 8px 0 0 !important;
    background: transparent !important;
    border: 1px solid color-mix(in srgb, var(--color_primary) 50%, transparent) !important;
    border-radius: 5px !important;
    box-shadow: none !important;
    cursor: pointer !important;
    vertical-align: middle !important;
    flex: 0 0 auto !important;
    position: relative !important;
    transition: border-color 0.15s ease, background 0.15s ease !important;
}
input.lb-checkbox:checked {
    background: color-mix(in srgb, var(--color_primary) 22%, transparent) !important;
    border-color: var(--color_primary) !important;
}
/* Real tick mark (two rotated border edges) instead of a flat inset
   square — drawn in the accent colour itself, not a fixed white glyph,
   so it stays legible against the tinted fill across all 200 random
   accent themes rather than risking contrast on very light accents. */
input.lb-checkbox:checked::after {
    content: '' !important;
    position: absolute !important;
    left: 5px !important;
    top: 2px !important;
    width: 4px !important;
    height: 8px !important;
    background: transparent !important;
    border: solid var(--color_primary) !important;
    border-width: 0 2px 2px 0 !important;
    transform: rotate(45deg) !important;
}
/* Cinnamon/GTK pass (2026-08-11): a solid border-color change (the
   checkbox already has its own border to bump) rather than a soft glow
   ring. */
input.lb-checkbox:focus-visible {
    outline: none !important;
    border-color: var(--color_primary) !important;
}

/* ── .lb-radio ────────────────────────────────────────────────────── */
/* Consistent sizing on radio inputs; accent color follows palette */
input.lb-radio {
    accent-color: var(--color_primary) !important;
    width: 15px !important;
    height: 15px !important;
    min-width: 15px !important;
    min-height: 0 !important;
    cursor: pointer !important;
    vertical-align: middle !important;
    flex-shrink: 0 !important;
}
/* Cinnamon/GTK pass (2026-08-11): a crisp solid outline instead of a
   soft glow ring — native radio rendering (via accent-color) has no
   custom border to bump the way .lb-checkbox does above, so a thin
   outline is the closest equivalent to a "solid border change" here. */
input.lb-radio:focus-visible {
    outline: 2px solid var(--color_primary) !important;
    outline-offset: 1px !important;
}

/* ── Label + checkbox/radio flex centering ────────────────────────── */
label:has(> .lb-checkbox),
label:has(> .lb-radio),
label:has(> input[type="checkbox"]),
label:has(> input[type="radio"]) {
    display: inline-flex !important;
    align-items: center !important;
    gap: 6px !important;
    cursor: pointer !important;
    vertical-align: middle !important;
}

/* ── .lb-label ────────────────────────────────────────────────────── */
.lb-label {
    font-size: 0.8rem !important;
    font-weight: 600 !important;
    letter-spacing: 0.03em !important;
    text-transform: none !important;
    color: var(--color_text_normal) !important;
    display: block !important;
    margin-bottom: 4px !important;
}
.lb-label-req {
    color: var(--color_error, #f44336) !important;
    font-weight: 400 !important;
}

/* ── .lb-field — label + control + optional error, one composed unit ── */
.lb-field {
    display: flex;
    flex-direction: column;
    gap: 5px;
    min-width: 0;
}
/* The wrapper's own gap already spaces label/input/error — an
   .lb-input's own default 5px margin would double up on top of it.
   Descendant (not child) selector: some fields wrap their control in
   an inner row div (e.g. a password-generate button, a location
   status icon), so the input isn't always a direct child. */
.lb-field input,
.lb-field select,
.lb-field textarea {
    margin: 0 !important;
}
.lb-field-inline {
    flex-direction: row;
    align-items: center;
    gap: 10px;
}
.lb-field-error {
    font-size: 0.78rem;
    color: var(--color_error, #f44336);
}

/* ── .lb-collapsible ──────────────────────────────────────────────────
   Native <details>/<summary> — open/close state is the browser's own,
   no JS needed. The summary keeps the browser's default disclosure
   triangle (::marker) rather than a custom one; only spacing/color are
   themed here. */
.lb-collapsible {
    border-top: 1px solid var(--color_border);
    padding-top: 8px;
    margin-top: 4px;
}
.lb-collapsible-summary {
    cursor: pointer;
    font-weight: 600;
    font-size: 0.85rem;
    opacity: 0.85;
    user-select: none;
}
.lb-collapsible-summary:hover {
    opacity: 1;
}
.lb-collapsible-body {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-top: 8px;
}

/* ── .lb-img ──────────────────────────────────────────────────────── */
.lb-img {
    display: block;
    max-width: 100% !important;
    height: auto;
    border-radius: 4px;
    object-fit: cover;
}

/* ── Horizontal rule ──────────────────────────────────────────── */
hr {
    height: 1px;
    background: var(--mix) !important;
    width: 80%;
    margin: 2rem auto;
}

/* ── Scrollbar ────────────────────────────────────────────────── */
/* macOS-style overlay scrollbar: transparent track (invisible until
   there's a thumb to show), slim rounded thumb that only tints on hover —
   was a fixed always-visible track, which reads more like a classic
   Windows/GTK scrollbar than the floating macOS one. */
::-webkit-scrollbar {
    width: 6px;
    height: 6px;
}

::-webkit-scrollbar-track {
    background: transparent !important;
}

::-webkit-scrollbar-thumb {
    background: color-mix(in srgb, var(--color_primary) 40%, transparent) !important;
    border-radius: 999px !important;
}

::-webkit-scrollbar-thumb:hover {
    background: color-mix(in srgb, var(--color_primary) 70%, transparent) !important;
}

/* ── Custom voice-message player (chat / DM) ──────────────────────
 * Replaces the native <audio controls>, which renders differently in every
 * browser, with an identical play/seek/time widget everywhere.            */
.lb-voice {
    display: inline-flex !important;
    align-items: center;
    gap: 8px;
    margin: 5px !important;
    padding: 6px 10px;
    border-radius: 10px;
    background: transparent;
    min-width: 190px;
    max-width: 260px;
    box-sizing: border-box;
    border: 1px solid color-mix(in srgb, var(--color_border) 45%, transparent) !important;
    box-shadow: none !important;
}
.lb-voice-play {
    flex-shrink: 0;
    width: 28px !important;
    height: 28px !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border-radius: 50% !important;
    background: color-mix(in srgb, var(--color_primary) 22%, var(--mix)) !important;
    color: var(--color_text_stressed) !important;
    font-size: 0.62rem !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: none !important;
    box-shadow: none !important;
    cursor: pointer;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
}
.lb-voice-bar {
    flex: 1;
    height: 5px;
    border-radius: 999px;
    background: color-mix(in srgb, var(--color_primary) 16%, var(--mix));
    cursor: pointer;
    position: relative;
    overflow: hidden;
}
.lb-voice-fill {
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: 0%;
    background: var(--color_primary);
    border-radius: 999px;
}
.lb-voice-time {
    flex-shrink: 0;
    font-size: 0.6rem;
    color: color-mix(in srgb, var(--color_text_normal) 75%, transparent);
    font-variant-numeric: tabular-nums;
    min-width: 66px;
    text-align: right;
    white-space: nowrap;
}

/* ── Media cards (unit-01) ────────────────────────────────────── */
img[data-tactical-id=unit-01],
video[data-tactical-id=unit-01] {
    background: var(--mix) !important;
    padding: 0 !important;
    box-shadow: none !important;
    width: 480px;
    height: 270px;
    object-fit: cover;
    margin: 10px;
    transition:
        transform   0.45s cubic-bezier(0.22, 1, 0.36, 1),
        filter      0.45s ease,
        opacity     0.45s ease !important;
    position: relative;
    animation: popIn 0.7s cubic-bezier(0.22, 1, 0.36, 1) backwards !important;
    will-change: transform;
}

img[data-tactical-id=unit-01]:hover,
video[data-tactical-id=unit-01]:hover {
    transform: scale(1.06) !important;
    box-shadow: none !important;
    cursor: pointer !important;
    z-index: 10 !important;
}

img[data-tactical-id=unit-01]:active,
video[data-tactical-id=unit-01]:active {
    transform: scale(1.03) !important;
    box-shadow: none !important;
    z-index: 20 !important;
    transition: transform 0.3s ease-in-out, box-shadow 0.3s ease-in-out !important;
}

/*
 * Rotation is stored as data-rotation="N" on img elements saved by the editor.
 * Using the CSS `rotate` property (separate from `transform`) means it composes
 * correctly with the transform:scale() on :hover/:active without overriding it.
 */
img[data-tactical-id=unit-01][data-rotation="90"]  { rotate: 90deg; }
img[data-tactical-id=unit-01][data-rotation="180"] { rotate: 180deg; }
img[data-tactical-id=unit-01][data-rotation="270"] { rotate: 270deg; }
img[data-tactical-id=unit-01][data-rotation="-90"] { rotate: -90deg; }

@keyframes popIn {
    0% {
        opacity:   0;
        transform: scale(0.88);
        filter:    blur(6px);
    }
    65% { filter: blur(0); }
    100% {
        opacity:   1;
        transform: scale(1);
        filter:    blur(0);
    }
}

/* ── Traditional ───────────────────────────────────────────────────── */
@media screen and (max-width: 767px) {
    body {
        padding: max(10px, env(safe-area-inset-top)) max(10px, env(safe-area-inset-right)) max(10px, env(safe-area-inset-bottom)) max(10px, env(safe-area-inset-left));
        word-wrap: break-word;
        overflow-wrap: break-word;
        -webkit-text-size-adjust: 100%;
    }

    .glass-panel,
    .ui-surface,
    .container,
    header,
    nav,
    #div_left,
    #div_top,
    #div_bottom,
    #div_right,
    .rco_div,
    .wall-entry {
        box-shadow: none !important;
        margin-bottom: 16px;
        padding: 14px;
        line-height: 1.6;
        box-sizing: border-box;
    }

    /* Text-type inputs fill available width; buttons size to content */
    select,
    input:not([type=button]):not([type=submit]):not([type=reset]):not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file]),
    textarea,
    div[id=div_content] {
        width: 100%;
        min-height: 44px;
        margin: 6px 0;
        font-size: 13px !important;
    }

    button,
    input[type=button],
    input[type=submit],
    input[type=reset] {
        min-height: 44px;
        margin: 6px 0;
        font-size: 13px !important;
    }

    /* Tables scroll horizontally rather than overflow their container */
    table {
        max-width: 100%;
        display: block;
        overflow-x: auto;
    }

    img[data-tactical-id=unit-01],
    video[data-tactical-id=unit-01] {
        width: 100%;
        height: auto;
        max-height: 50dvh;
        margin: 15px 0;
    }

    /* Disable heavy filters on traditional */
    .glass-panel, .ui-surface, .container, header, nav,
    #div_left, #div_top, #div_bottom, #div_right, .rco_div, .wall-entry,
    select, input, button, textarea, div[id=div_content] {
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
    }

    .glass-panel::before, .glass-panel::after,
    .ui-surface::before, .ui-surface::after,
    .container::before, header::before, nav::before,
    #div_left::before, #div_top::before, #div_bottom::before, #div_right::before,
    .rco_div::before, .wall-entry::before {
        display: none !important;
        animation: none !important;
    }

    body:has(.wall-entry:hover) .wall-entry:not(:hover),
    body:has(.glass-panel:hover) .glass-panel:not(:hover),
    body:has([data-tactical-id=unit-01]:hover) [data-tactical-id=unit-01]:not(:hover) {
        filter: none !important;
        opacity: 1;
        transform: none !important;
    }

    /* Top bar — compact on tablet */
    #div_top { height: 44px !important; }

    /* Dialogs — wider on tablet */
    .lb-dlg-box { width: min(94vw, 480px) !important; }

    /* Code / pre blocks scroll rather than overflow */
    pre, code, .mono, kbd {
        max-width: 100%;
        overflow-x: auto;
        white-space: pre;
        word-break: normal;
    }

    /* Font-size for key UI navigation components */
    #span_title { font-size: 0.75rem !important; }
    /* Centered (the base #div_top #div_arbitrary rule, ~3365) genuinely
       cannot coexist with a right-anchored actions row on a ~412px phone:
       even a single button's worst-case left edge sits close enough to
       center that no title max-width shrink avoids overlap without
       truncating the title to a few characters. Left-anchoring instead
       (right after the menu icon) gives it a fixed, calculable safe zone
       that doesn't depend on guessing how wide the actions row will be. */
    #div_arbitrary {
        left: 60px !important;
        top: 50% !important;
        transform: translateY(-50%) !important;
        /* Was capped at 130px — at the narrow end of this range (~412px
           phones, where the original title/actions collision was found)
           26vw only reaches ~107px so the cap never mattered there; it
           was only clipping "title • user" (480-767 tier, index-early-
           bind.js) near the wide end of this same range, where the
           actions row has proportionally more room too (its own clamps
           scale the same way) — 200px stays well clear of it there. */
        max-width: clamp(80px, 26vw, 200px) !important;
        font-size: 0.72rem !important;
    }
    .admin-tab-btn { font-size: 0.8rem !important; }
    .admin-tab-group-label { font-size: 0.8rem !important; }
    .nav-label, .nav-link { font-size: 0.85rem !important; }
    .gb-author, .gb-date, .gb-loc { font-size: 0.8rem !important; }
    .gb-text { font-size: 0.95rem !important; }
    .sb-label { font-size: 0.8rem !important; }
}

/* ── Small phone (≤ 480 px) — global ──────────────────────────── */
@media (max-width: 480px) {

    /* Top bar — minimal height to save vertical space */
    #div_top {
        height: 40px !important;
    }

    /* Panels/cards — tighter padding */
    .glass-panel,
    .ui-surface,
    .container,
    #div_left,
    #div_right {
        padding: 10px !important;
        margin-bottom: 10px !important;
    }

    /* Headings — tighter margins save vertical space */
    h1 { margin: 0 0 12px !important; }
    h2 { margin: 0 0 10px !important; }
    h3, h4 { margin: 0 0 8px !important; }

    /* Dialogs — near-fullscreen on small phones */
    .lb-dlg-box {
        width: min(96vw, 480px) !important;
        max-height: 88dvh !important;
        overflow-y: auto !important;
        padding: 18px 16px !important;
    }

    /* Upload dialog drop zone — more compact */
    .lb-upl-drop {
        padding: 16px !important;
        font-size: 0.82rem !important;
    }

    /* Form controls — full width, comfortable touch size */
    input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]),
    textarea,
    select {
        width: 100% !important;
        font-size: 0.88rem !important;
        padding: 8px 10px !important;
    }

    /* Buttons — full width by default on tiny screens when standalone */
    .lb-dlg-btns { gap: 6px !important; }
    .lb-dlg-btn  { font-size: 0.75rem !important; padding: 8px 14px !important; }

    /* Navigation link text — compact */
    #span_title { font-size: 0.7rem !important; letter-spacing: 0.04em !important; }

    /* Admin sidebar tabs — compact */
    .admin-tab-btn  { font-size: 0.75rem !important; padding: 6px 10px !important; }
    .admin-tab-group-label { font-size: 0.75rem !important; }

    /* Guestbook */
    #gb_form_heading { font-size: 1rem !important; }

    /* Sign-up form */
    .su-panel { padding: 16px !important; }
    .su-in    { font-size: 0.88rem !important; }

    /* Tables — ensure scroll and small text */
    table {
        font-size: 0.78rem !important;
        max-width: 100%;
        display: block;
        overflow-x: auto;
    }

    /* Code blocks */
    pre, code, .mono, kbd {
        font-size: 0.78rem !important;
    }
}


.glass-panel:nth-child(1), .ui-surface:nth-child(1), .container:nth-child(1), header:nth-child(1), nav:nth-child(1), #div_left:nth-child(1), #div_top:nth-child(1), #div_bottom:nth-child(1), #div_right:nth-child(1), .rco_div:nth-child(1), .wall-entry:nth-child(1), img[data-tactical-id=unit-01]:nth-child(1), video[data-tactical-id=unit-01]:nth-child(1) { animation-delay: 0.12s !important; }
.glass-panel:nth-child(2), .ui-surface:nth-child(2), .container:nth-child(2), header:nth-child(2), nav:nth-child(2), #div_left:nth-child(2), #div_top:nth-child(2), #div_bottom:nth-child(2), #div_right:nth-child(2), .rco_div:nth-child(2), .wall-entry:nth-child(2), img[data-tactical-id=unit-01]:nth-child(2), video[data-tactical-id=unit-01]:nth-child(2) { animation-delay: 0.24s !important; }
.glass-panel:nth-child(3), .ui-surface:nth-child(3), .container:nth-child(3), header:nth-child(3), nav:nth-child(3), #div_left:nth-child(3), #div_top:nth-child(3), #div_bottom:nth-child(3), #div_right:nth-child(3), .rco_div:nth-child(3), .wall-entry:nth-child(3), img[data-tactical-id=unit-01]:nth-child(3), video[data-tactical-id=unit-01]:nth-child(3) { animation-delay: 0.36s !important; }
.glass-panel:nth-child(4), .ui-surface:nth-child(4), .container:nth-child(4), header:nth-child(4), nav:nth-child(4), #div_left:nth-child(4), #div_top:nth-child(4), #div_bottom:nth-child(4), #div_right:nth-child(4), .rco_div:nth-child(4), .wall-entry:nth-child(4), img[data-tactical-id=unit-01]:nth-child(4), video[data-tactical-id=unit-01]:nth-child(4) { animation-delay: 0.48s !important; }
.glass-panel:nth-child(5), .ui-surface:nth-child(5), .container:nth-child(5), header:nth-child(5), nav:nth-child(5), #div_left:nth-child(5), #div_top:nth-child(5), #div_bottom:nth-child(5), #div_right:nth-child(5), .rco_div:nth-child(5), .wall-entry:nth-child(5), img[data-tactical-id=unit-01]:nth-child(5), video[data-tactical-id=unit-01]:nth-child(5) { animation-delay: 0.6s !important; }
.glass-panel:nth-child(6), .ui-surface:nth-child(6), .container:nth-child(6), header:nth-child(6), nav:nth-child(6), #div_left:nth-child(6), #div_top:nth-child(6), #div_bottom:nth-child(6), #div_right:nth-child(6), .rco_div:nth-child(6), .wall-entry:nth-child(6), img[data-tactical-id=unit-01]:nth-child(6), video[data-tactical-id=unit-01]:nth-child(6) { animation-delay: 0.72s !important; }
.glass-panel:nth-child(7), .ui-surface:nth-child(7), .container:nth-child(7), header:nth-child(7), nav:nth-child(7), #div_left:nth-child(7), #div_top:nth-child(7), #div_bottom:nth-child(7), #div_right:nth-child(7), .rco_div:nth-child(7), .wall-entry:nth-child(7), img[data-tactical-id=unit-01]:nth-child(7), video[data-tactical-id=unit-01]:nth-child(7) { animation-delay: 0.84s !important; }
.glass-panel:nth-child(8), .ui-surface:nth-child(8), .container:nth-child(8), header:nth-child(8), nav:nth-child(8), #div_left:nth-child(8), #div_top:nth-child(8), #div_bottom:nth-child(8), #div_right:nth-child(8), .rco_div:nth-child(8), .wall-entry:nth-child(8), img[data-tactical-id=unit-01]:nth-child(8), video[data-tactical-id=unit-01]:nth-child(8) { animation-delay: 0.96s !important; }
.glass-panel:nth-child(9), .ui-surface:nth-child(9), .container:nth-child(9), header:nth-child(9), nav:nth-child(9), #div_left:nth-child(9), #div_top:nth-child(9), #div_bottom:nth-child(9), #div_right:nth-child(9), .rco_div:nth-child(9), .wall-entry:nth-child(9), img[data-tactical-id=unit-01]:nth-child(9), video[data-tactical-id=unit-01]:nth-child(9) { animation-delay: 1.08s !important; }
.glass-panel:nth-child(10), .ui-surface:nth-child(10), .container:nth-child(10), header:nth-child(10), nav:nth-child(10), #div_left:nth-child(10), #div_top:nth-child(10), #div_bottom:nth-child(10), #div_right:nth-child(10), .rco_div:nth-child(10), .wall-entry:nth-child(10), img[data-tactical-id=unit-01]:nth-child(10), video[data-tactical-id=unit-01]:nth-child(10) { animation-delay: 1.2s !important; }
.glass-panel:nth-child(11), .ui-surface:nth-child(11), .container:nth-child(11), header:nth-child(11), nav:nth-child(11), #div_left:nth-child(11), #div_top:nth-child(11), #div_bottom:nth-child(11), #div_right:nth-child(11), .rco_div:nth-child(11), .wall-entry:nth-child(11), img[data-tactical-id=unit-01]:nth-child(11), video[data-tactical-id=unit-01]:nth-child(11) { animation-delay: 1.32s !important; }
.glass-panel:nth-child(12), .ui-surface:nth-child(12), .container:nth-child(12), header:nth-child(12), nav:nth-child(12), #div_left:nth-child(12), #div_top:nth-child(12), #div_bottom:nth-child(12), #div_right:nth-child(12), .rco_div:nth-child(12), .wall-entry:nth-child(12), img[data-tactical-id=unit-01]:nth-child(12), video[data-tactical-id=unit-01]:nth-child(12) { animation-delay: 1.44s !important; }
.glass-panel:nth-child(13), .ui-surface:nth-child(13), .container:nth-child(13), header:nth-child(13), nav:nth-child(13), #div_left:nth-child(13), #div_top:nth-child(13), #div_bottom:nth-child(13), #div_right:nth-child(13), .rco_div:nth-child(13), .wall-entry:nth-child(13), img[data-tactical-id=unit-01]:nth-child(13), video[data-tactical-id=unit-01]:nth-child(13) { animation-delay: 1.56s !important; }
.glass-panel:nth-child(14), .ui-surface:nth-child(14), .container:nth-child(14), header:nth-child(14), nav:nth-child(14), #div_left:nth-child(14), #div_top:nth-child(14), #div_bottom:nth-child(14), #div_right:nth-child(14), .rco_div:nth-child(14), .wall-entry:nth-child(14), img[data-tactical-id=unit-01]:nth-child(14), video[data-tactical-id=unit-01]:nth-child(14) { animation-delay: 1.68s !important; }
.glass-panel:nth-child(15), .ui-surface:nth-child(15), .container:nth-child(15), header:nth-child(15), nav:nth-child(15), #div_left:nth-child(15), #div_top:nth-child(15), #div_bottom:nth-child(15), #div_right:nth-child(15), .rco_div:nth-child(15), .wall-entry:nth-child(15), img[data-tactical-id=unit-01]:nth-child(15), video[data-tactical-id=unit-01]:nth-child(15) { animation-delay: 1.8s !important; }
.glass-panel:nth-child(16), .ui-surface:nth-child(16), .container:nth-child(16), header:nth-child(16), nav:nth-child(16), #div_left:nth-child(16), #div_top:nth-child(16), #div_bottom:nth-child(16), #div_right:nth-child(16), .rco_div:nth-child(16), .wall-entry:nth-child(16), img[data-tactical-id=unit-01]:nth-child(16), video[data-tactical-id=unit-01]:nth-child(16) { animation-delay: 1.92s !important; }
.glass-panel:nth-child(17), .ui-surface:nth-child(17), .container:nth-child(17), header:nth-child(17), nav:nth-child(17), #div_left:nth-child(17), #div_top:nth-child(17), #div_bottom:nth-child(17), #div_right:nth-child(17), .rco_div:nth-child(17), .wall-entry:nth-child(17), img[data-tactical-id=unit-01]:nth-child(17), video[data-tactical-id=unit-01]:nth-child(17) { animation-delay: 2.04s !important; }
.glass-panel:nth-child(18), .ui-surface:nth-child(18), .container:nth-child(18), header:nth-child(18), nav:nth-child(18), #div_left:nth-child(18), #div_top:nth-child(18), #div_bottom:nth-child(18), #div_right:nth-child(18), .rco_div:nth-child(18), .wall-entry:nth-child(18), img[data-tactical-id=unit-01]:nth-child(18), video[data-tactical-id=unit-01]:nth-child(18) { animation-delay: 2.16s !important; }
.glass-panel:nth-child(19), .ui-surface:nth-child(19), .container:nth-child(19), header:nth-child(19), nav:nth-child(19), #div_left:nth-child(19), #div_top:nth-child(19), #div_bottom:nth-child(19), #div_right:nth-child(19), .rco_div:nth-child(19), .wall-entry:nth-child(19), img[data-tactical-id=unit-01]:nth-child(19), video[data-tactical-id=unit-01]:nth-child(19) { animation-delay: 2.28s !important; }
.glass-panel:nth-child(20), .ui-surface:nth-child(20), .container:nth-child(20), header:nth-child(20), nav:nth-child(20), #div_left:nth-child(20), #div_top:nth-child(20), #div_bottom:nth-child(20), #div_right:nth-child(20), .rco_div:nth-child(20), .wall-entry:nth-child(20), img[data-tactical-id=unit-01]:nth-child(20), video[data-tactical-id=unit-01]:nth-child(20) { animation-delay: 2.4s !important; }
.glass-panel:nth-child(21), .ui-surface:nth-child(21), .container:nth-child(21), header:nth-child(21), nav:nth-child(21), #div_left:nth-child(21), #div_top:nth-child(21), #div_bottom:nth-child(21), #div_right:nth-child(21), .rco_div:nth-child(21), .wall-entry:nth-child(21), img[data-tactical-id=unit-01]:nth-child(21), video[data-tactical-id=unit-01]:nth-child(21) { animation-delay: 2.52s !important; }
.glass-panel:nth-child(22), .ui-surface:nth-child(22), .container:nth-child(22), header:nth-child(22), nav:nth-child(22), #div_left:nth-child(22), #div_top:nth-child(22), #div_bottom:nth-child(22), #div_right:nth-child(22), .rco_div:nth-child(22), .wall-entry:nth-child(22), img[data-tactical-id=unit-01]:nth-child(22), video[data-tactical-id=unit-01]:nth-child(22) { animation-delay: 2.64s !important; }
.glass-panel:nth-child(23), .ui-surface:nth-child(23), .container:nth-child(23), header:nth-child(23), nav:nth-child(23), #div_left:nth-child(23), #div_top:nth-child(23), #div_bottom:nth-child(23), #div_right:nth-child(23), .rco_div:nth-child(23), .wall-entry:nth-child(23), img[data-tactical-id=unit-01]:nth-child(23), video[data-tactical-id=unit-01]:nth-child(23) { animation-delay: 2.76s !important; }
.glass-panel:nth-child(24), .ui-surface:nth-child(24), .container:nth-child(24), header:nth-child(24), nav:nth-child(24), #div_left:nth-child(24), #div_top:nth-child(24), #div_bottom:nth-child(24), #div_right:nth-child(24), .rco_div:nth-child(24), .wall-entry:nth-child(24), img[data-tactical-id=unit-01]:nth-child(24), video[data-tactical-id=unit-01]:nth-child(24) { animation-delay: 2.88s !important; }
.glass-panel:nth-child(25), .ui-surface:nth-child(25), .container:nth-child(25), header:nth-child(25), nav:nth-child(25), #div_left:nth-child(25), #div_top:nth-child(25), #div_bottom:nth-child(25), #div_right:nth-child(25), .rco_div:nth-child(25), .wall-entry:nth-child(25), img[data-tactical-id=unit-01]:nth-child(25), video[data-tactical-id=unit-01]:nth-child(25) { animation-delay: 3s !important; }
.glass-panel:nth-child(26), .ui-surface:nth-child(26), .container:nth-child(26), header:nth-child(26), nav:nth-child(26), #div_left:nth-child(26), #div_top:nth-child(26), #div_bottom:nth-child(26), #div_right:nth-child(26), .rco_div:nth-child(26), .wall-entry:nth-child(26), img[data-tactical-id=unit-01]:nth-child(26), video[data-tactical-id=unit-01]:nth-child(26) { animation-delay: 3.12s !important; }
.glass-panel:nth-child(27), .ui-surface:nth-child(27), .container:nth-child(27), header:nth-child(27), nav:nth-child(27), #div_left:nth-child(27), #div_top:nth-child(27), #div_bottom:nth-child(27), #div_right:nth-child(27), .rco_div:nth-child(27), .wall-entry:nth-child(27), img[data-tactical-id=unit-01]:nth-child(27), video[data-tactical-id=unit-01]:nth-child(27) { animation-delay: 3.24s !important; }
.glass-panel:nth-child(28), .ui-surface:nth-child(28), .container:nth-child(28), header:nth-child(28), nav:nth-child(28), #div_left:nth-child(28), #div_top:nth-child(28), #div_bottom:nth-child(28), #div_right:nth-child(28), .rco_div:nth-child(28), .wall-entry:nth-child(28), img[data-tactical-id=unit-01]:nth-child(28), video[data-tactical-id=unit-01]:nth-child(28) { animation-delay: 3.36s !important; }
.glass-panel:nth-child(29), .ui-surface:nth-child(29), .container:nth-child(29), header:nth-child(29), nav:nth-child(29), #div_left:nth-child(29), #div_top:nth-child(29), #div_bottom:nth-child(29), #div_right:nth-child(29), .rco_div:nth-child(29), .wall-entry:nth-child(29), img[data-tactical-id=unit-01]:nth-child(29), video[data-tactical-id=unit-01]:nth-child(29) { animation-delay: 3.48s !important; }
.glass-panel:nth-child(30), .ui-surface:nth-child(30), .container:nth-child(30), header:nth-child(30), nav:nth-child(30), #div_left:nth-child(30), #div_top:nth-child(30), #div_bottom:nth-child(30), #div_right:nth-child(30), .rco_div:nth-child(30), .wall-entry:nth-child(30), img[data-tactical-id=unit-01]:nth-child(30), video[data-tactical-id=unit-01]:nth-child(30) { animation-delay: 3.6s !important; }
.glass-panel:nth-child(31), .ui-surface:nth-child(31), .container:nth-child(31), header:nth-child(31), nav:nth-child(31), #div_left:nth-child(31), #div_top:nth-child(31), #div_bottom:nth-child(31), #div_right:nth-child(31), .rco_div:nth-child(31), .wall-entry:nth-child(31), img[data-tactical-id=unit-01]:nth-child(31), video[data-tactical-id=unit-01]:nth-child(31) { animation-delay: 3.72s !important; }
.glass-panel:nth-child(32), .ui-surface:nth-child(32), .container:nth-child(32), header:nth-child(32), nav:nth-child(32), #div_left:nth-child(32), #div_top:nth-child(32), #div_bottom:nth-child(32), #div_right:nth-child(32), .rco_div:nth-child(32), .wall-entry:nth-child(32), img[data-tactical-id=unit-01]:nth-child(32), video[data-tactical-id=unit-01]:nth-child(32) { animation-delay: 3.84s !important; }
.glass-panel:nth-child(33), .ui-surface:nth-child(33), .container:nth-child(33), header:nth-child(33), nav:nth-child(33), #div_left:nth-child(33), #div_top:nth-child(33), #div_bottom:nth-child(33), #div_right:nth-child(33), .rco_div:nth-child(33), .wall-entry:nth-child(33), img[data-tactical-id=unit-01]:nth-child(33), video[data-tactical-id=unit-01]:nth-child(33) { animation-delay: 3.96s !important; }
.glass-panel:nth-child(34), .ui-surface:nth-child(34), .container:nth-child(34), header:nth-child(34), nav:nth-child(34), #div_left:nth-child(34), #div_top:nth-child(34), #div_bottom:nth-child(34), #div_right:nth-child(34), .rco_div:nth-child(34), .wall-entry:nth-child(34), img[data-tactical-id=unit-01]:nth-child(34), video[data-tactical-id=unit-01]:nth-child(34) { animation-delay: 4.08s !important; }
.glass-panel:nth-child(35), .ui-surface:nth-child(35), .container:nth-child(35), header:nth-child(35), nav:nth-child(35), #div_left:nth-child(35), #div_top:nth-child(35), #div_bottom:nth-child(35), #div_right:nth-child(35), .rco_div:nth-child(35), .wall-entry:nth-child(35), img[data-tactical-id=unit-01]:nth-child(35), video[data-tactical-id=unit-01]:nth-child(35) { animation-delay: 4.2s !important; }
.glass-panel:nth-child(36), .ui-surface:nth-child(36), .container:nth-child(36), header:nth-child(36), nav:nth-child(36), #div_left:nth-child(36), #div_top:nth-child(36), #div_bottom:nth-child(36), #div_right:nth-child(36), .rco_div:nth-child(36), .wall-entry:nth-child(36), img[data-tactical-id=unit-01]:nth-child(36), video[data-tactical-id=unit-01]:nth-child(36) { animation-delay: 4.32s !important; }
.glass-panel:nth-child(37), .ui-surface:nth-child(37), .container:nth-child(37), header:nth-child(37), nav:nth-child(37), #div_left:nth-child(37), #div_top:nth-child(37), #div_bottom:nth-child(37), #div_right:nth-child(37), .rco_div:nth-child(37), .wall-entry:nth-child(37), img[data-tactical-id=unit-01]:nth-child(37), video[data-tactical-id=unit-01]:nth-child(37) { animation-delay: 4.44s !important; }
.glass-panel:nth-child(38), .ui-surface:nth-child(38), .container:nth-child(38), header:nth-child(38), nav:nth-child(38), #div_left:nth-child(38), #div_top:nth-child(38), #div_bottom:nth-child(38), #div_right:nth-child(38), .rco_div:nth-child(38), .wall-entry:nth-child(38), img[data-tactical-id=unit-01]:nth-child(38), video[data-tactical-id=unit-01]:nth-child(38) { animation-delay: 4.56s !important; }
.glass-panel:nth-child(39), .ui-surface:nth-child(39), .container:nth-child(39), header:nth-child(39), nav:nth-child(39), #div_left:nth-child(39), #div_top:nth-child(39), #div_bottom:nth-child(39), #div_right:nth-child(39), .rco_div:nth-child(39), .wall-entry:nth-child(39), img[data-tactical-id=unit-01]:nth-child(39), video[data-tactical-id=unit-01]:nth-child(39) { animation-delay: 4.68s !important; }
.glass-panel:nth-child(40), .ui-surface:nth-child(40), .container:nth-child(40), header:nth-child(40), nav:nth-child(40), #div_left:nth-child(40), #div_top:nth-child(40), #div_bottom:nth-child(40), #div_right:nth-child(40), .rco_div:nth-child(40), .wall-entry:nth-child(40), img[data-tactical-id=unit-01]:nth-child(40), video[data-tactical-id=unit-01]:nth-child(40) { animation-delay: 4.8s !important; }
.glass-panel:nth-child(41), .ui-surface:nth-child(41), .container:nth-child(41), header:nth-child(41), nav:nth-child(41), #div_left:nth-child(41), #div_top:nth-child(41), #div_bottom:nth-child(41), #div_right:nth-child(41), .rco_div:nth-child(41), .wall-entry:nth-child(41), img[data-tactical-id=unit-01]:nth-child(41), video[data-tactical-id=unit-01]:nth-child(41) { animation-delay: 4.92s !important; }
.glass-panel:nth-child(42), .ui-surface:nth-child(42), .container:nth-child(42), header:nth-child(42), nav:nth-child(42), #div_left:nth-child(42), #div_top:nth-child(42), #div_bottom:nth-child(42), #div_right:nth-child(42), .rco_div:nth-child(42), .wall-entry:nth-child(42), img[data-tactical-id=unit-01]:nth-child(42), video[data-tactical-id=unit-01]:nth-child(42) { animation-delay: 5.04s !important; }
.glass-panel:nth-child(43), .ui-surface:nth-child(43), .container:nth-child(43), header:nth-child(43), nav:nth-child(43), #div_left:nth-child(43), #div_top:nth-child(43), #div_bottom:nth-child(43), #div_right:nth-child(43), .rco_div:nth-child(43), .wall-entry:nth-child(43), img[data-tactical-id=unit-01]:nth-child(43), video[data-tactical-id=unit-01]:nth-child(43) { animation-delay: 5.16s !important; }
.glass-panel:nth-child(44), .ui-surface:nth-child(44), .container:nth-child(44), header:nth-child(44), nav:nth-child(44), #div_left:nth-child(44), #div_top:nth-child(44), #div_bottom:nth-child(44), #div_right:nth-child(44), .rco_div:nth-child(44), .wall-entry:nth-child(44), img[data-tactical-id=unit-01]:nth-child(44), video[data-tactical-id=unit-01]:nth-child(44) { animation-delay: 5.28s !important; }
.glass-panel:nth-child(45), .ui-surface:nth-child(45), .container:nth-child(45), header:nth-child(45), nav:nth-child(45), #div_left:nth-child(45), #div_top:nth-child(45), #div_bottom:nth-child(45), #div_right:nth-child(45), .rco_div:nth-child(45), .wall-entry:nth-child(45), img[data-tactical-id=unit-01]:nth-child(45), video[data-tactical-id=unit-01]:nth-child(45) { animation-delay: 5.4s !important; }
.glass-panel:nth-child(46), .ui-surface:nth-child(46), .container:nth-child(46), header:nth-child(46), nav:nth-child(46), #div_left:nth-child(46), #div_top:nth-child(46), #div_bottom:nth-child(46), #div_right:nth-child(46), .rco_div:nth-child(46), .wall-entry:nth-child(46), img[data-tactical-id=unit-01]:nth-child(46), video[data-tactical-id=unit-01]:nth-child(46) { animation-delay: 5.52s !important; }
.glass-panel:nth-child(47), .ui-surface:nth-child(47), .container:nth-child(47), header:nth-child(47), nav:nth-child(47), #div_left:nth-child(47), #div_top:nth-child(47), #div_bottom:nth-child(47), #div_right:nth-child(47), .rco_div:nth-child(47), .wall-entry:nth-child(47), img[data-tactical-id=unit-01]:nth-child(47), video[data-tactical-id=unit-01]:nth-child(47) { animation-delay: 5.64s !important; }
.glass-panel:nth-child(48), .ui-surface:nth-child(48), .container:nth-child(48), header:nth-child(48), nav:nth-child(48), #div_left:nth-child(48), #div_top:nth-child(48), #div_bottom:nth-child(48), #div_right:nth-child(48), .rco_div:nth-child(48), .wall-entry:nth-child(48), img[data-tactical-id=unit-01]:nth-child(48), video[data-tactical-id=unit-01]:nth-child(48) { animation-delay: 5.76s !important; }
.glass-panel:nth-child(49), .ui-surface:nth-child(49), .container:nth-child(49), header:nth-child(49), nav:nth-child(49), #div_left:nth-child(49), #div_top:nth-child(49), #div_bottom:nth-child(49), #div_right:nth-child(49), .rco_div:nth-child(49), .wall-entry:nth-child(49), img[data-tactical-id=unit-01]:nth-child(49), video[data-tactical-id=unit-01]:nth-child(49) { animation-delay: 5.88s !important; }
.glass-panel:nth-child(50), .ui-surface:nth-child(50), .container:nth-child(50), header:nth-child(50), nav:nth-child(50), #div_left:nth-child(50), #div_top:nth-child(50), #div_bottom:nth-child(50), #div_right:nth-child(50), .rco_div:nth-child(50), .wall-entry:nth-child(50), img[data-tactical-id=unit-01]:nth-child(50), video[data-tactical-id=unit-01]:nth-child(50) { animation-delay: 6s !important; }

/* ── Loading splash ───────────────────────────────────────────── */
/* Override per-page #000 backgrounds so the light theme doesn't flash dark */
#loading_splash {
    background: var(--theme-color-bg) !important;
    color: var(--color_text_normal) !important;
}


/* ── Daytime: solid light backdrop, wallpaper suppressed ──────── */
/* Suppress the dark X-Files photo — body sits on the light html bg instead */

/* ── Respect reduced-motion preference ────────────────────────── */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}

/* ══════════════════════════════════════════════════════════════
   GLOBAL POLISH — typography, links, buttons, scroll, focus
   ══════════════════════════════════════════════════════════════ */

/* ── Anchor links: accent color, no underline by default ─────── */
a {
    color: var(--color_primary) !important;
    text-decoration: none !important;
    transition: color 0.15s ease, opacity 0.15s ease !important;
}
a:hover {
    color: var(--accent_lit) !important;
    text-decoration: none !important;
}

/* ── Keyboard focus: visible HUD outline, no browser default ─── */
:focus-visible {
}
:focus:not(:focus-visible) {
}

/* ── Horizontal rule: thin accent separator ─────────────────── */
hr {
    margin: 1.2rem 0 !important;
}

/* ── Headings: tight tracking, no extra margin top ──────────── */
h1, h2, h3, h4, h5, h6 {
    line-height: 1.25 !important;
    letter-spacing: 0.025em !important;
    margin-top: 0 !important;
}

/* ── Code / pre: terminal look ──────────────────────────────── */
code, pre, kbd {
    font-family: Terminus, 'Courier New', monospace !important;
    font-size: 0.88em !important;
    color: var(--accent_lit) !important;
    background: color-mix(in srgb, var(--color_primary) 8%, var(--mix)) !important;
    padding: 1px 5px !important;
    border-radius: var(--theme-radius-xs) !important;
}
pre {
    padding: 12px 16px !important;
    overflow-x: auto !important;
    line-height: 1.6 !important;
}
pre code { background: none !important; padding: 0 !important; }

/* ── Blockquote: left accent bar ────────────────────────────── */
blockquote {
    padding-left: 14px !important;
    margin: 0.8rem 0 !important;
    opacity: 0.8;
    font-style: italic;
}

/* ── Table: clean HUD grid ──────────────────────────────────── */
table {
    border-collapse: collapse !important;
    width: 100%;
}
th {
    font-size: 10px !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase !important;
    font-weight: 700 !important;
    color: var(--color_primary) !important;
    padding: 8px 12px !important;
    text-align: left !important;
}
td {
    padding: 8px 12px !important;
    vertical-align: top !important;
}

/* ── Placeholder text: subtle dim ───────────────────────────── */
::placeholder {
    color: var(--text_dim) !important;
    opacity: 0.45 !important;
}

/* ── Input padding: breathe a bit more ─────────────────────── */
input[type="text"],
input[type="email"],
input[type="password"],
input[type="search"],
input[type="number"],
textarea,
select {
    padding: 8px 12px !important;
    line-height: 1.5 !important;
}

/* ── Traditional bottom nav ─────────────────────────────────────── */
#site-traditional-nav {
    display: none;
}
@media (max-width: 767px) {
    html.main-frame #site-traditional-nav {
        display: flex;
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        height: calc(56px + env(safe-area-inset-bottom));
        padding-bottom: env(safe-area-inset-bottom);
        z-index: 9000;
        background: var(--bg_raised);
        align-items: stretch;
    }
    html.main-frame #site-traditional-nav a {
        flex: 1;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        color: var(--color_text_normal) !important;
        text-decoration: none !important;
        font-size: 11px;
        letter-spacing: 0.06em;
        text-transform: uppercase;
        gap: 4px;
        opacity: 0.5;
        transition: color 0.15s ease, opacity 0.15s ease !important;
        min-height: 0;
        padding: 6px 4px 0;
        background: transparent !important;
        box-shadow: none !important;
    }
    html.main-frame #site-traditional-nav a.active,
    html.main-frame #site-traditional-nav a:hover {
        color: var(--color_primary) !important;
        opacity: 1;
    }
    html.main-frame #site-traditional-nav a svg {
        width: 22px;
        height: 22px;
        flex-shrink: 0;
    }
    html.main-frame #site-traditional-nav a span {
        font-size: 11px;
        letter-spacing: 0.06em;
        text-transform: uppercase;
    }
    html.main-frame body {
        padding-bottom: calc(56px + env(safe-area-inset-bottom)) !important;
    }
}

/* ── Media players ────────────────────────────────────────────────── */

.lbg-player {
    display: flex !important;
    flex-direction: column;
    flex: 1 1 auto;
    min-width: 0;
    width: 100%;
    text-align: left !important;
    background: none !important;
    border: 1px solid color-mix(in srgb, var(--color_border) 45%, transparent) !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 5px !important;
}

/* suppress double-border: the outer .lbg-player carries the border/shadow */
.lbg-player video,
.lbg-player audio {
    border: none !important;
    box-shadow: none !important;
}

/* Hide the native <audio> source element — replaced by custom controls */
.lbg-player--audio audio {
    position: absolute !important;
    left: -9999px !important;
    width: 1px !important;
    height: 1px !important;
    opacity: 0 !important;
    pointer-events: none !important;
}

/* ── Video viewport ───────────────────────────────────────────────── */
.lbg-player .lbg-player__viewport {
    position: relative;
    overflow: hidden;
    width: 100%;
    background: #000 !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 0 !important;
}
.lbg-player--video video {
    display: block !important;
    width: 100% !important;
    cursor: pointer;
    background: #000 !important;
}

/* ── Center overlay (visible when paused, hidden when playing) ─────── */
.lbg-player .lbg-player__overlay {
    position: absolute !important;
    inset: 0;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    background: rgba(0,0,0,0.22) !important;
    transition: opacity 0.25s !important;
    animation: none !important;
    opacity: 1 !important;
    pointer-events: none;
    padding: 0 !important;
    margin: 0 !important;
    box-shadow: none !important;
}
.lbg-player .lbg-player__overlay--playing {
    opacity: 0 !important;
}
.lbg-player__bigplay {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 52px !important;
    height: 52px !important;
    min-height: 52px !important;
    border-radius: var(--theme-radius-xs) !important;
    background: rgba(0,0,0,0.52) !important;
    color: #fff !important;
    cursor: pointer;
    pointer-events: all;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    transition: background 0.15s !important;
    padding: 0 !important;
    margin: 0 !important;
}
.lbg-player__bigplay:hover {
    background: rgba(0,0,0,0.78) !important;
}

/* ── Controls bar ─────────────────────────────────────────────────── */
.lbg-player .lbg-player__controls {
    display: flex !important;
    align-items: center !important;
    gap: 4px !important;
    padding: 6px 10px !important;
    background: color-mix(in srgb, var(--color_primary) 10%, var(--bg_dark)) !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    margin: 0 !important;
    min-height: 0 !important;
    flex-shrink: 0;
}
.lbg-player--audio .lbg-player__controls {
}

/* ── Buttons inside player ────────────────────────────────────────── */
.lbg-player .lbg-player__btn {
    flex-shrink: 0 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 28px !important;
    height: 28px !important;
    min-height: 28px !important;
    padding: 0 !important;
    margin: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    background: none !important;
    color: var(--color_text_dim) !important;
    cursor: pointer;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    transition: color 0.15s !important;
}
.lbg-player .lbg-player__btn:hover {
    color: var(--color_primary) !important;
    background: none !important;
}

/* ── Scrub / seek bar ─────────────────────────────────────────────── */
.lbg-player .lbg-player__scrub {
    flex: 1 !important;
    position: relative;
    height: 20px;
    display: flex;
    align-items: center;
    cursor: pointer;
    background: none !important;
    padding: 0 !important;
    margin: 0 4px !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
}
.lbg-player .lbg-player__track {
    position: absolute;
    left: 0; right: 0;
    height: 3px;
    background: color-mix(in srgb, var(--color_primary) 18%, var(--mix)) !important;
    pointer-events: none;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 0 !important;
}
.lbg-player .lbg-player__fill {
    height: 100%;
    width: 0%;
    background: var(--color_primary) !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 0 !important;
    transition: width 0.08s linear;
    pointer-events: none;
}
.lbg-player__seek {
    position: absolute;
    left: 0; right: 0; top: 0; bottom: 0;
    width: 100% !important;
    height: 100% !important;
    min-height: 0 !important;
    -webkit-appearance: none !important;
    appearance: none !important;
    background: transparent !important;
    margin: 0 !important;
    padding: 0 !important;
    cursor: pointer;
    z-index: 1;
    box-shadow: none !important;
}
.lbg-player__seek:focus { outline: none !important; }
.lbg-player__seek::-webkit-slider-runnable-track {
    background: transparent !important;
    height: 3px;
    cursor: pointer;
}
.lbg-player__seek::-webkit-slider-thumb {
    -webkit-appearance: none !important;
    width: 11px !important;
    height: 11px !important;
    border-radius: var(--theme-radius-xs) !important;
    background: var(--color_primary) !important;
    cursor: pointer;
    margin-top: -4px;
    box-shadow: none !important;
    transition: transform 0.12s !important;
}
.lbg-player__seek:hover::-webkit-slider-thumb,
.lbg-player__seek:active::-webkit-slider-thumb {
    transform: scale(1.4);
}
.lbg-player__seek::-moz-range-track {
    background: transparent !important;
    height: 3px;
}
.lbg-player__seek::-moz-range-thumb {
    width: 11px !important;
    height: 11px !important;
    border-radius: var(--theme-radius-xs) !important;
    background: var(--color_primary) !important;
    cursor: pointer;
    box-shadow: none !important;
}

/* ── Time display ─────────────────────────────────────────────────── */
.lbg-player .lbg-player__time {
    flex-shrink: 0;
    font-size: 10px !important;
    font-family: monospace !important;
    letter-spacing: 0.03em !important;
    color: var(--color_text_dim) !important;
    white-space: nowrap;
    background: none !important;
    padding: 0 2px !important;
    user-select: none;
    animation: none !important;
    opacity: 0.7 !important;
}
/* ── Solid opaque sidebar backgrounds ────────────────────────────────────────
   Must use html.subpage prefix to beat the specificity of the subpage-reset
   block above (html.subpage #id has specificity 1,1,1 vs plain #id = 1,0,0).
   Same specificity + later cascade position → this block wins.
   ─────────────────────────────────────────────────────────────────────────── */
html.subpage #dm_convos_panel,
html.subpage #fm_tree,
html.subpage #db_sidebar,
html.subpage #hs_section_nav,
html.subpage #private_fto_div_sidebar_div,
html.subpage #admin_tab_bar,
html.subpage #div_entries_sidebar {
    background: var(--bg_raised) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}
/* Brand bars at the top of each sidebar — accent colour background so the
   var(--text_on_ac) label text remains legible. */
html.subpage #admin_sidebar_brand {
    background: var(--color_primary) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}
/* ── Log viewer text ─────────────────────────────────────────────────────────── */
#audit_log,
#int_log,
#erl_log,
#utl_log,
#fsl_log,
.bk-log {
    text-align: left !important;
}
/* ── Headings — left-justify on all sub-pages and admin tabs ─────────────────── */
html.subpage h1, html.subpage h2, html.subpage h3,
html.subpage h4, html.subpage h5, html.subpage h6,
.admin-tab-panel h1, .admin-tab-panel h2, .admin-tab-panel h3,
.admin-tab-panel h4, .admin-tab-panel h5, .admin-tab-panel h6 {
    text-align: left !important;
}
/* ── Border removal — explicit per-element overrides for stubborn UA defaults ─── */
button, input, select, textarea, fieldset, legend,
iframe, frame, object, embed,
table, th, td, tr, caption,
hr, details, summary, dialog {
    border: none !important;
    outline: none !important;
}


/* ═══════════════════════════════════════════════════════════════
   Main frame (LCARS shell, sidebar, ticker, splash)
   ═══════════════════════════════════════════════════════════════ */


/* ── Fonts: TheXFiles (headings + body) ── */

/* DOS 437 — IBM PC Code Page 437 bitmap typeface for the Sonic splash */
@font-face {
    font-family: 'DOS437';
    src: url('data:font/truetype;base64,AAEAAAARAQAABAAQTFRTSEc1gYIAAAYAAAABBk9TLzJwEmN5AAABmAAAAGBWRE1YgdiItAAABwgAAAXgY21hcCYCLMEAACRMAAAELGN2dCAAFAAAAAAp8AAAAAJmcGdtBlmcNwAAKHgAAAFzZ2FzcAAXAAUAAS74AAAAEGdseWY3wAgkAAAp9AAA/jxoZG148cq4BQAADOgAABdkaGVhZPjRu/8AAAEcAAAANmhoZWEKRAJ6AAABVAAAACRobXR46+g7kgAAAfgAAAQIbG9jYVbXExAAASgwAAACBm1heHADOBG3AAABeAAAACBuYW1lIZ0X2gABKjgAAAJtcG9zdGmlQTcAASyoAAACT3ByZXC4AAArAAAp7AAAAAQAAQAAAAEAAMHPRI1fDzz1ABkD6AAAAADKng4GAAAAAMqgaS8AAP4IBGUF3AABAAkAAgAAAAAAAAABAAAF3P4MAAAD6AAA/4MEZQABAAAAAAAAAAAAAAAAAAABAgABAAABAgErACsAAAAAAAEAAAAAAAoAAAIAEIsAAAAAAAMD6APoAAUAAAK8AooAAACMArwCigAAAd0AMgD6AAACAAAJAAAAAAAAgAAALwAAAEoAAAAAAAAAAFBZUlMAIAABIhIF3P4MAAAF3AH4IAABEUAAAAADZgXcAAAAIAAAA+gAAAAAAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAPoD6AAAA+gAfQPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAfQPoAH0D6AAAA+gAAAPoAAAD6AB9A+gAfQPoAH0D6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AD6A+gAfQPoAAAD6AAAA+gAAAPoAAAD6AB9A+gA+gPoAPoD6AAAA+gAfQPoAPoD6AAAA+gBdwPoAAAD6AAAA+gAfQPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gBdwPoAPoD6AB9A+gAfQPoAH0D6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gA+gPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AB9A+gAAAPoAAAD6AAAA+gAAAPoAH0D6AAAA+gA+gPoAAAD6AD6A+gAAAPoAAAD6AD6A+gAAAPoAAAD6AAAA+gAAAPoAAAD6AB9A+gAAAPoAAAD6AD6A+gAfQPoAAAD6AD6A+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AB9A+gBdwPoAH0D6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAfQPoAH0D6AB9A+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAfQPoAAAD6AAAA+gAAAPoAPoD6AAAA+gAAAPoAAAD6AAAA+gAfQPoAH0D6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAfQPoAAAD6AAAA+gBdwPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAPoD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAXcD6AAAA+gAAAPoAXcD6AAAA+gAAAPoAXcD6AD6A+gA+gPoAPoD6AAAA+gAAAPoAPoD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AD6A+gBdwPoAXcD6AD6A+gAAAPoAAAD6AAAA+gBdwPoAAAD6AAAA+gAAAPoAfQD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AB9A+gAAAPoAAAD6AB9A+gAAAPoAAAD6AB9A+gAAAPoAAAD6AB9A+gAfQPoAH0D6AF3A+gAAAPoAH0D6AAAA+gAfQPoAXcD6AF3A+gAAAPoAH0D6AB9A+gAfQPoAAAD6AAAA+gAAAPoAAAD6AD6AAABAgEBAQEBAQEBTDdMAUxMTEwBNwE3TDsBAQEBAQEBAQEBAQEBAQE7ATs7NwEBAQEBNwEBNwE3NwE3OwEBAQEBATc3Nzc7AQE3NwEBOzc7Nzc3Nzs7TDc3Nzs7AQE3ATcBOzs7Nzs3Nzs7ATc7ATc3Nzc7Nzs3Ozs3OzsBAQEBNzcBOwE3OwE7ATc3ATs7TDc3AQEBNzcBNwE7NzcBATsBTAE7AQE3NwEBNwE3AQEBAUwBTAEBATc3ATc3Nzc3AQEBAQEBAQEBNzc3Nzc3ATcBNwE3NwEBNzcBAQEBAQEBAQEBNwEBATcBOzs7AUxMATcBAQEBTAEBNwEBAQE3AQEBTEw7AQAAAAAAAQABAQEBAQAMAPgI/wAIAAz/+wAJAA7/+wAKAA//+gALABH/+gAMABL/+QANABT/+QAOABX/+AAPABf/+AAQABj/9wARABr/9wASABv/9gATAB3/9gAUAB7/9QAVACD/9QAWACH/9AAXACP/9AAYACT/8wAZACb/8wAaACf/8gAbACn/8gAcACr/8QAdACz/8QAeAC3/8AAfAC//8AAgADD/7wAhADL/7wAiADP/7gAjADX/7gAkADb/7QAlADj/7QAmADn/7AAnADv/7AAoADz/6wApAD7/6wAqAD//6gArAEH/6gAsAEL/6QAtAET/6QAuAEX/6AAvAEf/6AAwAEj/5wAxAEr/5wAyAEv/5gAzAE3/5gA0AE7/5QA1AFD/5QA2AFH/5AA3AFP/5AA4AFT/4wA5AFb/4wA6AFf/4gA7AFn/4gA8AFr/4QA9AFz/4QA+AF3/4AA/AF//4ABAAGD/3wBBAGL/3wBCAGP/3gBDAGX/3gBEAGb/3QBFAGj/3QBGAGn/3ABHAGv/3ABIAGz/2wBJAG7/2wBKAG//2gBLAHH/2gBMAHL/2QBNAHT/2QBOAHX/2ABPAHf/2ABQAHj/1wBRAHr/1wBSAHv/1gBTAH3/1gBUAH7/1QBVAID/1QBWAIH/1ABXAIP/1ABYAIT/0wBZAIb/0wBaAIf/0gBbAIn/0gBcAIr/0QBdAIz/0QBeAI3/0ABfAI//0ABgAJD/zwBhAJL/zwBiAJP/zgBjAJX/zgBkAJb/zQBlAJj/zQBmAJn/zABnAJv/zABoAJz/ywBpAJ7/ywBqAJ//ygBrAKH/ygBsAKL/yQBtAKT/yQBuAKX/yABvAKf/yABwAKj/xwBxAKr/xwByAKv/xgBzAK3/xgB0AK7/xQB1ALD/xQB2ALH/xAB3ALP/xAB4ALT/wwB5ALb/wwB6ALf/wgB7ALn/wgB8ALr/wQB9ALz/wQB+AL3/wAB/AL//vwCAAMD/vwCBAML/vgCCAMP/vgCDAMX/vQCEAMb/vQCFAMj/vACGAMn/vACHAMv/uwCIAMz/uwCJAM7/ugCKAM//ugCLANH/uQCMANL/uQCNANT/uACOANX/uACPANf/twCQANj/twCRANr/tgCSANv/tgCTAN3/tQCUAN7/tQCVAOD/tACWAOH/tACXAOP/swCYAOT/swCZAOb/sgCaAOf/sgCbAOn/sQCcAOr/sQCdAOz/sACeAO3/sACfAO//rwCgAPD/rwChAPL/rgCiAPP/rgCjAPX/rQCkAPb/rQClAPj/rACmAPn/rACnAPv/qwCoAPz/qwCpAP7/qgCqAP//qgCrAQH/qQCsAQL/qQCtAQT/qACuAQX/qACvAQf/pwCwAQj/pwCxAQr/pgCyAQv/pgCzAQ3/pQC0AQ7/pQC1ARD/pAC2ARH/pAC3ARP/owC4ART/owC5ARb/ogC6ARf/ogC7ARn/oQC8ARr/oQC9ARz/oAC+AR3/oAC/AR//nwDAASD/nwDBASL/ngDCASP/ngDDASX/nQDEASb/nQDFASj/nADGASn/nADHASv/mwDIASz/mwDJAS7/mgDKAS//mgDLATH/mQDMATL/mQDNATT/mADOATX/mADPATf/lwDQATj/lwDRATr/lgDSATv/lgDTAT3/lQDUAT7/lQDVAUD/lADWAUH/lADXAUP/kwDYAUT/kwDZAUb/kgDaAUf/kgDbAUn/kQDcAUr/kQDdAUz/kADeAU3/kADfAU//jwDgAVD/jwDhAVL/jgDiAVP/jgDjAVX/jQDkAVb/jQDlAVj/jADmAVn/jADnAVv/iwDoAVz/iwDpAV7/igDqAV//igDrAWH/iQDsAWL/iQDtAWT/iADuAWX/iADvAWf/hwDwAWj/hwDxAWr/hgDyAWv/hgDzAW3/hQD0AW7/hQD1AXD/hAD2AXH/hAD3AXP/gwD4AXT/gwD5AXb/ggD6AXf/ggD7AXn/gQD8AXr/gAD9AXz/gAD+AX3/fwD/AX//fwAAABcAAAEECQoJAAkJCQkJCQoJCgkICgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkICAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCAkJCQkJCQgJCQkJCAkJCQkJCQgJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkICAgJCQkJCQkJCQkJCQkJCQkICQkJCAkJCQkJCQkJCQkJCQkKCQoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQgJCQkJCgkJCQkJCQoJCQkJCQkJCQkJCQoJCAkKDAoACgoKCgoKDAoLCgoMDAwKCgoKDAsKCgoKCgoKCgoKCgoKCgoLCgsLCgoKCgoKCgoKCgoKCgoKCwoKCgoKCgoKCgoLCgoKCgoKCwoLCgoKCgsLCgoKCgsLCgoKCgoKCwsLCgsKCgsLCgoLCgoKCgoLCgsKCwsKCwsKCgoKCgoKCwoKCwoLCgoKCgsLCgoKCgoKCgoKCgoLCgoKCgsKDAoLCgoKCgoKCgoKCgoKCgsKCwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCwsLCgwLCgoKCgoKDAoKCgoKCgoKCgoKCwwLCgsNCwALCwsLCwsMCwwLDAwNDAsLCwsMCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsKCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsMCwsLCwsLCwsLCwsLCwsLCwsMCwsLCwsLCwsLCwsLCwsLDAsMCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLDAwLCwsLCwsMCwsLCwsLCwsLCwsMDAsLDA4MAAwMDAwMDA0NDQwMDQ4MDA0MDQwNDAwMDAwMDAwMDAwMDAwMDQwLCw0MDAwMDA0MDA0MDQ0MDQ0MDAwMDAwNDQ0NDQwMDQ0MDA0NDQ0NDQ0NDQwNDQ0NDQwMDQwNDAsNDQ0NDQ0NDQwNDQwNDQ0NDQ0NDQ0NDQ0NDAwMDA0NDA0MDQ0MDQwNDQwNDQwNDQwMDA0NDA0MDQ0NDAwNDAwMCwwMDQ0MDA0MDQwMDAwNDA0MDAwNDQwNDQ0NDQwMDAwMDAwMDA0NDQ0NDQwNDA0MDQ0MDA0NDAwMDAwMDAwMDA0MDAwNDA0NDQwMDQwNDAwMDA0MDA0MDAwMDQwMDA0MCwwNDg0ADQ0NDQ0NDg0ODQwODg4NDQ0NDg4NDQ0NDQ0NDQ0NDQ0NDQ0ODQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDg0NDQ0NDQ0NDQ0ODQ0NDQ0NDg0NDQ0NDQ4ODg0NDQ4NDQ0NDQ0NDQ4ODQ4NDQ4ODQ0ODQ0NDQ0ODQ4NDg4NDg4NDQ0NDQ0NDg0NDg0ODQ0NDQ0NDA0NDQ0NDQ0NDQ0ODQ0NDQ0NDg0NDQ0NDQ0NDQ0NDQ0NDQ4NDg0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ4ODQ4ODQ0NDQ0NDg0NDQ0NDQ0NDQ0NDg4NDQ8RDwAPDw8PDw8QDxAPEBAQEQ8PDw8RDw8PDw8PDw8PDw8PDw8PDw8PEBAPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDxAPDw8PDw8QDw8PDxAPDw8PDw8QDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PEBAQDw8PDw8PDw8PDw8PDw8PEA8RDxAPDw8PDw8PDw8PDw8PEA8QDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8QDw8PERAPDw8PDw8QDw8PDw8PDw8PDw8QERAPEBEQABAQEBAQEBEQERAQEREREBAQEBEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBEQEBAQEBAQEBAQEBAQEBAREBEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARERAQEBAQEBEQEBAQEBAQEBAQEBEREBAREhEAEREREREREhESERASEhERERERERERERERERERERERERERERERERAQEREREREREREREREREREREREREREREREREREREREREREREREQEREREREREBEREREQEREREREREBERERERERERERERERERERERERERERERERERERERERERERERERERERERERAQEBERERERERERERERERERERAREREQERERERERERERERERERIREhEREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREBERERESEREREREREhEREREREREREREREhEQERMVEwATExMTExMUExQTFBQVFBMTExMUExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMUExMTExMTExMTExMTExMTExMUExMTExMTExMTExMTExMTFBMUExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFBQTExMTExMUExMTExMTExMTExMUFBMTFRYVABUVFRUVFRYVFhUUFhYWFRUVFRYWFRUVFRUVFRUVFRUVFRUVFhUVFRUVFRUVFRUVFRUVFRUVFRYVFRUVFRUVFRUVFhUVFRUVFRYVFRUVFRUWFhYVFRUWFRUVFRUVFRUWFhUWFRUWFhUVFhUVFRUVFhUWFRYWFRYWFRUVFRUVFRYVFRYVFhUVFRUVFRQVFRUVFRUVFRUVFhUVFRUVFRYVFRUVFRUVFRUVFRUVFRUWFRYVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUWFhUWFhUVFRUVFRYVFRUVFRUVFRUVFRYWFRUYGRgAGBgYGBgYGRgZGBgZGRkYGBgYGRgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGRgYGBgYGBgYGBgYGBgYGBkYGRgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBkZGBgYGBgYGRgYGBgYGBgYGBgYGRkYGBsdGwAbGxsbGxscGxwbHBwdHBsbGxscGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsaGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsaGxsbGxsbGxsbGxsbGxsbGxscGxsbGxsbGxsbGxsbGxsbHBscGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbHBwbGxsbGxscGxsbGxsbGxsbGxscHBsbHR4dAB0dHR0dHR4dHh0cHh4eHR0dHR4eHR0dHR0dHR0dHR0dHR0dHh0dHR0dHR0dHR0dHR0dHR0dHR4dHR0dHR0dHR0dHh0dHR0dHR4dHR0dHR0eHh4dHR0eHR0dHR0dHR0eHh0eHR0eHh0dHh0dHR0dHh0eHR4eHR4eHR0dHR0dHR4dHR4dHh0dHR0dHR4dHR0dHR0dHR0dHh0dHR0dHR4dHR0dHR0dHR0dHR0dHR0eHR4dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0eHh0eHh0dHR0dHR4dHR0dHR0dHR0dHR4eHR0gISAAICAgICAgISAhICAhISEgICAgISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISAgICAgICAgICAgICAgICEgISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhICAgICAgISAgICAgICAgICAgISEgICEiIQAhISEhISEiISIhICIiISEhISEhISEhISEhISEhISEhISEhISEhICAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISAhISEhISEgISEhISAhISEhISEgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhICAgISEhISEhISEhISEhISEhICEhISAhISEhISEhISEhISEhIiEiISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgISEhISIhISEhISEiISEhISEhISEhISEiISAhJSYlACUlJSUlJSYlJiUkJiYmJSUlJSYmJSUlJSUlJSUlJSUlJSUlJiUlJSUlJSUlJSUlJSUlJSUlJSYlJSUlJSUlJSUlJiUlJSUlJSYlJSUlJSUmJiYlJSUmJSUlJSUlJSUmJiUmJSUmJiUlJiUlJSUlJiUmJSYmJSYmJSUlJSUlJSYlJSYlJiUlJSUlJSYlJSUlJSUlJSUlJiUlJSUlJSYlJSUlJSUlJSUlJSUlJSUmJSYlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUmJiUmJiUlJSUlJSYlJSUlJSUlJSUlJSYmJSUqLCoAKioqKioqLCorKiwsLCwqKioqLCsqKioqKioqKioqKioqKiorKisrKioqKioqKioqKioqKioqKyoqKioqKioqKiorKioqKioqKyorKioqKisrKioqKisrKioqKioqKysrKisqKisrKiorKioqKiorKisqKysqKysqKioqKioqKyoqKyorKioqKisrKioqKioqKioqKiorKioqKisqLCorKioqKioqKioqKioqKisqKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKysrKiwrKioqKioqLCoqKioqKioqKioqKywrKi4wLgAuLi4uLi4wLy8uMDAwLy4vLi8vLy4uLi4uLi4uLi4uLi4uLi8uMDAvLi4uLi4vLi4vLi8vLi8vLi4uLi4uLy8vLy8uLi8vLi4vLy8vLy8vLy8vLy8vLzAuLi8uLy4wLy8vLy8vLy8uLy8uLy8vLy8vLy8vLy8vLy4uLi4vLy4vLi8vLi8uLy8uMDAvLy8uLi4vLy4vLi8vLy4uMC4vLjAuLi8vLi4vLi8uLi4uLy4vLi4uLy8uLy8vLy8uLi4uLi4uLi4vLy8vLy8uLy4vLi8vLi4vLy4uLi4uLi4uLi4vLi4uLy4wLy8uLy8uLy4uLi4wLi4vLi4uLi8uLi4vLzAuMjQyADIyMjIyMjQyMzI0NDQ0MjIyMjQzMjIyMjIyMjIyMjIyMjIyMzIzMzIyMjIyMjIyMjIyMjIyMjMyMjIyMjIyMjIyMzIyMjIyMjMyMzIyMjIzMzIyMjIzMzIyMjIyMjMzMzIzMjIzMzIyMzIyMjIyMzIzMjMzMjMzMjIyMjIyMjMyMjMyMzIyMjIzMzIyMjIyMjIyMjIyMzIyMjIzMjQyMzIyMjIyMjIyMjIyMjIzMjMyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjMzMzI0MzIyMjIyMjQyMjIyMjIyMjIyMjM0MzI2ODYANjY2NjY2ODc3Njg4ODc2NzY3Nzc2NjY2NjY2NjY2NjY2NjY3Njg4NzY2NjY2NzY2NzY3NzY3NzY2NjY2Njc3Nzc3NjY3NzY2Nzc3Nzc3Nzc3Nzc3Nzc4NjY3Njc2ODc3Nzc3Nzc3Njc3Njc3Nzc3Nzc3Nzc3Nzc2NjY2Nzc2NzY3NzY3Njc3Njg4Nzc3NjY2Nzc2NzY3Nzc2Njg2NzY4NjY3NzY2NzY3NjY2Njc2NzY2Njc3Njc3Nzc3NjY2NjY2NjY2Nzc3Nzc3Njc2NzY3NzY2Nzc2NjY2NjY2NjY2NzY2Njc2ODc3Njc3Njc2NjY2ODY2NzY2NjY3NjY2Nzc4Njo8OgA6Ojo6Ojo8Ojs6PDw8PDo6Ojo8Ozo6Ojo6Ojo6Ojo6Ojo6Ojs6Ozs6Ojo6Ojo6Ojo6Ojo6Ojo7Ojo6Ojo6Ojo6Ojs6Ojo6Ojo7Ojs6Ojo6Ozs6Ojo6Ozs6Ojo6Ojo7Ozs6Ozo6Ozs6Ojs6Ojo6Ojs6Ozo7Ozo7Ozo6Ojo6Ojo7Ojo7Ojs6Ojo6Ozs6Ojo6Ojo6Ojo6Ojs6Ojo6Ozo8Ojs6Ojo6Ojo6Ojo6Ojo6Ozo7Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo7Ozs6PDs6Ojo6Ojo8Ojo6Ojo6Ojo6Ojo7PDs6Q0VDAENDQ0NDQ0RDRENEREVEQ0NDQ0RDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JDQ0NDQ0NDQ0NDQ0NDQ0NDQ0RDQ0NDQ0NDQ0NDQ0NDQ0NEQ0RDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0ND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AA8ACgADK7oAAQACAAMruAABELgAENy4AATQuAAPELgABtC4AAoQuAAJ3LgADNC4AAIQuAAS0LgAARC4ABTQMDETMxUzFTMRIxUjFSM1MzUzESM1IzX6+n19fX36fX19fQTifX39En19fX0C7n19AAABAAAA+gPoA2sAHACvuAAdL7gAAy+4AB0QuAAA0LgAAC+4AAHcuAADELgABty4AA3QuAADELgAD9C4AAEQuAAR0LgAABC4ABPQuAAAELgAG9C4AAYQuAAe3AC6AA0ADgADK7oAAQACAAMrugAJAAoAAyu4AAEQuAAE0LgAAhC4AAbQuAANELgAENC4AA4QuAAS0LgADRC4ABTQuAAKELgAFtC4AAkQuAAY0LgAAhC4ABrQuAABELgAHNAwMRMzFTM1MxUjFTMVIxUzFSM1IxUjNTM1IzUzNSM1ffr6+n36+n36+vp9+vp9A2t9fX19fX19fX19fX19fQAAAAABAH0A+gNrA2sADABDugABAAAAAyu4AAEQuAAF0LgAABC4AAfQuAAAELgAC9AAuAAAL7gABi+6AAMABAADK7gABBC4AAjQuAADELgACtAwMQEzFTMVIxUjNSM1MzUBd/r6+vr6+gNr+n36+n36AAAAAQD6/4MCcQF3AAgAOboABAAFAAMrugAAAAUABBESObgAAC+4AAHcuAAAELgAB9AAuAAAL7oAAwAEAAMruAADELgABtAwMQEzESMVIzUzEQF3+n36fQF3/ol9fQF3AAAAAQAAAfQDawJxAAQAEwC6AAEAAgADK7gAARC4AATQMDERIRUhNQNr/JUCcX19AAAAAQF3AAACcQD6AAQAI7oAAQAAAAMruAAAELgAA9AAugABAAIAAyu4AAEQuAAE0DAxJTMVIzUBd/r6+vr6AAAAAAEAAAAAA2sD6AAcAOe6AA4ADwADK7oACAATAAMruAAIELgABNy4AADQuAAEELgAAdy4AA4QuAAK3LgABty4AALcuAAAELgAA9C4AAYQuAAZ0LgABdC4AAoQuAAV0LgACdC4ABMQuAAL0LgADxC4AAzcuAAOELgAEdC4AAgQuAAX0LgABBC4ABvQALoAEQAOAAMrugATAAwAAyu6AAEAAgADK7oAGwAEAAMruAARELgACtC4ABXcuAAG0LgAExC4AAjQuAAGELgAFNC4AAQQuAAW0LgACBC4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uAAH3LgABRC4AAncuAAHELgAC9C4AAUQuAAN0LgAHBC4AA7QuAAeELgAD9C4AAEQuAAR0LgAIBC4ABLQuAAAELgAE9C4AAEQuAAX0LgAIBC4ABjQuAAQELgAGdC4AB4QuAAa0LgABRC4ABvQuAAQELgAHdC4AAEQuAAf0LgAFRC4ACHQuAAAELgAI9AAugARABIAAyu6AAEAAgADK7oABQAcAAMruAABELgAINy4AATQuAACELgAHty4AAbQuAAcELgACNC4ABIQuAAX3LgADtC4ABvcuAAK0LgACdy4ABEQuAAZ3LgADNC4ABEQuAAU0LgAEBC4ABXQuAAOELgAFtC4AAoQuAAa0LgABRC4ACHQuAACELgAItC4AAMQuAAj0LgAARC4ACTQMDETMxUzFTMVMxUzFSMVIxUjFSMVIzUzNTM1MzUzNSM1IzUjNSM1ffp9fX19fX19ffp9fX19fX19fQRlfX19fX19fX19fX19fX19fX19AAACAAAAAANrBOIAFAAZAK26ABAAEQADK7oACAAJAAMrugALAAkACBESObgACy+4AAbcuAAB0LgACBC4AATcuAAIELgADdC4AAkQuAAV0LgACBC4ABbQuAANELgAF9C4AAkQuAAY0AC6ABYAFwADK7oAAQACAAMruAACELgABNy4AAzQuAACELgADtC4AAMQuAAP0LgABBC4ABDQuAACELgAEtC4AAMQuAAT0LgAARC4ABTQuAAWELgAGdAwMRMhFTMVIxUjESMRMzUzNSEVIzUzNRMzFSM1fQJxfX19+n19/on6ffr6+gTiffp9/okBd336+vp9/Bj6+gAAAAABAAAAAANrBGUAFABXuAAVL7gACi+4AAPcuAAVELgAEdC4ABEvuAAM3LgAAxC4ABbcALoADQAOAAMrugABAAIAAyu4AAIQuAAK0LgADRC4ABDQuAACELgAEtC4AAEQuAAU0DAxEyEVMxEjFSERMzUhESEVITUjETM1fQJxfX3+ifr+iQH0/Y99fQRlff2PfQH0+vyVfX0Da30AAAACAAAAAANrBOIAFAAdANm6AAwADQADK7oABwAbAAMrugAPAA0ADBESObgADy+4ABfcuAAA0LgAFxC4AAHcuAAV0LgAAtC4ABsQuAAD0LgAARC4AAXcuAAbELgACdC4AAwQuAAR0LgAFxC4ABPQuAAAELgA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AFO4AAwvuAAEL7gADBC4AADQuAAAL7gAAdy4AAQQuAAF3LgABBC4AAfQuAABELgACdC4AAUQuAAN3AC4AAYvuAAKL7gAAC+4AAQvugADAAgAAyswMREzESERMxEjESERI/oBd/r6/on6BOL+DAH0+x4Ccf2PAAAAAAEA+gAAAu4E4gAMADO6AAQACQADKwC6AAUABgADK7oAAQACAAMruAAFELgACNC4AAIQuAAK0LgAARC4AAzQMDETIRUjETMVITUzESM1+gH0fX3+DH19BOJ9/Bh9fQPofQAAAAABAAAAAANrBOIAEABPuAARL7gADS+4AATcuAARELgACdC4AAkvuAAM3AC6AAUABgADK7oAAQACAAMruAAFELgACNC4AAUQuAAM0LgAAhC4AA7QuAABELgAENAwMQEhFSMRIxUhNSMRMxEzESM1AXcB9H19/gx9+vp9BOJ9/Bh9fQF3/okD6H0AAQAAAAADawTiABwAlboAFgAZAAMrugAKAAMAAyu4ABYQuAAB0LoABQADAAoREjm4AAUvuAAI3LgABRC4AAvQuAAKELgADdC4AAgQuAAP0LgABRC4ABHQuAADELgAE9C4AAgQuAAe3AC6ABkAFwADK7oAAAAbAAMrugALAAwAAyu4AAsQuAAC0LgAABC4AAbQuAAXELgAENC4AAwQuAAU0DAxESERMzUzETMRIxUjFTMVMxEjESM1IxEhNTMRIzUBd319+n19fX36fX3+iX19BOL+DH0Bd/6Jffp9/okBd33+DH0D6H0AAAEAAAAAA2sE4gAQAE+6AAQADQADK7oACgAFAAMruAAKELgACNy4AAoQuAAS3AC6AAcACgADK7oAAQACAAMruAAKELgABdy4AAzQuAACELgADtC4AAEQuAAQ0DAxESEVIxEzNTM1MxEhNTMRIzUB9H36fX38lX19BOJ9/Bh9ff6JfQPofQAAAAABAAAAAANrBOIAFABruAAVL7gAANC4AAAvuAAB3LgAABC4AAPcuAAG3LgAAxC4AAjcuAAJ3LgACBC4AAvQuAAGELgADdC4AAMQuAAP0LgAARC4ABHQuAAAELgAE9C4AAkQuAAW3AC4AAovuAASL7gAAC+4AAgvMDERMxUzFTM1MzUzESMRIxUjNSMRIxH6fX19+vp9fX36BOJ9fX19+x4C7n19/RIE4gABAAAAAANrBOIAFABTuAAVL7gACC+4ABUQuAAA0LgAAC+4AAHcuAAIELgACdy4AAgQuAAL0LgAARC4ABHQuAAAELgAE9C4AAkQuAAW3AC4AAovuAASL7gAAC+4AAgvMDERMxUzFTMVMxEzESMRIzUjNSMRIxH6fX19+vp9fX36BOJ9fX0Bd/seAfR9ff0SBOIAAAAAAgAAAAADawTiAAwAEQBnuAASL7gADS+4AAPcuAASELgACdC4AAkvuAAP3LgADRC4ABDQuAADELgAE9wAugAFAAYAAyu6AAEAAgADK7gABRC4AAjQuAACELgACtC4AAEQuAAM0LgAAhC4AA3QuAAFELgAD9AwMRMhFTMRIxUhNSMRMzUFIREhEX0CcX19/Y99fQH0/okBdwTiffwYfX0D6H19/BgD6AAAAgAAAAADawTiABAAFQBzuAAWL7gAES+4AAPcuAAWELgADdC4AA0vuAAI3LgAEtC4ABEQuAAU0LgAAxC4ABfcALoACQAKAAMrugABAAIAAyu6AAUABgADK7gACRC4AAzQuAACELgADtC4AAEQuAAQ0LgAAhC4ABHQuAAFELgAE9AwMREhFTMRIxUhETMVITUzESM1BSMRMxEC7n19/ol9/gx9fQJx+voE4n3+iX3+DH19A+h9ff6JAXcAAAACAAD/BgNrBOIAEAAZAI+6ABMADQADK7oACgAUAAMrugADABEAAyu4AAoQuAAG3LgAAdC4AAMQuAAH0LgAChC4ABbQuAAJELgAF9C4ABEQuAAY0LgAAxC4ABvcALoABwAIAAMrugABAAIAAyu6ABQACgADK7gAFBC4AATQuAAUELgADNC4AAIQuAAO0LgAARC4ABDQuAACELgAEdAwMRMhFTMRIxUzFSE1ITUjETM1BSERMzUzFTMRfQJxfX19/on+iX19AfT+iX19fQTiffwY+n36fQPofX38GPp9A2sAAAIAAAAAA2sE4gAUABkAnboADgARAAMrugAGAAsAAyu4AAYQuAAB0LoACQALAAYREjm4AAkvuAAI3LgAA9C4AAkQuAAV0LgADhC4ABbQuAAJELgAGNC4AAgQuAAb3AC6ABEADwADK7oAAQACAAMrugAFAAYAAyu4AA8QuAAI0LgABhC4AArQuAAFELgAF9C4AA3cuAACELgAEtC4AAEQuAAU0LgAAhC4ABXQMDERIRUzESMVMxEjESM1IxEhNTMRIzUFIxEzEQLufX19+n19/ol9fQJx+voE4n3+ifr+DAH0ff2PfQPofX3+iQF3AAAAAAEAAAAAA2sE4gAkATu6ABgAFQADK7oADgAbAAMrugAgABUAGBESObgAIC+4AADQuAAOELgAAdC6AAUAGwAOERI5uAAFL7gABNy4ABgQuAAH0LgAIBC4AAncuAAFELgAC9C4AAQQuAAP0LgADhC4ABHQuAAgELgAE9C4AAUQuAAZ0LgAGBC4AB3QuAAVELgAIdC4ACAQuAAj0LgABBC4ACbcALoAEQASAAMrugABAAIAAyu6AAsAGgADK7oABQAMAAMruAACELgABNy4AAIQuAAG0LgAAxC4AAfQuAAEELgACNC4AAUQuAAJ0LgAGhC4AA7QuAARELgAFNC4ABEQuAAY0LgAFdC4ABgQuAAX3LgADBC4ABzQuAALELgAHtC4AAQQuAAg0LgABRC4ACHQuAACELgAItC4AAMQuAAj0LgAARC4ACTQMDETIRUzFSM1IRUzFTMVMxUzESMVITUjNTMVIREjNSM1IzUjNTM1fQJxffr+iX36fX19/Y99+gF3ffp9fX0E4n36+vp9fX3+iX19+voBd319ffp9AAABAH0AAANrBOIAEACTuAARL7gAD9C4AA8vuAAA0LgADxC4AAvcQQMAMAALAAFdQQMAsAALAAFduAAD3EEDALAAAwABXUEDADAAAwABXbgAAty4AAsQuAAG3LgAAxC4AAfQuAAPELgADdy4AArQuAACELgAEtwAugAHAAgAAyu6AAEABAADK7gABxC4AArQuAAEELgADNC4AAEQuAAQ0DAxEyERIzUjETMVITUzESMVIxF9Au59fX3+DH19fQTi/ol9/JV9fQNrfQF3AAABAAAAAANrBOIADABTuAANL7gAAy+4AA0QuAAA0LgAAC+4AAHcuAADELgABty4AAAQuAAL0LgABhC4AA7cALgAAC+4AAQvugAHAAgAAyu4AAcQuAAC0LgABxC4AArQMDERMxEhETMRIxUhNSMR+gF3+n39j30E4vubBGX7m319BGUAAAABAAAAAANrBOIAGAC1ugABAAAAAyu6AAoABwADK7oAFQAAAAEREjm4ABUvuAAE3LgABty4AAzcuAAHELgADdC4AAYQuAAP0LgABRC4ABDQuAAEELgAEdC4AAMQuAAS0LgAARC4ABPQuAAAELgAF9C4AAoQuAAa3AC4AAAvuAAIL7oABQAQAAMrugAHAA4AAyu4AAcQuAAC0LgABxC4AArQuAAFELgADNC4AA4QuAAS0LgABRC4ABTQuAAHELgAFtAwMREzETMVMzUzETMRIxUjFSMVIzUjNSM1IxH6fX19+n19fX19fX0E4vyVfX0Da/yVfX19fX19A2sAAAABAAAAAANrBOIAFABpugABAAAAAyu6AAoABwADK7oAEQAAAAEREjm4ABEvuAAQ3LgAA9C4ABAQuAAG3LgADdC4AAXQuAAGELgAC9y4AAMQuAAP0LgAABC4ABPQuAAKELgAFtwAuAAML7gAEC+4AAAvuAAILzAxETMRMxEzETMRMxEjFSM1IxUjNSMR+n19ffp9+n36fQTi/JUBd/6JA2v7m336+n0EZQABAAAAAANrBOIAJADrugABAAAAAyu6AAsABgADK7oAHQAAAAEREjm4AB0vuAAY3LgAA9C6AAcABgALERI5uAAHL7gACty4AAcQuAAN0LgACxC4AA/QuAAKELgAEdC4AAcQuAAT0LgABhC4ABXQuAABELgAGdC4AAAQuAAb0LgAARC4AB/QuAAdELgAIdC4AAAQuAAj0LgAChC4ACbcALoAEQASAAMrugABAAIAAyu4AAIQuAAG0LgAARC4AAjQuAACELgACtC4ABEQuAAU0LgAERC4ABjQuAASELgAGtC4ABEQuAAc0LgAAhC4ACLQuAABELgAJNAwMREzFTMVMzUzNTMVIxUjFTMVMxUjNSM1IxUjFSM1MzUzNSM1IzX6fX19+n19fX36fX19+n19fX0E4vp9ffr6+vr6+vp9ffr6+vr6+gABAH0AAANrBOIAFACLuAAVL7gAANC4AAAvuAAB3LgAABC4AAHcQQMAUAABAAFdQQMA0AABAAFduAAD3EEDAFAAAwABXUEDANAAAwABXbgAARC4AATcuAADELgABty4AAQQuAAJ0LgAARC4AA/QuAAAELgAE9C4AAYQuAAW3AC4AAAvuAAEL7oACwAMAAMruAALELgADtAwMRMzETMRMxEjFSMRMxUhNTMRIzUjEX36+vp9fX3+DH19fQTi/gwB9P4Mff4MfX0B9H0B9AABAAAAAANrBOIAJAEDugAhACMAAyu6AAgAFwADK7gAIxC4AADQuAAhELgACty4AAbcuAAC3LgACBC4AATcuAAGELgAHdC4AAXQuAAKELgAGdC4AAnQuAAXELgAC9C4AAYQuAAN0LgAHRC4AA7QuAAEELgAD9C4AAIQuAAR0LgAIxC4ABPQuAAhELgAFdC4AAgQuAAb0LgAFxC4AB/QALoADwASAAMrugABAB4AAyu6ABkACgADK7oAGwAIAAMruAAZELgABtC4AB3cuAAC0LgAGxC4AATQuAASELgADdy4AAoQuAAQ0LgAChC4ABTQuAAIELgAFtC4AAEQuAAh3LgAHRC4ACLQuAABELgAJNAwMREhESMVIxUjFSMVIxUhNTM1MxEhETM1MzUzNTM1MzUhFSMVIxEDa319fX19AXd9ffyVfX19fX3+iX19BOL+iX19fX36fX3+iQF3fX19ffp9fQF3AAEA+gAAAu4E4gAIACu6AAMAAAADK7gAABC4AAfQALoABQAGAAMrugABAAIAAyu4AAEQuAAI0DAxEyEVIxEzFSER+gH0+vr+DATiffwYfQTiAAAAAAEAAAAAA2sEZQAcAFe6AAEAAAADK7oADQAKAAMruAAAELgAA9y4AA0QuAAM3LgAD9C4AAoQuAAR0LgAAxC4ABfQuAABELgAGdC4AAAQuAAb0LgADRC4AB7cALgAAC+4AA4vMDERMxUzFTMVMxUzFTMVMxEjNSM1IzUjNSM1IzUjEX19fX19fX19fX19fX19BGV9fX19fX3+iX19fX19fQF3AAAAAQD6AAAC7gTiAAgAG7oAAgAFAAMrALoABQACAAMrugAAAAcAAyswMRMhESE1MxEjNfoB9P4M+voE4vsefQPofQAAAAABAAAD6ANrBdwAGADlugAQABEAAyu6AAcACgADK7oAEwARABAREjm4ABMvuAAO3LgAANC4AA4QuAAB3LgADBC4AALQuAAKELgAA9C4AAEQuAAF3LgAARC4AAvQuAAAELgADdC4ABAQuAAV0LgADhC4ABfQuAAHELgAGtwAugAFAAgAAyu4AAUQuAAM0LgAAdy4AAgQuAAH3LgACtC4AAPcuAAKELgABtC4AAcQuAAO0LgAChC4AA/QuAAIELgAENC4AAcQuAAS0LgAChC4ABPQuAAFELgAFNC4AAwQuAAV0LgAAxC4ABbQuAABELgAGNAwMQEzFTMVMxUzFSM1IzUjFSMVIzUzNTM1MzUBd319fX36fX19+n19fQXcfX19fX19fX19fX19AAEAAP8GA+j/gwAEABMAugABAAIAAyu4AAEQuAAE0DAxFSEVITUD6PwYfX19AAAAAAEA+gPoAu4FXwAMALu4AA0vuAAA0LgAAC+4AAHcuAAAELgACdxBAwAwAAkAAV1BAwBQAAkAAV1BAwDQAAkAAV1BAwCwAAkAAV24AATcuAAJELgACNxBAwDQAAgAAV1BAwCwAAgAAV1BAwAwAAgAAV1BAwBQAAgAAV24AAXcuAAAELgAC9C4AAUQuAAO3AC6AAMABgADK7gAAxC4AAHcuAAGELgABdy4AAjQuAAE0LgAAxC4AArQuAACELgAC9C4AAEQuAAM0DAxEzMVMxUzFSM1IzUjNfr6fX36fX0FX319fX19fQAAAAACAAAAAANrA2sAFAAZAJ26ABcADQADK7oABAAJAAMrugAIAAkABBESObgACC+4AAHQuAAIELgABdy4AAkQuAAR0LgACRC4ABXQuAAJELgAGNC4AAUQuAAb3AC6AAUABgADK7oAAQACAAMrugAQAA8AAyu4AAUQuAAI0LgABhC4AArQuAAFELgADNC4AAIQuAAS0LgAARC4ABTQuAAPELgAFdC4AAUQuAAX0DAxEyEVMxEzFSM1IxUhNSMRMzUhNSE1ASMRMxF9AfR9ffp9/ol9fQF3/okBd/r6A2t9/Y99fX19AXd9fX3+if6JAXcAAAACAAAAAANrBOIADgAVAIG6ABEACwADK7oABQAPAAMruAARELgAAdC6ABMADwAFERI5uAATL7gAA9C4ABMQuAAH3LgABRC4AAnQuAAPELgAFNC4AAcQuAAX3AC6AAkACgADK7oAAAANAAMrugADAAQAAyu4AAMQuAAT3LgABtC4AAQQuAAP0LgACRC4ABHQMDERIREzFTMVMxEjFSERIzUBIxEzESM1AXf6fX19/Y99AfR9+n0E4v6JfX3+DH0EZX3+DP2PAfR9AAEAAAAAA2sDawAUAJe4ABUvuAAFL7gABNy4ABUQuAAR0LgAES+4AAjcuAAFELgACdC4AAQQuAAL0LgABBC4ABbcALoADQAOAAMrugABAAIAAyu6AAoACQADK7gAAhC4AATcuAACELgABtC4AAMQuAAH0LgADRC4AAjQuAANELgAENC4AAkQuAAR0LgAAhC4ABLQuAADELgAE9C4AAEQuAAU0DAxEyEVMxUjNSERITUzFSMVITUjETM1fQJxffr+iQF3+n39j319A2t9fX39j319fX0CcX0AAAIAAAAAA2sE4gAUABsAv7oAGQALAAMrugACAAcAAyu6AA0ACwAZERI5uAANL7gAF9y4AADQugAFAAcAAhESObgABS+4AATcuAANELgACdC4ABkQuAAP0LgABxC4ABHQuAAXELgAE9C4AAcQuAAV0LgABxC4ABrQuAAEELgAHdwAugADAAQAAyu6AAAAEwADK7oAEAAPAAMruAADELgABtC4AAQQuAAI0LgAAxC4AArQuAAQELgAGNy4AAzQuAAPELgAFdC4AAMQuAAZ0DAxASERMxUjNSMVITUjETM1MzUzNSM1EyMVIxEzEQF3AXd9+n3+iX19ffp9fX19+gTi+5t9fX19AfR9ffp9/gx9/gwCcQAAAAIAAAAAA2sDawASABcAs7gAGC+4AAcvuAAK3LgAA9C4ABgQuAAP0LgADy+4AAbcuAAHELgAE9C4AAYQuAAU0LgABxC4ABbQuAAKELgAGdwAugALAAwAAyu6AAEAAgADK7oACAAHAAMruAACELgABNy4AAsQuAAG0LgACxC4AA7QuAAHELgAD9C4AAIQuAAQ0LgAAxC4ABHQuAABELgAEtC4AAIQuAAT0LgAAxC4ABTQuAAEELgAFty4AAMQuAAX0DAxEyEVMxUhESE1MxUjFSE1IxEzNQUhFSE1fQJxff2PAXf6ff2PfX0B9P6JAXcDa336/ol9fX19AnF9fX19AAABAH0AAANrBOIAGgCvugAOABMAAyu6AAMACAADK7gAAxC4AALcuAAF0LgADhC4AAnQuAAIELgAC9C4AAgQuAAP0LgAExC4ABfQuAADELgAHNwAugAPABAAAyu6AAEAAgADK7oACwAMAAMruAACELgABNy4AAEQuAAG3LgAAhC4AAjQuAADELgACdC4AA8QuAAS0LgADBC4ABTQuAALELgAFtC4AAIQuAAY0LgAAxC4ABnQuAABELgAGtAwMQEhFTMVIzUjNSMRMxUjETMVITUzESM1MxEzNQF3AXd9fX19fX19/gx9fX19BOJ9+n19/ol9/gx9fQH0fQF3fQACAAD+iQNrA2sAGAAdAMG6ABAADQADK7oABwACAAMrugADAAIABxESObgAAy+4AAbcuAADELgACdC4AAIQuAAR0LgADRC4ABXQuAACELgAGdC4ABAQuAAa0LgAAhC4ABzQuAAGELgAH9wAugAJAAoAAyu6AAEAAgADK7oAHAASAAMruAABELgABNC4AAIQuAAG0LgACRC4AAzQuAAJELgAENC4AA3QuAAQELgAD9y4ABwQuAAU0LgAAhC4ABbQuAABELgAGNC4AAIQuAAZ0DAxEyEVMzUzFSMRIxUhNSM1MxUzNSE1IxEzNQUjETMRfQF3ffp9ff4Mffr6/ol9fQF3+voDa319ffwYfX19ffp9AnF9ff2PAnEAAQAAAAADawTiABMAdboADgARAAMrugAGAAMAAyu4AA4QuAAB0LoACQADAAYREjm4AAkvuAAI3LgAAxC4AAvQuAAIELgAFdwAugARAA8AAyu6AAAAEwADK7oABAADAAMruAADELgABtC4AA8QuAAI0LgAAxC4AArQuAADELgADNwwMREhETM1MxUzESMRIxUjESE1MxEjAXd9+n36fX3+iX19BOL+DH19/RIC7n39j30D6AAAAgD6AAAC7gTiAAQADwBLugABAAAAAyu4AAAQuAAD0LgAARC4AAbQuAAAELgADNAAugAIAAkAAyu6AAEAAgADK7oABQAOAAMruAABELgABNC4AAgQuAAL0DAxATMVIzUDIREzFSE1MxEjNQF3+vp9AXd9/gx9fQTi+vr+if0SfX0CcX0AAgB9/okDawTiAAQAEwB7uAAUL7gAAC+4AAHcuAAAELgAA9C4AAEQuAAG0LgAFBC4AAzQuAAML7gAD9y4AAAQuAAQ0LgAARC4ABXcALoACAAJAAMrugABAAIAAyu6AAUAEgADK7gAARC4AATQuAAIELgAC9C4AAgQuAAP0LgADNC4AA8QuAAO3DAxATMVIzUDIREjFSE1IzUzFTMRIzUCcfr6fQF3ff4Mffr6fQTi+vr+ifubfX36+gPofQABAAAAAANrBOIAHACtugAWABkAAyu6AAoAAwADK7gAFhC4AAHQugAFAAMAChESObgABS+4AAjcuAAFELgAC9C4AAoQuAAN0LgACBC4AA/QuAAFELgAEdC4AAMQuAAT0LgACBC4AB7cALoADwAQAAMrugAZABcAAyu6AAAAGwADK7oACwAMAAMrugAGAAUAAyu4AAsQuAAC0LgABRC4AAjQuAAPELgAEtC4AAwQuAAU0LgAEBC4ABbQMDERIREzNTM1MxUjFSMVMxUzFSM1IzUjESE1MxEjNQF3fX36fX19ffp9ff6JfX0E4v2PfX19ffp9+vp9/ol9A+h9AAABAPoAAALuBOIACgAjugACAAcAAysAugADAAQAAyu6AAAACQADK7gAAxC4AAbQMDETIREzFSE1MxEjNfoBd33+DH19BOL7m319A+h9AAAAAAEAAAAAA2sDawASAGu6AA8AAAADK7oABAABAAMrugAIAAkAAyu4AAQQuAAG3LgABBC4AAvQuAADELgADNC4AAEQuAAN0LgAABC4ABHQuAAIELgAFNwAuAAIL7gAEC+6AAQACwADK7gABBC4AADQuAALELgADtAwMREhFTM1MxUzESMRIxEjESMRIxEBd336ffp9fX36A2t9fX39EgJx/gwB9P2PA2sAAAEAAAAAA2sDawAQAHG6AAEAAAADK7oACAAJAAMrugANAAAAARESObgADS+4AAzcuAAD0LgAABC4AA/QuAAIELgAEtwAuAAIL7gADC+6AAEAAgADK7gAARC4AATQuAACELgABtC4AAIQuAAK0LgAAhC4AA7QuAABELgAENAwMREzFTM1IRUzESMRIxEjESM1+n0Bd336+vp9A2t9fX39EgLu/RIC7n0AAAIAAAAAA2sDawAMABEAZ7gAEi+4AA0vuAAD3LgAEhC4AAnQuAAJL7gAD9y4AA0QuAAQ0LgAAxC4ABPcALoABQAGAAMrugABAAIAAyu4AAUQuAAI0LgAAhC4AArQuAABELgADNC4AAIQuAAN0LgABRC4AA/QMDETIRUzESMVITUjETM1BSERIRF9AnF9ff2PfX0B9P6JAXcDa339j319AnF9ff2PAnEAAAIAAP6JA2sDawAUABkAoboAAQAAAAMrugAHABUAAyu6ABEAAAABERI5uAARL7gADNy4AAPQuAAAELgAD9C4AAAQuAAT0LgADBC4ABbQuAAVELgAGNC4AAcQuAAb3AC6AA0ADgADK7oAAQACAAMrugAJAAoAAyu4AAEQuAAE0LgAAhC4AAbQuAANELgAENC4AAIQuAAS0LgAARC4ABTQuAACELgAFdC4AAkQuAAX0DAxETMVMzUhFTMRIxUhFTMVITUzESM1BSMRMxH6fQF3fX3+iX3+DH19AnH6+gNrfX19/Y99+n19A+h9ff2PAnEAAAIAAP6JA2sDawAUABkAmboAFwARAAMrugAHAAIAAyu6AAMAAgAHERI5uAADL7gABty4AAnQuAACELgADdC4AAIQuAAV0LgAAhC4ABjQuAAGELgAG9wAugAJAAoAAyu6AAEAAgADK7oAGAAOAAMruAABELgABNC4AAIQuAAG0LgACRC4AAzQuAAYELgAENC4AAIQuAAS0LgAARC4ABTQuAACELgAFdAwMRMhFTM1MxUjETMVITUzNSE1IxEzNQUjETMRfQF3ffp9ff4Mff6JfX0Bd/r6A2t9fX38GH19+n0CcX19/Y8CcQABAAAAAANrA2sAFgChugABAAAAAyu6AAgACQADK7oAEwAAAAEREjm4ABMvuAAO3LgAA9C4AAAQuAAR0LgAABC4ABXQuAAIELgAGNwAugAPABAAAyu6AAEAAgADK7oABwAIAAMruAABELgABNC4AAIQuAAG0LgAAhC4AArQuAAHELgAC9C4AAQQuAAN3LgADxC4ABLQuAACELgAFNC4AAcQuAAV0LgAARC4ABbQMDERMxUzNSEVMxUjNSMVIxEzFSE1MxEjNfp9AXd9+n19ff4MfX0Da319ffr6ff4MfX0CcX0AAAABAAAAAANrA2sAJAFXugAYABUAAyu6AA4AGwADK7oAIAAVABgREjm4ACAvuAAA0LgADhC4AAHQugAFABsADhESObgABS+4AATcuAAYELgAB9C4ACAQuAAJ3LgABRC4AAvQuAAEELgAD9C4AA4QuAAR0LgAIBC4ABPQuAAFELgAGdC4ABgQuAAd0LgAFRC4ACHQuAAgELgAI9C4AAQQuAAm3AC6ABEAEgADK7oAAQACAAMrugAFAAwAAyu4AAIQuAAE3LgAAhC4AAbQuAADELgAB9C4AAQQuAAI0LgABRC4AAnQuAARELgAD9y4ABrQuAAL3LgAGhC4AA7QuAARELgAFNC4ABAQuAAV0LgADxC4ABbQuAAaELgAF9C4ABEQuAAY0LgAEBC4ABnQuAAMELgAHNC4AAsQuAAe0LgABBC4ACDQuAAFELgAIdC4AAIQuAAi0LgAAxC4ACPQuAABELgAJNAwMRMhFTMVIzUhFTMVMxUzFTMVIxUhNSM1MxUhNSM1IzUjNSM1MzV9AnF9+v6Jffp9fX39j336AXd9+n19fQNrfX19fX19fX19fX19fX19fX19AAAAAAEAAAAAA2sE4gAWAIe6AAYADwADK7oACgAHAAMruAAGELgAANy4AAYQuAAB0LgAABC4AA3QuAAPELgAE9C4AAAQuAAV0LgAChC4ABjcALgAAC+6AAsADAADK7oACAAHAAMrugADAAQAAyu4AAsQuAAG0LgACxC4AA7QuAAHELgAD9C4AAQQuAAQ0LgAAxC4ABLQMDEBMxEzFSMRMzUzFSMVITUjESM1MzUzNQF3ffr6ffp9/ol9+vp9BOL+iX39j319fX0CcX36fQAAAAEAAAAAA2sDawAQAG26AAEAAAADK7oABgADAAMrugAJAAMABhESObgACS+4AAjcuAADELgAC9C4AAAQuAAP0LgACBC4ABLcALgAAC+4AAQvugAHAAgAAyu4AAcQuAAC0LgABxC4AArQuAAIELgADNC4AAcQuAAO0DAxETMRMxEzETMVIzUjFSE1IxH6+vp9+n3+iX0Da/0SAu79En19fX0C7gAAAQAAAAADawNrABQAk7oAAQAAAAMrugAMAAUAAyu6ABEAAAABERI5uAARL7gABNy6AAcABQAMERI5uAAHL7gACty4AAcQuAAN0LgAARC4AA/QuAAAELgAE9C4AAoQuAAW3AC4AAAvuAAIL7oABwAOAAMruAAHELgAAtC4AA4QuAAN3LgABNC4AAcQuAAK0LgADRC4ABDQuAAHELgAEtAwMREzETMVMzUzETMRIxUjFSE1IzUjEfp9fX36fX3+iX19A2v9j319AnH9j319fX0CcQAAAAABAAAAAANrA2sAFAB9ugABAAAAAyu6AAoABwADK7oAEQAAAAEREjm4ABEvuAAQ3LgAA9C4AA4QuAAF0LgAEBC4AAbcuAAL3LgABhC4AA3QuAADELgAD9C4AAAQuAAT0LgAChC4ABbcALgAAC+4AAgvugAHAAwAAyu4AAcQuAAC0LgADBC4ABDQMDERMxEzETMRMxEzESMVIzUjFSM1IxH6fX19+n36ffp9A2v9jwF3/okCcf0SfX19fQLuAAEAAAAAA2sDawAkARO6AAEAAAADK7oADAAFAAMrugAdAAAAARESObgAHS+4ABjcuAAD0LoABwAFAAwREjm4AAcvuAAK3LgABxC4AA3QuAAMELgAD9C4AAoQuAAR0LgABxC4ABPQuAAFELgAFdC4AAEQuAAZ0LgAABC4ABvQuAABELgAH9C4AB0QuAAh0LgAABC4ACPQuAAKELgAJtwAugAPABIAAyu6AAEAAgADK7gAARC4ACDcuAAE0LgAAhC4AAbQuAABELgACNC4AAIQuAAK0LgAIBC4AAzQuAASELgAEdy4ABTQuAAPELgAFtC4ABEQuAAY0LgAEhC4ABrQuAARELgAHNC4AA8QuAAe0LgAAhC4ACLQuAABELgAJNAwMREzFTMVMzUzNTMVIxUjETMVMxUjNSM1IxUjFSM1MzUzESM1IzX6fX19+n19fX36fX19+n19fX0Da319fX19ff6JfX19fX19fX0Bd319AAAAAQAA/okDawNrABQAgboAAQAAAAMrugAIAA0AAyu6AA8ADQAIERI5uAAPL7gAA9C4AA8QuAAG3LgADxC4AAnQuAAAELgAC9C4AAAQuAAT0LgABhC4ABbcALgAAC+4AAQvugAPAAoAAyu6AAMAEAADK7gADxC4AAbQuAAKELgACdy4AAzQuAADELgAEtAwMREzESERMxEjFSMVITUhNTM1ITUjEfoBd/p9ff2PAfR9/gx9A2v9EgLu/Bh9fX19fX0C7gAAAAEAAAAAA2sDawAeAQW6ABsAAAADK7oAEwAAABsREjm4ABMvuAAK3LgABty4AALcuAAbELgACNy4AATcuAAIELgAGdC4AAfQuAAKELgAF9C4AAnQuAAbELgAC9C4ABsQuAAV0LgADNC4AAYQuAAN0LgABRC4AA7QuAACELgAD9C4AAAQuAAR0LgAABC4AB3QALoADwAQAAMrugABAAIAAyu6ABkACAADK7gAARC4AATcuAAZELgABdC4AA8QuAAK0LgAF9y4AAbQuAAQELgADdy4AA8QuAAS0LgAChC4ABPQuAAIELgAFNC4AAQQuAAY0LgAAhC4ABrQuAAEELgAHNC4ABkQuAAd0LgAARC4AB7QMDERIRUjFSMVIxUjFSMVITUzFSE1MzUzNTM1MzUjFSM1A2t9fX19fQF3+vyVfX19ffr6A2t9fX19fX19+vp9fX19ffoAAAAAAQB9AAAD6ATiABQAW7oACAANAAMruAAIELgAA9C4AA0QuAAR0AC6AAkACgADK7oAAQACAAMrugAFAAYAAyu4AAkQuAAM0LgABhC4AA7QuAAFELgAENC4AAIQuAAS0LgAARC4ABTQMDEBIRUhESMVMxEhFSE1IxEjNTMRMzUB9AH0/ol9fQF3/gx9+vp9BOJ9/ol9/gx9fQH0fQF3fQAAAAEBdwAAAnEE4gAEABu6AAEAAAADK7gAABC4AAPQALgAAi+4AAAvMDEBMxEjEQF3+voE4vseBOIAAQB9AAADawTiABQAW7oACAANAAMruAAIELgAA9C4AA0QuAAR0AC6AAkACgADK7oAAQACAAMrugAFAAYAAyu4AAkQuAAM0LgABhC4AA7QuAAFELgAENC4AAIQuAAS0LgAARC4ABTQMDETIRUzETMVIxEjFSE1MxEzNSMRIzV9AXd9+vp9/on6fX36BOJ9/ol9/gx9fQH0fQF3fQAAAQAABGUDawVfABAAb7gAES+4AAMvuAAG3LgAERC4AA3QuAANL7gADNy4AAYQuAAS3AC6AAcACAADK7gABxC4AALQuAAB3LgABNC4AAcQuAAK0LgAAhC4AAvQuAAIELgADNC4AAcQuAAO0LgAAhC4AA/QuAABELgAENAwMRMhFTM1MxUjFSE1IxUjNTM1fQF3ffp9/ol9+n0FX319fX19fX19AAACAAAAfQNrA+gAEAAZAMG6ABUACQADK7oABwAXAAMrugALAAkAFRESObgACy+4ABPcuAAA0LgAExC4AAHcuAAR0LgAAtC4ABcQuAAD0LgAARC4AAXcuAAVELgADdC4ABMQuAAP0LgAABC4ABLQuAABELgAGNC4AAcQuAAb3AC6ABYACAADK7oAAQARAAMrugADABcAAyu4ABEQuAAE0LgAFxC4AAbQuAAXELgACtC4ABEQuAAM0LgAAxC4AA7QuAABELgAENC4ABcQuAAT0DAxATMVMxUzFTMRIREzNTM1MzUXIxUjESERIzUBd319fX38lX19fX19fQF3fQPofX19/gwB9H19ffp9/okBd30AAAEAAP8GA2sE4gAoAVG6AAwAIwADK7gADBC4AADQugAcACMADBESObgAHC+4AB3cuAAI3LgAA9y4AALcuAAF0LgAHRC4AAnQuAAdELgADdC4AAkQuAAO0LgACBC4AA/QuAACELgAEdC4AAMQuAAT0LgAAhC4ABXQuAAIELgAF9C4AAkQuAAe0LgADBC4AB/QuAAcELgAIdC4ABwQuAAl0LgADBC4ACfQALoAGQAaAAMrugABAAIAAyu6ABEAFgADK7oAEgAVAAMruAACELgABNy4AAEQuAAG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AAAC7gVfAAwAFwDruAAYL7gAB9C4AAcvuAAJ3EEDADAACQABXUEDALAACQABXUEDANAACQABXUEDAFAACQABXbgAANxBAwAwAAAAAV1BAwDQAAAAAV1BAwBQAAAAAV1BAwCwAAAAAV24AAHcuAAJELgABNy4AAcQuAAG3LgAC9C4AAcQuAAN0LgABxC4ABLQuAAJELgAFNC4AAcQuAAW0LgAARC4ABncALoAEAARAAMrugABAAIAAyu6AA0AFgADK7gAARC4AAXcuAAG3LgABRC4AAjQuAACELgACtC4AAYQuAAL3LgAARC4AAzQuAAQELgAE9AwMQEzFSMVIxUjNTM1MzUDIREzFSE1MxEjNQH0+n19+n19+gF3ff4MfX0FX319fX19ff4M/RJ9fQJxfQADAAAAAANrBV8ADAAZAB4A5boAHAAWAAMrugAHABYAHBESObgABy+4AAbcuAAA0LgABhC4AAHcuAAa0LgAAtC4ABwQuAAE3LgAABC4AAXQuAAcELgACdC4AAYQuAAL0LgABxC4AA3QuAABELgAENy4AAcQuAAU0LgABxC4ABjQuAABELgAHdAAugASABMAAyu6AAEAAgADK7oADgAPAAMruAABELgABdy4AAbcuAAFELgACNC4AAIQuAAK0LgABhC4AAvcuAABELgADNC4ABIQuAAV0LgADxC4ABfQuAAOELgAGdC4AA8QuAAa0LgAEhC4ABzQMDEBMxUjFSMVIzUzNTM1AyEVMxEjFSE1IxEzNQUhESERAXf6fX36fX36AnF9ff2PfX0B9P6JAXcFX319fX19ff4Mff2PfX0CcX19/Y8CcQACAAAAAANrBV8ADAAdAO26AA4ADQADK7oABwANAA4REjm4AAcvuAAG3LgAANC4AAYQuAAB3LgAFxC4AALQuAARELgAA9C4AA4QuAAE3LgAABC4AAXQuAAOELgACdC4AAYQuAAL0LgABBC4ABDQuAAEELgAEty4AAEQuAAU3LgAARC4ABbQuAAEELgAGNC4ABEQuAAZ0LgABxC4ABrQuAANELgAHNAAugAUABUAAyu6AAEAAgADK7oACwAGAAMruAABELgABdy4AAjQuAACELgACtC4AAEQuAAM0LgAFBC4AA/QuAAUELgAF9C4ABUQuAAZ0LgAFBC4ABvQMDEBMxUjFSMVIzUzNTM1ATMRMxEzETMVIzUjFSE1IxEBd/p9ffp9ff6J+vr6ffp9/ol9BV99fX19fX3+DP0SAu79En19fX0C7gACAAAAAANrBOIAEAAhAP26AAwADQADK7oABgADAAMrugAPAA0ADBESObgADy+4AADQuAAPELgACty4AA0QuAAR0LgADBC4ABLQuAAKELgAFNC4AAYQuAAY0LgAAxC4ABrQuAAKELgAHNC4AA8QuAAe0LgADRC4ACDQuAAGELgAI9wAuAAZL7gAHS+6AAEAAgADK7oABwAIAAMrugASABMAAyu4AAEQuAAE0LgAAhC4AAbQuAACELgACtC4AAcQuAAL0LgACBC4AAzQuAACELgADtC4AAcQuAAP0LgAARC4ABDQuAASELgAFdC4ABMQuAAX0LgAExC4ABvQuAATELgAH9C4ABIQuAAh0DAxEyEVMzUzFSMVITUjFSM1MzUDMxUzNSEVMxEjESMRIxEjNX0Bd336ff6Jffp9ffp9AXd9+vr6fQTifX19fX19fX3+iX19ff0SAu79EgLufQACAAAAAANrBdwAEAAlALe4ACYvuAADL7gABty4ACYQuAAN0LgADS+4AAzcuAANELgAEdC4AAwQuAAS0LgAAxC4ABjQuAAGELgAGtC4AAMQuAAc0LgADBC4ACLQuAANELgAJNC4AAYQuAAn3AC4ABsvuAAjL7oAAQACAAMrugAHAAgAAyu4AAEQuAAE0LgAAhC4AAbQuAACELgACtC4AAcQuAAL0LgACBC4AAzQuAACELgADtC4AAcQuAAP0LgAARC4ABDQMDETIRUzNTMVIxUhNSMVIzUzNQMzFTMVMxUzETMRIxEjNSM1IxEjEX0Bd336ff6Jffp9ffp9fX36+n19ffoF3H19fX19fX19/ol9fX0Bd/ubAXd9ff2PBGUAAAADAH0B9ANrBOIACgAPABQAd7gAFS+4AAsvuAAB3LgAFRC4AAfQuAAHL7gADdy4AAsQuAAO0LgABxC4ABDQuAAHELgAE9AAugARABIAAyu6AAAACQADK7oAAwAEAAMruAADELgABtC4AAkQuAAL0LgADty4AAfQuAADELgADdC4ABEQuAAU0DAxEyERMxUhNSM1MzUXIxUzNQEhFSE1+gH0ff2PfX36fX3+iQLu/RIE4v6JfX36fX36+v4MfX0AAAADAH0B9ALuBOIADAARABYAt7gA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3LgARNC4AD0QuABF0LgAPhC4AEbQuABHELgAStC4AD4QuABL0LgARxC4AEzQuABRELgATdC4AEgQuABO0LgARxC4AE/QuABIELgAUNC4AFEQuABU0LgAURC4AFXQuABIELgAVtC4AFsQuABX0LgAUhC4AFjQuABIELgAWdC4AFIQuABa0LgAWxC4AF7QuABbELgAX9C4AFIQuABg0LgAZRC4AGHQuABcELgAYtC4AFIQuABj0LgAXBC4AGTQuABlELgAaNC4AGUQuABp0LgAXBC4AGrQuABvELgAa9C4AGYQuABs0LgAXBC4AG3QuABmELgAbtC4AG8QuABy0LgAbxC4AHPQuABmELgAdNC4AHkQuAB10LgAcBC4AHbQuABmELgAd9C4AHAQuAB40LgAeRC4AHzQuAB5ELgAfdC4AHAQuAB+0LgAgxC4AH/QuAB6ELgAgNC4AHAQuACB0LgAehC4AILQuACDELgAhtC4AIMQuACH0LgAehC4AIjQuACNELgAidC4AIQQuACK0LgAehC4AIvQuACEELgAjNC4AI0QuACQ0LgAjRC4AJHQuACEELgAktC4AJcQuACT0LgAjhC4AJTQuACEELgAldC4AJcQuACa0LgAlxC4AJvQuACOELgAnNC4AJgQuACd0LgAjhC4AJ/QMDEBMxUjNSEzFSM1BTMVIzUhMxUjNQczFSM1ITMVIzUFMxUjNSEzFSM1BzMVIzUhMxUjNQUzFSM1ITMVIzUHMxUjNSEzFSM1BTMVIzUhMxUjNQczFSM1ITMVIzUFMxUjNSEzFSM1BzMVIzUhMxUjNQUzFSM1ITMVIzUHMxUjNSEzFSM1BTMVIzUhMxUjNQczFSM1ITMVIzUFMxUjNSEzFSM1AXd9fQH0fX39En19AfR9ffp9fQH0fX39En19AfR9ffp9fQH0fX39En19AfR9ffp9fQH0fX39En19AfR9ffp9fQH0fX39En19AfR9ffp9fQH0fX39En19AfR9ffp9fQH0fX39En19AfR9ffp9fQH0fX39En19AfR9fQXcfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fQAAAAArAAD+DAPoBdwAWABdAGIAZwBsAHEAdgB7AIAAhQCKAI8AlACZAJ4AowCoAK0AsgC3ALwAwQDGAMsA0ADVANoA3wDkAOkA7gDzAPgA/QECAQcBDAERARYBGwEgASUBKhCLugA4ADkAAyu4ADgQuAAA0LgAOBC4AAHcuAAE3LgABty4AAjcuAAK3LgADNy4AA7cuAAMELgAD9C4AAsQuAAQ0LgADhC4ABHQuAAMELgAE9C4AAsQuAAU0LgADhC4ABXQuAAMELgAF9C4AAsQuAAY0LgADhC4ABnQuAAMELgAG9C4AAsQuAAc0LgADhC4AB3QuAAMELgAH9C4AAsQuAAg0LgADhC4ACHQuAAMELgAI9C4AAsQuAAk0LgADhC4ACXQuAAMELgAJ9C4AAsQuAAo0LgADhC4ACnQuAAMELgAK9C4AAsQuAAs0LgAChC4AC3QuAAJELgALtC4AAgQuAAv0LgABxC4ADDQuAAGELgAMdC4AAUQuAAy0LgABBC4ADPQuAADELgANNC4AAEQuAA10LgAOBC4ADvQuAAAELgAPNC4ADkQuAA90LgAOBC4AD/QuAAAELgAQNC4ADkQuABB0LgAOBC4AEPQuAAAELgARNC4ADkQuABF0LgAOBC4AEfQuAAAELgASNC4ADkQuABJ0LgAOBC4AEvQuAAAELgATNC4ADkQuABN0LgAOBC4AE/QuAAAELgAUNC4ADkQuABR0LgAOBC4AFPQuAAAELgAVNC4ADkQuABV0LgAOBC4AFfQuAABELgAWdC4ADgQuABa0LgAABC4AFvQuAABELgAXNC4AAYQuABe0LgABBC4AF/QuAADELgAYNC4AAYQuABh0LgABRC4AGLQuAAKELgAY9C4AAgQuABk0LgABxC4AGXQuAAKELgAZtC4AAkQuABn0LgABBC4AGjQuAABELgAadC4AAQQuABr0LgAAxC4AGzQuAAIELgAbdC4AAYQuABu0LgABRC4AG/QuAAIELgAcNC4AAcQuABx0LgADBC4AHLQuAAKELgAc9C4AAkQuAB00LgADBC4AHXQuAALELgAdtC4AAEQuAB30LgAOBC4AHjQuAAAELgAedC4AAEQuAB60LgABhC4AHzQuAAEELgAfdC4AAMQuAB+0LgABhC4AH/QuAAFELgAgNC4AAoQuACB0LgACBC4AILQuAAHELgAg9C4AAoQuACE0LgACRC4AIXQuAAEELgAhtC4AAEQuACH0LgABBC4AInQuAADELgAitC4AAgQuACL0LgABhC4AIzQuAAFELgAjdC4AAgQuACO0LgABxC4AI/QuAAMELgAkNC4AAoQuACR0LgACRC4AJLQuAAMELgAk9C4AAsQuACU0LgAARC4AJXQuAA4ELgAltC4AAAQuACX0LgAARC4AJjQuAAGELgAmtC4AAQQuACb0LgAAxC4AJzQuAAGELgAndC4AAUQuACe0LgAChC4AJ/QuAAIELgAoNC4AAcQuACh0LgAChC4AKLQuAAJELgAo9C4AAQQuACk0LgAARC4AKXQuAAEELgAp9C4AAMQuACo0LgACBC4AKnQuAAGELgAqtC4AAUQuACr0LgACBC4AKzQuAAHELgArdC4AAwQuACu0LgAChC4AK/QuAAJELgAsNC4AAwQuACx0LgACxC4ALLQuAABELgAs9C4ADgQuAC00LgAABC4ALXQuAABELgAttC4AAYQuAC40LgABBC4ALnQuAADELgAutC4AAYQuAC70LgABRC4ALzQuAAKELgAvdC4AAgQuAC+0LgABxC4AL/QuAAKELgAwNC4AAkQuADB0LgABBC4AMLQuAABELgAw9C4AAQQuADF0LgAAxC4AMbQuAAIELgAx9C4AAYQuADI0LgABRC4AMnQuAAIELgAytC4AAcQuADL0LgADBC4AMzQuAAKELgAzdC4AAkQuADO0LgADBC4AM/QuAALELgA0NC4AAEQuADR0LgAOBC4ANLQuAAAELgA09C4AAEQuADU0LgABhC4ANbQuAAEELgA19C4AAMQuADY0LgABhC4ANnQuAAFELgA2tC4AAoQuADb0LgACBC4ANzQuAAHELgA3dC4AAoQuADe0LgACRC4AN/QuAAEELgA4NC4AAEQuADh0LgABBC4AOPQuAADELgA5NC4AAgQuADl0LgABhC4AObQuAAFELgA59C4AAgQuADo0LgABxC4AOnQuAAMELgA6tC4AAoQuADr0LgACRC4AOzQuAAMELgA7dC4AAsQuADu0LgAARC4AO/QuAA4ELgA8NC4AAAQuADx0LgAARC4APLQuAAGELgA9NC4AAQQuAD10LgAAxC4APbQuAAGELgA99C4AAUQuAD40LgAChC4APnQuAAIELgA+tC4AAcQuAD70LgAChC4APzQuAAJELgA/dC4AAQQuAD+0LgAARC4AP/QuAAEELgBAdC4AAMQuAEC0LgACBC4AQPQuAAGELgBBNC4AAUQuAEF0LgACBC4AQbQuAAHELgBB9C4AAwQuAEI0LgAChC4AQnQuAAJELgBCtC4AAwQuAEL0LgACxC4AQzQuAABELgBDdC4ADgQuAEO0LgAABC4AQ/QuAABELgBENC4AAYQuAES0LgABBC4ARPQuAADELgBFNC4AAYQuAEV0LgABRC4ARbQuAAKELgBF9C4AAgQuAEY0LgABxC4ARnQuAAKELgBGtC4AAkQuAEb0LgABBC4ARzQuAABELgBHdC4AAQQuAEf0LgAAxC4ASDQuAAIELgBIdC4AAYQuAEi0LgABRC4ASPQuAAIELgBJNC4AAcQuAEl0LgADBC4ASbQuAAKELgBJ9C4AAkQuAEo0LgADBC4ASnQuAALELgBKtAAugArACwAAyu6AAEAAgADK7oAJwAoAAMrugALABAAAyu6ABMAFAADK7oAIwAkAAMrugAXABgAAyu6AB8AIAADK7oAGwAcAAMruAABELgABNC4AAIQuAAG0LgACxC4AAfQuAABELgACNC4AAIQuAAK0LgAARC4AAzQuAACELgADtC4ABAQuAAS3LgAFBC4ABbcuAAYELgAGty4AB8QuAAd3LgAIxC4ACHcuAAnELgAJdy4ACsQuAAp3LgAKxC4AC7QuAAqELgAL9C4ACwQuAAw0LgAKxC4ADLQuAAqELgAM9C4ACwQuAA00LgAKxC4ADbQuAAqELgAN9C4ACwQuAA40LgAKxC4ADrQuAAqELgAO9C4ACkQuAA80LgAKBC4AD3QuAAnELgAPtC4ACYQuAA/0LgAJRC4AEDQuAAkELgAQdC4ACMQuABC0LgAIhC4AEPQuAAhELgARNC4ACAQuABF0LgAHxC4AEbQuAAeELgAR9C4AB0QuABI0LgAHBC4AEnQuAAaELgAStC4ABsQuABL0LgAGBC4AEzQuAAZELgATdC4ABYQuABO0LgAFxC4AE/QuAAUELgAUNC4ABUQuABR0LgAEhC4AFLQuAATELgAU9C4ABAQuABU0LgAERC4AFXQuAACELgAVtC4AAsQuABX0LgAARC4AFjQuAACELgAWdC4AAsQuABa0LgAEBC4AFvQuAARELgAXNC4AAsQuABd0LgAAhC4AF7QuAALELgAX9C4ABAQuABg0LgAERC4AGHQuAALELgAYtC4AAIQuABj0LgACxC4AGTQuAAQELgAZdC4ABEQuABm0LgACxC4AGfQuAAQELgAaNC4ABEQuABp0LgAEhC4AGrQuAATELgAa9C4ABEQuABs0LgAEBC4AG3QuAARELgAbtC4ABIQuABv0LgAExC4AHDQuAARELgAcdC4ABAQuABy0LgAERC4AHPQuAASELgAdNC4ABMQuAB10LgAERC4AHbQuAASELgAd9C4ABMQuAB40LgAFBC4AHnQuAAVELgAetC4ABMQuAB70LgAEhC4AHzQuAATELgAfdC4ABQQuAB+0LgAFRC4AH/QuAATELgAgNC4ABIQuACB0LgAExC4AILQuAAUELgAg9C4ABUQuACE0LgAExC4AIXQuAAUELgAhtC4ABUQuACH0LgAFhC4AIjQuAAXELgAidC4ABUQuACK0LgAFBC4AIvQuAAVELgAjNC4ABYQuACN0LgAFxC4AI7QuAAVELgAj9C4ABQQuACQ0LgAFRC4AJHQuAAWELgAktC4ABcQuACT0LgAFRC4AJTQuAAWELgAldC4ABcQuACW0LgAGBC4AJfQuAAZELgAmNC4ABcQuACZ0LgAFhC4AJrQuAAXELgAm9C4ABgQuACc0LgAGRC4AJ3QuAAXELgAntC4ABYQuACf0LgAFxC4AKDQuAAYELgAodC4ABkQuACi0LgAFxC4AKPQuAAYELgApNC4ABkQuACl0LgAGhC4AKbQuAAbELgAp9C4ABkQuACo0LgAGBC4AKnQuAAZELgAqtC4ABoQuACr0LgAGxC4AKzQuAAZELgArdC4ABgQuACu0LgAGRC4AK/QuAAaELgAsNC4ABsQuACx0LgAGRC4ALLQuAAaELgAs9C4ABsQuAC00LgAHRC4ALXQuAAcELgAttC4ABsQuAC30LgAGhC4ALjQuAAbELgAudC4AB0QuAC60LgAHBC4ALvQuAAbELgAvNC4ABoQuAC90LgAGxC4AL7QuAAdELgAv9C4ABwQuADA0LgAGxC4AMHQuAAdELgAwtC4ABwQuADD0LgAHxC4AMTQuAAeELgAxdC4ABwQuADG0LgAHRC4AMfQuAAcELgAyNC4AB8QuADJ0LgAHhC4AMrQuAAcELgAy9C4AB0QuADM0LgAHBC4AM3QuAAfELgAztC4AB4QuADP0LgAHBC4ANDQuAAfELgA0dC4AB4QuADS0LgAIRC4ANPQuAAgELgA1NC4AB4QuADV0LgAHxC4ANbQuAAeELgA19C4ACEQuADY0LgAIBC4ANnQuAAeELgA2tC4AB8QuADb0LgAHhC4ANzQuAAhELgA3dC4ACAQuADe0LgAHhC4AN/QuAAhELgA4NC4ACAQuADh0LgAIxC4AOLQuAAiELgA49C4ACAQuADk0LgAIRC4AOXQuAAgELgA5tC4ACMQuADn0LgAIhC4AOjQuAAgELgA6dC4ACEQuADq0LgAIBC4AOvQuAAjELgA7NC4ACIQuADt0LgAIBC4AO7QuAAjELgA79C4ACIQuADw0LgAJRC4APHQuAAkELgA8tC4ACIQuADz0LgAIxC4APTQuAAiELgA9dC4ACUQuAD20LgAJBC4APfQuAAiELgA+NC4ACMQuAD50LgAIhC4APrQuAAlELgA+9C4ACQQuAD80LgAIhC4AP3QuAAlELgA/tC4ACQQuAD/0LgAJxC4AQDQuAAmELgBAdC4ACQQuAEC0LgAJRC4AQPQuAAkELgBBNC4ACcQuAEF0LgAJhC4AQbQuAAkELgBB9C4ACUQuAEI0LgAJBC4AQnQuAAnELgBCtC4ACYQuAEL0LgAJBC4AQzQuAAnELgBDdC4ACYQuAEO0LgAKRC4AQ/QuAAoELgBENC4ACYQuAER0LgAJxC4ARLQuAAmELgBE9C4ACkQuAEU0LgAKBC4ARXQuAAmELgBFtC4ACcQuAEX0LgAJhC4ARjQuAApELgBGdC4ACgQuAEa0LgAJhC4ARvQuAApELgBHNC4ACgQuAEd0LgAKxC4AR7QuAAqELgBH9C4ACgQuAEg0LgAKRC4ASHQuAAoELgBItC4ACsQuAEj0LgAKhC4ASTQuAAoELgBJdC4ACkQuAEm0LgAKBC4ASfQuAArELgBKNC4ACoQuAEp0LgAKBC4ASrQMDETMxUzNTMVMzUzFTM1MxUjFTMVIxUzFSMVMxUjFTMVIxUzFSMVMxUjFTMVIxUjNSMVIzUjFSM1IxUjNTM1IzUzNSM1MzUjNTM1IzUzNSM1MzUjNTM1IzUzNRcjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNQUjFTM1MyMVMzUzIxUzNX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffp9ffp9ff6JfX36fX36fX39j319+n19+n19/ol9ffp9ffp9ff2PfX36fX36fX3+iX19+n19+n19/Y99ffp9ffp9ff6JfX36fX36fX39j319+n19+n19/ol9ffp9ffp9ff2PfX36fX36fX3+iX19+n19+n19/Y99ffp9ffp9ff6JfX36fX36fX0F3H19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0AFgAA/gwD6AXcAC0AMQA1ADkAPQBBAEUASQBNAFEAVQBZAF0AYQBlAGkAbQBxAHUAeQB9AIEEE7oAAQAAAAMrugAJAAgAAyu4AAAQuAAR0LgAABC4ABXQuAAAELgAGdC4AAAQuAAd0LgAABC4ACHQuAAAELgAJdC4AAAQuAAp0LgAARC4ADPQuAAIELgANtC4AAEQuAA/0LgACBC4AELQuAABELgAS9C4AAgQuABO0LgAARC4AFfQuAAIELgAWtC4AAEQuABj0LgACBC4AGbQuAABELgAb9C4AAgQuABy0LgAARC4AHvQuAAIELgAftC4AAkQuACD3AC6AIEACgADK7oAAQACAAMrugAtACoAAyu6ABcAFAADK7oAKQAmAAMrugAbABgAAyu6ACUAIgADK7oAHwAcAAMruAABELgABNC4AAIQuAAG0LgALRC4AAfQuAABELgACNC4AIEQuAAM0LgAChC4AA7QuACBELgAENC4AAwQuAAR0LgADBC4AHncuAAS0LgAFdy4ABcQuAAZ3LgAGxC4AB3cuAAiELgAINy4AB8QuAAh3LgAJhC4ACTcuAAqELgAKNy4AAIQuAAs0LgAAhC4AC7QuAAtELgAL9C4ACoQuAAw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0LgAAhC4AArQuAADELgAC9C4AAEQuAAM0LgAAhC4AA3QuAADELgADtC4AAUQuAAP0LgABBC4ABDQuAADELgAEdAwMRMhFTMVIxUhNSM1MzUXIxUzNfoBd319/ol9ffp9fQVfffp9ffp9ffr6AAEBdwF3AnECcQAEACO6AAEAAAADK7gAABC4AAPQALoAAQACAAMruAABELgABNAwMQEzFSM1AXf6+gJx+voAAAABAXcB9AJxAnEABAAjugABAAAAAyu4AAAQuAAD0AC6AAEAAgADK7gAARC4AATQMDEBMxUjNQF3+voCcX19AAAAAQAAAAAD6AVfABAAU7gAES+4AAAvuAAD3LgAERC4AAnQuAAJL7gADty4AAXQuAAAELgAD9AAugAPAAUAAyu6AAEAAgADK7oADAALAAMruAAPELgACNC4AAEQuAAQ0DAxASEVIxEhNSM1IzUjNSERMxEB9AH0+v6JfX19AXd9BV99+x59ffp9/okEZQABAH0CcQNrBV8AEACBugABAAAAAyu6AAgACQADK7oADQAAAAEREjm4AA0vuAAM3LgAA9C4AAwQuAAG3LgAAxC4AAvQuAAAELgAD9C4AAgQuAAS3AC4AAgvuAAML7oAAQACAAMruAABELgABNC4AAIQuAAG0LgAAhC4AArQuAACELgADtC4AAEQuAAQ0DAxEzMVMzUzFTMRIxEjESMRIzV9+n36ffp9+n0FX319ff2PAnH9jwJxfQAAAQB9AnEDawVfAB4BIboAEwAQAAMrugAdABAAExESObgAHS+4AADQuAAdELgAFty4AAzcuAAB0LgADBC4AAPcuAATELgACNy4AATcuAAMELgABdC4AAIQuAAG0LgACBC4ABfQuAAH0LgAFhC4AAnQuAACELgAC9C4AAQQuAAN0LgAAxC4AA7QuAAdELgAEdC4AAkQuAAV0LgAExC4ABnQuAAQELgAG9AAugANAA4AAyu6AAEAAgADK7gAAhC4AATcuAANELgACNC4ABfcuAAF0LgADhC4AAvcuAAQ0LgADRC4ABLQuAAIELgAE9C4AAQQuAAW0LgAAhC4ABjQuAADELgAGdC4AAQQuAAa0LgAFxC4ABvQuAACELgAHNC4AAMQuAAd0LgAARC4AB7QMDETIRUzFSMVIxUjFTM1MxUhNTM1MzUzNTM1IxUjNTM1+gH0fX19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') format('truetype');
    font-weight: normal;
    font-style: normal;
    font-display: block;
}

/* ── LCARS top bar ────────────────────────────── */
#div_top {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 50px;
    text-align: center;
    z-index: 100;
    display: flex;
    align-items: center;
    justify-content: center;
    /* Was flat var(--bg_base), no backdrop-filter — this is the shared
       traditional-layout/subpage header bar (Wall, Guestbook, FM,
       Arcade, etc. all use this same #div_top), a direct analog to the
       desktop shell's own Wingpanel which already got real glass in the
       2026-08-19 refresh. Missed the first time because that pass
       enumerated desktop-shell chrome specifically, not this separate
       subpage-shell header — given the same glass tier 2 treatment now. */
    background: color-mix(in srgb, var(--bg_base) 78%, transparent) !important;
    backdrop-filter: var(--glass-blur-2) !important;
    -webkit-backdrop-filter: var(--glass-blur-2) !important;
    box-shadow: var(--elevation-2) !important;
    border-radius: var(--theme-radius-xs) !important;
    /* Softer divider (was 30% mix) for a lighter, airier bar edge. */
    border-bottom: 1px solid color-mix(in srgb, var(--color_primary) 18%, transparent) !important;
    box-sizing: border-box;
    animation: none !important;
    opacity: 1 !important;

    /* HUD left-elbow block: gradient fade-out so it blends with the glass bar. */
    &::before {
        display: block !important;
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        width: clamp(48px, 4vw, 56px);
        height: 100%;
        background: transparent !important;
        border-radius: var(--theme-radius-xs) !important;
        z-index: 1;
        animation: none !important;
    }

    /* Right end-cap hidden — cleaner HUD bar */
    &::after {
        display: none !important;
        content: '';
        position: absolute;
        right: 0;
        top: 0;
        width: 32px;
        height: 100%;
        background: var(--color_primary) !important;
        border-radius: var(--theme-radius-xs);
        z-index: 1;
        animation: none !important;
        pointer-events: none;
    }

    & #menu_icon {
        position: absolute;
        left: clamp(14px, 2.2vw, 24px);
        top: 50%;
        transform: translateY(-50%);
        height: 26px;
        width: auto;
        cursor: pointer;
        opacity: 0.9;
        filter: brightness(0) !important;
        z-index: 2;

        &:active {
            opacity: 0.7;
        }
    }

    & #span_title {
        font-size: 0.85rem !important;
        /* Was 0.38em uppercase tracking — reads as an actual title now,
           not a HUD-style label. */
        letter-spacing: 0.04em !important;
        text-transform: none !important;
        font-weight: 500 !important;
        color: var(--color_text_normal) !important;
        opacity: 0.7;
        z-index: 2;
    }

    /* Centered in the bar independent of the menu icon, title, and the
       header-docked PWA install pill (all of which sit around it).
       max-width + ellipsis is defensive: the live status-bar text
       (title • display name • full date/time, index-early-bind.js) has
       no inherent length limit, and this box sits between the menu icon
       and Search/page-actions with nothing else constraining it — without
       this it wraps to two lines and visually breaks the 50px bar on
       narrow screens instead of just clipping. */
    & #div_arbitrary {
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        display: flex;
        align-items: center;
        /* Was justify-content:center — centers the text NODE inside the box,
           so once the text is wider than max-width it overflows equally on
           BOTH sides and gets hard-clipped with no ellipsis on either end
           (e.g. "Guestbook — 1 entry..." lost "Gue" off the front too, not
           just the tail — text-overflow:ellipsis doesn't apply cleanly to
           centered flex content). flex-start means the box (still centered
           on the page via left:50%+translate when short, since it shrinks
           to fit content) only ever overflows past its own right edge when
           too long, where ellipsis is well-defined and actually shows. */
        justify-content: flex-start;
        z-index: 2;
        /* 460px was sized around "Wall • Leo Bergamo • <date>" specifically
           and still clipped longer real titles (e.g. "Guestbook — 1 entry
           • Leo Bergamo • <date>" needs ~508px) even on a wide desktop
           window, which is pointless when there's room to spare. 550px is
           the actual safety ceiling here — the box is centered via
           left:50%+translate(-50%), so it grows equally toward the menu
           icon (left) and Search/actions (right); at the narrowest
           "desktop" width (768px, right before the traditional tier takes
           over), each side has ~280-330px of real clearance before hitting
           either one, so half of 550px (275px) is the largest safe radius
           at that width — and every wider viewport has more room still,
           not less, since Search/menu-icon stay roughly fixed-width while
           the viewport keeps growing. */
        max-width: clamp(140px, 65vw, 550px);
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
        /* Without !important this loses to the sitewide generic-div reset
           (html:not(.in-iframe) div:not(#id1):not(#id2)... — #div_arbitrary
           was never added to its long exclusion list, and each :not(#id)
           clause adds ID-level specificity, so that rule's plain
           padding:0.5rem silently wins by specificity despite being the
           "generic fallback" in source order). The leaked 8px ate into the
           pixel-exact available-width math the shell's status-bar JS does
           against the menu icon / Search / #div_top_page_actions. */
        padding: 0 !important;
    }

    & #nav_srch_link {
        position: absolute;
        right: clamp(36px, 5vw, 64px);
        top: 50%;
        transform: translateY(-50%);
        z-index: 2;
        color: var(--color_text_normal);
        text-decoration: none;
        font-size: 0.78rem;
        letter-spacing: 0.02em;
        text-transform: none;
        opacity: 0.75;

        &:hover { opacity: 1; }
    }
}

/* ── #div_top_page_actions — hoisted per-page header controls ───────────
   Populated at runtime by window.setPageHeader() (index-early-bind.js)
   with whatever the currently-loaded sub-page hands over (buttons,
   checkboxes, filter inputs, status text) instead of that page drawing
   its own .lb-page-header-right inside the iframe. Sits between the
   centered page-title/clock readout and the fixed Search link. */
#div_top_page_actions {
    position: absolute;
    /* Clear #nav_srch_link's own [right:clamp(36px,5vw,64px)] footprint plus
       its text width — this needs a bigger gap than a plain visual margin,
       or a wide header (several controls) scrolls its content underneath
       the Search link instead of stopping short of it. */
    right: clamp(118px, 16vw, 176px);
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;
    display: flex;
    align-items: center;
    gap: 4px;
    max-width: clamp(120px, 32vw, 380px);
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: none;
}
#div_top_page_actions::-webkit-scrollbar { display: none; }
#div_top_page_actions .lb-btn {
    min-height: 28px !important;
    padding: 0 8px !important;
    font-size: 0.74rem !important;
    margin: 0 !important;
    flex-shrink: 0;
    white-space: nowrap;
}
#div_top_page_actions .lb-input {
    min-height: 28px !important;
    padding: 0 8px !important;
    font-size: 0.74rem !important;
    margin: 0 !important;
    width: clamp(60px, 8vw, 110px) !important;
    flex-shrink: 1;
}
#div_top_page_actions .div-top-checkbox-label {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 0.72rem;
    color: var(--color_text_normal);
    opacity: 0.8;
    white-space: nowrap;
    cursor: pointer;
    flex-shrink: 0;
}
#div_top_page_actions .div-top-page-text {
    font-size: 0.72rem;
    color: var(--color_text_dim, var(--text_dim));
    white-space: nowrap;
    flex-shrink: 0;
}
#div_top_page_actions .lb-status {
    font-size: 0.72rem;
    white-space: nowrap;
    flex-shrink: 0;
}

@media (max-width: 767px) {
    #div_top_page_actions {
        /* Was right:clamp(60px,9vw,100px) — measurably overlapped
           #nav_srch_link's own [right:clamp(36px,5vw,64px)] footprint plus
           its ~40px text at common phone widths (e.g. 412px wide: actions
           box landed at [281,372], Search at [359,396] — a real 13px
           overlap, not just visual tightness). Mirrors the desktop fix's
           clearance math (ui_style.php ~3405) scaled down for traditional. */
        right: clamp(100px, 15vw, 140px);
        max-width: clamp(70px, 18vw, 130px);
        gap: 4px;
    }
    /* !important required: input[type=...]/.lb-input's own base rule
       (ui_style.php ~812) sets display:block !important, which silently
       beat this override (never actually hidden on traditional until now —
       e.g. fm/'s hoisted filter input). */
    #div_top_page_actions .lb-input { display: none !important; }
    /* !important required: a generic label:has(> .lb-checkbox) rule
       (ui_style.php ~2373) sets display:inline-flex !important on any
       label wrapping a checkbox, which matches this element too and beat
       a plain override — same class of bug as .lb-input/.lb-toggle below. */
    #div_top_page_actions .div-top-checkbox-label { display: none !important; }
    /* .lb-toggle (36px track + label text, ~90-120px total) never fit the
       traditional budget even alone — same "hide secondary/enhancement controls
       on traditional" treatment already applied to inputs/checkboxes above.
       !important is required here: .lb-toggle's own base rule
       (ui_style.php ~2121) sets display:inline-flex !important, which
       beats a plain override regardless of selector specificity. */
    #div_top_page_actions .lb-toggle { display: none !important; }
    /* Status pills (e.g. chat's connection dot) were getting partially
       clipped by the narrower traditional max-width above — a chopped-off pill
       edge poking out past the last visible button. Same "non-essential,
       hide it" treatment; the page itself still surfaces connection state
       another way (e.g. a failed send). */
    #div_top_page_actions .lb-status { display: none !important; }
}

/* ── LCARS slide-in sidebar ───────────────────── */
#div_left {
    position: fixed;
    top: 50px;
    left: -105%;
    width: 50vw;
    height: calc(100% - 50px - 40px);
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: none;
    padding: 0 12px;
    margin: 0;
    box-sizing: border-box;
    z-index: 999;
    display: flex;
    flex-direction: column;
    border-radius: var(--theme-radius-xs) !important;
    /* Was flat var(--bg_raised), no backdrop-filter — this is the shared
       traditional-layout/subpage sidebar (Wall, Guestbook, FM, Arcade's
       own console/search/game-list nav, etc. all use this same
       #div_left outside desktop-mode). Same reasoning as #div_top just
       above — given real glass tier 2 now (2026-08-19). */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent) !important;
    backdrop-filter: var(--glass-blur-2) !important;
    -webkit-backdrop-filter: var(--glass-blur-2) !important;
    border-right: 1px solid color-mix(in srgb, var(--color_primary) 18%, transparent) !important;
    box-shadow: var(--elevation-2) !important;
    animation: none !important;
    opacity: 1 !important;
    max-width: 300px;
    will-change: left;
    transition: left 0.5s cubic-bezier(0.16, 1, 0.3, 1) !important;
    /* Establishes real depth for the nav-link carousel-card tilt below
       (translateZ/rotateX) — without this the transform renders flat. */
    perspective: 800px;
}


#div_left::-webkit-scrollbar { display: none; }

/* ── LCARS brand header (blue top cap) ───────── */
#div_left_brand {
    flex-shrink: 0;
    padding: 14px 18px 12px;
    margin: 0 -12px 4px !important;
    width: calc(100% + 24px);
    background: color-mix(in srgb, var(--color_violet) 68%, transparent) !important;
    border-radius: var(--theme-radius-xs) !important;
    display: flex;
    align-items: baseline;
    gap: 1px;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
}

#div_left_brand_name {
    font-size: clamp(13px, 1.23rem, 15px) !important;
    font-weight: 700 !important;
    letter-spacing: 0.08em !important;
    color: var(--text_on_ac) !important;
    font-family: var(--font-heading) !important;
}

#div_left_brand_sep {
    font-size: clamp(13px, 1.38rem, 17px) !important;
    font-weight: 800 !important;
    color: var(--text_on_ac) !important;
    line-height: 1 !important;
    padding: 0 1px !important;
}

#div_left_brand_tld {
    font-size: clamp(10px, 0.92rem, 12px) !important;
    font-weight: 600 !important;
    color: var(--text_on_ac) !important;
    opacity: 0.55 !important;
    letter-spacing: 0.10em !important;
}

/* ── LCARS section labels ─────────────────────── */
/* ── LCARS nav links ──────────────────────────── */
#div_left .a_nav_link,
#div_left .a_cmd_link {
    display: flex !important;
    align-items: center;
    padding: 0 18px !important;
    /* Was 38px — a touch more room reads less cramped. */
    height: 42px !important;
    margin: 1px 0;
    font-size: clamp(10px, 1rem, 13px) !important;
    font-weight: 400 !important;
    /* Was 0.12em uppercase tracking — these are page names (Wall, Chat,
       Mailbox…), reads as normal nav text now, not HUD-style labels. */
    letter-spacing: 0.02em !important;
    text-transform: none;
    text-decoration: none;
    color: var(--color_text_stressed) !important;
    box-shadow: none !important;
    background: transparent !important;
    border-radius: 8px !important;
    position: relative;
    flex-shrink: 0;

    /* Carousel-card resting state: tucked into the parent's 3D depth and
     * faded, so each link looks like a separate fanned panel until the
     * sidebar flies out (see the nth-child stagger + .div-left-flown-out
     * rules below). Shadow tapers from --elevation-4 (distant floating
     * card) to --elevation-2 (landed) alongside the opacity/transform. */
    transform: translateZ(-60px) rotateX(10deg);
    opacity: 0.35;
    transition: background 0.25s ease-in-out, border-color 0.25s ease-in-out, color 0.25s ease-in-out, transform 0.45s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.35s ease-in-out, box-shadow 0.45s ease-in-out !important;
}

#div_left.div-left-flown-out .a_nav_link,
#div_left.div-left-flown-out .a_cmd_link {
    transform: translateZ(0) rotateX(0deg);
    opacity: 1;
    box-shadow: none !important;
}

/* Stagger the assembly so the cards cascade in one after another rather
 * than snapping into place all at once. */
#div_left .a_nav_link:nth-of-type(1),  #div_left .a_cmd_link:nth-of-type(1)  { transition-delay: 0.02s; }
#div_left .a_nav_link:nth-of-type(2),  #div_left .a_cmd_link:nth-of-type(2)  { transition-delay: 0.05s; }
#div_left .a_nav_link:nth-of-type(3),  #div_left .a_cmd_link:nth-of-type(3)  { transition-delay: 0.08s; }
#div_left .a_nav_link:nth-of-type(4),  #div_left .a_cmd_link:nth-of-type(4)  { transition-delay: 0.11s; }
#div_left .a_nav_link:nth-of-type(5),  #div_left .a_cmd_link:nth-of-type(5)  { transition-delay: 0.14s; }
#div_left .a_nav_link:nth-of-type(6),  #div_left .a_cmd_link:nth-of-type(6)  { transition-delay: 0.17s; }
#div_left .a_nav_link:nth-of-type(7),  #div_left .a_cmd_link:nth-of-type(7)  { transition-delay: 0.20s; }
#div_left .a_nav_link:nth-of-type(8),  #div_left .a_cmd_link:nth-of-type(8)  { transition-delay: 0.23s; }
#div_left .a_nav_link:nth-of-type(9),  #div_left .a_cmd_link:nth-of-type(9)  { transition-delay: 0.26s; }
#div_left .a_nav_link:nth-of-type(10), #div_left .a_cmd_link:nth-of-type(10) { transition-delay: 0.29s; }
#div_left .a_nav_link:nth-of-type(11), #div_left .a_cmd_link:nth-of-type(11) { transition-delay: 0.32s; }
#div_left .a_nav_link:nth-of-type(12), #div_left .a_cmd_link:nth-of-type(12) { transition-delay: 0.35s; }

/* ── Nav groups (collapsible sections) ───────────────────── */
.nav_group {
    display: flex;
    flex-direction: column;
    flex-shrink: 0;
    /* So nested .a_nav_link/.nav_group_label tilt transforms use #div_left's
       perspective instead of being flattened by this non-transformed parent. */
    transform-style: preserve-3d;
}

.nav_group_label {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    width: 100% !important;
    margin: 0 !important;
    cursor: pointer !important;
    text-align: left !important;
    transform: translateZ(-60px) rotateX(10deg);
    opacity: 0.35;
    transition:
        background  0.15s ease,
        transform   0.45s cubic-bezier(0.16, 1, 0.3, 1),
        opacity     0.35s ease-in-out !important;
    border: none !important;
    text-transform: none !important;
    letter-spacing: normal !important;
    font-weight: inherit !important;
    font-size: inherit !important;
    height: auto !important;
    padding: 0 18px !important;
}

.nav_group_label:hover {
    background: transparent !important;
    color: inherit !important;
    border-color: transparent !important;
}

#div_left.div-left-flown-out .nav_group_label {
    transform: translateZ(0) rotateX(0deg);
    opacity: 1;
}

.nav_group_arrow {
    font-size: 0.9rem;
    line-height: 1;
    opacity: 1;
    color: var(--accent);
    background: color-mix(in srgb, var(--accent) 14%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
    border-radius: var(--theme-radius-xs);
    width: 18px;
    height: 18px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    transition: transform 0.2s ease, background 0.15s, border-color 0.15s;
}

.nav_group.collapsed .nav_group_arrow {
    transform: rotate(-90deg);
    background: transparent;
    border-color: color-mix(in srgb, var(--color_text_normal) 25%, transparent);
    color: var(--color_text_normal);
    opacity: 0.55;
}

.nav_group_label:hover .nav_group_arrow {
    background: color-mix(in srgb, var(--accent) 26%, transparent);
    border-color: var(--accent);
}

#div_left .nav_group .a_nav_link {
    max-height: 44px;
    overflow: hidden;
    transition:
        background      0.15s ease,
        color           0.15s ease,
        border-color    0.15s ease,
        transform       0.45s cubic-bezier(0.16, 1, 0.3, 1),
        opacity         0.35s ease-in-out,
        max-height      0.18s ease,
        padding-top     0.18s ease,
        padding-bottom  0.18s ease,
        min-height      0.18s ease !important;
}

#div_left .nav_group.collapsed .a_nav_link {
    max-height: 0 !important;
    min-height: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    opacity: 0 !important;
    pointer-events: none;
    transform: translateZ(0) rotateX(0deg) !important;
    margin: 0 !important;
}

/* LCARS left-bar indicator */
#div_left .a_nav_link::before {
    content: '';
    display: inline-block;
    width: 5px !important;
    height: 5px !important;
    border-radius: var(--theme-radius-xs) !important;
    background: var(--color_primary) !important;
    margin-right: 12px;
    flex-shrink: 0;
    opacity: 0.3 !important;
    transition: opacity 0.3s ease-in-out, background 0.3s ease-in-out;
}

#div_left .a_nav_link:hover::before {
    opacity: 1 !important;
    background: var(--accent_lit);
    box-shadow: none !important;
}

#div_left .a_nav_link:hover,
#div_left .a_nav_link:hover::after {
    background: transparent !important;
    color: var(--color_text_stressed) !important;
}

#div_left .a_nav_link:hover {
    padding-left: 17px;
}

/* logout / destructive cmd */
#div_left .a_cmd_link {
    color: var(--color_secondary) !important;
    opacity: 0.8;
}

#div_left .a_cmd_link::before {
    content: '← ';
    display: inline-block;
    color: var(--color_secondary) !important;
    margin-right: 8px;
    font-size: clamp(10px, 0.92rem, 13px) !important;
    flex-shrink: 0;
    transition: transform 0.3s ease-in-out;
}

#div_left .a_cmd_link:hover {
    opacity: 1;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    padding-left: 17px;
}

#div_left .a_cmd_link:hover::before {
    transform: translateX(-4px);
}

/* DM nav link — override cmd_link red/arrow styles to look like a regular nav link */
#div_left #nav_dm_link {
    color: var(--color_text_normal) !important;
    opacity: 1 !important;
}
#div_left #nav_dm_link::before {
    content: '' !important;
    display: inline-block !important;
    width: 8px !important;
    height: 8px !important;
    border-radius: var(--theme-radius-xs) !important;
    background: var(--accent_lit) !important;
    margin-right: 12px !important;
    flex-shrink: 0 !important;
    opacity: 0.45 !important;
    transition: opacity 0.3s ease-in-out, background 0.3s ease-in-out !important;
    font-size: inherit !important;
    color: var(--mix) !important;
}
#div_left #nav_dm_link:hover {
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    padding-left: 17px !important;
}
#div_left #nav_dm_link:hover::before {
    opacity: 1 !important;
    background: var(--accent_lit) !important;
}

#div_left br { display: none !important; }

/* ── Embedded iframe ──────────────────────────── */
#iframe_right {
    position: fixed;
    top: calc(50px + 16px);
    left: 16px;
    width: calc(100% - 32px);
    height: calc(100dvh - 50px - 40px - 32px);
    overflow: hidden;
    z-index: 0;
    background: transparent;
    background-image: none;
    padding: 0;
    border-radius: var(--theme-radius-xs);
    border: none;
    box-shadow: none;
    transition:
        left      0.25s ease,
        width     0.25s ease,
        opacity   0.35s ease,
        transform 0.35s ease,
        filter    0.35s ease;
}

/* ── LCARS bottom data strip ──────────────────── */
#div_bottom {
    position: fixed;
    top: calc(100% - 40px);
    left: 0;
    width: 100%;
    height: 40px;
    text-align: center;
    overflow: hidden;
    z-index: 100;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--bg_base) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border-radius: var(--theme-radius-xs) !important;
    box-sizing: border-box;
    /* Softer divider (was 30% mix) for a lighter, airier bar edge. */
    border-top: 1px solid color-mix(in srgb, var(--color_primary) 18%, transparent) !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
}

/* Left HUD cap hidden — cleaner bar */
#div_bottom::before {
    display: none !important;
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    width: 56px;
    height: 100%;
    background: var(--color_primary) !important;
    border-radius: var(--theme-radius-xs);
    z-index: 1;
    animation: none !important;
}

#div_bottom marquee {
    color: var(--accent_lit) !important;
    font-size: 1.31rem !important;
    letter-spacing: 0.25em !important;
    font-family: var(--font-heading) !important;
    text-transform: uppercase;
    z-index: 2;
    position: relative;
    padding-left: 200px;
    height: 40px !important;
    line-height: 40px !important;
}

/* ── Loading splash ───────────────────────────── */
#loading_splash {
    position: fixed;
    inset: 0;
    overflow: hidden;
    background: rgba(0, 0, 0, 1);
    /* Background is fixed black regardless of day/night mode, so text
       here can't use var(--text) — it flips dark in day mode and goes
       invisible on this permanently-black splash. */
    color: #fff !important;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 999999;
    font-family: monospace;
    font-size: 0.85rem;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    transition: opacity 0.5s;
}

html:not(.subpage) body {
    opacity: 1;
}

/*
 * ── Flat page background ──────────────────────────────────
 * The body has no opaque background of its own; it renders the
 * flat var(--mix) tone from site-palette.json.  (The old JPEG
 * wallpaper + hue-sampling palette system, and later the animated
 * starfield canvas, were both removed — the theme now comes only
 * from site-palette.json.)
 */

/* ── Traditional ───────────────────────────────────── */
@media (max-width: 767px) {
    #div_left {
        width: min(88vw, 320px);
    }

    #div_left_brand {
        padding: max(14px, env(safe-area-inset-top, 0px)) 18px 12px max(18px, env(safe-area-inset-left, 0px));
    }

    #div_left .a_nav_link,
    #div_left .a_cmd_link {
        padding: 0 20px !important;
        font-size: 1rem !important;
        min-height: 44px !important;
    }

    /* On traditional the elbow block covers the hamburger — hide and use padding instead */
    #div_top::before {
        width: 44px;
        border-radius: var(--theme-radius-xs);
    }

    #div_top::after {
        width: 22px;
    }

    #div_top #menu_icon {
        width: 44px;
        height: 44px;
        padding: 9px;
        object-fit: contain;
        left: 0;
        filter: brightness(0) !important;
        z-index: 3;
    }

    /* Traditional nav replaces the bottom bar: hide it and adjust iframe height */
    #div_bottom { display: none !important; }

    #iframe_right {
        top: calc(50px + env(safe-area-inset-top, 0px) + 16px);
        height: calc(100dvh - 50px - env(safe-area-inset-top, 0px) - 56px - env(safe-area-inset-bottom, 0px) - 32px);
        left: 16px;
        width: calc(100% - 32px);
        padding: 0;
    }

    #div_top {
        height: calc(50px + env(safe-area-inset-top, 0px));
        padding-top: env(safe-area-inset-top, 0px);
    }
}

/* ── Desktop ──────────────────────────────────── */
@media (min-width: 1200px) {
    #div_left {
        width: 290px;
    }
}

/* ── Session timeout warning dialog ─────────────── */
#session_warn_overlay {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 2147483646;
    background: rgba(0, 0, 0, 0.88);
    align-items: center;
    justify-content: center;
}

#session_warn_dialog {
    padding: 2.2rem 2.6rem;
    text-align: center;
    min-width: 280px;
    max-width: 360px;
}

#session_warn_title {
    margin: 0 0 0.6rem;
    color: var(--color_primary);
    font-size: 0.9rem;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

#session_warn_msg {
    margin: 0 0 0.4rem;
    color: var(--color_text_normal);
    font-size: 0.8rem;
    letter-spacing: 0.05em;
    opacity: 0.8;
}

#session_warn_count {
    font-size: 4rem;
    font-weight: 700;
    color: var(--color_primary);
    line-height: 1.1;
    margin: 0.4rem 0;
}

#session_warn_unit {
    margin: 0 0 1.6rem;
    color: var(--color_text_normal);
    font-size: 0.75rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    opacity: 0.6;
}

#session_warn_actions {
    display: flex;
    gap: 0.75rem;
    justify-content: center;
}

/*
 * ── Session warning buttons ───────────────────────────────────
 * Pill shape (99px) matches all other LCARS action buttons across
 * the site.  Active scale-down gives physical press feedback.
 * ────────────────────────────────────────────────────────────── */
.session_warn_btn {
    color: var(--accent_lit) !important;
    font-family: var(--font-heading) !important;
    font-size: 0.75rem !important;
    border: none !important;
    padding: 0.5rem 1.4rem !important;
}

.session_warn_btn:hover {
    color: var(--accent_lit) !important;
    border-color: transparent !important;
}

.session_warn_btn:active {
    transform: scale(0.96);
}

#session_warn_extend_btn {
    color: var(--color_primary);
    background: transparent !important;
}

#session_warn_extend_btn:hover {
    background: transparent !important;
}
html:not(.subpage) body {
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
}

/* #tnh replaces the old <marquee> with a plain div + CSS animation: the news
   ticker carries several rotating headlines, so it still needs to scroll —
   just via a modern position animation instead of the deprecated tag.
   Positioned absolutely (anchored to #div_bottom, which is itself a fixed
   positioning context) so the scroll animation doesn't fight with
   #div_bottom's own flex centering. */
/* News ticker: margin-left:100% pushes #tnh off-screen right inside the
 * overflow:hidden wrapper; CSS translateX drives a seamless loop — the end
 * point calc(-100% - 100vw) is exactly -(textWidth + viewportWidth) so the
 * element exits left at the same moment the next cycle enters from the right.
 * JS only adjusts animationDuration once content width is known. */
@keyframes _tnh_scroll {
    from { transform: translateX(0); }
    to   { transform: translateX(calc(-100% - 100vw)); }
}
#div_bottom #tnh_wrap {
    position: absolute !important;
    /* Was top:0 — #div_bottom's actual rendered height (border-top etc.)
       doesn't match this wrapper's own fixed 40px, so pinning to the top
       edge left the ticker text sitting ~4-5px above #ws_status_dot (which
       centers correctly as a normal flex child) instead of level with it.
       top:50%+translateY matches the same centering idiom already used
       throughout #div_top, and — unlike align-items:center — still keeps
       this out of #div_bottom's flex flow, which is the actual reason it's
       absolutely positioned (so the translateX scroll animation doesn't
       fight with flex centering). */
    top: 50% !important;
    transform: translateY(-50%) !important;
    left: 0 !important;
    width: 100% !important;
    height: 40px !important;
    overflow: hidden !important;
    background: transparent !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius-xs) !important;
    margin: 0 !important;
    padding: 0 !important;
}
#div_bottom #tnh {
    display: inline-block !important;
    margin-left: 100% !important;
    white-space: nowrap !important;
    width: max-content !important;
    font-size: 1.08rem !important;
    letter-spacing: 0.18em !important;
    color: var(--accent_lit) !important;
    text-shadow: none !important;
    height: 40px !important;
    line-height: 40px !important;
    animation-name: _tnh_scroll !important;
    animation-timing-function: linear !important;
    animation-iteration-count: infinite !important;
    animation-direction: normal !important;
    animation-fill-mode: none !important;
    animation-play-state: running !important;
    animation-duration: 40s !important; /* JS overrides inline via setProperty("important") */
    background: transparent !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius-xs) !important;
    opacity: 1 !important;
    padding: 0 !important;
}

/* Ticker links inherit accent_lit from #tnh; override the global link rule. */
#div_bottom #tnh a,
#div_bottom #tnh a:visited {
    color: var(--accent_lit) !important;
    text-decoration: none !important;
}


/* ── All panel/card border-radius → 0 (sharp HUD corners) ── */
.panel, .theme-panel,
[class*="panel"], [class*="-card"],
[class*="-wrap"], [class*="_wrap"]:not(body):not(html) {
    border-radius: var(--theme-radius-xs) !important;
}

/* ── Input fields: pill standard (emitter handles border-radius + background) ── */
input, textarea, select {
    color: var(--color_text_normal) !important;
    font-size: 1.08rem !important;
    transition: border-color 0.3s ease-in-out, box-shadow 0.3s ease-in-out !important;
}

input:focus, textarea:focus, select:focus {
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--color_primary) 14%, var(--mix)) !important;
}



/* ── Traditional ─────────────────────────────────────────────────── */
@media (max-width: 600px) {
    #span_title { font-size: 0.85rem !important; letter-spacing: 0.04em !important; }
}



/* Prevent body scroll while the splash is covering the page */
body:has(#scifi_splash) {
    overflow: hidden;
}

/* ── Sci-fi quotes splash screen ──────────────────────────────── */

/* Mandatory layout picker (2026-08-15) — shown once per session (see
   __lb_maybe_show_layout_picker() in index-early-bind.js), right as the
   loading splash above starts fading out. Deliberately uses the site's
   modern theme tokens (--bg_*/--accent/--text), not the splash's own
   retro scifi styling — this is ordinary shell UI, not part of that
   set-piece. Sizes are raw px, not rem, on purpose — this site's real
   root font-size is ~22px (not the CSS default 16px), which has silently
   inflated rem-sized new components more than once this session. */
#lb-layout-picker-overlay {
    position: fixed;
    inset: 0;
    z-index: 100000;
    background: color-mix(in srgb, var(--bg_dark) 92%, transparent);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 1;
}
#lb-layout-picker-box {
    max-width: 480px;
    width: calc(100% - 48px);
    /* Was flat var(--bg_raised) (the overlay scrim behind it already had
       blur(8px), but this inner card itself didn't) — real glass tier 2
       (2026-08-19), matching every other modal/picker surface. */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent);
    backdrop-filter: var(--glass-blur-2);
    -webkit-backdrop-filter: var(--glass-blur-2);
    border-radius: 14px;
    padding: 32px 28px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
    text-align: center;
}
#lb-layout-picker-box h2 {
    margin: 0 0 8px;
    font-size: 22px;
    font-weight: 700;
    color: var(--text);
}
#lb-layout-picker-box p {
    margin: 0 0 24px;
    color: var(--text_dim);
    font-size: 14px;
}
#lb-layout-picker-options {
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.lb-layout-picker-option {
    /* A site-wide rule forces every <button> to display:inline-flex
       !important, width:auto !important, padding:0 16px !important, and
       white-space:nowrap !important (confirmed via CDP's matched-styles
       inspector — every one of those beat this rule's own non-important
       declarations). display/flex-direction embraced rather than fought
       (see below); width/padding/white-space genuinely needed !important
       here too, not just a style preference — without them the
       description text (568px of it) had nowhere to wrap inside a
       448px-wide button and spilled out both sides, which is the actual
       bug Leo reported from a real screenshot. */
    display: flex !important;
    flex-direction: column !important;
    width: 100% !important;
    padding: 16px 18px !important;
    white-space: normal !important;
    border-radius: 10px;
    border: 1px solid var(--border);
    background: var(--bg_surface);
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease, transform 0.1s ease;
}
.lb-layout-picker-option:hover {
    background: color-mix(in srgb, var(--accent) 12%, var(--bg_surface));
    border-color: color-mix(in srgb, var(--accent) 50%, var(--border));
}
.lb-layout-picker-option:active {
    transform: scale(0.98);
}
.lb-layout-picker-option-label {
    font-weight: 700;
    font-size: 16px;
    color: var(--text);
    margin-bottom: 4px;
    white-space: normal !important;
}
.lb-layout-picker-option-desc {
    font-size: 13px;
    color: var(--text_dim);
    line-height: 1.4;
    white-space: normal !important;
}

#scifi_splash {
    position: fixed;
    inset: 0;
    z-index: 99999;
    background: color-mix(in srgb, var(--theme-color-bg-dark) 97%, var(--mix));
    display: flex !important;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    pointer-events: auto;
    cursor: pointer;
    overflow: hidden;
    animation: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    margin: 0 !important;
    opacity: 1;
}

#scifi_skip {
    position: absolute;
    bottom: 36px;
    left: 50%;
    transform: translateX(-50%);
    z-index: 3;
    font-family: 'Courier New', monospace !important;
    font-size: clamp(0.55rem, 1.1vw, 0.76rem) !important;
    letter-spacing: 0.35em !important;
    text-transform: uppercase !important;
    color: color-mix(in srgb, var(--color_primary) 38%, var(--mix)) !important;
    opacity: 0;
    transition: opacity 1.2s ease 2.5s;
    pointer-events: none;
    white-space: nowrap;
    box-shadow: none !important; border: none !important; animation: none !important;
    padding: 0 !important; margin: 0 !important;
}

/* Abstract, non-representational backdrop — a muted single-hue vignette +
 * horizon-grid composition (no photographic or film-still imagery), sitting
 * behind the splash's own scanline/quote layers. A dim, monochrome wash reads
 * closer to a dark surveillance/case-file room than a colorful nebula. Built
 * entirely from the active theme palette so it re-colors automatically if
 * the palette is ever changed. */
#scifi_backdrop {
    position: absolute;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    animation: none !important;
    box-shadow: none !important;
    background: none;
}

/* Horizon grid — was a perspective gradient-line effect; flat design drops
   the decorative texture entirely rather than flattening it into a solid
   (a "grid" only reads as a grid via the gradient lines, so there's no
   flat equivalent worth keeping here). */
#scifi_backdrop::after {
    display: none;
}

#scifi_scanlines {
    position: absolute;
    inset: 0;
    background: none;
    pointer-events: none;
    z-index: 1;
    animation: none !important;
    box-shadow: none !important;
}

#scifi_corner_tl {
    position: absolute;
    top: 32px; left: 32px;
    width: 32px; height: 32px;
    animation: none !important; box-shadow: none !important;
}

#scifi_corner_br {
    position: absolute;
    bottom: 32px; right: 32px;
    width: 32px; height: 32px;
    animation: none !important; box-shadow: none !important;
}

#scifi_content {
    position: relative;
    z-index: 2;
    display: flex !important;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding: 0 8vw;
    width: 100%;
    max-width: 960px;
    box-sizing: border-box;
    overflow-wrap: break-word;
    animation: none !important;
    box-shadow: none !important;
}

/* "TRANSMISSION INCOMING" blinking label */
#scifi_label {
    font-size: clamp(0.58rem, 1.2vw, 0.82rem) !important;
    letter-spacing: 0.44em !important;
    text-transform: uppercase !important;
    color: color-mix(in srgb, var(--color_primary) 55%, var(--mix)) !important;
    margin-bottom: 2.4rem;
    font-family: 'Courier New', monospace !important;
    animation: _scifi_blink 1.9s step-end infinite;
    box-shadow: none !important; border: none !important;
}

/* Large, dramatic quote text */
#scifi_quote {
    font-size: clamp(1.2rem, 3.2vw, 2.4rem) !important;
    line-height: 1.22 !important;
    color: var(--color_text_stressed) !important;
    font-family: var(--font-heading) !important;
    font-weight: 400 !important;
    letter-spacing: 0.02em !important;
    text-shadow: none !important;
    opacity: 0;
    transition: opacity 0.9s ease-in-out;
    min-height: 2.8em;
    display: flex !important;
    align-items: center;
    justify-content: center;
    box-shadow: none !important; border: none !important;
    animation: none !important;
    padding: 0 !important; margin: 0 !important;
}

/* Attribution line */
#scifi_source {
    font-size: clamp(0.78rem, 1.7vw, 1.08rem) !important;
    color: color-mix(in srgb, var(--color_primary) 52%, var(--mix)) !important;
    letter-spacing: 0.14em !important;
    margin-top: 1.8rem;
    font-family: 'Courier New', monospace !important;
    font-style: italic;
    opacity: 0;
    transition: opacity 0.9s ease-in-out 0.4s;
    box-shadow: none !important; border: none !important;
    animation: none !important; padding: 0 !important;
}

@keyframes _scifi_blink {
    0%, 55% { opacity: 1; }
    56%, 100% { opacity: 0.22; }
}

/* ═══════════════════════════════════════════════════════════════
   Direct-message unread badge (nav link)
   The DM UI itself now lives on the dedicated /dm/ sub-page, loaded
   into the content iframe like every other section.
   ═══════════════════════════════════════════════════════════════ */

/* ── Unread badge inside DM nav link ────────────────────────── */
#dm_badge {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    background: var(--color_secondary);
    color: var(--text) !important;
    font-size: 0.56rem !important;
    font-weight: bold !important;
    min-width: 16px;
    height: 16px;
    border-radius: var(--theme-radius-xs) !important;
    padding: 0 3px;
    margin-left: 7px;
    pointer-events: none;
    letter-spacing: 0 !important;
    box-shadow: none !important;
    clip-path: none !important;
    text-transform: none !important;
    min-height: unset !important;
    vertical-align: middle;
}

/* ── Traditional-first polish ────────────────────────────────────────── */

/* Sidebar backdrop overlay — appears behind the open sidebar on traditional */
#div_left_backdrop {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 149;
    background: rgba(0,0,0,0.48);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}
html.sidebar-open #div_left_backdrop { display: block; }

/* Sits directly under the Start Menu itself, both now at the true
   top of the stack (z:2147483647/2147483646 — see #div_left's own
   desktop-mode rule for the full always-on-top reasoning, a deliberate
   2026-08-08 reversal of this rule's own earlier "stay under system
   overlays" choice) so an outside click anywhere — including on a
   near-ceiling overlay that used to sit above the old z:2001 — still
   reaches the backdrop and closes the menu. Real Windows 11 doesn't dim
   the desktop behind an open Start Menu either, so the heavy traditional-
   drawer scrim stays dropped here — the backdrop stays functionally
   present (click still closes the menu), just invisible. */
html.desktop-mode #div_left_backdrop {
    z-index: 2147483646 !important;
    background: transparent !important;
}

@media (max-width: 767px) {
    /* Sidebar sits above backdrop */
    #div_left { z-index: 150; }

    /* Hide the tnh marquee / ticker on small screens — too dense */
    #tnh_wrap, #tnh { display: none !important; }

    /* Main content area gets bottom padding so content clears the traditional nav */
    #div_content {
        padding-bottom: calc(56px + env(safe-area-inset-bottom)) !important;
    }

    /* Card radius on content panels */
    .glass-panel,
    .wall-entry,
    .ui-surface { border-radius: var(--theme-radius-xs) !important; }
}

/* Tablet: content panels side-by-side */
@media (min-width: 768px) and (max-width: 1023px) {
    #tnh_wrap { display: block; }
}

/* ══════════════════════════════════════════════════════════════
   POLISH PASS — sidebar, brand, top-bar, ticker
   ══════════════════════════════════════════════════════════════ */

/* ── Sidebar nav: active-page accent ───────────────────────── */
#div_left .a_nav_link.nav-active {
    /* Was fully transparent — the left-accent bullet was the only "you are
       here" cue. A soft rounded fill actually uses the corner radius above
       and reads as a proper current-page highlight. */
    background: color-mix(in srgb, var(--color_primary) 10%, transparent) !important;
    padding-left: 17px !important;
    color: var(--color_primary) !important;
    opacity: 1 !important;
}
#div_left .a_nav_link.nav-active::before {
    opacity: 1 !important;
    background: var(--color_primary) !important;
}

/* ── Search overlay — mirrors the iframe footprint exactly ───────── */
#srch_overlay {
    position: fixed;
    inset: 0;
    z-index: 2147483646;
    padding: 0;
    box-sizing: border-box;
    background: rgba(0, 0, 0, 0.88);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

#srch_overlay[hidden] {
    display: none !important;
}

#srch_overlay_panel {
    display: flex;
    flex-direction: column;
    flex: 1;
    min-height: 0;
    padding: 20px 24px 0;
    box-sizing: border-box;
    background: color-mix(in srgb, var(--bg_base) 16%, transparent);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}

#srch_overlay_hdr {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-bottom: 12px;
    margin-bottom: 16px;
    flex-shrink: 0;
}

#srch_overlay_title {
    font-size: 1.05rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--color_primary);
}

#srch_overlay_close {
    background: none;
    color: var(--color_text_dim);
    font-size: 1rem;
    cursor: pointer;
    padding: 2px 6px;
    line-height: 1;
}

#srch_overlay_close:hover {
    color: var(--color_primary);
}

#srch_overlay #srch_input_row {
    display: flex;
    gap: 8px;
    margin-bottom: 10px;
}

#srch_overlay #srch_input {
    flex: 1;
    padding: 8px 12px;
    background: transparent;
    color: var(--color_text);
    font-family: var(--font_mono, 'Courier New', monospace);
    font-size: 0.9rem;
    min-width: 0;
}

#srch_overlay #srch_input:focus {
}

#srch_overlay #srch_btn {
    padding: 8px 18px;
    background: transparent;
    color: var(--color_primary);
    font-family: var(--font_mono, 'Courier New', monospace);
    font-size: 0.85rem;
    letter-spacing: 0.02em;
    cursor: pointer;
    white-space: nowrap;
}

#srch_overlay #srch_btn:hover {
    background: color-mix(in srgb, var(--color_primary) 12%, transparent);
}

#srch_overlay #srch_sources {
    display: flex;
    gap: 14px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}

#srch_overlay #srch_sources label {
    display: flex;
    align-items: center;
    gap: 5px;
    cursor: pointer;
    font-size: 0.8rem;
    color: var(--color_text_dim);
    user-select: none;
    font-family: var(--font_mono, 'Courier New', monospace);
}

#srch_overlay #srch_sources input[type=checkbox] {
    accent-color: var(--color_primary);
}

#srch_overlay #srch_status {
    font-size: 0.8rem;
    color: var(--color_text_dim);
    margin-bottom: 10px;
    min-height: 1.2em;
    letter-spacing: 0.03em;
    font-family: var(--font_mono, 'Courier New', monospace);
}

#srch_overlay #srch_results {
    display: flex;
    flex-direction: column;
    gap: 8px;
    flex: 1;
    overflow-y: auto;
    padding-bottom: 28px;
    min-height: 0;
}

#srch_overlay .srch-result {
    display: block;
    padding: 10px 12px;
    text-decoration: none;
    color: inherit;
    cursor: pointer;
    font-family: var(--font_mono, 'Courier New', monospace);
    transition: border-color 0.12s, background 0.12s;
}

#srch_overlay .srch-result:hover {
    background: color-mix(in srgb, var(--color_primary) 5%, transparent);
}

#srch_overlay .srch-result-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
}

#srch_overlay .srch-source {
    font-size: 0.7rem;
    letter-spacing: 0.06em;
    padding: 2px 6px;
    white-space: nowrap;
}

#srch_overlay .srch-src-wall      { color: var(--color_accent_1, var(--color_primary)); border-color: currentColor; }
#srch_overlay .srch-src-guestbook { color: var(--color_accent_2, var(--color_secondary)); border-color: currentColor; }
#srch_overlay .srch-src-msgbase   { color: var(--color_accent_3, var(--color_tertiary, var(--color_text_dim))); border-color: currentColor; }

#srch_overlay .srch-result-ts {
    font-size: 0.7rem;
    color: var(--color_text_dim);
    margin-left: auto;
}

#srch_overlay .srch-result-title {
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--color_primary);
    margin-bottom: 3px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

#srch_overlay .srch-result-snippet {
    font-size: 0.78rem;
    color: var(--color_text_dim);
    line-height: 1.5;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

#srch_unauth_msg {
    color: var(--color_text_dim);
    font-size: 0.88rem;
    font-family: var(--font_mono, 'Courier New', monospace);
    margin: 0;
}

@media (max-width: 767px) {
    /* #srch_overlay is already position:fixed;inset:0 — no offset needed on traditional */
}


/* ═══════════════════════════════════════════════════════════════
   Log / Activity
   ═══════════════════════════════════════════════════════════════ */
/* ── Page shell ───────────────────────────────────────────────────── */
html:has(#log_wrap) body {
    opacity: 0;
    background: transparent !important;
    text-align: left !important;
    overflow-x: hidden;
    overflow-y: auto;
    transition: opacity 0.3s ease;
}
#log_wrap {
    display: flex;
    flex-direction: column;
    gap: 28px;
    padding: 0 24px 64px !important;
    box-sizing: border-box;
}

/* ── Header ───────────────────────────────────────────────────────── */
#log_header {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 16px !important;
    padding: 16px 0 !important;
    margin: 0 !important;
    background: none !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    border-radius: var(--theme-radius-xs) !important;
    overflow: visible !important;
    min-height: 0 !important;
    flex-wrap: nowrap !important;
}
#log_header_info {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
    background: none !important;
    padding: 0 !important;
}
#log_back_link {
    font-size: 0.85rem !important;
    letter-spacing: 0.02em;
    opacity: 0.5;
    padding-left: 13px !important;
    text-decoration: none;
    transition: opacity 0.15s;
    color: var(--color_primary) !important;
}
#log_back_link:hover { opacity: 0.85 !important; }

/* ── New Entry button ─────────────────────────────────────────────── */
#log_compose_btn {
    flex-shrink: 0;
}

/* ── Compose section ──────────────────────────────────────────────── */
#log_compose {
    display: flex;
    flex-direction: column;
    gap: 14px;
    background: none !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 0 !important;
}
#log_compose_heading {
    margin: 0 !important;
    font-size: 0.77rem !important;
    font-weight: 700 !important;
    letter-spacing: 0.22em !important;
    text-transform: uppercase !important;
    opacity: 0.55;
    background: none !important;
    padding: 0 !important;
}
#log_compose_inner {
    display: flex;
    flex-direction: column;
    gap: 12px;
    background: none !important;
    box-shadow: none !important;
    padding: 0 !important;
}
#log_text {
    width: 100% !important;
    min-height: 130px !important;
    padding: 12px 14px !important;
    margin: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    color: var(--color_text_normal) !important;
    font-size: 1.15rem !important;
    letter-spacing: 0.03em !important;
    line-height: 1.6 !important;
    resize: vertical;
    text-align: left !important;
    box-shadow: none !important;
    font-family: inherit !important;
}
#log_text:focus {
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--color_primary) 25%, var(--mix)) !important;
}

/* ── Media row ────────────────────────────────────────────────────── */
#log_media_row {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    background: none !important;
    box-shadow: none !important;
    padding: 0 !important;
}
.log-media-block {
    flex: 1;
    min-width: 180px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    background: none !important;
    box-shadow: none !important;
    padding: 0 !important;
}
.log-media-btns {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    background: none !important;
    padding: 0 !important;
}
.log-media-btn {
    gap: 5px !important;
    padding: 0 14px !important;
    margin: 0 !important;
    width: auto !important;
    white-space: nowrap;
}
.log-media-btn.recording, [data-role~="log-media-btn"].recording{
    color: var(--color_error, #FF2244) !important;
    border-color: var(--color_error, #FF2244) !important;
    animation: log-pulse 1s ease-in-out infinite !important;
}
.log-media-alt { opacity: 0.6; }
.log-media-alt:hover, [data-role~="log-media-alt"]:hover{ opacity: 1 !important; }
@keyframes log-pulse {
    0%, 100% { opacity: 1; }
    50%       { opacity: 0.45; }
}
#log_audio_preview {
    display: flex !important;
    align-items: center !important;
    gap: 0 !important;
    background: color-mix(in srgb, var(--color_primary) 4%, var(--mix)) !important;
    padding: 0 !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
}
/* remove btn floats next to the player controls bar */
#log_audio_preview .log-remove-btn { margin: 0 8px 0 0 !important; flex-shrink: 0; }
/* player controls inside preview: transparent bg, no border, inset padding */
#log_audio_preview .lbg-player { flex: 1 !important; min-width: 0; }
#log_audio_preview .lbg-player .lbg-player__controls {
    background: transparent !important;
    padding: 8px 10px !important;
}
#log_video_preview {
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 0 !important;
    background: color-mix(in srgb, var(--color_primary) 4%, var(--mix)) !important;
    padding: 0 !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
}
#log_video_preview .lbg-player { width: 100% !important; }
#log_video_preview .lbg-player .lbg-player__controls {
    background: transparent !important;
}
/* constrain compose-preview video height */
#log_video_preview .lbg-player__viewport video { max-height: 200px !important; }
#log_video_preview .log-remove-btn { margin: 6px 10px !important; }
#log_video_live {
    display: block !important;
    width: 100% !important;
    max-height: 260px !important;
    object-fit: cover !important;
    background: #000;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
}
.log-remove-btn {
    padding: 2px 6px !important;
    margin: 0 !important;
    flex-shrink: 0;
    opacity: 0.5;
    width: auto !important;
    min-height: 0 !important;
    height: auto !important;
    border: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
}
.log-remove-btn:hover, [data-role~="log-remove-btn"]:hover{
    opacity: 1 !important;
    color: var(--color_error, #FF2244) !important;
    border-color: transparent !important;
}
#log_audio_status,
#log_video_status {
    font-size: 0.77rem !important;
    color: var(--color_text_dim) !important;
    letter-spacing: 0.06em;
    min-height: 14px;
    background: none !important;
    padding: 0 !important;
}

/* ── Compose footer ───────────────────────────────────────────────── */
#log_compose_footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    background: none !important;
    padding: 0 !important;
}
#log_compose_status {
    font-size: 0.77rem !important;
    color: var(--color_text_dim) !important;
    letter-spacing: 0.06em;
    flex: 1;
    background: none !important;
    padding: 0 !important;
}
#log_compose_actions {
    display: flex;
    gap: 8px;
    background: none !important;
    padding: 0 !important;
}
#log_cancel_btn {
    height: 30px !important;
    min-height: 30px !important;
    padding: 0 16px !important;
    margin: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    color: var(--color_text_dim) !important;
    font-size: 0.77rem !important;
    font-weight: 600 !important;
    letter-spacing: 0.12em !important;
    text-transform: uppercase !important;
    cursor: pointer;
    width: auto !important;
    box-shadow: none !important;
    opacity: 0.7;
    transition: opacity 0.15s !important;
}
#log_cancel_btn:hover { opacity: 1 !important; }
#log_submit_btn {
    height: 30px !important;
    min-height: 30px !important;
    padding: 0 20px !important;
    margin: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    background: color-mix(in srgb, var(--color_primary) 14%, var(--mix)) !important;
    color: var(--color_primary) !important;
    font-size: 0.77rem !important;
    font-weight: 700 !important;
    letter-spacing: 0.14em !important;
    text-transform: uppercase !important;
    cursor: pointer;
    width: auto !important;
    box-shadow: none !important;
    transition: background 0.15s ease !important;
}
#log_submit_btn:hover {
    background: color-mix(in srgb, var(--color_primary) 28%, var(--mix)) !important;
}
#log_submit_btn:disabled {
    opacity: 0.4 !important;
    cursor: not-allowed !important;
}

/* ── Entries list ─────────────────────────────────────────────────── */
#log_entries {
    display: flex;
    flex-direction: column;
    gap: 0;
    background: none !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 0 !important;
}
#log_loading {
    font-size: 0.85rem !important;
    color: var(--color_text_dim) !important;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    padding: 24px 0;
    background: none !important;
}
.log-empty {
    font-size: 1.15rem !important;
    opacity: 0.4;
    padding: 32px;
    margin: 0 !important;
    background: none !important;
}

/* ── Entry cards ──────────────────────────────────────────────────── */
.log-entry {
    padding: 16px 20px !important;
    margin-bottom: 12px !important;
    background: color-mix(in srgb, var(--color_primary) 3%, var(--mix)) !important;
    transition: border-left-color 0.2s ease !important;
    animation: none !important;
    opacity: 1 !important;
    box-shadow: none !important;
}
.log-entry.log-editing {
    outline: 2px solid var(--color_primary) !important;
    outline-offset: -2px;
}
.log-entry:hover {
}
.log-entry-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    margin-bottom: 10px;
    gap: 8px;
    background: none !important;
    padding: 0 !important;
}
.log-entry-meta {
    display: flex;
    flex-direction: column;
    gap: 2px;
    background: none !important;
    padding: 0 !important;
}
.log-entry-date {
    font-size: 0.85rem !important;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--color_primary) !important;
    opacity: 0.7;
    font-weight: 600 !important;
}
.log-entry-owner {
    font-size: 0.77rem !important;
    letter-spacing: 0.08em;
    color: var(--color_text_dim) !important;
    opacity: 0.55;
}
.log-entry-delete {
    padding: 2px 5px !important;
    margin: 0 !important;
    flex-shrink: 0;
    opacity: 0.35;
    width: auto !important;
    min-height: 0 !important;
    height: auto !important;
    border: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
}
.log-entry-delete:hover, [data-role~="log-entry-delete"]:hover{
    opacity: 1 !important;
    color: var(--color_error, #FF2244) !important;
    border-color: transparent !important;
}
.log-entry-text {
    font-size: 1.31rem !important;
    line-height: 1.65 !important;
    letter-spacing: 0.02em;
    color: var(--color_text_normal) !important;
    white-space: pre-wrap;
    word-break: break-word;
    margin: 0 0 10px !important;
    background: none !important;
    padding: 0 !important;
}
.log-entry-text:last-child { margin-bottom: 0 !important; }
.log-entry-audio,
.log-entry-video { margin-top: 10px !important; background: none !important; padding: 0 !important; }
.log-player-wrap {
    background: color-mix(in srgb, var(--color_primary) 8%, var(--bg_dark)) !important;
    padding: 0 !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    overflow: hidden;
}
/* audio player: controls bar gets side padding, bg transparent (wrapper provides it) */
.log-audio-wrap .lbg-player .lbg-player__controls {
    background: transparent !important;
    padding: 9px 12px !important;
}
/* video player: constrain height, transparent controls */
.log-video-wrap .lbg-player__viewport video {
    max-height: 280px;
    object-fit: contain;
    background: #000 !important;
}
.log-video-wrap .lbg-player .lbg-player__controls {
    background: transparent !important;
    padding: 6px 12px !important;
}

/* ── Load more ────────────────────────────────────────────────────── */
#log_more_wrap {
    text-align: center;
    background: none !important;
    padding: 8px 0 !important;
}
#log_load_more {
    height: 30px !important;
    min-height: 30px !important;
    padding: 0 24px !important;
    margin: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    color: var(--color_text_dim) !important;
    font-size: 0.77rem !important;
    font-weight: 600 !important;
    letter-spacing: 0.14em !important;
    text-transform: uppercase !important;
    cursor: pointer;
    width: auto !important;
    box-shadow: none !important;
    opacity: 0.7;
    transition: opacity 0.15s, border-color 0.15s !important;
}
#log_load_more:hover {
    opacity: 1 !important;
    color: var(--color_primary) !important;
}

/* ── Traditional ───────────────────────────────────────────────────────── */
@media (max-width: 600px) {
    #log_wrap { padding: 0 16px 64px !important; }
    #log_media_row { flex-direction: column; }
    .log-media-block { min-width: 0; width: 100%; }
    #log_compose_footer { flex-direction: column; align-items: flex-start; }
    #log_compose_actions { width: 100%; justify-content: flex-end; }
    .log-entry { padding: 14px 16px !important; }
    #log_text { font-size: 1.23rem !important; }
}


/* ═══════════════════════════════════════════════════════════════
   Search
   ═══════════════════════════════════════════════════════════════ */
*, *::before, *::after { box-sizing: border-box; }

html:has(#srch_wrap) body {
    margin: 0;
    padding: 0;
    color: var(--color_text);
    font-family: var(--font_mono, 'Courier New', monospace);
    font-size: 0.88rem;
    min-height: 100vh;
    opacity: 0;
    transition: opacity 0.15s;
}

#srch_wrap {
    padding: 0;
    background: var(--theme-panel-bg);
    min-height: 100vh;
    box-sizing: border-box;
}

#srch_inner {
    max-width: 800px;
    margin: 0 auto;
    padding: 24px 20px 48px;
}


#srch_form_wrap {
    margin-bottom: 20px;
}

#srch_input_row {
    display: flex;
    gap: 8px;
    margin-bottom: 10px;
}

#srch_input {
    flex: 1;
    padding: 8px 12px;
    background: var(--color_bg_secondary, transparent);
    color: var(--color_text);
    font-family: inherit;
    font-size: 0.9rem;
    min-width: 0;
}

#srch_input:focus {
}



#srch_sources {
    display: flex;
    gap: 16px;
    flex-wrap: wrap;
}

#srch_sources label {
    display: flex;
    align-items: center;
    gap: 5px;
    cursor: pointer;
    font-size: 0.8rem;
    color: var(--color_text_dim);
    user-select: none;
}

#srch_sources input[type=checkbox] {
    accent-color: var(--color_primary);
}

#srch_status {
    font-size: 0.8rem;
    color: var(--color_text_dim);
    margin-bottom: 12px;
    min-height: 1.2em;
    letter-spacing: 0.03em;
}

#srch_results {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.srch-result {
    display: block;
    padding: 12px 14px;
    text-decoration: none;
    color: inherit;
    transition: border-color 0.15s, background 0.15s;
    cursor: pointer;
}

.srch-result:hover {
    background: color-mix(in srgb, var(--color_primary) 5%, transparent);
}

.srch-result-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
}

.srch-source {
    font-size: 0.73rem;
    letter-spacing: 0.06em;
    padding: 2px 7px;
    white-space: nowrap;
}

.srch-src-wall     { color: var(--color_accent_1, var(--color_primary)); border-color: var(--color_accent_1, var(--color_primary)); }
.srch-src-guestbook { color: var(--color_accent_2, var(--color_secondary)); border-color: var(--color_accent_2, var(--color_secondary)); }
.srch-src-msgbase  { color: var(--color_accent_3, var(--color_tertiary, var(--color_text_dim))); border-color: currentColor; }

.srch-result-ts {
    font-size: 0.73rem;
    color: var(--color_text_dim);
    margin-left: auto;
}

.srch-result-title {
    font-size: 0.92rem;
    font-weight: 600;
    color: var(--color_primary);
    margin-bottom: 4px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.srch-result-snippet {
    font-size: 0.8rem;
    color: var(--color_text_dim);
    line-height: 1.5;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

.srch-msg {
    color: var(--color_text_dim);
    font-size: 0.88rem;
    margin-top: 0;
}


/* ═══════════════════════════════════════════════════════════════
   Guestbook
   ═══════════════════════════════════════════════════════════════ */
html:has(#gb_wrap) {
    background: transparent;
    background-image: none;
    box-sizing: border-box;
}

*, *:before, *:after { box-sizing: inherit; }

html:has(#gb_wrap) body {
    background: transparent;
    opacity: 0;
    margin: 0;
    padding: 0;
    overflow-x: hidden;
    overflow-y: auto;
    text-align: left !important;
    transition: opacity 0.3s ease;
}

/* ── Wrapper ──────────────────────────────────────── */
#gb_wrap {
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    gap: 32px;
}

/*
 * ── Header ────────────────────────────────────────────────────
 * Uses the same LCARS integrity-tab pattern as all other sub-page
 * headers.  background: var(--theme-panel-bg) provides visual
 * continuity with fm/arcade headers and prevents the flat backdrop
 * canvas from bleeding through the header bar.
 *
 * The flex-direction: column + gap: 4px layout stacks the title
 * (#gb_title) above the entry count (#gb_count) so the count reads
 * as a subtitle, matching the chat online-count and wall meta
 * patterns.  backdrop-filter / animation / box-shadow are all
 * explicitly disabled to suppress global panel animation overrides.
 * ────────────────────────────────────────────────────────────── */

/* ── Form section ─────────────────────────────────── */
#gb_form_section {
    display: flex;
    flex-direction: column;
    gap: 14px;
    background: none !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 0 !important;
}

#gb_form_heading {
    margin: 0 !important;
    font-size: 1rem !important;
    font-weight: normal !important;
    letter-spacing: 0.22em !important;
    text-transform: uppercase;
    opacity: 0.45;
}

/* Flash / errors */
.gb-flash {
    margin: 0 !important;
    padding: 12px 16px;
    border-radius: var(--theme-radius-xs);
    font-size: 1.15rem !important;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
}

.gb-errors {
    margin: 0 !important;
    padding: 12px 16px 12px 32px;
    border-radius: var(--theme-radius-xs);
    font-size: 1.08rem !important;
    background: transparent !important;
    list-style: disc;
}

/* Form fields */
#gb_form {
    display: flex;
    flex-direction: column;
    gap: 12px;
    background: none !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 0 !important;
}

.gb-required { color: var(--color_text_stressed) !important; }
.gb-optional { opacity: 0.5; text-transform: none; letter-spacing: 0; font-size: 0.85rem !important; }

/* Location field */
.gb-location-wrap {
    position: relative;
    display: flex;
    align-items: center;
}

.gb-field-location input[type=text] {
    padding-right: 36px !important;
    color: color-mix(in srgb, var(--color_text_normal) 60%, var(--mix)) !important;
    cursor: default !important;
    caret-color: var(--mix);
    font-style: italic;
}

.gb-loc-status {
    position: absolute;
    right: 10px;
    font-size: 0.92rem !important;
    opacity: 0.45;
    pointer-events: none;
    white-space: nowrap;
}

#gb_loc_grant_btn {
    flex-shrink: 0;
    margin-left: 8px;
}

.gb-field-message textarea {
    min-height: 130px !important;
    resize: vertical !important;
}

.gb-char-count {
    font-size: 0.92rem !important;
    letter-spacing: 0.08em;
    opacity: 0.4;
    text-align: right;
}

#gb_submit {
    align-self: flex-start;
    margin: 4px 0 0 !important;
}

/* ── Entries ──────────────────────────────────────── */
#gb_entries {
    display: flex;
    flex-direction: column;
    gap: 16px;
    background: none !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
    padding: 0 !important;
    margin: 0 !important;
}

.gb-empty {
    font-size: 1.15rem !important;
    opacity: 0.4;
    text-align: center;
    padding: 32px;
    border-radius: var(--theme-radius-xs);
    margin: 0 !important;
}

.gb-entry {
    display: flex;
    gap: 14px;
    padding: 18px 20px;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    transition: border-color 0.18s ease, border-left-color 0.18s ease, box-shadow 0.18s ease;
    animation: none !important;
    opacity: 1 !important;

    &:hover {
        box-shadow: none;
    }
}

.gb-entry-avatar {
    width: 40px;
    height: 40px;
    flex-shrink: 0;
    border-radius: var(--theme-radius-xs);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.23rem !important;
    font-weight: bold !important;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
}

.gb-entry-body {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.gb-entry-meta {
    display: flex;
    align-items: baseline;
    gap: 10px;
    flex-wrap: wrap;
}

.gb-entry-name {
    font-size: 1.15rem !important;
    font-weight: bold !important;
    color: var(--color_text_stressed) !important;
    letter-spacing: 0.04em;
}

.gb-entry-date {
    font-size: 0.92rem !important;
    opacity: 0.4;
    letter-spacing: 0.06em;
}

.gb-entry-location {
    font-size: 0.92rem !important;
    opacity: 0.45;
    letter-spacing: 0.04em;
    font-style: italic;
}

.gb-entry-message {
    margin: 0 !important;
    font-size: 1.15rem !important;
    line-height: 1.65 !important;
    letter-spacing: 0.02em;
    white-space: pre-wrap;
    overflow-wrap: break-word;
}

.gb-delete-form {
    display: inline;
    margin: 0;
    padding: 0;
}

.gb-delete-btn {
    padding: 0 8px !important;
    height: 28px !important;
    margin: 0 !important;
    opacity: 0.45;
}
.gb-delete-btn:hover, [data-role~="gb-delete-btn"]:hover{
    opacity: 1;
    color: var(--color_secondary) !important;
}

/* ── Traditional ───────────────────────────────────────── */
@media (max-width: 600px) {
    #gb_wrap {
        padding: max(20px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-left)) 64px;
        gap: 20px;
    }

    .gb-entry {
        padding: 14px 16px;
        gap: 10px;
    }

    .gb-entry-avatar {
        width: 34px;
        height: 34px;
        font-size: 1rem !important;
    }

    #gb_submit {
        width: 100% !important;
        align-self: stretch;
        height: 44px !important;
        min-height: 44px !important;
        font-size: 1.08rem !important;
    }
}

/* ── X-Files redesign: heading/body type ── */
#gb_form_heading { font-family: var(--font-heading) !important; }
.gb-entry-message { font-family: var(--font-heading); }

/* ── Traditional-first card radius + input sizing ─────────────────── */
@media (max-width: 767px) {
    .gb-panel, .gb-form { border-radius: var(--theme-radius-xs); }
}

/* ══════════════════════════════════════════════════════════════
   POLISH PASS — layout constraint, form, entry cards
   ══════════════════════════════════════════════════════════════ */

/* ── Constrain the page to a readable column ───────────────── */
html:has(#gb_wrap) body {
    max-width: min(860px, calc(100vw - 32px)) !important;
    margin: 0 auto !important;
    padding: 0 16px !important;
    box-sizing: border-box !important;
}

/* ── Form heading: smaller, dimmer – acts as section label ─── */
#gb_form_heading {
    font-size: 0.77rem !important;
    letter-spacing: 0.22em !important;
    text-transform: uppercase !important;
    font-weight: 700 !important;
    opacity: 0.55;
    margin: 0 0 20px 0 !important;
}

/* ── Submit button: full-width, more prominent ─────────────── */
#gb_submit {
    width: 100% !important;
    padding: 11px !important;
    font-size: 0.85rem !important;
    letter-spacing: 0.18em !important;
    text-transform: uppercase !important;
    font-weight: 700 !important;
    background: transparent !important;
    color: var(--text_on_ac) !important;
    cursor: pointer !important;
    opacity: 1;
    transition: background 0.15s ease !important;
}
#gb_submit:hover {
    background: transparent !important;
    color: var(--text_on_ac) !important;
}

/* ── Entry cards: left-accent HUD panel ─────────────────────── */
.gb-entry, .gb-panel {
    padding: 16px 20px !important;
    margin-bottom: 12px !important;
    background: transparent !important;
    transition: border-left-color 0.2s ease !important;
}
.gb-entry:hover, .gb-panel:hover {
}

/* ── Entry author: accent tint ──────────────────────────────── */
.gb-entry-name {
    font-size: 1.08rem !important;
    font-weight: 700 !important;
    color: var(--color_primary) !important;
    letter-spacing: 0.02em !important;
}

/* ── Entry date: subtler ────────────────────────────────────── */
.gb-entry-date, .gb-entry-time {
    font-size: 0.85rem !important;
    opacity: 0.4;
    letter-spacing: 0.04em !important;
}

/* ── Entry message: better line height ──────────────────────── */
.gb-entry-message {
    line-height: 1.65 !important;
    margin-top: 10px !important;
    font-size: 1.15rem !important;
}

/* ── Entries section heading ─────────────────────────────────── */
#gb_entries_heading {
    font-size: 0.77rem !important;
    letter-spacing: 0.22em !important;
    text-transform: uppercase !important;
    font-weight: 700 !important;
    color: var(--color_primary) !important;
    padding-left: 8px !important;
    margin: 32px 0 16px 0 !important;
    opacity: 0.65;
}

@media (min-width: 860px) {
    html:has(#gb_wrap) body { padding: 0 !important; }
}

/* ═══════════════════════════════════════════════════════════════
   Login
   ═══════════════════════════════════════════════════════════════ */
/*  Modification Timestamp: 2026-05-27 06:52:39 */
/*  - Refactored local variables via strict AST parse to $_snake_case. */
/*  - Prefixed native PHP functions with \. */
/*  - Applied strict Compilation Order Law for declare(strict_types=1). */
/*  - Added robust error failsafes and 2-hour IP Ban security constraints. */
/*  - Injected high-density verbose technical flow comments. */



/* ── Base ─────────────────────────────────────── */
html:has(#login) {
    background: transparent !important;
    background-image: none;
    overscroll-behavior: none;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

html:has(#login) body {
    background: transparent !important;
    opacity: 0;
    margin: 0;
    padding: 0;
    overscroll-behavior: none;
    -webkit-tap-highlight-color: var(--mix);
}

/* ── Destinations panel ───────────────────────── */

/* ── Background video ─────────────────────────── */
#bg-video {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    height: 100dvh;
    object-fit: cover;
    z-index: -1;
}

/* ── Login card ───────────────────────────────── */
#header {}

#login {
    max-width: none;
    width: 100%;
    margin: 0;
    display: flex;
    flex-direction: column;
    text-align: left;
    padding: 28px clamp(24px, 6vw, 80px) 32px;
    box-sizing: border-box;
    background: transparent !important;
    backdrop-filter: none !important;
    border-radius: var(--theme-radius-xs) !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
}

#login h2 {
    margin-top: 0;
    margin-bottom: 28px;
    color: var(--color_text_stressed);
    text-align: left;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    font-size: 1rem !important;
    font-weight: 700 !important;
    opacity: 0.9;
}

#login label {
    font-size: 0.77rem !important;
    font-weight: 600 !important;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    margin-top: 14px;
    opacity: 0.6;
    color: var(--color_text_normal);
}

#login input[type="text"],
#login input[type="password"],
#login input[type="submit"] {
    width: 100% !important;
    margin: 10px 0 20px 0 !important;
}

#login input[type="submit"] {
    margin-top: 25px !important;
    margin-bottom: 0 !important;
}

/* ── Touch interaction ────────────────────────── */
#login input[type="text"],
#login input[type="password"],
#login input[type="submit"] {
    touch-action: manipulation;
}

/* ── Loading splash ───────────────────────────── */
#loading_splash {
    position: fixed;
    inset: 0;
    background: transparent !important;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 999999;
    font-family: monospace;
    font-size: 0.85rem;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    transition: opacity 0.5s;
}

/* ── Traditional ───────────────────────────────────── */
@media (max-width: 767px) {
    #login {
        margin-top: max(48px, env(safe-area-inset-top, 0px));
        margin-bottom: max(24px, env(safe-area-inset-bottom, 0px));
        margin-left: auto;
        margin-right: auto;
        max-width: 100%;
        padding-top:    24px;
        padding-bottom: 24px;
        padding-left:   max(24px, env(safe-area-inset-left, 0px));
        padding-right:  max(24px, env(safe-area-inset-right, 0px));
    }



}

/* ── Desktop ──────────────────────────────────── */
@media (min-width: 1024px) {
    #login {
        max-width: none;
        width: 100%;
        margin: 0;
    }
}

/* ── Sub-page UI: login form controls (glass-panel itself now inherits
   the airy rounded-glass base rule instead of being flattened here) ── */
#login input[type="text"], #login input[type="password"] { border-radius: var(--theme-radius-sm) !important; border: 1px solid var(--color_border) !important; background: var(--theme-input-bg) !important; color: var(--color_text_normal) !important; box-shadow: none !important; }
#login input[type="text"]:focus, #login input[type="password"]:focus { border-color: var(--color_primary) !important; outline: none !important; }
#login input[type="submit"] { border-radius: var(--theme-radius-sm) !important; background: transparent !important; border: 1px solid var(--color_primary) !important; color: var(--color_text_stressed) !important; letter-spacing: 0.02em !important; text-transform: none !important; font-family: inherit !important; font-weight: bold !important; cursor: pointer !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; box-shadow: none !important; }
#login input[type="submit"]:hover { background: transparent !important; }

/* "Remember this device" checkbox row (migrated from inline style). */
#lb_remember_label {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.92rem;
    cursor: pointer;
    margin: 10px 0 4px;
}
#lb_remember { width: auto; margin: 0; }

/* ── X-Files redesign: heading uses the case-file typewriter face ── */
#login h2 { font-family: var(--font-heading) !important; }

/* ── Traditional-first overrides ───────────────────────────────────── */
@media (max-width: 767px) {
    #login {
        margin: 16px;
        width: calc(100% - 32px);
    }
    #login input[type="text"],
    #login input[type="password"] {
        font-size: 1.23rem !important;
        min-height: 44px;
    }
    #login input[type="submit"] {
        min-height: 44px;
        font-size: 1.23rem !important;
    }
}

@media (min-width: 768px) {
    #login {
        max-width: min(480px, 90vw);
        margin: 0 auto;
    }
}

/* ══════════════════════════════════════════════════════════════
   POLISH PASS — card contrast, heading, inputs, button
   ══════════════════════════════════════════════════════════════ */

/* ── Full-page centering ────────────────────────────────────── */
html:has(#login) body {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    min-height: 100dvh !important;
    padding: 24px 16px !important;
    box-sizing: border-box !important;
}

/* ── Login card: stronger surface + sharper left accent ──────── */
#login {
    background: transparent !important;
    box-shadow: none !important;
}

/* ── Heading: larger, full accent brightness ─────────────────── */
#login h2 {
    font-size: 1.15rem !important;
    letter-spacing: 0.28em !important;
    color: var(--color_primary) !important;
    opacity: 0.9 !important;
    margin-bottom: 32px !important;
}

/* ── Labels: sharper uppercase ───────────────────────────────── */
#login label {
    font-size: 0.77rem !important;
    letter-spacing: 0.18em !important;
    font-weight: 700 !important;
    opacity: 0.55 !important;
    margin-top: 18px !important;
}

/* ── Inputs: slightly more visible background ───────────────── */
#login input[type="text"],
#login input[type="password"] {
    padding: 10px 14px !important;
    font-size: 1.08rem !important;
}

/* ── Submit: full width, solid accent tint ────────────────────── */
#login input[type="submit"] {
    margin-top: 28px !important;
    padding: 12px !important;
    font-size: 0.85rem !important;
    letter-spacing: 0.02em !important;
    font-weight: 700 !important;
    background: transparent !important;
    color: var(--color_primary) !important;
    opacity: 0.85;
    transition: opacity 0.15s ease, background 0.15s ease !important;
}
#login input[type="submit"]:hover {
    opacity: 1 !important;
    background: transparent !important;
}


/* ═══════════════════════════════════════════════════════════════
   Signup
   ═══════════════════════════════════════════════════════════════ */
/* ── Reset ───────────────────────────────────────────────────── */
html:has(.su-wrap), html:has(.su-wrap) body {
    margin: 0;
    padding: 0;
    background: transparent;
    font-family: 'Courier New', Courier, monospace;
    color: var(--color_text_normal);
    min-height: 100vh;
}

/* ── Full-width wrapper (matches the login page layout) ───────── */
.su-wrap {
    display: block;
    width: 100%;
    padding: 0;
    box-sizing: border-box;
}

/* ── Flat full-width panel (mirrors the login #login panel) ───── */
.su-panel {
    background: transparent !important;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: none;
    padding: 28px clamp(24px, 6vw, 80px) 32px;
    max-width: none;
    width: 100%;
    box-sizing: border-box;
}

/* ── Section heading ─────────────────────────────────────────── */
.su-title {
    font-size: 1rem;
    color: var(--color_text_stressed);
    margin: 0 0 22px 0;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    font-weight: normal;
    opacity: 0.9;
    padding-left: 10px;
    padding-bottom: 0;
}

/* ── Text / email / password inputs ─────────────────────────── */
.su-in {
    width: 100%;
}

/* ── Avatar file input — theme the native "Choose File" button to match ── */
.su-in[type="file"], [data-role~="su-in"][type="file"]{
    padding: 5px 8px;
    cursor: pointer;
    line-height: 1.7;
}
.su-in[type="file"]::file-selector-button,
.su-in[type="file"]::-webkit-file-upload-button, [data-role~="su-in"][type="file"]::-webkit-file-upload-button{
    font-family: inherit;
    font-size: 0.72rem;
    font-weight: bold;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--color_text_stressed);
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
    padding: 5px 14px;
    margin-right: 12px;
    cursor: pointer;
    transition: background 0.18s;
}
.su-in[type="file"]::file-selector-button:hover,
.su-in[type="file"]::-webkit-file-upload-button:hover, [data-role~="su-in"][type="file"]::-webkit-file-upload-button:hover{
    background: transparent !important;
}

.su-pw-row { display: flex; gap: 6px; align-items: center; }
.su-pw-row .su-in { flex: 1 1 auto; min-width: 0; }
.su-btn-gen {
    width: auto !important;
    flex: 0 0 auto;
    margin-top: 0;
}

/* ── Submit button ───────────────────────────────────────────── */
.su-btn {
    display: block !important;
    width: 100% !important;
    margin-top: 20px !important;
}

/* ── Status / feedback line ──────────────────────────────────── */
.su-status {
    margin-top: 12px;
    font-size: 0.75rem;
    min-height: 1.3em;
    text-align: center;
    letter-spacing: 0.04em;
}

.su-status.ok  { color: var(--color_primary); }
.su-status.err { color: var(--color_secondary); }

/* ── Back-to-login link ──────────────────────────────────────── */
.su-back {
    display: block;
    margin-top: 14px;
    text-align: center;
    font-size: 0.68rem;
    color: color-mix(in srgb, var(--color_text_normal) 38%, var(--mix));
    letter-spacing: 0.08em;
    text-transform: uppercase;
    text-decoration: none;
    transition: color 0.18s;
}

.su-back:hover, [data-role~="su-back"]:hover{ color: var(--accent_lit); }

/* "(optional)" field hints (migrated from inline style). */
.su-optional { opacity: .45; }

/* ── X-Files redesign: heading uses the case-file typewriter face ── */
.su-title { font-family: var(--font-heading) !important; }

/* ── Traditional-first ──────────────────────────────────────────────── */
html:has(.su-wrap), html:has(.su-wrap) body { min-height: 100dvh; }

@media (max-width: 767px) {
    .su-panel {
        margin: max(16px, env(safe-area-inset-top, 16px)) 16px 16px;
        width: calc(100% - 32px);
        padding: 24px 20px 28px;
    }
    .su-in,
    .su-in[type="text"],
    .su-in[type="email"],
    .su-in[type="password"], [data-role~="su-in"][type="password"]{
        font-size: 1.23rem !important;
        min-height: 44px;
    }
    .su-btn { min-height: 44px; font-size: 1.15rem !important; }
}

@media (min-width: 768px) {
    .su-panel {
        max-width: none;
        padding: 28px clamp(24px, 4vw, 64px) 40px;
    }
    /* Align header left-padding with the panel so the title lines up with the form */
    html.subpage #su_header {
        padding-left:  clamp(24px, 4vw, 64px) !important;
        padding-right: clamp(24px, 4vw, 64px) !important;
        border-radius: var(--theme-radius-xs) !important;
    }
    /* Two-column grid: natural pairs fill left→right */
    #su_form {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 14px clamp(20px, 3vw, 52px);
    }
    #su_form .lb-field {
        margin-bottom: 0;
    }
    /* Avatar field and submit button span both columns */
    #su_form .lb-field:has([type="file"]),
    #su_form > .su-btn {
        grid-column: 1 / -1;
    }
    /* Strip lb-input's side margin inside the grid so cells don't overflow */
    #su_form .su-in {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }
}


/* ═══════════════════════════════════════════════════════════════
   Admin
   ═══════════════════════════════════════════════════════════════ */
@font-face {
    font-family: 'PxPlus VGA SquarePx';
    src: url('/admin/index.php?sa=get_media_asset&spu=standard//font&ft=PxPlus_VGA_SquarePx&fe=ttf') format('truetype');
    font-display: swap;
}

@font-face {
    font-family: 'Dos437';
    src: url('/admin/index.php?sa=get_media_asset&spu=standard//font&ft=dos437&fe=ttf') format('truetype');
    font-display: block;
}

@font-face {
    font-family: 'Terminus';
    src: url('/admin/index.php?sa=get_media_asset&spu=standard//font&ft=terminus-normal&fe=ttf') format('truetype');
    font-display: block;
}

@font-face {
    font-family: 'Terminus';
    font-weight: bold;
    src: url('/admin/index.php?sa=get_media_asset&spu=standard//font&ft=terminus-normal&fe=ttf') format('truetype');
    font-display: block;
}

/* ── Global resets ────────────────────────────────── */
[hidden] { display: none !important; }

html:has(#admin_wrap) { background: transparent !important; box-sizing: border-box; font-size: clamp(13px, 1.2vw, 15px) !important; }
*, *:before, *:after { box-sizing: inherit; }

html:has(#admin_wrap) body {
    background: transparent !important;
    opacity: 0;
    margin: 0;
    padding: 0;
    overflow: hidden;
    transition: opacity 0.35s ease-in-out;
}

/* Override emitter subpage body padding — admin is full-bleed */
html.subpage body { padding: 0 !important; }

/* Suppress global wallpaper pseudo-elements inside admin pages */
html:has(#admin_wrap) body::before, html:has(#admin_wrap) body::after { display: none !important; }

/* ══════════════════════════════════════════════════
   ADMIN SHELL — tab bar + panels
   ══════════════════════════════════════════════════ */

#admin_wrap {
    display: flex !important;
    flex-direction: row !important;
    height: 100dvh !important;
    overflow: hidden !important;
    gap: 0 !important;
}

/* ── Tab list (vertical sidebar — always a slide-in overlay) ───── */
#admin_tab_bar {
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    position: fixed !important;
    top: 0 !important;
    left: -100% !important;
    height: 100dvh !important;
    width: max(310px, 50vw) !important;
    min-height: 0 !important;
    padding: 0 12px !important;
    background: #000 !important;
    border-right: 1px solid color-mix(in srgb, var(--color_primary) 18%, transparent) !important;
    z-index: 800 !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    padding-top: 0 !important;
    transition: left 0.25s ease-in-out !important;
}

html.admin-nav-open #admin_tab_bar {
    left: 0 !important;
}

#admin_tab_bar::-webkit-scrollbar { display: none; }

#admin_sidebar_brand {
    flex-shrink: 0;
    padding: 14px 18px 12px;
    background: color-mix(in srgb, var(--color_violet) 68%, transparent) !important;
    border-radius: var(--theme-radius-xs) !important;
    display: flex;
    align-items: center;
    margin: 0 -12px !important;
    width: calc(100% + 24px) !important;
    font-size: clamp(13px, 1.23rem, 15px) !important;
    font-weight: 700 !important;
    letter-spacing: 0.14em !important;
    color: var(--text_on_ac) !important;
    font-family: var(--font-heading) !important;
    box-shadow: none !important;
}

/* ── Hamburger — embedded in each panel header ─────────────────── */
.admin-hamburger-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    min-height: unset;
    margin-right: 10px;
}


/* ── Persistent nav strip (always visible, outside panels) ──────── */
#admin_topbar {
    position: absolute !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    height: 50px !important;
    z-index: 600 !important;
    display: flex !important;
    align-items: center !important;
    padding: 0 10px !important;
    background: transparent !important;
    flex-shrink: 0 !important;
}
#admin_topbar::before {
    content: '' !important;
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 56px !important;
    height: 100% !important;
    background: transparent !important;
    z-index: 0 !important;
    pointer-events: none !important;
    animation: none !important;
}

#admin_ham_btn {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    min-height: unset !important;
    padding: 0 !important;
}

/* Per-panel hamburgers hidden — topbar has the static button */
.admin-tab-panel .admin-hamburger-btn {
    display: none !important;
}

/* ── Backdrop ───────────────────────────────────────────────────── */
#admin-drawer-backdrop {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 790;
    background: transparent !important;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}
html.admin-nav-open #admin-drawer-backdrop { display: block; }

.admin-tab-btn {
    display: flex !important;
    align-items: center !important;
    justify-content: flex-start !important;
    width: 100% !important;
    margin: 3px 0 !important;
    padding-left: 18px !important;
    text-align: left !important;
    white-space: normal;
    flex-shrink: 0;
    position: relative;
}

.admin-tab-btn::before, [data-role~="admin-tab-btn"]::before{
    content: '';
    display: inline-block;
    width: 4px;
    height: 4px;
    border-radius: var(--theme-radius-xs) !important;
    background: var(--color_primary) !important;
    margin-right: 12px;
    flex-shrink: 0;
    opacity: 0.3;
    transition: opacity 0.3s ease-in-out !important;
}

.admin-tab-btn:hover::before, [data-role~="admin-tab-btn"]:hover::before{
    opacity: 1 !important;
}

.admin-tab-btn.active, [data-role~="admin-tab-btn"].active{
    opacity: 1;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
}

.admin-tab-btn.active::before, [data-role~="admin-tab-btn"].active::before{
    opacity: 1 !important;
    background: var(--color_primary) !important;
}

/* ── Tab buttons: touch targets on small screens ───── */
@media (max-width: 600px) {
    .admin-tab-btn {
        height: 44px !important;
        min-height: 44px !important;
        font-size: 0.77rem !important;
    }
}

/* ── Tab groups ────────────────────────────────────── */
.admin-tab-group {
    display: flex;
    flex-direction: column;
    flex-shrink: 0;
    margin-bottom: 10px;
}

.admin-tab-group-label {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    width: 100% !important;
    margin: 0 !important;
    cursor: pointer !important;
    text-align: left !important;
    opacity: 1 !important;
    border: none !important;
    text-transform: none !important;
    letter-spacing: 0.02em !important;
    font-weight: 600 !important;
    font-size: 1.05rem !important;
    height: auto !important;
    padding: 10px 18px 4px !important;
}
.admin-tab-group-label:hover, [data-role~="admin-tab-group-label"]:hover{
    background: transparent !important;
    color: inherit !important;
    border-color: transparent !important;
}
.admin-tab-group-arrow {
    font-size: 0.77rem;
    line-height: 1;
    opacity: 0.6;
    transition: transform 0.2s ease;
    display: inline-block;
    flex-shrink: 0;
}
.admin-tab-group.collapsed .admin-tab-group-arrow {
    transform: rotate(-90deg);
}

/* Animate buttons in/out when a group is toggled. */
.admin-tab-group .admin-tab-btn {
    transition: max-height 0.18s ease, opacity 0.18s ease, padding 0.18s ease, min-height 0.18s ease !important;
    max-height: 44px;
    overflow: hidden;
}
.admin-tab-group.collapsed .admin-tab-btn {
    max-height: 0 !important;
    min-height: 0 !important;
    height: 0 !important;
    opacity: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
    pointer-events: none !important;
}

/* ── Tab content area ─────────────────────────────── */
#admin_tab_content {
    flex: 1 !important;
    min-height: 0 !important;
    position: relative !important;
    overflow: hidden !important;
}

.admin-section-title {
    padding-bottom: 8px;
    margin-bottom: 12px !important;
    border-bottom: 1px solid var(--color_border) !important;
}

.admin-tab-panel {
    position: absolute !important;
    top: 50px !important;
    right: 0 !important;
    bottom: 0 !important;
    left: 0 !important;
    /* Was overflow:hidden on all axes (2026-08-11 fix) — every tab's
       real content height depends on how much is in it (an "Edit" form
       is taller than "Add", a longer app list is taller than a short
       one), and #admin_wrap/#admin_tab_content above are BOTH also
       hard overflow:hidden with a fixed 100dvh height, so any panel
       taller than the available window space was silently, permanently
       clipped with no way to reach the rest — confirmed for real: the
       Remote Apps tab's "Edit" form (taller than "Add" — it adds a
       heading) cut off the "Runs as (system user)" field and the
       save/cancel buttons entirely on a maximized-but-not-huge window,
       screenshot-confirmed, zero scrollbar anywhere. This is the one
       layer of the three that SHOULD scroll — #admin_wrap/
       #admin_tab_content stay hard-bounded (that's the correct "app
       shell" pattern: sidebar + tab list never scroll), only the
       per-tab CONTENT does. */
    overflow-x: hidden !important;
    overflow-y: auto !important;
    display: none !important;
    background: transparent !important;
    padding: 16px 20px 20px !important;
    box-sizing: border-box !important;
}

/* Full-bleed panels — terminals, VNC, editor, media browser need no inner padding */
#admin_tab_cli,
#admin_tab_terminal,
#admin_tab_vnc,
#admin_tab_editor,
#admin_tab_media {
    padding: 0 !important;
}

.admin-tab-panel.active {
    display: block !important;
}

/* VNC's iframe needs flex:1 (not height:100%) to leave room for its header. */
#admin_tab_vnc.active {
    display: flex !important;
    flex-direction: column !important;
}

/* Users + audit panels scroll vertically */
#admin_tab_users,
#admin_tab_audit {
    overflow-y: auto !important;
    overflow-x: hidden !important;
}

/* Headscale, IP bans, scripts panels scroll vertically */
#admin_tab_headscale,
#admin_tab_ban_ips,
#admin_tab_scripts {
    overflow-y: auto !important;
    overflow-x: hidden !important;
}

/* ── Step-up form ─────────────────────────────────── */
#admin_stepup_wrap {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    background: transparent !important;
}

#admin_stepup_panel {
    width: 100%;
    max-width: 480px;
    background: transparent !important;
    padding: 24px 28px;
    display: flex;
    box-shadow: none;
}

/* ══════════════════════════════════════════════════
   USERS TAB  (#um_ / .um-)
   ══════════════════════════════════════════════════ */

#um_wrap {
    --_ph: 24px;
    padding: 0 var(--_ph) 72px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.admin-panel-fullscreen-btn, [data-role~="admin-panel-fullscreen-btn"] {
    flex-shrink: 0;
    background: transparent !important;
    color: var(--color_primary);
    width: 30px;
    height: 30px;
    min-height: unset;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.23rem;
    line-height: 1;
    cursor: pointer;
    padding: 0;
    opacity: 0.7;
    transition: opacity 0.3s;
}
.admin-panel-fullscreen-btn:hover, [data-role~="admin-panel-fullscreen-btn"]:hover { opacity: 1; border-color: var(--color_primary); }

:fullscreen .admin-panel-fullscreen-btn, :fullscreen [data-role~="admin-panel-fullscreen-btn"] { font-size: 1.08rem; }

.um-flash {
    margin: 0 !important;
    padding: 11px 16px;
    border-radius: var(--theme-radius-xs);
    font-size: 1rem !important;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
}

.um-errors {
    margin: 0 !important;
    padding: 11px 16px 11px 32px;
    border-radius: var(--theme-radius-xs);
    font-size: 0.92rem !important;
    background: transparent !important;
    list-style: disc;
}

#um_add_panel {
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    padding: 22px 24px;
    display: flex;
    flex-direction: column;
    box-shadow: none;
    animation: none !important;
    opacity: 1 !important;
}

.um-panel-heading {
    margin: 0 !important;
    font-size: 0.85rem !important;
    font-weight: normal !important;
    letter-spacing: 0.22em !important;
    text-transform: uppercase;
    opacity: 0.45;
}

.um-form {
    display: flex;
    flex-direction: column;
    gap: 12px;
    animation: none !important;
    opacity: 1 !important;
    background: none !important;
    box-shadow: none !important;
    margin: 0 !important;
    padding: 0 !important;
}

.um-form-row {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    align-items: flex-end;
}

.um-form-row-2 > .lb-field { flex: 1 1 200px; min-width: 0; }

.um-req  { color: var(--color_primary) !important; }
.um-optional { opacity: 0.4; text-transform: none; letter-spacing: 0; font-size: 0.69rem !important; }

.um-pw-row { display: flex; gap: 6px; align-items: center; }
.um-pw-row input { flex: 1; min-width: 0; }
[data-role~="um-btn-gen"] {
    flex-shrink: 0;
    height: 36px !important;
    min-height: 36px !important;
    padding: 0 12px !important;
    font-size: 0.77rem !important;
    white-space: nowrap;
}

.lb-select:disabled { opacity: 0.4; cursor: not-allowed; }

.um-form-actions {
    display: flex;
    gap: 8px;
    align-items: center;
    padding-top: 4px;
    flex-wrap: wrap;
}

/* .um-btn/.int-btn class selectors were dead (buttons migrated to
   class="lb-btn" data-role="..." for JS hooks, but these styling rules
   were never converted to match) — converted to [data-role~=...] below so
   the intended sizing/variant colors actually apply again. */
[data-role~="um-btn"], [data-role~="int-btn"] {
    margin: 0 !important;
    white-space: nowrap;
    flex-shrink: 0;
}

[data-role~="int-btn"]:active, [data-role~="um-btn"]:active{ transform: scale(0.97) !important; }
[data-role~="int-btn"]:disabled, [data-role~="int-btn"][disabled]{ opacity: 0.4 !important; cursor: not-allowed !important; pointer-events: none; }

[data-role~="um-btn-sm"] {
    padding: 0 14px !important;
    font-size: 0.77rem !important;
    letter-spacing: 0.04em !important;
}

[data-role~="um-btn-primary"],
[data-role~="int-btn-primary"],
[data-role~="bk-btn-primary"] {
    border-color: var(--color_primary) !important;
    color: var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 12%, transparent) !important;
}
[data-role~="int-btn-primary"]:hover{
    border-color: var(--color_primary) !important;
    color: var(--color_primary) !important;
}

[data-role~="um-btn-warn"] {
    border-color: color-mix(in srgb, var(--color_amber) 50%, transparent) !important;
    color: color-mix(in srgb, var(--color_amber) 90%, white) !important;
}
[data-role~="um-btn-warn"]:hover{
    border-color: var(--color_amber) !important;
    color: var(--color_amber) !important;
}

[data-role~="um-btn-ok"] {
    border-color: color-mix(in srgb, var(--color_teal) 50%, transparent) !important;
    color: color-mix(in srgb, var(--color_teal) 90%, white) !important;
}
[data-role~="um-btn-ok"]:hover{
    border-color: var(--color_teal) !important;
    color: var(--color_teal) !important;
}

[data-role~="um-btn-danger"] {
    border-color: color-mix(in srgb, var(--color_secondary) 60%, transparent) !important;
    color: var(--color_secondary) !important;
}

#um_users {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.um-empty {
    font-size: 1rem !important;
    opacity: 0.4;
    text-align: center;
    padding: 32px;
    border-radius: var(--theme-radius-xs);
    margin: 0 !important;
}

.um-user {
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    overflow: hidden;
    animation: none !important;
    opacity: 1 !important;
    transition: border-color 0.3s, border-left-color 0.3s;
}

.um-user:hover {
}

.um-user-banned {
    opacity: 0.55;
}

.um-user-row {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: center;
    gap: 14px;
    padding: 14px 18px;
}

.um-avatar {
    width: 40px;
    height: 40px;
    min-width: 40px;
    border-radius: var(--theme-radius-xs);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.23rem !important;
    font-weight: bold !important;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    flex-shrink: 0;
    animation: none !important;
    opacity: 1 !important;
    overflow: hidden;
    position: relative;
}

.um-avatar-img {
    display: none;
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: var(--theme-radius-xs);
}

.um-avatar.has-img .um-avatar-img {
    display: block;
}

.um-avatar-admin {
    background: transparent !important;
}

.um-user-info {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.um-user-name {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    font-size: 1rem !important;
    font-weight: bold !important;
    color: var(--color_text_stressed) !important;
    overflow: hidden;
}

.um-user-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.77rem !important;
    opacity: 0.45;
    flex-wrap: wrap;
}

.um-meta-sep { opacity: 0.4; }

.um-meta-username { color: var(--color_text_secondary); font-weight: 600; }
.um-meta-email { color: var(--color_text_dim); }

.um-tag {
    display: inline-block;
    padding: 2px 7px;
    border-radius: var(--theme-radius-xs);
    font-size: 0.69rem !important;
    font-weight: bold !important;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    line-height: normal !important;
}

.um-tag-admin     { background: transparent !important; color: var(--color_primary) !important; }
.um-tag-moderator { background: transparent !important; color: color-mix(in srgb, var(--color_primary) 65%, var(--text)) !important; }
.um-tag-user      { background: transparent !important; }
.um-tag-you       { background: transparent !important; color: var(--color_primary) !important; }
.um-tag-banned    { background: transparent !important; color: color-mix(in srgb, var(--color_secondary) 80%, white) !important; }

.um-user-actions {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}

.um-edit-panel {
    padding: 20px 18px;
    background: transparent !important;
    animation: none !important;
    opacity: 1 !important;
}

@media (max-width: 600px) {
    #um_wrap {
        --_ph: max(14px, env(safe-area-inset-left));
        padding: 0 var(--_ph) 72px;
        gap: 14px;
    }
    #um_header { flex-wrap: wrap; }
    .um-user-row { padding: 12px 14px; gap: 10px; flex-wrap: wrap; }
    .um-avatar { width: 34px; height: 34px; min-width: 34px; font-size: 1rem !important; }
    .um-user-actions { flex-wrap: wrap; gap: 6px; flex-basis: 100%; padding-left: 44px; }
    .um-form-row-2 > .lb-field { flex: 1 1 100%; }
}

@media (min-width: 1024px) {
    #um_wrap { --_ph: 32px; padding: 0 var(--_ph) 80px; }
}

/* ══════════════════════════════════════════════════════════════════
   DATABASE TAB — table/row browser + raw SQL console
   ══════════════════════════════════════════════════════════════════ */
/* ── #catlas_wrap — Code Atlas admin tab, two-pane tree + viewer ────── */
#catlas_wrap {
    display: flex;
    flex-direction: row;
    height: 100%;
    box-sizing: border-box;
}
#catlas_tree_pane {
    width: 300px;
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: transparent !important;
    padding: 10px 6px;
    box-sizing: border-box;
    border-right: 1px solid var(--color_border) !important;
    gap: 8px;
}
#catlas_tree_status {
    padding: 6px 10px;
    font-size: 0.8rem;
    color: var(--color_text_dim);
}
#catlas_outline {
    flex-shrink: 0;
    max-height: 40%;
    overflow-y: auto;
}
#catlas_outline .lb-detail-summary {
    padding: 6px 10px !important;
    font-size: 0.76rem !important;
}
#catlas_outline .lb-detail-body {
    padding: 4px 0 !important;
    max-height: 220px;
    overflow-y: auto;
}
.lb-outline-item {
    padding: 3px 10px 3px 18px;
    font-size: 0.78rem;
    color: var(--color_text_dim);
    cursor: pointer;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    border-radius: var(--theme-radius-xs);
}
.lb-outline-item:hover {
    background: color-mix(in srgb, var(--color_primary) 8%, transparent);
    color: var(--color_text_normal);
}
.lb-outline-item[data-kind="class"] { font-weight: 600; color: var(--color_text_normal); }
#catlas_tree_filter {
    flex-shrink: 0;
    margin: 0 4px !important;
    width: calc(100% - 8px) !important;
    height: 32px !important;
    min-height: 0 !important;
    font-size: 0.78rem !important;
    border-radius: var(--theme-radius-xs) !important;
    padding: 0 10px !important;
}
#catlas_tree_container {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
}
#catlas_search_results {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.lb-catlas-result {
    padding: 6px 10px;
    border-radius: var(--theme-radius-xs);
    cursor: pointer;
}
.lb-catlas-result:hover {
    background: color-mix(in srgb, var(--color_primary) 8%, transparent);
}
.lb-catlas-result-path {
    font-size: 0.74rem;
    color: var(--color_primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.lb-catlas-result-snippet {
    font-size: 0.76rem;
    font-family: 'Courier New', Consolas, monospace;
    color: var(--color_text_dim);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
#catlas_search_status {
    padding: 6px 10px;
    font-size: 0.78rem;
    color: var(--color_text_dim);
}
#catlas_main {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 14px 18px;
    box-sizing: border-box;
}
#catlas_file_toolbar {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
    margin-bottom: 8px;
}
#catlas_file_path {
    font-size: 0.78rem;
    color: var(--color_text_dim);
    font-family: 'Courier New', Consolas, monospace;
    flex: 1;
    min-width: 0;
    white-space: nowrap;
    overflow-x: auto;
}
#catlas_file_actions {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}
#catlas_file_actions .lb-btn {
    min-height: 28px !important;
    padding: 0 10px !important;
    font-size: 0.76rem !important;
    margin: 0 !important;
}
#catlas_draft_banner, #catlas_lint_banner {
    flex-shrink: 0;
    padding: 6px 12px;
    margin-bottom: 8px;
    border-radius: var(--theme-radius-xs);
    font-size: 0.78rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}
#catlas_draft_banner {
    border: 1px solid color-mix(in srgb, var(--info) 40%, transparent);
    background: color-mix(in srgb, var(--info) 12%, transparent);
    color: var(--info);
}
#catlas_lint_banner {
    border: 1px solid color-mix(in srgb, var(--error) 40%, transparent);
    background: color-mix(in srgb, var(--error) 12%, transparent);
    color: var(--error);
    font-family: 'Courier New', Consolas, monospace;
    white-space: pre-wrap;
}
#catlas_lint_banner.lb-catlas-lint-ok {
    border-color: color-mix(in srgb, var(--color_primary) 40%, transparent);
    background: color-mix(in srgb, var(--color_primary) 12%, transparent);
    color: var(--color_primary);
    font-family: inherit;
    white-space: normal;
}
#catlas_code_pane {
    flex: 1;
    min-height: 0;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}
#catlas_code_pane .lb-code-view {
    flex: 1;
    min-height: 0;
}
#catlas_code_pane .lb-empty {
    margin: auto;
}
#catlas_edit_textarea.lb-input {
    flex: 1;
    min-height: 0;
    width: 100%;
    resize: none !important;
    font-family: 'Courier New', Consolas, monospace !important;
    font-size: 0.82rem !important;
    line-height: 1.55 !important;
    tab-size: 4;
    white-space: pre !important;
    background: color-mix(in srgb, var(--color_border) 20%, var(--bg_base)) !important;
    border: 1px solid var(--color_border) !important;
}

/* ── Bookmarks panel + bookmarked line markers ───────────────────── */
#catlas_bookmarks {
    flex-shrink: 0;
    max-height: 30%;
    overflow-y: auto;
}
#catlas_bookmarks .lb-detail-summary {
    padding: 6px 10px !important;
    font-size: 0.76rem !important;
}
#catlas_bookmarks .lb-detail-body {
    padding: 4px 0 !important;
    max-height: 200px;
    overflow-y: auto;
}
.lb-bookmark-item {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 3px 6px 3px 18px;
    border-radius: var(--theme-radius-xs);
}
.lb-bookmark-item:hover {
    background: color-mix(in srgb, var(--color_primary) 8%, transparent);
}
.lb-bookmark-item-label {
    flex: 1;
    min-width: 0;
    font-size: 0.78rem;
    color: var(--color_text_dim);
    cursor: pointer;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.lb-bookmark-item:hover .lb-bookmark-item-label {
    color: var(--color_text_normal);
}
.lb-bookmark-item-remove {
    flex-shrink: 0;
    background: none !important;
    border: none !important;
    color: var(--color_text_dim) !important;
    cursor: pointer;
    font-size: 0.85rem !important;
    line-height: 1 !important;
    padding: 2px 4px !important;
    min-height: 0 !important;
}
.lb-bookmark-item-remove:hover {
    color: var(--error) !important;
}
.lb-code-lineno[data-bookmarked="1"] {
    color: var(--color_primary) !important;
    opacity: 1 !important;
    font-weight: 700 !important;
}
.lb-code-lineno {
    cursor: pointer !important;
}
@media (max-width: 900px) {
    #catlas_wrap { flex-direction: column; }
    #catlas_tree_pane {
        width: 100%;
        max-height: 240px;
        border-right: none !important;
        border-bottom: 1px solid var(--color_border) !important;
    }
}

#db_wrap {
    display: flex;
    flex-direction: row;
    height: 100%;
    box-sizing: border-box;
}

#db_sidebar {
    width: 200px;
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    background: transparent !important;
    padding-bottom: 14px;
}

#db_table_select {
    margin: 0 14px 8px !important;
    width: calc(100% - 28px) !important;
    height: 38px !important;
    min-height: 0 !important;
    font-size: 0.85rem !important;
    border-radius: var(--theme-radius-xs) !important;
    padding: 0 12px !important;
}

#db_refresh_tables_btn, #db_toggle_sql_btn {
    margin: 0 14px 8px !important;
    width: calc(100% - 28px) !important;
    height: 38px !important;
    min-height: 0 !important;
    font-size: 0.77rem !important;
    border-radius: var(--theme-radius-xs) !important;
}

#db_main {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 14px 18px;
    box-sizing: border-box;
}

#db_browser_view {
    display: flex;
    flex-direction: column;
    height: 100%;
}

#db_browser_toolbar {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-shrink: 0;
    margin-bottom: 10px;
}

#db_browser_toolbar button {
    height: 38px !important;
    min-height: 0 !important;
    font-size: 0.85rem !important;
}

#db_row_count { font-size: 0.85rem; opacity: 0.6; }
#db_pager { display: flex; align-items: center; gap: 8px; margin-left: auto; }
#db_page_label { font-size: 0.85rem; opacity: 0.7; }

#db_table_grid_wrap {
    flex: 1;
    overflow: auto;
}

#db_table_grid, #db_sql_result_table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.85rem;
    font-family: 'PxPlus VGA SquarePx', 'Courier New', monospace !important;
    text-align: left;
}

#db_table_grid th, #db_table_grid td,
#db_sql_result_table th, #db_sql_result_table td {
    padding: 6px 10px;
    white-space: nowrap;
}

#db_table_grid td, #db_sql_result_table td {
    font-size: 1rem;
}

#db_table_grid th, #db_sql_result_table th {
    background: transparent !important;
    position: sticky;
    top: 0;
}

#db_table_grid td[contenteditable="true"] {
    cursor: text;
}
#db_table_grid td[contenteditable="true"]:focus {
    background: transparent !important;
}

#db_table_grid button {
    height: 28px !important;
    min-height: 0 !important;
    font-size: 0.69rem !important;
    padding: 0 8px !important;
    margin: 0 2px !important;
    border-radius: var(--theme-radius-xs) !important;
}

#db_sql_view {
    display: flex;
    flex-direction: column;
    height: 100%;
    gap: 8px;
}

#db_sql_chrome {
    display: flex;
    align-items: center;
    gap: 8px;
    height: 32px;
    flex-shrink: 0;
    padding: 0 14px;
    margin: -14px -18px 0;
    background: transparent !important;
}

#db_sql_chrome_title {
    flex: 1;
    text-align: center;
    font-size: 0.85rem;
    font-family: 'PxPlus VGA SquarePx', 'Courier New', monospace !important;
    letter-spacing: 0.02em;
    opacity: 0.55;
}

#db_sql_warning {
    font-size: 0.85rem;
    color: var(--color_secondary);
    margin: 0;
    flex-shrink: 0;
}

#db_sql_input {
    flex-shrink: 0;
    height: 100px !important;
    font-family: 'PxPlus VGA SquarePx', 'Courier New', monospace !important;
    font-size: 1rem !important;
    text-align: left !important;
}

#db_sql_run_btn {
    flex-shrink: 0;
    align-self: flex-start;
    height: 32px !important;
    min-height: 0 !important;
}

#db_sql_output {
    flex: 1;
    overflow: auto;
    background: transparent !important;
    padding: 10px;
}

/* Terminal-chrome traffic-light dots (decorative, ahead of #db_sql_chrome_title). */
.cli-dot {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    flex-shrink: 0;
}
.cli-dot-red    { background: var(--color_secondary); }
.cli-dot-yellow { background: var(--color_amber); }
.cli-dot-green  { background: var(--color_primary); }

/* Raw SQL console result lines. */
.cli-line {
    font-family: 'PxPlus VGA SquarePx', 'Courier New', monospace !important;
    font-size: 0.85rem;
    padding: 4px 0;
}
.cli-line-error   { color: var(--color_secondary); }
.cli-line-info    { color: var(--color_text_dim); }
.cli-line-success { color: var(--color_primary); }

/* Keep xterm measurement font matching the JS fontFamily config.
 * line-height: normal prevents an ancestor's line-height from cascading
 * into xterm's measurement spans and underreporting charHeight, which
 * would cause the canvas to clip the bottom of glyphs — shared by every
 * xterm.js consumer on the site (currently BBS). */
.xterm, .xterm * {
    font-family: Terminus, "Courier New", monospace !important;
    line-height: normal !important;
    padding: 0 !important;
}
.xterm { padding: 0 !important; text-align: left !important; }
.xterm-screen { text-align: left !important; }
.xterm-viewport { border-radius: var(--theme-radius-xs); background-color: transparent !important; }
.xterm-dim span { opacity: 1 !important; color: #ffffff !important; }
.xterm-dim      { opacity: 1 !important; }

/* ══════════════════════════════════════════════════
   EDITOR TAB  (wall editor — #form_editor etc.)
   ══════════════════════════════════════════════════ */

/* Upload progress overlay — inline styles handle position/z-index; class only needed for padding exclusion */
.wall-upload-progress-overlay { }

#admin_tab_editor {
    position: absolute !important;
    top: 50px !important;
    right: 0 !important;
    bottom: 0 !important;
    left: 0 !important;
    flex-direction: column !important;
    overflow: hidden !important;
}

#admin_tab_editor.active {
    display: flex !important;
}

/* ── Standalone editor page (/editor/) ───────────────────────── */
html.editor-page body {
    height: 100dvh !important;
    overflow: hidden !important;
    display: flex !important;
    flex-direction: column !important;
}

html.editor-page #editor_page_wrap {
    position: relative !important;
    flex: 1 !important;
    min-height: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
}

/* ── Editor image rotation toolbar ──────────────────────────── */
#editor_img_toolbar {
    position: fixed;
    display: flex;
    gap: 2px;
    padding: 3px;
    background: var(--bg_raised);
    border: 1px solid var(--border);
    z-index: 99999;
    pointer-events: auto;

    & button {
        min-width: 30px;
        min-height: 30px;
        padding: 0 6px;
        font-size: 16px;
        line-height: 1;
        background: var(--bg_base);
        color: var(--text_normal);
        border: 1px solid var(--border);
        cursor: pointer;
    }

    & button:hover {
        background: var(--bg_hover, var(--bg_raised));
        color: var(--accent);
    }
}

#div_color_pallet_el {
    position: fixed;
    inset: 0;
    visibility: hidden;
    z-index: 9000;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.88) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border-radius: var(--theme-radius-xs) !important;
    padding: 0 !important;
    margin: 0 !important;
    box-shadow: none !important;
    animation: none !important;

    /* Inner glass dialog */
    & > #div_color_pallet_dialog {
        position: relative;
        display: flex;
        flex-direction: column;
        align-items: center;
        gap: 12px;
        text-align: center;
        padding: 28px 24px;
        background: color-mix(in srgb, var(--bg_base) 16%, transparent);
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
        box-shadow:
            none;
        border: 1px solid rgba(255,255,255,0.10);
        border-radius: var(--theme-radius);
        overflow: hidden;
        animation: raise_up_glass 0.38s cubic-bezier(0.22, 1, 0.36, 1) both;

        &::before {
            content: '';
            display: block;
            position: absolute;
            inset: 0;
            border-radius: inherit;
            background: transparent;
            pointer-events: none;
            z-index: 0;
        }
    }

    /* All direct children of the inner dialog sit above the sheen */
    & > #div_color_pallet_dialog > * {
        position: relative;
        z-index: 1;
    }

    & h1 {
        margin: 0;
        font-size: 0.85rem !important;
        letter-spacing: 0.18em;
        text-transform: uppercase;
        opacity: 0.5;
    }

    & #canvas_color_pallet_el {
        border-radius: var(--theme-radius-xs);
        cursor: crosshair;
        display: block;
        border: 1px solid var(--border);
    }

    /* Hue rainbow slider */
    & #range_hue_el {
        width: 260px;
        height: 14px;
        -webkit-appearance: none;
        appearance: none;
        background: hsl(360,100%,50%);
        border: 1px solid var(--border);
        outline: none;
        padding: 0;
        border-radius: var(--theme-radius-xs);
        cursor: pointer;

        &::-webkit-slider-thumb {
            -webkit-appearance: none;
            appearance: none;
            width: 16px;
            height: 16px;
            border-radius: var(--theme-radius-xs);
            border: 2px solid #fff;
            background: transparent;
            cursor: pointer;
            box-shadow: none;
        }

        &::-moz-range-thumb {
            width: 16px;
            height: 16px;
            border-radius: var(--theme-radius-xs);
            border: 2px solid #fff;
            background: transparent;
            cursor: pointer;
            box-shadow: none;
            border-style: solid;
        }
    }

    /* Preview row: swatch + hex input */
    & #div_color_preview_row {
        display: flex;
        align-items: center;
        gap: 10px;
        width: 260px;
    }

    & #span_color_swatch_el {
        display: inline-block;
        width: 36px;
        height: 36px;
        flex-shrink: 0;
        border: 1px solid var(--border);
        background: #fff;
    }

    & #input_hex_el {
        flex: 1;
        height: 36px;
        min-height: 36px !important;
        padding: 0 8px;
        font-family: 'PxPlus VGA SquarePx', 'Courier New', monospace;
        font-size: 0.85rem;
        letter-spacing: 0.1em;
        text-transform: uppercase;
        box-sizing: border-box;
        border-radius: var(--theme-radius-xs);
    }

    & #button_apply_el {
        min-width: 80px;
        height: 36px;
        padding: 0 20px;
        border-radius: var(--theme-radius-xs);
        background: var(--accent) !important;
        color: var(--bg_base);
        font-size: 0.8rem;
        letter-spacing: 0.12em;
        font-weight: bold;
        cursor: pointer;
        border: 1px solid var(--accent);
        transition: opacity 0.2s;

        &:hover { opacity: 0.85; }
        &:active { transform: none; }
    }

    & #button_cancel_el {
        position: absolute;
        right: max(16px, env(safe-area-inset-right, 0px));
        bottom: max(16px, env(safe-area-inset-bottom, 0px));
        padding: 0 18px;
        height: 38px;
        border-radius: var(--theme-radius-xs);
        background: transparent !important;
        color: var(--color_text_stressed);
        font-size: 0.77rem;
        letter-spacing: 0.1em;
        cursor: pointer;
        transition: border-color 0.3s ease-in-out, background 0.3s ease-in-out;

        &:hover { background: transparent !important; }
        &:active { transform: none; }
    }
}

/* Generic visually-hidden-but-screen-reader-visible utility. */
.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

#form_editor {
    position: relative;
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 0;
    box-sizing: border-box;
    border: none !important;
    border-radius: var(--theme-radius-xs) !important;
    box-shadow: none !important;
    margin-bottom: 0 !important;
    animation: none !important;

    & select { appearance: none; }
}

#form_editor::before { display: none !important; }

#form_editor > div[id=div_command_pallet] {
    display: flex;
    flex-direction: row;
    align-items: center;
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
    background: color-mix(in srgb, var(--bg_dark) 60%, transparent);
    border-bottom: 1px solid var(--border);
    padding: 0 4px;
    gap: 0;
    flex-shrink: 0;
    min-height: 34px;
    box-sizing: border-box;
    z-index: 1;
    order: 5;

    & .cmd_section_label {
        position: absolute;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip: rect(0, 0, 0, 0);
        white-space: nowrap;
        pointer-events: none;
    }

    & div[class~=toolbar_cmd_group] {
        display: flex;
        flex-direction: row;
        flex-wrap: nowrap;
        gap: 1px;
        flex-shrink: 0;
        margin: 0;
    }

    & button[class~=toolbar_cmd_btn], & [data-role~="toolbar_cmd_btn"] {
        display: inline-flex !important;
        align-items: center !important;
        justify-content: center !important;
        width: 30px !important;
        min-width: 30px !important;
        height: 30px !important;
        min-height: 0 !important;
        padding: 0 !important;
        margin: 0 !important;
        font-size: 0.88rem !important;
        border-radius: var(--theme-radius-xs) !important;
        background: transparent !important;
        color: var(--text) !important;
        flex-shrink: 0;
        cursor: pointer;

        &:hover {
            background: color-mix(in srgb, var(--accent) 12%, transparent) !important;
            color: var(--accent) !important;
        }

        &.is-active {
            background: color-mix(in srgb, var(--accent) 18%, transparent) !important;
            color: var(--accent) !important;
        }
    }

    & div[id=editor_legacy_insert_group],
    & div[id=custom_media_selector_container],
    & div[id=cmd_actions_group],
    & input[id=input_file_image],
    & select[id=select_entries] {
        display: none !important;
    }
}

#form_editor > input[id=input_title] {
    order: 1;
    width: auto !important;
    height: 52px;
    min-height: 52px;
    padding: 0 16px;
    margin: 10px 12px 2px;
    font-size: 1.4rem;
    font-weight: bold;
    background: transparent !important;
    border: none !important;
    box-sizing: border-box;
    flex-shrink: 0;

    &::placeholder { opacity: 0.35; }
}

#form_editor > input[id=input_tags] {
    display: none !important;
}

/* #select_entries is a direct child of #form_editor (sibling of
   #editor_content_wrap), not a descendant of #div_command_pallet — the
   hide rule scoped inside that block's nested selector never matched it,
   so it rendered as a plain visible native <select>. */
#form_editor > select[id=select_entries] {
    display: none !important;
}

/* pin + status now live inside #editor_meta_bar */
#editor_meta_bar #div_pin_wrap {
    display: flex;
    align-items: center;
    font-size: 0.78rem;
    color: var(--text_dim);
    user-select: none;
    flex-shrink: 0;

    label { display: flex; align-items: center; gap: 5px; cursor: pointer; }
    input[type=checkbox] { width: 13px; height: 13px; accent-color: var(--accent); cursor: pointer; }
}

#editor_meta_bar #div_status_wrap {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 1;
    font-size: 0.78rem;

    select {
        font-size: 0.78rem;
        padding: 2px 6px;
        background: transparent !important;
        color: var(--text);
        border-radius: var(--theme-radius-xs);
        border-color: var(--border);
        cursor: pointer;
    }

    input[type=datetime-local] {
        font-size: 0.78rem;
        padding: 2px 6px;
        background: transparent !important;
        color: var(--text);
        border-radius: var(--theme-radius-xs);
        border-color: var(--border);
    }
}

/* #div_content is now inside #editor_content_wrap */
#editor_content_wrap #div_content {
    display: block;
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    background: transparent !important;
    border-radius: var(--theme-radius-xs) !important;
    border: 1px solid var(--border) !important;
    position: relative;
    padding: 0;
    box-sizing: border-box;
    transition: border-color 0.3s ease-in-out;

    &:focus-within { outline: none !important; border-color: var(--color_primary) !important; }
}

#button_save {
    background: transparent !important;

    &:hover { background: transparent !important; }
}

#button_delete {
    background: transparent !important;

    &:hover {
        background: transparent !important;
    }
}

#custom_media_selector_container { position: relative; display: none !important; }

/* ── Media picker modal ──────────────────────────────────────── */

#media-picker-modal {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 8000;
    background: rgba(0, 0, 0, 0.88);
    align-items: center;
    justify-content: center;
    padding: 20px;
    box-sizing: border-box;
}

#media-picker-modal.is-open { display: flex; }

#media-picker-dialog {
    position: relative;
    width: 100%;
    max-width: 860px;
    max-height: 80vh;
    display: flex;
    flex-direction: column;
    background: color-mix(in srgb, var(--bg_base) 16%, transparent);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow:
        none;
    border: 1px solid rgba(255,255,255,0.10);
    border-radius: var(--theme-radius);
    overflow: hidden;
    animation: raise_up_glass 0.38s cubic-bezier(0.22, 1, 0.36, 1) both;
}

#media-picker-dialog::before {
    content: '';
    display: block;
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background: transparent;
    pointer-events: none;
    z-index: 0;
}

#media-picker-header {
    display: flex;
    align-items: center;
    padding: 12px 16px;
    border-bottom: 1px solid rgba(255,255,255,0.08);
    flex-shrink: 0;
    gap: 12px;
    position: relative;
    z-index: 1;
}

#media-picker-title {
    flex: 1;
    font-size: 0.8rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color_text_stressed);
    margin: 0;
}

#media-picker-close {
    width: 30px !important;
    height: 30px !important;
    min-height: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    font-size: 1rem !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex-shrink: 0;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    border: 1px solid var(--color_border) !important;
    cursor: pointer;

    &:hover {
        background: var(--color_bg_hover) !important;
        transform: none !important;
        box-shadow: none !important;
    }
}

#media-picker-filters {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    border-bottom: 1px solid rgba(255,255,255,0.08);
    flex-shrink: 0;
    flex-wrap: wrap;
    position: relative;
    z-index: 1;
}

#media-picker-search {
    flex: 1;
    min-width: 120px;
    height: 32px !important;
    padding: 0 10px !important;
    font-size: 0.8rem !important;
    background: var(--bg_base) !important;
    border: 1px solid var(--color_border) !important;
    border-radius: var(--theme-radius-xs) !important;
    color: var(--color_text_normal) !important;
    margin: 0 !important;
}

.media-picker-tab {
    height: 30px !important;
    min-height: 0 !important;
    padding: 0 12px !important;
    margin: 0 !important;
    font-size: 0.72rem !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    border: 1px solid var(--color_border) !important;
    cursor: pointer;

    &:hover {
        border-color: var(--color_primary) !important;
        color: var(--color_primary) !important;
        transform: none !important;
        box-shadow: none !important;
    }

    &.active {
        background: var(--color_primary) !important;
        border-color: var(--color_primary) !important;
        color: var(--bg_base) !important;
    }
}

#media-picker-grid-wrap {
    flex: 1;
    overflow-y: auto;
    padding: 12px;
    scrollbar-width: thin;
    scrollbar-color: var(--color_border) transparent;
    position: relative;
    z-index: 1;
}

#media-picker-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
    gap: 8px;
}

.media-picker-item {
    cursor: pointer;
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    overflow: hidden;
    background: var(--bg_base);
    transition: border-color 0.15s ease, transform 0.15s ease;
    display: flex;
    flex-direction: column;

    &:hover {
        border-color: var(--color_primary);
        transform: translateY(-2px);
    }
}

.media-picker-item-thumb {
    width: 100%;
    aspect-ratio: 1;
    object-fit: cover;
    display: block;
    background: #000;
    flex-shrink: 0;
}

.media-picker-item-placeholder {
    width: 100%;
    aspect-ratio: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    background: color-mix(in srgb, var(--bg_raised) 80%, transparent);
    flex-shrink: 0;

    &::after {
        content: '\25B6'; /* ▶ */
        font-size: 1.8rem;
        opacity: 0.22;
        pointer-events: none;
        line-height: 1;
    }
}

.media-picker-item-badge {
    position: absolute;
    top: 4px;
    right: 4px;
    font-size: 0.6rem;
    letter-spacing: 0.04em;
    padding: 1px 5px;
    background: rgba(0,0,0,0.62);
    /* !important needed: the sitewide `* { color: ... !important }` reset
       otherwise wins and swaps this to the day/night text colour, which
       goes dark-on-dark against this permanently-black badge in day mode. */
    color: rgba(255,255,255,0.88) !important;
    border-radius: var(--theme-radius-xs);
    pointer-events: none;
    text-transform: uppercase;
}

.media-picker-item-inner {
    position: relative;
    flex: 1;
    display: flex;
    flex-direction: column;
}

.media-picker-item-name {
    padding: 4px 6px 3px;
    font-size: 0.65rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: var(--color_text_dim);
    flex-shrink: 0;
}

.media-picker-item-sizes {
    display: flex;
    flex-wrap: wrap;
    gap: 3px;
    padding: 0 6px 6px;
    flex-shrink: 0;
}

.media-picker-item-size-badge {
    font-size: 0.55rem;
    letter-spacing: 0.05em;
    padding: 1px 5px;
    border-radius: var(--theme-radius-xs);
    text-transform: uppercase;
    background: color-mix(in srgb, var(--accent) 12%, transparent);
    color: var(--color_text_dim);
    border: 1px solid color-mix(in srgb, var(--accent) 25%, transparent);
}

.media-picker-empty,
#media-picker-loading {
    grid-column: 1 / -1;
    text-align: center;
    padding: 40px 20px;
    color: var(--color_text_dim);
    font-size: 0.82rem;
    letter-spacing: 0.04em;
}

@media (max-width: 480px) {
    #media-picker-modal { padding: 0; }
    #media-picker-dialog {
        max-width: 100%;
        max-height: 100dvh;
        border-radius: var(--theme-radius-xs);
        border: none;
    }
    #media-picker-grid {
        grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
    }
}

#form_editor input,
#form_editor button,
#form_editor select,
#div_color_pallet_el #button_cancel_el { touch-action: manipulation; }

/* ── Editor meta bar ───────────────────────────────────────────────────── */
#editor_meta_bar {
    order: 2;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 3px 12px;
    flex-shrink: 0;
    box-sizing: border-box;
    min-height: 26px;
    opacity: 0.85;
}

/* ── Tag chips row ─────────────────────────────────────────────────────── */
#editor_tags_row {
    order: 3;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 4px;
    padding: 4px 12px 6px;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
    min-height: 26px;
    flex-shrink: 0;
    box-sizing: border-box;
}

#editor_tag_chips {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    align-items: center;
}

.editor-tag-chip {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    height: 20px;
    padding: 0 7px 0 9px;
    font-size: 0.70rem;
    letter-spacing: 0.06em;
    color: var(--accent);
    background: color-mix(in srgb, var(--accent) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
    border-radius: var(--theme-radius-xs);
    white-space: nowrap;
    cursor: default;

    & .editor-tag-chip-rm {
        font-size: 0.62rem;
        opacity: 0.55;
        cursor: pointer;
        line-height: 1;

        &:hover { opacity: 1; }
    }
}

#editor_tag_new_input {
    flex: 1;
    min-width: 80px !important;
    max-width: 200px !important;
    height: 20px !important;
    min-height: 0 !important;
    padding: 0 8px !important;
    font-size: 0.73rem !important;
    background: transparent !important;
    border-color: transparent !important;
    border-radius: var(--theme-radius-xs) !important;
    color: var(--text) !important;
    outline: none !important;

    &:focus {
        border-color: color-mix(in srgb, var(--accent) 35%, transparent) !important;
        background: color-mix(in srgb, var(--accent) 5%, transparent) !important;
    }

    &::placeholder { opacity: 0.3; }
}

/* ── Write/Preview tabs row ────────────────────────────────────────────── */
#editor_tabs_row {
    order: 4;
    display: flex;
    align-items: center;
    padding: 0 8px;
    background: color-mix(in srgb, var(--bg_dark) 60%, transparent);
    flex-shrink: 0;
    min-height: 34px;
    box-sizing: border-box;
}

.editor-view-tab, [data-role~="editor-view-tab"] {
    height: 30px !important;
    min-height: 0 !important;
    padding: 0 12px !important;
    font-size: 0.70rem !important;
    letter-spacing: 0.12em !important;
    background: transparent !important;
    color: var(--text_dim) !important;
    border: none !important;
    border-bottom: 2px solid transparent !important;
    border-radius: var(--theme-radius-xs) !important;
    cursor: pointer;
    text-transform: uppercase;
    transition: color 0.15s, border-color 0.15s;

    &.is-active {
        color: var(--accent) !important;
        border-bottom-color: var(--accent) !important;
    }

    &:hover:not(.is-active) {
        color: var(--text) !important;
        background: transparent !important;
    }
}

#editor_wc_mirror {
    margin-left: auto;
    font-size: 0.68rem;
    letter-spacing: 0.06em;
    color: var(--text_dim);
    opacity: 0.5;
    white-space: nowrap;
}

/* ── Toolbar separator ─────────────────────────────────────────────────── */
.toolbar-sep {
    display: inline-block;
    width: 1px;
    height: 16px;
    background: color-mix(in srgb, var(--border) 80%, transparent);
    flex-shrink: 0;
    margin: 0 3px;
    align-self: center;
}

/* ── + Media toolbar button ────────────────────────────────────────────── */
#editor_insert_media_open {
    height: 24px !important;
    min-height: 0 !important;
    padding: 0 9px !important;
    font-size: 0.70rem !important;
    letter-spacing: 0.08em !important;
    background: color-mix(in srgb, var(--accent) 10%, transparent) !important;
    color: var(--accent) !important;
    border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent) !important;
    border-radius: var(--theme-radius-xs) !important;
    cursor: pointer;
    white-space: nowrap;
    flex-shrink: 0;
    margin-left: 2px;

    &:hover {
        background: color-mix(in srgb, var(--accent) 18%, transparent) !important;
    }
}

/* ── ⊞ Widget toolbar button ────────────────────────────────────────────── */
#editor_insert_component_open {
    height: 24px !important;
    min-height: 0 !important;
    padding: 0 9px !important;
    font-size: 0.70rem !important;
    letter-spacing: 0.08em !important;
    background: color-mix(in srgb, var(--accent) 10%, transparent) !important;
    color: var(--accent) !important;
    border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent) !important;
    border-radius: var(--theme-radius-xs) !important;
    cursor: pointer;
    white-space: nowrap;
    flex-shrink: 0;
    margin-left: 2px;

    &:hover {
        background: color-mix(in srgb, var(--accent) 18%, transparent) !important;
    }
}

/* ── Content + preview wrap ────────────────────────────────────────────── */
#editor_content_wrap {
    order: 6;
    flex: 1;
    min-height: 0;
    display: flex;
    overflow: hidden;
    margin: 10px 12px;
    box-sizing: border-box;
}

#editor_preview_pane {
    display: none;
    flex: 1;
    overflow-y: auto;
    padding: 14px;
    /* 1rem already tracks html's fluid clamp() root font-size (~line 358);
       no separate custom property/media query needed. */
    font-size: 1rem;
    line-height: 1.6;
    color: var(--text);
    background: transparent;
    border: 1px solid var(--border);
    box-sizing: border-box;
    word-wrap: break-word;

    &.is-active { display: block; }
}

/* ── Posts panel ───────────────────────────────────────────────────────── */
/* 2026-08-24: now lives inside a hoisted-titlebar popover (see editor-
   late-bind.js) instead of being its own floating panel — .lb-popover
   supplies the position/background/border/shadow/z-index now, this is
   just its inner content layout. */
#editor_posts_panel {
    display: flex;
    flex-direction: column;
    width: clamp(220px, 90vw, 260px);
    max-height: 400px;
    overflow: hidden;
}

#editor_posts_panel_hdr {
    font-size: 0.68rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    padding: 9px 12px 6px;
    color: var(--text_dim);
    flex-shrink: 0;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
}

#editor_posts_search_wrap {
    padding: 5px 8px;
    flex-shrink: 0;
}

#editor_posts_search {
    width: 100% !important;
    height: 26px !important;
    min-height: 0 !important;
    padding: 0 8px !important;
    font-size: 0.76rem !important;
    background: color-mix(in srgb, var(--bg_dark) 50%, transparent) !important;
    border-color: var(--border) !important;
    border-radius: var(--theme-radius-xs) !important;
    box-sizing: border-box !important;
    color: var(--text) !important;
}

#editor_posts_list {
    flex: 1;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
}

.editor-posts-item {
    display: block !important;
    width: 100% !important;
    text-align: left !important;
    padding: 6px 12px !important;
    font-size: 0.76rem !important;
    font-weight: normal !important;
    background: transparent !important;
    color: var(--text) !important;
    border: none !important;
    border-radius: var(--theme-radius-xs) !important;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    cursor: pointer;
    min-height: 0 !important;

    &:hover {
        background: color-mix(in srgb, var(--accent) 10%, transparent) !important;
        color: var(--accent) !important;
    }

    &.is-active {
        background: color-mix(in srgb, var(--accent) 13%, transparent) !important;
        color: var(--accent) !important;
    }
}

#editor_posts_panel_footer {
    flex-shrink: 0;
    padding: 5px 8px;
    border-top: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
}

#editor_posts_new_btn {
    width: 100% !important;
    height: 26px !important;
    min-height: 0 !important;
    padding: 0 10px !important;
    font-size: 0.72rem !important;
    background: transparent !important;
    color: var(--accent) !important;
    border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent) !important;
    border-radius: var(--theme-radius-xs) !important;
    cursor: pointer;
    letter-spacing: 0.08em;

    &:hover {
        background: color-mix(in srgb, var(--accent) 10%, transparent) !important;
    }
}

/* ── Overflow menu ─────────────────────────────────────────────────────── */
/* 2026-08-24: now lives inside a hoisted-titlebar popover (see editor-
   late-bind.js) instead of being its own floating panel — .lb-popover
   supplies the position/background/border/shadow/z-index now, this is
   just its inner content layout. */
#editor_overflow_menu {
    display: flex;
    flex-direction: column;
    width: 188px;
    overflow: hidden;
    padding: 4px 0 !important;

    & button {
        display: block !important;
        width: 100% !important;
        height: 32px !important;
        min-height: 0 !important;
        text-align: left !important;
        padding: 0 14px !important;
        font-size: 0.76rem !important;
        background: transparent !important;
        color: var(--text) !important;
        border: none !important;
        border-radius: var(--theme-radius-xs) !important;
        cursor: pointer;
        letter-spacing: 0.04em;

        &:hover {
            background: color-mix(in srgb, var(--accent) 10%, transparent) !important;
            color: var(--accent) !important;
        }
    }
}

.editor-om-sep {
    height: 1px;
    background: color-mix(in srgb, var(--border) 55%, transparent);
    margin: 3px 0;
}

#editor_om_delete {
    color: var(--error) !important;

    &:hover {
        background: color-mix(in srgb, var(--error) 10%, transparent) !important;
        color: var(--error) !important;
    }
}

/* ── Component block (on wall page when content contains lb-components) ── */
.lb-component-block {
    display: block;
    margin: 8px 0;
}

/* ── Component picker modal ─────────────────────────────────────────────── */
#editor_component_modal {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 9201;
    background: rgba(0, 0, 0, 0.88);
    align-items: center;
    justify-content: center;
    padding: 20px;
    box-sizing: border-box;

    &.is-open { display: flex; }
}

#editor_component_dialog {
    position: relative;
    width: 100%;
    max-width: 520px;
    max-height: 70vh;
    display: flex;
    flex-direction: column;
    background: var(--bg_raised);
    box-shadow: none;
    border: 1px solid var(--border);
    border-radius: var(--theme-radius);
    overflow: hidden;
    animation: raise_up_glass 0.28s cubic-bezier(0.22, 1, 0.36, 1) both;
}

#editor_component_header {
    display: flex;
    align-items: center;
    padding: 0 6px 0 14px;
    height: 42px;
    flex-shrink: 0;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
    background: color-mix(in srgb, var(--bg_dark) 30%, transparent);

    & > span {
        font-size: 0.70rem;
        letter-spacing: 0.14em;
        text-transform: uppercase;
        color: var(--text_dim);
        flex: 1;
    }
}

#editor_component_close {
    width: 38px !important;
    height: 38px !important;
    min-height: 0 !important;
    min-width: 38px !important;
    padding: 0 !important;
    font-size: 0.88rem !important;
    background: transparent !important;
    color: var(--text_dim) !important;
    border: none !important;
    border-radius: var(--theme-radius-xs) !important;
    cursor: pointer;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex-shrink: 0;

    &:hover {
        background: color-mix(in srgb, var(--error) 10%, transparent) !important;
        color: var(--error) !important;
    }
}

#editor_component_grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
    gap: 8px;
    padding: 14px;
    overflow-y: auto;
    flex: 1;
    min-height: 0;
}

.editor-component-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    gap: 8px;
    padding: 12px 8px 10px;
    border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
    border-radius: var(--theme-radius);
    background: color-mix(in srgb, var(--bg_raised) 60%, transparent);
    cursor: pointer;
    transition: border-color 0.14s, background 0.14s;
    min-height: 76px;

    &:hover {
        border-color: var(--accent);
        background: color-mix(in srgb, var(--accent) 8%, transparent);
    }

    & .editor-component-card-preview {
        display: flex;
        align-items: center;
        justify-content: center;
        min-height: 28px;
        pointer-events: none;
        user-select: none;
    }

    & .editor-component-card-label {
        font-size: 0.66rem;
        letter-spacing: 0.10em;
        text-transform: uppercase;
        color: var(--text_dim);
        text-align: center;
        line-height: 1.3;
    }
}

/* ── Widget config panel ────────────────────────────────────────────────── */
#editor_wc_box {
    background: var(--bg_raised) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border: 1px solid var(--border) !important;
    border-radius: var(--theme-radius) !important;
    padding: 0 !important;
    width: min(92vw, 520px) !important;
    max-height: 80vh !important;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
}

#editor_wc_box::before {
    display: none !important;
}

#editor_wc_title {
    padding: 0 18px;
    height: 44px;
    display: flex;
    align-items: center;
    font-size: 0.70rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text_dim);
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
}

#editor_wc_tabs {
    display: flex;
    flex-direction: row;
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
}

.wc-tab {
    flex: 1;
    height: 36px;
    background: none;
    border: none;
    border-bottom: 2px solid transparent;
    color: var(--text_dim);
    font-size: 0.75rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    cursor: pointer;
    transition: color 0.12s, border-color 0.12s;

    &:hover {
        color: var(--text);
    }

    &.is-active {
        color: var(--accent);
        border-bottom-color: var(--accent);
    }
}

#editor_wc_props {
    flex: 1;
    overflow-y: auto;
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    min-height: 0;
}

.wc-name-row {
    padding-bottom: 10px;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
    margin-bottom: 2px;
}

#editor_wc_events_pane {
    flex: 1;
    overflow-y: auto;
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    gap: 12px;
    min-height: 0;
}

.wc-events-hint {
    font-size: 0.74rem;
    color: var(--text_dim);
    line-height: 1.5;
    padding: 8px 10px;
    background: color-mix(in srgb, var(--accent) 6%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent) 18%, transparent);
    border-radius: var(--theme-radius);
    margin: 0;
    white-space: pre-wrap;
    font-family: monospace;
}

.wc-event-section {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.wc-event-hdr {
    font-size: 0.70rem;
    letter-spacing: 0.10em;
    text-transform: uppercase;
    color: var(--accent);
    font-family: monospace;
}

.wc-event-editor {
    font-family: monospace !important;
    font-size: 0.78rem !important;
    line-height: 1.55 !important;
    resize: vertical;
    tab-size: 2;
    white-space: pre;
    overflow-x: auto;
}

#editor_wc_events_form {
    display: flex;
    flex-direction: column;
    gap: 14px;
}

#editor_wc_form {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

#editor_wc_footer {
    display: flex;
    flex-direction: row;
    justify-content: flex-end;
    gap: 8px;
    padding: 12px 18px;
    border-top: 1px solid var(--border);
    flex-shrink: 0;
}

.wc-row {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.wc-opts-editor {
    display: flex;
    flex-direction: column;
    gap: 5px;
    margin-bottom: 5px;
}

.wc-opt-row {
    display: flex;
    flex-direction: row;
    gap: 5px;
    align-items: center;

    & > input.lb-input {
        flex: 1;
        min-width: 0;
    }

    & > button.lb-btn {
        flex-shrink: 0;
        padding: 0 8px !important;
        min-height: 0 !important;
        height: 28px !important;
    }
}

.wc-add-opt-btn {
    align-self: flex-start;
    font-size: 0.72rem !important;
    padding: 0 10px !important;
    height: 26px !important;
    min-height: 0 !important;
}

.wc-no-props {
    color: var(--text_dim);
    font-size: 0.82rem;
    font-style: italic;
}

.wc-checkbox-wrap {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 8px;

    & > span {
        font-size: 0.85rem;
        color: var(--text);
    }
}

/* ── Poll/Survey live preview root, inside .lb-component-block in the
   editor canvas (holds a real LBKit.poll()/LBKit.survey() instance) ── */
.wc-render {
    display: block;
    margin: 4px 0;
}

/* ── Survey question list editor (Configure widget → Properties) ── */
.wc-survey-editor {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-bottom: 5px;
}

.wc-survey-q-row {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 5px;
    align-items: center;
    padding: 6px;
    border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);

    & > input.lb-input {
        flex: 1;
        min-width: 90px;
    }

    & > select.lb-input {
        flex-shrink: 0;
        width: auto;
    }

    & > button.lb-btn {
        flex-shrink: 0;
        padding: 0 8px !important;
        min-height: 0 !important;
        height: 28px !important;
    }
}

.wc-survey-q-req {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
    font-size: 0.78rem;
    color: var(--text_dim);
    white-space: nowrap;
}

/* ── Unified media insert modal ────────────────────────────────────────── */
#editor_media_modal {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 9200;
    background: rgba(0, 0, 0, 0.88);
    align-items: center;
    justify-content: center;
    padding: 20px;
    box-sizing: border-box;

    &.is-open { display: flex; }
}

#editor_media_dialog {
    position: relative;
    width: 100%;
    max-width: 700px;
    max-height: 80vh;
    display: flex;
    flex-direction: column;
    background: color-mix(in srgb, var(--bg_base) 16%, transparent);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: none;
    border: 1px solid rgba(255,255,255,0.10);
    border-radius: var(--theme-radius);
    overflow: hidden;
    animation: raise_up_glass 0.28s cubic-bezier(0.22, 1, 0.36, 1) both;
}

#editor_media_tabs_row {
    display: flex;
    align-items: stretch;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
    flex-shrink: 0;
    background: color-mix(in srgb, var(--bg_dark) 30%, transparent);
    padding: 0 6px;
}

.editor-media-tab, [data-role~="editor-media-tab"] {
    height: 38px !important;
    min-height: 0 !important;
    padding: 0 12px !important;
    font-size: 0.70rem !important;
    letter-spacing: 0.12em !important;
    text-transform: uppercase;
    background: transparent !important;
    color: var(--text_dim) !important;
    border: none !important;
    border-bottom: 2px solid transparent !important;
    border-radius: var(--theme-radius-xs) !important;
    cursor: pointer;
    transition: color 0.15s, border-color 0.15s;
    white-space: nowrap;
    flex-shrink: 0;

    &.is-active {
        color: var(--accent) !important;
        border-bottom-color: var(--accent) !important;
    }

    &:hover:not(.is-active) {
        color: var(--text) !important;
        background: transparent !important;
    }
}

#editor_media_close {
    margin-left: auto;
    width: 38px !important;
    height: 38px !important;
    min-height: 0 !important;
    min-width: 38px !important;
    padding: 0 !important;
    font-size: 0.88rem !important;
    background: transparent !important;
    color: var(--text_dim) !important;
    border: none !important;
    border-radius: var(--theme-radius-xs) !important;
    cursor: pointer;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex-shrink: 0;

    &:hover {
        background: color-mix(in srgb, var(--error) 10%, transparent) !important;
        color: var(--error) !important;
    }
}

#editor_media_body {
    flex: 1;
    min-height: 0;
    overflow: hidden;
    position: relative;
}

.editor-media-pane {
    display: none;
    padding: 18px 20px;
    height: 100%;
    box-sizing: border-box;
    flex-direction: column;
    gap: 10px;
    overflow-y: auto;

    &.is-active { display: flex; }

    & p {
        font-size: 0.80rem;
        color: var(--text_dim);
        margin: 0;
        opacity: 0.75;
    }

    & label {
        font-size: 0.70rem;
        letter-spacing: 0.12em;
        text-transform: uppercase;
        color: var(--text_dim);
        opacity: 0.65;
    }

    & input[type=text] {
        width: 100% !important;
        height: 34px !important;
        min-height: 0 !important;
        padding: 0 10px !important;
        font-size: 0.83rem !important;
        background: color-mix(in srgb, var(--bg_dark) 50%, transparent) !important;
        border-color: var(--border) !important;
        border-radius: var(--theme-radius-xs) !important;
        box-sizing: border-box !important;
        color: var(--text) !important;
    }

    & > button {
        align-self: flex-start;
        height: 32px !important;
        min-height: 0 !important;
        padding: 0 14px !important;
        font-size: 0.74rem !important;
        background: var(--accent) !important;
        color: var(--text_on_ac) !important;
        border: none !important;
        border-radius: var(--theme-radius-xs) !important;
        cursor: pointer;
        letter-spacing: 0.08em;
        transition: opacity 0.15s;

        &:hover { opacity: 0.85; }
    }
}

#editor_media_lib_grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(88px, 1fr));
    gap: 7px;
    overflow-y: auto;
    padding: 2px;
    flex: 1;
}

.editor-lib-item {
    aspect-ratio: 1;
    overflow: hidden;
    cursor: pointer;
    border: 2px solid transparent;
    border-radius: var(--theme-radius-xs);
    position: relative;
    background: var(--bg_dark);
    transition: border-color 0.12s ease;

    &:hover { border-color: var(--accent); }

    & img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        display: block;
    }

    & .editor-lib-badge {
        position: absolute;
        bottom: 2px;
        left: 2px;
        font-size: 0.52rem;
        letter-spacing: 0.08em;
        background: rgba(0,0,0,0.72);
        /* !important: same day-mode-invisible-badge issue as
           .media-picker-item-badge — background is fixed dark, text must
           not lose to the sitewide theme-reactive `*` color reset. */
        color: rgba(255,255,255,0.9) !important;
        padding: 1px 4px;
        border-radius: var(--theme-radius-xs);
        pointer-events: none;
        text-transform: uppercase;
    }
}

@media (max-width: 480px) {
    #editor_media_modal { padding: 0; }
    #editor_media_dialog { max-width: 100%; max-height: 100dvh; border-radius: var(--theme-radius-xs); border: none; }
    #editor_media_lib_grid { grid-template-columns: repeat(auto-fill, minmax(72px, 1fr)); }
}

@media (max-width: 767px) {
    #form_editor { overflow-y: auto; border-radius: var(--theme-radius-xs) !important; }
    #form_editor > input[id=input_title] { margin: max(6px, env(safe-area-inset-top, 6px)) 10px 0; }
    #form_editor > div[id=div_command_pallet] {
        padding-bottom: max(0px, env(safe-area-inset-bottom, 0px));
    }
}

@media (pointer: coarse) {
    #form_editor > input[id=input_title] { height: 46px; font-size: 1.23rem !important; }
}

/* ── Traditional overrides: Media Library, Database, Services ─── */
@media (max-width: 767px) {

    /* Media library: shrink folder tree so content pane gets usable width */
    #media_tree { flex: 0 0 180px; }
    #media_filter { width: 100px !important; flex-shrink: 1 !important; min-width: 0 !important; }

    /* Database: stack sidebar above main instead of fixed 200px side-by-side */
    #db_wrap { flex-direction: column; }
    #db_sidebar {
        width: 100% !important;
        height: auto !important;
        flex-direction: row !important;
        flex-wrap: wrap !important;
        align-items: center !important;
        gap: 6px !important;
        padding: 8px 14px !important;
    }
    #db_table_select {
        width: auto !important;
        flex: 1 !important;
        min-width: 120px !important;
        margin: 0 !important;
    }
    #db_refresh_tables_btn, #db_toggle_sql_btn {
        width: auto !important;
        min-width: 0 !important;
        flex: none !important;
        margin: 0 !important;
    }

    /* Services: move action buttons to their own full-width row */
    .svc-card { grid-template-rows: auto auto auto auto; }
    .svc-actions {
        grid-column: 1 / -1;
        grid-row: 4;
        justify-content: flex-start;
        padding-top: 6px;
    }
}

/* (wide layout handled by flex column — no override needed) */

/* ══════════════════════════════════════════════════
   MEDIA LIBRARY — Windows Explorer layout
   ══════════════════════════════════════════════════ */

#media_browser {
    position: absolute;
    inset: 16px 20px 20px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: transparent !important;
}

/* ── Toolbar ─────────────────────────────────────── */
#media_toolbar {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 4px 8px;
    height: 38px;
    background: transparent !important;
}

#media_address_bar {
    flex: 1;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: 5px;
    padding: 0 8px;
    background: transparent !important;
    font-size: 0.82rem;
    overflow: hidden;
    white-space: nowrap;
    align-self: center;
    line-height: normal;
}

.media-addr-root { color: var(--text_dim); flex-shrink: 0; }
.media-addr-sep  { color: var(--text_dim); opacity: 0.5; flex-shrink: 0; }
.media-addr-group { color: var(--color_text_normal); font-weight: 600; flex-shrink: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

#media_toolbar_actions {
    display: flex;
    align-items: center;
    gap: 2px;
    flex-shrink: 0;
}

.media-view-btn {
    width: 38px !important;
    padding: 0 !important;
    font-size: 1rem !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    opacity: 0.55;
}
.media-view-btn:hover, [data-role~="media-view-btn"]:hover{ opacity: 1; }
.media-view-btn.active, [data-role~="media-view-btn"].active{ opacity: 1; color: var(--color_primary) !important; border-color: color-mix(in srgb, var(--color_primary) 50%, transparent) !important; }

.media-toolbar-sep {
    width: 1px;
    height: 18px;
    background: transparent !important;
    margin: 0 4px;
    flex-shrink: 0;
}

.media-toolbar-reload {
    height: 26px !important;
    min-height: 0 !important;
    padding: 0 10px !important;
    font-size: 0.8rem !important;
}

#media_filter {
    width: 160px !important;
    flex-shrink: 0 !important;
    padding: 0 10px !important;
    height: 26px;
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
    color: var(--color_text_normal);
    font-size: 0.82rem;
}

/* ── Body ────────────────────────────────────────── */
#media_body {
    flex: 1;
    display: flex;
    overflow: hidden;
    min-height: 0;
}

/* ── Navigation pane ─────────────────────────────── */
#media_tree {
    flex: 0 0 180px;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 4px 0;
    background: transparent !important;
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
}

.media-tree-section {
    padding: 12px 10px 3px;
    font-size: 0.72rem;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--text_dim);
    user-select: none;
}

.media-tree-node {
    display: flex;
    align-items: center;
    gap: 5px;
    padding: 4px 8px 4px 14px;
    cursor: pointer;
    font-size: 0.83rem;
    color: var(--color_text_normal);
    white-space: nowrap;
    overflow: hidden;
    user-select: none;
}

.media-tree-node:hover {
    background: transparent !important;
}

.media-tree-node.active {
    background: transparent !important;
    color: var(--accent);
}

.media-tree-icon { font-size: 0.95rem; flex-shrink: 0; }
.media-tree-label { overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: 1; }
.media-tree-count { font-size: 0.74rem; opacity: 0.5; flex-shrink: 0; margin-left: auto; }

/* ── Content pane ────────────────────────────────── */
#media_pane {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    min-width: 0;
}

#media_grid {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
}

/* Icons view */
#media_grid.view-icons {
    padding: 10px;
    display: flex;
    flex-wrap: wrap;
    align-content: flex-start;
    gap: 4px;
}

/* List view */
#media_grid.view-list {
    padding: 0;
    display: flex;
    flex-direction: column;
}

/* Details view */
#media_grid.view-details {
    padding: 0;
    display: block;
}

/* ── Icon tiles ──────────────────────────────────── */
.media-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100px;
    padding: 8px 6px 6px;
    cursor: pointer;
    border-radius: var(--theme-radius-xs);
    gap: 5px;
    user-select: none;
}

.media-card:hover {
    background: transparent !important;
}

.media-card.selected {
    background: transparent !important;
}

.media-thumb {
    width: 72px;
    height: 60px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    overflow: hidden;
    font-size: 2.6rem;
    line-height: 1;
}

.media-thumb img {
    width: 72px;
    height: 60px;
    object-fit: cover;
}

.media-name {
    width: 100%;
    font-size: 0.78rem;
    text-align: center;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--color_text_normal);
    line-height: 1.3;
}
.media-icon-owner {
    width: 100%;
    font-size: 0.68rem;
    text-align: center;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--color_text_dim);
    opacity: 0.7;
    line-height: 1.2;
}

/* ── List rows ───────────────────────────────────── */
.media-list-row {
    display: flex;
    align-items: center;
    gap: 7px;
    padding: 3px 10px;
    cursor: pointer;
    font-size: 0.83rem;
    white-space: nowrap;
    overflow: hidden;
    user-select: none;
}

.media-list-row:hover { background: transparent !important; }
.media-list-row.selected { background: transparent !important; }

.media-list-icon { font-size: 1rem; flex-shrink: 0; width: 18px; text-align: center; }
.media-list-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.media-list-owner { flex-shrink: 0; font-size: 0.72rem; color: var(--color_text_dim); opacity: 0.75; max-width: 100px; overflow: hidden; text-overflow: ellipsis; }

/* ── Details table ───────────────────────────────── */
.media-details-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.82rem;
}

.media-details-table thead { position: sticky; top: 0; z-index: 1; }

.media-details-table th {
    padding: 4px 10px;
    text-align: left;
    font-weight: 600;
    font-size: 0.78rem;
    letter-spacing: 0.03em;
    background: transparent !important;
    cursor: pointer;
    white-space: nowrap;
    user-select: none;
}

.media-details-table th:hover {
    background: transparent !important;
}

.media-sort-arrow { margin-left: 4px; opacity: 0.6; font-size: 0.7rem; }

.media-details-table td {
    padding: 3px 10px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 0;
}

.media-details-table tr { cursor: pointer; }

.media-details-table tr:hover td {
    background: transparent !important;
}

.media-details-table tr.selected td {
    background: transparent !important;
}

.media-td-icon  { width: 28px !important; max-width: 28px !important; text-align: center; font-size: 1rem; }
.media-td-name  { width: 35%; }
.media-td-type  { width: 18%; }
.media-td-size  { width: 10%; text-align: right !important; }
.media-td-owner { width: 14%; }
.media-td-date  { width: 18%; }

/* ── Status bar ──────────────────────────────────── */
#media_statusbar {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 10px;
    height: 24px;
    background: transparent !important;
    font-size: 0.76rem;
    color: var(--text_dim);
}

#media_sel_info { font-size: 0.76rem; color: var(--text_dim); }

/* ── Properties dialog ───────────────────────────── */
#media_props_box { width: min(92vw, 480px); }
#media_props_form {
    display: flex;
    flex-direction: column;
    gap: 12px;
    position: relative;
    z-index: 1;
    margin-bottom: 4px;
}
.media-pf-title {
    font-size: 13px;
    font-weight: bold;
    text-transform: uppercase;
    letter-spacing: .14em;
    color: var(--color_text_stressed);
    padding-bottom: 10px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.10);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.media-pf-row {
    display: flex;
    align-items: center;
    gap: 12px;
}
.media-pf-row label {
    flex-shrink: 0;
    width: 100px;
    font-size: 11px;
    font-weight: bold;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--color_text_dim);
    text-align: right;
}
.media-pf-row .lb-dlg-inp {
    flex: 1;
    min-width: 0;
    margin: 0;
}
.media-pf-readonly {
    opacity: 0.4 !important;
    cursor: default !important;
    pointer-events: none;
}

/* ── Empty / loading states ──────────────────────── */
.media-empty {
    width: 100%;
    padding: 40px 20px;
    text-align: center;
    color: var(--text_dim);
    font-size: 0.85rem;
    margin: 0;
    opacity: 0.7;
}

/* ── Viewer overlay ──────────────────────────────── */
#media_viewer_overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.88);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 2147483646;
}

#media_viewer_box {
    position: relative;
    max-width: 90%;
    max-height: 88%;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: color-mix(in srgb, var(--bg_base) 16%, transparent) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
    border: 1px solid rgba(255,255,255,0.10) !important;
    border-radius: var(--theme-radius) !important;
    animation: raise_up_glass 0.38s cubic-bezier(0.22, 1, 0.36, 1) both;
}

#media_viewer_close {
    position: absolute;
    top: 8px;
    right: 8px;
    width: 38px !important;
    height: 38px !important;
    padding: 0 !important;
    z-index: 1;
    border-radius: var(--theme-radius-xs) !important;
}

#media_viewer_body {
    flex: 1;
    overflow: auto;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 40px 16px 8px;
    min-height: 200px;
    min-width: 300px;
}

#media_viewer_body img,
#media_viewer_body video,
#media_viewer_body audio { max-width: 100%; max-height: 70vh; }

#media_viewer_meta {
    padding: 8px 14px 12px;
    font-size: 0.77rem;
    opacity: 0.65;
    white-space: pre-wrap;
    word-break: break-all;
}

/* Sidebar launch links (Code Server, VNC) styled identically to tab buttons */
a.admin-tab-btn {
    text-decoration: none !important;
}

/* ══════════════════════════════════════════════════
   BACKUP SITE TAB  (#bk_)
   ══════════════════════════════════════════════════ */

#bk_wrap {
    padding: 24px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
    max-width: 760px;
}

.bk-desc {
    margin: 0;
    color: var(--color_text_dim);
    font-size: 0.93em;
}

.bk-desc code {
    font-family: 'PxPlus VGA SquarePx', monospace;
    color: var(--color_text_normal);
}

#bk_controls {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
}

.bk-status {
    font-size: 0.88em;
    color: var(--color_text_dim);
}

.bk-status.bk-status-running {
    color: var(--accent);
}

.bk-log-title {
    font-size: 0.78em;
    letter-spacing: 0.08em;
    color: var(--color_text_dim);
    margin-bottom: 6px;
    text-transform: uppercase;
}

.bk-log {
    margin: 0;
    padding: 12px 14px;
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
    font-family: 'PxPlus VGA SquarePx', 'Courier New', monospace;
    font-size: 0.92rem;
    line-height: 1.5;
    color: var(--color_text_normal);
    white-space: pre-wrap;
    word-break: break-all;
    max-height: 400px;
    overflow-y: auto;
}

/* ══════════════════════════════════════════════════
   LOGIN AUDIT TAB
   ══════════════════════════════════════════════════ */

#admin_audit_frame {
    width: 100% !important;
    height: 100% !important;
    display: block !important;
}


/* ══════════════════════════════════════════════════════════════════
   LOG VIEWER TABS — shared layout
   Applies to: audit, integrity, errorlog, usertrack, failsafe
   ══════════════════════════════════════════════════════════════════ */

#admin_tab_integrity,
#admin_tab_errorlog,
#admin_tab_usertrack,
#admin_tab_failsafe {
    overflow: hidden !important;
}

#audit_wrap,
#int_wrap,
#erl_wrap,
#utl_wrap,
#fsl_wrap {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
}

#audit_header,
#int_header,
#erl_header,
#utl_header,
#fsl_header {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 12px;
    flex-wrap: wrap;
    padding: 10px 18px;
    background: transparent !important;
    flex-shrink: 0;
    min-height: 0;
}

#audit_header_left,
#int_header_left,
#erl_header_left,
#utl_header_left,
#fsl_header_left {
    display: flex;
    align-items: baseline;
    gap: 12px;
    flex: 1;
    min-width: 0;
}

.int-meta-line {
    font-size: 0.77rem;
    letter-spacing: 0.08em;
    opacity: 0.45;
    white-space: nowrap;
}

.int-auto-label {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.85rem;
    opacity: 0.7;
    cursor: pointer;
    white-space: nowrap;
    user-select: none;
}

.log-filter-input {
    width: min(180px, 30vw);
    flex-shrink: 1;
}

.int-status-msg {
    padding: 8px 18px;
    font-size: 0.85rem;
    background: transparent !important;
    flex-shrink: 0;
    color: var(--color_text_normal);
}

#audit_log,
#int_log,
#erl_log,
#utl_log,
#fsl_log {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    overflow-x: hidden;
    margin: 0;
    padding: 14px 18px;
    font-family: 'PxPlus VGA SquarePx', 'Courier New', monospace;
    font-size: 0.88rem;
    line-height: 1.5;
    color: var(--color_text_normal);
    background: transparent;
    white-space: pre-wrap;
    word-break: break-all;
    scrollbar-width: thin;
    scrollbar-color: var(--color_primary) transparent;
}

/* _lbLogFmt() (index-late-bind.pjs) syntax-highlights raw log text for
 * #int_log/#erl_log/#utl_log/#fsl_log — whole-line severity class plus
 * token-level spans, previously entirely unstyled (every line rendered
 * as plain text, no color coding at all). !important on border-left-color
 * is required — the site-wide `* { border: none !important; }` reset
 * otherwise wins over this longhand regardless of specificity. */
.lg-line {
    display: block;
    padding: 1px 8px 1px 10px;
    border-left: 3px solid transparent !important;
}
.lg-line.lg-err {
    background: color-mix(in srgb, var(--color_secondary) 8%, transparent);
    border-left-color: var(--color_secondary) !important;
    color: color-mix(in srgb, var(--color_secondary) 85%, var(--color_text_normal));
}
.lg-line.lg-warn {
    background: color-mix(in srgb, var(--color_amber) 8%, transparent);
    border-left-color: var(--color_amber) !important;
}
.lg-line.lg-info  { opacity: 0.75; }
.lg-line.lg-ok    { border-left-color: var(--color_primary) !important; }
.lg-line.lg-muted { opacity: 0.4; }

.lg-empty { opacity: 0.4; font-style: italic; }
.lg-ts    { opacity: 0.5; }
.lg-lvl   { font-weight: bold; }
.lg-ip    { color: var(--color_teal); }
.lg-path  { opacity: 0.6; font-style: italic; }
.lg-key   { opacity: 0.7; font-weight: bold; }

/* ══════════════════════════════════════════════════════════════════
   SERVICES TAB  (#svc_ / .svc-)
   ══════════════════════════════════════════════════════════════════ */

#admin_tab_services {
    overflow: hidden !important;
}

#svc_wrap {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
}

#svc_grid {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

/* LXC Containers tab (2026-08-27) reuses every .svc-* class above as-is
   (same card/badge/actions look) — only the two container ids need their
   own layout rules, identical to #svc_wrap/#svc_grid. */
#lxc_wrap {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
}
#lxc_grid {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.svc-card {
    display: grid;
    grid-template-columns: 1fr auto;
    grid-template-rows: auto auto auto;
    gap: 4px 12px;
    padding: 12px 14px;
    background: transparent !important;
}

.svc-state-active  { border-left-color: var(--color_primary) !important; }
.svc-state-failed  { border-left-color: var(--color_secondary) !important; }
.svc-state-inactive { border-left-color: color-mix(in srgb, var(--color_text_normal) 25%, transparent) !important; }
.svc-state-unknown { border-left-color: var(--color_amber) !important; }

.svc-label {
    font-weight: bold;
    font-size: 0.93rem;
    color: var(--color_text_stressed);
    grid-column: 1;
    grid-row: 1;
}

.svc-badge {
    grid-column: 2;
    grid-row: 1;
    align-self: center;
    justify-self: end;
    padding: 2px 8px;
    font-size: 0.69rem;
    font-weight: bold;
    letter-spacing: 0.1em;
}

.svc-state-active  .svc-badge { background: transparent !important; color: var(--color_primary); }
.svc-state-failed  .svc-badge { background: transparent !important; color: color-mix(in srgb, var(--color_secondary) 80%, white); }
.svc-state-inactive .svc-badge { background: transparent !important; opacity: 0.6; }
.svc-state-unknown  .svc-badge { background: transparent !important; color: var(--color_amber); }

.svc-name {
    grid-column: 1;
    grid-row: 2;
    font-family: 'PxPlus VGA SquarePx', monospace;
    font-size: 0.77rem;
    opacity: 0.5;
}

.svc-meta {
    grid-column: 1;
    grid-row: 3;
    font-size: 0.77rem;
    opacity: 0.45;
}

.svc-actions {
    grid-column: 2;
    grid-row: 2 / 4;
    align-self: center;
    display: flex;
    gap: 4px;
    flex-wrap: wrap;
    justify-content: flex-end;
}

.svc-btn {
    padding: 0 14px !important;
    font-size: 0.77rem !important;
    letter-spacing: 0.04em !important;
}
.svc-btn-start  { border-color: var(--color_primary) !important; }
.svc-btn-stop   { border-color: var(--color_secondary) !important; background: transparent !important; }
.svc-btn-detail { opacity: 0.7; }
.svc-btn-detail:hover { opacity: 1; }

.svc-raw {
    margin-top: 8px !important;
    max-height: 240px;
    overflow-y: auto !important;
}

/* ══════════════════════════════════════════════════════════════════
   HEADSCALE TAB  (#hs_ / .hs-)
   ══════════════════════════════════════════════════════════════════ */

#admin_tab_headscale {
    overflow: hidden !important;
}

#hs_wrap {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
}

#hs_section_nav {
    display: flex;
    gap: 0;
    flex-shrink: 0;
    overflow-x: auto;
    background: transparent !important;
}

[data-role~="hs-nav-btn"] {
    opacity: 0.65;
}

[data-role~="hs-nav-btn"].active,
[data-role~="hs-nav-btn"]:hover{
    opacity: 1;
}

#hs_flash {
    padding: 8px 18px;
    font-size: 0.85rem;
    flex-shrink: 0;
}

.hs-flash { }
.hs-flash-ok  { background: transparent !important; border-bottom: 1px solid color-mix(in srgb, var(--color_primary) 30%, transparent); color: var(--color_primary); }
.hs-flash-err { background: transparent !important; border-bottom: 1px solid color-mix(in srgb, var(--color_secondary) 30%, transparent); color: color-mix(in srgb, var(--color_secondary) 80%, white); }

.hs-section {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.hs-section-header {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    flex-shrink: 0;
}

.hs-count {
    font-size: 0.85rem;
    opacity: 0.5;
}

.hs-table-wrap {
    overflow-x: auto;
}

.hs-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.88rem;
}

.hs-table th,
.hs-table td {
    padding: 7px 10px;
    text-align: left;
    white-space: nowrap;
}

.hs-table th {
    background: transparent !important;
    font-weight: bold;
    font-size: 0.77rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    position: sticky;
    top: 0;
}

.hs-loading {
    text-align: center;
    opacity: 0.4;
    padding: 24px;
    font-size: 0.88rem;
}

.hs-actions {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}

.hs-badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: var(--theme-radius-xs);
    font-size: 0.69rem;
    font-weight: bold;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}
.hs-online  { color: var(--color_primary); background: color-mix(in srgb, var(--color_primary) 12%, transparent); }
.hs-offline { color: var(--color_text_dim); background: color-mix(in srgb, var(--color_text_normal) 10%, transparent); }

.hs-expired-row {
    opacity: 0.5;
}

.hs-inline-form {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin: 10px 0;
}

.hs-key-display {
    margin: 10px 0;
    padding: 10px 12px;
    background: color-mix(in srgb, var(--color_primary) 8%, transparent) !important;
    border: 1px solid color-mix(in srgb, var(--color_primary) 30%, transparent) !important;
    border-radius: var(--theme-radius-xs);
    font-family: 'Courier New', Consolas, monospace;
    font-size: 0.85rem;
    word-break: break-all;
}

/* Two conventions coexist for these buttons — server-rendered ones use
   class="lb-btn" data-role="hs-btn hs-btn-primary", JS-generated table-row
   actions use a literal class="hs-btn hs-btn-sm hs-btn-warn" — so each
   variant selector below covers both. */
.hs-btn-sm {
    padding: 0 14px !important;
    font-size: 0.77rem !important;
    letter-spacing: 0.04em !important;
}

.hs-btn-primary, [data-role~="hs-btn-primary"] {
    border-color: var(--color_primary) !important;
    color: var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 12%, transparent) !important;
}

.hs-btn-success, [data-role~="hs-btn-success"] {
    border-color: color-mix(in srgb, var(--color_teal) 50%, transparent) !important;
    color: color-mix(in srgb, var(--color_teal) 90%, white) !important;
}

.hs-btn-warn, [data-role~="hs-btn-warn"] {
    border-color: color-mix(in srgb, var(--color_amber) 50%, transparent) !important;
    color: color-mix(in srgb, var(--color_amber) 90%, white) !important;
}

.hs-btn-danger, [data-role~="hs-btn-danger"] {
    border-color: color-mix(in srgb, var(--color_secondary) 60%, transparent) !important;
    color: var(--color_secondary) !important;
}

.hs-policy-editor {
    flex: 1;
    min-height: 180px;
    font-family: 'PxPlus VGA SquarePx', 'Courier New', monospace !important;
    font-size: 0.88rem !important;
    resize: vertical !important;
}

/* ── IP ban tab ──────────────────────────────────────────────── */

#admin_tab_ban_ips {
    overflow-y: auto !important;
    overflow-x: hidden !important;
}

#ban_add_form { margin-top: 14px; }

#ban_ip_input {
    flex: 1 !important;
    width: auto !important;
    min-width: 140px !important;
}
#ban_reason_input {
    flex: 2 !important;
    width: auto !important;
    min-width: 180px !important;
}

/* ── Scripts tab ────────────────────────────────────────────── */

#admin_tab_scripts {
    overflow-y: auto !important;
    overflow-x: hidden !important;
}

#scripts_btn_list { margin-top: 14px !important; }


/* ══════════════════════════════════════════════════════════════════
   SHARED PANEL + ACCOUNT TAB  (.um-panel / .um-header / .um-title)
   ══════════════════════════════════════════════════════════════════ */

.um-panel {
    background: transparent !important;
    padding: 18px 20px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.um-session-note {
    margin: 0;
    font-size: 0.93rem;
    color: var(--color_text_normal);
}

.um-header {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 12px;
    padding: 14px 20px 18px;
    background: transparent !important;
    flex-shrink: 0;
}

.um-title {
    margin: 0 !important;
    font-size: 1.54rem !important;
    font-weight: bold !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase;
    color: var(--color_text_stressed) !important;
    padding-left: 10px !important;
}

/* Avatar editor row (My Account tab + edit panels) */
.um-avatar-edit {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.um-avatar-edit > label {
    font-size: 0.77rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    opacity: 0.5;
}

.um-avatar-edit-row {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
}

.um-avatar-status {
    font-size: 0.85rem;
    opacity: 0.7;
}

/* Account tab wrap */
#acct_wrap {
    padding: 0 24px 72px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

#acct_av_box {
    width: 64px;
    height: 64px;
    min-width: 64px;
    font-size: 1.85rem !important;
}

/* ── Analytics tab ─────────────────────────────────────────────── */
#analytics_wrap {
    padding: 20px 24px;
    max-width: 900px;
}

.analytics-header {
    margin-bottom: 24px;
    h2 { font-size: 1.1rem; font-weight: 700; margin: 0 0 4px; }
}

.analytics-subtitle {
    font-size: 0.78rem;
    opacity: 0.6;
}

.analytics-section { margin-bottom: 32px; }

.analytics-period-label {
    font-size: 0.80rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    opacity: 0.65;
    margin: 0 0 8px;
}

.analytics-empty {
    font-size: 0.85rem;
    opacity: 0.5;
    font-style: italic;
}

.analytics-table {
    border-collapse: collapse;
    width: 100%;
    font-size: 0.84rem;

    th, td {
        padding: 6px 10px;
        text-align: left;
    }
    th {
        font-weight: 600;
        font-size: 0.74rem;
        letter-spacing: 0.05em;
        text-transform: uppercase;
        opacity: 0.65;
    }
    tr:last-child td { border-bottom: none; }
    tr:hover td { background: transparent !important; }
    td:nth-child(2), td:nth-child(3) { font-variant-numeric: tabular-nums; width: 80px; }
}


/* ═══════════════════════════════════════════════════════════════
   Arcade
   ═══════════════════════════════════════════════════════════════ */
/*  Modification Timestamp: 2026-05-27 06:52:39 */
/*  - Refactored local variables via strict AST parse to $_snake_case. */
/*  - Prefixed native PHP functions with \. */
/*  - Applied strict Compilation Order Law for declare(strict_types=1). */
/*  - Added robust error failsafes and 2-hour IP Ban security constraints. */
/*  - Injected high-density verbose technical flow comments. */




html:has(#div_rom_list_toolbox) {
    background: transparent !important;
    background-image: none;
    box-sizing: border-box;
    overscroll-behavior: none;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

*, *:before, *:after {
    box-sizing: inherit;
}

html:has(#div_rom_list_toolbox) body {
    background: transparent !important;
    opacity: 0;
    margin: 0;
    padding: 0;
    overflow: hidden;
    overscroll-behavior: none;
    -webkit-tap-highlight-color: var(--mix);
}

/* ── Gamepad (emulatorjs) ───────────────────────── */
.emulator-gamepad,
#gamepad {
    display: block !important;
    visibility: visible !important;
    opacity: 1 !important;
    z-index: 9999 !important;
}

/* ── Loading overlay ────────────────────────────── */
#div_loading {
    display: flex;
    position: fixed;
    inset: 0;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    gap: 12px;
    z-index: 999;
    background: transparent !important;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}

#div_loading h1 {
    margin: 0;
    font-size: 1.54rem !important;
    font-weight: normal !important;
    letter-spacing: 0.28em !important;
    text-transform: uppercase;
    opacity: 0.45;
}

/*
 * ══════════════════════════════════════════════════════════════════
 * Arcade / Emulation — FM "My Files" visual redesign
 * Sidebar is 280px on desktop; full-width overlay on traditional (≤767px).
 * JS controls sidebar via style.left (-101% hidden / 0 shown).
 * #div_right stays always visible (overrides JS visibility:hidden).
 * ══════════════════════════════════════════════════════════════════
 */

html:has(#div_rom_list_toolbox) body { background: transparent !important; }

/* Top bar: matches #fm_top */
html:has(#div_rom_list_toolbox) #div_top {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    z-index: 20;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 12px;
    padding: calc(env(safe-area-inset-top, 0px) + 10px) 20px 12px;
    height: auto;
    min-height: calc(50px + env(safe-area-inset-top, 0px));
    /* Was flat var(--bg_raised), backdrop-filter explicitly forced none
       — this arcade-specific :has() rule is more specific than the
       shared base #div_top rule (also given glass the same day), so it
       was the one actually winning here and the reason Arcade looked
       unchanged after that pass. Real glass tier 2 now (2026-08-19). */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent) !important;
    backdrop-filter: var(--glass-blur-2) !important;
    -webkit-backdrop-filter: var(--glass-blur-2) !important;
    box-shadow: var(--elevation-2) !important;
    border-radius: var(--theme-radius-xs) !important;
    box-sizing: border-box;
    transition: none;
}

html:has(#div_rom_list_toolbox) #div_top::before {
    display: block !important;
    content: '' !important;
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 56px !important;
    height: 100% !important;
    background: transparent !important;
    z-index: 0 !important;
    pointer-events: none !important;
    border-radius: var(--theme-radius-xs) !important;
}

html:has(#div_rom_list_toolbox) #div_top > #menu_icon {
    position: relative !important;
    left: auto !important;
    top: auto !important;
    width: 38px !important;
    height: 38px !important;
    min-height: 0 !important;
    padding: 9px !important;
    object-fit: contain !important;
    cursor: pointer !important;
    filter: brightness(0) invert(1) !important;
    opacity: 0.85 !important;
    flex-shrink: 0 !important;
    transition: opacity 0.2s ease !important;
    z-index: 1 !important;
    transform: none !important;
}

html:has(#div_rom_list_toolbox) #div_top > #menu_icon:hover {
    opacity: 1 !important;
    transform: none !important;
}

html.day-mode:has(#div_rom_list_toolbox) #div_top > #menu_icon {
    filter: brightness(0) !important;
    opacity: 0.85 !important;
}
html.day-mode:has(#div_rom_list_toolbox) #div_top > #menu_icon:hover {
    opacity: 1 !important;
}

html:has(#div_rom_list_toolbox) #div_top > #arcade_title {
    flex: 1 !important;
    min-width: 0 !important;
    display: block !important;
    font-family: var(--font-heading) !important;
    font-size: 1.38rem !important;
    font-weight: bold !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase !important;
    color: var(--color_text_stressed) !important;
    padding: 0 10px !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    margin: 0 !important;
    line-height: 1.2 !important;
    background: transparent !important;
    position: relative !important;
    z-index: 1 !important;
}

/* Game browser sidebar: matches #fm_tree */
html:has(#div_rom_list_toolbox) #div_left {
    position: fixed;
    top: calc(50px + env(safe-area-inset-top, 0px));
    left: 0;
    height: calc(100% - 50px - env(safe-area-inset-top, 0px));
    height: calc(100dvh - 50px - env(safe-area-inset-top, 0px));
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: none;
    z-index: 10;
    /* Was flat var(--bg_raised) (itself already a fix for an earlier
       transparent-background bug — see comment history — so this isn't
       reverting that, just adding real glass on top of the same opaque
       base). Real glass tier 2 now (2026-08-19), matching #div_top
       above — same "more specific than the shared base rule" reason. */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent) !important;
    backdrop-filter: var(--glass-blur-2) !important;
    -webkit-backdrop-filter: var(--glass-blur-2) !important;
    box-shadow: var(--elevation-2) !important;
    padding: 4px 0 !important;
    transition: left 0.25s ease;
    border-right: 1px solid var(--border);
    box-sizing: border-box;
    width: fit-content;
    min-width: 200px;
}

html:has(#div_rom_list_toolbox) #div_left::-webkit-scrollbar { display: none; }

html:has(#div_rom_list_toolbox) #div_left > .div_game_rom_list::-webkit-scrollbar { width: 4px; }

html:has(#div_rom_list_toolbox) #div_left > .div_game_rom_list::-webkit-scrollbar-thumb {
    background: var(--border);
    border-radius: var(--theme-radius-xs);
}

html:has(#div_rom_list_toolbox) #div_left > br,
html:has(#div_rom_list_toolbox) #div_left > a[name="top"] {
    display: none;
}

html:has(#div_rom_list_toolbox) #div_left > #totop {
    position: fixed;
    right: 20px;
    bottom: 16px;
    padding: 8px 10px;
    font-size: 0.85rem;
    opacity: 0.35;
    text-decoration: none;
    transition: opacity 0.2s ease;
    z-index: 30;
}

html:has(#div_rom_list_toolbox) #div_left > #totop:hover { opacity: 0.8; }

/* Emulator panel: always visible, fills viewport below top bar */
html:has(#div_rom_list_toolbox) #div_right {
    position: fixed;
    top: calc(50px + env(safe-area-inset-top, 0px));
    left: 0;
    right: 0;
    bottom: 0;
    overflow: hidden;
    z-index: 0;
    padding: 0 !important;
    text-align: left;
    visibility: visible !important;
    background: transparent !important;
}

/* ROM list toolbox: sticky header */
#div_rom_list_toolbox {
    position: sticky;
    top: 0;
    width: 100%;
    padding: 10px 12px 8px;
    z-index: 10;
    box-sizing: border-box;
    /* Was flat var(--bg_raised), box-shadow:none — the console-select/
       search card visible right below the sidebar's top edge. Real
       glass tier 1 (2026-08-19, content-density card, not floating
       chrome — stays more opaque like the rest of tier 1). */
    background: color-mix(in srgb, var(--bg_raised) 88%, transparent) !important;
    backdrop-filter: var(--glass-blur-1) !important;
    -webkit-backdrop-filter: var(--glass-blur-1) !important;
    border-radius: var(--theme-radius-xs) !important;
    box-shadow: var(--elevation-1) !important;
    border-bottom: 1px solid var(--border);
}

#div_rom_list_toolbox > br { display: none; }

#div_rom_list_toolbox > span {
    display: block;
    font-size: 0.72rem !important;
    letter-spacing: 0.09em !important;
    text-transform: uppercase;
    color: var(--text_dim) !important;
    opacity: 1;
    margin-bottom: 4px;
    padding-top: 8px;
}

#div_rom_list_toolbox #select_game_consoles + span { margin-top: 8px; }

#div_rom_list_toolbox #select_game_consoles {
    display: block;
    width: 100% !important;
    margin: 0 !important;
    font-size: 0.83rem !important;
}

#div_rom_list_toolbox #input_search {
    display: inline-block;
    vertical-align: top;
    width: calc(100% - 60px) !important;
    margin: 4px 0 0 !important;
    font-size: 0.83rem !important;
}

#div_rom_list_toolbox #button_search {
    display: inline-block;
    vertical-align: top;
    width: 54px !important;
    margin: 4px 0 0 4px !important;
    font-size: 0.75rem !important;
}

/* ROM list panels: JS sets style.top and style.height — must be position:absolute */
html:has(#div_rom_list_toolbox) #div_left > .div_game_rom_list {
    display: none;
    position: absolute;
    left: 0;
    width: 100%;
    padding: 0 0 16px;
    box-sizing: border-box;
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
    text-align: left;
}

.div_game_rom_list > br { display: none; }

/* Console group label: matches .fm-group-label */
.img_game_rom_list_icon { display: none; }

.span_rom_group_title {
    display: block;
    font-size: 0.72rem !important;
    font-weight: normal !important;
    letter-spacing: 0.09em !important;
    text-transform: uppercase !important;
    color: var(--text_dim) !important;
    padding: 12px 10px 3px !important;
}

/* ROM entry links: matches .fm-file */
.div_game_rom_list a {
    display: block;
    background: transparent !important;
    padding: 4px 8px 4px 12px;
    margin: 0;
    text-decoration: none;
    font-size: 0.83rem !important;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    box-shadow: none !important;
    border-radius: var(--theme-radius-xs);
    color: var(--text) !important;
    transition: background 0.13s ease, color 0.13s ease;
    cursor: pointer;
    line-height: 1.4;
}

.div_game_rom_list a:hover {
    background: color-mix(in srgb, var(--accent) 12%, transparent) !important;
    color: var(--color_text_stressed) !important;
    transform: none !important;
}

/* Video background */
#bg-video {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    object-fit: cover;
    z-index: -1;
    transform: translateZ(0);
    will-change: auto;
}

/* Loading splash */
#loading_splash {
    position: fixed;
    inset: 0;
    background: transparent !important;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 999999;
    font-family: monospace;
    font-size: 0.85rem;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    transition: opacity 0.5s;
}

/* Hide site bottom bar: game fills full height */
html:has(#div_rom_list_toolbox) #div_bottom { display: none !important; }

/* Touch targets */
html:has(#div_rom_list_toolbox) #div_top > #menu_icon,
.div_game_rom_list a,
#div_rom_list_toolbox #select_game_consoles,
#div_rom_list_toolbox #input_search,
#div_rom_list_toolbox #button_search {
    touch-action: manipulation;
}

/* In-iframe: canonical header — same visual as standalone but no safe-area-inset. */
html.in-iframe:has(#div_rom_list_toolbox) #div_top {
    top: 0 !important;
    padding: 10px 20px 12px !important;
    min-height: 0 !important;
    height: auto !important;
}

html.in-iframe:has(#div_rom_list_toolbox) #div_left {
    top: 60px !important;
    height: calc(100% - 60px) !important;
    height: calc(100dvh - 60px) !important;
}

html.in-iframe:has(#div_rom_list_toolbox) #div_right {
    top: 60px !important;
    bottom: auto !important;
    height: calc(100dvh - 60px) !important;
    background: color-mix(in srgb, var(--bg_raised) 40%, transparent) !important;
}

/* Traditional: sidebar becomes full-width overlay */
@media (max-width: 767px) {
    html:has(#div_rom_list_toolbox) #div_top {
        padding-left:  max(14px, env(safe-area-inset-left, 0px));
        padding-right: max(14px, env(safe-area-inset-right, 0px));
    }

    html:has(#div_rom_list_toolbox) #div_left {
        width: 100%;
        border-right: none;
        padding-left:  env(safe-area-inset-left, 0px);
        padding-right: env(safe-area-inset-right, 0px);
    }

    #div_rom_list_toolbox #select_game_consoles {
        height: 44px !important;
        font-size: 1.23rem !important;
    }

    #div_rom_list_toolbox #input_search {
        width: calc(100% - 86px) !important;
        height: 44px !important;
        font-size: 1.23rem !important;
    }

    #div_rom_list_toolbox #button_search {
        width: 78px !important;
        height: 44px !important;
        font-size: 0.85rem !important;
    }

    .div_game_rom_list a {
        padding: 10px 12px;
        min-height: 44px;
        font-size: 0.92rem !important;
    }

    html:has(#div_rom_list_toolbox) #div_left > #totop {
        right: max(20px, env(safe-area-inset-right, 0px));
        bottom: max(16px, env(safe-area-inset-bottom, 0px));
    }
}


/* ═══════════════════════════════════════════════════════════════
   Chat
   ═══════════════════════════════════════════════════════════════ */
html:has(#chat_app) {
    background: transparent;
    background-image: none;
}

html:has(#chat_app) body {
    background: transparent;
    opacity: 0;
    margin: 0;
    padding: 0;
    overflow: hidden;
    transition: opacity 0.2s ease;
}

/* ── App shell ──────────────────────────────────────── */
#chat_app {
    display: flex;
    flex-direction: column;
    height: 100vh;
    height: 100dvh;
    overflow: hidden;
}

/*
 * ── Header ────────────────────────────────────────────────────
 * background: var(--theme-panel-bg) makes the chat header uniform
 * with all other sub-page headers (wall, guestbook, fm, arcade).
 * The flat backdrop on the parent page (index.php) bleeds
 * through the var(--mix) body/html of this sub-page, so any
 * panel that should appear opaque must explicitly set its background
 * to var(--theme-panel-bg) rather than leaving it var(--mix).
 * ────────────────────────────────────────────────────────────── */
/* ── Header ─────────────────────────────────────────── */
#chat_header {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    flex-shrink: 0;
    gap: 8px;
    width: 100%;
    box-sizing: border-box;
    padding: 12px 20px;
    flex-wrap: wrap;
    background: transparent !important;
}

#chat_header_left {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    text-align: left;
    gap: 4px;
}

#chat_online {
    font-size: 0.92rem !important;
    letter-spacing: 0.06em;
    opacity: 0.45;
    padding-left: 13px;
}

#chat_header_right {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    flex-wrap: wrap;
    gap: 8px;
}

/* ── Message list ────────────────────────────────────── */
#chat_messages {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 14px 20px 8px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    scroll-behavior: smooth;
}

#chat_messages::-webkit-scrollbar { width: 5px; }
#chat_messages::-webkit-scrollbar-track { background: var(--mix); }
#chat_messages::-webkit-scrollbar-thumb {
    background: color-mix(in srgb, var(--color_primary) 30%, var(--mix));
    border-radius: var(--theme-radius-xs);
}

.chat-msg {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    gap: 8px;
    max-width: 72%;
    align-self: flex-start;
}

.chat-msg-content {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    background: var(--bg_raised);
    padding: 7px 10px 6px;
}

.chat-msg.own {
    align-self: flex-end;
    flex-direction: row-reverse;
}

.chat-msg.own .chat-msg-content {
    align-items: flex-end;
    background: color-mix(in srgb, var(--color_primary) 22%, var(--bg_raised));
}

.chat-msg-meta {
    font-size: 0.77rem !important;
    letter-spacing: 0.06em;
    opacity: 0.45;
    padding: 0 4px;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    align-items: baseline;
}

.chat-msg-user {
    font-weight: 600;
    color: var(--color_primary);
    text-transform: none;
}

.chat-msg.own .chat-msg-user { color: var(--color_text_stressed); }

.chat-msg-time { font-size: 0.69rem !important; opacity: 0.7; }

.chat-msg-bubble {
    padding: 3px 0 2px;
    background: transparent !important;
    font-size: 1rem !important;
    line-height: 1.55 !important;
    letter-spacing: 0.02em;
    word-break: break-word;
    white-space: pre-wrap;
    color: var(--color_text_normal) !important;
}

.chat-msg.own .chat-msg-bubble {
    background: transparent !important;
}

/* ── Per-message action row (delete / mod / pin / copy) ── */
.chat-msg-actions {
    display: none;
    flex-direction: row;
    align-items: center;
    gap: 2px;
    margin-top: 4px;
}
.chat-msg:hover .chat-msg-actions { display: flex; }

.chat-msg-del {
    background: transparent !important;
    border: none !important;
    cursor: pointer;
    font-size: 0.82rem !important;
    line-height: 1 !important;
    padding: 2px 6px !important;
    height: auto !important;
    min-height: 0 !important;
    width: auto !important;
    margin: 0 !important;
    opacity: 0.55;
    color: var(--color_secondary) !important;
    transition: opacity 0.15s;
    border-radius: var(--theme-radius-xs) !important;
}
.chat-msg-del:hover { opacity: 1 !important; background: color-mix(in srgb, var(--color_secondary) 12%, transparent) !important; }

#chat_empty {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0.35;
    font-size: 0.92rem !important;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    flex-direction: column;
    gap: 8px;
}

/* ── Input dock ─────────────────────────────────────── */
#chat_input_dock {
    flex-shrink: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding: 10px 20px 12px;
    background: transparent !important;
}

/* Row 1: user tag spans full width */
#chat_self_tag {
    font-size: 0.77rem !important;
    letter-spacing: 0.1em;
    color: var(--color_primary) !important;
    white-space: nowrap;
    opacity: 0.85;
    flex-basis: 100%;
    order: 0;
}

/* Row 2: tool buttons */
#chat_att_btn,
#chat_rec_btn,
#chat_vid_btn {
    width: auto;
    order: 1;
}

#chat_attach_clr {
    width: auto;
}

/* Forces a line break between the tool-button row and the input row */
#chat_input_dock::after {
    content: '';
    width: 100%;
    order: 5;
}

/* Row 3: text input + send */
#chat_input {
    flex: 1 1 180px;
    order: 10;
    margin: 0 !important;
}

#chat_send_btn {
    order: 11;
}

/* ── Traditional ─────────────────────────────────────────── */
@media (max-width: 600px) {
    #chat_header {
        padding: 12px 14px 10px;
    }

    #chat_messages {
        padding: 10px 12px 6px;
        gap: 8px;
    }

    .chat-msg { max-width: 86%; }

    .chat-msg-bubble {
        font-size: 1.08rem !important;
    }

    #chat_input_dock {
        row-gap: 6px;
        padding: 8px 12px;
        padding-bottom: max(10px, env(safe-area-inset-bottom, 0px));
    }

    #chat_self_tag { display: none; }

    #chat_input {
        height: 44px !important;
        min-height: 44px !important;
        font-size: 1.1rem !important;
    }

    /* Shrink the video-record preview and let the online-presence list wrap
     * under the title instead of pushing the header wider than the screen. */
    #chat_vid_preview {
        width: clamp(80px, 14vw, 110px);
        height: auto;
        aspect-ratio: 4 / 3;
    }
    #chat_online {
        flex-basis: 100%;
        margin-left: 0;
    }
}

/* ── HUD uniformity ─────────────────────────────────── */
#chat_input_dock { background: transparent !important; border-top: 1px solid color-mix(in srgb, var(--color_teal) 30%, var(--mix)) !important; backdrop-filter: none !important; }




/* ── Translucent panels — backdrop bleeds through ──────────── */
#chat_header, #chat_input_dock {
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}
#chat_messages {
}
.chat-msg-bubble {
    background: transparent !important;
}

/* ── Attachment rendering ──────────────────────────────────── */
.msg-attach { margin-top: 6px; }
.msg-attach-img { max-width: 100%; max-height: 260px; border-radius: var(--theme-radius-xs); display: block; cursor: zoom-in; }
.msg-attach-audio { width: 100%; max-width: 320px; display: block; }
.msg-attach-video { max-width: 100%; max-height: 260px; display: block; border-radius: var(--theme-radius-xs); }
.msg-attach-file { color: var(--color_teal); text-decoration: none; font-size: 1rem; }
.msg-attach-file:hover, [data-role~="msg-attach-file"]:hover{ text-decoration: underline; }
.msg-attach-lbl { font-size: 0.85rem; color: var(--color_amber); margin-top: 3px; }

/* Chat attach bar + tool buttons */
#chat_attach_bar { display: flex; align-items: center; gap: 6px; padding: 3px 10px; font-size: 0.92rem; color: var(--color_teal); }
.chat-attach-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chat-attach-clr { padding: 0 4px !important; margin: 0 !important; border: none !important; height: auto !important; min-height: 0 !important; text-transform: none !important; letter-spacing: 0 !important; color: var(--color_secondary) !important; opacity: 0.6; }
.chat-attach-clr:hover, [data-role~="chat-attach-clr"]:hover{ opacity: 1; border-color: transparent !important; }
.chat-tool-btn { font-size: 1.23rem !important; padding: 0 12px !important; text-transform: none !important; letter-spacing: 0 !important; }
.chat-tool-btn.recording, [data-role~="chat-tool-btn"].recording{ color: var(--color_secondary) !important; border-color: var(--color_secondary) !important; animation: _chat_rec_blink 0.8s ease-in-out infinite; }
@keyframes _chat_rec_blink { 0%,100%{opacity:1} 50%{opacity:0.4} }

/* "Who's online" presence list rendered into #chat_online by APP_STANDARD.render_presence_list() */
#chat_online { display: inline-flex; flex-wrap: wrap; gap: 5px; margin-left: 10px; vertical-align: middle; }
.presence-pill { display: inline-flex; align-items: center; gap: 4px; font-size: 0.85rem; color: var(--color_text_normal); opacity: 0.85; }
.presence-dot { width: 7px; height: 7px; border-radius: var(--theme-radius-xs); background: #3db87a !important; flex-shrink: 0; }
.presence-empty { font-size: 0.85rem; opacity: 0.5; }

/* Live camera preview shown while recording a video message */
#chat_vid_preview { display: block; width: 160px; height: 120px; object-fit: cover; margin: 6px auto; border-radius: var(--theme-radius-xs); }
#chat_vid_preview[hidden] { display: none; }

/* God-only "Clear" button in the header — compact danger-tinted pill. */
#chat_clear_btn {
    width: auto !important;
    min-height: 0 !important;
    height: 28px !important;
    margin: 0 8px 0 0 !important;
    padding: 0 14px !important;
    border-radius: var(--theme-radius-xs) !important;
    font-size: 0.6rem !important;
    letter-spacing: 0.14em !important;
    text-transform: uppercase !important;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
}

/* "Chat cleared" modal shown to other users when a god wipes the room. */
#cleared_modal {
    position: fixed;
    inset: 0;
    z-index: 2147483646;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.88);
}
#cleared_modal[hidden] { display: none; }
#cleared_modal_box {
    max-width: 320px;
    width: 86%;
    padding: 22px 20px 18px;
    text-align: center;
}
#cleared_modal_msg {
    font-size: 0.82rem;
    line-height: 1.5;
    color: var(--color_text_normal);
    margin-bottom: 16px;
}

/* God-only per-message moderate (ban/mute) and pin buttons — live in .chat-msg-actions row. */
.chat-msg-mod,
.chat-msg-pin {
    background: transparent !important;
    border: none !important;
    border-radius: var(--theme-radius-xs) !important;
    color: var(--color_text_stressed) !important;
    cursor: pointer;
    font-size: 0.82rem !important;
    line-height: 1 !important;
    padding: 2px 6px !important;
    height: auto !important;
    min-height: 0 !important;
    width: auto !important;
    margin: 0 !important;
    opacity: 0.55;
    transition: opacity 0.15s;
}
.chat-msg-mod:hover,
.chat-msg-pin:hover { opacity: 1 !important; background: color-mix(in srgb, var(--color_primary) 10%, transparent) !important; }

/* 📌 marker shown to everyone on a pinned (unclearable) message. */
.chat-msg-pin-badge {
    font-size: 0.85rem;
    margin: 0 4px;
    opacity: 0.9;
}

/* Subtle flat accent so pinned messages are recognisable at a glance. */
.chat-msg.pinned .chat-msg-bubble {
}

/* ── Message author avatars ──────────────────────────────────────── */
.chat-msg-meta { display: flex; align-items: center; gap: 6px; }
.chat-msg-av { flex: 0 0 28px; width: 28px; height: 28px; }
.chat-av {
    width: 28px; height: 28px; border-radius: var(--theme-radius-xs);
    display: inline-flex; align-items: center; justify-content: center;
    background: color-mix(in srgb, var(--color_primary) 22%, transparent);
    color: var(--color_primary);
    font-size: 0.72rem; font-weight: 700; line-height: 1;
    overflow: hidden; position: relative;
}

/* ── Notification opt-in checkbox ─────────────────────────────────── */
.lb-notif-toggle {
    display: inline-flex; align-items: center; gap: 5px;
    font-size: 0.85rem; cursor: pointer; user-select: none;
    opacity: 0.85; white-space: nowrap;
}
.lb-notif-toggle input { margin: 0; }

/* ── Traditional polish ──────────────────────────────────────────────── */
@media (max-width: 767px) {
    /* Card radius on message bubbles */
    .chat-msg { border-radius: var(--theme-radius-xs) !important; }
    /* Header border-radius */
    #chat_header { border-radius: var(--theme-radius-xs) !important; }
    /* Ensure send button meets 44px */

    /* Standalone-mode: extra top padding for status bar */
    @media (display-mode: standalone) {
        #chat_header { padding-top: calc(12px + env(safe-area-inset-top)); }
    }
}

/* Override emitter subpage body padding — full-bleed layout */
html.subpage body { padding: 0 !important; }

/* ── Typing indicator bubble ── */
#chat_typing {
    padding: 4px 16px;
    font-size: 0.78rem;
    color: var(--color_text_dim);
    letter-spacing: 0.03em;
    font-style: italic;
    min-height: 1.4em;
    transition: opacity 0.2s;
}


/* ═══════════════════════════════════════════════════════════════
   DM
   ═══════════════════════════════════════════════════════════════ */
/* ── Page-local helper tokens ─────────────────────────────────────── */
:root {
    --fg-dim: color-mix(in srgb, var(--color_text_normal) 55%, var(--mix));
    --border-tint: color-mix(in srgb, var(--color_primary) 28%, var(--mix));
}

*, *::before, *::after { box-sizing: border-box; }

/* The DM is a fixed full-height application shell — override the emitter's
 * scrolling-document defaults so the panels manage their own overflow. */
html:has(#dm_msgs) {
    height: 100dvh !important;
    overflow: hidden !important;
    box-sizing: border-box;
}
html.subpage body #div_top { background: transparent !important; }

html:has(#dm_msgs) body {
    display: flex !important;
    flex-direction: column !important;
    height: 100dvh !important;
    min-height: 0 !important;
    overflow: hidden !important;
    margin: 0 !important;
    padding: 0 !important;
    color: var(--color_text_normal);
    text-align: left !important;
}

/* ══════════════════════════════════════════════════════════════════
   STRUCTURAL SHELL — identical skeleton to every other sub-page.
   html:has(#dm_msgs) #div_top is the fixed glass toolbar (the emitter already paints it as
   a glass panel; we only override geometry, exactly like the arcade page),
   html:has(#dm_msgs) #div_left is the content region that fills the rest of the viewport.
   ══════════════════════════════════════════════════════════════════ */

/* ── Top toolbar ──────────────────────────────────────────────────── */
html:has(#dm_msgs) #div_top {
    position: relative !important;
    flex-shrink: 0 !important;
    width: 100% !important;
    height: auto !important;
    z-index: 20 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: flex-start !important;
    flex-wrap: wrap !important;
    gap: 8px !important;
    padding: env(safe-area-inset-top, 0px) 20px 12px !important;
    margin: 0 !important;
    background: transparent !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius-xs) !important;
    overflow: visible !important;
    animation: none !important;
    opacity: 1 !important;
    box-sizing: border-box;
}

/* Left column: title stacked above recipient name, matching #chat_header_left */
#dm_header_left {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    flex: 1;
    min-width: 0;
}

/* Right column: controls row, matching #chat_header_right */
#dm_header_right {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    flex-shrink: 0;
}
html.subpage body #div_top { background: transparent !important; }

/* Hamburger — toggles the conversation sidebar on narrow screens. */
html:has(#dm_msgs) #div_top > #menu_icon {
    font-size: 1.54rem;
    line-height: 1;
    cursor: pointer;
    opacity: 0.7;
    flex-shrink: 0;
    user-select: none;
    color: var(--color_text_stressed);
    transition: opacity 0.2s ease, transform 0.22s cubic-bezier(0.25, 0.8, 0.25, 1);
}

html:has(#dm_msgs) #div_top > #menu_icon:hover {
    opacity: 1;
    transform: scale(1.08);
}

/* Section label — accent left-stripe + uppercase, matching #chat_title. */
#dm_title {
    font-size: 1.38rem !important;
    font-weight: bold !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase !important;
    color: var(--color_text_stressed) !important;
    padding-left: 10px !important;
    line-height: 1 !important;
    text-shadow: none !important;
    margin: 0 !important;
}

/* Recipient name — subtitle below title, matching #chat_online style. */
#dm_hdr_user {
    font-size: 0.92rem !important;
    letter-spacing: 0.02em;
    opacity: 0.45;
    padding-left: 13px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}

/* God-only "Moderate user" button — compact icon pill. */
#dm_mod_btn {
    flex-shrink: 0;
}

/* God-only "Clear conversation" button — danger-tinted. */
#dm_clear_btn {
    flex-shrink: 0;
    background: transparent !important;
}

/* ══════════════════════════════════════════════════════════════════
   "Chat cleared" modal — shown to the other participant when a god
   wipes the conversation.
   ══════════════════════════════════════════════════════════════════ */
#cleared_modal {
    position: fixed;
    inset: 0;
    z-index: 2147483646;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.88);
}

#cleared_modal[hidden] { display: none; }

#cleared_modal_box {
    max-width: 320px;
    width: 86%;
    padding: 22px 20px 18px;
    text-align: center;
}

#cleared_modal_msg {
    font-size: 0.82rem;
    line-height: 1.5;
    color: var(--color_text_normal);
    margin-bottom: 16px;
}

/* ── Content region ───────────────────────────────────────────────── */
html:has(#dm_msgs) #div_left {
    position: relative !important;
    top: 0 !important;
    left: 0 !important;
    flex: 1 !important;
    min-height: 0 !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    box-shadow: none !important;
    overflow: hidden !important;
    animation: none !important;
    opacity: 1 !important;
}

#dm_body {
    position: relative;
    display: flex;
    height: 100%;
    overflow: hidden;
}

/* ── Conversation sidebar ─────────────────────────────────────────── */
#dm_convos_panel {
    width: clamp(180px, 22vw, 240px);
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    background: transparent;
}

/* Sidebar header: "Messages" label + compose button */
#dm_convos_hdr {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 10px 10px 14px;
    flex-shrink: 0;
    background: transparent !important;
}

#dm_convos_label {
    font-size: 0.65rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--accent_lit);
    font-family: var(--font-heading);
    font-weight: 600;
}

/* Compose icon button (✎) replaces the old pill at the bottom */
#dm_new_btn {
    width: auto !important;
    height: 38px !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 0 14px !important;
    border-radius: var(--theme-radius-xs) !important;
    font-size: 1rem !important;
    letter-spacing: 0 !important;
    line-height: 1 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex-shrink: 0;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s;
}

#dm_new_btn:hover {
    background: transparent !important;
}

#dm_convos_list {
    flex: 1;
    overflow-y: auto;
}

.dm-empty {
    padding: 14px 10px;
    font-size: 0.72rem;
    color: var(--fg-dim);
    text-align: center;
}

.dm-convo-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 10px 10px 11px;
    cursor: pointer;
    transition: background 0.14s, border-left-color 0.14s;
}

.dm-convo-item:hover {
    background: transparent !important;
}

.dm-convo-item.active {
    background: transparent !important;
}

.dm-avatar {
    width: 32px;
    height: 32px;
    min-width: 32px;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.72rem;
    font-weight: 700;
    color: var(--accent_lit);
    text-transform: uppercase;
    flex-shrink: 0;
    overflow: hidden;
    position: relative;
}

.dm-convo-meta {
    flex: 1;
    min-width: 0;
}

.dm-convo-name {
    font-size: 0.76rem;
    color: var(--color_text_normal);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    font-weight: 600;
}

/* Preview row: preview text on left, timestamp on right */
.dm-convo-preview-row {
    display: flex;
    align-items: center;
    gap: 5px;
    margin-top: 3px;
}

.dm-convo-preview {
    font-size: 0.63rem;
    color: var(--fg-dim);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    flex: 1;
    min-width: 0;
}

.dm-convo-ts {
    font-size: 0.58rem;
    color: var(--fg-dim);
    flex-shrink: 0;
    opacity: 0.7;
    white-space: nowrap;
}

.dm-convo-badge {
    background: transparent !important;
    color: var(--color_text_stressed);
    font-size: 0.58rem;
    min-width: 18px;
    height: 18px;
    border-radius: var(--theme-radius-xs);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 4px;
    flex-shrink: 0;
    font-weight: bold;
}

/* ── Chat panel ───────────────────────────────────────────────────── */
#dm_chat_panel {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

#dm_thread {
    display: flex;
    flex-direction: column;
    flex: 1;
    overflow: hidden;
}

#dm_thread[hidden],
#dm_user_picker[hidden],
#dm_no_convo[hidden] {
    display: none;
}

#dm_thread_title {
    padding: 8px 14px;
    font-size: 0.72rem;
    letter-spacing: 0.10em;
    color: var(--accent_lit);
    flex-shrink: 0;
    background: transparent !important;
}

#dm_msgs {
    flex: 1;
    overflow-y: auto;
    padding: 10px 14px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.dm-msg-row {
    display: flex;
    flex-direction: column;
    max-width: 80%;
}

.dm-me {
    align-self: flex-end;
    align-items: flex-end;
}

.dm-them {
    align-self: flex-start;
    align-items: flex-start;
}

.dm-bubble {
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
    padding: 7px 11px;
    font-size: 0.82rem;
    line-height: 1.5;
    color: var(--color_text_normal);
    word-break: break-word;
}

.dm-me .dm-bubble {
    background: transparent !important;
}

.dm-ts {
    font-size: 0.58rem;
    color: var(--fg-dim);
    margin-top: 2px;
    padding: 0 2px;
    display: flex;
    align-items: center;
    gap: 4px;
}

.dm-receipt {
    font-size: 0.65rem;
    color: var(--fg-dim);
    user-select: none;
    flex-shrink: 0;
}
.dm-receipt-read {
    color: var(--color_primary);
}

/* ── Pending-attachment bar ───────────────────────────────────────── */
#dm_attach_bar {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    background: transparent !important;
    font-size: 0.72rem;
    flex-shrink: 0;
}

#dm_attach_bar[hidden] {
    display: none;
}

.dm-attach-name {
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--fg-dim);
}

[data-role~="dm-attach-clr"] {
    width: auto !important;
    height: 28px !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 0 8px !important;
    border: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    font-size: 0.9rem !important;
    opacity: 0.6;
}
[data-role~="dm-attach-clr"]:hover{ opacity: 1; border-color: transparent !important; }

/* ── Composer row ─────────────────────────────────────────────────── */
#dm_input_row {
    display: flex;
    align-items: flex-end;
    gap: 6px;
    padding: 8px 10px;
    padding-bottom: max(8px, env(safe-area-inset-bottom));
    flex-shrink: 0;
    background: transparent !important;
}

/* Tool buttons (attach / record) — compact icon pills */
[data-role~="dm-tool-btn"] {
    min-width: 38px !important;
    margin: 0 !important;
    padding: 0 !important;
    font-size: 1rem !important;
    letter-spacing: 0 !important;
    text-transform: none !important;
    flex-shrink: 0;
}

[data-role~="dm-tool-btn"].recording{
    color: var(--color_secondary) !important;
    animation: _dm_rec_blink 0.8s infinite;
}

/* Live camera preview shown while recording a video message */
#dm_vid_preview {
    display: block;
    width: clamp(100px, 20vw, 160px);
    height: auto;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    margin: 6px auto;
    border-radius: var(--theme-radius-xs, 4px);
}
#dm_vid_preview[hidden] { display: none; }

/* "Who's online" presence list rendered into #dm_online by APP_STANDARD.render_presence_list() */
#dm_online {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 5px;
    vertical-align: middle;
}

.presence-pill {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 0.85rem;
    opacity: 0.85;
}

.presence-dot {
    width: 7px;
    height: 7px;
    border-radius: var(--theme-radius-xs);
    background: #3db87a !important;
    flex-shrink: 0;
}

.presence-empty {
    font-size: 0.85rem;
    opacity: 0.5;
}

@keyframes _dm_rec_blink {
    0%, 100% { opacity: 1; }
    50%      { opacity: 0.35; }
}

#dm_input {
    flex: 1;
    width: auto !important;
    height: 38px !important;
    min-height: 38px !important;
    max-height: 38px !important;
    margin: 0 !important;
    padding: 0 14px !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    color: var(--color_text_normal) !important;
    font-size: 0.82rem !important;
    line-height: 20px !important;
    resize: none;
}

#dm_send_btn {
    width: auto !important;
    min-height: 0 !important;
    height: 38px !important;
    margin: 0 !important;
    padding: 0 18px !important;
    border-radius: var(--theme-radius-xs) !important;
    font-size: 0.78rem !important;
    letter-spacing: 0.08em !important;
    flex-shrink: 0;
}

/* ── User picker ──────────────────────────────────────────────────── */
#dm_user_picker {
    flex: 1;
    overflow-y: auto;
    padding: 16px;
}

.dm-picker-title {
    font-size: 0.72rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--accent_lit);
    margin-bottom: 12px;
}

.dm-user-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 10px;
    cursor: pointer;
}

.dm-user-item:hover {
    background: transparent !important;
}

/* ── No-conversation placeholder ──────────────────────────────────── */
#dm_no_convo {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.78rem;
    color: var(--fg-dim);
}

/* ── In-message attachments ───────────────────────────────────────── */
.msg-attach {
    margin-top: 6px;
}

.msg-attach-img {
    max-width: min(220px, 55%);
    max-height: none;
    aspect-ratio: auto;
    display: block;
}

.msg-attach-audio {
    max-width: 240px;
    display: block;
}

.msg-attach-video {
    max-width: 240px;
    display: block;
}

.msg-attach-file {
    color: var(--accent_lit);
    font-size: 0.78rem;
    text-decoration: none;
}

.msg-attach-lbl {
    font-size: 0.68rem;
    color: var(--fg-dim);
    margin-top: 3px;
}

/* ══════════════════════════════════════════════════════════════════
   RESPONSIVE — wide screens keep the two-panel view; narrow screens
   slide the conversation list in as an off-canvas drawer toggled by the
   #menu_icon hamburger (mirrors how the arcade list is toggled).
   ══════════════════════════════════════════════════════════════════ */
@media (min-width: 641px) {
    /* The hamburger has nothing to do when both panels already fit. */
    html:has(#dm_msgs) #div_top > #menu_icon { display: none; }
}

@media (max-width: 640px) {
    #dm_convos_panel {
        position: absolute;
        top: 0;
        left: 0;
        height: 100%;
        z-index: 12;
        transform: translateX(-100%);
        transition: transform 0.28s cubic-bezier(0.22, 1, 0.36, 1);
        box-shadow: none;
    }

    body.dm-nav-open #dm_convos_panel {
        transform: translateX(0);
    }

    /* Shrink the video-record preview and let the presence pill list wrap
     * onto its own line instead of pushing the input row wider than the
     * viewport. */
    #dm_vid_preview {
        width: clamp(80px, 14vw, 110px);
        height: auto;
        aspect-ratio: 4 / 3;
    }
    #dm_online {
        flex-basis: 100%;
        margin-left: 0;
        order: 10;
    }
}

/* ── God pin (keep-on-clear) controls — flat, no shadow ──────────── */
.dm-pin-badge {
    font-size: 0.7rem;
    margin-left: 5px;
    opacity: 0.9;
}

.dm-pin-btn {
    font-size: 0.72rem !important;
    padding: 0 6px !important;
    height: 22px !important;
    margin-top: 1px !important;
    width: auto !important;
    min-height: 0 !important;
    border: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    opacity: 0.55;
}
.dm-pin-btn:hover { opacity: 1; border-color: transparent !important; }

/* Subtle flat left accent so pinned messages stand out. */
.dm-pinned .dm-bubble {
}

/* ── X-Files redesign: heading uses the case-file typewriter face ── */
#dm_title, .dm-picker-title, #dm_thread_title { font-family: var(--font-heading) !important; }

/* ── Traditional polish ──────────────────────────────────────────────── */
@media (max-width: 767px) {
    /* Conversation sidebar hidden until hamburger opens it (already handled
       by existing JS toggle); ensure it covers full height on open */
    #dm_convo_list {
        position: fixed;
        top: 0;
        left: -100%;
        height: 100dvh;
        z-index: 800;
        transition: left 0.22s ease;
        background: transparent !important;
        overflow-y: auto;
    }
    html.dm-sidebar-open #dm_convo_list { left: 0; }

    /* Message bubbles */
    .dm-msg { border-radius: var(--theme-radius-xs) !important; }

    /* Two-row dock: tool buttons on row 1, input + send on row 2. */
    #dm_input_row {
        flex-wrap: wrap;
        row-gap: 6px;
        padding: 8px 10px;
        padding-bottom: max(10px, env(safe-area-inset-bottom, 0px));
    }

    /* Pseudo-element forces a line break between tool buttons and the input row. */
    #dm_input_row::after {
        content: '';
        width: 100%;
        order: 5;
    }

    .dm-tool-btn {
        order: 1;
        min-width: 44px !important;
        height: 44px !important;
    }

    #dm_input {
        order: 10;
        height: 44px !important;
        min-height: 44px !important;
        max-height: 44px !important;
        font-size: 1rem !important;
    }

    #dm_send_btn {
        order: 11;
        height: 44px !important;
        min-height: 44px !important;
        min-width: 44px !important;
        padding: 0 16px !important;
    }

    /* Standalone-mode top inset */
    @media (display-mode: standalone) {
        html:has(#dm_msgs) #div_top { padding-top: calc(8px + env(safe-area-inset-top)); }
    }
}

/* Override emitter subpage body padding — full-bleed layout */
html.subpage body { padding: 0 !important; }

/* ── Traditional header: match chat's 600px breakpoint ── */
@media (max-width: 600px) {
    html:has(#dm_msgs) #div_top { padding: env(safe-area-inset-top, 0px) 14px 10px !important; }
    #dm_title { font-size: 1.15rem !important; }
}

/* ── Typing indicator bubble ── */
#dm_typing {
    padding: 5px 14px;
    font-size: 0.78rem;
    color: var(--color_text_dim);
    letter-spacing: 0.03em;
    font-style: italic;
    min-height: 1.6em;
    transition: opacity 0.2s;
}

/* ── Inline presence dot in conversation list ── */
.dm-convo-name {
    position: relative;
    display: flex;
    align-items: center;
    gap: 5px;
}

.dm-presence-dot {
    display: inline-block;
    width: 7px;
    height: 7px;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    flex-shrink: 0;
    transition: background 0.3s;
}

.dm-presence-dot--on {
    background: #4caf50 !important;
    box-shadow: none;
}


/* ═══════════════════════════════════════════════════════════════
   Files browser
   ═══════════════════════════════════════════════════════════════ */
html:has(#fs_browser), html:has(#fs_browser) body {
    height: 100%;
    margin: 0;
    padding: 0 !important;
    overflow: hidden;
    background: transparent !important;
    max-width: none !important;
}

*, *:before, *:after { box-sizing: border-box; }
[hidden] { display: none !important; }

#fs_browser {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: transparent !important;
    color: var(--color_text_normal);
}

#fs_toolbar {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 4px 8px;
    height: 38px;
    background: transparent !important;
}

#fs_address_bar {
    flex: 1;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: 5px;
    padding: 0 10px !important;
    background: transparent !important;
    font-size: 0.82rem;
    overflow: hidden;
    white-space: nowrap;
    align-self: center;
    line-height: normal;
}

.fs-addr-root { color: var(--text_dim); flex-shrink: 0; }
.fs-addr-sep  { color: var(--text_dim); opacity: 0.45; flex-shrink: 0; }

/* Separator BETWEEN breadcrumb path segments (My Files > folder > folder,
   or an attached-storage connection > its own subfolders) — deliberately a
   separate class from .fs-addr-sep, which is the ROOT-label-to-subtitle
   separator hidden in subpage/windowed mode below (see "Address bar stacks
   root-label (title) + section-name (subtitle)"). That one stays hidden —
   title and subtitle are two stacked lines, a lone "/" between them reads
   as broken, not as a path. This one must stay visible everywhere: without
   it, a nested path like "NeoPC / home" renders as "NeoPChome" with zero
   visual separation between segments. */
.fs-crumb-sep { color: var(--text_dim); opacity: 0.45; }

/* Breadcrumb segments inside #fs_addr_section (My Files > folder > folder),
   built dynamically once folder navigation has any depth — plain text
   otherwise, see _render_breadcrumb(). */
.fs-crumb {
    cursor: pointer;
    opacity: 0.7;
    transition: opacity 0.1s;
}
.fs-crumb:hover { opacity: 1; text-decoration: underline; }
.fs-crumb-current {
    cursor: default;
    opacity: 1;
    font-weight: 600;
}
.fs-crumb-current:hover { text-decoration: none; }

#fs_addr_section {
    color: var(--color_text_normal);
    font-weight: 600;
    flex-shrink: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

#fs_toolbar_actions {
    display: flex;
    align-items: center;
    gap: 2px;
    flex-shrink: 0;
    padding: 0 !important;
}

[data-role~="fs-view-btn"] {
    width: 38px !important;
    padding: 0 !important;
    font-size: 1rem !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    opacity: 0.55;
}
[data-role~="fs-view-btn"]:hover{ opacity: 1; }
[data-role~="fs-view-btn"].active{ opacity: 1; color: var(--color_primary) !important; border-color: color-mix(in srgb, var(--color_primary) 50%, transparent) !important; }

.fs-toolbar-sep {
    width: 1px;
    height: 18px;
    background: transparent !important;
    margin: 0 4px;
    flex-shrink: 0;
}

[data-role~="fs-toolbar-btn"] {
    letter-spacing: 0.02em;
}

#fs_filter {
    width: 150px !important;
    flex-shrink: 0 !important;
    padding: 0 10px !important;
}

#fs_nav_toggle { display: none; }

#fs_ribbon {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 6px 12px !important;
    background: transparent !important;
    min-height: 48px;
}

#fs_ribbon_file {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1;
    min-width: 0;
    padding: 0 !important;
}

.fs-ribbon-icon {
    font-size: 1.6rem;
    flex-shrink: 0;
    line-height: 1;
}

/* Remote-storage icon is inline SVG, not emoji (2026-08-27 — see
   _REMOTE_STORAGE_ICON in files/index.php); the containers above only
   set font-size for the emoji folder/file icons they normally hold, an
   SVG child needs its own explicit width/height sized to roughly match. */
.fs-ribbon-icon svg      { width: 24px; height: 24px; flex-shrink: 0; }
.fs-icon-thumb svg       { width: 40px; height: 40px; flex-shrink: 0; }
.fs-li-icon svg          { width: 16px; height: 16px; flex-shrink: 0; }
.fs-td-icon svg          { width: 16px; height: 16px; flex-shrink: 0; }
.fs-nav-icon svg         { width: 15px; height: 15px; flex-shrink: 0; }
.fs-storage-row-icon svg { width: 17px; height: 17px; flex-shrink: 0; }

#fs_ribbon_info {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
    padding: 0 !important;
}

.fs-ribbon-name {
    font-size: 0.88rem;
    font-weight: 600;
    color: var(--color_text_stressed) !important;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fs-ribbon-meta {
    font-size: 0.77rem;
    color: var(--text_dim) !important;
    white-space: nowrap;
}

#fs_ribbon_actions {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
    flex-wrap: wrap;
    padding: 0 !important;
}

.fs-upload-panel {
    /* max-height/overflow-y dropped (2026-08-23) — was sized for the
       panel's brief LBKit.popover() phase (a small anchored dropdown);
       now that it's LBKit.modal() content, .fs-upload-modal below sizes
       the actual dialog box and this doesn't need its own separate
       scroll cap on top of that. */
    flex-shrink: 0;
    background: transparent !important;
}

.fs-upload-inner {
    padding: 12px 14px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.fs-upload-heading {
    margin: 0 !important;
    font-size: 0.77rem !important;
    font-weight: 700 !important;
    letter-spacing: 0.18em !important;
    text-transform: uppercase !important;
    opacity: 0.55;
}

.fs-upload-form-row {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
}

.fs-upload-form-row > .lb-field { flex: 1 1 180px; }

.fs-optional {
    opacity: 0.5;
    text-transform: none;
    letter-spacing: 0;
    font-size: 0.75rem !important;
}

.fs-upload-field input,
.fs-upload-field select {
    height: 38px;
    padding: 0 14px;
    background: transparent !important;
    color: var(--color_text_normal) !important;
    font-size: 0.9rem !important;
    font-family: inherit;
    border-radius: var(--theme-radius-xs) !important;
    box-shadow: none !important;
}

.fs-upload-actions {
    display: flex;
    gap: 8px;
}

#fs_body {
    flex: 1;
    display: flex;
    overflow: hidden;
    min-height: 0;
}

#fs_nav {
    flex: 0 0 180px;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 4px 0;
    background: transparent !important;
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
}

.fs-nav-section-label {
    padding: 12px 10px 3px;
    font-size: 0.72rem;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--text_dim);
    user-select: none;
}

.fs-nav-node {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 4px 8px 4px 12px;
    cursor: pointer;
    font-size: 0.83rem;
    color: var(--color_text_normal);
    white-space: nowrap;
    user-select: none;
    transition: background 0.1s;
}

.fs-nav-node:hover {
    background: transparent !important;
}

.fs-nav-node.active {
    background: transparent !important;
    color: var(--accent) !important;
}

.fs-nav-icon  { font-size: 0.95rem; flex-shrink: 0; }
.fs-nav-label { flex: 1; overflow: hidden; text-overflow: ellipsis; }

/* "Files I've Shared" / "Shared With Me" read as descendants of "My Files"
   (2026-08-27, Leo) — same tree-indent convention as a real file explorer's
   nav pane, not a real parent/child relationship in the data (each is
   still its own independent top-level section, switched the same way as
   any other .fs-nav-node — this is presentation only). A left border
   instead of just padding gives an actual visual stem connecting them
   back up to "My Files" directly above, not just empty indent space that
   could read as accidental misalignment. */
.fs-nav-node-child {
    padding-left: 26px;
    margin-left: 12px;
    border-left: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
}
.fs-nav-node-child .fs-nav-icon { font-size: 0.83rem; }
.fs-nav-node-child .fs-nav-label { font-size: 0.8rem; opacity: 0.9; }

.fs-nav-count {
    font-size: 0.73rem;
    opacity: 0.55;
    margin-left: auto;
    flex-shrink: 0;
    background: transparent !important;
    padding: 0 5px;
    border-radius: var(--theme-radius-xs);
    min-width: 18px;
    text-align: center;
}

#fs_pane {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    min-width: 0;
    position: relative;
}

.fs-panel {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    min-height: 0;
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
}

#fs_action_overlay {
    position: fixed;
    inset: 0;
    z-index: 2147483646;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.88);
}

.fs-action-panel {
    padding: 20px 24px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    width: min(92vw, 400px);
    background: color-mix(in srgb, var(--bg_base) 16%, transparent) !important;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: none;
    border: 1px solid rgba(255,255,255,0.10) !important;
    border-radius: var(--theme-radius) !important;
    animation: raise_up_glass 0.38s cubic-bezier(0.22, 1, 0.36, 1) both;
}

.fs-inline-label {
    font-size: 0.77rem !important;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    opacity: 0.6;
    margin: 0 !important;
}

.fs-share-subheader {
    margin-top: 4px !important;
}

.fs-share-nobody {
    font-size: 0.77rem !important;
    opacity: 0.35;
    margin: 0 !important;
    font-style: italic;
    text-transform: none;
    letter-spacing: 0;
}

.fs-inline-row {
    display: flex;
    gap: 8px;
    align-items: center;
    flex-wrap: wrap;
}

[data-role~="fs-inline-input"],
[data-role~="fs-inline-select"] {
    flex: 1 !important;
    min-width: 140px !important;
    font-size: 0.88rem !important;
}

[data-role~="fs-inline-input"]:focus,
[data-role~="fs-inline-select"]:focus { outline: none; border-color: var(--color_primary); }

.fs-shared-tags { display: flex; flex-wrap: wrap; gap: 6px; }

.fs-shared-tag {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 2px 8px;
    font-size: 0.77rem !important;
    background: transparent !important;
}

[data-role~="fs-untag"] {
    padding: 0 6px !important;
    height: 22px !important;
    min-height: 0 !important;
    border: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    opacity: 0.6;
}
[data-role~="fs-untag"]:hover { opacity: 1; color: var(--color_secondary) !important; border-color: transparent !important; }

.fs-grid { width: 100%; min-height: 100%; }

.fs-grid.view-icons {
    display: flex;
    flex-wrap: wrap;
    align-content: flex-start;
    gap: 4px;
    padding: 10px;
}

.fs-icon-tile {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100px;
    padding: 8px 6px 6px;
    cursor: pointer;
    border-radius: var(--theme-radius-xs);
    gap: 5px;
    user-select: none;
    transition: background 0.1s, border-color 0.1s;
}

.fs-icon-tile:hover {
    background: transparent !important;
}

.fs-icon-tile.fs-item-selected {
    background: color-mix(in srgb, var(--color_primary) 16%, transparent) !important;
    /* !important required on both — the site-wide `* { outline: none
       !important; border: none !important; }` reset (ui_style.php ~line
       199) otherwise wins regardless of this selector's specificity,
       same landmine .wall-entry.jk-focused's own comment already
       documents. Confirmed via CDP computed-style: outline-style came
       back "none" despite this rule being present and parsed. */
    outline: 1px solid color-mix(in srgb, var(--color_primary) 55%, transparent) !important;
    outline-offset: -1px;
}

.fs-icon-thumb {
    font-size: 2.6rem;
    line-height: 1;
    width: 72px;
    height: 60px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.fs-icon-name {
    width: 100%;
    font-size: 0.78rem;
    text-align: center;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--color_text_normal);
    line-height: 1.3;
}

.fs-icon-tile-folder .fs-icon-name,
.fs-list-row-folder .fs-li-name {
    font-weight: 600;
}

.fs-grid.view-list {
    display: flex;
    flex-direction: column;
    padding: 0;
}

.fs-list-row {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 4px 12px;
    cursor: pointer;
    font-size: 0.83rem;
    white-space: nowrap;
    overflow: hidden;
    user-select: none;
    transition: background 0.1s;
}

.fs-list-row:hover { background: transparent !important; }
.fs-list-row.fs-item-selected { background: color-mix(in srgb, var(--color_primary) 14%, transparent) !important; }

.fs-li-icon   { font-size: 1rem; flex-shrink: 0; width: 20px; text-align: center; }
.fs-li-name   { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--color_text_normal); }
.fs-li-badges { display: flex; gap: 4px; flex-shrink: 0; }
.fs-li-size   { font-size: 0.78rem; color: var(--text_dim) !important; flex-shrink: 0; width: 64px; text-align: right; }
.fs-li-date   { font-size: 0.78rem; color: var(--text_dim) !important; flex-shrink: 0; width: 80px; text-align: right; }

.fs-grid.view-details { padding: 0; display: block; }

.fs-details-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.83rem;
}

.fs-details-table thead { position: sticky; top: 0; z-index: 1; }

.fs-details-table th {
    padding: 4px 10px;
    text-align: left;
    font-weight: 600;
    font-size: 0.78rem;
    letter-spacing: 0.03em;
    background: transparent !important;
    white-space: nowrap;
    user-select: none;
}

.fs-details-table td {
    padding: 3px 10px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 0;
}

.fs-details-table tr { cursor: pointer; }
.fs-details-table tr:hover td { background: transparent !important; }
.fs-details-table tr.fs-item-selected td { background: color-mix(in srgb, var(--color_primary) 14%, transparent) !important; }

.fs-td-icon { width: 28px !important; max-width: 28px !important; text-align: center; font-size: 1rem; }
.fs-td-name { width: 35%; }
.fs-td-type { width: 12%; }
.fs-td-size { width: 10%; text-align: right !important; }
.fs-td-vis  { width: 10%; }
.fs-td-date { width: 18%; }

.vault-inner {
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.vault-hint {
    font-size: 0.84rem !important;
    opacity: 0.6;
    line-height: 1.65 !important;
    padding-left: 10px;
    margin: 0 !important;
}

.vault-locked-form { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }

.vault-passphrase-input {
    flex: 1;
    width: auto !important;       /* override global input[type=password] width:100% */
    height: 38px;
    padding: 0 14px !important;
    background: color-mix(in srgb, var(--color_border) 15%, transparent) !important;
    border: 1px solid var(--color_border) !important;
    border-radius: var(--theme-radius-xs);
    color: var(--color_text_normal) !important;
    font-size: 0.9rem !important;
    font-family: inherit;
    min-width: 200px;
}

.vault-passphrase-input:focus, [data-role~="vault-passphrase-input"]:focus{
    border-color: var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 8%, transparent) !important;
    outline: none !important;
}

.vault-pp-err {
    width: 100%;
    margin: 4px 0 0 0 !important;
    padding: 0 !important;
    font-size: 0.8rem !important;
    color: var(--color_warn) !important;
}

.vault-toolbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }

#fs_statusbar {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 10px;
    height: 24px;
    background: transparent !important;
    font-size: 0.76rem;
    color: var(--text_dim);
    gap: 10px;
}

#fs_status_msg {
    flex: 1;
    text-align: center;
    font-size: 0.76rem !important;
    padding: 0 !important;
    background: transparent !important;
    color: var(--color_text_normal) !important;
}

.fs-status-err { color: var(--color_secondary) !important; }

#fs_sel_info {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 30%;
    text-align: right;
}

.fs-empty {
    display: block;
    font-size: 0.88rem !important;
    opacity: 0.4;
    padding: 40px 24px;
    text-align: center;
    width: 100%;
}


.fs-badge {
    display: inline-block;
    padding: 1px 6px;
    font-size: 0.7rem !important;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    font-weight: 700;
    border-radius: var(--theme-radius-xs);
}

.fs-badge-pub {
    background: transparent !important;
    color: var(--info) !important;
}

.fs-badge-prv {
    background: transparent !important;
    color: var(--text_dim) !important;
}

.fs-badge-lock { font-size: 0.82rem !important; padding: 0; background: none; border: none; }

.fs-badge-share {
    background: transparent !important;
    color: var(--color_primary) !important;
}

.fs-icon-badges {
    display: flex;
    flex-wrap: wrap;
    gap: 3px;
    justify-content: center;
}

.fs-row {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    padding: 8px 12px;
    flex-wrap: wrap;
}

.fs-row:hover { background: transparent !important; }

.fs-row-info { display: flex; flex-direction: column; gap: 3px; flex: 1; min-width: 0; }

.fs-row-name {
    font-size: 0.88rem !important;
    font-weight: 600;
    color: var(--color_text_stressed) !important;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fs-row-meta { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.fs-row-size { font-size: 0.78rem !important; opacity: 0.5; }
.fs-row-actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }

.fs-dropzone {
    padding: 16px;
    text-align: center;
    cursor: pointer;
    font-size: 0.88rem !important;
    opacity: 0.75;
    transition: border-color 0.12s, background 0.12s;
}

.fs-dropzone:hover, .fs-dropzone-over {
    background: transparent !important;
    opacity: 1;
}

.fs-browse-label { color: var(--color_primary) !important; cursor: pointer; text-decoration: underline; }
.fs-file-input { display: none; }
.fs-selected-name { font-size: 0.82rem !important; opacity: 0.65; margin: 4px 0 0 !important; }

.fs-progress { display: flex; flex-direction: column; gap: 5px; }
.fs-progress-bar { height: 3px; background: transparent !important; overflow: hidden; }
.fs-progress-fill { height: 100%; background: transparent !important; width: 0; transition: width 0.2s ease; }

@media (max-width: 767px) {
    #fs_nav_toggle { display: flex; }

    .fs-toolbar-sep,
    #fs_view_details { display: none; }

    #fs_upload_toggle {
        font-size: 0 !important;
        padding: 0 !important;
        width: 38px !important;
    }
    #fs_upload_toggle::before { content: '\2B06'; font-size: 1rem; }

    #fs_filter { width: 70px !important; flex-shrink: 1 !important; min-width: 0 !important; }

    #fs_body { position: relative; }

    #fs_nav {
        position: absolute;
        top: 0; left: -180px; bottom: 0;
        z-index: 10;
        transition: left 0.2s ease;
    }

    #fs_body.nav-open #fs_nav { left: 0; }

    #fs_body.nav-open::after {
        content: '';
        position: absolute;
        inset: 0;
        z-index: 9;
        background: rgba(0, 0, 0, 0.4);
    }
}


/* ═══════════════════════════════════════════════════════════════
   File manager
   ═══════════════════════════════════════════════════════════════ */
/* ── Page setup ─────────────────────────────────────────────────── */
html:has(#fm_main), html:has(#fm_main) body {
    height: 100%;
    margin: 0;
    padding: 0 !important;
    overflow: hidden;
    background: transparent !important;
    max-width: none !important;
}

*, *::before, *::after { box-sizing: border-box; }
[hidden] { display: none !important; }

html:has(#fm_main) body {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: transparent !important;
    color: var(--color_text_normal);
    opacity: 0;
}

/* ── Toolbar ───────────────────────────────────────────────────── */
#fm_top {
    position: relative !important;
    flex-shrink: 0;
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 8px !important;
    padding: 10px 20px 12px !important;
    height: auto !important;
    min-height: 0 !important;
    background: var(--bg_raised) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius, 8px) !important;
    overflow: visible !important;
    box-sizing: border-box !important;
    width: 100% !important;
    animation: none !important;
    opacity: 1 !important;
    border: none !important;
    flex-wrap: nowrap;
}
#fm_top::before {
    display: block !important;
    content: '' !important;
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 56px !important;
    height: 100% !important;
    background: transparent !important;
    border-radius: var(--theme-radius, 8px) 0 0 var(--theme-radius, 8px) !important;
    z-index: 0 !important;
    pointer-events: none !important;
    animation: none !important;
}

/* Hamburger (traditional) */
.fm-traditional-toggle {
    width: 38px !important;
    padding: 0 !important;
    font-size: 1rem !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    display: none;
    flex-shrink: 0;
}


/* Search input */
#fm_search {
    width: 160px;
    flex-shrink: 0;
    padding: 0 8px;
    background: transparent !important;
    color: var(--color_text_normal);
    font-size: 0.82rem;
    font-family: inherit;
    align-self: center;
    line-height: 26px;
    height: 26px;
}
#fm_search:focus { background: transparent !important; }
#fm_search::placeholder { color: var(--text_dim); opacity: 0.6; }

/* Reload button */
#fm_reload {
    height: 26px !important;
    min-height: 0 !important;
    padding: 0 10px !important;
    font-size: 0.8rem !important;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    cursor: pointer;
    border-radius: var(--theme-radius-xs) !important;
    flex-shrink: 0;
    font-family: inherit;
    align-self: center;
    white-space: nowrap;
}
#fm_reload:hover {
    background: transparent !important;
    color: var(--accent) !important;
}

/* ── Main body ──────────────────────────────────────────────────── */
#fm_main {
    flex: 1;
    display: flex;
    overflow: hidden;
    min-height: 0;
    position: relative;
    padding: 0 !important;
}

/* ── Tree sidebar ───────────────────────────────────────────────── */
#fm_tree {
    flex: 0 0 180px;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 4px 0 !important;
    background: transparent !important;
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
}

.fm-group-label {
    padding: 12px 10px 3px;
    font-size: 0.72rem;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--text_dim);
    user-select: none;
    cursor: pointer;
}
.fm-group-label .fm-caret { display: inline-block; width: 12px; }

.fm-file {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 4px 8px 4px 12px;
    cursor: pointer;
    font-size: 0.83rem;
    color: var(--color_text_normal);
    white-space: nowrap;
    overflow: hidden;
    user-select: none;
}
.fm-file:hover { background: transparent !important; }
.fm-file.active {
    background: transparent !important;
    color: var(--accent) !important;
}
.fm-ico { font-size: 0.95rem; flex-shrink: 0; }
.fm-nm  { flex: 1; overflow: hidden; text-overflow: ellipsis; min-width: 0; }

.fm-msg { opacity: 0.5; padding: 8px; font-size: 0.83rem; }

/* ── Viewer pane ────────────────────────────────────────────────── */
#fm_view {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    min-width: 0;
    background: transparent !important;
    padding: 0 !important;
}

#fm_view_head {
    display: none;
    align-items: center;
    gap: 12px;
    padding: 6px 12px !important;
    flex-shrink: 0;
    background: transparent !important;
    flex-wrap: wrap;
}
#fm_view_name { font-weight: 600; font-size: 0.85rem; word-break: break-all; }
#fm_view_meta { font-size: 0.74rem; opacity: 0.65; }

#fm_dl {
    padding: 0 12px;
    height: 26px;
    border-radius: var(--theme-radius-xs);
    text-decoration: none;
    font-size: 0.8rem;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-left: auto;
    flex-shrink: 0;
    white-space: nowrap;
    cursor: pointer;
}
#fm_dl:hover {
    background: transparent !important;
    color: var(--accent) !important;
}

#fm_view_body {
    flex: 1;
    min-height: 0;
    overflow: auto;
    padding: 16px !important;
    display: flex;
    align-items: flex-start;
    justify-content: center;
}
#fm_view_body img, #fm_view_body video { max-width: 100%; max-height: 78vh; }
#fm_view_body audio { width: 100%; }
#fm_view_body pre { width: 100%; white-space: pre-wrap; word-break: break-word; font-size: 0.8rem; }

#fm_view_empty {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 1;
    padding: 40px 20px;
    text-align: center;
    color: var(--text_dim);
    font-size: 0.85rem;
    opacity: 0.7;
}

/* ── Traditional: sidebar drawer ─────────────────────────────────────── */
@media (max-width: 767px) {
    .fm-traditional-toggle { display: flex; }
    #fm_search { width: 70px; flex-shrink: 1; min-width: 0; }
    #fm_tree {
        position: absolute;
        top: 0; left: -180px; bottom: 0;
        z-index: 10;
        transition: left 0.2s ease;
        background: transparent !important;
    }
    #fm_tree.open { left: 0; }
    #fm_main::after {
        content: ;
        position: absolute;
        inset: 0;
        z-index: 9;
        background: rgba(0, 0, 0, 0.4);
        display: none;
        pointer-events: none;
    }
    #fm_tree.open ~ * + #fm_main::after { display: block; }
}


/* ═══════════════════════════════════════════════════════════════
   Msgbase
   ═══════════════════════════════════════════════════════════════ */
/* ── msgbase token aliases → canonical theme tokens ─────────── */
:root {
    --mb-bg:      var(--theme-color-bg);
    --mb-bg-dark: var(--theme-color-bg-dark);
    --mb-panel:   var(--theme-panel-bg);
    --mb-fg:      var(--color_text_normal);
    --mb-primary: var(--color_primary);
    --mb-accent:  var(--color_text_stressed);
    --mb-dim:     color-mix(in srgb, var(--color_text_normal) 42%, var(--mix));
    --mb-border:  var(--color_primary);
    --mb-glass:   1px solid color-mix(in srgb, var(--color_primary) 40%, var(--mix));
    --mb-hover:   color-mix(in srgb, var(--color_primary) 9%, var(--mix));
    --mb-sel:     color-mix(in srgb, var(--color_primary) 17%, var(--mix));
    --mb-err:     var(--color_secondary);
    --mb-in-bg:   transparent;
    --mb-shadow:  var(--theme-panel-shadow);
    --mb-radius:  0;
}


* { box-sizing: border-box; margin: 0; padding: 0; }

/* msgbase has its own token set (no emitter) — add selection highlight directly */
::selection {
    background: color-mix(in srgb, var(--mb-primary) 30%, var(--mix));
}

html:has(#mb_app), html:has(#mb_app) body {
    height: 100%;
    background: transparent;
    color: var(--mb-fg);
    font-family: var(--font-heading);
    font-size: 1.05rem;
    line-height: 1.6;
}

html.in-iframe,
html.in-iframe body {
    background: transparent !important;
}

/* ── App container ───────────────────────────────────── */
#mb_app {
}

.mb-view        { display: none; }
.mb-view.active { display: block; }

/* ── Panel card ──────────────────────────────────────── */

/*
 * ── Page header ───────────────────────────────────────────────
 * background: var(--mb-panel) unifies the msgbase header with all
 * other sub-page headers which use var(--theme-panel-bg).  msgbase
 * uses its own --mb-* token set because it is loaded as a standalone
 * app (not via the emitter), so var(--theme-panel-bg) would resolve
 * to an empty string.  var(--mb-panel) maps to the same navy colour.
 *
 * padding: 20px 0 14px relies on the parent #mb_app padding
 * (1.1rem 2.5rem) to supply the 40px horizontal inset — adding
 * explicit side padding here would double the gap from the viewport.
 * ────────────────────────────────────────────────────────────── */
/* ── Page header ─────────────────────────────────────── */
/* ── Breadcrumb / nav bar ────────────────────────────── */
.mb-crumb {
    display: flex;
    align-items: center;
    gap: .65rem;
    padding: .65rem 1rem;
    background: transparent !important;
    border-radius: var(--mb-radius);
    box-shadow: none;
    margin-bottom: .75rem;
}
.mb-crumb-title {
    color: var(--mb-primary);
    font-size: .95rem;
    font-weight: 600;
}

/* ── Base card grid ──────────────────────────────────── */
.mb-bases-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: .75rem;
    margin-bottom: .75rem;
}
.mb-base-card {
    background: transparent !important;
    border-radius: var(--mb-radius);
    padding: 1rem 1.1rem;
    cursor: pointer;
    transition: background .14s, border-color .14s, transform .12s, box-shadow .14s;
    box-shadow: none;
    display: flex;
    flex-direction: column;
    gap: .3rem;
}
.mb-base-card:hover {
    background: transparent !important;
    transform: translateY(-2px);
    box-shadow: none;
}
.mb-base-card-name {
    font-size: .95rem;
    font-weight: 600;
    color: var(--mb-primary);
}
.mb-base-card-desc {
    font-size: .82rem;
    color: var(--mb-dim);
    flex: 1;
    min-height: 1.4rem;
}
.mb-base-card-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: .45rem;
    padding-top: .45rem;
    font-size: .8rem;
}
.mb-base-card-count {
    color: var(--mb-accent);
    font-weight: 500;
}

/* ── Message list table wrapper ──────────────────────── */
.mb-table-wrap {
    background: transparent !important;
    border-radius: var(--mb-radius);
    box-shadow: none;
    overflow: hidden;
    margin-bottom: .75rem;
}

/* ── Table ───────────────────────────────────────────── */
.mb-table {
    width: 100%;
    border-collapse: collapse;
    font-size: .95rem;
}
.mb-table thead tr {
    background: transparent !important;
    color: var(--mb-dim);
    text-transform: uppercase;
    font-size: .8rem;
    letter-spacing: .07em;
}
.mb-table th,
.mb-table td {
    padding: .65rem 1rem;
    text-align: left;
}
.mb-table th { font-weight: 500; }
.mb-table tbody tr {
    cursor: pointer;
    transition: background .12s;
}
.mb-avatar-cell { width: 2.8rem; }
.mb-avatar {
    width: 2.2rem;
    height: 2.2rem;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    color: var(--mb-primary);
    font-size: .88rem;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    text-transform: uppercase;
    flex-shrink: 0;
}
.mb-msg-participants { color: var(--mb-accent); font-size: .94rem; }
.mb-msg-participants .mb-arrow { color: var(--mb-dim); margin: 0 .2rem; }
.mb-msg-subj-cell { color: var(--mb-fg); }
.mb-msg-reply-icon { color: var(--mb-dim); font-size: .88rem; margin-left: .3rem; }
.mb-msg-date-cell { width: 6rem; color: var(--mb-dim); font-size: .88rem; text-align: right; }

/* ── Toolbar ─────────────────────────────────────────── */
.mb-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .5rem;
    padding: .6rem .9rem;
    background: transparent !important;
    border-radius: var(--mb-radius);
    box-shadow: none;
    margin-bottom: .75rem;
}
.mb-toolbar-right { margin-left: auto; }

/* ── Buttons ─────────────────────────────────────────── */
.mb-btn {
    gap: .3rem;
    width: auto;
    text-align: left;
    margin: 0 !important;
}
.mb-btn-back {
    opacity: 0.65;
}
.mb-btn:disabled, [data-role~="mb-btn"]:disabled{
    opacity: .35;
    cursor: default;
    pointer-events: none;
}
.mb-btn-notif {
    margin-left: auto;
}

/* ── Message detail card ─────────────────────────────── */
.mb-msg-card {
    background: transparent !important;
    border-radius: var(--mb-radius);
    box-shadow: none;
    overflow: hidden;
    margin-bottom: .75rem;
}
.mb-msg-hdr {
    padding: .9rem 1.4rem;
    font-size: .96rem;
}
.mb-msg-hdr-row {
    display: flex;
    align-items: baseline;
    gap: .5rem;
    line-height: 2;
}
.mb-msg-hdr-label {
    color: var(--mb-dim);
    min-width: 4.5rem;
    flex-shrink: 0;
    font-size: .84rem;
    text-transform: uppercase;
    letter-spacing: .06em;
}
.mb-msg-hdr-val  { color: var(--mb-accent); font-weight: 500; }
.mb-msg-hdr-subj { color: var(--mb-fg); font-weight: 600; }

.mb-msg-body {
    padding: 1.2rem 1.4rem;
    background: transparent !important;
    color: var(--mb-fg);
    font-family: inherit;
    font-size: 1rem;
    line-height: 1.75;
    white-space: pre-wrap;
    word-break: break-word;
    min-height: 8rem;
}

.mb-msg-actions {
    display: flex;
    flex-wrap: wrap;
    gap: .45rem;
    padding: .6rem 1rem;
    background: transparent !important;
}

/* ── Inline edit ─────────────────────────────────────── */
.mb-edit-wrap {
    background: transparent !important;
    border-radius: var(--mb-radius);
    box-shadow: none;
    padding: .9rem 1.1rem;
    margin-bottom: .75rem;
}
.mb-edit-label {
    font-size: .85rem;
    color: var(--mb-dim);
    text-transform: uppercase;
    letter-spacing: .06em;
    margin-bottom: .5rem;
}
.mb-ta {
    display: block;
    width: 100%;
    background: transparent !important;
    color: var(--mb-fg);
    font-family: inherit;
    font-size: .89rem;
    border-radius: var(--theme-radius-xs);
    padding: .5rem .75rem;
    resize: vertical;
    line-height: 1.65;
    min-height: auto;
    min-width: auto;
    margin: 0 0 .5rem;
    text-align: left;
    box-sizing: border-box;
    transition: border-color .14s, box-shadow .14s;
}
/* Edit composer sits a touch lower (migrated from inline style). */
#mb_edit_ta { margin: .4rem 0 .5rem; }
.mb-ta:focus, [data-role~="mb-ta"]:focus{
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--mb-primary) 18%, var(--mix));
}

.mb-compose-actions {
    display: flex;
    flex-wrap: wrap;
    gap: .45rem;
    margin-top: .6rem;
}

/* ── Compose / reply form ────────────────────────────── */
.mb-compose {
    background: transparent !important;
    border-radius: var(--mb-radius);
    overflow: hidden;
    margin-bottom: .75rem;
    box-shadow: none;
}
.mb-compose-hdr {
    padding: .6rem 1.2rem;
    color: var(--mb-primary);
    font-size: .88rem;
    font-weight: 600;
    letter-spacing: .07em;
    text-transform: uppercase;
}
.mb-compose-body    { padding: .9rem 1.1rem; }
.mb-compose-row {
    display: flex;
    align-items: center;
    gap: .6rem;
    margin-bottom: .55rem;
    font-size: .87rem;
}
.mb-compose-label {
    width: 5rem;
    color: var(--mb-dim);
    flex-shrink: 0;
    font-size: .84rem;
    text-transform: uppercase;
    letter-spacing: .05em;
}
.mb-in {
    flex: 1 !important;
    width: auto !important;
    min-width: 0 !important;
    margin: 0 !important;
}

/* ── Add base form ───────────────────────────────────── */
.mb-add-base {
    background: transparent !important;
    border-radius: var(--mb-radius);
    box-shadow: none;
    padding: .9rem 1.1rem;
    margin-bottom: .75rem;
    font-size: .87rem;
}
.mb-add-base .mb-compose-row { margin-bottom: .45rem; }

/* ── Edited badge ────────────────────────────────────── */
.mb-edited { font-size: .76rem; color: var(--mb-dim); margin-left: .4rem; }

/* ── Status messages ─────────────────────────────────── */
.mb-status {
    padding: .3rem .5rem;
    font-size: .82rem;
    min-height: 1.5rem;
}
.mb-status.ok  { color: var(--mb-primary); }
.mb-status.err { color: var(--mb-err); }

/* ── Loading / empty states ──────────────────────────── */
.mb-loading { color: var(--mb-dim); padding: .9rem 1rem; font-size: .86rem; }
.mb-empty {
    padding: 2.5rem 1.5rem;
    text-align: center;
    color: var(--mb-dim);
    font-size: .88rem;
    background: transparent !important;
    border-radius: var(--mb-radius);
    margin-bottom: .75rem;
}
/* loading inside table cell */
td.mb-loading { padding: 1.2rem; }
td.mb-empty   { padding: 2rem; text-align: center; }

/* ── Traditional ──────────────────────────────────────────── */
@media (max-width: 600px) {
    #mb_app {
        padding: .6rem .75rem 3rem;
    }


    #mb_top .mb-view-btn,

    .mb-table {
        font-size: .82rem;
    }

    .mb-table th,
    .mb-table td {
        padding: 10px 8px !important;
    }


    .mb-msg-body {
        font-size: .86rem;
        padding: 14px 12px;
    }

    .mb-compose textarea {
        font-size: 1.23rem !important;
        min-height: 120px;
    }

    .mb-compose input[type="text"],
    .mb-compose input[type="email"],
    .mb-compose select {
        font-size: 1.23rem !important;
        height: 44px !important;
        min-height: 44px !important;
    }

    .mb-compose button[type="submit"],
    .mb-compose .mb-btn {
        height: 44px !important;
        min-height: 44px !important;
        width: 100% !important;
        font-size: 1.08rem !important;
    }

}

/* ── Attachment rendering ──────────────────────────────────── */
.msg-attach { margin-top: 8px; }
.msg-attach-img { max-width: 100%; max-height: 320px; border-radius: var(--theme-radius-xs); display: block; cursor: zoom-in; }
.msg-attach-audio { width: 100%; max-width: 360px; display: block; }
.msg-attach-video { max-width: 100%; max-height: 320px; display: block; border-radius: var(--theme-radius-xs); }
.msg-attach-file { color: var(--mb-primary); text-decoration: none; font-size: 1rem; }
.msg-attach-file:hover, [data-role~="msg-attach-file"]:hover{ text-decoration: underline; }
.msg-attach-lbl { font-size: 0.85rem; color: var(--color_secondary); margin-top: 3px; }

/* Compose attach bar */
.mb-attach-bar { display: flex; align-items: center; gap: 6px; padding: 4px 2px; font-size: 0.92rem; color: var(--mb-primary); margin-bottom: 4px; }
.mb-attach-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mb-attach-clr { background: transparent !important; border: 1px solid var(--color_primary); border-radius: var(--theme-radius-xs); color: var(--color_text_stressed); cursor: pointer; font-size: 0.85rem; padding: 0 8px; height: 28px; display: inline-flex; align-items: center; }
@keyframes _mb_rec_blink { 0%,100%{opacity:1} 50%{opacity:0.4} }

/* ── Sender avatar image overlay (falls back to initial on 404) ──── */
.mb-avatar { position: relative; overflow: hidden; }
.mb-avatar .lb-av-overlay { display: none; }
.mb-avatar.lb-av-on { color: transparent; }
.mb-avatar.lb-av-on .lb-av-overlay {
    display: block; position: absolute; inset: 0;
    width: 100%; height: 100%; object-fit: cover;
}

/* ── X-Files redesign: headings use the case-file typewriter face ── */
h1, h2, h3, .mb-crumb-title, #mb_base_title {
    font-family: var(--font-heading) !important;
}

/* ── Traditional-first responsive ────────────────────────────────────── */
html:has(#mb_app), html:has(#mb_app) body { min-height: 100dvh; }

@media (max-width: 767px) {
    #mb_app { padding: 0 !important; }
    .mb-row, .mb-msg-row { min-height: 44px; }
    .mb-msg-body { padding: .6rem 16px; word-break: break-word; }
    .mb-compose { border-radius: var(--theme-radius-xs); margin: 8px; }
    .mb-compose-body input,
    .mb-compose-body textarea { font-size: 1.23rem !important; }
    .mb-compose-actions button { min-height: 44px; }
    .mb-crumb, .mb-panel, .mb-card { border-radius: var(--theme-radius-xs) !important; }
    .mb-crumb { font-size: 0.92rem; padding: .5rem 16px; }
    .mb-msg-date-cell { display: none; }
}

@media (min-width: 480px) {
    .mb-msg-date-cell { display: table-cell; }
}

@media (min-width: 768px) {
    #mb_app { padding: 1.1rem 2.5rem; }
}

/* Standalone PWA mode — extra top padding for the status bar; browser chrome gone */
@media (display-mode: standalone) {
    html:has(#mb_app), html:has(#mb_app) body { padding-top: env(safe-area-inset-top); }
}


/* ═══════════════════════════════════════════════════════════════
   Wall
   ═══════════════════════════════════════════════════════════════ */
html:has(.wall-grid) {
    background: transparent;
    background-image: none;
    box-sizing: border-box;
    font-size: clamp(13px, 1.2vw, 15px) !important;

    &.standalone,
    &.standalone body {
        background: transparent !important;
        background-image: none !important;
    }
}

*,
*:before,
*:after {
    box-sizing: inherit;
}

html:has(.wall-grid) body {
    background: transparent;
    opacity: 0;
    overflow: hidden;
    margin: 0;
    padding: 0;
    /* Entries scroll within .wall-grid itself, not the page — body is a
       fixed-height column (header, then grid filling the rest) so the
       header stays pinned while .wall-grid owns the feed's one
       scrollbar (vertically, between posts). */
    height: 100dvh;
    display: flex;
    flex-direction: column;
}

/* -----------------------------
 * Wall Components
 * ----------------------------- */
#overlay-backdrop {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background: transparent !important;
    z-index: 9998;
}

#wall-page-header {
    display: flex;
    flex-direction: row;
    align-items: center !important;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
    width: 100%;
    box-sizing: border-box;
    padding: 12px 20px !important;
    margin: 0 !important;
    background: transparent !important;
    backdrop-filter: none !important;
    border-radius: var(--theme-radius-xs) !important;
    box-shadow: none !important;
    animation: none !important;
    opacity: 1 !important;
}

#wall-page-header-left {
    display: flex;
    flex-direction: column;
    gap: 4px;
    text-align: left;
    min-width: 0;
}

#wall-page-header-right {
    position: relative;
    display: flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
    padding-right: 8px;
}

#wall-search-wrap {
    position: relative;
    display: flex;
    align-items: center;
}

#wall-search {
    height: 38px;
    padding: 0 32px 0 12px;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    color: var(--color_text_normal);
    font-family: inherit;
    font-size: 0.85rem;
    letter-spacing: 0.04em;
    width: clamp(140px, 50vw, 220px);
    box-sizing: border-box;
    transition: border-color 0.15s ease, width 0.22s ease;
    -webkit-appearance: none;
    appearance: none;

    &:focus {
        width: clamp(160px, 60vw, 280px);
    }
    &::-webkit-search-cancel-button { display: none; }
}

#wall-search-clear {
    position: absolute;
    right: 6px;
    width: 22px;
    height: 22px;
    padding: 0;
    background: none;
    color: var(--color_text_normal);
    opacity: 0.45;
    cursor: pointer;
    font-size: 0.85rem;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: unset;

    &:hover { opacity: 1; }
}

.search-hidden { display: none !important; }

#wall-tag-filter {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 7px 20px;
    overflow-x: auto;
    overflow-y: hidden;
    background: transparent !important;
    scrollbar-width: thin;
    scrollbar-color: var(--color_border) transparent;
    flex-shrink: 0;
    -webkit-overflow-scrolling: touch;
}

[data-role~="wall-tag-chip"] {
    flex-shrink: 0 !important;
    padding: 0 14px !important;
    white-space: nowrap !important;
    margin: 0 !important;
    font-size: 0.78rem !important;

    &.active {
        color: var(--color_primary) !important;
        border-color: color-mix(in srgb, var(--color_primary) 50%, transparent) !important;
    }
}

#wall-page-title {
    margin: 0 !important;
    font-size: 1.38rem !important;
    font-weight: bold !important;
    /* Was uppercase + 0.16em tracking — reads as a heading now, not a
       HUD-style label. */
    letter-spacing: 0.01em !important;
    text-transform: none !important;
    color: var(--color_text_stressed) !important;
    padding-left: 10px !important;
}


#wall-page-meta {
    font-size: 0.92rem !important;
    opacity: 0.45;
    padding-left: 13px;
    letter-spacing: 0.06em;
    white-space: nowrap;
}

.wall-grid {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 30px;
    width: 100%;
    /* Fills whatever vertical space remains under the header (see
       html:has(.wall-grid) body) and scrolls its own column vertically —
       the page itself no longer scrolls (that's still handled by this
       element, not the body, so the header stays pinned above it). */
    flex: 1 1 auto;
    min-height: 0;
    padding-top: 24px;
    padding-bottom: 24px;
    padding-left: max(clamp(16px, 4vw, 48px), env(safe-area-inset-left));
    padding-right: max(clamp(16px, 4vw, 48px), env(safe-area-inset-right));
    box-sizing: border-box;
    overflow-x: hidden;
    overflow-y: auto;
    scroll-snap-type: y proximity;
    -webkit-overflow-scrolling: touch;
}
.wall-grid:empty { display: none; }

.wall-entry {
    position: relative;
    cursor: default;
    text-align: center;
    /* Softened from the sitewide flat/sharp-corner default — a small
       radius reads as more current without abandoning the HUD identity. */
    border-radius: 14px !important;
    /* Airier fluid padding: shrinks to a 24px/28px traditional floor, grows to a
       36px/40px desktop ceiling — more breathing room than the previous
       18px/22px-28px/32px range. */
    padding: clamp(24px, 4.5vw, 36px) clamp(24px, 4.5vw, 36px) clamp(28px, 5vw, 40px) clamp(24px, 4.5vw, 36px) !important;
    box-sizing: border-box;
    overflow-wrap: break-word;
    scroll-margin-top: 24px;
    scroll-snap-align: start;
    min-width: 0;
    /* Was flat var(--bg_raised)/box-shadow:none — this rule's own
       !important always overrode the shared panel-system rule above
       (even before that rule had glass), so Wall entries need their own
       glass treatment here too rather than relying on the shared one.
       Tier 1 (2026-08-19) — real content, stays readable. */
    background: color-mix(in srgb, var(--bg_raised) 88%, transparent) !important;
    backdrop-filter: var(--glass-blur-1) !important;
    -webkit-backdrop-filter: var(--glass-blur-1) !important;
    border: none !important;
    box-shadow: var(--elevation-2) !important;
    contain-intrinsic-size: 380px 0;
    display: block !important;
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
    transition: border-color 0.20s ease, background 0.20s ease !important;
    /* Full-width card (capped so a line of text doesn't stretch
       unreadably wide) in the vertically-scrolling .wall-grid column —
       full natural height, no per-card scrollbar; .wall-grid itself
       handles the one scrollbar for the whole feed. */
    flex: 0 0 auto;
    width: 100%;
    max-width: 940px;

    &:hover {
        background: color-mix(in srgb, var(--bg_hover) 88%, transparent) !important;
        transform: none !important;
        filter: none !important;
    }
}

/* Cancel emitter's neighbour de-focus: filter+transform on sibling entries
   creates GPU compositing layers that corrupt the collage rendering in Chrome */
body:has(.wall-entry:hover) .wall-entry:not(:hover) {
    filter: none !important;
    transform: none !important;
    opacity: 1 !important;
}

/* Isolated single-entry (permalink, ?id=) view — the one card spans the
   full viewport width instead of the usual fixed card width, since it's
   the only thing in the row. */
.wall-entry-full {
    flex: 1 1 100%;
}

.wall-entry {

    & img,
    & video,
    & iframe {
        max-width: 100%;
        border-radius: 8px !important;
    }

}

/* ── Entry header: avatar + meta ────────────────── */
.wall-entry-header {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 22px;
}

.wall-entry-avatar {
    position: relative;
    overflow: hidden;
    width: 40px;
    height: 40px;
    /* Circular avatar — the standard modern convention (also inherited by
       .comment-avatar, which shares this class). */
    border-radius: 50%;
    background: transparent !important;
    margin-right: 12px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: bold;
    font-size: 1.23rem;
    text-transform: uppercase;

    &.lb-av-on {
        color: transparent !important;
        background: none !important;
        box-shadow: none !important;

        & .lb-av-overlay {
            display: block !important; 
            position: absolute !important; 
            inset: 0 !important;
            width: 100% !important;  
            height: 100% !important;
            max-width: 100% !important;
            max-height: 100% !important;
            object-fit: contain !important; 
            border-radius: inherit;
        }
    }
}

.lb-av-overlay { 
    display: none; 
    width: 100% !important; 
    height: 100% !important; 
    object-fit: contain !important;
}

.wall-entry-meta {
    display: flex;
    flex-direction: column;
    text-align: center;
    align-items: center;
    line-height: 1.3;
}

.wall-entry-author {
    font-weight: bold;
    font-size: 1.23rem;
    color: var(--color_text_stressed);
}

.wall-entry-date {
    font-size: 1rem;
    opacity: 0.5;
    letter-spacing: 0.02em;
}

/* ── Entry content ──────────────────────────────── */
.wall-entry-title {
    padding-right: 30px;
}

.wall-body {
    margin-bottom: 20px !important;
    /* Fluid replacement for the old fixed-rem value that used to be
       stepped down again at 767px/480px — see readability-cap comment
       below for the accompanying line-length constraint. */
    font-size: clamp(14px, 3vw, 19px) !important;
    line-height: 1.8 !important;
    text-align: center;
    /* Readability cap: prevent prose from stretching edge-to-edge inside
       wide cards; margin:auto keeps it centered when narrower than the
       card itself. */
    max-width: clamp(45ch, 90vw, 75ch);
    margin-left: auto;
    margin-right: auto;

    & > div:not(:has(img)):not(:has(video)) {
        text-align: left;
    }

}

.wall-entry-tags {
    font-size: 1.08rem;
    color: var(--color_primary);
    opacity: 0.65;
    margin-top: 20px;
    margin-bottom: 12px;
    letter-spacing: 0.02em;
}

/* ── Entry footer: share buttons ────────────────── */
.wall-entry-footer {
    padding-top: 12px;
    margin-top: 16px;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    justify-content: space-between;
}

/* Compact circular icon buttons (share/edit/permalink) — visual shape now
   comes from the shared .lb-btn-icon class; this rule only keeps the
   properties .lb-btn-icon doesn't provide (stacking above the media
   carousel). aria-label carries the meaning since there's no visible text;
   the wall-*-btn data-role attributes are unchanged JS/CSS hooks. */
.wall-action-btn {
    z-index: 2;
    position: relative;
}
.wall-action-btn[data-role~="wall-edit-btn"] {
    margin-left: auto !important;
}
/* The permalink action is a real <button>, unlike its <a>-based share/edit
   siblings — needs the same html.in-iframe specificity bump as the tag
   chips above, or the sitewide button-flattening rule wins. */
html.in-iframe button.wall-action-btn {
    border-radius: 50% !important;
}

/* ── Comments section ───────────────────────────── */
.wall-comments-section {
    margin-top: 20px !important;
    padding-top: 14px !important;
}

.wall-comments-title {
    margin: 0 0 10px 0;
    font-size: 1.23rem !important;
    font-weight: bold !important;
    letter-spacing: 0.02em;
    text-transform: none;
    opacity: 1;
    color: var(--color_text_stressed);
}

.wall-comments-body {
    margin-top: 4px;
}

.wall-comments-count-label {
    opacity: 0.85;
}

.wall-comments-list {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    margin-bottom: 18px;
}

.wall-comment {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 6px;
    width: 100%;
    /* Was fully transparent — no visible container at all despite the
       "chip" framing elsewhere in this file. A subtle recessed tint plus
       the rounded corners below actually delivers that chip look. */
    background: color-mix(in srgb, var(--bg_dark) 40%, transparent) !important;
    padding: 10px;
    border-radius: 10px;
}

.comment-avatar {
    width: 32px;
    height: 32px;
    font-size: 1.08rem;
    flex-shrink: 0;
    margin-right: 0;
    background: transparent !important;
}

.comment-content {
    flex: 1;
    min-width: 0;
    text-align: center;
    width: 100%;
}

.comment-header {
    font-size: 0.92rem;
    margin-bottom: 4px;
    display: flex;
    justify-content: center;
    gap: 8px;
    flex-wrap: wrap;
}

.comment-author {
    color: var(--color_text_stressed);
    font-weight: bold;
}

.comment-time {
    opacity: 0.45;
    font-size: 0.77rem;
}

.comment-edit-btn {
    opacity: 0.45;
    margin-right: 8px;
    text-decoration: none;
    font-size: 0.77rem;
    cursor: pointer;
    transition: opacity 0.15s ease;

    &:hover { opacity: 1; }
}

.comment-delete-btn {
    opacity: 0.45;
    text-decoration: none;
    font-size: 0.77rem;
    color: color-mix(in srgb, var(--color_secondary) 80%, var(--mix));
    cursor: pointer;
    transition: opacity 0.15s ease, color 0.15s ease;

    &:hover {
        opacity: 1;
        color: var(--color_secondary);
    }
}

.comment-text {
    font-size: 1.08rem;
    line-height: 1.4;
    white-space: pre-wrap;
}

.no-comments-msg {
    font-size: 1.08rem;
    opacity: 0.5;
    font-style: italic;
}

.wall-comment-form {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.comment-input {
    width: 100%;
    min-height: 60px;
    padding: 10px;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    color: var(--color_text_normal);
    font-family: inherit;
    font-size: 1.08rem;
    resize: vertical;
    box-sizing: border-box;
    transition: border-color 0.12s ease;

    &:focus {
        box-shadow: 0 0 0 2px color-mix(in srgb, var(--color_primary) 20%, var(--mix)) !important;
    }
}

.wall-comment-login-msg {
    font-size: 1rem;
    opacity: 0.5;
    text-align: center;
    padding: 10px;
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
}

.wall-entry-placeholder {
    min-height: 200px;
    display: flex;
    justify-content: center;
    align-items: center;
    opacity: 0.5;
    border-radius: var(--theme-radius-xs);
    font-size: 0.92rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    background: transparent !important;
    background-size: 200% 100% !important;
    animation: lb-shimmer 1.4s infinite !important;
}

/* ── Wall: collapsible comments toggle ────────────────────────── */

.wall-comments-toggle {
    display: flex !important;
    align-items: center !important;
    gap: 6px !important;
    width: 100% !important;
    padding: 7px 0 !important;
    background: transparent !important;
    border: none !important;
    border-top: 1px solid color-mix(in srgb, var(--color_border) 60%, transparent) !important;
    color: color-mix(in srgb, var(--color_text_normal) 70%, transparent) !important;
    font-size: 0.9rem !important;
    font-family: inherit !important;
    cursor: pointer !important;
    letter-spacing: 0.04em !important;
    text-align: left !important;
    min-height: unset !important;
    margin-top: 8px !important;
    transition: color 0.15s ease, border-color 0.15s ease !important;

    &:hover {
        color: var(--color_text_normal) !important;
        border-color: color-mix(in srgb, var(--color_border) 90%, transparent) !important;
    }

    &[aria-expanded="true"] {
        color: var(--color_text_normal) !important;
    }
}

.wall-comments-arrow {
    display: inline-block !important;
    font-size: 0.65em !important;
    transition: transform 0.18s ease !important;
    margin-left: auto !important;

    .wall-comments-toggle[aria-expanded="true"] &, [data-role~="wall-comments-toggle"][aria-expanded="true"] &{
        transform: rotate(90deg) !important;
    }
}

.wall-comments-icon {
    font-size: 1em !important;
    opacity: 0.7 !important;
}

/* ── Wall: inline tag buttons ─────────────────────────────────── */

[data-role~="wall-tag-btn"] {
    display: inline-flex !important;
    align-items: center !important;
    padding: 2px 9px !important;
    border-radius: var(--theme-radius-xs) !important;
    background: color-mix(in srgb, var(--color_primary) 10%, transparent) !important;
    border: 1px solid color-mix(in srgb, var(--color_primary) 25%, transparent) !important;
    color: color-mix(in srgb, var(--color_primary) 90%, var(--color_text_normal)) !important;
    font-size: 0.78rem !important;
    font-family: inherit !important;
    cursor: pointer !important;
    min-height: unset !important;
    line-height: 1.5 !important;
    letter-spacing: 0.04em !important;
    transition: background 0.14s ease, color 0.14s ease !important;

    &:hover {
        background: color-mix(in srgb, var(--color_primary) 22%, transparent) !important;
        color: var(--color_primary) !important;
    }
}

/* ── Wall: empty state ────────────────────────────────────────── */

.wall-empty-state {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;
    padding: 80px 20px !important;
    gap: 14px !important;
}

.wall-empty-icon {
    font-size: 2.8rem !important;
    opacity: 0.3 !important;
    line-height: 1 !important;
}

.wall-empty-text {
    font-size: 1.05rem !important;
    opacity: 0.5 !important;
    letter-spacing: 0.02em !important;
}

/* ── Wall: comment reply button ───────────────────────────────── */

.comment-reply-btn {
    opacity: 0.45 !important;
    font-size: 0.77rem !important;
    font-family: inherit !important;
    cursor: pointer !important;
    background: transparent !important;
    border: none !important;
    color: inherit !important;
    padding: 0 !important;
    min-height: unset !important;
    text-decoration: underline !important;
    text-underline-offset: 2px !important;
    transition: opacity 0.15s ease, color 0.15s ease !important;

    &:hover {
        opacity: 1 !important;
        color: var(--color_primary) !important;
    }
}

/* ── Sidebar: RSS link ────────────────────────────────────────── */

.sb-rss-link {
    color: color-mix(in srgb, var(--color_primary) 70%, transparent) !important;
    text-decoration: none !important;
    font-size: inherit !important;
    transition: color 0.14s ease !important;

    &:hover {
        color: var(--color_primary) !important;
        text-decoration: underline !important;
    }
}

.wall-error-container {
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
    padding: 20px;
}

/* ── Sticky jump-to-entry header ────────────────── */
#wall-sticky-header {
    position: sticky;
    top: calc(15px + env(safe-area-inset-top, 0px));
    z-index: 100;
    margin-bottom: 24px;
    text-align: center;
    padding: 14px;

    & label {
        margin-right: 10px;
        font-size: 1.23rem;
    }
}

#entry-selector {
    max-width: 80%;
    cursor: pointer;
}

/* ── Loading splash ─────────────────────────────── */
#loading_splash {
    position: fixed;
    inset: 0;
    background: transparent !important;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 999999;
    font-family: monospace;
    font-size: 0.85rem;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    transition: opacity 0.5s ease;
}

/* ── Media lightbox ─────────────────────────────── */
/* ── Lightbox overlay ────────────────────────────────────────────
   Full-screen dim layer; centres the two-column card.             */
#tactical_lightbox_overlay {
    position: fixed;
    inset: 0;
    background: #000 !important;
    z-index: 999999;
    display: flex;
    justify-content: center;
    align-items: center;
    overflow-y: auto;
    padding: 24px 0;
    cursor: zoom-out;
}

.lightbox-close-btn {
    position: absolute;
    top: 16px;
    right: 20px;
    font-size: 1.54rem;
    line-height: 1;
    cursor: pointer;
    font-family: sans-serif;
    z-index: 1000001;
    width: 36px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    opacity: 0.80;
    color: var(--text);
    transition: opacity 0.15s, background 0.15s;
}
.lightbox-close-btn:hover { opacity: 1; background: transparent !important; }

/* ── Two-column grid card ────────────────────────────────────────
   Left  column → media preview  (1fr, takes remaining space).
   Right column → comments panel (fluid: min 280px, max 36%).
   Grid gives both columns the same height automatically; the card
   itself scales with the viewport via min() so it always fits.    */
#tactical_lightbox_inner_wrapper {
    display: grid;
    grid-template-columns: 1fr minmax(280px, 36%);
    width: min(96vw, 1360px);
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
    overflow: hidden;
    box-shadow: none !important;
    cursor: default;
    margin: auto;
}

/* ── Left column: media ──────────────────────────────────────── */
#tactical_lightbox_media_container {
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 20px;
    background: transparent !important;
    min-width: 0;
    min-height: min(55vh, 560px);
}

#tactical_lightbox_media_container img,
#tactical_lightbox_media_container video {
    display: block !important;
    width: auto !important;
    height: auto !important;
    max-width: 100% !important;
    max-height: min(70vh, 760px) !important;
    object-fit: contain !important;
    border-radius: var(--theme-radius-xs);
    box-shadow: none !important;
    cursor: zoom-in;
}
#tactical_lightbox_media_container img:fullscreen,
#tactical_lightbox_media_container video:fullscreen,
#tactical_lightbox_media_container img:-webkit-full-screen,
#tactical_lightbox_media_container video:-webkit-full-screen {
    width: 100vw !important;
    height: 100vh !important;
    max-width: 100vw !important;
    max-height: 100vh !important;
    object-fit: contain !important;
    background: #000;
    cursor: zoom-out;
}

/* ── Right column: comments ─────────────────────────────────── */
#tactical_lightbox_comments_container {
    display: flex;
    flex-direction: column;
    background: transparent !important;
    cursor: default;
}

.lb-comments-title {
    flex-shrink: 0;
    padding: 16px 20px 14px;
    font-size: 0.92rem;
    font-weight: bold;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text);
}

#tactical_lightbox_comments_list {
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    min-height: 60px;
}

#tactical_lightbox_comments_form,
.tactical_lightbox_comments_form {
    flex-shrink: 0;
    padding: 14px 18px;
    background: transparent !important;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

#tactical_lightbox_comments_form textarea,
.tactical_lightbox_comments_form textarea {
    width: 100%;
    min-height: 56px;
    max-height: 140px;
    resize: vertical;
    padding: 8px 10px;
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
    color: var(--color_text_normal);
    font-size: 1rem;
    box-sizing: border-box;
}
#tactical_lightbox_comments_form textarea:focus,
.tactical_lightbox_comments_form textarea:focus {
    background: transparent !important;
}
#tactical_lightbox_comments_form button,
.tactical_lightbox_comments_form button {
    align-self: flex-end;
    padding: 7px 20px;
    background: transparent !important;
    border-radius: var(--theme-radius-xs);
    color: var(--color_text_stressed);
    font-size: 0.85rem;
    letter-spacing: 0.10em;
    text-transform: uppercase;
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s;
}
#tactical_lightbox_comments_form button:hover,
.tactical_lightbox_comments_form button:hover {
    background: transparent !important;
}

/* ── Narrow viewports: stack to single column ───────────────── */
@media (max-width: 767px) {
    #tactical_lightbox_overlay {
        padding: 12px 0;
    }
    #tactical_lightbox_inner_wrapper {
        grid-template-columns: 1fr;
        grid-template-rows: auto auto;
        width: 98vw;
        border-radius: var(--theme-radius-xs);
    }
    #tactical_lightbox_media_container {
        min-height: min(45vh, 400px);
    }
    #tactical_lightbox_media_container img,
    #tactical_lightbox_media_container video {
        max-height: min(55vh, 540px) !important;
    }
    #tactical_lightbox_comments_container {
    }
}

/* ── Traditional & Tablet Media Queries ─────────────────── */
@media (max-width: 600px) {
    #wall-page-header {
        padding: max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-left)) 14px !important;
    }

    .wall-grid {
        gap: 14px;
    }

}

/* ── X-Files redesign: heading/body type ── */
#wall-page-title, .wall-entry-title { font-family: var(--font-heading) !important; }

/* ── Traditional-first polish ────────────────────────────────────────── */
@media (max-width: 767px) {
    /* Card panels get rounded corners on traditional */
    .wall-entry { border-radius: var(--theme-radius-xs) !important; }

    /* Input bar full-width with adequate touch targets */
    #wall-new-post-input,
    #wall-post-form textarea { font-size: 1.23rem !important; min-height: 44px; }
    #wall-post-submit { min-height: 44px; }

    /* Comment input */
    .wall-comment-input { font-size: 1.23rem !important; min-height: 44px; }
    .wall-comment-submit { min-height: 44px; }
}

.wall-body { font-family: var(--font-heading); }

/* ══════════════════════════════════════════════════════════════
   MAGAZINE / COLUMN MEDIA LAYOUT
   JS (_build_media_wrap) extracts [data-tactical-id="unit-01"]
   elements from .wall-body into this wrapper. Avatar images sit
   in .wall-entry-avatar (not .wall-body) and are never touched.
   ══════════════════════════════════════════════════════════════ */

/* ── Image Carousel / Slider ─────────────────────────────────────
   One slide visible at a time; a flex track translates horizontally
   via --wm-offset (set by JS).  Prev/next arrows, dot indicators,
   slide counter, and swipe support are all injected by
   index-late-bind.pjs into .wall-media-wrap at page load. ────── */

.wall-media-wrap {
    position: relative;
    overflow: hidden;
    border-radius: 10px;
    margin: 20px 0 4px;
    width: 100%;
    padding: 0;
    background: var(--bg_raised);
    box-shadow: none;
}

/* ── Slide track: moves horizontally via --wm-offset ─────────── */
.wall-media-track {
    display: flex;
    padding: 0;
    transform: translateX(var(--wm-offset, 0%));
    transition: transform 0.40s cubic-bezier(0.25, 0.46, 0.45, 0.94);
    /* No will-change here: pre-promoting the track to a GPU layer causes
       Chrome to misclip overflow:hidden on .wall-media-item children when
       a filter transition fires. The transition already triggers GPU
       promotion automatically for the duration of the animation. */
}

@media (prefers-reduced-motion: reduce) {
    .wall-media-track { transition: none; }
}

/* ── Slide item ─────────────────────────────────────────────────── */
.wall-media-item {
    flex: 0 0 100%;
    min-width: 0;
    position: relative;
    overflow: hidden;
    cursor: pointer;
    padding: 0;
    height: min(480px, 62vw);
    /* Isolate each slide into its own GPU compositing layer so Chrome's
       compositor doesn't bleed filter-transition repaints across slides
       or outside the overflow:hidden boundary of the carousel wrap. */
    backface-visibility: hidden;
    transform: translateZ(0);
}

.wall-media-item > img[data-tactical-id],
.wall-media-item > video[data-tactical-id] {
    display: block !important;
    /* Override inline style="width/height" set by the old editor */
    width: 100% !important;
    height: 100% !important;
    max-width: 100% !important;
    max-height: 100% !important;
    object-fit: cover !important;
    margin: 0 !important;
    padding: 0 !important;
    border-radius: var(--theme-radius-xs);
    box-shadow: none;
    animation: none;
}

/* Cancel site-wide data-tactical-id hover/active/de-focus effects
   inside the carousel — those rules use !important so we must too,
   and our selectors here are more specific (appear later in source). */
.wall-media-item > img[data-tactical-id=unit-01]:hover,
.wall-media-item > video[data-tactical-id=unit-01]:hover,
.wall-media-item > img[data-tactical-id=unit-01]:active,
.wall-media-item > video[data-tactical-id=unit-01]:active {
    transform: none !important;
    box-shadow: none !important;
    z-index: auto !important;
    filter: none !important;
    opacity: 1 !important;
}

body:has([data-tactical-id=unit-01]:hover) .wall-media-item > [data-tactical-id=unit-01]:not(:hover) {
    filter: none !important;
    opacity: 1 !important;
    transform: none !important;
}

/* Bottom vignette — always present at fixed opacity */
.wall-media-item::after {
    content: '';
    position: absolute;
    inset: 0;
    background: transparent;
    opacity: 0.70;
    pointer-events: none;
}

/* Video play-button indicator — fades on hover */
.wall-media-item--video::before {
    content: '\25B6';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    font-size: 2.4rem;
    line-height: 1;
    color: rgba(255,255,255,0.88);
    text-shadow: 0 2px 12px rgba(0,0,0,0.65);
    z-index: 2;
    pointer-events: none;
    transition: opacity 0.22s ease;
}

.wall-media-item--video:hover::before {
    opacity: 0;
}

/* ── Navigation arrows ──────────────────────────────────────────── */
/* _build_media_wrap() (index-late-bind.pjs) gives these buttons
   class="lb-btn" and identifies them via data-role, not a dedicated
   class — selectors below must match on [data-role] accordingly. */
[data-role~="wall-media-prev"],
[data-role~="wall-media-next"] {
    position: absolute !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 10 !important;
    width: 68px !important;
    height: 68px !important;
    border-radius: var(--theme-radius-xs) !important;
    border: 1px solid rgba(255,255,255,0.18) !important;
    background: rgba(0,0,0,0.44) !important;
    color: rgba(255,255,255,0.92) !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    cursor: pointer !important;
    padding: 0 !important;
    margin: 0 !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    font-size: inherit !important;
    font-weight: inherit !important;
    transition: background 0.22s ease, border-color 0.22s ease !important;
    user-select: none;
    -webkit-user-select: none;
}

[data-role~="wall-media-prev"] svg,
[data-role~="wall-media-next"] svg {
    width: 36px;
    height: 36px;
    display: block;
    flex-shrink: 0;
}

[data-role~="wall-media-prev"]:hover,
[data-role~="wall-media-next"]:hover {
    background: rgba(0,0,0,0.68) !important;
    border-color: rgba(255,255,255,0.35) !important;
    color: rgba(255,255,255,0.92) !important;
    transform: translateY(-50%) !important;
    box-shadow: none !important;
    animation: none !important;
}

[data-role~="wall-media-prev"] { left: 10px; }
[data-role~="wall-media-next"] { right: 10px; }

/* ── Dot indicators ─────────────────────────────────────────────── */
.wall-media-dots {
    position: absolute;
    bottom: 12px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    gap: 7px;
    z-index: 10;
}

.wall-media-dot {
    width: 7px;
    height: 7px;
    border-radius: var(--theme-radius-xs);
    background: rgba(255,255,255,0.40);
    cursor: pointer;
    transition: background 0.22s ease, transform 0.22s ease;
}

.wall-media-dot-active {
    background: rgba(255,255,255,0.95);
    transform: scale(1.40);
}

/* ── Slide counter — top-right corner ──────────────────────────── */
.wall-media-counter {
    position: absolute;
    top: 10px;
    right: 12px;
    z-index: 10;
    font-size: 0.80rem;
    letter-spacing: 0.08em;
    /* !important: fixed-dark background, must beat the theme-reactive `*` reset. */
    color: rgba(255,255,255,0.78) !important;
    background: rgba(0,0,0,0.36);
    padding: 2px 9px;
    border-radius: var(--theme-radius-xs);
    pointer-events: none;
    font-variant-numeric: tabular-nums;
}

/* Single item — hide all nav chrome */
.wall-media-wrap:has(.wall-media-track > :only-child) [data-role~="wall-media-prev"],
.wall-media-wrap:has(.wall-media-track > :only-child) [data-role~="wall-media-next"],
.wall-media-wrap:has(.wall-media-track > :only-child) .wall-media-dots,
.wall-media-wrap:has(.wall-media-track > :only-child) .wall-media-counter {
    display: none !important;
}

/* ── Traditional: phone ≤480px ──────────────────────────────────────── */
@media (max-width: 480px) {
    .wall-media-item {
        height: min(300px, 72vw);
    }
    [data-role~="wall-media-prev"],
    [data-role~="wall-media-next"] {
        width: 50px !important;
        height: 50px !important;
    }
    [data-role~="wall-media-prev"] svg,
    [data-role~="wall-media-next"] svg {
        width: 26px;
        height: 26px;
    }
    [data-role~="wall-media-prev"] { left: 6px !important; }
    [data-role~="wall-media-next"] { right: 6px !important; }
}

/* ── Wall page font scaling ───────────────────────────────────── */
/* .wall-body / .wall-entry-title now scale via clamp() on their base rules */
@media (max-width: 767px) {
    .wall-entry-author { font-size: 0.95rem !important; }
    .wall-entry-date   { font-size: 0.75rem !important; }
    .wall-entry-tags   { font-size: 0.8rem !important; }
    .wall-comments-title { font-size: 1.05rem !important; }
    .wall-rx-bar button  { font-size: 0.85rem !important; }
}

@media (max-width: 480px) {
    .wall-entry-author { font-size: 0.88rem !important; }
    .wall-entry-date   { font-size: 0.72rem !important; }
    .wall-entry-tags   { font-size: 0.75rem !important; }
}

/* ══════════════════════════════════════════════════════════════
   POLISH PASS — wall cards, share bar, comments, typography
   ══════════════════════════════════════════════════════════════ */

/* ── Card: HUD left-accent transitions (width is set once, above) ── */
.wall-entry {
    transition: border-left-color 0.25s ease, border-color 0.25s ease, background 0.25s ease !important;
}
.wall-entry:hover {
}

/* ── Author name: accent tint on hover ─────────────────────── */
.wall-entry:hover .wall-entry-author {
    color: var(--color_primary) !important;
    transition: color 0.2s ease;
}

/* ── Title: tighter tracking, fluid size ─────────────────────
   clamp() replaces what used to be three fixed rem values swapped
   at 480px/767px breakpoints, consistent with the sitewide h1-h4
   fluid-heading pattern. */
.wall-entry-title {
    font-size: clamp(15px, 4vw, 23px) !important;
    letter-spacing: 0.04em !important;
    line-height: 1.4 !important;
    margin: 0 0 32px 0 !important;
}

/* ── Tags: chip-style inline badges ────────────────────────── */
.wall-entry-tags {
    font-size: 0.85rem !important;
    letter-spacing: 0.10em !important;
    font-weight: 600 !important;
    opacity: 0.55;
    text-transform: uppercase;
    margin-bottom: 20px !important;
}
/* Pill-shaped tag chips (in-entry tags and the top filter bar) — the
   fully-rounded chip is the modern convention for this kind of small
   toggle/label; kept uppercase, unlike headings/buttons, since these
   really are labels.
   Both the plain attribute selector AND the html.in-iframe-prefixed one
   are needed: these chips are real <button> elements, and the sitewide
   "flatten every button inside the app-shell iframe" rule (html.in-iframe
   button {border-radius:0}) outranks a bare attribute selector on
   specificity — every wall page always runs inside that iframe. */
[data-role~="wall-tag-btn"],
[data-role~="wall-tag-chip"],
html.in-iframe [data-role~="wall-tag-btn"],
html.in-iframe [data-role~="wall-tag-chip"] {
    border-radius: 999px !important;
}

/* ── Footer action buttons — unified token ─────────────────── */
.wall-entry-footer {
    gap: 8px !important;
    padding-top: 18px !important;
    margin-top: 26px !important;
    justify-content: flex-start !important;
}

/* ── Comments section: HUD panel-header treatment ──────────── */
.wall-comments-section {
    margin-top: 28px !important;
    padding-top: 20px !important;
    text-align: left !important;
}
.wall-comments-title {
    /* Was a tiny 0.77rem uppercase HUD-style label; reads as an actual
       section heading now, so it's sized and cased like one. */
    font-size: 0.95rem !important;
    letter-spacing: 0.01em !important;
    text-transform: none !important;
    font-weight: 700 !important;
    color: var(--color_primary) !important;
    padding-left: 8px !important;
    margin: 0 0 16px 0 !important;
    opacity: 0.85;
    text-align: left !important;
    display: block !important;
}

/* ── Comment items: left-accent chip ───────────────────────── */
.wall-comment {
    background: color-mix(in srgb, var(--bg_dark) 40%, transparent) !important;
    padding: 14px 16px !important;
    border-radius: 10px !important;
    gap: 6px !important;
}

/* ── Avatar: slightly more prominent ring ───────────────────── */
.wall-entry-avatar {
    box-shadow: 0 0 0 1px color-mix(in srgb, var(--color_primary) 30%, transparent) !important;
}

/* "Post comment" button — structural layout only; visual from lb-btn element rule */
.wall-comment-form button {
    align-self: flex-end !important;
    flex: none !important;
    margin: 0 !important;
}

/* ── "Log in to post" nudge ─────────────────────────────────── */
.wall-comment-login-msg {
    font-size: 0.92rem !important;
    letter-spacing: 0.02em !important;
    opacity: 0.45;
    background: transparent !important;
    padding: 8px 12px !important;
    text-align: left !important;
}

/* ── Page header: taller, more breathing room ───────────────── */
#wall-page-header {
    padding: 16px 24px !important;
    gap: 10px !important;
}
#wall-page-title {
    font-size: 1.08rem !important;
    letter-spacing: 0.01em !important;
}
#wall-page-meta {
    font-size: 0.85rem !important;
    letter-spacing: 0.08em !important;
    opacity: 0.38;
    padding-left: 14px !important;
    white-space: nowrap;
}

/* ── No-comments message: italic HUD dim text ──────────────── */
.no-comments-msg {
    font-size: 0.92rem !important;
    letter-spacing: 0.02em !important;
    opacity: 0.38;
    font-style: normal !important;
    text-align: left !important;
    padding: 4px 0 !important;
}

@media (max-width: 767px) {
    .wall-entry { max-width: 100% !important; }
    .wall-share-btn,
    .wall-edit-btn,
    .wall-comment-form button { font-size: 0.69rem !important; padding: 4px 8px !important; }
}
/* ══════════════════════════════════════════════════════════════
   DEPTH-OF-FOCUS — wall media
   Shallow-DOF simulation: images start slightly soft, hovered
   item snaps sharp, all others blur (bokeh).
   Only filter/transform animate — layout geometry stays still.
   ══════════════════════════════════════════════════════════════ */

/* Base: subtle softness (everything slightly out of focus) */
.wall-entry img,
.wall-entry video {
    filter: blur(0.55px) saturate(0.86) brightness(0.97) !important;
    transition:
        filter    0.32s cubic-bezier(0.4, 0, 0.2, 1),
        transform 0.32s cubic-bezier(0.4, 0, 0.2, 1) !important;
    will-change: filter, transform !important;
}

/* Focused: sharp, vivid, slight forward lift */
.wall-entry img:hover,
.wall-entry video:hover {
    filter: blur(0) saturate(1.18) brightness(1.04)
            drop-shadow(0 10px 30px rgba(0, 0, 0, 0.88)) !important;
    transform: scale(1.04) !important;
    z-index: 12 !important;
    transition:
        filter    0.16s cubic-bezier(0.4, 0, 0.2, 1),
        transform 0.16s cubic-bezier(0.4, 0, 0.2, 1) !important;
}

/* Bokeh: all non-hovered media blur further when one is focused */
body:has(.wall-entry img:hover) .wall-entry img:not(:hover),
body:has(.wall-entry img:hover) .wall-entry video,
body:has(.wall-entry video:hover) .wall-entry video:not(:hover),
body:has(.wall-entry video:hover) .wall-entry img {
    filter: blur(3.5px) saturate(0.55) brightness(0.70) !important;
    transform: scale(0.98) !important;
    transition:
        filter    0.32s cubic-bezier(0.4, 0, 0.2, 1),
        transform 0.32s cubic-bezier(0.4, 0, 0.2, 1) !important;
}

/* Traditional: skip blur (GPU cost, no hover on touch) */
@media (max-width: 767px) {
    .wall-entry img,
    .wall-entry video {
        filter: none !important;
        transition: none !important;
        will-change: auto !important;
    }
    body:has(.wall-entry img:hover) .wall-entry img:not(:hover),
    body:has(.wall-entry img:hover) .wall-entry video,
    body:has(.wall-entry video:hover) .wall-entry video:not(:hover),
    body:has(.wall-entry video:hover) .wall-entry img {
        filter: none !important;
        transform: none !important;
    }
}

/* ── Entries dropdown (anchored under the header "Posts" button) ──────── */
/* Base panel chrome (background/border/blur/shadow/animation) comes from
   .lb-popover (LBKit.popover) — this just adds size/position. Anchors
   under #wall-page-header-right, which carries position:relative. */
#div_entries_sidebar {
    top: calc(100% + 8px) !important;
    right: 0 !important;
    width: clamp(260px, 85vw, 340px) !important;
    max-height: min(70vh, 480px) !important;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 0;
    scrollbar-width: none;
    border-radius: 12px !important;
}
#div_entries_sidebar::-webkit-scrollbar { display: none; }

#div_entries_sidebar .sb-content {
    padding: 14px 16px;
}

.sb-heading {
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
    font-size: clamp(9px, 0.77rem, 11px) !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase;
    margin-bottom: 20px !important;
    color: var(--color_border) !important;
}
.sb-badge {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    background: transparent !important;
    border-radius: var(--theme-radius-xs) !important;
    font-size: 0.95rem !important;
    font-weight: bold;
    padding: 1px 7px !important;
    letter-spacing: 0.02em !important;
    color: var(--accent) !important;
}
.sb-date-divider {
    display: flex !important;
    align-items: center !important;
    gap: 7px !important;
    font-size: 0.69rem !important;
    letter-spacing: 0.1em !important;
    text-transform: uppercase;
    margin: 16px 0 7px !important;
    color: var(--color_text_normal) !important;
    opacity: 0.75;
}
.sb-date-divider::before,
.sb-date-divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--color_text_normal) !important;
    opacity: 0.3;
}
#div_entries_sidebar a.sb-link {
    display: block;
    text-decoration: none !important;
    padding: 5px 6px 5px 10px !important;
    font-size: 0.92rem !important;
    letter-spacing: 0.01em !important;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    border-radius: var(--theme-radius-xs) !important;
    margin-bottom: 2px !important;
    transition: border-left-color 0.15s ease, background 0.15s ease, padding-left 0.15s ease, color 0.15s ease !important;
}
#div_entries_sidebar a.sb-link:hover {
    background: transparent !important;
    padding-left: 14px !important;
    color: var(--color_text_stressed) !important;
}
.sb-footer {
    margin-top: 28px !important;
    padding-top: 14px !important;
    font-size: 0.69rem !important;
    letter-spacing: 0.12em !important;
    text-transform: uppercase;
    text-align: center;
    opacity: 0.35;
}

/* ── Traditional header: reduce letter-spacing/font so title fits on narrow screens ── */
@media (max-width: 600px) {
    #wall-page-header { padding: 10px 14px !important; flex-direction: column !important; align-items: flex-start !important; gap: 8px !important; }
    #wall-page-header-right { width: 100%; }
    #wall-search-wrap { width: 100%; }
    #wall-search { width: 100%; }
    #wall-search:focus { width: 100%; }
    #wall-page-title {
        font-size: 1.0rem !important;
        letter-spacing: 0.10em !important;
    }
    #wall-page-meta { letter-spacing: 0.04em !important; }
}

/* ── Pinned post indicator ─────────────────────────────────────── */
.wall-pinned {
}
.wall-pin-badge {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--color_primary);
    text-transform: uppercase;
    padding: 3px 8px 3px 0;
    margin-bottom: 4px;
    display: block;
    user-select: none;
}

/* ── God-user status banner ────────────────────────────────────── */
#wall-god-status {
    padding: 10px 16px;
    margin-bottom: 14px;
    border-radius: var(--theme-radius-xs);
    font-size: 0.88rem;
    font-style: italic;
    color: var(--color_text_secondary, var(--color_text));
    background: transparent !important;
}

/* ── Link preview cards ────────────────────────────────────────── */
.wall-lp-wrap {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 8px 0 2px;
}

.wall-link-preview {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 12px;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
    text-decoration: none;
    color: inherit;
    transition: background 0.15s;
    overflow: hidden;

    &:hover { background: transparent !important; }
}

.wall-lp-img {
    width: 80px;
    height: 60px;
    object-fit: cover;
    border-radius: var(--theme-radius-xs);
    flex-shrink: 0;
}

.wall-lp-info { flex: 1; min-width: 0; }

.wall-lp-title {
    font-weight: 600;
    font-size: 0.88rem;
    color: var(--color_text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.wall-lp-desc {
    font-size: 0.78rem;
    color: var(--color_text_secondary, var(--color_text));
    opacity: 0.8;
    margin-top: 3px;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.wall-lp-host {
    font-size: 0.70rem;
    opacity: 0.55;
    margin-top: 4px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* ── Backend search results ────────────────────────────────────── */
#wall-backend-results {
    margin: 16px 0 8px;
    padding: 14px 16px;
    border-radius: var(--theme-radius-xs);
    background: transparent !important;
}

.wall-bsr-title {
    font-size: 0.78rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.07em;
    opacity: 0.65;
    margin-bottom: 10px;
}

.wall-bsr-loading, .wall-bsr-none {
    font-size: 0.85rem;
    font-style: italic;
    opacity: 0.55;
}

.wall-bsr-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 10px;

    li { display: flex; flex-direction: column; gap: 3px; }

    a {
        font-weight: 600;
        font-size: 0.88rem;
        color: var(--color_primary);
        text-decoration: none;
        &:hover { text-decoration: underline; }
    }
}

.wall-bsr-snippet {
    font-size: 0.78rem;
    opacity: 0.7;
    line-height: 1.4;
}

/* ── Emoji reaction bar ── */
.wall-rx-bar {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    padding: 6px 10px 8px;
    margin-top: 12px;
}

[data-role~="wall-rx-btn"] {
    padding: 5px 10px !important;
    height: auto !important;
    min-height: 0 !important;
    margin: 0 !important;
    text-align: left !important;
}
[data-role~="wall-rx-btn"]:hover{
    color: var(--color_primary) !important;
}
/* JS sets a plain "active" class (not "wall-rx-active") when the current
   user has already reacted with this emoji. */
[data-role~="wall-rx-btn"].active{
    color: var(--color_primary) !important;
    border-color: color-mix(in srgb, var(--color_primary) 45%, transparent) !important;
}

.wall-rx-emoji { font-size: 1rem; line-height: 1; }

.wall-rx-count {
    font-size: 0.75rem;
    font-variant-numeric: tabular-nums;
    min-width: 0.8em;
}

[data-role~="wall-rx-btn"].active .wall-rx-count{ color: var(--color_primary); }

.media-comment-input {
    min-height: 60px !important;
    resize: vertical !important;
    margin-bottom: 10px !important;
}

.media-comment-submit {
    display: block !important;
    width: 100% !important;
}


/* ═══════════════════════════════════════════════════════════════
   BBS terminal
   ═══════════════════════════════════════════════════════════════ */

html:has(#ac_div) {
    --color_primary:       var(--color_violet);
    --color_primary_hover: var(--color_violet);
    --color_bg_modal:      var(--theme-panel-bg);
    --color_border:        color-mix(in srgb, var(--color_violet) 30%, var(--mix));
    --color_danger:        var(--color_secondary);
    --color_danger_hover:  var(--color_secondary);
    /* Terminal page background: transparent so the wallpaper shows through;
       the xterm.js canvas has its own black background. */
    background: transparent !important;
}

@font-face {
    font-family: 'BBS437';
    src: url('data:font/sfnt;base64,AAEAAAAOAIAAAwBgRkZUTXcRHd4AARgsAAAAHEdERUYAJwM0AAEYBAAAACZPUy8yfc2QeQAAAWgAAABgY21hcDM+EH0AAAfsAAAGzmdhc3D//wADAAEX/AAAAAhnbHlmjd/eGwAAFNwAAOUkaGVhZAmw7MsAAADsAAAANmhoZWEI/gGVAAABJAAAACRobXR4QNg2TAAAAcgAAAYkbG9jYYwCUpgAAA68AAAGHm1heHADWwEyAAABSAAAACBuYW1lWSrMkQAA+gAAAAU9cG9zdNjZw1IAAP9AAAAYunByb3B31wl0AAEYSAAAAawAAQAAAAEAALppJ9dfDzz1AgsJYAAAAADSudERAAAAANK50REAAP5wAyAF3AAAAAgAAAAAAAAAAAABAAAF3P5wAAADIAAAAAADIAABAAAAAAAAAAAAAAAAAAAABAABAAADDgEwAEwAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAQDIAGQAAUAAAdsB2wAAAO2B2wHbAAAA7YAZALuAAAAAAAJAAAAAAAAoAAKv0AA+PsAAAAgAAAAAFYuUi4AgAAA//0F3P5wAAAF3AGQYAAAv9/3AAADIASwAAAAIAABAyAAAAMgAAADIAAAAyAAAAAAAAAAAAAAAAAAyAAAAGQAAAAAAGQAAAAAAAAAAABkAGQAAAAAAAAAZABkAGQAAAAAAAAAAAAAAAAAAADIAGQAAAAAAAAAAADIAMgAyAAAAAAAyAAAASwAAAAAAGQAAAAAAAAAAAAAAAAAAAAAASwAyABkAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAZAAAAMgAAADIAAAAAADIAAAAAAAAAAAAAAAAAAAAAADIAGQAAADIAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAABkASwAZAAAAAAAAADIAGQAAAAAAGQBLAAAAGQAAABkAAAAAABkAAAAAABkAGQAZABkAMgAAAAAASwAZADIAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAyABkAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAMgAZABkAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZABkAGQAZADIAMgAyADIAAAAAAAAAAAAAAAAAAAAAADIAAAAZAAAAGQAAABkAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAABkAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAZAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAABkAGQAZABkAGQBLABkAMgAAAAAAMgAyAAAAAABLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAGQAZAAAAAAAAAAAAGQAZAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAAAAAADIAGQAZAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAABkAAAAAAAAAGQAAAAAAAAAAAAAAMgAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGQAAABkAGQAZAAAAAAAAADIAMgAyADIAAAAAAAAAAAAZABkAMgAAAEsAAAAyAAAAMgAyADIAGQAZAAAAAAAAAAAAGQAZABkAGQAZABkAGQAZAAAAMgAZABkAGQAZABkAGQAZABkAGQAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AJUAiQK1AKcAuQKwAJICtwK4AIYAlgKmAqsCqgGzArMAiwCbAZwAxwDZAKAAggCNAq8BYQK0AqgAjACcAmQAgQChAKQAtgEzATQCVQJWAl0CXgJZAloA2AL5AOABWQJwAooCagJrAwsDDAJiAJgCWwJfAmYAowCrAKIArACpAK4ArwCwAK0AtAC1AAAAswC7ALwAugESAXABdwCQAXMBdAF1AJkBeAF2AXEAAAAAACwALABKAIIArgDQAPQBGgFAAVYBcgGWAcIB8AIaAjwCeAKYArgC3gL8AxwDaAN0A54DuAPSA+4EDAQcBEAEWARwBHAEjgSmBNYFCgU4BXIFhAWiBb4F4gX6BgwGGAYkBkQGaAZ+BqwG1Ab6BxoHQAdgB4wHtAfGB9wICAgcCEgIbgiOCLYI3gkICSwJUgl0CaQJvAnUCe4KFgowCk4KbAqYCrgK3AsACzALTAtiC4QLogvSC/IMIgw0DFQMZgyGDJIMqAzMDPANDg00DVgNfA2kDcQN3g38DiIONg5SDm4Oig6uDtIO8A8eDz4PWg90D5IPvg/eEAgQKBA8EFwQdhCaEJoQthDcEQQROBFkEXgRxBHWEgoSLBJeEm4SfBK4EsQS4hL+EyQTShNgE3oTmhOoE74T1BP4FCgUZhSwFP4VIhVUFYYVvBX4Fi4WZhaMFsIW9BcmF1wXkBewF9AX9BgWGEIYchimGNwZFhlUGYwZuBnwGhAaMBpUGnYanhrCGuobHBtOG4QbuhvoHCAcThx4HKoc3B0SHUIdZB2GHaYdzB4CHjIeXB6GHrQe5B8OHygfVh+AH6of2CAAIC4gUiB+IK4g2iESIUQhdCGcIdAh/CI0ImQilCK4IvAjICNSI4YjsiPeJAwkOCRuJKIk0CT6JSglVCWKJcAl/iY4JnYmrCbiJxAnRid8J6In0ifwKBYoPihkKIAonCjAKOIpACkiKT4pUilwKZopxCnuKiAqUCp2KpoquCraKvYrHitAK2ArfCueK7wr5CwOLDYsXCyILLgs3i0ALSItVC14LbQt4C4gLlAueC6iLtIu/i8uL1Yvii+6L/QwMDBuMK4w5jEcMVoxmjG8MeIyDDI6Ml4yhjKwMuAy/jMgM0YzcjOcM84z+DQoNEY0ZDSSNMI08DUiNU41iDXANfY2JjZkNqA2vDbiNv43KjdoN6o32jgWOFY4kDjKOQI5KDlSOXo5pjm+OdY55Dn6Ogg6Jjo6OlQ6bjqEOpo6uDroOvY7JDtEO2I7lDu8O/A8GDxAPGg8gDykPMo8+j0SPUQ9XD2EPaY9xD3iPgY+Mj5EPmQ+kj6uPs4/AD8wP1Q/gD+iP84//kA0QF5AfkCuQNBA+kEoQVRBfEGsQchB9EIGQixCVkJyQoxCvkLaQvBDDkMyQ05DaEOCQ6hD1EP0RBpEOEReRIhEsETkRQxFPkVwRaRFzEXwRiJGUkZqRoxGpkbIRuxHCkc8R2RHkkewR9hH/EgkSD5IZkiMSL5I6kkISTRJXEl4SZZJrknaSexKDEo2SlJKckqkStRK7EsESxpLNktYS3hLmEvKS+5MFEw4TF5MgkycTMBM5E0OTTRNUk1+TaRNwE3eTfZOEk4kTkhOZk6ATqBOyk72Tw5PJk88T1hPek+aT7pP3FAAUCJQVFCEUK5Q1lD4USZRQFFgUX5RoFHEUeRSGFJCUnBSjlKoUsJS0FL4Uw5TLlNAU1hTalOIU6JTyFPgU/pUFFQ2VFJUdFSMVKBUxFTmVQRVIlVGVXRVlFWmVcRV3FX4VhRWMFZCVl5WelaMVqJWylb2VyBXTFd2V6BXylf0WCJYMFg+WExYWFhkWHhYilicWK5YwFjcWPhZFFkwWUhZaFl+WZRZolnUWepaDFoiWj5aWlp4WoZamlqwWtBa5FsAWxxbOltUW35bnlu0W8Jb3lv0XBpcQFxaXHRcklysXNRc8l0GXRJdPl1uXZxdul30XkhedF6cXsRe8F8UX1BflF/WYCZgZGCwYPxhQGGEYdRiIGJ8YtRjLGNKY2RjgGOaY75j5GQOZD5kcGSUZLhkzmT8ZQhlKGU2ZVJldGWEZZpluGXkZg5mKGZcZo5mwGbqZw5nHmc2Z0xnWGdmZ3hniGeaZ6pnvmfQZ+Jn9GgMaCBoMmhIaF5oeGiMaKBouGjOaORo/GkQaSRpPGlUaW5pkGmoacBp3mn2agxqLGpGalxqfGqear5q6mr4awRrEmsgay5rPGwabcRukG6ebrJuwG7UbuBu+G8YbzBvUG+Kb65vxG/gcAxwMHBocJRw0HD6cShxTnF0cZZxunHYcfpyHHJCcmZykgAAAAIAAP5wAyAF3AAXABsAABkBMzUhESMVIxEzETM1MxEjNSEVIxEhEQEVMzXIASxkZMhkZGT+DGQDIP4MyP5wBRTI/nBk/tQBLGQBkGRkAZD4lAJYyMgAAAACAAAAAAMgBLAACwAPAAA1MzUzESERIREjFSEBMzUjZGQCWP5wZP7UAZDIyMhkA4T+cP1EZAOEyAAAAAAHAAAAAAMgBLAAAwALAA8AEwAXABsAHwAANREzERM1IRUjFSM1AzUzFSUVIzUBIxEzITUhFQEhFSFkZAGQZMhkZAEsZAEsZGT9RAJY/agCWP2oZAPo/BgBLGRkZGQBkGRkZGRk/OAD6GRk/BhkAAAABAAAAAADIASwAAsAEwAXABsAADURMzUhFTMRIxUhNRMVMxUzNTM1ARUzNSEjFTNkAlhkZP2oZGTIZP5wZAEsZGRkA+hkZPwYZGQBkGRkZGQBkGRkZAAAAAEAAAAAArwDhAAXAAAZATM1MxUzNTMVMxEjFSMVIxUjNSM1IzVkyGTIZGRkZGRkZAEsAfRkZGRk/gxkZGRkZGQAAAAAAQAAAGQCvAOEABsAABE1MzUzNTM1MxUzFTMVMxUjFSMVIxUjNSM1IzVkZGRkZGRkZGRkZGRkAZDIZGRkZGRkyGRkZGRkZAAAAgAAAAADIARMAA8AFwAAGQEzETM1MxUzETMRIREjEQM1MzUzFTMVyGTIZMj+1MhkZMhkASwBkAEsZGT+1P5wAZD+cP7UZMjIZAAAAAEAAAAAAyAETAAbAAAZATM1MzUzNTMVMxUzFTMRIxUjFTMVITUzNSM1ZGRkyGRkZGTIZP5wZMgBkAEsZGTIyGRk/tRkyGRkyGQAAAABAMgBLAJYAyAACwAAARUjNSMRMzUzFTMRAfTIZGTIZAGQZGQBLGRk/tQAAAIAAP5wAyAF3AADAA8AABkBIREBMxUzNTMRIzUjFSMDIP2oZMhkZMhk/nAHbPiUAyBkZAEsZGQAAgBkAMgCvAOEAAsAFwAAExEzNSEVMxEjFSE9ATMVMzUzESM1IxUjZGQBkGRk/nBkyGRkyGQBLAH0ZGT+DGRkZGRkASxkZAAAAwAA/nADIAXcAAMADwAbAAAZASERASE1MxEjNSEVIxEzNREzNTMVMxEjFSM1AyD9qAGQZGT+cGRkZMhkZMj+cAds+JQCWGQB9GRk/gxkASxkZP7UZGQAAAIAAAAAArwEsAAdACEAADURMzUzNTM1MzUzNSM1IREjNSMVIxUzFTMRIxUhNTsBESNkZGRkZMgBkGRkZGRkZP5wZMjIZAH0ZGRkZGRk/nBkZGRk/gxkZAH0AAAAAgBkAAACvASwABcAGwAAEyMRMzUhFTMRIxUjFTMVIxUjNSM1MzUjExEzEchkZAGQZGRkyMjIyMhkZMgB9AJYZGT9qGRkZMjIZGQCvP2oAlgAAAAAAgAA/5wDIASwAA8AEwAANTMRIREjFSMRMxEhESMVIwEVITVkArxkyGT+1GTIASwBLMgD6Pu0ZAEsAfT84GQEsMjIAAAGAAAAAAMgA+gAAwAXABsAHwAjACcAAD0BMxUnNTM1MxEzETMVMxUjFSMRIxEjNQM1MxUBNTMVAzUzFQEzNSPIyMhkyGTIyGTIZMjIAZDIyMj+DMjIyGRkyMhkASz+1GTIZP7UASxkASxkZP4MZGQB9GRk/tTIAAABAAAAAAK8BLAAFwAAMREzFTMVMxUzFTMVMxUjFSMVIxUjFSMVZGRkZGTIyGRkZGQEsGRkZGRkyGRkZGRkAAAAAQAAAAACvASwABcAABE1MzUzNTM1MzUzNTMRIzUjNSM1IzUjNchkZGRkZGRkZGRkAfTIZGRkZGT7UGRkZGRkAAEAZAAAArwEsAAbAAA3IzUzESM1MzUzNTMVMxUzFSMRMxUjFSMVIzUjyGTIyGRkyGRkyMhkZMhkyGQCWGRkZGRkZP2oZGRkZAAAAAAEAGQAAAK8BLAAAwAHAAsADwAAEzMRIxUzFSMBMxEjFTMVI2TIyMjIAZDIyMjIBLD8fGTIBLD8fGTIAAACAAAAAAMgBLAADQARAAAhIxEjESMRIzUjETM1IQUjETMDIMhkyMhkZAK8/gxkZARM+7QCWGQBkGRk/nAAAAAAAgAAAAACvASwADMAPwAAPQEzFSE1IzUjNSM1IzUzNTM1IzUjNTM1IRUzFSM1IRUzFTMVMxUzFSMVIxUzFTMVIxUhNQE1MzUjNSMVIxUzFcgBLGTIZGRkZGRkZAH0ZMj+1GTIZGRkZGRkZP4MASxkZGRkZGRkZGRkZGTIZGRkZGRkZGRkZGRkyGRkZGRkZAEsZMhkZMhkAAABAAAAAAK8ASwAAwAAMREhEQK8ASz+1AABAGT/nAK8BLAAHwAANyM1MxEjNTM1MzUzFTMVMxUjETMVIxUjFTMVITUzNSPIZMjIZGTIZGTIyGRkyP2oyGTIZAJYZGRkZGRk/ahkZGRkZGQAAAABAGQAAAK8BLAADwAAEzUzNTM1MxUzFTMVIxEjEWRkZMhkZMjIA4RkZGRkZGT8fAOEAAAAAQBkAAACvASwAA8AADc1MxEzETMVIxUjFSM1IzVkyMjIZGTIZMhkA4T8fGRkZGRkAAAAAAEAAAEsArwDIAATAAARNSE1IzUzFTMVMxUjFSMVIzUzNQGQZMhkZGRkyGQB9GRkZGRkZGRkZGQAAQAAASwCvAMgABMAABE1MzUzNTMVIxUhFSEVMxUjNSM1ZGTIZAGQ/nBkyGQB9GRkZGRkZGRkZGQAAAAAAQAAAMgCvAMgAAUAADURMxEhFcgB9MgCWP4MZAAAAAABAAABLAMgAyAAGwAAETUzNTM1MxUzNTMVMxUzFSMVIxUjNSMVIzUjNWRkZMhkZGRkZGTIZGQB9GRkZMjIZGRkZGTIyGRkAAABAAAAyAK8A+gADwAAPQEzNTM1MzUzFTMVMxUzFWRkZGRkZGTIyMjIyMjIyMgAAAABAAAAyAK8A+gADwAAESEVIxUjFSMVIzUjNSM1IwK8ZGRkZGRkZAPoyMjIyMjIyAACAMgAAAJYBLAACwAPAAABNTMVMxEjESMRIxETMxUjASzIZGTIZGTIyARMZGT+cP5wAZABkPx8yAAAAAACAGQDhAK8BRQABQALAAATMxEjNSMBMxEjFSNkyGRkAZDIZGQFFP5wZAEs/tRkAAACAAAAAAK8BLAAGwAfAAARNTMRIzUzETMRMxEzETMVIxEzFSMRIxEjESMRJREjEWRkZMhkyGRkZGTIZMgBLGQBLGQBkGQBLP7UASz+1GT+cGT+1AEs/tQBLGQBkP5wAAABAAD/OAK8BXgAJwAAPQEzFTMVIREhNSMRMzUzNTMVMxUzFSM1IzUhESEVMxEjFSMVIzUjNWRkASz+cGRkyMhkZGRk/tQBkGRkZMjIZMhkZAH0ZAGQZMjIZMhkZP5wZP4MZMjIZAAAAAMAAAAAArwEsAAXABsAHwAANTM1MzUzNTM1MzUzFSMVIxUjFSMVIxUjGQEzEQERMxFkZGRkZMhkZGRkZMjIASzIyMjIyMjIyMjIyMjIA4QBLP7U/HwBLP7UAAAAAgAAAAACvASwACUAKQAANREzNTM1IxEzNSEVMxEjFSMVMzUzFSMRMxUjNSMRIzUjETMVITUBESMRZGRkZAEsZGRkZMhkZMhkZGTI/tQBLGRkAfRkZAEsZGT+1GRkZGT+DGRkASzI/gxkZAK8ASz+1AAAAAABAMgDhAH0BRQABwAAAREjFSM1MxEB9GTIZAUU/tRkZAEsAAABAMgAAAJYBLAAEwAANxEzNTM1MxUjFSMRMxUzFSM1IzXIZGTIZGRkZMhkyAMgZGRkZPzgZGRkZAAAAAABAMgAAAJYBLAAEwAAMzUzNTMRIzUjNTMVMxUzESMVIxXIZGRkZMhkZGRkZGQDIGRkZGT84GRkAAEAAAEsAyADIAAbAAARNTM1IzUzFTM1MxUjFTMVIxUzFSM1IxUjNTM1yGTIyMhkyMhkyMjIZAH0ZGRkZGRkZGRkZGRkZGQAAAEAAADIAyADhAALAAARNSERMxEhFSERIxEBLMgBLP7UyAH0ZAEs/tRk/tQBLAAAAAEAyP+cAfQBLAAHAAAhFSM1MxEzEQGQyGTIZGQBLP7UAAAAAAEAAAH0ArwCWAADAAARNSEVArwB9GRkAAEBLAAAAfQAyAADAAAlFSM1AfTIyMjIAAEAAAAAArwEsAAXAAA1MzUzNTM1MzUzNTMVIxUjFSMVIxUjFSNkZGRkZMhkZGRkZMjIyMjIyMjIyMjIyMgAAAADAAAAAAK8BLAACwAPABMAADURMzUhFTMRIxUhNTMhESETETMRZAH0ZGT+DGQBLP7UZGRkA+hkZPwYZGQD6P1EAZD+cAAAAAABAGQAAAK8BLAADQAAMzUzESM1MzUzNTMRMxVkyMhkZMjIZAMgZGRk+7RkAAEAAAAAArwEsAAjAAAxETM1MzUzNTM1MxEhFSM1MzUhFTMRIxUjFSMVIxUjESE1MxVkZGRkZP7UyGQB9GRkZGRkZAEsyAGQZGRkZAEsZGRkZP7UZGRkZP7UZMgAAQAAAAACvASwABsAAD0BMxUhESE1IREhFSM1MzUhFTMRIxUzESMVITXIASz+1AEs/tTIZAH0ZGRkZP4MZGRkAfRkAZBkZGRk/nBk/gxkZAACAAAAAAK8BLAAEwAZAAARNTM1MzUzNSERMxUjETMVITUzESczESMVI2RkZAEsZGRk/nBkyMhkZAGQyMjIyP1EZP7UZGQBLGQBLMgAAQAAAAACvASwABMAAD0BMxUhESERIRUhESEVMxEjFSE1yAEs/gwCvP4MAZBkZP4MZGRkAfQCWGT+cGT+DGRkAAIAAAAAArwEsAATABcAADURMzUzNSEVIxUjESEVMxEjFSE1MyERIWRkASzIZAGQZGT+DGQBLP7UZAOEZGRkZP7UZP4MZGQB9AAAAAABAAAAAAK8BLAAEwAAETUhESMVIxUjESMRMzUzNTMRIRUCvGRkZMhkZGT+1APoyP4MZMj+cAGQyGQBkGQAAAAAAwAAAAACvASwABMAFwAbAAA1ETM1IxEzNSEVMxEjFTMRIxUhNTMhESE1IREhZGRkAfRkZGRk/gxkASz+1AEs/tRkAfRkAZBkZP5wZP4MZGQB9GQBkAAAAAIAAAAAArwEsAATABcAABM1IRUzESMVIxUhNSE1MxEhNSMREyERIWQB9GRkZP5wASxk/nBkyAEs/tQETGRk/HxkZGRkAZBkAZD+cAGQAAAAAgEsAGQB9APoAAMABwAAJSM1MxEVIzUB9MjIyGTIArzIyAAAAgDIAAAB9APoAAcACwAAJRUjNTM1MxURFSM1AZDIZMjIZGRkyMgDhMjIAAABAGQAZAK8BEwAIwAAEyM1MzUzNTM1MzUzFSMVIxUjFSMVMxUzFTMVMxUjNSM1IzUjyGRkZGRkyGRkZGRkZGRkyGRkZAH0yGRkZGRkZGRkyGRkZGRkZGQAAgAAASwCvAK8AAMABwAAETUhFQE1IRUCvP1EArwBLGRkASxkZAAAAAEAZABkArwETAAjAAA3NTM1MzUzNSM1IzUjNSM1MxUzFTMVMxUzFSMVIxUjFSMVIzXIZGRkZGRkZMhkZGRkZGRkZMjIZGRkyGRkZGRkZGRkyGRkZGRkAAACAAAAAAK8BLAAEwAXAAATNSEVMxEjFSMRIxEzNTMRIRUjNQEzFSNkAfRkZGTIZGT+1MgBLMjIBExkZP5wZP7UASxkAZDIyPx8yAAAAQAAAAACvARMABMAADURMzUhFTMRIxUhETMRIREhFSE1ZAH0ZGT+1Mj+1AGQ/gxkA4RkZP2oZAGQASz8fGRkAAIAAAAAArwEsAATABsAADERMzUzNTM1MxUzFTMVMxEjESEZASERIzUjFSNkZGRkZGRkyP7UASxkZGQDhGRkZGRkZPx8AfT+DAJYASxkZAAAAwAAAAACvASwAA8AEwAXAAAxNTMRIzUhFTMRIxUzESMVAREzEQMzESNkZAJYZGRkZP7UyMjIyGQD6GRk/nBk/gxkBEz+cAGQ/BgB9AAAAAABAAAAAAK8BLAAHwAANREzNTM1IRUzFSM1IzUjFSMRMxUzNTM1MxUjFSE1IzVkZAGQZGRkyGRkyGRkZP5wZMgDIGRkZMhkZGT84GRkZMhkZGQAAAACAAAAAAK8BLAADwAXAAAxNTMRIzUhFTMVMxEjFSMVAxEzNTMRIzVkZAH0ZGRkZMhkZGRkA+hkZGT84GRkBEz8GGQDIGQAAAABAAAAAAK8BLAAGwAAMTUzESM1IREjNSM1IxEzNTMRIzUjETM1MzUzEWRkArxkZMhkZGRkyGRkZAPoZP7UZGT+cGT+1GT+DGRk/tQAAQAAAAACvASwABcAADE1MxEjNSERIzUjNSMRMzUzESM1IxEzFWRkArxkZMhkZGRkZGQD6GT+1GRk/nBk/tRk/gxkAAACAAAAAAK8BLAAGQAhAAA1ETM1MzUhFTMVIzUjNSMVIxEzFTMVITUjNQUjESM1IREjZGQBkGRkZMhkZMj+1GQB9GTIAZBkyAMgZGRkyGRkZPzgZGRkZGQBkGT9qAAAAAABAAAAAAK8BLAACwAAMREzESERMxEjESERyAEsyMj+1ASw/gwB9PtQAlj9qAAAAAABAMgAAAJYBLAACwAAAREzFSE1MxEjNSEVAfRk/nBkZAGQBEz8GGRkA+hkZAAAAAABAAAAAAMgBLAADwAAPQEzFSERIzUhFSMRIxUhNcgBLGQBkGRk/gxkyMgD6GRk/BhkZAAAAQAAAAACvASwABsAADE1MxEjNSERMzUzETMRIxUjFTMRMxEjESM1IxFkZAEsZGTIZGRkZMhkZGQD6GT+DMgBLP7UyGT+1P7UASzI/gwAAAABAAAAAAK8BLAADwAAMTUzESM1IRUjETM1MzUzEWRkAZBkyGRkZAPoZGT8GGRk/tQAAAAAAQAAAAACvASwABMAADERMxUzFTM1MzUzESMRIxUjNSMRyGRkZMjIZGRkBLBkZGRk+1ADIMjI/OAAAAAAAQAAAAACvASwABMAADERMxUzFTMVMxEzESM1IzUjNSMRyGRkZMjIZGRkBLDIyMgCWPtQyMjI/agAAAAAAgAAAAACvASwABMAHwAANREzNTM1IRUzFTMRIxUjFSE1IzU7ARUzNTMRIzUjFSNkZAEsZGRkZP7UZGRkZGRkZGTIAyBkZGRk/OBkZGRkZGQDIGRkAAAAAAIAAAAAArwEsAAPABMAADE1MxEjNSEVMxEjFSERMxUDETMRZGQCWGRk/tRkZMhkA+hkZP5wZP4MZARM/nABkAACAAD/OAK8BLAADwAXAAA1ETM1IRUzESMVMxUhNSE1OwE1MxUzESFkAfRkZGT+1P7UZGRkZP7UZAPoZGT8GMhkyGTIZAOEAAACAAAAAAK8BLAAEwAXAAAxNTMRIzUhFTMRIxEzESMRIzUjGQIzEWRkAlhkZGTIZGTIZAPoZGT+cP7U/nABkMj9qARM/nABkAABAAAAAAK8BLAAIwAAPQEzFSERIzUjNSM1IxEzNSEVMxUjNSERMxUzFTMVMxEjFSE1yAEsZMhkZGQB9GTI/tRkyGRkZP4MZMjIAZBkZGQBLGRkyMj+1GRkZP5wZGQAAAABAGQAAAK8BLAADwAAEyERIzUjETMVITUzESMVI2QCWGRkZP5wZGRkBLD+1GT8fGRkA4RkAAAAAAEAAAAAArwEsAALAAA1ETMRIREzESMVITXIASzIZP4MZARM+7QETPu0ZGQAAQAAAAACvASwABcAABkBMxEzFTM1MxEzESMVIxUjFSM1IzUjNchkZGTIZGRkZGRkASwDhPx8ZGQDhPx8ZGRkZGRkAAABAAAAAAK8BLAAEwAANREzETMRMxEzETMRIxUjNSMVIzXIZGRkyGTIZMjIA+j8fAEs/tQDhPwYyMjIyAABAAAAAAK8BLAAIwAAMREzNTM1IzUjETMRMxUzNTMRMxEjFSMVMxUzESMRIzUjFSMRZGRkZMhkZGTIZGRkZMhkZGQBLMjIyAEs/tTIyAEs/tTIyMj+1AEsyMj+1AAAAAABAGQAAAK8BLAAEwAAEzMRMxEzESMVIxEzFSE1MxEjNSNkyMjIZGRk/nBkZGQEsP4MAfT+DGT+DGRkAfRkAAAAAQAAAAACvASwACMAADERMzUzNTM1MzUzESEVIxUjESERIxUjFSMVIxUjESE1MzUzEWRkZGRk/tRkZAK8ZGRkZGQBLGRkAZBkZGRkASxkZAEs/nBkZGRk/tRkZP7UAAAAAQDIAAACWASwAAcAACUzFSERIRUjAZDI/nABkMhkZASwZAAAAQAAAAACvASwABcAABE1MxUzFTMVMxUzFTMVIzUjNSM1IzUjNchkZGRkZMhkZGRkA+jIyMjIyMjIyMjIyMgAAAEAyAAAAlgEsAAHAAAlESM1IREhNQGQyAGQ/nBkA+hk+1BkAAEAAAPoArwFeAAXAAATNTM1MzUzFTMVMxUzFSM1IzUjFSMVIzVkZGRkZGRkyGRkZMgETGRkZGRkZGRkZGRkZAABAAD/OAMg/5wAAwAAFTUhFQMgyGRkAAABAMgD6AJYBRQACwAAARUzFSM1IzUjNTMVAfRkyGRkyASwZGRkZGRkAAAAAAEAAAAAArwDIAAXAAA1ETM1ITUhNSEVMxEzFSM1IxEjETMVITVkASz+1AGQZGTIZMjI/tRkASxkyGRk/ahkZAEs/tRkZAAAAAEAAAAAArwEsAAZAAAxNTMRIzUhETMVMxUzESMVITUzESM1IxEjFWRkASzIZGRk/tTIZGRkZAPoZP5wZGT+DGRkAfRk/ahkAAEAAAAAArwDIAATAAA1ETM1IRUzFSM1IREhNTMVIxUhNWQB9GTI/tQBLMhk/gxkAlhkZGRk/ahkZGRkAAEAAAAAArwEsAAZAAA1ETM1MzUzESM1IREzFSM1IxEjFSMRMxUhNWRkyGQBLGTIZGRkyP7UZAH0ZGQBLGT7tGRkAlhk/gxkZAAAAAACAAAAAAK8AyAAEQAVAAA1ETM1IRUzESERITUzFSMVITUTITUhZAH0ZP4MASzIZP4MZAEs/tRkAlhkZP7U/tRkZGRkAZDIAAABAAAAAAJYBLAAGQAAMTUzESM1MxEzNSEVMxUjNSM1IxEzFSMRMxVkZGRkASxkZGRkZGRkZAH0ZAGQZGTIZGT+cGT+DGQAAAABAAD+1AK8AyAAGwAAFTUzFTMRITUjETM1IRUjETMRMzUzFSMRIxUhNcjI/tRkZAEsyMhkyGRk/nDIZGQBLGQB9GRk/gwB9GRk/HxkZAAAAAIAAAAAArwEsAALABMAADE1MxEjNSERMxUjERM1MxUzESMRZGQBLGRkZMhkyGQD6GT+DGT9qAK8ZGT9RAK8AAACAMgAAAJYBLAACQANAAAzNTMRIzUhETMVATMVI8hkZAEsZP7UyMhkAlhk/URkBLDIAAAAAgBk/tQCvASwAA0AEQAAOwEVMxEjNSERIxUhNSMBMxUjZMjIZAEsZP5wZAGQyMjIA4Rk/BhkZAV4yAAAAQAAAAACvASwABsAADE1MxEjNSERMzUzNTMVIxUjFTMVMxUjNSM1IxFkZAEsZGTIZGRkZMhkZGQD6GT9RGTIyGTIZMjIZP7UAAAAAAEAyAAAAlgEsAAJAAABETMVITUzESM1AfRk/nBkZASw+7RkZAPoZAABAAAAAAK8AyAAEQAAMREhFTM1MxUzESMRIxEjESMRASxkyGTIZGRkAyBkZGT9RAJY/nABkP2oAAIAAAAAArwDIAAHAA8AABE1MxUzESMRMzUhFTMRIxHIZMjIASxkyAK8ZGT9RAK8ZGT9RAK8AAAAAgAAAAACvAMgAAsADwAANREzNSEVMxEjFSE1MyERIWQB9GRk/gxkASz+1GQCWGRk/ahkZAJYAAABAAD+1AK8AyAAFwAAFTMRIzUzFTMRMxEjNSEVMxEjFSERMxUhZGTIZMjIASxkZP7UZP5wyAOEZGT+DAH0ZGT+DGT+1GQAAAABAAD+1AK8AyAAFwAANREzNSEVIxEzETM1MxUjETMVITUzESE1ZAEsyMhkyGRk/nBk/tTIAfRkZP4MAfRkZPx8ZGQBLGQAAAABAAAAAAK8AyAAFQAAMTUzESM1MxUzNSEVMxUjNSMVIxEzFWRkyGQBLGTIZGRkZAJYZGRkZMjIZP4MZAABAAAAAAK8AyAAIwAAPQEzFSE1IzUjNSM1IzUzNSEVMxUjNSEVMxUzFTMVMxUjFSE1yAEsZMhkZGQB9GTI/tRkyGRkZP4MZGRkyGRkZGRkZGRkZGRkZMhkZAAAAAEAAAAAArwEsAAVAAARNTMRMzUzETMVIxEzNTMVIxUhNSMRyGRkyMhkyGT+1GQCvGQBLGT+cGT9qGRkZGQCWAACAAAAAAK8AyAABwAPAAA1ETMRMxUhNSERMxEzFSM1yMj+1AEsyGTIZAK8/URkZAK8/URkZAAAAAEAZAAAArwDIAAPAAA3ETMRMxEzESMVIxUjNSM1ZMjIyGRkyGTIAlj9qAJY/ahkZGRkAAABAAAAAAK8AyAAEwAANREzETMRMxEzETMRIxUjNSMVIzXIZGRkyGTIZMhkArz9qAEs/tQCWP1EZGRkZAABAAAAAAK8AyAAIwAANTM1MzUjNSM1MxUzFTM1MzUzFSMVIxUzFTMVIzUjNSMVIxUjZGRkZMhkZGTIZGRkZMhkZGTIyGTIZMjIZGTIyGTIZMjIZGTIAAAAAQAA/tQCvAMgABMAADURMxEhETMRIxUjFSE1ITUzNSE1yAEsyGRk/nABLGT+cMgCWP2oAlj8fGRkZGTIZAAAAAEAAAAAArwDIAAfAAA1MzUzNTM1MzUzNSEVIzUhFSMVIxUjFSMVIxUhNTMVIWRkZGRk/tTIArxkZGRkZAEsyP1EyGRkZGRkZMjIZGRkZGRkyAAAAAEAZAAAArwEsAATAAATNTMRMzUhFSMRIxUzETMVITUjEWTIZAEsyGRkyP7UZAH0yAGQZGT+cMj+cGRkAZAAAAACASwAAAH0BLAAAwAHAAABESMREyMRMwH0yMjIyASw/gwB9PtQAfQAAQBkAAACvASwABMAABM1IRUzETMVIxEjFSE1MxEzNSMRZAEsZMjIZP7UyGRkBExkZP5wyP5wZGQBkMgBkAAAAAEAAAPoArwEsAAPAAATNSEVMzUzFSMVITUjFSM1ZAEsZMhk/tRkyARMZGRkZGRkZGQAAAACAAAAZAK8A4QADwAXAAA1ETM1MzUzNTMVMxUzFTMRJSERIzUjFSNkZGRkZGRk/gwBLGRkZGQB9GRkZGRkZP4MZAGQZGQAAAACAMgAAAJYBLAACwAPAAA3ETMRMxEzESMVIzURMxUjyGTIZGTIyMhkASwBkP5w/tRkZARMyAAAAAEAZAAAArwEsAAbAAA3NSMRMzUzNTMVMxUzFSM1IxEzNTMVIxUjFSM1yGRkZMhkZMjIyMhkZMjIZAJYZMjIZGRk/ahkZGTIyAAAAAABAAAAAAK8BRQAHQAANTMRIzUzETM1IRUzFSM1IzUjETMVIxEzNTMVIxUhZGRkZAEsZGRkZGRkyMhk/ajIAfRkAZBkZMhkZP5wZP2oZGRkAAIAAABkArwETAAjACcAAD0BMzUjETM1IzUzFTMVMzUzNTMVIxUzESMVMxUjNSM1IxUjFREhESFkZGRkyGRkZMhkZGRkyGRkZAEs/tRkZMgBkMhkZGRkZGTI/nDIZGRkZGQBLAGQAAAAAQBkAAACvASwAB8AABMjETMRMxEzESMVIxUzFSMVMxUjESMRIzUzNSM1MzUjyGTIyMhkZMjIyMjIyMjIyGQDhAEs/tQBLP7UZGRkyGT+1AEsZMhkZAAAAAIBLAAAAfQEsAADAAcAAAERIxETIxEzAfTIyMjIBLD+DAH0+1AB9AACAAAAAAK8BLAAMwA/AAA9ATMVITUjNSM1IzUjNTM1MzUjNSM1MzUhFTMVIzUhFTMVMxUzFTMVIxUjFTMVMxUjFSE1ATUzNSM1IxUjFTMVyAEsZMhkZGRkZGRkAfRkyP7UZMhkZGRkZGRk/gwBLGRkZGRkZGRkZGRkZMhkZGRkZGRkZGRkZGTIZGRkZGRkASxkyGRkyGQAAAIAZARMArwFFAADAAcAABM1MxUzNTMVZMjIyARMyMjIyAAAAAUAAABkArwEsAALABcAGwAfACMAADURMzUhFTMRIxUhNTMhNTMRIzUhFSMRMzURMxExMxUjETUzFWQB9GRk/gxkASxkZP7UZGRkyMjIyAOEZGT8fGRkZAK8ZGT9RGQB9P4MZAJYZGQAAwBkAlgCvAUUAAkADQARAAATMzUhETMVITUjETUhFQERMxFkZAGQZP4MZAJY/nBkBLBk/nBkZP7UZGQCWP7UASwAAAACAAAAyAMgAyAAEwAnAAARNTM1MzUzFSMVIxUzFTMVIzUjNSE1MzUzNTMVIxUjFTMVMxUjNSM1ZGTIZGRkZMhkASxkZMhkZGRkyGQBkMhkZGRkyGRkZGTIZGRkZMhkZGRkAAAAAQAAAMgCvAK8AAUAABE1IREjEQK8yAJYZP4MAZAAAAABAGQB9AK8AlgAAwAAEzUhFWQCWAH0ZGQAAAAABQAAAGQCvASwAAsAFwAhACUAKQAANREzNSEVMxEjFSE1MyE1MxEjNSEVIxEzMREzFSMVMxUjETMRMxEDNTMVZAH0ZGT+DGQBLGRk/tRkZMhkZGRkZGRkyAOEZGT8fGRkZAK8ZGT9RAK8ZMhk/tQBLP7UAZDIyAAAAQAABRQDIAV4AAMAABE1IRUDIAUUZGQAAgBkAyACWAUUAAsADwAAEzM1IRUzESMVITUjExEzEWRkASxkZP7UZMhkBLBkZP7UZGQBLP7UASwAAAAAAgBkAAACvAPoAAMADwAAMzUhFQE1MxEzETMVIxEjEWQCWP2oyMjIyMhkZAJYZAEs/tRk/tQBLAABAGQCWAJYBRQAGwAAEzUzNTM1IxUjNTM1IRUzFSMVIxUjFTM1MxUhNchkZGTIZAEsZGRkZMhk/gwDIGRkyGRkZGTIZGRkZMjIAAAAAQBkAlgCWAUUABsAABMjNTMVMzUjNTM1IxUjNTM1IRUzFSMVMxUjFSHIZMhkZGRkyGQBLGRkZGT+1AK8ZGTIZMhkZGRkyGTIZAAAAAEAyAPoAlgFFAALAAABFSMVIzUzNTM1MxUB9GTIZGTIBLBkZGRkZGQAAAAAAQAA/tQCvAMgAA8AABUzETMRMxEzESMVIRUjFSNkyMjIZP7UZMjIA+j9RAK8/URkyGQAAAIAAAAAAyAEsAANABEAACEjESMRIxEjNSMRMzUhBSMRMwMgyGTIyGRkArz+DGRkBEz7tAJYZAGQZGT+cAAAAAABASwB9AH0AlgAAwAAASM1MwH0yMgB9GQAAAAAAQBk/zgCWADIAA0AABc1ITUjNTMVMxUzFSMVZAEsZGRkZGTIZGTIZGRkZAABAMgCWAJYBRQACwAAAREzFSE1MxEjNTM1AfRk/nBkZGQFFP2oZGQBkGRkAAMAZAJYAlgFFAALAA8AEwAAEzM1IRUzESMVITUjETUhFQERMxFkZAEsZGT+1GQB9P7UZASwZGT+1GRk/tRkZAJY/tQBLAAAAAIAAADIAyADIAATACcAAD0BMzUzNSM1IzUzFTMVMxUjFSMVMzUzNTM1IzUjNTMVMxUzFSMVIxVkZGRkyGRkZGTIZGRkZMhkZGRkyGRkyGRkZGTIZGRkZMhkZGRkyGRkAAMAAP84ArwFFAAbAB8ALwAAPQEzNTM1MzUzNTM1MzUzFSMVIxUjFSMVIxUjFQMRMxkBNTM1MzUzETMVIxUjNSE1ZGRkZGRkZGRkZGRkZGTIZGTIZGTI/tTIyGRkZGRkZMhkZGRkZGQB9AJY/aj9qGRkZP7UZMjIZAAAAAAEAAD/OAK8BRQAGwAfADUAOQAAPQEzNTM1MzUzNTM1MzUzFSMVIxUjFSMVIxUjFQMRMxETNTM1IzUhFTMVIxUjFSMVIRUhNTM9ASM1M2RkZGRkZGRkZGRkZGRkyMhkyAEsZGRkZAEs/gxkZGTIyGRkZGRkZMhkZGRkZGQB9AJY/aj9qGRkZGRkZGRkZMhkZGQAAAAAAwAA/zgCvAUUABsALwA/AAA9ATM1MzUzNTM1MzUzNTMVIxUjFSMVIxUjFSMVAzUzNSM1MzUjNSEVMxUjFTMVIxUTITUzNTM1MzUzETMVIxUjZGRkZGRkZGRkZGRkZGTIZGTIASxkZGRkZP7UZGRkyGRkyMjIZGRkZGRkyGRkZGRkZAH0ZMhkZGRkZGTIZP1EZGRkZP7UZMgAAAAAAgAAAAACvASwABMAFwAANREzNTMRMxEjFSMRITUzFSMVITUTNTMVZGTIZGQBLMhk/gxkyGQBkGQBLP7UZP5wyMhkZAOEyMgAAwAAAAACvAXcABMAGwAjAAAxETM1MzUzNTMVMxUzFTMRIxEhGQEhESM1IxUjESM1MxUzFSNkZGRkZGRkyP7UASxkZGRkyGTIA4RkZGRkZGT8fAH0/gwCWAEsZGQB9GRkZAAAAAMAAAAAArwF3AATABsAIwAAMREzNTM1MzUzFTMVMxUzESMRIRkBIREjNSMVIxM1MxUjFSM1ZGRkZGRkZMj+1AEsZGRkyMhkyAOEZGRkZGRk/HwB9P4MAlgBLGRkAfRkZGRkAAADAAAAAAK8BdwAEwAbACcAADERMzUzNTM1MxUzFTMVMxEjESEZASERIzUjFSMRNSEVMxUjNSMVIzVkZGRkZGRkyP7UASxkZGQBLGTIZMgDhGRkZGRkZPx8AfT+DAJYASxkZAH0ZGRkZGRkAAADAAAAAAK8BdwAEwAjACsAADERMzUzNTM1MxUzFTMVMxEjESERAzUzNSEVMzUzFSMVITUjFREhESM1IxUjZGRkZGRkZMj+1MhkASxkyGT+1GQBLGRkZAOEZGRkZGRk/HwB9P4MBRRkZGRkZGRkZP1EASxkZAAAAAAEAAAAAAK8BdwAEwAXAB8AIwAAMREzNTM1MzUzFTMVMxUzESMRIREDMxUjEyERIzUjFSMBMxUjZGRkZGRkZMj+1MjIyMgBLGRkZAEsyMgDhGRkZGRkZPx8AfT+DAXcyP1EASxkZAJYyAAAAAAEAAAAAAK8BdwADwAXACMAJwAAMREzNTM1IRUzFTMRIxEhGQEhESM1IxUjETUjNTM1IRUzFSMVJyMVM2RkASxkZMj+1AEsZGRkZGQBLGRkZGRkA4RkZGRk/HwB9P4MAlgBLGRkASxkZGRkZGTIZAAAAgAAAAACvASwABMAGQAAMREzNTM1IRUjETMVIxEzFSERIxkBMxEjFSNkZAH0ZGRkZP7UyMhkZAPoZGRk/nBk/gxkAlj9qAK8AZBkAAEAAP7UArwEsAArAAA1ETM1MzUhFTMVIzUjNSMVIxEzFTM1MzUzFSMVIxUzFSMVITUzNSM1IzUjNWRkAZBkZGTIZGTIZGRkZGRk/tTIZGRkyAMgZGRkyGRkZPzgZGRkyGRkZGRkZGRkZAAAAAIAAAAAArwF3AAbACMAADE1MxEjNSERIzUjNSMRMzUzESM1IxEzNTM1MxEBIzUzFTMVI2RkArxkZMhkZGRkyGRk/gxkyGTIZAPoZP7UZGT+cGT+1GT+DGRk/tQFeGRkZAAAAAACAAAAAAK8BdwAGwAjAAAxNTMRIzUhESM1IzUjETM1MxEjNSMRMzUzNTMRATUzFSMVIzVkZAK8ZGTIZGRkZMhkZP7UyGTIZAPoZP7UZGT+cGT+1GT+DGRk/tQFeGRkZGQAAAAAAgAAAAACvAXcABsAJwAAMTUzESM1IREjNSM1IxEzNTMRIzUjETM1MzUzEQE1IRUzFSM1IxUjNWRkArxkZMhkZGRkyGRk/gwBLGTIZMhkA+hk/tRkZP5wZP7UZP4MZGT+1AV4ZGRkZGRkAAAAAwAAAAACvAXcABsAHwAjAAAxNTMRIzUhESM1IzUjETM1MxEjNSMRMzUzNTMRATMVIyUzFSNkZAK8ZGTIZGRkZMhkZP2oyMgBkMjIZAPoZP7UZGT+cGT+1GT+DGRk/tQF3MjIyAAAAAACAMgAAAJYBdwACwATAAABIzUhFSMRMxUhNTMRIzUzFTMVIwEsZAGQZGT+cGRkyGTIBExkZPwYZGQFFGRkZAAAAgDIAAACWAXcAAsAEwAAASM1IRUjETMVITUzETUzNTMVIxUBLGQBkGRk/nBkZMhkBExkZPwYZGQEsGRkZGQAAAIAZAAAArwF3AALABcAABM1MzUhFTMVIzUjHQEjNSEVIxEzFSE1M2RkAZBkyMhkAZBkZP5wZAUUZGRkZGRkyGRk/BhkZAAAAAMAZAAAArwF3AADAA8AEwAAEzMVIxcjNSEVIxEzFSE1MxMzFSNkyMjIZAGQZGT+cGTIyMgF3MjIZGT8GGRkBXjIAAAAAgAAAAACvASwABMAHwAAMTUzESM1MxEjNSEVMxUzESMVIxUnNTMRIzUjETMVIxFkZGRkAfRkZGRkZGRkZGRkZAH0ZAGQZGRk/OBkZGRkAyBk/nBk/gwAAAIAAAAAArwF3AATACMAADERMxUzFTMVMxEzESM1IzUjNSMRAzUzNSEVMzUzFSMVITUjFchkZGTIyGRkZMhkASxkyGT+1GQEsMjIyAJY+1DIyMj9qAUUZGRkZGRkZGQAAAMAAAAAArwF3AATAB8AJwAANREzNTM1IRUzFTMRIxUjFSE1IzU7ARUzNTMRIzUjFSMRIzUzFTMVI2RkASxkZGRk/tRkZGRkZGRkZGTIZMjIAyBkZGRk/OBkZGRkZGQDIGRkAZBkZGQAAwAAAAACvAXcABMAHwAnAAA1ETM1MzUhFTMVMxEjFSMVITUjNTsBFTM1MxEjNSMVIxM1MxUjFSM1ZGQBLGRkZGT+1GRkZGRkZGRkyMhkyMgDIGRkZGT84GRkZGRkZAMgZGQBkGRkZGQAAAAAAwAAAAACvAXcABMAHwArAAA1ETM1MzUhFTMVMxEjFSMVITUjNTsBFTM1MxEjNSMVIxE1IRUzFSM1IxUjNWRkASxkZGRk/tRkZGRkZGRkZAEsZMhkyMgDIGRkZGT84GRkZGRkZAMgZGQBkGRkZGRkZAAAAAADAAAAAAK8BdwAEwAjAC8AADURMzUzNSEVMxUzESMVIxUhNSM1AzUzNSEVMzUzFSMVITUjFREzFTM1MxEjNSMVI2RkASxkZGRk/tRkZGQBLGTIZP7UZGRkZGRkZMgDIGRkZGT84GRkZGQETGRkZGRkZGRk+7RkZAMgZGQABAAAAAACvAXcABMAFwAjACcAADURMzUzNSEVMxUzESMVIxUhNSM1AzMVIxMzFTM1MxEjNSMVIwEzFSNkZAEsZGRkZP7UZGTIyMhkZGRkZGQBLMjIyAMgZGRkZPzgZGRkZAUUyPu0ZGQDIGRkAfTIAAEAAADIArwDIAAjAAA9ATM1MzUjNSM1MxUzFTM1MzUzFSMVIxUzFTMVIzUjNSMVIxVkZGRkyGRkZMhkZGRkyGRkZMhkZMhkZGRkZGRkZMhkZGRkZGQAAAADAAD/nAK8BRQAFwAjACcAABU1MzUjETM1MzUhNTMVIxUzESMVIxUhFREzETM1MxEjESMVIxMjETNkZGRkASzIZGRkZP7UZGRkZGRkyGRkZGTIAyBkZGRkyPzgZGRkAfT+1GQCWAEsZP2oAZAAAAAAAgAAAAACvAXcAAsAEwAANREzESERMxEjFSE1ETUzFTMVIzXIASzIZP4MyGTIZARM+7QETPu0ZGQFFGRkZGQAAAIAAAAAArwF3AALABMAADURMxEhETMRIxUhNRM1MzUzFSMVyAEsyGT+DMhkyGRkBEz7tARM+7RkZASwZGRkZAACAAAAAAK8BdwACwAXAAA1ETMRIREzESMVITURNTM1IRUzFSM1IxXIASzIZP4MZAEsZMhkZARM+7QETPu0ZGQEsGRkZGRkZAADAAAAAAK8BdwACwAPABMAADURMxEhETMRIxUhNQMzFSMlMxUjyAEsyGT+DGTIyAH0yMhkBEz7tARM+7RkZAV4yMjIAAIAZAAAArwF3AATABsAADM1MxEjNSMRMxEzETMRIxUjETMVAzUzFSMVIzXIZGRkyMjIZGRkyMhkyGQB9GQB9P4MAfT+DGT+DGQFeGRkZGQAAgAAAAACvASwABMAFwAAMTUzESM1IRUjFSEVMxEjFSEVMxUDMxEjZGQBkGQBLGRk/tRkZMjIZAPoZGTIZP5wZMhkAZABkAAAAQAAAAACvASwABsAADERMzUhFTMRIxUzFTMRIxUhNTMRIzUjNTMRIxFkAZBkZGRkZP7UyGRkZMgETGRk/nBkZP5wZGQBkGRkAZD7tAAAAAACAAAAAAK8BLAAFwAjAAA1ETM1ITUhNSEVMxEzFSM1IxEjETMVITUTNSM1MxUzFTMVIzVkASz+1AGQZGTIZMjI/tRkZMhkZMhkASxkyGRk/ahkZAEs/tRkZAOEZGRkZGRkAAAAAgAAAAACvASwABcAIwAANREzNSE1ITUhFTMRMxUjNSMRIxEzFSE1EzUzNTM1MxUjFSMVZAEs/tQBkGRkyGTIyP7UZGRkyGRkZAEsZMhkZP2oZGQBLP7UZGQDIGRkZGRkZAAAAAIAAAAAArwEsAAXACcAADURMzUhNSE1IRUzETMVIzUjESMRMxUhNRM1MzUzFTMVMxUjNSMVIzVkASz+1AGQZGTIZMjI/tRkZGRkZMhkyGQBLGTIZGT9qGRkASz+1GRkA4RkZGRkZGRkZAAAAAIAAAAAArwETAAXACcAADURMzUhNSE1IRUzETMVIzUjESMRMxUhNQM1MzUhFTM1MxUjFSE1IxVkASz+1AGQZGTIZMjI/tRkZAEsZMhk/tRkZAEsZMhkZP2oZGQBLP7UZGQDIGRkZGRkZGRkAAMAAAAAArwETAAXABsAHwAANREzNSE1ITUhFTMRMxUjNSMRIxEzFSE1AzUzFTM1MxVkASz+1AGQZGTIZMjI/tRkyMjIZAEsZMhkZP2oZGQBLP7UZGQDIMjIyMgAAwAAAAACvASwABcAIwAnAAA1ETM1ITUhNSEVMxEzFSM1IxEjETMVITUTIzUzNSEVMxUjFSE3NSMVZAEs/tQBkGRkyGTIyP7UZGRkASxkZP7UyGRkASxkyGRk/ahkZAEs/tRkZAOEZGRkZGRkZGQAAAEAAAAAArwDIAAhAAA1ETM1MzUjNSEVMxUzNSM1MxUzESMRMxUhNSMRIxEzFSM1ZGTIASxkZGTIZMjI/tRkZGTIZAEsZMhkZMjIZGT+1P7UZGQBLP7UZGQAAAAAAQAA/tQCvAMgAB8AADURMzUhFTMVIzUhESE1MxUjFSMVMxUjFSE1MzUjNSM1ZAH0ZMj+1AEsyGRkZGT+1MhkyGQCWGRkZGT9qGRkZGRkZGRkZGQAAwAAAAACvASwABEAFQAhAAA1ETM1IRUzESERITUzFSMVITUTITUhETUjNTMVMxUzFSM1ZAH0ZP4MASzIZP4MZAEs/tRkyGRkyGQCWGRk/tT+1GRkZGQBkMgBLGRkZGRkZAAAAAMAAAAAArwEsAARABUAIQAANREzNSEVMxEhESE1MxUjFSE1EyE1IT0BMzUzNTMVIxUjFWQB9GT+DAEsyGT+DGQBLP7UZGTIZGRkAlhkZP7U/tRkZGRkAZDIyGRkZGRkZAAAAAADAAAAAAK8BLAAEQAVACUAADURMzUhFTMRIREhNTMVIxUhNRMhNSERNTM1MxUzFTMVIzUjFSM1ZAH0ZP4MASzIZP4MZAEs/tRkZGRkyGTIZAJYZGT+1P7UZGRkZAGQyAEsZGRkZGRkZGQAAAAEAAAAAAK8BEwAEQAVABkAHQAANREzNSEVMxEhESE1MxUjFSE1AzUzFREhNSE3NTMVZAH0ZP4MASzIZP4MZMgBLP7UyMhkAlhkZP7U/tRkZGRkAyDIyP5wyMjIyAAAAAACAGQAAAJYBLAACwAVAAATNTMVMxUzFSM1IzURNTMRIzUhETMVZMhkZMhkZGQBLGQETGRkZGRkZPu0ZAJYZP1EZAAAAAIAyAAAAlgEsAAJABUAADM1MxEjNSERMxUBMzUzFSMVIxUjNTPIZGQBLGT+1GTIZGTIZGQCWGT9RGQETGRkZGRkAAAAAwBkAAACvARMAAMADQARAAATMxUjEzUzESM1IREzFQMzFSNkyMhkZGQBLGRkyMgETMj8fGQCWGT9RGQETMgAAAIAZAAAArwEsAAJABkAADM1MxEjNSERMxUBNTM1MxUzFTMVIzUjFSM1yGRkASxk/nBkyGRkyMjIZAJYZP1EZAPoZGRkZGRkZGQAAAAEAAAAAAK8BLAAGQAdACEAJQAANREzNSE1IzUjNSM1MxUzFTMVMxUzESMVITUDNTMVESERIRM1MxVkASxkZGTIZGRkZGT+DGTIASz+1MjIZAJYZGRkZGRkZGRk/URkZAMgZGT84AJYAZBkZAADAAAAAAK8BEwABwAXAB8AABE1MxUzESMRJzUzNSEVMzUzFSMVITUjFQUzESMRIzUhyGTIZGQBLGTIZP7UZAGQZMjIASwCvGRk/UQCvMhkZGRkZGRkZMj9RAK8ZAAAAAADAAAAAAK8BLAACwAPABsAADURMzUhFTMRIxUhNTMhESERNSM1MxUzFTMVIzVkAfRkZP4MZAEs/tRkyGRkyGQCWGRk/ahkZAJYASxkZGRkZGQAAAADAAAAAAK8BLAACwAPABsAADURMzUhFTMRIxUhNTMhESE9ATM1MzUzFSMVIxVkAfRkZP4MZAEs/tRkZMhkZGQCWGRk/ahkZAJYyGRkZGRkZAAAAAADAAAAAAK8BLAACwAPAB8AADURMzUhFTMRIxUhNTMhESERNTM1MxUzFTMVIzUjFSM1ZAH0ZGT+DGQBLP7UZGRkZMhkyGQCWGRk/ahkZAJYASxkZGRkZGRkZAAAAAMAAAAAArwETAALABsAHwAANREzNSEVMxEjFSE1AzUzNSEVMzUzFSMVITUjFREhESFkAfRkZP4MZGQBLGTIZP7UZAEs/tRkAlhkZP2oZGQDIGRkZGRkZGRk/OACWAAAAAQAAAAAArwETAALAA8AEwAXAAA1ETM1IRUzESMVITUDNTMVESERIQEzFSNkAfRkZP4MZMgBLP7UASzIyGQCWGRk/ahkZAMgyMj84AJYAZDIAAAAAAMAZABkArwD6AADAAcACwAAJSM1MyU1IRUDFSM1AfTIyP5wAljIyGTIyGRkAfTIyAAAAAADAAD/nAK8A4QAEwAbAB8AABU1MzUjETM1ITUzFSMVMxEjFSEVETMVMxEjNSMXFSM1ZGRkAZDIZGRk/nBkyGTIyGRkZGQCWGRkZGT9qGRkAZDIAZDIyMjIAAAAAAMAAAAAArwEsAAHABMAGwAANREzETMVITUTNSM1MxUzFTMVIzUTETMRMxUjNcjI/tRkZMhkZMhkyGTIZAK8/URkZAOEZGRkZGRk/HwCvP1EZGQAAAMAAAAAArwEsAAHABMAGwAANREzETMVITUTNTM1MzUzFSMVIxUZATMRMxUjNcjI/tRkZGTIZGTIZMhkArz9RGRkAyBkZGRkZGT84AK8/URkZAAAAAMAAAAAArwEsAAHABcAHwAANREzETMVITUDNTM1MzUzFTMVMxUjNSMVExEzETMVIzXIyP7UZGRkyGRkyMjIyGTIZAK8/URkZAMgZGRkZGRkZGT84AK8/URkZAAABAAAAAACvARMAAcACwATABcAADURMxEzFSE1AzUzFRMRMxEzFSM1AzUzFcjI/tRkyMjIZMhkyGQCvP1EZGQDIMjI/OACvP1EZGQDIMjIAAACAAD+1AK8BLAAEwAfAAA1ETMRIREzESMVIxUhNSE1MzUhNRM1MzUzNTMVIxUjFcgBLMhkZP5wASxk/nBkZGTIZGTIAlj9qAJY/HxkZGRkyGQCvGRkZGRkZAAAAAIAAP7UArwEsAARABUAABUzESM1IREhFTMRIxUhETMVIQEzESNkZAEsASxkZP7UZP5wASzIyMgFFGT+cGT+DGT+1GQB9AH0AAMAAP7UArwETAATABcAGwAANREzESERMxEjFSMVITUhNTM1ITUDNTMVJTMVI8gBLMhkZP5wASxk/nBkyAEsyMjIAlj9qAJY/HxkZGRkyGQCvMjIyMgAAAADAAAAAAK8BXgAEwAbAB8AADERMzUzNTM1MxUzFTMVMxEjESEZASERIzUjFSMBFSE1ZGRkZGRkZMj+1AEsZGRkAZD+DAOEZGRkZGRk/HwB9P4MAlgBLGRkAfRkZAAAAAACAAAAAAK8BEwAFwAbAAA1ETM1ITUhNSEVMxEzFSM1IxEjETMVITUBITUhZAEs/tQBkGRkyGTIyP7UAfT+DAH0ZAEsZMhkZP2oZGQBLP7UZGQDhGQAAAAAAwAAAAACvAXcABMAHwAnAAAxETM1MzUzNTMVMxUzFTMRIxEhEQM1MxUhNTMVIxUhNRMhESM1IxUjZGRkZGRkZMj+1MjIASzIZP4MZAEsZGRkA4RkZGRkZGT8fAH0/gwFeGRkZGRkZPzgASxkZAAAAAIAAAAAArwETAAXACMAADURMzUhNSE1IRUzETMVIzUjESMRMxUhNQM1MxUzNTMVIxUhNWQBLP7UAZBkZMhkyMj+1GTIyMhk/nBkASxkyGRk/ahkZAEs/tRkZAOEZGRkZGRkAAACAAD/OAK8BLAAGwAjAAAxETM1MzUzNTMVMxUzFTMRIxUzFSM1IzUzESEZASERIzUjFSNkZGRkZGRkZGTIZGT+1AEsZGRkA4RkZGRkZGT8fGRkZMgBkP4MAlgBLGRkAAACAAD/OAK8AyAAFwAbAAA1ETM1ITUhNSEVMxEzFSMVMxUjNSM1IzU7AREjZAEs/tQBkGRkyGTIZMhkyMhkASxkyGRk/ahkZGRkZGQBLAAAAAIAAAAAArwF3AAfACcAADURMzUzNSEVMxUjNSM1IxUjETMVMzUzNTMVIxUhNSM1ATUzFSMVIzVkZAGQZGRkyGRkyGRkZP5wZAEsyGTIyAMgZGRkyGRkZPzgZGRkyGRkZASwZGRkZAAAAgAAAAACvASwABMAHwAANREzNSEVMxUjNSERITUzFSMVITUTNTM1MzUzFSMVIxVkAfRkyP7UASzIZP4MZGRkyGRkZAJYZGRkZP2oZGRkZAMgZGRkZGRkAAIAAAAAArwF3AAfACsAADURMzUzNSEVMxUjNSM1IxUjETMVMzUzNTMVIxUhNSM1EzUhFTMVIzUjFSM1ZGQBkGRkZMhkZMhkZGT+cGRkASxkyGTIyAMgZGRkyGRkZPzgZGRkyGRkZASwZGRkZGRkAAACAAAAAAK8BLAAEwAjAAA1ETM1IRUzFSM1IREhNTMVIxUhNRM1MzUzFTMVMxUjNSMVIzVkAfRkyP7UASzIZP4MZGRkZGTIZMhkAlhkZGRk/ahkZGRkA4RkZGRkZGRkZAACAAAAAAK8BdwAHwAjAAA1ETM1MzUhFTMVIzUjNSMVIxEzFTM1MzUzFSMVITUjNRMzFSNkZAGQZGRkyGRkyGRkZP5wZMjIyMgDIGRkZMhkZGT84GRkZMhkZGQFFMgAAAACAAAAAAK8BEwAEwAXAAA1ETM1IRUzFSM1IREhNTMVIxUhNRM1MxVkAfRkyP7UASzIZP4MZMhkAlhkZGRk/ahkZGRkAyDIyAACAAAAAAK8BdwAHwArAAA1ETM1MzUhFTMVIzUjNSMVIxEzFTM1MzUzFSMVITUjNRMjNTMVMzUzFSMVIWRkAZBkZGTIZGTIZGRk/nBkZGTIZMhk/tTIAyBkZGTIZGRk/OBkZGTIZGRkBLBkZGRkZAAAAgAAAAACvASwABMAIwAANREzNSEVMxUjNSERITUzFSMVITUTNSM1MxUzNTMVIxUjFSM1ZAH0ZMj+1AEsyGT+DGRkyGTIZGRkZAJYZGRkZP2oZGRkZAOEZGRkZGRkZGQAAwAAAAACvAXcAA8AGwAjAAAxNTMRIzUhFTMVMxEjFSMVASM1MxUzNTMVIxUhEzUzESM1IxFkZAH0ZGRkZP7UZMhkyGT+1MhkZGRkA+hkZGT84GRkBXhkZGRkZPtQZAMgZPwYAAIAAAAAArwF3AAZACUAADURMzUzNTMRIzUhETMVIzUjESMVIxEzFSE1EzUzFTM1MxUjFSE1ZGTIZAEsZMhkZGTI/tRkyGTIZP7UZAH0ZGQBLGT7tGRkAlhk/gxkZAUUZGRkZGRkAAAAAgAAAAACvASwABMAHwAAMTUzESM1MxEjNSEVMxUzESMVIxUnNTMRIzUjETMVIxFkZGRkAfRkZGRkZGRkZGRkZAH0ZAGQZGRk/OBkZGRkAyBk/nBk/gwAAAEAAAAAArwEsAAhAAA1ETM1MzUzNSM1MzUjNSEVMxUjETMVIzUjESMVIxEzFSE1ZGTIZGRkASxkZGTIZGRkyP7UZAH0ZGRkZGRkyGT84GRkAlhk/gxkZAACAAAAAAK8BXgAGwAfAAAxNTMRIzUhESM1IzUjETM1MxEjNSMRMzUzNTMRAxUhNWRkArxkZMhkZGRkyGRkZP4MZAPoZP7UZGT+cGT+1GT+DGRk/tQFeGRkAAAAAAMAAAAAArwETAARABUAGQAANREzNSEVMxEhESE1MxUjFSE1EyE1IQEhNSFkAfRk/gwBLMhk/gxkASz+1AGQ/gwB9GQCWGRk/tT+1GRkZGQBkMgBLGQAAAACAAAAAAK8BdwAGwAnAAAxNTMRIzUhESM1IzUjETM1MxEjNSMRMzUzNTMRATUzFSE1MxUjFSE1ZGQCvGRkyGRkZGTIZGT9RMgBLMhk/gxkA+hk/tRkZP5wZP7UZP4MZGT+1AV4ZGRkZGRkAAADAAAAAAK8BEwAEQAdACEAADURMzUhFTMRIREhNTMVIxUhNQM1MxUhNTMVIxUhNRMhNSFkAfRk/gwBLMhk/gxkyAEsyGT+DGQBLP7UZAJYZGT+1P7UZGRkZAOEZGRkZGRk/gzIAAAAAAIAAAAAArwF3AAbAB8AADE1MxEjNSERIzUjNSMRMzUzESM1IxEzNTM1MxEBMxUjZGQCvGRkyGRkZGTIZGT+cMjIZAPoZP7UZGT+cGT+1GT+DGRk/tQF3MgAAAAAAwAAAAACvARMABEAFQAZAAA1ETM1IRUzESERITUzFSMVITUTITUhPQEzFWQB9GT+DAEsyGT+DGQBLP7UyGQCWGRk/tT+1GRkZGQBkMjIyMgAAAAAAQAA/zgCvASwACMAADE1MxEjNSERIzUjNSMRMzUzESM1IxEzNTM1MxEjFTMVIzUjNWRkArxkZMhkZGRkyGRkyGTIZGQD6GT+1GRk/nBk/tRk/gxkZP7UZGRkZAACAAD/OAK8AyAAGQAdAAA1ETM1IRUzESERITUzFSMVIxUzFSM1IzUjNRMhNSFkAfRk/gwBLMhkZGTIZMhkASz+1GQCWGRk/tT+1GRkZGRkZGRkAZDIAAAAAgAAAAACvAXcABsAJwAAMTUzESM1IREjNSM1IxEzNTMRIzUjETM1MzUzEQEjNTMVMzUzFSMVIWRkArxkZMhkZGRkyGRk/gxkyGTIZP7UZAPoZP7UZGT+cGT+1GT+DGRk/tQFeGRkZGRkAAAAAwAAAAACvASwABEAFQAlAAA1ETM1IRUzESERITUzFSMVITUTITUhETUjNTMVMzUzFSMVIxUjNWQB9GT+DAEsyGT+DGQBLP7UZMhkyGRkZGQCWGRk/tT+1GRkZGQBkMgBLGRkZGRkZGRkAAAAAwAAAAACvAXcABkAJQAtAAA1ETM1MzUhFTMVIzUjNSMVIxEzFTMVITUjNRM1IRUzFSM1IxUjNQEjESM1IREjZGQBkGRkZMhkZMj+1GRkASxkyGTIAfRkyAGQZMgDIGRkZMhkZGT84GRkZGQEsGRkZGRkZPrsAZBk/agAAAIAAP7UArwEsAAbACsAABU1MxUzESE1IxEzNSEVIxEzETM1MxUjESMVITUTNTM1MxUzFTMVIzUjFSM1yMj+1GRkASzIyGTIZGT+cGRkZGRkyGTIyGRkASxkAfRkZP4MAfRkZPx8ZGQEsGRkZGRkZGRkAAAAAwAAAAACvAXcABkAJQAtAAA1ETM1MzUhFTMVIzUjNSMVIxEzFTMVITUjNRMjNTMVMzUzFSMVIQEjESM1IREjZGQBkGRkZMhkZMj+1GRkZMjIyGT+cAGQZMgBkGTIAyBkZGTIZGRk/OBkZGRkBLBkZGRkZPtQAZBk/agAAAIAAP7UArwETAAbACcAABU1MxUzESE1IxEzNSEVIxEzETM1MxUjESMVITUDNTMVMzUzFSMVITXIyP7UZGQBLMjIZMhkZP5wZMjIyGT+cMhkZAEsZAH0ZGT+DAH0ZGT8fGRkBLBkZGRkZGQAAAMAAAAAArwF3AAZACEAJQAANREzNTM1IRUzFSM1IzUjFSMRMxUzFSE1IzUFIxEjNSERIwEzFSNkZAGQZGRkyGRkyP7UZAH0ZMgBkGT+1MjIyAMgZGRkyGRkZPzgZGRkZGQBkGT9qAXcyAAAAAIAAP7UArwETAAbAB8AABU1MxUzESE1IxEzNSEVIxEzETM1MxUjESMVITUTNTMVyMj+1GRkASzIyGTIZGT+cGTIyGRkASxkAfRkZP4MAfRkZPx8ZGQETMjIAAAAAgAA/zgCvASwAB8AJwAANREzNTM1IRUzFSM1IzUjFSMRMxUzFSMVITUzNSM1IzUFIxEjNSERI2RkAZBkZGTIZGTIZP7UyGRkAfRkyAGQZMgDIGRkZMhkZGT84GTIZGRkZGRkAZBk/agAAAAAAgAA/tQCvASwABsAJwAAFTUzFTMRITUjETM1IRUjETMRMzUzFSMRIxUhNRM1MzUhFSMVMxUjNcjI/tRkZAEsyMhkyGRk/nBkZAEsyGTIyGRkASxkAfRkZP4MAfRkZPx8ZGQEsGRkZGRkZAAAAgAAAAACvAXcAAsAFwAAMREzESERMxEjESERAzUzNSEVMxUjNSMVyAEsyMj+1GRkASxkyGQEsP4MAfT7UAJY/agFFGRkZGRkZAAAAAMAAAAAArwF3AALABcAHwAAMTUzESM1IREzFSMRAzUhFTMVIzUjFSM1ATUzFTMRIxFkZAEsZGRkASxkyGTIASzIZMhkA+hk/gxk/agFeGRkZGRkZP1EZGT9RAK8AAAAAAIAAAAAArwEsAALAA8AADERMxUhNTMRIxEhGQEhESHIASzIyP7UASz+1ASwZGT7UAJY/agCvAEsAAAAAAIAAAAAArwEsAAPABcAADE1MxEjNSEVIRUhETMVIxETNTMVMxEjEWRkASwBLP7UZGRkyGTIZAPoZGRk/tRk/agCvGRk/UQCvAAAAAACAAAAAAK8BdwADwAbAAARNTM1IRUzNTMVIxUhNSMVETUzESM1IRUjETMVZAEsZMhk/tRkZGQBkGRkBRRkZGRkZGRkZPrsZAPoZGT8GGQAAAIAAAAAArwETAAPABkAABE1MzUhFTM1MxUjFSE1IxURNTMRIzUhETMVZAEsZMhk/tRkZGQBLGQDhGRkZGRkZGRk/HxkAlhk/URkAAACAGQAAAK8BXgAAwAPAAATNSEVBSM1IRUjETMVITUzZAJY/nBkAZBkZP5wZAUUZGTIZGT8GGRkAAIAZAAAAlgETAADAA0AABMhFSETNTMRIzUhETMVZAH0/gxkZGQBLGQETGT8GGQCWGT9RGQAAAAAAgBkAAACvAXcAAsAFwAAEzUzFTM1MxUjFSE1EyM1IRUjETMVITUzZMjIyGT+cGRkAZBkZP5wZAV4ZGRkZGRk/tRkZPwYZGQAAgBkAAACvARMAAsAFQAAEzMVMzUzFSMVITUjEzUzESM1IREzFWTIyMhk/nBkZGRkASxkBExkZGRkZPwYZAJYZP1EZAABAMj/OAJYBLAAEwAAASM1IRUjETMVIxUzFSM1IzUjNTMBLGQBkGRkZGTIZGRkBExkZPwYZGRkZGRkAAACAMj/OAJYBLAAAwAVAAABMxUjAzUzESM1IREzFSMVMxUjNSM1ASzIyGRkZAEsZGRkyGQEsMj8GGQCWGT9RGRkZGRkAAIAyAAAAlgF3AALAA8AAAEjNSEVIxEzFSE1MxEzFSMBLGQBkGRk/nBkyMgETGRk/BhkZAV4yAAAAQDIAAACWAMgAAkAACUzFSE1MxEjNSEB9GT+cGRkASxkZGQCWGQAAAEAAAAAAyAEsAATAAAxETMRMxUzESM1IRUjESMVITUjFcjIZGQBkGRk/tRkBLD8fMgD6GRk/BhkZGQAAAQAAP7UArwEsAADAAcAFQAZAAAxETMRAzUzFREzFTMRIzUhESMVITUjATMVI8jIyMhkZAEsZP7UZAEsyMgDIPzgA+jIyPwYyAOEZPwYZGQFeMgAAAIAAAAAAyAF3AAPABsAAD0BMxUhESM1IRUjESMVITUBNSEVMxUjNSMVIzXIASxkAZBkZP4MASwBLGTIZMhkyMgD6GRk/BhkZAUUZGRkZGRkAAAAAAIAAP7UArwEsAANAB0AADEzFTMRIzUhESMVITUjEzUzNTM1MxUzFTMVIzUjFcjIZAEsZP5wZMhkZGRkZMhkyAOEZPwYZGQETGRkZGRkZGRkAAAAAAIAAP84ArwEsAAbACMAADE1MxEjNSERMzUzETMRIxUjFTMRMxEjESM1IxEXFSE1MzUzFWRkASxkZMhkZGRkyGRkZP7UyMhkA+hk/gzIASz+1Mhk/tT+1AEsyP4MZGRkZGQAAAACAAD/OAK8BLAAGwAjAAAxNTMRIzUhETM1MzUzFSMVIxUzFTMVIzUjNSMRFxUhNTM1MxVkZAEsZGTIZGRkZMhkZGT+1MjIZAPoZP1EZMjIZMhkyMhk/tRkZGRkZAAAAAABAAAAAAK8AyAAGwAAMTUzESM1IREzNTM1MxUjFSMVMxUzFSM1IzUjEWRkASxkZMhkZGRkyGRkZAJYZP7UZMjIZMhkyMhk/tQAAAAAAgAAAAACvAXcAA8AFwAAMTUzESM1IRUjETM1MzUzEQE1MzUzFSMVZGQBkGTIZGT9qGTIZGQD6GRk/BhkZP7UBRRkZGRkAAAAAgDIAAACWAXcAAkAEQAAASM1IREzFSE1MxE1MzUzFSMVASxkASxk/nBkZMhkBExk+7RkZASwZGRkZAAAAQAA/zgCvASwABcAADE1MxEjNSEVIxEzNTM1MxEjFSMVITUzNWRkAZBkyGRkyGT+1MhkA+hkZPwYZGT+1GRkZGQAAAABAGT/OAJYBLAAEQAAFzUzNSM1MxEjNSERMxUjFSMVZMhkZGQBLGRkZMhkZGQD6GT7tGRkZAAAAAIAAAAAArwF3AAPABsAADE1MxEjNSEVIxEzNTM1MxEBNTMVMzUzFSMVITVkZAGQZMhkZP1EyGTIZP7UZAPoZGT8GGRk/tQFeGRkZGRkZAAAAgBkAAACWAXcAAsAFQAAEzUzFTM1MxUjFSE1EyM1IREzFSE1M2TIZMhk/tRkZAEsZP5wZAV4ZGRkZGRk/tRk+7RkZAACAAAAAAK8BLAADwATAAAxNTMRIzUhFSMRMzUzNTMRAzUzFWRkAZBkyGRkyMhkA+hkZPwYZGT+1AH0yMgAAAAAAgBkAAACvASwAAkADQAAEzUhETMVITUzEQE1MxVkASxk/nBkASzIBExk+7RkZAPo/ajIyAAAAAABAAAAAAK8BLAAFwAAMTUzESM1MxEjNSEVIxEzFSMRMzUzNTMRZGRkZAGQZGRkyGRkZAGQZAH0ZGT+cGT+DGRk/tQAAAEAyAAAAlgEsAARAAABIzUhETMVIxEzFSE1MxEjNTMBLGQBLGRkZP5wZGRkBExk/gxk/gxkZAGQZAAAAAIAAAAAArwF3AATABsAADERMxUzFTMVMxEzESM1IzUjNSMREzUzFSMVIzXIZGRkyMhkZGTIyGTIBLDIyMgCWPtQyMjI/agFeGRkZGQAAAAAAwAAAAACvASwAAcAEwAbAAARNTMVMxEjETc1MzUzNTMVIxUjFRczESMRIzUhyGTIZGRkyGRkyGTIyAEsArxkZP1EArzIZGRkZGRkyP1EArxkAAAAAgAA/zgCvASwABMAGwAAMREzFTMVMxUzETMRIzUjNSM1IxEXFSE1MzUzFchkZGTIyGRkZMj+1MjIBLDIyMgCWPtQyMjI/ahkZGRkZAAAAAADAAD/OAK8AyAABwAPABcAABE1MxUzESMZATUzNTMVIxUDNSEVMxEjEchkyMjIZGQBLGTIArxkZP1EArz8fGRkZGQDhGRk/UQCvAAAAgAAAAACvAXcABMAHwAAMREzFTMVMxUzETMRIzUjNSM1IxkBIzUzFTM1MxUjFSHIZGRkyMhkZGRkyGTIZP7UBLDIyMgCWPtQyMjI/agFeGRkZGRkAAAAAAMAAAAAArwEsAAHABcAHwAAETUzFTMRIxETNSM1MxUzNTMVIxUjFSM1ATMRIxEjNSHIZMhkZMhkyGRkZAEsZMjIASwCvGRk/UQCvAEsZGRkZGRkZGT+1P1EArxkAAAAAAMAAAAAArwEsAAHAA8AFwAAEzMVIxUjNTMDNTMVMxEjETM1IRUzESMRZMhkyGRkyGTIyAEsZMgEsMhkZP7UZGT9RAK8ZGT9RAK8AAABAAD+1AK8BLAAFwAAMREzFTMVMxUzETMRIxUhNTMRIzUjNSMRyGRkZMhk/tTIZGRkBLDIyMgCWPqIZGQBkMjI/agAAAIAAP7UArwDIAAHABMAABE1MxUzESMREzMRIzUhFTMRIxUhyGTIyMjIASxkZP7UArxkZP1EArz8fAOEZGT8fGQAAAAAAwAAAAACvAV4ABMAHwAjAAA1ETM1MzUhFTMVMxEjFSMVITUjNTsBFTM1MxEjNSMVIwEVITVkZAEsZGRkZP7UZGRkZGRkZGQBkP4MyAMgZGRkZPzgZGRkZGRkAyBkZAGQZGQAAAMAAAAAArwETAALAA8AEwAANREzNSEVMxEjFSE1ESEVIRMhESFkAfRkZP4MAfT+DGQBLP7UZAJYZGT9qGRkA+hk/HwCWAAAAAMAAAAAArwF3AATAB8AKwAANREzNTM1IRUzFTMRIxUjFSE1IzUDNTMVITUzFSMVITUTMxUzNTMRIzUjFSNkZAEsZGRkZP7UZGTIASzIZP4MZGRkZGRkZMgDIGRkZGT84GRkZGQEsGRkZGRkZPtQZGQDIGRkAAAAAAMAAAAAArwETAALABcAGwAANREzNSEVMxEjFSE1AzUzFSE1MxUjFSE1EyERIWQB9GRk/gxkyAEsyGT+DGQBLP7UZAJYZGT9qGRkA4RkZGRkZGT8fAJYAAAEAAAAAAK8BdwAEwAbACcALwAANREzNTM1IRUzFTMRIxUjFSE1IzUDNTM1MxUjFREzFTM1MxEjNSMVIxM1MzUzFSMVZGQBLGRkZGT+1GRkZMhkZGRkZGRkyGTIZMgDIGRkZGT84GRkZGQETGRkZGT7tGRkAyBkZAEsZGRkZAAAAAQAAAAAArwETAALABMAFwAfAAA1ETM1IRUzESMVITUDNTM1MxUjFREhESE3NTM1MxUjFWQB9GRk/gxkZMhkASz+1MhkyGRkAlhkZP2oZGQDIGRkZGT84AJYyGRkZGQAAAIAAAAAArwEsAATABsAADURMzUzNSEVIxEzFSMRMxUhNSM1OwEVMxEjFSNkZAH0ZGRkZP4MZGRkZGRkyAMgZGRk/nBk/gxkZGRkA+hkAAAAAgAAAAACvAMgAAsAHQAANREzNTMVIxEzFSM1ISMRMxUzNSM1MxUzESMRMxUhZMhkZMgBLGRkZGTIZMjI/tRkAlhkZP2oZGQCWMjIZGT+1P7UZAAAAwAAAAACvAXcABMAGwAfAAAxNTMRIzUhFTMRIxEzESMRIzUjERM1MxUjFSM1GQEzEWRkAlhkZGTIZGRkyGTIyGQD6GRk/nD+1P5wAZDI/agFeGRkZGT+1P5wAZAAAAAAAgAAAAACvASwABUAIQAAMTUzESM1MxUzNSEVMxUjNSMVIxEzFQM1MzUzNTMVIxUjFWRkyGQBLGTIZGRkyGRkyGRkZAJYZGRkZMjIZP4MZAOEZGRkZGRkAAIAAP84ArwEsAAdACEAADE1MxEjNSEVMxEjETMRIxEjNSMRMxUzFSMVITUzNRkBMxFkZAJYZGRkyGRkZGRk/tTIyGQD6GRk/nD+1P5wAZDI/gxkZGRkZARM/nABkAAAAAEAAP84ArwDIAAdAAAxNTMRIzUzFTM1IRUzFSM1IxUjETMVMxUjFSE1MzVkZMhkASxkyGRkZGRk/tTIZAJYZGRkZMjIZP4MZGRkZGQAAAAAAwAAAAACvAXcABMAHwAjAAAxNTMRIzUhFTMRIxEzESMRIzUjEQMjNTMVMzUzFSMVIRcRMxFkZAJYZGRkyGRkZGTIZMhk/tRkyGQD6GRk/nD+1P5wAZDI/agFeGRkZGRkyP5wAZAAAAACAAAAAAK8BLAAFQAlAAAxNTMRIzUzFTM1IRUzFSM1IxUjETMVAzUjNTMVMzUzFSMVIxUjNWRkyGQBLGTIZGRkyGTIZMhkZGRkAlhkZGRkyMhk/gxkA+hkZGRkZGRkZAACAAAAAAK8BdwAIwArAAA9ATMVIREjNSM1IzUjETM1IRUzFSM1IREzFTMVMxUzESMVITUBNTMVIxUjNcgBLGTIZGRkAfRkyP7UZMhkZGT+DAEsyGTIZMjIAZBkZGQBLGRkyMj+1GRkZP5wZGQFFGRkZGQAAAIAAAAAArwEsAAjAC8AAD0BMxUhNSM1IzUjNSM1MzUhFTMVIzUhFTMVMxUzFTMVIxUhNRM1MzUzNTMVIxUjFcgBLGTIZGRkAfRkyP7UZMhkZGT+DGRkZMhkZGRkZMhkZGRkZGRkZGRkZGTIZGQDIGRkZGRkZAAAAAIAAAAAArwF3AAjAC8AAD0BMxUhESM1IzUjNSMRMzUhFTMVIzUhETMVMxUzFTMRIxUhNRM1IRUzFSM1IxUjNcgBLGTIZGRkAfRkyP7UZMhkZGT+DGQBLGTIZMhkyMgBkGRkZAEsZGTIyP7UZGRk/nBkZAUUZGRkZGRkAAACAAAAAAK8BLAAIwAzAAA9ATMVITUjNSM1IzUjNTM1IRUzFSM1IRUzFTMVMxUzFSMVITUBIxUjNTM1MzUzFTMVMxUjyAEsZMhkZGQB9GTI/tRkyGRkZP4MASxkyGRkZGRkyGRkZMhkZGRkZGRkZGRkZGTIZGQDhGRkZGRkZGQAAAEAAP84ArwEsAArAAA9ATMVIREjNSM1IzUjETM1IRUzFSM1IREzFTMVMxUzESMVIxUjFSE1MzUjNcgBLGTIZGRkAfRkyP7UZMhkZGRkZP7UyMhkyMgBkGRkZAEsZGTIyP7UZGRk/nBkZGRkZGQAAAABAAD/OAK8AyAAKwAAPQEzFSE1IzUjNSM1IzUzNSEVMxUjNSEVMxUzFTMVMxUjFSMVIxUhNTM1IzXIASxkyGRkZAH0ZMj+1GTIZGRkZGT+1MjIZGRkyGRkZGRkZGRkZGRkZMhkZGRkZGQAAAACAAAAAAK8BdwAIwAvAAA9ATMVIREjNSM1IzUjETM1IRUzFSM1IREzFTMVMxUzESMVITUTIzUzFTM1MxUjFSHIASxkyGRkZAH0ZMj+1GTIZGRk/gxkZMhkyGT+1GTIyAGQZGRkASxkZMjI/tRkZGT+cGRkBRRkZGRkZAAAAgAAAAACvASwACMAMwAAPQEzFSE1IzUjNSM1IzUzNSEVMxUjNSEVMxUzFTMVMxUjFSE1ARUjNSM1IzUzFTM1MxUjFcgBLGTIZGRkAfRkyP7UZMhkZGT+DAEsZGRkyGTIZGRkZMhkZGRkZGRkZGRkZGTIZGQDhGRkZGRkZGRkAAABAGT/OAK8BLAAFwAAEyERIzUjETMVIxUjFSM1MzUjNTMRIxUjZAJYZGRkZGTIZGRkZGQEsP7UZPx8ZGRkZGRkA4RkAAEAAP84ArwEsAAbAAARNTMRMzUzETMVIxEzNTMVIxUjFSMVIzUzNSMRyGRkyMhkyGRkZMhkZAK8ZAEsZP5wZP2oZGRkZGRkyAJYAAACAGQAAAK8BdwADwAbAAAzNTMRIxUjESERIzUjETMVASM1MxUzNTMVIxUhyGRkZAJYZGRk/nBkyGTIZP7UZAOEZAEs/tRk/HxkBXhkZGRkZAAAAAACAAAAAAK8BdwAFQAhAAARNTMRMzUzETMVIxEzNTMVIxUhNSMZASM1MxUzNTMVIxUhyGRkyMhkyGT+1GRkyGTIZP7UArxkASxk/nBk/ahkZGRkAlgCvGRkZGRkAAEAZAAAArwEsAAXAAATIREjNSMRMxUjETMVITUzESM1MxEjFSNkAlhkZMjIZP5wZMjIZGQEsP7UZP5wZP5wZGQBkGQBkGQAAAEAAAAAArwEsAAdAAARNTM1IzUzETM1MxEzFSMVMxUjETM1MxUjFSE1IxHIyMhkZMjIyMhkyGT+1GQBkGTIZAEsZP5wZMhk/tRkZGRkASwAAgAAAAACvAXcAAsAGwAANREzESERMxEjFSE1AzUzNSEVMzUzFSMVITUjFcgBLMhk/gxkZAEsZMhk/tRkZARM+7QETPu0ZGQEsGRkZGRkZGRkAAAAAwAAAAACvARMAAcAFwAfAAA1ETMRMxUhNQM1MzUhFTM1MxUjFSE1IxUTETMRMxUjNcjI/tRkZAEsZMhk/tRkyMhkyGQCvP1EZGQDIGRkZGRkZGRk/OACvP1EZGQAAAAAAgAAAAACvAV4AAsADwAANREzESERMxEjFSE1AzUhFcgBLMhk/gxkArxkBEz7tARM+7RkZASwZGQAAAAAAwAAAAACvARMAAcACwATAAA1ETMRMxUhNQM1IRUDETMRMxUjNcjI/tRkAljIyGTIZAK8/URkZAOEZGT8fAK8/URkZAACAAAAAAK8BdwACwAXAAA1ETMRIREzESMVITURIzUzFSE1MxUjFSHIASzIZP4MZMgBLMhk/gxkBEz7tARM+7RkZAUUZGRkZGQAAAAAAwAAAAACvARMAAcAEwAbAAA1ETMRMxUhNQM1MxUzNTMVIxUhNQERMxEzFSM1yMj+1GTIyMhk/nABLMhkyGQCvP1EZGQDhGRkZGRkZPx8Arz9RGRkAAAAAAMAAAAAArwF3AALABcAGwAANREzESERMxEjFSE1EzUjNTM1IRUzFSMVJyMVM8gBLMhk/gxkZGQBLGRkZGRkZAPo/BgD6PwYZGQETGRkZGRkZMhkAAQAAAAAArwEsAAHABMAGwAfAAA1ETMRMxUhNRMjNTM1IRUzFSMVIRMRMxEzFSM1AzUjFcjI/tRkZGQBLGRk/tTIyGTIZGRkArz9RGRkA4RkZGRkZPzgArz9RGRkA4RkZAAAAAADAAAAAAK8BdwACwATABsAADURMxEhETMRIxUhNQM1MzUzFSMVMzUzNTMVIxXIASzIZP4MZGTIZMhkyGRkBEz7tARM+7RkZASwZGRkZGRkZGQAAAAEAAAAAAK8BEwABwAPABcAHwAANREzETMVITUDNTM1MxUjFRMRMxEzFSM1AzUzNTMVIxXIyP7UZGTIZMjIZMhkZMhkZAK8/URkZAMgZGRkZPzgArz9RGRkAyBkZGRkAAABAAD/OAK8BLAAEwAANREzESERMxEjFSMVMxUjNSM1IzXIASzIZGRkyGTIZARM+7QETPu0ZGRkZGRkAAABAAD/OAK8AyAAEwAANREzETMRMxEzFSMVMxUjNSM1IzXIyMhkyGTIZMhkArz9RAK8/URkZGRkZGQAAAACAAAAAAK8BdwAEwAfAAA1ETMRMxEzETMRMxEjFSM1IxUjNRM1IRUzFSM1IxUjNchkZGTIZMhkyGQBLGTIZMjIA+j8fAEs/tQDhPwYyMjIyASwZGRkZGRkAAAAAAIAAAAAArwEsAATACMAADURMxEzETMRMxEzESMVIzUjFSM1EzUzNTMVMxUzFSM1IxUjNchkZGTIZMhkyGRkZGRkyGTIZAK8/agBLP7UAlj9RGRkZGQDhGRkZGRkZGRkAAIAZAAAArwF3AATAB8AADM1MxEjNSMRMxEzETMRIxUjETMVATUhFTMVIzUjFSM1yGRkZMjIyGRkZP5wAZBkyMjIZAH0ZAH0/gwB9P4MZP4MZAV4ZGRkZGRkAAAAAgAA/tQCvASwABMAIwAANREzESERMxEjFSMVITUhNTM1ITUTNTM1MxUzFTMVIzUjFSM1yAEsyGRk/nABLGT+cGRkZGRkyGTIyAJY/agCWPx8ZGRkZMhkAyBkZGRkZGRkZAAAAAMAZAAAArwF3AATABcAGwAAMzUzESM1IxEzETMRMxEjFSMRMxUBMxUjJTMVI8hkZGTIyMhkZGT+DMjIAZDIyGQB9GQB9P4MAfT+DGT+DGQF3MjIyAAAAAACAAAAAAK8BdwAIwArAAAxETM1MzUzNTM1MxEhFSMVIxEhESMVIxUjFSMVIxEhNTM1MxEBNTMVIxUjNWRkZGRk/tRkZAK8ZGRkZGQBLGRk/tTIZMgBkGRkZGQBLGRkASz+cGRkZGT+1GRk/tQFeGRkZGQAAAIAAAAAArwEsAAfACsAADUzNTM1MzUzNTM1IRUjNSEVIxUjFSMVIxUjFSE1MxUhEzUzNTM1MxUjFSMVZGRkZGT+1MgCvGRkZGRkASzI/UTIZGTIZGTIZGRkZGRkyMhkZGRkZGTIA4RkZGRkZGQAAAACAAAAAAK8BdwAIwAnAAAxETM1MzUzNTM1MxEhFSMVIxEhESMVIxUjFSMVIxEhNTM1MxEBMxUjZGRkZGT+1GRkArxkZGRkZAEsZGT+DMjIAZBkZGRkASxkZAEs/nBkZGRk/tRkZP7UBdzIAAACAAAAAAK8BEwAHwAjAAA1MzUzNTM1MzUzNSEVIzUhFSMVIxUjFSMVIxUhNTMVIRM1MxVkZGRkZP7UyAK8ZGRkZGQBLMj9RMjIyGRkZGRkZMjIZGRkZGRkyAOEyMgAAAACAAAAAAK8BdwAIwAvAAAxETM1MzUzNTM1MxEhFSMVIxEhESMVIxUjFSMVIxEhNTM1MxEBIzUzFTM1MxUjFSFkZGRkZP7UZGQCvGRkZGRkASxkZP4MZMhkyGT+1AGQZGRkZAEsZGQBLP5wZGRkZP7UZGT+1AV4ZGRkZGQAAgAAAAACvASwAB8ALwAANTM1MzUzNTM1MzUhFSM1IRUjFSMVIxUjFSMVITUzFSETNSM1MxUzNTMVIxUjFSM1ZGRkZGT+1MgCvGRkZGRkASzI/UTIZMhkyGRkZMhkZGRkZGTIyGRkZGRkZMgD6GRkZGRkZGRkAAAAAQBkAAACvASwABEAADM1MxEzNSEVMxUjNSM1IxEzFWRkZAEsZGRkZGRkA+hkZMhkZPwYZAAAAAABAAD/OAMgBRQAGwAAFTUzFTMRIzUzETM1IRUzFSM1IxEzFSMRIxUhNchkyMhkASxkyGTIyGT+1GRkZAK8ZAH0ZGRkZP4MZP1EZGQAAgAAAAACvAMgAAsADwAANREzNSEVIxEjFSE1OwERI2QCWMhk/tRkZGRkAlhkZP2oZGQCWAAAAAABAAAAAAK8BLAAHwAAPQEzFSERITUzNTM1MzUhFSM1IREjFSMVMxUzESMVITXIASz+1GRkZP7UyAK8ZGRkZGT+DGRkZAH0ZGRkyGTI/tRkZGT+DGRkAAAABQAAAAACvAXcAA8AFwAjACcAKwAAMREzNTM1IRUzFTMRIxEhGQEhESM1IxUjETUjNTM1IRUzFSMVJyMVMzc1MxVkZAEsZGTI/tQBLGRkZGRkASxkZGRkZMhkA4RkZGRk/HwB9P4MAlgBLGRkASxkZGRkZGTIZGRkZAAAAAQAAAAAArwF3AAXACMAKwAvAAA1ETM1ITUhNSEVMxEzFSM1IxEjETMVITUTIzUzNSEVMxUjFSERNTM1MxUjFRE1IxVkASz+1AGQZGTIZMjI/tRkZGQBLGRk/tRkyGRkZAEsZMhkZP2oZGQBLP7UZGQDhGRkZGRkAZBkZGRk/tRkZAAAAAMAAAAAArwF3AATABkAIQAAMREzNTM1IRUjETMVIxEzFSERIxkBMxEjFSMTNTMVIxUjNWRkAfRkZGRk/tTIyGRkyMhkyAPoZGRk/nBk/gxkAlj9qAK8AZBkAZBkZGRkAAIAAAAAArwEsAAhAC0AADURMzUzNSM1IRUzFTM1IzUzFTMRIxEzFSE1IxEjETMVIzUTNTM1MzUzFSMVIxVkZMgBLGRkZMhkyMj+1GRkZMhkZGTIZGRkASxkyGRkyMhkZP7U/tRkZAEs/tRkZAMgZGRkZGRkAAAAAAQAAP+cArwF3AAXACMAKwAvAAAVNTM1IxEzNTM1ITUzFSMVMxEjFSMVIRURMxEzNTMRIxEjFSMRNTM1MxUjFREjETNkZGRkASzIZGRkZP7UZGRkZGRkZMhkZGRkZMgDIGRkZGTI/OBkZGQB9P7UZAJYASxkASxkZGRk/HwBkAAABAAA/5wCvASwABMAGwAnACsAABU1MzUjETM1ITUzFSMVMxEjFSEVETMVMxEjNSM9ATM1MzUzFSMVIxURFSM1ZGRkAZDIZGRk/nBkyGTIZGTIZGRkZGRkAlhkZGRk/ahkZAGQyAGQyMhkZGRkZGT+cMjIAAACAAD+1AK8BLAAIwArAAA9ATMVIREjNSM1IzUjETM1IRUzFSM1IREzFTMVMxUzESMVITUTMzUzFSMVI8gBLGTIZGRkAfRkyP7UZMhkZGT+DGRkyGTIZMjIAZBkZGQBLGRkyMj+1GRkZP5wZGT+1GRkZAAAAAIAAP7UArwDIAAjACsAAD0BMxUhNSM1IzUjNSM1MzUhFTMVIzUhFTMVMxUzFTMVIxUhNRMzNTMVIxUjyAEsZMhkZGQB9GTI/tRkyGRkZP4MZGTIZMhkZGTIZGRkZGRkZGRkZGRkyGRk/tRkZGQAAAACAGT+1AK8BLAADwAXAAATIREjNSMRMxUhNTMRIxUjEzM1MxUjFSNkAlhkZGT+cGRkZGRkyGTIBLD+1GT8fGRkA4Rk+7RkZGQAAAAAAgAA/tQCvASwABUAHQAAETUzETM1MxEzFSMRMzUzFSMVITUjGQEzNTMVIxUjyGRkyMhkyGT+1GRkyGTIArxkASxk/nBk/ahkZGRkAlj8fGRkZAAAAgAAAAACvAMgABcAGwAANREzNSEVMzUzFSMVIxEzFTMVIzUjFSE1OwERI2QBLGTIZGRkZMhk/tRkZGRkAlhkZGRkZP5wZGRkZGQCWAAAAAACAGQAAAK8BLAAGwAfAAA3NSMRMzUzNSM1IRUjFTMVMxEjFSMVMxUhNTM9ATMRI8hkZGRkAZBkZGRkZGT+cGTIyMhkAlhkZGRkZGT9qGRkZGRkZAJYAAAAAQBkA+gCWAUUAA8AABMzNTM1MxUzFTMVIzUjFSNkZGRkZGTIZMgETGRkZGRkZGQAAQBkA+gCWAUUAA8AABM1MxUzNTMVIxUjFSM1IzVkyGTIZGRkZASwZGRkZGRkZGQAAQBkBLACWAUUAAMAABM1IRVkAfQEsGRkAAAAAAEAZARMArwFFAALAAATNTMVMzUzFSMVITVkyMjIZP5wBLBkZGRkZGQAAAAAAQEsBEwB9AUUAAMAAAEjNTMB9MjIBEzIAAAAAAIAZAMgAlgFFAALAA8AABMzNSEVMxEjFSE1IxMRMxFkZAEsZGT+1GTIZASwZGT+1GRkASz+1AEsAAAAAAEAyP84AlgAZAALAAAhFTMVITUjNTM1MxUBkMj+1GRkyGRkZGRkZAABAAAETAK8BRQADwAAEzUhFTM1MxUjFSE1IxUjNWQBLGTIZP7UZMgEsGRkZGRkZGRkAAAAAgAABEwCvAUUAAcADwAAEzUzFSMVIzUhNTMVIxUjNWTIZMgB9MhkyASwZGRkZGRkZGQAAAIAyAAAAfQD6AAHAAsAACUVIzUzNTMVERUjNQGQyGTIyGRkZMjIA4TIyAAAAQDIA+gCWAUUAAsAAAEVIxUjNTM1MzUzFQH0ZMhkZMgEsGRkZGRkZAAAAAADAAADhAK8BRQAAwANABEAABE1MxUTMzUzFSMVIxUjNzMVI8hkZMhkZGTIyMgDhMjIASxkZGRkZMgAAAADAAAAAAK8BRQAEwAXAB8AADERMzUzNTM1MxUzFTMVMxEjESERAxEzERMhESM1IxUjZGRkZGRkZMj+1MhkZAEsZGRkA4RkZGRkZGT8fAH0/gwD6AEs/tT+cAEsZGQAAAABASwCWAH0AyAAAwAAASM1MwH0yMgCWMgAAAAAAgAAAAACvAUUAAMAHQAAGQEzERMRIREjNSM1IxEzNTMRIzUjETM1MzUzESE1ZGQB9GRkZGRkZGRkZGT9qAPoASz+1Px8BEz+1GRk/nBk/tRk/gxkZP7UZAAAAAACAAAAAAK8BRQAAwARAAATESMRExEzNTMRMxEzESMRIxFkZGRkZMjIyMgFFP7UASz67APoyP4MAfT7UAJY/agAAgAAAAACWAUUAAMADwAAExEjEQUjNSEVIxEzFSE1M2RkASxkAZBkZP5wZAUU/tQBLMhkZPwYZGQAAAAAAgAAAAACvAUUAB8AIwAANREzNTMRMxUzNTMRIzUjFSM1IRUzFTMRIxUjFSE1IzUDETMRZGRkZGRkZGQBLGRkZGT+1GRkZMgCvGT84GRkAyBkZMhkZPzgZGRkZAMgASz+1AAAAAIAAAAAArwFFAADABkAABkBMxETNTMRIzUjETM1MxEzETMRIxUjETMVZGRkZGRkZMjIZGRkA+gBLP7U/BhkAfRkASzI/gwB9P4MZP4MZAAAAwAAAAACvAUUAAsADwAjAAAxNTM1IxEzNTMRMxEBETMRMzUhFTMVMxEjFTMVIREzESM1IxVkZGRkZP7UZGQBLGRkZGT+1GRkZGTIAlhk/UT+1APoASz+1MhkZP1EyGQBLAK8ZGQAAAAEAAAAAAK8BRQAAwALABUAGQAAETUzFRkBMxEzFSE1EyM1MzUzFSMVIzsBFSPIyMj+1GRkZMhkZGTIyAOEyMj84AK8/URkZAOEyGRkZMgAAAIAAAAAArwEsAATABsAADERMzUzNTM1MxUzFTMVMxEjESEZASERIzUjFSNkZGRkZGRkyP7UASxkZGQDhGRkZGRkZPx8AfT+DAJYASxkZAAAAwAAAAACvASwAA8AEwAXAAAxNTMRIzUhFTMRIxUzESMVAREzEQMzESNkZAJYZGRkZP7UyMjIyGQD6GRk/nBk/gxkBEz+cAGQ/BgB9AAAAAABAAAAAAK8BLAADQAAMTUzESM1IRUjNSERMxVkZAK8ZP7UZGQD6GTIZPwYZAAAAAACAAAAAAK8BLAADwAXAAAxETM1MzUzNTMVMxUzFTMRJSERIzUjFSNkZGRkZGRk/gwBLGRkZAJYyMjIyMjI/ahkAfTIyAAAAAABAAAAAAK8BLAAGwAAMTUzESM1IREjNSM1IxEzNTMRIzUjETM1MzUzEWRkArxkZMhkZGRkyGRkZAPoZP7UZGT+cGT+1GT+DGRk/tQAAQAAAAACvASwACMAADERMzUzNTM1MzUzESEVIxUjESERIxUjFSMVIxUjESE1MzUzEWRkZGRk/tRkZAK8ZGRkZGQBLGRkAZBkZGRkASxkZAEs/nBkZGRk/tRkZP7UAAAAAQAAAAACvASwAAsAADERMxEhETMRIxEhEcgBLMjI/tQEsP4MAfT7UAJY/agAAAAAAwAAAAACvASwABMAGwAjAAA1ETM1MzUhFTMVMxEjFSMVITUjNTsBFTM1MxEhNSERIzUjFSNkZAEsZGRkZP7UZGRkZGT+1AEsZGRkyAMgZGRkZPzgZGRkZGRkAZBkASxkZAAAAAEAyAAAAlgEsAALAAABETMVITUzESM1IRUB9GT+cGRkAZAETPwYZGQD6GRkAAAAAAEAAAAAArwEsAAbAAAxNTMRIzUhETM1MxEzESMVIxUzFTMRIxEjNSMRZGQBLGRkyGRkZGTIZGRkA+hk/gzIASz+1MjIyP7UASzI/gwAAAAAAQAAAAACvASwABcAADERMzUzNTM1MxUzFTMVMxEjESM1IxUjEWRkZGRkZGTIZGRkAljIyMjIyMj9qAJYyMj9qAAAAAABAAAAAAK8BLAAEwAAMREzFTMVMzUzNTMRIxEjFSM1IxHIZGRkyMhkZGQEsGRkZGT7UAMgyMj84AAAAAABAAAAAAK8BLAAEwAAMREzFTMVMxUzETMRIzUjNSM1IxHIZGRkyMhkZGQEsMjIyAJY+1DIyMj9qAAAAAADAAAAAAK8BLAABwAPABMAADERMxUhNTMRAREhESM1IRURNSEVZAH0ZP1EArxk/gwB9AEsZGT+1AOEASz+1GRk/nDIyAAAAAACAAAAAAK8BLAAEwAfAAA1ETM1MzUhFTMVMxEjFSMVITUjNTsBFTM1MxEjNSMVI2RkASxkZGRk/tRkZGRkZGRkZMgDIGRkZGT84GRkZGRkZAMgZGQAAAAAAQAAAAACvASwAAcAADERIREjESERArzI/tQEsPtQBEz7tAAAAgAAAAACvASwAA8AEwAAMTUzESM1IRUzESMVIREzFQMRMxFkZAJYZGT+1GRkyGQD6GRk/nBk/gxkBEz+cAGQAAEAAAAAArwEsAAjAAAxETM1MzUzNSM1IzUjESEVIzUhFTMVMxUzFSMVIxUjFSE1MxVkZGRkZGQCvMj+1GRkZGRkZAEsyAEsZGTIZGQBLMhkyGRkyGRkyGTIAAAAAQBkAAACvASwAA8AABMhESM1IxEzFSE1MxEjFSNkAlhkZGT+cGRkZASw/tRk/HxkZAOEZAAAAAABAGQAAAK8BLAAEwAAEzMRMxEzESMVIxEzFSE1MxEjNSNkyMjIZGRk/nBkZGQEsP4MAfT+DGT+DGRkAfRkAAAAAwAAAAACvASwABsAHwAjAAAZATM1MzUjNSEVIxUzFTMRIxUjFTMVITUzNSM1OwERIxMzESNkyGQBLGTIZGTIZP7UZMhkZGTIZGQBLAJYZGRkZGRk/ahkZGRkZGQCWP2oAlgAAAEAAAAAArwEsAAjAAAxETM1MzUjNSMRMxEzFTM1MxEzESMVIxUzFTMRIxEjNSMVIxFkZGRkyGRkZMhkZGRkyGRkZAEsyMjIASz+1MjIASz+1MjIyP7UASzIyP7UAAAAAAEAAAAAArwEsAAXAAAZATMRMxEzETMRMxEjFSMVMxUhNTM1IzXIZGRkyGTIZP7UZMgBkAMg/OADIPzgAyD84GTIZGTIZAAAAAEAAAAAArwEsAAfAAAxNTM1IxEzNTM1IRUzFTMRIxUzFSERMxEjNSMVIxEzEWRkZGQBLGRkZGT+1GRkZGRkZMgCvGRkZGT9RMhkASwCvGRk/UT+1AAAAAADAGQAAAK8BdwAAwAPABMAABMzFSMXIzUhFSMRMxUhNTMTMxUjZMjIyGQBkGRk/nBkyMjIBdzIyGRk/BhkZAV4yAAAAAMAZAAAArwF3AATABcAGwAAMzUzESM1IxEzETMRMxEjFSMRMxUBMxUjJTMVI8hkZGTIyMhkZGT+DMjIAZDIyGQB9GQB9P4MAfT+DGT+DGQF3MjIyAAAAAADAAAAAAK8BLAACwAXACEAADURMzUhFSMRMxUhNRM1MzUzNTMVIxUjFRkBMzUzETMVIzVkASzIyP7UZGRkyGRkZGRkyGQCWGRk/ahkZAMgZGRkZGRk/OACWGT9RGRkAAACAAAAAAK8BLAAGwAnAAA1ETM1IzUzNSEVMxUjNSEVIRUhESE1MxUjFSE1EzUzNTM1MxUjFSMVZGRkAfRkyP7UASz+1AEsyGT+DGRkZMhkZGQBLGTIZGRkZMhk/tRkZGRkAyBkZGRkZGQAAAADAAD/nAK8BLAABwATABsAABE1MxUzESMRNzUzNTM1MxUjFSMVFzMRIxEjNSHIZMhkZGTIZGTIZMjIASwCvGRk/UQCvMhkZGRkZGTI/OADIGQAAAACAMgAAAJYBLAABwATAAA3ETMRMxUhNREzNTMVIxUjFSM1M8jIyP7UZMhkZMhkZAK8/URkZAPoZGRkZGQAAAAABAAAAAACvAUUAA0AEQAbAB8AABE1IREzETMRIxUhNSMRJzUzFTcjNTM1MxUjFSM7ARUjASzIyGT+cGRkyMhkZMhkZGTIyAK8ZP1EArz9RGRkAljIyMhkyGRkZMgAAAAAAgAAAAACvAMgAAsAFQAANREzNSEVIxEzFSE1IREzNTMRMxUjNWQBLMjI/tQBLGRkZMhkAlhkZP2oZGQCWGT9RGRkAAADAAAAAAK8BLAAEQAXABsAADURMzUhFTMRIxUzFTMRIxUhNTMhESM1IzUzESNkAZBkZGRkZP4MZAEsZMjIyGQD6GRk/nBkZP5wZGQBkGRkAZAAAAACAAD+1AK8AyAAGwAfAAARNTMVMxUzNTM1MxUjFSMRMxEjFSE1IxEzESM1ASMRM8hkZGTIZGRkZP7UZGRkASxkZAJYyMjIyMjIyP7U/tRkZAEsASzI/gz+1AAAAAIAAAAAArwEsAAbAB8AADURMzUzNSM1IzUzNSEVIRUzFTMVMxUzESMVITUzIREhZMhkZGQBkP7UZGRkZGT+DGQBLP7UZAJYZGRkZGRkZGRkZP2oZGQCWAABAAAAAAK8AyAAGwAANREzNSM1MzUhFTMVIzUhFSEVIREhNTMVIxUhNWRkZAH0ZMj+1AEs/tQBLMhk/gxkASxkyGRkZGTIZP7UZGRkZAAAAAEAAP84ArwEsAAjAAA1ETM1MzUzNTM1ITUhFSMVIxUjFSMVIxEhFTMVIxUhNTM1ITVkZGRk/nACvGRkZGRkASxkZP7UyP7UZAJYZGRkZGRkZGRkZP2oZGRkZGRkAAAAAAIAAP+cArwDIAAHAA8AABE1MxUzESMRMzUhFTMRIxHIZMjIASxkyAK8ZGT9RAK8ZGT84AMgAAAAAgAAAAACvASwABcAGwAAETUzFTMRMxEhNSMRMzUhFTMRIxUhNSMRExEzEchkyP7UZGQBkGRk/nBkyMgBkGRk/tQCWGQBLGRk/BhkZAEsArz+1AEsAAAAAAEAyAAAAlgDIAAHAAAlMxUhNSMRMwGQyP7UZMhkZGQCvAAAAAEAAAAAArwDIAAbAAAxNTMRIzUhETM1MzUzFSMVIxUzFTMVIzUjNSMRZGQBLGRkyGRkZGTIZGRkAlhk/tRkyMhkyGTIyGT+1AAAAAACAAAAAAK8BLAAGQAdAAAxETM1MzUzNTMRIzUhFTMRMxEjNSMRIxUjGQEjNTNkZGRkyAEsZGTIZGRkZGQBkGRkZAGQZGT84P7UyAEsZP5wA+hkAAACAAD+1AK8AyAABwAPAAAZATMRMxUjERMRMxEzFSM1yMjIyMhkyP7UBEz9RGT+1AGQArz9RGRkAAEAZAAAArwDIAAPAAA3ETMRMxEzESMVIxUjNSM1ZMjIyGRkyGTIAlj9qAJY/ahkZGRkAAACAAD/OAK8BLAAGwAjAAA1ETM1MzUjETMRIRUhFSMRIRUzFSMVITUzNSE1AzUhFSMVIzVkZGTIASz+1GQBkGRk/tTI/nBkAlhkyGQBLMhkASz+1GTI/tRkZGRkZGQD6GRkZGQAAgAAAAACvAMgAAsADwAANREzNSEVMxEjFSE1MyERIWQB9GRk/gxkASz+1GQCWGRk/ahkZAJYAAABAAAAAAK8AyAACwAAIREjESMRIzUhFSMRAZBkyGQCvGQCvP1EArxkZP1EAAIAAP7UArwDIAALAA8AABkBMzUhFTMRIxUhGQEhESFkAfRkZP5wASz+1P7UA+hkZP2oZP7UAZACWAAAAAEAAP84ArwDIAAXAAA1ETM1IRUzFSM1IREhFTMVIxUhNTM1ITVkAfRkyP7UAZBkZP7UyP5wZAJYZGRkZP2oZGRkZGRkAAAAAAIAAAAAArwDIAALAA8AADURMzUhFSMRIxUhNTsBESNkAlhkZP5wZMjIZAJYZGT9qGRkAlgAAAAAAQAAAAACvAMgAA8AABE1IRUhETM1MxUjFSE1IxECvP7UZMhk/tRkArxkZP2oZGRkZAJYAAEAAAAAArwDIAANAAARNSERMxEzESMVITUjEQEsyMhk/nBkArxk/UQCvP1EZGQCWAAAAAACAAD+1AK8AyAAEwAXAAA1ETM1MxEzESEVMxEjFSMRIxEjNSEzESNkZGQBLGRkyGTIASxkZGQCWGT9RAK8ZP2oZP7UASxkAlgAAAAAAQAA/tQCvAMgACMAABUzNTMRIzUjNTMVMxUzNTM1MxUjFSMRMxUzFSM1IzUjFSMVI2RkZGTIZGRkyGRkZGTIZGRkyGTIASzIyMjIyMjIyP7UyMjIyMjIAAEAAP7UArwD6AATAAA1ETMRMxEzETMRMxEjFSMRIxEjNchkZGTIZMhkyGQCvP1EA4T8fAK8/URk/tQBLGQAAAABAAAAAAK8AyAAGwAANREzNTMVIxEzNTMVMxEjNTMVMxEjFSM1IxUjNWTIZGRkZGTIZGTIZMhkAlhkZP4MyMgB9GRk/ahkZGRkAAAAAwAAAAACWARMAAMACwAPAAARNTMVGQEzETMVITUTNTMVyMjI/tRkyAOEyMj84AK8/URkZAMgyMgAAAAAAwAAAAACvARMAAMAEQAVAAATMxUjBzUhETMRMxEjFSE1IxEBMxUjZMjIZAEsyMhk/nBkAZDIyARMyMhk/UQCvP1EZGQCWAGQyAAAAAMAAAAAArwEsAALAA8AGwAANREzNSEVMxEjFSE1MyERIT0BMzUzNTMVIxUjFWQB9GRk/gxkASz+1GRkyGRkZAJYZGT9qGRkAljIZGRkZGRkAAAAAAIAAAAAArwEsAANABkAABE1IREzETMRIxUhNSMRATUzNTMVIxUjFSM1ASzIyGT+cGQBLGTIZGTIArxk/UQCvP1EZGQCWAEsZGRkZGRkAAAAAgAAAAACvASwABsAJwAANREzNTMVIxEzNTMVMxEjNTMVMxEjFSM1IxUjNRM1MzUzNTMVIxUjFWTIZGRkZGTIZGTIZMhkZGTIZGRkAlhkZP4MyMgB9GRk/ahkZGRkAyBkZGRkZGQAAAABAAAAAAK8BLAAGwAAMREzNSEVMxEjFTMVMxEjFSE1MxEjNSM1MxEjEWQBkGRkZGRk/tTIZGRkyARMZGT+cGRk/nBkZAGQZGQBkPu0AAAAAAMAAAAAArwEsAATABsAIwAANREzNTM1IRUzFTMRIxUjFSE1IzU7ARUzNTMRITUhESM1IxUjZGQBLGRkZGT+1GRkZGRk/tQBLGRkZMgDIGRkZGT84GRkZGRkZAGQZAEsZGQAAAACAAAAAAK8BdwAGwAjAAAxNTMRIzUhESM1IzUjETM1MxEjNSMRMzUzNTMRASM1MxUzFSNkZAK8ZGTIZGRkZMhkZP4MZMhkyGQD6GT+1GRk/nBk/tRk/gxkZP7UBXhkZGQAAAAAAwAAAAACvAXcABsAHwAjAAAxNTMRIzUhESM1IzUjETM1MxEjNSMRMzUzNTMRATMVIyUzFSNkZAK8ZGTIZGRkZMhkZP2oyMgBkMjIZAPoZP7UZGT+cGT+1GT+DGRk/tQF3MjIyAAAAAACAAD/nAK8BLAADwAbAAAxNTMRIzUhFSM1IxEzFSMRFzUzESM1MxUzESMVZGQCWGTIZGRkZGTIZGRkA+hkyGT+cGT9qGRkArxkZP1EZAAAAAIAAAAAArwF3AAPABcAADE1MxEjNSERIzUjNSMRMxUDNTM1MxUjFWRkArxkZMhkZGTIZGQD6GT+1GRk/BhkBRRkZGRkAAAAAAEAAAAAArwEsAAnAAA1ETM1MzUhFTMVIzUjNSMVIxEzNTMRIzUjETMVMzUzNTMVIxUhNSM1ZGQBkGRkZMhkyGRkyGTIZGRk/nBkyAMgZGRkyGRkZP7UZP7UZP5wZGRkyGRkZAABAAAAAAK8BLAAIwAAPQEzFSERIzUjNSM1IxEzNSEVMxUjNSERMxUzFTMVMxEjFSE1yAEsZMhkZGQB9GTI/tRkyGRkZP4MZMjIAZBkZGQBLGRkyMj+1GRkZP5wZGQAAAABAMgAAAJYBLAACwAAAREzFSE1MxEjNSEVAfRk/nBkZAGQBEz8GGRkA+hkZAAAAAADAGQAAAK8BdwAAwAPABMAABMzFSMXIzUhFSMRMxUhNTMTMxUjZMjIyGQBkGRk/nBkyMjIBdzIyGRk/BhkZAV4yAAAAAEAAAAAAyAEsAAPAAA9ATMVIREjNSEVIxEjFSE1yAEsZAGQZGT+DGTIyAPoZGT8GGRkAAACAAAAAAK8BLAADwATAAAxESEVIxEzFSMRMxUhESMRJREzEQJYZGRkZP7UZAGQZASwZP5wZP4MZARM+7RkAfT+DAAAAAIAAAAAArwEsAARABUAADERMxEzETMRMxUjETMVIREjESURMxHIZMhkZGT+1GQBkGQEsP4MAfT+DGT+DGQCWP2oZAH0/gwAAAEAAAAAArwEsAATAAAxNTMRIzUhFSM1IxEhFTMRIxEjEWRkAlhkyAEsZMjIZAPoZMhk/nBk/agCWP2oAAIAAAAAArwF3AAbACMAADE1MxEjNSERMzUzETMRIxUjFTMVMxEjESM1IxETNTMVIxUjNWRkASxkZMhkZGRkyGRkZMhkyGQD6GT+DMgBLP7UyMjI/tQBLMj+DAV4ZGRkZAAAAAACAAAAAAK8BdwAEwAbAAAxETMRMzUzNTM1MxEjESMVIxUjFRM1MxUjFSM1yGRkZMjIZGRkyMhkyASw/ajIyMj7UAJYyMjIBXhkZGRkAAAAAAIAAAAAArwF3AATAB8AAD0BMxUhESE1IxEzESERMxEjFSE1EyM1MxUzNTMVIxUhyAEs/nBkyAEsyGT+DGRkyGTIZP7UZGRkAZBkAlj9qAJY+7RkZAUUZGRkZGQAAQAA/zgCvASwABMAADE1MxEjNSERMxEhFSMRMxUhFSM1ZGQBLGQBLGRk/tRkZAPoZPu0BExk/BhkyMgAAgAAAAACvASwABMAGwAAMREzNTM1MzUzFTMVMxUzESMRIRkBIREjNSMVI2RkZGRkZGTI/tQBLGRkZAOEZGRkZGRk/HwB9P4MAlgBLGRkAAACAAAAAAK8BLAAEwAXAAAxNTMRIzUhESM1IzUjESEVMxEjFSUzESNkZAK8ZGTIASxkZP7UyMhkA+hk/tRkZP5wZP4MZGQB9AADAAAAAAK8BLAADwATABcAADE1MxEjNSEVMxEjFTMRIxUBETMRAzMRI2RkAlhkZGRk/tTIyMjIZAPoZGT+cGT+DGQETP5wAZD8GAH0AAAAAAEAAAAAArwEsAAPAAAxNTMRIzUhESM1IzUjETMVZGQCvGRkyGRkA+hk/tRkZPwYZAAAAAACAAD/OAMgBLAAEwAZAAA1MxEzNTM1IREzESM1IzUhFSMVIwEjETMRI2RkZAGQZGRk/nBkZAGQZMhkZAOEZGT7tP7UZGRkZASw/HwD6AAAAAEAAAAAArwEsAAbAAAxNTMRIzUhESM1IzUjETM1MxEjNSMRMzUzNTMRZGQCvGRkyGRkZGTIZGRkA+hk/tRkZP5wyP5wZP4MZGT+1AABAAAAAAK8BLAAIwAAMREzNTM1IzUjETMRMxEzETMRMxEjFSMVMxUzESMRIxEjESMRZGRkZMhkZGTIZGRkZMhkZGQBkGTIZAGQ/nABkP5wAZD+cGTIZP5wAZD+cAGQ/nAAAAAAAQAAAAACvASwAB8AAD0BMxUzFSERITUhESEVIxUjNTM1IRUzESMVMxEjFSE1ZGQBLP7UASz+1GRkZAH0ZGRkZP4MZMhkZAH0ZAGQZGTIZGT+cGT+DGRkAAEAAAAAArwEsAATAAAxETMRMzUzNTM1MxEjESMVIxUjFchkZGTIyGRkZASw/ajIyMj7UAJYyMjIAAAAAAIAAAAAArwF3AATAB8AADERMxEzNTM1MzUzESMRIxUjFSMVESM1MxUzNTMVIxUhyGRkZMjIZGRkZMhkyGT+1ASw/ajIyMj7UAJYyMjIBXhkZGRkZAAAAAABAAAAAAK8BLAAGwAAMTUzESM1IREzNTMRMxEjFSMVMxUzESMRIzUjEWRkASxkZMhkZGRkyGRkZAPoZP4MyAEs/tTIyMj+1AEsyP4MAAAAAAEAAAAAArwEsAARAAAxNTMRMzUzNSERIxEjFSMRIxVkZGQBkMhkZGRkAyDIZPtQBEzI/OBkAAAAAQAAAAACvASwABMAADERMxUzFTM1MzUzESMRIxUjNSMRyGRkZMjIZGRkBLBkZGRk+1ADIMjI/OAAAAAAAQAAAAACvASwAAsAADERMxEhETMRIxEhEcgBLMjI/tQEsP4MAfT7UAJY/agAAAAAAgAAAAACvASwABMAHwAANREzNTM1IRUzFTMRIxUjFSE1IzU7ARUzNTMRIzUjFSNkZAEsZGRkZP7UZGRkZGRkZGTIAyBkZGRk/OBkZGRkZGQDIGRkAAAAAAEAAAAAArwEsAAHAAAxESERIxEhEQK8yP7UBLD7UARM+7QAAAIAAAAAArwEsAAPABMAADE1MxEjNSEVMxEjFSERMxUDETMRZGQCWGRk/tRkZMhkA+hkZP5wZP4MZARM/nABkAABAAAAAAK8BLAAHwAANREzNTM1IRUzFSM1IzUjFSMRMxUzNTM1MxUjFSE1IzVkZAGQZGRkyGRkyGRkZP5wZMgDIGRkZMhkZGT84GRkZMhkZGQAAAABAGQAAAK8BLAADwAAEyERIzUjETMVITUzESMVI2QCWGRkZP5wZGRkBLD+1GT8fGRkA4RkAAAAAAEAAAAAArwEsAATAAA9ATMVIREhNSMRMxEhETMRIxUhNcgBLP5wZMgBLMhk/gxkZGQBkGQCWP2oAlj7tGRkAAADAAAAAAK8BLAAGwAfACMAABkBMzUzNSM1IRUjFTMVMxEjFSMVMxUhNTM1IzU7AREjEzMRI2TIZAEsZMhkZMhk/tRkyGRkZMhkZAEsAlhkZGRkZGT9qGRkZGRkZAJY/agCWAAAAQAAAAACvASwACMAADERMzUzNSM1IxEzETMVMzUzETMRIxUjFTMVMxEjESM1IxUjEWRkZGTIZGRkyGRkZGTIZGRkASzIyMgBLP7UyMgBLP7UyMjI/tQBLMjI/tQAAAAAAQAA/zgCvASwAA0AADERMxEzETMRMxEjNSM1yMjIZGRkBLD7tARM+7T+1GRkAAAAAQAAAAACvASwAAsAAAEzESMRITUjETMRIQH0yMj+cGTIASwEsPtQAfRkAlj9qAAAAQAAAAACvASwAAsAADERMxEzETMRMxEzEchkZGTIBLD7tARM+7QETPtQAAABAAD/OAMgBLAAEQAAMREzETMRMxEzETMRMxEjNSM1yGRkZMhkZGQEsPu0BEz7tARM+7T+1GRkAAIAAAAAArwEsAAPABMAABMVIxEhETMVMxEjFSE1MxETMxEjZGQBkMhkZP4MZMhkZARMyAEs/gxk/gxkZAPo/BgB9AAAAwAAAAACvASwAAkADQARAAAxETMRMxUjETMVNREzERMzESPIZGRkZGTIyASw/gxk/gxkZAH0/gwETPtQAAAAAAIAAAAAArwEsAAPABMAADE1MxEjNSEVIxEhFTMRIxUlMxEjZGQBkGQBLGRk/tTIyGQD6GRk/nBk/gxkZAH0AAABAAAAAAK8BLAAJwAAPQEzFTMVMzUzESMVIxEzFTMRIzUjFSMVIzUzNSEVMxUzESMVIxUhNWRkyGTIZGTIZMhkZGQBkGRkZGT+cGTIZGRkAZBkASxkASxkZGTIZGRk/OBkZGQAAgAAAAACvASwAAsAFwAAMREzETMRMxEjESMRNzMRIzUzFTMRIxUjyGRkZGTIZGTIZGTIBLD+DAGQ/BgB9P2oZAPoZGT8GGQAAgAAAAACvASwABMAFwAAMREzESMRMzUhFSMRMxUhESMVIxkBMxEjZGRkAlhkZP7UZGTIyAGQASwBkGRk/BhkAljI/nACvAGQAAAAAAEAAAAAArwDIAAXAAA1ETM1ITUhNSEVMxEzFSM1IxEjETMVITVkASz+1AGQZGTIZMjI/tRkASxkyGRk/ahkZAEs/tRkZAAAAAIAAAAAArwD6AATABcAADURMzUhNTMVIxUhFSEVMxEjFSE1MyERIWQBLMhk/tQBkGRk/gxkASz+1GQCvGRkZGTIZP5wZGQBkAAAAAADAAAAAAK8AyAADwATABcAADE1MxEjNSEVMxUjFTMRIxUlMxEjNTM1I2RkAlhkZGRk/tTIyMjIZAJYZGTIZP7UZGQBLGTIAAABAAAAAAK8AyAADwAAMTUzESM1IREjNSM1IxEzFWRkArxkZMhkZAJYZP7UZGT9qGQAAAAAAgAA/zgCvAMgABEAFwAAFREzNTM1IREzESM1IzUhFSMVEzMRIxUjZGQBkGRkZP7UZGTIZGTIAljIyP1E/tRkZGRkASwB9MgAAgAAAAACvAMgABEAFQAANREzNSEVMxEhESE1MxUjFSE1EyE1IWQB9GT+DAEsyGT+DGQBLP7UZAJYZGT+1P7UZGRkZAGQyAAAAQAAAAACvAMgABsAADERMzUjETMRMxEzETMRMxEjFTMRIxEjESMRIxFkZMhkZGTIZGTIZGRkASzIASz+1AEs/tQBLP7UyP7UASz+1AEs/tQAAAAAAQAAAAACvAMgABsAAD0BMxUhESM1MzUhFSM1MzUhFTMVIxUzESMVITXIASzIyP7UyGQB9GRkZGT+DGRkZAEsZMhkZGRkyGT+1GRkAAEAAAAAArwDIAATAAAxETMRMzUzNTM1MxEjESMVIxUjFchkZGTIyGRkZAMg/nBkZMj84AGQZGTIAAAAAAIAAAAAArwETAATAB8AADERMxEzNTM1MzUzESMRIxUjFSMVESM1MxUzNTMVIxUhyGRkZMjIZGRkZMhkyGT+1AMg/nBkZMj84AGQZGTIA+hkZGRkZAAAAAABAAAAAAK8AyAAGwAAMTUzESM1IREzNTM1MxUjFSMVMxUzFSM1IzUjEWRkASxkZMhkZGRkyGRkZAJYZP7UZMjIZMhkyMhk/tQAAAAAAQAAAAACvAMgABEAADE1MxEzNTM1IREjESMVIxEjFWRkZAGQyGRkZGQB9GRk/OACvGT+DGQAAAABAAAAAAK8AyAAEwAAMREzFTMVMzUzNTMRIxEjESMRIxHIZGRkyMhkZGQDIGRkZGT84AH0/tQBLP4MAAABAAAAAAK8AyAACwAAMREzESERMxEjESERyAEsyMj+1AMg/tQBLPzgAZD+cAAAAAACAAAAAAK8AyAACwAPAAA1ETM1IRUzESMVITUzIREhZAH0ZGT+DGQBLP7UZAJYZGT9qGRkAlgAAAEAAAAAArwDIAAHAAAxESERIxEhEQK8yP7UAyD84AK8/UQAAAEAAP7UArwDIAAXAAAVMxEjNTMVMxEzESM1IRUzESMVIRUzFSFkZMhkyMgBLGRk/tRk/nDIA4RkZP2oAlhkZP2oZMhkAAAAAAEAAAAAArwDIAATAAA1ETM1IRUzFSM1IREhNTMVIxUhNWQB9GTI/tQBLMhk/gxkAlhkZGRk/ahkZGRkAAEAZAAAArwDIAAPAAATNSEVIzUjETMVITUzESMVZAJYZGRk/nBkZAJYyMhk/ahkZAJYZAABAAD+1AK8AyAAEwAANREzESERMxEjFSMVITUhNTM1ITXIASzIZGT+DAGQZP5wyAJY/agCWPx8ZGRkZMhkAAAAAwAA/tQCvARMABMAFwAbAAA1ETM1MxEzETMVMxEjFSMRIxEjNTsBESMTMxEjZMhkyGRkyGTIZGRkyGRkZAJYZAEs/tRk/ahk/tQBLGQCWP2oAlgAAQAAAAACvAMgACMAADUzNTM1IzUjNTMVMxUzNTM1MxUjFSMVMxUzFSM1IzUjFSMVI2RkZGTIZGRkyGRkZGTIZGRkyMhkyGTIyGRkyMhkyGTIyGRkyAAAAAEAAP84ArwDIAANAAAxETMRMxEzETMRIzUjNcjIyGRkZAMg/UQCvP1E/tRkZAAAAAEAAAAAArwDIAALAAAZATMRIREzESMRITXIASzIyP5wAZABkP5wAZD84AEsZAAAAAEAAAAAArwDIAALAAAxETMRMxEzETMRMxHIZGRkyAMg/UQCvP1EArz84AAAAQAA/zgDIAMgABEAADERMxEzETMRMxEzETMRIzUjNchkZGTIZGRkAyD9RAK8/UQCvP1E/tRkZAACAAAAAAK8AyAADwATAAARNSERMxUzESMVITUzESMVATMRIwGQyGRk/gxkZAEsZGQCWMj+1GT+1GRkAlhk/gwBLAAAAAMAAAAAArwDIAAJAA0AEQAAMREzETMVIxEzFTURMxEXETMRyGRkZGRkyAMg/tRk/tRkZAEs/tRkAyD84AAAAAACAGQAAAK8AyAADwATAAAzNTMRIzUhFSMVMxUzESMVJzMRI2RkZAGQZMhkZMhkZGQCWGRkyGT+1GRkASwAAAAAAQAAAAACvAMgABcAAD0BMxUhESM1MzUhFSM1MzUhFTMRIxUhNcgBLMjI/tTIZAH0ZGT+DGRkZAEsZMhkZGRk/ahkZAACAAAAAAK8AyAACwAXAAAxETMRMzUzESM1IxE3MxEjNTMVMxEjFSPIZGRkZMhkZMhkZMgDIP7UyP2oyP7UZAJYZGT9qGQAAAACAAAAAAK8AyAAEQAVAAAxNTM1MzUjETM1IREjESMVIxURMxEjZGRkZAH0yGRkyMhkZMgBLGT84AEsZMgBkAEsAAAAAAMAAAAAArwEsAARABUAIQAANREzNSEVMxEhESE1MxUjFSE1EyE1IRE1IzUzFTMVMxUjNWQB9GT+DAEsyGT+DGQBLP7UZMhkZMhkAlhkZP7U/tRkZGRkAZDIASxkZGRkZGQAAAAEAAAAAAK8BEwAEQAVABkAHQAANREzNSEVMxEhESE1MxUjFSE1AzUzFREhNSE3NTMVZAH0ZP4MASzIZP4MZMgBLP7UyMhkAlhkZP7U/tRkZGRkAyDIyP5wyMjIyAAAAAACAAD+1AK8BLAAEQAdAAAxNTMRIzUzNTMVMxUjFTMVIxETNTMVMxEjFSE1MxFkZGTIyMhkZGTIZGT+1MhkAyBkyMhkyGT9qAK8ZGT8fGRkA4QAAAACAAAAAAK8BLAADwAbAAAxNTMRIzUhESM1IzUjETMVAzUzNTM1MxUjFSMVZGQCvGRkyGTIZGTIZGRkAlhk/tRkZP2oZAOEZGRkZGRkAAAAAAEAAAAAArwDIAAXAAA1ETM1IRUzFSM1IRUzFSMRITUzFSMVITVkAfRkyP7UyMgBLMhk/gxkAlhkZGRkyGT+1GRkZGQAAQAAAAACvAMgACMAAD0BMxUhNSM1IzUjNSM1MzUhFTMVIzUhFTMVMxUzFTMVIxUhNcgBLGTIZGRkAfRkyP7UZMhkZGT+DGRkZMhkZGRkZGRkZGRkZGTIZGQAAAACAMgAAAJYBLAACQANAAAzNTMRIzUhETMVATMVI8hkZAEsZP7UyMhkAlhk/URkBLDIAAAAAwBkAAACvARMAAMADQARAAATMxUjEzUzESM1IREzFQMzFSNkyMhkZGQBLGRkyMgETMj8fGQCWGT9RGQETMgAAAIAZP7UArwEsAANABEAADsBFTMRIzUhESMVITUjATMVI2TIyGQBLGT+cGQBkMjIyAOEZPwYZGQFeMgAAAIAAAAAArwDIAAPABMAADERIRUjFTMVIxEzFSERIxElETMRAlhkZGRk/tRkAZBkAyBkyGT+1GQCvP1EZAEs/tQAAAAAAgAAAAACvAMgABEAFQAAMREzETMRMxEzFSMRMxUhESMRJREzEchkyGRkZP7UZAGQZAMg/tQBLP7UZP7UZAGQ/nBkASz+1AAAAQAAAAACvASwABUAADE1MxEjNTM1MxUzFSMVIRUzESMRIxFkZGTIyMgBLGTIyGQDIGTIyGRkZP1EArz9RAAAAAIAAAAAArwEsAAbACcAADE1MxEjNSERMzUzNTMVIxUjFTMVMxUjNSM1IxEDNTM1MzUzFSMVIxVkZAEsZGTIZGRkZMhkZGRkZMhkZGQCWGT+1GTIyGTIZMjIZP7UA4RkZGRkZGQAAAAAAgAAAAACvASwABMAHwAAMREzETM1MzUzNTMRIxEjFSMVIxURNSM1MxUzFTMVIzXIZGRkyMhkZGRkyGRkyAMg/nBkZMj84AGQZGTIA+hkZGRkZGQAAgAA/tQCvARMABMAHwAANREzESERMxEjFSMVITUhNTM1ITUTIzUzFTM1MxUjFSHIASzIZGT+DAGQZP5wZGTIZMhk/tTIAlj9qAJY/HxkZGRkyGQDIGRkZGRkAAABAAD/OAK8AyAAEwAAMTUzESM1IREzESEVIxEzFSEVIzVkZAEsZAEsZGT+1GRkAlhk/UQCvGT9qGTIyAABAAAAAAK8BXgADwAAMTUzESM1ITUzNTMRIREzFWRkAfRkZP5wZGQD6GRkZP7U/BhkAAAAAQAAAAACvAPoAA8AADE1MxEjNSE1MzUzESERMxVkZAH0ZGT+cGRkAlhkZGT+1P2oZAAAAAEAZAOEArwD6AADAAATNSEVZAJYA4RkZAAAAAABAAAAAAK8A+gAGwAAMREzNSMRMxEzFTMVMxEzESMVMxEjESM1IzUjEWRkyGRkZMhkZMhkZGQB9MgBLP7UZGQB9P4MyP7UASxkZP4MAAAAAAEAAAAAArwD6AALAAAxNSERITUhFTMRMxUBkP5wAfRkZGQDIGRk/OBkAAAAAQAAAAACvAPoABcAADE1MzUzNTM1MxEjNSEVMxEzFSM1IxUjFWRkZGTIASxkZMjIZGRkZGQB9GRk/UTIyGRkAAEAAAAAArwD6AAHAAAhESE1IRUjEQGQ/nACvGQDhGRk/HwAAAIAAAAAArwD6AADAAsAADERMxEDNSEVMxEjEcjIAlhkyAH0/gwDhGRk/HwDhAAAAAEAZAAAAfQD6AAHAAABFTMRIxEjNQGQZMjIA+hk/HwDhGQAAAEAAAAAAlgD6AATAAARNSEVIxEzESMVIxUjNTM1MxEjEQJYyGRkZMhkZGQDhGRk/tT+cGRkZGQBkAEsAAEAAAAAArwD6AAPAAAxETM1IzUhFTMRIxEjFSMRZGQCWGTIyGQDIGRkZPx8A4Rk/OAAAAACAAAAAAK8A+gAEwAXAAA1ETMRMzUzESM1MxUzESMVIxUhNRMRMxHIyGRkyGRkZP5wyGRkA4T8fGQCvGRk/URkZGQB9AEs/tQAAAAAAQBkAfQCWAPoAAsAAAERITUhFTMRIxUjNQGQ/tQBkGRkyAJYASxkZP7UZGQAAAAAAQAA/tQCvAPoAA0AABE1IRUzESMRMxUhETMRAlhkZGT+1GQDhGRk/tT84GQDhAEsAAAAAAEAAAAAArwD6AAPAAAxNSE1MxEhNSEVMxEjFSMVAZBk/gwCWGRkZGRkArxkZP1EZGQAAAABAAAAAAK8BRQAFQAAGQEzESEVMxEjFSMVIxEjETM1MzUzEcgBkGRkZGTIZGRkA4QBkP7UZP5wZGT+1AEsZGQBkAAAAAIAAAAAArwD6AAJAA8AADERMzUjNSEVMxElIREjFSNkZAJYZP4MASzIZAMgZGRk/HxkAyBkAAAAAQAAAAACvAPoABcAADERMzUjNTMVMzUhFTMRITUzESMVIxUjEWRkyGQBLGT+cMhkZGQCvGTIZGRk/HxkAyBkZP1EAAABAMj+1AJYA+gADQAAEzUhFTMVIxEzFSERMzXIASxkZGT+1GQDhGRkyPx8ZAPoyAABAGQAAAJYA+gACQAAJREjNSEVMxEhNQGQyAEsZP4MZAMgZGT8fGQAAgAAAAACvAPoAA8AFwAANREzNSM1IRUzESMVIxUhNTsBNTMRIxUjZGQCWGRkZP5wZMhkyGRkArxkZGT9RGRkZGQCvGQAAAAAAQAAAAACvAPoABcAADE1ITUjNSMRIzUhETMVMxEjNSERIxUjFQEsZGRkASxkZGQBLGRkZGRkAlhk/URkArxk/OBkZAABAAD+1AK8A+gAEQAAGQEzNSM1IRUzETMVIREjETMVZGQB9GRk/tTIZAGQAZBkZGT7tGQEsP5wZAAAAAABAAAAAAK8A+gAEQAAMTUhESERMxUhETM1IzUhFTMRAfT+1GT+1GRkAlhkZAMg/nBkAZBkZGT8fAAAAAABAAD+1AK8A+gAFwAAETUhETM1MzUjNSERIxUjFSMVIxEzFSERASxkZGQBLGRkZGRk/tQDhGT+DMjIZP7UyGRk/gxkBLAAAAACAAAAAAK8A+gAFwAfAAAxNSE1IzUjNSM1IxEjNSERMxUzFTMVMxEBNSERIxUjEQH0ZGRkZGQBLGRkZGT+1AEsZGRkyGRkZAEsZP5wZGRk/tQDhGT+cGQBkAAAAAIAAP7UArwD6AANABEAABE1IRUzESMRMxUhETMRAREzEQJYZGRk/tRk/nDIA4RkZP7U/tRkASwBkPtQA4T8fAABAAAAAAK8A+gABwAAETUhFTMRIxECWGTIA4RkZPx8A4QAAAABAAAAAAK8A+gAEQAANREzETMRMxEjFSERMxEjFSE1yGRkyAEsyGT+DGQDhP2oAlj9RMgDhPx8ZGQAAAABAAAAAAK8A+gADQAANTMRIzUhFTMRIxEjESFkZAJYZMjI/tTIArxkZPx8A4T8fAACAAAAAAK8A+gABwAPAAARNTMVMxEjESE1MxUzESMRyGTIASzIZMgDhGRk/HwDhGRk/HwDhAAAAAIAAAAAArwD6AAHAA8AABE1MxUzESMRITUzFTMRIxHIZMgBLMhkyAOEZGT+cAGQZGT8fAOEAAAAAgAAAfQCvAPoAAcADwAAETUzFTMRIxEhNTMVMxEjEchkyAEsyGTIA4RkZP5wAZBkZP5wAZAAAAABAMgDIAH0BLAABwAAAREjFSM1MxEB9GTIZASw/tRkZAEsAAACAAADIAK8BLAABwAPAAATMxEjFSM1MwEzESMVIzUzZMhkyGQBkMhkyGQEsP7UZGQBLP7UZGQAAAEAAAAAArwDIAARAAARNTM1IRUzNTMVIxUjESMRIxVkASxkyGRkyGQCWGRkZGRkZP2oArxkAAAAAQAAAAACvASwAAcAADERIREjNSERArzI/tQEsP7UyPu0AAAAAQAAAAACvAMgAAsAACERIxEjESM1IRUjEQGQZMhkArxkArz9RAK8ZGT9RAACAAAAAAK8BdwAEwAbAAA1ETMRMxEzETMRMxEjFSM1IxUjNRMjNTMVMxUjyGRkZMhkyGTIZGTIZMjIA+j8fAEs/tQDhPwYyMjIyASwZGRkAAIAAAAAArwEsAATAB8AADURMxEzETMRMxEzESMVIzUjFSM1EzUjNTMVMxUzFSM1yGRkZMhkyGTIZGTIZGTIZAK8/agBLP7UAlj9RGRkZGQDhGRkZGRkZAACAAAAAAK8BdwAEwAbAAA1ETMRMxEzETMRMxEjFSM1IxUjNQE1MxUjFSM1yGRkZMhkyGTIASzIZMjIA+j8fAEs/tQDhPwYyMjIyASwZGRkZAAAAAACAAAAAAK8BLAAEwAfAAA1ETMRMxEzETMRMxEjFSM1IxUjNRM1MzUzNTMVIxUjFchkZGTIZMhkyGRkZMhkZGQCvP2oASz+1AJY/URkZGRkAyBkZGRkZGQAAwAAAAACvAXcABMAFwAbAAA1ETMRMxEzETMRMxEjFSM1IxUjNQMzFSMlMxUjyGRkZMhkyGTIZMjIAfTIyMgD6Px8ASz+1AOE/BjIyMjIBRTIyMgAAwAAAAACvARMABMAFwAbAAA1ETMRMxEzETMRMxEjFSM1IxUjNQM1MxUlMxUjyGRkZMhkyGTIZMgBLMjIZAK8/agBLP7UAlj9RGRkZGQDIMjIyMgAAgBkAAACvASwABkAHQAANyMRMzUzNSM1IzUzNSEVIRUzFTMVMxEjFSE3MxEjyGRkyGRkZAGQ/tRkZGRk/nBkyMhkAlhkZGRkZGRkZGT9RGRkAlgAAgBkAAACvAXcABMAGwAAMzUzESM1IxEzETMRMxEjFSMRMxUBNTMVMxUjNchkZGTIyMhkZGT+cMhkyGQB9GQB9P4MAfT+DGT+DGQFeGRkZGQAAAAAAgAA/tQCvASwABMAHwAANREzESERMxEjFSMVITUhNTM1ITUTNSM1MxUzFTMVIzXIASzIZGT+cAEsZP5wZGTIZGTIyAJY/agCWPx8ZGRkZMhkAyBkZGRkZGQAAAABAGQB9AK8AlgAAwAAEzUhFWQCWAH0ZGQAAAAAAQBkAfQCWAJYAAMAABM1IRVkAfQB9GRkAAAAAAEAZAH0AlgCWAADAAATNSEVZAH0AfRkZAAAAAABAAAB9AMgAlgAAwAAETUhFQMgAfRkZAABAAAB9AMgAlgAAwAAETUhFQMgAfRkZAACAAD+1AMgAAAAAwAHAAAVNSEVBSEVIQMg/OADIPzgZGRkZGQAAAAAAQDIA+gB9AV4AAcAAAEVIxEjETM1AfRkyGQFeGT+1AEsZAAAAQDIA+gB9AV4AAcAAAEjFSM1MxEzAfRkyGTIBExkZAEsAAAAAQDI/tQB9ABkAAcAAAUVIzUzETMRAZDIZMjIZGQBLP7UAAAAAQDIA+gB9AV4AAcAAAEVIzUjETMRAfTIZMgETGRkASz+1AAAAgAAA+gCvAV4AAcADwAAEzUzFSMRIxEhNTMVIxEjEWTIZMgB9MhkyAUUZGT+1AEsZGT+1AEsAAACAAAD6AK8BXgABwAPAAATETMRIxUjNSERMxEjFSM1ZMhkyAH0yGTIBEwBLP7UZGQBLP7UZGQAAAIAAP7UArwAZAAHAA8AABUzETMRIxUjJTMRMxEjFSNkyGTIAZBkyGTIyAEs/tRkZAEs/tRkAAAAAgAAA+gCvAV4AAcADwAAEyMRMxEzFSMlIxEzETMVI2RkyGTIAZBkyGTIBEwBLP7UZGQBLP7UZAABAGT/nAK8BRQACwAAAREzFSMRIxEjNTMRAfTIyMjIyAUU/nBk/HwDhGQBkAAAAAABAGT/nAK8BRQAEwAAEzUzESM1MxEzETMVIxEzFSMRIxFkyMjIyMjIyMjIAZBkASxkAZD+cGT+1GT+DAH0AAAAAQDIASwCWAMgAAsAAAEVIzUjETM1MxUzEQH0yGRkyGQBkGRkASxkZP7UAAADAAAAAAMgAMgAAwAHAAsAADUzFSMlFSM1IxUjNcjIAyDIZMjIyMjIyMjIAAEBLAH0AfQCvAADAAABIzUzAfTIyAH0yAAAAAADAAAAAAMgBLAAGwAfACMAADUzNTM1MzUzNTM1MxUjFSMVIxUjFTMRIzUjFSMZATMRAREzEWRkZGRkyGRkZGTIyGTIyAGQyMjIyMjIyMjIyMhk/tTIyAOEASz+1Px8ASz+1AAAAQDIA+gCWAUUAAsAAAEVIxUjNTM1MzUzFQH0ZMhkZMgEsGRkZGRkZAAAAAACAAAD6AK8BRQACwAXAAATNTM1MxUjFSMVIzUhMzUzNTMVIxUjFSNkZMhkZMgBLGRkyGRkyARMZGRkZGRkZGRkZGQAAAEAyAPoAlgFFAALAAABFTMVIzUjNSM1MxUB9GTIZGTIBLBkZGRkZGQAAAAAAQDIAMgCWAMgABMAABM1MzUzNTMVIxUjFTMVMxUjNSM1yGRkyGRkZGTIZAGQyGRkZGTIZGRkZAABAMgAyAJYAyAAEwAANzUzNTM1IzUjNTMVMxUzFSMVIxXIZGRkZMhkZGRkyGRkyGRkZGTIZGQAAAQAZAAAArwEsAADAAcACwAPAAATMxEjFTMVIwEzESMVMxUjZMjIyMgBkMjIyMgEsPx8ZMgEsPx8ZMgAAAEAZASwArwFFAADAAATNSEVZAJYBLBkZAAAAAABAAD+1AK8/5wACwAAFTUzFSE1MxUjFSE1yAEsyGT+DMhkZGRkZGQAAQAABLACvAV4AAsAAAE1IRUjNTM1IRUzFQH0/tTIZAH0ZASwZGRkZGRkAAABAAAAAAK8BLAAFwAANTM1MzUzNTM1MzUzFSMVIxUjFSMVIxUjZGRkZGTIZGRkZGTIyMjIyMjIyMjIyMjIAAAAAQAA/tQCvP+cAAsAABUzNSEVMxUjNSEVI2QB9GTI/tTIyGRkZGRkAAIAZAJYAlgFFAALAA8AABMzNTM1MzUzESM1ITcVMzVkZGRkyMj+1MhkA+hkZGT9RMjIZGQAAAAAAQBkAlgCWAUUAA8AABMhFSEVMxUzFSMVITUhNSFkAfT+1MhkZP5wASz+1AUUZMhkyGRkyAAAAAACAGQCWAJYBRQADwATAAATMzUhFSMVMxUzFSMVITUjOwE1I2RkASzIyGRk/tRkyGRkBLBkZMhkyGRkyAABAGQCWAJYBRQADwAAEzUhFSMVIxEjETM1MzUjFWQB9GRkyGRkyARMyMjI/tQBLMhkZAAAAwBkAlgCWAUUABMAFwAbAAATIzUzNSM1MzUhFTMVIxUzFSMVITc1IxUTNSMVyGRkZGQBLGRkZGT+1MhkZGQCvMhkyGRkyGTIZGTIyAEsyMgAAAAAAgBkAlgCWAUUAA8AEwAAEzM1IRUzESMVITUzNSM1IzcVMzVkZAEsZGT+1MjIZMhkBLBkZP4MZGTIZMjIyAAAAAEAZAK8ArwEsAALAAABFTMVIxUjNSM1MzUB9MjIyMjIBLDIZMjIZMgAAAAAAQBkA4QCWAPoAAMAABM1IRVkAfQDhGRkAAAAAAIAAAJYAlgFFAAHAA8AABMjNTMVMxEjEzUzFTMRIxFkZMhkyMjIZMgEsGRk/agCWGRk/agCWAAAAQDI/tQCWAGQAAsAAAUzFSE1MxEjNTM1MwH0ZP5wZGRkyMhkZAGQZGQAAAABAGT+1AJYAZAAGwAAFzUzNTM1IxUjNTM1IRUzFSMVIxUjFTM1MxUhNchkZGTIZAEsZGRkZMhk/gxkZGTIZGRkZMhkZGRkyMgAAAAAAQBk/tQCWAGQABsAABcjNTMVMzUjNTM1IxUjNTM1IRUzFSMVMxUjFSHIZMhkZGRkyGQBLGRkZGT+1MhkZMhkyGRkZGTIZMhkAAAAAAIAZP7UAlgBkAALAA8AADczNTM1MzUzESM1ITcVMzVkZGRkyMj+1MhkZGRkZP1EyMhkZAABAGT+1AJYAZAADwAAMxEhFSEVMxUzFSMVITUhNWQB9P7UyGRk/nABLAGQZMhkyGRkyAAAAgBk/tQCWAGQAA8AEwAAFxEzNSEVIxUzFTMVIxUhNTsBNSNkZAEsyMhkZP7UZGRkyAH0ZGTIZMhkZMgAAQBk/tQCWAGQAA8AADc1IRUjFSMRIxEzNTM1IxVkAfRkZMhkZMjIyMjI/tQBLMhkZAAAAAMAZP7UAlgBkAATABcAGwAANyM1MzUhFTMVIxUzFSMVITUjNTsBIxUzETUjFchkZAEsZGRkZP7UZGTIZGRkZMhkZMhkyGRkyMgBLMjIAAAAAgBk/tQCWAGQAA8AEwAANzUzNSEVMxEjFSE1MzUjNTsBNSNkZAEsZGT+1MjIZGRkZMhkZP4MZGTIZMgAAQBk/zgCvAEsAAsAADM1MzUzFTMVIxUjNWTIyMjIyGTIyGTIyAAAAAEAZAAAAlgAZAADAAAzNSEVZAH0ZGQAAAEAAAAAArwEsAAfAAA9ATMRIzUhESM1IzUjETM1MxEjNSMRMxUjFTMVITUzNWRkArxkZMhkZGRkZGRk/nBkyGQDIGT+1GRk/nBk/tRk/tRkZGRkZAAAAAABAAAAAAK8BRQAJQAANTM1IzUzNSM1MxEzNSEVMxUjNSM1IxEzFSMVMxUjETM1MxUjFSFkZGRkZGQBLGRkZGRkZGRkyMhk/ajIyGTIZAGQZGTIZGT+cGTIZP7UZGRkAAADAAAAAAK8BRQACQANAB8AADERIRUzESMVIRkBMxEjExEjNTM1MzUzFTMVIxEzFSM1AfRkZP7UyMjIZGRkZGRkZMgFFGT+1GT84AOEASz7tAGQZGRkyGT+cGRkAAIAAABkArwDhAAHAA8AADURIREjESERMxEzESERMxEB9GT+1GRkASxkZAMg/agB9P1EAlj+DAK8/OAAAAMAAAAAArwETAAjACcAKwAAETUzNSM1MzUzNTM1IRUjFSMVIRUhFTMVIxUzFTMVITUjNSM1ATUzFQMzFSNkZGRkZAEsyGQBLP7UyMhkyP7UZGQB9GRkZGQBkGRkZMhkZGRkyGRkZMhkZGRkyP7UZGQDhGQABgAA/zgCvAUUABsAJwArAC8AMwA/AAA9ATM1MzUzNTM1MzUzNTMVIxUjFSMVIxUjFSMVAxEzNTMVIxEzFSM1ATMRIxEVIzUTFSM1ESMRMzUhFTMRIxUhZGRkZGRkZGRkZGRkZGRkyGRkyAEsZGRkZGRkZAEsZGT+1MjIZGRkZGRkyGRkZGRkZAJYAZBkZP5wZGT8fAGQAlhkZAEsZGT67AGQZGT+cGQAAgAAAAACWASwABkAHQAAMREzETM1IRUzESMVIxUjETM1MxUjFSE1IxUBESMRZGQBLGRkZGRkyGT+1GQBLGQBLAMgZGT+cGTI/tRkZGRkZAK8AZD+cAAAAAIAAAAAAyAFFAAXABsAADERMxUzFTMRMxUzESMVMxUjESMRIzUjEQEzNSPIZGTIyMjIyMhkZAGQZGQFFMjIAZBk/nBkZP2oAfTI/UQDhMgAAwAAAyADIAUUAA0AFQAZAAATIzUhFTMVIxEjESMRIyEjESM1MzUzBTMVI2RkAZBkZGRkZAK8ZGRkZP7UZGQEsGRkZP7UAZD+cAEsZGTIZAABAAAAAAK8BLAAHwAAMTUzESMRMzUzNSEVMxUzESMRMxUhETMRIzUjFSMRMxFkZGRkASxkZGRk/tRkZGRkZGQBLAJYZGRkZP2o/tRkAZACWGRk/aj+cAAAAgAAAAACvAMgABEAFQAANREzNSEVMxEhESE1MxUjFSE1EyE1IWQB9GT+DAEsyGT+DGQBLP7UZAJYZGT+1P7UZGRkZAGQyAAAAwAA/zgCvAUUABsAHwAtAAA9ATM1MzUzNTM1MzUzNTMVIxUjFSMVIxUjFSMVAxEzERMzNSM1IRUjFSMVIzUzZGRkZGRkZGRkZGRkZGTIyGTIAZBkZMhkyMhkZGRkZGTIZGRkZGRkAfQCWP2o/gxkZMjIyMgAAAAABAAA/zgCvAUUABsAHwAjADMAAD0BMzUzNTM1MzUzNTM1MxUjFSMVIxUjFSMVIxUDETMREzM1IwcjNTM1IRUzESMVITUzNSNkZGRkZGRkZGRkZGRkZMjIZGRkZGQBLGRk/tTIyMjIZGRkZGRkyGRkZGRkZAH0Alj9qP2oyMjIZGT+cGRkZAAAAAMAAP84ArwFFAAbAB8AMwAAPQEzNTM1MzUzNTM1MzUzFSMVIxUjFSMVIxUjFQMRMxETNTM1IzUhFTMVIxUzFSMVITUzNWRkZGRkZGRkZGRkZGRkyMhkyAEsZGRkZP7UyMjIZGRkZGRkyGRkZGRkZAH0Alj9qP2oZGRkZGRkyGRkyAAAAAMAAP84ArwFFAApAC0AQQAAPQEzNTM1MzUhNTM1MzUjNTMVMxUjFSMVITUzNTMVIxUjFSMVIxUjFSMVAzUzFQE1MzUjNSEVMxUjFTMVIxUhNTM1ZGRk/tRkZGTIZGRkASxkZGRkZGRkZGRkASxkyAEsZGRkZP7UyMjIZGRkyGTIZGTIZGRkZMhkZGRkZGQDhGRk/BhkZGRkZGTIZGTIAAADAAD/OAK8BRQAGwAfAC8AAD0BMzUzNTM1MzUzNTM1MxUjFSMVIxUjFSMVIxUDETMRARUzFSMVITUzNSMRIRUjFWRkZGRkZGRkZGRkZGRkyAGQZGT+1MjIAZDIyMhkZGRkZGTIZGRkZGRkAfQCWP2o/gxkyGRkyAEsZGQAAwAA/zgCvAUUACkALQA9AAA9ATM1MzUzNSE1MzUzNSM1MxUzFSMVIxUhNTM1MxUjFSMVIxUjFSMVIxUDNTMVEzUzNSMRIRUjFTMVMxUjFWRkZP7UZGRkyGRkZAEsZGRkZGRkZGRkZMjIyAGQyGRkZMjIZGRkyGTIZGTIZGRkZMhkZGRkZGQDhGRk+uxkyAEsZGRkyGQAAAADAAD/OAK8BRQAGwAvAD8AAD0BMzUzNTM1MzUzNTM1MxUjFSMVIxUjFSMVIxUDNTM1IzUzNSM1IRUzFSMVMxUjFRE1MzUjESEVIxUzFTMVIxVkZGRkZGRkZGRkZGRkZMhkZMgBLGRkZGTIyAGQyGRkZMjIZGRkZGRkyGRkZGRkZAH0ZMhkZGRkZGTIZPx8ZMgBLGRkZMhkAAIAAP84ArwFFAAnADcAAD0BMzUzNTM1IzUjNTM1MzUzETMVIxUzNTM1MxUjFSMVIxUjFSMVIxUTNTM1IxEhFSMVMxUzFSMVZGRkZMhkZMhkZGRkZGRkZGRkZMjIyAGQyGRkZMjIZGRkyMhkZP7UZGRkZMhkZGRkZGT+cGTIASxkZGTIZAAAAAAEAAD/OAK8BRQAGwAfACMAMwAAPQEzNTM1MzUzNTM1MzUzFSMVIxUjFSMVIxUjFQMRMxETMzUjNTMVMxUjFSE1IxEzNSEVI2RkZGRkZGRkZGRkZGRkyMhkZMhkZP7UZGQBLMjIyGRkZGRkZMhkZGRkZGQB9AJY/aj84MhkZMhkZAGQZGQAAAAABAAA/zgCvAUUABsAKwAvAD8AAD0BMzUzNTM1MzUzNTM1MxUjFSMVIxUjFSMVIxUDNTM1IxEhFSMVMxUzFSMVEzM1IzUzFTMVIxUhNSMRMzUhFSNkZGRkZGRkZGRkZGRkZMjIAZDIZGRkZGRkyGRk/tRkZAEsyMjIZGRkZGRkyGRkZGRkZAH0ZMgBLGRkZMhk/ODIZGTIZGQBkGRkAAAAAAUAAP84ArwFFAAbAB8AIwAnADsAAD0BMzUzNTM1MzUzNTM1MxUjFSMVIxUjFSMVIxUDETMREzM1IxEzNSMnIzUzNSEVMxUjFTMVIxUhNSM1M2RkZGRkZGRkZGRkZGRkyMhkZGRkZGRkASxkZGRk/tRkZMjIZGRkZGRkyGRkZGRkZAH0Alj9qP4MZP5wyGRkZGRkZMhkZMgABQAA/zgCvAUUABsALwAzADcASwAAPQEzNTM1MzUzNTM1MzUzFSMVIxUjFSMVIxUjFQM1MzUjNTM1IzUhFTMVIxUzFSMVEzM1IxEzNSMnIzUzNSEVMxUjFTMVIxUhNSM1M2RkZGRkZGRkZGRkZGRkyGRkyAEsZGRkZGRkZGRkZGRkASxkZGRk/tRkZMjIZGRkZGRkyGRkZGRkZAH0ZMhkZGRkZGTIZP4MZP5wyGRkZGRkZMhkZMgAAAUAAP84ArwFFAAbACsALwAzAEcAAD0BMzUzNTM1MzUzNTM1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AF8AYwBnAGsAbwBzAHcAewB/AIMAhwCLAI8AkwCXAAAlIzUzHQEjNRcVIzUTFSM1ExUjNRMVIzUTIzUzHQEjNRMjNTM1FSM1ATUzFQczFSMRNTMVAzUzFQc1MxUHNTMVAzUzFQM1MxUDNTMVJzUzFRMVIzUXFSM1FxUjNRMjNTMdASM1EyM1MzUVIzU3FSM1NxUjNQE1MxUnNTMVAzUzFQc1MxUHMxUjETUzFQc1MxUDNTMVJzUzFQMgZGRkZGRkZGRkZGRkZGRkZGRkZP5wZGRkZGRkZGRkZGRkZGRkZGRkZMhkZGRkZGRkZGRkZGRkZGRkZP5wZGRkZGRkZGRkZGRkZGRkZGTIZMhkZMhkZAJYZGT84GRkA+hkZAEsZMhkZAEsZMhkZP7UZGRkZAGQZGT7UGRkyGRkyGRkAlhkZPzgZGQD6GRkyGRk/ahkZMhkZMhkZAK8ZMhkZAEsZMhkZMhkZMhkZP7UZGTIZGT7UGRkyGRkZGQDIGRkyGRkAZBkZMhkZABMAAD+cAMgBdwAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwBDAEcASwBPAFMAVwBbAF8AYwBnAGsAbwBzAHcAewB/AIMAhwCLAI8AkwCXAJsAnwCjAKcAqwCvALMAtwC7AL8AwwDHAMsAzwDTANcA2wDfAOMA5wDrAO8A8wD3APsA/wEDAQcBCwEPARMBFwEbAR8BIwEnASsBLwAAPQEzFQc1MxUHMxUjETUzFQc1MxUDNTMVJzUzFSc1MxUnNTMVASM1Mx0BIzUXFSM1ExUjNRMVIzUTFSM1EyM1Mx0BIzUTIzUzNRUjNQEVIzUXMxUjETUzFQczFSMRFSM1FzMVIzEVIzUXMxUjMRUjNRMzFSMxFSM1FzMVIxEzFSMRMxUjMRUjNRMVIzUXMxUjMRUjNQEjNTMVNTMVByM1MxU1MxUHIzUzERUjNRczFSMRNTMVByM1MxEVIzUXMxUjESM1MxU1MxUHIzUzESM1MxU1MxUDFSM1FzMVIwU1MxUHMxUjETUzFQM1MxUHMxUjFTMVIxEzFSMRMxUjETMVIxEzFSMBMxUjFTMVIxUzFSMRNTMVBzMVIxE1MxUDMxUjETMVIxEzFSMBIzUzATMVI2RkZGRkZGRkZGRkZGRkZGRkArxkZGRkZGRkZGRkZGRkZGRkZGRk/nBkZGRk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ZARM/tRk/ahkAAAAAAIAAP5wAyAF3AAXABsAABkBMzUhESMVIxEzETM1MxEjNSEVIxEhEQEVMzXIASxkZMhkZGT+DGQDIP4MyP5wBRTI/nBk/tQBLGQBkGRkAZD4lAJYyMgAAAAAABwBVgABAAAAAAAAACcAUAABAAAAAAABABMAoAABAAAAAAACAAcAxAABAAAAAAADACYBGgABAAAAAAAEABMBaQABAAAAAAAFAAwBlwABAAAAAAAGABMBzAABAAAAAAAIAAUB7AABAAAAAAAJAAUB/gABAAAAAAALABECKAABAAAAAAAMABECXgABAAAAAAANADkC5AABAAAAAAAOAC4DfAABAAAAAAASABMD0wADAAEECQAAAE4AAAADAAEECQABACYAeAADAAEECQACAA4AtAADAAEECQADAEwAzAADAAEECQAEACYBQQADAAEECQAFABgBfQADAAEECQAGACYBpAADAAEECQAIAAoB4AADAAEECQAJAAoB8gADAAEECQALACICBAADAAEECQAMACICOgADAAEECQANAHICcAADAAEECQAOAFwDHgADAAEECQASACYDqwBPAHUAdABsAGkAbgBlACAAKAB2AGUAYwB0AG8AcgApACAAdgBlAHIAcwBpAG8AbgAgACgAYwApACAAMgAwADEANQAgAFYAaQBsAGUAUgAAT3V0bGluZSAodmVjdG9yKSB2ZXJzaW9uIChjKSAyMDE1IFZpbGVSAABQAHgAUABsAHUAcwAgAFYARwBBACAAUwBxAHUAYQByAGUAUAB4AABQeFBsdXMgVkdBIFNxdWFyZVB4AABSAGUAZwB1AGwAYQByAABSZWd1bGFyAABWAGkAbABlAFIAOgBQAHgAUABsAHUAcwAgAFYARwBBACAAUwBxAHUAYQByAGUAUAB4ADoAdgAxAC4AMAAtADIAMAAxADUALQAxADEAAFZpbGVSOlB4UGx1cyBWR0EgU3F1YXJlUHg6djEuMC0yMDE1LTExAABQAHgAUABsAHUAcwAgAFYARwBBACAAUwBxAHUAYQByAGUAUAB4AABQeFBsdXMgVkdBIFNxdWFyZVB4AAB2ADEALgAwAC0AMgAwADEANQAtADEAMQAAdjEuMC0yMDE1LTExAABQAHgAUABsAHUAcwBfAFYARwBBAF8AUwBxAHUAYQByAGUAUAB4AABQeFBsdXNfVkdBX1NxdWFyZVB4AABWAGkAbABlAFIAAFZpbGVSAABWAGkAbABlAFIAAFZpbGVSAABoAHQAdABwADoALwAvAGkAbgB0ADEAMABoAC4AbwByAGcAAGh0dHA6Ly9pbnQxMGgub3JnAABoAHQAdABwADoALwAvAGkAbgB0ADEAMABoAC4AbwByAGcAAGh0dHA6Ly9pbnQxMGgub3JnAABDAHIAZQBhAHQAaQB2AGUAIABDAG8AbQBtAG8AbgBzACAAQQB0AHQAcgBpAGIAdQB0AGkAbwBuAC0AUwBoAGEAcgBlAEEAbABpAGsAZQAgADQALgAwACAASQBuAHQAZQByAG4AYQB0AGkAbwBuAGEAbAAAQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsAABoAHQAdABwADoALwAvAGMAcgBlAGEAdABpAHYAZQBjAG8AbQBtAG8AbgBzAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBiAHkALQBzAGEALwA0AC4AMAAvAABodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvAABQAHgAUABsAHUAcwAgAFYARwBBACAAUwBxAHUAYQByAGUAUAB4AABQeFBsdXMgVkdBIFNxdWFyZVB4AAAAAAACAAAAAAAA/tQAZAAAAAEAAAAAAAAAAAAAAAAAAAAAAw4AAAECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhASIBIwCjAIQAhQC9AJYA6ACGAI4AiwCdAKkApAEkAIoA2gCDAJMBJQEmAI0AlwCIAMMA3gEnAJ4AqgD1APQA9gCiAK0AyQDHAK4AYgBjAJAAZADLAGUAyADKAM8AzADNAM4A6QBmANMA0ADRAK8AZwDwAJEA1gDUANUAaADrAO0AiQBqAGkAawBtAGwAbgCgAG8AcQBwAHIAcwB1AHQAdgB3AOoAeAB6AHkAewB9AHwAuAChAH8AfgCAAIEA7ADuALoBKAEpASoBKwEsAS0A/QD+AS4BLwEwATEA/wEAATIBMwE0AQEBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUAA+AD5AUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVAA+gDXAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAOIA4wFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgCwALEBbwFwAXEBcgFzAXQBdQF2AXcBeAD7APwA5ADlAXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4AuwGPAZABkQGSAOYA5wGTAKYBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhANgA4QGiANsA3ADdAOAA2QDfAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwAmwHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0AsgCzAn4CfwC2ALcAxAKAALQAtQDFAoEAggDCAIcAqwKCAMYCgwKEAoUAvgC/AoYChwKIAokAvAKKAosCjAKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngD3Ap8CoAKhAqICowKkAqUAjACfAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsAmAK8AKgCvQCaAJkA7wK+Ar8ApQCSAsACwQCcAKcAjwLCAJQAlQLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8Av0C/gL/AwADAQMCALkDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWB3VuaTAwMDAHdW5pMDAwRAd1bmkwMDAxB3VuaTAwMDIHdW5pMDAwMwd1bmkwMDA0B3VuaTAwMDUHdW5pMDAwNgd1bmkwMDA3B3VuaTAwMDgHdW5pMDAwOQd1bmkwMDBBB3VuaTAwMEIHdW5pMDAwQwd1bmkwMDBFB3VuaTAwMEYHdW5pMDAxMAd1bmkwMDExB3VuaTAwMTIHdW5pMDAxMwd1bmkwMDE0B3VuaTAwMTUHdW5pMDAxNgd1bmkwMDE3B3VuaTAwMTgHdW5pMDAxOQd1bmkwMDFBB3VuaTAwMUIHdW5pMDAxQwd1bmkwMDFEB3VuaTAwMUUHdW5pMDAxRgd1bmkwMDdGB3VuaTAwQTAHdW5pMDBBRAd1bmkwMEIyB3VuaTAwQjMHdW5pMDBCOQdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsLQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgKQ2RvdGFjY2VudApjZG90YWNjZW50BkRjYXJvbgZkY2Fyb24GRGNyb2F0B0VtYWNyb24HZW1hY3JvbgZFYnJldmUGZWJyZXZlCkVkb3RhY2NlbnQKZWRvdGFjY2VudAdFb2dvbmVrB2VvZ29uZWsGRWNhcm9uBmVjYXJvbgtHY2lyY3VtZmxleAtnY2lyY3VtZmxleApHZG90YWNjZW50Cmdkb3RhY2NlbnQMR2NvbW1hYWNjZW50DGdjb21tYWFjY2VudAtIY2lyY3VtZmxleAtoY2lyY3VtZmxleARIYmFyBGhiYXIGSXRpbGRlBml0aWxkZQdJbWFjcm9uB2ltYWNyb24GSWJyZXZlBmlicmV2ZQdJb2dvbmVrB2lvZ29uZWsCSUoCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAxrZ3JlZW5sYW5kaWMGTGFjdXRlBmxhY3V0ZQxMY29tbWFhY2NlbnQMbGNvbW1hYWNjZW50BkxjYXJvbgZsY2Fyb24ETGRvdARsZG90Bk5hY3V0ZQZuYWN1dGUMTmNvbW1hYWNjZW50DG5jb21tYWFjY2VudAZOY2Fyb24GbmNhcm9uC25hcG9zdHJvcGhlA0VuZwNlbmcHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUNT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0BlJhY3V0ZQZyYWN1dGUMUmNvbW1hYWNjZW50DHJjb21tYWFjY2VudAZSY2Fyb24GcmNhcm9uBlNhY3V0ZQZzYWN1dGULU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgMVGNvbW1hYWNjZW50DHRjb21tYWFjY2VudAZUY2Fyb24GdGNhcm9uBFRiYXIEdGJhcgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlBVVyaW5nBXVyaW5nDVVodW5nYXJ1bWxhdXQNdWh1bmdhcnVtbGF1dAdVb2dvbmVrB3VvZ29uZWsLV2NpcmN1bWZsZXgLd2NpcmN1bWZsZXgLWWNpcmN1bWZsZXgLeWNpcmN1bWZsZXgGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQFbG9uZ3MFb2hvcm4HdW5pMDFCNwpBcmluZ2FjdXRlCmFyaW5nYWN1dGUHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlDFNjb21tYWFjY2VudAxzY29tbWFhY2NlbnQHdW5pMDIxQQd1bmkwMjFCB3VuaTAyNTEHdW5pMDI3OAd1bmkwMkM5B3VuaTAzN0UFdG9ub3MNZGllcmVzaXN0b25vcwpBbHBoYXRvbm9zCWFub3RlbGVpYQxFcHNpbG9udG9ub3MIRXRhdG9ub3MJSW90YXRvbm9zDE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcxFpb3RhZGllcmVzaXN0b25vcwVBbHBoYQRCZXRhBUdhbW1hB3VuaTAzOTQHRXBzaWxvbgRaZXRhA0V0YQVUaGV0YQRJb3RhBUthcHBhBkxhbWJkYQJNdQJOdQJYaQdPbWljcm9uAlBpA1JobwVTaWdtYQNUYXUHVXBzaWxvbgNQaGkDQ2hpA1BzaQd1bmkwM0E5DElvdGFkaWVyZXNpcw9VcHNpbG9uZGllcmVzaXMKYWxwaGF0b25vcwxlcHNpbG9udG9ub3MIZXRhdG9ub3MJaW90YXRvbm9zFHVwc2lsb25kaWVyZXNpc3Rvbm9zBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBWthcHBhBmxhbWJkYQd1bmkwM0JDAm51AnhpB29taWNyb24DcmhvBnNpZ21hMQVzaWdtYQN0YXUHdXBzaWxvbgNwaGkDY2hpA3BzaQVvbWVnYQxpb3RhZGllcmVzaXMPdXBzaWxvbmRpZXJlc2lzDG9taWNyb250b25vcwx1cHNpbG9udG9ub3MKb21lZ2F0b25vcwd1bmkwM0QwB3VuaTAzRjQHdW5pMDQwMAlhZmlpMTAwMjMJYWZpaTEwMDUxCWFmaWkxMDA1MglhZmlpMTAwNTMJYWZpaTEwMDU0CWFmaWkxMDA1NQlhZmlpMTAwNTYJYWZpaTEwMDU3CWFmaWkxMDA1OAlhZmlpMTAwNTkJYWZpaTEwMDYwCWFmaWkxMDA2MQd1bmkwNDBECWFmaWkxMDA2MglhZmlpMTAxNDUJYWZpaTEwMDE3CWFmaWkxMDAxOAlhZmlpMTAwMTkJYWZpaTEwMDIwCWFmaWkxMDAyMQlhZmlpMTAwMjIJYWZpaTEwMDI0CWFmaWkxMDAyNQlhZmlpMTAwMjYJYWZpaTEwMDI3CWFmaWkxMDAyOAlhZmlpMTAwMjkJYWZpaTEwMDMwCWFmaWkxMDAzMQlhZmlpMTAwMzIJYWZpaTEwMDMzCWFmaWkxMDAzNAlhZmlpMTAwMzUJYWZpaTEwMDM2CWFmaWkxMDAzNwlhZmlpMTAwMzgJYWZpaTEwMDM5CWFmaWkxMDA0MAlhZmlpMTAwNDEJYWZpaTEwMDQyCWFmaWkxMDA0MwlhZmlpMTAwNDQJYWZpaTEwMDQ1CWFmaWkxMDA0NglhZmlpMTAwNDcJYWZpaTEwMDQ4CWFmaWkxMDA0OQlhZmlpMTAwNjUJYWZpaTEwMDY2CWFmaWkxMDA2NwlhZmlpMTAwNjgJYWZpaTEwMDY5CWFmaWkxMDA3MAlhZmlpMTAwNzIJYWZpaTEwMDczCWFmaWkxMDA3NAlhZmlpMTAwNzUJYWZpaTEwMDc2CWFmaWkxMDA3NwlhZmlpMTAwNzgJYWZpaTEwMDc5CWFmaWkxMDA4MAlhZmlpMTAwODEJYWZpaTEwMDgyCWFmaWkxMDA4MwlhZmlpMTAwODQJYWZpaTEwMDg1CWFmaWkxMDA4NglhZmlpMTAwODcJYWZpaTEwMDg4CWFmaWkxMDA4OQlhZmlpMTAwOTAJYWZpaTEwMDkxCWFmaWkxMDA5MglhZmlpMTAwOTMJYWZpaTEwMDk0CWFmaWkxMDA5NQlhZmlpMTAwOTYJYWZpaTEwMDk3B3VuaTA0NTAJYWZpaTEwMDcxCWFmaWkxMDA5OQlhZmlpMTAxMDAJYWZpaTEwMTAxCWFmaWkxMDEwMglhZmlpMTAxMDMJYWZpaTEwMTA0CWFmaWkxMDEwNQlhZmlpMTAxMDYJYWZpaTEwMTA3CWFmaWkxMDEwOAlhZmlpMTAxMDkHdW5pMDQ1RAlhZmlpMTAxMTAJYWZpaTEwMTkzCWFmaWkxMDA1MAlhZmlpMTAwOTgJYWZpaTU3NjQ1CWFmaWk1NzY2NAlhZmlpNTc2NjUJYWZpaTU3NjY2CWFmaWk1NzY2NwlhZmlpNTc2NjgJYWZpaTU3NjY5CWFmaWk1NzY3MAlhZmlpNTc2NzEJYWZpaTU3NjcyCWFmaWk1NzY3MwlhZmlpNTc2NzQJYWZpaTU3Njc1CWFmaWk1NzY3NglhZmlpNTc2NzcJYWZpaTU3Njc4CWFmaWk1NzY3OQlhZmlpNTc2ODAJYWZpaTU3NjgxCWFmaWk1NzY4MglhZmlpNTc2ODMJYWZpaTU3Njg0CWFmaWk1NzY4NQlhZmlpNTc2ODYJYWZpaTU3Njg3CWFmaWk1NzY4OAlhZmlpNTc2ODkJYWZpaTU3NjkwCWFmaWk1NzcxNglhZmlpNTc3MTcJYWZpaTU3NzE4B3VuaTA1RjMHdW5pMDVGNAd1bmkxRDFCB3VuaTFEMjYHdW5pMUQyOAZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwd1bmkxRTlGBllncmF2ZQZ5Z3JhdmUHdW5pMjAxMApmaWd1cmVkYXNoCWFmaWkwMDIwOA11bmRlcnNjb3JlZGJsDXF1b3RlcmV2ZXJzZWQHdW5pMjAxRgd1bmkyMDI3Bm1pbnV0ZQZzZWNvbmQHdW5pMjAzNQlleGNsYW1kYmwHdW5pMjAzRQd1bmkyMDNGB3VuaTIwNDAHdW5pMjA1NAd1bmkyMDc0B3VuaTIwNzUHdW5pMjA3Ngd1bmkyMDc3B3VuaTIwNzgHdW5pMjA3OQd1bmkyMDdBB3VuaTIwN0IHdW5pMjA3Rgd1bmkyMDgxB3VuaTIwODIHdW5pMjA4Mwd1bmkyMDg0B3VuaTIwODUHdW5pMjA4Ngd1bmkyMDg3B3VuaTIwODgHdW5pMjA4OQd1bmkyMDhBB3VuaTIwOEIEbGlyYQZwZXNldGEJYWZpaTU3NjM2BEV1cm8JYWZpaTYxMjQ4CWFmaWk2MTI4OQlhZmlpNjEzNTIJZXN0aW1hdGVkB3VuaTIxNTAHdW5pMjE1MQhvbmV0aGlyZAl0d290aGlyZHMHdW5pMjE1NQd1bmkyMTU2B3VuaTIxNTcHdW5pMjE1OAd1bmkyMTU5B3VuaTIxNUEJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMJYXJyb3dsZWZ0B2Fycm93dXAKYXJyb3dyaWdodAlhcnJvd2Rvd24JYXJyb3dib3RoCWFycm93dXBkbgxhcnJvd3VwZG5ic2UIZW1wdHlzZXQHZWxlbWVudAd1bmkyMjE1B3VuaTIyMTkKb3J0aG9nb25hbAxpbnRlcnNlY3Rpb24LZXF1aXZhbGVuY2UHdW5pMjI5OQd1bmkyMzAwBWhvdXNlDXJldmxvZ2ljYWxub3QKaW50ZWdyYWx0cAppbnRlZ3JhbGJ0CFNGMTAwMDAwCFNGMTEwMDAwCFNGMDEwMDAwCFNGMDMwMDAwCFNGMDIwMDAwCFNGMDQwMDAwCFNGMDgwMDAwCFNGMDkwMDAwCFNGMDYwMDAwCFNGMDcwMDAwCFNGMDUwMDAwCFNGNDMwMDAwCFNGMjQwMDAwCFNGNTEwMDAwCFNGNTIwMDAwCFNGMzkwMDAwCFNGMjIwMDAwCFNGMjEwMDAwCFNGMjUwMDAwCFNGNTAwMDAwCFNGNDkwMDAwCFNGMzgwMDAwCFNGMjgwMDAwCFNGMjcwMDAwCFNGMjYwMDAwCFNGMzYwMDAwCFNGMzcwMDAwCFNGNDIwMDAwCFNGMTkwMDAwCFNGMjAwMDAwCFNGMjMwMDAwCFNGNDcwMDAwCFNGNDgwMDAwCFNGNDEwMDAwCFNGNDUwMDAwCFNGNDYwMDAwCFNGNDAwMDAwCFNGNTQwMDAwCFNGNTMwMDAwCFNGNDQwMDAwB3VwYmxvY2sHdW5pMjU4MQdkbmJsb2NrBWJsb2NrB2xmYmxvY2sHcnRibG9jawdsdHNoYWRlBXNoYWRlB2Rrc2hhZGUJZmlsbGVkYm94BkgyMjA3MwZIMTg1NDMGSDE4NTUxCmZpbGxlZHJlY3QHdHJpYWd1cAd0cmlhZ3J0B3RyaWFnZG4HdHJpYWdsZgZjaXJjbGUGSDE4NTMzCWludmJ1bGxldAlpbnZjaXJjbGUKb3BlbmJ1bGxldAlzbWlsZWZhY2UMaW52c21pbGVmYWNlA3N1bgZmZW1hbGUEbWFsZQVzcGFkZQRjbHViBWhlYXJ0B2RpYW1vbmQLbXVzaWNhbG5vdGUObXVzaWNhbG5vdGVkYmwHdW5pMjcxMwd1bmlGQjAxB3VuaUZCMDIHdW5pRkZGRAAAAAAAAf//AAIAAQAAAAwAAAAWAB4AAgABAAEDDQABAAQAAAACAAAAAQAAAAEAAAAAAAAAAQAAAADSBBQFAAAAANJTOPAAAAAA0rnQ6AACAAAAAQAAAAIABgBDAYAABgASAAEAAQALAAIAAgAKAAoAAwALAA4ACwAKACAADwALACEAIQAKACMAIgALACYAJAAFACgAJwALACkAKRELACoAKh8LACsAKwALACwALAAEAC0ALQAHAC4ALgAEADAALwAHADoAMQADADsAOwAHADwAPAALAD0APRILAD4APgALAD8APx4LAEEAQAALAFwAXBILAF0AXQALAF4AXh4LAGEAXwALAHwAfBILAH0AfQALAH4Afh4LAIAAfwALAIEAgQAHAIIAggALAIYAgwAFAIoAhwALAJAAjAALAJIAkQAFAJQAkwADAJUAlQALAJkAlwALAJoAmgADAKAAnAALALgAuAALANgA2AALAXsBcAALAX0BfQALAkYCJgABAmUCUwALAmgCZgAFAmkCaQALAmoCahELAmsCax8LAm8CbAALAnACcAAHAnECcQALAncCcgADAnkCeAAEAoMCewADAoUChAAEAooChgAFAosCiwALAo4CjQALApACkAAFAqsCkQALAqwCrAAEAwoCrQALAw0DDQAL/////wAA') format('truetype');
    font-weight: normal;
    font-style: normal;
    font-display: block;
    font-size: small;
}

#ac_div *,
#ac_div *:before,
#ac_div *:after {
    box-sizing: border-box;
    padding: 0 !important;
    margin: 0 !important;
    font-family: 'BBS437' !important;
}

html:has(#ac_div),
html:has(#ac_div) body {
    height: 100%;
    overflow: hidden;
}

html:has(#ac_div) body {
    margin: 0;
    padding: 0;
    background: transparent !important;
}

#ac_div {
    display: flex;
    width: 100vw;
    height: 100dvh;
    padding-bottom: env(safe-area-inset-bottom);
    box-sizing: border-box;
}

#tc_div {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
    position: relative;
    background-color: transparent !important;
    letter-spacing: 0px;
    padding: 20px;
    box-sizing: border-box;
}

#tc_div_terminal_div {
    flex: 1;
    background: #000 !important;
    background-color: #000 !important;
    font-family: monospace !important;
    letter-spacing: 0px;
    padding: 8px !important;
}

.xterm-viewport,
.xterm-screen {
    background-color: transparent !important;
}

#tc_div_terminal_div {
    text-rendering: optimizeSpeed;
}

#bbs_cred_panel {
    flex-shrink: 0;
    width: 100%;
    background: transparent !important;
    color: var(--color_text_normal);
    padding: 8px 15px;
    font-size: 1rem;
    line-height: 1.5;
}

#bbs_cred_panel.bbs-cred-panel-error {
    color: var(--color_secondary);
}

#tc_div_status_div {
    background: transparent !important;
    color: var(--color_primary);
    padding: 8px 15px;
    font-family: 'Courier New', Consolas, 'Lucida Console', monospace !important;
    font-size: 1rem;
    box-shadow: none;
    z-index: 10;
    display: flex;
    align-items: center;
}

#private_fto_div, #public_fto_div {
    display: none;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    color: var(--color_primary);
    background: transparent !important;
    z-index: 1000;
    justify-content: center;
    align-items: center;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}

.private_fto_upload_container,
.public_fto_upload_container {
    position: absolute;
    top: 0;
    left: 10%;
    width: 80%;
    height: 30%;
    background: transparent !important;
}

.private_fto_file_box_div,
.public_fto_file_box {
    position: absolute;
    top: 38%;
    left: 10%;
    width: 80%;
    height: 57%;
    background: transparent !important;
}

#private_fto_file_list,
#public_fto_file_list {
    margin-top: 25px;
    width: 100%;
    height: 65%;
    overflow-y: auto;
    overflow-x: hidden;
    background: transparent !important;
}

#ac_div button {
    width: 100%;
    margin-top: 20px;
}

#ac_div input[type="file"] {
    margin-bottom: 25px;
    color: var(--color_primary);
    background: transparent !important;
    padding: 15px;
    box-sizing: border-box;
    border-radius: var(--theme-radius-xs);
    width: 100%;
}

.fto_title_span {
    color: var(--color_primary);
    float: left;
    font-size: 1.1rem;
    font-weight: bold;
}

.fto_alert_span {
    color: var(--color_danger);
    cursor: pointer;
    float: right;
    font-weight: bold;
    transition: color 0.3s ease;
}

.fto_alert_span:hover {
    color: var(--color_danger_hover);
}

.rco_div {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: transparent !important;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    color: var(--color_danger);
    padding: 30px 50px;
    text-align: center;
    cursor: pointer;
    font-family: 'Courier New', Consolas, 'Lucida Console', monospace !important;
    font-size: 1.2rem;
    border-radius: var(--theme-radius-xs);
    z-index: 100;
    box-shadow: none;
    width: 70%;
    transition: all 0.3s ease;
}

/* BBS reconnect overlay: use fixed so viewport-centering is immune to
   canvas overflow pushing #tc_div's layout width beyond the visible area. */
html:has(#ac_div) .rco_div {
    position: fixed !important;
    top: 50% !important;
    left: 50% !important;
    transform: translate(-50%, -50%) !important;
    width: min(520px, 82vw) !important;
}

.rco_div:hover {
    background: transparent !important;
    color: var(--text_on_ac);
    box-shadow: none;
    transform: translate(-50%, -52%);
}

html:has(#ac_div) body { background: transparent !important; }
#ac_div { background: transparent !important; }
#private_fto_div_sidebar_div { background: var(--bg_raised) !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
#tc_div { background: transparent !important; }
#tc_div_terminal_div { background: #000 !important; background-color: #000 !important; }
.xterm-viewport, .xterm-screen { background-color: #000 !important; }

@media (max-width: 767px) {
    #private_fto_div_sidebar_div.open {
        width: 100vw;
    }

    .private_fto_div_sidebar_div_sidebar_content_div {
        min-width: 100%;
        padding: 3%;
    }

    .private_fto_upload_container,
    .public_fto_upload_container {
        width: 95%;
        left: 2.5%;
        height: 35%;
    }

    .private_fto_file_box_div,
    .public_fto_file_box {
        width: 95%;
        left: 2.5%;
        top: 42%;
        height: 53%;
    }

    #ac_div {
        flex-direction: column;
    }

    #tc_div_status_div {
        font-size: 0.85rem;
        padding: 6px 10px;
        letter-spacing: 0;
    }

    #bbs_cred_panel {
        font-size: 0.85rem;
        padding: 6px 10px;
    }

    #ac_div button {
        min-height: 44px;
    }
}

@media (max-width: 480px) {
    #tc_div_status_div { font-size: 0.77rem; padding: 4px 8px; }
    #bbs_cred_panel    { font-size: 0.77rem; }
    .xterm { font-size: 0.85rem !important; }
}

html.subpage body { padding: 0 !important; }

@keyframes fadeIn { to { opacity: 1; } }
html:has(#ac_div) body { animation: fadeIn 0.9s ease forwards !important; }

/* ═══════════════════════════════════════════════════════════════════════
   CANONICAL SUBPAGE + ADMIN-TAB PAGE HEADER
   Every sub-page and admin-tab header matches the DM header reference:
   opaque bg_raised background, primary→transparent left-edge gradient
   via ::before, rounded corners, flex row (left col fills / right anchors).
   Placed last for maximum cascade priority — overrides all earlier rules.
   ════════════════════════════════════════════════════════════════════ */

html.subpage #log_header,
html.subpage #srch_header,
html.subpage #gb_header,
html.subpage #chat_header,
html.subpage #wall-page-header,
html.subpage #um_header,
html.subpage #audit_header,
html.subpage #int_header,
html.subpage #erl_header,
html.subpage #utl_header,
html.subpage #fsl_header,
html.subpage #svc_header,
html.subpage .lb-page-header,
html:has(#dm_msgs) #div_top,
html:has(#div_rom_list_toolbox) #div_top {
    position: relative !important;
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: flex-start !important;
    flex-wrap: nowrap !important;
    gap: 12px !important;
    padding: 10px 20px 12px !important;
    margin: 0 0 14px 0 !important;
    /* Was flat var(--bg_raised), backdrop-filter forced none — this is
       THE canonical rule (explicitly placed last for max cascade
       priority) governing nearly every subpage/admin-tab header on the
       site: Search, Guestbook, Chat, Wall, User Manager, Audit, DM,
       Arcade, and more, all at once. Every earlier, lower-priority
       attempt at glass on any of these individual headers (including
       arcade's own #div_top rule and the shared base #div_top rule,
       both edited the same day) was always going to lose to this one —
       fixing it here is what actually reaches all of them. Real glass
       tier 2 now (2026-08-19). */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent) !important;
    backdrop-filter: var(--glass-blur-2) !important;
    -webkit-backdrop-filter: var(--glass-blur-2) !important;
    box-shadow: var(--elevation-2) !important;
    border-radius: var(--theme-radius-xs) !important;
    overflow: visible !important;
    box-sizing: border-box !important;
    width: 100% !important;
    flex-shrink: 0 !important;
    animation: none !important;
    opacity: 1 !important;
    min-height: 0 !important;
    border: none !important;
}

/* ── Editor header: beat the shared subpage rule (0,2,1) with (0,3,1) ── */
html.subpage.editor-page .lb-page-header {
    background: var(--bg_raised) !important;
    padding: 0 8px 0 14px !important;
    margin: 0 !important;
    gap: 6px !important;
    flex-wrap: nowrap !important;
}

/* ── Fixed page-level headers (subpages) ─────────────────────────────
   Headers are pinned to the top of the viewport; content scrolls behind.
   padding-top on the body offsets the fixed header height (~58px). */
html.subpage #wall-page-header,
html.subpage #log_header,
html.subpage #gb_header,
html.subpage #chat_header,
html.subpage #srch_header {
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    width: 100% !important;
    z-index: 200 !important;
    border-radius: var(--theme-radius-xs) !important;
    margin: 0 !important;
    background: color-mix(in srgb, var(--bg_dark)   90%, transparent) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-sizing: border-box !important;
}

html.subpage #wall-page-header {
    background: transparent !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}

/* The shared "subpage fixed header" block above (html.subpage #wall-page-header,
   line ~15237) forces flex-direction:row !important at (1 class, 1 id)
   specificity — a plain #wall-page-header traditional media-query rule elsewhere
   in this file can never beat that, !important or not, since specificity is
   compared before source order. Matching that same selector here is the
   only way to actually stack "N entries" above the Posts/search row on
   narrow screens instead of the two colliding. */
@media (max-width: 600px) {
    html.subpage #wall-page-header {
        flex-direction: column !important;
        align-items: flex-start !important;
        gap: 8px !important;
        padding: 10px 14px !important;
    }
}

html:has(#wall-page-header) body,
html:has(#log_header) body,
html:has(#gb_header) body,
html:has(#chat_header) body,
html:has(#srch_header) body {
    padding-top: 58px !important;
}

html:has(#tc_div_status_div) #tc_div_status_div {
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    width: 100% !important;
    z-index: 200 !important;
    border-radius: var(--theme-radius-xs) !important;
}

html:has(#tc_div) body {
    padding-top: 40px !important;
}

/* Left-edge accent gradient — primary colour fades to transparent over 56px.
   border-radius on left corners only so the gradient is visually clipped
   without overflow:hidden blocking dropdown children. */
html.subpage #log_header::before,
html.subpage #srch_header::before,
html.subpage #gb_header::before,
html.subpage #chat_header::before,
html.subpage #wall-page-header::before,
html.subpage #um_header::before,
html.subpage #audit_header::before,
html.subpage #int_header::before,
html.subpage #erl_header::before,
html.subpage #utl_header::before,
html.subpage #fsl_header::before,
html.subpage #svc_header::before,
html.subpage .lb-page-header::before,
html:has(#dm_msgs) #div_top::before,
html:has(#div_rom_list_toolbox) #div_top::before {
    display: block !important;
    content: '' !important;
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 56px !important;
    height: 100% !important;
    background: transparent !important;
    border-radius: var(--theme-radius, 8px) 0 0 var(--theme-radius, 8px) !important;
    z-index: 0 !important;
    pointer-events: none !important;
    animation: none !important;
}

/* Left column: title + subtitle stacked vertically, grows to fill — pushes controls to right edge */
html.subpage #log_header_info,
html.subpage #srch_header_left,
html.subpage #gb_header_left,
html.subpage #chat_header_left,
html.subpage #wall-page-header-left,
html.subpage #um_header_left,
html.subpage #audit_header_left,
html.subpage #int_header_left,
html.subpage #erl_header_left,
html.subpage #utl_header_left,
html.subpage #fsl_header_left,
html.subpage #svc_header_left,
html.subpage .lb-page-header-left,
html:has(#dm_msgs) #dm_header_left {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 4px !important;
    flex: 1 !important;
    min-width: 0 !important;
}

/* Right column: natural content width; title (left) fills remaining space; controls group at right edge */
html.subpage #chat_header_right,
html.subpage #wall-page-header-right,
html.subpage #audit_header_right,
html.subpage #int_header_right,
html.subpage #erl_header_right,
html.subpage #utl_header_right,
html.subpage #fsl_header_right,
html.subpage #svc_header_right,
html.subpage #log_header_actions,
html.subpage .lb-page-header-right,
html:has(#dm_msgs) #dm_header_right {
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
    flex: 0 0 auto !important;
    flex-wrap: nowrap !important;
    justify-content: flex-start !important;
}

/* Stacked (column) headers on narrow screens need their right group to
   actually claim the full row width — flex:0 0 auto above otherwise
   leaves it at natural content width even after the parent switches to
   column, same specificity problem as the flex-direction fix above. */
@media (max-width: 600px) {
    html.subpage #wall-page-header-right {
        width: 100% !important;
        flex: 0 0 auto !important;
    }
}

/* ── Uniform 32px height for all header interactive controls ─────────────
   h1/title/subtitle elements are exempt (they are not buttons/inputs).
   Specificity (0,1,3) beats class-based overrides but not ID-based ones;
   editor button IDs are already updated to 32px directly above.          */
html.subpage header button,
html.subpage header input:not([type="checkbox"]):not([type="radio"]),
html.subpage header select,
html:has(#admin_wrap) header button,
html:has(#admin_wrap) header input:not([type="checkbox"]):not([type="radio"]),
html:has(#admin_wrap) header select {
    height: 32px !important;
    min-height: 32px !important;
    max-height: 32px !important;
    box-sizing: border-box !important;
    line-height: 1 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    align-self: center !important;
    vertical-align: middle !important;
}

/* ── Icon/overflow buttons pin to far right via margin-left: auto ─────── */
#lb-help-btn,
#lb-btt { margin-left: auto !important; }

/* ── Extension: Mailbox (.mb-header) and Media Library (#media_toolbar) ── */
html.subpage .mb-header,
html.subpage #media_toolbar {
    position: relative !important;
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: space-between !important;
    flex-wrap: nowrap !important;
    gap: 8px !important;
    padding: 10px 20px 12px !important;
    margin: 0 !important;
    height: auto !important;
    background: var(--bg_raised) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius, 8px) !important;
    overflow: visible !important;
    box-sizing: border-box !important;
    width: 100% !important;
    flex-shrink: 0 !important;
    animation: none !important;
    opacity: 1 !important;
    min-height: 0 !important;
    border: none !important;
}

html.subpage .mb-header::before,
html.subpage #media_toolbar::before {
    display: block !important;
    content: '' !important;
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 56px !important;
    height: 100% !important;
    background: transparent !important;
    border-radius: var(--theme-radius, 8px) 0 0 var(--theme-radius, 8px) !important;
    z-index: 0 !important;
    pointer-events: none !important;
    animation: none !important;
}

/* Mailbox: left column (title + subtitle) */
html.subpage .mb-header-left {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 4px !important;
    flex: 1 !important;
    min-width: 0 !important;
}

/* Mailbox: right column (notification toggles) */
html.subpage .mb-header-right {
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
    flex-shrink: 0 !important;
}

/* Mailbox title */
html.subpage .mb-header h2 {
    margin: 0 !important;
    font-size: 1.38rem !important;
    font-weight: bold !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase !important;
    color: var(--color_text_stressed) !important;
    padding-left: 10px !important;
    font-family: var(--font-heading) !important;
}

/* Mailbox subtitle */
html.subpage .mb-header-meta {
    font-size: 0.92rem !important;
    letter-spacing: 0.06em !important;
    opacity: 0.45 !important;
    padding-left: 13px !important;
}


/* Media Library: address bar fills left, actions stay right */
html.subpage #media_address_bar {
    flex: 1 !important;
    min-width: 0 !important;
    padding: 0 10px !important;
    background: transparent !important;
    overflow: hidden !important;
    white-space: nowrap !important;
}

/* Media Library "title" — the root breadcrumb label */
html.subpage .media-addr-root {
    font-size: 1.38rem !important;
    font-weight: bold !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase !important;
    color: var(--color_text_stressed) !important;
    font-family: var(--font-heading) !important;
}

/* Media Library breadcrumb separator + group — styled as subtitle */
html.subpage .media-addr-sep,
html.subpage .media-addr-group {
    font-size: 0.92rem !important;
    letter-spacing: 0.06em !important;
    font-weight: normal !important;
    text-transform: none !important;
    opacity: 0.55 !important;
    font-family: inherit !important;
}

/* ── My Files (#fs_toolbar): canonical header ── */
html.subpage #fs_toolbar {
    position: relative !important;
    flex-shrink: 0 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 8px !important;
    padding: 10px 20px 12px !important;
    height: auto !important;
    min-height: 0 !important;
    background: var(--bg_raised) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius, 8px) !important;
    overflow: visible !important;
    box-sizing: border-box !important;
    animation: none !important;
    opacity: 1 !important;
    border: none !important;
}

html.subpage #fs_toolbar::before {
    display: block !important;
    content: '' !important;
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 56px !important;
    height: 100% !important;
    background: transparent !important;
    border-radius: var(--theme-radius, 8px) 0 0 var(--theme-radius, 8px) !important;
    z-index: 0 !important;
    pointer-events: none !important;
    animation: none !important;
}

/* Address bar stacks root-label (title) + section-name (subtitle) */
html.subpage #fs_address_bar {
    flex: 1 !important;
    min-width: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 2px !important;
    padding: 0 10px !important;
    background: transparent !important;
    overflow: hidden !important;
    white-space: nowrap !important;
    align-self: center !important;
    line-height: normal !important;
}

/* Hide the ROOT-to-subtitle separator in stacked layout — title and
   subtitle are two stacked lines, not one flowing row (see the "Address
   bar stacks..." comment above). Breadcrumb-path separators between
   folder segments (.fs-crumb-sep) are a different class and stay visible
   — see its own comment in ui_style.php near .fs-addr-sep's base rule. */
html.subpage .fs-addr-sep {
    display: none !important;
}
html.subpage .fs-crumb-sep {
    color: var(--color_text_normal) !important;
    opacity: 0.45 !important;
}

/* "Files" root label → page title */
html.subpage .fs-addr-root {
    font-size: 1.38rem !important;
    font-weight: bold !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase !important;
    color: var(--color_text_stressed) !important;
    font-family: var(--font-heading) !important;
    flex-shrink: 0 !important;
}

/* Section name → subtitle */
html.subpage #fs_addr_section {
    font-size: 0.92rem !important;
    letter-spacing: 0.06em !important;
    font-weight: normal !important;
    opacity: 0.45 !important;
    color: var(--color_text_normal) !important;
    padding-left: 3px !important;
}

/* Right column: view-mode buttons + upload + filter */
html.subpage #fs_toolbar_actions {
    flex-shrink: 0 !important;
    display: flex !important;
    align-items: center !important;
    gap: 4px !important;
    padding: 0 !important;
}

html.subpage #fs_filter {
    flex-shrink: 0 !important;
    width: 150px !important;
}

/* ══════════════════════════════════════════════════════════════════
   FULL-VIEWPORT WIDTH: all sub-page outer wrappers fill 100% of
   the iframe with no horizontal padding at the outermost level.
   Content items retain their own padding (log-entry: 16px 20px,
   gb-entry: 18px 20px, um-user-row: 14px 18px, etc.).
   ══════════════════════════════════════════════════════════════════ */

/* Sub-page body: left-align text (global body sets center) */
html.subpage body {
    text-align: left !important;
}

/* ── Outer wrapper: remove horizontal padding so content fills iframe ── */
html.subpage #log_wrap {
    padding-left: 0 !important;
    padding-right: 0 !important;
    width: 100% !important;
    box-sizing: border-box !important;
}

html.subpage #gb_wrap {
    padding-left: 0 !important;
    padding-right: 0 !important;
    width: 100% !important;
    box-sizing: border-box !important;
}

html.subpage #um_wrap {
    padding-left: 0 !important;
    padding-right: 0 !important;
    width: 100% !important;
    box-sizing: border-box !important;
}

/* ── Search: remove max-width cap and centering ── */
html.subpage #srch_wrap {
    width: 100% !important;
    box-sizing: border-box !important;
}

html.subpage #srch_inner {
    max-width: 100% !important;
    margin: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    width: 100% !important;
    box-sizing: border-box !important;
}

/* ── Admin tabs: remove max-width caps ── */
html.subpage #bk_wrap {
    max-width: 100% !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    width: 100% !important;
    box-sizing: border-box !important;
}

html.subpage #analytics_wrap {
    max-width: 100% !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    width: 100% !important;
    box-sizing: border-box !important;
}

/* ── Msgbase: remove all padding on outer app container ── */
html.subpage #mb_app {
    padding: 0 !important;
    width: 100% !important;
    box-sizing: border-box !important;
}

/* ── Audit / Integrity / ERL / UTL / FSL / SVC admin wrappers ── */
html.subpage #audit_wrap,
html.subpage #int_wrap,
html.subpage #erl_wrap,
html.subpage #utl_wrap,
html.subpage #fsl_wrap,
html.subpage #svc_wrap {
    width: 100% !important;
    box-sizing: border-box !important;
}

/* ═══════════════════════════════════════════════════════════════════════
   GUESTBOOK FULL-VIEWPORT WIDTH
   The POLISH PASS earlier constrained body to max-width: 860px.
   Override for subpage context so content spans the full iframe.
   ════════════════════════════════════════════════════════════════════ */

html.subpage:has(#gb_wrap) body {
    max-width: 100% !important;
    margin: 0 !important;
    padding-top: 58px !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    padding-bottom: 0 !important;
}

html.subpage #gb_form_section,
html.subpage #gb_entries {
    padding-left: 20px !important;
    padding-right: 20px !important;
}

/* ═══════════════════════════════════════════════════════════════════════
   SITE-WIDE DIALOGS — glass modal system
   Covers: APP_STANDARD alert/confirm/prompt (.lb-dlg-box), upload
   progress (.lb-upl-box), admin confirm (#dlg_box), session timeout
   (#session_warn_dialog), color picker (#div_color_pallet_dialog).
   ════════════════════════════════════════════════════════════════════ */

/* ── Scroll lock when any modal is open ─────────────────────── */

body.lb-modal-open {
    overflow: hidden;
    touch-action: none;
}

/* ── Shared backdrop overlay ─────────────────────────────────── */

.lb-dlg-ov,
#dlg_overlay {
    position: fixed;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.88);
    z-index: 2147483646;
    font-family: inherit;
    padding: 20px;
    box-sizing: border-box;
}

/* ── Dialog box — glass tier 1 (2026-08-19), was flat ────────────
   Content surface (confirmation text, form inputs) — stays more opaque
   than the floating-chrome tier 2 surfaces for readability. */

.lb-dlg-box,
#dlg_box,
#cleared_modal_box,
#session_warn_dialog {
    position: relative;
    width: min(92vw, 420px);
    background: color-mix(in srgb, var(--bg_surface) 88%, transparent) !important;
    backdrop-filter: var(--glass-blur-1) !important;
    -webkit-backdrop-filter: var(--glass-blur-1) !important;
    border: 1px solid var(--border) !important;
    border-radius: var(--theme-radius) !important;
    padding: 24px 26px;
    box-sizing: border-box;
    color: var(--color_text_normal);
    box-shadow: var(--elevation-3) !important;
    animation: raise_up_glass 0.38s cubic-bezier(0.22, 1, 0.36, 1) both;
    overflow: hidden;
}

/* Content inside boxes floats above sheen */
.lb-dlg-title,
.lb-dlg-msg,
.lb-dlg-inp,
.lb-dlg-btns,
.lb-upl-title,
.lb-upl-drop,
.lb-upl-list,
.lb-upl-acts {
    position: relative;
    z-index: 1;
}

.lb-dlg-title {
    font-size: 0.95rem;
    font-weight: 700;
    /* Was uppercase — this is the dialog's actual title text ("Delete
       post?" etc.), reads as a real heading now. */
    letter-spacing: 0.02em;
    text-transform: none;
    color: var(--color_primary);
    margin: 0 0 14px;
}

.lb-dlg-msg {
    margin: 0 0 18px;
    font-size: 14px;
    line-height: 1.6;
    white-space: pre-wrap;
    word-break: break-word;
    color: var(--color_text_normal);
    /* Readability cap: keeps long dialog messages from stretching to the
       full dialog width on wide viewports. */
    max-width: clamp(45ch, 90vw, 75ch);
}

.lb-dlg-inp {
    width: 100%;
    box-sizing: border-box;
    background: var(--theme-input-bg);
    border: 1px solid rgba(255,255,255,0.14) !important;
    border-radius: var(--theme-radius-sm) !important;
    color: var(--color_text_normal);
    font-family: inherit;
    font-size: 14px;
    padding: 8px 10px;
    outline: none;
    margin: 0 0 18px;

    /* Cinnamon/GTK pass (2026-08-11): solid border-color change only. */
    &:focus {
        border-color: var(--color_primary) !important;
    }
}

.lb-dlg-btns {
    display: flex;
    gap: 10px;
    justify-content: flex-end;
    align-items: center;
}

.lb-dlg-btn,
#cleared_modal_ok {
    font-family: inherit !important;
    font-size: 12px !important;
    font-weight: bold !important;
    text-transform: none !important;
    letter-spacing: .02em !important;
    padding: 8px 20px !important;
    border-radius: var(--theme-radius-sm) !important;
    cursor: pointer !important;
    border: 1px solid var(--color_primary) !important;
    background: var(--color_primary) !important;
    color: var(--text_on_ac) !important;
    min-height: 0 !important;
    margin: 0 !important;

    &:hover {
        filter: brightness(1.12) !important;
        transform: none !important;
        box-shadow: none !important;
    }

    &.cancel {
        border-color: rgba(255,255,255,0.18) !important;
        background: rgba(255,255,255,0.08) !important;
        color: var(--color_text_normal) !important;

        &:hover {
            background: rgba(255,255,255,0.14) !important;
        }
    }
}

/* ── Backdrop: lightweight scrim for drawers/lightboxes (LBKit.backdrop) ── */

.lb-backdrop {
    position: fixed;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.6);
    z-index: 2147483645;
}

.lb-backdrop-blur {
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}

/* ── Popover: anchored toggle panel (LBKit.popover) ──────────── */

.lb-popover {
    position: absolute;
    z-index: 2147483645;
    min-width: 180px;
    max-width: 320px;
    background: color-mix(in srgb, var(--bg_raised) 96%, transparent);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    border: 1px solid var(--border);
    border-radius: var(--theme-radius);
    box-shadow: none;
    padding: 8px;
    box-sizing: border-box;
    animation: raise_up_glass 0.2s cubic-bezier(0.22, 1, 0.36, 1) both;
}

/* ── Touch stick: analog joystick for touch controls (LBKit.touch_stick) ── */

.lb-touch-stick {
    position: relative;
    width: calc(var(--lb-stick-radius, 44px) * 2);
    height: calc(var(--lb-stick-radius, 44px) * 2);
    border-radius: 50%;
    background: color-mix(in srgb, var(--bg_dark) 60%, transparent);
    border: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
    touch-action: none;
    user-select: none;
}

.lb-touch-stick-nub {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 44%;
    height: 44%;
    margin: -22% 0 0 -22%;
    border-radius: 50%;
    background: color-mix(in srgb, var(--accent) 70%, var(--bg_raised));
    box-shadow: none;
    transition: transform 0.05s linear;
    pointer-events: none;
}

/* ── Upload progress dialog ──────────────────────────────────── */

.lb-upl-box {
    width: min(94vw, 520px);
    max-height: 86vh;
    display: flex;
    flex-direction: column;
}

.lb-upl-title {
    font-size: 13px;
    font-weight: bold;
    text-transform: uppercase;
    letter-spacing: .14em;
    color: var(--color_text_stressed);
    margin: 0 0 16px;
    padding-bottom: 10px;
    border-bottom: 1px solid rgba(255,255,255,0.10);
}

.lb-upl-drop {
    border: 1px dashed var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 7%, transparent);
    color: var(--color_text_normal);
    padding: 26px 16px;
    text-align: center;
    cursor: pointer;
    font-size: 13px;
    letter-spacing: .04em;
    transition: background .15s;

    &:hover, &.over {
        background: color-mix(in srgb, var(--color_primary) 16%, transparent);
    }
}

.lb-upl-list {
    margin: 14px 0 0;
    overflow-y: auto;
    flex: 1 1 auto;
}

.lb-upl-item { margin: 0 0 12px; }

.lb-upl-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    font-size: 12px;
    color: var(--color_text_normal);
    margin-bottom: 5px;
}

.lb-upl-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.lb-upl-pct { flex: 0 0 auto; color: var(--color_text_stressed); }

.lb-upl-bar {
    height: 6px;
    background: color-mix(in srgb, var(--color_text_normal) 14%, transparent);
    overflow: hidden;
}

.lb-upl-fill {
    height: 100%;
    width: 0;
    background: var(--color_primary);
    transition: width .15s;
}

.lb-upl-item.err .lb-upl-fill { background: var(--color_secondary); }
.lb-upl-item.err .lb-upl-pct  { color: var(--color_secondary); }

.lb-upl-acts {
    display: flex;
    gap: 10px;
    align-items: center;
    justify-content: flex-end;
    margin-top: 16px;
}

/* ═══════════════════════════════════════════════════════════════════════
   SIGN-UP PAGE — canonical page header
   #su_header injected into signup/index.php before .su-panel.
   ════════════════════════════════════════════════════════════════════ */

html.subpage #su_header {
    position: relative !important;
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: flex-start !important;
    gap: 8px !important;
    padding: 10px 20px 12px !important;
    margin: 0 !important;
    background: var(--bg_raised) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius, 8px) !important;
    overflow: visible !important;
    box-sizing: border-box !important;
    width: 100% !important;
    flex-shrink: 0 !important;
    animation: none !important;
    opacity: 1 !important;
    min-height: 0 !important;
    border: none !important;
}

html.subpage #su_header::before {
    display: block !important;
    content: '' !important;
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 56px !important;
    height: 100% !important;
    background: transparent !important;
    border-radius: var(--theme-radius, 8px) 0 0 var(--theme-radius, 8px) !important;
    z-index: 0 !important;
    pointer-events: none !important;
    animation: none !important;
}

html.subpage #su_header_left {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 4px !important;
    flex: 1 !important;
    min-width: 0 !important;
    padding-left: 10px !important;
}

html.subpage #su_page_title {
    font-size: 1.38rem !important;
    font-weight: bold !important;
    letter-spacing: 0.16em !important;
    text-transform: uppercase !important;
    color: var(--color_text_stressed) !important;
    font-family: var(--font-heading) !important;
    margin: 0 !important;
}

html.subpage #su_page_sub {
    font-size: 0.92rem !important;
    letter-spacing: 0.02em !important;
    font-weight: normal !important;
    opacity: 0.45 !important;
}

html.subpage .su-wrap {
    display: flex !important;
    flex-direction: column !important;
    gap: 16px !important;
    align-items: stretch !important;
    padding: 0 !important;
    min-height: 100dvh !important;
}

/* ── Chat People panel + inline DM ───────────────────────────────────────── */

#chat_app.people-open {
    margin-right: 300px;
}

#chat_people_panel {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    width: 300px;
    z-index: 200;
    background: var(--bg_raised);
    border-left: 1px solid color-mix(in srgb, var(--color_primary) 18%, transparent);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

#chat_people_panel[hidden] {
    display: none !important;
}

#chat_people_hdr {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 14px;
    border-bottom: 1px solid color-mix(in srgb, var(--color_primary) 14%, transparent);
    flex-shrink: 0;
}

#chat_people_label {
    font-size: 0.82rem;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    opacity: 0.55;
}

#chat_people_close {
    background: none;
    border: none;
    color: var(--color_text);
    cursor: pointer;
    font-size: 1rem;
    padding: 4px 6px;
    line-height: 1;
    opacity: 0.5;
    min-height: unset;
    &:hover { opacity: 1; }
}

#chat_people_list {
    flex: 1;
    overflow-y: auto;
    padding: 8px 0;
}

.chat-people-empty {
    padding: 20px 14px;
    font-size: 0.88rem;
    opacity: 0.45;
    text-align: center;
}

.chat-people-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 14px;
    &:hover { background: color-mix(in srgb, var(--color_primary) 8%, transparent); }
}

.chat-people-av {
    width: 30px;
    height: 30px;
    border-radius: var(--theme-radius-xs);
    object-fit: cover;
    flex-shrink: 0;
    background: color-mix(in srgb, var(--color_primary) 20%, transparent);
}

.presence-dot {
    width: 8px;
    height: 8px;
    border-radius: var(--theme-radius-xs);
    background: #3db87a;
    flex-shrink: 0;
}

.chat-people-name {
    flex: 1;
    font-size: 0.9rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.chat-dm-btn {
    border-color: var(--color_primary) !important;
    color: var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 12%, transparent) !important;
    padding: 0 14px !important;
    flex-shrink: 0;
    font-size: 0.78rem !important;
    margin: 0 !important;
}

/* DM thread sub-panel (slides in on top of people list inside the panel) */
#chat_dm_panel {
    position: absolute;
    inset: 0;
    background: var(--bg_raised);
    display: flex;
    flex-direction: column;
    z-index: 1;
}

#chat_dm_panel[hidden] {
    display: none !important;
}

#chat_dm_hdr {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    border-bottom: 1px solid color-mix(in srgb, var(--color_primary) 14%, transparent);
    flex-shrink: 0;
}

#chat_dm_back {
    background: none;
    border: none;
    color: var(--color_primary);
    cursor: pointer;
    font-size: 0.9rem;
    padding: 4px 6px;
    min-height: unset;
    opacity: 0.75;
    &:hover { opacity: 1; }
}

#chat_dm_with_name {
    font-size: 0.92rem;
    font-weight: 600;
    flex: 1;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

#chat_dm_msgs {
    flex: 1;
    overflow-y: auto;
    padding: 12px 10px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.dm-msg {
    display: flex;
    flex-direction: column;
    max-width: 88%;
}

.dm-msg-self {
    align-self: flex-end;
    align-items: flex-end;
}

.dm-msg-other {
    align-self: flex-start;
    align-items: flex-start;
}

.dm-msg-body {
    padding: 7px 11px;
    border-radius: var(--theme-radius-xs);
    font-size: 0.88rem;
    line-height: 1.45;
    word-break: break-word;
    white-space: pre-wrap;
}

.dm-msg-self .dm-msg-body {
    background: color-mix(in srgb, var(--color_primary) 28%, transparent);
    border-bottom-right-radius: 4px;
}

.dm-msg-other .dm-msg-body {
    background: color-mix(in srgb, var(--bg_surface, var(--bg_base)) 80%, transparent);
    border: 1px solid color-mix(in srgb, var(--color_primary) 12%, transparent);
    border-bottom-left-radius: 4px;
}

.dm-msg-meta {
    font-size: 0.72rem;
    opacity: 0.38;
    margin-top: 3px;
    padding: 0 4px;
}

#chat_dm_input_row {
    display: flex;
    gap: 6px;
    padding: 8px 10px;
    border-top: 1px solid color-mix(in srgb, var(--color_primary) 14%, transparent);
    flex-shrink: 0;
    align-items: center;
}

#chat_dm_input {
    flex: 1;
    background: color-mix(in srgb, var(--bg_base) 60%, transparent);
    border: 1px solid color-mix(in srgb, var(--color_primary) 20%, transparent);
    border-radius: var(--theme-radius-xs);
    color: var(--color_text);
    font-size: 0.88rem;
    padding: 7px 10px;
    min-height: unset;
    &:focus { outline: none; border-color: color-mix(in srgb, var(--color_primary) 50%, transparent); }
}

#chat_dm_send_btn {
    background: color-mix(in srgb, var(--color_primary) 22%, transparent);
    border: 1px solid color-mix(in srgb, var(--color_primary) 34%, transparent);
    color: var(--color_primary);
    border-radius: var(--theme-radius-xs);
    padding: 7px 12px;
    font-size: 0.85rem;
    cursor: pointer;
    min-height: unset;
    flex-shrink: 0;
    &:hover { background: color-mix(in srgb, var(--color_primary) 34%, transparent); }
    &:disabled { opacity: 0.4; cursor: default; }
}

@media (max-width: 600px) {
    #chat_people_panel {
        width: 100%;
        border-left: none;
        border-top: 1px solid color-mix(in srgb, var(--color_primary) 14%, transparent);
        top: auto;
        height: 70dvh;
    }
    #chat_app.people-open {
        margin-right: 0;
    }
}


/* ══════════════════════════════════════════════════════════════════
   ADMIN — extracted inline styles
   ══════════════════════════════════════════════════════════════════ */

.admin-access-denied { font-family: monospace; padding: 2rem; }

.um-avatar-file { display: none; }

.hs-policy-desc { font-size: 12px; opacity: 0.6; margin: 0 0 8px; }

#ban_add_form { display: flex; gap: 8px; margin-bottom: 18px; flex-wrap: wrap; }

#ban_flash { margin-bottom: 10px; font-size: 12px; display: none; }

.admin-scripts-desc { font-size: 12px; opacity: 0.55; margin: 0 0 16px; }

#scripts_btn_list { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 18px; }

#scripts_btn_list > span { opacity: 0.4; font-size: 12px; }

#scripts_flash { margin-bottom: 8px; font-size: 12px; display: none; }

#scripts_output {
    background: var(--bg_base);
    color: var(--color_text_normal);
    padding: 16px;
    font-size: 12px;
    min-height: 80px;
    max-height: 420px;
    overflow: auto;
    white-space: pre-wrap;
    word-break: break-all;
    border: 1px solid color-mix(in srgb, var(--border) 40%, transparent) !important;
    display: none;
}

#input_publish_at { display: none; }

#input_file_image { display: none; }

/* ══════════════════════════════════════════════════════════════════
   IN-IFRAME sub-page navigation headers — was: strip the panel
   background/shadow entirely ("redundant when the main page already
   provides site chrome"). Every real-world use of these headers IS the
   in-iframe case (every subpage in this desktop shell always loads
   inside a window iframe) — with real glass now on the canonical rule
   above, a flattened header here isn't "redundant chrome," it's the
   ONLY context that actually renders, so it needs the glass too rather
   than losing it. Kept margin:0 (still layout-relevant inside an
   iframe's own tighter frame). 2026-08-19. */
html.in-iframe #log_header,
html.in-iframe #srch_header,
html.in-iframe #gb_header,
html.in-iframe #chat_header,
html.in-iframe #wall-page-header,
html.in-iframe #um_header,
html.in-iframe #audit_header,
html.in-iframe #int_header,
html.in-iframe #erl_header,
html.in-iframe #utl_header,
html.in-iframe #fsl_header,
html.in-iframe #svc_header,
html.in-iframe .lb-page-header,
html.in-iframe .mb-header,
html.in-iframe #media_toolbar,
html.in-iframe #fs_toolbar,
html.in-iframe #su_header,
html.in-iframe:has(#dm_msgs) #div_top,
html.in-iframe:has(#div_rom_list_toolbox) #div_top,
html.in-iframe:has(#fm_main) #fm_top {
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent) !important;
    backdrop-filter: var(--glass-blur-2) !important;
    -webkit-backdrop-filter: var(--glass-blur-2) !important;
    box-shadow: var(--elevation-2) !important;
    margin: 0 !important;
}


#acct_av_file { display: none; }

/* ══════════════════════════════════════════════════════════════════
   UI ENHANCEMENT FEATURES — command palette, hover cards, jump pill,
   autosave indicator, distraction-free mode, word count, skeleton
   screens, offline banner, swipe-to-reply, keyboard shortcut map.
   ══════════════════════════════════════════════════════════════════ */

/* ── Command palette (⌘K / Ctrl+K) ─────────────────────────────── */
#lb-cmd-ov {
    position: fixed; inset: 0; z-index: 9800;
    background: rgba(0,0,0,0.72);
    display: flex; align-items: flex-start; justify-content: center;
    padding-top: clamp(60px, 12vh, 140px);
}
#lb-cmd-box {
    width: min(560px, 92vw);
    background: color-mix(in srgb, var(--bg_raised) 96%, transparent);
    border: 1px solid color-mix(in srgb, var(--color_primary) 35%, transparent);
    border-radius: var(--theme-radius-xs);
    overflow: hidden;
}
#lb-cmd-input {
    width: 100%; box-sizing: border-box;
    padding: 14px 18px;
    background: transparent;
    border: none; border-bottom: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
    color: var(--color_text_normal);
    font-size: 1rem; font-family: inherit;
    outline: none;
}
#lb-cmd-list {
    max-height: 320px; overflow-y: auto;
    list-style: none; margin: 0; padding: 6px 0;
}
#lb-cmd-list li {
    display: flex; align-items: center; gap: 10px;
    padding: 9px 18px; cursor: pointer;
    font-size: 0.88rem; color: var(--color_text_normal);
    transition: background 0.1s;
}
#lb-cmd-list li:hover,
#lb-cmd-list li.lb-cmd-active {
    background: color-mix(in srgb, var(--color_primary) 12%, transparent);
    color: var(--color_text_stressed);
}
#lb-cmd-list li .lb-cmd-icon { opacity: 0.55; font-size: 0.85rem; flex-shrink: 0; }
#lb-cmd-list li .lb-cmd-label { flex: 1; }
#lb-cmd-list li .lb-cmd-hint {
    font-size: 0.72rem; opacity: 0.4; letter-spacing: 0.04em; font-family: monospace;
}
.lb-cmd-empty {
    padding: 20px 18px; font-size: 0.82rem; opacity: 0.45; text-align: center;
}

/* ── Hover user card (desktop ≥768px) ──────────────────────────── */
#lb-user-card {
    position: fixed; z-index: 9600;
    min-width: 200px; max-width: 240px;
    background: color-mix(in srgb, var(--bg_raised) 97%, transparent);
    border: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
    padding: 14px 16px; pointer-events: none;
    opacity: 0; transition: opacity 0.15s ease;
}
#lb-user-card.visible { opacity: 1; }
#lb-user-card-av {
    width: 40px; height: 40px; border-radius: var(--theme-radius-xs); object-fit: cover;
    border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
    margin-bottom: 8px; display: block;
}
#lb-user-card-name { font-weight: 600; font-size: 0.9rem; color: var(--color_text_stressed); }
#lb-user-card-handle { font-size: 0.75rem; opacity: 0.5; margin-top: 2px; }
@media (max-width: 767px) { #lb-user-card { display: none !important; } }

/* ── Jump-to-unread pill ────────────────────────────────────────── */
#lb-jump-unread {
    position: fixed; bottom: 80px; right: 18px; z-index: 900;
    display: none; align-items: center; gap: 6px;
    padding: 7px 14px;
    background: color-mix(in srgb, var(--color_primary) 18%, var(--bg_raised));
    border: 1px solid color-mix(in srgb, var(--color_primary) 50%, transparent);
    color: var(--color_primary); cursor: pointer;
    font-size: 0.78rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase;
    white-space: nowrap; user-select: none;
    animation: lb-jump-in 0.2s ease;
}
#lb-jump-unread.visible { display: flex; }
#lb-jump-unread .lb-jump-count {
    background: var(--color_primary); color: var(--text_on_ac);
    border-radius: var(--theme-radius-xs); width: 18px; height: 18px; font-size: 0.7rem;
    display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
@keyframes lb-jump-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

/* ── Autosave indicator ─────────────────────────────────────────── */
#lb-autosave-badge {
    position: absolute; top: 8px; right: 10px; z-index: 10;
    font-size: 0.68rem; letter-spacing: 0.06em; text-transform: uppercase;
    color: color-mix(in srgb, var(--color_primary) 50%, transparent);
    opacity: 0; transition: opacity 0.4s ease; pointer-events: none;
}
#lb-autosave-badge.visible { opacity: 1; }

/* ── Word count ─────────────────────────────────────────────────── */
#lb-word-count {
    font-size: 0.7rem; letter-spacing: 0.05em; opacity: 0.42;
    padding: 0 8px; display: flex; align-items: center;
    color: var(--color_text_normal); pointer-events: none; flex-shrink: 0;
}

/* ── Distraction-free mode ──────────────────────────────────────── */
#button_dfree {
    font-size: 0.75rem !important;
}
html.df-mode #div_command_pallet > *:not(#button_dfree) { opacity: 0 !important; pointer-events: none !important; transition: opacity 0.2s; }
html.df-mode #input_title,
html.df-mode #input_tags,
html.df-mode #div_pin_wrap,
html.df-mode #div_status_wrap { display: none !important; }
html.df-mode #div_content { height: calc(100dvh - 90px) !important; }
html.df-mode #button_dfree { opacity: 1 !important; pointer-events: auto !important; }

/* ── Skeleton shimmer ─────────────────────────────────────────────
   .lb-skeleton itself is declared once, near @keyframes lb-shimmer,
   at the top of the file — these are just the size variant classes. */
.lb-skeleton-line { height: 12px; margin-bottom: 8px; }
.lb-skeleton-line.wide { width: 85%; }
.lb-skeleton-line.mid  { width: 60%; }
.lb-skeleton-line.short { width: 35%; }
.lb-skeleton-block { height: 80px; margin-bottom: 12px; }

/* ── Offline banner ─────────────────────────────────────────────── */
#lb-offline-banner {
    position: fixed; top: 0; left: 0; right: 0; z-index: 9900;
    padding: 8px 18px; text-align: center;
    background: color-mix(in srgb, var(--error) 20%, var(--bg_raised));
    border-bottom: 1px solid color-mix(in srgb, var(--error) 50%, transparent);
    color: var(--error); font-size: 0.8rem; letter-spacing: 0.06em;
    text-transform: uppercase; transform: translateY(-100%);
    transition: transform 0.25s ease;
}
#lb-offline-banner.visible { transform: none; }

/* ── Swipe-to-reply (chat) ──────────────────────────────────────── */
#chat_reply_bar {
    display: flex; align-items: center; gap: 8px;
    padding: 6px 14px;
    background: color-mix(in srgb, var(--bg_hover) 40%, transparent);
    border-top: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
    font-size: 0.78rem; color: var(--color_text_normal);
}
#chat_reply_bar.hidden { display: none; }
#chat_reply_bar .reply-bar-text { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#chat_reply_bar strong { color: var(--color_primary); }
#chat_reply_cancel { background: none; border: none; cursor: pointer; opacity: 0.5; font-size: 1rem; padding: 0 4px; }
#chat_reply_cancel:hover { opacity: 1; }
.chat-msg { transition: background 0.25s ease; }
.chat-msg.swiping { background: color-mix(in srgb, var(--color_primary) 8%, transparent) !important; }

/* ── Message search (chat) ──────────────────────────────────────── */
#chat_search_bar {
    display: flex; align-items: center; gap: 8px;
    padding: 6px 12px;
    background: color-mix(in srgb, var(--bg_raised) 60%, transparent);
    border-bottom: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
}
#chat_search_bar.hidden { display: none; }
#chat_search_input { flex: 1; height: 30px !important; font-size: 0.82rem !important; margin: 0 !important; }
#chat_search_count { font-size: 0.72rem; opacity: 0.5; white-space: nowrap; }
#chat_search_clear { background: none; border: none; cursor: pointer; opacity: 0.5; font-size: 1rem; padding: 0 4px; }
#chat_search_clear:hover { opacity: 1; }
.chat-msg.search-hidden { display: none !important; }
.chat-msg.search-match .chat-msg-bubble { outline: 1px solid color-mix(in srgb, var(--color_primary) 40%, transparent); }

/* ── Keyboard shortcut map modal ────────────────────────────────── */
#lb-shortcut-ov {
    position: fixed; inset: 0; z-index: 9700;
    background: rgba(0,0,0,0.82);
    display: flex; align-items: center; justify-content: center;
}
#lb-shortcut-box {
    width: min(540px, 90vw); max-height: 80vh; overflow-y: auto;
    background: color-mix(in srgb, var(--bg_raised) 97%, transparent);
    border: 1px solid color-mix(in srgb, var(--color_primary) 35%, transparent);
    padding: 24px 28px;
}
#lb-shortcut-box h2 {
    margin: 0 0 18px; font-size: 0.85rem; letter-spacing: 0.15em;
    text-transform: uppercase; color: var(--color_primary);
}
.lb-shortcut-section { margin-bottom: 18px; }
.lb-shortcut-section h3 {
    font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase;
    opacity: 0.45; margin: 0 0 8px; border-bottom: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
    padding-bottom: 4px;
}
.lb-shortcut-row {
    display: flex; align-items: center; justify-content: space-between;
    padding: 5px 0; font-size: 0.82rem; color: var(--color_text_normal);
}
.lb-shortcut-row + .lb-shortcut-row { border-top: 1px solid color-mix(in srgb, var(--border) 15%, transparent); }
.lb-shortcut-keys { display: flex; gap: 4px; }
.lb-shortcut-keys kbd {
    display: inline-flex; align-items: center; justify-content: center;
    padding: 2px 7px; min-width: 22px;
    border: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
    background: color-mix(in srgb, var(--bg_hover) 50%, transparent);
    font-family: monospace; font-size: 0.75rem; color: var(--color_text_stressed);
    border-radius: var(--theme-radius-xs);
}

/* ── Scroll-linked header compression ──────────────────────────── */
html.main-frame #div_top {
    transition: height 0.2s ease, padding-top 0.2s ease, padding-bottom 0.2s ease;
}
html.main-frame.hdr-compact #div_top {
    height: 32px !important; min-height: 32px !important;
}
html.main-frame.hdr-compact #div_top .nav_group_label,
html.main-frame.hdr-compact #div_top .a_nav_link,
html.main-frame.hdr-compact #div_top .nav_group {
    font-size: 0.78rem !important;
}

/* ── Round 3 UI enhancements ────────────────────────────────────── */

/* Reading time badge */
.wall-entry-read-time {
    font-size: 0.72rem; opacity: 0.55; letter-spacing: 0.04em;
    white-space: nowrap;
}

/* Image lightbox */
#lb-lightbox {
    position: fixed; inset: 0; z-index: 10500;
    background: rgba(0,0,0,0.92);
    display: flex; align-items: center; justify-content: center;
    cursor: zoom-out;
}
#lb-lightbox.hidden { display: none !important; }
#lb-lightbox img {
    max-width: 94vw; max-height: 90vh;
    object-fit: contain; border: none;
    box-shadow: none; pointer-events: none;
}
#lb-lightbox-prev,
#lb-lightbox-next {
    position: absolute; top: 50%; transform: translateY(-50%);
    background: rgba(0,0,0,0.5); border: 1px solid rgba(255,255,255,0.15);
    /* !important: fixed-dark background, must beat the theme-reactive `*` reset. */
    color: #fff !important; font-size: 1.4rem; cursor: pointer;
    padding: 0.5rem 0.9rem; border-radius: var(--theme-radius-xs); line-height: 1;
    transition: background 0.15s;
}
#lb-lightbox-prev { left: 12px; }
#lb-lightbox-next { right: 12px; }
#lb-lightbox-prev:hover,
#lb-lightbox-next:hover { background: rgba(255,255,255,0.15); }
#lb-lightbox-close {
    position: absolute; top: 12px; right: 16px;
    background: none; border: none; color: rgba(255,255,255,0.7);
    font-size: 1.6rem; cursor: pointer; line-height: 1;
}
#lb-lightbox-close:hover { color: #fff; }

/* Entry permalink copy tooltip */
.lb-ts-copy {
    cursor: pointer; position: relative;
}
.lb-ts-copy::after {
    content: attr(data-copied);
    position: absolute; bottom: calc(100% + 4px); left: 50%;
    transform: translateX(-50%); white-space: nowrap;
    background: var(--bg_raised); border: 1px solid var(--border);
    color: var(--text); font-size: 0.72rem; padding: 2px 7px;
    border-radius: var(--theme-radius-xs); pointer-events: none; opacity: 0;
    transition: opacity 0.15s;
}
.lb-ts-copy.copied::after { opacity: 1; }

/* Pull-to-refresh spinner */
#lb-ptr-spinner {
    position: absolute; top: 0; left: 50%; transform: translateX(-50%);
    width: 32px; height: 32px; border-radius: var(--theme-radius-xs);
    border: 2px solid var(--border);
    border-top-color: var(--accent);
    animation: lb-spin 0.7s linear infinite;
    opacity: 0; transition: opacity 0.2s ease;
    pointer-events: none; margin-top: 8px;
}
#lb-ptr-spinner.visible { opacity: 1; }
@keyframes lb-spin { to { transform: translateX(-50%) rotate(360deg); } }

/* Wall entry focus mode */
html.lb-focus-mode .wall-entry:not(.lb-focused) {
    opacity: 0.12;
    pointer-events: none;
    transition: opacity 0.25s ease;
}
html.lb-focus-mode .wall-entry { transition: opacity 0.25s ease; }
.lb-focus-btn {
    background: none; border: none; cursor: pointer;
    font-size: 0.8rem; color: var(--text_dim);
    padding: 2px 6px; opacity: 0.5; transition: opacity 0.15s;
}
.lb-focus-btn:hover { opacity: 1; }


/* Sound toggle button (chat) */
#chat_sound_btn {
    background: none; border: none; cursor: pointer;
    color: var(--text_dim); font-size: 1.1rem; line-height: 1;
    padding: 0 0.4rem; align-self: center; opacity: 0.7;
    transition: opacity 0.15s;
}
#chat_sound_btn:hover { opacity: 1; }

/* Full timestamp tooltip on chat time */
.chat-msg-time[title]:hover::after {
    content: attr(title);
    position: absolute; bottom: calc(100% + 4px); left: 0;
    white-space: nowrap; font-size: 0.68rem;
    background: var(--bg_raised); border: 1px solid var(--border);
    color: var(--text); padding: 2px 7px; border-radius: var(--theme-radius-xs);
    pointer-events: none; z-index: 100;
}
.chat-msg-meta { position: relative; }

/* Reduced-motion pass for all Round 1-3 CSS transitions */
@media (prefers-reduced-motion: reduce) {
    #lb-reading-prog,
    #lb-btt,
    #lb-sticky-date,
    #lb-nav-prog,
    #lb-offline-banner,
    #lb-autosave-badge,
    .chat-msg-actions,
    .chat-msg-del,
    .chat-msg-mod,
    .chat-msg-pin,
    .chat-copy-btn,
    .lb-focus-btn,
    #lb-lightbox,
    #lb-ptr-spinner,
    .lb-ts-copy::after,
    html.main-frame #div_top,
    html.lb-focus-mode .wall-entry {
        transition: none !important;
        animation: none !important;
    }
}

/* ── Round 2 UI enhancements ────────────────────────────────────── */

/* j/k keyboard navigation focus ring (wall).
 * !important required — the site-wide `* { outline: none !important; }`
 * reset (ui_style.php ~line 199) otherwise wins regardless of this
 * selector's specificity; found via matched-styles inspection after this
 * rule produced zero visible effect despite being syntactically correct
 * and present in the parsed stylesheet — same class of landmine as the
 * background-flattener, different universal reset. */
.wall-entry.jk-focused {
    outline: 2px solid var(--accent) !important;
    outline-offset: 4px;
    scroll-margin-top: 80px;
}

/* Deep-link target entry highlight (?id=/#hash, no jump-select). */
.wall-entry.expanded {
    outline: 2px solid var(--accent) !important;
    outline-offset: 4px;
    scroll-margin-top: 80px;
}

/* Attach-feedback pop on freshly-inserted media in the wall editor. */
@keyframes lb-wiggle {
    0%, 100% { transform: scale(1); }
    30% { transform: scale(1.06); }
    60% { transform: scale(0.98); }
}
.wiggle {
    animation: lb-wiggle 0.35s ease-in-out;
}

/* Reading progress bar (wall page) — built via LBKit.progress(), which
   nests a .lb-progress-bar track + .lb-progress-fill fill inside; override
   both to collapse it back to a flat 3px bar pinned to the viewport top. */
#lb-reading-prog {
    position: fixed; top: 0; left: 0; right: 0; height: 3px; width: auto !important;
    z-index: 10000; pointer-events: none; gap: 0 !important;
}
#lb-reading-prog .lb-progress-bar {
    height: 100% !important; background: transparent !important;
    /* Edge-to-edge viewport-top bar — a pill radius would look broken
       flush against the screen edges, unlike a normal inline progress bar. */
    border-radius: var(--theme-radius-xs) !important;
}
#lb-reading-prog .lb-progress-fill {
    background: var(--accent) !important; transition: width 0.1s linear !important;
    border-radius: var(--theme-radius-xs) !important;
}

/* On-this-day widget */
#lb-on-this-day {
    border: 1px solid var(--accent); border-radius: var(--theme-radius-xs);
    padding: 0.75rem 1rem; margin: 0 0 1.25rem 0;
    background: color-mix(in srgb, var(--accent) 8%, transparent);
}
#lb-on-this-day h3 {
    margin: 0 0 0.5rem 0; font-size: 0.85rem;
    color: var(--accent); letter-spacing: 0.05em; text-transform: uppercase;
}
#lb-on-this-day ul {
    margin: 0; padding: 0 0 0 1rem;
    list-style: disc; color: var(--text_dim);
}
#lb-on-this-day ul li { margin: 0.2rem 0; font-size: 0.88rem; }
#lb-on-this-day ul li a { color: var(--accent); }

/* Sticky date separator (wall) */
#lb-sticky-date {
    position: fixed; top: 60px; left: 50%; transform: translateX(-50%);
    background: color-mix(in srgb, var(--bg_raised) 90%, transparent);
    border: 1px solid var(--border); border-radius: var(--theme-radius-xs);
    padding: 0.2rem 0.85rem; font-size: 0.78rem; color: var(--text_dim);
    z-index: 800; pointer-events: none; opacity: 0;
    transition: opacity 0.2s ease; backdrop-filter: none;
}
#lb-sticky-date.visible { opacity: 1; }

/* Unread badge on traditional nav */
.lb-nav-badge {
    position: absolute; top: 4px; right: calc(50% - 18px);
    background: var(--accent); color: var(--bg_base);
    font-size: 10px; font-weight: 700; line-height: 1;
    min-width: 16px; height: 16px; border-radius: var(--theme-radius-xs);
    padding: 0 3px; display: flex; align-items: center; justify-content: center;
}
#site-traditional-nav a { position: relative; }

/* Emoji picker (chat) */
#chat_emoji_btn {
    background: none; border: none; cursor: pointer;
    color: var(--text_dim); font-size: 1.3rem; line-height: 1;
    padding: 0 0.4rem; align-self: center; opacity: 0.7;
    transition: opacity 0.15s;
}
#chat_emoji_btn:hover { opacity: 1; }
#chat_emoji_picker {
    position: absolute; bottom: calc(100% + 6px); right: 0;
    background: var(--bg_raised); border: 1px solid var(--border);
    border-radius: var(--theme-radius-xs); padding: 0.5rem;
    display: grid; grid-template-columns: repeat(8, 1fr); gap: 2px;
    z-index: 500; box-shadow: none;
    max-height: 220px; overflow-y: auto;
}
#chat_emoji_picker.hidden { display: none !important; }
.chat-emoji-item {
    font-size: 1.35rem; cursor: pointer; text-align: center;
    border-radius: var(--theme-radius-xs); padding: 0.2rem;
    transition: background 0.1s;
}
.chat-emoji-item:hover { background: var(--bg_hover); }

/* Copy button — lives in .chat-msg-actions row, shown on .chat-msg:hover */
.chat-copy-btn {
    background: transparent !important;
    border: none !important;
    border-radius: var(--theme-radius-xs) !important;
    color: var(--text_dim); font-size: 0.82rem !important;
    cursor: pointer; padding: 2px 6px !important;
    opacity: 0.55; transition: opacity 0.15s;
    height: auto !important; min-height: 0 !important;
    width: auto !important; margin: 0 !important; line-height: 1 !important;
}
.chat-copy-btn:hover { opacity: 1 !important; background: color-mix(in srgb, var(--color_primary) 10%, transparent) !important; }

/* Back-to-top / scroll-to-top floating button */
#lb-btt {
    position: fixed;
    bottom: calc(24px + env(safe-area-inset-bottom));
    right: 20px;
    background: color-mix(in srgb, var(--accent) 20%, var(--bg_raised));
    border: 1px solid color-mix(in srgb, var(--accent) 60%, transparent);
    border-radius: var(--theme-radius-xs);
    width: 46px;
    height: 46px;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    font-size: 1.3rem;
    color: var(--accent);
    z-index: 900;
    opacity: 0;
    pointer-events: none;
    box-shadow:
        none;
    transform: translateY(12px);
    transition: opacity 0.22s ease, transform 0.22s ease, box-shadow 0.15s, background 0.15s;
}
#lb-btt.visible {
    opacity: 1;
    pointer-events: auto;
    transform: translateY(0);
}
#lb-btt:hover {
    background: color-mix(in srgb, var(--accent) 35%, var(--bg_raised));
    border-color: var(--accent);
    box-shadow:
        none;
    transform: translateY(-2px);
}

/* Page load progress bar (main-frame nav) */
#lb-nav-prog {
    position: fixed; top: 0; left: 0; height: 2px;
    background: var(--accent); z-index: 10001;
    width: 0%; pointer-events: none; opacity: 0;
    transition: width 0.3s ease, opacity 0.2s ease;
}
#lb-nav-prog.active { opacity: 1; }

/* Font size preference */
html[data-font="sm"] body { font-size: 13px !important; }
html[data-font="lg"] body { font-size: 20px !important; }

/* ═══════════════════════════════════════════════════════════════════════
   BEAUTIFICATION ENHANCEMENTS
   ════════════════════════════════════════════════════════════════════ */

/* ── Crosshair cursor on main HUD frame ────────────────────────────── */
html.main-frame body {
    cursor: crosshair;
}
html.main-frame a,
html.main-frame button,
html.main-frame [role="button"],
html.main-frame label,
html.main-frame input,
html.main-frame select,
html.main-frame textarea {
    cursor: pointer;
}
html.main-frame #iframe_right {
    cursor: default;
}
html.main-frame input[type="text"],
html.main-frame input[type="search"],
html.main-frame input[type="password"],
html.main-frame textarea {
    cursor: text;
}

/* ── Scanlines overlay on HUD bars ─────────────────────────────────── */
#div_top::after {
    display: block !important;
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
    right: auto !important;
    background: none !important;
    border-radius: var(--theme-radius-xs) !important;
    z-index: 0 !important;
    pointer-events: none !important;
    animation: none !important;
}
#div_bottom::after {
    display: block !important;
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
    background: none !important;
    border-radius: var(--theme-radius-xs) !important;
    z-index: 0 !important;
    pointer-events: none !important;
    animation: none !important;
}

/* ── HUD clock in #div_arbitrary ───────────────────────────────────── */
/* #div_arbitrary itself no longer gets a flex-direction:column override
   here. That was for #hud_clock/#hud_palette rendering as a stacked
   two-line readout — but the shell's status-bar interval
   (index-early-bind.js) now overwrites #div_arbitrary's children with a
   single plain-text caption every 900ms, on every page, so those two
   spans get wiped shortly after load and this stacked layout hasn't
   actually rendered in practice for a while. The rule was still live
   CSS, though, and column-axis flips which property (align-items vs
   justify-content) governs horizontal vs vertical alignment — with it in
   place, align-items:center (meant for the row-layout's vertical
   centering) became the HORIZONTAL alignment instead, silently
   reintroducing the exact centered/double-sided-clipping bug the
   justify-content:flex-start fix above was written to prevent. */
#hud_clock {
    font-size: 0.78rem;
    letter-spacing: 0.16em;
    font-family: var(--font-heading);
    color: var(--color_text_normal);
    opacity: 0.72;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    z-index: 2;
    position: relative;
}

/* ── Palette name label under HUD clock ────────────────────────────── */
#hud_palette {
    font-size: 0.56rem;
    letter-spacing: 0.24em;
    font-family: var(--font-heading);
    color: var(--color_primary);
    opacity: 0.62;
    text-transform: uppercase;
    line-height: 1;
    z-index: 2;
    position: relative;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 160px;
}
@media (max-width: 767px) { #hud_palette { display: none; } }

/* ── Active nav link indicator ─────────────────────────────────────── */
#div_left .a_nav_link.nav-active {
    color: var(--color_text_stressed) !important;
    opacity: 1 !important;
}
#div_left .a_nav_link.nav-active::before {
    opacity: 1 !important;
    background: var(--accent_lit) !important;
    width: 7px !important;
    height: 7px !important;
}

/* ── Wall entry left accent stripe ────────────────────────────────── */
html.subpage .wall-entry,
html.in-iframe .wall-entry {
    border-left: 3px solid color-mix(in srgb, var(--color_primary) 38%, transparent) !important;
}

/* ── Iframe crossfade state ────────────────────────────────────────── */
#iframe_right.iframe-navigating {
    opacity: 0 !important;
}

/* ── Messaging group unread pulse dot ─────────────────────────────── */
.nav_group[data-group="messaging"].nav-group-has-unread > .nav_group_label::after {
    content: '';
    display: inline-block;
    width: 7px;
    height: 7px;
    border-radius: var(--theme-radius-xs);
    background: var(--accent_lit);
    margin-left: 8px;
    vertical-align: middle;
    flex-shrink: 0;
    animation: nav-unread-pulse 1.6s ease-in-out infinite;
}
@keyframes nav-unread-pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50%       { opacity: 0.35; transform: scale(0.6); }
}

/* ── Tabular numbers for timestamps and metadata ───────────────────── */
.wall-meta, .gb-meta, .srch-result-ts,
.msg-ts, .dm-ts, .chat-ts, .chat-msg-time,
[class*="-time"], [class*="-date"], [class*="-ts"] {
    font-variant-numeric: tabular-nums;
}

/* ── Traditional tab bar: border-top accent ────────────────────────────── */
@media (max-width: 767px) {
    html.main-frame #site-traditional-nav {
        border-top: 1px solid color-mix(in srgb, var(--color_primary) 28%, transparent);
    }
}

/* ── WS connection indicator dot (bottom bar) ─────────────────────── */
#ws_status_dot {
    position: absolute;
    right: 12px;
    top: 50%;
    transform: translateY(-50%);
    width: 7px;
    height: 7px;
    border-radius: var(--theme-radius-xs);
    background: var(--text_dim);
    transition: background 0.4s ease;
    flex-shrink: 0;
}
#ws_status_dot.ws-connected    { background: #3ddc84; }
#ws_status_dot.ws-disconnected { background: var(--error); }

/* ── Sidebar drag resize handle ───────────────────────────────────── */
#div_left_resize_handle {
    position: absolute;
    top: 0;
    right: 0;
    width: 5px;
    height: 100%;
    cursor: col-resize;
    z-index: 1001;
    background: transparent;
}
#div_left_resize_handle:hover,
#div_left_resize_handle.dragging {
    background: color-mix(in srgb, var(--accent) 30%, transparent);
}

/* ── Search results keyboard focus ───────────────────────────────── */
.srch-result.kb-focus {
    background: color-mix(in srgb, var(--accent) 12%, transparent) !important;
    outline: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
    outline-offset: -1px;
}

/* ── Konami alert mode ────────────────────────────────────────────── */
html.konami-active #div_top,
html.konami-active #div_bottom {
    animation: konami-flash 0.18s steps(1) infinite !important;
}
@keyframes konami-flash {
    0%, 100% { background: var(--bg_dark); }
    50%       { background: color-mix(in srgb, var(--accent) 22%, var(--bg_dark)); }
}
#konami_msg {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: var(--bg_raised);
    border: 2px solid var(--accent);
    border-radius: var(--theme-radius-xs);
    padding: 1.4rem 2.4rem;
    font-size: 1.35rem;
    font-family: monospace;
    color: var(--accent);
    letter-spacing: 0.18em;
    text-align: center;
    z-index: 99999;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.2s ease;
}
#konami_msg.visible { opacity: 1; }

/* ── Hamburger tooltip ────────────────────────────────────────────── */
#menu_icon_tooltip {
    position: fixed;
    top: 52px;
    left: 8px;
    background: var(--bg_raised);
    border: 1px solid var(--border);
    border-radius: var(--theme-radius-xs);
    padding: 3px 8px;
    font-size: 0.65rem;
    letter-spacing: 0.14em;
    color: var(--text_dim);
    white-space: nowrap;
    z-index: 10002;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.15s ease;
}
#menu_icon_tooltip.visible { opacity: 1; }

/* ══════════════════════════════════════════════════
   UI REDESIGN — 2026-07
   ══════════════════════════════════════════════════ */

/* ── Login page ─────────────────────────────────── */
#login .login-signup-link {
    margin: 10px 0 0;
    font-size: 12px;
    text-align: center;
    color: var(--text_dim);
}
#login .login-signup-link a {
    color: var(--accent);
    text-decoration: none;
}
#login .login-signup-link a:hover { text-decoration: underline; }
#login #lb_remember_label {
    margin-top: 6px;
    font-size: 12px;
    color: var(--text_dim);
}

/* ── Signup page ─────────────────────────────────── */
.su-approval-notice {
    margin: 0 0 14px;
    padding: 10px 14px;
    background: color-mix(in srgb, var(--accent) 10%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
    border-radius: var(--theme-radius-xs);
    font-size: 12px;
    color: var(--text_dim);
    line-height: 1.5;
}

/* ── Chat — two-row input dock ───────────────────── */
#chat_input_dock {
    display: flex;
    flex-direction: column;
    /* This redesign (stacked #chat_input_row/#chat_tools_row, column
       direction) never reset align-items from the single-row layout it
       replaced (~line 11113, align-items:center — still active since
       this rule doesn't touch that property, and CSS cascades per
       property, not per rule). In a column flex container that leftover
       center shrink-wraps and centers each row instead of stretching it
       full width — visible as the message input/send/emoji row sitting
       in a narrow floating column instead of spanning the dock, worse
       the wider the window. stretch is flexbox's own default; setting
       it explicitly here is what actually overrides the stale value. */
    align-items: stretch;
    gap: 0;
    border-top: 1px solid var(--border);
    background: var(--bg_raised);
    flex-shrink: 0;
}
#chat_input_row {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 10px 4px;
}
#chat_input_row #chat_input {
    flex: 1;
    min-width: 0;
}
#chat_tools_row {
    display: flex;
    align-items: center;
    gap: 4px;
    padding: 2px 10px 6px;
}
#chat_tools_row #chat_self_tag {
    margin-right: auto;
    font-size: 11px;
    color: var(--text_dim);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 140px;
}

#chat_header { position: relative; }

/* ── DM — overflow menu ─────────────────────────── */
html:has(#dm_overflow_menu) #div_top { position: relative; }
#dm_overflow_menu {
    position: absolute;
    top: 44px;
    right: 4px;
    min-width: 180px;
    background: var(--bg_raised);
    border: 1px solid var(--border);
    border-radius: var(--theme-radius-xs);
    z-index: 500;
    box-shadow: none;
    padding: 4px 0;
}
#dm_overflow_menu button {
    display: block;
    width: 100%;
    padding: 9px 16px;
    text-align: left;
    background: transparent !important;
    border: none !important;
    border-radius: var(--theme-radius-xs) !important;
    color: var(--color_text_normal) !important;
    font-size: 0.85rem !important;
    cursor: pointer;
    min-height: 36px;
    text-transform: none !important;
    letter-spacing: 0 !important;
    font-weight: 500 !important;
    height: auto !important;
}
#dm_overflow_menu button:hover { background: color-mix(in srgb, var(--color_primary) 10%, transparent) !important; color: var(--color_text_stressed) !important; }
#dm_overflow_menu #dm_clear_proxy { color: var(--color_danger, #c05); }

/* ── Admin — tab icons + slim security banner ───── */
a.admin-tab-btn[data-icon]::before {
    content: attr(data-icon);
    display: inline-block;
    width: 16px;
    margin-right: 7px;
    font-size: 9px;
    opacity: 0.55;
    vertical-align: middle;
    line-height: 1;
}
/* ── Msgbase — pre word-wrap ─────────────────────── */
.mb-msg-body {
    white-space: pre-wrap;
    overflow-wrap: break-word;
    word-break: break-word;
}

/* ── FM — topbar split + resize handle ──────────── */
#fm_top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}
#fm_resize_handle {
    width: 5px;
    flex-shrink: 0;
    cursor: col-resize;
    background: transparent;
    border-left: 1px solid var(--border);
    position: relative;
    z-index: 2;
    transition: background 0.15s;
}
#fm_resize_handle:hover,
#fm_resize_handle.dragging { background: color-mix(in srgb, var(--accent) 30%, transparent); border-color: var(--accent); }

/* ── BBS — toast credentials + back link ────────── */
/* #ac_div (below) resets padding/margin to 0 !important on every descendant
   for the terminal chrome — needs #ac_div-scoped specificity + !important
   here to win that reset back for this bar's own spacing. */
#ac_div .bbs-cred-toast {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 7px 12px !important;
    font-size: 12px;
    color: var(--text_dim);
    background: color-mix(in srgb, var(--accent) 8%, var(--bg_raised));
    border-bottom: 1px solid color-mix(in srgb, var(--accent) 20%, transparent);
    transition: opacity 0.3s;
}
.bbs-cred-toast strong { color: var(--text_normal); }
/* #ac_div (below) resets padding/margin to 0 !important on every descendant
   for the terminal chrome — needs #ac_div-scoped specificity here to win
   that reset back for this button's own spacing. */
#ac_div [data-role~="bbs-toast-close"] {
    margin-left: auto !important;
    background: transparent !important;
    border: none !important;
    color: var(--text_dim) !important;
    cursor: pointer;
    font-size: 13px !important;
    padding: 2px 4px !important;
    min-height: 0 !important;
    line-height: 1;
}
#ac_div [data-role~="bbs-toast-close"]:hover{ color: var(--text_normal) !important; }


/* ── Wall header nav buttons: sentence case, not the sitewide .lb-btn
   uppercase — these read as normal navigation, not HUD-style labels. ── */
#wall-posts-btn,
#wall-view-all-btn,
#wall-jump-btn {
    text-transform: none !important;
    letter-spacing: 0.02em !important;
    border-radius: 8px !important;
}

/* ── Wall — jump panel ───────────────────────────── */
#wall-sticky-header { position: relative; }
#wall-jump-btn {
    background: var(--bg_raised);
    border: 1px solid var(--border);
    color: var(--text_normal);
    padding: 5px 12px;
    border-radius: 8px;
    cursor: pointer;
    font-size: 12px;
}
#wall-jump-btn:hover { border-color: var(--accent); color: var(--accent); }
#wall-jump-panel {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    min-width: 260px;
    max-width: 90vw;
    background: var(--bg_raised);
    border: 1px solid var(--border);
    border-radius: var(--theme-radius-xs);
    z-index: 400;
    box-shadow: none;
    padding: 6px;
}
#wall-jump-search {
    width: 100%;
    box-sizing: border-box;
    margin-bottom: 6px;
    padding: 6px 8px;
    background: var(--bg_base);
    border: 1px solid var(--border);
    color: var(--text_normal);
    border-radius: var(--theme-radius-xs);
    font-size: 13px;
}
#wall-jump-list {
    list-style: none;
    margin: 0;
    padding: 0;
    max-height: 260px;
    overflow-y: auto;
}
#wall-jump-list li {
    padding: 7px 10px;
    cursor: pointer;
    border-radius: var(--theme-radius-xs);
    font-size: 13px;
    color: var(--text_normal);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
#wall-jump-list li:hover { background: var(--bg_hover); color: var(--accent); }

/* Wall — active tag pill */
.wall-tag-filter.active {
    background: var(--accent) !important;
    color: var(--text_on_ac, #fff) !important;
    border-color: var(--accent) !important;
}

/* ── Guestbook — form below entries ─────────────── */
#gb_entries { order: -1; }
#gb_form_section { margin-top: 32px; }
#gb_input_location { /* now editable */ }

/* ── Root home — active nav link ─────────────────── */
#div_left .a_nav_link.nav-active {
    color: var(--accent);
    font-weight: 600;
}
#div_left .a_nav_link.nav-active::before {
    content: '';
    display: inline-block;
    width: 3px;
    height: 0.85em;
    background: var(--accent);
    border-radius: var(--theme-radius-xs);
    margin-right: 5px;
    vertical-align: middle;
}

/* ═══════════════════════════════════════════════════════════════
   VISUAL POLISH — July 2026
   ═══════════════════════════════════════════════════════════════ */

/* ── Standalone subpage dark background ─────────────────────────
   html.in-iframe is added synchronously by JS before first paint,
   so when the page is inside the main shell iframe this rule never
   fires and the transparent-body / wallpaper system works as usual.
   When the page is accessed directly (login, signup) the html and
   body both get an opaque dark background instead of showing the
   browser's white canvas through the transparent chain. */
html.subpage:not(.in-iframe) {
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
}
html.subpage:not(.in-iframe) body {
    background: transparent !important;
    background-color: transparent !important;
}


/* ── Nav section labels — clearer typographic hierarchy ──────────
   Section labels (Explore / Messaging / Personal) should feel like
   dim uppercase category headers, not the same weight as items. */
.nav_group_label span:first-child {
    font-size: clamp(9px, 0.7rem, 10px) !important;
    font-weight: 700 !important;
    letter-spacing: 0.2em !important;
    text-transform: uppercase !important;
    color: var(--text_dim) !important;
    opacity: 0.75;
}

/* ── Login / Sign Up sidebar links — action button style ─────────
   Differentiate from destination nav links: Login = filled accent
   button, Sign Up = outlined. Remove the bullet dot indicator. */
#div_left .a_nav_link[href="/login"],
#div_left .a_nav_link[href="/signup/"] {
    height: auto !important;
    min-height: 34px !important;
    padding: 7px 14px !important;
    margin: 4px 10px !important;
    border-radius: var(--theme-radius-xs);
    justify-content: center !important;
    letter-spacing: 0.14em !important;
    font-size: clamp(9px, 0.78rem, 11px) !important;
    font-weight: 600 !important;
}
#div_left .a_nav_link[href="/login"] {
    background: var(--color_primary) !important;
    color: var(--bg_base) !important;
    border: 1px solid var(--color_primary) !important;
}
#div_left .a_nav_link[href="/signup/"] {
    background: transparent !important;
    color: var(--color_primary) !important;
    border: 1px solid color-mix(in srgb, var(--color_primary) 55%, transparent) !important;
}
#div_left .a_nav_link[href="/login"]:hover {
    opacity: 0.88;
    padding-left: 14px !important;
}
#div_left .a_nav_link[href="/signup/"]:hover {
    border-color: var(--color_primary) !important;
    background: color-mix(in srgb, var(--color_primary) 10%, transparent) !important;
    padding-left: 14px !important;
}
#div_left .a_nav_link[href="/login"]::before,
#div_left .a_nav_link[href="/signup/"]::before {
    display: none !important;
}

/* ═══════════════════════════════════════════════════════════════════
   UI POLISH v2 — Gradients, Depth, Shadows — July 2026
   ───────────────────────────────────────────────────────────────────
   All rules here sit at the END of the file so they win over earlier
   rules at equal CSS specificity without needing infinite !important
   escalation.  Scoping notes:
     • html.main-frame   = the outer shell (index.php, sidebar+iframe)
     • html.subpage      = every page loaded in the iframe or directly
     • html.in-iframe    = subpage inside the iframe (transparent mode)
     • html.subpage:not(.in-iframe) = standalone access (login, etc.)
   ═══════════════════════════════════════════════════════════════════ */

/* ── Main frame: sidebar gradient & shadow ──────────────────────────
   The sidebar gets a vertical gradient from a deeper dark tone at the
   top to the lighter raised bg at the bottom, plus a soft outer shadow
   that separates it visually from the wallpaper and the content area.
   Was color-mix(...,X%,transparent) at each stop (16-35% opacity) plus
   the inherited .lb-shell-sidebar backdrop-filter blur — the wall/content
   scrolling behind visibly showed through. Solid opaque stops + killing
   the backdrop-filter here keeps the same gradient shape/depth intent
   without the see-through wallpaper bleed. This rule already wins over
   the plain #div_left rule (ui_style.php ~3519) on specificity, so fixing
   it here — not there — is what actually takes effect on the main page. */
html.main-frame #div_left {
    background: var(--bg_raised) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border-right: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border)) !important;
    box-shadow: none !important;
}

/* ── Main frame: top bar — was a translucent gradient, now solid. ── */
html.main-frame #div_top {
    background: var(--bg_base) !important;
    box-shadow: none !important;
}

/* ── Main frame: top-bar left accent block — gradient stripe ───────
   The ::before block (the solid coloured elbow at the far left of
   #div_top) gets a vertical gradient through the three accent stops. */
html.main-frame #div_top::before {
    background: var(--accent_dk) !important;
}

/* ── Main frame: bottom bar — was a translucent gradient, now solid. ── */
html.main-frame #div_bottom {
    background: var(--bg_base) !important;
    border-top: 1px solid color-mix(in srgb, var(--accent) 45%, transparent) !important;
    box-shadow: none !important;
}

/* ── Main frame: iframe container — no border or shadow ────────────
   Keeping the iframe edge clean so the wallpaper and panel backgrounds
   flow seamlessly; border and drop-shadow removed per design decision. */
html.main-frame #iframe_right {
    border: none !important;
    box-shadow: none !important;
}

/* ── Main frame: active sidebar nav — gradient background blush ────
   Replaces the plain transparent background on active links with a
   subtle gradient accent blush + a glowing pill dot indicator. */
html.main-frame #div_left .a_nav_link.nav-active {
    background: color-mix(in srgb, var(--accent)  5%, transparent) !important;
    color: var(--accent_lit) !important;
}

html.main-frame #div_left .a_nav_link.nav-active::before {
    background: var(--accent);
    box-shadow: none;
    border-radius: var(--theme-radius-xs);
}

/* ── Standalone subpage: gradient page background ──────────────────
   When a subpage (login, signup, etc.) is visited directly rather than
   inside the iframe the body background should be a rich dark gradient
   matching the sci-fi palette, not plain --bg_base. */
html.subpage:not(.in-iframe) {
    background: transparent !important;
    min-height: 100dvh !important;
}

html.subpage:not(.in-iframe) body {
    background: transparent !important;
}

/* ── Standalone subpage: glass panels get depth back ───────────────
   The global rule at line ~198 clears shadows on html.subpage panels
   for the in-iframe transparent mode.  We restore a tasteful shadow
   here for the standalone case so login/signup panels feel premium. */
html.subpage:not(.in-iframe) .glass-panel,
html.subpage:not(.in-iframe) .ui-surface {
    background: color-mix(in srgb, var(--bg_dark)   12%, transparent) !important;
    border: 1px solid color-mix(in srgb, var(--accent) 25%, var(--border)) !important;
    box-shadow:
        none !important;
}

/* ── Standalone subpage: gradient heading text ─────────────────────
   h1 / h2 inside panels receive an accent gradient fill.
   -webkit-text-fill-color:transparent clips the gradient to the glyph
   shape; it is not governed by the * { color:...!important } rule. */
html.subpage:not(.in-iframe) .glass-panel h1,
html.subpage:not(.in-iframe) .glass-panel h2,
html.subpage:not(.in-iframe) .ui-surface h1,
html.subpage:not(.in-iframe) .ui-surface h2 {
    background: var(--accent);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    display: inline-block;
    width: auto;
}


/* ── Input focus glow ───────────────────────────────────────────────
   Override the earlier box-shadow:none; on focus the
   field glows with the accent colour so the user always knows which
   field is active.  Selector specificity > element+class combo above. */
input[type=text]:focus,
input[type=password]:focus,
input[type=email]:focus,
input[type=search]:focus,
input[type=url]:focus,
input[type=number]:focus,
input[type=date]:focus,
input[type=time]:focus,
textarea:focus,
select:focus {
    border: 1px solid var(--accent) !important;
    box-shadow:
        none !important;
    outline: none !important;
}

/* ── Gradient horizontal rules ─────────────────────────────────────
   <hr> elements become gradient lines that fade to transparent at each
   end, using the accent colour for an on-brand divider. */
hr {
    border: none !important;
    height: 1px !important;
    background: transparent !important;
    margin: 1rem 0 !important;
    opacity: 0.7;
}

/* ── Table enhancements ─────────────────────────────────────────────
   Tables across the site (admin, user lists, DB viewer, etc.) get
   alternating gradient rows and a gradient accent header bar. */
table {
    width: 100%;
    border-collapse: collapse !important;
}

thead tr {
    background: var(--bg_raised) !important;
}

tbody tr:nth-child(even) {
    background: color-mix(in srgb, var(--bg_raised) 40%, transparent) !important;
}

tbody tr:hover {
    background: color-mix(in srgb, var(--accent) 10%, var(--bg_raised)) !important;
    transition: background 0.12s ease;
}

td, th {
    padding: 0.5rem 0.75rem !important;
    text-align: left !important;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 30%, transparent) !important;
    vertical-align: middle !important;
}

th {
    color: var(--accent_lit) !important;
    font-weight: 700 !important;
    letter-spacing: 0.1em !important;
    text-transform: uppercase !important;
    font-size: 0.78rem !important;
}

/* ── Code and pre blocks — gradient left accent bar ─────────────────
   Monospace code blocks get a left-border accent stripe and a slightly
   darker background to distinguish them from prose text. */
pre, code {
    background: color-mix(in srgb, var(--bg_dark) 90%, transparent) !important;
    border-left: 3px solid var(--accent) !important;
    padding: 0.4rem 0.7rem !important;
    border-radius: 0 2px 2px 0 !important;
    font-size: 0.85rem !important;
    display: block !important;
    overflow-x: auto !important;
}

/* Inline code should stay inline */
p code, li code, td code, span code {
    display: inline !important;
    padding: 0.1rem 0.35rem !important;
}

/* Old duplicate/conflicting webkit-scrollbar block removed (2026-08-28
   macOS pass) — this one had drifted from the real macOS-overlay block
   at line ~3784 (opaque var(--bg_dark) track, no !important, 5px vs
   6px), a genuine two-source-of-truth bug: last-declared width (5px)
   was winning over the first block's 6px, while track/thumb colour
   still came from the first block's !important rules, since neither
   fully overrode the other. One source of truth again — see the real
   rule near line 3784. */

/* ── Traditional: subpage card layout ───────────────────────────────────
   On screens ≤767px that are NOT inside the main-frame iframe, content
   panels should stretch to the full screen width with no side margins,
   and cards stack in a single full-width column. */
@media (max-width: 767px) {
    html.subpage:not(.in-iframe) body {
        padding: 0 !important;
    }

    html.subpage:not(.in-iframe) .glass-panel,
    html.subpage:not(.in-iframe) .ui-surface {
        border-radius: var(--theme-radius-xs) !important;
        margin: 0 0 1px !important;
        border-left: none !important;
        border-right: none !important;
    }

    /* Full-width form fields on small screens */
    html.subpage:not(.in-iframe) input[type=text],
    html.subpage:not(.in-iframe) input[type=password],
    html.subpage:not(.in-iframe) input[type=email],
    html.subpage:not(.in-iframe) select,
    html.subpage:not(.in-iframe) textarea {
        width: 100% !important;
        min-width: 0 !important;
        box-sizing: border-box !important;
    }

    /* Stack two-column layouts into single columns on traditional */
    html.subpage:not(.in-iframe) .lb-row,
    html.subpage:not(.in-iframe) .row,
    html.subpage:not(.in-iframe) [class*="col-"] {
        flex-direction: column !important;
        width: 100% !important;
    }

    /* Admin traditional: tab sidebar moves off-screen, toggled by html.admin-nav-open */
    #admin_tab_bar {
        transform: translateX(-100%);
        transition: transform 0.25s cubic-bezier(0.22, 1, 0.36, 1);
        position: fixed !important;
        top: 0 !important;
        left: 0 !important;
        height: 100dvh !important;
        width: min(88vw, 300px) !important;
        z-index: 300 !important;
        overflow-y: auto !important;
        box-shadow: none !important;
    }

    html.admin-nav-open #admin_tab_bar {
        transform: translateX(0);
    }

    /* Admin: content area full-width on traditional */
    #admin_tab_content {
        margin-left: 0 !important;
        width: 100% !important;
    }
}

/* ── Traditional nav bar: gradient background ───────────────────────────
   Upgrade the plain bg_raised bar to a gradient + top accent line. */
@media (max-width: 767px) {
    html.main-frame #site-traditional-nav {
        background: color-mix(in srgb, var(--bg_dark) 95%, transparent) !important;
        border-top: 1px solid color-mix(in srgb, var(--accent) 40%, transparent) !important;
        box-shadow: none !important;
    }
}

/* ── Tablet: content panels — moderate padding ──────────────────────
   On mid-range screens (768–1023px) panels get a bit more breathing
   room without the ultra-compact traditional layout. */
@media (min-width: 768px) and (max-width: 1023px) {
    .glass-panel,
    .ui-surface {
        padding: 20px !important;
    }

    html.main-frame #iframe_right {
        left: 12px !important;
        width: calc(100% - 24px) !important;
    }
}



/* ═══════════════════════════════════════════════════════════════════
   PER-PAGE ENHANCEMENTS — Admin, Wall, Guestbook, Chat/DM, FM, BBS
   ───────────────────────────────────────────────────────────────────
   Each section is scoped by the page's unique ID or class so that
   these rules only fire on the relevant page.
   ═══════════════════════════════════════════════════════════════════ */

/* ── ADMIN: tab bar — gradient sidebar background ──────────────────
   Replaces the plain var(--bg_raised) with a vertical gradient so the
   sidebar reads as deeper than the content panels behind it. */
#admin_tab_bar {
    background: #000 !important;
    border-right: 1px solid color-mix(in srgb, var(--accent) 20%, transparent) !important;
    box-shadow: none !important;
}

/* ── ADMIN: active tab button — gradient blush ─────────────────────
   Active tab gets a subtle left-to-right gradient accent blush so it
   pops without being garish. */
.admin-tab-btn.active, [data-role~="admin-tab-btn"].active{
    background: color-mix(in srgb, var(--accent)  6%, transparent) !important;
    color: var(--accent_lit) !important;
}

.admin-tab-btn.active::before, [data-role~="admin-tab-btn"].active::before{
    background: var(--accent) !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius-xs) !important;
    width: 5px !important;
    height: 14px !important;
    margin-right: 10px !important;
}

/* ── ADMIN: tab hover — gradient blush ─────────────────────────── */
.admin-tab-btn:hover, [data-role~="admin-tab-btn"]:hover{
    background: color-mix(in srgb, var(--accent) 8%, transparent) !important;
}


/* ── Page title — gradient text ────────────────────────────────────
   Every LBKit page-header title (formerly admin-only) receives the
   accent gradient treatment for a premium feel. */
.lb-page-title {
    background: var(--accent);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    display: inline-block;
    width: auto;
}

/* ── Page header accent stripe ─────────────────────────────────────
   Every LBKit page header (formerly admin-only) gets a subtle
   left-border accent stripe and a bottom divider line to separate
   heading from body. */
.lb-page-header {
    border-left: 3px solid var(--accent) !important;
    border-bottom: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border)) !important;
    padding-bottom: 12px !important;
    margin-bottom: 16px !important;
    background: transparent !important;
}

/* ── WALL: wall-entry cards — gradient depth ─────────────────────
   Each wall post gets a subtle directional gradient and a thin accent
   left-border that glows on hover. This is the rule that actually wins
   the cascade for .wall-entry's background/box-shadow (confirmed via
   CSS.getMatchedStylesForNode — the shared panel-system rule and the
   layout rule further up in this file both lose to this one, later in
   source order) — real glass tier 1 treatment now (2026-08-19), was
   15%-opacity flat tint + box-shadow:none. */
.wall-entry {
    background: color-mix(in srgb, var(--bg_surface) 88%, transparent) !important;
    backdrop-filter: var(--glass-blur-1) !important;
    -webkit-backdrop-filter: var(--glass-blur-1) !important;
    border-left: 3px solid color-mix(in srgb, var(--accent) 30%, transparent) !important;
    box-shadow:
        var(--elevation-2) !important;
    transition:
        border-left-color 0.2s ease,
        box-shadow        0.2s ease,
        background        0.2s ease !important;
}

.wall-entry:hover {
    border-left-color: var(--accent) !important;
    background: color-mix(in srgb, var(--bg_surface) 82%, transparent) !important;
    box-shadow:
        var(--elevation-3) !important;
}

/* ── GUESTBOOK: entries — elevated card with accent top border ─────
   gb-entry cards get a top gradient stripe (like a card header) and
   a mild drop shadow. Same glass tier 1 treatment as wall-entry above
   (2026-08-19), was 15%-opacity flat tint + box-shadow:none. */
.gb-entry {
    background: color-mix(in srgb, var(--bg_surface) 88%, transparent) !important;
    backdrop-filter: var(--glass-blur-1) !important;
    -webkit-backdrop-filter: var(--glass-blur-1) !important;
    border-top: 2px solid color-mix(in srgb, var(--accent) 40%, transparent) !important;
    border-radius: var(--theme-radius-xs) !important;
    box-shadow:
        var(--elevation-2) !important;
}

.gb-entry:hover {
    border-top-color: var(--accent) !important;
    box-shadow:
        var(--elevation-3) !important;
    background: color-mix(in srgb, var(--bg_surface) 82%, transparent) !important;
}

/* gb-entry avatar: accent gradient background */
.gb-entry-avatar {
    background: color-mix(in srgb, var(--accent) 50%, var(--bg_dark)) !important;
    color: var(--text_on_ac) !important;
    box-shadow: none !important;
}

/* ── CHAT / DM: message bubbles — gradient fill ────────────────────
   Own messages get a richer gradient fill using the accent colour.
   Other users' messages get a raised-bg gradient. */
.chat-msg-content {
    background: color-mix(in srgb, var(--bg_base)   55%, transparent) !important;
    border: 1px solid color-mix(in srgb, var(--border) 40%, transparent) !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius-xs) !important;
}

.chat-msg.own .chat-msg-content {
    background: color-mix(in srgb, var(--accent_dk) 18%, var(--bg_dark)) !important;
    border-color: color-mix(in srgb, var(--accent) 35%, transparent) !important;
    box-shadow:
        none !important;
}

/* ── FM: file tree sidebar — gradient ──────────────────────────────
   The file manager tree panel gets the same gradient sidebar treatment
   as the admin tab bar to unify the sidebar aesthetic across the site. */
#fm_tree {
    background: color-mix(in srgb, var(--bg_raised) 85%, var(--bg_base)) !important;
    border-right: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border)) !important;
    box-shadow: none !important;
}

/* ── DM: conversation list sidebar — gradient ──────────────────────
   The DM conversation panel sidebar gets the unified gradient look. */
#dm_convos_panel,
#dm_convo_list {
    background: color-mix(in srgb, var(--bg_raised) 85%, var(--bg_base)) !important;
    border-right: 1px solid color-mix(in srgb, var(--accent) 18%, var(--border)) !important;
    box-shadow: none !important;
}

/* ── MSGBASE: message list items — hover gradient ──────────────────
   Message list items in the BBS-style message base get a hover gradient
   to make the selected item visually distinct. */
.msg-list-item:hover,
.msgbase-item:hover,
[class*="msg-item"]:hover {
    background: color-mix(in srgb, var(--accent)  5%, transparent) !important;
    border-left: 3px solid var(--accent) !important;
}

.msg-list-item.active,
.msgbase-item.active,
[class*="msg-item"].active {
    background: color-mix(in srgb, var(--accent)  8%, var(--bg_base)) !important;
    border-left: 3px solid var(--accent) !important;
}

#tc_div_terminal_div {
    border: none !important;
    box-shadow: none !important;
    border-radius: var(--theme-radius-xs) !important;
}

/* ── STATUS INDICATORS: online dot gradient glow ──────────────────
   Presence / online indicators (.status-dot[data-status="online"])
   get a pulsing gradient glow to make them feel alive. */
.status-dot[data-status="online"],
[class*="status-online"],
[class*="presence-online"] {
    background: var(--info) !important;
    box-shadow: none !important;
}

/* ── AVATAR component — gradient background for initial fallback ───
   When no avatar image loads, the fallback uses accent gradient fill
   rather than a flat colour. */
.avatar-initial,
.avatar-placeholder,
[class*="avatar-"] > span:only-child {
    background: var(--accent_dk) !important;
    color: var(--text_on_ac) !important;
    box-shadow: none !important;
}

/* ── DIALOG / MODAL: deeper backdrop ───────────────────────────────
   The panel itself (.lb-dlg-box) stays the shared flat solid look
   declared once, near "Flat dialog box" above (this comment used to
   say "liquid-glass" — stale since that panel was already converted to
   a flat solid background in an earlier pass; fixed here rather than
   left contradicting the live rule). Only the backdrop gets a
   deliberate enhancement here. */
.lb-dlg-ov {
    background: rgba(0, 0, 0, 0.90) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}

/* ── FORM LABELS — subtle uppercase accent ────────────────────────
   Form labels get accent colour and a bit of letter spacing so they
   read as field captions rather than body text. */
label {
    color: var(--text_dim) !important;
    font-size: 0.82rem !important;
    letter-spacing: 0.12em !important;
    text-transform: uppercase !important;
    font-weight: 600 !important;
    display: block;
    margin-bottom: 4px;
}

/* Inline / checkbox labels should not be uppercased */
label:has(input[type=checkbox]),
label:has(input[type=radio]) {
    text-transform: none !important;
    letter-spacing: normal !important;
    font-size: 0.9rem !important;
    display: inline-flex !important;
    align-items: center !important;
    gap: 6px !important;
}

/* ── NOTIFICATION / FLASH messages — gradient pill ────────────────
   Flash message elements (.um-flash, .lb-flash, .msg-ok, .msg-error)
   use the palette semantic colours with a gradient left accent strip. */
.um-flash,
.lb-flash,
.msg-ok,
[class*="flash-ok"],
[class*="flash-success"] {
    background: color-mix(in srgb, var(--bg_dark) 90%, transparent) !important;
    border-left: 3px solid var(--info) !important;
    box-shadow: none !important;
    padding: 10px 16px !important;
    border-radius: 0 2px 2px 0 !important;
}

.msg-error,
.lb-flash-error,
[class*="flash-error"],
[class*="flash-danger"] {
    background: color-mix(in srgb, var(--bg_dark) 90%, transparent) !important;
    border-left: 3px solid var(--error) !important;
    box-shadow: none !important;
    padding: 10px 16px !important;
    border-radius: 0 2px 2px 0 !important;
}

/* ── ADMIN TRADITIONAL: full-width content panels on small screens ─────
   On traditional, admin panels should not have left/right margins from the
   sidebar that is now off-canvas. */
@media (max-width: 767px) {
    .admin-tab-panel {
        padding: 12px !important;
    }

    .lb-page-header {
        padding: 8px 12px !important;
        margin-bottom: 12px !important;
    }

    .admin-tab-btn {
        padding-left: 12px !important;
        min-height: 44px !important;
        font-size: 0.85rem !important;
    }
}

/* ── CHAT / DM TRADITIONAL: full-screen layout fixes ──────────────────
   On small screens chat/DM bubbles should be wider (less whitespace)
   and the compose box should be fully accessible above the traditional nav. */
@media (max-width: 767px) {
    .chat-msg {
        max-width: 88% !important;
    }

    .chat-msg-content {
        padding: 8px 12px !important;
    }

    #chat_input_wrap,
    #dm_compose,
    [id*="compose"],
    [id*="chat_input"] {
        padding-bottom: calc(56px + env(safe-area-inset-bottom) + 4px) !important;
    }
}

/* ── GUESTBOOK TRADITIONAL ─────────────────────────────────────────────
   On small screens, guestbook entry avatars are smaller and meta wraps. */
@media (max-width: 480px) {
    .gb-entry {
        padding: 14px 12px !important;
        gap: 10px !important;
    }

    .gb-entry-avatar {
        width: 32px !important;
        height: 32px !important;
        font-size: 1rem !important;
    }
}

/* ── FM TRADITIONAL: file tree drawer ─────────────────────────────────
   On traditional the FM file tree should be an off-canvas drawer that
   slides in from the left (existing .open class toggle handles JS). */
@media (max-width: 767px) {
    #fm_tree {
        position: fixed !important;
        top: 0 !important;
        left: -100% !important;
        height: 100dvh !important;
        width: min(88vw, 280px) !important;
        z-index: 500 !important;
        transition: left 0.25s cubic-bezier(0.22, 1, 0.36, 1) !important;
    }

    #fm_tree.open {
        left: 0 !important;
        box-shadow: none !important;
    }

    #fm_main {
        margin-left: 0 !important;
        width: 100% !important;
    }
}

/* ── WALL TRADITIONAL: single-column layout ───────────────────────────
   Wall entries stack full-width on small screens. */
@media (max-width: 767px) {
    .wall-entry {
        border-left-width: 2px !important;
        margin: 0 0 2px !important;
        border-radius: var(--theme-radius-xs) !important;
    }
}

/* ══════════════════════════════════════════════════════════════════
   JOURNAL (/log/) — date dividers, mood picker, char counter, edit
   ══════════════════════════════════════════════════════════════════ */

/* ── Log header actions row ─────────────────────────────────────── */
#log_header_actions {
    display: flex;
    align-items: center;
    gap: 8px;
}

#log_search {
    flex: 1;
    min-width: 140px;
    padding: 6px 10px;
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    background: var(--bg_raised);
    color: var(--text);
    font-size: 0.9rem;
}

#log_search:focus {
    outline: none;
    border-color: var(--accent);
}

/* ── Mood picker row (compose form) ─────────────────────────────── */
#log_mood_row {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-wrap: wrap;
    margin: 6px 0 4px;
}

.log-mood-btn {
    background: none;
    border: 1px solid transparent;
    border-radius: var(--theme-radius-xs);
    padding: 3px 6px;
    font-size: 1.1rem;
    cursor: pointer;
    line-height: 1;
    transition: border-color 0.15s, background 0.15s;
    min-height: unset;
}

.log-mood-btn:hover, [data-role~="log-mood-btn"]:hover{
    background: var(--bg_raised);
    border-color: var(--color_border);
}

.log-mood-btn.selected, [data-role~="log-mood-btn"].selected{
    background: color-mix(in srgb, var(--accent) 18%, transparent);
    border-color: var(--accent);
}

#log_mood_clear {
    background: none;
    border: none;
    color: var(--text_dim);
    cursor: pointer;
    font-size: 0.75rem;
    padding: 3px 6px;
    min-height: unset;
}

#log_mood_clear:hover { color: var(--text); }

.log-mood-label {
    font-size: 0.75rem;
    color: var(--text_dim);
    margin-right: 2px;
}

/* ── Character counter ───────────────────────────────────────────── */
#log_char_counter {
    font-size: 0.75rem;
    color: var(--text_dim);
    text-align: right;
    margin: 2px 0 6px;
}

#log_char_counter.log-char-counter-warn {
    color: #e0743a;
    font-weight: 600;
}

/* ── Log date dividers ───────────────────────────────────────────── */
.log-date-divider {
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--text_dim);
    font-size: 0.72rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    margin: 18px 0 6px;
    user-select: none;
}

.log-date-divider::before,
.log-date-divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--color_border);
}

/* ── Entry mood badge ────────────────────────────────────────────── */
.log-entry-mood {
    display: inline-block;
    font-size: 1.05rem;
    margin-right: 4px;
    vertical-align: middle;
    line-height: 1;
}

/* ── Entry actions row (edit / delete buttons on hover) ─────────── */
.log-entry-actions {
    display: flex;
    gap: 6px;
    margin-top: 6px;
    opacity: 0;
    transition: opacity 0.15s;
}

.log-entry:hover .log-entry-actions,
.log-entry:focus-within .log-entry-actions {
    opacity: 1;
}

.log-entry-edit {
    background: none;
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    color: var(--text_dim);
    cursor: pointer;
    font-size: 0.78rem;
    padding: 2px 8px;
    min-height: unset;
    transition: color 0.12s, border-color 0.12s;
}

.log-entry-edit:hover, [data-role~="log-entry-edit"]:hover{
    color: var(--accent);
    border-color: var(--accent);
}

/* ── Inline edit wrapper ─────────────────────────────────────────── */
.log-edit-wrapper {
    margin-top: 8px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.log-edit-textarea {
    width: 100%;
    min-height: 80px;
    padding: 8px 10px;
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    background: var(--bg_raised);
    color: var(--text);
    font-size: 0.95rem;
    resize: vertical;
    box-sizing: border-box;
}

.log-edit-textarea:focus {
    outline: none;
    border-color: var(--accent);
}

.log-edit-mood-row {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-wrap: wrap;
}

.log-edit-actions {
    display: flex;
    gap: 8px;
}

/* ══════════════════════════════════════════════════════════════════
   BBS — intro card, status dot, toolbar
   ══════════════════════════════════════════════════════════════════ */

/* ── Intro card ──────────────────────────────────────────────────── */
#bbs_intro_card {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.88);
    z-index: 200;
}

#bbs_intro_inner {
    max-width: 480px;
    width: 90%;
    background: var(--bg_raised);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    padding: 28px 28px 24px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

#bbs_intro_icon {
    font-size: 1.5rem;
    letter-spacing: 0.1em;
    color: var(--accent);
    font-family: monospace;
}

#bbs_intro_inner h2 {
    margin: 0;
    font-size: 1.1rem;
    color: var(--text);
}

#bbs_intro_inner p {
    margin: 0;
    font-size: 0.88rem;
    color: var(--text_dim);
    line-height: 1.5;
}

#bbs_intro_keys {
    margin: 0;
    padding: 0 0 0 0;
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

#bbs_intro_keys li {
    font-size: 0.83rem;
    color: var(--text_dim);
}

#bbs_intro_keys kbd {
    display: inline-block;
    padding: 1px 5px;
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    background: var(--bg_base);
    font-family: monospace;
    font-size: 0.8rem;
    color: var(--text);
}

#bbs_traditional_warn {
    font-size: 0.82rem;
    color: #e0a03a;
    border: 1px solid rgba(224, 160, 58, 0.3);
    border-radius: var(--theme-radius-xs);
    padding: 6px 10px;
    background: rgba(224, 160, 58, 0.06);
}

/* ── Status dot ──────────────────────────────────────────────────── */
/* #ac_div (above) resets padding/margin to 0 !important on every descendant
   for the terminal chrome — needs #ac_div-scoped specificity + !important
   here to win that reset back for this dot's own spacing. */
#ac_div .bbs-status-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: var(--theme-radius-xs);
    margin-right: 6px !important;
    background: var(--text_dim);
    flex-shrink: 0;
}
.bbs-status-connecting { background: #e0a03a; }
.bbs-status-connected  { background: #4caf7d; }
.bbs-status-error      { background: #d94f4f; }
.bbs-status-busy       { background: #888; }

/* ── BBS toolbar ─────────────────────────────────────────────────── */
#bbs_toolbar {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-left: auto;
}

/* #ac_div (above) resets padding/margin to 0 !important on every descendant
   for the terminal chrome — needs #ac_div-scoped specificity here to win
   that reset back for this button's own spacing. */
#ac_div [data-role~="bbs-tool-btn"] {
    background: none !important;
    border: 1px solid var(--color_border) !important;
    border-radius: var(--theme-radius-xs) !important;
    color: var(--text_dim) !important;
    cursor: pointer;
    font-size: 0.8rem !important;
    padding: 3px 10px !important;
    min-height: unset !important;
    transition: color 0.12s, border-color 0.12s;
}

#ac_div [data-role~="bbs-tool-btn"]:hover{
    color: var(--text) !important;
    border-color: var(--accent) !important;
}

/* #ac_div (above) resets padding/margin to 0 !important on every descendant
   for the terminal chrome — needs #ac_div-scoped specificity + !important
   here to win that reset back for this link's own spacing. */
#ac_div #bbs_back_link {
    font-size: 0.8rem;
    color: var(--text_dim);
    text-decoration: none;
    padding: 3px 8px !important;
    border-radius: var(--theme-radius-xs);
    transition: color 0.12s;
}

#ac_div #bbs_back_link:hover { color: var(--accent); }

/* ══════════════════════════════════════════════════════════════════
   ADMIN — command palette, recent strip, pinned tabs, overview
   ══════════════════════════════════════════════════════════════════ */

/* ── Command palette backdrop ────────────────────────────────────── */
#admin_palette_backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.6);
    z-index: 1100;
}

/* ── Command palette container ───────────────────────────────────── */
#admin_palette {
    position: fixed;
    top: 80px;
    left: 50%;
    transform: translateX(-50%);
    width: min(540px, 92vw);
    background: var(--bg_raised);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    z-index: 1200;
    box-shadow: none;
    overflow: hidden;
}

#admin_palette_input {
    width: 100%;
    padding: 12px 16px;
    border: none;
    border-bottom: 1px solid var(--color_border);
    background: transparent;
    color: var(--text);
    font-size: 1rem;
    box-sizing: border-box;
}

#admin_palette_input:focus { outline: none; }

#admin_palette_results {
    max-height: 300px;
    overflow-y: auto;
}

.admin-palette-row {
    display: flex;
    align-items: center;
    padding: 10px 16px;
    cursor: pointer;
    font-size: 0.9rem;
    color: var(--text);
    gap: 10px;
    transition: background 0.1s;
}

.admin-palette-row:hover,
.admin-palette-row.selected {
    background: color-mix(in srgb, var(--accent) 14%, transparent);
    color: var(--accent);
}

.admin-palette-empty {
    padding: 14px 16px;
    color: var(--text_dim);
    font-size: 0.85rem;
}

/* ── Pinned tab indicator ────────────────────────────────────────── */
.admin-tab-pinned::after {
    content: ' ★';
    font-size: 0.65rem;
    color: var(--accent);
    vertical-align: super;
}


/* ── Overview tab ────────────────────────────────────────────────── */
#admin_tab_overview { padding: 12px 0; }

#admin_overview_cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 12px;
    margin-bottom: 16px;
}

.admin-ov-card {
    background: var(--bg_raised);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    padding: 16px 16px 14px;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    gap: 6px;
    transition: border-color 0.15s, background 0.15s;
}

.admin-ov-card:hover {
    border-color: var(--accent);
    background: color-mix(in srgb, var(--accent) 6%, var(--bg_raised));
}

.admin-ov-icon {
    font-size: 1.4rem;
    line-height: 1;
}

.admin-ov-label {
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--text_dim);
}

.admin-ov-value {
    font-size: 1.5rem;
    font-weight: 600;
    color: var(--text);
    line-height: 1;
}

.admin-ov-hint {
    font-size: 0.75rem;
    color: var(--text_dim);
}

/* ── Overview button in sidebar ──────────────────────────────────── */
.admin-overview-btn {
    border-bottom: 1px solid var(--color_border);
    margin-bottom: 4px;
    padding-bottom: 8px;
}

/* ══════════════════════════════════════════════════════════════════
   ARCADE (/game/) — featured hero, platform pills, recent strip,
   controls overlay, fullscreen toggle
   ══════════════════════════════════════════════════════════════════ */

/* ── Featured game of the day hero ──────────────────────────────── */
#arcade_featured {
    margin-bottom: 10px;
}

.arcade-featured-inner {
    display: flex;
    align-items: center;
    gap: 12px;
    background: color-mix(in srgb, var(--accent) 10%, var(--bg_raised));
    border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
    border-radius: var(--theme-radius-xs);
    padding: 12px 16px;
    flex-wrap: wrap;
}

.arcade-featured-label {
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--accent);
    white-space: nowrap;
    flex-shrink: 0;
}

.arcade-featured-title {
    flex: 1;
    font-size: 1rem;
    font-weight: 600;
    color: var(--text);
    min-width: 120px;
}

.arcade-featured-play {
    flex-shrink: 0;
    font-size: 0.85rem;
    padding: 6px 14px;
}

/* ── Recently played strip ───────────────────────────────────────── */
#arcade_recent_strip {
    margin-bottom: 8px;
}

.arcade-recent-label {
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--text_dim);
    margin-bottom: 5px;
}

.arcade-recent-list {
    display: flex;
    gap: 6px;
    overflow-x: auto;
    padding-bottom: 4px;
}

.arcade-recent-pill {
    background: var(--bg_raised);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    color: var(--text_dim);
    cursor: pointer;
    font-size: 0.78rem;
    padding: 4px 12px;
    white-space: nowrap;
    flex-shrink: 0;
    min-height: unset;
    transition: color 0.12s, border-color 0.12s;
}

.arcade-recent-pill:hover {
    color: var(--accent);
    border-color: var(--accent);
}

/* ── Platform filter pills ───────────────────────────────────────── */
#arcade_platform_bar {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
    margin-bottom: 10px;
}

.arcade-platform-pill {
    background: var(--bg_raised);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    color: var(--text_dim);
    cursor: pointer;
    font-size: 0.8rem;
    padding: 4px 14px;
    min-height: unset;
    transition: color 0.12s, border-color 0.12s, background 0.12s;
}

.arcade-platform-pill:hover {
    border-color: var(--accent);
    color: var(--accent);
}

.arcade-platform-pill.active {
    background: color-mix(in srgb, var(--accent) 15%, transparent);
    border-color: var(--accent);
    color: var(--accent);
    font-weight: 600;
}

/* ── Fullscreen on launch toggle ─────────────────────────────────── */
#arcade_fs_toggle_wrap {
    margin-bottom: 8px;
}

.arcade-fs-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.82rem;
    color: var(--text_dim);
    cursor: pointer;
    user-select: none;
}

.arcade-fs-label input { cursor: pointer; }

/* ── Controls cheat-sheet overlay ───────────────────────────────── */
#arcade_controls_overlay {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 800;
    pointer-events: none;
    transition: opacity 0.6s;
}

.arcade-controls-inner {
    background: rgba(0, 0, 0, 0.88);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    padding: 18px 22px;
    min-width: 220px;
}

.arcade-controls-title {
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    /* Background (.arcade-controls-inner) is a fixed rgba(0,0,0,0.88)
       regardless of day/night mode, so text here needs a fixed light
       colour, not a theme var — plus !important, since the sitewide
       `* { color: ... !important }` reset wins over any non-important
       color declaration anyway. */
    color: #fff !important;
    margin-bottom: 10px;
    font-weight: 600;
}

.arcade-controls-grid {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 5px 14px;
    font-size: 0.82rem;
}

.arcade-controls-grid span:nth-child(odd) {
    font-family: monospace;
    /* Was var(--text_primary) — that token isn't defined anywhere in
       the palette, so this declaration was already inert (falls through
       to inherited/initial), separately from the fixed-dark-bg issue.
       (The other ~10 uses of --text_primary elsewhere in this file were
       fixed to var(--text) instead, since their backgrounds are
       theme-reactive; this one specifically needs a fixed colour.) */
    color: #fff !important;
    white-space: nowrap;
}

.arcade-controls-grid span:nth-child(even) {
    color: rgba(255,255,255,0.65) !important;
}

/* ════════════════════════════════════════════════════════════════
   Page Help Button + Modal
   ════════════════════════════════════════════════════════════════ */

/* ── Help "?" button injected into sub-page headers ─────────── */
#lb-help-btn {
    background: color-mix(in srgb, var(--accent) 12%, transparent) !important;
    border: 1px solid color-mix(in srgb, var(--accent) 55%, transparent) !important;
    border-radius: var(--theme-radius-xs) !important;
    color: var(--accent) !important;
    font-size: 0.95rem;
    font-weight: 700;
    font-family: inherit;
    cursor: pointer;
    width: 32px;
    height: 32px !important;
    max-height: 32px !important;
    min-height: 0 !important;
    display: flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    padding: 0;
    flex-shrink: 0;
    box-shadow: none !important;
    transition: background 0.15s, border-color 0.15s, box-shadow 0.18s;
    opacity: 1;
    letter-spacing: 0;
    text-transform: none;
}
#lb-help-btn:hover {
    background: color-mix(in srgb, var(--accent) 22%, transparent) !important;
    border-color: var(--accent) !important;
    box-shadow: none !important;
}
#lb-help-btn:disabled { opacity: 0.30; cursor: default; }

/* ── Help modal overlay ──────────────────────────────────────── */
.lb-help-ov {
    background: rgba(0, 0, 0, 0.92) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}

.lb-help-box {
    max-width: 540px !important;
    width: min(540px, calc(100vw - 32px)) !important;
    max-height: 80dvh;
    overflow-y: auto;
    display: flex !important;
    flex-direction: column;
    gap: 0;
    text-align: left !important;
}

.lb-help-hdr {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 14px;
    flex-shrink: 0;
}

.lb-help-title {
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--accent);
    letter-spacing: 0.04em;
    margin: 0;
}

.lb-help-close {
    background: transparent;
    border: none !important;
    color: var(--text_dim);
    font-size: 1rem;
    cursor: pointer;
    padding: 4px 8px;
    border-radius: var(--theme-radius-xs) !important;
    min-height: 0 !important;
    height: 28px !important;
    display: flex;
    align-items: center;
    line-height: 1;
    transition: color 0.15s;
    flex-shrink: 0;
    box-shadow: none !important;
}
.lb-help-close:hover { color: var(--text_normal); box-shadow: none !important; }

.lb-help-desc {
    font-size: 0.92rem;
    line-height: 1.6;
    color: var(--text_normal);
    margin: 0 0 18px 0;
}

.lb-help-steps {
    margin: 0;
    padding: 0 0 0 22px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    list-style: decimal;
}

.lb-help-steps li {
    font-size: 0.88rem;
    line-height: 1.55;
    color: var(--text_dim);
}

.lb-help-steps li::marker {
    color: var(--accent);
    font-weight: 700;
}



/* ── Sub-page + admin header left-gradient: removed ─────────────────────── */
html.subpage #log_header::before,
html.subpage #srch_header::before,
html.subpage #gb_header::before,
html.subpage #chat_header::before,
html.subpage #wall-page-header::before,
html.subpage #um_header::before,
html.subpage #audit_header::before,
html.subpage #int_header::before,
html.subpage #erl_header::before,
html.subpage #utl_header::before,
html.subpage #fsl_header::before,
html.subpage #svc_header::before,
html.subpage .lb-page-header::before,
html:has(#dm_msgs) #div_top::before,
html:has(#div_rom_list_toolbox) #div_top::before,
html.subpage .mb-header::before,
html.subpage #media_toolbar::before,
html.subpage #fs_toolbar::before,
html.subpage #su_header::before,
#admin_topbar::before { display: none !important; }

/* ══════════════════════════════════════════════════════════════════════════
   DAY / NIGHT BACKGROUND
   php-computed --doc-bg (#fff 06:00-19:59, #000 20:00-05:59) is updated
   client-side by inject_day_night_mode() at each 06:00 / 20:00 boundary.
   These rules override ALL earlier background:#000 html/body rules by being
   placed last — same specificity, later source order wins for !important.
   ══════════════════════════════════════════════════════════════════════════ */
html.main-frame              { background: var(--doc-bg) !important; background-color: var(--doc-bg) !important; background-image: none !important; }
html.main-frame body         { background: var(--doc-bg) !important; background-color: var(--doc-bg) !important; background-image: none !important; }
html:not(.subpage):not(.in-iframe) body { background: var(--doc-bg) !important; }
html.subpage                 { background: transparent !important; }
html.subpage body            { background: transparent !important; }
html.in-iframe               { background: transparent !important; }
html.in-iframe body          { background: transparent !important; overflow-x: hidden !important; }
html:has(#admin_wrap)        { background: transparent !important; }
html:has(#admin_wrap) body   { background: transparent !important; }
html:has(#chat_app)          { background: transparent !important; }
html:has(#chat_app) body     { background: transparent !important; }
html:has(#dm_msgs)           { background: transparent !important; }
html:has(#dm_msgs) body      { background: transparent !important; }
html:has(#ac_div)            { background: transparent !important; }
html:has(#ac_div) body       { background: transparent !important; }
html:has(#mb_app)            { background: transparent !important; }
html:has(#mb_app) body       { background: transparent !important; }
/* DAY_NIGHT_BLOCK_END */

/* ══════════════════════════════════════════════════════════════════════════
   CHAT APP SHELL — header stays in the flex flow (not fixed).
   Overrides html.subpage #chat_header { position: fixed } placed earlier.
   The #chat_app flex container already handles header placement; fixing it
   out of the flow causes body padding-top to clip the input dock at the
   bottom of the 100dvh container.
   ══════════════════════════════════════════════════════════════════════════ */
html:has(#chat_app) #chat_header {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    z-index: 1 !important;
    border-bottom: 1px solid color-mix(in srgb, var(--color_primary) 18%, transparent) !important;
}
html:has(#chat_app):has(#chat_header) body {
    padding-top: 0 !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   IFRAME FIT — ensure sub-pages never overflow the main iframe horizontally.
   ══════════════════════════════════════════════════════════════════════════ */
html.in-iframe body {
    overflow-x: hidden !important;
    max-width: 100vw !important;
    box-sizing: border-box !important;
}
html.in-iframe img,
html.in-iframe video,
html.in-iframe canvas {
    max-width: 100% !important;
}


/* Formerly forced background:transparent on every input/select/textarea
   site-wide, deliberately placed last + over-specific (eight :not() clauses)
   so nothing could override it — including .lb-input's own --theme-input-bg
   tint, which silently never rendered anywhere as a result. Removed: the
   shared base rule already gives every input/select/textarea a consistent
   background (--theme-input-bg), and pages that genuinely want a specific
   field transparent (e.g. #wall-search, embedded in a blurred header bar)
   already carry their own !important override for that one field. */


/* ════════════════════════════════════════════════════════════════════
   DESKTOP MODE — WINDOW MANAGER (large screens, >=768px)
   ────────────────────────────────────────────────────────────────────
   Built by LBKit.window()/the taskbar+tray setup in ui_toolkit.pjs,
   entirely inside a lazily-created #lb-desktop-root — no markup changes
   to leobergamo/index.php. Only active when html carries .desktop-mode
   (toggled by index-early-bind.js from window.matchMedia('(max-width:
   767px)'), the site's existing breakpoint). On traditional none of this
   renders and the legacy single-#iframe_right layout is untouched.
   ════════════════════════════════════════════════════════════════════ */

#lb-desktop-root {
    display: none;
    position: fixed;
    inset: 0;
    /* Deliberately NOT a `perspective` property host, even though the 3D
       depth-of-field effect (see _lb_apply_depth_of_field() in
       ui_toolkit.pjs) conceptually "belongs" here. Tried that first
       (2026-08-11) and it broke #lb-taskbar: `perspective` other than
       none makes an element a new containing block for its
       position:fixed DESCENDANTS (same rule `transform` follows), and
       #lb-taskbar — a direct child of this element — is itself
       position:fixed;bottom:0. Once this element hosted `perspective`,
       that `bottom:0` started resolving against THIS element's own box
       (already deliberately inset from the true bottom by
       --lb-taskbar-h, see html.desktop-mode #lb-desktop-root below)
       instead of the true viewport — pushing the whole taskbar up by
       its own height and leaving a matching black gap below it. Real,
       found-via-screenshot bug, not theoretical. Fix: the depth-of-field
       code uses a per-element `perspective(1200px)` TRANSFORM FUNCTION
       instead (prepended to each window's own translateZ()), which
       gives the same projection math without this element itself ever
       carrying the property — every other position:fixed child here
       (tray dropdowns, snap preview, alt-tab overlay, ctx menus, the
       wallpaper picker) stays pinned to the real viewport, not just
       #lb-taskbar. Do not re-add `perspective` here without re-auditing
       every fixed-position child of this element again. */
    /* Found via CDP testing: the existing #div_left traditional hamburger
       sidebar sits at z-index:999 (its backdrop at 149) and, whenever
       it's in its "flown out" state, was covering this entire container
       and swallowing every click — even though desktop mode has no real
       use for that flyout (the taskbar/windows are the primary nav now).
       2000 clears all known shell-chrome z-indices (999 and below) while
       staying under the true system-level overlays (session-warn,
       search) which use near-INT_MAX values. */
    z-index: 2000;
    overflow: hidden;
    pointer-events: none;
}
html.desktop-mode #lb-desktop-root,
html.lb-in-desktop-window #lb-desktop-root {
    display: block;
}
/* Reserves the taskbar's own strip out of the desktop's usable area
   (2026-08-11) — #lb-desktop-root used a flat inset:0 before this,
   spanning the full viewport with the (always-on-top, always-opaque)
   taskbar simply floating over whatever was underneath via z-index
   alone; nothing ever actually shrank to make room for it. Scoped to
   html.desktop-mode specifically, NOT html.lb-in-desktop-window — a
   sub-page's own nested #lb-desktop-root (Studio's Run/Debug Run
   windows, etc.) never builds a taskbar of its own at all (see
   _lb_ensure_desktop_root()'s own window.self!==window.top branch in
   ui_toolkit.pjs), so reserving space for one there would shrink those
   windows for a taskbar that was never going to overlap them anyway. */
html.desktop-mode #lb-desktop-root {
    inset: var(--lb-wingpanel-h) 0 var(--lb-taskbar-h) 0;
}
/* .desktop-mode is only ever toggled onto the TOP-LEVEL shell's own
   <html> (index-early-bind.js gates that specific line on window.self
   === window.top) — never onto a sub-page's own <html>, even though a
   sub-page like Studio creates its OWN, separate #lb-desktop-root
   whenever it calls LBKit.window() itself (e.g. Run/Debug Run windows,
   nested one level inside Studio's own document, not siblings of Studio
   in the top shell). Without this second selector, that nested root
   stayed permanently display:none — the window chrome existed in the
   DOM with correct inline width/height/z-index, doing everything right,
   but a display:none ancestor collapses the whole subtree to a 0×0
   box, so it never became visible no matter how "correct" the chrome
   itself was. Real, found-in-production bug, not theoretical: clicking
   Run/Debug Run inside Studio "did nothing" from the user's side even
   though every functional check (the transpiled code executing
   correctly inside the blob) had passed — because those checks only
   ever exercised the blob's OWN execution context directly, never the
   window chrome wrapped around it. html.lb-in-desktop-window (set by
   bootstrap.pjs on any sub-page loaded inside an already-desktop-mode
   window, see its own comment) is the correct signal for this second
   case — it doesn't care about the SUB-PAGE's own viewport width, only
   that it's already living inside a real desktop window, which is
   exactly when opening ITS OWN child windows should always be allowed. */
/* Every direct interactive piece re-enables pointer events; the root
   itself stays click-through so it never blocks whatever's beneath it
   at the (normally empty, once desktop mode has windows) gaps. */
#lb-desktop-root > * {
    pointer-events: auto;
}

/* Legacy single-iframe shell chrome is hidden while desktop mode is
   active — windows + taskbar replace it entirely; nothing here is
   removed from the DOM, so crossing back to traditional just un-hides it. */
html.desktop-mode #iframe_right,
html.desktop-mode #div_bottom {
    display: none !important;
}

/* ── Window chrome ───────────────────────────────────────────────── */
/* var(--bg_surface) (used by the shared flat-panel block above) is
   allowed to carry an alpha channel by design on some of the 200
   generated themes — that's fine for .glass-panel/.ui-surface, which
   want translucency, but a floating OS-style window must never be
   see-through (windows/shell bled into each other through it during
   verification). var(--bg_base) is the page's own canvas colour, never
   themed with alpha, so it's used here instead — same specificity as
   the flat-panel block's background rule, declared later so it wins. */
.lb-window-chrome,
.lb-taskbar-chrome {
    background: var(--bg_base) !important;
}
.lb-window-chrome {
    position: absolute;
    display: flex;
    flex-direction: column;
    min-width: 320px;
    min-height: 200px;
    padding: 0 !important;
    margin: 0 !important;
    overflow: visible !important;
    /* "Airy" pass (2026-08-13, Leo's own word) — softer/shorter shadow
       than before (was 0 12px 32px @ 0.35 alpha); still reads as a
       floating window, just lighter weight.
       Shadow pass (2026-08-15) — the airy version had gone quiet enough
       that windows barely separated from the desktop behind them; bumped
       back up partway (not all the way to the pre-airy 0.35 alpha), still
       short/soft rather than a hard slab-drop. */
    box-shadow: 0 10px 26px rgba(0, 0, 0, 0.34) !important;
    animation: none !important;
    filter: none;
    transform: none;
    transition: filter 0.15s ease, transform 0.15s ease !important;
}
/* Unfocused windows dim — the accent ring below already marks which
   ONE window is focused, but that's easy to miss at a glance with
   several windows open; darkening every OTHER window makes the focused
   one read as "in front" immediately, not just outlined. Blur removed
   entirely (2026-08-11 — was 2px, trimmed to 1px, still too blurry per
   Leo's own repeated call, dropped rather than inching down again):
   brightness dimming alone was already doing most of the actual
   signaling work, and it's the one axis that never fights with App
   Frame's own VNC-streamed content, which isn't razor-sharp to begin
   with. */
.lb-window-chrome:not(.lb-window-focused) {
    filter: brightness(0.82);
}
.lb-window-chrome.dragging {
    box-shadow: 0 16px 38px rgba(0, 0, 0, 0.42) !important;
}
/* Peek at desktop (2026-08-15) — hovering the taskbar's Show Desktop
   corner, real Windows-11-style temporary preview. pointer-events:none
   so a hover-triggered mouse position genuinely can't interact with
   whatever's now visually "beneath" the peeked windows. */
.lb-window-chrome.lb-peek-transparent {
    opacity: 0.06 !important;
    pointer-events: none !important;
    transition: opacity 0.15s ease !important;
}
.lb-window-chrome.maximized {
    left: 0 !important;
    top: 0 !important;
    width: 100% !important;
    /* 100% now correctly stops at the taskbar's own top edge on its
       own (2026-08-11) — #lb-desktop-root's own box already reserves
       --lb-taskbar-h out of its bottom (see html.desktop-mode
       #lb-desktop-root above), so this no longer needs its own separate
       calc()/magic-number subtraction the way it used to (a hardcoded
       84px, picked for a taller taskbar this site no longer has after
       the Cinnamon flattening pass — silently wrong ever since, just
       not wrong in the direction anyone would notice: it over-reserved
       space instead of under-reserving it). One reservation, made once,
       at the shared parent — not duplicated per consumer. */
    height: 100% !important;
    border-radius: 0 !important;
}

/* Gala-style titlebar (2026-08-15, Pantheon pass; layout redesigned
   same day) — real Gala/Pantheon's most immediately recognizable
   titlebar trait, a genuinely CENTERED title, distinct from every other
   WM this shell has worn this session (all left-aligned). First attempt
   used a 3-column CSS grid (blank | title | actions) with the title
   pinned to the middle column — reverted after discovering
   .lb-window-header-actions's exact child COUNT is legitimately dynamic
   at runtime (sub-pages call window.setPageHeader(), which replaces
   that container's children — see index-early-bind.js's
   _lb_set_window_header()), so a layout that depends on a fixed number/
   order of titlebar children was never going to be safe. This version
   instead makes .lb-window-title `position:absolute`, centered via
   left:50%/transform, completely decoupled from how many siblings exist
   or what order they're in — the flex row (position:relative,
   justify-content:flex-end) handles everything ELSE (pin glyph, actions,
   min/max/close) exactly as it always did, title just floats on top.
   Background is flat and near-seamless with the window body
   (var(--bg_raised) alone, no translucency) — Pantheon's own titlebars
   don't carry the Windows-11 Mica-glass treatment other windows in this
   shell's history have used. */
.lb-window-titlebar {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    position: relative;
    flex-shrink: 0;
    gap: 4px;
    padding: 8px 12px;
    cursor: grab;
    /* Was flat var(--bg_raised), no translucency — "Pantheon's own
       titlebars don't carry the Windows-11 Mica-glass treatment." Given
       real glass tier 2 treatment 2026-08-19 (macOS-style titlebar
       vibrancy — the window BODY below stays opaque, only this strip is
       translucent, same pattern real macOS/Gala titlebars use). */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent);
    backdrop-filter: var(--glass-blur-2);
    -webkit-backdrop-filter: var(--glass-blur-2);
    border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
    border-radius: 9px 9px 0 0;
    user-select: none;
    font-family: -apple-system, 'Segoe UI', 'Noto Sans', 'Helvetica Neue', sans-serif;
}
/* Focus signal (2026-08-15, Pantheon pass): no more accent-tinted
   titlebar — real Gala doesn't recolor the titlebar by focus state at
   all, it relies on the whole window dimming (.lb-window-chrome's own
   `filter: brightness(0.82)` on :not(.lb-window-focused), already
   defined above this rule) as the only signal, which this now matches
   instead of layering a second, more Breeze-flavored cue on top of it. */
.lb-window-chrome.lb-window-focused {
    box-shadow: 0 0 0 1px var(--accent), 0 10px 26px rgba(0, 0, 0, 0.34) !important;
}
.lb-window-chrome.dragging .lb-window-titlebar {
    cursor: grabbing;
}
/* Always-on-top indicator — a small pin glyph. margin-right:auto pins it
   to the titlebar's far left (consuming all available space on its own
   right side, which flexbox honors ahead of the row's own
   justify-content:flex-end) while everything else in the row — actions,
   min/max/close — still naturally right-aligns in whatever space is
   left, with no explicit column/order assumptions needed for either
   side. Visible regardless of focus state (unlike the accent ring,
   which only ever marks ONE window) since "this window stays above
   others" is a per-window property independent of which window
   currently has focus. */
.lb-window-chrome.lb-window-pinned-top .lb-window-titlebar::before {
    margin-right: auto;
    content: '📌';
    font-size: 0.7rem;
    opacity: 0.75;
}
.lb-window-chrome.maximized .lb-window-titlebar {
    border-radius: 0;
}
/* App Frame windows (2026-08-15) — see LBKit.window()'s own comment on
   the .lb-window-appframe class it adds for "/app-frame/" URLs. These
   windows already have their own #vnc_bar status strip immediately below
   this titlebar (app-frame-view.php, 30px), so the shared titlebar's
   normal 8px vertical padding was stacking two header bars' worth of
   height for no added information — shrunk just for this window type
   rather than for every window site-wide. .lb-window-btn's own 22px
   fixed size is unaffected, so buttons still have room (22px + 4px*2
   padding = 30px total, matching #vnc_bar's own height for a level,
   two-bar-tall header rather than a mismatched taller-then-shorter one). */
.lb-window-chrome.lb-window-appframe .lb-window-titlebar {
    padding: 4px 12px;
}
/* Title-left/controls-right (2026-08-22, Leo's request — widened same
   day from an initial App-Frame-only scope once he confirmed he wanted
   every window changed, not just Remote Apps). Replaces the prior
   absolute-centered title (2026-08-15, Pantheon pass) site-wide.

   The centered version used position:absolute specifically because "a
   layout that depends on a fixed number/order of titlebar children was
   never going to be safe" — .lb-window-header-actions's child count is
   legitimately dynamic at runtime (window.setPageHeader(), called from
   inside a sub-page's own iframe — e.g. Wall's scroll-to-top button).
   This version doesn't reintroduce that risk: title is the FIRST DOM
   child (_titleEl appended before _actions/min/max/close in
   ui_toolkit.pjs's window-creation code), so putting it back in normal
   flex flow with margin-right:auto (the same push already used for the
   pinned-window 📌 glyph) pins it to the left edge and consumes all
   remaining row space on its own right side — everything AFTER it
   (.lb-window-header-actions, however many children it currently has,
   plus min/max/close) simply collapses into one group at the titlebar's
   right edge via the row's own existing justify-content:flex-end,
   regardless of that count. No per-window-type scoping needed this
   version didn't need. */
.lb-window-title {
    position: static;
    left: auto;
    top: auto;
    transform: none;
    margin-right: auto;
    min-width: 0;
    /* Leaves a little breathing room so a long title's ellipsis never
       touches the titlebar's own left/right padding edges. */
    max-width: calc(100% - 24px);
    text-align: left;
    font-weight: 600;
    font-size: 0.82rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    pointer-events: auto;
}
.lb-window-header-actions {
    display: flex;
    align-items: center;
    gap: 4px;
    overflow-x: auto;
    min-width: 0;
}
/* macOS traffic lights (2026-08-28 macOS pass) — undoes the 2026-08-15
   Pantheon-pass choice ("no macOS-style colored traffic lights... this
   shell has now tried both of those this session"); Leo's later,
   explicit "favor macOS heavily" instruction supersedes that decision
   for this pass. Real close/min/maximize semantics now carry real
   color (red/yellow/green) instead of a shared neutral hover wash, and
   the cluster moves to the titlebar's LEFT edge, reordered close-min-
   max left-to-right — both via flex `order` on the existing DOM (title,
   actions, min, max, close are all direct .lb-window-titlebar children
   in source order; see ui_toolkit.pjs's window-creation code and its
   own comment on why they're NOT nested inside .lb-window-header-actions
   — that fact is exactly what makes pure-CSS reordering safe here, no
   JS/DOM change needed). Glyphs sit hidden (transparent) at rest — real
   macOS's own affordance — revealed on that button's own :hover; a true
   group-hover (hovering any one reveals all three, real macOS behavior)
   would need a shared wrapper this markup doesn't have, so this is a
   deliberate, low-risk simplification rather than a full port. */
.lb-window-titlebar {
    justify-content: flex-start;
}
.lb-window-title {
    order: 0;
    margin-right: 0 !important;
    margin-left: 8px;
}
.lb-window-header-actions {
    order: 1;
    margin-left: auto !important;
}
.lb-window-btn {
    min-width: 12px !important;
    min-height: 12px !important;
    width: 12px !important;
    height: 12px !important;
    padding: 0 !important;
    margin: 0 !important;
    line-height: 1 !important;
    font-size: 0.62rem !important;
    border-radius: 50% !important;
    border: 1px solid transparent !important;
    background: transparent !important;
    color: transparent !important;
    flex-shrink: 0;
    order: 0;
    transition: color 0.1s ease;
}
.lb-window-btn-close { order: -3; background: #FF5F57 !important; border-color: #E0443E !important; }
.lb-window-btn-min   { order: -2; background: #FFBD2E !important; border-color: #DEA123 !important; }
.lb-window-btn-max   { order: -1; background: #28C840 !important; border-color: #1AAB29 !important; }
.lb-window-btn:hover,
.lb-window-btn-close:hover {
    color: rgba(0, 0, 0, 0.55) !important;
}

.lb-window-body {
    position: relative;
    flex: 1;
    min-height: 0;
    overflow: hidden;
    /* The iframe's own html/body are deliberately transparent (see the
       allowtransparency comment in leobergamo/index.php) so the single
       full-viewport #iframe_right composites against the shell's own
       background. Inside a floating window that transparency instead
       let whatever sits behind the window (another window, the desktop,
       the shell sidebar) show through — this opaque backing stops it. */
    background: var(--bg_base) !important;
}
.lb-window-iframe {
    display: block;
    width: 100%;
    height: 100%;
    border: none !important;
}
/* Shown only while an active drag/resize is in progress — without it the
   cursor crossing the iframe boundary mid-drag hands mouse events to the
   iframe's own document and the drag silently stops tracking. */
.lb-window-capture-overlay {
    position: absolute;
    inset: 0;
    z-index: 5;
    cursor: inherit;
    background: transparent;
}

/* ── Resize handles — one per edge/corner, small hit targets ────── */
.lb-window-resize-handle {
    position: absolute;
    z-index: 6;
}
.lb-window-resize-n, .lb-window-resize-s { left: 8px; right: 8px; height: 6px; cursor: ns-resize; }
.lb-window-resize-e, .lb-window-resize-w { top: 8px; bottom: 8px; width: 6px; cursor: ew-resize; }
.lb-window-resize-n { top: -3px; }
.lb-window-resize-s { bottom: -3px; }
.lb-window-resize-e { right: -3px; }
.lb-window-resize-w { left: -3px; }
.lb-window-resize-ne, .lb-window-resize-nw, .lb-window-resize-se, .lb-window-resize-sw {
    width: 12px;
    height: 12px;
}
.lb-window-resize-ne { top: -4px; right: -4px; cursor: nesw-resize; }
.lb-window-resize-nw { top: -4px; left: -4px; cursor: nwse-resize; }
.lb-window-resize-se { bottom: -4px; right: -4px; cursor: nwse-resize; }
.lb-window-resize-sw { bottom: -4px; left: -4px; cursor: nesw-resize; }
.lb-window-chrome.maximized .lb-window-resize-handle {
    display: none;
}

/* #div_top (hamburger, title, clock, search link) only ever needs to
   exist in traditional mode now — desktop mode has replaced every piece of
   it: the taskbar's own .lb-start-btn opens the same #div_left drawer,
   the taskbar has its own clock, per-window titlebars show the page
   title, and #div_left_srch_link (below) is the search trigger relocated
   into that same drawer. Hiding the whole bar (rather than each piece
   individually, as this used to) also takes its ::before HUD left-elbow
   block down with it for free — that block's own #div_top-scoped base
   rule (`&::before { display: block !important }`, ~line 3424) and the
   html.main-frame colouring rule further down never had display:none in
   their own right, only background, so they can't un-hide a hidden
   parent. Traditional is untouched (no html.desktop-mode class there). */
html.desktop-mode #div_top {
    display: none !important;
}

/* ── App-frame sidebars: always expanded inside a desktop window ────
   #fs_nav (Files) and #fm_tree (File Manager) collapse off-canvas
   (position:absolute; left:-180px) below their own pages' @media
   (max-width:767px) — correct for traditional, but our window manager can
   easily put a window's *content* width below that while the window
   itself is very much a desktop experience (the default open size
   used to; see LBKit.window()'s _w/_h below). A resizable window
   shouldn't lose its primary nav just because it's narrow, so these
   stay expanded regardless of the iframe's own measured width whenever
   html.lb-in-desktop-window is set (bootstrap.pjs, gated on
   window.parent.globals.desktopMode). Declared after those pages' own
   @media block (same #id specificity, later source order wins) so no
   !important tug-of-war is needed for position/left, though it's
   included anyway for consistency with the rest of this file. */
html.lb-in-desktop-window #fs_nav,
html.lb-in-desktop-window #fm_tree {
    position: relative !important;
    top: auto !important;
    left: 0 !important;
    bottom: auto !important;
}
html.lb-in-desktop-window #fs_nav_toggle,
html.lb-in-desktop-window #fm_tree_toggle {
    display: none !important;
}
html.lb-in-desktop-window #fs_body.nav-open::after,
html.lb-in-desktop-window #fm_tree.open ~ * + #fm_main::after {
    display: none !important;
}

/* ── Windows-11-idiom Start Menu popup (desktop mode only) ───────────
   #div_left is otherwise a full-height slide-in drawer (traditional's
   hamburger nav, still used as-is there). In desktop mode the taskbar's
   Start button opens this same element, so here it's repositioned into
   a compact popup floating above the (now re-centered) taskbar — what
   actually reads as a start menu. Reskinned twice before this
   (2026-08-06 Aero→Breeze, 2026-08-11 Breeze→Cinnamon/Mint-Y); this pass
   (2026-08-13) moves it again toward a stock-Windows-11 reference
   screenshot Leo shared — restoring real blur-behind (the Cinnamon pass
   explicitly zeroed it) and a larger corner radius set directly here
   rather than through the shared --theme-radius token, which stays at
   its Mint-Y scale for every OTHER surface on the site (this pass is
   scoped to taskbar + Start Menu only, not a site-wide reversal).
   Deliberately does not touch `left`: index-early-bind.js's
   show_div_left()/hide_div_left() drive the open/close slide by setting
   that one inline style directly, and `left` percentages on a
   position:fixed element resolve against the viewport regardless of the
   element's own width, so shrinking the box here doesn't disturb it. */
/* Applications Menu (2026-08-15, Pantheon pass) — same #div_left
   element/mechanism as every prior redesign, re-anchored from
   bottom-center (above the old taskbar's centered Start button) to
   top-left (below #lb-wingpanel's own Applications Menu button, real
   Pantheon's own drop point). Also narrower/shorter — Pantheon's actual
   Applications Menu is a fairly compact list, not a wide two-pane
   Windows-11-style grid+rail; kept the existing rail+list content
   structure as-is (retuning ITS internal layout for a narrower box is
   real risk for a look-only pass) but tightened the outer box's own
   sizing to feel closer to that compactness. */
html.desktop-mode #div_left {
    /* z-index: matches the dock's own true-top-of-stack value (see
       #lb-taskbar's own rule for the full always-on-top reasoning,
       2026-08-08) — the real ceiling per Leo's explicit "show over all
       elements" ask. #div_left_backdrop gets the matching treatment
       just below it (see its own rule) so outside-clicks still land on
       the backdrop and close the menu rather than falling through. */
    z-index: 2147483647 !important;
    bottom: auto !important;
    top: calc(var(--lb-wingpanel-h) + 8px) !important;
    /* Bumped 420->520 / 520->680 (2026-08-23, Leo: "make the start menu
       bigger") — also just genuinely needed now: Game/Utilities/
       Development are three new categories on top of the existing five,
       so the All-apps rail has real extra content to show. */
    width: 520px !important;
    max-width: calc(100vw - 32px) !important;
    height: auto !important;
    min-height: 480px !important;
    max-height: min(680px, calc(100vh - var(--lb-wingpanel-h) - 24px)) !important;
    padding: 0 !important;
    /* Was 9px (2026-08-15) — bumped for a softer floating-popover feel,
       matching the pinned tiles/weather card/list rows inside it
       (2026-08-17). */
    border-radius: 16px !important;
    border: 1px solid color-mix(in srgb, var(--border) 55%, transparent) !important;
    /* Was flat var(--bg_raised), no backdrop-filter — "Pantheon's own
       Applications Menu is a plain flat popover, not a translucent
       Mica/glass panel." Un-flattened 2026-08-19 as part of the glass/
       depth refresh — this was the single most directly documented
       glass regression in the whole file, so it's the first surface
       fixed. Glass tier 2 (floating chrome). */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent) !important;
    backdrop-filter: var(--glass-blur-2) !important;
    -webkit-backdrop-filter: var(--glass-blur-2) !important;
    box-shadow: var(--elevation-4) !important;
    display: flex !important;
    flex-direction: column !important;
    font-family: -apple-system, 'Segoe UI', 'Noto Sans', 'Helvetica Neue', sans-serif;
    /* Spotlight-like reveal (2026-08-28, "more fluid" pass) — layered
       ADDITIVELY onto the existing left-slide mechanism (index-early-
       bind.js's show_div_left()/hide_div_left() still drive `left`
       directly and unchanged), not replacing it: a bare #div_left rule
       elsewhere already carries `transition: left 0.5s ... !important`
       shared with traditional mode's own drawer, so this whole
       transition is restated here (desktop-mode-scoped, higher
       specificity, also !important so it actually wins) rather than
       adding a second separate `transition` declaration, since multiple
       `transition` properties on one element don't merge — only the
       winning one applies at all. */
    opacity: 0;
    transform: scale(0.96);
    transition: left 0.5s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.18s ease, transform 0.22s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
/* Anchored near the Wingpanel's Applications Menu button (far left) —
   reverses the Windows-11 pass's true-centered anchor, which existed
   specifically because THAT taskbar's own Start button was centered.
   Deliberately its OWN separate, .div-left-flown-out-QUALIFIED rule
   rather than folded into the bare html.desktop-mode #div_left rule
   above: that element's open/close is driven by index-early-bind.js's
   show_div_left()/hide_div_left() toggling `style.left` directly
   between '0.5%' (open) and '-105%' (off-screen, closed) — an
   unconditional `left` override on the bare selector would have
   permanently overridden both of those inline writes, leaving the menu
   stuck visibly open even while "closed". Scoping to the SAME class
   that already marks "open" keeps the existing slide-based show/hide
   fully intact; only the OPEN state's final resting position changes. */
html.desktop-mode #div_left.div-left-flown-out {
    left: 8px !important;
    opacity: 1 !important;
    transform: scale(1) !important;
}

/* Windows 11 drops the repeating "OS name" header entirely — the
   site's own identity is already carried by every window's own
   titlebar, so this reads as a Start Menu, not a re-skinned nav drawer.
   This selector is already desktop-mode-scoped, so traditional's own
   drawer (which never carries html.desktop-mode) is untouched — this
   REPLACES that old desktop-mode banner-styling rule outright (every
   property it used to set is moot once the element is hidden), not
   layered alongside it. */
html.desktop-mode #div_left_brand {
    display: none !important;
}

/* Search trigger — moved into the start menu for desktop mode (see
   leobergamo/index.php); #nav_srch_link stays put in #div_top for
   traditional, which never sets html.desktop-mode so this stays hidden
   there. Styled as a search box (pill, icon prefix) rather than a plain
   list row so it reads as "type here", not "navigate here". */
#div_left_srch_link {
    /* .lb-link forces display:inline-flex !important, which beats a
       plain (non-important) display:none regardless of specificity —
       needs !important here too to actually hide on traditional. */
    display: none !important;
}
html.desktop-mode #div_left_srch_link {
    /* First thing in the menu, matching real Windows 11 — search sits
       at the very top with no repeating header above it (#div_left_brand
       is hidden entirely under desktop-mode, see its own rule) now that
       #div_left is a flex column and `order` can reorder a child
       independent of its source position in the DOM. */
    order: -1 !important;
    display: flex !important;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
    margin: 16px 16px 8px !important;
    padding: 0 14px !important;
    height: 36px !important;
    background: color-mix(in srgb, black 35%, transparent) !important;
    border: 1px solid color-mix(in srgb, white 18%, transparent) !important;
    border-radius: 999px !important;
    color: color-mix(in srgb, white 75%, var(--text) 25%) !important;
    font-size: 0.85rem !important;
}
html.desktop-mode #div_left_srch_link:hover {
    background: color-mix(in srgb, black 28%, transparent) !important;
    border-color: color-mix(in srgb, white 32%, transparent) !important;
    color: white !important;
}
#div_left_srch_icon {
    font-size: 0.9em;
    opacity: 0.85;
}

/* ── Windows-11-idiom default pane: Pinned grid / widget / Recommended
   (2026-08-13) ────────────────────────────────────────────────────────
   Skeleton markup lives in leobergamo/index.php; every piece inside is
   populated by index-early-bind.js from data that already exists
   elsewhere on the site (see that file's own comments): pinned apps
   from desktop-prefs-api.php, the weather card from the already-built
   (previously dormant) render_weather_data_from_open_meteo(), and the
   Recommended list from the same live WS activity feed that already
   drives the notification tray. Hidden together with the rest of this
   pane whenever .lb-startmenu-allapps is set on #div_left (see that
   selector, just below, shared with #div_left_body's own toggle). */
html.desktop-mode #div_left_default_pane {
    display: flex !important;
    flex-direction: column !important;
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow-y: auto !important;
    padding: 4px 16px 8px !important;
    gap: 14px !important;
}
html.desktop-mode #div_left.lb-startmenu-allapps #div_left_default_pane {
    display: none !important;
}
#div_left_pinned_header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-shrink: 0;
}
#div_left_pinned_label {
    font-size: 0.78rem;
    font-weight: 700;
    color: var(--text);
    opacity: 0.75;
}
#div_left_allapps_toggle {
    font-size: 0.76rem !important;
    color: var(--accent, var(--color_primary)) !important;
    opacity: 0.9;
    background: transparent !important;
    border: none !important;
    padding: 2px 4px !important;
    cursor: pointer;
}
#div_left_allapps_toggle:hover {
    opacity: 1;
    text-decoration: underline;
}
/* Icon-over-label square tiles, built from _lb_prefs.pinnedApps — the
   exact same data source already driving the taskbar's own pinned
   buttons (ui_toolkit.pjs's _lb_refresh_taskbar()), just rendered as a
   grid instead of a row. */
#div_left_pinned_grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, 76px);
    /* "Airy" pass (2026-08-13): a bit more room between tiles (was 6px)
       — mirrors the same lightening pass applied to window chrome/
       taskbar/popup shadows just above. */
    gap: 10px;
    flex-shrink: 0;
}
/* This is a real <button> (built in ui_toolkit.pjs's _lb_render_pinned_grid()),
   so the site-wide `button {...}` reset (ui_style.php ~line 765, all
   !important — background/border/border-radius/padding/margin/min-height
   included) was silently winning over every one of these properties the
   whole time despite this rule's own selector being more specific —
   !important always beats specificity regardless. That's what was
   actually producing the tinted background + 1px border + 4px corners
   (the reset's own theme-radius-sm) that made these tiles look chunky/
   boxy, not anything about this rule's own (never-applied) values.
   Found and fixed 2026-08-17 — every property that the reset also
   touches needs !important here too, matching every other custom
   <button>-based component on this site (same lesson, several times
   already: layout picker, admin wizard test buttons, etc). */
.lb-startmenu-tile {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 6px !important;
    width: 76px !important;
    height: 68px !important;
    min-height: 0 !important;
    padding: 8px 4px !important;
    margin: 0 !important;
    color: var(--text) !important;
    background: transparent !important;
    border: none !important;
    border-radius: 14px !important;
    cursor: pointer;
    transition: background 0.12s ease;
}
.lb-startmenu-tile:hover {
    background: color-mix(in srgb, var(--text) 8%, transparent) !important;
}
.lb-startmenu-tile:active {
    background: color-mix(in srgb, var(--text) 14%, transparent) !important;
}
.lb-startmenu-tile-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent, var(--color_primary));
}
.lb-startmenu-tile-icon svg {
    width: 26px;
    height: 26px;
}
.lb-startmenu-tile-label {
    font-size: 0.68rem;
    line-height: 1.15;
    text-align: center;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* Empty-state prompt when there are no pinned apps yet — matches the
   existing .nav_group_empty pattern rather than inventing a new one, and
   deliberately doesn't fabricate a default pin set for a fresh account. */
.lb-startmenu-pinned-empty {
    grid-column: 1 / -1;
    padding: 10px 2px;
    font-size: 0.78rem;
    opacity: 0.55;
}
/* Revived weather card mount (index-early-bind.js's
   render_weather_data_from_open_meteo(), previously built but never
   called) — the function renders its own .weather-container.lb-card-glass
   div; this just gives it a flex-shrink:0 slot in the pane's column
   flow and a little breathing room to match the tile grid/recommended
   card's own spacing. */
#div_left_weather_mount {
    flex-shrink: 0;
}
#div_left_weather_mount:empty {
    display: none;
}
/* .weather-container's own 25px padding / 30px margin-bottom (shared
   with its other, wider mount points elsewhere on the site) is oversized
   for this ~230px-wide panel — reads as one big flat block. Scoped
   override, not a change to the shared class, so nothing outside the
   Start Menu is affected (2026-08-17). */
#div_left_weather_mount .weather-container {
    padding: 14px !important;
    margin-bottom: 0 !important;
    border-radius: 14px !important;
    border-color: color-mix(in srgb, var(--border) 55%, transparent) !important;
}
#div_left_recommended {
    display: flex;
    flex-direction: column;
    gap: 6px;
    flex-shrink: 0;
    padding-bottom: 4px;
}
#div_left_recommended_label {
    font-size: 0.78rem;
    font-weight: 700;
    color: var(--text);
    opacity: 0.75;
}
#div_left_recommended_list {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin: 0;
    padding: 0;
    list-style: none;
}
#div_left_recommended_list li {
    padding: 6px 8px;
    /* Was --theme-radius-xs (2px) — matches the softer radius used
       throughout the rest of this pane now (2026-08-17). */
    border-radius: 10px;
    font-size: 0.78rem;
    color: var(--text);
    opacity: 0.85;
}
#div_left_recommended_list li.lb-recommended-clickable {
    cursor: pointer;
}
#div_left_recommended_list li.lb-recommended-clickable:hover {
    opacity: 1;
    background: color-mix(in srgb, var(--text) 8%, transparent);
}
#div_left_recommended_list li.lb-recommended-empty {
    opacity: 0.5;
    cursor: default;
}

/* ── Kickoff-style category rail + list (2026-08-09) ─────────────────
   Matches KDE Plasma's own "Kickoff" launcher: a narrow icon-only rail
   on the left switches which single .nav_group's items show as a plain
   text-row list on the right, instead of showing every group at once.
   The rail + pane split (#div_left_rail / #div_left_content, both
   inside a shared #div_left_body row) is built once by
   web_root/index-early-bind.js's _lb_startmenu_build_rail(), which also
   MOVES the real .nav_group elements (Explore/Messaging/Personal/Apps
   — real markup div.nav_group[data-group], leobergamo/index.php) into
   #div_left_content — no markup changes needed, this only re-parents
   existing nodes. Only the group carrying `.kickoff-active` (set by
   that same function, toggled by clicking a rail button) is shown;
   toggleNavGroup()'s own `.collapsed` class (index.php's inline script,
   traditional's accordion) plays no part here at all under desktop-mode, so
   nothing needs neutralizing the way the old tile-grid design required.

   Windows-11-idiom pass (2026-08-13): this rail+list used to be the
   ONLY Start Menu pane. It's now the secondary "All apps" pane —
   #div_left_default_pane (pinned grid/widget/recommended, just above in
   the DOM) is the default view, and index-early-bind.js's All-apps
   toggle adds/removes .lb-startmenu-allapps on #div_left to swap which
   one shows. Hidden by default now; shown only in that state. */
html.desktop-mode #div_left_body {
    display: none;
    flex-direction: row !important;
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow: hidden !important;
}
html.desktop-mode #div_left.lb-startmenu-allapps #div_left_body {
    display: flex !important;
}
/* "‹ Back" row above the rail — index-early-bind.js inserts this once,
   as #div_left_body's own previousSibling, so it shares this same
   visibility toggle without needing its own selector logic. Real bug
   caught via CDP (computed display stayed "flex" even without
   .lb-startmenu-allapps on #div_left): this is a plain <button>, and the
   site's own global reset (`button { display: inline-flex !important }`,
   ~line 736) beats a non-!important display:none regardless of this
   rule's own ID-level specificity — !important always wins the cascade
   tier before specificity is even compared. #div_left_body's matching
   base rule didn't need this (it's a <div>, not matched by that button
   reset at all), which is exactly why only this element showed the bug. */
#div_left_allapps_back {
    display: none !important;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
    margin: 8px 12px 2px;
    padding: 6px 8px;
    color: var(--text) !important;
    opacity: 0.75;
    background: transparent !important;
    border: none !important;
    border-radius: var(--theme-radius-xs);
    font-size: 0.8rem;
    cursor: pointer;
}
#div_left_allapps_back:hover {
    opacity: 1;
    background: color-mix(in srgb, var(--text) 8%, transparent) !important;
}
html.desktop-mode #div_left.lb-startmenu-allapps #div_left_allapps_back {
    display: flex !important;
}
/* Cinnamon/Mint-Y pass (2026-08-11): widened from a 56px icon-only rail
   into a real category LIST (icon + text label per row) — Cinnamon's
   own Menu applet sidebar is a text list, not an icon strip the way
   Plasma's Kickoff rail was. Class renamed .kickoff-rail-btn ->
   .lb-menu-category-btn to match (see index-early-bind.js). */
html.desktop-mode #div_left_rail {
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 2px !important;
    /* Was 150px (2026-08-23, Leo: "make the category list wider so text
       is not clipped") — "External Sites"/"Remote Apps" were clipping
       at that width once Game/Utilities/Development pushed longer
       labels into the rail. Room to grow now that the Start Menu itself
       was already widened to 520px the same day. */
    width: 190px !important;
    flex-shrink: 0 !important;
    padding: 8px 6px !important;
    overflow-y: auto !important;
    border-right: 1px solid var(--border) !important;
}
.lb-menu-category-btn {
    display: flex !important;
    align-items: center !important;
    justify-content: flex-start !important;
    gap: 10px !important;
    width: 100% !important;
    height: auto !important;
    flex-shrink: 0 !important;
    padding: 8px 10px !important;
    color: var(--text) !important;
    opacity: 0.75 !important;
    background: transparent !important;
    border: none !important;
    border-radius: var(--theme-radius-xs) !important;
    font-size: 0.82rem !important;
    text-align: left !important;
    cursor: pointer !important;
    transition: background 0.12s ease, opacity 0.12s ease !important;
}
.lb-menu-category-btn svg {
    width: 18px !important;
    height: 18px !important;
    flex-shrink: 0 !important;
}
.lb-menu-category-btn:hover {
    opacity: 1 !important;
    background: color-mix(in srgb, var(--text) 8%, transparent) !important;
}
/* Rounded pill selection (2026-08-28 macOS pass) — replaces the
   2026-08-11 Cinnamon/Mint-Y GTK-style flat left-border accent stripe;
   real macOS System Settings' own sidebar uses a full rounded fill for
   the selected row, not a border stripe. border-radius switched from
   --theme-radius-xs to -sm to read as a proper pill at this row height,
   matching the same token this pass already bumped for the rest of the
   site. */
.lb-menu-category-btn.active {
    opacity: 1 !important;
    color: var(--accent, var(--color_primary)) !important;
    background: color-mix(in srgb, var(--accent, var(--color_primary)) 16%, transparent) !important;
    border-radius: var(--theme-radius-sm) !important;
}
html.desktop-mode #div_left_content {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    overflow-y: auto !important;
    padding: 4px 8px 8px !important;
}
/* Cross-fade on category switch (2026-08-28, "more fluid" pass) — was a
   hard instant display:none/flex swap. display isn't itself animatable,
   so this leans on @starting-style + transition-behavior:allow-discrete
   (real, shipped CSS, not a hack) to let the newly-shown group fade in
   from opacity 0 rather than popping in; the JS class-toggle that drives
   .kickoff-active is completely unchanged. */
html.desktop-mode .nav_group {
    display: none !important;
    opacity: 0;
    transition: opacity 0.16s ease, display 0.16s allow-discrete;
}
html.desktop-mode .nav_group.kickoff-active {
    display: flex !important;
    flex-direction: column !important;
    gap: 1px !important;
    opacity: 1;
    transition: opacity 0.16s ease, display 0.16s allow-discrete;
}
@starting-style {
    html.desktop-mode .nav_group.kickoff-active {
        opacity: 0;
    }
}
html.desktop-mode .nav_group_label {
    font-size: 0.72rem !important;
    font-weight: 700 !important;
    text-transform: uppercase !important;
    letter-spacing: 0.06em !important;
    color: color-mix(in srgb, var(--accent, var(--color_primary)) 70%, var(--text)) !important;
    opacity: 0.85 !important;
    background: transparent !important;
    border: none !important;
    border-bottom: 1px solid var(--border) !important;
    padding: 8px 6px 8px !important;
    margin-bottom: 4px !important;
    pointer-events: none !important;
}
html.desktop-mode .nav_group_arrow {
    display: none !important;
}
/* The traditional list row's own decorative markers (a small LCARS dot before
   every .a_nav_link, a "← " prefix before .a_cmd_link/Logout) belong to
   the old horizontal-row sidebar reading — the row's own injected
   .lb-startmenu-icon already fills that role here too. */
html.desktop-mode #div_left .a_nav_link::before,
html.desktop-mode #div_left .a_cmd_link::before {
    display: none !important;
    content: none !important;
}

/* Rows — icon (small) + label, left-aligned, full pane width, flat
   until hovered — matching Kickoff's own plain list rows rather than a
   grid of pinned tiles. The icon is a `.lb-startmenu-icon` span injected
   by web_root/index-early-bind.js's icon pass (one shared
   LBKit.__iconForUrl lookup, also used by the taskbar's own window
   buttons) — the text after it is the link's own existing label,
   untouched. */
html.desktop-mode #div_left .a_nav_link,
html.desktop-mode #div_left .a_cmd_link {
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: flex-start !important;
    gap: 10px !important;
    width: 100% !important;
    height: auto !important;
    /* #div_left .nav_group .a_nav_link (traditional list-row layout, above)
       sets its own max-height:44px + overflow:hidden — a `height` alone
       doesn't beat a separate `max-height` declaration, so the 44px cap
       silently clipped every row until this was made explicit. */
    max-height: none !important;
    overflow: visible !important;
    padding: 7px 8px !important;
    color: var(--text) !important;
    text-align: left !important;
    border-radius: 6px !important;
    border-left: none !important;
    background: transparent !important;
    border: none !important;
    transition: background 0.12s ease !important;
}
html.desktop-mode #div_left .a_nav_link:hover,
html.desktop-mode #div_left .a_cmd_link:hover {
    background: color-mix(in srgb, var(--accent, var(--color_primary)) 12%, transparent) !important;
}
html.desktop-mode .lb-startmenu-icon {
    display: flex !important;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    color: var(--accent, var(--color_primary)) !important;
    opacity: 0.85;
}
html.desktop-mode .lb-startmenu-icon svg {
    width: 18px !important;
    height: 18px !important;
}
html.desktop-mode .lb-startmenu-label {
    display: block !important;
    flex: 1 1 auto !important;
    min-width: 0 !important;
    font-size: 0.85rem !important;
    line-height: 1.2 !important;
    overflow: hidden !important;
    white-space: nowrap !important;
    text-overflow: ellipsis !important;
    text-align: left !important;
}

/* Empty-state placeholder for a Start Menu category with no entries yet
   (currently just Web Apps — App Frame's own group always has a seeded
   default so it's realistically never empty). Plain dimmed text, no
   icon/link styling since it isn't clickable. */
.nav_group_empty {
    display: block;
    padding: 10px 8px;
    font-size: 0.8rem;
    opacity: 0.55;
    text-align: left;
}

/* ── Bottom account row (Windows-11-idiom pass, 2026-08-13) ──────────
   Previously a stack of full-width text rows (account name, then
   Dashboard/Lock/Logout one per line), kept in order purely via CSS
   `order` since #div_left's children were never wrapped. This pass
   instead has index-early-bind.js's _lb_startmenu_build_account_row()
   MOVE those same real nodes (not clone them — same approach as
   _lb_startmenu_build_rail() above) into a real wrapper: avatar+name on
   the left (#div_left_account_identity), small icon-only circular
   buttons on the right (#div_left_account_actions) — matching Win11's
   own account-row idiom. #div_left_account itself (the username span)
   is still hidden-by-default/shown-in-desktop-mode exactly as before;
   only its layout context changed. */
#div_left_account {
    display: none !important;
}
html.desktop-mode #div_left_account {
    display: block !important;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 0.8rem !important;
    font-weight: 600 !important;
    color: var(--text) !important;
}
html.desktop-mode #div_left_account_row {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 8px !important;
    flex-shrink: 0 !important;
    margin-top: auto !important;
    padding: 10px 16px !important;
    border-top: 1px solid color-mix(in srgb, var(--border) 70%, transparent) !important;
    order: 999 !important;
}
#div_left_account_identity {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}
#div_left_account_actions {
    display: flex;
    align-items: center;
    gap: 2px;
    flex-shrink: 0;
}
/* Icon-only circular buttons — Dashboard/Lock/Logout (or Login/Sign Up
   logged out), each already carrying a .lb-startmenu-icon +
   .lb-startmenu-label pair from the shared icon-injection pass
   (_lb_startmenu_add_icons()); the label is visually hidden here (kept
   in the DOM, still reachable via the link's own `title` attribute as a
   native tooltip) so only the icon glyph shows, matching Win11's own
   account-row icon buttons instead of full-width text rows. */
html.desktop-mode #div_left_account_actions .a_nav_link,
html.desktop-mode #div_left_account_actions .a_cmd_link {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 32px !important;
    height: 32px !important;
    padding: 0 !important;
    margin: 0 !important;
    border-radius: 50% !important;
    color: var(--text) !important;
    opacity: 0.8;
    background: transparent !important;
    border: none !important;
    transition: background 0.12s ease, opacity 0.12s ease !important;
}
html.desktop-mode #div_left_account_actions .a_nav_link:hover,
html.desktop-mode #div_left_account_actions .a_cmd_link:hover {
    opacity: 1;
    background: color-mix(in srgb, var(--text) 10%, transparent) !important;
}
#div_left_account_actions .lb-startmenu-label {
    display: none !important;
}

/* ── Desktop widget board (2026-08-14) ───────────────────────────────
   Bigger, heavier cards than desktop icons (own layer, #lb-desktop-
   widgets, appended to the wallpaper the same way #lb-desktop-icons
   already is) — real draggable gadgets, not launcher shortcuts. */
#lb-desktop-widgets {
    position: absolute;
    inset: 0;
    pointer-events: none;
}
.lb-desktop-widget {
    position: absolute;
    width: 220px;
    background: color-mix(in srgb, var(--bg_raised) 88%, transparent);
    border: 1px solid var(--border);
    border-radius: var(--theme-radius-sm);
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.22);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    pointer-events: auto;
    overflow: hidden;
}
.lb-desktop-widget-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 6px 8px;
    font-size: 0.72rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    opacity: 0.7;
    cursor: grab;
    border-bottom: 1px solid var(--border);
    user-select: none;
}
.lb-desktop-widget-close {
    background: transparent !important;
    border: none !important;
    color: var(--text) !important;
    padding: 0 4px !important;
    min-height: 0 !important;
    font-size: 1rem !important;
    opacity: 0.6;
    cursor: pointer;
}
.lb-desktop-widget-close:hover {
    opacity: 1;
}
.lb-desktop-widget-body {
    padding: 10px 12px;
    font-size: 0.85rem;
}
.lb-widget-weather-place {
    font-weight: 600;
    margin-bottom: 4px;
}
.lb-widget-weather-temp {
    font-family: var(--font-heading);
    font-size: 1.8rem;
    line-height: 1.1;
}
.lb-widget-weather-cond {
    opacity: 0.7;
    font-size: 0.76rem;
    margin-top: 2px;
}
/* Recent Activity + Quick Stats widgets (2026-08-15) */
.lb-widget-activity-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
    max-height: 160px;
    overflow-y: auto;
}
.lb-widget-activity-list li {
    font-size: 0.76rem;
    opacity: 0.85;
    line-height: 1.3;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
    padding-bottom: 4px;
}
.lb-widget-stats-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.lb-widget-stats-row {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    font-size: 0.8rem;
}
.lb-widget-stats-row span:last-child {
    opacity: 0.75;
    font-variant-numeric: tabular-nums;
}
.lb-desktop-widget-notes-ta {
    width: 100%;
    min-height: 100px;
    resize: vertical;
    background: transparent;
    border: none;
    color: var(--text);
    font-family: inherit;
    font-size: 0.85rem;
    line-height: 1.4;
    outline: none;
}

/* ── Taskbar hover previews (2026-08-14) ─────────────────────────────
   Positioned via left/bottom set directly in JS (ui_toolkit.pjs), not
   CSS — its horizontal position depends on which button triggered it,
   computed at show-time the same way the snap preview/desktop ctxmenu
   already position themselves relative to a click point. */
#lb-taskbar-hover-preview {
    position: fixed;
    z-index: 2147483646;
    display: flex;
    gap: 6px;
    padding: 0;
}
.lb-hover-preview-card {
    display: flex;
    flex-direction: column;
    background: var(--bg_raised);
    border: 1px solid var(--border);
    border-radius: var(--theme-radius-sm);
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.24);
    overflow: hidden;
}
.lb-hover-preview-head {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 8px;
    font-size: 0.74rem;
    font-weight: 600;
    color: var(--text);
    max-width: 200px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    border-bottom: 1px solid var(--border);
}
.lb-hover-preview-card:not([data-has-canvas]) .lb-hover-preview-head {
    border-bottom: none;
}
.lb-hover-preview-head svg {
    width: 14px;
    height: 14px;
    flex-shrink: 0;
    color: var(--accent, var(--color_primary));
}
.lb-hover-preview-canvas {
    display: block;
    background: #000;
}

/* ── Idle screensaver (2026-08-14) ───────────────────────────────────
   Fades in at 80% of the idle-lock timeout (leobergamo/index.php's own
   inline idle-monitor script) — a real desktop's idle sequence is
   screensaver-then-lock, not lock-alone. Purely cosmetic: any of the
   same activity events that already reset the idle timer just remove
   .lb-screensaver-visible, no separate dismiss logic. Max z-index,
   matching the site's other genuinely system-level overlays (lock
   screen, session-warn, search) — this needs to sit above literally
   everything, including windows and the taskbar. */
#lb-screensaver {
    position: fixed;
    inset: 0;
    z-index: 2147483647;
    display: flex;
    align-items: center;
    justify-content: center;
    background: color-mix(in srgb, var(--bg_base) 92%, black);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 0.6s ease, visibility 0s linear 0.6s;
}
#lb-screensaver.lb-screensaver-visible {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transition: opacity 0.6s ease, visibility 0s linear 0s;
}
#lb-screensaver-clock {
    font-family: var(--font-heading);
    font-size: clamp(48px, 9vw, 140px);
    font-weight: 600;
    color: var(--text);
    opacity: 0.7;
    letter-spacing: 0.02em;
    /* Slow drift so the same pixels aren't lit for the whole time the
       saver is up — a small nod to the historical reason screensavers
       exist at all, harmless on modern displays but a cheap, honest
       detail to include rather than a purely decorative animation. */
    animation: lb-screensaver-drift 45s ease-in-out infinite alternate;
}
@keyframes lb-screensaver-drift {
    0%   { transform: translate(-6vw, -4vh); }
    50%  { transform: translate(6vw, 4vh); }
    100% { transform: translate(-4vw, 5vh); }
}

/* ── Desktop background (wallpaper) ──────────────────────────────── */
#lb-desktop-wallpaper {
    position: absolute;
    inset: 0;
    z-index: 0;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    /* filter half was added for the depth-of-field wallpaper blur
       (2026-08-11, ui_toolkit.pjs's own _lb_apply_depth_of_field()) —
       that blur was pulled back out same day at Leo's request, so
       nothing sets `filter` on this element anymore and that half is
       currently inert. Left in place rather than removed: harmless on
       its own, and picks back up for free if a filter-based effect ever
       gets added here again. box-shadow half is the drop-target
       highlight below — both listed in ONE transition declaration
       deliberately, not two separate ones: a second `transition:` on the
       same rule doesn't merge with the first, it silently replaces it
       (caught this exact mistake mid-edit, not after). */
    transition: filter 0.15s ease, box-shadow 0.15s ease;
}
#lb-desktop-wallpaper.lb-desktop-drop-target {
    box-shadow: inset 0 0 0 3px var(--accent, var(--color_primary));
}

.lb-desktop-ctxmenu {
    position: fixed;
    z-index: 2147483645;
    min-width: 200px;
    /* Was 96% opaque, no backdrop-filter (near-flat in practice) — real
       glass tier 2 (2026-08-19), matching every other floating-chrome
       surface. */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent);
    backdrop-filter: var(--glass-blur-2);
    -webkit-backdrop-filter: var(--glass-blur-2);
    border: 1px solid var(--border);
    border-radius: 10px;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4);
    padding: 6px;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.lb-desktop-ctxmenu button {
    all: unset;
    box-sizing: border-box;
    padding: 8px 12px;
    border-radius: 6px;
    font-size: 0.85rem;
    color: var(--text);
    cursor: pointer;
}
.lb-desktop-ctxmenu button:hover {
    background: color-mix(in srgb, var(--accent) 16%, transparent);
}

.lb-wallpaper-picker-box {
    width: min(720px, 92vw);
    max-height: 82vh;
    display: flex;
    flex-direction: column;
    /* Was flat var(--bg_raised) — real glass tier 2 (2026-08-19),
       matching every other modal/picker surface. */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent);
    backdrop-filter: var(--glass-blur-2);
    -webkit-backdrop-filter: var(--glass-blur-2);
    border: 1px solid var(--border);
    border-radius: var(--theme-radius);
    box-shadow: 0 24px 64px rgba(0, 0, 0, 0.5);
    overflow: hidden;
}
.lb-wallpaper-picker-hdr {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 16px;
    border-bottom: 1px solid var(--border);
    font-weight: 700;
    flex-shrink: 0;
}
.lb-wallpaper-picker-status {
    padding: 32px 16px;
    text-align: center;
    color: var(--text_dim);
    font-size: 0.85rem;
}
.lb-wallpaper-picker-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 12px;
    padding: 16px;
    overflow-y: auto;
}
.lb-wallpaper-thumb {
    all: unset;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    gap: 4px;
    cursor: pointer;
    border: 2px solid transparent;
    border-radius: var(--theme-radius-xs);
    padding: 4px;
}
.lb-wallpaper-thumb:hover {
    border-color: var(--accent);
    background: color-mix(in srgb, var(--accent) 10%, transparent);
}
.lb-wallpaper-thumb img {
    width: 100%;
    height: 90px;
    object-fit: cover;
    border-radius: 4px;
    background: color-mix(in srgb, black 15%, transparent);
    display: block;
}
.lb-wallpaper-thumb-label {
    font-size: 0.72rem;
    color: var(--text_dim);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    text-align: center;
}

/* ── Image picker (LBKit.image_picker) — same grid/thumbnail shape as
   the wallpaper picker just above, generalized for any caller (App
   Studio's PictureBox/Image Picture property, so far), plus an upload
   row the wallpaper picker doesn't need. */
.lb-image-picker-box {
    width: min(720px, 92vw);
    max-height: 82vh;
    display: flex;
    flex-direction: column;
    /* Was flat var(--bg_raised) — real glass tier 2 (2026-08-19),
       matching every other modal/picker surface. */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent);
    backdrop-filter: var(--glass-blur-2);
    -webkit-backdrop-filter: var(--glass-blur-2);
    border: 1px solid var(--border);
    border-radius: var(--theme-radius);
    box-shadow: 0 24px 64px rgba(0, 0, 0, 0.5);
    overflow: hidden;
}
.lb-image-picker-hdr {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 16px;
    border-bottom: 1px solid var(--border);
    font-weight: 700;
    flex-shrink: 0;
}
.lb-image-picker-upload-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
}
.lb-image-picker-upload-status {
    font-size: 0.8rem;
    color: var(--text_dim);
}
.lb-image-picker-status {
    padding: 32px 16px;
    text-align: center;
    color: var(--text_dim);
    font-size: 0.85rem;
}
.lb-image-picker-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 12px;
    padding: 16px;
    overflow-y: auto;
}
.lb-image-picker-thumb {
    all: unset;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    gap: 4px;
    cursor: pointer;
    border: 2px solid transparent;
    border-radius: var(--theme-radius-xs);
    padding: 4px;
}
.lb-image-picker-thumb:hover {
    border-color: var(--accent);
    background: color-mix(in srgb, var(--accent) 10%, transparent);
}
.lb-image-picker-thumb img {
    width: 100%;
    height: 90px;
    object-fit: cover;
    border-radius: 4px;
    background: color-mix(in srgb, black 15%, transparent);
    display: block;
}
.lb-image-picker-thumb-label {
    font-size: 0.72rem;
    color: var(--text_dim);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    text-align: center;
}

/* ── Taskbar (Windows 11) ─────────────────────────────────────────── */
/* Icon-only, square-ish — Windows 11's own Start button carries no text
   label (unlike the earlier Kickoff-style "⊞ Start" pill), sized to
   match the window-icon buttons beside it rather than standing out as
   an accent-filled pill. */
/* Applications Menu button (2026-08-15, Pantheon pass) — same element/
   class as every prior redesign's "Start" button, just relocated from
   the taskbar into #lb-wingpanel's left section (see ui_toolkit.pjs),
   resized to fit the Wingpanel's own shorter 32px strip instead of the
   old taller taskbar. */
.lb-start-btn {
    flex-shrink: 0;
    width: 26px !important;
    height: 22px !important;
    min-height: 22px !important;
    padding: 0 !important;
    margin: 0 !important;
    font-size: 0.85rem !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    border-color: transparent !important;
    color: var(--text) !important;
    transition: background 0.15s ease !important;
}
.lb-start-btn:hover {
    background: color-mix(in srgb, var(--text) 12%, transparent) !important;
}
/* Taskbar is always visible now (2026-08-11 — auto-hide removed
   entirely, per-preference show/hide and its whole right-click toggle
   menu are gone, not just defaulted off) and always occupies real,
   reserved screen space rather than floating over the desktop via
   z-index alone — --lb-taskbar-h is the single source of truth for how
   tall that reserved strip is, referenced by #lb-desktop-root's own
   reserved inset below and by the Start Menu's own bottom-clearance
   rule elsewhere in this file. This value is a FALLBACK ONLY —
   ui_toolkit.pjs's own _lb_sync_taskbar_height() overwrites it as an
   inline style the moment the real taskbar exists, measuring its actual
   offsetHeight rather than trusting a hand-picked constant to stay
   accurate. That measurement is the whole reason this exists at all: a
   first hand-calculated guess here (from the taskbar rule's own
   min-height+padding, ~35px) was genuinely wrong against the real
   rendered height (91px, evidently taller from tray/clock content this
   quick math missed) — the exact stale-magic-number failure mode this
   pass was already fixing for the OLD hardcoded-84px bug, just
   reintroduced by hand-picking a new constant instead of measuring.
   91px here is that same real measured value, just as the fallback for
   the brief window before JS runs, not the authoritative source. */
:root {
    --lb-taskbar-h: 91px;
    /* Wingpanel's own height (2026-08-15, Pantheon pass) — unlike
       --lb-taskbar-h, this is never re-measured/overwritten by JS: the
       panel is a single fixed-height row by design (no content that can
       ever wrap it taller), so a hand-picked constant is safe here in a
       way it wasn't for the taskbar (see that variable's own comment on
       why IT needs live measurement instead). */
    --lb-wingpanel-h: 32px;
}
/* Pantheon pass (2026-08-15) — full paradigm swap from the prior
   Windows-11-idiom taskbar, replacing this session's THIRD desktop-shell
   redesign this way (Win11 → Cinnamon → Win11 → now Pantheon), per Leo's
   explicit ask to match elementary OS's real desktop environment. Splits
   what was previously one bottom bar (Start + running apps + tray) into
   Pantheon's own two-panel layout: a thin top Wingpanel (app menu left,
   clock center, indicators right — see #lb-wingpanel below) and a
   bottom, icon-only, floating Plank-style dock (this same #lb-taskbar
   element, restyled — running/pinned apps only, tray content moved out
   to the Wingpanel). Deliberately scoped to STRUCTURE/shape, not literal
   Pantheon color values (elementary's own #3689e6 blue etc.) — this
   site's 200 generated themes all drive through the existing
   --accent/--bg_*/--text tokens (see palette-loader.php), and hardcoding
   Pantheon's literal palette here would break every theme but one.
   Typography: Pantheon's actual system font (Inter/Open Sans, not this
   site's Spectral serif) is approximated with a plain system-ui sans
   stack rather than a new self-hosted webfont, scoped to just the shell
   chrome elements below (Wingpanel, dock, window titlebars, App Frame's
   vnc_bar) — Wall/blog content keeps Spectral untouched, matching how
   the Cinnamon pass before this one also stayed scoped to "LBKit +
   desktop shell" only. */
/* Wingpanel (2026-08-15, Pantheon pass) — the new top panel. Three flex
   sections (left/center/right, built+populated in ui_toolkit.pjs): the
   Applications Menu button on the left (the same .lb-start-btn element
   this shell already had, just relocated rather than rebuilt), the
   clock centered, and the notification/clipboard/task-manager/quick-
   settings/desktop-switcher cluster (the same #lb-system-tray element,
   also relocated) on the right. A plain thin flat bar, not the taskbar's
   own Mica/blur treatment below — Wingpanel is genuinely just a thin
   flat strip in real Pantheon, no translucency. */
/* #lb-wingpanel/.lb-wingpanel-left/.lb-wingpanel-right/.lb-wingpanel-center's
   own rule bodies all moved to the very end of this file (2026-08-15) —
   see the comment there for why. */

/* Plank-style dock (2026-08-15, Pantheon pass) — same #lb-taskbar
   element as every prior redesign, restyled from a full-width bottom bar
   into a floating, centered, icon-only dock. Real Plank auto-hides by
   default; deliberately NOT reintroduced here — auto-hide was tried and
   deliberately removed site-wide 2026-08-11 (see version control, "real
   space reserved via --lb-taskbar-h") after causing real problems, and
   Leo's ask today was to match Pantheon's LOOK, which this floating-pill
   shape already carries on its own without needing the old auto-hide
   behavior back. */
/* Compactness pass (2026-08-15, same day) — Leo's own call, "desktop
   workspace is limited": the dock's real reserved footprint (icon size
   + padding + bottom margin, since --lb-taskbar-h is live-measured from
   this element's actual rendered height) was eating more vertical space
   than the payoff of 40px icons justified. Buttons 40px→28px,
   padding/gap/radius/margin trimmed to match, so the dock reads as a
   compact strip rather than a chunky floating pill. */
#lb-taskbar {
    position: fixed;
    left: 50%;
    bottom: 6px;
    transform: translateX(-50%);
    z-index: 2147483647;
    display: flex;
    align-items: center;
    gap: 3px;
    padding: 4px !important;
    margin: 0 !important;
    border-radius: 12px !important;
    border: 1px solid color-mix(in srgb, var(--border) 55%, transparent) !important;
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.28) !important;
    background: color-mix(in srgb, var(--bg_raised) 82%, transparent) !important;
    backdrop-filter: blur(16px) saturate(140%) !important;
    -webkit-backdrop-filter: blur(16px) saturate(140%) !important;
    overflow: visible !important;
    animation: none !important;
    font-family: -apple-system, 'Segoe UI', 'Noto Sans', 'Helvetica Neue', sans-serif;
}
/* No longer needs its own absolute-centering — #lb-taskbar itself IS the
   whole dock now (system tray moved out to the Wingpanel), so centering
   the outer element is centering the only content there is. Plain flex
   child, same as .lb-taskbar-overflow-btn beside it. */
#lb-taskbar-center {
    display: flex;
    align-items: center;
    gap: 4px;
    min-width: 0;
}
/* Overflow chevron (2026-08-15) — sibling of #lb-taskbar-windows, sized
   to match .lb-taskbar-btn's own trimmed pill dimensions (see that
   rule's own comment on why margin/min-height need explicit overrides
   here too — same .lb-btn base class, same fight). */
.lb-taskbar-overflow-btn {
    font-size: 0.9rem !important;
    padding: 4px 10px !important;
    margin: 0 !important;
    min-height: 26px !important;
    flex-shrink: 0;
    background: transparent !important;
    border-color: transparent !important;
    color: var(--text) !important;
}
.lb-taskbar-overflow-btn:hover {
    background: color-mix(in srgb, var(--text) 12%, transparent) !important;
}
#lb-taskbar-windows {
    display: flex;
    align-items: center;
    gap: 4px;
    overflow-x: auto;
    min-width: 0;
    /* Real bug, confirmed live: this file's global ::-webkit-scrollbar
       rule (~5px) is a classic, space-taking scrollbar, not an overlay
       one, so the moment this row genuinely overflowed (enough open
       windows to not fit) the scrollbar's own height pushed the row —
       and therefore the whole taskbar, and therefore --lb-taskbar-h,
       and therefore the reserved desktop space — taller, mid-session,
       with no launch-time warning. scrollbar-width:none (standard,
       Blink/Firefox both respect it for RESERVED layout space, not just
       visual rendering) is the one that actually matters here — the
       ::-webkit-scrollbar{display:none} pseudo-element rule below only
       hides the visual thumb and, confirmed by testing, does nothing
       to the space Blink still reserves for it on its own. Both
       together is the established pattern elsewhere in this file
       (#div_left, #admin_tab_bar) — this rule was missing the half that
       actually does the layout-space work, not a new pattern. Still
       fully scrollable via wheel/trackpad either way. */
    scrollbar-width: none;
}
#lb-taskbar-windows::-webkit-scrollbar {
    display: none;
}
/* Icon + short label pills — flat at rest, a filled rounded pill on
   hover. The active window gets an accent-tinted pill (matching the
   Start Menu rail's own active treatment) plus a small centered accent
   dot beneath it, rather than the previous plain neutral tint + a
   nearly-invisible 5px dot — that combination read as too subtle to
   register as "this one's active" at a glance. */
/* Icon-only dock button (2026-08-15, Pantheon pass) — was a variable-
   width icon+label pill (Windows-11/Cinnamon taskbar convention); Plank
   icons carry no visible label at all, fixed square, roughly circular
   corners. .lb-taskbar-btn-label is hidden below rather than removed
   from the DOM/JS — _lb_refresh_taskbar() still builds it (still used
   by .lb-taskbar-overflow-btn's flyout, which reads its text), it's
   just not part of the dock's own on-screen look anymore. */
.lb-taskbar-btn {
    position: relative;
    width: 28px !important;
    height: 28px !important;
    padding: 0 !important;
    /* .lb-btn's base rule (this button's own root class) sets both
       margin:5px and min-height:32px !important — neither is beaten by
       anything set above, so without these two overrides the icon
       wouldn't sit centered in a true 28x28 square. */
    margin: 0 !important;
    min-height: 0 !important;
    min-width: 0 !important;
    flex-shrink: 0;
    display: flex !important;
    align-items: center;
    justify-content: center;
    background: transparent !important;
    border: none !important;
    border-radius: 8px !important;
    transition: background 0.15s ease, transform 0.1s ease !important;
}
.lb-taskbar-btn:hover {
    background: color-mix(in srgb, var(--text) 10%, transparent) !important;
}
/* Press feedback (2026-08-12) — was hover-only before; a click had
   nothing distinguishing the moment of the press itself from just
   hovering. Deliberately restrained (a flat tint step, no inset shadow
   or scale) to match the Cinnamon/Mint-Y flatness this pass is careful
   not to undo. Placed after :hover so pressing always reads as pressed
   even while the cursor is still technically hovering (same
   specificity as :hover; source order breaks the tie). Note: this is
   the CSS :active PSEUDO-CLASS (being pressed right now) — unrelated
   to the .active CLASS below (this button's window is the focused
   one); the two "active"s are a naming coincidence, not the same
   concept. */
.lb-taskbar-btn:active {
    background: color-mix(in srgb, var(--text) 16%, transparent) !important;
}
/* Wraps the icon+label pair inside each task button (ui_toolkit.pjs's
   _lb_refresh_taskbar()) — was built with no class at all, so it fell
   back to a bare <span>'s default display:inline. That's invisible for
   short titles, but a long enough one (relative to .lb-taskbar-btn's own
   170px max-width) would wrap onto its own line below the icon instead
   of sitting beside it — growing that one button, and therefore the
   whole taskbar row's real rendered height, by a few px the moment a
   long-titled window appeared (confirmed by sampling the taskbar's
   height at 60fps across several window opens and catching the exact
   frame — "Guestbook" tripped it, "Wall"/"BBS" didn't). Explicit
   row-flex here keeps icon+label on one line always; the label's own
   overflow:hidden/ellipsis (below) is what actually shortens long titles
   now, instead of an unintended second line doing it. */
.lb-taskbar-btn-content {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 0;
}
.lb-taskbar-btn-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    opacity: 0.9;
    transition: opacity 0.15s ease, filter 0.15s ease;
}
.lb-taskbar-btn-icon svg {
    width: 17px;
    height: 17px;
}
.lb-taskbar-btn-label {
    display: none;
}
/* Running indicator (2026-08-12, restyled 2026-08-15 for the Pantheon
   dock) — every OPEN window's own dock icon gets a small dot BELOW the
   icon, real Plank's own running-app indicator, replacing the previous
   pill's centered-dot-plus-accent-stripe pair (that combination was a
   taskbar-pill idiom, not a dock one). Keyed off
   :not(.lb-taskbar-btn-pinned) rather than a new class/DOM element:
   _lb_refresh_taskbar() only ever adds .lb-taskbar-btn-pinned to a
   button for an app that is NOT in the open windows list, so "not
   pinned" already means "currently open" given how these buttons get
   built, with no JS change needed here. */
.lb-taskbar-btn:not(.lb-taskbar-btn-pinned)::after {
    content: '';
    position: absolute;
    left: 50%;
    bottom: 3px;
    width: 4px;
    height: 4px;
    border-radius: 50%;
    background: color-mix(in srgb, var(--text) 55%, transparent);
    transform: translateX(-50%);
}
/* Focused window: a soft rounded-square highlight behind the icon plus
   a brighter, slightly larger dot — real Plank barely tints the icon
   itself, but a pure-CSS icon substitute (real app icons in a real DE
   carry their own color/branding to read as "this one" at a glance; ours
   are flat monochrome glyphs) needs a bit more contrast to stay legible
   as "focused" rather than just "running," so this stays a deliberate,
   small, usability-driven departure from strict 1:1 fidelity. */
.lb-taskbar-btn.active {
    background: color-mix(in srgb, var(--accent) 16%, transparent) !important;
}
.lb-taskbar-btn.active:hover {
    background: color-mix(in srgb, var(--accent) 24%, transparent) !important;
}
.lb-taskbar-btn.active:active {
    background: color-mix(in srgb, var(--accent) 30%, transparent) !important;
}
.lb-taskbar-btn.active .lb-taskbar-btn-icon {
    opacity: 1;
    color: var(--accent);
}
.lb-taskbar-btn.active::after {
    width: 5px;
    height: 5px;
    background: var(--accent);
}

/* ── System tray (notifications + task manager + status + clock) ──── */
/* ── Virtual desktops switcher (2026-08-14) ──────────────────────────
   Small numbered pills in the tray, matching the tray applets' own
   compact/flat treatment rather than looking like a separate widget. */
#lb-desktop-switcher {
    display: flex;
    align-items: center;
    gap: 2px;
    padding: 0 4px;
}
.lb-desktop-pill {
    min-width: 20px !important;
    min-height: 20px !important;
    height: 20px !important;
    padding: 0 4px !important;
    margin: 0 !important;
    font-size: 0.68rem !important;
    line-height: 1 !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    border: 1px solid var(--border) !important;
    color: var(--text) !important;
    opacity: 0.7;
    cursor: pointer;
}
.lb-desktop-pill:hover {
    opacity: 1;
    background: color-mix(in srgb, var(--text) 8%, transparent) !important;
}
.lb-desktop-pill.active {
    opacity: 1;
    color: var(--accent, var(--color_primary)) !important;
    border-color: var(--accent, var(--color_primary)) !important;
    background: color-mix(in srgb, var(--accent, var(--color_primary)) 14%, transparent) !important;
}
.lb-desktop-pill-add {
    font-weight: 700;
}

/* Relocated into #lb-wingpanel's right section (2026-08-15, Pantheon
   pass) — was the taskbar's own right-anchored cluster (margin-left:auto
   pushing it away from the centered Start+windows group sharing that
   row); .lb-wingpanel-right already right-aligns everything in its own
   flex row, so that positioning trick and its separator border aren't
   needed here anymore. */
#lb-system-tray {
    display: flex;
    align-items: center;
    gap: 3px;
    flex-shrink: 0;
}
/* Individual chip treatment for each tray applet (bell / WS dot+clock /
   task manager / quick settings) — each applet gets its own subtly-
   hoverable slot rather than one continuous strip. Cinnamon/Mint-Y pass
   (2026-08-11): flat background tint only on hover — the glow/lift
   treatment this used to have doesn't fit a flat GTK tray. */
#lb-system-tray > * {
    border-radius: var(--theme-radius-xs) !important;
    transition: background 0.15s ease !important;
}
.lb-tray-bell:hover,
.lb-tray-clip-btn:hover,
.lb-tray-taskmgr-btn:hover,
.lb-tray-quicksettings-btn:hover {
    background: color-mix(in srgb, var(--text) 8%, transparent) !important;
}
#lb-tray-clock-group {
    display: flex;
    align-items: center;
    gap: 6px;
    /* Trimmed 3px→2px vertical (2026-08-15) — the clock text's own line
       height pushed this ~2px past the 32px-tall Wingpanel's edges even
       with correct padding elsewhere; found while fixing the same
       overflow report. */
    padding: 2px 6px;
    border-radius: var(--theme-radius-xs);
    transition: background 0.15s ease;
}
#lb-tray-clock-group:hover {
    background: color-mix(in srgb, var(--text) 8%, transparent);
}
/* Show Desktop — a thin clickable strip at the Wingpanel's far right
   edge (2026-08-15, Pantheon pass — relocated from the taskbar's own
   right edge along with #lb-system-tray, see ui_toolkit.pjs; no direct
   Wingpanel indicator equivalent in real Pantheon, kept here as the
   least-disruptive home for a real feature rather than dropping it):
   click to minimize every open window at once, click again to restore
   them. */
#lb-show-desktop {
    flex-shrink: 0;
    width: 6px;
    align-self: stretch;
    margin-left: 4px;
    border-left: 1px solid var(--border);
    cursor: pointer;
    background: transparent;
}
#lb-show-desktop:hover {
    background: color-mix(in srgb, var(--accent) 30%, transparent);
}
.lb-tray-bell,
.lb-tray-taskmgr-btn {
    position: relative;
    font-size: 0.92rem !important;
    padding: 2px 6px !important;
    /* Same .lb-btn margin/min-height override this whole pass needed
       elsewhere (see .lb-taskbar-btn's own comment) — .lb-tray-taskmgr-btn
       had no dedicated sizing rule at all before this, so it was
       rendering at .lb-btn's full default size (32px min-height, 16px
       horizontal padding) regardless of everything else in the tray
       being trimmed down. */
    margin: 0 !important;
    min-height: 26px !important;
}
.lb-tray-badge {
    position: absolute;
    top: -4px;
    right: -4px;
    font-size: 0.6rem !important;
    padding: 0 4px !important;
    line-height: 1.4 !important;
}
.lb-tray-popover,
.lb-taskmgr-popover {
    position: absolute;
    /* Opens DOWNWARD now (2026-08-15, Pantheon pass) — triggers live in
       #lb-wingpanel at the TOP of the screen now, not the bottom
       taskbar; was bottom:100%/margin-bottom (grows upward from the
       trigger), which would now render off-screen above the viewport. */
    top: 100%;
    right: 0;
    margin-top: 8px;
    min-width: 220px;
    max-width: 320px;
    max-height: 320px;
    overflow-y: auto;
    padding: 8px !important;
}
.lb-tray-list,
.lb-taskmgr-list {
    list-style: none;
    margin: 0 !important;
    padding: 0 !important;
}
.lb-tray-list li,
.lb-taskmgr-list li {
    padding: 6px 8px;
    font-size: 0.8rem;
    border-bottom: 1px solid var(--border);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}
.lb-tray-list li:last-child,
.lb-taskmgr-list li:last-child {
    border-bottom: none;
}
.lb-tray-empty {
    opacity: 0.6;
    justify-content: center !important;
}
/* Action Center header (2026-08-14) — Clear all + Do Not Disturb, sits
   above the existing .lb-tray-list inside a shared wrapper
   (.lb-tray-panel) so LBKit.popover()'s own content slot still only
   ever gets one root element, same as before this existed. */
.lb-tray-panel {
    display: flex;
    flex-direction: column;
}
.lb-tray-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 6px 10px;
    border-bottom: 1px solid var(--border);
}
.lb-tray-clear-btn,
.lb-tray-dnd-btn {
    font-size: 0.72rem !important;
    padding: 3px 8px !important;
    min-height: 0 !important;
    background: transparent !important;
    border: 1px solid var(--border) !important;
    color: var(--text) !important;
    opacity: 0.75;
}
.lb-tray-clear-btn:hover,
.lb-tray-dnd-btn:hover {
    opacity: 1;
    background: color-mix(in srgb, var(--text) 8%, transparent) !important;
}
.lb-tray-dnd-btn.active {
    opacity: 1;
    color: var(--accent, var(--color_primary)) !important;
    border-color: var(--accent, var(--color_primary)) !important;
    background: color-mix(in srgb, var(--accent, var(--color_primary)) 14%, transparent) !important;
}
/* Notifications app frames send via window.notify() (see
   __lb_bind_notify() in index-early-bind.js) carry an onClick that
   restores + focuses the window that raised them. */
.lb-tray-list li.lb-tray-clickable {
    cursor: pointer;
}
.lb-tray-list li.lb-tray-clickable:hover {
    background: color-mix(in srgb, var(--accent) 14%, transparent);
}
.lb-tray-list li.lb-tray-item-warn {
    border-left: 3px solid var(--warn, var(--accent));
    padding-left: 5px;
}
.lb-tray-list li.lb-tray-item-danger {
    border-left: 3px solid var(--error, var(--color_secondary));
    padding-left: 5px;
}
.lb-taskmgr-close {
    min-width: 20px !important;
    min-height: 20px !important;
    width: 20px !important;
    height: 20px !important;
    padding: 0 !important;
    line-height: 1 !important;
    flex-shrink: 0;
}

/* Cascade/Tile — one-off arrange actions, sit above the window list in
   the same Task Manager popover rather than as their own persistent
   tray buttons. */
.lb-taskmgr-actions {
    display: flex;
    gap: 6px;
    padding-bottom: 8px;
    margin-bottom: 4px;
    border-bottom: 1px solid var(--border);
}
.lb-taskmgr-actions .lb-btn {
    flex: 1;
    font-size: 0.78rem !important;
    padding: 5px 8px !important;
}

#lb-tray-ws-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    flex-shrink: 0;
    background: var(--text_dim);
}
#lb-tray-ws-dot.ws-connected {
    background: #3ddc84;
}
#lb-tray-ws-dot.ws-disconnected {
    background: var(--error);
}
#lb-tray-clock {
    font-size: 0.75rem;
    font-variant-numeric: tabular-nums;
    opacity: 0.85;
    white-space: nowrap;
}

/* ── Desktop UI batch (2026-08-10): pinned taskbar apps, snap preview,
   Alt-Tab overlay, desktop icons, quick settings, theme picker/builder ── */

/* Context-menu separator — .lb-desktop-ctxmenu itself, its buttons, and
   the deferred open/close plumbing all already existed (wallpaper +
   taskbar auto-hide menus); this batch's shared _lb_open_ctxmenu()
   factory is the first caller to ever need a separator between items
   (e.g. "Pin"/"Add to desktop" vs. "Close" on a window's own menu). */
.lb-desktop-ctxmenu-sep {
    height: 1px;
    margin: 4px 2px;
    background: var(--border);
    flex-shrink: 0;
}

/* Pinned-but-not-currently-open taskbar buttons — same base look as a
   real open-window button, just slightly dimmer (no active window behind
   it to represent) until hovered. */
.lb-taskbar-btn-pinned {
    opacity: 0.75;
}
.lb-taskbar-btn-pinned:hover {
    opacity: 1;
}

/* Aero-Snap-style drag preview — a translucent accent-tinted rectangle
   shown while dragging a window's titlebar near a screen edge (see
   LBKit.window()'s own drag mousemove handler). Sits above every window
   (they cap out at _lb_top_z, starting 100) but below the taskbar/tray
   chrome, same layering intent as the snap zone being a drag AID, not a
   permanent UI element. */
#lb-snap-preview {
    position: fixed;
    z-index: 9000;
    background: color-mix(in srgb, var(--accent) 22%, transparent);
    border: 2px solid var(--accent);
    border-radius: var(--theme-radius-xs);
    pointer-events: none;
    transition: left 0.08s ease, top 0.08s ease, width 0.08s ease, height 0.08s ease;
}

/* Alt-Tab switcher overlay — a centered row of window cards, real desktop
   convention (Windows/GNOME/KDE all render some variant of this). Sits
   above absolutely everything else in the shell, including the snap
   preview and any open context menu, since it's a modal-attention-grab
   the instant Alt+Tab is pressed. */
#lb-alttab-overlay {
    position: fixed;
    inset: 0;
    z-index: 2147483646;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    flex-wrap: wrap;
    padding: 40px;
    background: color-mix(in srgb, var(--bg_dark) 55%, transparent);
    box-sizing: border-box;
}
.lb-alttab-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    width: 140px;
    padding: 18px 12px;
    border-radius: var(--theme-radius);
    background: color-mix(in srgb, var(--bg_raised) 92%, transparent);
    border: 2px solid transparent;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.35);
}
.lb-alttab-card.active {
    border-color: var(--accent);
    background: color-mix(in srgb, var(--accent) 14%, var(--bg_raised));
}
.lb-alttab-card-icon {
    width: 36px;
    height: 36px;
    color: var(--accent);
}
.lb-alttab-card-icon svg {
    width: 100%;
    height: 100%;
}
.lb-alttab-card-label {
    font-size: 0.8rem;
    color: var(--text);
    text-align: center;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 100%;
}

/* ── Command palette (2026-08-15) — Ctrl+Alt+K. Same fixed-overlay+scrim
   shape as #lb-alttab-overlay just above, positioned near the top rather
   than centered (a search box reads naturally top-anchored, unlike the
   Alt-Tab card row). */
#lb-cmdpal-overlay {
    position: fixed;
    inset: 0;
    z-index: 2147483646;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    padding-top: 120px;
    background: color-mix(in srgb, var(--bg_dark) 55%, transparent);
    box-sizing: border-box;
}
#lb-cmdpal-box {
    width: min(560px, calc(100% - 48px));
    max-height: 60vh;
    display: flex;
    flex-direction: column;
    border-radius: var(--theme-radius);
    /* Was 96% opaque, no backdrop-filter — real glass tier 2
       (2026-08-19), matching every other floating-chrome surface. */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent);
    backdrop-filter: var(--glass-blur-2);
    -webkit-backdrop-filter: var(--glass-blur-2);
    border: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
    box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4);
    overflow: hidden;
}
#lb-cmdpal-input {
    border: none;
    outline: none;
    background: transparent;
    color: var(--text);
    font-size: 1rem;
    padding: 14px 16px;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
    flex-shrink: 0;
}
#lb-cmdpal-list {
    overflow-y: auto;
    padding: 6px;
}
.lb-cmdpal-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 10px;
    border-radius: var(--theme-radius-xs);
    cursor: pointer;
}
.lb-cmdpal-row.active {
    background: color-mix(in srgb, var(--accent) 16%, transparent);
}
.lb-cmdpal-row-icon {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
    color: var(--accent);
}
.lb-cmdpal-row-icon svg {
    width: 100%;
    height: 100%;
}
.lb-cmdpal-row-label {
    font-size: 0.85rem;
    color: var(--text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ── Keyboard shortcuts cheat sheet (2026-08-15) — Ctrl+Alt+/. Plain
   content inside an LBKit.modal() box, no overlay of its own needed. */
.lb-shortcuts-help {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 320px;
}
.lb-shortcuts-help-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding-block: 6px;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
}
.lb-shortcuts-help-row:last-child {
    border-bottom: none;
}
.lb-shortcuts-help-keys {
    font-family: monospace;
    font-size: 0.78rem;
    background: color-mix(in srgb, var(--bg_dark) 70%, transparent);
    border: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
    border-radius: 4px;
    padding: 2px 8px;
    white-space: nowrap;
    color: var(--text);
}
.lb-shortcuts-help-desc {
    font-size: 0.85rem;
    color: var(--text);
    opacity: 0.85;
    text-align: right;
}

/* ── Snap Assist (2026-08-15) — positioned to exactly cover the
   remaining half after a snap (JS sets left/top/width/height inline to
   match _lb_snap_zone_geometry()'s own rect), not a full-screen overlay
   like Alt-Tab/command palette. */
#lb-snapassist-overlay {
    position: fixed;
    z-index: 2147483645;
    display: flex;
    align-items: center;
    justify-content: center;
    background: color-mix(in srgb, var(--bg_dark) 45%, transparent);
    box-sizing: border-box;
}
#lb-snapassist-row {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;
    padding: 20px;
}
.lb-snapassist-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    width: 120px;
    padding: 14px 10px;
    border-radius: var(--theme-radius);
    background: color-mix(in srgb, var(--bg_raised) 92%, transparent);
    border: 2px solid transparent;
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);
    cursor: pointer;
    transition: border-color 0.12s ease, transform 0.12s ease;
}
.lb-snapassist-card:hover {
    border-color: var(--accent);
    transform: translateY(-2px);
}
.lb-snapassist-card-icon {
    width: 30px;
    height: 30px;
    color: var(--accent);
}
.lb-snapassist-card-icon svg {
    width: 100%;
    height: 100%;
}
.lb-snapassist-card-label {
    font-size: 0.75rem;
    color: var(--text);
    text-align: center;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 100%;
}

/* ── Desktop icon rubber-band selection (2026-08-15) ──────────────── */
#lb-rubberband {
    position: absolute;
    border: 1px solid var(--accent);
    background: color-mix(in srgb, var(--accent) 18%, transparent);
    pointer-events: none;
    z-index: 5;
}
.lb-toast-undo-btn {
    background: transparent !important;
    border: none !important;
    color: var(--accent) !important;
    font-weight: 600 !important;
    text-decoration: underline;
    cursor: pointer !important;
    padding: 0 !important;
    font-size: inherit !important;
}

/* Desktop icons — a grid layer inside #lb-desktop-wallpaper (sits below
   every real window in DOM order, same as the background image itself,
   no explicit z-index needed relative to .lb-window-chrome). */
#lb-desktop-icons {
    position: absolute;
    inset: 0;
}
.lb-desktop-icon {
    position: absolute;
    width: 84px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    padding: 8px 6px;
    /* Rounder corners (2026-08-15, Pantheon pass) — was --theme-radius-xs
       (2px, GTK/Mint-Y's own tight corner convention); the visibility
       scrim/hover/selected states just below are untouched (a real,
       hard-won contrast fix from Leo's own "very dim" report earlier
       this session, not a Windows-11-specific look worth regressing for
       a paradigm swap). */
    border-radius: 8px;
    cursor: pointer;
    user-select: none;
    border: 1px solid transparent;
    /* Visibility pass (2026-08-15, Leo's own report — "very dim") — the
       resting state had NO background at all, only :hover/.selected did;
       against a bright or busy wallpaper photo, a bare glyph+label
       relying purely on drop-shadow for contrast genuinely washed out.
       A subtle always-on scrim (much lighter than the hover one, so
       hover/selected still read as distinct states) guarantees real
       contrast regardless of what's behind it — same reasoning most
       real desktop icon systems already bake in, just not applied here
       originally. */
    background: color-mix(in srgb, var(--bg_dark) 16%, transparent);
    transition: background 0.12s ease, border-color 0.12s ease;
}
.lb-desktop-icon:hover {
    background: color-mix(in srgb, var(--bg_dark) 40%, transparent);
}
.lb-desktop-icon.selected {
    background: color-mix(in srgb, var(--accent) 26%, transparent);
    border-color: color-mix(in srgb, var(--accent) 60%, transparent);
}
.lb-desktop-icon-glyph {
    width: 36px;
    height: 36px;
    color: var(--text);
    /* Stronger, two-layer shadow (was a single soft 0 1px 3px @0.6) —
       a tight dark core plus a wider soft halo reads as real separation
       against any wallpaper brightness, not just darker ones. */
    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.85)) drop-shadow(0 0 6px rgba(0, 0, 0, 0.5));
}
.lb-desktop-icon-glyph svg {
    width: 100%;
    height: 100%;
}
.lb-desktop-icon-label {
    font-size: 12px;
    font-weight: 600;
    font-family: -apple-system, 'Segoe UI', 'Noto Sans', 'Helvetica Neue', sans-serif;
    color: var(--text);
    text-align: center;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9), 0 0 5px rgba(0, 0, 0, 0.6);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 100%;
}

/* Quick settings flyout — same tray-applet sizing as the bell/task
   manager buttons it sits next to. Hover glow lives in the consolidated
   #lb-system-tray > * rule above (which now covers all three buttons).
   .lb-tray-clip-btn added 2026-08-15 — a real, pre-existing gap found
   while fixing Wingpanel overflow: the clipboard button had never been
   added to this trimmed sizing rule at all (only its own :hover state
   existed), so it was still rendering at .lb-btn's base default
   (min-height:32px + margin:5px, a 42px footprint) — harmless in the
   old ~91px-tall taskbar, but enough to visibly poke out of the new
   32px-tall Wingpanel. */
.lb-tray-bell,
.lb-tray-clip-btn,
.lb-tray-taskmgr-btn,
.lb-tray-quicksettings-btn {
    position: relative;
    padding: 2px 6px !important;
    margin: 0 !important;
    min-height: 26px !important;
    display: flex !important;
    align-items: center;
    justify-content: center;
}
/* Real inline SVG now (2026-08-15, Pantheon pass), not an emoji glyph —
   see ui_toolkit.pjs's own comment on _LB_TRAY_ICON_SVG for why. Exact,
   predictable sizing instead of trusting whatever the OS's color-emoji
   font happens to render at. */
.lb-tray-btn-icon svg {
    width: 16px;
    height: 16px;
    display: block;
}
.lb-tray-popover,
.lb-taskmgr-popover,
/* .lb-quicksettings-popover's own rule body moved to the very end of
   this file (2026-08-15) — see the comment there for why. */
.lb-quicksettings-panel {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.lb-quicksettings-panel .lb-btn {
    justify-content: flex-start;
    text-align: left;
    font-size: 0.8rem !important;
    padding: 8px 10px !important;
}

/* Small screens never see any of the above — belt-and-braces on top of
   the JS-driven html.desktop-mode gate, in case of a transient state
   during a resize crossing. */
@media (max-width: 767px) {
    #lb-desktop-root,
    #lb-taskbar {
        display: none !important;
    }
}

/* ── Print (App Studio Manual → PDF export) ─────────────────────────
   The first @media print block in this file — everything else on the
   site is a screen-only app, so no prior print handling existed to
   conflict with. Scoped narrowly: only LBKit.doc_browser's own
   .lb-docbrowser-print-only container (populated fresh per Print click
   with every section/topic flattened into one document, see
   ui_toolkit.pjs's _buildPrintableHtml) is meant to ever actually
   print — everything else on the page (the desktop shell, taskbar, the
   modal's own on-screen dark chrome) is hidden outright rather than
   printed as-is. A deliberately separate LIGHT, high-contrast palette
   for the printed content specifically, not a reuse of either the
   site's on-screen dark theme or its light `data-theme="light"`
   variant — printed output isn't shown in the viewer's own theme
   context those tokens key off of, and the on-screen dark scheme
   wastes ink/toner and reads poorly on paper regardless of theme.

   Every selector below is scoped under body:has(.lb-docbrowser-print-only)
   — this stylesheet is loaded on EVERY page of the site, not just
   App Studio's, so an unscoped "hide everything but the open dialog"
   print rule would have silently broken printing on every other page
   the instant this shipped (found before deploying, not after — a
   real near-miss caught by tracing exactly which documents load this
   file). Real VB6/App Studio's own Manual is always opened from
   INSIDE the /studio/ iframe (standard.pjs bounces any top-level
   subpage load through / — see project_cdp_verification_gotchas.md),
   so calling window.print() from there prints just that iframe's own
   document in a real browser (well-established native behavior for
   iframe.contentWindow.print()) — the TOP-level shell page, which
   never itself contains .lb-docbrowser-print-only, correctly never
   matches this scoping condition and is left completely alone. */
@media print {
    body:has(.lb-docbrowser-print-only) > *:not(.lb-dlg-ov) {
        display: none !important;
    }
    body:has(.lb-docbrowser-print-only) .lb-dlg-ov:not(:has(.lb-docbrowser-print-only)) {
        display: none !important;
    }
    .lb-dlg-box.lb-docbrowser-modal {
        position: static !important;
        width: auto !important;
        height: auto !important;
        max-width: none !important;
        max-height: none !important;
        box-shadow: none !important;
        border-radius: 0 !important;
        overflow: visible !important;
    }
    .lb-docbrowser-header,
    .lb-docbrowser-body {
        display: none !important;
    }
    .lb-docbrowser-print-only {
        display: block !important;
        color: #111111 !important;
        background: #ffffff !important;
        font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif !important;
    }
    .lb-docbrowser-print-only h1 {
        font-size: 1.4rem !important;
        margin: 1.6em 0 0.4em !important;
        border-bottom: 2px solid #111111 !important;
        padding-bottom: 0.2em !important;
        page-break-after: avoid !important;
    }
    .lb-docbrowser-print-only h1.lb-docbrowser-print-section {
        page-break-before: always !important;
    }
    .lb-docbrowser-print-only h1:first-child {
        page-break-before: avoid !important;
    }
    .lb-docbrowser-print-topic {
        page-break-inside: avoid !important;
        margin-bottom: 1.2em !important;
    }
    .lb-docbrowser-print-topic h2 {
        font-size: 1.05rem !important;
        margin: 0.8em 0 0.3em !important;
        color: #111111 !important;
    }
    .lb-docbrowser-print-topic p {
        margin: 0.3em 0 !important;
        line-height: 1.5 !important;
        color: #222222 !important;
    }
    .lb-docbrowser-print-syntax,
    .lb-docbrowser-print-example {
        background: #f2f2f2 !important;
        border: 1px solid #cccccc !important;
        border-radius: 4px !important;
        padding: 8px 10px !important;
        font-family: 'Courier New', Consolas, monospace !important;
        font-size: 0.85rem !important;
        white-space: pre-wrap !important;
        word-wrap: break-word !important;
        color: #111111 !important;
    }
    .lb-docbrowser-print-topic table {
        border-collapse: collapse !important;
        margin: 0.4em 0 !important;
    }
    .lb-docbrowser-print-topic table td {
        border: 1px solid #cccccc !important;
        padding: 4px 8px !important;
        vertical-align: top !important;
        color: #222222 !important;
    }
    .lb-docbrowser-print-seealso {
        font-style: italic !important;
        color: #555555 !important;
    }
}

/* ── Rules relocated to end-of-file (2026-08-15) ─────────────────────
   A real, confirmed browser-parser bug, not a code-quality issue:
   #lb-wingpanel and .lb-quicksettings-popover's own rule bodies used to
   live inline near their related CSS (taskbar/tray section, ~line
   21900-22800) but were SILENTLY DROPPED from the parsed stylesheet at
   that position — confirmed via direct CDP inspection
   (document.styleSheets[0].cssRules never contained them, despite the
   exact response bytes the browser received over the network, verified
   byte-for-byte via Network.getResponseBody, containing perfectly valid
   CSS text for both rules). Ruled out, one at a time, via direct
   in-browser testing before landing on this fix: not a content/syntax
   issue (renaming the selector or replacing the whole declaration block
   with a single trivial property, e.g. `color: red`, still didn't
   parse); not a network/streaming issue (re-fetching the exact response
   text via plain fetch() and injecting it through a fresh <style> tag
   reproduced the identical drop, deterministically, across repeated
   runs). What DID fix it: relocating the exact same, unmodified rule
   text to the very end of this ~920KB, ~3200-rule stylesheet — strongly
   suggests some hard internal limit/threshold in Blink's CSS parser
   tied to this file's sheer size or accumulated selector complexity
   (this file also carries two ~2500-character `:not()`-chain reset
   selectors), rather than anything about these two rules specifically.
   If a FUTURE new rule mysteriously fails to apply despite reading back
   correctly from disk/network, re-run this same battery of tests before
   assuming it's a specificity/exclusion-list problem (this session's
   usual landmine) — it might be this instead, and the fix is the same:
   move the rule here. */
#lb-wingpanel {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: var(--lb-wingpanel-h);
    z-index: 2147483647;
    display: flex;
    align-items: center;
    padding: 0 8px;
    gap: 8px;
    /* Was flat var(--bg_raised), no backdrop-filter — "a plain thin flat
       bar, not the taskbar's own Mica/blur treatment below." Given real
       glass tier 2 treatment 2026-08-19, matching the dock it sits
       above. */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent);
    backdrop-filter: var(--glass-blur-2);
    -webkit-backdrop-filter: var(--glass-blur-2);
    border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
    font-family: -apple-system, 'Segoe UI', 'Noto Sans', 'Helvetica Neue', sans-serif;
    overflow: visible;
}
.lb-quicksettings-popover {
    position: absolute;
    top: 100%;
    right: 0;
    margin-top: 8px;
    min-width: 220px;
    max-width: 320px;
    max-height: 320px;
    overflow-y: auto;
    padding: 8px !important;
    /* Was completely flat — no background/shadow/radius of its own at
       all. Given real glass tier 2 treatment 2026-08-19 (floating
       chrome), matching the Wingpanel it drops down from. */
    background: color-mix(in srgb, var(--bg_raised) 78%, transparent) !important;
    backdrop-filter: var(--glass-blur-2) !important;
    -webkit-backdrop-filter: var(--glass-blur-2) !important;
    border: 1px solid color-mix(in srgb, var(--border) 55%, transparent) !important;
    border-radius: var(--theme-radius) !important;
    box-shadow: var(--elevation-3) !important;
}
/* Relocated same-day, same reason (2026-08-15) — turned out removing
   #lb-wingpanel's own rule body from its original spot just shifted the
   parser's drop onto the NEXT rule sitting where it used to be
   (.lb-wingpanel-left/.lb-wingpanel-right/.lb-wingpanel-center),
   confirming the "danger zone" is positional, not tied to any one
   specific rule. Moved here too rather than chasing it further —
   nothing placed after this point in the file has been observed to
   drop across several rounds of testing today. */
.lb-wingpanel-left,
.lb-wingpanel-right {
    display: flex;
    align-items: center;
    gap: 3px;
    flex: 1;
    min-width: 0;
}
.lb-wingpanel-right {
    justify-content: flex-end;
}
.lb-wingpanel-center {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
/* Additive override (2026-08-15), NOT a relocation — same parser drop
   as the rules above, but this time the ORIGINAL #lb-taskbar rule
   (~line 21944) is left completely untouched rather than deleted,
   because deleting-and-relocating each victim in turn was itself the
   problem: removing N bytes from the middle shifts every rule after it
   up by N bytes, which moved the SAME drop onto whatever rule newly
   landed at that byte offset — first #lb-wingpanel, then
   .lb-wingpanel-left/right/center, now #lb-taskbar, three rounds of an
   otherwise-endless chase. Adding a full duplicate here instead (same
   selector, same specificity — CSS cascade means the one that actually
   PARSES, wherever it lands, simply wins on every property they share)
   fixes it without deleting anything, so nothing downstream shifts.
   Whether the original mid-file copy also happens to parse or not no
   longer matters. */
#lb-taskbar {
    position: fixed;
    left: 50%;
    bottom: 6px;
    transform: translateX(-50%);
    z-index: 2147483647;
    display: flex;
    align-items: center;
    gap: 3px;
    padding: 4px !important;
    margin: 0 !important;
    border-radius: 12px !important;
    border: 1px solid color-mix(in srgb, var(--border) 55%, transparent) !important;
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.28) !important;
    background: color-mix(in srgb, var(--bg_raised) 82%, transparent) !important;
    backdrop-filter: blur(16px) saturate(140%) !important;
    -webkit-backdrop-filter: blur(16px) saturate(140%) !important;
    overflow: visible !important;
    animation: none !important;
    font-family: -apple-system, 'Segoe UI', 'Noto Sans', 'Helvetica Neue', sans-serif;
}

/* -- Forced-traditional overrides (2026-08-15) ----------------------
   Auto-generated companion rules for every @media (max-width: 767px)
   block in this file -- 34 blocks, 140 rules total
   (nested at-rules, e.g. @media (display-mode: standalone), preserved
   as-is with only their OWN inner selectors transformed).
   The "Traditional" choice in the new mandatory layout picker
   (index-early-bind.js) needs traditional-mode styling to genuinely
   apply even when the real browser window is wide (a real, pre-existing
   architectural gap found while building that picker: every one of
   these rules was ONLY ever gated by the real viewport via @media, with
   no class-based equivalent, unlike desktop-mode which already was
   class-driven). html.lb-force-traditional is added by the picker
   alongside desktop-mode's own removal when "Traditional" is explicitly
   chosen; these rules mirror their @media source EXACTLY (same
   selectors, same declarations) but gated on that class instead of the
   real viewport, so they activate regardless of actual window width.
   The original @media blocks are completely untouched -- this is a pure
   addition, not a rewrite, so the site's natural responsive behavior
   for anyone who HASN'T used the picker (or picked nothing yet) is
   unaffected. Kept in one block at the end of the file rather than
   inline after each source block -- see this file's own "Rules relocated
   to end-of-file" comment for why late-file-only insertions are the
   safe pattern for large additions here. */
html.lb-force-traditional .lb-dlg-box.lb-docbrowser-modal {
        width: 100vw !important;
        height: 100vh !important;
        max-width: 100vw !important;
        max-height: 100vh !important;
        border-radius: 0 !important;
    }
html.lb-force-traditional .lb-docbrowser-body {
        flex-direction: column !important;
    }
html.lb-force-traditional .lb-docbrowser-nav {
        width: 100% !important;
        max-height: 40vh !important;
        border-right: none !important;
        border-bottom: 1px solid #dcdfe3 !important;
    }
html.lb-force-traditional .lb-docbrowser-search-input {
        max-width: none !important;
    }
html.lb-force-traditional .lb-docbrowser-content {
        padding: 16px 18px !important;
    }
html.main-frame.lb-force-traditional #site-traditional-nav {
        display: flex;
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        height: calc(56px + env(safe-area-inset-bottom));
        padding-bottom: env(safe-area-inset-bottom);
        z-index: 9000;
        background: var(--bg_raised);
        align-items: stretch;
    }
html.main-frame.lb-force-traditional #site-traditional-nav a {
        flex: 1;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        color: var(--color_text_normal) !important;
        text-decoration: none !important;
        font-size: 11px;
        letter-spacing: 0.06em;
        text-transform: uppercase;
        gap: 4px;
        opacity: 0.5;
        transition: color 0.15s ease, opacity 0.15s ease !important;
        min-height: 0;
        padding: 6px 4px 0;
        background: transparent !important;
        box-shadow: none !important;
    }
html.main-frame.lb-force-traditional #site-traditional-nav a.active,
html.main-frame.lb-force-traditional #site-traditional-nav a:hover {
        color: var(--color_primary) !important;
        opacity: 1;
    }
html.main-frame.lb-force-traditional #site-traditional-nav a svg {
        width: 22px;
        height: 22px;
        flex-shrink: 0;
    }
html.main-frame.lb-force-traditional #site-traditional-nav a span {
        font-size: 11px;
        letter-spacing: 0.06em;
        text-transform: uppercase;
    }
html.main-frame.lb-force-traditional body {
        padding-bottom: calc(56px + env(safe-area-inset-bottom)) !important;
    }
html.lb-force-traditional #div_top_page_actions {
        /* Was right:clamp(60px,9vw,100px) — measurably overlapped
           #nav_srch_link's own [right:clamp(36px,5vw,64px)] footprint plus
           its ~40px text at common phone widths (e.g. 412px wide: actions
           box landed at [281,372], Search at [359,396] — a real 13px
           overlap, not just visual tightness). Mirrors the desktop fix's
           clearance math (ui_style.php ~3405) scaled down for traditional. */
        right: clamp(100px, 15vw, 140px);
        max-width: clamp(70px, 18vw, 130px);
        gap: 4px;
    }
html.lb-force-traditional #div_top_page_actions .lb-input { display: none !important; }
html.lb-force-traditional #div_top_page_actions .div-top-checkbox-label { display: none !important; }
html.lb-force-traditional #div_top_page_actions .lb-toggle { display: none !important; }
html.lb-force-traditional #div_top_page_actions .lb-status { display: none !important; }
html.lb-force-traditional #div_left {
        width: min(88vw, 320px);
    }
html.lb-force-traditional #div_left_brand {
        padding: max(14px, env(safe-area-inset-top, 0px)) 18px 12px max(18px, env(safe-area-inset-left, 0px));
    }
html.lb-force-traditional #div_left .a_nav_link,
html.lb-force-traditional #div_left .a_cmd_link {
        padding: 0 20px !important;
        font-size: 1rem !important;
        min-height: 44px !important;
    }
html.lb-force-traditional #div_top::before {
        width: 44px;
        border-radius: var(--theme-radius-xs);
    }
html.lb-force-traditional #div_top::after {
        width: 22px;
    }
html.lb-force-traditional #div_top #menu_icon {
        width: 44px;
        height: 44px;
        padding: 9px;
        object-fit: contain;
        left: 0;
        filter: brightness(0) !important;
        z-index: 3;
    }
html.lb-force-traditional #div_bottom { display: none !important; }
html.lb-force-traditional #iframe_right {
        top: calc(50px + env(safe-area-inset-top, 0px) + 16px);
        height: calc(100dvh - 50px - env(safe-area-inset-top, 0px) - 56px - env(safe-area-inset-bottom, 0px) - 32px);
        left: 16px;
        width: calc(100% - 32px);
        padding: 0;
    }
html.lb-force-traditional #div_top {
        height: calc(50px + env(safe-area-inset-top, 0px));
        padding-top: env(safe-area-inset-top, 0px);
    }
html.lb-force-traditional #div_left { z-index: 150; }
html.lb-force-traditional #tnh_wrap,
html.lb-force-traditional #tnh { display: none !important; }
html.lb-force-traditional #div_content {
        padding-bottom: calc(56px + env(safe-area-inset-bottom)) !important;
    }
html.lb-force-traditional .glass-panel,
html.lb-force-traditional .wall-entry,
html.lb-force-traditional .ui-surface { border-radius: var(--theme-radius-xs) !important; }
html.lb-force-traditional .gb-panel,
html.lb-force-traditional .gb-form { border-radius: var(--theme-radius-xs); }
html.lb-force-traditional #login {
        margin-top: max(48px, env(safe-area-inset-top, 0px));
        margin-bottom: max(24px, env(safe-area-inset-bottom, 0px));
        margin-left: auto;
        margin-right: auto;
        max-width: 100%;
        padding-top:    24px;
        padding-bottom: 24px;
        padding-left:   max(24px, env(safe-area-inset-left, 0px));
        padding-right:  max(24px, env(safe-area-inset-right, 0px));
    }
html.lb-force-traditional #login {
        margin: 16px;
        width: calc(100% - 32px);
    }
html.lb-force-traditional #login input[type="text"],
html.lb-force-traditional #login input[type="password"] {
        font-size: 1.23rem !important;
        min-height: 44px;
    }
html.lb-force-traditional #login input[type="submit"] {
        min-height: 44px;
        font-size: 1.23rem !important;
    }
html.lb-force-traditional .su-panel {
        margin: max(16px, env(safe-area-inset-top, 16px)) 16px 16px;
        width: calc(100% - 32px);
        padding: 24px 20px 28px;
    }
html.lb-force-traditional .su-in,
html.lb-force-traditional .su-in[type="text"],
html.lb-force-traditional .su-in[type="email"],
html.lb-force-traditional .su-in[type="password"],
html.lb-force-traditional [data-role~="su-in"][type="password"] {
        font-size: 1.23rem !important;
        min-height: 44px;
    }
html.lb-force-traditional .su-btn { min-height: 44px; font-size: 1.15rem !important; }
html.lb-force-traditional #form_editor { overflow-y: auto; border-radius: var(--theme-radius-xs) !important; }
html.lb-force-traditional #form_editor > input[id=input_title] { margin: max(6px, env(safe-area-inset-top, 6px)) 10px 0; }
html.lb-force-traditional #form_editor > div[id=div_command_pallet] {
        padding-bottom: max(0px, env(safe-area-inset-bottom, 0px));
    }
html.lb-force-traditional #media_tree { flex: 0 0 180px; }
html.lb-force-traditional #media_filter { width: 100px !important; flex-shrink: 1 !important; min-width: 0 !important; }
html.lb-force-traditional #db_wrap { flex-direction: column; }
html.lb-force-traditional #db_sidebar {
        width: 100% !important;
        height: auto !important;
        flex-direction: row !important;
        flex-wrap: wrap !important;
        align-items: center !important;
        gap: 6px !important;
        padding: 8px 14px !important;
    }
html.lb-force-traditional #db_table_select {
        width: auto !important;
        flex: 1 !important;
        min-width: 120px !important;
        margin: 0 !important;
    }
html.lb-force-traditional #db_refresh_tables_btn,
html.lb-force-traditional #db_toggle_sql_btn {
        width: auto !important;
        min-width: 0 !important;
        flex: none !important;
        margin: 0 !important;
    }
html.lb-force-traditional .svc-card { grid-template-rows: auto auto auto auto; }
html.lb-force-traditional .svc-actions {
        grid-column: 1 / -1;
        grid-row: 4;
        justify-content: flex-start;
        padding-top: 6px;
    }
html.lb-force-traditional:has(#div_rom_list_toolbox) #div_top {
        padding-left:  max(14px, env(safe-area-inset-left, 0px));
        padding-right: max(14px, env(safe-area-inset-right, 0px));
    }
html.lb-force-traditional:has(#div_rom_list_toolbox) #div_left {
        width: 100%;
        border-right: none;
        padding-left:  env(safe-area-inset-left, 0px);
        padding-right: env(safe-area-inset-right, 0px);
    }
html.lb-force-traditional #div_rom_list_toolbox #select_game_consoles {
        height: 44px !important;
        font-size: 1.23rem !important;
    }
html.lb-force-traditional #div_rom_list_toolbox #input_search {
        width: calc(100% - 86px) !important;
        height: 44px !important;
        font-size: 1.23rem !important;
    }
html.lb-force-traditional #div_rom_list_toolbox #button_search {
        width: 78px !important;
        height: 44px !important;
        font-size: 0.85rem !important;
    }
html.lb-force-traditional .div_game_rom_list a {
        padding: 10px 12px;
        min-height: 44px;
        font-size: 0.92rem !important;
    }
html.lb-force-traditional:has(#div_rom_list_toolbox) #div_left > #totop {
        right: max(20px, env(safe-area-inset-right, 0px));
        bottom: max(16px, env(safe-area-inset-bottom, 0px));
    }
html.lb-force-traditional .chat-msg { border-radius: var(--theme-radius-xs) !important; }
html.lb-force-traditional #chat_header { border-radius: var(--theme-radius-xs) !important; }
@media (display-mode: standalone) {
html.lb-force-traditional #chat_header { padding-top: calc(12px + env(safe-area-inset-top)); }
}
html.lb-force-traditional #dm_convo_list {
        position: fixed;
        top: 0;
        left: -100%;
        height: 100dvh;
        z-index: 800;
        transition: left 0.22s ease;
        background: transparent !important;
        overflow-y: auto;
    }
html.dm-sidebar-open.lb-force-traditional #dm_convo_list { left: 0; }
html.lb-force-traditional .dm-msg { border-radius: var(--theme-radius-xs) !important; }
html.lb-force-traditional #dm_input_row {
        flex-wrap: wrap;
        row-gap: 6px;
        padding: 8px 10px;
        padding-bottom: max(10px, env(safe-area-inset-bottom, 0px));
    }
html.lb-force-traditional #dm_input_row::after {
        content: '';
        width: 100%;
        order: 5;
    }
html.lb-force-traditional .dm-tool-btn {
        order: 1;
        min-width: 44px !important;
        height: 44px !important;
    }
html.lb-force-traditional #dm_input {
        order: 10;
        height: 44px !important;
        min-height: 44px !important;
        max-height: 44px !important;
        font-size: 1rem !important;
    }
html.lb-force-traditional #dm_send_btn {
        order: 11;
        height: 44px !important;
        min-height: 44px !important;
        min-width: 44px !important;
        padding: 0 16px !important;
    }
@media (display-mode: standalone) {
html.lb-force-traditional:has(#dm_msgs) #div_top { padding-top: calc(8px + env(safe-area-inset-top)); }
}
html.lb-force-traditional #fs_nav_toggle { display: flex; }
html.lb-force-traditional .fs-toolbar-sep,
html.lb-force-traditional #fs_view_details { display: none; }
html.lb-force-traditional #fs_upload_toggle {
        font-size: 0 !important;
        padding: 0 !important;
        width: 38px !important;
    }
html.lb-force-traditional #fs_upload_toggle::before { content: '\2B06'; font-size: 1rem; }
html.lb-force-traditional #fs_filter { width: 70px !important; flex-shrink: 1 !important; min-width: 0 !important; }
html.lb-force-traditional #fs_body { position: relative; }
html.lb-force-traditional #fs_nav {
        position: absolute;
        top: 0; left: -180px; bottom: 0;
        z-index: 10;
        transition: left 0.2s ease;
    }
html.lb-force-traditional #fs_body.nav-open #fs_nav { left: 0; }
html.lb-force-traditional #fs_body.nav-open::after {
        content: '';
        position: absolute;
        inset: 0;
        z-index: 9;
        background: rgba(0, 0, 0, 0.4);
    }
html.lb-force-traditional .fm-traditional-toggle { display: flex; }
html.lb-force-traditional #fm_search { width: 70px; flex-shrink: 1; min-width: 0; }
html.lb-force-traditional #fm_tree {
        position: absolute;
        top: 0; left: -180px; bottom: 0;
        z-index: 10;
        transition: left 0.2s ease;
        background: transparent !important;
    }
html.lb-force-traditional #fm_tree.open { left: 0; }
html.lb-force-traditional #fm_main::after {
        content: ;
        position: absolute;
        inset: 0;
        z-index: 9;
        background: rgba(0, 0, 0, 0.4);
        display: none;
        pointer-events: none;
    }
html.lb-force-traditional #fm_tree.open ~ * + #fm_main::after { display: block; }
html.lb-force-traditional #mb_app { padding: 0 !important; }
html.lb-force-traditional .mb-row,
html.lb-force-traditional .mb-msg-row { min-height: 44px; }
html.lb-force-traditional .mb-msg-body { padding: .6rem 16px; word-break: break-word; }
html.lb-force-traditional .mb-compose { border-radius: var(--theme-radius-xs); margin: 8px; }
html.lb-force-traditional .mb-compose-body input,
html.lb-force-traditional .mb-compose-body textarea { font-size: 1.23rem !important; }
html.lb-force-traditional .mb-compose-actions button { min-height: 44px; }
html.lb-force-traditional .mb-crumb,
html.lb-force-traditional .mb-panel,
html.lb-force-traditional .mb-card { border-radius: var(--theme-radius-xs) !important; }
html.lb-force-traditional .mb-crumb { font-size: 0.92rem; padding: .5rem 16px; }
html.lb-force-traditional .mb-msg-date-cell { display: none; }
html.lb-force-traditional #tactical_lightbox_overlay {
        padding: 12px 0;
    }
html.lb-force-traditional #tactical_lightbox_inner_wrapper {
        grid-template-columns: 1fr;
        grid-template-rows: auto auto;
        width: 98vw;
        border-radius: var(--theme-radius-xs);
    }
html.lb-force-traditional #tactical_lightbox_media_container {
        min-height: min(45vh, 400px);
    }
html.lb-force-traditional #tactical_lightbox_media_container img,
html.lb-force-traditional #tactical_lightbox_media_container video {
        max-height: min(55vh, 540px) !important;
    }
html.lb-force-traditional #tactical_lightbox_comments_container {
    }
html.lb-force-traditional .wall-entry { border-radius: var(--theme-radius-xs) !important; }
html.lb-force-traditional #wall-new-post-input,
html.lb-force-traditional #wall-post-form textarea { font-size: 1.23rem !important; min-height: 44px; }
html.lb-force-traditional #wall-post-submit { min-height: 44px; }
html.lb-force-traditional .wall-comment-input { font-size: 1.23rem !important; min-height: 44px; }
html.lb-force-traditional .wall-comment-submit { min-height: 44px; }
html.lb-force-traditional .wall-entry-author { font-size: 0.95rem !important; }
html.lb-force-traditional .wall-entry-date { font-size: 0.75rem !important; }
html.lb-force-traditional .wall-entry-tags { font-size: 0.8rem !important; }
html.lb-force-traditional .wall-comments-title { font-size: 1.05rem !important; }
html.lb-force-traditional .wall-rx-bar button { font-size: 0.85rem !important; }
html.lb-force-traditional .wall-entry { max-width: 100% !important; }
html.lb-force-traditional .wall-share-btn,
html.lb-force-traditional .wall-edit-btn,
html.lb-force-traditional .wall-comment-form button { font-size: 0.69rem !important; padding: 4px 8px !important; }
html.lb-force-traditional .wall-entry img,
html.lb-force-traditional .wall-entry video {
        filter: none !important;
        transition: none !important;
        will-change: auto !important;
    }
html.lb-force-traditional body:has(.wall-entry img:hover) .wall-entry img:not(:hover),
html.lb-force-traditional body:has(.wall-entry img:hover) .wall-entry video,
html.lb-force-traditional body:has(.wall-entry video:hover) .wall-entry video:not(:hover),
html.lb-force-traditional body:has(.wall-entry video:hover) .wall-entry img {
        filter: none !important;
        transform: none !important;
    }
html.lb-force-traditional #private_fto_div_sidebar_div.open {
        width: 100vw;
    }
html.lb-force-traditional .private_fto_div_sidebar_div_sidebar_content_div {
        min-width: 100%;
        padding: 3%;
    }
html.lb-force-traditional .private_fto_upload_container,
html.lb-force-traditional .public_fto_upload_container {
        width: 95%;
        left: 2.5%;
        height: 35%;
    }
html.lb-force-traditional .private_fto_file_box_div,
html.lb-force-traditional .public_fto_file_box {
        width: 95%;
        left: 2.5%;
        top: 42%;
        height: 53%;
    }
html.lb-force-traditional #ac_div {
        flex-direction: column;
    }
html.lb-force-traditional #tc_div_status_div {
        font-size: 0.85rem;
        padding: 6px 10px;
        letter-spacing: 0;
    }
html.lb-force-traditional #bbs_cred_panel {
        font-size: 0.85rem;
        padding: 6px 10px;
    }
html.lb-force-traditional #ac_div button {
        min-height: 44px;
    }
html.lb-force-traditional #lb-user-card { display: none !important; }
html.lb-force-traditional #hud_palette { display: none; }
html.main-frame.lb-force-traditional #site-traditional-nav {
        border-top: 1px solid color-mix(in srgb, var(--color_primary) 28%, transparent);
    }
html.subpage.lb-force-traditional:not(.in-iframe) body {
        padding: 0 !important;
    }
html.subpage.lb-force-traditional:not(.in-iframe) .glass-panel,
html.subpage.lb-force-traditional:not(.in-iframe) .ui-surface {
        border-radius: var(--theme-radius-xs) !important;
        margin: 0 0 1px !important;
        border-left: none !important;
        border-right: none !important;
    }
html.subpage.lb-force-traditional:not(.in-iframe) input[type=text],
html.subpage.lb-force-traditional:not(.in-iframe) input[type=password],
html.subpage.lb-force-traditional:not(.in-iframe) input[type=email],
html.subpage.lb-force-traditional:not(.in-iframe) select,
html.subpage.lb-force-traditional:not(.in-iframe) textarea {
        width: 100% !important;
        min-width: 0 !important;
        box-sizing: border-box !important;
    }
html.subpage.lb-force-traditional:not(.in-iframe) .lb-row,
html.subpage.lb-force-traditional:not(.in-iframe) .row,
html.subpage.lb-force-traditional:not(.in-iframe) [class*="col-"] {
        flex-direction: column !important;
        width: 100% !important;
    }
html.lb-force-traditional #admin_tab_bar {
        transform: translateX(-100%);
        transition: transform 0.25s cubic-bezier(0.22, 1, 0.36, 1);
        position: fixed !important;
        top: 0 !important;
        left: 0 !important;
        height: 100dvh !important;
        width: min(88vw, 300px) !important;
        z-index: 300 !important;
        overflow-y: auto !important;
        box-shadow: none !important;
    }
html.admin-nav-open.lb-force-traditional #admin_tab_bar {
        transform: translateX(0);
    }
html.lb-force-traditional #admin_tab_content {
        margin-left: 0 !important;
        width: 100% !important;
    }
html.main-frame.lb-force-traditional #site-traditional-nav {
        background: color-mix(in srgb, var(--bg_dark) 95%, transparent) !important;
        border-top: 1px solid color-mix(in srgb, var(--accent) 40%, transparent) !important;
        box-shadow: none !important;
    }
html.lb-force-traditional .admin-tab-panel {
        padding: 12px !important;
    }
html.lb-force-traditional .lb-page-header {
        padding: 8px 12px !important;
        margin-bottom: 12px !important;
    }
html.lb-force-traditional .admin-tab-btn {
        padding-left: 12px !important;
        min-height: 44px !important;
        font-size: 0.85rem !important;
    }
html.lb-force-traditional .chat-msg {
        max-width: 88% !important;
    }
html.lb-force-traditional .chat-msg-content {
        padding: 8px 12px !important;
    }
html.lb-force-traditional #chat_input_wrap,
html.lb-force-traditional #dm_compose,
html.lb-force-traditional [id*="compose"],
html.lb-force-traditional [id*="chat_input"] {
        padding-bottom: calc(56px + env(safe-area-inset-bottom) + 4px) !important;
    }
html.lb-force-traditional #fm_tree {
        position: fixed !important;
        top: 0 !important;
        left: -100% !important;
        height: 100dvh !important;
        width: min(88vw, 280px) !important;
        z-index: 500 !important;
        transition: left 0.25s cubic-bezier(0.22, 1, 0.36, 1) !important;
    }
html.lb-force-traditional #fm_tree.open {
        left: 0 !important;
        box-shadow: none !important;
    }
html.lb-force-traditional #fm_main {
        margin-left: 0 !important;
        width: 100% !important;
    }
html.lb-force-traditional .wall-entry {
        border-left-width: 2px !important;
        margin: 0 0 2px !important;
        border-radius: var(--theme-radius-xs) !important;
    }
html.lb-force-traditional #lb-desktop-root,
html.lb-force-traditional #lb-taskbar {
        display: none !important;
    }

/* Additive override (2026-08-15), NOT a relocation — same parser drop
   as earlier today's Wingpanel/dock casualties, now hit
   #lb-layout-picker-overlay (the first rule of that block, inserted
   mid-file near #scifi_splash): confirmed live, Leo saw a genuinely
   unstyled, unpositioned, un-centered picker after logging back in
   (position:static/display:block/z-index:auto instead of the declared
   fixed/flex/100000 — every OTHER rule in that same block parsed fine,
   only this first one didn't). The original mid-file copy is left
   completely untouched rather than deleted, same reasoning as the
   #lb-taskbar case above: deleting-and-relocating shifts the SAME drop
   onto whatever rule newly lands at that byte offset instead of fixing
   anything. This duplicate — same selector, same properties — simply
   wins via cascade wherever it actually parses, which reliably means
   here at the end of the file. */
#lb-layout-picker-overlay {
    position: fixed;
    inset: 0;
    z-index: 100000;
    background: color-mix(in srgb, var(--bg_dark) 92%, transparent);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 1;
}

/* My Files — multi-select + organize (move), 2026-08-22. New selectors
   only (the pre-existing .fs-item-selected rules for icon/list/details
   views were edited in place near their own #fs_ribbon/.fs-icon-tile/
   .fs-list-row block — those already parse fine and aren't part of this
   append-at-end block). Appended here rather than inline near that block,
   per this file's own established landmine-avoidance convention (see the
   #lb-layout-picker-overlay comment right above). */
#fs_bulk_bar {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 6px 12px !important;
    background: transparent !important;
    min-height: 48px;
}
#fs_bulk_count {
    font-size: 0.88rem;
    font-weight: 600;
    color: var(--color_text_stressed) !important;
    flex: 1;
}
#fs_bulk_actions {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}

/* Folder tiles/rows/rows-in-table currently being dragged over as a valid
   move target — same accent language as .fs-item-selected above, plus a
   dashed outline so a drop target reads distinctly from a plain
   selection. .fs-drop-target and .fs-item-selected are both added to the
   universal background-flattener's own :not() exclusion chain (~line
   498) — without that, this !important background still loses to that
   rule's much higher chained-:not() specificity (documented landmine,
   see that rule's own comment history). outline needs !important too,
   same site-wide `* { outline: none !important; }` reset as
   .fs-item-selected above. */
.fs-icon-tile.fs-drop-target,
.fs-list-row.fs-drop-target,
tr.fs-drop-target td {
    background: color-mix(in srgb, var(--color_primary) 22%, transparent) !important;
}
.fs-icon-tile.fs-drop-target {
    outline: 2px dashed var(--color_primary) !important;
    outline-offset: -2px;
}
.fs-list-row.fs-drop-target,
tr.fs-drop-target td {
    outline: 1px dashed var(--color_primary) !important;
    outline-offset: -1px;
}
.fs-crumb.fs-drop-target {
    opacity: 1;
    text-decoration: underline;
    color: var(--color_primary) !important;
}

/* "Move to…" picker — LBKit.modal() custom content, see _do_move_ui(). */
.fs-move-dialog {
    display: flex;
    flex-direction: column;
    gap: 10px;
    min-width: 280px;
    max-width: 360px;
}
.fs-move-crumb {
    font-size: 0.82rem;
    padding-bottom: 6px;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
}
.fs-move-list {
    display: flex;
    flex-direction: column;
    gap: 2px;
    max-height: 240px;
    overflow-y: auto;
}
.fs-move-row {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 8px;
    border-radius: var(--theme-radius-xs);
    cursor: pointer;
    font-size: 0.85rem;
}
.fs-move-row:hover {
    background: color-mix(in srgb, var(--color_primary) 12%, transparent);
}
.fs-move-actions {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    padding-top: 4px;
}

/* File preview modal (double-click a previewable file in My Files),
   2026-08-22 — LBKit.modal() custom content, see _do_preview(). */
.fs-preview-modal {
    width: min(80vw, 900px);
    max-height: 82vh;
    display: flex;
    flex-direction: column;
}
.fs-preview-body {
    flex: 1;
    min-height: 200px;
    max-height: 68vh;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: auto;
}
.fs-preview-image {
    max-width: 100%;
    max-height: 68vh;
    object-fit: contain;
}
.fs-preview-frame {
    width: 100%;
    height: 68vh;
    border: none;
}
.fs-preview-audio {
    width: 100%;
}
.fs-preview-video {
    max-width: 100%;
    max-height: 68vh;
}
.fs-preview-text {
    width: 100%;
    max-height: 68vh;
    overflow: auto;
    white-space: pre-wrap;
    word-break: break-word;
    font-family: 'Courier New', Courier, monospace;
    font-size: 0.85rem;
    padding: 4px;
}
.fs-preview-actions {
    display: flex;
    justify-content: flex-end;
    padding-top: 10px;
}

/* Task Manager, 2026-08-22. */
#tm_wrap {
    padding: 12px;
    height: 100dvh;
    box-sizing: border-box;
    overflow: auto;
}
#tm_toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 12px;
}
#tm_title {
    font-size: 1.1rem;
    font-weight: 600;
}
#tm_table {
    width: 100%;
}

/* Recycle Bin panel, 2026-08-22. */
#fs_panel_trash {
    display: flex;
    flex-direction: column;
}
#fs_trash_toolbar {
    padding: 8px 0;
    display: flex;
    justify-content: flex-end;
}
.fs-trash-row-actions {
    display: flex;
    gap: 6px;
    margin-left: auto;
    flex-shrink: 0;
}

/* Settings page, 2026-08-22. */
#set_wrap {
    max-width: 640px;
    margin: 0 auto;
    padding: 20px;
}
#set_title {
    margin-bottom: 16px;
}
.set-section {
    margin-bottom: 24px;
}
.set-section h2 {
    font-size: 0.95rem;
    opacity: 0.7;
    margin-bottom: 8px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.set-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 0;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
}
.set-row-label {
    font-weight: 500;
}
.set-row-toggle {
    cursor: pointer;
}

/* Start Menu "Recently opened" (2026-08-22) — mirrors #div_left_recommended's
   own styling exactly, see index-early-bind.js's own comment on why this
   is a separate section rather than merged into that one. */
#div_left_recent {
    display: flex;
    flex-direction: column;
    gap: 6px;
    flex-shrink: 0;
    padding-bottom: 4px;
}
#div_left_recent_label {
    font-size: 0.78rem;
    font-weight: 700;
    color: var(--text);
    opacity: 0.75;
}
#div_left_recent_list {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin: 0;
    padding: 0;
    list-style: none;
}
#div_left_recent_list li.lb-recent-clickable {
    padding: 6px 8px;
    border-radius: 10px;
    font-size: 0.78rem;
    color: var(--text);
    opacity: 0.85;
    cursor: pointer;
}
#div_left_recent_list li.lb-recent-clickable:hover {
    opacity: 1;
    background: color-mix(in srgb, var(--text) 8%, transparent);
}

/* My Files right-click context menu + Properties dialog (2026-08-22) */
.fs-props-modal {
    width: min(420px, 90vw);
    max-height: min(80vh, 480px);
    overflow-y: auto;
}
.fs-props-dialog {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 4px 2px;
}
.fs-props-row {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    font-size: 0.88rem;
    border-bottom: 1px solid var(--border);
    padding-bottom: 8px;
}
.fs-props-row:last-child {
    border-bottom: none;
    padding-bottom: 0;
}
.fs-props-label {
    color: var(--text-dim);
    flex-shrink: 0;
}

/* Cross-app file-drop target (2026-08-22) — Chat/DM composer highlight
   when a My Files item is dragged over it. Outline/box-shadow only, no
   background — the background-flattener (~line 498) resets `background`
   on every div/section/etc. it doesn't explicitly exclude, and this class
   is used on plain composer <div>s that would otherwise need adding to
   that exclusion chain; staying outline-only sidesteps it entirely. */
.lb-dropzone-active {
    outline: 2px dashed var(--color_primary) !important;
    outline-offset: -2px;
    border-radius: var(--theme-radius-sm, 6px);
}

/* Theatrical power-action transition (2026-08-22) — Lock/Restart/Sign out.
   Lives in the top-level shell document (leobergamo/index.php has
   class="main-frame" on <html>, so the background-flattener at ~line 498
   — which only targets html:not(.main-frame) — never touches this at
   all; no exclusion-chain entry needed, unlike sub-page components).
   Same idiom as #lb-screensaver just above: max z-index, opacity+
   visibility transition so it's not interactive while hidden. */
#lb-poweraction-overlay {
    position: fixed;
    inset: 0;
    z-index: 2147483647;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 22px;
    background: color-mix(in srgb, var(--bg_base) 94%, black);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 0.5s ease, visibility 0s linear 0.5s;
}
#lb-poweraction-overlay.lb-poweraction-visible {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transition: opacity 0.5s ease, visibility 0s linear 0s;
}
#lb-poweraction-spinner {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    /* !important required — the site-wide universal reset
       (`* { border: none !important; }`, ui_style.php ~line 209) beats a
       plain `border` declaration on any new element. */
    border: 3px solid color-mix(in srgb, var(--text) 20%, transparent) !important;
    border-top-color: var(--color_primary) !important;
    animation: lb-poweraction-spin 0.9s linear infinite;
}
@keyframes lb-poweraction-spin {
    to { transform: rotate(360deg); }
}
#lb-poweraction-msg {
    font-family: var(--font-heading);
    font-size: clamp(18px, 2.4vw, 26px);
    font-weight: 600;
    color: var(--text);
    letter-spacing: 0.02em;
}
@media (prefers-reduced-motion: reduce) {
    #lb-poweraction-spinner { animation: none; }
}

/* Settings page — small hint text under the auto-restore toggle
   (2026-08-22). Separate from .set-row-label (that one's font-weight:500
   is meant for the actual field label, not a secondary explanatory
   line). */
.set-row-hint {
    font-size: 0.85em;
    opacity: 0.7;
    line-height: 1.4;
}

/* Volume slider (2026-08-22) — Quick Settings popover row + the plain
   <input type=range> reused as-is on the Settings page (.set-row-slider
   just widens it there; the accent-color styling is shared). */
.lb-quicksettings-vol-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 8px 10px;
}
.lb-quicksettings-vol-label {
    font-size: 0.8rem;
    color: var(--text);
}
.lb-quicksettings-vol-slider,
.set-row-slider {
    accent-color: var(--color_primary);
    cursor: pointer;
}
.lb-quicksettings-vol-slider {
    width: 110px;
}
.set-row-slider {
    width: 160px;
}

/* Window open/close zoom (2026-08-23, Leo: "when app frames are load,
   make them zoom in from center and zoom out of view" — originally
   scoped to .lb-window-appframe only, WIDENED same day once he
   clarified "app frame" meant windows generally: "the ones used for
   web app studio, write etc. do not use this behavior they just pop
   into view" — Studio/Write are plain LBKit.window() pages, not
   `/app-frame/`-prefixed Remote Apps at all, so the original scoping
   was too narrow). Now applies to every .lb-window-chrome. The base
   .lb-window-chrome rule (~line 20987) forces `animation: none
   !important`; a compound two-class selector beats that rule's
   specificity even with both carrying !important, so no need to touch
   the base rule itself. .lb-window-opening/.lb-window-closing are
   added/removed by LBKit.window()/LBKit.__closeWindow()
   (ui_toolkit.pjs) — opening's class comes off on animationend (or a
   safety-net setTimeout, in case prefers-reduced-motion below
   suppressed the animation and that event never fires); closing's
   class gates the ACTUAL chromeEl.remove() so the element stays in the
   DOM just long enough to play the zoom-out before disappearing.
   Appended at the very end of the file on purpose — this file has a
   documented history of silently dropping rules inserted mid-file once
   it grows past a certain size. */
@keyframes lb-window-zoom-in {
    from { opacity: 0; transform: scale(0.5); }
    to   { opacity: 1; transform: scale(1); }
}
@keyframes lb-window-zoom-out {
    from { opacity: 1; transform: scale(1); }
    to   { opacity: 0; transform: scale(0.5); }
}
.lb-window-chrome.lb-window-opening {
    animation: lb-window-zoom-in 0.22s cubic-bezier(0.16, 1, 0.3, 1) !important;
    transform-origin: center center;
}
.lb-window-chrome.lb-window-closing {
    animation: lb-window-zoom-out 0.18s ease-in !important;
    transform-origin: center center;
    pointer-events: none;
}
@media (prefers-reduced-motion: reduce) {
    .lb-window-chrome.lb-window-opening,
    .lb-window-chrome.lb-window-closing {
        animation: none !important;
    }
}

/* Temporary layout toggle — wingpanel half (2026-08-23). Same compact
   sizing as .lb-tray-bell/.lb-tray-clip-btn/.lb-tray-taskmgr-btn/
   .lb-tray-quicksettings-btn (~line 23309) — deliberately a NEW rule
   with the identical properties rather than adding this class to that
   existing selector list in place, per this file's own documented
   history of silently dropping rules edited mid-file; appending here
   is the safe pattern. That existing rule's own comment already
   documents exactly this failure mode once before (the clipboard
   button rendering oversized after being left out of it) — this avoids
   repeating it for the new button by giving it its own equivalent rule
   instead of risking the working one. */
.lb-tray-layout-toggle-btn {
    position: relative;
    padding: 2px 6px !important;
    margin: 0 !important;
    min-height: 26px !important;
    display: flex !important;
    align-items: center;
    justify-content: center;
}

/* Traditional-mode half of the same toggle — #div_top_switch_layout_link
   (leobergamo/index.php). #div_top is NOT a plain left-to-right flex
   row despite `display:flex` — it's `justify-content:center`, and
   #nav_srch_link/#div_top_page_actions both opt OUT of that centered
   group entirely via `position:absolute` pinned to the right edge (see
   those two rules a little above this one). A first pass that left
   this new link as a plain in-flow sibling landed it inside the
   CENTERED group instead, visually overlapping #span_title/#hud_clock
   — found live via CDP (the element was real and clickable per its own
   getBoundingClientRect, just visually buried under other text, so a
   click there hit whatever was actually on top at that pixel instead).
   Given the same absolute/right-edge treatment here: positioned
   further from the edge than BOTH of those (176px is
   #div_top_page_actions' own widest clamp() value — a slot that can
   hold variable per-page content, so anything closer risks colliding
   with whatever a given sub-page hoists there) with enough width for
   this link's own "Desktop" text on top of that. */
#div_top_switch_layout_link {
    position: absolute;
    right: clamp(200px, 22vw, 260px);
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;
    color: var(--color_text_normal);
    text-decoration: none;
    font-size: 0.78rem;
    letter-spacing: 0.02em;
    text-transform: none;
    opacity: 0.75;
}
#div_top_switch_layout_link:hover {
    opacity: 1;
}

/* Traditional-mode wallpaper (2026-08-23, Leo: extend the desktop-mode
   wallpaper feature to traditional mode too). Mirrors #lb-desktop-
   wallpaper's own treatment: fixed+inset:0, background-size:cover,
   sits behind the shell chrome. background-color falls back to the same
   plain theme background traditional mode has always shown, so leaving
   no wallpaper set stays a zero-visual-change no-op — only
   background-image (set by JS in index-early-bind.js from the same
   desktop-prefs-api.php wallpaper choice desktop mode uses, one shared
   preference for both layouts) actually changes anything. */
#lb-traditional-wallpaper {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 0;
    background-color: var(--theme-color-bg);
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
}
html.lb-force-traditional #lb-traditional-wallpaper {
    display: block;
}

/* Files upload dialog (2026-08-23). #fs_upload_panel started as an in-
   flow toolbar block, briefly became a LBKit.popover() anchored under
   the Upload button, then Leo: "make the popup a modal popup that
   covers the files app frame. it's too tiny." — a small anchored
   dropdown was the wrong shape for a form this size; now a real
   LBKit.modal() (leobergamo/files/index.php), same shape as the "Move
   to…" dialog below. Wider than .lb-dlg-box's own default
   (min(92vw,420px)) to give the dropzone + two-field visibility/
   password row real room — matches .lb-upl-box's own established
   sizing for the same reason (a different, generic upload dialog
   elsewhere on the site, standard.pjs's APP_STANDARD.upload_files()). */
.fs-upload-modal {
    width: min(94vw, 520px);
}

/* Files sortable details-view headers (2026-08-23, LBKit.table()'s new
   opt-in sortable-header support) — cursor + hover cue so a plain <th>
   reads as clickable, active column gets a subtle accent tint to match
   the ▲/▼ indicator LBKit.table() already appends as text. */
.lb-table-th-sortable {
    cursor: pointer;
}
.lb-table-th-sortable:hover {
    color: var(--color_primary) !important;
}
.lb-table-th-sorted {
    color: var(--color_primary) !important;
}

/* Traditional bottom nav bar clipping fix (2026-08-23, Leo: "no clipped
   elements like I seen with the Files page and navigation bar in
   traditional mode"). Root cause, confirmed via CDP's
   CSS.getMatchedStylesForNode: the generic content-panel padding rule
   "`.glass-panel, .ui-surface, .container, header, nav, #div_right,
   .rco_div, .wall-entry { padding: 25px; }`" (ui_style.php ~3990) matches
   #site-traditional-nav via its bare `nav` tag selector — never excluded
   because this purpose-built bottom tab bar (standard.pjs's
   inject_traditional_nav()) didn't exist yet when that rule was written.
   With box-sizing:border-box and a fixed height:56px, that unwanted 25px
   top padding squeezed the real content-box down to ~30px, so each
   link's icon+label (~51px needed) overflowed and got clipped by the
   nav's own overflow:hidden — every label rendered with its bottom half
   cut off. Simple ID-vs-tag specificity override, no !important needed
   (an earlier attempt forced an explicit height on the <a> children
   instead of fixing the padding — reverted; that papered over the
   symptom while leaving the real 25px padding in place, which just
   pushed the now-correctly-sized children down far enough to get clipped
   by the nav's bottom edge instead of overflowing their own). */
#site-traditional-nav {
    padding: 0;
}

/* News ticker + AI assistant desktop widgets (2026-08-23). Both widen
   past .lb-desktop-widget's own 220px default — a marquee needs some
   minimum width to read as scrolling text rather than a stutter, and a
   chat log/input needs real room. */
.lb-desktop-widget-ticker {
    width: 300px;
}
.lb-widget-ticker-track {
    overflow: hidden;
    white-space: nowrap;
    width: 100%;
}
.lb-widget-ticker-inner {
    display: inline-block;
    white-space: nowrap;
    padding-left: 100%;
    animation-name: _lb_widget_ticker_scroll;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
}
.lb-widget-ticker-inner a {
    color: var(--accent_lit) !important;
    text-decoration: none !important;
}
@keyframes _lb_widget_ticker_scroll {
    from { transform: translateX(0); }
    to   { transform: translateX(-100%); }
}

.lb-desktop-widget-ai {
    width: 320px;
}
.lb-widget-ai-body {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 8px !important;
}
.lb-widget-ai-log {
    display: flex;
    flex-direction: column;
    gap: 6px;
    max-height: 220px;
    overflow-y: auto;
}
.lb-widget-ai-bubble {
    font-size: 0.78rem;
    line-height: 1.4;
    padding: 6px 8px;
    border-radius: var(--theme-radius-xs);
    max-width: 90%;
    word-break: break-word;
    white-space: pre-wrap;
}
.lb-widget-ai-bubble-user {
    align-self: flex-end;
    background: color-mix(in srgb, var(--color_primary) 22%, transparent);
}
.lb-widget-ai-bubble-assistant {
    align-self: flex-start;
    background: color-mix(in srgb, var(--bg_dark) 60%, transparent);
}
.lb-widget-ai-bubble-system {
    align-self: center;
    opacity: 0.6;
    font-size: 0.72rem;
    text-align: center;
}
.lb-widget-ai-keyrow,
.lb-widget-ai-inputrow {
    display: flex;
    gap: 6px;
}
.lb-widget-ai-keyrow input,
.lb-widget-ai-inputrow input {
    flex: 1;
    min-width: 0;
    height: 30px;
    padding: 0 8px;
    font-size: 0.78rem;
}
.lb-widget-ai-keyrow button,
.lb-widget-ai-inputrow button {
    min-height: 30px !important;
    padding: 0 10px !important;
    font-size: 0.78rem !important;
}

/* ══════════════════════════════════════════════════════════════
   WRITE PAGE — Microsoft Word 365 redesign (2026-08-23)
   Scoped entirely under html.editor-page (already a distinct class on
   this page's own <html>, set at leobergamo/editor/index.php:55).
   Built 2026-08-23 as a literal light/white/blue Word clone; recoloured
   2026-08-24 onto this site's own live CSS custom-property palette per
   Leo's explicit request ("use the current color theme") rather than
   staying a hardcoded light skin. The layout metaphor is unchanged —
   ribbon, tabs, a distinct "paper" content surface raised off a darker
   surround — every literal hex value below is now a var(--...) token
   so this repaints automatically if the live palette (palette-loader.
   php) ever changes. !important is used throughout because this
   subpage is NOT in html.main-frame — the site's own background-
   flattener and generic-div-padding resets (both giant :not()-chain
   selectors near the top of this file) both reach subpages by design,
   and a plain override loses to their manufactured specificity every
   time; this file's own established pattern everywhere else is to
   escalate to !important rather than fight that, not a new landmine
   introduced here. ═══════════════════════════════════════════════ */
html.editor-page body {
    background: var(--bg_base) !important;
    font-family: 'Segoe UI', -apple-system, 'Helvetica Neue', Arial, sans-serif !important;
    color: var(--color_text_normal);
}
html.editor-page #editor_page_wrap {
    background: var(--bg_base) !important;
    min-height: 100dvh;
}
/* 2026-08-24: was a full solid accent-gradient bar (Word blue, then
   themed to the live accent) — Leo flagged the app as looking "ugly"
   after the theming pass, and a full-saturation fill clashes with how
   the rest of the site actually treats its accent colour (a highlight/
   border on a dark glass panel — see #lb-wingpanel — never a full-bleed
   background). Matching that established language instead: a flat
   raised panel with a thin accent stripe for identity, buttons left to
   inherit the normal themed .lb-btn rather than a bespoke translucent
   skin. */
html.editor-page .lb-page-header {
    background: var(--bg_raised) !important;
    color: var(--color_text_stressed) !important;
    padding: 6px 14px !important;
    border-bottom: 2px solid var(--color_primary) !important;
}
html.editor-page #form_editor {
    background: transparent !important;
    box-shadow: none !important;
    border: none !important;
    max-width: none;
}
/* 2026-08-24 reorder — title row now also carries the "Post settings"
   trigger (status/publish/pin/tags moved into a popover off this
   button; see editor-late-bind.js's "Post settings popover" block).
   position:relative so that popover (appended as this row's own DOM
   sibling) anchors here instead of drifting to whatever the nearest
   OTHER positioned ancestor happens to be. */
/* 2026-08-24 "airy" pass — title row/ribbon tabs/toolbar used to each
   carry their own border-bottom, four stacked hard-edged bars in a
   row. They're all "the chrome above the canvas" conceptually, so they
   now share one flat, seamless background with NO borders between
   them — the only remaining division is a single soft (low-opacity)
   line where the toolbar actually ends and the canvas begins, down at
   #div_command_pallet. */
html.editor-page #editor_title_row {
    position: relative;
    display: flex;
    align-items: center;
    gap: 10px;
    background: var(--bg_raised) !important;
    border-bottom: none !important;
    padding: 18px 28px !important;
}
html.editor-page #input_title {
    flex: 1;
    min-width: 0;
    background: transparent !important;
    color: var(--color_text_stressed) !important;
    border: none !important;
    font-size: 1.6rem !important;
    font-weight: 600;
    padding: 4px 0 !important;
}
html.editor-page #input_title::placeholder {
    color: var(--text_dim) !important;
}
/* 2026-08-24: Post settings/Posts/overflow-menu all moved into the
   window titlebar, just before Save (Leo's request) — see editor-
   late-bind.js's "hoisted into the titlebar" block. Their popovers are
   positioned entirely via JS (position:fixed, computed fresh off the
   trigger's own getBoundingClientRect() on every open — see that same
   block's comment for why: .lb-window-header-actions's overflow-x:auto
   would otherwise clip them, and a transformed window-chrome ancestor
   would break plain CSS position:fixed math). .lb-popover (~17672)
   still supplies the themed panel chrome; only sizing stays here. */
#editor_settings_popover {
    width: 320px;
    max-width: 90vw;
}
/* Unscoped (not html.editor-page-prefixed) — #editor_settings_panel_
   content now gets physically relocated into the PARENT shell's own
   document by editor-late-bind.js's hoisting code (see the comment
   above), whose <html> never carries the editor-page class at all.
   Every rule below used to be html.editor-page-scoped from when this
   content still rendered inside the /editor/ iframe itself — confirmed
   live those rules were silently not applying at all post-move
   (display:flex measuring back as plain "block"), which is what let
   #div_status_wrap's select/date-input fight for the same cramped row
   again (see that sub-comment, kept from when this bug was first
   fixed for the mail app's own account-settings popover — same root
   shape, different page). */
#editor_settings_panel_content {
    display: flex;
    flex-direction: column;
    gap: 10px;
}
#editor_meta_bar,
#editor_tags_row {
    background: transparent !important;
    border: none !important;
    padding: 2px !important;
}
/* #div_status_wrap's select + datetime-local input sat side by side
   fine when this bar spanned the full page width — inside the 320px
   popover they don't: a datetime-local input's intrinsic min-content
   width is wide (it has to fit its own internal segment/spinner UI),
   which left the status <select> squeezed down to ~30px, showing
   nothing (CDP-measured: select 30px wide next to a 300px date input
   in a 320px-wide parent, not a hypothetical). Stacking status/date
   vertically instead of forcing them into one cramped row. */
#editor_meta_bar {
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
}
#div_status_wrap {
    flex-direction: column;
    align-items: stretch;
    gap: 6px;
}
#div_status_wrap select,
#div_status_wrap input[type=datetime-local] {
    width: 100% !important;
    flex: none !important;
}
#div_pin_wrap {
    align-self: flex-start;
}

/* Write/Preview tabs — now part of the canvas-surround zone (bg_base,
   no border) rather than a fifth raised bar; the toolbar's own bottom
   edge is the one seam that separates "chrome" from "content" now. */
html.editor-page #editor_tabs_row {
    background: var(--bg_base) !important;
    border-bottom: none !important;
    padding: 14px 28px 0 !important;
}
html.editor-page #editor_tabs_row .lb-tab-btn {
    background: transparent !important;
    color: var(--color_text_normal) !important;
    border: none !important;
    border-bottom: 2px solid transparent !important;
    border-radius: 0 !important;
}
html.editor-page #editor_tabs_row .lb-tab-btn-active {
    color: var(--color_primary) !important;
    border-bottom-color: var(--color_primary) !important;
}

/* ── Ribbon ────────────────────────────────────────────────── */
html.editor-page #editor_ribbon_tabs {
    display: flex;
    gap: 2px;
    background: var(--bg_raised) !important;
    padding: 6px 28px 0 !important;
    border-bottom: none !important;
}
html.editor-page .editor-ribbon-tab {
    background: transparent !important;
    color: var(--color_text_normal) !important;
    border: none !important;
    border-radius: 4px 4px 0 0 !important;
    padding: 6px 16px !important;
    font-size: 0.85rem !important;
    cursor: pointer;
}
html.editor-page .editor-ribbon-tab:hover {
    background: color-mix(in srgb, var(--color_primary) 10%, var(--bg_raised)) !important;
}
html.editor-page .editor-ribbon-tab.is-active {
    background: color-mix(in srgb, var(--color_primary) 16%, var(--bg_raised)) !important;
    color: var(--color_primary) !important;
    font-weight: 600;
}
html.editor-page #div_command_pallet {
    background: var(--bg_raised) !important;
    border-bottom: 1px solid color-mix(in srgb, var(--color_border) 40%, transparent) !important;
    padding: 10px 28px !important;
    display: block !important;
    min-height: 64px;
}
html.editor-page .editor-ribbon-panel {
    display: none;
    align-items: flex-start;
    gap: 4px;
}
html.editor-page .editor-ribbon-panel.is-active {
    display: flex !important;
}
/* 2026-08-24: more breathing room — was padding:2px 14px 16px 2px/gap:3px,
   read as visibly cramped next to the rest of the site's spacing.
   Widened further the same day (still felt cramped) alongside
   softening .toolbar-sep below — a hard full-opacity divider between
   every group read as more "hard lines" than the groups' own spacing
   needed; letting whitespace do most of the separating and fading the
   line to a faint hint is the actual "airy" move. */
html.editor-page .toolbar_cmd_group {
    position: relative;
    display: flex;
    align-items: center;
    gap: 8px;
    /* bottom padding grown 20px->28px specifically to open a visible
       gap between the icon row and the group label (still bottom:0
       anchored) sitting under it — was reading as flush/touching. */
    padding: 8px 26px 28px 8px;
}
html.editor-page .editor-ribbon-group-label {
    position: absolute;
    left: 8px;
    bottom: 0;
    /* var(--fs-xs), not a bare rem value — this file's own :root sets
       html's font-size to a fluid clamp(12px, 2.5vw + 6px, 22px), not
       the usual fixed 16px, so 0.68rem here was actually computing to
       ~15px (CDP-confirmed) at this viewport, not the ~11px "small
       label" size intended. --fs-xs is the token this codebase already
       introduced specifically to keep small UI text a real fixed 10-12px
       regardless of that root scaling. Also given an explicit tight
       line-height — inheriting body's 1.7 line-height on top of even a
       correctly-small font-size still produced a line box far taller
       than the glyphs, which was quietly eating the "gap above the
       label" this rule exists to create. */
    font-size: var(--fs-xs);
    line-height: 1.2;
    color: var(--text_dim);
    white-space: nowrap;
}
html.editor-page .toolbar-sep {
    width: 1px;
    align-self: stretch;
    margin: 6px 4px 22px;
    background: color-mix(in srgb, var(--color_border) 35%, transparent) !important;
}
html.editor-page .toolbar_cmd_group .lb-btn,
html.editor-page #div_command_pallet button[data-role="toolbar_cmd_btn"] {
    background: transparent !important;
    color: var(--color_text_normal) !important;
    border: 1px solid transparent !important;
    border-radius: 3px !important;
    min-height: 30px !important;
    min-width: 30px !important;
    padding: 4px 6px !important;
    box-shadow: none !important;
}
html.editor-page .toolbar_cmd_group .lb-btn:hover {
    background: color-mix(in srgb, var(--color_primary) 14%, var(--bg_raised)) !important;
    border-color: color-mix(in srgb, var(--color_primary) 30%, transparent) !important;
}
html.editor-page .editor-ribbon-big-btn {
    height: 46px !important;
    min-height: 46px !important;
    flex-direction: column;
    font-size: 0.72rem !important;
    padding: 4px 12px !important;
}

/* Alignment icons — real mini bar-icons drawn with plain <span> elements
   (currentColor bars, no glyph/emoji at all) rather than the previous
   Unicode characters (⫷/≡/⫸/☰), which didn't read as "align left/
   center/right/justify" to begin with and carried the same tofu-box
   risk this session's own "+ New message" icon fix already ran into
   once. Bar widths per alignment are the same visual language every
   real word processor's toolbar already uses. */
html.editor-page .lb-align-icon {
    display: flex;
    flex-direction: column;
    gap: 2px;
    width: 16px;
}
html.editor-page .lb-align-icon span {
    display: block;
    height: 2px;
    border-radius: 1px;
    background: currentColor;
}
html.editor-page .lb-align-left span:nth-child(1) { width: 100%; }
html.editor-page .lb-align-left span:nth-child(2) { width: 65%; }
html.editor-page .lb-align-left span:nth-child(3) { width: 85%; }
html.editor-page .lb-align-center { align-items: center; }
html.editor-page .lb-align-center span:nth-child(1) { width: 100%; }
html.editor-page .lb-align-center span:nth-child(2) { width: 55%; }
html.editor-page .lb-align-center span:nth-child(3) { width: 80%; }
html.editor-page .lb-align-right { align-items: flex-end; }
html.editor-page .lb-align-right span:nth-child(1) { width: 100%; }
html.editor-page .lb-align-right span:nth-child(2) { width: 65%; }
html.editor-page .lb-align-right span:nth-child(3) { width: 85%; }
html.editor-page .lb-align-justify span { width: 100%; }

/* Text-color / highlight buttons — a bare "A"/"H" gave no hint these
   are about color specifically. A small colored bar underneath (a
   generic accent/yellow hint, not the actually-applied color — no
   existing state tracks that) signals "this button picks a color"
   without needing new JS. */
html.editor-page .lb-btn-color {
    flex-direction: column;
    gap: 2px;
    padding-bottom: 5px !important;
}
html.editor-page .lb-color-indicator {
    display: block;
    width: 16px;
    height: 3px;
    /* Flex item inside a flex-direction:column button (.lb-btn-color) —
       main axis is vertical there, so this span's height is subject to
       flex-shrink resolution like any other flex-basis, not simply
       respected as specified. Default flex-shrink:1 plus this empty
       span's content-based min-height:auto (0, nothing inside it) let
       the flex algorithm shrink it to 0 despite height:3px right here —
       confirmed via CSS.getMatchedStylesForNode: this rule was the ONLY
       one setting height, still computed to 0. flex-shrink:0 pins it to
       its specified size regardless of how tight the button's own space
       gets. */
    flex-shrink: 0;
    border-radius: 1px;
}
html.editor-page .lb-color-indicator-text {
    background: var(--color_primary);
}
html.editor-page .lb-color-indicator-highlight {
    background: #F5C542;
}

/* Small/Normal/Large — the buttons' OWN rendered size now hints their
   function directly (matches how real word processors' font-size
   controls often work), on top of the existing title="" tooltips. */
html.editor-page .toolbar_cmd_group .lb-btn[data-cmd="change_text_size_small"] {
    font-size: 0.68rem !important;
}
html.editor-page .toolbar_cmd_group .lb-btn[data-cmd="change_text_size_normal"] {
    font-size: 0.85rem !important;
}
html.editor-page .toolbar_cmd_group .lb-btn[data-cmd="change_text_size_large"] {
    font-size: 1.15rem !important;
    font-weight: 700 !important;
}

/* ── Page canvas — a raised "paper" surface on the theme's base bg ── */
html.editor-page #editor_content_wrap {
    background: var(--bg_base) !important;
    overflow-y: auto !important;
    overflow-x: hidden;
    display: block !important;
    padding: 28px 0 60px !important;
}
/* Specificity note: the existing #editor_content_wrap #div_content rule
   (ui_style.php ~9181, two chained IDs) outranks a plain html.editor-page
   #div_content selector on ID count alone regardless of !important —
   min-height:1100px silently lost to its own min-height:0 the first time
   this was written, CDP-confirmed via computed style (0px, not 1100px).
   Matching its own #editor_content_wrap #div_content shape (two IDs)
   plus the .editor-page class guarantees this always wins instead of
   depending on !important source-order alone. */
html.editor-page #editor_content_wrap #div_content {
    background: var(--bg_raised) !important;
    color: var(--color_text_stressed) !important;
    width: min(94vw, 850px);
    min-height: 1100px !important;
    margin: 0 auto;
    padding: 72px 84px !important;
    box-sizing: border-box;
    box-shadow: var(--elevation-3) !important;
    font-family: 'Calibri', 'Segoe UI', Georgia, serif;
    font-size: 1rem;
    line-height: 1.5;
    border: 1px solid var(--color_border) !important;
}
html.editor-page #editor_preview_pane.is-active {
    background: var(--bg_raised) !important;
    color: var(--color_text_stressed) !important;
    width: min(94vw, 850px);
    margin: 24px auto;
    padding: 72px 84px !important;
    box-shadow: var(--elevation-3) !important;
    border: 1px solid var(--color_border) !important;
}

/* ══════════════════════════════════════════════════════════════
   MAIL CLIENT — Outlook 365-style layout, themed
   Built 2026-08-23 as a literal light/white/blue Outlook clone;
   recoloured 2026-08-24 onto this site's own live CSS custom-
   property palette per Leo's explicit request, same pass as the
   Write page just above. Layout is unchanged (topbar, folder rail,
   list pane, reading pane, compose/account modals) — every literal
   hex value is now a var(--...) token. Same !important rationale as
   the Write page above (subpage, not in html.main-frame, has to
   clear the background-flattener/generic-padding resets). Rules that
   only duplicated an already-themed shared component (.lb-btn,
   .lb-input, .lb-label, um-btn-primary) had their local hardcoded
   overrides REMOVED rather than recoloured — those components already
   track the live theme on their own (see [data-role~="um-btn-primary"]
   ~line 8090, .lb-input ~line 944, .lb-label ~line 3696), and keeping
   a scoped override here would silently re-fork them the next time
   the palette changes.
   ══════════════════════════════════════════════════════════════ */
html.mail-page body {
    background: var(--bg_base) !important;
    font-family: 'Segoe UI', -apple-system, 'Helvetica Neue', Arial, sans-serif !important;
    color: var(--color_text_normal);
}
html.mail-page #mail_shell {
    position: fixed;
    inset: 0;
    display: flex;
    flex-direction: column;
    background: var(--bg_base) !important;
}
html.mail-page #mail_topbar {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 16px;
    /* 2026-08-24: was a full solid accent-gradient bar — see the
       matching comment on html.editor-page .lb-page-header above for
       why this changed to a flat panel + accent stripe instead. */
    background: var(--bg_raised) !important;
    border-bottom: 2px solid var(--color_primary) !important;
    flex-shrink: 0;
}
html.mail-page #mail_topbar_spacer { flex: 1; }
html.mail-page #mail_account_select {
    max-width: 220px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

html.mail-page #mail_body {
    flex: 1;
    display: flex;
    min-height: 0;
}
html.mail-page #mail_folders {
    width: 190px;
    flex-shrink: 0;
    background: var(--bg_raised) !important;
    border-right: 1px solid var(--color_border) !important;
    overflow-y: auto;
    padding: 10px 0;
}
/* display/width/margin/font-size all need !important here — a sitewide
   universal reset (ui_style.php ~825, `button, input[type=submit], ...,
   .lb-btn { display:inline-flex!important; width:auto!important;
   margin:5px!important; font-size:1rem!important; ... }`) targets every
   bare <button> regardless of class, and !important beats a plain
   declaration even when this class selector's own specificity is
   already higher. Without this, these buttons rendered as inline-flex
   pills with 5px gaps that wrapped based on label length instead of a
   uniform stacked list — short labels like "Sent"/"Trash" ended up
   sitting side by side on one row while longer ones got their own,
   which is what actually read as "not uniform". */
.mail-folder-btn {
    display: block !important;
    width: 100% !important;
    margin: 0 !important;
    text-align: left;
    background: transparent !important;
    color: var(--color_text_normal) !important;
    border: none !important;
    padding: 8px 16px !important;
    font-size: 0.86rem !important;
    border-radius: 0 !important;
    cursor: pointer;
}
.mail-folder-btn:hover { background: color-mix(in srgb, var(--color_primary) 10%, var(--bg_raised)) !important; }
.mail-folder-btn.active {
    background: color-mix(in srgb, var(--color_primary) 18%, var(--bg_raised)) !important;
    color: var(--color_primary) !important;
    font-weight: 600;
    border-left: 3px solid var(--color_primary) !important;
}

html.mail-page #mail_list_pane {
    width: min(30vw, 380px);
    flex-shrink: 0;
    border-right: 1px solid var(--color_border) !important;
    display: flex;
    flex-direction: column;
    background: var(--bg_base) !important;
}
html.mail-page #mail_search_row {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 8px 12px;
    border-bottom: 1px solid var(--color_border) !important;
    flex-shrink: 0;
}
html.mail-page #mail_search_input {
    margin: 0 !important;
    min-height: 30px !important;
}
html.mail-page #mail_search_clear_btn {
    flex-shrink: 0;
    min-width: 30px !important;
    min-height: 30px !important;
    padding: 0 !important;
    margin: 0 !important;
    font-size: 1.1rem !important;
    line-height: 1 !important;
}
html.mail-page #mail_filter_row {
    display: flex;
    gap: 6px;
    padding: 6px 12px;
    border-bottom: 1px solid var(--color_border) !important;
    flex-shrink: 0;
}
/* Real <button> elements — display/margin/font-size/padding/min-height
   all need !important here for the same reason .mail-folder-btn does
   (ui_style.php's own comment on that rule): the sitewide universal
   `button, ..., .lb-btn { display:inline-flex!important; margin:5px
   !important; font-size:1rem!important; padding:0 16px!important;
   min-height:32px!important; ... }` reset targets every bare <button>
   regardless of class, and !important always wins over a plain
   declaration regardless of this class selector's own specificity. */
.mail-filter-btn {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    padding: 3px 12px !important;
    margin: 0 !important;
    min-height: 0 !important;
    font-size: 0.76rem !important;
    border-radius: var(--theme-radius-xs) !important;
    background: transparent !important;
    color: var(--text_dim) !important;
    border: 1px solid var(--color_border) !important;
    cursor: pointer;
}
.mail-filter-btn:hover {
    color: var(--color_text_normal) !important;
    border-color: color-mix(in srgb, var(--color_primary) 40%, transparent) !important;
}
.mail-filter-btn.active {
    background: color-mix(in srgb, var(--color_primary) 18%, var(--bg_raised)) !important;
    color: var(--color_primary) !important;
    border-color: var(--color_primary) !important;
    font-weight: 600;
}
#mail_load_more_btn {
    display: block !important;
    width: calc(100% - 24px) !important;
    margin: 10px 12px !important;
}
html.mail-page #mail_list_hdr {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    padding: 10px 16px;
    border-bottom: 1px solid var(--color_border) !important;
    font-weight: 700;
}
html.mail-page #mail_list_count {
    font-size: 0.75rem;
    opacity: 0.6;
    font-weight: 400;
}
html.mail-page #mail_list {
    flex: 1;
    overflow-y: auto;
}
.mail-list-row {
    padding: 10px 16px;
    border-bottom: 1px solid color-mix(in srgb, var(--color_border) 60%, transparent) !important;
    cursor: pointer;
    color: var(--color_text_normal);
}
.mail-list-row:hover { background: color-mix(in srgb, var(--color_primary) 8%, var(--bg_raised)) !important; }
.mail-list-row.active { background: color-mix(in srgb, var(--color_primary) 20%, var(--bg_raised)) !important; }
.mail-list-row.unread { background: color-mix(in srgb, var(--color_primary) 6%, var(--bg_base)) !important; }
.mail-list-row.unread .mail-row-from,
.mail-list-row.unread .mail-row-subject { font-weight: 700; }
.mail-row-top { display: flex; justify-content: space-between; gap: 8px; font-size: 0.82rem; }
.mail-row-from { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mail-row-date { flex-shrink: 0; opacity: 0.6; font-size: 0.74rem; }
.mail-row-subject { font-size: 0.84rem; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mail-row-snippet { font-size: 0.78rem; opacity: 0.6; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

html.mail-page #mail_reading_pane {
    flex: 1;
    min-width: 0;
    background: var(--bg_base) !important;
    overflow-y: auto;
    padding: 20px 28px;
}
html.mail-page #mail_reading_empty {
    color: var(--text_dim);
    text-align: center;
    margin-top: 60px;
}
html.mail-page #mail_reading_hdr {
    border-bottom: 1px solid var(--color_border) !important;
    padding-bottom: 12px;
    margin-bottom: 16px;
}
html.mail-page #mail_reading_subject {
    font-size: 1.3rem;
    font-weight: 700;
    margin-bottom: 8px;
    color: var(--color_text_stressed) !important;
}
html.mail-page #mail_reading_meta {
    display: flex;
    justify-content: space-between;
    font-size: 0.82rem;
    color: var(--text_dim) !important;
    margin-bottom: 10px;
}
html.mail-page #mail_reading_actions .lb-btn {
    margin-right: 6px;
}
html.mail-page #mail_reading_attachments {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    padding-bottom: 12px;
    margin-bottom: 4px;
    border-bottom: 1px solid var(--color_border) !important;
}
/* Outer chip is now a container for two pieces — the download link
   (its own visual identity, matching the original single-piece chip)
   and a "Save to Files" action button glued to its right edge. Split
   out when save-to-user_store was added so the chip could offer both
   actions without one fighting the other's click target. */
.mail-attachment-chip {
    display: inline-flex;
    align-items: stretch;
    border-radius: var(--theme-radius-sm);
    overflow: hidden;
    border: 1px solid var(--color_border);
}
.mail-attachment-link {
    display: inline-flex;
    align-items: baseline;
    gap: 8px;
    padding: 6px 12px;
    background: color-mix(in srgb, var(--color_primary) 8%, var(--bg_raised)) !important;
    text-decoration: none !important;
    cursor: pointer;
    transition: background 0.15s ease;
}
.mail-attachment-link:hover {
    background: color-mix(in srgb, var(--color_primary) 16%, var(--bg_raised)) !important;
}
.mail-attachment-name {
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--color_text_normal) !important;
    max-width: 220px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.mail-attachment-size {
    font-size: 0.72rem;
    color: var(--text_dim) !important;
}
/* Real <button> — display/margin/padding/min-height/border/border-radius
   all need !important, same sitewide-universal-button-reset reason
   documented on .mail-folder-btn/.mail-filter-btn above. */
.mail-attachment-save-btn {
    display: inline-flex !important;
    align-items: center !important;
    padding: 0 10px !important;
    margin: 0 !important;
    min-height: 0 !important;
    font-size: 0.72rem !important;
    border: none !important;
    border-left: 1px solid var(--color_border) !important;
    border-radius: 0 !important;
    background: var(--bg_raised) !important;
    color: var(--text_dim) !important;
    cursor: pointer;
    white-space: nowrap;
}
.mail-attachment-save-btn:hover {
    background: color-mix(in srgb, var(--color_primary) 14%, var(--bg_raised)) !important;
    color: var(--color_primary) !important;
}
.mail-attachment-save-btn:disabled {
    cursor: default;
    opacity: 0.7;
}
html.mail-page #mail_reading_body {
    font-size: 0.92rem;
    line-height: 1.6;
    white-space: pre-wrap;
    word-break: break-word;
    color: var(--color_text_normal) !important;
}
html.mail-page #mail_list_hdr,
html.mail-page .mail-row-from,
html.mail-page .mail-row-subject,
html.mail-page .mail-list-row {
    color: var(--color_text_stressed) !important;
}
html.mail-page .mail-row-date,
html.mail-page .mail-row-snippet,
html.mail-page #mail_list_count {
    color: var(--text_dim) !important;
}
html.mail-page .mail-folder-btn {
    color: var(--color_text_normal) !important;
}
html.mail-page .mail-folder-btn.active {
    color: var(--color_primary) !important;
}
.mail-body-frame {
    width: 100%;
    min-height: 300px;
    border: none;
    /* Not every real email sets its own background (plain-text-ish
       ones like Google's own security-alert/account emails often
       don't) — an iframe's document background defaults to
       transparent when unset, which let this site's own dark theme
       bleed through behind the message text, reading as broken. A
       background painted on the IFRAME ELEMENT ITSELF (not just its
       document) shows through wherever the embedded document is
       transparent, so this alone fixes it without touching the
       actual email HTML — matches the "paper" convention real email
       clients default to regardless of their own theme. */
    background: #fff !important;
}
.mail-empty {
    padding: 30px 16px;
    text-align: center;
    color: var(--text_dim);
    font-size: 0.86rem;
}
.mail-empty.mail-error { color: var(--color_danger) !important; }

/* ── Compose / account modals ─────────────────────────────────── */
html.mail-page .mail-compose-modal,
html.mail-page .mail-account-modal {
    width: min(92vw, 560px) !important;
    max-height: 86vh;
    overflow-y: auto;
    background: var(--bg_raised) !important;
    color: var(--color_text_normal) !important;
}
html.mail-page .mail-compose-modal .lb-dlg-title,
html.mail-page .mail-account-modal .lb-dlg-title {
    color: var(--color_primary) !important;
}
.mail-compose-form,
.mail-account-form {
    display: flex;
    flex-direction: column;
    gap: 10px;
}
#mail_c_body {
    min-height: 200px;
    resize: vertical;
    font-family: inherit;
}
.mail-compose-actions {
    display: flex;
    gap: 8px;
    justify-content: flex-end;
}
.mail-account-section {
    font-size: 0.85rem;
    color: var(--color_primary) !important;
    margin: 6px 0 0;
    border-top: 1px solid var(--color_border);
    padding-top: 10px;
}
/* Provider quick-setup hint (2026-08-24) — shown under the Quick setup
   picker once a preset provider is chosen/auto-detected, explaining
   that provider's own auth quirk (app password, OAuth, Bridge, etc). */
.mail-provider-hint {
    font-size: 0.78rem;
    line-height: 1.5;
    color: var(--color_text_normal) !important;
    background: color-mix(in srgb, var(--color_primary) 10%, transparent);
    border-left: 3px solid var(--color_primary);
    border-radius: var(--theme-radius-xs);
    padding: 8px 12px;
    margin: -2px 0 8px;
}
.mail-provider-hint b { color: var(--color_primary) !important; }
.mail-account-row { display: flex; gap: 10px; }
.mail-account-row .lb-field { flex: 1; min-width: 0; }
.mail-account-host { flex: 2 !important; }
.mail-account-port { flex: 0.6 !important; }
.mail-account-checkbox {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.8rem;
    color: var(--text_dim);
}
#mail_a_status,
#mail_c_status {
    font-size: 0.8rem;
    min-height: 1.2em;
    color: var(--color_primary);
}
.mail-existing-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 6px 0;
    border-bottom: 1px solid var(--color_border);
    font-size: 0.82rem;
}
.mail-existing-row .lb-btn {
    background: transparent !important;
    color: var(--color_danger) !important;
    border: none !important;
    font-size: 0.76rem !important;
    padding: 2px 6px !important;
    min-height: 0 !important;
}

/* Dashboard Security tab (2026-08-23) — matches the surrounding admin
   dashboard's own dark theme/token system (unlike the Write/Mail pages'
   deliberate light redesigns above, this section lives inside the
   existing Dashboard and should look like the rest of it). */
.sec-intro {
    color: var(--text_dim);
    font-size: 0.85rem;
    line-height: 1.5;
    max-width: 720px;
    margin: 0 0 16px;
}
.sec-intro code {
    background: color-mix(in srgb, var(--bg_dark) 60%, transparent);
    padding: 1px 5px;
    border-radius: 3px;
    font-size: 0.82em;
}
#sec_tool_grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 14px;
}
.sec-tool-card {
    background: var(--bg_raised);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.sec-tool-hdr { display: flex; flex-direction: column; gap: 2px; }
.sec-tool-name { font-weight: 700; font-size: 0.95rem; color: var(--text); }
.sec-tool-desc { font-size: 0.76rem; color: var(--text_dim); }
.sec-tool-status {
    font-size: 0.78rem;
    color: var(--text_dim);
    font-variant-numeric: tabular-nums;
}
.sec-status-running {
    color: var(--color_primary);
}
.sec-status-done {
    color: color-mix(in srgb, var(--color_primary) 70%, var(--text));
}
.sec-tool-actions {
    display: flex;
    gap: 8px;
    margin-top: auto;
}
#sec_output_wrap {
    margin-top: 18px;
    background: var(--bg_dark);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
    overflow: hidden;
}
#sec_output_hdr {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px 14px;
    border-bottom: 1px solid var(--color_border);
    font-weight: 600;
    font-size: 0.85rem;
}
#sec_output_pre {
    margin: 0;
    padding: 14px;
    max-height: 460px;
    overflow: auto;
    font-size: 0.78rem;
    line-height: 1.5;
    white-space: pre-wrap;
    word-break: break-word;
    color: var(--text);
}

/* Dashboard Documentation tab (2026-08-23) — same dark theme/token
   system as the Security tab above; the doc body's own .td-* classes
   (written into the generated HTML by techdoc-generator.php) are
   styled here since that content is injected via innerHTML, not
   present in this page's own static markup. */
#td_toolbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--color_border);
}
#td_generated_label {
    font-size: 0.8rem;
    color: var(--text_dim);
}
#td_doc_body {
    max-width: 900px;
    color: var(--text);
    font-size: 0.88rem;
    line-height: 1.65;
}
#td_doc_body h2 {
    font-size: 1.15rem;
    margin: 28px 0 10px;
    color: var(--color_primary);
    border-bottom: 1px solid var(--color_border);
    padding-bottom: 6px;
}
#td_doc_body h2:first-child { margin-top: 0; }
#td_doc_body h3 {
    font-size: 0.95rem;
    margin: 18px 0 8px;
    color: var(--text);
}
#td_doc_body p { margin: 0 0 12px; }
#td_doc_body code {
    background: color-mix(in srgb, var(--bg_dark) 60%, transparent);
    padding: 1px 5px;
    border-radius: 3px;
    font-size: 0.85em;
}
.td-meta {
    font-size: 0.75rem;
    color: var(--text_dim);
    margin-top: -6px !important;
}
.td-kv {
    width: 100%;
    border-collapse: collapse;
    margin: 8px 0 16px;
}
.td-kv th {
    text-align: left;
    padding: 4px 12px 4px 0;
    color: var(--text_dim);
    font-weight: 600;
    white-space: nowrap;
    vertical-align: top;
    width: 1%;
}
.td-kv td {
    padding: 4px 0;
    border-bottom: 1px solid color-mix(in srgb, var(--color_border) 50%, transparent);
}
.td-list {
    margin: 0 0 16px;
    padding-left: 20px;
}
.td-list li { margin-bottom: 6px; }
.td-footer {
    margin-top: 30px;
    padding-top: 14px;
    border-top: 1px solid var(--color_border);
    font-size: 0.72rem;
    color: var(--text_dim);
}

/* ── UI polish pass (2026-08-23, Leo: "spruce up the site ui and make
   it a bit fancier") ──────────────────────────────────────────────
   Deliberately light-touch: the site already went through a real
   glass/elevation/typography pass (2026-08-19) and the base .lb-btn
   rule explicitly forces `transform:none` / `box-shadow:none` on
   hover/active — a considered flat-GTK choice (Cinnamon/Mint-Y pass,
   2026-08-11), not an oversight. Rather than overriding that broadly
   (every button on the site), this adds a soft accent glow + a touch
   of extra lift specifically to PRIMARY-role buttons — the actual
   calls-to-action (Save, Send, Upload, etc.) — where a bit of extra
   presence reads as "fancier" without undoing the deliberate flat
   baseline everywhere else. */
[data-role~="um-btn-primary"]:hover,
[data-role~="int-btn-primary"]:hover,
[data-role~="bk-btn-primary"]:hover {
    box-shadow: 0 0 0 1px color-mix(in srgb, var(--color_primary) 45%, transparent),
                0 4px 16px color-mix(in srgb, var(--color_primary) 30%, transparent) !important;
    transform: translateY(-1px) !important;
}
[data-role~="um-btn-primary"]:active,
[data-role~="int-btn-primary"]:active,
[data-role~="bk-btn-primary"]:active {
    transform: translateY(0) scale(0.97) !important;
    box-shadow: 0 0 0 1px color-mix(in srgb, var(--color_primary) 55%, transparent) !important;
}

/* A little life in the wingpanel clock — a slow, barely-there accent
   pulse on the live-status dot next to it, instead of a static dot.
   Purely decorative, respects prefers-reduced-motion via the site's
   existing global media-query rule (ui_style.php's own reduced-motion
   block already forces animation-duration:0.01ms for everything). */
@keyframes _lb_polish_pulse {
    0%, 100% { opacity: 1; box-shadow: 0 0 0 0 color-mix(in srgb, var(--color_primary) 55%, transparent); }
    50%      { opacity: 0.75; box-shadow: 0 0 0 4px transparent; }
}
#ws_status_dot,
.lb-wingpanel-right [class*="status-dot"] {
    animation: _lb_polish_pulse 2.4s ease-in-out infinite;
}

/* Desktop icons/pinned tiles: a slightly richer hover — a soft glow
   instead of the flat highlight, matching the primary-button treatment
   above so the "fancier" touch reads as one consistent decision rather
   than scattered one-offs. */
.lb-desktop-icon:hover .lb-desktop-icon-glyph,
.lb-taskbar-pin:hover,
.lb-tray-icon:hover {
    filter: drop-shadow(0 0 6px color-mix(in srgb, var(--color_primary) 40%, transparent));
}

/* Files "Open with…" picker (2026-08-24) — a plain vertical list of app
   buttons inside a LBKit.modal(). */
.fs-open-with-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 4px 2px;
    min-width: 220px;
}
.fs-open-with-item {
    justify-content: flex-start;
    text-align: left;
}

/* Drag-to-open (2026-08-24) — a taskbar pin or desktop icon lit up while
   a Files item ("application/x-lb-file-ref") is dragged over it, as the
   drop target for "open this file in this app". */
.lb-taskbar-pin.lb-drop-target-active,
.lb-desktop-icon.lb-drop-target-active {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
    border-radius: var(--theme-radius-sm, 4px);
}

/* Quick-chat flyout (2026-08-24) — the tray's chat-bubble icon + its
   popover. Overrides .lb-tray-popover's own max-height/overflow-y (which
   scrolls its ENTIRE content as one block) with a fixed-height flex
   column instead: header and composer stay pinned, only the message list
   itself scrolls internally — a chat box needs its send row to stay put
   regardless of how long the message list gets. */
.lb-chat-flyout-popover {
    width: 300px;
    max-width: 300px;
    height: 380px;
    max-height: 380px;
    overflow: hidden;
    display: flex;
    padding: 0 !important;
}
.lb-chat-flyout-panel {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}
.lb-chat-flyout-title {
    font-weight: 600;
    font-size: 0.85rem;
}
.lb-chat-flyout-list {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    padding: 6px 10px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.lb-chat-flyout-msg {
    font-size: 0.8rem;
    line-height: 1.35;
}
.lb-chat-flyout-msg-meta {
    display: flex;
    align-items: baseline;
    gap: 6px;
    margin-bottom: 1px;
}
.lb-chat-flyout-msg-sender {
    font-weight: 600;
    color: var(--accent, var(--color_primary));
}
.lb-chat-flyout-msg-time {
    font-size: 0.68rem;
    opacity: 0.55;
}
.lb-chat-flyout-msg-body {
    word-break: break-word;
    white-space: pre-wrap;
}
.lb-chat-flyout-composer {
    display: flex;
    gap: 6px;
    padding: 8px 10px;
    border-top: 1px solid var(--border);
}
.lb-chat-flyout-input {
    flex: 1;
    min-width: 0;
}
.lb-chat-flyout-send {
    flex-shrink: 0;
}

/* Who's-online flyout (2026-08-24) — reuses .lb-tray-list/.lb-tray-panel
   wholesale (same row shape as the notification tray), just adds the
   avatar + status-dot pieces. */
.lb-online-flyout-avatar {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    object-fit: cover;
    flex-shrink: 0;
    background: var(--bg_dark);
}
.lb-online-flyout-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #3ecf6c;
    flex-shrink: 0;
}

/* Top/bottom bar edge shadows (2026-08-24, Leo) — a shadow along the
 * edge each bar shares with the desktop content it floats over: the
 * Wingpanel's own bottom edge (it sits at the very top of the viewport,
 * so nothing is ever above it — the meaningful edge is the one facing
 * INTO the page) and the taskbar's own top edge (same reasoning, mirrored
 * — it's the edge facing up into open windows). Both already carry
 * z-index:2147483647 (the max 32-bit value) so windows/content can never
 * paint over either bar regardless of how many are open or how they're
 * individually stacked — appended here at the end per this file's own
 * documented parser-drop precedent (search "Pantheon redesign" in this
 * file's own history) rather than editing either rule mid-file. */
#lb-wingpanel {
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.32) !important;
}
#lb-taskbar {
    /* Combines with (doesn't replace) the dock's own existing downward/
     * outward shadow — the extra term is the new upward-facing one. */
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.28), 0 -4px 14px rgba(0, 0, 0, 0.32) !important;
}

/* Server-time clock segment (2026-08-24) — second segment in the same
   #lb-tray-clock-group chip as the existing local-time clock, matching
   its own type treatment (see #lb-tray-clock, ~line 22956) exactly so
   the two read as one cohesive display rather than two mismatched
   pieces bolted together. */
#lb-tray-clock-divider {
    width: 1px;
    align-self: stretch;
    background: color-mix(in srgb, var(--text) 20%, transparent);
    flex-shrink: 0;
}
#lb-tray-clock-server {
    font-size: 0.75rem;
    font-variant-numeric: tabular-nums;
    opacity: 0.65;
    white-space: nowrap;
}

/* Traditional mode's #div_arbitrary status text (2026-08-24) — no
 * explicit font-size anywhere in its own rule, so it was inheriting the
 * site's FLUID root font-size (html{font-size:clamp(...)}), which grows
 * with viewport width — 21px computed at 800px wide, real found live
 * while testing the new dual-clock feature below. A compact status
 * readout showing MORE information now (local + server time) needs a
 * small, FIXED size regardless of viewport, not one that grows — same
 * var(--fs-xs) token this codebase already introduced for exactly this
 * "small UI text needs to stay small" problem (see its own :root
 * definition and the comment near line 25000 explaining why). */
#div_arbitrary {
    font-size: var(--fs-xs) !important;
}

/* Reduced motion (2026-08-24, Leo: "what other global ui effects can we
 * implement?" -> "do it!"). Two layers, deliberately overlapping:
 *
 * 1. A bare `prefers-reduced-motion` media query — fires for EVERY
 *    visitor whose OS asks for it, zero JS required, active even before
 *    standard.pjs's own apply_reduce_motion() has had a chance to run.
 * 2. html.reduce-motion — set by that same apply_reduce_motion() (see
 *    standard.pjs), which layers an explicit in-app choice (Settings ->
 *    Appearance -> "Reduce motion") on top of the OS signal, in EITHER
 *    direction: a user whose OS has no preference can still turn this on
 *    site-wide, and one whose OS asks for reduced motion can still turn
 *    it back off for this site specifically if they want the animation.
 *
 * Both collapse essentially every animation/transition on the site
 * (window zoom, popovers, the new wallpaper crossfade/Ken Burns drift
 * below, everything) down to imperceptible near-zero rather than trying
 * to enumerate and special-case each of them individually. */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}
html.reduce-motion *, html.reduce-motion *::before, html.reduce-motion *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
}

/* Wallpaper ambient motion + crossfade (2026-08-24) — shared by desktop
 * mode's #lb-desktop-wallpaper (two alternating .lb-wallpaper-layer
 * children, crossfaded on every change by ui_toolkit.pjs's
 * _lb_apply_wallpaper()) and traditional mode's #lb-traditional-wallpaper
 * (a single static layer set once at load, index-early-bind.js) — same
 * class, same @keyframes, one definition either mode picks up.
 *
 * inset:-6% deliberately oversizes each layer past its overflow:hidden
 * parent (added just below, as a separate rule rather than editing
 * #lb-desktop-wallpaper/#lb-traditional-wallpaper's own existing rule
 * bodies in place — see this file's own big warning comment near the top
 * about rules silently getting dropped from mid-file edits; appending a
 * second same-selector rule is always safe, the two just merge in the
 * cascade) so the animation's scale(1.05) peak below never exposes a
 * transparent edge. transform is the ONLY thing animated — never
 * background-position/-size — so nothing here fights the crossfade's own
 * opacity transition, which is the other property .lb-wallpaper-layer
 * touches. */
#lb-desktop-wallpaper, #lb-traditional-wallpaper {
    overflow: hidden;
}
.lb-wallpaper-layer {
    position: absolute;
    inset: -6%;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    opacity: 0;
    transition: opacity 0.7s ease;
    transform: scale(1) translate(0, 0);
    transform-origin: center center;
}
.lb-wallpaper-layer.lb-wallpaper-layer-active {
    opacity: 1;
    animation: lb-wallpaper-kenburns 100s ease-in-out infinite;
}
@keyframes lb-wallpaper-kenburns {
    0%   { transform: scale(1) translate(0, 0); }
    50%  { transform: scale(1.05) translate(-1.5%, 1%); }
    100% { transform: scale(1) translate(0, 0); }
}

/* Spotify desktop widget (2026-08-24) — same widen-past-220px-default
 * pattern as .lb-desktop-widget-ticker/.lb-desktop-widget-ai (see those
 * rules' own comment above): album art + two-line track info need real
 * room. Spotify's own brand green is used ONLY for the play button and
 * volume slider thumb — small, recognizable accents, not a wholesale
 * reskin of the widget chrome, which stays the same glass panel every
 * other widget uses. */
.lb-desktop-widget-spotify {
    width: 260px;
}
.lb-widget-spotify-body {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.lb-widget-spotify-loading {
    opacity: 0.6;
    font-size: 0.8rem;
}
.lb-widget-spotify-connect {
    display: flex;
    flex-direction: column;
    gap: 8px;
    text-align: center;
}
.lb-widget-spotify-connect p {
    margin: 0;
    font-size: 0.8rem;
    opacity: 0.8;
    line-height: 1.4;
}
.lb-widget-spotify-connect-btn {
    background: #1DB954 !important;
    color: #0b0b0b !important;
    border: none !important;
    border-radius: 999px !important;
    padding: 8px 16px !important;
    font-weight: 700 !important;
    font-size: 0.78rem !important;
    min-height: 0 !important;
    cursor: pointer;
    align-self: center;
}
.lb-widget-spotify-empty {
    font-size: 0.78rem;
    opacity: 0.7;
    line-height: 1.4;
}
.lb-widget-spotify-now {
    display: flex;
    gap: 8px;
    align-items: center;
}
.lb-widget-spotify-art {
    width: 52px;
    height: 52px;
    border-radius: var(--theme-radius-xs);
    object-fit: cover;
    flex-shrink: 0;
}
.lb-widget-spotify-meta {
    min-width: 0;
}
.lb-widget-spotify-track {
    font-weight: 600;
    font-size: 0.82rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.lb-widget-spotify-artist {
    font-size: 0.74rem;
    opacity: 0.7;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.lb-widget-spotify-progress {
    height: 4px;
    border-radius: 999px;
    background: color-mix(in srgb, var(--text) 18%, transparent);
    cursor: pointer;
    overflow: hidden;
}
.lb-widget-spotify-progress-fill {
    height: 100%;
    background: #1DB954;
    border-radius: 999px;
}
.lb-widget-spotify-time {
    font-size: 0.68rem;
    opacity: 0.6;
    font-variant-numeric: tabular-nums;
    text-align: right;
    margin-top: -4px;
}
.lb-widget-spotify-controls {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 14px;
}
.lb-widget-spotify-btn {
    background: transparent !important;
    border: none !important;
    color: var(--text) !important;
    min-height: 0 !important;
    padding: 4px !important;
    cursor: pointer;
    opacity: 0.85;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
}
.lb-widget-spotify-btn:hover {
    opacity: 1;
}
/* Transport buttons switched from Unicode media-control glyphs (⏮/⏸/▶/⏭)
 * to inline SVG (2026-08-24) — those characters render inconsistently
 * across fonts/OSes (missing glyph boxes on this same site, confirmed in
 * both a headless test and Leo's own browser), the exact "vary wildly
 * across OSes and browsers" problem _lb_icon_svg() was already built to
 * avoid for every other icon on the site. */
.lb-widget-spotify-btn svg {
    width: 18px;
    height: 18px;
}
.lb-widget-spotify-btn-play svg {
    width: 24px;
    height: 24px;
}
.lb-widget-spotify-volrow {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.85rem;
}
.lb-widget-spotify-volrow svg {
    width: 16px;
    height: 16px;
    opacity: 0.7;
    flex-shrink: 0;
}
.lb-widget-spotify-volume {
    flex: 1;
    accent-color: #1DB954;
}
.lb-widget-spotify-disconnect {
    background: transparent !important;
    border: none !important;
    color: var(--text) !important;
    opacity: 0.55;
    font-size: 0.68rem !important;
    text-decoration: underline;
    min-height: 0 !important;
    padding: 0 !important;
    cursor: pointer;
    align-self: center;
}
.lb-widget-spotify-disconnect:hover {
    opacity: 0.85;
}

/* Traditional-mode opaque content backdrop (2026-08-24, Leo: "app frame
 * backgrounds are transparent, need to be opaque" + "a lot of ui element
 * crunching, overlapping"). #iframe_right's base rule (line ~5231) is
 * DELIBERATELY background:transparent, and every subpage's own body is
 * ALSO deliberately transparent (line ~446) — by design, so that inside a
 * desktop-mode floating window, .lb-window-body's own
 * `background: var(--bg_base) !important` (its own comment: "this opaque
 * backing stops [whatever's behind the window] show[ing] through") is
 * what actually paints a solid backdrop behind that transparency chain.
 * Traditional mode's #iframe_right never had an equivalent — any subpage
 * that doesn't supply its own opaque panel background (Admin, Files,
 * Settings all confirmed live; Wall/Mail happened to look fine already
 * since they provide their own) rendered directly over the wallpaper,
 * which is what actually caused most of the reported "crunching/
 * overlapping" too: card borders and row separators lose all contrast
 * once nothing behind them is opaque. Exact same value .lb-window-body
 * uses, for the exact same reason — this is that same fix, just for the
 * one context that never got it. Appended as a new rule rather than
 * editing the existing html.lb-force-traditional #iframe_right block in
 * place, per this file's own documented mid-file-edit landmine (see
 * project_pantheon_redesign). */
html.lb-force-traditional #iframe_right {
    background: var(--bg_base) !important;
}

/* Root font-size — desktop-width fix (2026-08-24, Leo: "fonts are way
 * too big, need to be much smaller"). The clamp() at line ~434 was tuned
 * for phones back when this layout was still literally called "mobile"
 * (see its own comment: "hits the 22px ceiling around 640px") — every
 * viewport at or above 640px, i.e. virtually every real desktop browser
 * window, has sat at that 22px ceiling ever since "mobile" became
 * "traditional" and started being used on desktop widths too (confirmed
 * live: html computed to font-size:22px at a normal 1440px window,
 * cascading oversized text through every rem-based rule on the page).
 * New ceiling is 16px — the browser's own long-standing default body
 * font-size, not an arbitrary shrink — reached at 500px viewport width
 * instead of 640px, so real phones still get the same low-end scaling
 * (12px floor unchanged) while every desktop width now holds at a normal
 * reading size instead of a permanently maxed-out one. A second same-
 * selector rule (not editing the original in place, same landmine-
 * avoidance reasoning as the block above) — the later rule in the
 * cascade wins outright since it's an identical selector, not a partial
 * override. */
html {
    font-size: clamp(12px, 2.2vw + 5px, 16px);
}

/* Shell menu (#div_left) nav-link font-size (2026-08-24, Leo: "in the
 * shell menu of the traditional mode the fonts are too big"). The base
 * rule (line ~4988) already sets #div_left .a_nav_link/.a_cmd_link to a
 * sane clamp(10px, 1rem, 13px) — but html.lb-force-traditional's own
 * override (line ~23652) replaced that with a plain, UNCLAMPED
 * `font-size: 1rem`, which — after the root font-size fix just above —
 * is 16px: bigger than desktop mode's own 13px-capped version of these
 * exact same links, in a sidebar that's only min(88vw, 320px) wide
 * (line ~23644) versus desktop's much wider floating Start Menu. Pinned-
 * tile labels/section headers elsewhere in this same menu already sit in
 * the 10.88–13.6px range (confirmed live) — this brings the nav links
 * back in line with the rest of the menu instead of standing out as
 * needlessly larger, by simply re-applying the same clamp desktop mode
 * already uses rather than inventing a separate traditional-only value. */
html.lb-force-traditional #div_left .a_nav_link,
html.lb-force-traditional #div_left .a_cmd_link {
    font-size: clamp(10px, 1rem, 13px) !important;
}

/* Undoes the narrow-viewport "belt and braces" rule at ~line 23285
 * (2026-08-24, Leo: "when I switch the site into mobile mode using
 * chrome devtools, all I get is a white backdrop and a nav bar").
 * That rule's own comment says exactly what it was for: "on top of the
 * JS-driven html.desktop-mode gate, in case of a transient state during
 * a resize crossing" — i.e. it assumed html.desktop-mode would always
 * get removed within the same synchronous resize handler (confirmed:
 * _lb_apply_layout() in index-early-bind.js toggles both desktop-mode
 * and lb-force-traditional in its first two lines, no debounce), so
 * this was meant to cover, at most, a single unstyled frame.
 *
 * That assumption broke the moment `layoutLocked` (2026-08-15, Leo's own
 * request: "a chosen layout stays chosen... rather than the picker
 * being pointless") shipped — the resize listener explicitly skips
 * crossing at all once locked, so html.desktop-mode can now legitimately
 * PERSIST at any width, including narrow ones (a real page load under
 * Chrome DevTools' mobile emulation, or any account defaulted to Desktop
 * viewed on a phone). #iframe_right/#div_top are ALSO permanently
 * display:none under html.desktop-mode (unconditionally, not just at
 * narrow widths — see those rules' own selectors) precisely because
 * desktop mode's real content lives in #lb-desktop-root instead. With
 * this belt-and-braces rule ALSO force-hiding #lb-desktop-root at
 * ≤767px, every content-bearing element was hidden at once — nothing
 * left to show but the wingpanel/sidebar chrome, i.e. exactly "a white
 * backdrop and a nav bar". Removing it lets desktop mode actually render
 * (even if visually cramped) whenever it's genuinely, intentionally
 * active — which is the whole point of a layout staying locked.
 *
 * Fixed with two higher-specificity rules rather than touching the
 * original @media block in place (Pantheon mid-file-edit landmine, see
 * project_pantheon_redesign) — `html.desktop-mode #lb-desktop-root`/
 * `#lb-taskbar` (one class + one id) beats the original bare-id
 * selector's specificity outright, at any viewport width, so the
 * original rule becomes permanently moot without needing to touch it. */
html.desktop-mode #lb-desktop-root {
    display: block !important;
}
html.desktop-mode #lb-taskbar {
    display: flex !important;
}

/* Settings > Sound > Equalizer (2026-08-24) — .set-row is
 * display:flex; justify-content:space-between expecting exactly two
 * children (label, control); wrapping the slider + live dB readout in
 * one .set-eq-control span keeps that two-child contract intact rather
 * than needing a three-column variant of .set-row just for this. */
.set-eq-control {
    display: flex;
    align-items: center;
    gap: 10px;
}
.set-eq-slider {
    width: 140px;
}
.set-eq-value {
    font-size: 0.78rem;
    opacity: 0.7;
    font-variant-numeric: tabular-nums;
    min-width: 3.2em;
    text-align: right;
}

/* Equalizer preset picker (2026-08-24, Leo: "all preset saving in the
 * equalizer and effects like deep bass etc.") — same two-child-per-row
 * wrapping trick as .set-eq-control above, for the <select> + its
 * conditional Delete button. */
.set-eq-preset-control {
    display: flex;
    align-items: center;
    gap: 10px;
}
.set-eq-preset-control .lb-select {
    min-width: 180px;
}

/* Remote App slot capacity flyout (2026-08-24, Leo: "add a flyout to the
 * shell's top bar showing how many slots are available in realtime") —
 * reuses .lb-tray-panel/.lb-tray-header/.lb-tray-list wholesale (same
 * pattern the online flyout's own comment describes), just adds the
 * summary count + dot-strip pieces. */
.lb-slots-flyout-summary {
    display: flex;
    align-items: baseline;
    gap: 6px;
    padding: 10px 10px 4px;
}
.lb-slots-flyout-count {
    font-family: var(--font-heading);
    font-size: 1.6rem;
    font-weight: 700;
    line-height: 1;
    font-variant-numeric: tabular-nums;
}
.lb-slots-flyout-count-full {
    color: var(--error, #c0392b);
}
.lb-slots-flyout-count-label {
    font-size: 0.76rem;
    opacity: 0.65;
}
.lb-slots-flyout-dots {
    display: flex;
    gap: 6px;
    padding: 0 10px 10px;
}
.lb-slots-flyout-dot {
    width: 14px;
    height: 14px;
    border-radius: 4px;
    background: color-mix(in srgb, var(--text) 14%, transparent);
    flex-shrink: 0;
}
.lb-slots-flyout-dot-used {
    background: var(--accent, var(--color_primary));
}
.lb-slots-flyout-owner {
    opacity: 0.6;
    font-size: 0.74rem;
    flex-shrink: 0;
}

/* Pentesting tab — network recon tool cards (2026-08-26). Appended at
   the true end of the file on purpose — see project_bfn_static_theme's
   own memory note on a real CSS-parser bug that silently drops rules
   inserted mid-file past a certain point; new rules go at the end only. */
#sec_recon_heading {
    font-size: 0.92rem;
    font-weight: 700;
    color: var(--text);
    margin: 24px 0 12px;
    padding-top: 18px;
    border-top: 1px solid var(--color_border);
}
.sec-tool-target-row {
    display: flex;
    gap: 6px;
}
.sec-tool-target-row input[type="text"] {
    flex: 1;
    min-width: 0;
    font-size: 0.8rem;
    padding: 6px 8px;
}
.sec-tool-target-row input[data-role="sec-port-input"] {
    flex: 0 0 64px;
}
.sec-status-error {
    color: var(--color_danger, #e5484d);
}

/* Files — Attach Storage panel (2026-08-26, Phase B of the remote-storage
   feature). Reuses .fs-upload-* base rules above where possible; only the
   genuinely new pieces (connection list rows, auth-type toggle, key
   textarea, test-connection status line) get their own rules here.
   Appended at the true end of the file on purpose — see the Pentesting
   tab's own CSS comment above for why. */
.fs-storage-panel {
    flex-shrink: 0;
    background: transparent !important;
    padding: 12px 14px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.fs-storage-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.fs-storage-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    background: var(--bg_raised);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
}
.fs-storage-row-icon { font-size: 1.1rem; flex-shrink: 0; }
.fs-storage-row-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.fs-storage-row-label { font-weight: 600; font-size: 0.88rem; color: var(--text); }
.fs-storage-row-meta { font-size: 0.74rem; color: var(--text_dim); }
.fs-storage-row-meta.fs-storage-row-error { color: var(--color_danger, #e5484d); }
.fs-storage-row-actions { display: flex; gap: 6px; flex-shrink: 0; }
.fs-storage-actions {
    display: flex;
    justify-content: flex-end;
}
.fs-storage-auth-toggle {
    display: flex;
    gap: 16px;
    font-size: 0.85rem;
    padding: 6px 0;
}
.fs-storage-auth-toggle label {
    display: flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
}
.fs-storage-key-textarea {
    min-height: 90px;
    font-family: var(--font_mono, monospace);
    font-size: 0.78rem;
    padding: 8px 10px !important;
    resize: vertical;
}
.fs-storage-port-field { flex: 0 0 90px !important; }
.fs-storage-test-status {
    font-size: 0.8rem;
    min-height: 1.1em;
}
.fs-storage-test-status.fs-storage-test-ok { color: color-mix(in srgb, var(--color_primary) 70%, var(--text)); }
.fs-storage-test-status.fs-storage-test-fail { color: var(--color_danger, #e5484d); }

/* Settings — Tasker & Mobile Apps tokens (2026-08-26). */
.set-tasker-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin: 8px 0;
}
.set-tasker-row {
    justify-content: space-between;
    align-items: center;
}
.set-tasker-new-token {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 8px;
    padding: 10px 12px;
    background: var(--bg_raised);
    border: 1px solid var(--color_border);
    border-radius: var(--theme-radius-xs);
}
.set-tasker-new-token code {
    font-size: 0.82rem;
    word-break: break-all;
    flex: 1;
}

/* ══════════════════════════════════════════════════════════════════
   "Files ( MC )" — Midnight-Commander-styled Files variant
   (2026-08-27, retheme 2026-08-28 — Leo: "make the color theme match
   the site color theme"). Originally a fixed classic ncurses blue/cyan
   palette on purpose, matching how monospace/terminal/BBS surfaces
   elsewhere on this site stay untouched by the sitewide theme passes —
   Leo's follow-up request reverses that specific call for this page:
   every color below is now a real site theme token (same ones
   palette-loader.php computes per-account/per-wallpaper — see
   [[project_wallpaper_derived_theme_2026-08-24]]), so this page follows
   dark/light mode and the live wallpaper-derived palette exactly like
   the rest of the site, while keeping MC's own STRUCTURE (dual-pane,
   inverse-video selection, function-key bar) — the retro LAYOUT is the
   part of "Midnight Commander" being recreated, not a hardcoded 1990s
   color scheme. --mc-* custom properties below are this page's own
   local aliases onto the real tokens, same indirection pattern
   msgbase's own --mb-* block (ui_style.php, ~line 14410) already
   established, so every rule here reads in MC's own vocabulary
   (bg/fg/primary/sel) without repeating var(--color_*) everywhere.
   Scoped entirely under #mc_app with !important where something in the
   site's own generic reset/button/table styling would otherwise leak
   through, same pattern other one-off surfaces on this site use. */
:root {
    --mc-bg:        var(--bg_base);
    --mc-panel-bg:  var(--theme-panel-bg);
    --mc-fg:        var(--color_text_stressed);
    --mc-dim:       var(--color_text_normal);
    --mc-primary:   var(--color_primary);
    --mc-on-ac:     var(--text_on_ac, #1A0D02);
    --mc-border:    var(--color_border);
    --mc-warn:      var(--color_tertiary);
    --mc-danger:    var(--color_danger);
    --mc-sel-inactive-bg: color-mix(in srgb, var(--color_primary) 30%, var(--bg_base));
}
html:has(#mc_app) { background: var(--mc-bg) !important; }
#mc_app {
    position: fixed;
    inset: 0;
    display: flex;
    flex-direction: column;
    background: var(--mc-bg);
    color: var(--mc-fg) !important;
    font-family: 'Courier New', 'Cascadia Mono', monospace !important;
    font-size: 13px;
    overflow: hidden;
    user-select: none;
}
#mc_titlebar {
    flex-shrink: 0;
    background: var(--mc-primary);
    color: var(--mc-on-ac) !important;
    padding: 3px 10px;
    font-weight: bold;
    text-align: center;
    letter-spacing: 0.02em;
}
#mc_panels {
    flex: 1;
    display: flex;
    min-height: 0;
    border-top: 1px solid var(--mc-border);
}
.mc_panel {
    flex: 1 1 50%;
    display: flex;
    flex-direction: column;
    min-width: 0;
    border-right: 1px solid var(--mc-border);
}
.mc_panel:last-child { border-right: none; }
.mc_panel_header {
    flex-shrink: 0;
    background: var(--mc-panel-bg);
    color: var(--mc-dim) !important;
    padding: 2px 8px;
    font-weight: bold;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.mc_panel.mc_panel_active .mc_panel_header { background: var(--mc-primary); color: var(--mc-on-ac) !important; }
.mc_panel_body {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    background: var(--mc-bg);
}
.mc_panel_table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
}
.mc_panel_table thead th {
    background: var(--mc-bg) !important;
    color: var(--mc-dim) !important;
    font-weight: normal;
    text-align: left;
    padding: 1px 8px;
    border-bottom: 1px solid var(--mc-border);
    position: sticky;
    top: 0;
}
.mc_col_name { width: auto; }
.mc_col_size { width: 70px; text-align: right !important; }
.mc_col_date { width: 90px; }
.mc_panel_table td {
    padding: 1px 8px;
    color: var(--mc-fg) !important;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    background: transparent !important;
    border: none !important;
}
.mc_panel_table .mc_col_size, .mc_panel_table .mc_col_date { text-align: right; color: var(--mc-dim) !important; }
.mc_row { cursor: pointer; }
.mc_row_dir .mc_col_name { color: var(--mc-fg) !important; font-weight: bold; }
.mc_row_up .mc_col_name { color: var(--mc-warn) !important; font-weight: bold; }
.mc_row_empty .mc_col_name { color: var(--mc-dim) !important; font-style: italic; cursor: default; }
.mc_row_selected td { background: var(--mc-primary) !important; color: var(--mc-on-ac) !important; }
.mc_row_selected.mc_row_dir td, .mc_row_selected .mc_col_size, .mc_row_selected .mc_col_date { color: var(--mc-on-ac) !important; }
.mc_row_selected_inactive td { background: var(--mc-sel-inactive-bg) !important; color: var(--mc-fg) !important; }
.mc_panel_footer {
    flex-shrink: 0;
    background: var(--mc-bg);
    color: var(--mc-dim) !important;
    padding: 2px 8px;
    border-top: 1px solid var(--mc-border);
    font-size: 12px;
}
#mc_status {
    flex-shrink: 0;
    background: var(--mc-warn);
    color: var(--mc-on-ac) !important;
    padding: 3px 10px;
    text-align: center;
}
#mc_status.mc_status_err { background: var(--mc-danger); color: var(--mc-fg) !important; }
#mc_fkeys {
    flex-shrink: 0;
    display: flex;
    background: var(--mc-panel-bg);
    border-top: 1px solid var(--mc-border);
}
.mc_fkey {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    background: var(--mc-panel-bg) !important;
    color: var(--mc-fg) !important;
    border: none !important;
    border-radius: 0 !important;
    padding: 5px 2px !important;
    font-family: inherit !important;
    font-size: 12px !important;
    cursor: pointer;
}
.mc_fkey:hover { background: var(--mc-primary) !important; color: var(--mc-on-ac) !important; }
.mc_fkey_num {
    background: var(--mc-dim);
    color: var(--mc-bg) !important;
    padding: 0 3px;
    font-weight: bold;
    border-radius: 2px;
}

/* App desktop widget (embeds a published Web App Studio app directly on
   the desktop, /apps/<slug>/) — same "widen past the 220px default"
   precedent as the ticker/AI widgets above, a real app UI needs room. */
.lb-desktop-widget-app {
    width: 320px;
}
.lb-widget-app-body {
    padding: 0 !important;
    height: 240px;
}
.lb-widget-app-iframe {
    display: block;
    width: 100%;
    height: 100%;
    border: none;
}

/* Design-time placeholder for a UserControl instance dropped onto a
   Form's canvas (studio-designer.pjs's own _renderWidget default case)
   — a labeled dashed box, not a real preview (see that code's own
   comment on why: rendering the actual compiled instance at design
   time would mean running arbitrary user code just to draw a canvas
   preview). */
.lb-studio-usercontrol-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    box-sizing: border-box;
    border: 1px dashed var(--color_border);
    background: color-mix(in srgb, var(--color_primary) 8%, var(--bg_base));
    color: var(--color_text_normal);
    font-size: 0.8rem;
    font-weight: 600;
    text-align: center;
    padding: 4px;
    overflow: hidden;
}

/* ══════════════════════════════════════════════════════════════
   WRITE PAGE — column view (2026-08-28)
   Converts the old #editor_posts_panel popover (a small dropdown
   anchored off the hoisted "Posts" titlebar button) into a persistent
   Mail.app/Notes.app-style left column that sits beside the existing
   ribbon editor, matching this site's own /mail/ list+reading-pane
   convention (see html.mail-page #mail_shell ~25219, same shell/body/
   list-pane shape reused here). #editor_posts_panel's own ids/CSS
   (~9708 #editor_posts_panel / .editor-posts-item / #editor_posts_
   search / #editor_posts_new_btn) are UNCHANGED and still supply the
   list/search/new-post styling; only new wrapper ids are introduced
   here, appended at the true end of this file per this file's own
   documented mid-file CSS-parser truncation bug (~65% through, see
   that comment further up) — never inserted mid-file. Every new id
   below (#write_shell/#write_body/#write_list_pane/#write_editor_pane,
   plus #editor_posts_panel itself, which used to escape the sitewide
   div-background-flattener by being hoisted OUT of html.editor-page
   entirely and is no longer hoisted) was also added to the two
   :not()-chain exclusion lists near the top of this file (~496 and
   ~620) as a small surgical insertion — same !important rationale as
   the rest of this page's CSS otherwise (not in html.main-frame, has
   to clear those resets — see html.editor-page body comment ~24807).
   ══════════════════════════════════════════════════════════════ */
html.editor-page #write_shell {
    position: fixed;
    inset: 0;
    display: flex;
    flex-direction: column;
    background: var(--bg_base) !important;
}
html.editor-page #write_body {
    flex: 1;
    display: flex;
    min-height: 0;
}
html.editor-page #write_list_pane {
    width: min(28vw, 300px);
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    background: var(--bg_raised) !important;
    border-right: 1px solid var(--color_border) !important;
}
/* The old rule (~9708) sized this as a 400px-max-height popover panel
   — as a persistent column it needs to fill #write_list_pane's full
   height instead. Two-ID selector outranks the original single-ID
   rule regardless of source order, so this is safe appended here. */
html.editor-page #write_list_pane #editor_posts_panel {
    width: 100%;
    height: 100%;
    max-height: none;
}
html.editor-page #write_editor_pane {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: var(--bg_base) !important;
}
html.editor-page #write_editor_pane #form_editor {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}
html.editor-page #write_editor_pane #editor_title_row,
html.editor-page #write_editor_pane #editor_ribbon_tabs,
html.editor-page #write_editor_pane #div_command_pallet,
html.editor-page #write_editor_pane #editor_tabs_row {
    flex-shrink: 0;
}
html.editor-page #write_editor_pane #editor_content_wrap {
    flex: 1;
    min-height: 0;
}

/* Mobile collapse — same off-canvas mechanism as the Files page's
   #fs_nav/#fs_nav_toggle (ui_style.php ~14108: absolute-positioned
   pane slid from left:-X to left:0 via a body-level class, plus a
   dark scrim), just applied to #write_list_pane/#write_body instead
   of #fs_nav/#fs_body. Toggled by editor-late-bind.js's
   _write_toggle_list_pane()/_write_close_list_pane(), bound to the
   hoisted "Posts" titlebar button (repurposed — see index.php's
   column-view comment for why that button no longer opens a
   popover). 767px matches this codebase's one established mobile
   breakpoint (Files, etc. all use it). */
@media (max-width: 767px) {
    html.editor-page #write_body { position: relative; }
    html.editor-page #write_list_pane {
        position: absolute;
        top: 0; bottom: 0; left: -85%;
        width: 85%;
        max-width: 320px;
        z-index: 20;
        box-shadow: var(--elevation-3);
        transition: left 0.2s ease;
    }
    html.editor-page #write_body.list-open #write_list_pane { left: 0; }
    html.editor-page #write_body.list-open::after {
        content: '';
        position: absolute;
        inset: 0;
        z-index: 19;
        background: rgba(0, 0, 0, 0.4);
    }
    html.editor-page #write_editor_pane { width: 100%; }
}

/* ══════════════════════════════════════════════════════════════
   JOURNAL — column view (2026-08-28)
   Was a single reverse-chronological feed (#log_entries held full
   entry cards stacked top to bottom; the page itself scrolled).
   Redesigned to the same Mail.app/Notes.app list+detail convention as
   /mail/ and the Write page's column view just above —
   #journal_list_pane (compact rows) on the left, #journal_entry_pane
   (the full selected entry, or the new-entry compose form) on the
   right, each scrolling independently. #log_entries/#log_loading/
   #log_more_wrap/#log_load_more/.log-entry/.log-date-divider and all
   of #log_compose's own ids are UNCHANGED from the old feed layout
   (see index-late-bind.pjs's 2026-08-28 comments) — only new wrapper/
   row ids are introduced here, appended at the true end of this file
   per the mid-file CSS-parser truncation bug noted above the Write
   block. Every new id below was also added to the two :not()-chain
   exclusion lists near the top of this file (~496, ~620), same as
   Write's ids. Unlike Write/Mail, #journal_shell is NOT
   position:fixed — the "viewing another user's journal" case (god
   only) keeps a small in-flow #log_header back-link above it (see
   log/index.php), so the shell fills the REMAINING height of
   #log_wrap (itself pinned to 100dvh below) via flex instead of
   covering the whole viewport outright. Same !important rationale as
   the rest of this page's CSS otherwise (not in html.main-frame).
   ══════════════════════════════════════════════════════════════ */
html.log-page #log_wrap {
    height: 100dvh;
    padding: 0 !important;
    gap: 0 !important;
    overflow: hidden;
}
html.log-page #log_header {
    flex-shrink: 0;
    padding: 10px 20px !important;
}
html.log-page #journal_shell {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    background: var(--bg_base) !important;
}
html.log-page #journal_body {
    flex: 1;
    display: flex;
    min-height: 0;
}
html.log-page #journal_list_pane {
    width: min(32vw, 340px);
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    background: var(--bg_raised) !important;
    border-right: 1px solid var(--color_border) !important;
}
html.log-page #journal_list_pane #log_entries {
    padding: 6px 0 !important;
}
html.log-page #journal_list_pane #log_more_wrap {
    flex-shrink: 0;
}
html.log-page #journal_entry_pane {
    flex: 1;
    min-width: 0;
    overflow-y: auto;
    position: relative;
    padding: 28px 32px;
    background: var(--bg_base) !important;
}
html.log-page #journal_entry_empty {
    color: var(--text_dim);
    text-align: center;
    padding: 60px 20px;
    font-size: 0.95rem;
    opacity: 0.6;
}
/* The detail card was built for a repeating feed (margin-bottom to
   separate it from the next card) — as the sole content of its own
   pane that bottom margin just reads as dead space at the bottom of
   the scroll area. Zeroed here without touching the original
   .log-entry rule (ui_style.php ~6464). */
html.log-page #journal_entry_detail .log-entry {
    margin-bottom: 0 !important;
}
html.log-page #journal_entry_pane #log_compose {
    max-width: 640px;
}

/* ── Compact list rows ────────────────────────────────────────────── */
.journal-list-row {
    padding: 10px 16px;
    border-bottom: 1px solid color-mix(in srgb, var(--color_border) 60%, transparent) !important;
    cursor: pointer;
    color: var(--color_text_normal);
}
.journal-list-row:hover { background: color-mix(in srgb, var(--color_primary) 8%, var(--bg_raised)) !important; }
.journal-list-row.active { background: color-mix(in srgb, var(--color_primary) 20%, var(--bg_raised)) !important; }
.journal-row-top { display: flex; align-items: baseline; gap: 8px; font-size: 0.82rem; }
.journal-row-mood { font-size: 1rem; line-height: 1; }
.journal-row-date { opacity: 0.7; font-size: 0.76rem; letter-spacing: 0.04em; }
.journal-row-owner { font-size: 0.72rem; opacity: 0.55; margin-top: 1px; }
.journal-row-snippet {
    font-size: 0.83rem;
    margin-top: 3px;
    opacity: 0.75;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    white-space: normal;
    word-break: break-word;
}
.journal-row-media-tag { opacity: 0.55; font-style: italic; }

/* Mobile collapse — same off-canvas mechanism as the Files page's
   #fs_nav/#fs_nav_toggle (ui_style.php ~14108) and the Write page's
   analogous block above, applied to #journal_list_pane/#journal_body
   instead. Toggled by index-late-bind.pjs's _journal_toggle_list_
   pane()/_journal_close_list_pane(), bound to the hoisted "☰"
   titlebar button. */
@media (max-width: 767px) {
    html.log-page #journal_body { position: relative; }
    html.log-page #journal_list_pane {
        position: absolute;
        top: 0; bottom: 0; left: -85%;
        width: 85%;
        max-width: 320px;
        z-index: 20;
        box-shadow: var(--elevation-3);
        transition: left 0.2s ease;
    }
    html.log-page #journal_body.list-open #journal_list_pane { left: 0; }
    html.log-page #journal_body.list-open::after {
        content: '';
        position: absolute;
        inset: 0;
        z-index: 19;
        background: rgba(0, 0, 0, 0.4);
    }
    html.log-page #journal_entry_pane { width: 100%; padding: 20px 16px; }
}
