:root{
  --glass-tint:0.19;
  --glass-master:0;
  --glass-blur:2px;
  --ink:#E8E3DD;
  --ink-soft:rgba(232,227,221,.78);
  --ink-faint:rgba(232,227,221,.5);
  --accent:#E8E3DD;
  --gold:#D6B24A;
  --ember:#D24338;
  --edge:rgba(255,255,255,.15);
  --edge-top:rgba(255,255,255,.32);
  --shadow:0 14px 36px rgba(0,0,0,.30);
  --editor-font:-apple-system,BlinkMacSystemFont,"SF Pro Text",sans-serif;
}
body.light{
  --ink:#1b1a17;
  --ink-soft:rgba(27,26,23,.65);
  --ink-faint:rgba(27,26,23,.42);
  --accent:#1b1a17;
  --gold:#9A7A2E;
  --ember:#B5352B;
  --edge:rgba(20,35,25,.18);
  --edge-top:rgba(255,255,255,.55);
}
*{box-sizing:border-box;margin:0;padding:0;}
html,body{height:100%;}
body{
  font-family:var(--ui-font,-apple-system,BlinkMacSystemFont,"SF Pro Text",sans-serif);
  color:var(--ink);
  overflow:hidden;
  background:#0F1013;
}
#bg{
  position:fixed;inset:0;z-index:0;
  background:#0F1013 center/cover no-repeat;
  transition:background-image .4s;
}
/* Video scenes fill the viewport exactly — cover already crops 16:9 footage on this 1.54:1 screen,
   so every extra vh of overscan costs visible footage width. The 2vh vertical overscan exists ONLY
   for Aurora Lake, whose footage has a bright edge-band baked into its top rows; it's scoped to that
   scene below instead of taxing every clean clip. */
/* the TITLEBAR BAR (Notion-style) — a visible slim glass band along the top, windowed only
   (body.tb-win; fullscreen drops it: no bar, scene edge-to-edge, macOS owns the top). The whole bar
   is a Tauri drag region: drag = move, double-click = zoom (tauri drag.js handles detail===2).
   Traffic lights float in it natively. Header rows also carry data-tauri-drag-region, so any empty
   header area drags too. Translucent + blur keeps the scene glowing through. */
#drag-strip{display:none;position:fixed;top:0;left:0;right:0;height:30px;z-index:60;
  background:rgba(9,11,15,.55);border-bottom:1px solid rgba(255,255,255,.07);
  backdrop-filter:blur(18px) saturate(1.1);-webkit-backdrop-filter:blur(18px) saturate(1.1);}
/* v951 (his call, the standard-app behavior): the strip is INVISIBLE until the mouse rides to the
   top, in EVERY view — z 60 floats it above the Observatory (z 45) too. It stays a live
   data-tauri-drag-region the whole time, so grab-the-top-and-move always works; hovering it
   simply lets you SEE what you're grabbing. */
body.tb-win #drag-strip{display:block;opacity:0;transition:opacity .22s ease;}
body.tb-win #drag-strip:hover{opacity:1;}
body.light #drag-strip{background:rgba(255,255,255,.6);border-bottom-color:rgba(0,0,0,.08);}
.bg-video{position:fixed;top:0;left:0;width:100%;height:100vh;object-fit:cover;z-index:0;pointer-events:none;transition:opacity .3s linear;
  filter:brightness(.84);}  /* uniform slight dim on the footage itself — full bleed, no gradient, no edge; matches the .16 poster dim below */
body[data-scene-key="auroralake"] .bg-video{top:-2vh;height:104vh;}  /* Aurora's baked-in bright top band stays off-screen */
#bg::after{content:"";position:absolute;inset:0;background:rgba(0,0,0,.16);}   /* matches the video layers' brightness(.84) so poster->video fade-in doesn't shift */
body.light #bg::after{background:rgba(255,255,255,.06);}
#particles{position:fixed;inset:0;z-index:1;pointer-events:none;--p-color:rgba(248,242,232,1);--p-glow:0 0 9px rgba(248,242,232,.78);}
#particles span{position:absolute;border-radius:50%;background:var(--p-color);box-shadow:var(--p-glow);will-change:transform,opacity;}
@keyframes drift{0%{transform:translate(0,0);opacity:0;}10%{opacity:.7;}50%{opacity:1;}90%{opacity:.7;}100%{transform:translate(var(--dx),var(--dy));opacity:0;}}
#fog{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden;}
#fog span{position:absolute;will-change:transform;}
@keyframes fogsweep{0%{transform:translateX(0);}100%{transform:translateX(calc(100vw + var(--fw)));}}
/* ----- rain (cyberpunk) — vertical streaks rendered straight, gentle diagonal motion ----- */
#rain{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden;}
#rain span{position:absolute;width:0.8px;background:linear-gradient(to bottom,rgba(220,230,245,0) 0%,rgba(220,230,245,.85) 50%,rgba(220,230,245,0) 100%);will-change:transform;}
#rain span.rd-bright{width:1.4px;background:linear-gradient(to bottom,rgba(255,210,170,0) 0%,rgba(255,225,195,.95) 50%,rgba(255,210,170,0) 100%);opacity:.9;filter:drop-shadow(0 0 3px rgba(255,180,110,.55));}
@keyframes rainfall{0%{transform:translate(0,0);}100%{transform:translate(10vh,110vh);}}
/* ----- neon bloom (warm pulsing glow over the lower cityscape) ----- */
#bloom{position:fixed;inset:0;z-index:1;pointer-events:none;background:radial-gradient(ellipse var(--bloom-x,65%) var(--bloom-y,40%) at 50% 80%,rgba(255,128,72,.18) 0%,rgba(255,80,60,.10) 38%,rgba(180,40,90,.04) 65%,rgba(0,0,0,0) 82%);mix-blend-mode:screen;animation:bloompulse 9s ease-in-out infinite alternate;}
@keyframes bloompulse{0%{opacity:.78;}100%{opacity:1;}}
/* ----- steam plumes (industrial vent / sewer rise) ----- */
#steam{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden;mix-blend-mode:screen;}
#steam span{position:absolute;background:radial-gradient(ellipse at center,rgba(232,238,245,.55) 0%,rgba(220,228,240,.25) 38%,rgba(200,210,225,0) 75%);filter:blur(24px);transform-origin:bottom center;will-change:transform,opacity;}
@keyframes steamrise{0%{transform:translateY(15%) scale(0.55);opacity:0;}15%{opacity:.55;}55%{transform:translateY(-70%) scale(1.05);opacity:.45;}100%{transform:translateY(-180%) scale(1.6);opacity:0;}}
/* ----- wet-surface shimmer (only the bottom 10vh, very subtle, no horizontal sweep) ----- */
#shimmer{position:fixed;left:0;right:0;bottom:0;height:10vh;z-index:1;pointer-events:none;overflow:hidden;mix-blend-mode:screen;opacity:.55;}
#shimmer::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 35% 100% at 50% 100%,rgba(220,235,255,.06) 0%,rgba(220,235,255,0) 70%);animation:wetsheen 18s ease-in-out infinite;}
@keyframes wetsheen{0%,100%{opacity:.6;}50%{opacity:1;}}
#app{position:fixed;inset:0;z-index:2;display:flex;flex-direction:column;}
/* v943: CHROME DOESN'T SELECT — CONTENT DOES (his "high quality apps" call). -webkit-user-select
   inherits in WebKit, so the body-level none sweeps every pane/card/label; the writing surfaces
   below re-enable it and their subtrees inherit the re-enable. Inline user-select:text markers
   (support email, bug diagnostics) still win over the inherited none. */
body{-webkit-user-select:none;user-select:none;}
input, textarea, [contenteditable], #ed-text, .bd-text, #ask-answer, .echat-md, .ph-prev, .hist-diff, pre, code{-webkit-user-select:text;user-select:text;}

.glass{
  background:rgba(15,16,19,clamp(0,calc(var(--glass-tint,0.19) + var(--glass-master,0)),0.72));
  backdrop-filter:blur(var(--glass-blur,2px)) saturate(1.12);
  -webkit-backdrop-filter:blur(var(--glass-blur,2px)) saturate(1.12);
  border:1px solid var(--edge);
  border-top-color:var(--edge-top);
  border-radius:18px;
  box-shadow:var(--shadow), inset 0 1px 0 rgba(255,255,255,.10);
}
body.light .glass{background:rgba(255,255,255,clamp(0,calc(var(--glass-tint,0.19) + 0.30 + var(--glass-master,0)),1));}
.tshadow{text-shadow:0 1px 14px rgba(0,0,0,.45);}
body.light .tshadow{text-shadow:0 1px 10px rgba(255,255,255,.55);}


/* control glass: modals, menus, toolbars — fixed contrast, ignores the opacity slider */
.chrome-glass{
  background:rgba(15,16,19,.86);
  backdrop-filter:blur(20px) saturate(1.2);
  -webkit-backdrop-filter:blur(20px) saturate(1.2);
  border:1px solid rgba(255,255,255,.16);
  border-top-color:rgba(255,255,255,.3);
  border-radius:18px;
  box-shadow:0 18px 44px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.08);
  color:#E8E3DD;
}
body.light .chrome-glass{background:rgba(245,243,239,.93);color:#1b1a17;}

/* ---------- top chrome ---------- */
#chrome{display:flex;align-items:flex-start;justify-content:space-between;padding:22px 28px 8px;flex:none;}
/* overlay titlebar, WINDOWED (body.tb-win) — clearance under the floating macOS traffic lights at
   top-left. Fullscreen drops the class (lights auto-hide there), so no space is wasted. */
body.tb-win #chrome{padding-top:40px;}
body.tb-win #editor{padding-top:38px;}

/* ⚠ v1424 — THE LEFT INSET IS GONE. It never needed to exist.
   The rule assumed the breadcrumb shared a horizontal band with the traffic lights, so it pushed
   the crumb right (78px, then 100px) to "clear" them. But `body.tb-win #editor{padding-top:38px}`
   already drops the crumb ~60px BELOW the light cluster — there was never a collision to solve,
   only a tightly-cropped screenshot that looked like one. The inset's real effect was to strand
   the crumb in dead space, aligned to nothing, while fullscreen (no tb-win, no inset) looked
   correct — his A/B proved it.
   Windowed and fullscreen now share one left edge, and the crumb reads as the head of the content
   column instead of a floating fragment. If a future layout ever DOES put the crumb level with the
   lights, fix the vertical, not the horizontal. */

#chrome>div:first-child{flex:1;min-width:0;margin-right:24px;}
#greet{font-size:26px;font-weight:600;letter-spacing:.01em;}
/* v1421 — NO focus box on the greeting or the subtitle. His words: "it should just look like I'm
   writing on the pane of glass." v1420 traded WebKit's blue ring for our own bordered/tinted box,
   which was still a box; he wanted the box gone, not restyled. The CARET is the focus signal now.
   ⚠ Keep cursor:text — with no box and no hover wash it is the only remaining "this is editable"
   affordance before you click. */
#greet{cursor:text;}
#greet:focus,#greet:focus-visible{outline:none;background:none;box-shadow:none;}
#sub{font-size:17px;color:var(--ink);margin-top:4px;cursor:text;border-radius:6px;padding:1px 4px;margin-left:-4px;font-weight:500;}
/* no hover wash on the subtitle — it's still click-to-edit, just without the highlight (his ask; the empty-state placeholder hint below still applies) */
#sub:focus{outline:none;background:none;}   /* v1421: same as #greet above — the subtitle sits directly
   under it and clicking it produced the identical grey box he just rejected. Changed together so the
   pair behaves the same; its :empty placeholder hint below is untouched and still appears. */
#sub:empty:before{content:"Add a subtitle";color:var(--ink-faint);opacity:0;transition:opacity .15s;}
#sub:empty:hover:before,#sub:focus:empty:before{opacity:.5;}
/* Ember answer markdown — proper list indent + readable headings/spacing */
#ask-answer ol,#ask-answer ul{padding-left:1.55em;margin:9px 0;}
#ask-answer li{margin:6px 0;line-height:1.55;}
#ask-answer p{margin:9px 0;}
#ask-answer p:first-child{margin-top:0;}
#ask-answer h1{font-size:19px;font-weight:700;margin:6px 0 11px;line-height:1.25;}
#ask-answer h2{font-size:16px;font-weight:650;margin:14px 0 6px;}
#ask-answer h3{font-size:14px;font-weight:650;margin:12px 0 5px;}
#ask-answer h4{font-size:12.5px;font-weight:650;letter-spacing:.01em;color:var(--ink-soft);margin:11px 0 4px;}
#ask-answer li>ul,#ask-answer li>ol{margin:4px 0;}
#ask-answer blockquote{border-left:2px solid var(--edge);padding-left:11px;margin:9px 0;color:var(--ink-faint);}
#clockbox{text-align:right;}
#clock{font-size:26px;font-weight:500;font-variant-numeric:tabular-nums;line-height:1.15;}   /* matches the weather temp's line box — UI fonts with tall metrics (Avenir) sagged the clock ~6px */
/* Desk pane icon — sun by day, moon by night (19:00–05:59), each glowing in its own light */
#desk-ico{transition:color .6s ease,filter .6s ease;}
#desk-ico[data-tod="sun"]{color:var(--gold,#D6B24A);filter:drop-shadow(0 0 6px rgba(214,178,74,.75));}
#desk-ico[data-tod="moon"]{color:#a9c0f5;filter:drop-shadow(0 0 7px rgba(64,96,205,.85)) drop-shadow(0 0 16px rgba(35,60,150,.5));}
#date{font-size:13px;color:var(--ink-soft);margin-top:2px;}
.chip{
  width:36px;height:36px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.09);border:1px solid var(--edge);color:var(--ink);
  cursor:pointer;font-size:17px;transition:background .15s;
}
.chip:hover{background:rgba(255,255,255,.18);}
.chip.on{background:color-mix(in srgb, var(--accent) 30%, transparent)!important;border-color:color-mix(in srgb, var(--accent) 55%, transparent);color:#fff;box-shadow:0 0 12px color-mix(in srgb, var(--accent) 35%, transparent);}
.chip.on:hover{background:color-mix(in srgb, var(--accent) 42%, transparent)!important;}

/* ---------- spaces nav ---------- */
#spaces{display:flex;gap:10px;padding:10px 28px 4px;flex:none;align-items:center;}
.space-pill{
  display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:999px;cursor:pointer;
  font-size:13.5px;font-weight:500;color:var(--ink);flex:none;white-space:nowrap;
  background:rgba(255,255,255,.07);border:1px solid var(--edge);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  transition:background .15s,transform .1s;
}
/* long space names ellipsize instead of wrapping the pill to multiple lines (full name = tooltip);
   the bar itself never wraps — trailing pills fold into the #space-more ⋯ chip when room runs out */
.space-pill .sp-name{max-width:220px;overflow:hidden;text-overflow:ellipsis;}
#space-more{padding:8px 12px;gap:5px;}
#space-more .sp-more-n{font-size:11.5px;color:var(--ink-soft);font-weight:600;}
/* Compile modal — drag-orderable part list */
#cp-list{margin-top:10px;max-height:44vh;overflow-y:auto;display:flex;flex-direction:column;gap:5px;}
.cp-row{display:flex;align-items:center;gap:9px;padding:8px 11px;border-radius:10px;background:rgba(255,255,255,.05);border:1px solid var(--edge);cursor:grab;-webkit-user-select:none;user-select:none;}
.cp-row:active{cursor:grabbing;}
.cp-row.cp-dragging{opacity:.45;}
.cp-row>i{color:var(--ink-faint);font-size:14px;flex:none;}
.cp-n{flex:none;width:18px;text-align:right;font-size:11.5px;font-weight:700;color:var(--gold,#D6B24A);font-variant-numeric:tabular-nums;}
.cp-title{flex:1;min-width:0;font-size:13.5px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cp-sub{flex:none;font-size:11px;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.space-pill:hover{background:rgba(255,255,255,.15);transform:translateY(-1px);}
.space-pill.active{background:color-mix(in srgb,var(--sp,#fff) 20%,rgba(255,255,255,.08));
  border-color:color-mix(in srgb,var(--sp,#fff) 60%,var(--edge));
  box-shadow:0 0 16px color-mix(in srgb,var(--sp,#fff) 32%,transparent);font-weight:600;}
.space-pill.active .space-dot{box-shadow:0 0 8px var(--sp);}
/* while a space pill is being drag-reordered, force the grab cursor everywhere
   (the pills go pointer-events:none mid-drag, so the cursor falls through to
   whatever's behind them — without this it shows the text I-beam). */
body.sp-dragging,body.sp-dragging *{cursor:grabbing !important;}
.space-dot{width:9px;height:9px;border-radius:50%;border:1.5px solid rgba(255,255,255,.9);box-shadow:0 0 4px color-mix(in srgb, currentColor 60%, transparent);}

/* ---------- stage & widgets ---------- */
/* ---------- home v2 (fixed curated dashboard) ---------- */
#home2{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:4px 20px 14px;max-width:2000px;width:100%;margin:0 auto;}
.h2-row{display:flex;gap:14px;}
/* ⚠ v1425 — THE MIN-HEIGHTS ARE LOAD-BEARING. They were `min-height:0`, which let both rows
   flex-shrink without any floor: in a short window the rows compressed BELOW their content and it
   spilled into the row beneath, so Quick Capture drew through the Vault and OBSERVATORY landed on
   top of a capture item (his 8/8 screenshot at the 900×600 minimum — three sections in one space).
   The window's minWidth/minHeight guard could not help: the guard caps how small the WINDOW gets,
   it says nothing about whether the layout survives at that size.
   With a floor, the rows stop shrinking, the column grows past the viewport, and #home2's
   overflow-y:auto does what it was always meant to do — scroll. */
.h2-row-top{flex:1.05;min-height:330px;}
.h2-row-bot{flex:1.25;min-height:290px;}
.h2-card{border-radius:18px;padding:14px 16px;display:flex;flex-direction:column;min-width:0;min-height:0;}
.h2-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:11px;flex:none;}
.h2-title{display:flex;align-items:center;gap:9px;font-size:11px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-soft);}
.h2-title i{font-size:14px;color:var(--ink-soft);}
.h2-headlink{font-size:11.5px;color:var(--ink-faint);display:flex;align-items:center;gap:4px;}
.h2-footlink{margin-top:14px;align-self:flex-start;display:inline-flex;align-items:center;gap:7px;background:rgba(255,255,255,.05);border:1px solid var(--edge);
  color:var(--ink-soft);font:inherit;font-size:12.5px;padding:8px 15px;border-radius:10px;cursor:pointer;transition:var(--fx-chrome);}
.h2-footlink:hover{color:var(--ink);background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.18);}
.h2-empty{font-size:12.5px;color:var(--ink-faint);padding:24px 4px;}
/* Current Focus Across Spaces */
.h2-focus{flex:1;min-width:0;}
.h2-focus-row{display:flex;flex-wrap:nowrap;gap:12px;flex:1;min-width:0;min-height:0;}
.hf-card{flex:1 1 0;min-width:0;position:relative;border-radius:15px;overflow:hidden;cursor:pointer;min-height:0;isolation:isolate;transition:transform 240ms var(--fx-ease);}   /* v1440: fast-in slow-out */
.h2-manage{background:transparent;border:0;font:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:4px;padding:1px 2px;border-radius:6px;font-size:10.5px;color:var(--ink-faint);}
.h2-manage:hover{color:var(--ink-soft);}
.h2-manage i{font-size:11px;}
/* Manage Home spaces modal */
.hsm-sect{font-size:10px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-faint);margin:16px 2px 8px;}
.hsm-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;background:rgba(255,255,255,.03);border:1px solid var(--edge);margin-bottom:6px;font-size:13.5px;}
.hsm-row i{font-size:15px;}
.hsm-ord{font-size:11px;color:var(--ink-faint);width:14px;font-variant-numeric:tabular-nums;flex:none;}
.hsm-dot{width:9px;height:9px;border-radius:50%;flex:none;}
.hsm-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink);}
.hsm-ic{width:30px;height:30px;border-radius:8px;border:1px solid var(--edge);background:transparent;color:var(--ink-soft);cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none;transition:var(--fx-chrome);}
.hsm-ic:hover:not(:disabled){color:var(--ink);background:rgba(255,255,255,.08);}
.hsm-ic:disabled{opacity:.3;cursor:default;}
.hsm-pin{color:color-mix(in srgb,var(--accent) 80%,var(--ink-soft));border-color:color-mix(in srgb,var(--accent) 30%,var(--edge));}
.hf-card:hover{transform:translateY(-2px);transition-duration:60ms;}
.hf-cover{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;transition:transform 240ms var(--fx-ease);}
.hf-card:hover .hf-cover{transform:scale(1.03);}
.hf-cover-none{background:rgba(18,20,24,.34);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);}
/* ^ v1465 his 8/18 call ("I like the blur as standard"): coverless focus cards match .lib-card-noimg's
   glass instead of the space-colour gradient — the space still speaks through its mark + dot. */
.hf-grad{position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(to top,rgba(0,0,0,.86) 0%,rgba(0,0,0,.5) 36%,rgba(0,0,0,.12) 66%,rgba(0,0,0,.28) 100%);}
/* .hf-space (the named chip over the cover) retired v1415 — the mark moved into .hf-meta.
   .hf-dot stays: it's the fallback mark for a space with no icon set. */
.hf-dot{width:7px;height:7px;border-radius:50%;background:var(--sc);box-shadow:0 0 5px var(--sc);}
.hf-body{position:absolute;left:14px;right:14px;bottom:13px;z-index:2;display:flex;flex-direction:column;gap:8px;}
.hf-title{font-size:17px;font-weight:600;color:#f4f1e8;line-height:1.25;text-shadow:0 1px 4px rgba(0,0,0,.6);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
/* v1437 card diet (his 8/11 spec, everything ALWAYS visible): status row + arrow are gone —
   status is a bare colour dot leading the words·ago line, and the space icon floats translucent
   at the card's top-right (drop-shadow kept so it survives bright covers). */
.hf-status-dot{width:7px;height:7px;border-radius:50%;background:var(--st);flex:none;}
.hf-meta{display:flex;align-items:center;gap:8px;margin-top:2px;}
.hf-line{font-size:11.5px;color:rgba(240,236,228,.7);white-space:nowrap;font-variant-numeric:tabular-nums;
  text-shadow:0 1px 3px rgba(0,0,0,.5);min-width:0;overflow:hidden;text-overflow:ellipsis;}
.hf-space-mark{position:absolute;top:10px;right:10px;z-index:2;display:flex;align-items:center;opacity:.45;transition:opacity .2s ease;}
.hf-card:hover .hf-space-mark{opacity:.85;}   /* his ask: the icon warms when the card is under the cursor */
/* v1439 (his blur catch on the Old English mark): filter:drop-shadow forces the glyph onto a
   rasterized layer — soft edges on detailed icons. text-shadow paints WITH the glyph instead,
   and 17px gives Tabler's detail room to resolve. */
.hf-space-mark i{font-size:17px;text-shadow:0 1px 3px rgba(0,0,0,.6);}
/* right column (top row): Pulse stacked over Launch Deck, right-aligned */
.h2-col-right{width:450px;flex:none;min-width:0;min-height:0;display:flex;flex-direction:column;gap:12px;}
.h2-pulse{flex:none;padding-bottom:12px;}
.h2-pulse .h2-head{margin-bottom:7px;}   /* v1287: the PULSE label sits closer to the numbers — dead air goes to Quick Capture */   /* v1285 his call: the pane floor hugs the subline — every reclaimed pixel goes to Quick Capture below (it is flex:1) */
.h2-pulse .w-body[data-body="stats"]{margin-bottom:0 !important;}
.h2-col-right .h2-capture{flex:1;min-height:0;display:flex;flex-direction:column;}
.h2-col-right .h2-capture .w-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;}   /* v1.1.1 his catch: this scrolled the WHOLE body incl. the input row; .cap-row now stays pinned, .inbox-list (its own flex:1;min-height:0;overflow-y:auto, line ~626) is the only thing that scrolls */
/* the stats body takes whatever height Launch Deck leaves it (.w-body is already flex:1 in the
   widget column; 1-row deck ≈ 95-130px, 2-row deck ≈ 55px). fillStats MEASURES the body (plus a
   ResizeObserver for live deck edits) and stamps .pw-compact when it's short: the ember collapses
   from the full shrine (flame above the band) to a compact inline form. Measured in JS, not a
   @container query — container-type:size + the widget flex column silently never matched (the
   clipped-flame bug). No fixed heights → no clipping, at any tile count. */
.h2-pulse .w-body[data-body="stats"]{margin-bottom:8px;display:flex;align-items:center;overflow:visible;}   /* the band block centers in whatever height the deck leaves — no dead space above/below. overflow:visible: the generic .w-body{overflow:hidden} was shaving the flame's tip when the block is biased up — stats never scroll, so nothing else can clip */
.pulse-row{display:flex;align-items:flex-start;justify-content:space-between;width:100%;margin-bottom:16px;}   /* biases the centered block UP 8px: reads centered against the full card (header included). ⚠ ceiling: at −12px the flame TIP CLIPPED at the body's top edge (v778, looked like a circle) — verify the flame point survives before raising further */
/* band geometry: the words number + pages line sit level with the "N day streak" row; the flame
   floats in the headroom above the band. padding-tops track the flame box: flame font + column gap
   − 2 (46+6−2 = 50/52). Change the flame size → retune these two. */
.pw-left{flex:none;padding-top:42px;}
.pw-right{flex:none;display:flex;align-items:stretch;gap:18px;}
.pw-div{width:1px;background:rgba(255,255,255,.12);margin:38px 0 10px;}
.pw-stats{font-size:12px;line-height:1.9;color:var(--ink-soft);padding-top:44px;}
/* compact = the SAME shrine, scaled down — flame, "N day streak", state line, coals all survive
   (his design, every element, at every density; nothing hidden, nothing rearranged) */
.pulse-row.pw-compact{align-items:center;}
.pw-compact .pw-left{padding-top:0;}
.pw-compact .pw-stats{padding-top:0;}
.pw-compact .pw-div{margin:9px 0;}
.pw-compact .ember-mod{gap:2px;align-self:center;}
.pw-compact .ember-mod .em-flame{font-size:17px;}
.pw-compact .ember-mod .em-row{margin-top:0;}
.pw-compact .ember-mod .em-n{font-size:15px;}
.pw-compact .ember-mod .em-sub{font-size:8px;}
.pw-compact .ember-mod .em-state{font-size:8.5px;}
.pw-compact .ember-mod .em-coal{transform:scale(.8);}
/* ---- The Ember (Pulse CENTER module — words | ember | pages/links/boards) — a vertical shrine
   column: flame, "N day streak", state line, coals. No orb, no red UI text; glow tiers on the
   flame carry the state and the only motion is the Steady (7+ day) breath. ---- */
.ember-mod{display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;flex:none;cursor:pointer;}   /* clickable: the ember opens the Word Goal editor */
.ember-mod .em-row{margin-top:-2px;}   /* the "N day streak" line lands on the same band as the words-written number and the pages column (flame floats above the band) */
.ember-mod .em-flame{font-size:38px;flex:none;color:var(--ink-faint);opacity:.38;transition:color .6s,opacity .6s,filter .6s;line-height:1;}
.ember-mod.em-lit .em-flame{color:var(--ember);opacity:.95;filter:drop-shadow(0 0 5px color-mix(in srgb, var(--ember) 70%, transparent)) drop-shadow(0 0 14px color-mix(in srgb, var(--ember) 28%, transparent));}
.ember-mod.em-bright .em-flame{color:color-mix(in srgb, var(--ember) 74%, var(--gold,#D6B24A));opacity:1;
  filter:drop-shadow(0 0 6px color-mix(in srgb, var(--ember) 85%, transparent)) drop-shadow(0 0 18px color-mix(in srgb, var(--gold,#D6B24A) 40%, transparent));}
/* breath = a 7+ streak, layered on today's brightness — the flame itself grows ~7% and settles.
   Gated to the warm states so it only breathes once you've written today (a dim flame stays still). */
.ember-mod.em-breath.em-lit .em-flame,
.ember-mod.em-breath.em-bright .em-flame{animation:emberbreathe 5.5s ease-in-out infinite;}
@keyframes emberbreathe{0%,100%{transform:scale(1);}50%{transform:scale(1.075);}}
.ember-mod .em-row{display:flex;align-items:baseline;gap:6px;line-height:1;}
.ember-mod .em-n{font-size:22px;font-weight:650;font-variant-numeric:tabular-nums;line-height:1;}
.ember-mod .em-sub{font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-soft);white-space:nowrap;line-height:1;}
.ember-mod .em-state{font-size:10px;letter-spacing:.02em;color:var(--ink-faint);white-space:nowrap;line-height:1;font-style:italic;transition:color .5s;}
.ember-mod.em-lit .em-state,.ember-mod.em-bright .em-state{color:color-mix(in srgb, var(--gold,#D6B24A) 55%, var(--ink-faint));}
.ember-mod .em-dots{display:flex;align-items:center;justify-content:center;gap:2.5px;overflow:hidden;}
.ember-mod .em-coal{border-radius:50%;flex:none;background:rgba(255,255,255,.09);transition:background .5s,box-shadow .5s;}
/* lit coals = dim ember ("cooling coals" — warm so the row reads as embers, but low + glowless so
   the flame stays the brightest point; holds up from a 5-coal row to a 14+ bed at high streaks) */
.ember-mod .em-coal.on{background:color-mix(in srgb, var(--ember) 52%, transparent);}
.ember-mod .em-over{margin-left:3px;font-size:9px;font-weight:600;color:color-mix(in srgb, var(--ember) 62%, var(--gold,#D6B24A));white-space:nowrap;font-variant-numeric:tabular-nums;line-height:1;}
.h2-activity{flex:1;min-height:0;display:flex;flex-direction:column;gap:1px;padding-top:8px;border-top:1px solid var(--edge);overflow-y:auto;overflow-x:hidden;}
.h2-act-row{display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:9px;cursor:pointer;transition:background .12s;}
.h2-act-row:hover{background:rgba(255,255,255,.06);}
.h2-act-dot{width:8px;height:8px;border-radius:50%;flex:none;}
.h2-act-title{flex:1;min-width:0;font-size:13px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.h2-act-when{font-size:11px;color:var(--ink-faint);flex:none;}
.h2-act-space{font-size:11.5px;flex:none;white-space:nowrap;opacity:.9;}
.act-list{display:flex;flex-direction:column;gap:1px;height:100%;overflow-y:auto;overflow-x:hidden;}
/* bottom row — Today (wide) + Knowledge Graph (right). Graph's right edge aligns with the Pulse/Launch column above. */
.h2-capture{min-width:0;}   /* v1276: Quick Capture lives in the right column now — no row flex */
.h2-vault{flex:1.5;min-width:0;}   /* the Vault pane inherits the Desk's exact row share, so the Observatory keeps its width */
.h2-graph{flex:1;min-width:0;}
.h2-launch{flex:none;min-width:0;}   /* now in the right column under Pulse — full width, content height */
/* tiles STRETCH to fill the pane width (grid 1fr); column count (5 or 6) is set inline; capped at 2 rows */
.h2-launch .tiles{display:grid;gap:8px;align-content:flex-start;width:100%;height:auto;overflow:visible;padding:6px 2px 2px;}
.h2-launch .w-body[data-body="launch"]{flex:none;padding:2px 6px 4px;overflow:visible;}
.h2-cust{background:none;border:none;cursor:pointer;font-family:inherit;gap:5px;padding:1px 3px;border-radius:6px;}
.h2-cust:hover{color:var(--ink);}
.h2-cust i{font-size:13px;}
.h2-graph .w-body[data-body="graph"]{flex:1;min-height:140px;position:relative;}
/* Today pane tabs (Quick Capture · Tasks · Notes) */
.today-tabs{display:flex;gap:22px;border-bottom:0.5px solid var(--edge);margin:2px 0 12px;flex:none;}
.today-tab{display:inline-flex;align-items:center;gap:7px;background:none;border:none;cursor:pointer;font-family:inherit;font-size:13.5px;color:var(--ink-faint);padding:0 0 10px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s;}
.today-tab i{font-size:15px;}
.today-tab:hover{color:var(--ink-soft);}
.today-tab.on{color:var(--ink);border-bottom-color:var(--gold,#D6B24A);}
.today-views{flex:1;min-height:0;display:flex;flex-direction:column;}
.today-view{flex:1;min-height:0;}
.today-view[hidden]{display:none;}
.today-notes{flex:1;min-height:160px;width:100%;resize:none;background:none;border:none;outline:none;color:var(--ink);font:inherit;font-size:14.5px;line-height:1.6;padding:6px 2px;}
.today-notes::placeholder{color:var(--ink-faint);}
/* ===== Notes (Daily Workspace tab = entry point into the built-in sticky-note canvas) ===== */
.today-view[data-body="notes"]:not([hidden]){display:flex;flex-direction:column;}
.notes-tab{flex:1;display:flex;flex-direction:column;min-height:0;gap:9px;}
.notes-add{display:flex;align-items:center;gap:9px;flex:none;border:1px solid rgba(255,255,255,.12);border-radius:11px;padding:9px 12px;background:rgba(255,255,255,.03);}
.notes-add > i{font-size:15px;color:var(--ink-soft);flex:none;}
.notes-add input{flex:1;min-width:0;background:none;border:none;outline:none;color:var(--ink);font:inherit;font-size:14px;}
.notes-add input::placeholder{color:var(--ink-faint);}
.notes-open{flex:none;display:inline-flex;align-items:center;gap:5px;background:rgba(255,255,255,.06);border:1px solid var(--edge);color:var(--ink-soft);font:inherit;font-size:11.5px;padding:5px 10px;border-radius:8px;cursor:pointer;white-space:nowrap;transition:background .12s,color .12s;}
.notes-open:hover{color:var(--ink);background:rgba(255,255,255,.11);}
.notes-canvas-host{flex:1;min-height:0;display:flex;}
/* Full-page Notes canvas (Library) + Boards section */
.ln-canvas-host{flex:1;min-height:0;display:flex;margin-top:2px;}
.lib-board-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:14px;align-content:start;overflow-y:auto;padding-bottom:8px;}
.lib-board-card{display:flex;align-items:center;gap:13px;padding:14px 16px;border:1px solid var(--edge);border-radius:14px;background:rgba(255,255,255,.03);cursor:pointer;transition:background .12s,border-color .12s;}
.lib-board-card:hover{background:rgba(255,255,255,.07);border-color:color-mix(in srgb,var(--sc) 42%,var(--edge));}
.lib-board-ico{width:40px;height:40px;border-radius:10px;flex:none;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--sc);background:color-mix(in srgb,var(--sc) 16%,transparent);}
.lib-board-body{min-width:0;}
.lib-board-title{font-size:14.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lib-board-meta{font-size:11.5px;color:var(--ink-faint);margin-top:3px;}
/* ===== Tasks (Daily Workspace tab + Library page) ===== */
.today-view[data-body="focus"]:not([hidden]){display:flex;flex-direction:column;}
.tk-quick{display:flex;align-items:center;gap:10px;border:1px solid rgba(214,178,74,.5);border-radius:11px;padding:11px 14px;margin:0 0 10px;flex:none;transition:border-color .18s, box-shadow .18s;}
.tk-quick:focus-within{border-color:rgba(214,178,74,.9);box-shadow:0 0 0 3px rgba(214,178,74,.13);}
.tk-quick i{color:var(--gold,#D6B24A);font-size:16px;}
.tk-quick input{flex:1;background:none;border:none;outline:none;color:var(--ink);font:inherit;font-size:14px;}
.tk-quick input::placeholder{color:var(--ink-faint);}
.tk-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 2px 6px;flex:none;}
.tk-count{font-size:11.5px;color:var(--ink-faint);}
.tk-bar-r{display:flex;align-items:center;gap:8px;}
.tk-expand{display:inline-flex;align-items:center;gap:5px;background:none;border:none;color:var(--ink-faint);font-family:inherit;font-size:11.5px;cursor:pointer;padding:3px 7px;border-radius:7px;transition:var(--fx-chrome);}
.tk-expand:hover{color:var(--ink);background:rgba(255,255,255,.05);}
.tk-expand i{font-size:13px;}
.tk-filter{background:rgba(255,255,255,.04);border:1px solid var(--edge);border-radius:8px;color:var(--ink-soft);font-family:inherit;font-size:12px;padding:4px 8px;outline:none;cursor:pointer;}
.tk-filter option{color:#1a261d;}
.tk-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 8px;flex:none;}
.tk-subtabs{display:flex;gap:3px;flex-wrap:wrap;}
.tk-subtab{display:inline-flex;align-items:center;gap:6px;background:none;border:none;cursor:pointer;font-family:inherit;font-size:12.5px;color:var(--ink-faint);padding:5px 9px;border-radius:8px;transition:var(--fx-chrome);}
.tk-subtab:hover{color:var(--ink-soft);background:rgba(255,255,255,.04);}
.tk-subtab.on{color:var(--ink);background:rgba(214,178,74,.12);}
.tk-n{font-size:11px;color:var(--ink-faint);background:rgba(255,255,255,.07);padding:0 6px;border-radius:999px;min-width:16px;text-align:center;}
.tk-subtab.on .tk-n{color:var(--gold,#D6B24A);background:rgba(214,178,74,.2);}
.tk-add{display:inline-flex;align-items:center;gap:6px;background:rgba(214,178,74,.1);border:1px solid rgba(214,178,74,.5);color:var(--gold,#D6B24A);font-family:inherit;font-size:12.5px;padding:6px 12px;border-radius:9px;cursor:pointer;flex:none;transition:var(--fx-chrome);}
.tk-add:hover{background:rgba(214,178,74,.18);}
.tk-add i{font-size:14px;}
.tk-list{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:1px;}
.tk-row{display:grid;grid-template-columns:22px minmax(0,1fr) 116px 92px 86px 116px 24px;align-items:center;gap:10px;padding:9px 8px;border-radius:10px;cursor:pointer;transition:background .12s;}
.tk-row:hover{background:rgba(255,255,255,.045);}
.tk-check{width:18px;height:18px;border-radius:6px;border:1.5px solid var(--edge);display:flex;align-items:center;justify-content:center;color:var(--gold,#D6B24A);font-size:12px;cursor:pointer;flex:none;}
.tk-check:hover{border-color:rgba(214,178,74,.6);}
.tk-row.done .tk-check{background:rgba(214,178,74,.18);border-color:rgba(214,178,74,.5);}
.tk-main{min-width:0;}
.tk-title{font-size:13.5px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tk-row.done .tk-title{color:var(--ink-faint);text-decoration:line-through;}
.tk-note{font-size:11.5px;color:var(--ink-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px;}
.tk-space{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:color-mix(in srgb,var(--c) 78%,#fff);background:color-mix(in srgb,var(--c) 13%,transparent);border:1px solid color-mix(in srgb,var(--c) 30%,transparent);padding:3px 8px;border-radius:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.tk-space.tk-dim{color:var(--ink-faint);background:none;border:none;padding:0;}
.tk-space i{font-size:12px;flex:none;}
.tk-sdot{width:7px;height:7px;border-radius:50%;flex:none;}
.tk-due{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-soft);white-space:nowrap;cursor:pointer;border-radius:6px;padding:2px 5px;}
.tk-due:hover{background:rgba(255,255,255,.06);}
.tk-due i{font-size:12px;}
.tk-due.overdue{color:#e0504a;}
.tk-due.today{color:var(--gold,#D6B24A);}
.tk-due.soon{color:#e0a33a;}
.tk-due.none,.tk-due.later,.tk-due.week{color:var(--ink-faint);}
.tk-prio{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink-soft);white-space:nowrap;}
.tk-pdot{width:8px;height:8px;border-radius:50%;flex:none;}
.tk-linked{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tk-linked i{font-size:12px;color:var(--ink-faint);flex:none;}
.tk-more{background:none;border:none;color:var(--ink-faint);cursor:pointer;font-size:15px;padding:2px;border-radius:6px;flex:none;}
.tk-more:hover{color:var(--ink);background:rgba(255,255,255,.08);}
.tk-dim{color:var(--ink-faint);}
.tk-foot{display:flex;align-items:center;justify-content:space-between;font-size:11.5px;color:var(--ink-faint);padding:8px 4px 2px;border-top:0.5px solid var(--edge);margin-top:6px;flex:none;}
.tk-clear{display:inline-flex;align-items:center;gap:5px;background:none;border:none;color:var(--ink-faint);font-family:inherit;font-size:11.5px;cursor:pointer;}
.tk-clear:hover{color:#e0504a;}
.tk-empty{font-size:12.5px;color:var(--ink-faint);padding:18px 4px;}
.tk-pp-row{display:flex;gap:6px;flex-wrap:wrap;}
.tk-pp{background:rgba(255,255,255,.04);border:1px solid var(--edge);color:var(--ink-soft);font-family:inherit;font-size:12px;padding:5px 11px;border-radius:8px;cursor:pointer;}
.tk-pp.sel{color:color-mix(in srgb,var(--c,#888) 82%,#fff);background:color-mix(in srgb,var(--c,#888) 16%,transparent);border-color:color-mix(in srgb,var(--c,#888) 45%,transparent);}
.due-pop{position:fixed;z-index:9000;width:250px;background:rgba(18,20,24,.98);border:1px solid rgba(255,255,255,.12);border-radius:13px;box-shadow:0 20px 50px rgba(0,0,0,.55);padding:7px;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);}
.due-nlp{width:100%;box-sizing:border-box;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:8px;color:var(--ink);font-family:inherit;font-size:12.5px;padding:7px 9px;margin-bottom:6px;outline:none;}
.due-nlp:focus{border-color:rgba(255,255,255,.28);}
.due-nlp::placeholder{color:var(--ink-faint);}
.due-nlp-bad{animation:duenlpshake .3s;border-color:var(--ember,#D24338) !important;}
@keyframes duenlpshake{20%{transform:translateX(-4px)}40%{transform:translateX(4px)}60%{transform:translateX(-3px)}80%{transform:translateX(3px)}100%{transform:translateX(0)}}
.due-quick{display:flex;flex-direction:column;gap:1px;padding-bottom:6px;border-bottom:0.5px solid var(--edge);margin-bottom:6px;}
.due-q{display:flex;align-items:center;gap:9px;background:none;border:none;color:var(--ink);font-family:inherit;font-size:13px;padding:7px 9px;border-radius:8px;cursor:pointer;text-align:left;}
.due-q:hover{background:rgba(255,255,255,.07);}
.due-q i{font-size:15px;color:var(--ink-faint);width:16px;}
.due-cal{padding:2px 4px 4px;}
.due-calhead{display:flex;align-items:center;justify-content:space-between;font-size:12.5px;color:var(--ink);margin:2px 2px 8px;}
.due-nav{display:flex;gap:8px;color:var(--ink-faint);}
.due-nav i{cursor:pointer;font-size:15px;}
.due-nav i:hover{color:var(--ink);}
.due-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;}
.due-wd{font-size:10px;color:var(--ink-faint);text-align:center;padding:2px 0;}
.due-cell{aspect-ratio:1;display:flex;align-items:center;justify-content:center;font-size:11.5px;color:var(--ink-soft);background:none;border:none;border-radius:7px;cursor:pointer;}
.due-cell:hover{background:rgba(255,255,255,.08);color:var(--ink);}
.due-empty{cursor:default;}
.due-today{color:var(--gold,#D6B24A);font-weight:500;}
.due-sel{background:rgba(214,178,74,.25);color:var(--ink);}
/* Library full-page Tasks view (sidebar · table · overview) */
#library2.libtasks{display:flex;gap:18px;}
.libtasks .lib-side{flex:none;width:190px;}
.libtasks .lt-main{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding-right:0;}
.lt-panel{flex:1;min-height:0;display:flex;flex-direction:column;padding:22px 22px 16px;overflow:hidden;}
.lt-panel .lib-head{margin-bottom:10px;}
/* every Library page now lives in the same glass panel as Tasks (his 7/8 "same darkness" call) —
   the page bodies scroll INSIDE the panel, so they need the flex constraint the panel imposes */
.lt-panel .lib-board-grid{flex:1;min-height:0;}
.lt-panel .lib-trash-list{flex:1;min-height:0;}
.lt-panel #scr-body{flex:1;min-height:0;overflow-y:auto;padding-right:6px;}   /* v1407: the Scriptorium body never got the panel's flex constraint — it grew past the glass and the bottom clipped in windowed view (his 8/4 catch) */
.lt-over{width:268px;flex:none;padding:22px 20px;overflow-y:auto;}
.lt-over-sect{font-size:10px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 10px;}
.lt-over-sect:not(:first-child){margin-top:22px;}
.lt-ov-row{display:flex;align-items:center;justify-content:space-between;font-size:13px;color:var(--ink-soft);padding:6px 0;}
.lt-ov-row span{display:inline-flex;align-items:center;gap:8px;}
.lt-ov-row b{color:var(--ink);font-weight:500;font-variant-numeric:tabular-nums;}
.lt-ov-warn{color:#e0504a;}
.lt-add{flex:none;}
.lt-tabs{display:flex;align-items:center;gap:3px;flex-wrap:wrap;margin:6px 0 12px;}
.lt-tab{display:inline-flex;align-items:center;gap:6px;background:none;border:none;cursor:pointer;font-family:inherit;font-size:13px;color:var(--ink-faint);padding:6px 11px;border-radius:9px;transition:var(--fx-chrome);}
.lt-tab:hover{color:var(--ink-soft);background:rgba(255,255,255,.04);}
.lt-tab.on{color:var(--ink);background:rgba(214,178,74,.13);}
.lt-tab.on .tk-n{color:var(--gold,#D6B24A);background:rgba(214,178,74,.2);}
.lt-spacef{margin-left:auto;}
.lt-table{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;}
.lt-thead{display:grid;grid-template-columns:24px minmax(0,1fr) 106px 98px 90px 124px 62px 26px;gap:12px;align-items:center;padding:11px 14px;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);background:rgba(255,255,255,.025);border-bottom:0.5px solid var(--edge);border-radius:10px 10px 0 0;flex:none;}
.lt-rows{flex:1;min-height:0;overflow-y:auto;}
.lt-row{grid-template-columns:24px minmax(0,1fr) 106px 98px 90px 124px 62px 26px !important;gap:12px;padding:12px 14px;border-radius:0;border-bottom:0.5px solid rgba(255,255,255,.05);}
.lt-rows .lt-row:last-child{border-bottom:none;}
.lt-created{font-size:11.5px;color:var(--ink-faint);white-space:nowrap;}
/* Tasks-page Overview pane: 2×2 stat box · priority donut · recently completed */
.lt-ov-grid{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--edge);border-radius:13px;overflow:hidden;margin-bottom:4px;}
.lt-ov-cell{padding:13px 15px;}
.lt-ov-cell:nth-child(-n+2){border-bottom:1px solid var(--edge);}
.lt-ov-cell:nth-child(odd){border-right:1px solid var(--edge);}
.lt-ov-num{font-size:25px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums;color:var(--ink);}
.lt-ov-lbl{font-size:11px;color:var(--ink-faint);margin-top:6px;}
.lt-ov-pie{display:flex;align-items:center;gap:14px;padding:2px 0 4px;}
.lt-ov-pie svg{flex:none;width:80px;height:80px;}
.lt-ov-legend{display:flex;flex-direction:column;gap:9px;flex:1;min-width:0;}
.lt-ov-leg-row{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-soft);}
.lt-ov-dot{width:9px;height:9px;border-radius:3px;flex:none;}
.lt-ov-leg-name{white-space:nowrap;}
.lt-ov-leg-row b{color:var(--ink);font-weight:500;font-variant-numeric:tabular-nums;margin-left:2px;}
.lt-ov-leg-pct{color:var(--ink-faint);font-size:11px;}
.lt-rc{display:flex;flex-direction:column;}
.lt-rc-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:0.5px solid rgba(255,255,255,.05);}
.lt-rc-row:last-child{border-bottom:none;}
.lt-rc-check{width:19px;height:19px;border-radius:50%;background:rgba(127,192,138,.16);color:#7fc08a;display:flex;align-items:center;justify-content:center;font-size:11px;flex:none;}
.lt-rc-main{flex:1;min-width:0;}
.lt-rc-title{font-size:12.5px;color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lt-rc-date{font-size:10.5px;color:var(--ink-faint);margin-top:2px;}
.lt-rc-empty{font-size:12px;color:var(--ink-faint);padding:8px 0;}
/* Calendar tab — retrospective heatmap + daily detail */
.cal-wrap{display:grid;grid-template-columns:minmax(0,0.92fr) minmax(0,1.18fr);gap:18px;height:100%;min-height:0;}
.cal-left{min-width:0;}
.cal-head{display:flex;align-items:center;justify-content:space-between;margin:0 0 10px;}
.cal-mon{font-size:14.5px;font-weight:500;color:var(--ink);}
.cal-nav{display:flex;gap:6px;color:var(--ink-faint);}
.cal-nav i{cursor:pointer;font-size:16px;padding:2px;border-radius:5px;}
.cal-nav i:hover{color:var(--ink);background:rgba(255,255,255,.06);}
.cal-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin:0 0 4px;}
.cal-dow span{text-align:center;font-size:9.5px;color:var(--ink-faint);}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;}
.cal-blank{aspect-ratio:1;}
.cal-day{aspect-ratio:1;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:12.5px;cursor:pointer;position:relative;background-repeat:no-repeat;background-position:center;transition:transform .1s;}
.cal-day .n{position:relative;z-index:1;}
.cal-day:not(.future):hover{transform:scale(1.1);}
.cal-day.future{cursor:default;color:rgba(233,230,223,0.18);}
.cal-day.today{box-shadow:inset 0 0 0 1.5px rgba(216,189,118,0.6);}
.cal-day.sel:not(.today){box-shadow:inset 0 0 0 1px rgba(233,230,223,0.35);}
.cal-legend{display:flex;align-items:center;gap:6px;margin:14px 2px 0;font-size:10.5px;color:var(--ink-faint);}
/* the SELECTED scene pill: ember red — reads apart from both plain glass and the gold signature lift
   (scoped to [data-scene] so no other .btn.primary in the app changes) */
.btn.primary[data-scene]{
  background:color-mix(in srgb, var(--ember) 22%, transparent);
  border-color:color-mix(in srgb, var(--ember) 60%, transparent);
  color:#f2c9c2;
  box-shadow:0 0 14px color-mix(in srgb, var(--ember) 28%, transparent), inset 0 1px 0 rgba(255,255,255,.08);
}
/* signature scenes (flagship video scenes, sorted first): name-only pills with a quiet gold lift —
   warm gradient wash + gold edge + soft glow. Active state (.primary) still wins untouched. */
.btn-sig:not(.primary){
  border-color:color-mix(in srgb, var(--gold,#D6B24A) 42%, transparent);
  background:linear-gradient(180deg, rgba(214,178,74,.11), rgba(214,178,74,.03)) , rgba(255,255,255,.04);
  box-shadow:0 0 12px color-mix(in srgb, var(--gold,#D6B24A) 12%, transparent), inset 0 1px 0 rgba(255,255,255,.07);
}
.btn-sig:not(.primary):hover{
  border-color:color-mix(in srgb, var(--gold,#D6B24A) 62%, transparent);
  background:linear-gradient(180deg, rgba(214,178,74,.17), rgba(214,178,74,.05)) , rgba(255,255,255,.06);
  box-shadow:0 0 16px color-mix(in srgb, var(--gold,#D6B24A) 22%, transparent), inset 0 1px 0 rgba(255,255,255,.09);
}
/* home Daily-Workspace pane: cap cell height so a 6-week month + legend always FIT the pane (wide panes
   made aspect-ratio cells huge → the Less/More legend fell off the clipped bottom edge) */
.today-view[data-body="calendar"] .cal-day,.today-view[data-body="calendar"] .cal-blank{max-height:42px;}
.today-view[data-body="calendar"] .cal-left{min-height:0;overflow-y:auto;}
/* Library → Calendar: the same renderer, bigger */
#lib-cal{flex:1;min-height:0;}
#lib-cal .cal-day,#lib-cal .cal-blank{max-height:64px;border-radius:12px;}
#lib-cal .cal-day{font-size:14px;}
#lib-cal .cal-mon{font-size:17px;}
#lib-cal .cal-dow span{font-size:11px;}
.cal-leg{width:13px;height:13px;border-radius:50%;display:inline-block;}
.cal-detail{border-left:0.5px solid var(--edge);padding-left:18px;min-width:0;overflow-y:auto;}
.cal-dt-head{display:flex;align-items:center;gap:8px;font-size:15.5px;font-weight:500;color:var(--ink);margin:0 0 14px;}
.cal-dt-head i{font-size:16px;color:var(--ink-soft);}
.cal-stats{display:flex;gap:18px;flex-wrap:wrap;margin:0 0 16px;}
.cal-stat-n{font-size:20px;font-weight:500;line-height:1;color:var(--ink);}
.cal-stat-l{font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin-top:4px;}
.cal-cols{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;border-top:0.5px solid var(--edge);padding-top:13px;}
.cal-col-h{font-size:9.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 9px;}
.cal-item{display:flex;align-items:flex-start;gap:7px;font-size:12px;margin:0 0 8px;line-height:1.3;color:var(--ink);}
.cal-item[data-id]{cursor:pointer;}
.cal-item[data-id]:hover span{color:#fff;text-decoration:underline;}
.cal-item i{font-size:13px;margin-top:1px;flex:none;}
.cal-item span{min-width:0;overflow:hidden;}
.cal-more{font-size:11px;color:var(--ink-faint);}
.cal-empty{font-size:13px;color:var(--ink-faint);padding:10px 0;}
.h2-capchips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;flex:none;}
.h2-capchip{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.04);border:1px solid var(--edge);
  color:var(--ink-soft);font:inherit;font-size:11.5px;padding:5px 11px;border-radius:999px;cursor:pointer;transition:var(--fx-chrome);}
.h2-capchip:hover{color:var(--ink);background:rgba(255,255,255,.09);border-color:rgba(255,255,255,.18);}
.h2-capchip i{font-size:12px;}
@media (max-width:1200px){.h2-row{flex-direction:column;}.h2-col-right{width:auto;}}
#home-scroll{flex:1;overflow-y:auto;min-height:0;display:flex;flex-direction:column;position:relative;}
#stage{position:relative;flex:none;margin:8px auto 14px;max-width:1800px;width:calc(100% - 32px);}
#dock{max-width:1800px;width:calc(100% - 32px);margin-left:auto;margin-right:auto;}
#layout-controls{position:fixed;bottom:22px;right:24px;display:flex;gap:8px;z-index:60;}
.lc-pip{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:rgba(10,10,12,.30);border:1px solid rgba(255,255,255,.08);color:rgba(245,243,236,.78);
  cursor:pointer;font-size:13px;opacity:.4;
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  transition:opacity .18s ease,background .12s,border-color .12s,color .12s,transform .12s;}
.lc-pip:hover{opacity:1;color:#fff;background:rgba(10,10,12,.62);border-color:rgba(255,255,255,.22);transform:translateY(-1px);}
#layout-controls:hover .lc-pip{opacity:1;}
.lc-pip i{font-size:13px;}
.lc-pip.lc-active{color:#D6B24A;border-color:color-mix(in srgb,#D6B24A 50%,rgba(255,255,255,.08));
  background:color-mix(in srgb,#D6B24A 18%,rgba(10,10,12,.40));opacity:.85;}
.lc-pip.lc-active:hover{opacity:1;background:color-mix(in srgb,#D6B24A 26%,rgba(10,10,12,.55));}
.widget.locked .w-head{cursor:default;}
.widget.locked .w-resize{opacity:0;pointer-events:none;}
.widget.unlocked{outline:1px dashed rgba(255,255,255,.10);outline-offset:-2px;}
.widget.unlocked:hover{outline-color:color-mix(in srgb,#D6B24A 38%,rgba(255,255,255,.18));}
.widget.unlocked .w-head{cursor:grab;}
.widget.unlocked.dragging{outline-color:color-mix(in srgb,#D6B24A 70%,transparent);outline-style:solid;z-index:30;}
.widget.unlocked.dragging .w-head{cursor:grabbing;}
.widget.unlocked.drop-blocked{outline:1.5px solid color-mix(in srgb,#D24338 60%,transparent);}
.widget.unlocked .w-resize{opacity:1;}
.widget{position:absolute;display:flex;flex-direction:column;min-width:180px;min-height:90px;}
.w-head{
  display:flex;align-items:center;gap:8px;padding:11px 14px 4px;cursor:grab;flex:none;
  font-size:13px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink);user-select:none;
}
.w-head i{font-size:14px;}
.w-body{flex:1;padding:4px 14px 12px;min-height:0;overflow:hidden;}
.w-resize{
  position:absolute;right:2px;bottom:2px;width:18px;height:18px;cursor:nwse-resize;
  display:flex;align-items:center;justify-content:center;color:var(--ink-faint);font-size:12px;opacity:0;transition:opacity .15s;
}
.widget:hover .w-resize{opacity:1;}
.widget.dragging{box-shadow:0 24px 50px rgba(0,0,0,.45);}

/* graph */
#graph-canvas{width:100%;height:100%;display:block;cursor:pointer;}

/* capture + inbox */
.cap-row{display:flex;align-items:center;gap:9px;background:rgba(214,178,74,.08);border:1px solid rgba(214,178,74,.55);border-radius:12px;padding:8px 12px;transition:border-color .18s ease, box-shadow .18s ease, background .18s ease;}
.cap-row:focus-within{border-color:rgba(214,178,74,.9);background:rgba(214,178,74,.12);box-shadow:0 0 0 3px rgba(214,178,74,.15);}
.cap-row input,.cap-row textarea{flex:1;background:transparent;border:none;outline:none;color:var(--ink);font-size:14px;font-family:inherit;resize:none;line-height:1.5;max-height:120px;overflow-y:auto;}
.cap-row input::placeholder,.cap-row textarea::placeholder{color:var(--ink-faint);}
.cap-row i{color:var(--ink-faint);}
/* Today pane = Quick Capture + Today's Focus */
.h2-today .today-sub{border:1px solid var(--edge);border-radius:14px;padding:11px 12px 12px;flex:none;}
.h2-today .today-sub .w-body{flex:none;padding:0;overflow:visible;}
.h2-today .today-sublabel{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:600;color:var(--ink);margin-bottom:9px;}
.h2-today .today-sublabel i{font-size:15px;color:var(--ink-soft);}
.h2-today .today-div{height:1px;background:var(--edge);margin:12px 2px;flex:none;}
.h2-today .today-foc-body{flex:1;min-height:0;display:flex;flex-direction:column;padding:0;overflow:hidden;}
.h2-today #focus-list{flex:0 1 auto;min-height:0;overflow-y:auto;}
.inbox-list{margin-top:8px;overflow-y:auto;flex:1;min-height:0;}
/* Quick Capture fills its tab to the bottom (input pinned at top, filed items fill/scroll below) */
.today-view[data-body="capture"]:not([hidden]){display:flex;flex-direction:column;}
.today-view[data-body="capture"] .cap-row{flex:none;}
.inbox-card{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:10px;margin-bottom:6px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.09);font-size:13px;}
.inbox-card{align-items:flex-start;}
.inbox-card span{flex:1;white-space:normal;line-height:1.5;word-break:break-word;}
.inbox-card select{background:rgba(255,255,255,.1);border:1px solid var(--edge);border-radius:7px;color:var(--ink-soft);font-size:11px;padding:2px 4px;outline:none;}
.inbox-card select option{color:#1a261d;}
.inbox-card .del{cursor:pointer;color:var(--ink-faint);font-size:14px;align-self:center;opacity:0;transition:opacity .14s,color .14s;}
.inbox-card:hover .del{opacity:.8;}
.inbox-card .del:hover{opacity:1;color:#f09595;}

/* recent */
.note-row{display:flex;align-items:center;gap:9px;padding:7px 2px;border-bottom:1px solid rgba(255,255,255,.07);cursor:pointer;border-radius:8px;}
.note-row:hover{background:rgba(255,255,255,.06);}
.note-row:last-child{border-bottom:none;}
.note-dot{width:9px;height:9px;border-radius:50%;flex:none;border:1.5px solid rgba(255,255,255,.9);box-shadow:0 0 4px color-mix(in srgb, currentColor 60%, transparent);}
.note-title{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.note-when{font-size:11px;color:var(--ink-faint);margin-left:auto;flex:none;}

/* focus */
.task{display:flex;align-items:center;gap:9px;font-size:13.5px;padding:5px 2px;border-radius:8px;}
.task:hover{background:rgba(255,255,255,.05);}
.task .box{width:17px;height:17px;border-radius:6px;border:1.5px solid rgba(255,255,255,.45);flex:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:11px;color:#0a140f;transition:var(--fx-chrome);}
body.light .task .box{border-color:rgba(22,36,27,.45);}
.task.done .box{background:var(--accent);border-color:var(--accent);}
.task.done span{opacity:.55;text-decoration:line-through;}
.task .del{margin-left:auto;cursor:pointer;color:var(--ink-faint);font-size:13px;opacity:0;}
.task:hover .del{opacity:1;}
.task input{flex:1;background:transparent;border:none;outline:none;color:var(--ink);font-size:13.5px;font-family:inherit;}
.task input::placeholder{color:var(--ink-faint);}

/* stats */
.stats-grid{display:flex;gap:10px;height:100%;}
.stat{flex:1;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:13px;padding:10px 12px;display:flex;flex-direction:column;justify-content:center;}
.stat b{font-size:24px;font-weight:600;}
.stat small{font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink);margin-top:2px;}

/* launcher */
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:12px;align-content:flex-start;height:100%;overflow-y:auto;padding:16px 8px 18px 4px;}
.tile{
  --key:var(--accent);
  position:relative;min-width:0;height:50px;border-radius:11px;cursor:pointer;
  /* REAL glass (v905): the scene shows through blurred; the key color is light POOLING inside
     the pane from below, not paint. The old ~85% opaque slab read as dull plastic. */
  background:
    radial-gradient(85% 105% at 50% 118%, color-mix(in srgb, var(--key) 36%, transparent), color-mix(in srgb, var(--key) 11%, transparent) 55%, rgba(0,0,0,0) 78%),
    linear-gradient(165deg, rgba(255,255,255,.13), rgba(255,255,255,.04) 40%, rgba(10,11,15,.10) 62%, rgba(8,9,12,.26));
  -webkit-backdrop-filter:blur(18px) saturate(1.45);
  backdrop-filter:blur(18px) saturate(1.45);
  border:1px solid color-mix(in srgb, var(--key) 30%, rgba(255,255,255,.22));
  box-shadow:
    0 6px 18px rgba(0,0,0,.32),
    inset 0 1px 0 rgba(255,255,255,.28),
    inset 0 -1px 0 color-mix(in srgb, var(--key) 34%, rgba(255,255,255,.06)),
    inset 0 -8px 18px color-mix(in srgb, var(--key) 20%, transparent);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  overflow:hidden;   /* clips the press ripple to the glass */
  transition:transform .22s cubic-bezier(.2,.7,.3,1), box-shadow .3s ease, background .3s ease, border-color .3s ease;
}
.tile::before{
  /* the specular sheen — one diagonal catch of light across the top face; brightens on hover */
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(118deg, rgba(255,255,255,.20), rgba(255,255,255,.055) 26%, rgba(255,255,255,0) 44%);
  opacity:.8;transition:opacity .3s ease;
}
.tile:hover::before{opacity:1;}
.tile:hover{
  transform:translateY(-2px) scale(1.02);
  background:
    radial-gradient(92% 115% at 50% 118%, color-mix(in srgb, var(--key) 50%, transparent), color-mix(in srgb, var(--key) 17%, transparent) 58%, rgba(0,0,0,0) 80%),
    linear-gradient(165deg, rgba(255,255,255,.18), rgba(255,255,255,.06) 40%, rgba(10,11,15,.08) 62%, rgba(8,9,12,.22));
  border-color:color-mix(in srgb, var(--key) 46%, rgba(255,255,255,.30));
  box-shadow:
    0 10px 26px rgba(0,0,0,.38),
    0 0 20px color-mix(in srgb, var(--key) 24%, transparent),
    inset 0 1px 0 rgba(255,255,255,.34),
    inset 0 -1px 0 color-mix(in srgb, var(--key) 46%, rgba(255,255,255,.08)),
    inset 0 -8px 20px color-mix(in srgb, var(--key) 28%, transparent);
}
.tile i{
  color:color-mix(in srgb, var(--key) 30%, #ffffff);
  filter:drop-shadow(0 0 7px var(--key)) drop-shadow(0 0 18px color-mix(in srgb, var(--key) 75%, transparent));
  transition:transform .22s cubic-bezier(.2,.7,.3,1), filter .3s ease;
}
.tile:hover i{
  transform:translateY(-.5px) scale(1.06);
  filter:drop-shadow(0 0 9px var(--key)) drop-shadow(0 0 24px color-mix(in srgb, var(--key) 90%, transparent));
}
/* pressed glass: the whole tile settles back under the finger, fast in, eased out by the base transition */
.tile:active{transform:translateY(0) scale(.985);transition-duration:.09s;}
.tile:active i{transform:scale(1);transition-duration:.09s;}
/* the click ripple — a soft bloom of the tile's own key light, screen-blended like light inside glass */
.tile .tl-ripple{
  position:absolute;left:var(--rx);top:var(--ry);width:120px;height:120px;margin:-60px 0 0 -60px;
  display:block;border-radius:50%;pointer-events:none;mix-blend-mode:screen;
  background:radial-gradient(circle, color-mix(in srgb, var(--key) 55%, rgba(255,255,255,.6)) 0%, color-mix(in srgb, var(--key) 32%, transparent) 44%, rgba(0,0,0,0) 72%);
  transform:scale(.15);opacity:.85;
  animation:tl-ripple .55s cubic-bezier(.22,.61,.36,1) forwards;
}
@keyframes tl-ripple{to{transform:scale(1.65);opacity:0;}}
.tile span{text-shadow:0 0 8px color-mix(in srgb, var(--key) 35%, transparent);}
.tile i{font-size:18px;width:22px;height:22px;display:flex;align-items:center;justify-content:center;}
.tile span{font-size:10px;color:var(--ink);max-width:calc(100% - 4px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* per-tile hover pencil removed — editing lives behind the Customize link */
.tile.add{border-style:dashed;background:rgba(255,255,255,.03);color:var(--ink-faint);box-shadow:none;}
.tile.add::before{display:none;}   /* the ghost Add slot is not glass — no sheen */
.tile.add i{color:var(--ink-faint);filter:none;}
/* Launch Deck "Customize" footer + edit mode (replaces the +Add tile and the hover pencil) */
.deckfoot{display:flex;align-items:center;padding:7px 12px 2px;}
.customize{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-faint);background:none;border:none;cursor:pointer;padding:2px;border-radius:6px;font-family:inherit;}
.customize:hover{color:var(--ink);}
.customize i{font-size:14px;}
.tiles.editing .tile:not(.add){outline:1.5px dashed rgba(255,255,255,.26);outline-offset:2px;}
.tiles.editing .tile:not(.add)::after{content:"Edit";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:10px;letter-spacing:.04em;color:#fff;background:rgba(8,9,12,.55);border-radius:11px;opacity:0;transition:opacity .12s;}
.tiles.editing .tile:not(.add):hover::after{opacity:1;}

/* ---------- space page ---------- */
#space-view{flex:1;display:flex;flex-direction:column;padding:6px 28px 24px;min-height:0;}
.sv-head{display:flex;align-items:center;gap:18px;margin:10px 2px 18px;min-height:64px;}
.sv-head h1{font-size:30px;font-weight:600;flex:none;}
.sv-head .sv-stats{flex:1 1 auto;min-width:0;}
.article-grid{display:grid;grid-template-columns:repeat(auto-fill,260px);gap:14px;overflow-y:auto;padding:4px 2px 20px;align-content:start;justify-content:start;}
.article-btn{
  position:relative;
  width:260px;height:220px;flex:none;
  padding:0;border-radius:18px;cursor:pointer;overflow:hidden;
  transition:transform .14s ease;
  isolation:isolate;
}
.article-btn:hover{transform:translateY(-2px);}
.article-btn:hover .card-cover{transform:scale(1.025);}
.card-cover,.card-cover-placeholder{position:absolute;inset:0;width:100%;height:100%;display:block;border:0;}
.card-cover{object-fit:cover;object-position:center;transition:transform .35s ease;}
.card-cover-placeholder{background:linear-gradient(135deg,rgba(255,255,255,.05),rgba(255,255,255,.10));}
.card-grad{position:absolute;left:0;right:0;bottom:0;height:62%;pointer-events:none;z-index:1;
  background:linear-gradient(to top, rgba(0,0,0,.82) 0%, rgba(0,0,0,.55) 38%, rgba(0,0,0,.20) 72%, rgba(0,0,0,0) 100%);}
.article-btn:not(.has-cover) .card-grad{
  background:linear-gradient(to top, rgba(0,0,0,.55) 0%, rgba(0,0,0,.25) 50%, rgba(0,0,0,0) 100%);}
.card-top{position:absolute;top:12px;left:12px;right:12px;display:flex;align-items:center;justify-content:space-between;z-index:3;pointer-events:none;}
.card-status-dot{width:10px;height:10px;border-radius:50%;background:var(--st);
  box-shadow:0 0 6px color-mix(in srgb,var(--st) 70%,transparent), 0 0 0 1px rgba(0,0,0,.45);flex:none;}
.card-menu{pointer-events:auto;cursor:pointer;color:rgba(245,243,236,.92);font-size:15px;
  width:26px;height:26px;border-radius:7px;
  background:rgba(10,10,12,.42);display:flex;align-items:center;justify-content:center;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  transition:background .12s,color .12s;}
.card-menu:hover{background:rgba(10,10,12,.72);color:#fff;}
.card-bot{position:absolute;left:16px;right:16px;bottom:14px;z-index:2;display:flex;flex-direction:column;gap:5px;min-width:0;}
.card-bot h3{
  font-size:15.5px;font-weight:600;line-height:1.3;color:#f4f1e8;margin:0;
  text-shadow:0 1px 4px rgba(0,0,0,.55);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;text-overflow:ellipsis;word-break:break-word;
}
.card-bot .meta{font-size:11.5px;color:rgba(240,236,228,.80);
  text-shadow:0 1px 3px rgba(0,0,0,.5);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.article-btn.new{display:flex;flex-direction:column;align-items:center;justify-content:center;
  border-style:dashed;color:var(--ink-soft);background:rgba(255,255,255,.03);gap:10px;}
.article-btn.new i{font-size:22px;}
.sv-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:14px;padding-right:6px;}
.sv-scroll > .sv-section[data-section="all"]{margin-top:18px;}
.sv-section{flex:none;}
.sv-section[hidden]{display:none !important;}
.sv-bucket-head{display:flex;align-items:center;gap:12px;margin:0 2px 12px;flex-wrap:wrap;}
.sv-bucket-title{font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);}
.sv-bucket-count{font-size:11px;color:var(--ink-faint);font-variant-numeric:tabular-nums;}
.sv-bucket .article-grid{padding:0 2px;}
.sv-tabs{display:flex;gap:6px;margin-left:8px;}
.sv-tab{background:transparent;border:1px solid var(--edge);color:var(--ink-soft);font-size:12px;font-weight:500;
  padding:6px 13px;border-radius:999px;cursor:pointer;font-family:inherit;letter-spacing:.02em;
  transition:background .12s,border-color .12s,color .12s;}
.sv-tab:hover{background:rgba(255,255,255,.05);color:var(--ink);}
.sv-tab.on{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.20);color:var(--ink);}
.sv-search{margin-left:auto;display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.04);
  border:1px solid var(--edge);border-radius:999px;padding:6px 14px;min-width:240px;
  transition:border-color .12s,background .12s;}
.sv-search:focus-within{border-color:rgba(255,255,255,.20);background:rgba(255,255,255,.07);}
.sv-search i{font-size:14px;color:var(--ink-faint);flex:none;}
.sv-search input{background:transparent;border:0;outline:0;color:var(--ink);font-size:12.5px;font-family:inherit;width:100%;}
.sv-search input::placeholder{color:var(--ink-faint);}
.sv-status-pills{display:flex;gap:6px;flex-wrap:wrap;margin:-4px 2px 14px;}
.sv-status-pill{display:inline-flex;align-items:center;gap:7px;background:transparent;border:1px solid var(--edge);
  color:var(--ink-soft);font-size:12px;font-weight:500;padding:5px 11px;border-radius:999px;cursor:pointer;
  font-family:inherit;letter-spacing:.02em;transition:background .12s,border-color .12s,color .12s;}
.sv-status-pill:hover{color:var(--ink);background:rgba(255,255,255,.05);}
.sv-status-pill.on{background:color-mix(in srgb,var(--st) 12%,rgba(255,255,255,.04));
  border-color:color-mix(in srgb,var(--st) 45%,var(--edge));color:var(--ink);}
.sv-status-pill-dot{width:7px;height:7px;border-radius:50%;background:var(--st);
  box-shadow:0 0 5px color-mix(in srgb,var(--st) 60%,transparent);flex:none;}
.sv-status-pill i{font-size:12px;color:var(--st);flex:none;}
.sv-status-pill-count{font-size:10.5px;color:var(--ink-faint);background:rgba(255,255,255,.07);
  border:1px solid var(--edge);padding:1px 7px;border-radius:999px;font-variant-numeric:tabular-nums;}
.sv-status-pill.on .sv-status-pill-count{background:color-mix(in srgb,var(--st) 18%,rgba(255,255,255,.07));
  border-color:color-mix(in srgb,var(--st) 40%,var(--edge));}
.sv-empty{font-size:13px;color:var(--ink-faint);padding:36px 4px;text-align:center;letter-spacing:.02em;}
/* workflow summary bar (collapsed default; expands to columns) */
.sv-wf-bar{display:flex;align-items:center;gap:20px;padding:14px 22px;border-radius:16px;}
.sv-wf-label{display:flex;align-items:center;gap:9px;font-size:11px;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-soft);flex:none;}
.sv-wf-accent{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 7px var(--accent);}
.sv-wf-stats{display:flex;align-items:center;gap:30px;flex:1;min-width:0;overflow:hidden;flex-wrap:wrap;}
.sv-wfs{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft);}
.sv-wfs i{font-size:14px;color:var(--st);flex:none;}
.sv-wfs-label{white-space:nowrap;}
.sv-wfs-count{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums;}
.sv-wf-toggle{margin-left:auto;display:flex;align-items:center;gap:7px;background:transparent;border:0;cursor:pointer;
  color:var(--ink-soft);font:inherit;font-size:13px;flex:none;transition:color .12s;}
.sv-wf-toggle:hover{color:var(--ink);}
.sv-wf-toggle i{font-size:15px;transition:transform .16s ease;}
.sv-wf-section:not(.wf-collapsed) .sv-wf-toggle i{transform:rotate(180deg);}
.sv-workflow[hidden]{display:none;}
.sv-wf-section .sv-workflow{margin-top:12px;}
.sv-stats-full{margin:10px 2px 14px;}
/* ---------- stats strip ---------- */
.sv-stats{display:flex;gap:10px;padding:13px 20px;border-radius:16px;align-items:center;}
.sv-stat{display:flex;align-items:center;gap:11px;flex:1;min-width:0;position:relative;}
.sv-stat + .sv-stat{border-left:1px solid var(--edge);padding-left:18px;}
.sv-stat > i{font-size:18px;color:var(--sc,var(--ink-soft));flex:none;
  filter:drop-shadow(0 0 4px color-mix(in srgb,var(--sc,transparent) 38%,transparent));
  transition:filter .2s,color .2s;}
.sv-stat.s-time > i{filter:none;color:var(--ink-soft);}
.sv-stat-val{font-size:18px;font-weight:500;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.1;white-space:nowrap;}
.sv-stat-lbl{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);margin-top:3px;white-space:nowrap;}
/* ---------- Current Focus + Activity hero ---------- */
.sv-hero{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:16px;align-items:stretch;}
@media (max-width:1100px){.sv-hero{grid-template-columns:1fr;}}
.sv-focus{display:flex;align-items:stretch;border-radius:20px;overflow:hidden;min-height:300px;position:relative;
  border-top:2px solid color-mix(in srgb,var(--st,var(--ink-faint)) 60%,transparent);isolation:isolate;}
.sv-focus-body{position:relative;z-index:2;flex:1;padding:26px 30px 24px;display:flex;flex-direction:column;gap:12px;min-width:0;}
.sv-focus.has-cover .sv-focus-body{max-width:58%;}
@media (max-width:1400px){.sv-focus.has-cover .sv-focus-body{max-width:64%;}}
@media (max-width:1200px){.sv-focus.has-cover .sv-focus-body{max-width:70%;}}
.sv-focus-eyebrow{display:flex;align-items:center;gap:8px;font-size:10.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:color-mix(in srgb,var(--st,var(--ink-soft)) 80%,var(--ink-soft));}
.sv-focus-eyebrow i{font-size:13px;}
.sv-focus-tools{position:absolute;top:16px;right:18px;z-index:3;display:flex;align-items:center;gap:7px;}
.sv-focus-pin{background:rgba(10,10,12,.42);border:1px solid rgba(255,255,255,.10);color:rgba(245,243,236,.92);
  width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:var(--fx-chrome);}
.sv-focus-pin:hover{background:rgba(10,10,12,.72);color:#fff;}
.sv-focus-pinned{color:var(--st);border-color:color-mix(in srgb,var(--st) 55%,rgba(0,0,0,.4));
  background:color-mix(in srgb,var(--st) 18%,rgba(10,10,12,.5));}
.sv-focus-menu{cursor:pointer;color:rgba(245,243,236,.92);font-size:15px;width:32px;height:32px;border-radius:9px;
  background:rgba(10,10,12,.42);display:flex;align-items:center;justify-content:center;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,.10);transition:background .12s,color .12s;}
.sv-focus-menu:hover{background:rgba(10,10,12,.72);color:#fff;}
.sv-focus-title{font-size:34px;font-weight:600;line-height:1.12;color:var(--ink);margin:0;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;word-break:break-word;}
.sv-focus-status-pill{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;font-weight:500;letter-spacing:.04em;
  color:color-mix(in srgb,var(--st) 80%,#fff);
  background:color-mix(in srgb,var(--st) 14%,rgba(10,10,12,.3));
  border:1px solid color-mix(in srgb,var(--st) 38%,rgba(255,255,255,.06));
  padding:4px 10px;border-radius:999px;align-self:flex-start;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);}
.sv-focus-dot{width:8px;height:8px;border-radius:50%;background:var(--st);box-shadow:0 0 6px color-mix(in srgb,var(--st) 60%,transparent);}
.sv-focus-stats{display:flex;gap:36px;margin-top:auto;padding-top:8px;flex-wrap:wrap;}
.sv-focus-stat{display:flex;flex-direction:column;gap:5px;min-width:0;}
.sfs-val{font-size:26px;font-weight:600;color:var(--ink);line-height:1;font-variant-numeric:tabular-nums;
  text-shadow:0 1px 4px rgba(0,0,0,.5);white-space:nowrap;}
.sfs-lbl{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);}
.sv-focus-cta{margin-top:14px;align-self:flex-start;display:flex;align-items:center;gap:10px;
  background:color-mix(in srgb,var(--st) 22%,transparent);border:1px solid color-mix(in srgb,var(--st) 50%,transparent);
  color:color-mix(in srgb,var(--st) 82%,#fff);font-size:13.5px;font-weight:500;padding:10px 22px;border-radius:10px;cursor:pointer;
  transition:var(--fx-chrome);font-family:inherit;}
.sv-focus-cta:hover{background:color-mix(in srgb,var(--st) 34%,transparent);transform:translateY(-1px);}
.sv-focus-cta i{font-size:14px;}
.sv-focus-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block;z-index:0;}
.sv-focus-grad{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    linear-gradient(to right, rgba(8,10,12,.92) 0%, rgba(8,10,12,.74) 32%, rgba(8,10,12,.38) 58%, rgba(8,10,12,.05) 100%),
    linear-gradient(to top, rgba(0,0,0,.30) 0%, rgba(0,0,0,0) 55%);}
.sv-focus-empty .sv-focus-title{color:var(--ink-faint);font-size:20px;font-weight:500;}
.sv-focus-sub{font-size:13px;color:var(--ink-faint);margin-top:6px;}
.sv-activity{padding:18px 18px 14px;border-radius:18px;display:flex;flex-direction:column;min-height:300px;max-height:340px;}
.sv-activity-head{display:flex;align-items:center;gap:8px;margin-bottom:14px;font-size:10.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);}
.sv-activity-head i{font-size:13px;color:var(--ember,#D24338);}
.sv-activity-list{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;}
.act-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;cursor:pointer;border-left:2px solid color-mix(in srgb,var(--st) 50%,transparent);background:rgba(255,255,255,.03);transition:background .12s,transform .1s;}
.act-row:hover{background:rgba(255,255,255,.08);transform:translateX(1px);}
.act-row > i{font-size:14px;color:var(--ink-soft);flex:none;}
.act-row-body{flex:1;min-width:0;}
.act-row-title{font-size:12.5px;font-weight:500;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.act-row-sub{font-size:10.5px;color:var(--ink-faint);margin-top:2px;}
.act-empty{font-size:12px;color:var(--ink-faint);text-align:center;padding:20px 0;}

/* ---------- workflow columns ---------- */
.sv-workflow{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;padding:0 2px;align-items:stretch;}
.sv-workflow[hidden]{display:none;}
.wf-col{display:flex;flex-direction:column;border-radius:16px;padding:0;overflow:hidden;height:100%;
  border-top:2px solid color-mix(in srgb,var(--st) 70%,transparent);transition:background .12s;}
.wf-col.wf-over{background:color-mix(in srgb,var(--st) 10%,rgba(255,255,255,.06));}
.wf-col-head{display:flex;align-items:center;gap:8px;padding:12px 14px 10px;font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft);flex:none;}
.wf-col-head .wf-dot{width:8px;height:8px;border-radius:50%;background:var(--st);box-shadow:0 0 6px color-mix(in srgb,var(--st) 70%,transparent);flex:none;}
.wf-col-head i{font-size:13px;color:var(--st);flex:none;}
.wf-col-head .wf-title{flex:1;min-width:0;color:var(--ink);}
.wf-col-head .wf-count{font-size:11px;color:var(--ink-faint);font-variant-numeric:tabular-nums;background:rgba(255,255,255,.07);border:1px solid var(--edge);padding:2px 8px;border-radius:999px;letter-spacing:0;text-transform:none;}
.wf-list{display:flex;flex-direction:column;gap:8px;padding:0 10px 4px;overflow-y:auto;min-height:0;flex:1;max-height:200px;}
.wf-empty{font-size:11px;color:var(--ink-faint);text-align:center;padding:14px 6px 6px;}
.wf-add{display:flex;align-items:center;justify-content:center;gap:7px;margin:6px 10px 10px;padding:9px 10px;border-radius:10px;cursor:pointer;
  font-size:12px;font-weight:500;letter-spacing:.02em;
  color:color-mix(in srgb,var(--st) 70%,var(--ink-soft));
  background:color-mix(in srgb,var(--st) 7%,rgba(255,255,255,.02));
  border:1px dashed color-mix(in srgb,var(--st) 32%,var(--edge));
  transition:background .12s,border-color .12s,color .12s,transform .1s;flex:none;}
.wf-add:hover{background:color-mix(in srgb,var(--st) 15%,rgba(255,255,255,.05));
  border-color:color-mix(in srgb,var(--st) 60%,var(--edge));
  color:color-mix(in srgb,var(--st) 85%,#fff);transform:translateY(-1px);}
.wf-add i{font-size:13px;}
.wf-add.wf-view-all{border-style:solid;}
.wf-card{position:relative;display:flex;align-items:center;gap:9px;border-radius:11px;padding:9px 11px;cursor:pointer;
  border-left:2px solid color-mix(in srgb,var(--st) 60%,transparent);transition:transform .1s,background .15s,border-color .15s;}
.wf-card:hover{transform:translateY(-1px);border-left-color:var(--st);}
.wf-card.wf-dragging{opacity:.35;}
.wf-card-dot{width:7px;height:7px;border-radius:50%;background:var(--st);box-shadow:0 0 5px color-mix(in srgb,var(--st) 70%,transparent);flex:none;}
.wf-card-title{flex:1;min-width:0;font-size:12.5px;font-weight:500;color:var(--ink);line-height:1.3;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;word-break:break-word;}
.wf-card-menu{cursor:pointer;font-size:13px;color:var(--ink-faint);padding:2px;border-radius:4px;flex:none;}
.wf-card-menu:hover{color:var(--ink);background:rgba(255,255,255,.08);}
@media (max-width:900px){.sv-workflow{grid-template-columns:repeat(2,minmax(0,1fr));}}

/* ---------- editor ---------- */
#editor{flex:1;display:flex;flex-direction:column;padding:6px 28px 18px;min-height:0;}
.ed-bar{display:flex;align-items:center;gap:10px;flex:none;padding:4px 2px 10px;position:relative;}
.bd-header{display:flex;align-items:center;gap:12px;flex:none;padding:12px 20px;margin-bottom:12px;border-radius:16px;}
.bd-head-sep{color:var(--ink-faint);font-size:17px;line-height:1;flex:none;}
.bd-title-input{flex:1;min-width:0;background:transparent;border:none;outline:none;color:var(--ink);font-size:25px;font-weight:700;letter-spacing:-.01em;font-family:inherit;}
.bd-title-input::placeholder{color:var(--ink-faint);}
.ed-crumb{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft);cursor:pointer;flex:1;min-width:0;}
.ed-crumb:hover{color:var(--ink);}
/* sub-pages header chip (his A pick, 7/12) — present only when the page has children; gold whisper, not furniture */
/* .crumb-subs — the breadcrumb sub-page chip — removed v1418 (his call: the right
   panel's Sub-pages tab already carries the count and the list). */
/* sub-pages shelf-tab count badge (his C pick) */
/* PAGE-TYPE GLYPH (his 7/12 grammar: gold ◫ n = has children · soft-green board glyph = whiteboard) —
   rides inline before the title on space cards, workflow cards, focus cards; quiet, never glowing */
.pt-ic{font-size:.82em;color:#7BAF85;opacity:.92;margin-right:6px;vertical-align:-1px;flex:none;}
/* Library sub-page count — the gold ◫ n grammar in card meta + list-row titles */
.lib-kids{color:var(--gold,#D6B24A);opacity:.92;white-space:nowrap;}
.lib-kids .ti{font-size:11px;margin-right:2px;vertical-align:-1px;}
/* paired sub-pages (his 7/12 pick): parent's ◫ n becomes a chevron toggle; children render
   in place beneath, marked with a soft gold inset. Collapsed = the page alone, by default. */
.lib-kids-tgl{cursor:pointer;padding:1px 6px;margin:-1px -4px;border-radius:999px;transition:background .15s;}
.lib-kids-tgl:hover{background:rgba(214,178,74,.14);}
.lib-kids-tgl .ti-chevron-right,.lib-kids-tgl .ti-chevron-down{margin-left:3px;margin-right:0;opacity:.8;}
.lib-card-child{box-shadow:inset 3px 0 0 rgba(214,178,74,.45);}
.lib-lrow-child{padding-left:30px;box-shadow:inset 3px 0 0 rgba(214,178,74,.45);}
/* "I AM a sub-page" — ↳ parent-title line on the child's own Library card/row (the only surface
   where a sub-page gets its own card). Muted, not gold — gold = has children, ↳ = is a child. */
.lib-parent{display:flex;align-items:center;gap:4px;font-size:11.5px;color:var(--ink-soft);opacity:.85;margin:1px 0 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lib-parent .ti{font-size:12px;flex:none;opacity:.8;}
.lib-lr-sub .lib-parent{display:inline-flex;margin:0;vertical-align:-1px;}
/* count rides the label line ("Sub-pages 1", double digits fit) — slightly lifted for visibility, no glow */
.shelf-tab .tab-n{display:inline-block;margin-left:5px;background:rgba(214,178,74,.24);color:#E6CB74;border-radius:999px;font-size:10px;padding:0 5.5px;line-height:1.55;vertical-align:top;}
.shelf-tab span{white-space:nowrap;}
.ed-meta{margin-left:auto;font-size:11.5px;color:var(--ink-faint);display:flex;align-items:center;gap:10px;}
.ed-tools{display:flex;align-items:center;gap:2px;flex:none;padding:5px 6px;margin:8px 0 14px;border-radius:12px;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);align-self:flex-start;position:relative;z-index:8;flex-wrap:wrap;}
.tb{
  width:32px;height:32px;border-radius:9px;border:none;cursor:pointer;font-size:16px;
  background:transparent;color:var(--ink);display:flex;align-items:center;justify-content:center;
  position:relative;
}
.tb:hover::after{
  content:attr(data-tip);position:absolute;top:calc(100% + 10px);left:50%;transform:translateX(-50%);
  background:rgba(8,15,11,.96);color:#f2f8f4;font-size:12px;font-weight:500;padding:5px 11px;
  border-radius:8px;border:1px solid rgba(255,255,255,.18);white-space:nowrap;z-index:30;pointer-events:none;
}
.tb:hover{background:rgba(255,255,255,.12);color:var(--ink);}
.tb.on{background:color-mix(in srgb, var(--accent) 18%, transparent);color:var(--accent);}
.tb-sep{width:1px;height:20px;background:var(--edge);margin:0 4px;}
#ed-main{flex:1;display:flex;flex-direction:column;min-height:0;padding:26px 30px;overflow:hidden;}
/* optional cinematic cover header — bleeds to the glass edges, title/subtitle bottom-left */
.ed-cover-header{position:relative;flex:none;height:200px;margin:-26px -30px 16px;overflow:hidden;
  border-radius:18px 18px 0 0;display:flex;align-items:flex-end;}
.ed-cover-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block;}
.ed-cover-body{position:relative;z-index:2;width:100%;padding:0 30px 20px;}
.ed-cover-body .ed-title-block{display:block;}
.ed-cover-header #ed-title{color:#F4F1E8;margin-bottom:6px;text-shadow:0 2px 12px rgba(0,0,0,.55);}
.ed-cover-header #ed-title::placeholder{color:rgba(244,241,232,.55);}
.ed-cover-header #ed-subtitle{color:rgba(244,241,232,.86);text-shadow:0 1px 8px rgba(0,0,0,.55);}
.ed-cover-header #ed-subtitle::placeholder{color:rgba(244,241,232,.5);}
#ed-title{
  background:transparent;border:none;outline:none;color:var(--ink);width:100%;
  font-size:30px;font-weight:600;font-family:var(--editor-font);margin-bottom:10px;flex:none;line-height:1.2;
}
#ed-title::placeholder{color:var(--ink-faint);}
#ed-subtitle{display:block;width:100%;background:transparent;border:0;outline:0;font-family:var(--editor-font);
  font-size:18px;color:var(--ink-soft);font-weight:400;padding:0;margin:0;line-height:1.45;letter-spacing:.005em;
  max-height:0;opacity:0;overflow:hidden;
  transition:max-height .22s ease, opacity .15s ease, margin .15s ease;}
#ed-subtitle::placeholder{color:var(--ink-faint);font-style:italic;}
/* wrapper that keeps hover state alive across both title + subtitle */
.ed-title-block{display:block;}
/* show when there's content, while focused, or while the title block is hovered */
#ed-subtitle:not(:placeholder-shown),
#ed-subtitle:focus,
.ed-title-block:hover #ed-subtitle:placeholder-shown,
.ed-title-block:focus-within #ed-subtitle:placeholder-shown{
  max-height:60px;opacity:1;margin:0 0 10px;
}
#ed-text{
  flex:1;border:none;outline:none;color:var(--ink);overflow-y:auto;
  /* never a horizontal rail: overflow-y alone computes overflow-x:auto, and WKWebView conjures
     phantom sideways overflow (content is width-capped — see the v794 harness) */
  overflow-x:hidden;overflow-wrap:break-word;
  font-size:var(--ed-size,15px);line-height:1.8;font-family:var(--editor-font);min-height:0;
  caret-color:var(--ink);
  /* v1186 (his "scroll rail hugs the content, there's space on the right"): pull the scroll rail out
     to the panel's right edge and pad the content back in, so the bar rides the empty margin, not the text. */
  margin-right:-24px;padding-right:24px;
}
#ed-text:empty::before{content:attr(data-ph);color:var(--ink-faint);}
/* floating selection toolbar */
.float-bar{position:fixed;z-index:120;display:flex;align-items:center;gap:2px;padding:5px 6px;border-radius:11px;
  box-shadow:0 10px 30px rgba(0,0,0,.5);animation:fb-in .12s ease;}
@keyframes fb-in{from{opacity:0;transform:translateY(3px);}to{opacity:1;transform:translateY(0);}}
.float-bar button{width:32px;height:32px;border:0;background:transparent;color:var(--ink-soft);border-radius:8px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;font-size:16px;transition:background .12s,color .12s;}
.float-bar button:hover{background:rgba(255,255,255,.10);color:var(--ink);}
.float-bar .fb-sep{width:1px;height:20px;background:var(--edge);margin:0 4px;}
/* slash block menu */
#slash-menu{position:fixed;z-index:120;min-width:200px;padding:6px;border-radius:12px;
  box-shadow:0 12px 34px rgba(0,0,0,.55);animation:fb-in .12s ease;max-height:320px;overflow-y:auto;}
.slash-item{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:8px;cursor:pointer;
  font-size:13px;color:var(--ink-soft);}
.slash-item i{font-size:15px;color:var(--ink-faint);width:18px;text-align:center;}
.slash-item:hover,.slash-item.on{background:rgba(255,255,255,.10);color:var(--ink);}
.slash-item.on i,.slash-item:hover i{color:var(--ink);}
#ed-text h1{font-size:1.7em;font-weight:600;margin:18px 0 10px;line-height:1.3;}
#ed-text h2{font-size:1.4em;font-weight:600;margin:16px 0 8px;line-height:1.3;}
#ed-text h3{font-size:1.15em;font-weight:600;margin:14px 0 6px;line-height:1.3;}
#ed-text h4{font-size:1.02em;font-weight:650;margin:12px 0 5px;line-height:1.3;}   /* v1562: h4 existed unstyled — UA default was his literal "halfstep between H2 and H3" */
#ed-text p,#ed-text div{margin:0 0 6px;}
#ed-text ul,#ed-text ol{margin:0 0 10px 24px;}
#ed-text blockquote{border-left:2px solid var(--ink);padding:4px 0 4px 16px;margin:8px 0 12px;color:var(--ink);}
#ed-text hr{border:none;border-top:1px solid rgba(255,255,255,.3);margin:18px 0;}
#ed-text mark,#ed-text span[style*="background"]{background:var(--hl);color:inherit;border-radius:3px;padding:0 2px;}
#ed-text a{color:var(--accent);}
#ed-text img{max-width:55%;border-radius:14px;border:1px solid rgba(255,255,255,.25);margin:10px 0;display:block;cursor:pointer;}
#ed-text img:hover{outline:2px solid var(--accent);outline-offset:2px;}

/* lightbox */
#lightbox{position:fixed;inset:0;z-index:80;background:rgba(5,10,7,.82);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;}
#lightbox img{max-width:86vw;max-height:78vh;border-radius:16px;border:1px solid rgba(255,255,255,.25);box-shadow:0 30px 80px rgba(0,0,0,.6);}
#lightbox .lb-bar{display:flex;gap:10px;}
#lightbox .btn{flex:none;min-width:130px;text-align:center;color:#f2f8f4;}
/* one fixed size for ALL tabs — no width switch, no capsule clip */
#shelf{flex:none;width:300px;display:flex;flex-direction:column;gap:12px;padding:14px 14px;overflow:hidden;border-radius:20px;align-self:stretch;align-items:stretch;}
#shelf-tabs{display:flex;gap:2px;width:100%;padding-bottom:10px;border-bottom:1px solid var(--edge);flex:none;}
.shelf-tab{background:transparent;border:0;color:var(--ink-faint);cursor:pointer;
  padding:7px 4px 6px;border-radius:9px;flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;
  font-size:10.5px;letter-spacing:.01em;position:relative;transition:background .12s,color .12s;}
.shelf-tab i{font-size:16px;color:var(--tc,var(--ink-faint));opacity:.55;transition:opacity .12s,color .12s;
  filter:drop-shadow(0 0 4px color-mix(in srgb,var(--tc,transparent) 30%,transparent));}
.shelf-tab:hover{color:var(--ink-soft);background:rgba(255,255,255,.05);}
.shelf-tab:hover i{opacity:.85;}
.shelf-tab.on{color:var(--ink);}
.shelf-tab.on i{color:var(--tc,var(--accent));opacity:1;}
.shelf-tab.on::after{content:"";position:absolute;bottom:-11px;left:18%;right:18%;height:2px;border-radius:2px;background:var(--tc,var(--accent));
  box-shadow:0 0 8px color-mix(in srgb,var(--tc,var(--accent)) 60%,transparent);}
#shelf-info,#shelf-subs{flex-direction:column;gap:0;overflow-y:auto;flex:1;width:100%;padding-right:10px;scrollbar-gutter:stable;}   /* gutter so the scrollbar rides in its own lane and never crowds the info rows */
/* ---- Info / Sub-pages panels ---- */
.ip-sect{font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);margin:14px 2px 9px;}
.ip-sect:first-child{margin-top:2px;}
.ip-stats{display:flex;gap:10px;}
.ip-stat{flex:1;border-radius:14px;padding:14px 10px;text-align:center;}
/* v1419 (his call): 24px → 18px. Words and Links were always the same size; "22,648" simply out-weighs
   "0" by character count, so shrinking evens them out. Box padding left alone — size only. */
.ip-num{font-size:18px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1;}
.ip-lbl{font-size:11px;color:var(--ink-faint);margin-top:6px;letter-spacing:.04em;}
.ip-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 2px;border-bottom:1px solid var(--edge);font-size:12.5px;}
.ip-k{color:var(--ink-faint);flex:none;}
.ip-v{color:var(--ink);text-align:right;min-width:0;}
.ip-rowbtn{cursor:pointer;border-radius:8px;}
.ip-rowbtn:hover{background:rgba(255,255,255,.05);}
.ip-status{display:inline-flex;align-items:center;gap:7px;color:color-mix(in srgb,var(--st) 80%,var(--ink));}
.ip-dot{width:8px;height:8px;border-radius:50%;background:var(--st);box-shadow:0 0 6px color-mix(in srgb,var(--st) 60%,transparent);}
.ip-tags{display:flex;flex-wrap:wrap;gap:5px;justify-content:flex-end;}
.ip-tag{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--ink-soft);background:rgba(255,255,255,.07);border:1px solid var(--edge);border-radius:999px;padding:2px 5px 2px 9px;cursor:pointer;}
.ip-tag:hover{border-color:rgba(214,178,74,.45);background:rgba(255,255,255,.1);}
.ip-tag-n{font-size:9px;font-weight:700;color:var(--ink-faint);background:rgba(255,255,255,.08);border-radius:999px;padding:0 4px;margin-left:1px;min-width:13px;text-align:center;}
.libts{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:2px 0 14px;padding:13px 18px;border-radius:14px;background:linear-gradient(180deg,rgba(214,178,74,.09),rgba(214,178,74,.03));border:1px solid rgba(214,178,74,.3);color:var(--ink-soft);font-size:14px;line-height:1.5;}
.libts b{color:var(--ink);font-weight:700;}
.libts-acts{display:flex;flex-wrap:wrap;gap:9px;margin-left:auto;align-items:center;}
.libts-go{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:11px;border:0;background:var(--gold,#D6B24A);color:#241c06;font-size:13.5px;font-weight:700;font-family:inherit;cursor:pointer;box-shadow:0 6px 18px rgba(214,178,74,.25);transition:transform .12s,box-shadow .12s;}
.libts-go:hover{transform:translateY(-1px);box-shadow:0 9px 24px rgba(214,178,74,.35);}
.libts-go i{font-size:15px;}
.libts-plus{background:rgba(0,0,0,.18);border-radius:999px;padding:1px 8px;font-size:12px;}
.libts-rm{display:inline-flex;align-items:center;gap:7px;padding:10px 15px;border-radius:11px;border:1px solid var(--edge);background:rgba(255,255,255,.07);color:var(--ink-soft);font-size:13.5px;font-weight:600;font-family:inherit;cursor:pointer;transition:background .15s,color .15s,border-color .15s;}
.libts-rm:hover{color:#e0504a;border-color:#e0504a;background:rgba(224,80,74,.08);}
.ip-tag-x{border:0;background:none;color:var(--ink-faint);font-size:13px;line-height:1;cursor:pointer;padding:0 1px;border-radius:999px;transition:color .15s,background .15s;}
.ip-tag-x:hover{color:var(--ember);background:rgba(255,255,255,.08);}
.ip-tag-add{border:1px dashed rgba(255,255,255,.2);background:none;color:var(--ink-faint);font-size:12px;line-height:1;cursor:pointer;width:20px;height:20px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;transition:color .15s,border-color .15s;}
.ip-tag-add:hover{color:var(--ink-soft);border-color:rgba(214,178,74,.5);}
.ip-links{display:flex;flex-wrap:wrap;gap:5px;justify-content:flex-end;}
.ip-link{font-size:11px;color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,rgba(255,255,255,.05));border:1px solid color-mix(in srgb,var(--accent) 28%,var(--edge));border-radius:999px;padding:2px 9px;cursor:pointer;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ip-link:hover{background:color-mix(in srgb,var(--accent) 20%,rgba(255,255,255,.07));}
.ip-link-topic{color:var(--gold,#D6B24A);background:color-mix(in srgb,var(--gold,#D6B24A) 10%,rgba(255,255,255,.04));border-color:color-mix(in srgb,var(--gold,#D6B24A) 35%,var(--edge));border-style:dashed;}
.ip-link-topic:hover{background:color-mix(in srgb,var(--gold,#D6B24A) 18%,rgba(255,255,255,.05));}
.ip-add{color:var(--ink-faint);cursor:pointer;font-size:12px;}
.ip-add:hover{color:var(--ink);}
/* free tag suggestions in the Info rail */
.ip-sug-row{display:flex;flex-wrap:wrap;gap:5px;margin:0 2px 8px;}
.ip-sug{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:inherit;color:var(--ink-soft);background:rgba(255,255,255,.04);border:1px dashed rgba(255,255,255,.22);border-radius:999px;padding:2px 9px;cursor:pointer;}
.ip-sug:hover{color:var(--ink);border-color:var(--accent);border-style:solid;background:color-mix(in srgb,var(--accent) 12%,transparent);}
.ip-sug .ip-sug-plus{color:var(--ink-faint);font-weight:600;}
.ip-sug:hover .ip-sug-plus{color:var(--accent);}
.ip-sug-stale{border-color:rgba(255,140,90,.34);}
.ip-sug-stale:hover{border-color:var(--ember);background:color-mix(in srgb,var(--ember) 12%,transparent);}
.ip-sug-stale:hover .ip-sug-plus{color:var(--ember);}
.ip-sug-lbl{font-size:10.5px;color:var(--ink-faint);margin:2px 2px 5px;}
.ip-sug-ember{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-family:inherit;color:var(--ink-faint);background:none;border:0;padding:0;margin:0 2px 4px;cursor:pointer;}
.ip-sug-ember:hover{color:var(--ember);}
.ip-sug-ember i{font-size:12px;color:var(--ember);opacity:.75;}
body.light .ip-sug{border-color:rgba(0,0,0,.22);background:rgba(0,0,0,.03);}
.ts-list{max-height:52vh;overflow:auto;display:flex;flex-direction:column;gap:1px;margin:8px 0 6px;}
.ts-row{display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:8px;cursor:pointer;font-size:13.5px;color:var(--ink);}
.ts-row:hover{background:rgba(255,255,255,.05);}
.ts-row input{cursor:pointer;flex:0 0 auto;}
.ts-row .ts-t{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ts-row .ts-sp{color:var(--ink-faint);font-size:12px;flex:0 0 auto;}
.ts-row .ts-n{color:var(--ink-faint);font-size:12px;min-width:32px;text-align:right;flex:0 0 auto;}
.ip-action{display:flex;align-items:center;gap:9px;width:100%;text-align:left;background:rgba(255,255,255,.04);border:1px solid var(--edge);
  color:var(--ink);font:inherit;font-size:13px;padding:11px 13px;border-radius:11px;cursor:pointer;margin-bottom:8px;transition:background .12s,border-color .12s;}
.ip-action:hover{background:rgba(255,255,255,.09);border-color:rgba(255,255,255,.18);}
.ip-action i{font-size:15px;color:var(--ink-soft);}
.ip-addsub-big{justify-content:center;border-style:dashed;color:color-mix(in srgb,var(--accent) 85%,var(--ink));}
.ip-notes{width:100%;min-height:120px;resize:vertical;background:rgba(255,255,255,.04);border:1px solid var(--edge);border-radius:11px;
  color:var(--ink);font:inherit;font-size:13px;padding:11px 13px;outline:none;line-height:1.5;}
.ip-notes::placeholder{color:var(--ink-faint);}
.ip-notes:focus{border-color:color-mix(in srgb,var(--accent) 45%,transparent);}
.sp-list{display:flex;flex-direction:column;gap:5px;}
.sp-item{flex:none;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:11px;cursor:pointer;font-size:13px;color:var(--ink);
  border:1px solid transparent;transition:background .12s,border-color .12s;}
.sp-item:hover{background:rgba(255,255,255,.05);}
.sp-item.on{background:color-mix(in srgb,var(--accent) 13%,rgba(255,255,255,.03));border-color:color-mix(in srgb,var(--accent) 35%,var(--edge));}
.sp-n{font-size:12px;color:var(--ink-faint);font-variant-numeric:tabular-nums;flex:none;width:14px;}
.sp-title{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sp-menu{color:var(--ink-faint);font-size:15px;flex:none;cursor:pointer;}
.sp-menu:hover{color:var(--ink);}
.sp-cur-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 7px var(--accent);flex:none;}
#shelf-outline{display:flex;flex-direction:column;gap:2px;overflow-y:auto;flex:1;width:100%;}
.outline-item{flex:none;font-size:12.5px;color:var(--ink-soft);padding:5px 9px;border-radius:6px;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  border-left:2px solid transparent;transition:background .12s,color .12s,border-left-color .12s;}
.outline-item:hover{color:var(--ink);background:rgba(255,255,255,.06);border-left-color:var(--accent);}
.outline-l1{font-weight:600;color:var(--ink);}
.outline-l2{padding-left:18px;}
.outline-l3{padding-left:30px;font-size:11.5px;color:var(--ink-faint);}
.outline-l4{padding-left:42px;font-size:11px;color:var(--ink-faint);}
.shelf-empty{color:var(--ink-faint);font-size:12px;text-align:center;padding:16px 8px;line-height:1.5;}
.outline-hint{flex:none;font-size:10px;color:var(--ink-faint);opacity:.65;padding:1px 9px 8px;}
.outline-sub{opacity:.55;font-size:.85em;margin-left:3px;}
#ed-text .ed-stub>.wiki::before{content:"\21B3 ";opacity:.5;font-weight:400;}
/* highlight color picker (popover) */
#hl-picker{position:fixed;z-index:100;display:flex;gap:6px;padding:8px;border-radius:12px;
  background:rgba(10,10,12,.78);border:1px solid rgba(255,255,255,.10);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  box-shadow:0 12px 30px rgba(0,0,0,.5);}
.hl-swatch{width:24px;height:24px;border-radius:50%;border:1px solid rgba(255,255,255,.18);
  cursor:pointer;transition:transform .12s,border-color .12s;padding:0;}
.hl-swatch:hover{transform:scale(1.15);border-color:rgba(255,255,255,.45);}
/* backup snapshot rows */
#s-snaps{margin-top:10px;}
.snap-row{display:flex;align-items:center;gap:10px;padding:6px 2px;}
.snap-when{font-size:13px;color:var(--ink);flex:none;min-width:84px;}
.snap-reason{font-size:11px;color:var(--ink-faint);flex:1;}
.snap-btn{padding:4px 12px;font-size:12px;flex:none;}
#shelf .lbl{font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft);flex:none;}
.shelf-thumb{position:relative;width:100%;height:104px;border-radius:10px;border:1px solid var(--edge);flex:none;overflow:hidden;cursor:pointer;background:rgba(255,255,255,.05);}
.shelf-thumb img{width:100%;height:100%;object-fit:cover;}
.shelf-thumb .x{position:absolute;top:4px;right:4px;width:18px;height:18px;border-radius:50%;background:rgba(0,0,0,.5);color:#fff;font-size:10px;display:none;align-items:center;justify-content:center;}
.shelf-thumb:hover .x{display:flex;}
.shelf-add{width:100%;height:44px;border-radius:10px;border:1px dashed var(--edge);flex:none;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:7px;color:var(--ink-faint);font-size:16px;background:rgba(255,255,255,.02);transition:color .12s,background .12s;}
.shelf-add:hover{color:var(--ink);background:rgba(255,255,255,.05);}

/* ---------- modal ---------- */
#modal-wrap{position:fixed;inset:0;z-index:50;background:rgba(0,0,0,.35);display:flex;align-items:center;justify-content:center;}
#modal{width:380px;max-width:92vw;padding:22px;max-height:84vh;overflow-y:auto;}
/* Global Quick Open (⌘K) command palette */
#qopen-wrap,#refpick-wrap{position:fixed;inset:0;z-index:70;background:rgba(0,0,0,.42);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);display:flex;justify-content:center;align-items:flex-start;padding-top:12vh;}
#qopen,#refpick{width:min(620px,92vw);max-height:64vh;display:flex;flex-direction:column;border-radius:16px;overflow:hidden;box-shadow:0 26px 72px rgba(0,0,0,.55);}
.qo-head{display:flex;align-items:center;gap:11px;padding:15px 18px;border-bottom:1px solid var(--edge);flex:none;}
.qo-head i{font-size:18px;color:var(--ink-faint);flex:none;}
.qo-head input{flex:1;min-width:0;background:none;border:none;outline:none;color:var(--ink);font:inherit;font-size:16px;}
.qo-head input::placeholder{color:var(--ink-faint);}
.qo-list{overflow-y:auto;padding:7px;flex:1;min-height:0;}
.qo-item{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:10px;cursor:pointer;}
.qo-item.on{background:color-mix(in srgb,var(--gold,#D6B24A) 16%,rgba(255,255,255,.05));}
.qo-item i{font-size:16px;color:var(--ink-soft);flex:none;width:18px;text-align:center;}
.qo-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink);font-size:14px;}
.qo-sub{flex:none;font-size:11.5px;color:var(--ink-faint);white-space:nowrap;}
.qo-empty{padding:24px;text-align:center;color:var(--ink-faint);font-size:13px;}
.qo-foot{display:flex;gap:18px;padding:9px 16px;border-top:1px solid var(--edge);flex:none;font-size:11px;color:var(--ink-faint);}
.qo-foot b{color:var(--ink-soft);font-weight:600;font-family:ui-monospace,monospace;}
/* ===== PDF export — clean print view (Option A: real selectable text → native Save-as-PDF) ===== */
#print-view{display:none;}
@page{margin:20mm 18mm;}
@media print{
  body{background:#fff !important;}
  body > *:not(#print-view){display:none !important;}
  #print-view{display:block !important;position:static;color:#16140f;background:#fff;font-family:Georgia,'Iowan Old Style','Times New Roman',serif;font-size:11.5pt;line-height:1.62;}
  #print-view .pv-title{font-family:-apple-system,BlinkMacSystemFont,'Helvetica Neue',sans-serif;font-size:23pt;font-weight:700;line-height:1.15;margin:0 0 6pt;color:#000;}
  #print-view .pv-meta{font-family:-apple-system,sans-serif;font-size:8.5pt;letter-spacing:.04em;text-transform:uppercase;color:#8a8275;margin:0 0 20pt;padding-bottom:11pt;border-bottom:.5pt solid #ddd;}
  #print-view h1,#print-view h2,#print-view h3{font-family:-apple-system,sans-serif;color:#000;break-after:avoid;page-break-after:avoid;margin:16pt 0 5pt;line-height:1.25;}
  #print-view h1{font-size:16pt;} #print-view h2{font-size:13.5pt;} #print-view h3{font-size:11.5pt;}
  #print-view p{margin:0 0 8pt;orphans:3;widows:3;}
  #print-view ul,#print-view ol{margin:0 0 8pt;padding-left:18pt;}
  #print-view li{margin:0 0 3pt;}
  #print-view blockquote{margin:10pt 0;padding:0 0 0 12pt;border-left:2pt solid #d8d2c4;color:#4a4537;font-style:italic;}
  #print-view img{max-width:100%;height:auto;break-inside:avoid;page-break-inside:avoid;margin:6pt 0;border-radius:3pt;}
  #print-view hr{border:none;border-top:.5pt solid #ddd;margin:14pt 0;}
  #print-view table{border-collapse:collapse;width:100%;break-inside:avoid;margin:9pt 0;font-size:10pt;}
  #print-view th,#print-view td{border:.5pt solid #ccc;padding:4pt 7pt;text-align:left;vertical-align:top;}
  #print-view th{background:#f3f0ea;font-weight:600;}
  #print-view a{color:#16140f;text-decoration:none;}
  #print-view .wiki{font-style:italic;} #print-view .tag{color:#8a7a3a;} #print-view mark{background:#fff3bf;}
  #print-view .task-line{list-style:none;}
}
#modal h2{font-size:17px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:9px;}
/* ---- settings: left nav + scrolling panel ---- */
#modal.set-modal{width:850px;max-width:94vw;height:80vh;max-height:80vh;padding:0;overflow:hidden;display:flex;background:rgba(15,16,19,.55);}
.set-nav{width:180px;flex:none;display:flex;flex-direction:column;gap:2px;padding:14px 10px;border-right:1px solid var(--edge);background:rgba(255,255,255,.02);}
.set-nav-h{font-size:13px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:8px;padding:4px 8px 12px;}
.set-nav-sp{flex:1;}
#s-done{flex:none;}
.set-tab{display:flex;align-items:center;gap:9px;width:100%;text-align:left;background:transparent;border:none;color:var(--ink-soft);font-size:13px;font-family:inherit;padding:8px 10px;border-radius:8px;cursor:pointer;transition:background .12s,color .12s;}
.set-tab i{font-size:15px;opacity:.8;}
.set-tab:hover{background:rgba(255,255,255,.06);color:var(--ink);}
.set-tab.on{background:rgba(255,255,255,.11);color:var(--ink);}
.set-panel{flex:1;min-width:0;overflow-y:auto;overflow-x:hidden;padding:22px 24px;}
.set-pane>.f-row:first-child{margin-top:0;}
.set-collapse{display:flex;align-items:center;gap:6px;width:100%;text-align:left;background:transparent;border:none;color:var(--ink-soft);font-size:12.5px;font-family:inherit;padding:9px 2px;cursor:pointer;margin-top:8px;}
.set-collapse:hover{color:var(--ink);}
.set-collapse i{transition:transform .15s;font-size:14px;}
.set-collapse.open i{transform:rotate(90deg);}
.set-collapse-ct{color:var(--ink-faint);font-size:11px;}
/* ---- cover picker ---- */
#modal.cov-modal{width:680px;}
#modal.echat-modal{width:min(780px,92vw);}
.cov-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px;}
.cov-tab{padding:6px 12px;border-radius:9px;font-size:12.5px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);color:var(--ink-soft);cursor:pointer;display:flex;align-items:center;gap:6px;}
.cov-tab:hover{background:rgba(255,255,255,.09);color:var(--ink);}
.cov-tab.on{background:rgba(255,255,255,.14);color:var(--ink);border-color:rgba(255,255,255,.26);}
.cov-ct{font-size:10.5px;padding:1px 6px;border-radius:8px;background:rgba(255,255,255,.14);color:var(--ink-soft);}
.cov-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:126px;gap:10px;min-height:130px;max-height:50vh;overflow-y:auto;overflow-x:hidden;}
/* hover zooms the IMAGE inside a fixed frame — never the tile itself. A scaled tile's bounds count
   toward the scroll container's overflow, so a bottom-row tile at the max-height boundary made the
   scrollbar flicker in and out under the cursor (the "bounces back and forth" jitter). */
.cov-thumb{position:relative;height:126px;border-radius:10px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04) center/cover no-repeat;cursor:pointer;overflow:hidden;transition:border-color .12s;}
.cov-thumb:hover{border-color:rgba(255,255,255,.42);}
.cov-thumb[data-id]::before{content:"";position:absolute;inset:0;background:inherit;border-radius:inherit;transition:transform .12s;}   /* uploads paint on the tile — mirror it onto a zoomable layer */
.cov-thumb[data-id]:hover::before{transform:scale(1.03);}
.cov-thumb .cov-img{width:100%;height:100%;object-fit:cover;border-radius:inherit;display:block;transition:transform .12s;}
.cov-thumb:hover .cov-img{transform:scale(1.03);}
.cov-del{position:absolute;top:5px;right:5px;width:20px;height:20px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:rgba(10,10,12,.72);color:#fff;font-size:12px;opacity:0;transition:opacity .12s,background .12s;}
.cov-thumb:hover .cov-del{opacity:1;}
.cov-del:hover{background:var(--ember,#D24338);}
.cov-empty{grid-column:1/-1;color:var(--ink-faint);font-size:12.5px;padding:26px 6px;text-align:center;line-height:1.7;}
.cov-actions{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap;}
.cov-actions .btn{flex:1;min-width:120px;justify-content:center;}
.f-row{margin-bottom:14px;}
.f-row label{display:block;font-size:11.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:6px;}
.f-row input[type=text],.f-row select{
  width:100%;background:rgba(255,255,255,.08);border:1px solid var(--edge);border-radius:10px;
  padding:9px 12px;color:var(--ink);font-size:14px;outline:none;font-family:inherit;
}
.f-row select option{color:#1a261d;}
.f-row input[type=range]{width:100%;accent-color:var(--accent);}
.icon-pick{display:flex;flex-wrap:wrap;gap:6px;}
.icon-pick .ip{width:34px;height:34px;border-radius:9px;border:1px solid var(--edge);display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:16px;color:var(--ink-soft);}
.icon-pick .ip.sel{background:color-mix(in srgb, var(--accent) 18%, transparent);color:var(--accent);border-color:var(--accent);}
/* curated Space icon picker */
.sp-icpick{max-height:228px;overflow-y:auto;padding:4px 4px 2px;border:1px solid var(--edge);border-radius:12px;background:rgba(255,255,255,.02);}
.sp-ic-cat{font-size:10px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-faint);margin:10px 4px 7px;}
.sp-ic-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(38px,1fr));gap:6px;}
.sp-ic{width:38px;height:38px;border-radius:10px;border:1px solid var(--edge);background:transparent;color:var(--ink-soft);
  display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:17px;transition:var(--fx-chrome);}
.sp-ic:hover{color:var(--ink);background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.2);}
.sp-ic.sel{color:var(--sp);border-color:color-mix(in srgb,var(--sp) 60%,transparent);
  background:color-mix(in srgb,var(--sp) 16%,transparent);box-shadow:0 0 12px color-mix(in srgb,var(--sp) 35%,transparent);}
.sp-ic.noicon{margin:2px 0 2px 4px;color:var(--ink-faint);}
.sp-ic.noicon.sel{color:var(--ink);border-color:rgba(255,255,255,.4);background:rgba(255,255,255,.08);box-shadow:none;}
.sp-ic-search{width:100%;box-sizing:border-box;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.16);color:var(--ink);border-radius:10px;padding:8px 12px;font-size:13px;font-family:inherit;outline:none;margin-bottom:8px;}
.sp-ic-search:focus{border-color:color-mix(in srgb,var(--accent) 55%,transparent);}
.sp-ic-search::placeholder{color:rgba(255,255,255,.35);}
.space-pill-ic{font-size:14px;flex:none;}
/* the inline-SVG Sanctum arch (sp.icon "sanctum-arch") rides the same metrics the font <i> icons get
   from element selectors below — svg needs its own sizing since font-size doesn't reach it */
.arch-ic{width:1em;height:1em;flex:none;vertical-align:-.125em;}
.space-pill .arch-ic,.space-pill-ic.arch-ic{width:14px;height:14px;}
.menu .mi .arch-ic{width:16px;height:16px;color:var(--ink-soft);}
.qo-item .arch-ic{width:18px;height:16px;color:var(--ink-soft);}
.lib-facet .arch-ic{width:16px;height:14px;color:var(--ink-faint);}
.sp-ic .arch-ic{width:17px;height:17px;}
.pam-item .arch-ic,#pam .arch-ic{width:15px;height:15px;}
.m-btns{display:flex;gap:10px;margin-top:18px;}
.btn{
  flex:1;padding:9px 14px;border-radius:11px;border:1px solid var(--edge);cursor:pointer;
  background:rgba(255,255,255,.08);color:var(--ink);font-size:13.5px;font-weight:500;font-family:inherit;
  transition:background .15s;
}
.btn:hover{background:rgba(255,255,255,.16);}
.btn.primary{background:color-mix(in srgb, var(--accent) 20%, transparent);border-color:color-mix(in srgb, var(--accent) 45%, transparent);color:var(--accent);}
.rv-promote,.rv-toboard,.rv-del,.rv-open,.rv-prom-both,.rv-prom-ents{flex:none !important;white-space:nowrap;}   /* the summary-card footer: .btn's flex:1 squeezed the long label into a two-line button (his catch) — content-sized, whole buttons wrap instead */
.btn.danger{background:rgba(240,149,149,.12);border-color:rgba(240,149,149,.35);color:#f09595;}
.btn.rv-prom-mode.on{background:color-mix(in srgb, var(--accent) 20%, transparent);border-color:color-mix(in srgb, var(--accent) 45%, transparent);color:var(--accent);}
.hint{font-size:11.5px;color:var(--ink-faint);margin-top:6px;line-height:1.5;}

/* dropdown menu */
/* ⚠ z-index 60 sat BELOW the Ember Workbench overlay (#ask-wrap, z-index:75), so a menu opened from
   inside the Workbench — the chat rail's ⋯ — was built, positioned, and then painted BEHIND the
   panel: present in the DOM, invisible on screen. 81 clears the Workbench (75) and the lightbox (80,
   so a right-click menu over an open image wins on value, not DOM order), and still sits under the
   @-picker (85) and the .pam variant (9000). ⚠ Any new full-screen overlay must stay below 81. */
.menu{position:fixed;z-index:81;min-width:200px;padding:6px;border-radius:14px;}
/* ===== v1440 THE FEEL PASS (his sign-off 8/11; spec = feel-pass-mock.html) =====
   One ease, instant-in / soft-out. Menus scale from their opening point in 120ms and fade out
   in 120 (the .fx-out remover strips the element's id first so a re-open never collides with
   the dying node). Row highlights land in 0ms, release in 180. Navigation fade-through (80ms
   out / 160ms in) lives in go(). Animate opacity + transform ONLY — never filter or shadow. */
:root{--fx-ease:cubic-bezier(.2,.8,.2,1);
  /* v1441: one transition token for small chrome — replaced 21 transition:all sites so nothing animates by accident; the two deliberate .38s panel motions were left as designed */
  --fx-chrome:background 160ms ease,color 160ms ease,border-color 160ms ease,box-shadow 160ms ease,opacity 160ms ease,transform 160ms ease;}
@keyframes fxMenuIn{from{opacity:0;transform:scale(.96);}}
.menu{transform-origin:var(--fx-ox,20% 0%);}
.menu.fx-in{animation:fxMenuIn 120ms var(--fx-ease);}
.fx-out{opacity:0 !important;transition:opacity 120ms ease !important;pointer-events:none !important;}
#pam-root{transition:opacity 120ms ease;}
#app{transition:opacity 160ms ease;}
#app.fx-swap{opacity:0;transition-duration:80ms;}
.menu .mi{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px;font-size:13.5px;cursor:pointer;transition:background .18s ease;}
.menu .mi:hover{background:rgba(255,255,255,.1);transition-duration:0s;}
.menu .mi i{font-size:16px;color:var(--ink-soft);}
.menu .mi-sep{height:1px;background:rgba(255,255,255,.09);margin:5px 10px;}   /* v940 group dividers */
/* ---- shared Page-Card Actions Menu (PageActionsMenu) ---- */
#pam-root{position:fixed;inset:0;z-index:9000;pointer-events:none;}
.menu.pam{position:fixed;z-index:9000;min-width:212px;pointer-events:auto;}
.menu.pam.pam-sub{min-width:188px;}
.pam .pam-item{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px;font-size:13.5px;line-height:1;cursor:pointer;white-space:nowrap;}
.pam .pam-item > i:first-child{font-size:16px;color:var(--ink-soft);flex:none;width:16px;text-align:center;}
.pam .pam-item{transition:background .18s ease;}   /* v1440 feel pass: instant-in, soft-out */
.pam .pam-item:hover:not(.disabled),.pam .pam-item.pam-active:not(.disabled){background:rgba(255,255,255,.1);transition-duration:0s;}
.pam .pam-label{flex:1;}
.pam .pam-val{color:var(--ink-faint);font-size:12.5px;}
.pam .pam-arrow{font-size:15px;color:var(--ink-faint);flex:none;}
.pam .pam-check{font-size:15px;color:var(--gold,#D6B24A);flex:none;}
.pam .pam-item.disabled{cursor:default;}
.pam .pam-item.disabled .pam-label{color:var(--ink-soft);}
.pam .pam-item.danger,.pam .pam-item.danger > i:first-child{color:#E5634D;}
.pam .pam-item.danger:hover{background:rgba(229,99,77,.14);}
.pam .pam-div{height:1px;margin:5px 9px;background:rgba(255,255,255,.1);}
body.light .pam .pam-div{background:rgba(20,30,25,.12);}

/* rails stay invisible until the pane under them is hovered (:hover on any element also
   matches while its descendants are hovered, so touching anywhere in a pane reveals its rail) */
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-thumb{background:transparent;border-radius:4px;}
:hover::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);}
::-webkit-scrollbar-track{background:transparent;}
/* v1241 — z-index was 70, and the Ember Workbench sits at 75. EVERY toast fired while the Workbench
   was open rendered BEHIND it and was never seen: his "Save as sub-page" click confirmed itself into
   a void, so the action read as broken until the page turned up on its own seconds later. A toast is
   transient, pointer-events:none feedback about something that ALREADY happened — nothing should
   ever cover it. Parked above onboarding (12000), the highest surface in the app. */
#toast{
  position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:12100;
  padding:10px 18px;border-radius:999px;font-size:13px;opacity:0;transition:opacity .25s;pointer-events:none;
}
#toast.show{opacity:1;}
/* post-deep-sleep sound-restart offer — quiet gold pill above the toast lane, dismissible */
#sr-offer{
  position:fixed;bottom:64px;left:50%;transform:translateX(-50%);z-index:70;
  display:flex;align-items:center;gap:10px;padding:9px 14px;border-radius:999px;font-size:12.5px;
  border:1px solid rgba(214,178,74,.4);color:var(--ink);white-space:nowrap;
}
#sr-offer button{
  background:rgba(214,178,74,.16);border:1px solid rgba(214,178,74,.45);color:var(--gold,#D6B24A);
  border-radius:999px;padding:4px 12px;font-size:12px;font-weight:600;cursor:pointer;
}
#sr-offer button:hover{background:rgba(214,178,74,.26);}
#sr-offer .ti-x{cursor:pointer;color:var(--ink-faint);font-size:13px;}
#sr-offer .ti-x:hover{color:var(--ink);}

/* ---- board link-to-page picker ---- */
.bl-list{max-height:300px;overflow-y:auto;display:flex;flex-direction:column;gap:2px;margin-top:8px;}
.bl-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:9px;cursor:pointer;font-size:13px;}
button.bl-item{-webkit-appearance:none;appearance:none;background:transparent;border:0;width:100%;text-align:left;color:var(--ink);font-family:inherit;}
.bl-item:hover{background:rgba(255,255,255,.08);}
.bl-item .bl-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.bl-item small{margin-left:auto;color:var(--ink-soft);font-size:11px;flex:none;}
.sp-board-ic{font-size:12.5px;opacity:.75;flex:none;}

/* ---- new-board template picker ---- */
.tpl-grid{display:flex;flex-wrap:wrap;gap:14px;margin:16px 0 4px;}
.tpl-card{flex:1 1 30%;min-width:130px;display:flex;flex-direction:column;gap:3px;align-items:flex-start;padding:0 0 12px;border-radius:14px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.045);cursor:pointer;color:var(--ink);text-align:left;overflow:hidden;font-family:inherit;transition:border-color .15s,background .15s,transform .15s;}
.tpl-card:hover,.tpl-card:focus{border-color:var(--accent);background:rgba(255,255,255,.08);transform:translateY(-2px);outline:none;}
.tpl-card svg{width:100%;height:auto;display:block;background:rgba(0,0,0,.25);border-bottom:1px solid rgba(255,255,255,.08);}
.tpl-card{position:relative;}
.tpl-del{position:absolute;top:6px;right:6px;width:20px;height:20px;border-radius:50%;display:none;align-items:center;justify-content:center;background:rgba(14,16,21,.85);border:1px solid rgba(255,255,255,.3);color:var(--ink-soft);font-size:11px;cursor:pointer;z-index:2;}
.tpl-card:hover .tpl-del{display:flex;}
.tpl-del:hover{color:#fff;border-color:rgba(224,80,74,.9);background:rgba(224,80,74,.35);}
.tpl-name{font-weight:600;font-size:13.5px;padding:8px 12px 0;}
.tpl-sub{font-size:11.5px;color:var(--ink-soft);padding:0 12px;}

/* ---------- whiteboard ---------- */
.board{flex:1;position:relative;overflow:hidden;cursor:grab;}
/* board drags must never start a native text selection ("accidental highlight" jank) — text is selectable ONLY while editing */
.board,.board .bd-el{-webkit-user-select:none;user-select:none;}
.board .bd-text:focus,.board .bd-text:focus *{-webkit-user-select:text;user-select:text;}
.board-inner{position:absolute;width:0;height:0;overflow:visible;}
.board:focus{outline:none;border-color:rgba(255,255,255,.28);}
.bd-el{position:absolute;cursor:grab;touch-action:none;}
.bd-el:active{cursor:grabbing;}
.bd-el>img{display:block;width:100%;border-radius:14px;border:1px solid rgba(255,255,255,.28);box-shadow:0 12px 32px rgba(0,0,0,.4);pointer-events:none;}
.bd-handle{position:absolute;right:-8px;bottom:-8px;width:17px;height:17px;border-radius:50%;background:var(--accent);border:2px solid rgba(0,0,0,.4);opacity:0;cursor:nwse-resize;transition:opacity .15s .22s;transform:scale(var(--inv,1));transform-origin:bottom right;}
.bd-handle::before{content:"";position:absolute;inset:-9px;border-radius:50%;}   /* v942: fat invisible hit area — the dot was a 13px dart-board */
.bd-el:hover .bd-handle{opacity:.95;transition-delay:0s;}
.bd-note{background:rgba(12,21,16,.82);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);border-radius:13px;box-shadow:0 10px 26px rgba(0,0,0,.35);}
/* ---- board insert toolbar (floating, top-center) ---- */
.bd-toolbar{position:absolute;top:12px;left:50%;transform:translateX(-50%);display:flex;gap:4px;padding:6px;border-radius:13px;background:rgba(14,16,21,.74);backdrop-filter:blur(16px) saturate(1.1);-webkit-backdrop-filter:blur(16px) saturate(1.1);border:1px solid rgba(255,255,255,.16);box-shadow:0 8px 24px rgba(0,0,0,.38);z-index:6;}
.bd-toolbar .bd-tool{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:9px;border:none;background:transparent;color:var(--ink-soft);cursor:pointer;font-size:18px;transition:background .12s,color .12s;}
.bd-toolbar .bd-tool:hover{background:rgba(255,255,255,.09);color:var(--ink);}
.bd-toolbar .bd-tool.on{background:var(--accent);color:#10130f;}
/* ---- rubber-band while drawing a text box ---- */
.bd-rubber{position:absolute;border:1.5px dashed rgba(255,255,255,.65);background:rgba(255,255,255,.07);border-radius:7px;pointer-events:none;z-index:4;}
/* ---- drag-drawn text box ---- */
.bd-textbox{background:rgba(10,14,18,.34);border:1px solid rgba(255,255,255,.24);border-radius:9px;box-shadow:0 6px 18px rgba(0,0,0,.22);}
/* tints: glass washes — low-alpha fill + stronger rim (focus ring still wins; rules precede :focus-within) */
.bd-textbox.tint-ember{background:rgba(232,162,80,.13);border-color:rgba(232,162,80,.55);}
.bd-textbox.tint-crimson{background:rgba(224,80,74,.13);border-color:rgba(224,80,74,.55);}
.bd-textbox.tint-rose{background:rgba(224,106,154,.13);border-color:rgba(224,106,154,.55);}
.bd-textbox.tint-violet{background:rgba(156,106,222,.13);border-color:rgba(156,106,222,.55);}
.bd-textbox.tint-azure{background:rgba(76,159,254,.13);border-color:rgba(76,159,254,.55);}
.bd-textbox.tint-jade{background:rgba(63,185,132,.13);border-color:rgba(63,185,132,.6);}
.bd-textbox.tint-slate{background:rgba(143,163,176,.13);border-color:rgba(143,163,176,.6);}
.bd-textbox.tint-charcoal{background:rgba(52,54,58,.34);border-color:rgba(148,152,160,.55);}
.bd-textbox.tint-navy{background:rgba(51,70,92,.30);border-color:rgba(112,142,176,.55);}
.bd-textbox.tint-umber{background:rgba(122,90,67,.26);border-color:rgba(122,90,67,.75);}
.bd-textbox.tint-clay{background:rgba(154,100,94,.24);border-color:rgba(154,100,94,.75);}
.bd-tb-color{display:inline-flex;align-items:center;justify-content:center;}
.bd-tb-color .bd-dot{width:13px;height:13px;border-radius:50%;border:1.5px solid rgba(255,255,255,.5);}
/* swatches live INSIDE the pill (an expanding segment after the ○) — the old floating tray anchored
   74px above the box and vanished behind the header / off-canvas when the box sat near the top. */
.bd-tb-swatches{display:none;gap:6px;align-items:center;padding:0 4px 0 8px;margin-left:3px;border-left:1px solid rgba(255,255,255,.16);}
.bd-tb-swatches.open{display:flex;}
.bd-tb-swatches button{width:16px;height:16px;border-radius:50%;border:1.5px solid rgba(255,255,255,.35);cursor:pointer;padding:0;}
.bd-tb-swatches button:hover{border-color:#fff;}
.bd-tb-swatches button.clear{background:rgba(255,255,255,.1);}
body.light .bd-tb-swatches{border-left-color:rgba(0,0,0,.16);}
.bd-textbox .bd-text{height:auto;min-height:38px;padding:8px 11px;overflow:hidden;cursor:grab;}
/* collapse/expand: .bd-min shows ONLY the first block, one clean line — no fade mask (it blurred the heading itself) */
.bd-textbox.bd-min{min-height:0!important;}
.bd-textbox.bd-min .bd-text{max-height:44px;overflow:hidden;}
.bd-textbox.bd-min .bd-text>*:not(:first-child){display:none;}
.bd-textbox.bd-min .bd-text>:first-child{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;}
.bd-fold{position:absolute;top:5px;right:6px;width:20px;height:20px;border-radius:6px;display:none;align-items:center;justify-content:center;font-size:12px;color:rgba(242,248,244,.55);cursor:pointer;z-index:6;background:rgba(255,255,255,.07);}
.bd-el:hover .bd-fold{display:flex;}
.bd-fold:hover{color:#f2f8f4;background:rgba(255,255,255,.16);}
body.light .bd-fold{color:rgba(20,30,24,.6);background:rgba(0,0,0,.07);}
body.light .bd-fold:hover{color:#141e18;background:rgba(0,0,0,.14);}
/* slim the native scrollbar — the fat default owned the outer ~12px of the box and ate edge-resize grabs */
.bd-textbox .bd-text::-webkit-scrollbar{width:6px;height:6px;}
.bd-textbox .bd-text::-webkit-scrollbar-thumb{background:transparent;border-radius:3px;}
.bd-textbox .bd-text:hover::-webkit-scrollbar-thumb{background:rgba(255,255,255,.22);}
.bd-textbox .bd-text::-webkit-scrollbar-track{background:transparent;}
.bd-textbox .bd-text:focus{cursor:text;}
.bd-textbox:focus-within{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 8px 22px rgba(0,0,0,.28);}
.bd-textbox .bd-text h3{font-size:17px;font-weight:650;line-height:1.3;margin:0 0 4px;color:var(--ink);}
.bd-textbox .bd-text h2{font-size:21px;font-weight:700;line-height:1.25;margin:0 0 4px;color:var(--ink);}   /* mind-map hub — the center idea reads bigger than its branches */
.bd-textbox .bd-text p,.bd-textbox .bd-text div{margin:0;}
/* Heading/Body pill — floats above the box, only while editing */
.bd-tb-fmt{position:absolute;top:-38px;left:0;display:none;gap:3px;padding:4px;border-radius:9px;background:rgba(10,14,18,.94);border:1px solid rgba(255,255,255,.16);box-shadow:0 8px 20px rgba(0,0,0,.35);z-index:6;}
.bd-textbox:focus-within .bd-tb-fmt{display:flex;}
.bd-tb-fmt button{border:0;background:none;color:var(--ink-soft);font-family:inherit;font-size:12px;font-weight:600;padding:4px 9px;border-radius:6px;cursor:pointer;line-height:1;}
.bd-tb-fmt button:hover{background:rgba(255,255,255,.1);color:var(--ink);}
.bd-tb-fmt button i{font-size:13px;}
.bd-tb-sep{width:1px;align-self:stretch;margin:2px 3px;background:rgba(255,255,255,.16);}
body.light .bd-tb-sep{background:rgba(0,0,0,.16);}
.bd-textbox .bd-text ul{margin:0;padding-left:20px;}
.bd-textbox .bd-text li{margin:1px 0;}
body.light .bd-tb-fmt{background:rgba(255,255,255,.96);border-color:rgba(0,0,0,.14);}
body.light .bd-textbox{background:rgba(255,255,255,.42);}
/* ---- board lines (SVG layer) ---- */
.bd-lines{position:absolute;overflow:visible;}
/* stroke widths scale by --inv (1/zoom) instead of vector-effect:non-scaling-stroke — WKWebView's
   repaint invalidation is broken for non-scaling strokes (deleted lines left stale pixels on screen) */
.bd-line{stroke:rgba(236,242,247,.72);stroke-width:calc(2.2px*var(--inv,1));stroke-linecap:round;fill:none;}
/* ---- timeline (template spine + drops) ---- */
.bd-line.bd-spine{stroke-width:calc(2.6px*var(--inv,1));stroke:rgba(236,242,247,.82);}
/* a selected line must LOOK selected — ember glow, unmistakable (old var(--accent) was off-white on white) */
.bd-line.sel{stroke:#ffb46a;stroke-width:calc(3px*var(--inv,1));filter:drop-shadow(0 0 6px rgba(232,162,80,.85));}
.bd-tl-dot{stroke:rgba(0,0,0,.5);stroke-width:1.2;pointer-events:none;}
.bd-spine-add{position:absolute;width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(14,16,21,.85);border:1px solid rgba(255,255,255,.4);color:var(--ink);font-size:12px;cursor:pointer;opacity:.55;transition:opacity .15s,border-color .15s;transform:translate(-50%,-50%) scale(var(--inv,1));transform-origin:center;z-index:5;}
.bd-spine-add:hover{opacity:1;border-color:var(--accent);}
.bd-line-prev{stroke:rgba(236,242,247,.7);stroke-dasharray:6 5;stroke-width:calc(2.2px*var(--inv,1));}
.bd-line-hint{position:absolute;padding:4px 10px;border-radius:999px;background:rgba(14,16,21,.88);border:1px solid rgba(255,255,255,.28);color:var(--ink-soft);font-size:11px;white-space:nowrap;pointer-events:none;z-index:7;transform:scale(var(--inv,1));transform-origin:top left;}
.bd-line-hit{stroke:transparent;stroke-width:calc(18px*var(--inv,1));stroke-linecap:round;fill:none;pointer-events:stroke;cursor:grab;}
body.light .bd-line,body.light .bd-line-prev{stroke:rgba(20,30,24,.62);}
body.light .bd-line.sel{stroke:#d97d1e;}
/* endpoint + delete handles for a selected line (HTML, zoom-invariant via --inv) */
.bd-lh{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:var(--accent);border:2px solid rgba(0,0,0,.4);cursor:grab;z-index:6;transform:scale(var(--inv,1));transform-origin:center;box-shadow:0 1px 4px rgba(0,0,0,.4);}
.bd-lh-bow{background:rgba(12,14,16,.88);border:2px solid var(--accent);}
/* tap-to-branch: hover ⊕ on a card's sides spawns a connected child box */
.bd-branch{position:absolute;width:26px;height:26px;border-radius:50%;background:rgba(12,14,16,.92);border:1.5px solid rgba(255,255,255,.35);color:rgba(242,248,244,.75);display:flex;opacity:0;visibility:hidden;pointer-events:none;align-items:center;justify-content:center;font-size:13px;cursor:pointer;z-index:7;box-shadow:0 2px 8px rgba(0,0,0,.35);transition:opacity .15s .22s, visibility 0s .37s;}
.bd-branch::before{content:"";position:absolute;inset:-7px;border-radius:50%;}   /* v942: near-misses land, and the .22s linger forgives them */
.bd-branch:hover{border-color:var(--accent);color:var(--accent);}
.bd-el:hover .bd-branch, .bd-branch:hover{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s;}
.bd-branch-t{top:-13px;left:50%;margin-left:-13px;}
.bd-branch-r{right:-13px;top:50%;margin-top:-13px;}
.bd-branch-b{bottom:-13px;left:50%;margin-left:-13px;}
.bd-branch-l{left:-13px;top:50%;margin-top:-13px;}
body.light .bd-branch{background:rgba(255,255,255,.95);border-color:rgba(0,0,0,.3);color:#333;}
.bd-grip{display:flex;justify-content:center;color:rgba(242,248,244,.4);font-size:13px;padding:3px 0 0;cursor:grab;}
.bd-text{padding:4px 12px 10px;font-size:13.5px;line-height:1.55;outline:none;color:#f2f8f4;min-height:22px;}
.bd-text:empty::before{content:"Type…";color:rgba(242,248,244,.4);}
body.light .bd-note{background:rgba(250,253,250,.88);}
body.light .bd-text{color:#16241b;}

/* ---------- dock ---------- */
#dock{padding:0 16px 26px;display:flex;flex-direction:column;gap:16px;}
.dock-panel{padding:14px 18px 16px;}
.dock-head{display:flex;align-items:center;gap:9px;margin-bottom:10px;}
.dock-title{font-size:15px;font-weight:600;}
.dock-edit{outline:none;font-family:var(--editor-font);font-size:var(--ed-size,15px);line-height:1.75;max-height:480px;overflow-y:auto;color:var(--ink);}
.dock-edit h1{font-size:1.6em;font-weight:600;margin:14px 0 8px;line-height:1.3;}
.dock-edit h2{font-size:1.35em;font-weight:600;margin:12px 0 7px;line-height:1.3;}
.dock-edit h3{font-size:1.12em;font-weight:600;margin:10px 0 6px;line-height:1.3;}
.dock-edit p,.dock-edit div{margin:0 0 6px;}
.dock-edit ul,.dock-edit ol{margin:0 0 10px 24px;}
.dock-edit blockquote{border-left:2px solid var(--gold);padding:4px 0 4px 16px;margin:8px 0 12px;color:var(--ink-soft);font-style:italic;}
.dock-edit hr{border:none;border-top:1px solid rgba(255,255,255,.3);margin:14px 0;}
.dock-edit mark,.dock-edit span[style*="background"]{background:var(--hl);color:inherit;border-radius:3px;padding:0 2px;}
.dock-edit img{max-width:45%;border-radius:12px;border:1px solid rgba(255,255,255,.25);margin:8px 0;display:block;}

/* tables */
.ed-table{border-collapse:collapse;margin:12px 0;min-width:60%;}
.ed-table th,.ed-table td{border:1px solid rgba(255,255,255,.24);padding:6px 11px;font-size:.95em;min-width:64px;}
.ed-table th{background:rgba(255,255,255,.09);font-weight:600;text-align:left;}
body.light .ed-table th,body.light .ed-table td{border-color:rgba(20,30,24,.3);}
body.light .ed-table th{background:rgba(20,30,24,.07);}

/* free card wall */


/* board zoom readout */
.bd-zoom{position:absolute;right:10px;bottom:10px;z-index:5;font-size:11px;font-weight:600;padding:4px 10px;border-radius:8px;background:rgba(8,13,10,.72);border:1px solid rgba(255,255,255,.16);color:#edf3ef;cursor:pointer;user-select:none;font-variant-numeric:tabular-nums;}
.bd-zoom:hover{background:rgba(8,13,10,.9);}
.bd-x{position:absolute;top:-7px;right:-7px;width:17px;height:17px;border-radius:50%;background:rgba(12,9,9,.88);border:1px solid rgba(255,255,255,.3);color:#f0a0a0;display:none;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:4;transform:scale(var(--inv,1));transform-origin:center;}
.bd-x:hover{background:#7d1416;color:#fff;}
.bd-el:hover .bd-x{display:flex;}
/* Notes-canvas sticky extras: … menu, created date, linked badge, filed/converted card */
.bd-more{position:absolute;top:-7px;right:-7px;width:18px;height:18px;border-radius:50%;background:rgba(12,15,19,.9);border:1px solid rgba(255,255,255,.3);color:rgba(242,248,244,.78);display:none;align-items:center;justify-content:center;font-size:11px;cursor:pointer;z-index:4;transform:scale(var(--inv,1));transform-origin:center;padding:0;}
.bd-more:hover{background:rgba(255,255,255,.18);color:#fff;}
.bd-el:hover .bd-more{display:flex;}
.bd-date{padding:0 12px 8px;font-size:10px;color:rgba(242,248,244,.42);display:flex;align-items:center;gap:5px;}
.bd-linked{display:inline-flex;align-items:center;gap:3px;color:rgba(150,200,255,.72);}
.bd-linked i{font-size:10px;}
.bd-filed{background:rgba(16,20,26,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px dashed rgba(255,255,255,.22);border-radius:13px;box-shadow:0 8px 22px rgba(0,0,0,.3);padding:11px 13px 12px;}
.bd-filed-tag{display:flex;align-items:center;gap:6px;font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:rgba(242,248,244,.5);margin-bottom:6px;}
.bd-filed-tag i{font-size:12px;}
.bd-filed-text{font-size:12.5px;line-height:1.5;color:rgba(242,248,244,.62);max-height:64px;overflow:hidden;}
.bd-filed-open{margin-top:9px;display:inline-flex;align-items:center;gap:4px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16);color:rgba(242,248,244,.85);font:inherit;font-size:11px;padding:4px 9px;border-radius:7px;cursor:pointer;}
.bd-filed-open:hover{background:rgba(255,255,255,.13);color:#fff;}
body.light .bd-filed{background:rgba(248,250,248,.85);}
body.light .bd-filed-text{color:rgba(22,36,27,.7);}

@keyframes obs-in{from{opacity:0;}to{opacity:1;}}

/* top row inside editor glass: sub-page chip (left) + pulse (right) */
.ed-head-row{display:flex;align-items:center;gap:12px;margin-bottom:8px;min-width:0;}
.ed-head-row #ed-subs{flex:1;min-width:0;}
/* page pulse — quiet inline indicator, sits in the editor top-right */
#page-pulse{
  display:flex;align-items:center;gap:10px;padding:4px 0;font-size:12px;color:var(--ink-soft);
  flex:none;justify-content:flex-end;margin-left:auto;
}
#ed-words{font-weight:650;font-size:14px;color:var(--accent);font-variant-numeric:tabular-nums;text-shadow:0 0 14px color-mix(in srgb, var(--accent) 55%, transparent);}
.pp-beat{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 9px var(--accent);animation:ppbeat 2.4s ease-in-out infinite;flex:none;}
@keyframes ppbeat{0%,100%{opacity:.45;transform:scale(.8);}50%{opacity:1;transform:scale(1.2);}}
.pp-chip{
  display:inline-flex;padding:3px 10px;border-radius:999px;background:color-mix(in srgb,var(--accent) 13%,transparent);
  color:var(--accent);font-size:11.5px;cursor:pointer;white-space:nowrap;flex:none;
  border:1px solid color-mix(in srgb,var(--accent) 32%,transparent);
  box-shadow:0 0 10px color-mix(in srgb,var(--accent) 10%,transparent);
  transition:var(--fx-chrome);
}
.pp-chip:hover{background:color-mix(in srgb,var(--accent) 28%,transparent);box-shadow:0 0 16px color-mix(in srgb,var(--accent) 42%,transparent);transform:translateY(-1px);}
/* backlinks: quieter chip, distinct from forward-links (topics) */
.pp-chip-back{background:rgba(255,255,255,.06);color:var(--ink-soft);border-color:rgba(255,255,255,.12);box-shadow:none;}
.pp-chip-back:hover{background:rgba(255,255,255,.14);color:var(--ink);box-shadow:0 0 12px rgba(255,255,255,.10);transform:translateY(-1px);}
.pp-sep{font-size:11px;color:var(--ink-faint);flex:none;margin:0 4px 0 2px;}

/* live wiki links */
#ed-text .wiki,.dock-edit .wiki{color:var(--accent);border-bottom:1px dotted color-mix(in srgb,var(--accent) 65%,transparent);cursor:pointer;text-shadow:0 0 10px color-mix(in srgb,var(--accent) 30%,transparent);}
/* unresolved [[link]] = a topic (no article yet) — gold + dashed to read as tentative */
#ed-text .wiki-topic,.dock-edit .wiki-topic{color:var(--gold,#D6B24A);border-bottom-style:dashed;border-bottom-color:color-mix(in srgb,var(--gold,#D6B24A) 60%,transparent);text-shadow:0 0 10px color-mix(in srgb,var(--gold,#D6B24A) 26%,transparent);}
#ed-text .tag,.dock-edit .tag{color:#9DB4C4;font-weight:500;}
/* board text boxes light up #tags and [[links]] like the editor (display-only decoration) */
.bd-text .bd-tag{color:#9DB4C4;font-weight:500;}
.bd-text .bd-wiki{color:var(--accent);border-bottom:1px dotted color-mix(in srgb,var(--accent) 65%,transparent);cursor:pointer;text-shadow:0 0 10px color-mix(in srgb,var(--accent) 30%,transparent);}
.bd-text .bd-wiki.bd-wiki-topic{color:var(--gold,#D6B24A);border-bottom-style:dashed;border-bottom-color:color-mix(in srgb,var(--gold,#D6B24A) 60%,transparent);text-shadow:0 0 10px color-mix(in srgb,var(--gold,#D6B24A) 26%,transparent);}
/* tag chips in the pulse strip */
.pp-chip-tag{background:color-mix(in srgb,#6E8294 16%,transparent);color:#A8BCC9;border-color:color-mix(in srgb,#6E8294 32%,transparent);box-shadow:none;}
.pp-chip-tag:hover{background:color-mix(in srgb,#6E8294 28%,transparent);color:#fff;box-shadow:0 0 12px color-mix(in srgb,#6E8294 35%,transparent);transform:translateY(-1px);}
/* library tag bar */
.lv-tag{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:transparent;border:1px solid transparent;color:var(--ink-soft);font:inherit;font-size:12.5px;padding:6px 10px;border-radius:9px;cursor:pointer;transition:var(--fx-chrome);}
.lv-tag:hover{background:rgba(255,255,255,.06);color:var(--ink);}
.lv-tag.on{background:color-mix(in srgb,#6E8294 20%,rgba(10,10,12,.4));border-color:color-mix(in srgb,#6E8294 55%,var(--edge));color:#fff;}
.lv-tag-n{margin-left:auto;font-size:10.5px;color:var(--ink-faint);background:rgba(255,255,255,.07);border-radius:999px;padding:0 6px;font-variant-numeric:tabular-nums;flex:none;}
.lv-tag.on .lv-tag-n{background:rgba(255,255,255,.18);color:#fff;}
.bd-el video{display:block;width:100%;border-radius:12px;border:1px solid rgba(255,255,255,.25);background:#000;box-shadow:0 12px 32px rgba(0,0,0,.4);}
#bg::after{z-index:1;}
/* ===== drag a Vault card onto a notebook (v1209) — pointer drag, see installVaultCardDrag ===== */
.rv3-row.rv3-drop{background:rgba(214,178,74,.18)!important;box-shadow:inset 0 0 0 1px rgba(214,178,74,.55);color:var(--ink);}
.rv3-row.rv3-drop .nm{color:#E8C766;}
.rv-dragghost{position:fixed;z-index:9999;pointer-events:none;max-width:300px;padding:8px 13px;border-radius:10px;
  background:rgba(8,10,13,.95);border:1px solid rgba(214,178,74,.5);color:var(--ink);font-size:12.5px;font-weight:600;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:0 14px 34px rgba(0,0,0,.55);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);}
.rv-dragghost i{margin-right:7px;color:#D6B24A;}
body.rv-dragging,body.rv-dragging *{cursor:grabbing!important;user-select:none;}
/* ===== THE FORK (v1215) — grounded vs open, chosen per chat in the Workbench ===== */
.askw-fork{display:flex;align-items:center;gap:11px;flex-wrap:wrap;margin:0 0 9px;}
.fork-seg{display:inline-flex;border:1px solid var(--edge);border-radius:9px;overflow:hidden;background:rgba(0,0,0,.28);flex:none;}
.fork-seg button{padding:5px 12px;font-size:12px;color:var(--ink-faint);background:none;border:0;cursor:pointer;
  display:flex;align-items:center;gap:6px;font-family:inherit;transition:color .15s,background .15s;}
.fork-seg button .fdot{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.45;}
.fork-seg button:hover{color:var(--ink);}
.fork-seg button.on{color:var(--ink);background:rgba(255,255,255,.06);}
.fork-seg button.on .fdot{opacity:1;}
.fork-seg button.on.grounded{color:#5fcf94;background:rgba(95,207,148,.11);box-shadow:inset 0 0 0 1px rgba(95,207,148,.30);}
.fork-seg button.on.openm{color:var(--ember);background:rgba(255,140,74,.11);box-shadow:inset 0 0 0 1px rgba(255,140,74,.34);}
.askw-fork .fork-hint{font-size:11.5px;color:var(--ink-faint);line-height:1.4;}
.askw-fork .fork-hint.openm{color:var(--ember);opacity:.85;}
.bd-guide{position:absolute;background:#ff4fa8;box-shadow:0 0 6px rgba(255,79,168,.7);pointer-events:none;z-index:6;}
/* Stage A multi-select: selection outline + marquee box */
.bd-el.bd-sel{outline:1.5px solid #4c9ffe;outline-offset:2px;box-shadow:0 0 0 3px rgba(76,159,254,.18);border-radius:4px;}
.bd-marquee{position:absolute;border:1px solid #4c9ffe;background:rgba(76,159,254,.12);pointer-events:none;z-index:8;border-radius:2px;}
/* equal-spacing measurement bars (distribution guides) */
.bd-space{position:absolute;height:0;border-top:1.5px solid #ff4fa8;box-shadow:0 0 5px rgba(255,79,168,.55);pointer-events:none;z-index:6;}
.bd-space::before,.bd-space::after{content:"";position:absolute;top:-5px;width:1.5px;height:11px;background:#ff4fa8;}
.bd-space::before{left:0;}.bd-space::after{right:0;}
.bd-space-num{position:absolute;left:50%;top:-7px;transform:translate(-50%,-100%);background:#ff4fa8;color:#fff;font-size:9px;font-weight:600;padding:1px 5px;border-radius:5px;white-space:nowrap;}
/* vertical measurement bar — equal-HEIGHT match feedback during resize (mirror of .bd-space) */
.bd-vspace{position:absolute;width:0;border-left:1.5px solid #ff4fa8;box-shadow:0 0 5px rgba(255,79,168,.55);pointer-events:none;z-index:6;}
.bd-vspace::before,.bd-vspace::after{content:"";position:absolute;left:-5px;height:1.5px;width:11px;background:#ff4fa8;}
.bd-vspace::before{top:0;}.bd-vspace::after{bottom:0;}
.bd-vspace-num{position:absolute;top:50%;left:-7px;transform:translate(-100%,-50%);background:#ff4fa8;color:#fff;font-size:9px;font-weight:600;padding:1px 5px;border-radius:5px;white-space:nowrap;}
#ed-backlinks{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 14px;border-radius:12px;margin-top:10px;}

/* polish: widgets breathe in */
@keyframes wfade{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:translateY(0);}}
.widget{animation:wfade .4s ease backwards;}
.dock-panel{animation:wfade .45s ease backwards;}

.ib-file{display:inline-flex;align-items:center;gap:5px;padding:3.5px 11px;border-radius:999px;font-size:11px;font-weight:500;cursor:pointer;flex:none;white-space:nowrap;color:var(--ink-soft);background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);opacity:0;transition:opacity .14s,background .14s,border-color .14s,color .14s;}
.inbox-card:hover .ib-file{opacity:1;}
.ib-file:hover{color:var(--gold,#D6B24A);background:color-mix(in srgb, var(--gold,#D6B24A) 16%, transparent);border-color:color-mix(in srgb, var(--gold,#D6B24A) 42%, transparent);}
.inbox-card .ib-file{flex:none;width:auto;white-space:nowrap;align-self:center;}
/* image layout (right-click an image) — round-trips in md as {.float-l|.float-r|.img-center|.img-full}.
   #ed-text is overflow:auto (a BFC), so floats stay contained; the read-only ref pane mirrors them. */
#ed-text img.float-l,#ed-ref img.float-l{float:left;margin:4px 20px 10px 0;max-width:42%;}
#ed-text img.float-r,#ed-ref img.float-r{float:right;margin:4px 0 10px 20px;max-width:42%;}
#ed-text img.img-center,#ed-ref img.img-center{display:block;margin:10px auto;}
#ed-text img.img-full,#ed-ref img.img-full{max-width:100%;}
/* live insertion caret while dragging an image to a new spot in the text */
.ed-drop-caret{position:fixed;width:2px;border-radius:1px;background:var(--gold,#D6B24A);box-shadow:0 0 8px color-mix(in srgb, var(--gold,#D6B24A) 60%, transparent);z-index:9999;pointer-events:none;}
/* zone rail while dragging an image — glows on the edge the image will float to (left/right thirds) */
.ed-drop-zone{position:fixed;width:3px;border-radius:2px;background:color-mix(in srgb, var(--gold,#D6B24A) 80%, transparent);box-shadow:0 0 12px color-mix(in srgb, var(--gold,#D6B24A) 55%, transparent);z-index:9999;pointer-events:none;}
/* the pointer-drag ghost — a small floating copy of the image following the cursor */
.ed-drag-ghost{position:fixed;z-index:9999;pointer-events:none;opacity:.55;max-width:180px;max-height:140px;border-radius:10px;border:1px solid rgba(255,255,255,.35);box-shadow:0 10px 30px rgba(0,0,0,.5);}
body.ed-img-dragging{cursor:grabbing;}
body.ed-img-dragging #ed-text{-webkit-user-select:none;user-select:none;}
.dock-edit img.float-l{float:left;margin:4px 16px 8px 0;max-width:42%;}
.dock-edit img.float-r{float:right;margin:4px 0 8px 16px;max-width:42%;}
#ed-main{position:relative;}
/* the glass dial — hold in the dead space above the title, drag vertically (v935) */
#gd-hud{position:fixed;z-index:12000;transform:translate(-50%,-100%);padding:7px 13px;border-radius:999px;background:rgba(15,16,19,.88);border:1px solid rgba(255,255,255,.18);color:var(--ink);font-size:12.5px;font-weight:600;letter-spacing:.02em;pointer-events:none;opacity:0;transition:opacity .18s;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);white-space:nowrap;}
#gd-hud.on{opacity:1;}
body.gd-active, body.gd-active #ed-main{cursor:ns-resize;-webkit-user-select:none;user-select:none;}
.imgx{position:absolute;width:22px;height:22px;border-radius:50%;background:rgba(12,9,9,.88);border:1px solid rgba(255,255,255,.35);color:#f0a0a0;display:none;align-items:center;justify-content:center;font-size:11px;cursor:pointer;z-index:9;}
.imgx:hover{background:#7d1416;color:#fff;}
.imgrs{position:absolute;width:22px;height:22px;border-radius:50%;background:rgba(10,14,11,.88);border:1px solid rgba(255,255,255,.35);color:var(--accent);display:none;align-items:center;justify-content:center;font-size:11px;cursor:nwse-resize;z-index:9;}
.imgal{position:absolute;display:none;gap:2px;padding:3px;border-radius:9px;background:rgba(10,14,11,.9);border:1px solid rgba(255,255,255,.3);z-index:9;}
.imgal span{width:22px;height:20px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--ink-soft);cursor:pointer;}
.imgal span:hover{background:rgba(255,255,255,.15);color:var(--ink);}

/* ---------- sub-pages & library ---------- */
.lib-pill{
  display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;cursor:pointer;flex:none;
  font-size:12px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--ink);
  background:rgba(255,255,255,.07);border:1px solid var(--edge);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  transition:background .15s,color .15s,border-color .15s;
}
.lib-pill i{font-size:15px;}
.lib-pill:hover{background:rgba(255,255,255,.15);color:var(--ink);}
.lib-pill.active{background:rgba(255,255,255,.18);color:var(--ink);border-color:color-mix(in srgb,#fff 22%,var(--edge));}

.crumb-sep{color:var(--ink-faint);font-size:12px;}
.crumb-seg{cursor:pointer;color:var(--ink-soft);transition:color .12s;}
.crumb-seg:hover{color:var(--ink);text-shadow:0 0 10px color-mix(in srgb,var(--accent) 40%,transparent);}
.crumb-cur{color:var(--ink);cursor:default;}

#ed-subs{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:0;flex:none;}
#ed-subs:empty{display:none;}
.ed-head-row #ed-subs:empty{display:none;}
.pp-subadd{display:inline-flex;align-items:center;gap:5px;flex:none;cursor:pointer;margin-left:8px;
  font-size:11.5px;color:var(--ink-faint);border:1px dashed var(--edge);border-radius:999px;padding:3px 10px;
  transition:color .12s,border-color .12s,background .12s;}
.pp-subadd i{font-size:12px;}
.pp-subadd:hover{color:var(--ink);border-color:rgba(255,255,255,.4);background:rgba(255,255,255,.06);}
.sub-chip{
  display:inline-flex;align-items:center;gap:6px;padding:4px 13px;border-radius:999px;cursor:pointer;flex:none;
  font-size:12px;color:var(--ink);background:rgba(255,255,255,.10);border:1px solid var(--edge);
  transition:var(--fx-chrome);white-space:nowrap;
}
.sub-chip i{font-size:12px;color:var(--ink-soft);}
.sub-chip:hover{background:rgba(255,255,255,.18);transform:translateY(-1px);}
.sub-chip.sub-add{background:transparent;border-style:dashed;color:var(--ink-faint);}
.sub-chip.sub-add:hover{color:var(--ink);border-color:rgba(255,255,255,.45);background:rgba(255,255,255,.07);}
body.light .sub-chip{background:rgba(20,40,28,.07);}
body.light .sub-chip:hover{background:rgba(20,40,28,.13);}

/* ============ LIBRARY v2 — faceted card browser ============ */
#library2{flex:1;min-height:0;display:grid;grid-template-columns:280px minmax(0,1fr);gap:20px;padding:6px 28px 24px;overflow:hidden;}
.lib-side{overflow-y:auto;display:flex;flex-direction:column;gap:3px;padding:12px 8px 12px 10px;}   /* its own glass housing (his 7/8 call) — same shared tint as the main panel, scene shows in the seam */
.lib-side-sect{display:flex;align-items:center;gap:8px;font-size:10.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);margin:18px 4px 9px;}
.lib-side-sect:first-child{margin-top:2px;}
.lib-side-sect i{font-size:13px;}
.lib-facet{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:transparent;border:1px solid transparent;
  color:var(--ink-soft);font:inherit;font-size:13px;padding:8px 11px;border-radius:10px;cursor:pointer;transition:background .12s,color .12s,border-color .12s;}
.lib-facet:hover{background:rgba(255,255,255,.05);color:var(--ink);}
.lib-facet.on{background:color-mix(in srgb,var(--accent) 16%,rgba(255,255,255,.04));border-color:color-mix(in srgb,var(--accent) 38%,var(--edge));color:var(--ink);}
.lib-facet i{font-size:14px;color:var(--ink-faint);flex:none;width:16px;}
.lib-fdot{width:9px;height:9px;border-radius:50%;flex:none;}
.lib-flabel{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lib-fn{font-size:11px;color:var(--ink-faint);font-variant-numeric:tabular-nums;flex:none;}
.lib-facet.on .lib-fn{color:var(--ink-soft);}
.lib-facet-fav i{color:#E7C24B;}
.lib-facet-fav.on{background:color-mix(in srgb,#E7C24B 16%,rgba(255,255,255,.04));border-color:color-mix(in srgb,#E7C24B 42%,var(--edge));}
.lib-showmore{display:flex;align-items:center;gap:7px;background:transparent;border:0;color:var(--ink-faint);font:inherit;font-size:12px;padding:8px 11px;cursor:pointer;}
.lib-showmore:hover{color:var(--ink);}
.lib-main{overflow-y:auto;display:flex;flex-direction:column;min-height:0;padding-right:4px;}
/* v1381 (his catch 8/2): the floating selection bar is position:fixed, so it sat ON TOP of the last
   row and the "load more" at the end of the list — unreachable without closing the selection. The
   scroller reserves the bar's height (bar ~54px + its 26px offset + air) whenever selection mode is
   on, so the tail of the list can always be scrolled clear of it. Class is set by mountPageSelBar. */
body.sel-active .lib-main{padding-bottom:calc(var(--selbar-h, 56px) + 48px);}
.lib-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:18px;flex-wrap:wrap;}
.lib-title{font-size:34px;font-weight:600;line-height:1.1;}
.lib-sub{font-size:13.5px;color:var(--ink-soft);margin-top:6px;}
.lib-stats{display:flex;gap:26px;align-items:center;flex-wrap:wrap;}
.lib-stat{display:flex;align-items:center;gap:10px;}
.lib-stat i{font-size:18px;}
.lib-stat-n{font-size:19px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1;}
.lib-stat-l{font-size:10.5px;color:var(--ink-faint);margin-top:3px;letter-spacing:.03em;}
.lib-search{display:flex;align-items:center;gap:12px;padding:13px 18px;border-radius:14px;background:rgba(255,255,255,.05);border:1px solid var(--edge);margin-bottom:16px;}
.lib-search:focus-within{border-color:color-mix(in srgb,var(--accent) 45%,transparent);}
.lib-search i{font-size:16px;color:var(--ink-faint);}
.lib-search input{flex:1;background:transparent;border:0;outline:0;color:var(--ink);font-size:14px;font-family:inherit;}
.lib-search input::placeholder{color:var(--ink-faint);}
.lib-kbd{font-size:11px;color:var(--ink-faint);border:1px solid var(--edge);border-radius:6px;padding:2px 7px;}
.lib-toolbar{display:flex;align-items:center;gap:14px;margin-bottom:18px;}
.lib-sort{display:flex;align-items:center;gap:9px;}
.lib-sort-lbl{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);}
.lib-sort select{background:rgba(255,255,255,.05);border:1px solid var(--edge);border-radius:10px;color:var(--ink);font:inherit;font-size:13px;padding:8px 12px;outline:none;cursor:pointer;}
.lib-viewtoggle{margin-left:auto;display:flex;gap:4px;background:rgba(255,255,255,.04);border:1px solid var(--edge);border-radius:11px;padding:3px;}
.lib-vt{display:flex;align-items:center;gap:7px;background:transparent;border:0;color:var(--ink-soft);font:inherit;font-size:12.5px;padding:7px 14px;border-radius:8px;cursor:pointer;}
.lib-vt.on{background:color-mix(in srgb,var(--accent) 20%,rgba(255,255,255,.06));color:var(--ink);}
.lib-vt i{font-size:14px;}
/* card grid */
/* v1381 (his call 8/2): FOUR ACROSS. minmax 280→220 so a normal window fits 4 columns; the card and
   its type step down to match. Still a fluid auto-fill grid — a narrow window falls back to 3, then 2.
   ⚠ The bottom padding is the SELECTION BAR's clearance, not decoration — see .lib-main below. */
.lib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;margin-bottom:24px;}
.lib-card{position:relative;height:206px;border-radius:16px;overflow:hidden;cursor:pointer;isolation:isolate;
  border:1px solid var(--edge);transition:transform .14s ease,border-color .14s;}
.lib-card:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--st) 45%,var(--edge));}
.lib-card-cov{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block;}
.lib-card-noimg{background:rgba(18,20,24,.34);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);}
/* cover-less cards: lighten the bottom veil so it reads as clean glass, not a dark slab */
.lib-card:has(.lib-card-noimg) .lib-card-grad{background:linear-gradient(to top,rgba(0,0,0,.46) 0%,rgba(0,0,0,.14) 46%,rgba(0,0,0,0) 100%);}
.lib-card-grad{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(to top,rgba(0,0,0,.92) 0%,rgba(0,0,0,.6) 30%,rgba(0,0,0,.12) 62%,rgba(0,0,0,.28) 100%);}
/* v1417 strip pass: no longer absolutely positioned over the cover — it sits in .lib-card-body's
   flow (see the renderer), so the capsule/blur/border are gone and the dot carries the status colour.
   align-self keeps it hugging its text instead of stretching the full card width. */
.lib-card-status{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;
  font-size:11px;font-weight:500;color:color-mix(in srgb,var(--st) 78%,#fff);
  text-shadow:0 1px 3px rgba(0,0,0,.55);}
.lib-card-sdot{width:7px;height:7px;border-radius:50%;background:var(--st);flex:none;}
.lib-card-star{position:absolute;top:11px;right:11px;z-index:3;width:28px;height:28px;border-radius:50%;border:0;cursor:pointer;
  background:rgba(8,9,11,.5);color:rgba(255,255,255,.8);display:flex;align-items:center;justify-content:center;font-size:14px;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:color .12s,background .12s;}
.lib-card-star:hover{background:rgba(8,9,11,.78);color:#fff;}
.lib-card-star.on{color:#E7C24B;}
.lib-card-body{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:13px 13px 12px;display:flex;flex-direction:column;gap:4px;}
.lib-card-title{font-size:15px;font-weight:600;color:#f4f1e8;line-height:1.25;text-shadow:0 1px 6px rgba(0,0,0,.6);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.lib-card-sub{font-size:12.5px;color:rgba(240,236,228,.82);text-shadow:0 1px 4px rgba(0,0,0,.55);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lib-card-meta{font-size:10.8px;color:rgba(240,236,228,.66);margin-top:2px;}
.lib-card-tags{display:flex;gap:4px;margin-top:5px;flex-wrap:nowrap;overflow:hidden;}
.lib-ctag{font-size:9.8px;color:rgba(244,241,232,.9);background:rgba(255,255,255,.13);border-radius:999px;padding:2px 8px;cursor:pointer;white-space:nowrap;
  -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);}
.lib-ctag:hover{background:rgba(255,255,255,.24);}
.lib-ctag-more{font-size:10.5px;color:rgba(240,236,228,.6);padding:2px 4px;}
/* list view */
.lib-list{display:flex;flex-direction:column;gap:2px;margin-bottom:24px;}
.lib-lrow{display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:10px;cursor:pointer;transition:background .12s;}
.lib-lrow:hover{background:rgba(255,255,255,.05);}
.lib-lr-dot{width:8px;height:8px;border-radius:50%;flex:none;}
.lib-lr-title{font-size:14px;color:var(--ink);font-weight:500;flex:none;max-width:280px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lib-lr-sub{font-size:12.5px;color:var(--ink-faint);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lib-lr-space{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink-soft);flex:none;}
.lib-lr-meta{font-size:11.5px;color:var(--ink-faint);flex:none;font-variant-numeric:tabular-nums;}
.lib-lrow .lib-card-star{position:static;width:24px;height:24px;background:transparent;}
/* load more + footer */
.lib-loadmore-wrap{display:flex;justify-content:center;margin:4px 0 18px;}
.lib-loadmore{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.05);border:1px solid var(--edge);
  color:var(--ink-soft);font:inherit;font-size:13px;padding:10px 22px;border-radius:11px;cursor:pointer;transition:background .12s,color .12s,border-color .12s;}
.lib-loadmore:hover{background:rgba(255,255,255,.10);color:var(--ink);border-color:rgba(255,255,255,.2);}
.lib-loadmore i{font-size:15px;}
.lib-foot{display:flex;align-items:center;justify-content:center;padding:2px 2px 4px;}
.lib-count{font-size:12.5px;color:var(--ink-faint);}
.lib-empty{padding:60px 0;text-align:center;color:var(--ink-faint);font-size:14px;}
@media (max-width:1000px){#library2{grid-template-columns:1fr;}.lib-side{display:none;}}
#library-view{flex:1;display:flex;flex-direction:column;padding:6px 28px 24px;min-height:0;}
#lv-filter{
  width:220px;padding:8px 16px;border-radius:999px;border:1px solid var(--edge);outline:none;
  background:rgba(255,255,255,.08);color:var(--ink);font-size:13px;align-self:center;
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
}
#lv-filter::placeholder{color:var(--ink-faint);}
#lv-filter:focus{border-color:color-mix(in srgb,var(--accent) 55%,transparent);box-shadow:0 0 14px color-mix(in srgb,var(--accent) 25%,transparent);}
#lv-body{flex:1;min-height:0;display:flex;gap:14px;}
#lv-list{flex:1;overflow-y:auto;min-height:0;border-radius:18px;padding:14px 16px;}
#lv-tags-rail{flex:none;width:190px;border-radius:18px;padding:14px 12px;display:flex;flex-direction:column;min-height:0;}
.lv-rail-head{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);margin:0 2px 12px;flex:none;}
.lv-rail-head i{font-size:13px;color:var(--ink-faint);}
.lv-rail-list{display:flex;flex-direction:column;gap:5px;overflow-y:auto;min-height:0;}
.lv-sp{
  display:flex;align-items:center;gap:9px;margin:14px 4px 6px;font-size:11px;font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);
}
.lv-sp:first-child{margin-top:2px;}
.lv-row{
  display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:10px;cursor:pointer;
  transition:background .12s;
}
.lv-row:hover{background:rgba(255,255,255,.09);}
body.light .lv-row:hover{background:rgba(20,40,28,.08);}
.lv-tog{width:17px;flex:none;font-size:13px;color:var(--ink-faint);cursor:pointer;display:inline-flex;justify-content:center;}
.lv-tog:hover{color:var(--ink);}
.lv-ic{font-size:14px;color:var(--ink-soft);flex:none;}
.lv-title{flex:1;min-width:0;font-size:13.5px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lv-ago{flex:none;font-size:11.5px;color:var(--ink-faint);font-variant-numeric:tabular-nums;}
.lv-sp-tag{display:inline-flex;align-items:center;gap:6px;flex:none;font-size:11px;color:var(--ink-soft);}
.lv-empty{padding:30px 10px;text-align:center;font-size:13px;color:var(--ink-faint);}
.lv-row.lv-drop{background:color-mix(in srgb,var(--accent) 16%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 55%,transparent);}
.lv-group{border-radius:14px;border:1px solid transparent;padding:2px 4px 8px;transition:background .12s,border-color .12s;}
.lv-group.lv-drop{background:color-mix(in srgb,var(--accent) 8%,transparent);border-color:color-mix(in srgb,var(--accent) 45%,transparent);}
.lv-ghost{
  position:fixed;z-index:99;pointer-events:none;padding:6px 15px;border-radius:999px;
  background:rgba(14,22,17,.94);border:1px solid color-mix(in srgb,var(--accent) 50%,transparent);
  color:var(--ink);font-size:12.5px;white-space:nowrap;max-width:300px;overflow:hidden;text-overflow:ellipsis;
  box-shadow:0 10px 28px rgba(0,0,0,.5), 0 0 16px color-mix(in srgb,var(--accent) 22%,transparent);
}
body.lv-dragging{user-select:none;-webkit-user-select:none;cursor:grabbing;}
body.lv-dragging .lv-row{cursor:grabbing;}


/* ---------- font picker ---------- */
.font-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;max-height:46vh;overflow-y:auto;padding:2px;margin-top:4px;}
.font-tile{
  display:flex;flex-direction:column;gap:3px;padding:11px 14px;border-radius:12px;cursor:pointer;
  background:rgba(255,255,255,.06);border:1px solid var(--edge);transition:var(--fx-chrome);min-width:0;
}
.font-tile:hover{background:rgba(255,255,255,.13);transform:translateY(-1px);}
.font-tile.sel{border-color:color-mix(in srgb,var(--accent) 60%,transparent);box-shadow:0 0 14px color-mix(in srgb,var(--accent) 25%,transparent);}
.ft-sample{font-size:17px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ft-name{font-size:10.5px;color:var(--ink-faint);font-family:var(--ui-font,-apple-system,sans-serif);letter-spacing:.03em;}

/* ============ Observatory (fullscreen graph) ============ */
#observatory{position:fixed;inset:0;z-index:45;
  background:#05060d url("backgrounds/constellation.png") center/cover no-repeat;
  animation:obs-in .5s ease;transition:background-color .25s ease;}
#observatory[data-theme="light"]{background:#F5F4F1;}
#obs-canvas{width:100%;height:100%;display:block;}
#obs-title{position:absolute;top:38px;left:26px;font-size:14px;font-weight:600;   /* v957: seated BELOW the 30px title strip (his ask) — clears the revealed strip AND the traffic lights, realigned with the filter panel */
  letter-spacing:.08em;text-transform:uppercase;color:rgba(240,250,244,.75);}
#observatory[data-theme="light"] #obs-title{color:rgba(20,20,20,.55);}
/* v1422 (his ask): a touch smaller than the app-wide 36px chip — the sky is the subject and these two
   sat heavier than anything else on screen. Scoped to the Observatory only; chips elsewhere unchanged.
   The right/gap values follow the new width so the pair stays evenly spaced off the corner. */
#observatory .chip{position:absolute;top:18px;width:30px;height:30px;font-size:14px;}
#obs-close{right:20px;}
#obs-export{right:56px;}
#observatory[data-theme="light"] .chip{background:rgba(255,255,255,.78);border-color:rgba(0,0,0,.10);color:#171717;}
#observatory[data-theme="light"] .chip:hover{background:rgba(255,255,255,.92);}
/* filter panel (vertical, left side) */
#obs-filter{position:absolute;top:60px;left:22px;display:flex;flex-direction:column;gap:8px;
  background:linear-gradient(157deg, rgba(255,255,255,.12), rgba(120,150,210,.05) 26%, rgba(10,10,12,.46) 60%);
  border:1px solid rgba(255,255,255,.12);border-radius:14px;
  padding:12px;width:188px;
  box-shadow:0 10px 44px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.22), inset 0 0 22px rgba(120,150,210,.06);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);}
#observatory[data-theme="light"] #obs-filter{background:rgba(255,255,255,.80);border-color:rgba(0,0,0,.10);}
#obs-filter .obs-flbl{font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(232,227,221,.5);padding:0 2px 2px;}
#observatory[data-theme="light"] #obs-filter .obs-flbl{color:rgba(20,20,20,.55);}
#obs-cats{display:flex;flex-direction:column;gap:5px;}
.obs-chip{display:flex;align-items:center;gap:8px;background:transparent;
  border:1px solid rgba(255,255,255,.10);color:rgba(232,227,221,.72);
  font:inherit;font-size:12px;padding:6px 10px;border-radius:9px;cursor:pointer;text-align:left;width:100%;
  transition:background .14s,border-color .14s,color .14s;}
.obs-chip:hover{background:rgba(255,255,255,.06);color:#E8E3DD;}
.obs-chip.on{background:color-mix(in srgb,var(--c) 16%,rgba(10,10,12,.4));
  border-color:color-mix(in srgb,var(--c) 55%,rgba(255,255,255,.10));color:#fff;}
#observatory[data-theme="light"] .obs-chip{border-color:rgba(0,0,0,.10);color:rgba(20,20,20,.70);}
#observatory[data-theme="light"] .obs-chip:hover{background:rgba(0,0,0,.05);color:#111;}
#observatory[data-theme="light"] .obs-chip.on{
  background:color-mix(in srgb,var(--c) 16%,rgba(255,255,255,.65));
  border-color:color-mix(in srgb,var(--c) 55%,rgba(0,0,0,.10));color:#111;}
.obs-dot{width:8px;height:8px;border-radius:50%;background:var(--c);
  box-shadow:0 0 5px color-mix(in srgb,var(--c) 70%,transparent);flex:none;}
#obs-search{background:rgba(10,10,12,.40);border:1px solid rgba(255,255,255,.10);border-radius:9px;
  color:#E8E3DD;font:inherit;font-size:12px;padding:7px 11px;outline:none;width:100%;
  transition:border-color .15s,background .15s;}
#obs-search::placeholder{color:rgba(232,227,221,.5);}
#obs-search:focus{border-color:rgba(255,255,255,.25);background:rgba(10,10,12,.55);}
#observatory[data-theme="light"] #obs-search{background:rgba(255,255,255,.7);border-color:rgba(0,0,0,.10);color:#111;}
#observatory[data-theme="light"] #obs-search::placeholder{color:rgba(20,20,20,.45);}
#observatory[data-theme="light"] #obs-search:focus{background:#fff;border-color:rgba(0,0,0,.25);}
#obs-clear{padding:5px 10px;color:rgba(232,227,221,.65);align-self:flex-start;font-size:11px;border-radius:8px;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.10);display:inline-flex;align-items:center;gap:5px;cursor:pointer;}
#obs-clear:hover{color:#E8E3DD;background:rgba(255,255,255,.10);}
#obs-clear i{font-style:normal;font-size:13px;line-height:1;}
#observatory[data-theme="light"] #obs-clear{background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.10);color:rgba(20,20,20,.65);}
#observatory[data-theme="light"] #obs-clear:hover{background:rgba(0,0,0,.09);color:#111;}
/* theme pills (bottom-right) */
#obs-theme-row{position:absolute;bottom:22px;right:22px;display:flex;gap:6px;
  background:rgba(10,10,12,.42);border:1px solid rgba(255,255,255,.10);border-radius:999px;padding:4px;
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);}
#observatory[data-theme="light"] #obs-theme-row{background:rgba(255,255,255,.78);border-color:rgba(0,0,0,.10);}
.obs-pill{background:transparent;border:0;color:rgba(232,227,221,.72);font:inherit;font-size:11.5px;
  padding:5px 11px;border-radius:999px;cursor:pointer;letter-spacing:.02em;transition:var(--fx-chrome);}
.obs-pill:hover{color:#E8E3DD;background:rgba(255,255,255,.06);}
.obs-pill.on{background:rgba(255,255,255,.12);color:#E8E3DD;}
#observatory[data-theme="light"] .obs-pill{color:rgba(20,20,20,.7);}
#observatory[data-theme="light"] .obs-pill:hover{color:#111;background:rgba(0,0,0,.05);}
#observatory[data-theme="light"] .obs-pill.on{color:#111;background:rgba(0,0,0,.08);}

/* ---- multi-select page management (Library + a Space's all-pages grid) — additive, opt-in ---- */
/* selection state = subtle ivory GLASS, not a saturated yellow highlighter. Small neutral check badge,
   thin white ring + soft halo + faint translucent tint on cards, white accent on rows. */
.page-selcheck{position:absolute;top:9px;left:9px;z-index:6;width:20px;height:20px;border-radius:50%;
  border:1px solid rgba(255,255,255,.5);background:rgba(18,20,24,.5);display:flex;align-items:center;justify-content:center;
  color:transparent;font-size:12px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);pointer-events:none;
  box-shadow:0 1px 4px rgba(0,0,0,.3);transition:background .12s,border-color .12s;}
.lib-lrow>.page-selcheck{position:static;flex:0 0 auto;width:18px;height:18px;margin-right:-4px;backdrop-filter:none;-webkit-backdrop-filter:none;}
.selected>.page-selcheck{background:rgba(245,241,234,.94);border-color:rgba(245,241,234,.95);color:#181a1e;}
.selecting{cursor:pointer;}
.lib-card.selected,.article-btn.selected,.esc-card.selected{box-shadow:0 0 0 1.5px rgba(255,255,255,.68), 0 0 0 6px rgba(255,255,255,.08), 0 10px 28px rgba(0,0,0,.4);}
.lib-card.selected::after,.article-btn.selected::after,.esc-card.selected::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:3;
  background:rgba(255,255,255,.06);box-shadow:inset 0 0 0 1px rgba(255,255,255,.25);}
.esc-card.selecting:hover{transform:none;}   /* in select mode the card is a checkbox, not a nav target — kill the lift */
.lib-lrow.selected{background:rgba(255,255,255,.06);box-shadow:inset 2px 0 0 rgba(255,255,255,.6);}
.lib-selbtn.on,.sv-selbtn.on,.esc-selbtn.on{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.3);color:var(--ink);}
.esc-selbtn{margin-left:auto;display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:7px;border:1px solid var(--edge);
  background:rgba(255,255,255,.05);color:var(--ink-faint);font:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:0;cursor:pointer;transition:background .12s,border-color .12s,color .12s;}
.esc-selbtn:hover{background:rgba(255,255,255,.1);color:var(--ink);}
.esc-selbtn i{font-size:13px;}

/* ⚠ MEASURED 8/2: with "Add to Reader" the bar is 1254px wide. It is fixed and centre-anchored,
   so on any window narrower than that it bled off BOTH edges. It wraps now rather than clipping,
   and the reserved space below is measured from the bar's real height (see --selbar-h) instead of
   a hardcoded one-row guess — so a wrapped bar can never sit on top of the list again. */
/* ⚠ CENTRED BY AUTO MARGINS, NOT translateX(-50%). With left:50% the containing block starts at
   mid-viewport, so the bar only ever had 50vw of layout space — it wrapped into a narrow stack
   long before it needed to (measured: 500px wide in a 1000px window). left:0/right:0 + margin
   auto centres it identically while giving it the FULL width to lay out in. */
/* v1444 THE SELECT DOCK (his pick from select-dock-mock.html): one glass capsule, bottom-center,
   menu-family items — count carries its own ✕ (the only exit besides Esc and the toolbar Done),
   single-word verbs, Delete is red ink that fills on hover. Rises in on the feel-pass 160ms. */
.page-selbar{position:fixed;left:0;right:0;bottom:18px;margin:0 auto;width:fit-content;z-index:9500;display:flex;align-items:center;gap:2px;flex-wrap:wrap;justify-content:center;max-width:calc(100vw - 28px);
  padding:7px 10px;border-radius:16px;background:rgba(18,23,21,.72);border:1px solid rgba(255,255,255,.1);
  box-shadow:0 24px 60px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.06);
  backdrop-filter:blur(28px) saturate(1.4);-webkit-backdrop-filter:blur(28px) saturate(1.4);
  animation:dockIn 160ms var(--fx-ease);}
@keyframes dockIn{from{opacity:0;transform:translateY(10px);}}
.psb-count{display:flex;align-items:center;gap:7px;font-size:12.5px;color:rgba(240,236,226,.65);padding:0 10px 0 6px;white-space:nowrap;}
.psb-x{width:17px;height:17px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;
  color:rgba(240,236,226,.55);transition:background .18s ease,color .18s ease;}
.psb-x:hover{background:rgba(255,255,255,.12);color:var(--ink);transition-duration:0s;}
.psb-x i{font-size:11px;}
.psb-div{width:1px;height:22px;background:rgba(255,255,255,.1);margin:0 6px;flex:none;}
.psb-btn{display:flex;align-items:center;gap:8px;background:none;border:none;color:rgba(240,236,226,.88);
  border-radius:10px;padding:8px 12px;font:inherit;font-size:13px;cursor:pointer;flex:none;white-space:nowrap;
  transition:background .18s ease;}
.psb-btn:hover{background:rgba(255,255,255,.08);transition-duration:0s;}
.psb-btn:disabled{opacity:.35;cursor:default;background:none;}
.psb-btn i{font-size:15px;opacity:.65;}
.psb-danger{color:#ff7466;}
.psb-danger i{opacity:.8;}
.psb-danger:hover{background:rgba(255,90,70,.14);color:#ff8b7e;}
/* v1445 the tag popover + its undo toast (his pick from select-tag-mock.html) */
.tag-pop{position:fixed;z-index:9600;width:300px;padding:10px;border-radius:14px;transform-origin:50% 100%;}
.tag-pop.fx-in{animation:fxMenuIn 120ms var(--fx-ease);}
.tag-pop input{width:100%;box-sizing:border-box;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);color:var(--ink);border-radius:9px;padding:8px 11px;font-size:13px;font-family:inherit;outline:none;}
.tag-pop input:focus{border-color:rgba(232,176,75,.5);}
.tag-pop-div{height:1px;background:rgba(255,255,255,.08);margin:9px 2px;}
.tag-pop-ember{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;font-family:inherit;font-size:12.5px;color:var(--ink-soft);padding:7px 9px;border-radius:9px;cursor:pointer;transition:background .18s ease;text-align:left;}
.tag-pop-ember:hover{background:rgba(255,255,255,.08);transition-duration:0s;color:var(--ink);}
.tag-pop-ember i{color:var(--ember,#e8853b);font-size:14px;}
.tag-pop-read{font-size:12.5px;color:var(--ink-faint);padding:7px 9px;}
@keyframes ttIn{from{opacity:0;transform:translateX(-50%) translateY(8px);}to{opacity:1;transform:translateX(-50%) translateY(0);}}
.tag-toastx{position:fixed;left:50%;bottom:84px;transform:translateX(-50%);z-index:9600;display:flex;align-items:center;gap:10px;
  padding:9px 14px;border-radius:12px;font-size:12.5px;box-shadow:0 14px 40px rgba(0,0,0,.5);animation:ttIn 160ms var(--fx-ease);}
.tt-msg b{color:#e8c98a;font-weight:600;}
.tt-chips{display:flex;gap:6px;flex-wrap:wrap;max-width:420px;}
.tt-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:#e8c98a;background:rgba(232,176,75,.14);
  border:1px solid rgba(232,176,75,.3);border-radius:99px;padding:2px 8px;white-space:nowrap;}
.tt-chip i{font-size:9px;cursor:pointer;opacity:.7;}
.tt-chip i:hover{opacity:1;}
.tt-undo{background:none;border:none;color:#e8b04b;font-weight:600;font-size:12.5px;cursor:pointer;font-family:inherit;
  padding:2px 6px;border-radius:6px;transition:background .18s ease;}
.tt-undo:hover{background:rgba(232,176,75,.12);transition-duration:0s;}

/* ---- Library -> Recently Deleted (recover deleted pages) ---- */
.lib-trash-list{display:flex;flex-direction:column;gap:8px;overflow-y:auto;padding-right:4px;}
.lib-trash-row{display:flex;align-items:center;gap:14px;padding:12px 16px;border-radius:12px;background:rgba(255,255,255,.04);border:1px solid var(--edge);}
.lib-trash-row:hover{background:rgba(255,255,255,.06);}
.lib-trash-info{flex:1;min-width:0;}
.lib-trash-title{font-size:14px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lib-trash-meta{display:flex;flex-wrap:wrap;gap:14px;margin-top:4px;font-size:12px;color:var(--ink-soft);}
.lib-trash-meta span{display:inline-flex;align-items:center;gap:5px;min-width:0;}
.lib-trash-meta i{font-size:13px;opacity:.7;}
.lib-trash-actions{display:flex;gap:8px;flex:0 0 auto;}
.lib-trash-restore,.lib-trash-forever{display:inline-flex;align-items:center;gap:6px;border-radius:9px;padding:7px 12px;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;border:1px solid var(--edge);}
.lib-trash-restore{background:rgba(214,178,74,.16);border-color:rgba(214,178,74,.45);color:var(--ink);}
.lib-trash-restore:hover{background:rgba(214,178,74,.26);}
.lib-trash-restore:disabled{opacity:.5;cursor:default;}
.lib-trash-forever{background:transparent;color:var(--ink-soft);}
.lib-trash-forever:hover{background:rgba(210,67,56,.16);border-color:rgba(210,67,56,.45);color:var(--ink);}
.lib-trash-restore i,.lib-trash-forever i{font-size:14px;}

/* ===== FOCUS MODE — everything but the page fades; the scene carries it (⇧⌘F / Esc, top-edge peeks nav) ===== */
#chrome,#drag-strip,.ed-bar,.ed-head-row{transition:opacity .4s ease;}
body.focus-mode #chrome,body.focus-mode #drag-strip,body.focus-mode .ed-bar,
body.focus-mode .ed-head-row{opacity:0;pointer-events:none;}
body.focus-mode.focus-peek #chrome,body.focus-mode.focus-peek #drag-strip,body.focus-mode.focus-peek .ed-bar,
body.focus-mode.focus-peek .ed-head-row{opacity:1;pointer-events:auto;}
/* the toolbar hides but STAYS HOVERABLE in its own home — mouse over where it normally sits reveals
   it (fast in, gentle out); the top-edge peek also brings it back with the rest of the chrome */
body.focus-mode .ed-tools{opacity:0;transition:opacity .18s ease;}
body.focus-mode .ed-tools:hover,body.focus-mode.focus-peek .ed-tools{opacity:1;}
body.focus-mode #shelf{display:none;}
body.focus-mode #ed-main{flex:0 1 980px;margin:0 auto;}
/* focus-mode scrollbar: the global hover-reveal keeps the thumb lit nonstop here (the pointer always
   rests over the pane) — hidden unless scrolling or parked at the right edge (.ed-sb-show via JS). */
body.focus-mode #ed-text::-webkit-scrollbar-thumb{background:transparent;transition:background .25s;}
body.focus-mode #ed-text.ed-sb-show::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);}

/* ===== REFERENCE PANE — read-only page beside the editor (⌥-click a wiki-link / ⋯ menu) ===== */
#ed-ref-divider{flex:0 0 12px;display:flex;align-items:center;justify-content:center;cursor:col-resize;position:relative;}
#ed-ref-divider::before{content:"";position:absolute;top:12%;bottom:12%;left:5px;width:2px;border-radius:2px;background:rgba(255,255,255,.08);}
#ed-ref-divider:hover::before{background:rgba(255,255,255,.2);}
#ed-ref-divider .ref-swap{width:28px;height:28px;border-radius:50%;background:rgba(12,15,19,.92);border:1px solid rgba(255,255,255,.25);color:var(--ink);display:flex;align-items:center;justify-content:center;font-size:14px;cursor:pointer;z-index:3;transition:border-color .15s,color .15s;}
#ed-ref-divider .ref-swap:hover{border-color:var(--gold,#D6B24A);color:var(--gold,#D6B24A);}
#ed-ref{display:flex;flex-direction:column;min-height:0;padding:22px 26px;overflow:hidden;position:relative;}
#ed-ref .ref-head{display:flex;align-items:center;gap:9px;margin-bottom:12px;flex:none;}
#ed-ref .ref-head i{color:var(--ink-faint);font-size:15px;flex:none;}
#ed-ref .ref-title{font-weight:650;font-size:15.5px;color:var(--ink);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
#ed-ref .ref-close{width:26px;height:26px;border-radius:8px;border:none;background:transparent;color:var(--ink-faint);display:flex;align-items:center;justify-content:center;font-size:14px;cursor:pointer;flex:none;}
#ed-ref .ref-close:hover{background:rgba(255,255,255,.1);color:var(--ink);}
#ed-ref .ref-body{flex:1;overflow-y:auto;overflow-x:hidden;overflow-wrap:break-word;font-size:15px;line-height:1.75;color:var(--ink);user-select:text;padding-right:6px;}
#ed-ref .ref-body h1{font-size:24px;margin:18px 0 8px;} #ed-ref .ref-body h2{font-size:19px;margin:16px 0 7px;} #ed-ref .ref-body h3{font-size:16.5px;margin:14px 0 6px;}
#ed-ref .ref-body p{margin:0 0 10px;}
#ed-ref .ref-body blockquote{border-left:3px solid color-mix(in srgb, var(--gold,#D6B24A) 55%, transparent);margin:10px 0;padding:2px 0 2px 14px;color:var(--ink-soft);}
#ed-ref .ref-body mark{background:rgba(214,178,74,.30);color:inherit;border-radius:3px;padding:0 2px;}
#ed-ref .ref-body img{max-width:100%;border-radius:10px;margin:8px 0;}
#ed-ref .ref-body hr{border:none;border-top:1px solid var(--edge);margin:16px 0;}
#ed-ref .ref-body table{border-collapse:collapse;margin:10px 0;} #ed-ref .ref-body td,#ed-ref .ref-body th{border:1px solid var(--edge);padding:5px 10px;font-size:13.5px;}
#ed-ref .ref-body .wiki{color:var(--accent);border-bottom:1px dotted color-mix(in srgb,var(--accent) 65%,transparent);cursor:pointer;}
#ed-ref .ref-hint{flex:none;font-size:10.5px;color:var(--ink-faint);margin-top:8px;}
/* read-only board snapshot in the side pane — content scaled to fit, never interactive */
#ed-ref .ref-board{flex:1;min-height:0;position:relative;overflow:hidden;border-radius:12px;}
#ed-ref .ref-board-inner{position:absolute;left:0;top:0;width:0;height:0;overflow:visible;transform-origin:0 0;pointer-events:none;}
#ed-ref .ref-board .bd-el{cursor:default;}
#editor.ed-has-ref #shelf{display:none;}   /* compare mode borrows the shelf's room */
body.focus-mode #ed-ref,body.focus-mode #ed-ref-divider{display:none;}   /* focus = one page only */

/* ===== responsive editor toolbar — ONE ROW ALWAYS. Narrow panes (split view, small windows) fold
   the less-used buttons into a ⋯ tray instead of wrapping (two rows is ruled unacceptable). ===== */
#ed-main .ed-tools{flex-wrap:nowrap;max-width:100%;}
.tb-more-tray{position:absolute;top:calc(100% + 6px);right:0;display:flex;gap:2px;padding:5px 6px;border-radius:12px;
  background:rgba(12,16,20,.96);border:1px solid rgba(255,255,255,.16);box-shadow:0 12px 30px rgba(0,0,0,.45);z-index:12;}
.tb-more-tray[hidden]{display:none;}
#tb-more[hidden]{display:none;}   /* .tb{display:flex} beats the UA [hidden] rule — without this the ⋯ never disappears */

/* ===== daily word goal (Calendar day-detail + goal-met rings on the grid) ===== */
/* Word Goal card (Calendar day panel) — the visible face of the ONE goal; ember flame + progress */
.goal-card{display:flex;align-items:center;gap:12px;margin:2px 0 14px;padding:11px 13px;border-radius:12px;cursor:pointer;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.10);transition:border-color .2s;}
.goal-card:hover{border-color:rgba(214,178,74,.35);}
.gc-flame{font-size:22px;flex:none;color:var(--ink-faint);opacity:.5;}
.gc-flame.on{color:var(--ember);opacity:1;filter:drop-shadow(0 0 4px color-mix(in srgb, var(--ember) 60%, transparent));}
.gc-txt{flex:1;min-width:0;}
.gc-top{font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:4px;}
.gc-lbl{font-size:12px;color:var(--ink);margin-bottom:6px;}
.gc-lbl b{color:var(--gold,#D6B24A);font-weight:650;}
.gc-reset{margin-top:5px;font-size:10px;color:var(--ink-faint);font-style:italic;}
.gc-edit{flex:none;font-size:12px;padding:6px 12px;}
.goal-card.gc-unset{color:var(--ink-faint);font-size:12px;background:none;border-style:dashed;border-color:rgba(255,255,255,.16);}
.goal-card.gc-unset:hover{color:var(--ink-soft);border-color:rgba(214,178,74,.4);}
.cal-goal-bar{height:6px;border-radius:4px;background:rgba(255,255,255,.08);overflow:hidden;}
.cal-goal-bar span{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg, color-mix(in srgb, var(--gold,#D6B24A) 55%, transparent), var(--gold,#D6B24A));transition:width .3s ease;}
/* segmented cadence control (Word Goal modal) */
.wg-seg{display:flex;gap:6px;margin-bottom:12px;}
.wg-seg button{flex:1;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);color:var(--ink-soft);border-radius:10px;padding:8px 0;font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .15s,border-color .15s,color .15s;}
.wg-seg button:hover{color:var(--ink);}
.wg-seg button.on{background:rgba(214,178,74,.16);border-color:rgba(214,178,74,.5);color:var(--ink);}
.cal-day.goal-met{box-shadow:inset 0 0 0 1.5px color-mix(in srgb, var(--gold,#D6B24A) 75%, transparent);}

/* move-page drag (1.0.1 ①): floating title pill + gold-lit drop target on the space tabs */
.pg-drag-ghost{position:fixed;z-index:210;pointer-events:none;padding:7px 14px;border-radius:999px;background:rgba(17,17,19,.85);border:1px solid var(--gold,#D6B24A);color:var(--ink);font-size:12.5px;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-shadow:0 8px 30px rgba(0,0,0,.5);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
body.pg-dragging{cursor:grabbing;-webkit-user-select:none;user-select:none;}
.space-pill.drop-target{box-shadow:0 0 0 2px var(--gold,#D6B24A), 0 0 18px color-mix(in srgb, var(--gold,#D6B24A) 45%, transparent);}
/* 1.1.1 — drop a page onto another page to adopt it. The target takes the gold ring (the same
   language as .space-pill.drop-target) and a badge names the action so the gesture is never a guess. */
.lib-card.drop-into,.lib-lrow.drop-into,.article-btn.drop-into{border-color:rgba(214,178,74,.9) !important;box-shadow:0 0 0 3px rgba(214,178,74,.22),0 18px 44px rgba(0,0,0,.5) !important;}
#pg-drop-badge{position:fixed;z-index:211;pointer-events:none;display:flex;align-items:center;gap:7px;white-space:nowrap;
  background:rgba(12,14,18,.94);border:1px solid rgba(214,178,74,.55);border-radius:999px;padding:8px 15px;
  font-size:12.5px;font-weight:600;color:#f4f1e8;box-shadow:0 10px 30px rgba(0,0,0,.55);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);}
#pg-drop-badge .ti{color:var(--gold,#D6B24A);font-size:15px;}

/* ---- Find & Replace bar (⌘F) ---- */
#find-bar{position:fixed;top:86px;right:340px;z-index:60;display:flex;flex-direction:column;gap:8px;padding:12px 14px;border-radius:14px;background:rgba(22,23,28,.92);border:1px solid var(--edge);box-shadow:0 14px 44px rgba(0,0,0,.4);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);}
#find-bar .fr-row{display:flex;align-items:center;gap:8px;}
#find-bar i{font-size:14px;opacity:.6;}
#find-bar input{width:200px;background:rgba(255,255,255,.07);border:1px solid var(--edge);border-radius:8px;padding:7px 10px;font-size:13px;color:var(--ink);outline:none;}
#find-bar input:focus{border-color:color-mix(in srgb,var(--gold,#D6B24A) 55%,var(--edge));}
#fr-count{font-size:11px;opacity:.65;min-width:64px;text-align:right;letter-spacing:.02em;}
.fr-btn{display:flex;align-items:center;justify-content:center;min-width:28px;height:28px;border-radius:8px;background:rgba(255,255,255,.08);border:1px solid var(--edge);color:var(--ink);cursor:pointer;font-size:12px;transition:background .15s;}
.fr-btn:hover{background:rgba(255,255,255,.16);}
.fr-txt{padding:0 10px;font-weight:600;letter-spacing:.03em;font-size:12px;}
::highlight(sanctum-find){background:rgba(214,178,74,.32);}
::highlight(sanctum-find-cur){background:rgba(214,178,74,.8);color:#1c1a16;}

/* ---- Ember batch-tag matrix ---- */
.btag-table{width:100%;border-collapse:collapse;font-size:13px;}
.btag-table th{position:sticky;top:0;background:rgba(22,23,28,.95);padding:7px 8px;font-size:11px;color:var(--ink-faint);font-weight:600;z-index:1;}
.btag-table td{border-top:1px solid var(--edge);padding:5px 6px;text-align:center;}
.btag-tag{text-align:left!important;font-weight:600;color:var(--ink);white-space:nowrap;padding-left:12px!important;}
.btag-cell{width:26px;height:26px;border-radius:7px;border:1px solid var(--edge);background:rgba(255,255,255,.05);cursor:pointer;color:var(--gold,#D6B24A);font-size:12px;display:inline-flex;align-items:center;justify-content:center;transition:background .12s;}
.btag-cell.on{background:color-mix(in srgb,var(--gold,#D6B24A) 20%,transparent);border-color:var(--gold,#D6B24A);}
.btag-cell:hover{background:rgba(255,255,255,.14);}
.btag-drop{width:22px;height:22px;border-radius:6px;border:none;background:none;color:var(--ink-faint);cursor:pointer;}
.btag-drop:hover{color:#e08f8f;}

/* ---- Ember chat over pages ---- */
#echat-log{display:flex;flex-direction:column;gap:10px;min-height:340px;max-height:52vh;overflow-y:auto;padding:4px 2px;}
.echat-hint{margin:auto;text-align:center;color:var(--ink-faint);font-size:13px;max-width:400px;line-height:1.6;}
.echat-chip{font-size:11px;padding:4px 10px;border-radius:999px;background:rgba(255,255,255,.07);border:1px solid var(--edge);color:var(--ink-soft);}
.echat-u{align-self:flex-end;max-width:78%;background:color-mix(in srgb,var(--gold,#D6B24A) 14%,transparent);border:1px solid color-mix(in srgb,var(--gold,#D6B24A) 35%,var(--edge));border-radius:12px 12px 3px 12px;padding:9px 13px;font-size:13.5px;white-space:pre-wrap;}
.echat-e{align-self:flex-start;max-width:92%;background:rgba(255,255,255,.05);border:1px solid var(--edge);border-radius:12px 12px 12px 3px;padding:11px 14px;}
.echat-busy{color:var(--ink-faint);font-size:13px;font-style:italic;}
.echat-md{font-size:13.5px;line-height:1.6;}
.echat-md h1,.echat-md h2,.echat-md h3{margin:10px 0 6px;font-size:15px;}
.echat-md p{margin:6px 0;}
.echat-md ul,.echat-md ol{margin:6px 0;padding-left:20px;}
.echat-md code{background:rgba(255,255,255,.09);border-radius:4px;padding:1px 5px;font-size:12px;}
.echat-acts{display:flex;gap:6px;margin-top:9px;}
.echat-act{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;padding:4px 10px;border-radius:8px;background:rgba(255,255,255,.06);border:1px solid var(--edge);color:var(--ink-soft);cursor:pointer;}
.echat-act:hover{background:rgba(255,255,255,.14);color:var(--ink);}
#echat-in{flex:1;background:rgba(255,255,255,.07);border:1px solid var(--edge);border-radius:10px;padding:9px 12px;font-size:13.5px;color:var(--ink);outline:none;resize:vertical;font-family:inherit;}
#echat-in:focus{border-color:color-mix(in srgb,var(--gold,#D6B24A) 55%,var(--edge));}

/* ---- sub-page hub pills (a Page as a mini-Space) ---- */
#ed-kids{display:flex;flex-wrap:wrap;gap:7px;padding:4px 28px 10px;}
.edkid{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;background:rgba(255,255,255,.07);border:1px solid var(--edge);color:var(--ink-soft);font-size:12px;cursor:pointer;font-family:inherit;transition:background .15s,color .15s;}
.edkid:hover{background:rgba(255,255,255,.15);color:var(--ink);}
.edkid i{font-size:13px;color:#7BAF85;}
.edkid-add{min-width:30px;justify-content:center;color:var(--ink-faint);}

/* ---- Tags row: a left-flowing cloud, not a right-aligned list (his call, v851) ---- */
.ip-row-tags{flex-direction:column;align-items:stretch;gap:8px;}
.ip-row-tags .ip-tags{justify-content:flex-start;}
.ip-row-tags .ip-tag{padding:3px 8px 3px 10px;}
.ip-tag .ip-tag-x{opacity:.25;}
.ip-tag:hover .ip-tag-x{opacity:1;}

/* ---- suggested-tag controls: rotate + widen ---- */
.ip-sect-acts{float:right;display:inline-flex;gap:6px;align-items:center;}
.esc-ghost{position:fixed;z-index:200;pointer-events:none;opacity:.78;transform:scale(.92);box-shadow:0 18px 44px rgba(0,0,0,.5);}
.esc-dragging{opacity:.35;}
.esc-drop-l{box-shadow:-3px 0 0 0 var(--gold,#D6B24A);}
.esc-drop-r{box-shadow:3px 0 0 0 var(--gold,#D6B24A);}
.ph-wrap{display:flex;gap:12px;min-height:340px;max-height:56vh;}
.ph-list{flex:0 0 190px;overflow-y:auto;display:flex;flex-direction:column;gap:6px;}
.ph-item{display:flex;flex-direction:column;gap:2px;text-align:left;padding:8px 11px;border-radius:10px;background:rgba(255,255,255,.05);border:1px solid var(--edge);cursor:pointer;font-family:inherit;color:var(--ink-soft);}
.ph-item:hover{background:rgba(255,255,255,.1);}
.ph-item.on{background:color-mix(in srgb,var(--gold,#D6B24A) 14%,transparent);border-color:color-mix(in srgb,var(--gold,#D6B24A) 40%,var(--edge));color:var(--ink);}
.ph-when{font-size:12.5px;font-weight:600;}
.ph-words{font-size:11px;color:var(--ink-faint);}
.ph-prev{flex:1;overflow-y:auto;border:1px solid var(--edge);border-radius:12px;padding:14px 16px;background:rgba(255,255,255,.04);}
.ph-delta{margin-left:6px;font-weight:600;}
.ph-delta.up{color:#7ee2a0;}
.ph-delta.down{color:#ff8f7d;}
.ph-modes{display:flex;gap:6px;margin-bottom:10px;}
.ph-mode{font-family:inherit;font-size:11.5px;padding:4px 12px;border-radius:999px;background:rgba(255,255,255,.06);border:1px solid var(--edge);color:var(--ink-soft);cursor:pointer;}
.ph-mode.on{background:color-mix(in srgb,var(--gold,#D6B24A) 16%,transparent);border-color:color-mix(in srgb,var(--gold,#D6B24A) 42%,var(--edge));color:var(--ink);}
.ph-diff-hint{font-size:11.5px;color:var(--ink-faint);margin-bottom:10px;}
.hist-diff{white-space:pre-wrap;font-size:13.5px;line-height:1.7;color:var(--ink-soft);word-break:break-word;}
.hd-ins{background:rgba(48,209,88,.16);color:#7ee2a0;border-radius:3px;padding:0 1px;}
.hd-del{background:rgba(255,77,46,.13);color:#ff8f7d;text-decoration:line-through;border-radius:3px;padding:0 1px;}
.hd-skip{display:block;text-align:center;color:var(--ink-faint);font-size:11px;margin:6px 0;}
.ims-tile{position:relative;height:82px;border-radius:8px;overflow:hidden;border:1px solid var(--edge);cursor:pointer;}
.ims-tile img{width:100%;height:100%;object-fit:cover;display:block;}
.ims-tile:hover{border-color:rgba(255,255,255,.42);}
.ims-credit{position:absolute;left:0;right:0;bottom:0;font-size:9px;padding:8px 6px 3px;background:linear-gradient(transparent,rgba(0,0,0,.74));color:rgba(255,255,255,.85);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;}
.font-grp{grid-column:1/-1;font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);margin:10px 2px 0;}
.ip-stat-sub{font-size:9.5px;color:var(--ink-faint);margin-top:2px;letter-spacing:.02em;}
.ip-sect-tags{display:flex;align-items:center;gap:6px;width:100%;background:none;border:0;cursor:pointer;text-align:left;font-family:inherit;padding:0;}
/* sub-pages as cards — the in-editor mini-Space (v871) */
#ed-subcards{margin:34px 0 10px;padding-top:22px;border-top:1px solid var(--edge);}
.esc-head{display:flex;align-items:center;gap:7px;font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:12px;}
.esc-head i{font-size:13px;}
.esc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;}
.esc-card{position:relative;padding:0;border-radius:13px;overflow:hidden;border:1px solid var(--edge);cursor:pointer;transition:transform .14s,border-color .14s;text-align:left;}
.esc-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--gold,#D6B24A) 40%,var(--edge));}
.esc-cov{height:100px;overflow:hidden;background:rgba(255,255,255,.04);}   /* v908: his "a little taller" — +8, no more */
.esc-cov img{width:100%;height:100%;object-fit:cover;display:block;}
.esc-cov-tint{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,color-mix(in srgb,var(--sc) 26%,transparent),color-mix(in srgb,var(--sc) 8%,transparent));}
.esc-cov-tint i{font-size:24px;color:color-mix(in srgb,var(--sc) 75%,#fff);opacity:.8;}
.esc-body{padding:10px 12px 11px;}
.esc-title{font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.esc-meta{display:flex;align-items:center;gap:6px;margin-top:4px;font-size:11px;color:var(--ink-faint);}
.esc-dot{width:7px;height:7px;border-radius:50%;flex:none;}
.esc-add{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:148px;background:none;border:1px dashed var(--edge);color:var(--ink-faint);font-size:12.5px;font-family:inherit;}
.esc-add:hover{color:var(--ink-soft);border-color:color-mix(in srgb,var(--gold,#D6B24A) 40%,var(--edge));}
.esc-add i{font-size:20px;}
.ip-sect-tags:hover{color:var(--ink-soft);}
.ip-chev{margin-left:auto;font-size:12px;opacity:.55;transition:transform .18s;}
.ip-chev.closed{transform:rotate(-90deg);}
.ip-sa{border:none;background:none;color:var(--ink-faint);font-size:11px;cursor:pointer;padding:1px 5px;border-radius:6px;font-family:inherit;letter-spacing:.03em;}
.ip-sa:hover{color:var(--ink);background:rgba(255,255,255,.08);}
.ip-sa i{font-size:12px;}

/* ---- Library sidebar, Option B: headers act as "All", dots for status, chip clouds, quiet trash ---- */
.lib-row-pair{display:flex;gap:6px;align-items:stretch;}
.lib-fav-mini{flex:none;width:34px;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.05);border:1px solid var(--edge);border-radius:10px;color:var(--ink-faint);cursor:pointer;font-size:14px;}
.lib-fav-mini:hover{color:var(--gold,#D6B24A);background:rgba(255,255,255,.09);}
.lib-fav-mini.on{color:var(--gold,#D6B24A);border-color:color-mix(in srgb,var(--gold,#D6B24A) 55%,var(--edge));background:color-mix(in srgb,var(--gold,#D6B24A) 12%,transparent);}
.lib-sect-btn{width:100%;background:none;border:none;cursor:pointer;font:inherit;display:flex;align-items:center;gap:7px;border-radius:8px;padding:6px 8px;}
.lib-sect-btn:hover{background:rgba(255,255,255,.06);}
.lib-sect-btn.on{color:var(--ink);}
.lib-sect-btn .lib-fn{margin-left:auto;font-size:11px;opacity:.6;}
.lib-status-dots{display:flex;gap:9px;padding:4px 10px 8px;}
.lib-dot{width:17px;height:17px;border-radius:50%;background:color-mix(in srgb,var(--c) 75%,transparent);border:1px solid color-mix(in srgb,var(--c) 60%,var(--edge));cursor:pointer;transition:transform .12s,box-shadow .12s;}
.lib-dot:hover{transform:scale(1.15);}
.lib-dot.on{box-shadow:0 0 0 2px var(--bg,#16171c),0 0 0 4px var(--c),0 0 12px var(--c);transform:scale(1.08);}
.lib-tag-cloud{display:flex;flex-wrap:wrap;gap:5px;padding:2px 6px 6px;}
.lib-tag-chip{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-family:inherit;color:var(--ink-soft);background:rgba(255,255,255,.06);border:1px solid var(--edge);border-radius:999px;padding:3px 9px;cursor:pointer;}
.lib-tag-chip span{font-size:9.5px;opacity:.55;}
.lib-tag-chip:hover{background:rgba(255,255,255,.12);}
.lib-tag-chip.on{color:var(--gold,#D6B24A);border-color:color-mix(in srgb,var(--gold,#D6B24A) 55%,var(--edge));background:color-mix(in srgb,var(--gold,#D6B24A) 12%,transparent);}
.lib-trash-foot{margin-top:14px;display:flex;align-items:center;gap:7px;width:100%;background:none;border:none;border-top:1px solid var(--edge);padding:10px 8px 4px;font:inherit;font-size:12px;color:var(--ink-faint);cursor:pointer;border-radius:0;}
.lib-trash-foot:hover{color:var(--ink-soft);}
.lib-trash-foot i{font-size:13px;}

/* ---- v862: chevroned sections — headers only expand/collapse, never filter, never jump ---- */
.lib-sect-toggle{width:100%;background:none;border:none;cursor:pointer;font-family:inherit;border-radius:8px;}
.lib-sect-toggle:hover{background:rgba(255,255,255,.06);}
.lib-chev{margin-left:auto;font-size:12px;opacity:.55;transition:transform .18s;}
.lib-chev.closed{transform:rotate(-90deg);}

/* ---- v863: one rail everywhere ---- */
.lib-trash-foot.on{color:var(--ink);}

/* ---- Research Reader (v864): read big, edit by hand, rewrite selections with Ember ---- */
/* ===== v1076 THE READER IS A PAGE (his mockup pick) — full-height pane, no bottom chat bar ===== */
/* ============================================================================
   THE SUMMARY STUDIO (v1153) — replaces the old rvOpenReader modal. Three zones:
   the framed document (the artifact, editable by hand), the source as a side-pane
   (pushes NEXT to the doc on wide windows, overlays it on narrow — the fix for
   "source opened behind the reader"), and the Ember thread that IS the version
   history. Ember PROPOSES → you review IN THE DOCUMENT (tinted, diff toggle) →
   Accept applies / Dismiss discards. Composer hard-locks while Ember works.
   ============================================================================ */
#rv-studio-wrap{position:fixed;inset:0;z-index:9600;background:rgba(0,0,0,.55);display:flex;align-items:stretch;justify-content:center;backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);}
#rv-studio{width:min(1320px,97vw);height:100%;display:flex;flex-direction:column;background:linear-gradient(180deg,rgba(13,14,18,.985),rgba(10,11,14,.99) 34%);border-left:1px solid rgba(255,255,255,.1);border-right:1px solid rgba(255,255,255,.1);box-shadow:0 0 90px -20px rgba(0,0,0,.85);overflow:hidden;}
/* v1155 (his "make it fit the black glass the vault sits in, not the whole window"): when opened
   from the vault, JS pins the card to the .lt-main content rect (below the chrome, within the app's
   margins). The wrap becomes a light click-catcher so the shell stays visible above/around it, and
   the card gets a full rounded border so it reads as a glass panel swapped into that space. */
#rv-studio-wrap.fitted{background:rgba(0,0,0,.22);backdrop-filter:blur(1.5px);-webkit-backdrop-filter:blur(1.5px);}
#rv-studio-wrap.fitted #rv-studio{border:1px solid var(--edge);border-radius:16px;box-shadow:0 34px 90px -22px rgba(0,0,0,.72);}
body.light #rv-studio-wrap.fitted{background:rgba(0,0,0,.16);}

/* ---- top chrome ---- */
.std-top{flex:none;display:flex;align-items:center;gap:12px;padding:12px 22px;border-bottom:1px solid var(--edge);}
.std-flame{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:radial-gradient(circle at 50% 35%,color-mix(in srgb,var(--ember) 34%,transparent),color-mix(in srgb,var(--ember) 7%,transparent));color:var(--ember);font-size:15px;flex:none;}
.std-flame.sm{width:22px;height:22px;border-radius:7px;font-size:12px;}
.std-titles{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
/* v1214: the room finally says its name. "Studio" appeared in 100 code comments and NOWHERE a
   user could see it — he had to ask what he was looking at in his own app. Names make a feature
   talkable: in support mail, in the FAQ, between him and a user. */
.std-room{flex:none;font-size:9.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold,#D6B24A);border:1px solid rgba(214,178,74,.38);border-radius:20px;padding:3px 10px;
  background:rgba(214,178,74,.07);white-space:nowrap;user-select:none;}
.std-titles b{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#F2EFE9;}
.std-titles span{font-size:11px;color:var(--ink-faint);}
#std-saved{color:var(--ember);opacity:0;transition:opacity .25s ease;}
#std-saved.on{opacity:1;}
.std-cost{font-size:11px;color:var(--ink-faint);white-space:nowrap;}
.std-btn{display:inline-flex;align-items:center;gap:6px;background:transparent;border:1px solid var(--edge);color:var(--ink);border-radius:8px;padding:7px 11px;font:inherit;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;flex:none;}
.std-btn:hover{background:rgba(255,255,255,.07);}
.std-btn.on{color:var(--gold);border-color:color-mix(in srgb,var(--gold) 42%,transparent);background:color-mix(in srgb,var(--gold) 10%,transparent);}
.std-btn.std-primary{background:color-mix(in srgb,var(--ember) 22%,transparent);border-color:color-mix(in srgb,var(--ember) 50%,var(--edge));color:#ffd9cf;}
.std-btn.std-primary:hover{background:color-mix(in srgb,var(--ember) 30%,transparent);}
.std-btn.std-icon{padding:7px 9px;color:var(--ink-faint);}
.std-btn.std-icon:hover{color:var(--ink);}

/* ---- body: [source] [document] [thread] ---- */
.std-body{flex:1;display:flex;min-height:0;position:relative;}

/* source pane — pushes on wide, overlays on narrow (media query below) */
.std-source{flex:none;width:0;overflow:hidden;border-right:1px solid var(--edge);background:rgba(4,6,9,.5);transition:width .26s cubic-bezier(.4,0,.2,1);}
#rv-studio.src-open .std-source{width:384px;}
.std-source-in{width:384px;height:100%;display:flex;flex-direction:column;}
.std-source-h{flex:none;display:flex;align-items:center;gap:8px;padding:13px 18px;border-bottom:1px solid var(--edge);font-size:12px;font-weight:600;letter-spacing:.03em;color:var(--ink-soft);}
.std-source-h i{color:var(--ember);font-size:14px;}
.std-source-body{flex:1;overflow:auto;padding:16px 20px;font-size:12.5px;line-height:1.7;color:var(--ink-soft);}
.std-source-url{color:var(--accent);cursor:pointer;word-break:break-all;margin-bottom:12px;font-size:12px;display:flex;gap:6px;align-items:flex-start;}
.std-source-url i{flex:none;margin-top:2px;}
.std-source-text{white-space:pre-wrap;}

/* document */
.std-doc{flex:1;min-width:0;display:flex;flex-direction:column;background:radial-gradient(90% 55% at 50% 0%,rgba(255,255,255,.014),transparent 60%);}
/* the page is a FIXED framed pane (top/bottom gutters, frame + gold rule always visible); the text scrolls INSIDE it, so it never bleeds to the top/bottom edges */
.std-doc-stage{flex:1;min-height:0;display:flex;justify-content:center;padding:clamp(16px,2.3vw,26px) clamp(14px,2.5vw,30px);}
.std-page{width:min(760px,100%);min-width:0;display:flex;flex-direction:column;min-height:0;background:rgba(255,255,255,.025);border:1px solid var(--edge);border-radius:15px;box-shadow:0 24px 70px rgba(0,0,0,.4);position:relative;overflow:hidden;transition:border-color .2s,box-shadow .2s;}
.std-page-scroll{position:relative;flex:1;min-height:0;overflow:auto;padding:clamp(26px,4vw,50px) clamp(24px,4.5vw,58px) clamp(28px,4vw,52px);}   /* relative: anchors the #std-selglow overlay so it scrolls with the text */
.std-page::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;border-radius:16px 16px 0 0;background:linear-gradient(90deg,var(--gold),var(--ember));}
.std-vlabel{position:absolute;top:12px;right:14px;z-index:3;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);background:rgba(14,16,20,.72);border:1px solid var(--edge);padding:3px 8px;border-radius:6px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
.std-vlabel.view{color:#9cc0ff;}
.std-vlabel.prop{color:var(--gold);}
.std-page.std-proposed{border-color:color-mix(in srgb,var(--gold) 45%,var(--edge));box-shadow:0 0 0 1px color-mix(in srgb,var(--gold) 22%,transparent),0 24px 70px rgba(0,0,0,.4);}
.std-page.std-working{opacity:.55;pointer-events:none;}
.std-page.std-working #std-docbody{filter:blur(.4px);}
.std-page.flash{animation:stdflash .55s ease;}
@keyframes stdflash{0%{border-color:color-mix(in srgb,var(--gold) 55%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--gold) 15%,transparent),0 30px 80px rgba(0,0,0,.42);}100%{}}
#std-docbody{outline:none;caret-color:var(--ember);font-size:16px;line-height:1.78;color:var(--ink);}
#std-docbody h1{font-size:30px;line-height:1.22;letter-spacing:-.015em;margin:0 0 .7em;color:#F4F1EB;overflow-wrap:anywhere;}
#std-docbody h2{font-size:20px;letter-spacing:-.01em;margin:1.5em 0 .5em;color:#EDE9E2;}
#std-docbody h3{font-size:16.5px;margin:1.2em 0 .4em;}
#std-docbody p{margin:.65em 0;}
#std-docbody ul,#std-docbody ol{padding-left:1.4em;}
#std-docbody li{margin-bottom:.35em;}
#std-docbody li::marker{color:var(--ember);}
#std-docbody hr{border:0;border-top:1px solid var(--edge);margin:1.4em 0;}
.std-page .std-end{margin-top:32px;text-align:center;color:var(--ink-faint);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;}
.std-page.std-proposed .std-end,.std-page.view .std-end{opacity:.4;}

/* proposal / viewing bar (lives at the foot of the doc pane, in-flow) */
.std-propbar{flex:none;display:none;align-items:center;gap:10px;padding:11px 20px;border-top:1px solid var(--edge);background:color-mix(in srgb,var(--gold) 6%,rgba(6,8,11,.6));}
.std-propbar.on{display:flex;}
.std-prop-msg{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--gold);font-weight:600;min-width:0;}
.std-prop-msg.view{color:#9cc0ff;}
.std-prop-msg i{flex:none;}
.std-prop-spacer{flex:1;}
.std-pill{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:6px 11px;border-radius:8px;border:1px solid var(--edge);background:rgba(255,255,255,.04);color:var(--ink-soft);cursor:pointer;white-space:nowrap;}
.std-pill:hover{border-color:var(--line2,rgba(255,255,255,.2));color:var(--ink);}
.std-pill.on{color:var(--gold);border-color:color-mix(in srgb,var(--gold) 40%,transparent);background:color-mix(in srgb,var(--gold) 10%,transparent);}
.std-pbtn{padding:8px 16px;border-radius:9px;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;border:1px solid var(--edge);background:rgba(255,255,255,.05);color:var(--ink);white-space:nowrap;}
.std-pbtn:hover{border-color:rgba(255,255,255,.22);}
.std-pbtn.std-accept{background:color-mix(in srgb,var(--ember) 26%,transparent);border-color:color-mix(in srgb,var(--ember) 50%,transparent);color:#ffe2d9;}
.std-pbtn.std-accept:hover{background:color-mix(in srgb,var(--ember) 34%,transparent);}

/* ember thread */
.std-thread{flex:none;width:372px;display:flex;flex-direction:column;border-left:1px solid var(--edge);background:rgba(6,9,13,.55);}
.std-thread-h{flex:none;display:flex;align-items:center;gap:8px;padding:14px 17px 12px;border-bottom:1px solid var(--edge);}
.std-thread-h b{font-size:12.5px;letter-spacing:.02em;color:var(--ink);}
.std-thread-h span{font-size:11px;color:var(--ink-faint);margin-left:auto;}
.std-thread-scroll{flex:1;overflow:auto;padding:15px 14px 8px;display:flex;flex-direction:column;gap:11px;}

.std-ver{display:flex;align-items:center;gap:9px;border:1px solid var(--edge);background:rgba(255,255,255,.03);border-radius:11px;padding:10px 12px;cursor:pointer;transition:.15s;}
.std-ver:hover{border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.05);}
.std-ver.current{border-color:color-mix(in srgb,var(--gold) 45%,transparent);background:color-mix(in srgb,var(--gold) 7%,transparent);cursor:default;}
.std-ver.viewing{border-color:rgba(120,168,232,.5);background:rgba(120,168,232,.08);}
.std-ver-dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--ink-faint);}
.std-ver.current .std-ver-dot{background:var(--gold);}
.std-ver.viewing .std-ver-dot{background:#9cc0ff;}
.std-ver-label{flex:1;min-width:0;font-size:12px;color:var(--ink);line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.std-ver-tag{font-size:9px;letter-spacing:.05em;text-transform:uppercase;padding:2px 6px;border-radius:5px;flex:none;font-weight:700;}
.std-ver-tag.cur{background:color-mix(in srgb,var(--gold) 16%,transparent);color:var(--gold);}
.std-ver-tag.view{background:rgba(120,168,232,.16);color:#9cc0ff;}
.std-ver-time{font-size:10px;color:var(--ink-faint);flex:none;}
.std-you{align-self:flex-end;max-width:88%;background:color-mix(in srgb,var(--ember) 13%,transparent);border:1px solid color-mix(in srgb,var(--ember) 24%,transparent);color:#f3ddd6;padding:8px 12px;border-radius:13px 13px 4px 13px;font-size:12.5px;line-height:1.4;}
.std-prop-note{border:1px solid color-mix(in srgb,var(--gold) 38%,transparent);background:color-mix(in srgb,var(--gold) 6%,transparent);border-radius:11px;padding:10px 12px;font-size:11.5px;line-height:1.5;color:var(--ink-soft);display:flex;gap:8px;align-items:flex-start;}
.std-prop-note i{color:var(--gold);flex:none;margin-top:1px;}
.std-working-card{border:1px dashed color-mix(in srgb,var(--gold) 40%,transparent);background:color-mix(in srgb,var(--gold) 5%,transparent);border-radius:11px;padding:11px 12px;display:flex;align-items:center;gap:10px;font-size:12px;color:var(--gold);}
.std-spin{width:14px;height:14px;border:2px solid color-mix(in srgb,var(--gold) 30%,transparent);border-top-color:var(--gold);border-radius:50%;animation:stdspin .7s linear infinite;flex:none;}
.std-spin.sm{width:13px;height:13px;border-width:2px;border-top-color:#fff;border-color:rgba(255,255,255,.35);}
@keyframes stdspin{to{transform:rotate(360deg);}}

/* composer */
/* ── The Studio guide card v2 (v1421, his mockup concept): vertical "How Ember works" rows ·
   horizontal quick-action chips · gold trust box. Renders inside the thread under the version
   rows; the working/pending states take its spot. ── */
.std-guide{margin:14px 2px 10px;}
.std-gsect-h{font-size:10px;letter-spacing:.11em;color:var(--gold,#D6B24A);font-weight:700;
  text-transform:uppercase;margin:14px 1px 8px;}
.std-guide .std-gsect-h:first-child{margin-top:0;}
.std-gworks{background:rgba(255,255,255,.025);border:1px solid var(--edge);border-radius:12px;padding:3px 11px;}
.std-gw{display:flex;gap:11px;align-items:flex-start;padding:10px 1px;}
.std-gw + .std-gw{border-top:1px solid rgba(255,255,255,.06);}
.std-gwi{flex:none;width:29px;height:29px;border-radius:9px;border:1px solid rgba(214,178,74,.3);
  background:rgba(214,178,74,.07);display:grid;place-items:center;color:var(--gold,#D6B24A);font-size:13px;margin-top:1px;}
.std-gw b{display:block;color:var(--ink);font-size:12.5px;font-weight:600;margin-bottom:1px;}
.std-gw p{font-size:11.5px;color:var(--ink-faint);line-height:1.5;margin:0;}
.std-gqa{display:flex;flex-wrap:wrap;gap:7px;}
.std-gqa button{display:inline-flex;gap:6px;align-items:center;font-size:11.5px;color:var(--ink-soft);
  border:1px solid var(--edge);border-radius:10px;padding:7px 11px;background:rgba(255,255,255,.03);
  font-family:inherit;cursor:pointer;transition:var(--fx-chrome);}
.std-gqa button:hover{color:var(--gold,#D6B24A);border-color:rgba(214,178,74,.45);background:rgba(214,178,74,.07);}
.std-gqa button i{color:var(--gold,#D6B24A);font-size:12px;}
.std-gtrust{position:relative;margin-top:14px;padding:11px 26px 11px 13px;border:1px solid rgba(214,178,74,.45);border-radius:11px;
  background:rgba(214,178,74,.06);}
.std-gtrust-x{position:absolute;top:7px;right:7px;background:none;border:none;cursor:pointer;color:var(--ink-faint);font-size:11px;padding:3px;border-radius:6px;transition:color .18s ease,background .18s ease;}
.std-gtrust-x:hover{color:var(--ink);background:rgba(255,255,255,.08);transition-duration:0s;}
.std-gtrust b{display:flex;gap:7px;align-items:center;color:var(--gold,#D6B24A);font-size:12px;font-weight:650;margin-bottom:4px;}
.std-gtrust p{font-size:11.5px;color:var(--ink-soft);line-height:1.5;margin:0;}

/* selection float bar */
#std-float{position:fixed;z-index:9650;display:none;align-items:center;gap:2px;background:#1a1b1f;border:1px solid rgba(255,255,255,.16);border-radius:10px;box-shadow:0 12px 30px -8px rgba(0,0,0,.7);padding:4px;}
#std-float.on{display:flex;}
#std-float button{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:7px 11px;border-radius:7px;background:none;border:0;color:var(--ink-soft);cursor:pointer;font-family:inherit;}
#std-float button:hover{background:rgba(255,255,255,.06);}
#std-float button.em{color:var(--ember);}
#std-float .sep{width:1px;align-self:stretch;margin:4px 2px;background:rgba(255,255,255,.1);}

/* narrow-window degrade (spec's flagged risk): source overlays instead of pushing; thread narrows */
@media (max-width:1140px){.std-thread{width:322px;}}
@media (max-width:1040px){
  #rv-studio.src-open .std-source{width:0;}
  .std-source{position:absolute;left:0;top:0;bottom:0;z-index:5;width:0;box-shadow:14px 0 40px -18px rgba(0,0,0,.8);}
  #rv-studio.src-open .std-source{width:min(384px,84%);}
}
@media (max-width:980px){.std-thread{width:290px;}.std-doc-stage{padding-left:14px;padding-right:14px;}}

/* light mode */
body.light #rv-studio{background:linear-gradient(180deg,rgba(250,248,244,.985),rgba(244,241,235,.99) 34%);border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);}
body.light .std-page{background:rgba(255,255,255,.7);}
body.light .std-vlabel{background:rgba(248,246,242,.82);}
body.light .std-titles b{color:#20242b;}
body.light #std-docbody{color:#2a2f36;}
body.light #std-docbody h1{color:#181c22;}
body.light #std-docbody h2{color:#232830;}
body.light .std-thread,body.light .std-source{background:rgba(0,0,0,.02);}
body.light #std-float{background:#f2efe9;border-color:rgba(0,0,0,.14);}
body.light .std-gworks{background:rgba(0,0,0,.025);}
body.light .std-gqa button{background:rgba(0,0,0,.03);}
body.light .std-gw + .std-gw{border-top-color:rgba(0,0,0,.07);}
body.light .std-ver{background:rgba(0,0,0,.02);}

/* ---- v1078 chip collapse (his Shape-A pick): count pills + one expand-in-place drawer per card ---- */
.rvc-counts{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:11px;}
.rvc-pill{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--ink-soft);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.12);padding:6px 11px;border-radius:999px;cursor:pointer;font-family:inherit;}
.rvc-pill i{color:var(--gold,#D6B24A);font-size:13px;}
.rvc-pill b{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;color:var(--gold,#D6B24A);font-variant-numeric:tabular-nums;}
.rvc-pill:hover{border-color:rgba(214,178,74,.4);background:rgba(214,178,74,.08);color:var(--ink);}
.rvc-pill.open{background:rgba(214,178,74,.13);border-color:rgba(214,178,74,.5);color:var(--ink);}
.rvc-drawer{display:flex;flex-direction:column;gap:8px;margin-top:9px;padding:11px 12px;border-radius:10px;background:rgba(255,255,255,.025);border:1px solid rgba(255,255,255,.09);}
.rvc-drawer .lbl{font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-faint);font-weight:600;display:flex;align-items:center;gap:6px;}
.rvc-drawer .lbl i{color:var(--gold,#D6B24A);font-size:11px;}
.rvc-drawer .row{display:flex;flex-wrap:wrap;gap:6px;}
/* v1244 — flex-wrap was NOWRAP with every button flex:none, so the footer (meta + Select all
   marks + Open page + Board + delete) could not fold. Below ~1100px the buttons alone outran the
   card and pushed the WHOLE Vault wider than the window: horizontal scroll on a view that should
   never have one. Wrapping is the fix — the meta line takes the full width and the buttons drop
   beneath it. His words: "I DESPISE THE SIDE SCROLL. It should NEVER be doing that." */
.rvc-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;row-gap:8px;min-width:0;justify-content:flex-end;}
.rvc-foot .meta{flex:1 1 100%;}   /* once wrapping, the meta owns its own line rather than squeezing to nothing */
/* v1249 — v1244 gave .meta flex:1 1 100%, which forced it onto its own line and dropped the
   buttons to a LEFT-aligned second row (his "why have the icons moved to the left?"). Now meta
   takes the space it can and the buttons stay right-aligned; only when the row genuinely runs
   out do they wrap beneath — still on the right, still never a horizontal scroll. */
.rvc-foot .meta{flex:1 1 220px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:auto;}
.rvc-foot .btn{flex:none;}
body.light .rvc-pill{background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.12);}
body.light .rvc-pill:hover{background:rgba(154,122,46,.08);}
body.light .rvc-pill.open{background:rgba(154,122,46,.12);border-color:rgba(154,122,46,.45);}
body.light .rvc-drawer{background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.09);}

/* ---- v865: summary cards are UNIFORM previews — one height, fade-out, reading happens in the Reader ---- */
.rv-prev{position:relative;height:148px;overflow:hidden;font-size:13px;line-height:1.6;color:var(--ink-soft);cursor:pointer;}
.rv-prev h1,.rv-prev h2,.rv-prev h3,.rv-prev h4{font-size:13.5px;font-weight:650;color:var(--ink);margin:.5em 0 .25em;}
.rv-prev p{margin:.35em 0;}
.rv-prev ul,.rv-prev ol{padding-left:1.2em;margin:.3em 0;}
.rv-prev::after{content:"";position:absolute;left:0;right:0;bottom:0;height:44px;background:linear-gradient(to bottom,transparent,rgba(8,10,13,.96));pointer-events:none;}

/* ===== v972 — THE CRT TERMINAL (floppy-disk easter egg). Sealed second computer; all-procedural
   vintage tube. Overlay z 55 = above app chrome, below the window drag strip (60). ===== */
#crt-term{position:fixed;inset:0;z-index:55;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(120% 100% at 50% 110%, #16161a 0%, #0a0a0c 55%, #050506 100%);
  font-family:ui-monospace,"SF Mono",Menlo,monospace;
  --ct-ink:#7dffa5;--ct-b1:rgba(70,255,140,.55);--ct-b2:rgba(40,220,110,.22);--ct-dim:#39a35f;--ct-hot:#d6ffe4;}
#ct-tv{position:relative;width:min(88vw,112vh);aspect-ratio:4/3.1;border-radius:34px;
  background:linear-gradient(160deg,#2a2a2e 0%,#1b1b1f 45%,#101013 100%);
  box-shadow:0 30px 80px rgba(0,0,0,.75), inset 0 2px 3px rgba(255,255,255,.09), inset 0 -6px 18px rgba(0,0,0,.6);
  padding:3.2% 3.6% 4.4% 3.6%;}
#ct-tv .ct-plate{position:absolute;bottom:1.1%;left:50%;transform:translateX(-50%);
  font:600 min(1.5vh,11px) ui-monospace,monospace;letter-spacing:.42em;color:#5c5c64;user-select:none;}
#ct-tv .ct-led{position:absolute;bottom:1.6%;right:5%;width:.7vh;height:.7vh;border-radius:50%;
  background:#57ff8a;box-shadow:0 0 8px #38ff78, 0 0 18px rgba(56,255,120,.5);}
#ct-tv.off #ct-screen{animation:ct-powerdown .42s cubic-bezier(.6,0,.9,.4) forwards;}
@keyframes ct-powerdown{0%{transform:scaleY(1);filter:brightness(1)}62%{transform:scaleY(.012);filter:brightness(3)}100%{transform:scaleY(.002) scaleX(.15);filter:brightness(8);opacity:0}}
#ct-screen{position:relative;width:100%;height:100%;overflow:hidden;border-radius:5.5%/7.5%;background:#050807;
  box-shadow:inset 0 0 4vh rgba(0,0,0,.95), inset 0 0 1.2vh rgba(0,0,0,.9), 0 0 2px 2px #000;}
#ct-inner{position:absolute;inset:0;animation:ct-flick .18s steps(2) infinite;}
@keyframes ct-flick{50%{opacity:.972}}
#ct-screen .ct-backlight{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;
  background:radial-gradient(85% 70% at 50% 42%, rgba(38,84,52,.34) 0%, rgba(14,32,20,.18) 55%, rgba(0,0,0,0) 100%),
             radial-gradient(140% 120% at 50% 50%, rgba(0,0,0,0) 55%, rgba(0,0,0,.55) 88%, rgba(0,0,0,.8) 100%);}
#ct-screen .ct-glass{position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:linear-gradient(112deg, rgba(255,255,255,.075) 0%, rgba(255,255,255,.02) 14%, rgba(255,255,255,0) 26%),
             radial-gradient(60% 24% at 26% 8%, rgba(255,255,255,.06), rgba(255,255,255,0) 70%);}
#ct-screen .ct-scan{position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:repeating-linear-gradient(0deg, rgba(0,0,0,var(--ctScanA,.22)) 0 1px, rgba(0,0,0,0) 1px 3px);}
#ct-screen .ct-mask{position:absolute;inset:0;pointer-events:none;opacity:.05;border-radius:inherit;
  background:repeating-linear-gradient(90deg, rgba(255,80,80,.7) 0 1px, rgba(80,255,120,.7) 1px 2px, rgba(90,120,255,.7) 2px 3px);}
#ct-screen .ct-band{position:absolute;left:0;right:0;height:16%;pointer-events:none;
  background:linear-gradient(180deg, rgba(255,255,255,0), rgba(210,255,220,.045) 45%, rgba(255,255,255,0));
  animation:ct-band 7s linear infinite;}
@keyframes ct-band{from{top:-18%}to{top:104%}}
#ct-screen .ct-track{position:absolute;left:-4%;right:-4%;height:9px;top:38%;opacity:0;pointer-events:none;
  background:linear-gradient(180deg, rgba(160,255,190,.16), rgba(160,255,190,.02));filter:blur(1px);}
#ct-tv.glitch #ct-inner{transform:translateX(2px) skewX(-.4deg);}
#ct-tv.glitch .ct-track{opacity:1;}
#ct-doc,#ct-boot,#ct-menu,#ct-err,#ct-dlg{color:var(--ct-ink);
  text-shadow:0 0 .35em var(--ct-b1), 0 0 1.4em var(--ct-b2);
  font-size:min(2.3vh,17px);line-height:1.75;letter-spacing:.02em;
  font-family:ui-monospace,"SF Mono",Menlo,monospace;}
#ct-doc{position:absolute;inset:2.6em 0 2.6em 0;padding:3.5% 8% 3% 8%;overflow-y:auto;scrollbar-width:none;caret-color:transparent;display:none;}
#ct-doc::-webkit-scrollbar{display:none;}
#ct-title{font-size:1.25em;font-weight:700;color:var(--ct-hot);text-transform:uppercase;letter-spacing:.14em;outline:none;min-height:1.4em;margin-bottom:.35em;}
#ct-title:empty::before{content:"UNTITLED";color:var(--ct-dim);}
#ct-rule{color:var(--ct-dim);user-select:none;margin-bottom:1.1em;overflow:hidden;white-space:nowrap;}
#ct-body{outline:none;min-height:40vh;white-space:pre-wrap;}
#ct-body:empty::before{content:"█ begin transmission…";color:var(--ct-dim);}
#ct-doc ::selection{background:rgba(90,255,150,.28);color:var(--ct-hot);}
#ct-caret{position:absolute;width:9px;height:1.35em;background:var(--ct-ink);mix-blend-mode:screen;opacity:.85;
  pointer-events:none;box-shadow:0 0 .6em var(--ct-b1);animation:ct-blink 1.06s steps(1) infinite;}
@keyframes ct-blink{0%,55%{opacity:.85}56%,100%{opacity:0}}
#ct-status{position:absolute;left:0;right:0;top:0;padding:.6em 4% .55em;display:none;gap:1.6em;user-select:none;white-space:nowrap;z-index:20;
  font-size:min(1.85vh,13px);letter-spacing:.06em;color:var(--ct-dim);
  border-bottom:1px solid rgba(57,163,95,.35);background:linear-gradient(0deg, rgba(0,0,0,0), rgba(0,0,0,.35));}
#ct-status .ct-fk{cursor:pointer;}
#ct-status .ct-fk b{color:var(--ct-ink);font-weight:600;}
#ct-status .ct-fk:hover{color:var(--ct-hot);}
#ct-status .ct-grow{flex:1;}
.ct-full{position:absolute;inset:2.6em 0 0 0;padding:5% 8%;display:none;white-space:pre-wrap;}
.ct-full .ct-mi{cursor:pointer;padding:.06em 0;}
.ct-full .ct-mi.sel{background:rgba(90,255,150,.16);color:var(--ct-hot);}
.ct-dim{color:var(--ct-dim);}
#ct-static{position:absolute;inset:0;z-index:30;display:none;width:100%;height:100%;}
#ct-boot{position:absolute;inset:0;z-index:31;display:none;padding:6% 8%;line-height:1.9;white-space:pre-wrap;}
#ct-dlg{position:absolute;left:50%;top:42%;transform:translate(-50%,-50%);z-index:32;display:none;
  padding:1.1em 1.6em;white-space:pre-wrap;text-align:center;background:#050807;border:3px double var(--ct-ink);
  box-shadow:0 0 1.6em var(--ct-b2), inset 0 0 1.2em rgba(0,0,0,.8);}
/* the floppies (home) */
.ct-floppy{width:100%;height:100%;position:relative;background:#20242c;border-radius:2px 5px 2px 2px;}
.ct-floppy::before{content:"";position:absolute;top:0;left:26%;width:48%;height:34%;background:#3a4150;border-radius:0 0 2px 2px;}
.ct-floppy::after{content:"";position:absolute;bottom:8%;left:16%;width:68%;height:38%;background:#d8dce4;border-radius:1px;}
.h2-graph{position:relative;}
/* v974 (his look): the discovery floppy is an ORB among orbs — frosted node body, the glyph
   suspended inside, phosphor-green glow as the only tell. Subtle over obvious. */
#ct-gfloppy{position:absolute;width:34px;height:34px;cursor:pointer;z-index:5;border-radius:50%;
  background:radial-gradient(circle at 32% 26%, rgba(228,255,240,.85) 0%, rgba(130,255,180,.22) 34%, rgba(18,38,28,.88) 78%);
  border:1px solid rgba(150,255,190,.32);
  box-shadow:0 0 12px rgba(90,255,150,.45), 0 0 32px rgba(60,220,120,.22), inset 0 -4px 10px rgba(0,0,0,.5), inset 0 0 8px rgba(120,255,170,.28);
  display:flex;align-items:center;justify-content:center;
  animation:ct-breathe 3.6s ease-in-out infinite;}
#ct-gfloppy .ct-floppy{width:13px;height:13px;opacity:.95;}
#ct-gfloppy .ct-floppy::after{background:#c9d2dc;}
@keyframes ct-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.09)}}
/* the permanent door (v975): a grey floppy resting at the BOTTOM of the scene picker — furniture,
   not a button; no explanation. Wakes green on hover. (Future body: the Sanctuary pedestal CRT.) */
#ct-sfloppy{width:22px;height:22px;margin:22px auto 2px;cursor:pointer;opacity:.3;filter:saturate(.3);}
#ct-sfloppy:hover{opacity:.95;filter:saturate(1) drop-shadow(0 0 9px rgba(120,255,170,.6));}

/* ===== v976 — THE SANCTUARY (in-app): fullscreen takeover, obs-style chrome ===== */
#sanctuary-ov{position:fixed;inset:0;z-index:45;background:#0b0d12;}
#sc-stage,.sc-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;}
#sanctuary-ov .sc-chip{position:absolute;top:44px;z-index:6;}
.sc-hint{position:absolute;left:24px;top:50%;transform:translateY(-50%) rotate(180deg);writing-mode:vertical-rl;
  font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:rgba(232,227,221,.4);
  pointer-events:none;z-index:6;transition:opacity 2.2s;}
.sc-hint.fade{opacity:0;}
.sc-bar{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);display:flex;gap:14px;align-items:baseline;
  padding:11px 20px;border-radius:14px;background:rgba(13,15,20,.55);border:1px solid rgba(255,255,255,.1);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);pointer-events:none;z-index:5;}
.sc-caption{font-size:12.5px;letter-spacing:.05em;color:#D6B24A;font-style:italic;}
.sc-words{font-size:11px;color:rgba(232,227,221,.55);font-variant-numeric:tabular-nums;}
.sc-card{position:absolute;left:50%;top:44px;transform:translateX(-50%);pointer-events:none;text-align:center;
  padding:10px 20px;border-radius:12px;background:rgba(13,15,20,.78);
  border:1px solid rgba(214,178,74,.35);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  opacity:0;transition:opacity .3s;max-width:320px;z-index:7;}
.sc-card.show{opacity:1;}
.sc-card b{display:block;font-size:13px;color:#D6B24A;letter-spacing:.03em;margin-bottom:2px;}
.sc-card span{font-size:12px;color:rgba(232,227,221,.75);line-height:1.5;}
/* the scroll panel — parchment over glass */
#sc-scroll-panel{position:absolute;right:26px;bottom:26px;width:330px;max-height:74vh;overflow-y:auto;z-index:8;
  padding:16px 18px 18px;border-radius:16px;background:rgba(16,17,22,.88);border:1px solid rgba(214,178,74,.4);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);color:#E8E3DD;scrollbar-width:none;}
#sc-scroll-panel::-webkit-scrollbar{display:none;}
.scp-head{font-size:11.5px;letter-spacing:.28em;color:#D6B24A;display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;}
.scp-x{cursor:pointer;color:rgba(232,227,221,.6);}
.scp-x:hover{color:#fff;}
.scp-sec{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:rgba(232,227,221,.45);margin:13px 0 7px;}
.scp-words{display:flex;flex-wrap:wrap;gap:6px 12px;font-size:12px;color:rgba(232,227,221,.6);}
.scp-words b{color:#E8E3DD;font-weight:600;}
.scp-bars{display:flex;align-items:flex-end;gap:5px;height:78px;}
.scp-bars.scp-hours{gap:2px;height:64px;}
.scp-bar{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px;}
.scp-bar i{display:block;width:100%;border-radius:3px 3px 0 0;background:linear-gradient(180deg,#D6B24A,rgba(214,178,74,.35));}
.scp-bar b{font-size:8.5px;color:rgba(232,227,221,.45);font-weight:500;height:10px;}
.scp-soft{font-size:12px;color:rgba(232,227,221,.55);font-style:italic;line-height:1.5;}

/* v980 — the terminal's bottom voice (his catch: the lab had it, the app lost it in the v973 top-bar merge) */
#ct-foot{position:absolute;left:0;right:0;bottom:0;padding:.55em 4%;display:none;gap:1.6em;user-select:none;white-space:nowrap;z-index:20;
  font-size:min(1.85vh,13px);letter-spacing:.08em;color:var(--ct-dim);
  font-family:ui-monospace,"SF Mono",Menlo,monospace;
  border-top:1px solid rgba(57,163,95,.35);background:linear-gradient(180deg, rgba(0,0,0,0), rgba(0,0,0,.35));}
#ct-foot .ct-cursor{color:var(--ct-ink);animation:ct-blink 1.06s steps(1) infinite;}

/* v990 — CRT HARDWARE (his picks): working knobs, a power switch, grime, a serial sticker, degauss */
/* v992 — THE RACK: controls leave the cramped bottom bezel for a side column hanging off the
   shell's right — the pillarbox void becomes the control rack (and nothing clips at the window
   bottom again). */
.ct-rack{position:absolute;right:-8.2vh;top:50%;transform:translateY(-50%);width:6.8vh;z-index:4;
  display:flex;flex-direction:column;align-items:center;gap:3.4vh;padding:2.6vh 0 2vh;
  background:linear-gradient(160deg,#2a2a2e 0%,#1b1b1f 45%,#101013 100%);border-radius:1.4vh;
  box-shadow:0 14px 40px rgba(0,0,0,.6), inset 0 1px 2px rgba(255,255,255,.08);}
#ct-tv.nobezel .ct-rack{display:none;}
.ct-knob{position:relative;width:3vh;height:3vh;border-radius:50%;cursor:ns-resize;
  background:radial-gradient(circle at 34% 30%, #3c3c42, #232327 62%, #17171a);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.14), 0 2px 4px rgba(0,0,0,.6);}
.ct-knob i{position:absolute;left:50%;top:8%;width:2px;height:38%;background:#8d939e;border-radius:1px;
  transform-origin:50% 110%;transform:translateX(-50%) rotate(var(--rot,0deg));}
.ct-knob::after{content:attr(data-lbl);position:absolute;left:50%;bottom:-1.5vh;transform:translateX(-50%);
  font:600 min(1vh,7.5px) ui-monospace,monospace;letter-spacing:.22em;color:#55555c;}
.ct-switch{position:relative;width:4vh;height:2vh;border-radius:3px;cursor:pointer;
  background:#111114;box-shadow:inset 0 1px 2px rgba(0,0,0,.8), 0 1px 1px rgba(255,255,255,.07);}
.ct-switch i{position:absolute;left:6%;top:12%;width:44%;height:76%;border-radius:2px;
  background:linear-gradient(180deg,#4a4a52,#2e2e34);transition:left .12s;}
.ct-switch.off i{left:50%;}
.ct-serial{transform:rotate(-1.6deg);padding:.3vh .6vh;text-align:center;line-height:1.5;
  font:500 min(1.1vh,8px) ui-monospace,monospace;letter-spacing:.08em;color:#6a675e;
  background:#d9d4c6;border-radius:2px;opacity:.85;box-shadow:0 1px 2px rgba(0,0,0,.45);}
#ct-screen .ct-grime{position:absolute;inset:0;pointer-events:none;border-radius:inherit;opacity:.55;
  background:
    radial-gradient(18% 10% at 26% 22%, rgba(190,210,200,.045), rgba(0,0,0,0) 70%),
    radial-gradient(24% 14% at 71% 64%, rgba(190,210,200,.035), rgba(0,0,0,0) 70%),
    radial-gradient(9% 6% at 48% 83%, rgba(200,215,205,.05), rgba(0,0,0,0) 70%),
    radial-gradient(2px 2px at 33% 41%, rgba(220,230,225,.14), rgba(0,0,0,0) 60%),
    radial-gradient(2px 2px at 62% 28%, rgba(220,230,225,.11), rgba(0,0,0,0) 60%),
    radial-gradient(2px 2px at 81% 47%, rgba(220,230,225,.12), rgba(0,0,0,0) 60%),
    radial-gradient(3px 2px at 55% 12%, rgba(220,230,225,.09), rgba(0,0,0,0) 60%);}
.ct-degauss{animation:ct-degauss .5s cubic-bezier(.2,.9,.3,1) 1;}
@keyframes ct-degauss{
  0%{transform:scale(1.04,0.94) skewX(1.2deg);filter:brightness(1.5) saturate(1.3);}
  30%{transform:scale(0.985,1.02) skewX(-0.6deg);filter:brightness(1.1);}
  60%{transform:scale(1.008,0.996) skewX(0.2deg);filter:brightness(1.02);}
  100%{transform:none;filter:none;}}

/* v998 — THE SWAN PROTOCOL: the counter, the alarm, the discharge */
#ct-swan{position:absolute;left:50%;top:2.9em;transform:translateX(-50%);z-index:22;
  font:700 min(7vh,52px) ui-monospace,"SF Mono",Menlo,monospace;letter-spacing:.18em;
  color:var(--ct-hot);text-shadow:0 0 .4em var(--ct-b1), 0 0 1.6em var(--ct-b2);
  font-variant-numeric:tabular-nums;pointer-events:none;}
#ct-swan.alarm{animation:ct-swanalarm .5s steps(2) infinite;}
@keyframes ct-swanalarm{50%{color:#ffd9d0;text-shadow:0 0 .5em rgba(255,110,80,.8), 0 0 2em rgba(255,60,40,.4);}}
.sc-boom{position:absolute;inset:0;z-index:60;pointer-events:none;animation:sc-boom 2.4s ease-in forwards;
  background:radial-gradient(120% 120% at 50% 45%, rgba(190,120,255,0) 0%, rgba(150,80,240,0) 60%, rgba(120,60,220,0) 100%);}
@keyframes sc-boom{
  0%{background:radial-gradient(120% 120% at 50% 45%, rgba(190,120,255,0), rgba(120,60,220,0));}
  35%{background:radial-gradient(120% 120% at 50% 45%, rgba(190,120,255,.35), rgba(120,60,220,.5));}
  70%{background:radial-gradient(140% 140% at 50% 45%, rgba(225,190,255,.75), rgba(160,110,245,.85));}
  100%{background:#ffffff;}}
.sc-shake{animation:sc-shake .11s linear infinite;}
@keyframes sc-shake{0%{transform:translate(0,0)}25%{transform:translate(9px,-7px)}50%{transform:translate(-8px,6px)}75%{transform:translate(7px,9px)}100%{transform:translate(-9px,-6px)}}

/* ===== v1016 RESEARCH VAULT SHELL (the vault-lab mock, made real) ===== */
.rv2-crumb{color:var(--ink-faint);font-weight:500;}
.rv2-crumb b{color:var(--gold,#D6B24A);font-weight:650;cursor:default;}
.rv2-pipe{display:flex;align-items:center;gap:9px;margin-top:7px;font-size:12px;color:var(--ink-faint);flex-wrap:wrap;}
.rv2-pipe .st{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;}
.rv2-pipe .dot{width:16px;height:16px;border-radius:50%;border:1px solid rgba(214,178,74,.55);color:var(--gold,#D6B24A);display:inline-flex;align-items:center;justify-content:center;font-size:9.5px;font-weight:700;flex:none;}
.rv2-pipe .sep{color:rgba(232,227,221,.22);}
.rv2-pipe b{color:var(--ink-soft);font-weight:600;}
.rv2-pipe b.em{color:#e88379;}
.rv2-intake{display:flex;align-items:center;gap:9px;padding:7px 8px 7px 14px;border-radius:13px;background:rgba(8,10,13,.72);border:1px solid rgba(255,255,255,.12);flex:none;}
.rv2-intake:focus-within{border-color:rgba(214,178,74,.55);box-shadow:0 0 0 3px rgba(214,178,74,.1);}
.rv2-kinds{display:flex;gap:1px;color:var(--ink-faint);font-size:15px;flex:none;}
.rv2-kinds i{padding:3px;}
.rv2-kinds .yt{color:#e26d5a;}
.rv2-intake input{flex:1;min-width:0;background:none;border:0;outline:none;color:var(--ink);font-family:inherit;font-size:13.5px;padding:7px 4px;}
.rv2-intake input::placeholder{color:var(--ink-faint);}
.rv2-seg{display:flex;border:1px solid rgba(255,255,255,.14);border-radius:9px;overflow:hidden;flex:none;font-size:11.5px;}
.rv2-seg span{padding:5px 10px;color:var(--ink-faint);cursor:pointer;}
.rv2-seg span.on{background:rgba(214,178,74,.16);color:var(--gold,#D6B24A);}
.rv2-seg span.deep.on{background:rgba(210,67,56,.16);color:#e88379;}
.rv2-go{flex:none;display:inline-flex;align-items:center;gap:5px;padding:7px 15px;border-radius:9px;cursor:pointer;background:linear-gradient(180deg,rgba(214,178,74,.28),rgba(214,178,74,.16));border:1px solid rgba(214,178,74,.6);color:var(--gold,#D6B24A);font-weight:650;font-size:12.5px;font-family:inherit;}
.rv2-go:hover{background:linear-gradient(180deg,rgba(214,178,74,.36),rgba(214,178,74,.22));}
.rv2-barhint{margin-top:6px;font-size:11px;color:var(--ink-faint);padding-left:4px;flex:none;}
.rv2-barhint b{color:var(--ink-soft);font-weight:550;}
.rv2-shelfhead{display:flex;align-items:center;gap:8px;margin:14px 0 9px;flex:none;}
.rv2-shelfhead .t{font-size:10.5px;letter-spacing:.13em;color:var(--ink-faint);font-weight:600;}
.rv2-shelf{display:grid;grid-template-columns:repeat(auto-fill,minmax(205px,1fr));gap:10px;flex:none;margin-bottom:4px;}
.rv2-nb{border-radius:13px;padding:12px 13px 10px;cursor:pointer;position:relative;background:rgba(8,10,13,.68);border:1px solid rgba(255,255,255,.1);transition:border-color .12s,transform .12s;}
.rv2-nb:hover{transform:translateY(-1px);border-color:rgba(255,255,255,.2);}
.rv2-nb.on{border-color:rgba(214,178,74,.6);background:linear-gradient(180deg,rgba(214,178,74,.08),rgba(8,10,13,.68));}
.rv2-nb .ic{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:15px;background:rgba(214,178,74,.12);color:var(--gold,#D6B24A);margin-bottom:8px;}
.rv2-nb .nm{font-weight:650;font-size:13px;margin-bottom:2px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rv2-nb .ct{font-size:11px;color:var(--ink-faint);}
.rv2-nb .foot{display:flex;align-items:center;gap:6px;margin-top:9px;}
.rv2-synth{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;padding:4px 9px;border-radius:8px;cursor:pointer;background:rgba(210,67,56,.13);border:1px solid rgba(210,67,56,.45);color:#e88379;font-weight:600;font-family:inherit;}
.rv2-synth:hover{background:rgba(210,67,56,.22);}
.rv2-nb .dots{margin-left:auto;color:var(--ink-faint);font-size:13px;padding:2px 5px;border-radius:7px;background:none;border:0;cursor:pointer;}
.rv2-nb .dots:hover{background:rgba(255,255,255,.07);color:var(--ink-soft);}
.rv2-nb.ghost{display:flex;align-items:center;justify-content:center;gap:6px;min-height:96px;border-style:dashed;border-color:rgba(255,255,255,.16);background:none;color:var(--ink-faint);font-size:12px;}
.rv2-nb.ghost:hover{color:var(--gold,#D6B24A);border-color:rgba(214,178,74,.4);}
.rv2-n{font-size:10.5px;padding:1px 7px;border-radius:999px;background:rgba(255,255,255,.07);color:var(--ink-soft);margin-left:5px;}
.today-tab.on .rv2-n{background:rgba(214,178,74,.16);color:var(--gold,#D6B24A);}
.rv2-empty{flex:1;min-height:0;overflow-y:auto;text-align:center;padding-top:26px;}
.rv2-empty h2{font-size:18px;font-weight:650;margin:0 0 5px;color:var(--ink);}
.rv2-empty .sub{font-size:12.5px;color:var(--ink-faint);margin-bottom:22px;}
.rv2-empty .sub b{color:var(--ink-soft);}
.rv2-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:11px;max-width:1000px;margin:0 auto;}
.rv2-steps .step{border-radius:13px;padding:19px 16px;background:rgba(8,10,13,.6);border:1px solid rgba(255,255,255,.09);text-align:center;}
.rv2-steps .ic{width:40px;height:40px;border-radius:11px;margin:0 auto 11px;display:flex;align-items:center;justify-content:center;font-size:19px;background:rgba(214,178,74,.12);color:var(--gold,#D6B24A);}
.rv2-steps .ic.e{background:rgba(210,67,56,.12);color:#e88379;}
.rv2-steps .k{font-size:9.5px;letter-spacing:.12em;color:var(--ink-faint);margin-bottom:4px;font-weight:700;}
.rv2-steps .t{font-weight:650;font-size:13.5px;margin-bottom:5px;color:var(--ink);}
.rv2-steps .d{font-size:11.5px;line-height:1.5;color:var(--ink-faint);}
.rv2-empty .cta{margin-top:22px;}
.rv2-bigadd{display:inline-flex;align-items:center;gap:7px;padding:11px 24px;border-radius:11px;cursor:pointer;font-size:13.5px;font-weight:650;font-family:inherit;background:linear-gradient(180deg,rgba(214,178,74,.3),rgba(214,178,74,.16));border:1px solid rgba(214,178,74,.65);color:var(--gold,#D6B24A);}
.rv2-bigadd:hover{background:linear-gradient(180deg,rgba(214,178,74,.38),rgba(214,178,74,.22));}
.rv2-empty .try{margin-top:11px;font-size:11.5px;color:var(--ink-faint);}
.rv2-empty .try b{color:var(--ink-soft);}
.rv2-empty-quiet{padding-top:52px;}
.rv2-empty-quiet .ic{width:38px;height:38px;border-radius:11px;margin:0 auto 13px;display:flex;align-items:center;justify-content:center;font-size:17px;background:rgba(255,255,255,.05);color:var(--ink-faint);}
.rv2-empty-quiet .t{font-size:15px;font-weight:650;color:var(--ink);margin:0 0 6px;}
.rv2-empty-quiet .sub{margin:0 auto;max-width:340px;line-height:1.55;}
.rv3-golink{color:var(--gold,#D6B24A);font-weight:600;cursor:pointer;}
.rv3-golink:hover{text-decoration:underline;}
.rv2-tip{display:flex;align-items:center;gap:9px;margin-top:11px;padding:9px 12px;border-radius:10px;background:rgba(214,178,74,.09);border:1px solid rgba(214,178,74,.28);font-size:12px;color:var(--ink-soft);flex:none;}
.rv2-tip i{color:var(--gold,#D6B24A);flex:none;font-size:13px;}
.rv2-tip .x{margin-left:auto;flex:none;background:none;border:0;color:var(--ink-faint);cursor:pointer;padding:3px 6px;border-radius:6px;font-size:12px;}
.rv2-tip .x:hover{background:rgba(255,255,255,.08);color:var(--ink-soft);}
/* ===== v1073 THE RAIL — sidebar Research Vault (his mockup-A pick) ===== */
.rv3-panel{padding:0;}
.rv3-cols{flex:1;min-height:0;display:flex;}
.rv3-side{flex:none;width:236px;display:flex;flex-direction:column;border-right:1px solid rgba(255,255,255,.08);padding:20px 12px 14px;background:rgba(0,0,0,.14);border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0;}
.rv3-eyebrow{font-size:10.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-faint);font-weight:650;padding:2px 10px 14px;}
.rv3-nav{display:flex;flex-direction:column;gap:2px;min-height:0;overflow-y:auto;}
.rv3-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;font-size:13px;font-weight:550;color:var(--ink-soft);border:0;background:none;width:100%;text-align:left;cursor:pointer;font-family:inherit;position:relative;}
.rv3-row i{color:var(--ink-faint);font-size:14px;flex:none;}
.rv3-row .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rv3-row .n{flex:none;font-size:11px;color:var(--ink-faint);font-variant-numeric:tabular-nums;}
.rv3-row:hover{background:rgba(255,255,255,.05);color:var(--ink);}
.rv3-row.on{background:rgba(214,178,74,.13);color:var(--ink);}
.rv3-row.on i,.rv3-row.on .n{color:var(--gold,#D6B24A);}
.rv3-row.on::before{content:"";position:absolute;left:-12px;top:8px;bottom:8px;width:3px;background:var(--gold,#D6B24A);border-radius:0 3px 3px 0;}
.rv3-divider{margin:13px 10px 8px;border-top:1px solid rgba(255,255,255,.08);}
.rv3-label{padding:0 10px 6px;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-faint);font-weight:650;}
.rv3-new{margin-top:6px;display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:9px;border:1px dashed rgba(255,255,255,.18);color:var(--ink-faint);font-size:12.5px;background:none;cursor:pointer;font-family:inherit;text-align:left;}
.rv3-new:hover{color:var(--gold,#D6B24A);border-color:rgba(214,178,74,.4);background:rgba(214,178,74,.07);}
.rv3-foot{margin-top:auto;padding:14px 10px 2px;font-size:11px;color:var(--ink-faint);line-height:1.5;}
/* ===== v1081 ENGINE ROOM (his bundle + rotation pick) ===== */
.rv3-gauges{display:flex;flex-direction:column;gap:7px;border-top:1px solid rgba(255,255,255,.08);}
.rv3-gauges .g-title{font-size:9.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-faint);font-weight:650;display:flex;align-items:center;gap:6px;}
.rv3-gauges .g-title .dot{width:5px;height:5px;border-radius:50%;background:var(--gold,#D6B24A);box-shadow:0 0 6px rgba(214,178,74,.7);}
.rv3-gauges .gauge{display:flex;align-items:baseline;justify-content:space-between;font-size:11px;color:var(--ink-faint);}
.rv3-gauges .gauge b{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:600;color:var(--ink-soft);font-variant-numeric:tabular-nums;}
.rvm-mouth{position:relative;flex:none;}
.rvm-mouth::before{content:"";position:absolute;left:-8px;right:-8px;top:-14px;height:76px;background:radial-gradient(60% 100% at 50% 100%, rgba(194,90,48,.13), rgba(214,178,74,.05) 55%, transparent 75%);pointer-events:none;opacity:.7;transition:opacity .4s ease;}
.rvm-mouth:focus-within::before,.rvm-mouth.working::before{opacity:1.35;}
.rvm{display:inline-flex;width:16px;height:16px;color:var(--gold,#D6B24A);flex:none;}
.rvm svg{width:100%;height:100%;}
.rvm-title{width:30px;height:30px;align-self:center;}   /* v1087: matches the Library-scale title icon — the one place the mechanism runs */
.rvm .swp{transform-box:fill-box;transform-origin:center;animation:rvspin 2.6s linear infinite;}
@keyframes rvspin{to{transform:rotate(360deg);}}
.rvm .hmr{transform-box:view-box;transform-origin:17.5px 12.5px;animation:rvstrike 1.25s infinite;}
@keyframes rvstrike{0%,32%{transform:rotate(-24deg);animation-timing-function:ease-in;}44%{transform:rotate(9deg);animation-timing-function:ease-out;}56%{transform:rotate(9deg);}78%,100%{transform:rotate(-24deg);}}
.rvm .sk1{animation:rvsprk1 1.25s infinite;}
.rvm .sk2{animation:rvsprk2 1.25s infinite;}
.rvm .sk3{animation:rvsprk3 1.25s infinite;}
@keyframes rvsprk1{0%,43%{opacity:0;transform:translate(0,0);}48%{opacity:1;}72%{opacity:0;transform:translate(-3.4px,-3.8px);}100%{opacity:0;}}
@keyframes rvsprk2{0%,43%{opacity:0;transform:translate(0,0);}48%{opacity:1;}72%{opacity:0;transform:translate(.6px,-4.6px);}100%{opacity:0;}}
@keyframes rvsprk3{0%,43%{opacity:0;transform:translate(0,0);}48%{opacity:1;}72%{opacity:0;transform:translate(-4.4px,-.8px);}100%{opacity:0;}}
.rvm .st1{animation:rvtwk 2.4s ease-in-out infinite;}
.rvm .st2{animation:rvtwk 2.4s ease-in-out infinite;animation-delay:.5s;}
.rvm .st3{animation:rvtwk 2.4s ease-in-out infinite;animation-delay:1s;}
.rvm .st4{animation:rvtwk 2.4s ease-in-out infinite;animation-delay:1.5s;}
@keyframes rvtwk{0%,100%{opacity:.35;}45%{opacity:1;}}
.rvm .lk{stroke-dasharray:34;animation:rvlink 2.8s ease-in-out infinite;}
@keyframes rvlink{0%{stroke-dashoffset:34;opacity:.9;}55%{stroke-dashoffset:0;opacity:.9;}82%{stroke-dashoffset:0;opacity:.9;}100%{stroke-dashoffset:0;opacity:0;}}
.rvf{position:relative;overflow:hidden;}
.rvf::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg, transparent 20%, rgba(214,178,74,.07) 45%, rgba(194,90,48,.10) 50%, rgba(214,178,74,.07) 55%, transparent 80%);animation:rvshim 1.8s ease-in-out infinite;pointer-events:none;}
@keyframes rvshim{0%{transform:translateX(-60%);}100%{transform:translateX(60%);}}
/* v1261 — the live answer as it streams in. Fixed height so the card does not jump around while
   11,000 words arrive; only the tail is kept in the DOM (see rvWorkingStream). */
.rvf-stream{margin-top:9px;max-height:96px;overflow:hidden;font-size:12.5px;line-height:1.55;
            color:var(--ink-soft);white-space:pre-wrap;word-break:break-word;
            -webkit-mask-image:linear-gradient(to bottom,transparent,#000 22px);}
.rvf-head{display:flex;align-items:center;gap:9px;font-size:13.5px;font-weight:600;color:var(--ink);}
.rvf-head .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rvf-head .rvf-st{font-size:12px;color:var(--ink-faint);font-weight:500;flex:none;}
.rvf-sk{height:11px;border-radius:6px;background:rgba(255,255,255,.06);margin-top:9px;}
/* v1082 vault search — lives on the tabs row, searches the whole vault */
.rv3-search{display:flex;align-items:center;gap:7px;margin-left:auto;margin-bottom:6px;padding:6px 11px;border-radius:9px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.12);width:min(260px,36%);}
.rv3-search i{color:var(--ink-faint);font-size:13px;flex:none;}
.rv3-search input{flex:1;min-width:0;background:none;border:0;outline:none;color:var(--ink);font-family:inherit;font-size:12.5px;}
.rv3-search input::placeholder{color:var(--ink-faint);}
.rv3-search:focus-within,.rv3-search.on{border-color:rgba(214,178,74,.5);background:rgba(214,178,74,.06);}
.rv3-search:focus-within i,.rv3-search.on i{color:var(--gold,#D6B24A);}
.rv3-search .x{background:none;border:0;color:var(--ink-faint);cursor:pointer;padding:2px 4px;border-radius:5px;font-size:12px;flex:none;}
.rv3-search .x:hover{background:rgba(255,255,255,.08);color:var(--ink-soft);}
.rv3-searchhint{margin:-6px 0 10px;font-size:11px;color:var(--gold,#D6B24A);opacity:.8;}
body.light .rv3-search{background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.12);}
body.light .rv3-gauges{border-top-color:rgba(0,0,0,.1);}
body.light .rvf-sk{background:rgba(0,0,0,.06);}
.rv3-main{flex:1;min-width:0;display:flex;flex-direction:column;padding:18px 24px 16px;}   /* v1088: the topicons row is gone — the title owns the top */
.rv2-attach{flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:9px;background:none;border:1px solid rgba(255,255,255,.12);color:var(--ink-faint);cursor:pointer;font-size:15px;}
.rv2-attach:hover{color:var(--gold,#D6B24A);border-color:rgba(214,178,74,.45);background:rgba(214,178,74,.07);}
body.light .rv2-attach{border-color:rgba(0,0,0,.15);}
.rv3-icbtn{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:none;border:1px solid transparent;color:var(--ink-faint);cursor:pointer;font-size:14px;}
.rv3-icbtn:hover{background:rgba(255,255,255,.05);color:var(--ink-soft);border-color:rgba(255,255,255,.1);}
.rv3-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:2px 2px 14px;border-bottom:1px solid rgba(255,255,255,.08);flex:none;}
.rv3-acts{display:flex;align-items:center;gap:7px;flex:none;align-self:center;}
.rv3-act{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:7px 13px;border-radius:9px;cursor:pointer;font-family:inherit;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.14);color:var(--ink-soft);}
.rv3-act:hover{background:rgba(255,255,255,.09);color:var(--ink);}
.rv3-act-synth{background:rgba(210,67,56,.13);border-color:rgba(210,67,56,.45);color:#e88379;}
.rv3-act-synth:hover{background:rgba(210,67,56,.22);color:#f0958c;}
body.light .rv3-act{background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.14);}
.rv3-title{display:flex;align-items:center;gap:12px;margin:0;font-size:34px;font-weight:600;line-height:1.1;letter-spacing:-.01em;color:var(--ink);min-width:0;}   /* v1087: Library-scale (his "see how the Library font is massive") */
.rv3-title i{color:var(--gold,#D6B24A);font-size:28px;flex:none;}
.rv3-title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rv3-title span[contenteditable]{cursor:text;border-radius:6px;padding:0 4px;margin:0 -4px;}
.rv3-viewname{font-size:14px;font-weight:600;color:var(--ink-faint);letter-spacing:.01em;flex:none;padding-top:12px;}
.rv3-viewmeta{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;font-weight:500;color:var(--ink-faint);opacity:.75;flex:none;padding-top:14px;margin-left:4px;font-variant-numeric:tabular-nums;white-space:nowrap;}
/* v1091 typed tags — the page knows its kind; colors ride the new palette */
.etype-chip{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border-radius:5px;margin-right:6px;font-size:10.5px;vertical-align:-2px;}
/* ===== v1096 TYPED TAGS — whole chip tinted by kind (his pick): concept=ember red, person=blue, place=teal ===== */
/* v1450 one-chip law: every tag chip's leading # renders through this one span */
.tg-h{opacity:.6;margin-right:1px;}
/* Vault topic chips — were inline-styled on the retired .rv-tag badge class, which leaked its
   UPPERCASE tracking onto tags (his "not uniform" catch). Own class, normal case, kind-colourable. */
.rv-topic{display:inline-flex;align-items:center;gap:2px;padding:4px 9px;font-size:12px;border-radius:8px;
  cursor:pointer;font-family:inherit;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);
  color:var(--ink);text-transform:none;}
.rv-topic:hover{border-color:rgba(255,255,255,.3);}
.rv-topic.on{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 16%, transparent);}
.rv-topic.on .tg-h{color:var(--accent);opacity:1;}
.tk-concept{color:#e88379 !important;background:rgba(210,67,56,.14) !important;border-color:rgba(210,67,56,.45) !important;}
.tk-person{color:#7fa8e8 !important;background:rgba(61,111,196,.16) !important;border-color:rgba(61,111,196,.5) !important;}
.tk-place{color:#7fc4b9 !important;background:rgba(62,125,116,.18) !important;border-color:rgba(62,125,116,.5) !important;}
body.light .tk-concept{color:#a83228 !important;}
body.light .tk-person{color:#2d59a8 !important;}
body.light .tk-place{color:#256459 !important;}
/* the vault entity chips in their tag-queue form */
.rv-ent{display:inline-flex;align-items:center;gap:2px;padding:4px 9px;font-size:12px;border-radius:8px;cursor:pointer;font-family:inherit;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:var(--ink);}
.rv-ent .h{opacity:.6;}
.rv-ent.on{box-shadow:0 0 0 1.5px currentColor inset;font-weight:650;}
/* the editor hover chip */
#linkchip{position:fixed;z-index:9700;display:none;align-items:center;gap:7px;background:#1a1b1f;border:1px solid rgba(255,255,255,.18);border-radius:9px;box-shadow:0 10px 28px -8px rgba(0,0,0,.7);padding:4px;}
#linkchip .lc-b{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:6px 11px;border-radius:7px;background:none;border:0;color:var(--ink);cursor:pointer;font-family:inherit;}
#linkchip .lc-b:hover{background:rgba(255,255,255,.08);}
#linkchip .lc-hint{font-size:10.5px;color:var(--ink-faint);padding-right:8px;}
body.light #linkchip{background:#f2efe9;border-color:rgba(0,0,0,.15);}
.et-person{color:#7fa8e8;background:rgba(61,111,196,.18);}
.et-place{color:#7fc4b9;background:rgba(62,125,116,.2);}
.et-concept{color:var(--gold,#D6B24A);background:rgba(214,178,74,.15);}
body.light .et-person{color:#3D6FC4;}
body.light .et-place{color:#2E6A61;}
body.light .et-concept{color:#8a6d1f;}
.rv3-title span[contenteditable]:focus{outline:1px solid rgba(214,178,74,.5);background:rgba(214,178,74,.07);}
.rv3-meta{flex:none;font-size:12px;color:var(--ink-faint);font-variant-numeric:tabular-nums;padding-bottom:3px;}
.rv3-scroll{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;padding-top:16px;}   /* v1244: nothing inside may ever produce a sideways scroll */
.rv3-scroll .rv2-intake{flex:none;}
body.light .rv2-intake{background:rgba(255,255,255,.55);border-color:rgba(0,0,0,.12);}
body.light .rv2-steps .step{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.09);}
body.light .rv2-tip{background:rgba(154,122,46,.08);border-color:rgba(154,122,46,.25);}
body.light .rv3-side{border-right-color:rgba(0,0,0,.1);background:rgba(255,255,255,.25);}
body.light .rv3-row:hover{background:rgba(0,0,0,.05);}
body.light .rv3-row.on{background:rgba(154,122,46,.12);}
body.light .rv3-divider{border-top-color:rgba(0,0,0,.1);}
body.light .rv3-new{border-color:rgba(0,0,0,.2);}
body.light .rv3-head{border-bottom-color:rgba(0,0,0,.1);}

/* ===== v1017 THE GLASS DIAL — press-and-hold capsule ===== */
#glass-dial.gd{position:fixed;z-index:46;width:250px;padding:10px 13px 11px;border-radius:14px;
  background:rgba(13,15,18,.82);border:1px solid rgba(255,255,255,.13);
  backdrop-filter:blur(30px) saturate(1.2);-webkit-backdrop-filter:blur(30px) saturate(1.2);
  box-shadow:0 18px 50px rgba(0,0,0,.45),0 2px 10px rgba(0,0,0,.3);
  animation:gd-in .18s cubic-bezier(.2,.9,.3,1.18) both;}
#glass-dial.gd.gd-out{transition:opacity .12s ease,transform .12s ease;opacity:0;transform:scale(.96);}
@keyframes gd-in{from{opacity:0;transform:scale(.9) translateY(4px);}to{opacity:1;transform:scale(1) translateY(0);}}
.gd-eyebrow{display:flex;align-items:center;gap:6px;font-size:9px;letter-spacing:.14em;font-weight:700;color:var(--ink-faint);margin-bottom:8px;}
.gd-eyebrow i{font-size:12px;color:var(--gold,#D6B24A);}
.gd-flex{flex:1;}
.gd-reset{background:none;border:0;color:var(--ink-faint);cursor:pointer;font-size:13px;padding:2px 3px;border-radius:6px;letter-spacing:0;}
.gd-reset:hover{color:var(--ink);background:rgba(255,255,255,.08);}
.gd-row{display:flex;align-items:center;gap:9px;}
.gd-row + .gd-row{margin-top:8px;}
.gd-mini{font-size:8.5px;letter-spacing:.12em;font-weight:700;color:var(--ink-faint);flex:none;}
.gd-val{font-size:11px;color:var(--ink-soft);font-variant-numeric:tabular-nums;min-width:34px;text-align:right;flex:none;}
.gd input[type=range]{-webkit-appearance:none;appearance:none;flex:1;min-width:0;height:18px;background:none;cursor:pointer;}
.gd input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:linear-gradient(90deg,rgba(214,178,74,.65),rgba(214,178,74,.25) 60%,rgba(255,255,255,.14) 60.1%);background:rgba(255,255,255,.16);}
.gd input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:#f2ecdf;border:0;margin-top:-5.5px;box-shadow:0 1px 4px rgba(0,0,0,.5);transition:transform .1s;}
.gd input[type=range]:active::-webkit-slider-thumb{transform:scale(1.18);}
.gd-pulse{animation:gd-pulse .38s ease both;}
@keyframes gd-pulse{0%{box-shadow:0 0 0 0 rgba(214,178,74,0);}35%{box-shadow:0 0 0 2px rgba(214,178,74,.5),0 0 24px rgba(214,178,74,.18);}100%{box-shadow:0 0 0 0 rgba(214,178,74,0);}}
body.light #glass-dial.gd{background:rgba(246,244,240,.86);border-color:rgba(0,0,0,.12);box-shadow:0 18px 50px rgba(0,0,0,.22);}
body.light .gd input[type=range]::-webkit-slider-runnable-track{background:rgba(0,0,0,.18);}
body.light .gd input[type=range]::-webkit-slider-thumb{background:#3a3630;}

/* ===== v1018 THE SWEEP — ghost readout pill ===== */
#glass-ghost{position:fixed;z-index:46;display:flex;align-items:center;gap:6px;padding:6px 11px;border-radius:999px;
  background:rgba(13,15,18,.85);border:1px solid rgba(255,255,255,.14);
  backdrop-filter:blur(24px) saturate(1.2);-webkit-backdrop-filter:blur(24px) saturate(1.2);
  box-shadow:0 8px 28px rgba(0,0,0,.4);pointer-events:none;
  font-size:11.5px;color:var(--ink);font-variant-numeric:tabular-nums;
  animation:gg-in .12s ease both;}
#glass-ghost i{font-size:12px;color:var(--gold,#D6B24A);}
#glass-ghost.gg-out{transition:opacity .16s ease,transform .16s ease;opacity:0;transform:translateY(-4px) scale(.94);}
@keyframes gg-in{from{opacity:0;transform:translateY(3px) scale(.92);}to{opacity:1;transform:none;}}
body.light #glass-ghost{background:rgba(246,244,240,.9);border-color:rgba(0,0,0,.12);}

/* ===== v1019 THE VAULT STANDS ALONE — no Library sidebar; centered column on wide windows ===== */
.libtasks.rv-solo .lt-main{max-width:1400px;margin:0 auto;width:100%;}

/* ===== v1022 intake bar: + Add → the return glyph ===== */
.rv2-go.rv2-enter{padding:7px 11px;font-size:15px;line-height:1;}

/* ===== v1023 intake: instruction row + Extended Research chip ===== */
.rv2-instrow{display:none;align-items:center;gap:9px;margin-top:7px;padding:5px 10px 5px 14px;border-radius:11px;background:rgba(8,10,13,.5);border:1px solid rgba(255,255,255,.08);}
.rv2-instrow.on{display:flex;animation:rv2ir .16s ease both;}
@keyframes rv2ir{from{opacity:0;transform:translateY(-3px);}to{opacity:1;transform:none;}}
.rv2-instrow:focus-within{border-color:rgba(214,178,74,.4);}
.rv2-instrow > i{font-size:13px;color:var(--ink-faint);flex:none;}
.rv2-instrow input[type=text],.rv2-instrow input:not([type=checkbox]){flex:1;min-width:0;background:none;border:0;outline:none;color:var(--ink);font-family:inherit;font-size:12.5px;padding:5px 2px;}
.rv2-instrow input::placeholder{color:var(--ink-faint);}

/* ===== v1025 the crumb is the rename field ===== */
#rv-nb-name{outline:none;border-radius:7px;padding:0 5px;margin:0 -5px;cursor:text;}
#rv-nb-name:hover{background:rgba(255,255,255,.05);}
#rv-nb-name:focus{background:rgba(214,178,74,.09);box-shadow:0 0 0 1px rgba(214,178,74,.4);}

/* ===== v1029 scoped notebook = the room itself (shelf lives at the front door) ===== */
.rv2-crumbmenu{background:none;border:0;color:var(--ink-faint);cursor:pointer;font-size:16px;padding:2px 6px;border-radius:8px;vertical-align:middle;}
.rv2-crumbmenu:hover{background:rgba(255,255,255,.07);color:var(--ink-soft);}

/* v1030 long names: the crumb truncates too (box scrolls with the caret while editing) */
#rv-nb-name{display:inline-block;max-width:44vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;}

/* ============================================================================
   v1163 — THE EMBER WORKBENCH (mockup-approved: ember-studio.html). Fitted in
   the glass like the Summary Studio: top set by JS to the nav-pills row (only
   the greeting + weather stay above), session chat rail, maker starters,
   answer actions, @-reference chips + picker. Session-only — nothing persists.
   ============================================================================ */
.askw-bench{position:fixed;left:24px;right:24px;bottom:20px;top:86px;display:flex;flex-direction:column;background:linear-gradient(180deg,rgba(13,14,18,.985),rgba(10,11,14,.99) 34%);border:1px solid var(--edge);border-radius:16px;overflow:hidden;box-shadow:0 34px 90px -22px rgba(0,0,0,.72);}
.askw-top{flex:none;display:flex;align-items:center;gap:11px;padding:12px 18px;border-bottom:1px solid var(--edge);}
.askw-top b{font-size:14.5px;color:var(--ink);}
.askw-top #ask-scope-badge{font-size:11px;color:var(--ink-faint);}
.askw-flame{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:radial-gradient(circle at 50% 35%,color-mix(in srgb,var(--ember) 34%,transparent),color-mix(in srgb,var(--ember) 8%,transparent));color:var(--ember);font-size:15px;flex:none;}
.askw-top #ask-model{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--ink-soft);background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:7px;padding:4px 9px;cursor:pointer;font-family:inherit;}
.askw-top #ask-close{font-size:11px;color:var(--ink-faint);cursor:pointer;border:1px solid rgba(255,255,255,.14);border-radius:6px;padding:3px 8px;}
.askw-top #ask-close:hover{color:var(--ink);}
.askw-cols{flex:1;display:flex;min-height:0;}
/* rail */
.askw-rail{flex:none;width:236px;border-right:1px solid var(--edge);background:rgba(4,6,9,.5);display:flex;flex-direction:column;}
.askw-rail-h{flex:none;padding:13px 14px 4px;font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-faint);}
#askw-new{margin:7px 12px 10px;display:flex;align-items:center;gap:8px;padding:9px 12px;border-radius:10px;border:1px dashed color-mix(in srgb,var(--ember) 40%,transparent);background:color-mix(in srgb,var(--ember) 6%,transparent);color:#f3ddd6;font:600 12.5px -apple-system,sans-serif;font-family:inherit;cursor:pointer;}
#askw-new:hover{background:color-mix(in srgb,var(--ember) 12%,transparent);}
#askw-chats{flex:1;overflow:auto;padding:0 8px;}
.askw-chat{display:flex;flex-direction:column;gap:3px;padding:10px 11px;border-radius:10px;cursor:pointer;border:1px solid transparent;}
.askw-chat:hover{background:rgba(255,255,255,.04);}
.askw-chat.on{background:color-mix(in srgb,var(--gold,#D6B24A) 8%,transparent);border-color:color-mix(in srgb,var(--gold,#D6B24A) 35%,transparent);}
/* 1.1.1 (his ask): the ⋯ that opens Delete chat. Hidden until hover so the rail stays quiet, but
   always visible on the active chat — and it must never swallow the row's own click (JS stops it). */
.askw-chat-row{display:flex;align-items:center;gap:6px;min-width:0;}
.askw-chat-row .t{flex:1;min-width:0;}
.askw-chat-dots{flex:none;background:none;border:none;padding:0 2px;margin:0;cursor:pointer;color:var(--ink-faint);font-family:inherit;line-height:1;opacity:0;transition:opacity .15s,color .15s;}
.askw-chat:hover .askw-chat-dots,.askw-chat.on .askw-chat-dots{opacity:1;}
.askw-chat-dots:hover{color:var(--ink);}
.askw-chat-dots .ti{font-size:14px;}
.askw-chat .t{font-size:12.5px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.askw-chat .t i{font-size:11px;color:var(--ember);}
.askw-chat .m{font-size:10.5px;color:var(--ink-faint);}
.askw-rail-f{flex:none;padding:10px 14px;border-top:1px solid var(--edge);font-size:10.5px;color:var(--ink-faint);line-height:1.5;}
/* main */
.askw-main{flex:1;min-width:0;display:flex;flex-direction:column;}
.askw-main #ask-body{flex:1;overflow:auto;padding:24px clamp(20px,5vw,80px) 14px;}
.askw-sess{max-width:820px;}
.askw-empty .t{font-size:18px;font-weight:600;color:var(--ink);margin-bottom:5px;}
.askw-empty .hint{margin-bottom:16px;}
.askw-starters{display:flex;flex-direction:column;gap:9px;max-width:640px;}
.ask-starter{display:flex;align-items:center;gap:10px;text-align:left;padding:12px 14px;font-size:13px;color:var(--ink);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:12px;cursor:pointer;font-family:inherit;}
.ask-starter:hover{border-color:color-mix(in srgb,var(--ember) 40%,transparent);}
.ask-starter i{color:var(--ember);font-size:14px;flex:none;}
/* v1217: the deep one (Synthesize) leads the page starters in gold — the same separation the Study
   pill uses, so the expensive, document-length action never reads as one more quick take. */
.ask-starter.deep{border-color:rgba(214,178,74,.34);background:rgba(214,178,74,.07);}
.ask-starter.deep i{color:var(--gold);}
.ask-starter.deep:hover{border-color:color-mix(in srgb,var(--gold) 55%,transparent);}
.askw-stag{margin-left:auto;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;padding:2px 7px;border-radius:5px;flex:none;font-weight:700;}
.askw-stag.ask{background:color-mix(in srgb,var(--gold,#D6B24A) 14%,transparent);color:var(--gold,#D6B24A);}
.askw-stag.make{background:color-mix(in srgb,var(--ember) 14%,transparent);color:#ffb3a3;}
.askw-stag.study{background:color-mix(in srgb,#7FB4A8 16%,transparent);color:#9fd3c6;}
/* answer actions */
.askw-acts{display:flex;gap:8px;margin-top:10px;}
.askw-act{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:6px 11px;border-radius:8px;border:1px solid var(--edge);background:rgba(255,255,255,.03);color:var(--ink-soft);cursor:pointer;font-family:inherit;}
.askw-act:hover{border-color:rgba(255,255,255,.22);color:var(--ink);}
.askw-act.primary{border-color:color-mix(in srgb,var(--ember) 45%,transparent);background:color-mix(in srgb,var(--ember) 12%,transparent);color:#ffd9cf;}
.askw-act.primary:hover{background:color-mix(in srgb,var(--ember) 20%,transparent);}
/* composer */
.askw-composer{flex:none;border-top:1px solid var(--edge);padding:12px 18px 13px;}
#askw-refrow{display:flex;gap:7px;margin-bottom:8px;flex-wrap:wrap;}
.askw-refchip{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;padding:5px 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--ember) 40%,transparent);background:color-mix(in srgb,var(--ember) 8%,transparent);color:#f3ddd6;}
.askw-refchip b{font-weight:600;}
.askw-refchip i{cursor:pointer;color:var(--ink-faint);font-size:11px;}
.askw-refchip i:hover{color:var(--ink);}
.askw-refchip.askw-myvoice{border-color:rgba(214,178,74,.45);background:rgba(214,178,74,.09);color:#efe3c2;}
.askw-atpick .grp{padding:7px 13px 3px;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);}
/* v1172 Ember Voice everywhere — the shared floating recorder */
#vc-wrap{position:fixed;inset:auto 0 26px 0;z-index:9700;display:flex;justify-content:center;pointer-events:none;}
#vc-pill{pointer-events:auto;display:flex;align-items:center;gap:11px;padding:9px 11px 9px 16px;border-radius:999px;max-width:min(580px,92vw);}
#vc-pill .vc-dot{width:9px;height:9px;border-radius:50%;background:#e0504a;animation:vcpulse 1.1s ease-in-out infinite;flex:none;}
@keyframes vcpulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.8)}}
#vc-pill b{font-size:12px;font-variant-numeric:tabular-nums;}
#vc-pill #vc-ghost{font-size:12px;color:var(--ink-faint);max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* v1173 the Study quiz — answered locally, zero tokens per click */
.askq{border:1px solid var(--edge);border-radius:14px;padding:14px 16px;background:rgba(255,255,255,.025);}
.askq-head{display:flex;align-items:center;gap:10px;margin-bottom:6px;}
.askq-head b{font-size:14.5px;color:var(--ink);}
.askq-score{margin-left:auto;font-size:11px;color:var(--gold,#D6B24A);font-variant-numeric:tabular-nums;}
.askq-q{padding:12px 0 4px;border-top:1px solid var(--edge);margin-top:8px;}
.askq-q:first-of-type{border-top:0;margin-top:0;}
.askq-qt{font-size:13.5px;font-weight:600;color:var(--ink);margin-bottom:8px;line-height:1.45;}
.askq-opt{display:block;width:100%;text-align:left;font:inherit;font-size:12.5px;color:var(--ink-soft);background:rgba(255,255,255,.035);border:1px solid var(--edge);border-radius:9px;padding:8px 11px;margin-bottom:6px;cursor:pointer;transition:border-color .12s,background .12s;}
.askq-opt:hover:not(:disabled){border-color:rgba(255,255,255,.24);color:var(--ink);}
.askq-opt:disabled{cursor:default;opacity:.75;}
.askq-opt.right{border-color:rgba(88,190,120,.65);background:rgba(88,190,120,.12);color:#a8e6bd;opacity:1;}
.askq-opt.wrong{border-color:rgba(224,80,74,.6);background:rgba(224,80,74,.1);color:#ffb3ac;opacity:1;}
.askq-reveal{font-size:12.5px;line-height:1.55;color:var(--ink-soft);border-left:2px solid var(--gold,#D6B24A);padding:7px 11px;margin:4px 0 8px;background:rgba(214,178,74,.05);border-radius:0 8px 8px 0;}
.askq-quote{margin-top:5px;font-style:italic;color:var(--ink-faint);}
.askq-foot{margin-top:12px;display:flex;justify-content:center;}
/* v1179 (his "I REFUSE TO SHIP A BUTTON THAT LOOKS LIKE THAT"): source-card action buttons never
   wrap — they size to their label; the long URL/meta line truncates instead of starving them */
.lib-board-card .hint .btn{flex:none;white-space:nowrap;height:34px;padding:0 13px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:9px;font-size:13px;}
.lib-board-card .hint .btn i{font-size:16px;}
.lib-board-card .hint .btn.rv-move,.lib-board-card .hint .btn.rv-del{width:34px;padding:0;}   /* icon-only actions → fixed square, identical on every card (kills the stretched-folder look) */
.lib-board-card .hint .btn.rv-resum{min-width:126px;}   /* "Summarize" and "Re-summarize" render the same width so the button never jumps card-to-card */
.lib-board-card .hint > span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.askw-cbox{display:flex;align-items:flex-end;gap:8px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.16);border-radius:13px;padding:7px 7px 7px 6px;transition:border-color .15s;}
.askw-cbox:focus-within{border-color:color-mix(in srgb,var(--ember) 50%,transparent);}
#askw-at,#askw-mic{width:34px;height:34px;border-radius:9px;flex:none;border:none;cursor:pointer;display:grid;place-items:center;background:none;color:var(--ink-faint);font-size:16px;font-weight:600;font-family:inherit;}
#askw-at:hover,#askw-mic:hover{background:rgba(255,255,255,.06);color:var(--ember);}
.askw-recbar{display:flex;align-items:center;gap:10px;background:color-mix(in srgb,var(--ember) 8%,transparent);border:1px solid color-mix(in srgb,var(--ember) 40%,transparent);border-radius:13px;padding:9px 13px;}
.askw-recdot{width:9px;height:9px;border-radius:50%;background:var(--ember);animation:vpulse 1.1s ease-in-out infinite;flex:none;}
@keyframes vpulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.45;transform:scale(.8);}}
#askw-rectime{font-size:12px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;flex:none;}
.askw-recghost{flex:1;min-width:0;font-size:11.5px;color:var(--ink-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.askw-cbox textarea{flex:1;background:none;border:none;outline:none;resize:none;color:var(--ink);font:400 13.5px -apple-system,sans-serif;font-family:inherit;line-height:1.45;max-height:130px;padding:7px 0;}
.askw-cbox textarea::placeholder{color:var(--ink-faint);}
.askw-cbox #ask-send{width:34px;height:34px;border-radius:9px;flex:none;border:none;cursor:pointer;display:grid;place-items:center;background:var(--accent);color:#0b0c0f;font-size:16px;}
.askw-cbox #ask-send:disabled{background:rgba(255,255,255,.08);color:var(--ink-faint);cursor:not-allowed;}
.askw-cnote{font-size:10.5px;color:var(--ink-faint);margin-top:8px;text-align:center;}
/* @-reference picker */
#askw-atpick{position:fixed;z-index:85;display:flex;flex-direction:column;width:330px;background:rgba(14,16,21,.98);border:1px solid rgba(255,255,255,.16);border-radius:12px;box-shadow:0 16px 50px rgba(0,0,0,.6);overflow:hidden;}
#askw-atpick .h{padding:10px 13px 8px;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-faint);border-bottom:1px solid var(--edge);}
#askw-atq{margin:8px 10px 4px;padding:7px 10px;font-size:12.5px;color:var(--ink);background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:8px;outline:none;font-family:inherit;}
#askw-atlist{max-height:250px;overflow:auto;padding:4px 6px 6px;}
#askw-atlist .p{display:flex;flex-direction:column;gap:2px;padding:8px 9px;cursor:pointer;border-radius:8px;}
#askw-atlist .p:hover{background:rgba(255,255,255,.06);}
#askw-atlist .p .n{font-size:13px;color:var(--ink);}
#askw-atlist .p .k{font-size:10.5px;color:var(--ink-faint);}
#askw-atlist .none{padding:10px;font-size:12px;color:var(--ink-faint);}
#askw-atpick .modes{display:flex;gap:6px;padding:9px 10px;border-top:1px solid var(--edge);}
#askw-atpick .modes button{flex:1;font-size:11px;font-weight:600;padding:7px;border-radius:8px;border:1px solid var(--edge);background:rgba(255,255,255,.04);color:var(--ink-soft);cursor:pointer;font-family:inherit;}
#askw-atpick .modes button.on{border-color:color-mix(in srgb,var(--ember) 50%,transparent);background:color-mix(in srgb,var(--ember) 12%,transparent);color:#ffd9cf;}
/* narrow windows: the rail folds */
@media (max-width:900px){.askw-rail{display:none;}}
/* light mode */
body.light .askw-bench{background:linear-gradient(180deg,rgba(250,248,244,.985),rgba(244,241,235,.99) 34%);}
body.light .askw-rail{background:rgba(0,0,0,.025);}
body.light .askw-chat:hover{background:rgba(0,0,0,.04);}
body.light .askw-cbox{background:rgba(0,0,0,.035);border-color:rgba(0,0,0,.16);}
body.light .ask-starter{background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.1);}
body.light #askw-atpick{background:rgba(250,248,244,.99);border-color:rgba(0,0,0,.14);}
body.light #askw-atlist .p:hover{background:rgba(0,0,0,.05);}
body.light .askw-refchip{color:#7c2d1f;}
body.light #askw-new{color:#7c2d1f;}

/* ===== v1246 — the three depths (Gist / Breakdown / Forge) + "Just the text" ===================
   One ladder, shown at every door that summarizes. Depth used to be a boolean whose default lived
   in Settings -> AI, so it was decided off-screen; these are the controls that replaced it. ===== */
#modal .rv-mode-b{display:flex;flex-direction:column;align-items:center;gap:2px;padding:9px 8px;line-height:1.25;}
#modal .rv-mode-b .rv-mlen{font-size:10.5px;font-weight:500;color:var(--ink-faint);font-variant-numeric:tabular-nums;}
#modal .rv-mode-b.primary .rv-mlen{color:rgba(214,178,74,.85);}
/* the no-AI rung: same family, full width, dashed so it reads as the opt-out without being demoted */
#modal .rv-mode-text{width:100%;margin-top:7px;border-style:dashed;border-color:rgba(232,227,221,.22);background:rgba(255,255,255,.035);}
#modal .rv-mode-text.primary{border-style:solid;}
.rv-warn{font-size:12.5px;margin-top:9px;padding:9px 11px;border-radius:9px;line-height:1.5;
  background:rgba(196,86,63,.10);border:1px solid rgba(196,86,63,.30);color:rgba(232,227,221,.82);}
.rv-warn b{color:var(--ink);}
/* the bar's compact copy of the same ladder */
.rv2-depth{display:flex;flex:none;border:1px solid rgba(255,255,255,.12);border-radius:9px;overflow:hidden;margin-right:8px;}
.rv2-depth button{padding:5px 10px;font-size:11.5px;font-weight:600;background:none;border:0;
  color:var(--ink-faint);font-family:inherit;cursor:pointer;white-space:nowrap;}
.rv2-depth button:hover{color:var(--ink-soft);background:rgba(255,255,255,.05);}
.rv2-depth button.on{background:rgba(214,178,74,.16);color:var(--gold,#D6B24A);}
body.light .rv2-depth{border-color:rgba(0,0,0,.14);}
body.light .rv-warn{background:rgba(196,86,63,.08);border-color:rgba(196,86,63,.25);}

/* ═══ v1276 — HOME REDESIGN: the Vault pane + slim Pulse + right-column Quick Capture ═══════════
   The Desk left Home; the Vault pane sits in its row slot, so .h2-row-bot keeps Vault and the
   Observatory the SAME height with flush tops and bottoms — the row does the aligning, not us. */
.h2-vault{display:flex;flex-direction:column;min-height:0;border-color:rgba(214,178,74,.32) !important;box-shadow:0 0 22px rgba(214,178,74,.07);}   /* v1277 his ask: the pane stands out — a quiet gold edge, sizing from the row rule above */
.hv-title{cursor:pointer;font-size:14.5px;font-weight:700;color:var(--gold);display:flex;align-items:center;gap:9px;}   /* v1309 his eye, third pass — the REAL fix: the siblings are flex+gap (.h2-title), not margins and vertical-align. Same mechanism, same 9px gap. */
.hv-forge-ic{width:21px;height:21px;flex:none;color:var(--gold);}   /* v1311 his ask: slightly bigger — flex+gap keeps the seat, so size is free to move alone */   /* 18px reads optically equal to the siblings' 14px ti glyphs (the SVG viewBox pads) at VAULT's larger caps */
.hv-forge-ic.working .hmr{transform-box:view-box;transform-origin:17.5px 12.5px;animation:rvstrike 1.25s infinite;}
.hv-forge-ic.working .sk1,.hv-forge-ic.working .sk2,.hv-forge-ic.working .sk3{animation:hvSpk 1.25s infinite;}
@keyframes hvSpk{0%,55%{opacity:0;}62%{opacity:1;}100%{opacity:0;}}
.hv-title:hover{filter:brightness(1.12);}
.hv-body{display:flex;flex-direction:column;gap:9px;min-height:0;flex:1;}
#hv-open{background:none;border:none;cursor:pointer;font-family:inherit;}
#hv-open:hover{color:var(--ink);}
.hv-intake{display:flex;align-items:center;gap:9px;background:rgba(255,255,255,.055);border:1px solid rgba(214,178,74,.45);border-radius:13px;padding:11px 12px;}
.hv-ics{display:flex;gap:5px;color:var(--ink-faint);font-size:13px;flex:none;}
#hv-in{flex:1;min-width:0;background:none;border:none;outline:none;color:var(--ink);font-size:13.5px;font-family:inherit;}
#hv-in::placeholder{color:var(--ink-faint);}
#hv-go{background:var(--gold);color:#15140f;border:none;border-radius:9px;padding:6px 11px;font-size:13px;cursor:pointer;flex:none;}
#hv-go:hover{filter:brightness(1.08);}
#hv-clip{background:none;border:1px solid rgba(255,255,255,.14);border-radius:9px;color:var(--ink-soft);padding:6px 9px;font-size:13px;cursor:pointer;flex:none;}
#hv-clip:hover{border-color:rgba(214,178,74,.5);color:var(--ink);}
#hv-instr{width:100%;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:8px 12px;font-size:12px;color:var(--ink);outline:none;font-family:inherit;box-sizing:border-box;}
#hv-instr::placeholder{color:var(--ink-faint);}
.hv-fresh-label{font-size:10px;letter-spacing:.15em;color:var(--ink-faint);font-weight:700;margin-top:4px;}
/* v1342 — the snippet cards (his pick after three rounds of generated art all read as cheap at
   card size — do not resurrect the art). Title, first lines of the writing, footer pinned to the
   card's foot so the cards still fill the pane with or without the gold hint above them. */
/* v1345 — HORIZONTAL rows, formatted like the Research Vault's own summary cards (his spec).
   Three rows share the pane's leftover height so all three are ALWAYS visible — never a scroll.
   Each row: flame + title, preview, footer (source · depth · words · time). */
/* v1357 — THE PANE CONTRACT (his directive, verbatim intent):
   ① hint card present → intake, hint and cards ALL keep full natural size; what no longer fits
     SCROLLS INSIDE this list. ② hint dismissed → everything fits the pane exactly (cards stretch,
     zero overflow) and NO scrollbar exists. The global scrollbar style is transparent-until-hover
     with no track, so nothing shows unless the list genuinely overflows AND is being used.
   Mechanics: cards refuse to compress (min-height:auto, v1355) → shortfall becomes overflow here,
   not clipping; surplus becomes card growth. ⚠ Never let the PANE grow past its row again (v1356
   did — the whole pane ran off the window bottom and the third card clipped at the fold). */
.hv-fresh{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:8px;}
/* v1350 his dial, v1350→v1351: .62 → .5 → .46 — still clearly darker than the
   pane behind it, scene reads through more. Blur carries the legibility. */
.hv-fcard{display:flex;flex-direction:column;flex:1 1 auto;min-height:auto;overflow:hidden;background:rgba(8,10,13,.46);-webkit-backdrop-filter:blur(18px) saturate(1.1);backdrop-filter:blur(18px) saturate(1.1);border:1px solid rgba(255,255,255,.11);border-radius:11px;padding:11px 14px 9px;text-align:left;cursor:pointer;color:var(--ink);font-family:inherit;min-width:0;}
.hv-fcard:hover{border-color:rgba(214,178,74,.5);background:rgba(16,19,24,.6);}
.hv-fhead{display:flex;align-items:center;gap:8px;flex:none;min-width:0;}
.hv-fhead .ti-flame{color:var(--ember);font-size:14px;flex:none;}
.hv-fcard b{font-size:13.5px;font-weight:650;line-height:1.3;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* v1355 — ⚠ NEVER PUT `min-height:0` ON .hv-fcard. A flex item defaults to `min-height:auto`, and
   that default is the ONLY thing stopping it being squeezed shorter than its own content. With 0 the
   three cards were compressed below content height and `overflow:hidden` SLICED THE FOOTER — his
   "bottom 20% is cut". Two rounds of padding/line-height tuning did nothing because the box was being
   force-shrunk, not mis-spaced: it is a SIZING bug, not a spacing one. `flex:1 1 auto` still lets the
   rows divide the pane evenly; auto min-height means they refuse to go below their content.
   v1352 — ONE LINE, FIXED HEIGHT (his call). The v1350 min-height floor made each card taller than
   its share of the pane, so the three overflowed and clipped through each other's footers. Every
   part of the card is now fixed-height — title 1 line, preview 1 line, footer pinned to the bottom
   by its auto margin — so three cards always fit whatever height the pane has. */
.hv-fcard .hv-snip{flex:none;margin-top:5px;margin-bottom:5px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;font-size:11.5px;line-height:1.6;color:color-mix(in srgb, var(--ink) 74%, transparent);}
/* v1347 his ask: the flame brightens with the summary's word count (inline opacity, ~0.42 → 1.0). */
.hv-fhead .ti-flame{transition:opacity .2s;}
.hv-fcard .hv-ffoot{flex:none;margin-top:auto;padding-top:5px;border-top:1px solid rgba(255,255,255,.07);font-style:normal;font-size:11px;line-height:1.5;color:var(--ink-faint);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.hv-fcard .hv-ffoot .ti{font-size:12.5px;margin-right:5px;vertical-align:-2px;}
.hv-fcard .syn-forge{font-style:normal;color:#D6B24A;}
/* 1.1.1 (his pick, Option A) — the in-flight card: real title + anvil, shimmer bars standing in for
   the snippet that hasn't been written yet. Same .hv-fcard box as a finished card so the row's
   sizing math treats it identically; only the middle differs. cursor:default — nothing to open yet. */
.hv-fcard.hv-skelcard{cursor:default;}
.hv-fcard.hv-skelcard:hover{border-color:rgba(255,255,255,.11);background:rgba(8,10,13,.46);}   /* no hover affordance — it isn't clickable */
.hv-skel-line{height:9px;border-radius:4px;margin:5px 0;flex:none;background:linear-gradient(90deg,rgba(255,255,255,.07) 25%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.07) 75%);background-size:200% 100%;animation:hvShimmer 1.6s ease-in-out infinite;}
@keyframes hvShimmer{0%{background-position:200% 0;}100%{background-position:-200% 0;}}
.hv-fcard .hv-skel-foot{color:rgba(214,178,74,.75);}
@media (prefers-reduced-motion:reduce){.hv-skel-line{animation:none;background:rgba(255,255,255,.1);}}
.hv-empty{grid-column:1/-1;font-size:12px;color:var(--ink-faint);padding:6px 2px;}
/* slim Pulse: number+flame only — the flame keeps its state classes, just bigger */
.pw-slim{align-items:center;margin-bottom:0;}
.pw-slim .pw-left{padding-top:0;}
.pw-slim .em-col{display:flex;flex-direction:column;}
.pw-slim .em-big{font-size:27px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;}
.pw-slim .ember-mod .em-flame{font-size:43px;line-height:1;position:relative;top:-4px;}   /* v1318 his eye: 48 was heavy · v1319: raised 4px — the glyph carries empty space at its base, so optical centre sits below geometric centre */   /* 3-deep: must outgun .pw-compact .ember-mod .em-flame (17px) — the slim body still wears pw-compact */   /* v1287: the flame IS the pane's emblem — let it fill the height the text block sets */
.pw-slim .ember-mod{gap:13px;flex-direction:row;align-items:center;}   /* base .ember-mod is a COLUMN (the old shrine); slim is a row — number block, then flame beside it */
.pw-slim .pw-subline{font-size:10.5px;color:var(--ink-faint);margin-top:4px;letter-spacing:.02em;}
.pw-slim .ember-mod{cursor:pointer;display:flex;align-items:center;}
.pw-slim .pw-div{align-self:stretch;width:1px;background:rgba(255,255,255,.14);margin:0 14px;}

/* v1278 — the send feeling: glisten sweep, ember spark, campfire pop, pane bloom */
.hv-intake{position:relative;overflow:hidden;}to{background-position:-140% 0;}}
.hv-spark{position:fixed;z-index:9999;width:9px;height:9px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,#ffe9b0 0%,var(--gold) 55%,rgba(214,178,74,0) 100%);
  box-shadow:0 0 10px rgba(214,178,74,.9),0 0 22px rgba(214,178,74,.45);}
.hv-title .hv-forge-ic.hv-pop{animation:hvPop .38s cubic-bezier(.3,1.6,.5,1);}
@keyframes hvPop{0%{transform:scale(1);}45%{transform:scale(1.3);}100%{transform:scale(1);}}
.h2-vault.hv-bloom{animation:hvBloom .7s ease-out;}
@keyframes hvBloom{0%{box-shadow:0 0 22px rgba(214,178,74,.07);}35%{box-shadow:0 0 34px rgba(214,178,74,.28);}100%{box-shadow:0 0 22px rgba(214,178,74,.07);}}

.hv-fcard.hv-new{animation:hvNew .65s ease-out;}
/* v1365 — the ghost card (empty vault): dashed blueprint of a real card. Ghost opacities on
   purpose — it must never read as content. */
/* v1369 — editable headings in the Studio + source viewer: invisible until you go near them. */
#std-title[contenteditable]:hover,#rv-src-title[contenteditable]:hover{border-bottom:1px dashed rgba(214,178,74,.45);}
#std-title[contenteditable]:focus,#rv-src-title[contenteditable]:focus{outline:none;border-bottom:1px solid var(--gold);}
/* v1367 — the drop chip's working spinner (icon rotates while a scan is live). */
@keyframes rvDropSpin{to{transform:rotate(360deg);}}
.rv-drop-spin{animation:rvDropSpin 1s linear infinite;}
/* 1.1.1 — "Scan the pages" offer, shown under the chip after a TEXT-LAYER pdf read only. Amber so it
   reads as an aside rather than an error: a garbled text layer is uncommon, and the fast path is
   still the default. text-align:left because the drop zone centres its contents. */
.rv-rescan{margin-top:10px;padding:9px 11px;border-radius:10px;text-align:left;
  background:rgba(214,178,74,.06);border:1px solid rgba(214,178,74,.24);}
.rv-rescan-top{display:flex;align-items:center;gap:9px;}
.rv-rescan-top .ti-scan{color:var(--gold);font-size:16px;flex:none;}
.rv-rescan-txt{flex:1;font-size:12px;line-height:1.45;color:var(--ink-soft);}
.rv-rescan-txt b{color:var(--ink);font-weight:600;}
.rv-rescan-go{font-family:inherit;font-size:11.5px;font-weight:600;padding:6px 12px;border-radius:8px;flex:none;
  background:rgba(214,178,74,.16);border:1px solid rgba(214,178,74,.5);color:#F2E4B6;cursor:pointer;}
.rv-rescan-go:hover{background:rgba(214,178,74,.26);}
.rv-rescan-rng{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:11.5px;color:var(--ink-faint);flex-wrap:wrap;}
.rv-rescan-rng input{width:54px;background:rgba(255,255,255,.05);border:1px solid var(--edge);border-radius:7px;
  padding:4px 7px;color:var(--ink);font-family:inherit;font-size:11.5px;text-align:center;}
.rv-rescan-rng input:focus{outline:none;border-color:rgba(214,178,74,.55);}
/* 1.1.1: the page range is its OWN row, above the scan offer — an everyday control, not a rescue. */
.rv-rng-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding-bottom:9px;margin-bottom:9px;
  border-bottom:1px solid rgba(255,255,255,.07);font-size:12px;color:var(--ink-soft);}
.rv-rng-lbl{font-weight:600;color:var(--ink);}
.rv-rng-to,.rv-rng-of{color:var(--ink-faint);}
.rv-rng-row input{width:54px;background:rgba(255,255,255,.05);border:1px solid var(--edge);border-radius:7px;
  color:var(--ink);font-family:inherit;font-size:12px;padding:4px 7px;text-align:center;}
.rv-rng-row input:focus{outline:none;border-color:rgba(214,178,74,.55);}
.rv-rng-row .rv-rescan-use{margin-left:auto;}
/* 1.1.1: the no-scan range action — quieter than "Scan pages" because it is the cheap, instant one */
.rv-rescan-use{font-family:inherit;font-size:11px;font-weight:600;padding:5px 10px;border-radius:7px;cursor:pointer;
  background:rgba(255,255,255,.06);border:1px solid var(--edge);color:var(--ink-soft);flex:none;}
.rv-rescan-use:hover{background:rgba(255,255,255,.12);color:var(--ink);}
/* ===== 1.2 — THE READ LADDER (text layer / scan / Ember reads it) as one dropdown ==================
   Collapsed by default: the common case stays a single line. ⚠ NO PRICE ANYWHERE IN HERE — the tag
   says "Uses Ember", never a figure (his instruction 8/1). */
.rv-rd-row{display:flex;align-items:center;gap:10px;margin-top:10px;}
.rv-rd-lbl{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);flex:none;}
.rv-rd{flex:1;min-width:0;position:relative;}
.rv-rd-btn{display:flex;align-items:center;gap:10px;width:100%;padding:8px 11px;border-radius:9px;text-align:left;
  border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:var(--ink);font-family:inherit;cursor:pointer;}
.rv-rd-btn:hover{border-color:rgba(214,178,74,.4);}
.rv-rd-btn.open{border-color:rgba(214,178,74,.5);border-radius:9px 9px 0 0;background:rgba(214,178,74,.06);}
.rv-rd-btn.ember{border-color:rgba(210,67,56,.42);background:rgba(210,67,56,.07);}
.rv-rd-chev{color:var(--ink-faint);font-size:14px;flex:none;}
.rv-rd-btn.open .rv-rd-chev{transform:rotate(180deg);color:var(--gold);}
.rv-rd-t{flex:1;min-width:0;}
.rv-rd-t b{display:block;font-size:12.5px;font-weight:600;color:var(--ink);line-height:1.35;}
.rv-rd-t i{font-style:normal;display:block;font-size:11.2px;color:var(--ink-faint);line-height:1.4;}
.rv-rd-menu{position:absolute;left:0;right:0;top:100%;z-index:40;border:1px solid rgba(214,178,74,.5);border-top:0;
  border-radius:0 0 9px 9px;background:#1c1b14;overflow:hidden;box-shadow:0 14px 34px rgba(0,0,0,.5);}
.rv-rd-opt{display:flex;align-items:flex-start;gap:10px;padding:10px 11px;cursor:pointer;
  border-bottom:1px solid rgba(255,255,255,.07);}
.rv-rd-opt:last-child{border-bottom:0;}
.rv-rd-opt:hover{background:rgba(255,255,255,.05);}
.rv-rd-opt.on{background:rgba(214,178,74,.1);}
.rv-rd-opt.ember.on{background:rgba(210,67,56,.1);}
.rv-rd-opt.off{opacity:.5;cursor:not-allowed;}
.rv-rd-tag{font-size:9.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:3px 7px;
  border-radius:5px;flex:none;margin-top:1px;white-space:nowrap;}
.rv-rd-tag.free{background:rgba(255,255,255,.08);color:var(--ink-faint);}
.rv-rd-tag.ember{background:rgba(210,67,56,.16);color:#e8907f;}
/* the size heads-up — deliberately the SAME soft rust as .rv-warn, no icon. Informational, not alarm:
   it says what you are in for and gets out of the way. */
.rv-rd-warn{font-size:12px;margin-top:9px;padding:9px 11px;border-radius:9px;line-height:1.5;
  background:rgba(196,86,63,.10);border:1px solid rgba(196,86,63,.30);color:rgba(232,227,221,.82);}
.rv-rd-warn b{color:var(--ink);}
/* v1376 — the depth control worn as pills. v1377: they live inside the Distill checkbox's opened
   branch. Same .rv-mode-b buttons and same .primary on-state the bindings already toggle. */
.rv-then-pills{display:flex;border:1px solid rgba(255,255,255,.12);border-radius:9px;overflow:hidden;flex:none;width:max-content;}
.rv-then-pills .rv-mode-b{font-family:inherit;padding:6px 13px;font-size:11.5px;font-weight:600;background:none;border:0;
  border-right:1px solid rgba(255,255,255,.08);color:var(--ink-faint);cursor:pointer;}
.rv-then-pills .rv-mode-b:last-child{border-right:0;}
.rv-then-pills .rv-mode-b:hover{color:var(--ink-soft);background:rgba(255,255,255,.05);}
.rv-then-pills .rv-mode-b.primary{background:rgba(214,178,74,.16);color:var(--gold,#D6B24A);}
/* v1377 "OPTION A" — the Distill checkbox that grows. One quiet line; ticking it reveals the pills
   + the commission field right where you ticked. */
.rv-distill-row{display:flex;align-items:center;gap:9px;cursor:pointer;font-size:12.5px;color:var(--ink-soft);}
.rv-distill-row input[type="checkbox"]{accent-color:var(--gold,#D6B24A);width:15px;height:15px;margin:0;flex:none;cursor:pointer;}
/* v1378 his catch: the flame is EMBER RED everywhere in this app — gold here was wrong */
.rv-distill-row .ti-flame{color:var(--ember,#D24338);font-size:14px;flex:none;}
/* v1378 — the empty card is a designed state: hero zone (glyph in a soft gold square, real Choose
   button) + the three doors as separate little tiles below the box. */
.rv-zone-glyph{width:54px;height:54px;margin:0 auto;border-radius:16px;display:flex;align-items:center;justify-content:center;
  background:rgba(214,178,74,.09);border:1px solid rgba(214,178,74,.22);}
.rv-zone-glyph .ti{font-size:26px;color:var(--gold,#D6B24A);opacity:.9;}
.rv-choose{display:inline-block;margin-top:14px;font-family:inherit;font-size:12px;font-weight:600;padding:7px 16px;
  border-radius:9px;border:1px solid rgba(214,178,74,.4);background:rgba(214,178,74,.1);color:var(--gold,#D6B24A);cursor:pointer;}
.rv-choose:hover{background:rgba(214,178,74,.2);}
.rv-ways{display:flex;gap:8px;margin-top:9px;}
.rv-way{flex:1;min-width:0;display:flex;align-items:center;gap:9px;padding:10px 12px;border-radius:11px;
  background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.09);}
.rv-way .ti{font-size:16px;color:var(--ink-soft);opacity:.85;flex:none;}
.rv-way-t{min-width:0;}
.rv-way-t b{display:block;font-size:11.6px;font-weight:600;color:var(--ink-soft);line-height:1.3;}
.rv-way-t i{font-style:normal;display:block;font-size:10.6px;color:var(--ink-faint);line-height:1.35;}
.rv-distill-row b{color:var(--ink);font-weight:600;}
/* v1377 — the scan offer, one quiet line under the text box (v3 flow, his sign-off) */
.rv-offer{display:flex;align-items:center;gap:9px;margin-top:8px;font-size:12px;color:var(--ink-faint);}
.rv-offer .ti-scan{font-size:15px;flex:none;}
.rv-offer-t{flex:1;min-width:0;line-height:1.45;}
.rv-offer-t b{color:var(--ink-soft);font-weight:600;}
.rv-offer-go{font-family:inherit;font-size:11px;font-weight:600;padding:5px 11px;border-radius:7px;flex:none;cursor:pointer;white-space:nowrap;
  background:rgba(214,178,74,.13);border:1px solid rgba(214,178,74,.35);color:var(--gold,#D6B24A);}
.rv-offer-go:hover{background:rgba(214,178,74,.24);}
.hv-ghost{border:1.5px dashed rgba(232,227,221,.34);border-radius:11px;padding:12px 14px 10px;background:none;text-align:left;cursor:pointer;color:var(--ink);font-family:inherit;min-width:0;display:block;}
.hv-ghost:hover{border-color:rgba(214,178,74,.4);}
.hv-ghost .hvg-head{display:flex;align-items:center;gap:8px;}
.hv-ghost .hvg-head .ti-flame{font-size:14px;color:rgba(214,178,74,.55);}
.hv-ghost .hvg-head b{font-size:13px;font-weight:650;color:rgba(232,227,221,.62);}
.hv-ghost .hvg-snip{display:block;font-size:11.5px;line-height:1.6;color:rgba(232,227,221,.45);margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.hv-ghost .hvg-foot{display:block;font-style:normal;margin-top:9px;padding-top:8px;border-top:1px dashed rgba(255,255,255,.16);font-size:11px;line-height:1.5;color:rgba(232,227,221,.4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.hv-ghost .hvg-foot .ti{font-size:12px;margin-right:5px;vertical-align:-2px;}
@keyframes hvNew{0%{opacity:0;transform:translateY(7px);border-color:rgba(214,178,74,.85);}55%{opacity:1;border-color:rgba(214,178,74,.85);}100%{transform:none;border-color:rgba(255,255,255,.11);}}

/* ═══ v1292 — the spotlight tour ═══ */
/* v1353 (his catch: clicking a Current Focus card mid-tour OPENED the page and left the tour card
   floating over it) — the veil was decorative, so every click passed through to the app. It now
   swallows them: while the tour runs the only live controls are Skip / Back / Next on #tour-card,
   which is a SIBLING at a higher z-index and keeps its own pointer events. */
#tour-veil{position:fixed;inset:0;z-index:11000;pointer-events:auto;cursor:default;}
#tour-hole{position:absolute;border-radius:16px;box-shadow:0 0 0 9999px rgba(5,7,9,.72);border:1.5px solid rgba(214,178,74,.85);
  transition:all .38s cubic-bezier(.5,.2,.2,1);filter:drop-shadow(0 0 18px rgba(214,178,74,.25));}
#tour-card{position:fixed;z-index:11010;width:330px;border-radius:15px;border:1px solid rgba(214,178,74,.4);
  background:rgba(14,17,21,.97);padding:17px 19px;transition:all .38s cubic-bezier(.5,.2,.2,1);box-shadow:0 18px 50px rgba(0,0,0,.5);color:var(--ink);}
#tour-card .tour-step{font-size:10.5px;letter-spacing:.16em;color:var(--gold);font-weight:700;margin-bottom:7px;}
#tour-card h3{font-size:16.5px;margin:0 0 7px;}
#tour-card p{font-size:13px;line-height:1.55;color:rgba(232,227,221,.72);margin:0;}
#tour-card .tour-foot{display:flex;align-items:center;margin-top:14px;gap:8px;}
#tour-card .tour-dots{display:flex;gap:5px;margin-right:auto;}
#tour-card .tour-dots span{width:6px;height:6px;border-radius:50%;background:rgba(232,227,221,.22);}
#tour-card .tour-dots span.on{background:var(--gold);}
.tour-btn{border:1px solid rgba(232,227,221,.25);background:none;border-radius:9px;color:rgba(232,227,221,.72);padding:7px 14px;font-size:12.5px;cursor:pointer;font-family:inherit;}
.tour-btn.primary{background:var(--gold);border-color:var(--gold);color:#15140f;font-weight:700;}
.tour-btn.tour-skip{border:none;color:rgba(232,227,221,.45);padding:7px 6px;}

/* v1306 — the Boards empty state is a DOOR, not a note */
.lib-nb-cta{display:block;width:100%;text-align:center;cursor:pointer;font-family:inherit;color:var(--ink-soft);background:rgba(255,255,255,.035);border:1.5px dashed rgba(214,178,74,.4);border-radius:14px;padding:26px 20px;font-size:13.5px;transition:border-color .15s,background .15s;}
.lib-nb-cta:hover{border-color:rgba(214,178,74,.75);background:rgba(214,178,74,.07);}
.lib-nb-cta b{color:var(--gold);}

/* v1310 — THE FLAME STAYS INSIDE ITS OWN LINES (his call). The base .em-flame drop-shadow is 5px,
   tuned for the 17px shrine flame; at the slim pane's 48px it read as a blotch on the scene. Slim
   scope: day 1-6 lit = clean ember, NO halo. Warmth now scales with the STREAK — at 7 days the
   flame leans toward gold and earns a 2px RIM (arriving with the breath, which was already gated
   at 7); at 30 it goes full gold-warm. Goal-met today (em-bright) stays the brightest and wins the
   cascade. The editor shrine is untouched — all of this is .pw-slim only. */
.pw-slim .ember-mod .em-flame{filter:none;}
.pw-slim .ember-mod.em-lit .em-flame{color:var(--ember);opacity:.92;filter:none;}
.pw-slim .ember-mod.em-s7 .em-flame{color:color-mix(in srgb, var(--ember) 76%, var(--gold,#D6B24A));opacity:.96;filter:drop-shadow(0 0 2px color-mix(in srgb, var(--ember) 55%, transparent));}
.pw-slim .ember-mod.em-s30 .em-flame{color:color-mix(in srgb, var(--ember) 55%, var(--gold,#D6B24A));opacity:1;filter:drop-shadow(0 0 2.5px color-mix(in srgb, var(--ember) 65%, transparent));}
/* v1318 — TRUE EMBER, NOT ORANGE. The shared .em-bright rule mixes --ember 74% with GOLD, which is
   what read orange against the app's reds; v1310 overrode the glow but never the COLOR. The slim
   Pulse flame now wears var(--ember) straight, with the halo tinted from the same token so nothing
   pulls it warm. Light mode inherits its own --ember (#B5352B) automatically. */
.pw-slim .ember-mod.em-bright .em-flame{color:var(--ember);opacity:1;filter:drop-shadow(0 0 2.5px color-mix(in srgb, var(--ember) 55%, transparent));}
.pw-slim .ember-mod.em-lit .em-flame{color:var(--ember);filter:drop-shadow(0 0 2px color-mix(in srgb, var(--ember) 45%, transparent));}
/* v1383 — Ember's inline conceptual-tag chips: same .ip-sug body, flame-tinted edge */
.ip-sug.ip-sug-ember-t{border-color:rgba(210,67,56,.4);}
.ip-sug.ip-sug-ember-t .ip-sug-plus{color:var(--ember,#D24338);}
.ip-sug-ember[disabled]{opacity:.55;cursor:default;}
/* v1385 — TWO COLUMNS: a borderless .ed-table. Side-by-side blocks, not magazine flow (a cell is a
   box: text does not continue from column one into column two). Rule between, generous gutter. */
.ed-table.ed-cols{border-collapse:collapse;width:100%;table-layout:fixed;}
.ed-table.ed-cols td{vertical-align:top;padding:2px 0 2px 22px;border:0;border-left:2px solid rgba(214,178,74,.28);}
.ed-table.ed-cols:hover td{border-left-color:rgba(214,178,74,.5);}   /* v1386: the rule is also the drag handle — show it's live */
.ed-table.ed-cols td:first-child{padding-left:0;padding-right:22px;border-left:0;}
body.light .ed-table.ed-cols td{border-left-color:rgba(154,122,46,.4);}
body.light .ed-table.ed-cols:hover td{border-left-color:rgba(154,122,46,.65);}

/* ═══ THE SCRIPTORIUM (1.2) ═══════════════════════════════════════════════════
   Published writing pulled into a Space. Sits in the Library rail's second group —
   visually separated from WORKSPACE because it is material arriving from OUTSIDE,
   not another collection you built. */
.lib-side-gap{height:1px;background:var(--edge);margin:10px 8px 4px;}
.lib-newdot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--gold);
  box-shadow:0 0 7px rgba(214,178,74,.7);}
.spin{display:inline-block;animation:stdspin .9s linear infinite;}

.scr-refresh{flex:none;align-self:flex-start;margin-left:auto;background:none;border:1px solid var(--edge);
  color:var(--ink-faint);border-radius:9px;width:32px;height:32px;cursor:pointer;display:flex;
  align-items:center;justify-content:center;transition:var(--fx-chrome);}
.scr-refresh:hover{color:var(--gold);border-color:rgba(214,178,74,.45);background:rgba(214,178,74,.08);}

.scr-shead{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);
  font-weight:600;margin:4px 0 12px;display:flex;align-items:center;gap:9px;}
.scr-shead:not(:first-child){margin-top:26px;}
.scr-ct{color:var(--gold);font-weight:600;letter-spacing:0;text-transform:none;font-size:11px;
  background:rgba(214,178,74,.13);padding:2px 8px;border-radius:20px;}

/* ── pieces ── */
.scr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;}
.scr-card{border:1px solid var(--edge);border-radius:13px;overflow:hidden;background:rgba(255,255,255,.035);
  display:flex;flex-direction:column;cursor:pointer;transition:border-color 240ms var(--fx-ease),transform 240ms var(--fx-ease);}
.scr-card:hover{border-color:rgba(214,178,74,.4);transform:translateY(-2px);transition-duration:60ms;}
/* v1450 ONE UNIFORM STAGE (his "wonky" catch, measured cause): the covers arrive on three
   different canvases — 2000×2000, 2880×1800, 1360×768, all transparent — so the old two-mode
   frame (80px cropped band OR a 150px `.plain` stage) put different heights and croppings in one
   grid. Now every card gets the same 150px stage with object-fit:contain: nothing crops, nothing
   floats, a missing image just leaves the tint. Transparent `art` gets the spotlight below;
   an opaque `cover` photo takes `.solid` and fills the stage instead (no glow to leak around it). */
.scr-art{height:150px;position:relative;flex:none;overflow:hidden;}
.scr-art-1{background:radial-gradient(76% 62% at 50% 32%,rgba(196,104,72,.3),transparent 72%),linear-gradient(180deg,rgba(52,24,20,.5),rgba(0,0,0,.3));}
.scr-art-2{background:radial-gradient(76% 62% at 50% 32%,rgba(96,132,168,.3),transparent 72%),linear-gradient(180deg,rgba(22,36,52,.5),rgba(0,0,0,.3));}
.scr-art-3{background:radial-gradient(76% 62% at 50% 32%,rgba(190,158,80,.3),transparent 72%),linear-gradient(180deg,rgba(48,40,18,.5),rgba(0,0,0,.3));}
.scr-art-4{background:radial-gradient(76% 62% at 50% 32%,rgba(140,116,180,.3),transparent 72%),linear-gradient(180deg,rgba(38,30,58,.5),rgba(0,0,0,.3));}
.scr-art::after{content:"";position:absolute;left:20%;right:20%;bottom:10px;height:8px;border-radius:50%;
  background:rgba(0,0,0,.5);filter:blur(7px);z-index:1;}   /* the floor the subject stands on */
.scr-cimg{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:12px 12px 10px;
  display:block;z-index:2;filter:drop-shadow(0 4px 8px rgba(0,0,0,.45));}
.scr-art.solid::after{display:none;}                                        /* an opaque photo needs no plinth */
.scr-art.solid .scr-cimg{object-fit:cover;padding:0;filter:none;}
.scr-have{position:absolute;top:9px;right:9px;z-index:3;display:inline-flex;align-items:center;gap:4px;
  font-size:9.5px;color:#7FB069;background:rgba(0,0,0,.5);padding:3px 7px;border-radius:5px;}
.scr-read{position:absolute;inset:0;z-index:4;display:flex;align-items:center;justify-content:center;gap:7px;
  font-size:12.5px;font-weight:600;color:var(--ink);background:rgba(8,12,10,.62);
  opacity:0;transition:opacity .18s ease;}
.scr-card:hover .scr-read{opacity:1;transition-duration:0s;}
.scr-pill{position:absolute;top:9px;left:10px;font-size:9.5px;letter-spacing:.07em;text-transform:uppercase;
  font-weight:600;color:var(--ink);background:rgba(0,0,0,.42);padding:3px 8px;border-radius:20px;
  border:1px solid rgba(255,255,255,.16);}
.scr-cb{padding:11px 13px 13px;display:flex;flex-direction:column;flex:1;}
.scr-cn{font-size:13px;font-weight:600;line-height:1.4;}
.scr-cm{font-size:10.5px;color:var(--ink-faint);margin-top:5px;}
.scr-cd{font-size:11.5px;color:var(--ink-faint);margin-top:7px;line-height:1.55;}
.scr-cm,.scr-cd{margin-bottom:0;}
.scr-cd{margin-bottom:2px;}

/* ── a course is ONE COLLAPSED ROW until asked (v1450) ── */
.scr-series{border:1px solid var(--edge);border-radius:12px;overflow:hidden;margin-bottom:8px;
  background:rgba(255,255,255,.028);}
.scr-shd{display:flex;align-items:center;gap:12px;padding:12px 14px;cursor:pointer;transition:background .18s ease;}
.scr-shd:hover{background:rgba(255,255,255,.04);transition-duration:0s;}
.scr-chev{flex:none;font-size:13px;color:var(--ink-faint);transition:transform 160ms var(--fx-ease);}
.scr-series.open .scr-chev{transform:rotate(90deg);}
.scr-sn{font-size:13.5px;font-weight:600;}
.scr-sm{font-size:11px;color:var(--ink-faint);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.scr-prog{flex:none;display:flex;align-items:center;gap:7px;font-size:11px;color:var(--ink-faint);}
.scr-bar{width:54px;height:3px;border-radius:2px;background:rgba(255,255,255,.12);overflow:hidden;}
.scr-bar i{display:block;height:100%;background:var(--gold);border-radius:2px;}
.scr-sr{flex:none;}
/* Add-all stays out of the resting row — it arrives on hover, or whenever the course is open */
.scr-sr{opacity:0;transition:opacity .18s ease;}
.scr-series:hover .scr-sr,.scr-series.open .scr-sr{opacity:1;}
.scr-addall{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;
  background:var(--gold);color:#1b1a17;border:1px solid var(--gold);border-radius:8px;padding:5px 11px;
  cursor:pointer;font-family:inherit;transition:filter .12s;}
.scr-addall:hover:not(:disabled){filter:brightness(1.1);}
.scr-addall:disabled{opacity:.8;cursor:default;}
.scr-done{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink-faint);}
.scr-slist{display:none;border-top:1px solid var(--edge);}
.scr-series.open .scr-slist{display:block;}
.scr-sitem{display:flex;align-items:center;gap:11px;padding:8px 14px 8px 39px;font-size:12.5px;
  color:var(--ink-soft);cursor:pointer;border-bottom:1px solid rgba(255,255,255,.04);transition:background .18s ease;}
.scr-sitem:last-child{border-bottom:none;}
.scr-sitem:hover{background:rgba(255,255,255,.045);color:var(--ink);transition-duration:0s;}
.scr-ri{width:24px;flex:none;color:var(--ink-faint);font-size:11px;}
.scr-st{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.scr-sw{margin-left:auto;flex:none;font-size:10.5px;color:var(--ink-faint);}
.scr-ck{color:#7FB069;font-size:13px;}

/* ── THE READER (v1450): the whole piece, scrollable, Add lives in its footer ── */
.scr-reader-wrap{position:fixed;inset:0;z-index:9700;background:rgba(6,9,8,.62);backdrop-filter:blur(6px);
  display:flex;align-items:center;justify-content:center;padding:40px;animation:fxFade 160ms var(--fx-ease);}
.scr-reader-wrap.fx-out{opacity:0;transition:opacity .14s ease;}
@keyframes fxFade{from{opacity:0;}}
@keyframes scrRise{from{opacity:0;transform:translateY(14px) scale(.985);}}
.scr-reader{width:min(780px,100%);max-height:86vh;display:flex;flex-direction:column;border-radius:18px;
  overflow:hidden;box-shadow:0 40px 100px rgba(0,0,0,.6);animation:scrRise 200ms var(--fx-ease);}
.scr-r-hero{height:170px;position:relative;flex:none;overflow:hidden;
  background:radial-gradient(76% 62% at 50% 30%,rgba(190,158,80,.22),transparent 72%),linear-gradient(180deg,rgba(40,34,22,.5),rgba(0,0,0,.35));}
.scr-r-art{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:14px 14px 30px;
  filter:drop-shadow(0 5px 10px rgba(0,0,0,.5));}
.scr-r-hero.solid .scr-r-art{object-fit:cover;padding:0;filter:none;}
.scr-r-hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(to top,rgba(16,20,18,.96),rgba(16,20,18,.25) 55%,transparent 80%);}
.scr-r-x{position:absolute;top:12px;right:12px;z-index:3;width:28px;height:28px;border-radius:50%;border:none;
  cursor:pointer;background:rgba(0,0,0,.45);color:var(--ink-soft);font-size:14px;display:flex;align-items:center;
  justify-content:center;transition:background .18s ease;}
.scr-r-x:hover{background:rgba(0,0,0,.72);color:var(--ink);transition-duration:0s;}
.scr-r-head{position:absolute;left:26px;right:26px;bottom:13px;z-index:2;}
.scr-r-kind{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--gold);font-weight:700;}
.scr-r-title{font-size:23px;font-weight:650;margin-top:5px;letter-spacing:-.01em;line-height:1.2;}
.scr-r-meta{font-size:11.5px;color:var(--ink-faint);margin-top:5px;}
.scr-r-body{overflow-y:auto;padding:20px 30px 26px;flex:1;min-height:0;}
.scr-r-body .scr-r-md > *:first-child{margin-top:0;}
.scr-r-body p{font-size:14.5px;line-height:1.75;color:var(--ink-soft);margin:0 0 14px;}
.scr-r-body h1,.scr-r-body h2,.scr-r-body h3{margin:22px 0 10px;line-height:1.3;}
.scr-r-body h1{font-size:21px;} .scr-r-body h2{font-size:18px;} .scr-r-body h3{font-size:15.5px;}
.scr-r-body ul,.scr-r-body ol{margin:0 0 14px 20px;color:var(--ink-soft);font-size:14.5px;line-height:1.75;}
.scr-r-body blockquote{margin:0 0 14px;padding-left:16px;border-left:2px solid rgba(214,178,74,.5);color:var(--ink-soft);font-style:italic;}
.scr-r-body img{max-width:100%;border-radius:10px;}
.scr-r-body hr{border:none;border-top:1px solid var(--edge);margin:20px 0;}
.scr-r-load,.scr-r-more{display:flex;align-items:center;justify-content:center;gap:8px;padding:18px 0;
  font-size:12px;color:var(--ink-faint);}
.scr-r-err{padding:22px 0;font-size:13px;color:var(--ink-faint);text-align:center;}
.scr-r-foot{flex:none;display:flex;align-items:center;gap:10px;padding:13px 22px 15px;border-top:1px solid var(--edge);}
.scr-r-note{font-size:11.5px;color:var(--ink-faint);flex:1;min-width:0;}

/* ── the one Space picker (v1409, his mockup sign-off): rows + dashed New-Space door + inline
   create. Rendered by spPickHTML into pickSpace2's modal OR embedded in Promote/Save-as-page. ── */
.spk-row{display:flex;align-items:center;gap:11px;width:100%;font-size:13.5px;font-weight:550;color:var(--ink);
  border:1px solid var(--edge);background:rgba(255,255,255,.035);border-radius:11px;padding:11px 14px;
  margin-bottom:8px;cursor:pointer;font-family:inherit;text-align:left;transition:border-color .12s;}
.spk-row:hover{border-color:rgba(214,178,74,.45);}
.spk-dot{width:9px;height:9px;border-radius:50%;flex:none;}
.spk-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.spk-n{margin-left:auto;font-size:10.5px;color:var(--ink-faint);font-weight:400;flex:none;}
.spk-new{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;font-size:12.5px;font-weight:600;
  color:var(--gold);border:1px dashed rgba(214,178,74,.5);background:rgba(214,178,74,.05);border-radius:11px;
  padding:10px 14px;cursor:pointer;font-family:inherit;transition:var(--fx-chrome);}
.spk-new:hover{background:rgba(214,178,74,.11);border-style:solid;}
.spk-back{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-faint);cursor:pointer;margin-bottom:11px;}
.spk-back:hover{color:var(--ink-soft);}
.spk-nm{width:100%;box-sizing:border-box;background:rgba(255,255,255,.05);border:1px solid rgba(214,178,74,.55);
  border-radius:11px;padding:11px 14px;font:inherit;font-size:14px;color:var(--ink);outline:none;margin-bottom:12px;}
.spk-cl{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-faint);font-weight:700;margin-bottom:8px;}
.spk-cds{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:15px;}
.spk-cd{width:22px;height:22px;border-radius:50%;cursor:pointer;position:relative;}
.spk-cd.on::after{content:"";position:absolute;inset:-5px;border:2px solid var(--gold);border-radius:50%;}
.spk-create{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;font-size:13px;font-weight:650;
  background:var(--gold);color:#1b1a17;border:1px solid var(--gold);border-radius:11px;padding:10px;
  cursor:pointer;font-family:inherit;transition:filter .12s;}
.spk-create:hover{filter:brightness(1.08);}
body.light .spk-row{background:rgba(0,0,0,.03);}
body.light .spk-nm{background:rgba(0,0,0,.04);}

/* ── the three states ── */
.scr-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:54px 30px;text-align:center;}
.scr-glyph{width:66px;height:66px;border-radius:16px;background:rgba(214,178,74,.09);
  border:1px solid rgba(214,178,74,.2);display:flex;align-items:center;justify-content:center;
  color:var(--gold);font-size:30px;margin-bottom:19px;}
.scr-glyph.err{background:rgba(210,67,56,.09);border-color:rgba(210,67,56,.24);color:var(--ember);}
.scr-empty h3{font-size:16.5px;font-weight:600;margin-bottom:9px;}
.scr-empty p{font-size:13px;color:var(--ink-faint);line-height:1.72;max-width:400px;}
.scr-erow{margin-top:20px;}
.scr-erow .btn{display:inline-flex;align-items:center;gap:7px;}
.scr-err-detail{margin-top:16px;font-size:10.5px;color:rgba(232,227,221,.25);font-family:ui-monospace,monospace;
  max-width:420px;word-break:break-word;}
body.light .scr-err-detail{color:rgba(27,26,23,.3);}

/* ⚠ The PDF honesty note (1.2, his call): "free functionality that isn't core to Sanctum — we
   never treat PDF-to-text as 'oh it's in your vault perfect'." Deliberately QUIET — faint, no
   icon, no warning colour. It sets an expectation; it is not an error and must never read as one. */

/* ── 1.1.2 PRE-SCAN RANGE GATE — pick the pages before an image-only PDF is read ─────────────
   Replaces a native yes/no confirm(), so it must read as a decision, not a warning: same tone
   as the rest of the card, no danger colour, no icon. */
.rv-gate{margin-top:12px;border:1px solid rgba(214,178,74,.3);border-radius:11px;padding:13px 14px;
  background:linear-gradient(180deg,rgba(214,178,74,.06),rgba(214,178,74,.02));}
.rv-gate-t{font-size:12.5px;line-height:1.66;color:var(--ink-soft);margin-bottom:12px;}
.rv-gate-t b{color:var(--ink);font-weight:600;}
.rv-gate-h{font-size:11.5px;color:var(--ink-faint);margin-top:10px;line-height:1.55;}
.rv-gate-go{margin-left:auto;flex:none;background:var(--gold);color:#1b1a17;border:1px solid var(--gold);
  border-radius:9px;padding:8px 15px;font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;
  transition:filter .12s;}
.rv-gate-go:hover:not(:disabled){filter:brightness(1.1);}
.rv-gate-go:disabled{opacity:.55;cursor:default;}
/* the shared range row carries a divider for its re-scan context; inside the gate that is a
   stray rule floating above the hint line. */
.rv-gate .rv-rng-row{border-bottom:none;padding-bottom:0;margin-bottom:0;}

/* ── Ember reads the pages (1.2). Offered the moment a PDF lands, never gated behind failures.
   Ember red rather than gold: this is the one row on the card that spends something. ── */

/* ═══ ONE QUESTION, WIDE (1.2, his sign-off 8/3) ═══════════════════════════════════════════════
   Three stacked advisory rows became one question with mutually exclusive answers, beside a live
   preview. ⚠ .solo is the pasted-text case: no pages, no alternatives, box spans the card. */
.rv-rad{width:15px;height:15px;border-radius:50%;border:1.5px solid rgba(255,255,255,.3);flex:none;margin-top:2px;position:relative;}
/* .rv-tag badge (9px uppercase FREE/EMBER pill) retired v1450 — no emitter anywhere in app.js;
   its class name had been half-inherited by the Vault topic chips, which are .rv-topic now. */

/* 1.2 — the column flag. States a fact; it is not a warning and must not read as one. */
.rv-cols{margin-top:10px;padding:10px 12px;border-radius:9px;font-size:11.5px;line-height:1.6;
  background:rgba(214,178,74,.06);border:1px solid rgba(214,178,74,.26);color:var(--ink-faint);}
.rv-cols b{color:var(--ink);font-weight:600;}


/* ── Rewrite with Ember (8/4): the passage dialog + the kept-alive selection glow ── */
#std-selglow{position:absolute;inset:0;pointer-events:none;z-index:3;}
.std-selglow-r{position:absolute;background:rgba(214,178,74,.16);border-radius:3.5px;
  box-shadow:0 0 0 1px rgba(214,178,74,.22),0 0 14px rgba(214,178,74,.28);
  animation:stdGlowIn .35s ease;}
@keyframes stdGlowIn{from{background:rgba(214,178,74,.38);box-shadow:0 0 0 1px rgba(214,178,74,.5),0 0 26px rgba(214,178,74,.6);}}
#std-rw-wrap{position:fixed;inset:0;z-index:10000;background:rgba(8,9,12,.28);display:flex;align-items:center;justify-content:center;}
.std-rw-card{width:min(480px,calc(100vw - 56px));padding:20px 22px 18px;border-radius:18px;
  background:rgba(20,21,27,.94);border:1px solid rgba(214,178,74,.32);
  box-shadow:0 28px 80px rgba(0,0,0,.6),0 0 42px rgba(214,178,74,.07);
  backdrop-filter:blur(26px);-webkit-backdrop-filter:blur(26px);}
.std-rw-head{display:flex;align-items:center;gap:9px;font-size:11px;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;color:var(--gold,#D6B24A);margin-bottom:12px;}
.std-rw-flame{width:24px;height:24px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;
  font-size:13px;background:rgba(214,178,74,.14);border:1px solid rgba(214,178,74,.3);box-shadow:0 0 12px rgba(214,178,74,.18);}
.std-rw-quote{font-size:12.5px;line-height:1.6;color:var(--ink-soft);font-style:italic;
  padding:9px 12px 9px 14px;margin-bottom:12px;border-left:2px solid rgba(214,178,74,.55);
  background:rgba(214,178,74,.05);border-radius:0 9px 9px 0;}
.std-rw-count{display:block;margin-top:5px;font-style:normal;font-size:10.5px;letter-spacing:.04em;color:var(--ink-faint);}
.std-rw-in{width:100%;box-sizing:border-box;resize:none;background:rgba(255,255,255,.055);border:1px solid rgba(255,255,255,.16);
  color:var(--ink);border-radius:11px;padding:10px 12px;font-size:14px;line-height:1.5;font-family:inherit;outline:none;}
.std-rw-in:focus{border-color:rgba(214,178,74,.45);box-shadow:0 0 0 3px rgba(214,178,74,.1);}
.std-rw-hint{font-size:11px;color:var(--ink-faint);margin:9px 1px 14px;}
.std-rw-btns{display:flex;gap:9px;justify-content:flex-end;}
.std-rw-cancel{background:none;border:1px solid var(--edge);color:var(--ink-soft);border-radius:10px;padding:8px 14px;
  font-size:12.5px;font-weight:600;font-family:inherit;cursor:pointer;}
.std-rw-cancel:hover{background:rgba(255,255,255,.05);}
.std-rw-go{display:inline-flex;align-items:center;gap:7px;background:var(--gold,#D6B24A);border:1px solid var(--gold,#D6B24A);
  color:#1b1a17;border-radius:10px;padding:8px 16px;font-size:12.5px;font-weight:700;font-family:inherit;cursor:pointer;}
.std-rw-go:hover{filter:brightness(1.08);}

/* ---- EMBER PACKS (v1414, 1.2): the top-up sheet. His copy law here: no badge pills, no
   caps-lock urgency — the multiple IS the headline, the value note whispers underneath. ---- */
/* ⚠ v1426 — THE PARENT WAS THE PROBLEM. `#modal{width:380px;padding:22px}` (an ID, so it beat
   every class here) squeezed three cards into ~105px each: "Ember top-up" hyphenated mid-word,
   the value notes stacked four lines, card heights went ragged. `.epacks-sheet{max-width:560px}`
   was never reachable. openEmberPacks now tags the modal `.modal-packs` and this widens it. */
#modal.modal-packs{width:min(620px,94vw);padding:0;}
.epacks-sheet{padding:24px 26px 20px;}
.epacks-sheet h3{font-size:16px;font-weight:650;text-align:center;margin:0;letter-spacing:-.01em;}
.epacks-sheet .hint{text-align:center;margin:6px auto 0;font-size:12.5px;line-height:1.55;color:var(--ink-soft);max-width:44ch;}
.epacks{display:flex;gap:12px;margin-top:20px;align-items:stretch;}
.epack{flex:1 1 0;min-width:0;border:1px solid var(--edge);border-radius:13px;background:rgba(255,255,255,.035);
  padding:18px 12px 15px;text-align:center;cursor:pointer;transition:border-color .15s,transform .15s,background .15s;
  display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  /* never break a word mid-syllable — "top-up" split across lines is what he flagged first */
  hyphens:none;-webkit-hyphens:none;overflow-wrap:normal;word-break:normal;}
.epack:hover{border-color:rgba(255,255,255,.24);background:rgba(255,255,255,.055);transform:translateY(-1px);}
.epack.best{border-color:rgba(214,178,74,.34);}
.epack.busy{opacity:.55;pointer-events:none;}
.epack-mult{font-size:25px;font-weight:700;letter-spacing:-.02em;color:var(--ink);line-height:1.05;
  font-variant-numeric:tabular-nums;white-space:nowrap;}
.epack-note{font-size:11.5px;line-height:1.4;color:var(--ink-soft);margin-top:9px;opacity:.9;
  text-wrap:balance;max-width:15ch;}
.epack-note.gold{color:var(--gold,#D6B24A);opacity:1;}
.epacks-foot{font-size:11.5px;line-height:1.5;color:var(--ink-soft);margin:18px auto 0;opacity:.75;
  text-align:center;max-width:46ch;}
.epacks-foot a{color:var(--ink-soft);text-decoration:underline;}

/* ---- FOOTNOTES (v1415, 1.1.4 — his Variant A pick): gold superscript markers, glass popover,
   Notes block at the page foot. Styles are global on purpose: the reference pane, previews, and
   every mdToHtml surface render footnotes identically. ---- */
sup.fn{color:var(--gold,#D6B24A);font-size:.68em;font-weight:700;cursor:pointer;padding:0 1px;border-radius:3px;user-select:none;line-height:1;}
sup.fn:hover{background:rgba(214,178,74,.16);}
.fn-def{display:flex;gap:9px;align-items:baseline;font-size:.82em;line-height:1.65;color:var(--ink-soft);margin:2px 0;position:relative;}
.fn-def .fn-n{color:var(--gold,#D6B24A);font-weight:700;flex:none;cursor:pointer;font-size:.92em;user-select:none;}
.fn-def .fn-t{flex:1;min-width:0;outline:none;}
/* the first note in a run opens the Notes block: divider + quiet label */
:not(.fn-def)+.fn-def,.fn-def:first-child{margin-top:26px;padding-top:24px;border-top:1px solid var(--edge,rgba(255,255,255,.15));}
:not(.fn-def)+.fn-def::before,.fn-def:first-child::before{content:"NOTES";position:absolute;top:7px;left:0;font-size:9.5px;letter-spacing:.18em;font-weight:700;color:var(--ink-soft);opacity:.65;}
.fn-pop{position:fixed;z-index:210;background:rgba(28,25,26,.97);border:1px solid rgba(255,255,255,.14);border-radius:12px;padding:12px 14px 11px;box-shadow:0 22px 60px rgba(0,0,0,.65);font-size:12.5px;line-height:1.65;color:var(--ink);pointer-events:none;}
.fn-pop .fn-pop-n{color:var(--gold,#D6B24A);font-weight:700;margin-right:7px;}
.fn-flash{animation:fnflash 1.2s ease;}
@keyframes fnflash{0%{background:rgba(214,178,74,.20);}100%{background:transparent;}}

/* stuck-purchase banner inside the packs sheet (build 33) — see ember_packs_pending in lib.rs */
.epacks-stuck{margin-top:16px;border:1px solid rgba(214,178,74,.34);background:rgba(214,178,74,.09);
  border-radius:11px;padding:12px 14px;font-size:12px;line-height:1.5;color:var(--ink-soft);text-align:center;}
.epacks-stuck b{display:block;color:var(--ink);font-weight:600;margin-bottom:3px;}
.epacks-stuck .btn{margin-top:9px;font-size:12px;padding:6px 12px;}

/* an orphaned note — its marker was deleted but the text was kept (see fnRenumber v1471).
   Labelled rather than silently bulleted, so it reads as "you can delete this" not "something broke". */
.fn-def.fn-orphan{opacity:.62;}
.fn-def.fn-orphan .fn-n{color:var(--ink-soft);font-weight:600;}
.fn-def.fn-orphan .fn-t::after{content:" · unused";font-size:.85em;letter-spacing:.04em;opacity:.7;}

/* ---- CITATIONS (1.1.5) ---- */
.cite{color:var(--gold,#D6B24A);border-bottom:1px dotted rgba(214,178,74,.45);cursor:pointer}
.cite-pending{color:var(--ink-soft);border-bottom-style:dashed;opacity:.75}
.cite-bad{color:var(--ember,#D24338);border-bottom:1px dotted rgba(210,67,56,.6)}
.cite-chip{display:inline-flex;align-items:center;background:rgba(214,178,74,.13);border:1px solid rgba(214,178,74,.3);
  border-radius:5px;padding:0 6px;font-size:.86em;color:var(--gold,#D6B24A);cursor:pointer}
.cite-pick{position:fixed;z-index:9000;background:rgba(20,23,26,.97);border:1px solid rgba(232,227,221,.13);
  border-radius:12px;overflow:hidden;box-shadow:0 18px 44px rgba(0,0,0,.55);backdrop-filter:blur(14px)}
.cite-pick-q{padding:8px 13px;border-bottom:1px solid rgba(232,227,221,.1);font-family:ui-monospace,monospace;
  font-size:12.5px;color:var(--gold,#D6B24A)}
.cite-pick-i{padding:9px 13px;cursor:pointer;border-bottom:1px solid rgba(232,227,221,.05)}
.cite-pick-i:last-child{border-bottom:none}
.cite-pick-i.on{background:rgba(214,178,74,.12)}
.cite-pick-t{font-size:13.5px;color:var(--ink)}
.cite-pick-m{font-size:12px;color:var(--ink-soft);margin-top:2px}
.cite-pick-k{font-family:ui-monospace,monospace;color:var(--gold,#D6B24A);font-size:11.5px;margin-left:4px}
.cite-bib{margin-top:34px;padding-top:16px;border-top:1px solid rgba(232,227,221,.14)}
.cite-bib-h{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft);font-weight:700;margin-bottom:12px}
.cite-bib-l{font-size:.92em;color:var(--ink-soft);padding-left:26px;text-indent:-26px;margin-bottom:9px;line-height:1.6}

/* ═══ EMBER ASSIST (1.2) — the intake-repair banner, refs chip, and review list ═══ */
#ef-banner{margin:2px 0 10px;border:1px solid rgba(214,178,74,.34);border-radius:11px;overflow:hidden;background:linear-gradient(135deg,rgba(214,178,74,.09),rgba(210,67,56,.06));}
#ef-banner .ef-in{padding:10px 13px;display:flex;gap:11px;align-items:center;}
#ef-banner .ef-oi{width:30px;height:30px;flex:none;border-radius:8px;display:flex;align-items:center;justify-content:center;background:rgba(210,67,56,.16);color:var(--ember);font-size:16px;border:1px solid rgba(210,67,56,.3);}
#ef-banner.ef-done .ef-oi{background:rgba(214,178,74,.14);color:var(--gold);border-color:rgba(214,178,74,.4);}
#ef-banner .ef-ot{flex:1;font-size:12.4px;line-height:1.45;color:var(--ink-soft);}
#ef-banner .ef-ot b{color:var(--ink);}
.ef-cost{color:var(--gold);font-weight:600;white-space:nowrap;}
#ef-banner .ef-ob{display:flex;gap:7px;flex:none;align-items:center;}
#ef-banner .ef-x{background:none;border:none;color:var(--ink-faint);cursor:pointer;padding:4px;font-size:14px;}
#ef-banner .ef-x:hover{color:var(--ink);}
#ef-banner .ef-undo{background:none;border:none;color:var(--ink-faint);font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px;font-family:inherit;}
#ef-banner .ef-undo:hover{color:var(--ink);}
#ef-banner .ef-bar{height:3px;background:rgba(255,255,255,.06);}
#ef-banner .ef-bar b{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--ember));width:0%;transition:width .5s ease;}
#ef-banner.ef-running .ef-oi i{animation:efflick 1s ease-in-out infinite;}
@keyframes efflick{0%,100%{transform:scale(1);opacity:1;}50%{transform:scale(1.16);opacity:.75;}}
.ef-btn{padding:6px 12px;border-radius:9px;border:1px solid rgba(210,67,56,.55);background:linear-gradient(145deg,rgba(210,67,56,.22),rgba(210,67,56,.09));color:#F2B8A8;font-size:12.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-family:inherit;}
.ef-btn i{color:var(--ember);}
.ef-btn:hover{filter:brightness(1.15);}
.ef-btn:disabled{opacity:.55;cursor:default;}
#ef-chip{margin-top:9px;border:1px dashed rgba(214,178,74,.4);border-radius:10px;padding:8px 12px;display:flex;align-items:center;gap:10px;font-size:12.3px;color:var(--ink-soft);background:rgba(214,178,74,.04);}
#ef-chip>i{color:var(--gold);font-size:15px;}
#ef-chip b{color:var(--ink);}
.ef-reflist{max-height:250px;overflow:auto;border:1px solid rgba(255,255,255,.09);border-radius:10px;margin:10px 0;}
.ef-refrow{display:flex;gap:10px;padding:8px 12px;font-size:12px;border-bottom:1px solid rgba(255,255,255,.05);align-items:baseline;}
.ef-refrow:last-child{border-bottom:none;}
.ef-refrow .k{color:var(--gold);font-family:ui-monospace,Menlo,monospace;font-size:11px;flex:none;width:150px;overflow:hidden;text-overflow:ellipsis;}
.ef-refrow .t{color:var(--ink-soft);flex:1;}
.ef-refrow .y{color:var(--ink-faint);flex:none;}


/* ══ EXCERPTS (v1577) ══════════════════════════════════════════════════════════════════════════
   The capture affordance follows the selection, and the confirmation lands under it. Both float
   above the modal (z 10050+) because the source viewer is itself a modal. */
.ex-pop{position:fixed;z-index:10060;background:rgba(12,14,18,.97);border:1px solid rgba(255,255,255,.16);
  border-radius:11px;padding:5px;box-shadow:0 16px 44px rgba(0,0,0,.6);backdrop-filter:blur(20px);animation:exIn .12s ease}
@keyframes exIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.ex-b{background:rgba(214,178,74,.92);border:0;color:#231b06;border-radius:8px;padding:7px 13px;font-size:12.5px;
  font-weight:650;cursor:pointer;font-family:inherit;display:flex;align-items:center;gap:6px}
.ex-b:hover{background:rgba(214,178,74,1)}
.ex-card{position:fixed;z-index:10060;width:320px;background:rgba(12,14,18,.98);border:1px solid rgba(214,178,74,.38);
  border-radius:13px;padding:13px;box-shadow:0 22px 60px rgba(0,0,0,.65);backdrop-filter:blur(22px);animation:exIn .14s ease}
.ex-h{font-size:12.5px;font-weight:650;color:var(--gold,#D6B24A);display:flex;align-items:center;gap:7px;margin-bottom:9px}
.ex-h .ex-loc{margin-left:auto;font-weight:500;color:var(--ink-faint);font-size:11.5px}
.ex-note{width:100%;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:8px;
  padding:8px 10px;font:13px/1.5 inherit;color:var(--ink);resize:vertical;outline:none}
.ex-note:focus{border-color:rgba(214,178,74,.5)}
.ex-acts{display:flex;gap:8px;justify-content:flex-end;margin-top:9px}
.ex-x{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);color:var(--ink);border-radius:8px;
  padding:5px 12px;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit}
.ex-x[data-a="done"]{background:rgba(214,178,74,.85);border-color:transparent;color:#231b06}
#ex-block{margin-top:16px;border-top:1px solid rgba(255,255,255,.08);padding-top:13px}
.ex-head{font-size:10.5px;letter-spacing:1.3px;text-transform:uppercase;color:var(--gold,#D6B24A);font-weight:700;
  display:flex;align-items:center;gap:7px;margin-bottom:10px}
.ex-empty{font-size:12.5px;color:var(--ink-faint);line-height:1.6;padding:2px 0 4px}
.ex-row{border-left:2px solid rgba(214,178,74,.42);padding:2px 0 10px 12px;margin-bottom:12px}
.ex-q{font:13.5px/1.65 Georgia,"Iowan Old Style",serif;color:var(--ink)}
.ex-n{font-size:12.5px;color:var(--ink-soft);margin-top:6px;font-style:italic}
.ex-m{display:flex;align-items:center;gap:12px;margin-top:7px}
.ex-m .ex-loc{font-size:11.5px;color:var(--gold,#D6B24A);font-weight:600}
.ex-lnk{background:none;border:0;color:var(--ink-faint);font-size:11.5px;cursor:pointer;padding:0;font-family:inherit}
.ex-lnk:hover{color:var(--ink)}
.ex-del:hover{color:var(--ember,#D24338)}
/* an excerpt living inside a page: a real reference, not pasted text (see exRefHTML) */
.ex-ref{display:block;border-left:2px solid rgba(214,178,74,.5);padding:3px 0 3px 13px;margin:12px 0;
  font:15px/1.75 Georgia,"Iowan Old Style",serif;color:var(--ink)}
.ex-ref .ex-cite{display:block;font:11.5px/1.5 -apple-system,sans-serif;color:var(--ink-faint);margin-top:5px;font-style:normal}
.ex-ref[data-stale="1"]{border-left-color:rgba(255,255,255,.18)}
.ex-ref[data-stale="1"] .ex-cite{color:rgba(255,255,255,.35)}

/* the excerpt → page picker: typed filter over every page, not a truncated menu */
#ex-pick-wrap{position:fixed;inset:0;z-index:10070;background:rgba(0,0,0,.42);display:flex;align-items:flex-start;justify-content:center;padding-top:14vh}
.ex-pick{width:min(520px,88vw);background:rgba(14,16,20,.98);border:1px solid rgba(255,255,255,.15);border-radius:14px;
  box-shadow:0 26px 70px rgba(0,0,0,.6);backdrop-filter:blur(24px);overflow:hidden}
.ex-pick-h{display:flex;align-items:center;gap:9px;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.08);color:var(--ink-faint)}
#ex-pick-q{flex:1;background:none;border:0;outline:none;color:var(--ink);font:14.5px inherit}
.ex-pick-l{max-height:52vh;overflow:auto;padding:6px}
.ex-pick-i{display:flex;align-items:center;gap:10px;padding:8px 11px;border-radius:9px;cursor:pointer;font-size:13.5px;color:var(--ink)}
.ex-pick-i.on{background:rgba(214,178,74,.16)}
.ex-pick-t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ex-pick-s{font-size:11.5px;color:var(--ink-faint);flex:none}
.ex-pick-e{padding:14px;color:var(--ink-faint);font-size:13px}

/* ── EXCERPT bulk actions (v1579): the header carries the verb, the rows carry the choice ── */
#ex-block .ex-head{display:flex;align-items:center;gap:8px}
.ex-all{margin-left:auto;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);
  color:var(--ink-soft);border-radius:8px;padding:4px 10px;font:inherit;font-size:11.5px;font-weight:600;
  cursor:pointer;letter-spacing:0;text-transform:none;transition:background .15s,color .15s}
.ex-all:hover{background:rgba(214,178,74,.16);border-color:rgba(214,178,74,.34);color:var(--gold,#D6B24A)}
.ex-row{position:relative;padding-left:26px}
.ex-sel{position:absolute;left:2px;top:3px;margin:0;accent-color:var(--gold,#D6B24A);opacity:0;transition:opacity .15s}
.ex-row:hover .ex-sel,.ex-sel:checked{opacity:1}
.ex-row.on{background:rgba(214,178,74,.055);border-radius:8px}

/* ── UNLINKED MENTIONS (v1581): the rail's suggest-then-approve furniture, one more section ── */
.ip-ub-m{padding:8px 0 9px;border-bottom:1px solid rgba(255,255,255,.05)}
.ip-ub-m:last-of-type{border-bottom:0}
.ip-ub-t{font-size:12.5px;font-weight:620;color:var(--ink);margin-bottom:4px}
.ip-ub-sp{font-size:10px;color:var(--ink-faint);font-weight:500;margin-left:7px;letter-spacing:.3px}
.ip-ub-snip{font:11.5px/1.55 Georgia,serif;color:var(--ink-soft);background:rgba(255,255,255,.035);border-radius:7px;padding:6px 8px;margin-bottom:6px;word-break:break-word}
.ip-ub-snip b{color:var(--gold,#D6B24A);font-weight:600;background:rgba(214,178,74,.14);border-radius:3px;padding:0 2px}
.ip-ub-link,.ip-ub-no,.ip-ub-all{border:0;border-radius:7px;font:inherit;font-size:11px;font-weight:650;padding:4px 10px;cursor:pointer}
.ip-ub-link{background:rgba(214,178,74,.88);color:#241b06}
.ip-ub-no{background:rgba(255,255,255,.07);color:var(--ink-soft);margin-left:6px}
.ip-ub-no:hover{background:rgba(255,255,255,.12);color:var(--ink)}
.ip-ub-all{display:block;width:100%;margin-top:9px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.13);color:var(--ink);padding:7px}
.ip-ub-all:hover{background:rgba(214,178,74,.15);border-color:rgba(214,178,74,.3)}
/* ===== Scene Packs — the More-scenes shelf in Settings (SPEC v2, T42) ===== */
.pack-head{display:flex;align-items:center;gap:10px;margin:2px 0 8px;}
.pack-head .pack-name{font-weight:600;font-size:13px;color:var(--ink);}
.pack-head .pack-meta{font-size:11px;color:var(--ink-faint);flex:1;}
.pack-head .pack-dlall{padding:4px 12px;font-size:12px;}
.pack-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:8px;}
.pack-tile{position:relative;border-radius:10px;overflow:hidden;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.04);aspect-ratio:16/9;}
.pack-tile .pt-thumb{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;}
.pack-tile .pt-strip{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:baseline;gap:6px;padding:14px 8px 6px;background:linear-gradient(transparent,rgba(10,11,13,.82));}
.pack-tile .pt-name{font-size:12px;font-weight:600;color:#E8E3DD;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 6px rgba(0,0,0,.6);}
.pack-tile .pt-size{font-size:10px;color:rgba(232,227,221,.72);}
.pack-tile .pt-dl{position:absolute;top:6px;right:6px;width:30px;height:30px;border-radius:50%;border:1px solid rgba(255,255,255,.22);background:rgba(15,16,19,.55);backdrop-filter:blur(6px);color:#E8E3DD;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:background .15s,border-color .15s;}
.pack-tile .pt-dl:hover{background:rgba(214,178,74,.28);border-color:rgba(214,178,74,.5);}
.pack-tile .pt-ring{position:absolute;top:6px;right:6px;width:30px;height:30px;border-radius:50%;background:conic-gradient(rgba(214,178,74,.95) calc(var(--p,0)*1%),rgba(255,255,255,.14) 0);display:flex;align-items:center;justify-content:center;}
.pack-tile .pt-ring::before{content:"";position:absolute;inset:3px;border-radius:50%;background:rgba(15,16,19,.82);}
.pack-tile .pt-ring span{position:relative;font-size:8px;font-weight:700;color:#E8E3DD;letter-spacing:.02em;}
.pack-owned{display:flex;align-items:center;gap:6px;margin-top:10px;font-size:11px;color:var(--ink-faint);}
.pack-owned a{color:var(--ink-faint);text-decoration:underline;cursor:pointer;}
.pack-owned a:hover{color:var(--ink);}
.pack-manage{margin-top:6px;border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:4px 10px;background:rgba(255,255,255,.03);}
.pm-row{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.05);}
.pm-row:last-child{border-bottom:0;}
.pm-row .pm-name{flex:1;font-size:12.5px;color:var(--ink);}
.pm-row .pm-bad{color:#d68f4a;font-style:normal;font-size:11px;}
.pm-row .pm-size{font-size:11px;color:var(--ink-faint);}
.pm-row .btn{padding:3px 10px;font-size:11.5px;}
/* Poster lightbox — full-frame scene preview before the download (packs) */
#packs-preview{position:fixed;inset:0;z-index:3000;background:rgba(8,9,11,.72);backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;}
#packs-preview .pp-card{max-width:min(1100px,86vw);width:min(1100px,86vw);border-radius:14px;overflow:hidden;border:1px solid rgba(255,255,255,.12);background:rgba(15,16,19,.92);box-shadow:0 30px 80px rgba(0,0,0,.5);}
#packs-preview .pp-stage{aspect-ratio:16/9;background:#0a0b0d;display:flex;align-items:center;justify-content:center;}
#packs-preview .pp-wait{font-size:12.5px;color:var(--ink-faint);}
#packs-preview .pp-img{width:100%;height:100%;object-fit:cover;display:block;}
#packs-preview .pp-strip{display:flex;align-items:center;gap:12px;padding:11px 14px;}
#packs-preview .pp-name{font-weight:600;font-size:14px;color:var(--ink);flex:1;}
#packs-preview .pp-size{font-size:11.5px;color:var(--ink-faint);}
#packs-preview .pp-dl{padding:6px 18px;}
#packs-preview .pp-x{width:28px;height:28px;border-radius:8px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.06);color:var(--ink);cursor:pointer;display:flex;align-items:center;justify-content:center;}
#packs-preview .pp-x:hover{background:rgba(255,255,255,.12);}
