
:root{--composer-h:0px;--panel-max-h:44vh;--panel-max-h-m:56vh;--navy:#070f1c;--navy2:#0a1626;--panel:#0e1b2e;--panel2:#0c1828;--line:#15293f;--line2:#26405c;   /* V2: canvas navy reconciled to the landing hero (#070f1c) so the chat matches www */
 --ink:#eaf6fb;--mut:var(--chrome-mut);--faint:var(--chrome-mut);--label:var(--chrome-mut);--gold:#c79a3e;--gold2:#e0b85a;--gold-deep:#c79a3e;--gold-ink:#1a1305;
 --cyan:#22d3ee;--cyan-soft:#7ee8f7;--good:#5e9e7a;--bad:#fb7185;--chip:#16263a;
 /* CHROME — the top panel's own palette, deliberately THEME-INVARIANT (founder 2026-09-07: "leave the
    top panel in one colour so we are consistent and dont jump around"). These are NOT redefined in
    body.light, so the header is the same navy on every page and in both themes. Before this, the chat
    page's header was hard navy while the chat-space header followed --panel2, which body.light turns
    near-white (#f3f8fc) - so the pale shield vanished and the bar changed colour between pages.
    These tokens are now the ONLY definition of the top bar's colours: the monolith's literal sheet that
    used to carry a second copy left this repository in B2 (2026-09-07). */
 --chrome:#0c1727;--chrome2:#0a1422;--chrome-line:#16304a;--chrome-ink:#eaf6fb;--chrome-mut:#93a6bb;
 /* ·CORTEX is FLAT in the darker gold (founder 2026-09-07: "I actually liked the flat CORTEX I just
    want it in the darker gold that we are using so that its more distinctive"). It cannot use --gold,
    which body.light repaints to #9a6f1c and would darken the wordmark on a bar that no longer changes;
    this is --gold's dark-theme value, pinned. It replaced a cyan-to-gold gradient, and since B2 it is the
    one definition of the mark anywhere in this repository. */
 --chrome-gold:#c79a3e;
 /* V4: 8pt spacing rhythm — one scale so vertical rhythm is pixel-clean (ChatGPT/Claude parity) */
 --sp1:8px;--sp2:16px;--sp3:24px;--sp-half:4px;
 /* V10: prose tokens — one body size + line-height across answer / reasoning / canvas reading surfaces */
 --fs-body:15.5px;--lh-body:1.7;
 /* ── DECLARED SCALE (2026-08-27) ─────────────────────────────────────────────────────
    A measured audit found 33 distinct font sizes, 6 weights, 16 line-heights and 27
    letter-spacings on this page, with only six tokens declared — sizes had grown by
    accretion, which is why the rhythm drifted. This is the declared system. It EXTENDS
    the existing --fs-/--lh-/--sp names rather than adding a parallel set.
    Type: 1.2-ish modular steps anchored on the body size already in use, so adopting a
    token is a no-op visually where the literal already matched the step. */
 --fs-2xs:11px;--fs-xs:12px;--fs-sm:13px;--fs-md:15px;
 --fs-lg:17px;--fs-xl:20px;--fs-2xl:26px;
 /* Four DECLARED FLUID steps. This page is fluid by design, so the responsive behaviour is
    part of the scale rather than an exception to it. Flattening these to fixed px was tried
    and reverted: it shrank the create headline and lost the hero subline's small-screen step. */
 --fs-display:clamp(28px,3.4vw,40px);   /* chat hero */
 --fs-folio:clamp(30px,4.4vw,46px);     /* create desk headline — the folio voice carries more presence */
 --fs-subhead:clamp(17px,2.2vw,23px);   /* light-panel head */
 --fs-lede:clamp(15px,1.9vw,18px);      /* hero subline */
 /* Line-height: three declared roles — display, heading, prose (--lh-body above). */
 --lh-tight:1.15;--lh-snug:1.35;
 /* Weight: five declared roles. 650 is retired (it was an accretion artefact);
    --w-heavy is reserved for brand wordmarks, never for UI text. */
 --w-regular:400;--w-medium:500;--w-semi:600;--w-bold:700;--w-heavy:800;
 /* Tracking: four declared roles. Display tightens, mono eyebrows open up. */
 --tr-tight:-.032em;--tr-snug:-.02em;--tr-none:0;--tr-wide:.16em;
 /* Space: the existing 8pt rhythm, completed. --sp-tap is the WCAG 2.5.5 touch floor. */
 --sp1half:12px;--sp4:32px;--sp5:40px;--sp-tap:44px;
 /* Dock: the collaboration panel's left column (DOCK_LEFT, 2026-09-04). One declared width, a
    multiple of 4; --w-* is the weight namespace so this is not --w-dock.
    SPLIT SCREEN (founder 2026-09-07): "when we start like this I still wanna see the chat so i suggest
    a split screen so we can still see the shared chat ... that way we make proper progress and we can
    see the work elara does". 320px was a narrow sidebar you had to trade against the conversation; the
    collaboration is half the work, so it gets half the room — 50vw, as asked, not a sidebar.
    Bounded at both ends: never below 320px, where the invite row wraps, and never above 720px, because
    past that "half" of an ultrawide monitor is a column nobody reads across. On a 1440 laptop that is
    an exact 720/720 split; on a 1920 screen the chat keeps the extra. --dock-w-call is the incoming-call
    card, which only ever needed a card's width and was borrowing this one. */
 --dock-w:clamp(320px,50vw,720px);
 --dock-w-call:320px;
 /* Family: one product face, one mono, one folio serif for the create desk.
    Inter FIRST — self-hosted @font-face below. With -apple-system/Segoe first, Windows
    never loads Inter and the chat glyphs look like the landing regression (founder 2026-08-27). */
 --ff-product:Inter,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
 --ff-mono:ui-monospace,Consolas,'SF Mono',monospace;
 --ff-folio:Georgia,'Times New Roman',serif;
 /* V11: one shared streaming caret spec (width / em-height / colour) */
 --caret-w:7px;--caret-col:var(--gold2);
 /* MOTION: one duration scale + the house curve, used by every transition on the maps page (2026-09-03) */
 --dur-instant:.07s;--dur-fast:.15s;--dur-base:.25s;--dur-slow:.35s;--dur-reveal:.45s;--ease-std:cubic-bezier(.2,.8,.2,1);
 /* DERIVED SCALE (docs/DESIGN_MATH.md; founder decision D9, 2026-09-05): one base, one ratio, and every fixed
    step is round-to-half(16px x 1.125^n) for n = -3..6. tests/test_design_math.py recomputes each value from
    --type-base and --type-ratio and fails on any step that was typed rather than derived. The legacy --fs-*
    names above keep their values until their judged migration; new surfaces (the proof pages) use the steps.
    Line boxes: prose boxes --lb-* sit near 1.5x and heading boxes --lbh-* near 1.2x, every one a multiple of
    4px, so text of any step lands on the 4px grid. Space extends the same 8pt rhythm; layout widths are
    whole rems; tints are color-mix of a declared colour, never a hard-coded rgba (the bible's halo rule). */
 --type-base:16px;--type-ratio:1.125;
 --fs-step--3:11px;--fs-step--2:12.5px;--fs-step--1:14px;--fs-step-0:16px;--fs-step-1:18px;
 --fs-step-2:20.5px;--fs-step-3:23px;--fs-step-4:25.5px;--fs-step-5:29px;--fs-step-6:32.5px;
 --lb-step--3:16px;--lb-step--2:20px;--lb-step--1:20px;--lb-step-0:24px;--lb-step-1:28px;--lb-step-2:32px;
 --lbh-step--1:20px;--lbh-step-0:20px;--lbh-step-1:24px;--lbh-step-2:24px;--lbh-step-3:28px;--lbh-step-4:32px;--lbh-step-5:36px;--lbh-step-6:40px;
 --sp6:48px;--sp8:64px;--sp10:80px;
 --measure:34rem;--measure-wide:60rem;--col-label:4rem;--logo:30px;--icon:24px;
 --bw-hair:1px;--bw-rule:2px;--z-header:50;--z-menu:30;
 --tint-gold:color-mix(in srgb,var(--gold2) 14%,transparent);--tint-cyan:color-mix(in srgb,var(--cyan) 10%,transparent);
 --tint-ink:color-mix(in srgb,var(--ink) 6%,transparent);--halo-cyan:color-mix(in srgb,var(--cyan) 40%,transparent);--halo-canvas:radial-gradient(1240px 820px at 50% -6%,color-mix(in srgb,var(--cyan) 18%,transparent),transparent 70%);--band-h:calc(var(--sp8) * 8);--band-h-m:calc(var(--sp8) * 9);   /* eight section rhythms on desktop, nine on a phone; the nine-everywhere of 2026-09-13 existed only to fit a panel that has since been reverted */--card-min:calc(var(--sp8) * 4);
 --shade:color-mix(in srgb,var(--navy) 85%,transparent);
 /* The .LEKOLA CODE ATELIER lockup. It is a brand constant that appears on every surface, and its metrics
    lived only inside this page's own .ec-lk rules, so a chat-space page could imitate the card but never
    render it -- which is how the proof pages ended up with a gold-and-grey approximation that dropped the
    cyan half of the two-tone. Promoted to tokens so ONE source drives the lockup wherever it appears. The
    tracking is unusually open (.40em) and the sub-line unusually small (8.5px) on purpose: this is a
    letterpress colophon, not UI text, and neither value belongs on the modular scale. */
 --lk-rule:54px;--lk-track:.40em;--lk-track-sub:.46em;--fs-lk:12px;--fs-lk-sub:8.5px;
 /* PAPER. The family is two-tone: a deep navy canvas carrying white panels (www.elara-cortex.com renders
    .plan and .card at #fff on a navy .band). A panel cannot get there by picking a light background, because
    every rule inside it reads --ink, --mut and --line and would keep painting for a dark ground. These are the
    body.light values, verbatim and from the same palette, exposed at :root so a SECTION can remap the colour
    tokens for its own subtree -- see .pg-paper in elara_pages.css. One palette, two grounds. */
 --paper:#ffffff;--paper-2:#f3f8fc;--paper-ink:#0c1727;--paper-mut:#54677a;--paper-faint:#6a7d8f;
 --paper-line:#d6e2ec;--paper-line2:#c2d3df;--paper-gold:#805b16;--paper-cyan:#0e7490;
 --paper-good:#217348;--paper-bad:#b4233d;
 /* GLOW. The halo on the calling card shipped as three hand-typed rgba stops -- 7/16/31px at .6/.37/.22 --
    which is the drift the style bible names by name ("derived from the existing --cyan token via color-mix,
    never a hard-coded rgba"). Measured 2026-09-07, those numbers were never arbitrary: the radii are the 8pt
    grid doubled (8, 16, 32; residual <= 1px) and the opacities are a geometric decay on 1/phi = 0.618034 from
    0.60 (0.60, 0.3708, 0.2292; max residual 0.0092). That is the same golden mean the type scale's own anchor
    cites (Tim Brown, A List Apart, 1:1.618), so the glow is a modular scale and is now written as one. The
    colours are color-mix over --gold2 and --cyan, so a brand colour change carries the halo with it and the
    literal ratchet stays at zero. Where glow MAY be used is a rule, not a preference: docs/DESIGN_MATH.md. */
 /* The cyan edge. Cyan is the brand's second colour and the bible reserves it for the halo, so it enters a
    page as an EDGE rather than as fill or text: a hairline that says the card is ours without competing with
    the single gold accent marking the recommended plan. color-mix over --cyan, so a brand change carries it
    and it never becomes a typed rgba. Two strengths because the ground differs. */
 --edge-cyan:color-mix(in srgb,var(--cyan) 62%,var(--line));
 --edge-cyan-soft:color-mix(in srgb,var(--cyan) 38%,var(--line));--strobe-edge:conic-gradient(from 0deg,var(--cyan),var(--gold2),var(--cyan));--cta-gold-fill:linear-gradient(180deg,var(--gold2),var(--gold));--grad-gold-cta:var(--cta-gold-fill);--scrim-image:linear-gradient(180deg,transparent 0%,color-mix(in srgb,var(--chrome) 22%,transparent) 58%,color-mix(in srgb,var(--chrome) 52%,transparent) 100%);--chip-fill:color-mix(in srgb,var(--cyan) 10%,transparent);--chip-line:color-mix(in srgb,var(--cyan) 30%,transparent);
 /* THE FIELD. A dark band with nothing on it is flat, and the usual cures -- a photograph, a blur, a mesh
    gradient -- are all foreign to a surface whose whole argument is that its proportions are derived. So the
    pattern is the space scale drawing ITSELF: three hairline fields at 32, 64 and 128px, the same doubling
    the glow radii use. They superimpose, so a line falls every 32px, a double every 64 and a triple every
    128 -- the octave structure of the 8pt grid, made just visible. The opacities are the same 1/phi = 0.618
    decay as the glow (4%, 2.47%, 1.53% of --cyan), so the finest rhythm is the faintest and the eye reads
    depth rather than stripes. Cyan because the bible reserves it for the halo and this is the halo's field.
    Nothing here is typed: periods are space tokens, the line weight is --bw-hair, the colours are color-mix,
    and 45deg is an angle, which the literal ratchet does not count. */
 /* Four stops on ONE ramp: the 1/phi decay again, 4% -> 2.47% -> 1.53% -> 0.94%. Each layer's LINE takes one
    stop and its HALO takes the next, so a line always glows at exactly the strength of the line one order
    finer than it. The halo is built into the gradient rather than added with a filter: a drop-shadow on a
    full-bleed rectangle shadows the rectangle, not the hairlines inside it, so it would have produced an
    edge and no glow at all. */
 --field-c1:color-mix(in srgb,var(--cyan) 4%,transparent);
 --field-c2:color-mix(in srgb,var(--cyan) 2.47%,transparent);
 --field-c3:color-mix(in srgb,var(--cyan) 1.53%,transparent);
 --field-c4:color-mix(in srgb,var(--cyan) 0.94%,transparent);
 /* The halo radius is the layer's own term of the glow scale -- 8, 16, 32 -- which is also its period
    divided by four, so the coarser the line the wider its glow and the three read as one depth. */
 --field-1:repeating-linear-gradient(45deg,var(--field-c1) 0,var(--field-c1) var(--bw-hair),var(--field-c2) var(--bw-hair),transparent var(--glow-r1),transparent var(--sp4));
 --field-2:repeating-linear-gradient(45deg,var(--field-c2) 0,var(--field-c2) var(--bw-hair),var(--field-c3) var(--bw-hair),transparent var(--glow-r2),transparent var(--sp8));
 --field-3:repeating-linear-gradient(45deg,var(--field-c3) 0,var(--field-c3) var(--bw-hair),var(--field-c4) var(--bw-hair),transparent var(--glow-r3),transparent calc(var(--sp8) * 2));
 /* Cycle lengths: consecutive Fibonacci seconds. Each layer drifts exactly ONE of its own periods per cycle,
    so each loops seamlessly on its own; 34, 55 and 89 share no small common multiple, so the three realign
    only after their LCM and the combined field is quasi-periodic rather than a loop a reader can catch.
    Fibonacci because its successive ratios converge on phi -- the constant the glow opacities and the type
    scale already stand on, so the motion belongs to the same number as the proportions. */
 --field-t1:34s;--field-t2:55s;--field-t3:89s;--z-content:1;
 --glow-r1:var(--sp1);--glow-r2:var(--sp2);--glow-r3:var(--sp4);
 --glow-gold:0 0 var(--glow-r1) color-mix(in srgb,var(--gold2) 60%,transparent),
             0 0 var(--glow-r2) color-mix(in srgb,var(--gold2) 37%,transparent),
             0 0 var(--glow-r3) color-mix(in srgb,var(--gold2) 23%,transparent);
 --glow-cyan:0 0 var(--glow-r1) color-mix(in srgb,var(--cyan-soft) 60%,transparent),
             0 0 var(--glow-r2) color-mix(in srgb,var(--cyan-soft) 37%,transparent),
             0 0 var(--glow-r3) color-mix(in srgb,var(--cyan-soft) 23%,transparent);--glow-gold-hi:var(--glow-gold),var(--glow-gold);--glow-cyan-hi:var(--glow-cyan),var(--glow-cyan);--dur-breath:3.4s;   /* the halo's breath (2026-09-11): the peak is the resting scale laid twice (no new number); one period for the chat and the pages */
 /* WHAT SURVIVED THE 2026-09-13 REVERT, and why only this much (docs/DESIGN_MATH.md section 6b).
    Answering "the tokens are boring" with surfaces, an elevation ramp, gradient text, a glass panel and a gold leading
    rule added thirteen tokens and broke six lines of this system's own doctrine. The founder read the result as terrible
    and the audit agreed. What is left is the two things the mathematics admits on its own terms:
    THE DISPLAY STEP, n = 9 on the same base and ratio, round_half(16 x 1.125^9) = 46 on a 56px line box (1.217, inside
    the heading range, divisible by four). A bigger headline is scale doing the work rather than paint.
    THE PAPER FACE, the Computer Modern KaTeX already ships, so a research paper is set in the face its own mathematics
    is set in, at a 42rem measure. Neither adds a colour, a shadow or an effect.
    --grad-chrome stays because the top bar and the sidebar foot were ALREADY that gradient as typed literals; naming it
    removed two literals and changed no pixel. A gradient as a BACKGROUND on chrome is not gradient TEXT (section 7). */
 --grad-chrome:linear-gradient(180deg,var(--chrome),var(--chrome2));
 --fs-step-9:46px;--lbh-step-9:56px;
 --ff-paper:KaTeX_Main,'Latin Modern Roman','Computer Modern',Georgia,'Times New Roman',serif;--ff-paper-sans:var(--ff-product);--measure-paper:42rem}
/* LIGHT THEME TOKENS. The light theme was 145 of 152 rules hardcoding a colour and only 8
   redefining a token, so light-mode contrast could not be COMPUTED at all -- there was no token
   set to compute from. Every value below is DERIVED from what those rules already use, not
   invented: #0c1727 ink (x24), #52677a muted (x4), #6a7d8f faint (x3), #0e7490 cyan (x17),
   #9a6f1c gold (x14), #8a6418 gold-deep (x12), #ffffff panel (x12) -- and each matches the
   canonical palette in .claude/rules/design_consistency_single_source.md.
   Safe because the roles are disjoint, measured: --navy/--navy2/--panel/--panel2/--chip/--line
   are background-only (0 text uses) and --ink/--mut/--faint/--label are text-only. ADDITIVE --
   this removes no rule; the 145 hardcoded ones still win on their own selectors and are the
   remaining migration. What this buys now is that light contrast becomes measurable. */
body.light{
  --navy:#f6f9fb;--navy2:#f3f8fc;--panel:#ffffff;--panel2:#f9fcfe;
  --chip:#eef4f8;--line:#d7e3ec;--line2:#c3d4e0;
  --ink:#0c1727;--mut:#54677a;--faint:#54677a;--label:#54677a;
  --gold:var(--paper-gold);--gold-deep:#8a6418;
}
/* --gold2 and --cyan (and, measured one step later, --cyan-soft) were deliberately NOT redefined
   above: unlike --ink/--mut/--faint/--label/--navy/--panel (genuinely disjoint, text-only vs
   background-only per the comment above), these accent tokens are each read by AT LEAST ONE
   component with a HARDCODED dark background that stays dark in every theme by design --
   .bubble pre.code (terminal-style code blocks) for --gold2/--cyan, .side-card .ce for
   --cyan-soft. light_mode_contrast_audit.py caught 20+ real failures the moment those elements
   inherited a light-panel-darkened accent instead of the bright one they actually sit on; each
   redefinition attempt was re-tested against the full audit, not assumed safe from the first
   one. Only --gold-deep survives broad redefinition -- nothing reads it against a hardcoded-dark
   background. Components that DO need a darkened accent on an actual light panel (kbdhelp kbd)
   get their own scoped override below instead of a second global token fight. */
body.light .kbdhelp kbd{color:#0e7490}

@font-face{font-family:'Inter';src:url('/vendor/fonts/inter-latin-wght-normal.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:'Outfit';src:url('/vendor/fonts/outfit-latin-wght-normal.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url('/vendor/fonts/jetbrains-mono-latin-wght-normal.woff2') format('woff2');font-weight:100 800;font-style:normal;font-display:swap}
*{box-sizing:border-box}html,body{height:100%;margin:0;overflow-x:hidden}html{-webkit-tap-highlight-color:transparent}/* squeeze-proof: no off-canvas panel / transient can ever force a horizontal scrollbar (WCAG 2.2 SC 1.4.10 reflow) */
body{font-family:Inter,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;color:var(--ink);
 background:var(--halo-canvas),
            radial-gradient(1000px 560px at 50% -4%,rgba(224,184,90,.10),transparent 64%),var(--navy);
 -webkit-font-smoothing:antialiased;display:flex;flex-direction:column;height:100vh;height:100dvh;overflow:hidden}
a{color:inherit;text-decoration:none}
svg{display:block}
/* gold monochrome icon — every functional glyph inherits gold via currentColor */
.ic{width:18px;height:18px;color:var(--gold2);flex:0 0 auto}
/* ---- sidebar ---- */
#side{flex:0 0 auto;align-self:stretch;width:272px;height:100%;max-height:100%;background:linear-gradient(180deg,#0c1727,#0a1422);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0;overflow:hidden;transition:width .22s cubic-bezier(.4,0,.2,1),opacity .18s ease}
/* slim top bar: the ELARA·CORTEX wordmark lives in the page masthead, so the sidebar reclaims that
   space (founder 2026-07-04) and the useful content — New chat, Search, Goals, history — sits higher */
#side .top{padding:0 var(--sp1);display:flex;align-items:center;gap:var(--sp1);min-height:var(--sp-tap);height:var(--sp-tap);box-sizing:border-box;flex:0 0 var(--sp-tap);background:linear-gradient(180deg,#0c1727,#0a1422);border-bottom:1px solid rgba(224,184,90,.2)}
body.light #side .top{background:linear-gradient(180deg,#ffffff,#f4f8fb);border-bottom:1px solid var(--line2,#d6e1ec)}  /* founder: kill the dark dead band at the top of the sidebar in light mode — blend it into the light sidebar */
body.light #side .top .bword{color:#0c1727}  /* the ELARA wordmark must be dark on the now-light masthead */
body.light #side .top .railbtn,body.light #side .top .railbtn .ic{color:#52677a}   /* panel-toggle + × icons: gold (--gold2) is near-invisible on white — use muted dark ink */
body.light #side .top .shield{filter:brightness(0);opacity:.65}   /* logo.png is light-on-transparent (designed for dark sidebar) → black silhouette on white */
body.light #effortSel{background:#eef4f8!important;color:#0c1727!important;border-color:#c3d2df!important}  /* founder: the Thinking/Auto select was dark navy (--chip) = a "black box" invisible in light mode; make it legible */
#side .top .bhome{display:flex;align-items:center;gap:9px;text-decoration:none;flex:1 1 auto;min-width:0}
#side .top .sp{flex:1 1 auto}
/* header shield is SHARP / glow-free, exactly like the landing #ecHdr brand — the halo lives only in the calling card + the hero */
.shield{width:26px;height:26px;filter:none;animation:none}
@keyframes halo{0%,100%{}50%{}}
@media(prefers-reduced-motion:reduce){.shield,.brain,.empty .logowrap .logo,.empty .logowrap::before,.empty .logowrap::after{animation:none}   /* the calling card's reduced-motion rule lives with its one definition in elara_chat_header.css */}
#side .bcol{display:none}   /* wordmark not repeated in the sidebar — the masthead carries it; reclaim the space */
#side .bword{font-weight:800;letter-spacing:.14em;font-size:13px;line-height:1;color:#eaf6fb}.bword span{background:linear-gradient(90deg,var(--cyan-soft),var(--gold2));-webkit-background-clip:text;background-clip:text;color:transparent}
/* the two org-lines under ELARA·CORTEX — the full landing lockup, scaled for the 272px rail */
#side .binst{display:none}/* the institutional org-lines live in the top <header> only — the sidebar shows the compact wordmark (no repeat) */
#side .binst span:first-child{color:var(--gold)}#side .binst span:last-child{color:#9fb6c6}
body.light #side .binst span:first-child{color:#9a6f1c}body.light #side .binst span:last-child{color:#52677a}
.newbtn{margin:12px 12px 6px;padding:11px 13px;border:0;background:linear-gradient(180deg,var(--gold2),var(--gold-deep));color:#1a1305;font-size:14px;font-weight:800;cursor:pointer;display:flex;align-items:center;gap:8px;transition:transform .15s ease,filter .15s ease,box-shadow .15s ease}   /* V-pass6: calmer elevation, still the one primary; radius L1106 */
/* display:none added here, unconditionally, on every width (founder, 2026-09-09, live screenshot:
   "you have 2 of the same button" in full browser mode). #side's own "+ New chat" is ALWAYS the
   sole entry point now: on true desktop it is on-screen at all times (elara_chat.html:247, no
   media gate) and stays functional even collapsed to a rail (body.sidecollapsed hides only its
   text label, confirmed live); everywhere narrower, #menuBtn (verified reachable and functional
   at 834px too, not just under 760px) opens the same drawer in one tap. The other declarations
   below are left in place rather than deleted, in case a future context needs this button back.
   Receipt: artifacts/mobile-declutter-2026-09-09/mobile_declutter_receipt.json */
/* founder 2026-09-16: plus-only tap square on the tool strip (signs, not words). Sidebar keeps
   the labelled New chat. Duplicate gold word-buttons was the 2026-09-09 defect; a sign vs a
   labelled rail control is not that defect. */
#newChatTop.newbtn-bar{display:inline-flex;margin:0;padding:0;font-size:var(--fs-sm);width:var(--sp-tap);height:var(--sp-tap);min-width:var(--sp-tap);max-width:var(--sp-tap);min-height:var(--sp-tap);max-height:var(--sp-tap);flex:0 0 var(--sp-tap);z-index:3;position:relative}
.newbtn:hover{filter:brightness(1.05);transform:translateY(-1px);}.newbtn:active{transform:translateY(0) scale(.985)}.newbtn .ic{width:16px;height:16px;color:#1a1305}
.side-eyebrow{padding:10px 16px 5px;font:700 9.5px/1.4 Consolas,ui-monospace,monospace;letter-spacing:.22em;text-transform:uppercase;color:var(--gold)}   /* V9: canonical eyebrow tracking .22em (matches site_shell .ec-kicker) */
/* History/goals scroll in #sidescroll. Nav is PINNED above the account/footer so Settings stays
   in the viewport (live 543: nav lived in the scroller and sat under .side-foot). */
#sidescroll{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--line2) transparent}
#sidescroll::-webkit-scrollbar{width:8px}#sidescroll::-webkit-scrollbar-thumb{background:var(--line2)}#sidescroll::-webkit-scrollbar-track{background:transparent}
#hist{flex:1 0 auto;overflow-x:hidden;overflow-y:visible;padding:2px 8px 6px}
#hist .h{position:relative;display:flex;align-items:center;width:100%;padding:var(--sp1) var(--sp1half);margin:0;border:0;background:transparent;color:var(--mut);font:inherit;font-size:var(--fs-sm);text-align:left;cursor:pointer;user-select:none;-webkit-user-select:none;touch-action:manipulation;-webkit-appearance:none;appearance:none;box-shadow:none;border-radius:0;transition:background .14s ease,color .14s ease,box-shadow .14s ease}   /* V4: 8pt rhythm (8/12) · V3: radius stripped · UA button chrome stripped so Workstreams/Knowledge match Collaborations */
#hist .h:hover{background:rgba(224,184,90,.09);color:var(--ink)}#hist .h.on{background:rgba(224,184,90,.14);color:var(--ink);border-left:var(--bw-rule) solid var(--gold)}
#hist .h .ht{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;transition:padding-right .12s ease}
#hist .h:hover .ht,#hist .h.on .ht{padding-right:30px}
#hist .h:focus-within .ht{padding-right:30px}
#hist .h .hact{position:absolute;right:5px;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:1px;opacity:0;transition:opacity .14s ease}
#hist .h:hover .hact,#hist .h.on .hact{opacity:1}
#hist .h:focus-within .hact{opacity:1}
#hist .h .hbtn{width:24px;height:24px;border:0;background:none;color:var(--faint);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:0;-webkit-appearance:none;appearance:none}
#hist .h .hbtn:hover{color:var(--gold2);background:rgba(224,184,90,.16)}#hist .h .hbtn.del:hover{color:var(--bad);background:rgba(251,113,133,.16)}
#hist .h .hbtn .ic{width:14px;height:14px;color:currentColor}
#hist .h:focus{outline:2px solid var(--gold);outline-offset:-2px}
#hist .h:focus:not(:focus-visible){outline:none}
#hist .hren{flex:1 1 auto;min-width:0;width:100%;background:var(--navy2);border:1px solid var(--gold);color:var(--ink);font:inherit;font-size:13.5px;padding:2px 6px;outline:none;-webkit-appearance:none;appearance:none}
/* §27 hover synthesis card — navy chrome, gold labels. Never inherit light --panel white. */
#histSynth.hsynth{position:fixed;z-index:90;width:min(320px,calc(100vw - 24px));max-height:min(420px,70svh);overflow:auto;padding:12px 14px 14px;background:#0e1b2e;color:#eaf6fb;border:1px solid #16304a;border-radius:0;font:inherit;font-size:13px;line-height:1.45}
#histSynth.hsynth[hidden]{display:none!important}
#histSynth .hs-k{font-weight:600;font-size:12px;line-height:1.35;font-family:inherit;letter-spacing:0;text-transform:none;color:var(--gold2);margin:12px 0 3px}
#histSynth .hs-k:first-child{margin-top:0}
#histSynth .hs-v{color:#eaf6fb;font-size:14px;line-height:1.45}
#histSynth .hs-why{margin-top:10px;color:#8aa3b8;font-size:12px}
#histSynth .hs-ttl{font-weight:700;color:#eaf6fb;margin:0 0 6px;font-size:13px}
#histSynth .hs-act{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap}
#histSynth .hs-act button{background:var(--gold2);color:#1a1305;border:0;padding:8px 12px;font-weight:700;cursor:pointer;font:inherit;font-size:12px}
#histSynth .hs-act button:hover{background:#eec684}
.hnav{display:flex;flex-wrap:wrap;gap:2px;padding:2px 0 8px}
.hnav-b{background:none;border:0;border-bottom:2px solid transparent;color:var(--faint,#6f8499);font:inherit;font-size:10.5px;padding:6px 7px;cursor:pointer}
.hnav-b.on{color:var(--gold,var(--gold2));border-bottom-color:var(--gold,var(--gold2));font-weight:600}
/* light theme: #c79a3e gold text on the near-white sidebar measured 2.51:1 (light_mode_contrast_audit).
   The underline keeps the gold brand cue; the LABEL takes the established light-mode gold ink
   #8a6418 (5.21:1), the same token already used for .collab-start and .cvtrust b. */
body.light .hnav-b.on{color:#8a6418;border-bottom-color:var(--gold,#c79a3e)}
/* "Please sign in to …" links: the colour was an inline style pinned to --gold2, so the
   light theme could not correct it and it measured 1.88:1 on white. Class-based instead. */
.signinlink{color:var(--gold2,var(--gold2));text-decoration:underline;cursor:pointer}
body.light .signinlink{color:#8a6418}
/* E4 (2026-09-07): the collaboration region of this page, on the declared scale.
   The plan expected the room strip, the invite block and the share row to live here. They do not —
   two differently-shaped probes agree this page mentions #roomStrip exactly once, in the button rule
   further down; every strip rule is built by elara_rooms.js and was migrated in E3. What IS here is
   the collaborations list in the sidebar and the rail flyout: the surface a person uses to GET to a
   collaboration, which was carrying raw hex (var(--gold2), #0e1b2e, #0f1d31) rather than tokens.
   --gold2 IS var(--gold2) and --panel IS #0e1b2e, so these are renames, not repaints; --navy2 replaces
   #0f1d31 and --ink replaces #eaf6fb on the same basis. The rendered result is checked at four widths
   and both themes: artifacts/collab-symmetry/collab_symmetry_receipt.json */
#hist .collab-start{display:block;width:calc(100% - var(--sp2));margin:var(--sp-half) var(--sp1) 10px;padding:9px var(--sp1half);border:var(--bw-hair) solid var(--gold2);background:var(--panel);color:var(--gold2);font-weight:var(--w-semi);font-size:var(--fs-sm);font-family:inherit;cursor:pointer;text-align:left;border-radius:0}
#hist .collab-start:hover{background:var(--navy2);color:var(--ink)}
#hist .collab-f{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:var(--sp1) var(--sp1half);margin:0;border:0;background:none;color:inherit;cursor:pointer;font:inherit;-webkit-appearance:none;appearance:none;box-shadow:none;border-radius:0}
#hist .collab-f .hact{display:none!important}
#hist .collab-f.collab-room .hact{display:inline-flex!important;margin-left:auto}   /* rooms carry the same kebab every chat row has (deletable, 2026-09-04) */
#hist .collab-f:hover{background:color-mix(in srgb,var(--gold2) 12%,transparent)}
#hist .collab-av{flex:0 0 28px;width:28px;height:28px;border-radius:50%!important;display:inline-flex;align-items:center;justify-content:center;font-weight:var(--w-bold);font-size:var(--fs-2xs);font-family:inherit;color:var(--gold2);background:var(--panel);border:var(--bw-hair) solid var(--gold2)}
#hist .collab-meta{min-width:0;display:flex;flex-direction:column;gap:1px}
#hist .collab-name{font-weight:var(--w-semi);color:var(--ink);font-size:var(--fs-sm)}
#hist .collab-email{font-size:var(--fs-2xs);color:var(--mut);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.leftoff{margin:var(--sp1half) 0 16px;padding:14px 16px;border:1px solid var(--gold2);background:var(--navy2);max-width:62ch;text-align:left;border-radius:0}
.leftoff-h{font-weight:var(--w-bold);margin:0 0 var(--sp1);color:var(--ink);font-size:var(--fs-md)}
/* The label treatment (bold, tracked, uppercase, gold) is ONE declared rule for BOTH themes now --
   previously light silently dropped every one of those (weight 600 not 700, tracking 0 not wide,
   case sentence not upper, colour a near-miss of --mut instead of the gold accent) so the SAME
   card read as a confident branded eyebrow in dark and as quiet grey body text in light. Colour is
   --gold-deep, which the fix above makes theme-correct instead of a hardcoded hex per theme. */
.leftoff-k{font:var(--w-bold) var(--fs-2xs)/1.4 var(--ff-mono);letter-spacing:var(--tr-wide);text-transform:uppercase;color:var(--gold-deep);margin:var(--sp1) 0 var(--sp-half)}
.leftoff-v{color:var(--ink);font-size:13.5px;line-height:var(--lh-body)}
.leftoff-empty{color:var(--mut);font-size:13.5px}
/* leftover on the empty start: navy chrome (dark hero). Light theme keeps paper on the paper canvas. */
.empty .leftoff{margin:0 auto 18px;padding:16px 18px;max-width:36rem;box-shadow:none}
body.light .empty .leftoff{background:var(--panel);border:1px solid var(--line)}
body.light .empty .leftoff-h{color:var(--ink);font-size:var(--fs-lg);font-weight:var(--w-semi);letter-spacing:var(--tr-snug);margin:0 0 var(--sp1half)}
body.light .empty .leftoff-v{color:var(--ink);font-size:var(--fs-md);line-height:1.45;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
body:not(.light) .empty .leftoff{background:var(--navy2);border:1px solid var(--gold2)}
body:not(.light) .empty .leftoff-h{color:var(--ink);font-size:var(--fs-lg);font-weight:var(--w-bold);letter-spacing:var(--tr-none);margin:0 0 var(--sp1half)}
body:not(.light) .empty .leftoff-v{color:var(--ink);font-size:var(--fs-md);line-height:1.45;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.math-wrap{display:block;max-width:100%}
.math-status{display:inline-block;margin-top:4px;font:700 9.5px/1.4 Consolas,ui-monospace,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--cyan,#22d3ee)}
#cvwg{padding:10px 14px;border-top:1px solid var(--line,#15293f);font-size:13px;line-height:1.5;color:var(--ink);max-height:40%;overflow:auto}
.hempty{padding:18px 14px;color:var(--label);font-size:12.5px;text-align:center;line-height:1.55}
/* date-group headers (Today / Yesterday / Previous 7 days …) — replace the single Recent eyebrow */
.hgroup{padding:var(--sp1half) var(--sp1half) var(--sp-half);font:var(--w-bold) var(--fs-2xs)/var(--lh-snug) var(--ff-mono);letter-spacing:var(--tr-wide);text-transform:uppercase;color:var(--label)}
/* N1: date-group headers stick to the top of the scrolling history (ChatGPT/Claude parity) */
#hist .hgroup{position:sticky;top:0;z-index:2;background:#0c1727}
body.light #hist .hgroup{background:#f9fcfe}
#hist .hgroup.projhd{cursor:pointer}
#hist .hgroup:first-child{padding-top:5px}
/* search box under New chat */
.searchwrap{position:relative;margin:4px 12px 6px;display:flex;align-items:center}
.searchwrap .sic{position:absolute;left:10px;width:15px;height:15px;color:var(--faint);pointer-events:none}
#histSearch{width:100%;height:34px;padding:0 30px 0 32px;border:1px solid var(--line2);background:var(--panel2);color:var(--ink);font:inherit;font-size:13px;outline:none;-webkit-appearance:none;appearance:none;transition:border-color .14s ease}
#histSearch::placeholder{color:var(--faint)}#histSearch:focus{border-color:var(--gold)}
.searchwrap .sclr{position:absolute;right:7px;width:22px;height:22px;border:0;background:none;color:var(--faint);cursor:pointer;display:none;align-items:center;justify-content:center;padding:0;-webkit-appearance:none;appearance:none}
.searchwrap .sclr.show{display:inline-flex}.searchwrap .sclr:hover{color:var(--gold2)}.searchwrap .sclr .ic{width:13px;height:13px}
/* ---- Elara Teams goals sidebar panel — receipt: artifacts/projects-exceed-proof/receipt.json ---- */
.goal-panel{padding:0 0 4px}
.gp-hd{display:flex;align-items:center;padding:8px 13px 3px;gap:4px}
.hist-hd{padding-top:6px}
.gp-lbl{flex:1;font:700 9.5px/1.4 Consolas,ui-monospace,monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--label)}
/* collapsible section toggle (Goals + Chats) — caret rotates, section hides; state persisted */
.sec-tog{flex:1;min-width:0;display:flex;align-items:center;gap:6px;min-height:26px;border:0;background:none;padding:0;margin:0;cursor:pointer;text-align:left;-webkit-appearance:none;appearance:none;color:inherit}
.sec-tog:hover .gp-lbl{color:var(--gold2)}
.sec-caret{flex:0 0 auto;width:11px;font-size:9px;line-height:1;color:var(--faint);transition:transform .15s ease}
body.goals-collapsed .gp-hd:not(.hist-hd) .sec-caret,body.chats-collapsed .hist-hd .sec-caret{transform:rotate(-90deg)}
body.goals-collapsed #goalNew,body.goals-collapsed #goalList,body.goals-collapsed #goalSummPanel{display:none}
body.chats-collapsed #hist{display:none}
.gp-add{width:22px;height:22px;border:0;background:none;color:var(--faint);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:18px;line-height:1;padding:0;-webkit-appearance:none;appearance:none}
.gp-add:hover{color:var(--gold2);background:rgba(224,184,90,.14)}
.goal-item{position:relative;display:flex;align-items:center;gap:5px;padding:5px 11px 4px;cursor:pointer;user-select:none;-webkit-user-select:none;font-size:12.5px;color:var(--mut);transition:background .12s ease}
.goal-item:hover,.goal-item.gf{background:rgba(224,184,90,.12);color:var(--ink)}
.goal-item.gf{border-left:var(--bw-rule) solid var(--cyan)}
.goal-item .gt{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.goal-item .gbadge{flex:0 0 auto;font:600 10px/1 Consolas,monospace;background:rgba(34,211,238,.1);color:var(--cyan-soft);padding:1px 5px;font-variant-numeric:tabular-nums}   /* V-pass6 calmer badge; receipt scratchpad/pass6local_*.png */
.goal-item:active{background:rgba(224,184,90,.16)}#hist .h:active{background:rgba(224,184,90,.13)}   /* V-pass6: tactile press feedback (reduced-motion safe — colour only) */
.goal-item .gpb{flex:0 0 46px;height:4px;background:var(--line);overflow:hidden;}   /* V-pass6 goals track; receipt: scratchpad/pass6local_*.png */
.goal-item .gpbf{height:100%;min-width:2px;transition:width .32s cubic-bezier(.2,.7,.3,1);}   /* V-pass6: cyan glow via drop-shadow, 2px seed so 0% still reads, smoother easing */
.goal-item .gbtn{width:20px;height:20px;border:0;background:none;color:var(--faint);cursor:pointer;display:none;align-items:center;justify-content:center;font-size:11px;padding:0;-webkit-appearance:none;appearance:none;flex:0 0 auto}
.goal-item:hover .gbtn{display:inline-flex}
.goal-item .gbtn:hover{color:var(--gold2);background:rgba(224,184,90,.14)}
.goal-item .gbtn-del:hover{color:var(--bad);background:rgba(251,113,133,.14)}
.goal-new{display:none;gap:4px;padding:4px 10px 6px;align-items:center}
.goal-new input{flex:1;height:28px;padding:0 8px;border:1px solid var(--line2);background:var(--panel2);color:var(--ink);font:inherit;font-size:12.5px;outline:none;-webkit-appearance:none;appearance:none;min-width:0}
.goal-new input:focus{border-color:var(--gold)}
.goal-new button{height:28px;padding:0 10px;border:0;background:var(--gold2);color:#1a1305;font-weight:600;font-size:12px;line-height:1;font-family:inherit;cursor:pointer;-webkit-appearance:none;appearance:none;white-space:nowrap}
.goal-new button:last-child{background:none;color:var(--faint);padding:0 6px;font-size:15px}
.goal-new button:last-child:hover{color:var(--ink)}
.goal-summ-panel{margin:0 10px 6px;padding:10px 12px;border:1px solid var(--line2);font-size:12.5px;color:var(--ink);position:relative;line-height:1.55}   /* cyan glow-accent, calm surface */
.goal-summ-panel b{display:block;margin-bottom:4px;font-size:12px;color:var(--cyan)}
.goal-summ-panel p{margin:0}
.goal-summ-panel .gsumm-cls{position:absolute;top:6px;right:6px;width:20px;height:20px;border:0;background:none;color:var(--faint);cursor:pointer;font-size:13px;display:inline-flex;align-items:center;justify-content:center;-webkit-appearance:none;appearance:none;padding:0}
.goal-summ-panel .gsumm-cls:hover{color:var(--ink)}
.goal-summ-panel .gsumm-loading{color:var(--faint);font-style:italic;font-size:12px}
/* ---- Elara Teams goal management panel — receipt: artifacts/chat-parity/teams_goals_v2.json ---- */
.goal-item .gbtn-flt:hover{color:var(--gold2);background:rgba(224,184,90,.14)}
.goal-item.gdone .gt{text-decoration:line-through;opacity:.7}
.gm-title{width:100%;height:34px;padding:0 10px;margin:4px 0 2px;background:var(--panel2);border:1px solid var(--line2);color:var(--ink);font-weight:700;font-size:14px;font-family:inherit;outline:none}
.gm-title:focus{border-color:var(--gold)}
.gm-pills{display:flex;gap:6px;margin:2px 0 4px}
.gm-pills .gpill{flex:1;height:30px;border:1px solid var(--line2);background:none;color:var(--mut);font-weight:600;font-size:12px;font-family:inherit;cursor:pointer;text-transform:capitalize;-webkit-appearance:none;appearance:none}
.gm-pills .gpill:hover{border-color:var(--gold);color:var(--gold-deep,#8a6418)}
.gm-pills .gpill.on{background:rgba(224,184,90,.16);border-color:var(--gold);color:var(--gold-deep,#8a6418)}
body:not(.light) .gm-pills .gpill.on{color:var(--gold2)}
.gm-range{width:100%;margin:4px 0 2px;accent-color:var(--gold2)}
.gm-desc{width:100%;min-height:70px;background:var(--panel2);border:1px solid var(--line2);color:var(--ink);font-size:13px;line-height:1.5;font-family:inherit;padding:8px 10px;outline:none;resize:vertical}
.gm-desc:focus{border-color:var(--gold)}
#gpList .gp-pick{cursor:pointer}#gpList .gp-pick:hover{background:rgba(224,184,90,.12)}
/* ---- project / goal panels — CANONICAL .setcard parity (matches #agents) — receipt: artifacts/projects-brand-fix/receipt.json ---- */
.hgroup.projhd{cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px}
.hgroup.projhd .ppt-lab{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.hgroup.projhd .projhd-acts{display:inline-flex;align-items:center;gap:2px;flex:0 0 auto}
.hgroup.projhd .pcfg,.hgroup.projhd .pdel{opacity:0;font-size:11px;transition:opacity .12s ease}
.hgroup.projhd:hover .pcfg,.hgroup.projhd:hover .pdel{opacity:.85}
.hgroup.projhd .pdel{background:none;border:0;color:var(--faint);cursor:pointer;padding:4px;display:inline-flex;align-items:center;line-height:0}
.hgroup.projhd .pdel svg{width:14px;height:14px;display:block}
.hgroup.projhd .pdel:hover{color:#c45c5c}
.ppt-ico{display:inline-flex;align-items:center;vertical-align:middle;color:var(--gold2)}
.ppt-ico svg{width:16px;height:16px;display:block}
.projov{position:fixed;inset:0;z-index:340;background:rgba(2,8,16,.66);display:flex;align-items:center;justify-content:center;padding:18px}
.projpanel{width:680px;max-width:96vw;max-height:88svh;overflow:auto;background:var(--panel);border:1px solid var(--line2);padding:0 0 16px}/* receipt: artifacts/projects-brand-fix/receipt.json */
.projpanel>*{padding-left:20px;padding-right:20px}
.projpanel .pp-hd{display:flex;align-items:center;gap:10px;padding:15px 20px;margin:0 0 4px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);z-index:1}
.projpanel .pp-ttl{font-weight:800;font-size:16px;color:var(--ink);display:flex;align-items:center;gap:9px;margin:0}
.projpanel .pp-ttl .ppt-ico svg{width:18px;height:18px}
.pp-ico{font-style:normal;color:var(--gold2,var(--gold2))}.pp-ico-cyan{font-style:normal;color:var(--cyan,#22d3ee)}
.projpanel .pp-x{margin-left:auto;background:var(--panel2);border:1px solid var(--line2);color:var(--ink);cursor:pointer;font-size:13px;padding:8px 13px;line-height:1}
.projpanel .pp-x:hover{border-color:var(--cyan,#22d3ee);color:var(--cyan,#22d3ee)}
.projpanel .pp-lbl{font-size:14px;font-weight:700;color:var(--ink);margin:17px 0 7px;display:block}
.projpanel .pp-sub{font-size:12px;font-weight:400;color:var(--faint)}
.projpanel #projInstr,.projpanel textarea,.projpanel .gm-title{width:100%;background:var(--panel2);border:1px solid var(--line2);color:var(--ink);font:inherit;font-size:13.5px;padding:9px 11px;outline:none;resize:vertical}
.projpanel #projInstr{min-height:160px;font-size:14.5px;line-height:1.5}
.projpanel #projInstr:focus,.projpanel textarea:focus,.projpanel .gm-title:focus{border-color:var(--cyan,#22d3ee)}
.projpanel .pp-files{font-size:13px;color:var(--mut)}
.projpanel .pp-file{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 0;border-bottom:1px solid var(--line2)}
.projpanel .pp-del{background:none;border:0;color:var(--faint);cursor:pointer;font-size:12px;padding:2px 6px}
.projpanel .pp-del:hover{color:var(--ink)}
.projpanel .pp-row{display:flex;gap:8px;flex-wrap:wrap;margin:11px 0 4px}
.projpanel .pp-btn{background:var(--panel2);border:1px solid var(--line2);color:var(--ink);padding:8px 14px;cursor:pointer;font:inherit;font-size:13px}
.projpanel .pp-btn:hover{border-color:var(--cyan,#22d3ee);color:var(--cyan,#22d3ee)}
.projpanel .pp-save{background:transparent;color:var(--cyan,#22d3ee);font-weight:700;border:1px solid var(--cyan,#22d3ee);padding:8px 18px;cursor:pointer;font-size:13px}
.projpanel .pp-save:hover{filter:none;background:rgba(224,184,90,.14)}
.projpanel .pp-in{background:var(--panel2);border:1px solid var(--line2);color:var(--ink);font:inherit;font-size:13px;padding:8px 11px;outline:none}
.projpanel .pp-in:focus{border-color:var(--cyan,#22d3ee)}
.projpanel .pp-ft{margin:17px 0 0;padding-top:13px;border-top:1px solid var(--line2);font-size:12px;color:var(--faint);line-height:1.5}
.projbrow-row{border-bottom:1px solid var(--line2)}.projbrow-row .conn-name{color:var(--ink)}.projbrow-row .conn-off{color:var(--mut)}.projbrow-row:hover{background:rgba(224,184,90,.12)}.projbrow-row .conn-ico{color:var(--gold2,var(--gold2));font-weight:700}
/* ---- lightweight toast/status system (informational, non-blocking; replaces jarring alert()) ---- */
#toastHost{position:fixed;left:50%;bottom:calc(var(--composer-h) + var(--sp2));transform:translateX(-50%);z-index:520;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;max-width:min(360px,92vw)}
.toast{pointer-events:auto;background:var(--panel);border:1px solid var(--line2);color:var(--ink);font-weight:600;font-size:12.5px;line-height:1.4;font-family:inherit;padding:9px 14px;max-width:min(360px,92vw);border-radius:0;opacity:0;transform:translateY(8px);transition:opacity .18s ease,transform .18s ease}
.toast.show{opacity:1;transform:translateY(0)}
.toast.ok{border-color:var(--cyan)}
.toast.bad{border-color:var(--bad)}
@media(prefers-reduced-motion:reduce){.toast{transition:none;transform:none}}
/* ---- persistent offline banner ---- */
#offlineBar{position:fixed;top:0;left:0;right:0;z-index:530;display:none;text-align:center;background:var(--bad);color:#fff;font-weight:600;font-size:12.5px;line-height:1.5;font-family:inherit;padding:6px 12px;}
#offlineBar.show{display:block}
/* ---- Cmd/Ctrl+K command palette (reuses the projov overlay pattern) ---- */
#cmdPalOv{position:fixed;inset:0;z-index:560;background:rgba(2,8,16,.62);display:none;align-items:flex-start;justify-content:center;padding:74px 18px 18px}
#cmdPalOv.open{display:flex}
.cmdpal{width:min(560px,94vw);max-height:70svh;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--cyan);border-radius:0;overflow:hidden}
.cmdpal input{width:min(560px,94vw);max-width:none;box-sizing:border-box;background:var(--panel2);border:0;border-bottom:1px solid var(--line2);color:var(--ink);font:14px/1.4 inherit;padding:12px 14px;outline:none}
.cmdpal .cmdlist{overflow:auto;padding:5px}
.cmdpal .cmditem{display:flex;align-items:center;gap:10px;width:min(560px,94vw);max-width:none;box-sizing:border-box;text-align:left;background:none;border:0;color:var(--ink);font-weight:500;font-size:13px;line-height:1.4;font-family:inherit;padding:9px 11px;cursor:pointer;border-radius:0}
.cmdpal .cmditem:hover,.cmdpal .cmditem.on{background:var(--panel2)}
.cmdpal .cmditem .ck{margin-left:auto;font:600 10.5px Consolas,ui-monospace,monospace;color:var(--faint)}
.cmdpal .cmdempty{padding:14px;color:var(--faint);font-size:12.5px}
/* account pill above the LEKOLA bookend — pinned in the #side flex column so it cannot drift with window height */
.side-acct{flex:0 0 auto;padding:8px 10px;border-top:1px solid var(--line);position:relative;min-width:0}
/* account profile menu (popover above the pill) */
#acctmenu{display:none;position:absolute;left:10px;right:10px;bottom:calc(100% - 4px);background:var(--panel);border:1px solid var(--line2);z-index:30;padding:6px;max-height:calc(100svh - var(--sp5) * 4);overflow-y:auto}   /* one menu (2026-09-04): thirteen rows must scroll, never clip, inside #side{overflow:hidden} */
#acctmenu.open{display:block}
#acctmenu button{display:flex;align-items:center;gap:10px;width:100%;background:none;border:0;color:var(--ink);font:inherit;font-size:13px;padding:9px 10px;cursor:pointer;text-align:left;-webkit-appearance:none;appearance:none}
#acctmenu button .mail-badge{position:static;margin-left:6px}
body.m-mobile #acctmenu button{min-height:var(--sp-tap)}   /* one menu on a phone: every row is a touch target */
#acctmenu button:hover{background:rgba(224,184,90,.1)}
#acctmenu button .ic{width:15px;height:15px;color:var(--gold2)}
#acctmenu .am-sep{height:1px;background:var(--line);margin:5px 6px}
#acctmenu .am-plan{padding:7px 10px;font-size:11px;color:var(--label);white-space:nowrap}
/* pin: highlight when pinned */
#hist .h .hbtn.pinon{color:var(--gold2)}
#hist .h.pinned .ht{font-weight:600}
/* edit user message affordance */
.msg.user .body{position:relative}
.msg .editbtn{position:absolute;top:-2px;right:0;width:26px;height:26px;border:0;background:none;color:var(--faint);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;opacity:0;transition:opacity .14s ease}
.msg.user:hover .editbtn,.msg.user:focus-within .editbtn{opacity:1}.msg .editbtn:hover{color:var(--gold2)}.msg .editbtn .ic{width:15px;height:15px}
.msg .editbox{width:100%}
.msg .editta{width:100%;min-height:60px;background:var(--panel2);border:1px solid var(--gold);color:var(--ink);font:inherit;font-size:15px;padding:9px 11px;resize:vertical;outline:none;-webkit-appearance:none;appearance:none}
.msg .editrow{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}
.msg .editrow button{font-size:13px;font-weight:600;padding:7px 14px;cursor:pointer;border:1px solid var(--line2);background:var(--panel2);color:var(--ink);-webkit-appearance:none;appearance:none}
.msg .editrow button.prim{background:linear-gradient(180deg,var(--gold2),var(--gold-deep));color:#1a1305;border-color:var(--gold)}
#railsearch,#railrecents{display:none;margin:2px 9px;width:40px;height:38px;align-items:center;justify-content:center;border:1px solid var(--line2);background:var(--panel2);color:var(--gold2);cursor:pointer;-webkit-appearance:none;appearance:none}
#railsearch:hover,#railrecents:hover{border-color:var(--gold)}#railsearch .ic,#railrecents .ic{width:18px;height:18px}
/* N12: collapsed-rail recents pop-over */
#railFlyout{position:fixed;z-index:70;min-width:230px;max-width:min(300px,80vw);max-height:70svh;overflow-y:auto;background:var(--panel);border:1px solid var(--line2);padding:6px}
/* E4: the rail flyout — the fastest route to a recent collaboration — on the declared scale. */
#railFlyout .rf-hd{font:var(--w-bold) 9.5px/1.4 var(--ff-mono);letter-spacing:var(--tr-wide);text-transform:uppercase;color:var(--label);padding:6px 10px var(--sp-half)}
#railFlyout .rf-row{display:block;width:min(300px,80vw);text-align:left;background:none;border:0;color:var(--mut);font:inherit;font-size:var(--fs-sm);padding:var(--sp1) 10px;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
#railFlyout .rf-row:hover,#railFlyout .rf-row:focus-visible{background:color-mix(in srgb,var(--gold2) 10%,transparent);color:var(--ink);outline:none}
#railFlyout .rf-row.on{color:var(--ink);border-left:var(--bw-rule) solid var(--gold)}
#railFlyout .rf-new{color:var(--gold2);border-top:var(--bw-hair) solid var(--line);margin-top:var(--sp-half)}
.acctpill{width:100%;display:flex;align-items:center;gap:10px;padding:8px 9px;border:1px solid transparent;background:none;color:var(--ink);cursor:pointer;text-align:left;-webkit-appearance:none;appearance:none;transition:background .14s ease,border-color .14s ease}
.acctpill:hover{background:rgba(224,184,90,.08);border-color:rgba(224,184,90,.22)}
.acctpill .apav{flex:0 0 auto;width:30px;height:30px;background:linear-gradient(180deg,var(--gold2),var(--gold-deep));color:#1a1305;font:800 12px/1 Inter,-apple-system,sans-serif;display:flex;align-items:center;justify-content:center}
.acctpill .apinfo{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:1px}
.acctpill .apinfo b{font-weight:600;font-size:12.5px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acctpill .apinfo span{font-size:10.5px;color:var(--label);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acctpill>.ic{flex:0 0 auto;width:15px;height:15px;color:var(--faint)}
/* sidebar collapse / expand rail buttons */
.railbtn{flex:0 0 auto;width:30px;height:30px;border:0;background:none;color:var(--gold2);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-appearance:none;appearance:none;transition:background .14s ease}
.railbtn:hover{background:rgba(224,184,90,.12)}.railbtn .ic{width:18px;height:18px;color:var(--gold2)}
/* Sidebar restore lives on #collapseBtn in #side .top (and #menuBtn at <=1024px).
   A header opener here doubled the control in the compact bar (founder 2026-09-16). */
/* ---- collapsed ICON RAIL (desktop): slim 58px strip with New-chat + search, not a full hide (exceeds ChatGPT's pure rail) ---- */
@media(min-width:761px){
 body.sidecollapsed #side{width:58px}
 body.sidecollapsed #side .bword,body.sidecollapsed .searchwrap,body.sidecollapsed #hist,body.sidecollapsed .hist-hd,body.sidecollapsed #goalPanel,body.sidecollapsed .side-card,body.sidecollapsed .side-acct,body.sidecollapsed .side-foot,body.sidecollapsed #side .newbtn .nl,body.sidecollapsed #side .top .bhome{display:none}
 body.sidecollapsed #side .top{justify-content:center;padding:15px 0}
 body.sidecollapsed #side .top .sp{display:none}
 body.sidecollapsed #side .newbtn{margin:12px 9px 6px;justify-content:center;padding:11px 0;gap:0}
 body.sidecollapsed #railsearch,body.sidecollapsed #railrecents{display:flex}
 /* collapsed rail: the Context-Intelligence CTA becomes a neat 40px icon square (was a stretched
    tall box — the .t text wrapped vertically in the 58px rail). */
 body.sidecollapsed .ci-show{width:40px;height:38px;margin:2px 9px;padding:0;justify-content:center;gap:0;animation:none;}
 body.sidecollapsed .ci-show .t{display:none}
}
@media(max-width:760px){#collapseBtn{display:none}}
/* genuinely no-hover touch devices (AND, not OR): reveal row actions + larger targets + iOS-safe 16px inputs.
   AND-combined so a mouse-capable touchscreen laptop (reports hover:hover) keeps the elegant hover-reveal. */
@media (hover:none) and (pointer:coarse){
 #hist .h .ht{padding-right:36px}
 #hist .h .hact{opacity:1}
 #hist .h{padding-top:11px;padding-bottom:11px}
 #hist .h .hbtn{width:30px;height:30px}#hist .h .hbtn .ic{width:16px;height:16px}
 #histSearch,#hist .hren{font-size:16px}
 .sec-tog{min-height:40px}
 #hist .hgroup.projhd .pcfg,#hist .hgroup.projhd .pdel{opacity:.85}
 #hist .hgroup.projhd .pdel{width:40px;height:40px;justify-content:center}
}
/* fl/gap fallback for old WebKit (Safari <14.1 / WebKitGTK <2.32) — applied ONLY where flex gap is unsupported,
   so modern engines keep gap with no double-spacing */
@supports not (gap:1px){
 #side .top>*+*{margin-left:9px}.bhome>*+*{margin-left:9px}.newbtn>*+*{margin-left:8px}
 .acctpill>*+*{margin-left:10px}.acctpill .apinfo>*+*{margin-top:1px}
 .side-foot .ec-lk>*+*{margin-left:13px}#hist .h .hact>*+*{margin-left:1px}
}
/* navy capability card — echoes the /app "one engine" info card (gold accent words on navy) */
.side-card{margin:var(--sp-half) var(--sp1half) var(--sp1);padding:var(--sp1half) var(--sp1half);border-radius:0;background:linear-gradient(180deg,#0e1d31,#0a1626);border:1px solid rgba(224,184,90,.18);color:#9fb6c6;font-size:var(--fs-2xs);line-height:var(--lh-snug)}
.side-card b{color:var(--gold2);font-weight:700}.side-card .ce{display:block;font:700 9px/1.4 Consolas,ui-monospace,monospace;letter-spacing:.2em;text-transform:uppercase;color:var(--cyan-soft);margin-bottom:5px}
.ci-show{display:flex;align-items:center;gap:10px;width:calc(100% - 24px);margin:0 12px 10px;padding:11px 12px;border:1px solid var(--line2);background:var(--panel);color:var(--ink);cursor:pointer;text-align:left;animation:cibreathe 3.4s ease-in-out infinite}/* breathes (alive) in BOTH themes; the pulsing 1px ring reads even on a light sidebar */
@keyframes cibreathe{0%,100%{}50%{}}
.ci-show:hover{border-color:var(--cyan)}
body.light .ci-show{border-color:var(--line2);background:var(--panel)}
@media(prefers-reduced-motion:reduce){.ci-show{animation:none;}}
.ci-show .ic{width:20px;height:20px;flex:0 0 auto;color:#22d3ee}
.ci-show .t{display:flex;flex-direction:column;line-height:1.25;min-width:0}
.ci-show .t b{font-size:13px;font-weight:700;letter-spacing:-.01em}
.ci-show .t span{font-size:11px;color:var(--gold2)}
body.light .ci-show{color:#0c1727}body.light .ci-show .t span{color:#8a6418}
/* navy footer bookend — matches the /app footer (.LEKOLA · CODE ATELIER) */
/* THE CALLING CARD — EXACT bijection with the landing #ecFtr signature (founder: use the exact same, don't redo) */
/* Tokens since 2026-09-13 (twelve literals off the ratchet; the chrome gradient and hairline the top bar uses); the link
   rows render from elara_chat_space.FOOTER_GROUPS through the CHAT_FOOTER_SLOT below, one list for the chat and every page. */
.side-foot{flex:0 0 auto;min-width:0;background:var(--grad-chrome);border-top:var(--bw-hair) solid var(--chrome-line);padding:var(--sp2) var(--sp1half);display:flex;justify-content:center;pointer-events:none}
.side-foot a,.side-foot button{pointer-events:auto}
.side-foot .ec-sig{display:flex;flex-direction:column;align-items:center;gap:var(--sp1);text-align:center}
.side-foot .ec-copy{color:var(--faint);opacity:.55;font:var(--w-semi) var(--fs-step--3)/1 var(--ff-mono);letter-spacing:.1em}
.side-foot .ec-copy a{color:var(--cyan-soft);text-decoration:none}   /* was six style="color:#7ee8f7" literals; one token rule replaces all six (mobile-declutter, receipt artifacts/mobile-declutter-2026-09-09/mobile_declutter_receipt.json) */
.side-foot .ec-copy.pre-copyright{margin-bottom:var(--sp-half)}   /* was style="margin-bottom:5px" (off-grid); --sp-half is the nearest 4px-grid step, 1px tighter */
/* the calling card's rules live in elara_chat_header.css (one definition for the sidebar foot and every page footer, 2026-09-12) */
/* ---- main ---- */
#approw{flex:1 1 auto;display:flex;min-height:0;width:100%;overflow:hidden;position:relative}
#wrap{flex:1 1 auto;display:flex;flex-direction:column;min-width:0;position:relative}
/* Chat tool strip — full-width, pinned at the top of the body flex. #side fills what is left under it. */
#bar{flex:0 0 auto;width:100%;display:flex;align-items:center;flex-wrap:nowrap;gap:var(--sp1);padding:var(--sp1) var(--sp2);border-bottom:1px solid var(--line);background:var(--panel2);color:var(--ink);z-index:var(--z-header,50);position:relative}
body.light #bar{background:var(--panel,#fff);border-bottom:1px solid var(--line2,#d6e1ec)}
body.light #bar .mname,body.light #bar #freeleft{color:#0c1727}
#bar .sp{display:none}
#bar .barlogo{display:none}
#bar select{border-radius:0}
body:has(#roomStrip.open) #collabBtn{background:transparent;color:var(--gold2);border:var(--bw-hair) solid var(--gold2);box-shadow:none}
#bar select#model{min-width:0;flex:0 1 auto;max-width:46vw;text-overflow:ellipsis}
/* site brand/nav live in elara_chat_header on non-chat routes; chat uses #bar only */
#menuBtn{display:none;align-items:center;justify-content:center;width:var(--sp-tap);height:var(--sp-tap);background:none;border:0;color:var(--gold2);cursor:pointer;padding:0;font-size:var(--fs-step-3);line-height:1;flex:0 0 auto;box-sizing:border-box}#menuBtn:hover{color:var(--gold)}
/* left-edge HANDLE to pull in the side panel on mobile (founder: a clear button/handle to invoke it) */
#sideHandle{display:none}#drawerClose{display:none}
@keyframes sideHandlePulse{0%,100%{}50%{}}
select,#keyin{height:36px;padding:0 10px;border:1px solid var(--line2);background:var(--panel2);color:var(--ink);font-size:13px;border-radius:0}
select{cursor:pointer}select:focus,#keyin:focus{outline:none;border-color:var(--gold)}#keyin{width:170px}
#bar .sp{display:none}/* model picker + login group together on the LEFT; the bar stays one uniform full-width panel (no exposed middle void) */
#bar .barlogo{display:flex;align-items:center;gap:8px;text-decoration:none;flex-shrink:0}
#bar .barlogo .bword{font:800 12px/1 Inter,-apple-system,"Segoe UI",sans-serif;letter-spacing:.14em;color:#eaf6fb;white-space:nowrap}
body.light #bar .barlogo .bword{color:#0c1727}
#bar .barlogo{display:none}/* the brand lives ONLY in the shared top <header> — no duplicate in the chat bar (founder: no repeat) */
/* narrow-width hardening: the bar must shrink, never force horizontal overflow (leak-closure) */
#bar{min-width:0}
#bar select{border-radius:0}body:has(#roomStrip.open) #collabBtn{background:transparent;color:var(--gold2);border:var(--bw-hair) solid var(--gold2);box-shadow:none}#bar select#model{min-width:0;flex:0 1 auto;max-width:46vw;text-overflow:ellipsis}
/* ChatGPT-style model picker: a styled button + popover menu over a hidden <select> (source of truth) */
.modelpick{position:relative;flex:0 1 auto;min-width:0}
.modelbtn{display:inline-flex;align-items:center;justify-content:center;gap:0;width:var(--sp-tap);max-width:var(--sp-tap);height:var(--sp-tap);min-height:var(--sp-tap);padding:0;border:1px solid var(--line2);background:var(--panel2);color:var(--ink);font-size:var(--fs-sm);font-weight:var(--w-semi);cursor:pointer;-webkit-appearance:none;appearance:none;transition:border-color .15s ease,background .15s ease;box-sizing:border-box;position:relative}
.modelbtn:hover{border-color:var(--gold)}
.modelbtn .mname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.modelbtn .mchev{flex:0 0 auto;color:var(--faint);font-size:11px;transition:transform .15s ease}
.modelbtn:hover{border-color:var(--gold2);background:var(--panel)}.modelbtn:active{transform:scale(.985)}   /* V-pass6: calm gold hover + tactile press on the model control; receipt scratchpad/pass6local_*.png */
.modelpick.open .modelbtn{border-color:var(--cyan)}
.modelpick.open .modelbtn .mchev{transform:rotate(180deg)}
.modelmenu{display:none;position:absolute;top:calc(100% + 6px);left:0;z-index:40;min-width:min(300px,calc(100vw - 24px));max-width:min(380px,92vw);max-height:60svh;overflow:auto;-webkit-overflow-scrolling:touch;background:var(--panel);border:1px solid var(--line2);padding:6px}/* svh not vh: receipt artifacts/mobile-declutter-2026-09-09/mobile_declutter_receipt.json */
.modelpick.open .modelmenu{display:block}
.modelrow{display:block;width:100%;text-align:left;padding:9px 11px;cursor:pointer;border:0;background:none;color:var(--ink);transition:background .12s ease;-webkit-appearance:none;appearance:none}
.modelrow:hover,.modelrow.sel{background:rgba(224,184,90,.12)}
.modelrow .mr-top{display:flex;align-items:center;gap:8px}
.modelrow .mr-name{font-size:13.5px;font-weight:700}
.modelrow .mr-ctx{margin-left:auto;font:600 10.5px/1 ui-monospace,Consolas,monospace;color:var(--cyan-soft)}
.modelrow .mr-desc{font-size:11.5px;color:var(--mut);margin-top:2px}
.modelrow.locked{opacity:.55;cursor:not-allowed}
.modelrow.sel .mr-name{color:var(--gold2)}
body.light .modelmenu{}
#acctstate{min-width:0;display:inline-flex;overflow:visible;position:relative}
#bar .vis-name{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
#acctstate .who b{max-width:8vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:bottom}
@media(max-width:480px){#acctstate .who b{display:none}#freeleft{display:none}#bar select#model{max-width:42vw}#bar .effortlbl{display:none}#acctstate .signin{padding:0 var(--sp1)}}
/* the rule above used to read bare ".effortlbl{display:none}", which hides the element by
   selector regardless of PARENT -- harmless while .effortlbl only ever lived in #bar or .subbar,
   but it would have made the relocated control invisible inside #cmEffortSlot too (mobile-declutter,
   receipt artifacts/mobile-declutter-2026-09-09/mobile_declutter_receipt.json). Scoped to #bar,
   its original and only remaining meaning: hide it in the BAR specifically, on a narrow tablet. */
#freeleft{font-size:12.5px;color:var(--mut);white-space:nowrap}#freeleft b{color:var(--gold2)}
#acctstate .signin{display:inline-flex;align-items:center;justify-content:center;width:auto;max-width:none;min-width:var(--sp-tap);height:var(--sp-tap);min-height:var(--sp-tap);max-height:var(--sp-tap);padding:0 var(--sp2);font-size:var(--fs-sm);font-weight:var(--w-bold);line-height:var(--lh-tight);background:var(--cta-gold-fill);color:var(--gold-ink);border:var(--bw-hair) solid var(--gold);border-radius:0;cursor:pointer;box-sizing:border-box;text-decoration:none;position:relative;white-space:nowrap;overflow:visible;flex:0 0 auto}#acctstate .signin:hover{filter:brightness(1.06)}#acctstate .signin .ic{color:var(--gold-ink)}
#acctstate .who{font-size:12.5px;color:var(--mut);display:inline-flex;align-items:center;gap:9px}#acctstate .who b{color:var(--ink);font-weight:600}
#acctstate .out{background:none;border:0;color:var(--faint);cursor:pointer;font-size:12.5px;padding:0;white-space:nowrap;min-height:var(--sp3);display:inline-flex;align-items:center;transition:color .14s ease}#acctstate .out:hover{color:var(--gold2)}   /* Apple-calm: Sign out is a quiet action, gold only on hover (founder 2026-07-18) */
#bar #acctBarMenu{position:absolute;right:0;top:100%;z-index:40;min-width:var(--sp10);background:var(--panel2);border:var(--bw-hair) solid var(--line2);padding:var(--sp-half)}
#bar #acctBarMenu[hidden]{display:none}
#bar #acctBarMenu .out{display:block;width:100%;text-align:left;background:none;border:0;color:var(--ink);min-height:var(--sp-tap);padding:0 var(--sp2);cursor:pointer;font-size:var(--fs-sm)}
/* auth modal (sign up / sign in) — reuses the site's account + cookie + TOS system */
/* ══ Auth modal — SOTA, CONSISTENT dark 2-tone in BOTH themes (founder: same regardless of mode).  ══
   Fixed brand colours (not theme vars) so the modal renders identically in light + dark. The header is the
   CANONICAL brand lockup (shield + halo + 2-tone wordmark + both org lines on the teal radial gradient),
   consistent with the site brand band. 10 refinements: R1 lockup header · R2 org lines · R3 halo shield ·
   R4 gradient wordmark · R5 elevated card + backdrop blur · R6 dark-glass inputs + soft focus ring ·
   R7 Google button spec · R8 gradient 'or' rule · R9 confident CTA · R10 calling-card signature. */
#auth{display:none;position:fixed;inset:0;z-index:90;background:rgba(2,8,16,.74);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);align-items:center;justify-content:center;padding:18px}
#auth.open{display:flex}
/* R5 — elevated card, ALWAYS the dark chrome brand surface (DESIGN_MATH tokens), sharp corners, enter anim */
#auth .authcard{width:430px;max-width:96vw;background:var(--chrome2) !important;border:1px solid var(--chrome-line);padding:0 30px 24px;overflow:hidden;color:var(--chrome-ink) !important;animation:authIn .28s cubic-bezier(.2,.7,.3,1);font-family:var(--ff-product)}   /* #auth ID-scope beats the body.light modal-glass override so the card stays dark in both modes */
@keyframes authIn{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.authcard{animation:none}}
/* R1 — canonical brand lockup header on the chrome band */
.authhead{position:relative;background:linear-gradient(180deg,var(--chrome),var(--chrome2));margin:0 -30px 22px;padding:30px 30px 22px;text-align:center;border-bottom:1px solid color-mix(in srgb,var(--cyan) 22%,transparent)}
.authclose{position:absolute;top:10px;right:10px;z-index:2;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;background:none;border:1px solid color-mix(in srgb,var(--chrome-ink) 24%,transparent);color:var(--chrome-ink);font-size:15px;line-height:1;cursor:pointer}
.authclose:hover{border-color:var(--cyan-soft);color:var(--cyan-soft)}   /* flat dark navy: the teal brand glow comes from the shield's own halo (.authlogo::before), so the org lines + subtitle keep AA contrast on dark */
/* R3 — shield with a breathing halo (canonical aura, not a flat drop-shadow) */
.authcard .authlogo{position:relative;width:76px;height:76px;margin:0 auto 13px;display:flex;align-items:center;justify-content:center}
.authcard .authlogo::before{content:"";position:absolute;width:132px;height:132px;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--cyan) 42%,transparent),transparent 62%);animation:authHalo 3.6s ease-in-out infinite}
.authcard .brn{width:62px;height:62px;object-fit:contain;position:relative;z-index:1;}
@keyframes authHalo{0%,100%{opacity:.6;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}
@media(prefers-reduced-motion:reduce){.authcard .authlogo::before{animation:none}}
/* R4 — canonical two-tone wordmark: ELARA chrome-ink + CORTEX cyan->gold gradient, .22em tracking */
.authcard .authwm{font:800 24px/1 var(--ff-product);letter-spacing:.22em;text-indent:.22em;color:var(--chrome-ink);margin:0 auto 10px}
.authcard .authwm span{background:linear-gradient(90deg,var(--cyan-soft),var(--gold2));-webkit-background-clip:text;background-clip:text;color:transparent}
/* R2 — org lines use cool chrome ink (DESIGN_MATH), not a second gold */
.authcard .authorg{display:flex;flex-direction:column;gap:2px;font:700 8.5px/1.5 Consolas,ui-monospace,monospace;letter-spacing:.24em;text-transform:uppercase;margin-bottom:15px}
.authcard .authorg .o1{color:var(--chrome-ink)}.authcard .authorg .o2{color:var(--chrome-mut)}
.authcard .authhead h3{color:var(--chrome-ink);margin:0 0 3px;font-size:21px;font-weight:800;letter-spacing:-.01em}
.authcard .authhead .sub{color:var(--chrome-mut);font-size:13.5px;margin:0}
/* R6 — dark-glass inputs + a soft cyan focus ring (48px rhythm, AA-legible placeholder) */
#auth .authcard input{width:100%;height:48px;background:color-mix(in srgb,var(--chrome) 88%,#000) !important;border:1px solid var(--chrome-line);color:var(--chrome-ink) !important;font:inherit;font-size:14.5px;padding:0 14px;margin:7px 0;outline:none;transition:border-color .15s ease,box-shadow .15s ease}  /* #auth ID-scope + !important defeats the light-theme glass override so the modal stays dark in both modes.  */
#auth .authcard input::placeholder{color:var(--chrome-mut) !important}
#auth .authcard input:focus{border-color:var(--cyan) !important;}
/* R9 — primary CTA: confident gold gradient, hover lift, focus ring, sharp corners */
.authbtn{width:100%;height:50px;background:linear-gradient(180deg,var(--gold2),var(--gold));color:#1a1305;font-weight:800;border:0;padding:0;cursor:pointer;margin-top:12px;font-size:15px;transition:transform .15s ease,filter .15s ease}
.authbtn:hover{filter:brightness(1.05);transform:translateY(-1px);}
.authbtn:focus-visible{outline:2px solid var(--cyan-soft);outline-offset:2px}
.authbtn:disabled{opacity:.55;cursor:wait;transform:none}
@media(prefers-reduced-motion:reduce){.authbtn:hover{transform:none}}
/* R7 — Google button: crisp white, subtle border, sharp corners, matched 48px height */
.gsi-btn{width:100%;height:48px;display:flex;align-items:center;justify-content:center;gap:11px;background:#fff;color:#1f2733;font-weight:600;border:1px solid #d7dde3;padding:0;cursor:pointer;font-size:14.5px;margin:2px 0 8px;transition:background .15s ease;font-family:var(--ff-product)}
.gsi-btn:hover{background:#f6f8fa;}
.gsi-btn:focus-visible{outline:2px solid var(--cyan-soft);outline-offset:2px}
.gsi-btn svg{flex:0 0 auto}
/* R8 — 'or' divider: hairline gradient rule + centred muted mono label */
.author{display:flex;align-items:center;text-align:center;color:var(--chrome-mut);font:600 11px ui-monospace,Consolas,monospace;letter-spacing:.16em;text-transform:uppercase;margin:9px 0}
.author::before,.author::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--chrome-line),transparent)}
.author span{padding:0 12px}
.authalt{text-align:center;color:var(--chrome-mut);font-size:13px;margin-top:16px}.authalt a{color:var(--gold2);cursor:pointer;font-weight:600}.authalt a:hover{color:color-mix(in srgb,var(--gold2) 70%,#fff)}
.autherr{color:var(--bad);font-size:13px;text-align:center;margin:6px 0;min-height:2px}
.authtos{display:flex;align-items:flex-start;gap:10px;color:var(--chrome-mut);font-size:12.5px;line-height:1.45;margin:10px 0 2px;text-align:left;cursor:pointer}
.authtos input{width:18px !important;height:18px !important;min-height:18px;margin:2px 0 0 !important;padding:0 !important;flex:0 0 auto;accent-color:var(--gold2)}
.authtos a{color:var(--cyan-soft)}
.authleg{color:var(--chrome-mut);font-size:11px;text-align:center;margin-top:12px;line-height:1.5}.authleg a{color:var(--cyan-soft);cursor:pointer}.authleg a:hover{text-decoration:underline}
.authleg a.forgotlink{font-size:12.5px;font-weight:600}
/* P11.5 the eye: every password field shows and hides itself; P11.4 the hint speaks plain English under the field */
#auth .authcard .pwwrap{position:relative}#auth .authcard .pwwrap input{padding-right:var(--sp-tap)}#auth .authcard .pweye{position:absolute;right:0;top:0;bottom:0;width:var(--sp-tap);display:flex;align-items:center;justify-content:center;background:none;border:0;color:var(--chrome-mut);cursor:pointer}#auth .authcard .pweye:hover,#auth .authcard .pweye:focus-visible{color:var(--chrome-ink);outline:none}#auth .authcard .pweye svg{width:20px;height:20px}#auth .authcard .pweye .eye-off{display:none}#auth .authcard .pweye.on .eye-on{display:none}#auth .authcard .pweye.on .eye-off{display:inline}
#auth .authcard .pwhint{font-size:var(--fs-2xs);color:var(--chrome-mut);min-height:1.2em;text-align:left}#auth .authcard .pwhint.ok{color:var(--cyan-soft)}
/* R10 — the .LEKOLA calling-card signature (a finished, crafted footer) */
.authcard .ec-card-sig{display:flex;align-items:center;justify-content:center;gap:11px;margin-top:18px;padding-top:15px;border-top:1px solid #14283d}
.authcard .ec-card-sig .ln{height:1px;width:36px;background:linear-gradient(90deg,transparent,#22d3ee)}
.authcard .ec-card-sig .ln.r{background:linear-gradient(90deg,#22d3ee,transparent)}
.authcard .ec-card-sig .lk{font:700 9px/1 ui-monospace,Consolas,monospace;letter-spacing:.34em;text-indent:.34em;color:var(--gold2);}
/* the modal is ALWAYS dark — neutralise the site-wide body.light link overrides so its links keep the
   on-dark brand colours in light mode too (consistent regardless of chosen mode) */
body.light .authcard .authalt a{color:#e0b85a}
body.light .authcard .authleg a{color:#7ee8f7}
.cta{font-size:13px;font-weight:700;padding:7px 13px;border-radius:0;background:linear-gradient(180deg,var(--gold2),var(--gold-deep));color:#1a1305;border:1px solid var(--gold);transition:transform .15s ease,filter .15s ease,box-shadow .15s ease}.cta:hover{filter:brightness(1.06);transform:translateY(-1px);}
#thread{flex:1 1 auto;overflow:auto;padding:var(--sp3) 0;scrollbar-width:thin;scrollbar-color:var(--line2) transparent}
#thread::-webkit-scrollbar{width:var(--sp1)}#thread::-webkit-scrollbar-thumb{background:var(--line2)}#thread::-webkit-scrollbar-track{background:transparent}
.col{max-width:820px;margin:0 auto;padding:0 20px}
/* the composer/input panel is wider than the reading column so the pill feels roomy, not cluttered */
.composer .col{width:100%;max-width:820px;margin:0 auto;padding:0 20px}/* one column: composer aligns to the message + chip column (founder: wide AND aligned, no untidy edges) */
/* empty state: breathing brain hero (the brain icon, as-is) + gold wordmark — landing-page language */
.empty{min-height:0;width:100%;flex:1 1 auto;display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;text-align:center;gap:0;overflow:hidden}
.empty .ebody{width:100%;max-width:820px;margin:0 auto;padding:0 20px;display:flex;flex-direction:column;align-items:center;gap:9px}
.empty .logowrap{position:relative;width:84px;height:84px;display:flex;align-items:center;justify-content:center;margin:0 auto 4px}
/* shield halo — BYTE-IDENTICAL to the landing .elara-shield (SHIELD_HALO bijection): 3-layer cyan drop-shadow + breathing elara-halo, scale 1.03, 3.0s */
.empty .logowrap .logo{width:72px;height:72px;object-fit:contain;position:relative;z-index:1;animation:elara-halo 3.4s ease-in-out infinite;will-change:filter,transform;transform-origin:center}
@keyframes elara-halo{0%,100%{transform:scale(1)}50%{transform:scale(1.03)}}
/* company name rendered 1:1 with the landing logoband: ELARA (ink) + ·CORTEX (cyan->gold gradient) + two org-lines */
.empty .wm{font:800 26px/1 Inter,-apple-system,"Segoe UI",Arial,sans-serif;letter-spacing:.22em;text-indent:.22em;color:var(--ink);margin:12px 0 0}
.empty .wm span{background:linear-gradient(90deg,#7ee8f7,#e0b85a);-webkit-background-clip:text;background-clip:text;color:transparent}
/* deep-navy brand band — FULL-BLEED to both sides of the chat area, like the landing hero (founder 2026-06-19); no box border */
.empty .brandband{align-self:center;width:auto;background:none;border:0;padding:0;margin:0 0 6px;display:flex;flex-direction:column;align-items:center;box-shadow:none}/* no separate band -> the shield floats clean on the page (seam removed) */
.empty .brandband .wm{color:#eaf6fb}
.empty .orgline{font:700 9.5px/1.7 Consolas,ui-monospace,monospace;letter-spacing:.22em;text-transform:uppercase;margin-top:10px}   /* V9: canonical eyebrow tracking .22em */
.empty .orgline .org1{color:var(--gold2)}.empty .orgline .org2{color:#9fb6c6}
.empty .quote{margin:26px auto 0;max-width:540px;font:italic 400 14.5px/1.62 Georgia,'Times New Roman',serif;color:var(--mut);padding-top:18px;border-top:1px solid var(--line);position:relative}
.empty .quote::before{content:"\201C";position:absolute;top:6px;left:50%;transform:translateX(-50%);font:700 22px/1 Georgia,serif;color:var(--gold);opacity:.5}
.empty .quote .qa{display:block;margin-top:8px;font:600 10.5px/1.5 Consolas,ui-monospace,monospace;font-style:normal;letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}
.empty h1{font-size:clamp(25px,4vw,35px);font-weight:800;margin:.1em 0 0;letter-spacing:-.015em;line-height:1.12}
.empty p{color:var(--mut);margin:0;font-size:15px}
/* ---- belief-first hero: WHY line · context fuel-gauge · free-to-start · trust · belonging (churn levers) ---- */
.empty .belief{font:700 11px/1.55 Consolas,ui-monospace,monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);margin:20px auto 0;max-width:620px}
.empty .feltsub{color:var(--mut);font-size:15px;max-width:540px;margin:10px auto 0;line-height:1.55}.empty .feltsub b{color:var(--ink)}
.empty .vfeat{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 20px;margin:15px auto 0;max-width:640px;font:600 12.5px/1.5 Consolas,ui-monospace,monospace;color:var(--mut)}
/* ===== 2-TONE chat landing (pricing standard): dark scrim VIDEO hero + light start panel ===== */
.empty .cvhero{position:relative;background:var(--chrome);width:100%;overflow:hidden;flex:0 0 auto;aspect-ratio:12/5;height:auto;min-height:calc(var(--sp-tap)*4);max-height:min(42svh,calc(var(--sp-tap)*10))}/* aspect holds the rocket; --chrome does not remap to paper in light */
/* A11y contrast: the hero base IS navy (video+gradient sit ON TOP); the explicit bg-color gives any bg-walker/SR + a slow/blocked video a truthful DARK anchor, so the white cvh1/cvsub are never rendered on a light fallback. */
/* B1 (2026-09-07): the chat page's own override of the header nav colour is GONE. It read
   `body header nav a,body header .menu>summary{color:#7d8fa0}` and was written when the top bar
   followed the theme and could be light, so the colour had to satisfy both grounds at once. Since
   1.4.1 the bar is the theme-invariant --chrome-* navy on every page, so the compromise colour is
   solving a problem that no longer exists — and it was solving it only HERE, which made /AI/chat and
   every chat-space page render two different navs from one stylesheet. --chrome-mut (#93a6bb) now
   governs both, and it is the better colour on the merits as well as the consistent one:
   7.21:1 on --chrome and 7.41:1 on --chrome2, against #7d8fa0's 5.40:1 / 5.55:1.
   The `.menu>summary` half was already dead — elara_chat_header.html carries no .menu. */
.empty .cvhero .cvbg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 42%;background:var(--chrome);filter:saturate(1.14) contrast(1.06)}
@media(prefers-reduced-motion:reduce){
  .empty .cvhero{background:var(--chrome) url(/site_img/chat_hero_rocket.jpg) center 42%/cover no-repeat}
  .empty .cvhero .cvbg{display:none}
}
.empty .cvhero .cvscrim{position:absolute;inset:0;display:flex;align-items:flex-end;background:var(--scrim-image);pointer-events:none}
.empty .cvhero .cvtxt{max-width:1040px;width:100%;margin:0 auto;padding:0 var(--sp3) var(--sp3);text-align:left}
.empty .cveye{font-size:var(--fs-2xs);letter-spacing:var(--tr-wide);text-transform:uppercase;font-weight:var(--w-heavy);color:var(--gold2);margin:0 0 var(--sp1half)}
.empty .cvh1{font-size:var(--fs-display);font-weight:var(--w-bold);letter-spacing:var(--tr-tight);color:var(--paper);line-height:var(--lh-tight);margin:0;overflow-wrap:break-word;white-space:normal;}
.empty .cvh1 .cvq{display:block;font-size:.78em;font-weight:var(--w-semi);letter-spacing:var(--tr-snug);margin-top:var(--sp1);line-height:var(--lh-snug)}
.empty .cvh1 .cvname{color:var(--gold2);font-style:italic;animation:cvnameglow 3.4s ease-in-out infinite}
@keyframes cvnameglow{0%,100%{}50%{}}
@media(prefers-reduced-motion:reduce){.empty .cvh1 .cvname{animation:none}}
.empty .cvsub{margin:var(--sp2) 0 0;font-size:var(--fs-lede);color:var(--paper);max-width:72ch;line-height:var(--lh-snug);}.empty .cvsub b{color:var(--cyan-soft)}
.empty .cvsub.cvquote{font-style:italic;transition:opacity var(--dur-reveal) ease}
.empty .cvquote .cvqa{display:block;margin-top:var(--sp1);font-style:normal;font-weight:var(--w-bold);font-size:var(--fs-step--1);color:var(--gold2);letter-spacing:var(--tr-none);}
.empty .cvlight{flex:1 1 auto;min-height:0;width:100%;background:#f6f9fb;border-top:1px solid #dbe6ef;display:flex;flex-direction:column;justify-content:flex-start;position:relative;overflow-x:hidden;overflow-y:auto}
.empty .cvlight::before{content:"";position:absolute;left:50%;bottom:-28%;width:680px;max-width:130%;height:400px;transform:translateX(-50%);background:radial-gradient(circle,rgba(34,211,238,.22),transparent 64%);pointer-events:none;z-index:0;animation:cvbreathe 4.2s ease-in-out infinite}/* living cyan halo rising toward the composer (founder: halos + life) */
@keyframes cvbreathe{0%,100%{opacity:.5}50%{opacity:.95}}
@media(prefers-reduced-motion:reduce){.empty .cvlight::before{animation:none}}
.empty .cvlwrap{position:relative;z-index:1;max-width:980px;width:100%;margin:auto;padding:20px clamp(18px,4vw,44px) 22px;text-align:center}/* margin:auto vertically centres the composer block in the light panel — symmetric space above (from hero) + below, not top-pinned; auto margins collapse to 0 on short viewports.  layout-only */
.empty .cvlhead{font-family:var(--ff-product);font-size:var(--fs-step-3);font-weight:var(--w-semi);letter-spacing:var(--tr-snug);line-height:var(--lbh-step-3);color:var(--mut);margin:0 0 var(--sp3)}/* D9: step n=3 (23 / 28). Founder 2026-09-16: no cyan hairline under this line. */
.empty .cvlhead .g{color:var(--paper-gold);font-weight:var(--w-bold)}
.empty .cvlight .chips{display:grid;grid-template-columns:minmax(0,1fr);grid-auto-rows:1fr;align-items:stretch;justify-items:stretch;gap:var(--sp1);width:100%;box-sizing:border-box;margin:0 auto}/* one composer-column stack: identical rectangles, not hug-content pills */
.empty .cvlight .chip{display:flex;align-items:center;justify-content:flex-start;gap:var(--sp1);width:100%;box-sizing:border-box;min-height:var(--sp-tap);height:100%;margin:0;padding:var(--sp1half) var(--sp2);background:var(--panel);color:var(--ink);font-weight:var(--w-semi);font-size:var(--fs-step-0);line-height:var(--lh-snug);letter-spacing:var(--tr-none);text-align:left;border:var(--bw-hair) solid var(--line2);border-radius:0;transition:transform var(--dur-fast) var(--ease-std),border-color var(--dur-fast) ease,color var(--dur-fast) ease}/* declared type step + the tap floor, so every chip is the same box */
.empty .cvlight .chip .chip-ic{flex:none;display:inline-flex;width:var(--sp2);height:var(--sp2);color:var(--cyan);transition:color var(--dur-fast) ease,transform var(--dur-fast) ease}
.empty .cvlight .chip .chip-ic svg{width:100%;height:100%;display:block}
.empty .cvlight .chip .chip-t{white-space:normal;min-width:0;overflow-wrap:break-word;flex:1 1 auto}   /* wrap inside the shared box, never clip (mobile a11y-noclip) */
.empty .cvlight .chip:hover{color:var(--ink);border-color:var(--gold);transform:translateY(calc(-1 * var(--bw-rule)));}
.empty .cvlight .chip:hover .chip-ic{color:var(--cyan);transform:scale(1.08)}
.empty .cvtrust{margin-top:var(--sp2);font-size:var(--fs-xs);color:#54616f;line-height:var(--lh-body)}.empty .cvtrust a{color:#0e7490;border-bottom:1px solid rgba(8,145,178,.3)}.empty .cvtrust b{color:#9a6f1c;font-weight:700}
/* Landing proof strip. The measured long-context result used to live ONLY inside the Context
   Intelligence panel, behind a click a first-time sceptic never makes, while the landing carried
   an unfalsifiable boast. A quiet left rule, not a boxed badge: the number is the emphasis. */
.empty .cvproof{margin-top:var(--sp2);padding:var(--sp1half) var(--sp2);border-top:1px solid var(--line2);font-size:var(--fs-xs);line-height:var(--lh-body);color:#54616f}
.empty .cvproof b{color:#0e7490;font-weight:var(--w-bold);font-variant-numeric:tabular-nums}
.empty .cvproof a{color:#0e7490;border-bottom:1px solid rgba(8,145,178,.3);white-space:nowrap}
/* V-pass5 — dark mode: ONE calm navy surface (approved direction). The landing canvas flows
   straight out of the video hero (whose scrim already fades to navy), so there is no white band
   and no seam. Light mode keeps the paper canvas untouched (all rules below are body:not(.light)).
   Token-based children (onbcard, goal-summ) auto-correct; only these hardcoded-light groups re-theme. */
body:not(.light) .empty .cvlight{background:var(--navy);border-top-color:var(--line)}
body:not(.light) .empty .cvlhead{color:var(--chrome-mut)}
body:not(.light) .empty .cvlhead .g{color:var(--gold2);font-weight:var(--w-bold)}
body:not(.light) .empty .cvlight .chip{background:var(--panel);color:var(--ink);border-color:var(--gold2);border-radius:0;box-shadow:none}
body:not(.light) .empty .cvlight .chip .chip-ic{color:var(--gold2)}
body:not(.light) .empty .cvlight .chip:hover{color:var(--ink);border-color:var(--gold2);}
body:not(.light) .empty .cvlight .chip:hover .chip-ic{color:var(--gold2)}
.empty .cvlight .chip:first-child{border-color:var(--chip-line)}
body:not(.light) .empty .cvlight .chip:first-child{border-color:var(--gold2)}
body:not(.light) .empty .cvtrust{color:var(--mut)}
body:not(.light) .empty .cvtrust a{color:var(--cyan-soft);border-bottom-color:rgba(34,211,238,.35)}
body:not(.light) .empty .cvtrust b{color:var(--gold2)}
body:not(.light) .empty .cvproof{color:var(--mut);background:rgba(34,211,238,.06)}
body:not(.light) .empty .cvproof b{color:var(--cyan-soft)}
body:not(.light) .empty .cvproof a{color:var(--cyan-soft);border-bottom-color:rgba(34,211,238,.35)}
.empty .vf{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.empty .vg{color:var(--gold2);font-style:normal;font-weight:800}/* monochrome GOLD glyph (brand UI rule) — never a colour emoji */
.empty .memcmp{margin:22px auto 2px;max-width:460px;width:100%;display:flex;flex-direction:column;gap:8px}
.empty .memrow{display:flex;align-items:center;gap:11px}
.empty .memrow .meml{flex:0 0 92px;text-align:right;font-size:11.5px;color:var(--mut);font-weight:600}
.empty .membar{position:relative;flex:1 1 auto;height:23px;background:var(--panel2);border:1px solid var(--line2);overflow:hidden}
.empty .memfill{position:absolute;left:0;top:0;bottom:0;width:100%;background:linear-gradient(90deg,rgba(34,211,238,.5),rgba(224,184,90,.62));animation:memgrow 1.15s cubic-bezier(.2,.75,.2,1) .15s both}
.empty .memfill.sm{width:6.4%;background:rgba(147,166,187,.35);box-shadow:none;animation-duration:.5s}
@keyframes memgrow{from{width:0}}
@media(prefers-reduced-motion:reduce){.empty .memfill{animation:none}}
.empty .membar .memnum{position:relative;z-index:1;font:700 11px/23px ui-monospace,Consolas,monospace;padding-left:9px;color:var(--ink)}
.empty .membar .memnum.dim{color:var(--faint)}
.empty .memcap{text-align:center;font-size:12px;color:var(--cyan-soft);margin-top:5px;letter-spacing:.01em}
.empty .startline{margin-top:20px;font-size:13.5px;color:var(--mut)}.empty .startline b{color:var(--gold2)}
.empty .trust{margin-top:9px;font-size:11.5px;color:var(--faint);line-height:1.7;max-width:610px;margin-left:auto;margin-right:auto}.empty .trust a{color:var(--cyan-soft);border-bottom:1px solid rgba(34,211,238,.35)}.empty .trust b{color:var(--gold2);font-weight:700}
.empty .belong{margin-top:15px;font:600 10.5px/1.5 Consolas,ui-monospace,monospace;letter-spacing:.1em;text-transform:uppercase;color:var(--gold);opacity:.78}
/* never let the hero force horizontal overflow on tiny phones (leak-closure) */
.empty{max-width:100%}.empty .brandband{max-width:100%}.empty .wm,.empty .orgline,.empty .belief,.empty .feltsub,.empty .trust,.empty .belong{overflow-wrap:anywhere}
.empty .membar{min-width:0}
@media(max-height:720px){
 .empty .cvhero{max-height:min(36svh,calc(var(--sp-tap)*8))}
 .empty .cvlight{min-height:calc(var(--sp-tap)*2)}
 .empty .cvlwrap{padding-top:var(--sp2);padding-bottom:var(--sp2)}
}
@media(max-width:430px){
 .empty .brandband{padding:22px 12px 18px}
 .empty .wm{font-size:21px;letter-spacing:.1em;text-indent:.1em}
 .empty .orgline{letter-spacing:.08em;word-break:break-word}
 .empty .belief{letter-spacing:.08em}
 .empty .memrow{gap:8px}.empty .memrow .meml{flex:0 0 64px;font-size:10.5px}
}
body.light .empty .belief,body.light .empty .belong{color:#9a6f1c}
body.light .empty .feltsub b{color:#0c1727}
body.light .empty .memcap{color:#0e7490}
body.light .empty .membar .memnum{color:#16222e}
body.light .empty .startline b{color:#9a6f1c}
body.light .empty .trust a{color:#0e7490}
.chips{display:flex;gap:9px;flex-wrap:wrap;justify-content:center;margin-top:8px}
/* SOTA starter chip (dark base): icon+label inline-flex, sharp corners, gold hover — receipt artifacts/ui-audit */
.chip{position:relative;display:inline-flex;align-items:center;gap:9px;border:1px solid var(--line2);background:var(--panel2);color:#cfe0ec;font-size:13px;font-weight:600;padding:10px 15px;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease,color .15s ease;}.chip:hover{color:var(--ink);border-color:var(--cyan);transform:translateY(-1px);}
.chip .chip-ic{flex:none;display:inline-flex;width:16px;height:16px;color:var(--cyan-soft);transition:color .15s ease,transform .15s ease}.chip .chip-ic svg{width:100%;height:100%;display:block}.chip .chip-t{white-space:normal;min-width:0;overflow-wrap:break-word}.chip:hover .chip-ic{transform:scale(1.08)}   /* label wraps, never clips (mobile a11y-noclip); artifacts/ui-audit */
.chip::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:linear-gradient(180deg,rgba(34,211,238,.65),rgba(224,184,90,.55));opacity:.5;transition:opacity .15s ease}
.chip:hover::before{opacity:1}
/* messages */
.msg{display:flex;gap:var(--sp2);margin:0 0 var(--sp3);align-items:flex-start}   /* V4: 8pt rhythm (gap 16 · margin 24) */
/* avatars render with NO background box so "You" + the brain read correctly in every theme */
.av{flex:0 0 auto;width:var(--sp4);height:var(--sp4);background:none;border:0;display:flex;align-items:flex-start;justify-content:flex-start;font-size:var(--fs-2xs);font-weight:800}   /* 8pt: 32px box, glyph top-aligned with the first line (not centred on a tall bubble) */
.msg.user .av{color:var(--cyan-soft)}
.msg.assistant .av{background:none;border:0}
.msg.assistant .av .brain{width:var(--sp4);height:var(--sp4);color:var(--cyan-soft);animation:none;stroke-width:var(--bw-rule);vector-effect:non-scaling-stroke}   /* V12 settle + visible: viewBox stroke at 22px painted ~0.8px; --bw-rule (2px) non-scaling keeps the mark on paper */
/* V12: the breathing brain glow runs ONLY on the live/streaming assistant turn */
.msg.assistant.reasoning .av .brain,.msg.assistant:has(.bubble.streaming) .av .brain,.msg.assistant.live .av .brain{animation:brain 3.2s ease-in-out infinite}
body.light .msg.user .av{color:#0e7490}
body.light .msg.assistant .av .brain{color:#0e7490}
@keyframes brain{0%,100%{}50%{}}
.bubble{flex:1 1 auto;min-width:0;line-height:var(--lh-body);font-size:var(--fs-body);overflow-wrap:anywhere}
.msg.user .bubble{color:#dbe9f3;font-weight:500}
/* V5: give the user turn a distinct, right-aligned container (ChatGPT parity) — a tinted pill with a
   1px border, sharp corners, capped width; the assistant turn stays a full-width left paragraph */
.msg.user{justify-content:flex-end}
.msg.user .av{display:none}   /* right-aligned user turn drops the avatar (ChatGPT/Claude) */
.msg.user .body{flex:0 1 auto;max-width:min(72ch,86%);position:relative}
.msg.user .bubble{background:var(--panel2);border:1px solid var(--line);padding:9px 14px}   /* V-pass6: softer border so the answer leads; receipt scratchpad/pass6local_*.png */
body.light .msg.user .bubble{background:#eef4f8;border-color:#d6e2ec}
.msg.user .uacts{right:2px}
.bubble pre{background:#060d18;border:1px solid var(--line);border-radius:0;overflow:auto;margin:10px 0}
.bubble pre .pbar{display:flex;justify-content:space-between;align-items:center;padding:6px 11px;border-bottom:1px solid var(--line);color:var(--faint);font:600 11px ui-monospace,Consolas,monospace}
.bubble pre .pbar button{background:none;border:0;color:var(--gold2);cursor:pointer;font-size:11px}
.bubble pre code{display:block;padding:12px;color:#cfe6f2;font:13px/1.6 ui-monospace,Consolas,monospace}
.bubble code{background:rgba(224,184,90,.12);padding:1px 5px;border-radius:0;font:.92em ui-monospace,Consolas,monospace;color:var(--gold2)}.bubble pre code{background:none;padding:12px;color:#cfe6f2}
.bubble h1{font-size:1.55em;font-weight:800;letter-spacing:-.01em;margin:.7em 0 .4em;line-height:1.25}.bubble h2{font-size:1.3em;font-weight:800;margin:.95em 0 .35em;line-height:1.3}.bubble h3{font-size:1.12em;font-weight:700;margin:.85em 0 .3em}.bubble h4{font-size:1em;font-weight:700;margin:.7em 0 .25em;color:var(--cyan-soft)}.bubble h1:first-child,.bubble h2:first-child,.bubble h3:first-child,.bubble p:first-child,.bubble ul:first-child,.bubble ol:first-child{margin-top:0}.bubble p{margin:.62em 0}.bubble ul,.bubble ol{margin:.5em 0;padding-left:1.5em}.bubble li{margin:.32em 0}.bubble li>ul,.bubble li>ol{margin:.2em 0}.bubble blockquote{border-left:3px solid var(--gold);margin:.75em 0;padding:.15em 0 .15em 1em;color:var(--mut)}.bubble hr{border:0;border-top:1px solid var(--line2);margin:1.15em 0}.tblwrap{overflow-x:auto;margin:.75em 0}.bubble table{border-collapse:collapse;width:100%;font-size:.95em}.bubble th,.bubble td{border:1px solid var(--line2);padding:7px 11px;text-align:left;vertical-align:top}.bubble th{background:var(--panel2);color:var(--gold2);font-weight:700;white-space:nowrap}.bubble strong{font-weight:700;color:var(--ink)}.bubble em{font-style:italic}@media(max-width:760px){.bubble{font-size:15px}.bubble h1{font-size:1.38em}.bubble h2{font-size:1.2em}.bubble h3{font-size:1.08em}}
.bubble a{color:var(--gold2);border-bottom:1px solid rgba(224,184,90,.4)}
/* text-selection affordance: a branded highlight so users see their selection clearly (ChatGPT/Claude parity) */
.bubble ::selection,.bubble::selection{background:rgba(34,211,238,.28);color:var(--ink)}
/* ---- elevated markdown: code header, syntax tokens, task lists, strikethrough, images, math ---- */
.bubble pre.code{position:relative}
.bubble pre.code .pbar .lng{text-transform:lowercase;letter-spacing:.04em}
.bubble pre.code .pbar .cpy{display:inline-flex;align-items:center;gap:5px}
.bubble pre.code .pbar .cpy.ok{color:var(--good)}
/* ---- coding in chat: Run / Preview + output panel ---- */
.bubble pre.code .pbar .lng{flex:1}
.bubble pre.code .pbar .runpy,.bubble pre.code .pbar .runhtml{margin-right:12px;color:var(--cyan)}
.bubble pre.code .pbar .runpy:disabled{opacity:.5;cursor:wait}
.bubble.streaming .runpy,.bubble.streaming .runhtml{display:none}   /* never run/preview a half-streamed (truncated) code block */
.runout{border:1px solid var(--line2);border-top:0;margin:-10px 0 10px;background:#04101c;padding:9px 12px}
.runout .ro-hd{font:600 10.5px ui-monospace,Consolas,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin:2px 0 4px}
.runout .ro-hd.ro-err{color:var(--bad)}
.runout .ro-out{margin:0 0 6px;padding:0;background:none;border:0;color:#cfe6f2;font:12.5px/1.55 ui-monospace,Consolas,monospace;white-space:pre-wrap}
.runout .ro-errtxt{color:#f3b0be}
.runout .ro-ft{font:500 10.5px ui-monospace,Consolas,monospace;color:var(--faint)}
/* Apple-grade download card (generate_document · run_python artifacts · .ics) — replaces the code-style box */
.agent-artifacts{margin:8px 0 4px}
.dl-eyebrow{font:600 10.5px ui-monospace,Consolas,monospace;letter-spacing:.11em;text-transform:uppercase;color:var(--faint);margin:2px 0 6px}
.dl-card{display:flex;align-items:center;gap:13px;margin-top:7px;padding:11px 13px;max-width:460px;border:1px solid var(--line2);background:rgba(255,255,255,.028);color:var(--ink);text-decoration:none;transition:background .16s ease,border-color .16s ease}
.dl-card:hover{background:rgba(224,184,90,.07);border-color:var(--gold)}
.dl-badge{flex:0 0 auto;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:rgba(224,184,90,.14);color:var(--gold2);font-weight:700;font-size:10px;letter-spacing:.05em}
.dl-meta{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.dl-name{font-weight:var(--w-semi);font-size:13.5px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dl-sub{font-size:11.5px;color:var(--faint)}
.dl-arrow{flex:0 0 auto;width:26px;height:26px;display:flex;align-items:center;justify-content:center;color:var(--faint);font-size:15px;border:1px solid var(--line2);transition:color .16s,border-color .16s}
.dl-card:hover .dl-arrow{color:var(--gold2);border-color:var(--gold)}
body.light .dl-card{border-color:#d9e2ec;background:#fbfdff;color:#0c1727}
body.light .dl-card:hover{background:#fbf7ec;border-color:var(--gold)}
body.light .dl-badge{background:rgba(199,154,62,.16);color:#9a6f1c}
body.light .dl-name{color:#0c1727}
body.light .dl-arrow{border-color:#d9e2ec}
/* proactive one-tap document offer chips (shown under an attached document) */
.docoffer{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:9px 2px 3px}
.dof-lab{font:600 10.5px ui-monospace,Consolas,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin-right:2px}
.dof-chip{font-size:12.5px;padding:6px 12px;border:1px solid var(--line2);background:transparent;color:var(--ink);cursor:pointer;transition:background .15s,border-color .15s,color .15s}
.dof-chip:hover{border-color:var(--gold);color:var(--gold2)}
.dof-chip.rec{border-color:var(--gold);background:rgba(224,184,90,.12);color:var(--gold2);font-weight:var(--w-semi)}
body.light .dof-chip{border-color:#d9e2ec;color:#0c1727}
body.light .dof-chip:hover{border-color:var(--gold);color:#9a6f1c}
body.light .dof-chip.rec{background:rgba(199,154,62,.14);color:#9a6f1c;border-color:var(--gold)}
.bubble pre.code code .tok-kw{color:#7ee8f7}
.bubble pre.code code .tok-str{color:#b8e6a0}
.bubble pre.code code .tok-num{color:#f0cd78}
.bubble pre.code code .tok-cmt{color:#6f8499;font-style:italic}
/* L5: line-number gutter — an aria-hidden numbers column left of the untouched <code> (Copy stays clean) */
.bubble pre.code .clbody{display:flex;align-items:stretch}
.bubble pre.code .clbody code{flex:1 1 auto;min-width:0}
.bubble pre.code.hasgutter .clg{flex:0 0 auto;padding:12px .7em 12px 0;text-align:right;color:var(--faint);font:13px/1.6 ui-monospace,Consolas,monospace;white-space:pre;user-select:none;-webkit-user-select:none;pointer-events:none;box-sizing:border-box;border-right:1px solid var(--line);opacity:.7}
.bubble pre.code.hasgutter.wrapped .clg{display:none}   /* line numbers desync under soft-wrap → hide them there */
/* L6: soft-wrap toggle */
.bubble pre.code.wrapped{overflow-x:hidden}
.bubble pre.code.wrapped code{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
.bubble pre.code .pbar .wrap{color:var(--faint);margin-right:12px}
.bubble pre.code .pbar .wrap[aria-pressed="true"]{color:var(--cyan)}
.bubble del{color:var(--faint);text-decoration:line-through}
.bubble img{max-width:100%;height:auto;margin:8px 0;border:1px solid var(--line)}
.bubble ul ul,.bubble ul ol,.bubble ol ul,.bubble ol ol{margin:.2em 0 .2em .2em}
.bubble li.taskitem{list-style:none;margin-left:-1.25em}
.bubble .task{display:inline-block;width:15px;height:15px;border:1.6px solid var(--line2);margin-right:8px;vertical-align:-2px;position:relative;flex:0 0 auto}
.bubble .task.done{background:var(--gold2);border-color:var(--gold)}
.bubble .task.done::after{content:"";position:absolute;left:4px;top:1px;width:4px;height:8px;border:solid #1a1305;border-width:0 2px 2px 0;transform:rotate(45deg)}
.bubble .katex-display{overflow-x:auto;overflow-y:hidden;padding:4px 0;margin:.7em 0}
.bubble .katex{font-size:1.04em}
/* ChatGPT-style action row — gold monochrome icons */
.acts{display:flex;gap:4px;margin-top:var(--sp1);align-items:center}   /* V4: 8pt rhythm */
.acts button{background:none;border:0;color:var(--mut);cursor:pointer;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;transition:color .15s,background .15s}   /* V3: radius stripped (L1106 authority) */
.acts button:hover{color:var(--gold2);background:rgba(224,184,90,.10)}
.acts button.on{color:var(--gold2)}.acts button.on.bad{color:var(--bad)}
.acts .ic{width:16px;height:16px;color:currentColor}
.acts .sep{width:1px;height:18px;background:var(--line2);margin:0 4px}
.acts button:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
.acts button[disabled],.acts button[aria-disabled="true"]{opacity:.4;cursor:not-allowed;pointer-events:none}
/* M7: per-answer model provenance label */
.acts .actmodel{margin-left:6px;color:var(--faint);font:600 11px ui-monospace,Consolas,monospace;letter-spacing:.02em;white-space:nowrap;max-width:min(180px,40vw);overflow:hidden;text-overflow:ellipsis;align-self:center}
/* M10: user-bubble hover actions (Copy + Edit) grouped */
.msg .uacts{position:absolute;top:-2px;right:0;display:flex;gap:2px;opacity:0;transition:opacity .14s ease}
.msg.user:hover .uacts,.msg.user:focus-within .uacts{opacity:1}
.msg .uacts .editbtn{position:static;opacity:1}
.msg .uacts .editbtn.ucopy.on{color:var(--gold2)}
/* M4: per-message timestamp — subtle, revealed on hover */
.msg .msgts{display:block;margin-top:5px;color:var(--faint);font-size:11px;letter-spacing:.02em;opacity:0;transition:opacity .14s ease;font-variant-numeric:tabular-nums}
/* A7: skip links — visually hidden until keyboard-focused; brand sharp corners + cyan ring */
#skippark{display:contents}
.skiplink{position:fixed;left:8px;top:8px;z-index:2000;transform:translateY(-160%);background:#0e1b2e;color:#7ee8f7;border:1px solid var(--cyan,#22d3ee);padding:9px 14px;font-size:13px;font-weight:600;border-radius:0;text-decoration:none;white-space:nowrap}
.skiplink:focus{transform:none;outline:2px solid var(--cyan,#22d3ee);outline-offset:2px}
/* PF7: long-thread paint containment — off-screen messages skip layout/paint; the streaming (last) message is exempt so token paints are never contained away */
#col .msg:not(:last-child){content-visibility:auto;contain-intrinsic-size:auto 140px}
/* MT6: touch has no hover — per-message + history actions and timestamps must be reachable without a mouse */
@media (hover:none){#hist .h .hact,.msg .editbtn,.msg .uacts,#hist .hgroup.projhd .pcfg,#hist .hgroup.projhd .pdel{opacity:.85}.msg .msgts{opacity:.55}}
.msg:hover .msgts,.msg:focus-within .msgts{opacity:.85}
/* M12: external-link glyph after new-tab links (decorative) */
.bubble a[target="_blank"]::after{content:"";display:inline-block;width:.62em;height:.62em;margin-left:.28em;vertical-align:baseline;background:currentColor;opacity:.7;-webkit-mask:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 4h6v6M20 4l-9 9M18 13v5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h5'/%3E%3C/svg%3E");mask:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 4h6v6M20 4l-9 9M18 13v5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h5'/%3E%3C/svg%3E")}
/* ---- thought stream (ChatGPT o-series style): brain spark, shimmer while thinking, "Thought for Ns", auto-collapse ---- */
.think{position:relative;margin:6px 0 12px;border:1px solid var(--line);max-width:100%;overflow-wrap:anywhere}   /* V-pass6 reasoning aside; receipt: scratchpad/pass6local_*.png */
.think>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;color:var(--cyan-soft);font-size:12.5px;font-weight:700;padding:var(--sp1) 12px}   /* V4: 8pt rhythm */
.think>summary::-webkit-details-marker{display:none}
.think>summary .tk-ic{width:14px;height:14px;flex:0 0 auto;color:var(--cyan-soft)}
.think>summary .tk-lbl{flex:0 1 auto}
.think>summary .tk-ch{margin-left:auto;width:14px;height:14px;flex:0 0 auto;color:var(--faint);transition:transform .2s ease}
.think[open]>summary .tk-ch{transform:rotate(180deg)}
.think .t{padding:var(--sp-half) 12px var(--sp1) 12px;color:var(--mut);font-size:13.5px;line-height:var(--lh-body)}   /* V4 8pt padding · V10 line-height reconciled to the answer prose */
.think .t>:first-child{margin-top:0}.think .t>:last-child{margin-bottom:0}
.think .t p{margin:.45em 0}.think .t pre{margin:.5em 0}
/* ── structured web-search steps in the thought stream (globe step + favicon source chips + Done) ── */
.think .t .sstep{margin:2px 0 8px}
.think .t .sact{display:flex;align-items:flex-start;gap:9px;color:var(--cyan-soft);font-weight:600;font-size:13px;margin:7px 0 8px}
/* ---- agent-mode steps (tool actions in the thinking panel) ---- */
.think .t .astep .sact{color:var(--gold2)}
.think .t .astep .aico{flex:0 0 auto;font-size:13px;line-height:1.4}
.think .t .astep .apre{color:var(--mut);font-weight:500}
.think .t .astep .anote{color:var(--faint);font-weight:500}
.think .t .sglobe{flex:0 0 auto;width:16px;height:16px;color:var(--cyan-soft);margin-top:1px}
.think .t .sglobe svg{width:16px;height:16px;display:block}
.think .t .schips{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 2px 25px}
.think .t .schip{display:inline-flex;align-items:center;gap:7px;background:rgba(255,255,255,.045);border:1px solid var(--line);border-radius:0;padding:4px 11px;font-size:12px;color:var(--mut);text-decoration:none;max-width:240px;overflow:hidden}
.think .t .schip span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.think .t .schip:hover{border-color:var(--cyan-soft);color:var(--cyan-soft)}
.think .t .schipf{width:15px;height:15px;border-radius:0;flex:0 0 auto;background:#0c1620;object-fit:cover}
.think .t .schipf.mono{display:inline-flex;align-items:center;justify-content:center;object-fit:unset;font:700 9px system-ui,-apple-system,sans-serif;color:var(--cyan-soft);text-transform:uppercase}
.think .t .schipm{color:var(--faint)}
.think .t .sdone{display:flex;align-items:center;gap:9px;color:var(--gold2);font-weight:600;font-size:13px;margin:9px 0 2px}
.think .t .sdone svg{width:16px;height:16px;flex:0 0 auto}
.think .t .treason{margin-top:9px}
.think.streaming>summary .tk-ic{animation:brain 2.2s ease-in-out infinite}
.think.streaming>summary .tk-lbl{background:linear-gradient(90deg,var(--faint) 28%,var(--cyan-soft) 50%,var(--faint) 72%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shimmer 1.7s linear infinite}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
/* ── reasoning stream: premium + alive, so the depth of the reasoning is unmistakable ── */
.think>summary .tk-sec{font:700 12px/1 ui-monospace,Consolas,monospace;color:var(--cyan-soft);font-variant-numeric:tabular-nums;letter-spacing:.01em;flex:0 0 auto}
.think:not(.streaming)>summary .tk-sec{color:var(--gold2);}
.think.streaming{animation:thinkBreath 3.4s ease-in-out infinite;will-change:box-shadow}
.think.streaming::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:linear-gradient(180deg,var(--cyan-soft),var(--cyan),var(--gold2),var(--cyan),var(--cyan-soft));background-size:100% 280%;animation:railFlow 1.7s linear infinite;will-change:background-position}
.think:not(.streaming)::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:linear-gradient(180deg,rgba(34,211,238,.55),rgba(224,184,90,.5));opacity:.6}
.think.streaming .t::after{content:'';display:inline-block;width:var(--caret-w);height:1.02em;margin-left:1px;vertical-align:-2px;background:var(--caret-col);animation:caretBlink 1.05s steps(2,start) infinite}   /* V11: one unified streaming caret (width/em-height/colour) across reasoning + answer */
.msg.assistant.reasoning .av .brain{animation-duration:1.5s;color:#bdf3fb}
body.light .msg.assistant.reasoning .av .brain{color:#0e7490}   /* #bdf3fb is the dark-navy live colour; on paper it vanishes — keep the light-panel cyan */}
@keyframes thinkBreath{0%,100%{}50%{}}
@keyframes railFlow{0%{background-position:0 0}100%{background-position:0 -280%}}
@keyframes caretBlink{0%,49%{opacity:1}50%,100%{opacity:.12}}
@media(prefers-reduced-motion:reduce){.think.streaming>summary .tk-ic,.think.streaming>summary .tk-lbl{animation:none}.think.streaming>summary .tk-lbl{color:var(--cyan-soft)}.think.streaming,.think.streaming::before,.think.streaming .t::after,.msg.assistant.reasoning .av .brain{animation:none}.think.streaming{}}
/* streaming caret on the answer bubble */
.bubble.streaming::after{content:"";display:inline-block;width:var(--caret-w);height:1.02em;background:var(--caret-col);vertical-align:-2px;margin-left:1px;animation:caret 1.05s step-end infinite}   /* V11: unified caret spec */
@keyframes caret{0%,50%{opacity:1}50.01%,100%{opacity:0}}
/* a11y + mobile UI/UX primitives ( machinery) */
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;padding:0;margin:-1px}
.bubble.pending{min-height:1.1em}
.bubble.pending::before{content:attr(data-stat);color:var(--faint,#7d97ad);font-size:12.5px;letter-spacing:.03em;margin-right:9px;vertical-align:middle}
.bubble.pending::after{content:"";display:inline-block;width:34px;height:8px;vertical-align:middle;background:radial-gradient(circle 3px at 5px 4px,var(--cyan) 96%,transparent),radial-gradient(circle 3px at 17px 4px,var(--cyan) 96%,transparent),radial-gradient(circle 3px at 29px 4px,var(--cyan) 96%,transparent);animation:pendDots 1s ease-in-out infinite}
@keyframes pendDots{0%,80%,100%{opacity:.32}40%{opacity:1}}
@media(prefers-reduced-motion:reduce){.bubble.pending::after{animation:none;opacity:.6}}
@media(prefers-reduced-motion:reduce){.bubble.streaming::after{animation:none}}
/* micro-interactions & loading-state polish (additive) */
/* M1 — new-message enter transition (fade + slide) applied only to freshly appended nodes via .msg-in */
@keyframes msgIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.msg.msg-in{animation:msgIn .18s cubic-bezier(.22,.61,.36,1) both}
@media(prefers-reduced-motion:reduce){.msg.msg-in{animation:none}}
/* M3 — press/:active feedback on action controls (instant pressed feel, no hover needed) */
.acts button:active,.chip:active,#send:active,.newbtn:active,.micbtn:active,.iconbtn:active,.modelrow:active,.toolchip:active,.research:active,.cta:active,.followups .fu:active{transform:scale(.94);filter:brightness(.95)}
@media(prefers-reduced-motion:reduce){.acts button:active,.chip:active,#send:active,.newbtn:active,.micbtn:active,.iconbtn:active,.modelrow:active,.toolchip:active,.research:active,.cta:active,.followups .fu:active{transform:none}}
/* M6 — popover enter (fade+scale from anchor) on every menu, layered on the existing display toggles.
   CSS keyframes run when display flips from none->block, so no open/close JS changes are needed. */
@keyframes popIn{from{opacity:0;transform:scale(.97) translateY(-3px)}to{opacity:1;transform:none}}
.modelpick.open .modelmenu,.createmenu:not([hidden]),.toolsmenu:not([hidden]),.attachmenu:not([hidden]),.retrymenu:not([hidden]),.chatmenu:not([hidden]){animation:popIn .12s ease both}
.modelmenu,.createmenu,.toolsmenu,.attachmenu,.retrymenu,.chatmenu{transform-origin:top left}
@media(prefers-reduced-motion:reduce){.modelpick.open .modelmenu,.createmenu:not([hidden]),.toolsmenu:not([hidden]),.attachmenu:not([hidden]),.retrymenu:not([hidden]),.chatmenu:not([hidden]){animation:none}}
/* .pop-anim helper (available for JS-driven fade-out where needed) */
.pop-anim{opacity:0;transform:scale(.97);transform-origin:top left;transition:opacity .12s ease,transform .12s ease}
.pop-anim.pop-open{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.pop-anim{transition:none}}
/* M9 — starter-chip staggered reveal */
@keyframes chipIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.chips .chip{animation:chipIn .22s ease both;animation-delay:calc(var(--i,0)*40ms)}
@media(prefers-reduced-motion:reduce){.chips .chip{animation:none}}
/* M12 — attachment chip enter animation + thumbnail fade-in */
@keyframes attIn{from{opacity:0;transform:translateY(4px) scale(.97)}to{opacity:1;transform:none}}
.att.att-in{animation:attIn .16s ease both}
.att img.thumb-in{animation:thumbFade .28s ease both}
@keyframes thumbFade{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.att.att-in,.att img.thumb-in{animation:none}}
/* FELT-2M: the whole-thing-held confirmation under the attach chips (gold, calm, one line).
   Claim receipt: 'nothing summarised, nothing dropped' is the measured zero-drift result - 100% exact
   recall at 2,000,692 tokens, 72 adversarial trials, re-runnable live at GET /v1/zero_drift_proof
   (artifacts receipt: scratchpad/sota_benchmark.json axis 4 + evidence shot 18-context-intel.png);
   the inline 'See how' link opens that same measured panel. */
#ctxheld{flex-basis:100%;font-size:12.5px;color:var(--gold2,#e0b85a);padding:6px 2px 2px;letter-spacing:.01em}
#ctxheld b{font-weight:800}
#ctxheld a{color:var(--cyan,#7ee8f7);text-decoration:none;margin-left:6px}
#ctxheld a:hover{text-decoration:underline}
/* M13 — send<->stop icon morph in the same slot */
#send .ic{transition:opacity .12s ease,transform .12s ease}
#send .ic.icswap{opacity:0;transform:scale(.6)}
@media(prefers-reduced-motion:reduce){#send .ic{transition:none}}
/* M14 — thumbs vote pop + polite feedback flash */
@keyframes votePop{0%{transform:scale(1)}40%{transform:scale(1.28)}to{transform:scale(1)}}
.acts button.votepop{animation:votePop .32s ease}
@media(prefers-reduced-motion:reduce){.acts button.votepop{animation:none}}
/* shared skeleton shimmer box (reuses the shimmer sweep) — image/video/history/goal loading */
.skel{position:relative;overflow:hidden;background:linear-gradient(90deg,rgba(148,168,188,.10) 28%,rgba(148,168,188,.22) 50%,rgba(148,168,188,.10) 72%);background-size:220% 1200px;animation:shimmer 1.5s linear infinite;border:1px solid var(--line2)}
.skel-media{width:min(360px,92vw);aspect-ratio:1/1;display:block;margin:4px 0}
.skel-media.wide{aspect-ratio:16/9}
.skel-cap{margin-top:6px;font:600 12px/1.4 ui-monospace,Consolas,monospace;color:var(--cyan-soft);font-variant-numeric:tabular-nums}
body.light .skel-cap{color:#0e7490}
.skel-bar{height:11px;margin:7px 0;border:0}
.skel-bar.w80{width:80%}.skel-bar.w60{width:60%}.skel-bar.w95{width:95%}
.skel-row{display:flex;align-items:center;gap:9px;padding:9px 10px}
.skel-dot{width:24px;height:24px;flex:0 0 auto}
.skel-line{height:10px;flex:1 1 auto;border:0}
@media(prefers-reduced-motion:reduce){.skel{animation:none}}
/* L11 — per-step agent running indicator (spinner on the active tool step) */
.think .t .astep.running .aico{display:inline-block;animation:spin .7s linear infinite}
.think .t .astep.running .sact::after{content:'';display:inline-block;width:11px;height:11px;margin-left:8px;vertical-align:-1px;border:2px solid var(--line2);border-top-color:var(--gold2);border-radius:50%;animation:spin .7s linear infinite}
@media(prefers-reduced-motion:reduce){.think .t .astep.running .aico,.think .t .astep.running .sact::after{animation:none}}
/* L12 — empty-completion neutral notice (distinct from a hard error) */
.emptydone{border:1px solid var(--line2);color:var(--mut);padding:9px 12px;font-size:13.5px;line-height:1.5}
.emptydone .edact{display:inline-flex;gap:8px;margin-top:7px;flex-wrap:wrap}
.emptydone button{background:none;border:1px solid var(--line2);color:var(--cyan-soft);padding:5px 11px;cursor:pointer;font-weight:600;font-size:12.5px;font-family:inherit}
.emptydone button:hover{border-color:var(--gold);background:rgba(224,184,90,.12)}
body.light .emptydone button{color:#0e7490}
/* L7 — thumbs-down tiered feedback form */
.dnform{margin-top:8px;border:1px solid var(--line2);background:var(--panel2);padding:10px 11px;max-width:min(420px,92vw)}
.dnform .dnh{font-weight:600;font-size:12px;font-family:inherit;color:var(--mut);margin-bottom:7px}
.dnform .dnchips{display:flex;flex-wrap:wrap;gap:6px}
.dnform .dnc{border:1px solid var(--line2);background:none;color:var(--mut);font-weight:600;font-size:12px;font-family:inherit;padding:5px 10px;cursor:pointer}
.dnform .dnc:hover{border-color:var(--gold);color:var(--gold2)}
.dnform .dnc.on{background:rgba(224,184,90,.16);border-color:var(--gold);color:var(--gold2)}
.dnform textarea{width:min(398px,88vw);margin-top:8px;min-height:52px;background:var(--panel);border:1px solid var(--line2);color:var(--ink);font:inherit;font-size:13px;padding:8px;resize:vertical;outline:none}
.dnform textarea:focus{border-color:var(--gold)}
.dnform .dnrow{display:flex;gap:8px;margin-top:8px;justify-content:flex-end}
.dnform .dnsub{background:linear-gradient(180deg,var(--gold2),var(--gold-deep));color:#1a1305;border:0;padding:6px 14px;font-weight:700;cursor:pointer}
.dnform .dnskip{background:none;border:0;color:var(--faint);cursor:pointer;font-weight:600;font-size:12.5px;font-family:inherit}
/* L9 — first-run onboarding card */
.onbcard{margin:10px auto 0;max-width:min(560px,92vw);border:1px solid var(--line2);padding:14px 16px;text-align:left}   /* Apple-calm: cyan as a thin glow-accent, not a loud full border (founder 2026-07-18) */
body.light .onbcard{border-color:var(--line2)}
.onbcard .onbh{font-weight:800;font-size:14px;font-family:inherit;color:var(--ink);margin-bottom:6px}
.onbcard ul{margin:6px 0 0;padding-left:18px;color:var(--mut);font-size:13px;line-height:1.7}
.onbcard b{color:var(--gold2)}body.light .onbcard b{color:#8a6418}
.onbcard .onbx{margin-top:10px;background:none;border:1px solid var(--line2);color:var(--cyan-soft);padding:6px 13px;cursor:pointer;font-weight:600;font-size:12.5px;font-family:inherit}
.onbcard .onbx:hover{border-color:var(--cyan)}
body.light .onbcard .onbx{color:#0e7490}
/* model-switch confirmation pill (floats above the composer) */
.modelflash{position:absolute;left:50%;top:auto;bottom:54px;transform:translateX(-50%) translateY(4px);z-index:50;background:var(--panel);border:1px solid var(--cyan);color:var(--ink);font-weight:600;font-size:12.5px;font-family:inherit;padding:7px 12px;white-space:nowrap;opacity:0;transition:opacity .16s ease,transform .16s ease;pointer-events:none}
.modelflash.show{opacity:1;transform:translateX(-50%) translateY(0)}
body.light .modelflash{border-color:#0891b2}
@media(prefers-reduced-motion:reduce){.modelflash{transition:none}}
/* scroll-to-bottom button (operation polish) */
#scrolldown{position:absolute;right:var(--sp3);left:auto;bottom:calc(var(--composer-h) + var(--sp1));transform:translateY(8px);width:38px;height:38px;display:none;align-items:center;justify-content:center;background:var(--panel);border:1px solid var(--line2);color:var(--gold2);cursor:pointer;opacity:0;transition:opacity .18s ease,transform .18s ease;z-index:8}
#scrolldown.show{display:flex;opacity:1;transform:translateX(-50%) translateY(0)}
#scrolldown:hover{border-color:var(--gold)}#scrolldown .ic{width:18px;height:18px}
#wrap.empty #scrolldown{display:none!important}
#wrap.empty .research{display:none}
#send.gen{background:linear-gradient(180deg,#fb7185,#c84b5e)}#send.gen .ic{color:#fff}
.err{color:var(--bad)}
/* composer */
.composer{flex:0 0 auto;align-self:stretch;min-width:0;padding-top:var(--sp1);padding-bottom:calc(var(--sp1) + env(safe-area-inset-bottom));transform:translateY(calc(-1 * var(--kb,0px)))}
.composer .col{min-width:0;position:relative}
/* Create (images & video) menu — a popover above the composer */
.createmenu{position:absolute;bottom:64px;right:20px;z-index:40;min-width:250px;display:flex;flex-direction:column;background:#0e1b2e;border:1px solid #e0b85a;
  padding:6px}
.createmenu[hidden]{display:none}
.createmenu .cmhead{font:600 10.5px/1 ui-monospace,Consolas,monospace;letter-spacing:.14em;text-transform:uppercase;color:#e0b85a;padding:9px 10px 7px}
.createmenu button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;background:transparent;border:0;padding:9px 10px;cursor:pointer;color:#eaf6fb}
.createmenu button:hover{background:rgba(224,184,90,.14)}
.createmenu button b{font-size:13.5px;font-weight:700}
.createmenu button span{font-size:11.5px;color:#8aa3b8}
#createBtn .lbl{color:#e0b85a}
/* empty state (before a chat starts): lift the hero + input up as a centred group so the bar isn't pinned low */
/* empty state: navy band stays full chat width and is TOP-ANCHORED (flush under the bar) like the landing .hero; #thread grows so the composer stays pinned at the bottom — no vertical-centering, no mid-page stranding */
#wrap.empty #thread{flex:1 1 auto;width:100%;align-self:stretch;overflow-x:hidden;overflow-y:auto;min-height:0;padding:0;display:flex;flex-direction:column}
#wrap.empty .empty{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;min-height:0;}/* 2-tone landing: scrim hero TOP-anchored, light panel grows to fill · inset top shadow softens the hero->content seam (Apple-calm, founder 2026-07-18) */
#wrap.empty #col{display:none}
#wrap.empty .composer{padding-bottom:3svh}/* composer comfortably low; the block above is now vertically centred */
/* fresh-chat: the composer is MOVED into the centred landing block (ChatGPT-style input near the middle) */
#wrap.cc .cvlwrap .composer,#wrap.cc .cvlwrap .chips{max-width:760px;width:100%;margin-inline:auto}
#wrap.cc .cvlwrap .composer{margin-block:var(--sp2);padding:0;align-self:auto}
#wrap.cc .cvlwrap .composer .col{padding:0}
#wrap.cc .cvlwrap .subbar{margin-top:11px}
.atts{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}.atts:empty{margin-bottom:0}   /* an empty attachment strip (the common case) reserved 8px it never used; mobile-declutter, artifacts/mobile-declutter-2026-09-09 */
.att{display:flex;align-items:center;gap:7px;background:var(--panel2);border:1px solid var(--line2);border-radius:0;padding:6px 10px;font-size:12.5px;color:var(--mut)}
.att b{color:var(--ink);font-weight:600}.att .x{cursor:pointer;color:var(--faint)}.att img{width:26px;height:26px;object-fit:cover;border-radius:0}
.att .att-retry{font:inherit;color:var(--cyan);background:transparent;border:var(--bw-hair) solid var(--line2);padding:var(--sp-half) var(--sp1);min-height:var(--sp-tap);min-width:var(--sp-tap);cursor:pointer}.att .att-retry:focus-visible{outline:var(--bw-rule) solid var(--cyan);outline-offset:var(--bw-rule)}
.att.err{border-color:var(--bad)}.att .mut{color:var(--faint)}
.att .sp{width:13px;height:13px;border:2px solid var(--line2);border-top-color:var(--cyan);border-radius:50%;display:inline-block;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
/* C11: the remove control is a real focusable button (keyboard-removable chip) */
.att .x{cursor:pointer;color:var(--faint);border:0;background:none;padding:0 1px;font:inherit;font-size:12.5px;line-height:1;display:inline-flex;align-items:center;-webkit-appearance:none;appearance:none}
.att .x:hover{color:var(--bad)}
.att .x:focus-visible{outline:2px solid var(--gold);outline-offset:1px}
/* C5: live token/char counter in the subbar — amber near the window, red past it */
.tokcount{font:600 11.5px ui-monospace,Consolas,monospace;color:var(--faint);font-variant-numeric:tabular-nums;white-space:nowrap}
.tokcount.warn{color:var(--gold2)}.tokcount.over{color:var(--bad)}
body.light .tokcount.warn{color:#8a6418}
/* C8: composer-scoped drop target — the pill lights up as a drop zone (depth-counter driven) */
.pill.dragover{border-color:var(--cyan);background:rgba(34,211,238,.05)}
body.light .pill.dragover{background:rgba(34,211,238,.06)}
/* C9/C14: slash-command + @-mention autocomplete popover above the composer */
.slashmenu{position:absolute;left:10px;bottom:64px;z-index:60;min-width:min(320px,92vw);max-width:min(420px,92vw);max-height:min(300px,50svh);overflow:auto;background:#fff;border:1px solid var(--cyan);padding:5px;display:flex;flex-direction:column;gap:1px}
body:not(.light) .slashmenu{background:#0e1b2e}
.slashmenu[hidden]{display:none}
.slashmenu:not([hidden]){animation:popIn .12s ease both;transform-origin:bottom left}
@media(prefers-reduced-motion:reduce){.slashmenu:not([hidden]){animation:none}}
.slashmenu .smrow{display:flex;align-items:center;gap:10px;width:min(400px,90vw);max-width:none;padding:8px 11px;border:0;background:none;color:var(--ink,#0c1727);font-weight:600;font-size:13.5px;font-family:inherit;cursor:pointer;text-align:left}
body.light .slashmenu .smrow{color:#0c1727}
.slashmenu .smrow .smk{flex:0 0 auto;color:var(--gold-deep,#8a6418);font-family:ui-monospace,Consolas,monospace;font-weight:700}
body:not(.light) .slashmenu .smrow .smk{color:var(--gold2)}
.slashmenu .smrow .smd{flex:1 1 auto;min-width:0;color:var(--mut);font-weight:500;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.slashmenu .smrow:hover,.slashmenu .smrow.sel{background:rgba(224,184,90,.14)}
body:not(.light) .slashmenu .smrow:hover,body:not(.light) .slashmenu .smrow.sel{background:rgba(224,184,90,.14)}
/* ── Chat feature surfaces: pager · voice · menu · help · follow-ups ── */
.pager{display:inline-flex;align-items:center;gap:4px;color:var(--faint);font-size:12px;margin-right:4px}
.pager button{background:none;border:0;color:var(--faint);cursor:pointer;font-size:15px;padding:0 3px;line-height:1}
.pager button:hover{color:var(--cyan-soft)}.pager button:disabled{opacity:.3;cursor:default}
#voiceov{position:fixed;inset:0;z-index:90;background:radial-gradient(900px 620px at 50% 30%,rgba(34,211,238,.10),transparent 62%),#070f1c;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px}
#voiceov[hidden]{display:none}
#voiceov .orb{width:150px;height:150px;border-radius:50%;background:radial-gradient(circle at 36% 32%,#7ee8f7,#0e7490 62%,#083344);cursor:pointer;transition:transform .25s ease}
#voiceov .orb.listen{animation:vpulse 1.6s ease-in-out infinite}
#voiceov .orb.speak{animation:vpulse 0.85s ease-in-out infinite;background:radial-gradient(circle at 36% 32%,#e0b85a,#9a6f1c 62%,#3d2b09);}
#voiceov .orb.think{animation:vspin 1.2s linear infinite}
@keyframes vpulse{0%,100%{transform:scale(1)}50%{transform:scale(1.09)}}
@keyframes vspin{0%{filter:hue-rotate(0)}100%{filter:hue-rotate(24deg)}}
#voiceov .vstate{color:#dbe6ef;font-size:16px;min-height:22px}
#voiceov .vtxt{color:#8aa3b8;max-width:640px;padding:0 22px;text-align:center;font-size:14px;line-height:1.5;min-height:40px}
#voiceov .vclose{position:absolute;top:18px;right:18px;background:none;border:1px solid #15293f;color:#8aa3b8;width:40px;height:40px;cursor:pointer;font-size:16px}
#voiceov .vhint{color:#52677a;font-size:12px}
.chatmenu{position:fixed;z-index:120;background:var(--panel2,#0e1b2e);border:1px solid var(--line2);min-width:230px;max-height:min(70vh,calc(100dvh - 16px));overflow-y:auto;display:flex;flex-direction:column;padding:5px;}
.chatmenu[hidden]{display:none}
.effortlbl{display:inline-flex;align-items:center;gap:var(--sp-quarter,4px);color:var(--faint);font-size:var(--fs-xs);margin-left:2px}/* was an inline style attribute, which no stylesheet rule can beat: the touch layer's own display:none never fired and the model button painted 41px across the label on a tablet (audit round 2). Same declarations, now overridable, and on declared steps. */
.chatmenu button[hidden]{display:none}/* .chatmenu button sets display:flex, which outranks the user-agent's [hidden]{display:none}: every row hidden by script stayed on screen, including the admin row a non-admin should never see (runtime proof, 2026-09-06). The server 403s those routes regardless, so this was a visible-surface defect, not access. */
/* .cm-effort-row joins this selector list rather than repeating its literals (mobile-declutter,
   receipt artifacts/mobile-declutter-2026-09-09/mobile_declutter_receipt.json): same row shape as
   every other .chatmenu row, so the relocated effort control reads as a normal settings row rather
   than a bare, unlabelled dropdown -- the label .effortlbl itself would show is font-size:0 on touch
   devices (a deliberate fix from an earlier audit, for the cramped bar; wrong fit here, so this row
   supplies its own visible label instead). Merging into the existing selector adds zero literals. */
.chatmenu button,.chatmenu .cm-effort-row{display:flex;align-items:center;gap:9px;background:none;border:0;color:var(--ink);text-align:left;padding:9px 11px;cursor:pointer;font-size:13.5px}
.chatmenu button:hover{background:rgba(224,184,90,.12)}
.chatmenu button .ic,.chatmenu .cm-effort-row .ic{width:16px;height:16px;display:inline-flex;color:var(--gold2)}
.chatmenu .cm-effort-row .lbl{flex:1 1 auto}
.chatmenu .cm-effort .effortlbl{margin-left:0}
.chatmenu .cm-group{font-size:var(--fs-2xs);font-weight:var(--w-semi);letter-spacing:var(--tr-wide);text-transform:uppercase;color:var(--faint);padding:var(--sp1) var(--sp1) calc(var(--sp1) / 2);margin-top:calc(var(--sp1) / 2);pointer-events:none}.chatmenu .cm-group:first-child{margin-top:0}
.chatmenu button.on .lbl::after{content:" ✓";color:var(--cyan-soft)}
.chatmenu button.del,.chatmenu button.del .ic{color:var(--bad,#e5484d)}.chatmenu button.del:hover{background:rgba(229,72,77,.12)}
body.light .chatmenu button.del,body.light .chatmenu button.del .ic{color:#c0303a}body.light .chatmenu button.del:hover{background:rgba(192,48,58,.1)}
.kbdhelp{position:fixed;inset:0;z-index:95;background:rgba(7,15,28,.72);display:flex;align-items:center;justify-content:center}
.kbdhelp[hidden]{display:none}
.kbdhelp .kbx{background:var(--panel2,#0e1b2e);border:1px solid var(--line2);padding:20px 24px;max-width:430px;width:92%}
body.light .kbdhelp .kbx{background:#fff;color:#0c1727;border-color:#d6e2ec}
.kbdhelp h3{margin:0 0 12px;font-size:16px;color:var(--ink)}
.kbdhelp .krow{display:flex;justify-content:space-between;gap:14px;padding:6px 0;color:var(--mut);font-size:13.5px;border-bottom:1px solid var(--line)}
.kbdhelp kbd{background:var(--chip);border:1px solid var(--line2);padding:2px 7px;font:600 11.5px Consolas,monospace;color:var(--cyan-soft)}
.followups{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.followups .fu{background:rgba(34,211,238,.04);border:1px solid rgba(38,64,92,.55);color:var(--cyan-soft);padding:var(--sp1) var(--sp1half);cursor:pointer;font-size:var(--fs-xs);text-align:left;transition:border-color .15s ease,background .15s ease,filter .15s ease,transform .15s ease}   /* V-pass4: quiet suggestion surface, not an outlined button (Apple-calm thread rhythm) */
.followups .fu:hover{border-color:rgba(34,211,238,.5);background:rgba(34,211,238,.08);transform:translateY(-1px)}   /* cyan GLOW-accent via drop-shadow (brand canon: never box-shadow for glow) + subtle lift */
body.light .followups .fu{color:#0e7490;border-color:#c2d6e0;background:rgba(8,145,178,.05)}   /* light mode: pale cyan was unreadable on white — WCAG-AA teal + calm surface */
body.light .followups .fu:hover{border-color:#0891b2;background:rgba(8,145,178,.09);}   /* light-mode cyan glow-accent tuned for white */
/* ── proactive capability offer: Elara surfaces the RIGHT feature in-convo (theme-aware tokens; text WRAPS so it never clips) ── */
.capoffer{display:flex;align-items:stretch;margin-top:12px;border:1px solid var(--gold)}
.capoffer .capbtn{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:10px;background:none;border:0;color:var(--ink);padding:11px 13px;cursor:pointer;text-align:left;font-size:13px;font-weight:600;line-height:1.35}
.capoffer .capic{color:var(--gold2);flex:0 0 auto;display:inline-flex;align-items:center}
.capoffer .captx{flex:1 1 auto;min-width:0}
.capoffer .capgo{color:var(--gold2);flex:0 0 auto;font-size:17px;font-weight:700}
.capoffer .capbtn:hover{background:rgba(224,184,90,.09)}
.capoffer .capx{flex:0 0 auto;background:none;border:0;border-left:1px solid var(--line2);color:var(--faint);cursor:pointer;font-size:17px;line-height:1;padding:0 11px}
.capoffer .capx:hover{color:var(--ink)}
/* moment-of-value collaboration bridge (adversary-test D1/D2): the ONE quiet line that brings a second
   mind in. Reuses the capoffer frame; a cyan GLOW on hover (drop-shadow, never box-shadow) marks it as
   the live "together" action, distinct from a feature offer. Founder 2026-07-18. */
.capoffer.smind .capbtn:hover{background:rgba(224,184,90,.09);}
body.light .capoffer.smind .capbtn:hover{}
.contbtn{margin-top:10px;background:none;border:1px solid var(--gold);color:var(--gold2);padding:8px 14px;cursor:pointer;font-weight:700;font-size:13px}
.contbtn:hover{background:rgba(224,184,90,.09)}
/* gold unread mail badge — literal brand gold so it is identical + legible in BOTH light and dark (no theme-var drift) */
.mail-badge,.collab-badge{position:absolute;top:1px;right:1px;min-width:13px;height:13px;padding:0 3px;display:inline-flex;align-items:center;justify-content:center;background:#c79a3e;color:#140f02;font:800 8.5px/1 ui-sans-serif,system-ui,sans-serif;letter-spacing:-.02em;pointer-events:none;z-index:2}   /* calmer unread badge: smaller, cold gold (was a loud 15px bright-gold shout) */
/* .collab-badge sits on #collabBtn's own GOLD background (docs/DESIGN_MATH.md section 6: the one
   accent), so the shared gold-on-dark badge above would vanish into it -- inverted here, navy on
   the brand's own cyan-soft, using declared tokens only (mobile-declutter, receipt
   artifacts/mobile-declutter-2026-09-09/mobile_declutter_receipt.json). */
.collab-badge{background:var(--navy);color:var(--cyan-soft)}
.mail-badge[hidden],.collab-badge[hidden]{display:none!important}
body.signed-out #mailBtn{display:none}   /* the email icon is meaningful only with an account; hiding it signed-out also reverts the mobile bar to the proven-fitting 3-icon layout (a11y-onscreen) */
.stoppedbadge{display:inline-block;margin-top:8px;padding:2px 8px;border:1px solid var(--line2);color:var(--faint);font-weight:600;font-size:10.5px;line-height:1.5;font-family:inherit;letter-spacing:.04em;text-transform:uppercase;vertical-align:middle}
body.dragging::after{content:"Drop files to attach";position:fixed;inset:10px;z-index:99;border:2px dashed var(--cyan);background:rgba(7,15,28,.65);color:#7ee8f7;display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:700;pointer-events:none}
.tempbanner{border:1px solid var(--line2);color:var(--mut);font-size:12.5px;padding:8px 12px;margin:8px auto;max-width:820px}
.retrymenu{position:fixed;z-index:82;background:var(--panel2,#0e1b2e);border:1px solid var(--line2);display:flex;flex-direction:column;padding:4px;min-width:200px;}
.retrymenu[hidden]{display:none}
.retrymenu button{background:none;border:0;color:var(--ink);text-align:left;padding:8px 11px;cursor:pointer;font-size:13px}
.retrymenu button:hover{background:rgba(224,184,90,.12)}
.hgroup.arch{color:var(--faint)}
/* N7: collapsible Archived section header */
#hist .hgroup.archtog{display:flex;align-items:center;gap:6px;cursor:pointer;user-select:none;-webkit-user-select:none}
#hist .hgroup.archtog:hover{color:var(--mut)}
#hist .hgroup.archtog:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
#hist .hgroup.archtog .archcv{display:inline-block;transition:transform .14s ease;font-size:10px}
#hist .hgroup.archtog.collapsed .archcv{transform:rotate(-90deg)}
#hist .hgroup.archtog .archn{margin-left:auto;opacity:.7;font-size:9px;letter-spacing:.06em}
@media(prefers-reduced-motion:reduce){#hist .hgroup.archtog .archcv{transition:none}}
/* N5: visible pin glyph on a pinned row */
#hist .h .hline{display:flex;align-items:center;gap:5px;flex:1 1 auto;min-width:0}
#hist .h .hpin{flex:0 0 auto;width:12px;height:12px;color:var(--gold2);opacity:.85;display:inline-flex;align-items:center;justify-content:center}
#hist .h .hpin svg{width:12px;height:12px}
/* N3: matched-snippet under the title for a body search match */
#hist .h.hasnip{flex-wrap:wrap;align-items:flex-start;padding-top:9px;padding-bottom:9px}
#hist .h .hsniprow{flex:1 1 100vw;min-width:0;margin-top:2px;font-size:11.5px;line-height:1.4;color:var(--faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#hist .h .hsniprow mark{background:rgba(224,184,90,.28);color:var(--ink);padding:0 1px}
body.light #hist .h .hsniprow mark{background:rgba(34,211,238,.28)}
/* N10: an empty Goals panel collapses so it never permanently consumes sidebar height */
#goalPanel.goal-empty{display:none}
.pill{display:flex;align-items:center;gap:var(--sp1);min-width:0;position:relative;background:var(--paper);border:1px solid transparent;padding:var(--sp1) var(--sp2);box-sizing:border-box;transition:border-color .18s,box-shadow .18s}/* shade, not a hex ring; equal padding-block so attach/send share one inset */
body:not(.light) .pill{background:var(--panel2);border-color:transparent;}
body:not(.light) .pill #inp{color:var(--ink)}
body:not(.light) .pill #inp::placeholder{color:var(--faint)}
body:not(.light) .iconbtn,body:not(.light) .micbtn{background:transparent;color:var(--gold2)}
#bar .iconbtn{color:var(--mut)}#bar .iconbtn:hover{color:var(--gold2)}   /* Apple-calm: a quiet top-bar icon row, gold on hover; the model pill is the single emphasis (founder 2026-07-18) */
body:not(.light) .iconbtn:hover,body:not(.light) .micbtn:hover{background:rgba(224,184,90,.14);color:var(--gold2)}
body:not(.light) .research{background:var(--panel);border-color:var(--line2);color:var(--mut)}
.pill:focus-within{border-color:transparent;background:var(--paper-2)}
body.light .pill:focus-within{background:#f4f8fb}
body:not(.light) .pill:focus-within{background:var(--panel);border-color:transparent}
/* composer icon buttons — ONE gold family; toggles moved to a Tools popover. receipt: artifacts/chat-parity/composer_v2.json */
.iconbtn{flex:0 0 auto;width:var(--sp5);height:var(--sp5);margin:0;padding:0;border:0;background:var(--paper-2);color:#9a6f1c;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;align-self:center;position:relative}.iconbtn:hover{background:rgba(224,184,90,.18);color:var(--gold-deep,#8a6418)}.iconbtn .ic{width:19px;height:19px}
.micbtn{flex:0 0 auto;width:var(--sp5);height:var(--sp5);margin:0;padding:0;border:0;background:var(--paper-2);color:#9a6f1c;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;align-self:center;transition:color .15s,background .15s,box-shadow .15s}
.micbtn:hover{background:rgba(224,184,90,.18);color:var(--gold-deep,#8a6418)}.micbtn .ic{width:18px;height:18px}
.micbtn.on{background:rgba(224,184,90,.22);color:var(--gold-deep,#8a6418);animation:micpulse 1.4s ease-in-out infinite}
@keyframes micpulse{0%,100%{}50%{}}
#toolsBtn.active::after{content:"";position:absolute;top:6px;right:6px;width:7px;height:7px;border-radius:50%;background:var(--gold2);}
/* capability chips — always show what the user can do; active fills gold, inactive is a subtle outline
   (founder: "show that the user can do all those things" + tools selectable in the composer) */
.toolchips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 6px}.toolchips:empty{display:none}
.toolchip{display:inline-flex;align-items:center;gap:var(--sp-half);border:1px solid var(--line2,#c2d3df);background:none;color:var(--mut,#54677a);font:var(--w-semi) var(--fs-xs)/var(--lh-snug) inherit;padding:var(--sp-half) var(--sp1half);min-height:var(--sp4);cursor:pointer;-webkit-appearance:none;appearance:none}
.toolchip:hover{border-color:var(--gold);color:var(--gold-deep,#8a6418)}
.toolchip.on{background:rgba(224,184,90,.16);border-color:var(--gold);color:var(--gold-deep,#8a6418)}
body:not(.light) .toolchip.on{color:#e0b85a}
.toolchip .tc-i{font-size:12px;display:inline-flex}
.toolchip .tc-i svg{width:13px;height:13px;display:block}   /* monochrome SVG glyphs — colour emoji broke the brand's mono-icon rule */
.toolchip .tc-x{font-size:11px;padding:0 1px;line-height:1;opacity:.8}
.toolchip .tc-x:hover{opacity:1}
.toolchip.teach{background:#0e1b2e;border-color:var(--gold);color:var(--gold2,#e0b85a);font-weight:700;border-radius:0}
.toolchip.teach .tc-i{color:var(--gold2,#e0b85a)}
body:not(.light) .toolchip.teach{background:#0e1b2e;color:#e0b85a}
body:not(.light) .toolchip.teach .tc-i{color:#e0b85a}
.toolchip.teach:hover{border-color:var(--gold2);}
@media(max-width:640px){   /* mobile: ONE scrollable chip row — was wrapping to two rows and crowding the composer */
 .toolchips{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:6px}
 .toolchips::-webkit-scrollbar{display:none}
 .toolchips.more{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - var(--sp5)),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - var(--sp5)),transparent)}
 .toolchip{flex:0 0 auto;font-size:11px;padding:3px 8px}
 /* #scrolldown's own literal bottom:150px removed (mobile-declutter plan, artifacts/mobile-declutter-2026-09-09/mobile_declutter_receipt.json):
    it overrode the derived rule at #scrolldown{bottom:calc(var(--composer-h) + var(--sp1))} above regardless of --composer-h. */
}
.toolsmenu{position:absolute;left:10px;bottom:64px;z-index:60;min-width:230px;background:#fff;border:1px solid var(--cyan);padding:5px;display:flex;flex-direction:column;gap:2px}
.toolsmenu[hidden],.attachmenu[hidden]{display:none}   /* the display:flex rule was overriding the hidden attribute -> menu showed on load; this restores hidden-by-default (founder: box must start OFF) */
body:not(.light) .toolsmenu{background:#0e1b2e;border-color:var(--line,#16304a)}
.toolsmenu .tmrow{display:flex;align-items:center;gap:10px;width:100%;padding:9px 11px;border:0;background:none;color:var(--ink,#0c1727);font-weight:600;font-size:13.5px;font-family:inherit;cursor:pointer;text-align:left}
body.light .toolsmenu .tmrow{color:#0c1727}
.toolsmenu .tmrow .ic{width:17px;height:17px;flex:0 0 auto;color:#9a6f1c}
.toolsmenu .tmrow:hover{background:rgba(224,184,90,.14)}
.toolsmenu .tmrow .tmlbl{flex:1 1 auto}
.toolsmenu .tmrow .tmdot{flex:0 0 auto;width:9px;height:9px;border-radius:50%;border:1px solid var(--line2,#c2d3df)}
.toolsmenu .tmrow.on .tmdot{background:var(--gold2);border-color:var(--gold);}
.toolsmenu .tmrow.on{color:var(--gold-deep,#8a6418)}.toolsmenu .tmrow.on .ic{color:var(--gold2)}
.toolsmenu .tmrow .x2{font-size:10px;font-weight:800;background:rgba(224,184,90,.18);color:var(--gold2);border:1px solid var(--gold);padding:1px 5px}
.toolsmenu .tmrow .tmchev{color:var(--faint);font-size:16px}
.toolsmenu .tmrow:disabled{opacity:.45;cursor:not-allowed}
.attachmenu{position:absolute;left:10px;bottom:64px;z-index:60;min-width:210px;background:#fff;border:1px solid var(--cyan);padding:5px;display:flex;flex-direction:column;gap:2px}
body:not(.light) .attachmenu{background:#0e1b2e}
.attachmenu button{display:flex;align-items:center;gap:10px;width:100%;padding:9px 11px;border:0;background:none;color:var(--ink,#0c1727);font-weight:600;font-size:13.5px;font-family:inherit;cursor:pointer;text-align:left}
body.light .attachmenu button{color:#0c1727}
.attachmenu button:hover{background:rgba(224,184,90,.14)}
.attachmenu button span{width:18px;text-align:center}
.conn-list{display:flex;flex-direction:column;gap:2px;max-height:60svh;overflow:auto}
.conn-row{display:flex;align-items:center;gap:11px;padding:9px 6px;border-bottom:1px solid var(--line2,#e4e9ee)}
.conn-row .conn-ico{flex:0 0 auto;font-size:19px;width:24px;text-align:center}
.conn-row .conn-name{flex:1 1 auto;min-width:0;font-size:13.5px;color:var(--ink,#0c1727)}
.conn-row.conn-file .conn-name{cursor:pointer}
.conn-row .conn-act{flex:0 0 auto;display:flex;gap:6px}
.conn-on{color:var(--good,#0e7490);font-size:11.5px;font-weight:600}
.conn-off{color:var(--faint);font-size:11.5px}
.conn-soon{color:var(--faint);font-size:11.5px;font-style:italic}
.pp-btn.conn-x{color:var(--bad);border-color:transparent}
.pp-btn.pp-conn{color:var(--cyan)}
#inp{flex:1 1 0;min-width:0;width:0;min-height:var(--sp5);max-height:44svh;margin:0;border:0;background:none;color:#0c1727;font-size:15.5px;line-height:var(--lh-snug);resize:none;outline:none;overflow-y:auto;padding:var(--sp1) 2px;align-self:center;box-sizing:border-box;font-family:inherit}/* same 40px row as attach/tools/mic/send · equal padding-block */
#inp::placeholder{color:#5f6f7e;opacity:1}
.research{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 13px;border:1px solid #d6e2ec;background:#eef3f6;color:#52677a;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}
.research .ic{width:16px;height:16px;color:currentColor}
.research:hover{border-color:var(--gold);color:var(--gold2)}
.research.on{background:rgba(224,184,90,.14);border-color:var(--gold);color:var(--gold2);animation:tgglow 3.4s ease-in-out infinite}
.research:disabled{opacity:.45;cursor:not-allowed;animation:none}
.research .x2{font-size:10px;font-weight:800;letter-spacing:.02em;background:rgba(224,184,90,.18);color:var(--gold2);border:1px solid var(--gold);border-radius:0;padding:1px 5px;line-height:1.4}
@keyframes tgglow{0%,100%{}50%{}}
#send{flex:0 0 auto;width:var(--sp5);height:var(--sp5);margin:0;padding:0;border:0;cursor:pointer;background:linear-gradient(180deg,var(--gold2),var(--gold-deep));color:#1a1305;display:inline-flex;align-items:center;justify-content:center;align-self:center;}#send:hover{filter:brightness(1.07)}#send:disabled{opacity:.45;cursor:not-allowed;filter:none}#send .ic{width:18px;height:18px;color:#1a1305}
.subbar{display:flex;gap:12px;align-items:center;justify-content:center;margin-top:9px;color:var(--faint);font-size:12px;flex-wrap:wrap}.subbar a{color:var(--gold2)}.subbar .cost{color:var(--gold2);font-family:ui-monospace,Consolas,monospace}
#ctxm b{color:var(--cyan-soft);font-weight:700;font-family:ui-monospace,Consolas,monospace}/* live context-used % — cyan = the verified/precision accent */
/* canvas pane (ChatGPT-style) — slides in from the right, holds editable markdown */
#canvas{flex:0 0 0;width:0;overflow:hidden;border-left:1px solid var(--line);background:linear-gradient(180deg,#0c1727,#0a1422);display:flex;flex-direction:column;transition:width .22s ease}
#canvas.open{flex:0 0 52%;width:52%}
#canvas.expand{flex:0 0 84%;width:84%}
#cvhead{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:11px 14px;border-bottom:1px solid var(--line)}
#cvhead .ttl{font-weight:700;font-size:13.5px;color:var(--ink);display:flex;align-items:center;gap:8px}#cvhead .ttl .ic{width:16px;height:16px}
#cvhead .sp{margin-left:auto}
.cvbtn{background:var(--panel2);border:1px solid var(--line2);color:var(--gold2);font-size:12px;font-weight:600;padding:6px 10px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.cvbtn:hover{border-color:var(--gold)}.cvbtn .ic{width:14px;height:14px}.cvbtn.icon{padding:6px}   /* V3: radius stripped */
#cvbody{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
/* editor: hidden in VIEW mode; in EDIT mode it shares the pane with a LIVE preview that re-renders as you type */
#cvedit{display:none;width:100%;border:0;background:#060d18;color:#cfe6f2;font:13.5px/1.7 ui-monospace,Consolas,monospace;padding:16px 18px;resize:none;outline:none}
#cvbody.editing #cvedit{display:block;flex:0 0 44%;border-bottom:1px solid var(--line2)}
#cvbody.editing #cvprev{padding:22px 26px 44px}
#cveditbar{display:none;flex:0 0 auto;align-items:center;gap:7px;padding:6px 14px;border-bottom:1px solid var(--line);color:var(--faint);font-size:11.5px}
#cvbody.editing #cveditbar{display:flex}
#cveditbar .dot{width:7px;height:7px;border-radius:50%;background:var(--cyan);}
#cvprev{flex:1 1 auto;overflow:auto;padding:36px 32px 66px}
/* the rendered DOCUMENT — Canvas-grade typography that OVERRIDES the compact chat .bubble defaults */
#cvprev .cvdoc{max-width:720px;margin:0 auto;background:transparent;padding:0;font-size:16.5px;line-height:1.78;color:#e8f3fb}
#cvprev .cvdoc>:first-child{margin-top:0}
#cvprev .cvdoc h1{font-size:30px;font-weight:800;letter-spacing:-.02em;line-height:1.18;margin:0 0 .55em;color:#f4fafe;padding-bottom:.34em;border-bottom:1px solid var(--line2)}
#cvprev .cvdoc h1+h2{margin-top:.7em}
#cvprev .cvdoc h2{font-size:22.5px;font-weight:800;letter-spacing:-.01em;line-height:1.3;margin:1.55em 0 .45em;color:#f1f8fc}
#cvprev .cvdoc h3{font-size:18.5px;font-weight:700;line-height:1.36;margin:1.5em 0 .35em;color:#eaf6fb}
#cvprev .cvdoc h4{font-size:15.5px;font-weight:700;letter-spacing:.01em;margin:1.2em 0 .3em;color:var(--cyan-soft)}
#cvprev .cvdoc h1:first-child,#cvprev .cvdoc h2:first-child,#cvprev .cvdoc h3:first-child{margin-top:0}
#cvprev .cvdoc p{margin:0 0 1.02em;line-height:1.78}
#cvprev .cvdoc ul,#cvprev .cvdoc ol{margin:.55em 0 1.05em;padding-left:1.55em}
#cvprev .cvdoc li{margin:.42em 0;line-height:1.72;padding-left:.12em}
#cvprev .cvdoc li>ul,#cvprev .cvdoc li>ol{margin:.35em 0}
#cvprev .cvdoc blockquote{border-left:3px solid var(--gold);margin:1.1em 0;padding:.3em 0 .3em 1.1em;color:var(--mut);font-style:italic}
#cvprev .cvdoc hr{margin:1.7em 0}
#cvprev .cvdoc a{color:var(--gold2);border-bottom:1px solid rgba(224,184,90,.45)}
#cvprev .cvdoc .tblwrap{margin:.4em 0 1.25em}
#cvprev .cvdoc th,#cvprev .cvdoc td{padding:9px 13px}
#cvprev .cvdoc pre{margin:1em 0 1.25em}
#cvprev .cvdoc .katex-display{margin:1.15em 0}
/* ---- Context Intelligence pane — the .LEKOLA-Relevance-Rank moat view (mirrors the canvas slide-in) ---- */
#ctxpanel{flex:0 0 0;width:0;overflow:hidden;border-left:1px solid var(--line);background:linear-gradient(180deg,#0c1727,#0a1422);display:flex;flex-direction:column;transition:width .22s ease}
#ctxpanel.open{flex:0 0 42%;width:42%}
#cxhead{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:11px 14px;border-bottom:1px solid var(--line)}
#cxhead .ttl{font-weight:700;font-size:13.5px;color:var(--ink);display:flex;align-items:center;gap:8px}
.cxdot{width:9px;height:9px;background:var(--cyan);display:inline-block}
#cxhead .sp{margin-left:auto}
#cxbody{flex:1 1 auto;min-height:0;overflow:auto;padding:20px 20px 44px}
.cx-why{color:var(--cyan-soft);font-size:16px;font-weight:600;line-height:1.4}
.cx-sub{color:var(--mut);font-size:12.5px;margin:8px 0 4px;line-height:1.55}
.cx-solved{margin:13px 0;padding:13px 14px;border:1px solid var(--line2)}
.cx-solved-h{font-weight:800;font-size:13.5px;color:var(--gold2);letter-spacing:-.01em;margin-bottom:6px;line-height:1.3}
.cx-solved p{margin:0;font-size:12.5px;line-height:1.6;color:var(--mut)}
.cx-solved p b{color:var(--cyan-soft);font-weight:700}
.cx-solved .sig{display:block;margin-top:8px;color:var(--ink);font-weight:600;font-style:italic}
.cx-sec{margin-top:20px}
.cx-h{color:var(--ink);font-weight:700;font-size:12.5px;letter-spacing:.02em;border-bottom:1px solid var(--line);padding-bottom:7px;margin-bottom:10px;display:flex;justify-content:space-between;align-items:baseline}
.cx-mk{color:var(--gold2);font-size:10.5px;font-weight:600;letter-spacing:.02em}
#cxmeter{margin-top:16px}
/* meter — a LIVING capacity bar: fills on open, glowing leading edge keeps pulsing */
.cx-bar{height:13px;background:rgba(255,255,255,.04);border:1px solid var(--line);overflow:hidden;margin-top:6px;position:relative}
.cx-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),var(--gold2));position:relative;animation:cxfill 1s cubic-bezier(.2,.8,.2,1) backwards}
.cx-bar i::after{content:"";position:absolute;right:-1px;top:-2px;bottom:-2px;width:2px;background:#eafcff;animation:cxedge 2.6s ease-in-out infinite}
@keyframes cxfill{from{width:0}}
@keyframes cxedge{0%,100%{opacity:.4}50%{opacity:1}}
.cx-mlbl{display:flex;justify-content:space-between;color:var(--mut);font-size:12px}
.cx-mlbl b{color:var(--cyan-soft);font-variant-numeric:tabular-nums}
.cx-focus{display:flex;align-items:flex-start;gap:10px;border:1px solid var(--line2);padding:9px 11px;margin:10px 0 14px}
.cx-focus .cf-main{min-width:0;flex:1}.cx-focus .cf-k{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--gold2);font-weight:700}.cx-focus .cf-v{font-size:13px;color:var(--ink);margin-top:3px;overflow-wrap:anywhere}.cx-focus .cf-gap{flex:none;font-size:10.5px;color:var(--mut);padding-top:2px}
/* relevance map — a LIVING spectrum: bars sweep in, colour + glow scale with relevance (gold = held closest), the top one breathes */
.cxr-leg{display:flex;justify-content:space-between;font-size:10.5px;color:var(--faint);margin:2px 0 11px;letter-spacing:.02em}
.cxr-leg span{color:var(--gold2)}
.cxr{margin:0 0 11px}
.cxr-head{display:flex;align-items:baseline;gap:8px;font-size:11.5px}
.cxr-role{flex:0 0 30px;font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--faint)}
.cxr-txt{flex:1 1 auto;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cxr-pct{flex:0 0 auto;font-weight:800;font-variant-numeric:tabular-nums;color:color-mix(in srgb,var(--cyan),var(--gold2) calc(var(--rel)*100%))}
.cxr-track{position:relative;height:7px;background:rgba(255,255,255,.04);border:1px solid var(--line);overflow:hidden;margin-top:5px}
.cxr-track i{position:absolute;inset:0 auto 0 0;width:calc(var(--rel)*100%);background:linear-gradient(90deg,rgba(34,211,238,.5),color-mix(in srgb,var(--cyan),var(--gold2) calc(var(--rel)*100%)));transform-origin:left;animation:cxsweep .85s cubic-bezier(.2,.8,.2,1) backwards;animation-delay:calc(var(--i)*65ms)}
.cxr.top .cxr-track i{animation:cxsweep .85s cubic-bezier(.2,.8,.2,1) backwards,cxbreathe 3.4s ease-in-out 1s infinite}
@keyframes cxsweep{from{transform:scaleX(0);opacity:.25}}
@keyframes cxbreathe{0%,100%{}50%{}}
/* conversation tree — a LIVING spine: glowing diamond nodes pulse down the thread */
#cxtree{margin-top:2px}
.cxt{position:relative;padding-left:20px}
.cxt::before{content:"";position:absolute;left:5px;top:5px;bottom:7px;width:2px;background:linear-gradient(180deg,var(--cyan),rgba(34,211,238,.12))}
.cxt-turn{position:relative;padding:0 0 13px;font-size:12px}
.cxt-dot{position:absolute;left:-19px;top:2px;width:9px;height:9px;background:var(--cyan);transform:rotate(45deg);animation:cxnode 3.4s ease-in-out infinite;animation-delay:calc(var(--i)*.28s)}
.cxt-q{color:var(--cyan-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cxt-q::before{content:"YOU  ";color:var(--faint);font-size:8.5px;letter-spacing:.06em}
.cxt-a{color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.cxt-a::before{content:"ELARA  ";color:var(--gold2);opacity:.65;font-size:8.5px;letter-spacing:.06em}
@keyframes cxnode{0%,100%{opacity:.7}50%{opacity:1}}
/* minimised-drift — a breathing proof seal */
#cxbadge{margin-top:20px;border:1px solid var(--cyan);background:rgba(34,211,238,.05);padding:14px 16px;animation:cxseal 3.4s ease-in-out infinite}
@keyframes cxseal{0%,100%{}50%{}}
#cxbadge .bt{color:var(--gold2);font-weight:800;font-size:11.5px;letter-spacing:.04em}
#cxbadge .bm{color:var(--ink);font-size:12.5px;margin-top:5px;line-height:1.5}
#cxbadge .bn{color:var(--cyan-soft);font-variant-numeric:tabular-nums;font-weight:800}
@media(prefers-reduced-motion:reduce){.cx-bar i,.cx-bar i::after,.cxr-track i,.cxr.top .cxr-track i,.cxt-dot,#cxbadge{animation:none!important}}
.cx-foot{color:var(--mut);font-size:12px;margin-top:20px;font-style:italic;line-height:1.5}
.cx-card-sig{margin-top:18px;text-align:center;font:700 11px/1 ui-monospace,Consolas,monospace;letter-spacing:.3em;color:var(--faint)}
.cx-card-sig .cx-lk{color:var(--gold2);}
.ctxsee{color:var(--gold2);font-size:11.5px;cursor:pointer;margin-left:10px;font-weight:600;white-space:nowrap}
.ctxsee:hover{text-decoration:underline}
#ctxm[role=button]{cursor:pointer}
#ctxm[role=button]:hover{color:var(--cyan-soft)}
@media(max-width:760px){#ctxpanel.open{position:fixed;inset:0;z-index:72;flex-basis:100%;width:100%}.ctxsee{display:none}}
#scrim{display:none}
/* ---- Settings modal (chat preferences: personality, memory, space) ---- */
#settings{display:none;position:fixed;inset:0;z-index:110;background:rgba(2,8,16,.66);align-items:center;justify-content:center;padding:18px}
#settings.open{display:flex}
.setcard{width:680px;max-width:96vw;max-height:88svh;overflow:auto;background:var(--panel);border:1px solid var(--line2);}
.sethead{display:flex;align-items:center;gap:10px;padding:15px 20px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);z-index:1}
.sethead .ttl{font-weight:800;font-size:16px}.sethead .ic{width:18px;height:18px;color:var(--gold2)}.sethead .sp{margin-left:auto}
.setbody{padding:6px 20px 20px}
.setsec{padding:15px 0;border-bottom:1px solid var(--line)}.setsec:last-child{border-bottom:0}
.setsec h4{margin:0 0 3px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--gold2)}
.setsec .hh{margin:0 0 12px;color:var(--faint);font-size:12.5px}
.memmeter{display:flex;align-items:center;gap:10px;margin:4px 0 12px}.membar{flex:1 1 auto;height:8px;background:var(--panel2);border:1px solid var(--line2);overflow:hidden}.membar>i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--cyan),var(--gold2));transition:width .25s}.memuse{font:600 11px/1 Consolas,ui-monospace,monospace;color:var(--faint);white-space:nowrap}.memupg{color:var(--gold2)}
.memlist{max-height:184px;overflow:auto;margin-bottom:10px}.memitem{display:flex;align-items:flex-start;gap:8px;padding:7px 0;border-bottom:1px solid var(--line)}.memitem:last-child{border-bottom:0}.memitem .mt{flex:1 1 auto;font-size:13px;color:var(--ink);line-height:1.4}.memitem .mx{flex:0 0 auto;cursor:pointer;color:var(--faint);font-size:16px;line-height:1;background:none;border:0;padding:0 4px}.memitem .mx:hover{color:#e3576b}
.memempty{color:var(--faint);font-size:12.5px;padding:6px 0;line-height:1.5}.memadd{display:flex;gap:8px}.memadd .setin{flex:1 1 auto}.memclear{background:none;border:1px solid var(--line2);color:var(--faint);font-size:12px;padding:6px 11px;cursor:pointer}.memclear:hover{border-color:#e3576b;color:#e3576b}
.setrow{display:flex;align-items:flex-start;gap:14px;margin:11px 0}.setrow label{flex:1 1 auto;font-size:14px;color:var(--ink)}
.setrow label .desc{color:var(--faint);font-size:12px;font-weight:400;display:block;margin-top:2px}
.setbody label .desc{display:block;color:var(--faint);font-size:12px;font-weight:400;margin-top:1px}
.setin,.setsel,.setta{background:var(--panel2);border:1px solid var(--line2);color:var(--ink);font:inherit;font-size:14px;padding:10px 12px;outline:none;line-height:1.45}
.setin:focus,.setsel:focus,.setta:focus{border-color:var(--gold)}
.setin{width:230px;flex:0 0 auto}.setsel{width:210px;flex:0 0 auto;cursor:pointer}
.setta{width:100%;min-height:220px;resize:vertical;margin-top:7px;font-size:14.5px}
.setta.ag-mission{min-height:280px;font-family:ui-monospace,Consolas,monospace;font-size:13.5px;line-height:1.55}
#p_custom{min-height:180px}
#p_about{min-height:180px}
.setbtn{background:var(--panel2);border:1px solid var(--line2);color:var(--ink);font:600 13px ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;padding:7px 12px;border-radius:0;cursor:pointer;white-space:nowrap}.setbtn:hover{border-color:var(--gold);color:var(--gold2)}
.setsave{background:linear-gradient(180deg,var(--gold2),var(--gold-deep));color:#1a1305;font-weight:800;border:0;padding:10px 20px;cursor:pointer}.setsave:hover{filter:brightness(1.07)}
.setsaved{color:var(--good);font-size:12.5px;margin-right:auto;align-self:center;opacity:0;transition:opacity .2s}.setsaved.show{opacity:1}
/* SIDEBAR -> DRAWER at <=1024px so a 272px fixed sidebar never squashes the main area (founder: "squashed,
   does not change size well" at ~850px). The full mobile restructure (stacked chips etc.) stays at <=760px. */
@media(max-width:1024px){
 #side{position:fixed;top:var(--chat-bar-h,calc(var(--sp-tap) + var(--sp1) + var(--sp1) + var(--bw-hair)));left:0;z-index:60;height:calc(100dvh - var(--chat-bar-h,calc(var(--sp-tap) + var(--sp1) + var(--sp1) + var(--bw-hair))));transform:translateX(-100%);transition:transform .2s}
 #side.open{transform:none}#menuBtn{display:inline-flex}#collapseBtn{display:none}#drawerClose{display:inline-flex;width:var(--sp-tap);height:var(--sp-tap);min-width:var(--sp-tap);min-height:var(--sp-tap)}
 #sideHandle{display:flex;align-items:center;justify-content:center;position:fixed;left:0;top:46%;transform:translateY(-50%);width:24px;height:66px;padding:0;border:0;border-right:1px solid rgba(34,211,238,.6);cursor:pointer;z-index:54;background:linear-gradient(180deg,rgba(34,211,238,.30),rgba(224,184,90,.24));color:#7ee8f7;font:700 17px/1 ui-monospace,monospace;animation:sideHandlePulse 2.6s ease-in-out infinite}
 #sideHandle:active{background:linear-gradient(180deg,rgba(34,211,238,.5),rgba(224,184,90,.42))}
 #side.open ~ #sideHandle{display:none}
 #scrim.show{display:block;position:fixed;top:var(--chat-bar-h,calc(var(--sp-tap) + var(--sp1) + var(--sp1) + var(--bw-hair)));left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:55}
}
@media(max-width:760px){
 #side{position:fixed;top:var(--chat-bar-h,calc(var(--sp-tap) + var(--sp1) + var(--sp1) + var(--bw-hair)));left:0;z-index:60;height:calc(100dvh - var(--chat-bar-h,calc(var(--sp-tap) + var(--sp1) + var(--sp1) + var(--bw-hair))));transform:translateX(-100%);transition:transform .2s}/* drawer sits under the fixed strip */
 #side.open{transform:none}#menuBtn{display:inline-flex}
 #sideHandle{display:flex;align-items:center;justify-content:center;position:fixed;left:0;top:46%;transform:translateY(-50%);width:24px;height:66px;padding:0;border:0;border-right:1px solid rgba(34,211,238,.6);cursor:pointer;z-index:54;background:linear-gradient(180deg,rgba(34,211,238,.30),rgba(224,184,90,.24));color:#7ee8f7;font:700 17px/1 ui-monospace,monospace;animation:sideHandlePulse 2.6s ease-in-out infinite}
 #sideHandle:active{background:linear-gradient(180deg,rgba(34,211,238,.5),rgba(224,184,90,.42))}
 #side.open ~ #sideHandle{display:none}
 #scrim.show{display:block;position:fixed;top:var(--chat-bar-h,calc(var(--sp-tap) + var(--sp1) + var(--sp1) + var(--bw-hair)));left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:55}
 #canvas.open{position:fixed;inset:0;z-index:70;flex-basis:100%;width:100%}
 .research span.lbl{display:none}.research{padding:0 11px}
 .col,.composer .col,.empty .ebody{padding-left:14px;padding-right:14px}.pill{width:100%;box-sizing:border-box}/* one shared inset on mobile -> chips + composer share identical edges */
 .subpromo{display:none}/* de-clutter the mobile footer — keep just the context meter + Account (founder: cleaner, less busy) */
 .empty .chips{flex-direction:column;gap:10px}.empty .chip{width:100%;box-sizing:border-box;text-align:center;justify-content:center}/* full-width stacked suggestion chips align to the composer; icon+label centred (artifacts/ui-audit) */
 .empty .cvhero{min-height:calc(var(--sp-tap)*3);max-height:min(42svh,calc(var(--sp-tap)*8))}.empty .cvlight .chips{gap:var(--sp1)}.empty .cvlight .chip{width:100%;box-sizing:border-box;text-align:left;justify-content:flex-start}
 #wrap.empty .composer{padding-bottom:calc(var(--sp1) + env(safe-area-inset-bottom))}
 .empty .brandband{margin-bottom:6px}.empty .logowrap{width:78px;height:78px;margin-bottom:0}.empty .logowrap .logo{width:66px;height:66px}.empty h1{font-size:clamp(26px,7.5vw,32px)}
 .empty .belief,.empty .vfeat,.empty .trust,.empty .emptyvid{display:none}/* mobile: keep the shield + heading + ONE value line (feltsub) + chips, vertically centred (no void) */
 .empty .feltsub{font-size:14px;margin-top:8px;max-width:340px}
 #drawerClose{display:inline-flex}
 .pill .iconbtn{background:transparent}.pill .iconbtn:hover{background:rgba(224,184,90,.12)}/* ghost attach button -> one clean field (SOTA) */
 /* mobile: shrink composer controls + tighten gaps so the input keeps real width (not clogged) */
 .pill{gap:var(--sp-half);padding:var(--sp1)}
 .pill .iconbtn,.pill .micbtn,.pill #send{width:var(--sp5);height:var(--sp5);min-height:var(--sp5)}
 .pill #inp{height:auto;min-height:var(--sp5)}
 .pill .iconbtn .ic,.pill .micbtn .ic{width:17px;height:17px}
 .setta.ag-mission{min-height:200px}
 #p_custom,#p_about{min-height:140px}
}
@media (max-width:380px){
}
/* ---- LIGHT THEME (founder: white canvas; the shield logo renders DEEP NAVY so it shows; cyan+gold
   halo retained; chrome stays two-tone dark like the landing; corners stay sharp). ---- */
body.light{--navy:#f4f8fb;--navy2:#eaf1f6;--panel:#ffffff;--panel2:#f3f8fc;--line:#d6e2ec;--line2:#c2d3df;--ink:#0c1727;--mut:#54677a;--faint:#6a7d8f;color:var(--ink)}
body.light .empty h1{color:#0c1727}
/* the 2-tone hero is ALWAYS a dark navy scrim — its text MUST stay light in BOTH themes (light theme was flipping .cvh1 to ink → invisible over the dark scrim, founder) */
body.light .empty .cvh1,body.light .empty .cvtxt{color:var(--paper)}
body.light .empty .cvh1 .cvname{color:var(--gold2)}
body.light .empty .cvsub{color:var(--paper)}body.light .empty .cvsub b{color:var(--cyan-soft)}
body.light .empty .cveye{color:var(--gold2)}
body.light .empty .cvquote .cvqa{color:var(--gold2)}
/* shield stays on the deep-navy band in BOTH themes -> keep the identical cyan elara-halo (no dark-invert) */
body.light .bubble{color:#16222e}body.light .msg.user .bubble{color:#1a2a38}
body.light #inp,body.light select,body.light #keyin{color:#0c1727}
body.light .chip{background:#fff;color:#1f3046;font-weight:600;border-color:#d6e2ec;}
body.light .chip .chip-ic{color:#0e8aa8}   /* deepened cyan for the flat chip icon on light backgrounds (artifacts/ui-audit) */
body.light .chip:hover{color:#9a6f1c;border-color:#c79a3e;}
body.light .empty .wm span{background:linear-gradient(90deg,#0e7490,#9a6f1c);-webkit-background-clip:text;background-clip:text;color:transparent}
body.light .empty .orgline .org1{color:#9a6f1c}body.light .empty .orgline .org2{color:#52677a}
body.light .empty .quote .qa{color:#9a6f1c}body.light .empty .quote::before{color:#c79a3e}
/* light sidebar = /app look: WHITE body between the deep-navy header + footer bookends, gold accents */
body.light #side{background:linear-gradient(180deg,#ffffff,#f4f9fc);border-right-color:#d6e2ec;}
body.light .side-eyebrow{color:#9a6f1c}
body.light #hist .h{color:#54677a}body.light #hist .h:hover{background:rgba(199,154,62,.1);color:#0c1727}body.light #hist .h.on{border-left-color:var(--chrome-gold);background:rgba(199,154,62,.14);color:#0c1727;}

/* light overrides for the elevated controls (search · groups · row actions · rename · account pill) */
body.light #histSearch{background:#f3f8fc;border-color:#c2d3df;color:#0c1727}body.light #histSearch::placeholder{color:#6a7d8f}
body.light .hgroup,body.light .hempty{color:#556a7c}
body.light #hist .h .hbtn:hover{color:#9a6f1c;background:rgba(199,154,62,.16)}
body.light .hren{background:#fff;border-color:#c79a3e;color:#0c1727}
body.light .side-acct{border-top-color:#e0e9f1}
body.light .acctpill:hover{background:rgba(199,154,62,.1);border-color:rgba(199,154,62,.26)}
body.light .acctpill .apinfo b{color:#0c1727}body.light .acctpill .apinfo span,body.light .acctpill>.ic{color:#556a7c}
/* light overrides — account menu, rail search, edit box, inline code, markdown surfaces (all themes render accurately) */
body.light #acctmenu{background:#fff;border-color:#c2d3df;}
body.light #acctmenu button{color:#16222e}body.light #acctmenu button:hover{background:rgba(199,154,62,.1)}
body.light #acctmenu .am-sep{background:#e0e9f1}body.light #acctmenu .am-plan{color:#6a7d8f}
body.light #railsearch,body.light #railrecents{background:#f3f8fc;border-color:#c2d3df;color:#9a6f1c}body.light #railsearch:hover,body.light #railrecents:hover{border-color:#c79a3e}
body.light #railFlyout{background:#fff;border-color:#c2d3df;}
body.light .bubble code{color:#7a5410}
body.light .bubble del{color:#6a7d8f}
body.light .bubble img{border-color:#d6e2ec}
body.light .msg .editta{background:#fff;border-color:#c79a3e;color:#0c1727}
body.light .msg .editrow button{background:#fff;border-color:#c2d3df;color:#16222e}
body.light .msg .editrow button.prim{background:linear-gradient(180deg,var(--gold2),var(--gold-deep));color:#1a1305;border-color:#c79a3e}
body.light .think{border-color:#cfe0ea}
body.light .think>summary,body.light .think>summary .tk-ic{color:#0e7490}
body.light .think .t{color:#3a4f63}
body.light .think.streaming>summary .tk-sec{color:#0e7490}
body.light .think:not(.streaming)>summary .tk-sec{color:#8a6418;text-shadow:none}
body.light .think:not(.streaming)::before{background:linear-gradient(180deg,rgba(14,116,144,.5),rgba(138,100,24,.5))}
body.light .bubble th{color:#7a5410}
/* brand band stays TWO-TONE on its navy backing even in light theme (consistent with the landing hero) */
body.light .empty .brandband .wm span{background:linear-gradient(90deg,#7ee8f7,#e0b85a);-webkit-background-clip:text;background-clip:text;color:transparent}
body.light .empty .brandband .orgline .org1{color:var(--gold2)}body.light .empty .brandband .orgline .org2{color:#9fb6c6}
/* the top #bar is LIGHT in light theme (see body.light #bar) — the account email + Sign-out must be
   DARK ink, not the old near-white (which was invisible / washed-out on the white bar) */
body.light #acctstate .who b{color:#0c1727}body.light #acctstate .who .out{color:#9a6f1c}
/* SHARP CORNERS — match the www.elara-cortex.com brand (founder: keep sharp, don't break it). The brain
   glyph + shield keep their own vector shapes; every box/button/pill/avatar is square-cornered. */
.svgwrap{margin:10px 0;background:#060d18;border:1px solid var(--line);padding:10px;max-width:100%;overflow:auto}.svgwrap svg{max-width:100%;height:auto}
.svgwrap .svgfig{display:block;text-align:center}
details.svgsrc{margin-top:8px}details.svgsrc>summary{cursor:pointer;color:var(--faint);font-size:11.5px;letter-spacing:.04em;user-select:none;list-style:none}details.svgsrc>summary:hover{color:var(--cyan)}details.svgsrc pre.code{margin-top:6px}
.srcwrap{margin:12px 0 2px}
.srccards{border-top:1px solid var(--line);padding-top:10px}
.srchead{font:700 10.5px/1.4 Consolas,ui-monospace,monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);margin-bottom:8px}
.srcgrid{display:flex;flex-wrap:wrap;gap:8px}
.srccard{display:flex;flex-direction:column;width:calc(50% - 4px);min-width:210px;box-sizing:border-box;border:1px solid var(--line);background:#060d18;text-decoration:none;overflow:hidden;transition:border-color .15s ease,box-shadow .15s ease}
.srccard:hover{border-color:var(--cyan);}
.srccard .sthumb{width:100%;height:96px;object-fit:cover;border-bottom:1px solid var(--line);display:block}
.scbody{padding:8px 10px;min-width:0}
.schead{display:flex;align-items:center;gap:6px;margin-bottom:4px}
.snum{font:700 10px/1 Consolas,monospace;color:var(--gold2);min-width:13px}
.sfav{width:14px;height:14px;flex:0 0 auto}
.sdom{font-size:11px;color:var(--cyan);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.stier{font:700 8.5px/1.4 Consolas,monospace;letter-spacing:.05em;color:var(--gold2);border:1px solid var(--gold2);padding:0 4px;text-transform:uppercase;margin-left:auto;flex:0 0 auto}
.stitle{font-size:13px;color:var(--ink);line-height:1.3;margin-bottom:2px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.ssnip{font-size:11px;color:var(--mut);line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
@media(max-width:640px){.srccard{width:100%}}
*{border-radius:0!important}   /* V3: THE single radius authority — brand sharp-corner P0. Component rules below/above are authored radius-free; this backstops any stray value at zero. */
/* .LEKOLA CORTEX engine attribution — gold glow on all surfaces */
.lk-engine{color:var(--gold2);font-weight:700}
body.light .lk-engine{color:#8a6418;}
/* lite mode — user-toggled low-motion/low-power (parallels prefers-reduced-motion) */
body.lite *,body.lite *::before,body.lite *::after{animation:none!important;transition-duration:.01ms!important}
/* ── polish batch 1 — 75-edge close · receipt artifacts/chat-parity/polish_batch1.json ───────────
   Additive UI/UX best-practice pass: brand stop-button, WCAG contrast, focus rings, reduced-motion,
   mobile tap-targets, iOS no-zoom. Scoped so nothing above is overridden except the named fixes. */
/* 1 · stop button — was off-brand rose; brand navy fill + cyan glyph (sharp corners kept) */
#send.gen{background:linear-gradient(180deg,#0e1b2e,#0a1422)!important;border-color:var(--cyan)!important}
#send.gen svg,#send.gen .ic{color:var(--cyan)!important}
/* 2 · composer placeholder — lift contrast to WCAG-AA on white (#5f6f7e ≥ 4.5:1) */
#inp::placeholder{color:#5f6f7e;opacity:1}
body.light #inp::placeholder{color:#5f6f7e}
/* 3 · global keyboard focus ring (WCAG 2.4.7) — visible, brand cyan, never on mouse click */
:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
#inp:focus-visible,.pill #inp:focus-visible{outline:none;outline-offset:0}
/* 4 · light-theme WCAG-AA contrast repairs for the surfaces flagged in the audit */
body.light .gp-lbl,body.light .goal-lbl{color:#3b4a5a}
body.light .gbadge{color:#0e7490;border-color:#0e7490}
body.light .pp-conn{color:#3b4a5a}
body.light .authleg a,body.light .auth-leg a{color:#0e7490}
/* ── light-mode 100% visible text · receipt reports/chat-parity/light_contrast.json (WCAG-AA) ──
   Founder 2026-07-04 "make sure light mode has 100% visible text." The deterministic auditor
   tools/light_mode_contrast_audit.py drove every content-text element to >=4.5:1 across chromium /
   webkit / firefox. All rules are body.light-scoped, so dark mode is structurally untouched. */
/* A · Canvas + Context-Intelligence overlays were hardcoded dark navy (their buttons were already
   theme-aware) — follow the light theme so their ink titles + sub-text read on light, not dark-on-dark. */
body.light #canvas,body.light #ctxpanel{background:linear-gradient(180deg,#ffffff,#f4f9fc);border-left-color:#d6e2ec}
/* B · muted secondary-text token: old #6a7d8f fails AA on white — one darken fixes every var(--faint) label
   (.desc / .hh / .pp-sub / .subpromo / #ctxm / authleg text) at once */
body.light{--faint:#556a7c}
/* B2 · uppercase section labels (--label #9fb6c6) also fail AA on white — darken once so every
   sidebar label (Goals / Chats / folder group headers / flyout headers) is legible in light mode */
body.light{--label:#54677a}
/* C · gold accents on LIGHT surfaces -> AA-safe deep gold (#8a6418); the sidebar + top-bar + side-card are all light in light theme */
body.light .cvbtn,body.light #cvtogglelbl,body.light .ctxsee,body.light #settings h4,body.light .setsec h4,body.light .subbar a,body.light .authalt a,body.light .x2{color:#8a6418}
/* the One-engine card keeps its DARK navy identity in BOTH themes (founder: same colour regardless of
   mode) — cyan eyebrow + bright gold .LEKOLA CORTEX read on the navy card in light mode too */
body.light .side-card .lk-engine,body.light .side-card b{color:var(--gold2)}
/* D · cyan links/stats on light -> AA-safe deep cyan */
body.light .hempty a{color:#0e7490}
/* E · Context-Intelligence panel accents on the now-light panel + the cx badges / live meter */
body.light .cx-why,body.light .cx-solved p b,body.light #ctxpanel b,body.light #ctxm b{color:#0e7490}
body.light .cx-mk,body.light .cx-solved-h,body.light #cxbadge .bt{color:#8a6418}
/* F · Canvas preview reads as a light document; the code BLOCK stays a dark island in both themes */
body.light #cvprev .cvdoc{color:#16222e}
body.light #cvprev .cvdoc h1,body.light #cvprev .cvdoc h2,body.light #cvprev .cvdoc h3{color:#0c1727}
body.light #cvprev .cvdoc h4{color:#0e7490}body.light #cvprev .cvdoc a{color:#8a6418}
body.light .bubble pre .pbar,body.light #cvprev pre .pbar{color:#9fb2c4}
body.light .bubble pre code,body.light .bubble pre.code code,body.light #cvprev pre code{color:#e6edf3}
/* G · trust line + badges that fight inline styles / high-specificity menu rules */
body.light .cvtrust b{color:#8a6418}body.light .cvtrust a{color:#0e7490}
body.light .synchint a{color:#0e7490!important}body.light .x2{color:#8a6418!important}
/* 5 · honour the OS reduced-motion setting (accessibility) — freeze pulses/spins/strobes */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
}
/* 6 · touch devices — 16px input kills iOS focus-zoom; ≥40px tap targets (Apple HIG / WCAG 2.5.5) */
@media (pointer:coarse){
  #inp{font-size:16px}
  .acts button,.pp-btn,.pp-x,.railbtn,.gp-add,.goal .gbtn,.toolchip,#attachBtn,#toolsBtn,#mic,#send{min-height:40px;min-width:40px}
}

/* IV&V ATTESTATION (2026-08-31). Rendered OUTSIDE the markdown body, which is the whole point:
   the same verdict used to arrive as an italic sentence inside the answer, indistinguishable from
   the model's own prose and equally writable BY the model. As its own element, driven by the
   elara_verify frame, it is an attestation the answer cannot forge. Surface parity with the
   threefold coding API, which has shipped an in-band verdict frame as a detectable moat since
   2026-07-11. Declared tokens only - no literal size, weight or tracking. */
.attest{display:flex;align-items:center;gap:var(--sp1);margin:var(--sp2) 0 0;
  font-size:var(--fs-2xs);font-weight:var(--w-medium);letter-spacing:var(--tr-wide);
  text-transform:uppercase;color:var(--faint);border-radius:0}
.attest .ac{color:var(--gold)}
.attest.flagged .ac{color:var(--gold2,var(--gold))}
.attest b{font-weight:var(--w-medium);color:var(--label)}
/* Evidence: what each source ACTUALLY says. Declared tokens only (declared_scale_no_regress.md) -
   no literal size, weight, tracking or spacing anywhere in this block.
   HIERARCHY: the QUOTE is the hero - it is the thing the source really contains. The claim above it
   is a muted label saying which of Elara's sentences it answers for. A first pass rendered all three
   at the same size and colour, which flattened the point of the block entirely. */
.evid{margin:var(--sp2) 0 0;border-left:1px solid var(--line);padding-left:var(--sp2);border-radius:0}
.evhead{cursor:pointer;font-size:var(--fs-2xs);font-weight:var(--w-medium);letter-spacing:var(--tr-wide);
  text-transform:uppercase;color:var(--faint);list-style:none}
.evhead::-webkit-details-marker{display:none}
.evhead:hover{color:var(--label)}
.evlist{list-style:none;margin:var(--sp2) 0 0;padding:0}
.evrow{margin:0 0 var(--sp3)}
.evrow:last-child{margin-bottom:0}
.evclaim{font-size:var(--fs-2xs);color:var(--faint);line-height:var(--lh-snug)}
.evquote{margin:var(--sp-half) 0 0;padding:var(--sp-half) 0 var(--sp-half) var(--sp1);
  border-left:2px solid var(--gold);font-size:var(--fs-xs);line-height:var(--lh-body);
  color:var(--ink);border-radius:0}
.evsrc{display:inline-block;margin:var(--sp-half) 0 0;font-size:var(--fs-2xs);color:var(--faint);
  letter-spacing:var(--tr-snug)}
.evsrc:hover{color:var(--cyan)}
.evnone{margin:var(--sp-half) 0 0;padding:var(--sp-half) 0 var(--sp-half) var(--sp1);
  border-left:2px solid var(--line);font-size:var(--fs-2xs);font-weight:var(--w-medium);
  letter-spacing:var(--tr-wide);text-transform:uppercase;color:var(--label)}

[data-cm="telegram"], .runpy, button[onclick*="openCheckout"] {display:none!important}

#agents{display:none;position:fixed;inset:0;z-index:80;background:rgba(2,8,16,.66);align-items:center;justify-content:center;padding:18px}
#agents.open{display:flex}
.agv-list{display:flex;flex-direction:column;gap:8px;margin:8px 0}
.agv-row{display:flex;align-items:center;gap:10px;border:1px solid var(--line2);background:var(--panel2);padding:10px 12px}
.agv-info{display:flex;flex-direction:column;gap:2px;min-width:0}
.agv-nm{font-weight:600;color:var(--ink)}
.agv-active{color:var(--cyan);font-weight:500;font-size:12px}
.agv-ds{color:var(--faint);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.agv-row .sp{flex:1}
.agv-row button{background:none;border:1px solid var(--line2);color:var(--ink);font:inherit;font-size:12px;padding:4px 11px;cursor:pointer;border-radius:0}
.agv-row button:hover{border-color:var(--cyan)}
.agv-row button.prim{border-color:var(--cyan);color:var(--cyan)}
.agv-row button.danger{color:#e0574f;border-color:rgba(224,87,79,.45)}
.agv-empty{color:var(--faint);font-size:13px;padding:12px 0;line-height:1.5}
.agv-tools{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.agv-tools label{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line2);padding:6px 10px;font-size:12.5px;color:var(--ink);cursor:pointer}
.agv-tools input{accent-color:var(--cyan)}
.agv-actions{display:flex;align-items:center;gap:10px;margin-top:16px}
.agv-err{color:#e0574f;font-size:12.5px}
.agchip{display:inline-flex;align-items:center;gap:7px;margin:0 0 6px;padding:4px 10px;border:1px solid var(--cyan);background:var(--chip);color:var(--ink);font-size:12.5px;max-width:min(240px,90vw)}
.agchip .ag-mission-ok{color:#22d3ee;font-size:11px;margin-left:2px}
.agchip .ag-mission-fail{color:#e0574f;font-size:11px;margin-left:2px}
.agchip[hidden]{display:none}
.agchip .agdot{width:7px;height:7px;background:var(--cyan);flex:0 0 auto}
.agchip button{background:none;border:0;color:var(--faint);font:inherit;cursor:pointer;padding:0 2px}
.agchip button:hover{color:var(--ink)}
/* /AI/create atelier. This route is a making desk, not a reasoning desk.
   Navy/cyan stays on /AI/chat and the evidence pages. Here the house gold sits on warm paper
   because the work product is a picture you look at in light — Johannesburg gold as print-studio
   ink, not a fashion cream swap. No video hero, no cyan halo, no glow orb, radius stays 0.
   Georgia is used on the one display line only: a picture studio captions like a folio. */
html.create-studio{background:#f3eee4}
html.create-studio body,body.create-studio{
  --paper:#f3eee4;--sheet:#fffaf2;--rule:#e4d8c4;--rule2:#d4c6b0;
  --navy:#f3eee4;--navy2:#ebe3d4;--panel:#fffaf2;--panel2:#f7f1e6;
  --line:#e4d8c4;--line2:#d4c6b0;--ink:#1c1610;--mut:#5c5144;--faint:var(--mut);--chip:#efe6d6;
  --label:#6a5c4a;
  --gold:#c79a3e;--gold2:#e0b85a;--goldink:#8a6418;
  background:#f3eee4;background-image:none;color:var(--ink);
}
html.create-studio body.light,body.create-studio.light{
  --navy:#f3eee4;--navy2:#ebe3d4;--panel:#fffaf2;--panel2:#f7f1e6;
  --line:#e4d8c4;--line2:#d4c6b0;--ink:#1c1610;--mut:#5c5144;--faint:var(--mut);--chip:#efe6d6;
  --label:#6a5c4a;
}
html.create-studio body:not(.light),body.create-studio:not(.light){
  --paper:#1c1812;--sheet:#241f18;--rule:#3a3228;--rule2:#4a4034;
  --navy:#1c1812;--navy2:#241f18;--panel:#241f18;--panel2:#2a241c;
  --line:#3a3228;--line2:#4a4034;--ink:#f3eee4;--mut:#c4b49a;--faint:#9a8c78;--chip:#2a241c;
  --label:var(--mut);--goldink:var(--gold2);
  background:#1c1812;color:var(--ink);
}
html.create-studio :focus-visible,
html.create-studio button:focus-visible,
html.create-studio a:focus-visible,
html.create-studio input:focus-visible,
html.create-studio textarea:focus-visible,
html.create-studio [tabindex]:focus-visible{outline-color:var(--gold2)}
html.create-studio body #side,html.create-studio body.light #side,body.create-studio #side{
  background:#f7f1e6;border-right-color:#e4d8c4;
}
html.create-studio body:not(.light) #side,body.create-studio:not(.light) #side{
  background:#241f18;border-right-color:#3a3228;
}
html.create-studio body #side .top,html.create-studio body.light #side .top,
body.create-studio #side .top,body.create-studio.light #side .top{background:#f7f1e6;border-bottom-color:#e4d8c4}
html.create-studio body:not(.light) #side .top,body.create-studio:not(.light) #side .top{background:#241f18;border-bottom-color:#3a3228}
/* create-studio keeps a warm tool-strip band; #bar is the chat chrome again (not inside site header). */
html.create-studio body #bar,html.create-studio body.light #bar,body.create-studio #bar,body.create-studio.light #bar{background:#f3eee4;border-bottom-color:#e4d8c4}
html.create-studio body:not(.light) #bar,body.create-studio:not(.light) #bar{background:#1c1812;border-bottom-color:#3a3228}
html.create-studio body #wrap.empty .toolchips,body.create-studio #wrap.empty .toolchips{display:none}
html.create-studio body #wrap.empty .onbcard,body.create-studio #wrap.empty .onbcard{display:none}
html.create-studio body .side-card,body.create-studio .side-card{
  background:#fffaf2;border:1px solid #e4d8c4;color:#5c5144;
}
html.create-studio body .side-card .ce,body.create-studio .side-card .ce{color:#8a6418}
html.create-studio body .side-card b,body.create-studio .side-card b{color:#8a6418}
html.create-studio body:not(.light) .side-card,body.create-studio:not(.light) .side-card{
  background:#241f18;border-color:#3a3228;color:#c4b49a;
}
html.create-studio body #hist .h,body.create-studio #hist .h{color:#5c5144}
html.create-studio body.light #hist .h,body.create-studio.light #hist .h{color:#5c5144}
html.create-studio body:not(.light) #hist .h,body.create-studio:not(.light) #hist .h{color:#c4b49a}
html.create-studio body #histSearch,body.create-studio #histSearch{background:#fffaf2;border-color:#d4c6b0;color:#1c1610}
html.create-studio body:not(.light) #histSearch,body.create-studio:not(.light) #histSearch{background:#2a241c;border-color:#4a4034;color:#f3eee4}
html.create-studio body .side-foot,body.create-studio .side-foot{background:#f3eee4;border-top-color:#e4d8c4}
html.create-studio body:not(.light) .side-foot,body.create-studio:not(.light) .side-foot{background:#1c1812;border-top-color:#3a3228}
html.create-studio body .side-foot .ec-lkf,html.create-studio body .side-foot .ec-lkf.r,
body.create-studio .side-foot .ec-lkf,body.create-studio .side-foot .ec-lkf.r{background:#c79a3e;filter:none}
html.create-studio body .side-foot .ec-lkn,body.create-studio .side-foot .ec-lkn{text-shadow:none;animation:none}
html.create-studio body .side-foot .ec-lksub,body.create-studio .side-foot .ec-lksub{color:#8a6418;text-shadow:none;animation:none}
body.create-studio #wrap.empty .empty{box-shadow:none}
body.create-studio .empty.atelier{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:stretch;text-align:left;background:transparent;overflow:auto}
body.create-studio .atdesk{max-width:680px;width:100%;margin:0 auto;padding:28px clamp(18px,4vw,36px) 12px;text-align:left}
body.create-studio .at-h1{margin:0;font:var(--w-regular) var(--fs-folio)/var(--lh-tight) var(--ff-folio);letter-spacing:var(--tr-snug);color:var(--ink)}/* declared family AND declared fluid step: the folio voice keeps its greater presence instead of being flattened into the chat hero's step */
body.create-studio .at-sub{margin:var(--sp1half) 0 0;max-width:42ch;font-size:var(--fs-lg);line-height:var(--lh-snug);color:var(--mut)}
body.create-studio .at-dock{margin-top:8px}
body.create-studio #wrap.cc .atdesk .composer{max-width:none;margin:22px 0 8px;padding:0}
body.create-studio #wrap.cc .atdesk .composer .col{padding:0}
body.create-studio .pill{background:var(--sheet);border-color:var(--rule2);box-shadow:none}
body.create-studio .pill:focus-within,body.create-studio.light .pill:focus-within{
  border-color:var(--gold);
}
body.create-studio .at-kinds{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;margin:18px 0 0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
body.create-studio .at-kind{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:12px 10px;border:0;border-right:1px solid var(--rule);background:none;color:var(--ink);cursor:pointer;text-align:left;font:inherit}
body.create-studio .at-kind:last-child{border-right:0}
body.create-studio .at-kind b{font-size:var(--fs-md);font-weight:var(--w-bold)}
body.create-studio .at-kind span{font-size:var(--fs-xs);color:var(--mut)}
body.create-studio .at-kind:hover{background:rgba(224,184,90,.10)}
body.create-studio .at-kind:focus-visible{background:rgba(224,184,90,.14)}
@media(prefers-reduced-motion:reduce){
  body.create-studio .empty .chip:hover,body.create-studio .atdesk .chip:hover{transform:none}
}
body.create-studio .at-lead{margin:var(--sp2) 0 var(--sp1);font-size:var(--fs-sm);color:var(--mut)}
body.create-studio .empty .chips,body.create-studio .atdesk .chips{display:flex;flex-direction:column;align-items:stretch;gap:0;margin:0;justify-content:flex-start}
body.create-studio .empty .chip,body.create-studio .atdesk .chip{
  justify-content:flex-start;background:transparent;border:0;border-top:1px solid var(--rule);
  box-shadow:none;padding:11px 0;color:var(--ink);font-weight:500;transform:none;
}
body.create-studio .empty .chip:first-child,body.create-studio .atdesk .chip:first-child{border-top:0}
body.create-studio .empty .chip:hover,body.create-studio .atdesk .chip:hover{
  color:var(--goldink);border-color:var(--rule);transform:none;box-shadow:none;
}
body.create-studio .chip .chip-ic,body.create-studio .empty .chip .chip-ic{color:var(--goldink)}
body.create-studio .chip:hover .chip-ic{color:var(--goldink);transform:none}
body.create-studio .at-trust{margin:var(--sp2) 0 0;font-size:var(--fs-xs);color:var(--mut);line-height:var(--lh-body)}
body.create-studio .at-trust a{color:var(--goldink);border-bottom:1px solid rgba(138,100,24,.35)}
body.create-studio .createmenu{
  background:var(--sheet);border:1px solid var(--rule2);
  
}
body.create-studio .createmenu .cmhead{color:var(--goldink);font-family:inherit;letter-spacing:.04em}
body.create-studio .createmenu button{color:var(--ink)}
body.create-studio .createmenu button:hover{background:rgba(224,184,90,.12)}
body.create-studio .createmenu button span{color:var(--mut)}
body.create-studio .toolsmenu,body.create-studio .attachmenu{background:var(--sheet);border-color:var(--rule2)}
body.create-studio .ci-show{background:rgba(224,184,90,.08);border-color:var(--gold);animation:none}
body.create-studio.light .ci-show{background:rgba(224,184,90,.08);border-color:var(--gold)}
@media(max-width:720px){
  body.create-studio .at-kinds{grid-template-columns:1fr 1fr}
  body.create-studio .at-kind:nth-child(2){border-right:0}
  body.create-studio .at-kind:nth-child(n+3){border-top:1px solid var(--rule)}
}
@media(max-width:430px){
  body.create-studio .at-h1{font-size:30px}.pg-idioms{--strobe-edge:var(--strobe-edge);--cta-gold-fill:var(--cta-gold-fill);--chip-fill:var(--chip-fill);--chip-line:var(--chip-line);--scrim-image:var(--scrim-image)}
}
