/* ─────────────── tokens ─────────────── */
:root {
  --bg:           #0a0b10;
  --bg-2:         #0f1118;
  --surface:      #161924;
  --surface-2:    #1c2030;
  --surface-3:    #242a3d;
  --border:       #262b3c;
  --border-strong:#3a4159;
  --text:         #e7ecf3;
  --text-dim:     #9aa3b8;
  --text-mute:    #5d6678;

  --accent:       #a78bfa;
  --accent-2:     #06b6d4;
  --accent-warm:  #f59e0b;
  --accent-hot:   #ef4444;
  --accent-good:  #10b981;

  --grad-cool:    linear-gradient(135deg, #7c3aed 0%, #06b6d4 100%);
  --grad-warm:    linear-gradient(135deg, #f59e0b 0%, #ef4444 100%);
  --grad-bg:      radial-gradient(1200px 700px at 80% -10%, rgba(124,58,237,.18), transparent 60%),
                  radial-gradient(900px 600px at -10% 110%, rgba(6,182,212,.12), transparent 60%);

  /* Bundles speak pink — every bundle affordance (rim, chip, drop target,
     stack) uses it. It was referenced app-wide as var(--accent-pink) but never
     actually declared, so every one of those rules was silently dropped by the
     parser; this is the value the literal rgba(244,114,182,…) fallbacks around
     it were already written against. */
  --accent-pink:  #f472b6;

  --radius:       14px;
  --radius-sm:    8px;
  --shadow-card:  0 2px 4px rgba(0,0,0,.4), 0 10px 30px rgba(0,0,0,.35);
  --shadow-lift:  0 4px 8px rgba(0,0,0,.5), 0 24px 60px rgba(0,0,0,.55), 0 0 0 1px rgba(167,139,250,.25);
  /* The page gutter: .main's padding on every side, so a view's content
     starts this far from the window (or the sidebar). */
  --page-gutter:  22px;

  /* The edge tab — the one control that hangs off the window's edge: the
     filter shelf's tab on the LEFT edge (media/sidebar-kit.css). Square where
     it meets its edge, rounded where it stands out, an ember seam along the
     edge it comes out of, quiet until it is wanted. --edge-tab-depth is how
     far it stands out, --edge-tab-span its length along the edge; hover pulls
     it --edge-tab-pull further out. (The top bar's fold and the sources pull
     were edge tabs too until 2026-10-03; both are dock controls now.) */
  --edge-tab-depth:   22px;
  --edge-tab-span:    56px;
  --edge-tab-pull:    4px;
  --edge-tab-radius:  12px;
  --edge-tab-fill:    color-mix(in srgb, var(--surface) 70%, var(--bg));
  --edge-tab-fill-hi: var(--surface-2);
  --edge-tab-line:    color-mix(in srgb, var(--accent-warm) 30%, var(--border));
  --edge-tab-line-hi: color-mix(in srgb, var(--accent-warm) 62%, var(--border));
  --edge-tab-seam:    color-mix(in srgb, var(--accent-warm) 85%, transparent);
  --edge-tab-glow:    color-mix(in srgb, var(--accent-warm) 20%, transparent);
  --edge-tab-ink:     color-mix(in srgb, var(--accent-warm) 82%, var(--text));
  --edge-tab-shadow:  rgba(0, 0, 0, .72);
  --edge-tab-ease:    cubic-bezier(.16, 1, .3, 1);
}

* { box-sizing: border-box; }
/* Give the ROOT the app background too, not just <body>. In a macOS "Add to Dock"
   standalone window the title-bar strip (and any area the body box doesn't cover)
   falls back to the root/window background — with <html> transparent that renders as
   a black band above the topbar ("large black gap"). Painting the root --bg makes the
   whole window, title bar included, match the app. Harmless in Electron (frameless). */
html, body { margin: 0; padding: 0; height: 100%; background: var(--bg); }

body {
  font: 14px/1.5 -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', system-ui, sans-serif;
  background: var(--bg);
  color: var(--text);
  overflow: hidden;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

.bg-glow {
  position: fixed; inset: 0;
  background: var(--grad-bg);
  pointer-events: none;
  z-index: 0;
}

/* ─────────────── topbar ─────────────── */
.topbar {
  position: relative;
  z-index: 10;
  display: flex; align-items: center; gap: 16px;
  padding: 14px 22px;
  background: rgba(10,11,16,.7);
  backdrop-filter: blur(20px) saturate(160%);
  -webkit-backdrop-filter: blur(20px) saturate(160%);
  border-bottom: 1px solid var(--border);
  /* Window is frameless — let the user drag from anywhere on the topbar */
  -webkit-app-region: drag;
}
.topbar input,
.topbar button,
.topbar select,
.topbar kbd { -webkit-app-region: no-drag; }

/* Custom window controls (frameless window has no OS title bar) */
.window-controls {
  display: flex;
  align-items: center;
  gap: 2px;
  margin-left: 8px;
  padding-left: 10px;
  border-left: 1px solid var(--border);
  -webkit-app-region: no-drag;
  /* Never the thing that gives way. The topbar is one flex row; when the
     window narrows, the search box (flex: 1, min-width: 0 below) shrinks
     first and the logo second, so the – □ ✕ cluster keeps its full width
     instead of being squeezed and pushed off the window's right edge. */
  flex: 0 0 auto;
}
.winbtn {
  width: 30px; height: 30px;
  flex: 0 0 auto;
  display: flex; align-items: center; justify-content: center;
  background: transparent;
  border: 0;
  color: var(--text-mute);
  cursor: pointer;
  border-radius: 8px;
  transition: background .12s, color .12s;
}
.winbtn:hover { background: var(--surface-2); color: var(--text); }
.winbtn.close:hover { background: #ef4444; color: white; }
/* Logo wrapper is draggable like the rest of the topbar — user wants
   to grab the window from this corner. The icon itself (logo-mark)
   stays no-drag so its middle-click → minimize handler still fires. */
/* Sized to what it holds (mark, wordmark, the signed-in chip): a fixed 220px
   reserve here left dead space before the search whenever the name was short. */
.logo { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; min-width: min-content; white-space: nowrap; -webkit-app-region: drag; }
.logo .logo-mark { -webkit-app-region: no-drag; pointer-events: auto; }
.logo .logo-text { pointer-events: auto; }
.logo-mark {
  width: 28px; height: 28px;
  object-fit: contain;
  filter: drop-shadow(0 0 12px rgba(245, 158, 11, .35));
}
.logo-text { font-weight: 700; letter-spacing: .3px; font-size: 16px; }

.search {
  flex: 1; display: flex; align-items: center; gap: 8px;
  /* A flex item's default min-width is its content's intrinsic width, and an
     <input> reports ~20 characters of it — so below ~1000px the search box
     refused to shrink and the window controls overflowed instead. Hence 0...
     but 0 let it crush to a ~40px stub with nothing in it, because .topbar-
     actions never shrinks and the search is the only thing that can. Keep a
     floor so it stays a search box; the narrow-window rule below lowers it
     again for the widths where there genuinely is not room. */
  min-width: 132px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 8px 12px;
  max-width: 720px;
  transition: border-color .15s, background .15s;
}
.search:focus-within {
  border-color: var(--accent);
  background: var(--surface-2);
  box-shadow: 0 0 0 3px rgba(167,139,250,.15);
}
/* The magnifier must survive the squeeze. As a plain flex child it shrank
   away with everything else, which is what turned the crushed box into an
   empty pill that reads as broken rather than as a search. */
.search > svg { flex: none; }
.search svg { color: var(--text-mute); }
.search input {
  flex: 1; min-width: 0; background: none; border: 0; outline: none;
  color: var(--text); font-size: 14px;
}
.search input::placeholder { color: var(--text-mute); }
.search kbd {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px; padding: 2px 6px;
  background: var(--surface-3); border: 1px solid var(--border);
  border-radius: 4px; color: var(--text-dim);
}

.topbar-actions { display: flex; align-items: center; gap: 10px; margin-left: auto; flex: 0 0 auto; }
/* Narrow windows: tighten the topbar's own gutters before anything of the
   user's has to give — the window-control cluster stays at full size. */
/* Give the width up in the order it is least missed: the keyboard hint first,
   then the wordmark (the flame still says which app this is), and only then
   the search box itself. Before this the search paid for all of it alone. */
@media (max-width: 1300px) {
  .search kbd { display: none; }
}
@media (max-width: 1200px) {
  .logo-text { display: none; }
}
@media (max-width: 1100px) {
  .topbar { gap: 10px; padding-left: 14px; padding-right: 14px; }
  .topbar-actions { gap: 6px; }
  .search { min-width: 96px; }
}
/* Below 1000px the wordmark goes before the search box does: the window
   controls and every action button stay; the mark alone still says Hearth. */
@media (max-width: 1000px) {
  .logo .logo-text { display: none; }
}

.btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 8px 14px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text);
  font: inherit; font-weight: 500;
  cursor: pointer;
  transition: background .15s, border-color .15s, transform .05s;
}
.btn:hover { background: var(--surface-3); border-color: var(--border-strong); }
.btn:active { transform: translateY(1px); }
/* Keyboard focus ring — every button gets a clear, consistent indicator; mouse
   clicks stay ring-free (:focus-visible). Specific buttons (icon-pill, …) keep
   their own tailored focus styles via higher specificity. */
.btn:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.btn.primary {
  background: var(--grad-cool);
  border: 0;
  color: white;
  font-weight: 600;
  box-shadow: 0 8px 28px rgba(124,58,237,.4);
}
.btn.primary:hover { filter: brightness(1.1); }
.btn.big { padding: 12px 22px; font-size: 15px; }
.btn.small { padding: 5px 10px; font-size: 12px; }
.btn.danger-ghost { color: var(--accent-hot); }
.btn.danger-ghost:hover { background: rgba(239,68,68,.1); border-color: rgba(239,68,68,.5); }

/* ─── topbar primary CTA: refined gradient pill, matches icon-pill height ─── */
.topbar-actions .btn.primary {
  position: relative;
  height: 30px;
  padding: 0 11px;
  gap: 5px;
  border-radius: 15px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .15px;
  /* Subtle pannable gradient — same purple→cyan story, but tighter */
  background: linear-gradient(120deg, #7c3aed 0%, #8b5cf6 45%, #06b6d4 100%);
  background-size: 160% 100%;
  background-position: 0% 50%;
  box-shadow:
    0 2px 8px rgba(124,58,237,.3),
    inset 0 1px 0 rgba(255,255,255,.18);
  isolation: isolate;
  transition:
    background-position .55s cubic-bezier(.4,0,.2,1),
    box-shadow .22s ease,
    transform .08s ease,
    filter .15s ease;
}
/* Soft inner top highlight for a glass-like depth */
.topbar-actions .btn.primary::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(180deg, rgba(255,255,255,.22), rgba(255,255,255,0) 60%);
  pointer-events: none;
  z-index: 0;
}
.topbar-actions .btn.primary > * { position: relative; z-index: 1; }
.topbar-actions .btn.primary:hover {
  background-position: 100% 50%;
  filter: brightness(1.05);
  box-shadow:
    0 4px 16px rgba(124,58,237,.5),
    0 0 0 1px rgba(167,139,250,.45),
    inset 0 1px 0 rgba(255,255,255,.24);
}
.topbar-actions .btn.primary:active {
  transform: translateY(1px);
  box-shadow:
    0 2px 6px rgba(124,58,237,.35),
    inset 0 1px 0 rgba(255,255,255,.15);
}
.topbar-actions .btn.primary > svg {
  transition: transform .3s cubic-bezier(.4,0,.2,1);
}
.topbar-actions .btn.primary:hover > svg {
  transform: rotate(90deg);
}

/* ─── grouped secondary actions: a single glassy pill with internal dividers ─── */
.action-group {
  display: inline-flex;
  align-items: center;
  background: rgba(255,255,255,.025);
  border: 1px solid var(--border);
  border-radius: 20px;
  padding: 2px;
  backdrop-filter: blur(10px);
  -webkit-app-region: no-drag;
}
.action-group .icon-pill { border: 0; background: transparent; }
.action-group .icon-pill:hover {
  background: var(--surface-3);
  border-color: transparent;
}

/* ─── icon-pill: collapsed icon, expands to reveal label on hover/focus ─── */
/* No overflow:hidden here — the label self-clips, and we need the activity
   badge to be allowed to poke outside the button's rounded edge. */
.btn.icon-pill {
  position: relative;
  height: 32px;
  min-width: 32px;
  padding: 0 8px;
  gap: 0;
  border-radius: 16px;
  color: var(--text-dim);
  transition: background .18s, border-color .18s, color .18s, transform .05s;
}
.btn.icon-pill:hover,
.btn.icon-pill:focus-visible { color: var(--text); }
.btn.icon-pill > svg {
  flex: 0 0 auto;
  transition: transform .25s cubic-bezier(.4,0,.2,1);
}
.btn.icon-pill:hover > svg { transform: scale(1.06); }
.btn.icon-pill .label {
  display: inline-block;
  max-width: 0;
  opacity: 0;
  white-space: nowrap;
  overflow: hidden;
  font-size: 13px;
  font-weight: 500;
  transition: max-width .28s cubic-bezier(.4,0,.2,1),
              opacity .18s ease,
              margin-left .28s cubic-bezier(.4,0,.2,1);
}
.btn.icon-pill:hover .label,
.btn.icon-pill:focus-visible .label {
  max-width: 180px;
  opacity: 1;
  margin-left: 8px;
}
/* Standalone icon-pill (outside .action-group) keeps a subtle border */
.topbar-actions > .btn.icon-pill {
  background: rgba(255,255,255,.025);
  border: 1px solid var(--border);
  backdrop-filter: blur(10px);
}
.topbar-actions > .btn.icon-pill:hover {
  background: var(--surface-3);
  border-color: var(--border-strong);
}

/* ─── Moonlight topbar toggle ───
   Lit while Play routes to the native client, with the label pinned open: an
   icon-only pill has to read as ON without needing a hover to find out. */
.topbar-actions > .btn.icon-pill[aria-pressed="true"] {
  color: var(--accent);
  background: rgba(167,139,250,.18);
  border-color: rgba(167,139,250,.5);
}
.topbar-actions > .btn.icon-pill[aria-pressed="true"]:hover {
  background: rgba(167,139,250,.26);
  border-color: rgba(167,139,250,.68);
}
.btn.icon-pill[aria-pressed="true"] .label {
  max-width: 180px;
  opacity: 1;
  margin-left: 8px;
}
/* ─── Play-mode segmented control ───
   Play has three destinations now — the native Moonlight client, the browser
   stream, or this very tab (h-flashplay / h-htmlplay) — so the two-state pill
   above could no longer express the choice. A real radiogroup: arrow keys move
   between segments and only the checked one sits in the tab order, which is
   what a radiogroup is supposed to do and what a row of buttons would get
   wrong. Geometry matches the 32px icon-pill beside it. */
.play-mode-seg {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  height: 32px;
  padding: 2px;
  border-radius: 16px;
  background: rgba(255,255,255,.025);
  border: 1px solid var(--border);
  backdrop-filter: blur(10px);
}
.play-mode-seg .pm-seg {
  appearance: none;
  height: 26px;
  padding: 0 10px;
  border: 0;
  border-radius: 13px;
  background: transparent;
  color: var(--text-dim);
  font: inherit;
  font-size: 12px;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  transition: background .18s, color .18s;
}
.play-mode-seg .pm-seg:hover { color: var(--text); background: var(--surface-3); }
.play-mode-seg .pm-seg:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.play-mode-seg .pm-seg[aria-checked="true"] {
  color: var(--accent);
  background: rgba(167,139,250,.18);
  box-shadow: inset 0 0 0 1px rgba(167,139,250,.5);
}
.play-mode-seg .pm-seg[aria-checked="true"]:hover { background: rgba(167,139,250,.26); }
/* The same specificity trap the old #btn-moonlight-toggle rule documented:
   `.hidden` (0,1,0) loses to a `.web-only` descendant rule, so hide by id. */
#play-mode-seg .pm-seg.hidden { display: none !important; }
/* Reviewed on a phone — 44px targets wherever the pointer is coarse. */
@media (pointer: coarse) {
  .play-mode-seg { height: 44px; border-radius: 22px; padding: 3px; }
  .play-mode-seg .pm-seg { height: 38px; border-radius: 19px; padding: 0 14px; font-size: 13px; }
}
@media (prefers-reduced-motion: reduce) {
  .play-mode-seg .pm-seg { transition: none; }
}

/* ─────────────── view tabs ─────────────── */
/* The tab row (2026-10-11, Rober: "can we spruce up that bar and its buttons / interactivity?").
   Firelight, in the painted icons' own brass and ember: the bar is lit from below by a brass
   hairline, a hovered tab gets a warm pool of light and a faint line growing from its centre,
   and the open tab sits on an ember line that GLIDES from the last tab to the new one (its
   leading edge first, the trailing edge catching up) with a glow above it. The glide and the
   arrow keys are renderer/view-tabs.js; without it the open tab keeps a still ember line
   (.view-tabs:not(.vt-live)). Height is unchanged: layouts below assume ~41px. */
.view-tabs {
  display: flex;
  gap: 2px;
  padding: 0 18px;
  background: linear-gradient(180deg, rgba(16,15,20,.66) 0%, rgba(10,11,16,.62) 100%);
  border-bottom: 1px solid var(--border);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.025);
  -webkit-app-region: no-drag;
  position: relative;
  z-index: 2;
}
/* The brass hairline, brightest under the middle of the row, over the plain border. */
.view-tabs::before {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: -1px;
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, rgba(242,165,65,.16) 22%, rgba(242,165,65,.26) 50%, rgba(242,165,65,.16) 78%, transparent 100%);
  pointer-events: none;
}
.view-tab {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 10px 16px 11px;
  background: transparent;
  border: 0;
  border-radius: 10px 10px 0 0;
  color: var(--text-mute);
  font: inherit;
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: .2px;
  white-space: nowrap;
  cursor: pointer;
  isolation: isolate;
  transition: color .18s;
}
/* Hover light: a warm pool rising from the bottom edge of the tab. */
.view-tab::before {
  content: "";
  position: absolute;
  inset: 2px 2px 0;
  z-index: -1;
  border-radius: 10px 10px 0 0;
  background: radial-gradient(120% 90% at 50% 100%, rgba(242,165,65,.13) 0%, rgba(242,165,65,.04) 55%, transparent 80%);
  opacity: 0;
  transition: opacity .22s;
  pointer-events: none;
}
/* Hover line: grows from the centre; the open tab has the gliding ember line instead. */
.view-tab::after {
  content: "";
  position: absolute;
  left: 14px; right: 14px; bottom: -1px;
  height: 2px;
  border-radius: 2px 2px 0 0;
  background: rgba(242,165,65,.38);
  transform: scaleX(0);
  transition: transform .26s cubic-bezier(.2,.8,.2,1);
  pointer-events: none;
}
.view-tab:hover { color: var(--text-dim); }
.view-tab:hover::before { opacity: 1; }
.view-tab:not(.active):hover::after { transform: scaleX(1); }
.view-tab.active { color: var(--text); text-shadow: 0 0 14px rgba(255,170,90,.18); }
.view-tab.active::before {
  opacity: 1;
  background: radial-gradient(110% 100% at 50% 100%, rgba(245,140,50,.2) 0%, rgba(242,165,65,.07) 50%, transparent 78%),
              linear-gradient(180deg, transparent 40%, rgba(242,165,65,.05) 100%);
}
/* Without view-tabs.js, the open tab keeps a still line. */
.view-tabs:not(.vt-live) .view-tab.active::after {
  transform: none;
  background: linear-gradient(90deg, #f59e0b, #f2a541 50%, #ef7b3a);
}
.view-tab:focus-visible { outline: none; }
.view-tab:focus-visible::before { opacity: 1; inset: 4px 3px 3px; border-radius: 9px; box-shadow: inset 0 0 0 2px rgba(242,165,65,.75); }
/* The gliding ember line under the open tab, with its glow. Placed by view-tabs.js through
   left/right, each with its own timing, so the line stretches toward the new tab. */
.view-tabs-ember {
  position: absolute;
  bottom: -1px;
  left: var(--vt-l, 0px);
  right: var(--vt-r, 100%);
  height: 2px;
  border-radius: 2px 2px 0 0;
  background: linear-gradient(90deg, #f59e0b, #f2a541 50%, #ef7b3a);
  box-shadow: 0 0 10px rgba(245,158,11,.55), 0 0 2px rgba(255,200,120,.8);
  pointer-events: none;
  z-index: 1;
  transition: left .42s cubic-bezier(.3,1.25,.45,1), right .42s cubic-bezier(.3,1.25,.45,1), opacity .2s;
}
.view-tabs-ember.to-right { transition: left .44s cubic-bezier(.3,1.2,.45,1) .05s, right .3s cubic-bezier(.3,1.25,.45,1), opacity .2s; }
.view-tabs-ember.to-left  { transition: left .3s cubic-bezier(.3,1.25,.45,1), right .44s cubic-bezier(.3,1.2,.45,1) .05s, opacity .2s; }
.view-tabs-ember.is-still { transition: none; }
.view-tabs-ember.is-gone { opacity: 0; }
/* Firelight above the line. */
.view-tabs-ember::before {
  content: "";
  position: absolute;
  left: -6px; right: -6px; bottom: 0;
  height: 22px;
  background: radial-gradient(60% 100% at 50% 100%, rgba(245,140,50,.2) 0%, transparent 75%);
  pointer-events: none;
}
/* A tab just opened: its icon flares once. */
.view-tab.vt-flare .view-tab-ico { animation: vt-flare .5s cubic-bezier(.2,.8,.2,1); }
@keyframes vt-flare {
  0%   { transform: scale(.88); filter: brightness(1.5) drop-shadow(0 0 10px rgba(255,160,70,.8)); }
  55%  { transform: scale(1.16); }
  100% { transform: scale(1.08); filter: drop-shadow(0 0 6px rgba(255,140,60,.35)); }
}
/* A press gives: the icon squeezes while the button is down. */
.view-tab:active .view-tab-ico { transform: scale(.9) !important; transition-duration: .08s; }
html.hearth-boot .view-tabs-ember { animation: vt-ember-in .5s ease .55s both; }
@keyframes vt-ember-in { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .view-tab, .view-tab::before, .view-tab::after, .view-tabs-ember { transition: none !important; }
  .view-tab.vt-flare .view-tab-ico, html.hearth-boot .view-tabs-ember { animation: none; }
}
.view-tab-count {
  font-size: 10.5px;
  font-weight: 600;
  color: var(--text-mute);
  margin-left: 2px;
}
.view-tab.active .view-tab-count { color: var(--accent); }
/* An empty count is no count: as a flex item it still took the tab's 6px gap plus its margin,
   so a tab with nothing to count (Torrents, most of the time) sat further from its neighbour
   (Rober, 2026-10-11: "why does the gap feel larger between torrents and hearthstream"). */
.view-tab-count:empty { display: none; }
/* Send-to badge (renderer/app.js paintTabBadges): the tab a queued rip or grab
   will land on carries the news. Ember + breathing while it is in flight,
   green once it lands (cleared by opening the tab), red on a failure — which
   stays put, because a badge that erases itself is a failure nobody saw.
   Absolutely placed so a job starting never shifts the tab row, and ringed in
   the bar's own background the way the topbar badges are, so it reads as a
   badge sitting over the corner rather than as part of the label. */
.view-tab-badge {
  position: absolute;
  top: 1px; right: 2px;
  display: none;
  align-items: center; justify-content: center;
  min-width: 14px; height: 14px;
  padding: 0 4px;
  border-radius: 7px;
  color: #fff;
  font-size: 9px; font-weight: 700; line-height: 1;
  letter-spacing: 0;
  background: var(--grad-warm);
  box-shadow: 0 1px 5px rgba(245,158,11,.4), 0 0 0 2px var(--bg);
  pointer-events: none;
  z-index: 3;
}
.view-tab-badge.is-working,
.view-tab-badge.is-new,
.view-tab-badge.is-error { display: inline-flex; }
.view-tab-badge.is-working { animation: tab-badge-breathe 1.9s ease-in-out infinite; }
.view-tab-badge.is-new {
  background: linear-gradient(135deg, var(--accent-good) 0%, var(--accent-2) 100%);
  box-shadow: 0 1px 5px rgba(16,185,129,.45), 0 0 0 2px var(--bg);
}
.view-tab-badge.is-error {
  background: var(--accent-hot);
  box-shadow: 0 1px 5px rgba(239,68,68,.5), 0 0 0 2px var(--bg);
}
@keyframes tab-badge-breathe {
  0%, 100% { transform: scale(1);    box-shadow: 0 1px 5px rgba(245,158,11,.35), 0 0 0 2px var(--bg); }
  50%      { transform: scale(1.14); box-shadow: 0 1px 9px rgba(245,158,11,.75), 0 0 0 2px var(--bg); }
}
@media (prefers-reduced-motion: reduce) {
  .view-tab-badge.is-working { animation: none; }
}
/* Painted tab icons (renderer/icons/tabs/, same brass-and-ember set as the
   top bar): muted at rest, full colour on hover and on the active tab. */
.view-tab-ico {
  width: 20px; height: 20px; flex: none; object-fit: contain;
  filter: grayscale(.2) brightness(.92); opacity: .92;
  transition: filter .18s, opacity .18s, transform .25s cubic-bezier(.2,.7,.2,1);
  pointer-events: none; user-select: none;
}
.view-tab:hover .view-tab-ico { filter: none; opacity: 1; transform: translateY(-1px); }
.view-tab.active .view-tab-ico { filter: drop-shadow(0 0 6px rgba(255,140,60,.35)); opacity: 1; transform: scale(1.08); }
@media (prefers-reduced-motion: reduce) { .view-tab-ico { transition: none; transform: none !important; } }

/* ─────────────── layout ─────────────── */
.layout {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: 240px 1fr;
  height: calc(100vh - 60px - 41px - var(--np-h, 0px)); /* topbar (60) + view-tabs (~41) */
}

.sidebar {
  overflow-y: auto;
  padding: 18px 14px;
  border-right: 1px solid var(--border);
  background: rgba(10,11,16,.45);
  backdrop-filter: blur(20px);
}
.sidebar section { margin-bottom: 22px; }
.sidebar h3 {
  margin: 0 0 8px;
  font-size: 11px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--text-mute);
  font-weight: 600;
}
.sidebar select {
  width: 100%;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 6px 8px;
  color: var(--text);
  font: inherit;
}
.toggle {
  display: flex; align-items: center; gap: 8px;
  padding: 4px 0;
  font-size: 13px; color: var(--text-dim);
  cursor: pointer;
}
.toggle input { accent-color: var(--accent); }

/* "Show" chip-style toggles — pill that lights up with an accent gradient when active */
.show-toggles { display: flex; flex-direction: column; gap: 6px; }
.show-chip {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 12px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  cursor: pointer;
  user-select: none;
  font-size: 13px;
  color: var(--text-dim);
  position: relative;
  overflow: hidden;
  transition: background .15s, border-color .15s, color .15s, transform .05s, box-shadow .15s;
}
.show-chip input { display: none; }
.show-chip .show-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px;
  border-radius: 6px;
  background: rgba(255,255,255,.04);
  color: var(--text-mute);
  flex: 0 0 auto;
  transition: background .15s, color .15s, transform .15s;
}
.show-chip:hover {
  background: var(--surface-2);
  border-color: var(--border-strong);
  color: var(--text);
}
.show-chip:hover .show-icon { color: var(--text-dim); transform: scale(1.06); }
.show-chip:active { transform: translateY(1px); }

/* Active state — light up with the brand gradient + soft glow */
.show-chip:has(input:checked) {
  background: linear-gradient(135deg, rgba(124,58,237,.22), rgba(6,182,212,.12));
  border-color: rgba(167,139,250,.55);
  color: #ece4ff;
  box-shadow: 0 0 0 1px rgba(167,139,250,.18), 0 6px 22px rgba(124,58,237,.25);
}
.show-chip:has(input:checked) .show-icon {
  background: linear-gradient(135deg, #7c3aed, #06b6d4);
  color: #fff;
}

/* Per-chip tinting so each filter feels distinct when active */
.show-chip[for="show-favorites"]:has(input:checked) {
  background: linear-gradient(135deg, rgba(251,191,36,.22), rgba(245,158,11,.12));
  border-color: rgba(251,191,36,.55);
  color: #fde68a;
  box-shadow: 0 0 0 1px rgba(251,191,36,.2), 0 6px 22px rgba(251,191,36,.22);
}
.show-chip[for="show-favorites"]:has(input:checked) .show-icon {
  background: linear-gradient(135deg, #fbbf24, #f59e0b);
}
.show-chip[for="show-outdated"]:has(input:checked) {
  background: linear-gradient(135deg, rgba(245,158,11,.22), rgba(239,68,68,.14));
  border-color: rgba(239,68,68,.5);
  color: #fde0d2;
  box-shadow: 0 0 0 1px rgba(239,68,68,.2), 0 6px 22px rgba(239,68,68,.22);
}
.show-chip[for="show-outdated"]:has(input:checked) .show-icon {
  background: linear-gradient(135deg, #f59e0b, #ef4444);
}
.show-chip[for="show-hidden"]:has(input:checked) {
  background: linear-gradient(135deg, rgba(120,130,160,.22), rgba(70,80,110,.18));
  border-color: rgba(150,160,200,.5);
  color: #d8def0;
}
.show-chip[for="show-hidden"]:has(input:checked) .show-icon {
  background: linear-gradient(135deg, #6b7280, #4b5563);
}

.chip-list { display: flex; flex-wrap: wrap; gap: 6px; }
.chip {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 4px 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 999px;
  font-size: 12px;
  color: var(--text-dim);
  cursor: pointer;
  user-select: none;
  transition: all .12s;
}
.chip:hover { background: var(--surface-2); color: var(--text); }
.chip.active {
  background: rgba(167,139,250,.18);
  border-color: rgba(167,139,250,.5);
  color: #d6c9ff;
}
.chip .count { color: var(--text-mute); font-variant-numeric: tabular-nums; }
.chip.active .count { color: rgba(214,201,255,.7); }

.root-display code {
  display: block;
  font-size: 11px;
  color: var(--text-dim);
  background: var(--bg-2);
  padding: 6px 8px;
  border-radius: 4px;
  word-break: break-all;
  margin-bottom: 8px;
}

/* ─────────────── status ─────────────── */
.status {
  margin: 0 0 18px;
  padding: 12px 16px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  font-size: 13px; color: var(--text-dim);
  display: flex; align-items: center; gap: 12px;
  position: sticky;
  top: -22px;
  z-index: 5;
  backdrop-filter: blur(12px);
  background: rgba(22,25,36,.92);
  box-shadow: 0 4px 18px rgba(0,0,0,.3);
}
.status .bar {
  flex: 1; height: 4px; background: var(--surface-3); border-radius: 2px; overflow: hidden;
}
.status .bar > i {
  display: block; height: 100%;
  background: var(--grad-cool);
  width: 0%; transition: width .2s;
}
.hidden { display: none !important; }

/* ─────────────── grid ─────────────── */
.main { overflow-y: auto; padding: var(--page-gutter); }
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 18px;
}

/* ─────────────── add-to-collection modal ───────────────
   One list of every shelf with its membership, so filing a game into three of
   them is three clicks in one place instead of three trips through the
   context menu. Scrolls rather than growing, because the whole point is that
   the number of collections is allowed to get large. */
.collections-panel { width: min(440px, 92vw); }
.collections-panel h2 { margin: 0 0 2px; }
.collections-panel .muted { margin: 0 0 14px; font-size: 13px; }
.cm-list {
  display: flex; flex-direction: column; gap: 2px;
  max-height: min(48vh, 420px); overflow-y: auto;
  margin-bottom: 14px;
}
/* `.modal-panel label` (further down this file) stacks every label in a modal
   into a column for form fields; a membership row is an inline checkbox row,
   so it has to out-specify that the same way .ai-check-toggle does. */
.modal-panel label.cm-row {
  display: flex; flex-direction: row; align-items: center; gap: 10px;
  margin-bottom: 0;
  padding: 9px 10px; border-radius: 8px;
  cursor: pointer; user-select: none;
  border: 1px solid transparent;
  font-size: 14px; color: var(--text);
}
.modal-panel label.cm-row:hover { background: var(--surface-2); border-color: var(--border); }
.modal-panel label.cm-row input { accent-color: var(--accent); width: 16px; height: 16px; cursor: pointer; flex: none; }
.modal-panel label.cm-row:focus-within { border-color: var(--accent); }
.cm-name { flex: 1 1 auto; min-width: 0; font-size: 14px; font-weight: 600;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cm-count {
  flex: none; font-size: 11px; font-variant-numeric: tabular-nums;
  color: var(--text-mute); padding: 2px 7px; border-radius: 999px;
  background: rgba(255,255,255,.05);
}
.cm-new { display: flex; gap: 8px; }
.cm-new input {
  flex: 1 1 auto; min-width: 0;
  padding: 9px 11px; font: inherit; font-size: 14px;
  color: var(--text); background: var(--surface);
  border: 1px solid var(--border); border-radius: 8px;
}
.cm-new input:focus { outline: none; border-color: var(--accent); background: var(--bg-2); }
.cm-new .btn { flex: none; }

/* ─────────────── collection strips ───────────────
   A collection lives INSIDE .grid, spanning every column, so its tiles are
   wired by the same post-render pass as the grid's own (renderer/app.js:
   collectionStripsHtml).

   The rule that defines the feature is .cs-row's auto-fill track: the cards
   SIZE THEMSELVES to the row, so a whole series is visible at once and there
   is never anything to scroll to sideways. It was originally one nowrap line
   that scrolled; with 36 episodes that showed five cards and hid the other
   thirty-one behind a scrollbar nobody thinks to drag, which is the opposite
   of what a series shelf is for. A short collection still comes out as one
   line — that is what auto-fill does when the items fit. */
.collection-strip {
  grid-column: 1 / -1;
  /* Own stacking context, so a hover-zoomed card lifts over its neighbours —
     and over the strip below it, which would otherwise paint on top. */
  position: relative; z-index: 1;
  min-width: 0;          /* a grid child must be allowed to shrink, or the
                            row's overflow widens the whole page instead */
}
.cs-head {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 3px; padding-bottom: 4px;
  border-bottom: 1px solid var(--border);
}
.cs-toggle,
.cs-del {
  display: grid; place-items: center;
  width: 24px; height: 24px; padding: 0;
  background: none; border: 0; border-radius: 6px;
  cursor: pointer;
  transition: transform .18s cubic-bezier(.2,.7,.3,1), color .18s, background .18s, opacity .18s;
}
.cs-toggle { color: var(--text-dim); }
.cs-toggle:hover { color: var(--text); background: rgba(255,255,255,.06); }
.collection-strip.collapsed .cs-toggle { transform: rotate(-90deg); }
.cs-title {
  /* Fit the name, never a fixed input width that clips it (see titleFieldSize). */
  field-sizing: content;
  flex: 0 1 auto; min-width: 3ch; max-width: 60%;
  text-overflow: ellipsis;
  font: 600 14px/1.2 inherit;
  color: var(--text);
  background: transparent;
  border: 1px solid transparent; border-radius: 6px;
  padding: 4px 6px;
}
.cs-title:hover { border-color: var(--border); }
.cs-title:focus { outline: none; border-color: var(--accent); background: var(--bg-2); }
.cs-count {
  font-size: 11px; font-variant-numeric: tabular-nums;
  color: var(--text-mute);
  padding: 2px 7px; border-radius: 999px;
  background: rgba(255,255,255,.05);
}
/* Destructive, and one click from the games it holds — so it stays out of the
   way until the pointer is actually on this strip. */
.collection-strip:hover { z-index: 5; }
/* Card-size slider. Rides with .cs-del's pattern — out of the way until the
   pointer is on this strip — because it is a per-shelf preference, not
   something to read on every row. Revealed on keyboard focus and always
   present on touch, where there is no hover to reveal it with. */
.cs-scale {
  -webkit-appearance: none; appearance: none;
  width: 88px; height: 4px; margin-left: 8px;
  background: var(--border-strong); border-radius: 999px;
  cursor: pointer; opacity: 0; transition: opacity .18s;
}
.collection-strip:hover .cs-scale,
.cs-scale:focus-visible { opacity: 1; }
.cs-scale:focus-visible { outline: 2px solid var(--accent); outline-offset: 4px; }
.cs-scale::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 13px; height: 13px; border-radius: 50%;
  background: var(--accent); border: 0; cursor: pointer;
  box-shadow: 0 1px 5px rgba(0,0,0,.55);
}
.cs-scale::-moz-range-thumb {
  width: 13px; height: 13px; border-radius: 50%;
  background: var(--accent); border: 0; cursor: pointer;
}
@media (pointer: coarse) { .cs-scale { opacity: 1; } }

.cs-del { margin-left: auto; color: var(--text-mute); opacity: 0; }
.collection-strip:hover .cs-del,
.cs-del:focus-visible { opacity: 1; }
.cs-del:hover { color: var(--accent-hot); background: rgba(239,68,68,.12); }

.cs-row {
  display: grid;
  /* auto-fill, not auto-fit: empty tracks are kept, so the cards on a short
     last row stay the same size as every other card instead of stretching. */
  /* --cs-card is measured per strip by sizeCollectionStrips() so the shelf is
     at most two rows wide; 132px is only the pre-measurement fallback.
     A FIXED track, not minmax(...,1fr): with 1fr the tracks stretch to fill
     the row, so a four-game shelf drew cards half again bigger than a
     thirty-six-game one and the shelves stopped looking like one thing. The
     trailing gap on a short row is the price, and it is the right one. */
  grid-template-columns: repeat(auto-fill, var(--cs-card, 132px));
  gap: 10px;
  /* Vertical room for .tile:hover's translateY(-4px) lift. */
  padding: 6px 0 10px;
}
.cs-row > .tile { min-width: 0; }
/* A strip card is a fraction of a grid card, so the name needs the width the
   grid tile hands to its hover buttons: .tile-bl's 144px right gutter leaves a
   150px card literally no room for its title. Give the gutter back only while
   the pointer is on the card, when the Play button is actually there. */
/* Hover lightboxes the card: at 86px the art is a thumbnail, so growing it to
   something you can actually look at IS the preview. --cs-zoom is set per
   strip from the measured card size, so a small card grows more than a large
   one and both land at about the same size. */
.cs-row .tile:hover {
  transform: scale(var(--cs-zoom, 1.8));
  z-index: 60;
  /* Reads as lifted off the shelf rather than merely bigger: a deep drop plus
     a hairline accent ring, which is also what separates it from whichever
     neighbour it is now overlapping. */
  box-shadow: 0 30px 80px rgba(0,0,0,.8),
              0 0 0 1px rgba(167,139,250,.55),
              0 0 34px rgba(124,58,237,.22);
  border-color: transparent;
}
/* The card scales, so everything drawn on it scales with it — a 32px Play
   button becomes a 100px one. Counter-scale it (and the name plate) so they
   stay the size they were while the ART is what grows. */
.cs-row .tile:hover .quick-play {
  transform: scale(calc(1 / var(--cs-zoom, 1.8)));
  transform-origin: bottom right;
}
/* The name plate is laid out in the card's OWN coordinates — ~28px wide on an
   86px card — so counter-scaling alone just shrank an already-too-narrow box
   and the title wrapped into a tall black column down the left of the art.
   Free its width from the card (max-content), budget it in POST-scale pixels,
   and keep it to one line. */
.cs-row .tile:hover .tile-bl {
  right: auto;
  /* The inset has to be counter-scaled too, or it is 12 CARD pixels — 36 on
     screen at 3x — and the caption floats in the middle of the artwork
     instead of sitting on the bottom edge. */
  left: calc(11px / var(--cs-zoom, 1.8));
  bottom: calc(9px / var(--cs-zoom, 1.8));
  width: max-content;
  /* Budget in the tile's OWN coordinates: a child counter-scaled by 1/zoom
     appears at its layout width, but still occupies width/zoom inside the
     card — and the card clips (overflow:hidden). So the ceiling is the card's
     on-screen width, card*zoom, not an arbitrary pixel count times zoom. Get
     that wrong and the plate is clipped out of existence rather than merely
     truncated. */
  max-width: calc(var(--cs-card, 132px) * var(--cs-zoom, 1.8) - 24px);
}
/* Art first. The grid's name plate is an opaque black box, which is the right
   call on a 280px tile where it has to stay legible over any artwork — but
   the tile ALREADY carries a bottom fade, so at this size the box lands on
   top of that gradient and reads as a sticker stuck over the picture. Drop
   the box, deepen the fade, and let the type sit on it. */
.cs-row .tile:hover .tile-fade { height: 62%; }
.cs-row .tile:hover .tile-info {
  background: none;
  border: 0;
  padding: 0;
  transform: scale(calc(1 / var(--cs-zoom, 1.8)));
  transform-origin: bottom left;
}
.cs-row .tile:hover .tile-title {
  -webkit-line-clamp: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: -.1px;
  text-shadow: 0 1px 6px rgba(0,0,0,.95), 0 0 3px rgba(0,0,0,.7);
}
.cs-row .tile:hover .tile-sub {
  font-size: 11px;
  color: rgba(255,255,255,.7);
  text-shadow: 0 1px 5px rgba(0,0,0,.95);
}
@media (prefers-reduced-motion: reduce) { .cs-row .tile { transition: none; } }

.cs-row .tile-bl { right: 12px; gap: 4px; }
.cs-row .tile:hover .tile-bl { right: 46px; }
/* ── a strip card has its OWN chrome, not the grid tile's ──────────────────
   Every badge the grid draws is positioned for a 280px tile, in offsets that
   are meaningless at a third of that: .version-badge sits at right:50px, which
   on an 86px card is the MIDDLE of the artwork — that is the grey pill that
   kept turning up over the covers. .version-count's right:120px is off the
   card entirely. None of it can simply be re-anchored either, because there
   are not four free corners on a card this size. So a shelf shows the art and
   nothing else; the grid tile and the detail panel still carry all of it. */
.cs-row .rating-strip,
.cs-row .engine-pill,
.cs-row .version-badge,
.cs-row .version-count,
.cs-row .ahead-tag,
.cs-row .quick-folder,
.cs-row .quick-update,
.cs-row .tile-running-badge,
.cs-row .tile-stop-btn,
.cs-row .tile-resume-btn { display: none; }

/* One action, in the middle, at a constant size: with the card zoomed under
   the pointer, a corner button is both hard to aim at and fighting the name
   plate for the same edge. Counter-scaled by 1/zoom so it stays 48px on
   screen whatever the card is — a real touch target at every shelf size. */
.cs-row .quick-play,
.cs-row .quick-download {
  left: 50%; top: 50%; right: auto; bottom: auto;
  width: 48px; height: 48px;
  transform: translate(-50%, -50%) scale(calc(1 / var(--cs-zoom, 1.8)));
  transform-origin: center;
  /* A ring of its own, so the control reads against bright artwork as well as
     dark — a glow alone disappears on a pale cover. */
  box-shadow: 0 10px 28px rgba(0,0,0,.55),
              0 4px 18px rgba(124,58,237,.45),
              inset 0 0 0 1.5px rgba(255,255,255,.34);
}
.cs-row .quick-play svg,
.cs-row .quick-download svg { width: 21px; height: 21px; margin-left: 2px; }
.cs-row .tile:hover .quick-play,
.cs-row .tile:hover .quick-download {
  opacity: 1;
  transform: translate(-50%, -50%) scale(calc(1 / var(--cs-zoom, 1.8)));
}
/* The base rule nudges to scale(1.06) with !important, which on a zoomed card
   multiplies INTO the card's own scale and the button balloons. Re-state the
   nudge inside the counter-scale instead. */
.cs-row .quick-play:hover,
.cs-row .quick-download:hover {
  transform: translate(-50%, -50%) scale(calc(1.1 / var(--cs-zoom, 1.8))) !important;
}
.collection-strip.collapsed .cs-row { display: none; }

/* A shelf whose cards are filled in as it nears the screen (armLazyStrips)
   holds roughly its final height meanwhile, so the page doesn't jump. */
.cs-row[data-lazy] { min-height: calc(var(--cs-lazy-rows, 1) * 104px); }

/* -- A shelf opens its category page -----------------------------------------
   The name reads as a link until a double-click makes it an editor again. */
.cs-title[readonly] { cursor: pointer; }
.cs-title[readonly]:hover { color: var(--accent); border-color: transparent; }
.cs-title[readonly]:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.cs-title[readonly]:focus:not(:focus-visible) { border-color: transparent; background: transparent; }
button.cs-open {
  display: inline-flex; align-items: center; gap: 3px; line-height: 1.4;
  border: 0; cursor: pointer; font: inherit; font-size: 11px;
  transition: color .18s, background .18s;
}
button.cs-open:hover { color: var(--text); background: rgba(167,139,250,.18); }
button.cs-open:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.cs-open-arrow { font-size: 13px; line-height: 1; opacity: .7; }

/* The last slot of a capped shelf: same track, same 3:2 card, same radius as
   its neighbours, painted with the covers of the games it stands for. */
.cs-more {
  position: relative; min-width: 0; aspect-ratio: 3 / 2;
  padding: 0; overflow: hidden; cursor: pointer;
  border: 1px solid var(--border); border-radius: var(--radius);
  background: var(--surface); box-shadow: var(--shadow-card);
  color: #fff; font: inherit;
  transition: transform .2s cubic-bezier(.2,.7,.3,1), border-color .2s;
}
.cs-more-mosaic {
  position: absolute; inset: 0;
  display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr;
  filter: saturate(.8) brightness(.55);
  transition: filter .2s;
}
.cs-more-mosaic.few { grid-template-columns: 1fr; grid-template-rows: 1fr; }
.cs-more-mosaic.few .cs-more-art:not(:first-child) { display: none; }
.cs-more-art { background-size: cover; background-position: center 30%; }
.cs-more-label {
  position: relative; z-index: 1; height: 100%;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  text-shadow: 0 1px 6px rgba(0,0,0,.9);
}
.cs-more-label b { font-size: clamp(14px, calc(var(--cs-card, 132px) * .16), 26px); font-weight: 700; font-variant-numeric: tabular-nums; }
.cs-more-label span { font-size: clamp(9px, calc(var(--cs-card, 132px) * .085), 13px); font-weight: 600; letter-spacing: .3px; opacity: .9; }
.cs-more:hover { transform: translateY(-3px); border-color: var(--accent); }
.cs-more:hover .cs-more-mosaic { filter: saturate(1) brightness(.7); }
.cs-more:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { .cs-more, .cs-more-mosaic { transition: none; } }

/* -- Category page: one collection as full-size grid tiles --------------------
   The same #grid with its tiles a size up from the ordinary grid, headed by a
   bar that spans every column. */
.grid.coll-page { grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); }
.coll-page-head {
  grid-column: 1 / -1;
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding-bottom: 12px; margin-bottom: 2px;
  border-bottom: 1px solid var(--border);
}
.coll-page-back {
  display: inline-flex; align-items: center; gap: 6px;
  min-height: 36px; padding: 0 14px 0 10px;
  font: 600 13px/1 inherit; color: var(--text-dim);
  background: var(--surface); border: 1px solid var(--border); border-radius: 999px;
  cursor: pointer; transition: color .18s, border-color .18s, background .18s;
}
.coll-page-back span { font-size: 18px; line-height: 1; }
.coll-page-back:hover { color: var(--text); border-color: var(--accent); }
.coll-page-back:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.coll-page-title {
  field-sizing: content;
  flex: 0 1 auto; min-width: 120px; max-width: 100%;
  text-overflow: ellipsis;
  font: 700 22px/1.2 inherit; color: var(--text);
  background: transparent; border: 1px solid transparent; border-radius: 8px;
  padding: 4px 8px;
}
.coll-page-title:hover { border-color: var(--border); }
.coll-page-title:focus { outline: none; border-color: var(--accent); background: var(--bg-2); }
.coll-page-count {
  font-size: 12px; font-variant-numeric: tabular-nums; color: var(--text-mute);
  padding: 3px 9px; border-radius: 999px; background: rgba(255,255,255,.05);
}
.coll-page-empty { grid-column: 1 / -1; color: var(--text-dim); margin: 24px 0; }
.grid-sentinel { grid-column: 1 / -1; height: 1px; }
/* Loose games vs collection shelves: two labelled sections of one grid. The
   shelves' wrapper takes no box of its own, so each strip is still a grid row. */
.cs-shelves { display: contents; }
.grid-sec-head {
  grid-column: 1 / -1;
  display: flex; align-items: center; gap: 10px;
  padding: 6px 2px 5px;
  border-bottom: 1px solid var(--border);
}
.grid-sec-head + .grid-sec-head { display: none; }   /* an empty section never shows two heads */
.cs-shelves > .grid-sec-head { margin-top: 10px; }
.grid-sec-title {
  font: 700 12px/1.2 inherit;
  letter-spacing: .08em; text-transform: uppercase;
  color: var(--text-dim);
}
.grid-sec-count {
  font-size: 11px; font-variant-numeric: tabular-nums;
  color: var(--text-mute);
  padding: 2px 7px; border-radius: 999px;
  background: rgba(255,255,255,.05);
}
.grid-sec-swap {
  margin-left: auto;
  font: 600 12px/1 inherit;
  color: var(--text-dim);
  background: rgba(255,255,255,.04);
  border: 1px solid var(--border); border-radius: 999px;
  padding: 6px 12px; min-height: 30px;
  cursor: pointer;
  transition: color .15s, border-color .15s, background .15s;
}
.grid-sec-swap:hover,
.grid-sec-swap:focus-visible { color: #fde7c0; border-color: rgba(245, 158, 11, .55); background: rgba(245, 158, 11, .12); }
@media (max-width: 640px) {
  .grid.coll-page { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); }
  .coll-page-title { font-size: 18px; }
}

/* -- Per-card labels in a collection strip -------------------------------
   Injected per tile by collectionStripsHtml; the strip's data-labels picks
   which shows. Both hide while a card is hover-zoomed so its own title plate
   reads instead. Right-click the shelf header to switch modes. */
.cs-row .cs-ep,
.cs-row .cs-name { display: none; }
.collection-strip[data-labels="episode"] .cs-row .tile:not(:hover) > .cs-ep {
  display: block; position: absolute; top: 5px; left: 5px; z-index: 5;
  padding: 1px 6px; border-radius: 6px;
  background: rgba(10,10,14,.82); color: #fff;
  font: 700 10px/1.4 inherit; letter-spacing: .2px;
  font-variant-numeric: tabular-nums; pointer-events: none;
  box-shadow: 0 1px 3px rgba(0,0,0,.55);
}
.collection-strip[data-labels="name"] .cs-row .tile:not(:hover) > .cs-name {
  display: block; position: absolute; left: 0; right: 0; bottom: 0; z-index: 5;
  padding: 12px 5px 4px;
  background: linear-gradient(to top, rgba(6,6,10,.92), rgba(6,6,10,.5) 55%, transparent);
  color: #fff; font: 600 10px/1.2 inherit; text-align: center;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  pointer-events: none; text-shadow: 0 1px 4px rgba(0,0,0,.92);
}


@media (max-width: 640px) {
  /* A phone has no width to give: two rows of 36 would be 20px slivers, so the
     measured size is ignored here and the shelf simply wraps. */
  .cs-row { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 10px; }
}

.tile {
  position: relative;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  cursor: pointer;
  transition: transform .2s cubic-bezier(.2,.7,.3,1), box-shadow .2s, border-color .2s;
  box-shadow: var(--shadow-card);
  /* Landscape banner orientation — F95 / itch covers are typically 16:9 or wider.
     A 3:2 aspect crops the least off both common banner shapes and portrait art. */
  aspect-ratio: 3 / 2;
  display: flex; flex-direction: column;
}
.tile:hover {
  transform: translateY(-4px) scale(1.02);
  box-shadow: var(--shadow-lift);
  border-color: rgba(167,139,250,.4);
  z-index: 2;
}

.tile-cover {
  position: relative;
  flex: 1;
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
  overflow: hidden;
}
/* (Blurred-backdrop removed — scale<1 now uses object-fit:fill which already
   covers the whole tile without leaving any area to fill.) */
.tile-cover img {
  position: absolute;
  display: block;
  z-index: 1;
  /* width / height / left / top set inline by JS to lerp between cover & contain */
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 50% 30%;
  -webkit-user-drag: none;
  user-select: none;
}

/* placeholder (no cover) */
.tile-placeholder {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  background:
    radial-gradient(circle at 30% 20%, rgba(124,58,237,.35), transparent 50%),
    radial-gradient(circle at 80% 80%, rgba(6,182,212,.25), transparent 50%),
    linear-gradient(135deg, #1a1d2a, #0e1018);
  color: rgba(255,255,255,.5);
  font-weight: 700; font-size: 32px;
  letter-spacing: 1px;
  text-transform: uppercase;
}

.tile-fade {
  position: absolute; inset: auto 0 0 0; height: 65%;
  background: linear-gradient(to top,
    rgba(0,0,0,.95) 0%,
    rgba(0,0,0,.85) 30%,
    rgba(0,0,0,.55) 60%,
    transparent 100%);
  pointer-events: none;
}

/* version badge — only visible on hover (on tiles; static contexts unaffected) */
.tile .version-badge,
.tile .version-count,
.tile .rating-strip {
  opacity: 0;
  transition: opacity .15s;
}
.tile:hover .version-badge,
.tile:hover .version-count,
.tile:hover .rating-strip { opacity: 1; }
/* Keep the rating indicator visible even when unhovered if the user has rated it */
.tile .rating-strip.rated { opacity: 1; }

/* version badge — the headline element */
.version-badge {
  position: absolute;
  top: 10px; right: 50px;   /* shifted left to leave the corner for the fav star */
  padding: 5px 10px;
  background: var(--grad-cool);
  color: white;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-weight: 700;
  font-size: 12px;
  letter-spacing: .3px;
  border-radius: 6px;
  box-shadow: 0 4px 14px rgba(124,58,237,.5), inset 0 0 0 1px rgba(255,255,255,.18);
  text-shadow: 0 1px 0 rgba(0,0,0,.25);
  font-variant-numeric: tabular-nums;
  z-index: 3;
}
.version-badge.no-version {
  background: var(--surface-3);
  color: var(--text-mute);
  box-shadow: inset 0 0 0 1px var(--border);
  text-shadow: none;
}
/* Installed build is NEWER than every tracked source (Patreon-first release,
   stale F95 thread). Informational, not actionable — teal, no red, no arrow. */
.version-badge.ahead {
  background: rgba(0,0,0,.85);
  border: 1px solid rgba(20,184,166,.55);
  box-shadow: 0 4px 14px rgba(20,184,166,.3);
  color: #7fe8dc;
  padding: 5px 8px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  text-shadow: none;
}
.version-badge.ahead .ahead-tag {
  font-size: 9px;
  font-weight: 800;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: rgba(127,232,220,.85);
  background: rgba(20,184,166,.16);
  border: 1px solid rgba(20,184,166,.4);
  border-radius: 4px;
  padding: 1px 5px;
  line-height: 1.4;
}
.version-badge.outdated {
  /* Dark backdrop with a red border — gives both version chunks high contrast */
  background: rgba(0,0,0,.85);
  border: 1px solid rgba(239,68,68,.6);
  box-shadow: 0 4px 14px rgba(239,68,68,.35);
  padding: 5px 8px;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  text-shadow: none;
  transition: background .15s, border-color .15s, box-shadow .15s, padding .15s;
}
.version-badge.outdated .ver-old {
  color: rgba(255,255,255,.55);
  text-decoration: line-through;
  text-decoration-thickness: 1px;
  font-weight: 600;
}
.version-badge.outdated .ver-arrow {
  color: rgba(255,255,255,.4);
  font-weight: 400;
}
.version-badge.outdated .ver-new {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: #ff6868;
  font-weight: 800;
  text-shadow: 0 0 8px rgba(239,68,68,.45);
}
.version-badge.outdated .ver-new[data-src="f95"]     { color: #9ad0ff; text-shadow: 0 0 8px rgba(154,208,255,.4); }
.version-badge.outdated .ver-new[data-src="itch"]    { color: #ff8fa3; text-shadow: 0 0 8px rgba(255,143,163,.45); }
.version-badge.outdated .ver-new[data-src="patreon"] { color: #ffb199; text-shadow: 0 0 8px rgba(255,177,153,.45); }
.version-badge.outdated .ver-new[data-src="server"]  { color: #7fe8dc; text-shadow: 0 0 8px rgba(20,184,166,.45); }
.version-badge.outdated { cursor: pointer; }
.version-badge.outdated:hover { filter: brightness(1.1); }
.version-badge.outdated .ver-new[data-url]:hover { text-decoration: underline; filter: brightness(1.15); }
/* Outdated badge stays visible on tiles even without hover, like the fav star */
.tile .version-badge.outdated { opacity: 1; }

/* ── Update-source chips ──
   Unhovered tile: the badge collapses to bare pulsing brand chips (which
   sources have a newer build). Hovered: chips swap for the full
   "v1.0 → [icon] vX / [icon] vY" breakdown. */
.version-badge.outdated .upd-icons {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.upd-icon {
  width: 22px; height: 22px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  box-shadow: 0 2px 8px rgba(0,0,0,.5), inset 0 0 0 1px rgba(255,255,255,.25);
  animation: upd-pulse 1.8s ease-in-out infinite;
  cursor: pointer;
}
.upd-icon[data-src="itch"]    { background: #fa5c5c; }
.upd-icon[data-src="patreon"] { background: #fff; color: #000; }
.upd-icon[data-src="f95"]     { background: #33526e; }
.upd-icon[data-src="server"]  { background: #0d9488; }
.upd-icons .upd-icon:nth-child(2) { animation-delay: .3s; }
.upd-icons .upd-icon:nth-child(3) { animation-delay: .6s; }
.upd-icons .upd-icon:nth-child(4) { animation-delay: .9s; }
@keyframes upd-pulse {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.18); }
}
@media (prefers-reduced-motion: reduce) {
  .upd-icon { animation: none; }
}
.upd-icon .upd-glyph { width: 12px; height: 12px; }
.upd-glyph-f95 {
  width: auto !important; height: auto !important;
  font: 800 7.5px/1 ui-monospace, SFMono-Regular, Menlo, monospace;
  letter-spacing: .3px;
}
.version-badge.outdated .ver-new .upd-glyph { width: 11px; height: 11px; flex: none; }
.version-badge.outdated .ver-new .upd-glyph-f95 { font-size: 8px; }

/* Sidebar "Updates" filter chips — brand glyph inline with the label, colored
   to match the tile chips so the two read as the same system. */
.upd-filter-chip .upd-glyph { width: 12px; height: 12px; flex: none; }
.upd-filter-chip .upd-glyph-f95 { font-size: 8px; width: auto; height: auto; }
.upd-filter-chip[data-src="itch"]    .upd-glyph { color: #fa5c5c; }
.upd-filter-chip[data-src="patreon"] .upd-glyph { color: #ff8a65; }
.upd-filter-chip[data-src="f95"]     .upd-glyph { color: #9ad0ff; }
.upd-filter-chip[data-src="server"]  .upd-glyph { color: #2dd4bf; }
.update-filters-empty {
  color: var(--text-mute);
  font-size: 12px;
  padding: 2px 0;
}

/* Tile states: collapse to chips at rest, expand to detail on hover. */
.tile .version-badge.outdated {
  background: transparent;
  border-color: transparent;
  box-shadow: none;
  padding: 2px 0;
}
.tile .version-badge.outdated .upd-detail { display: none; }
.tile:hover .version-badge.outdated {
  background: rgba(0,0,0,.85);
  border-color: rgba(239,68,68,.6);
  box-shadow: 0 4px 14px rgba(239,68,68,.35);
  padding: 5px 8px;
}
.tile:hover .version-badge.outdated .upd-icons { display: none; }
.tile:hover .version-badge.outdated .upd-detail {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  /* Many-source rows wrap instead of running left into the engine pill */
  flex-wrap: wrap;
  justify-content: flex-end;
  row-gap: 3px;
}
.tile:hover .version-badge.outdated { max-width: calc(100% - 140px); }
.version-badge.big {
  padding: 8px 14px;
  font-size: 16px;
  border-radius: 8px;
  box-shadow: 0 6px 22px rgba(124,58,237,.55), inset 0 0 0 1px rgba(255,255,255,.18);
}

/* quick-action buttons — bottom-right of tile, revealed on hover */
.quick-play,
.quick-folder,
.quick-update {
  position: absolute;
  bottom: 12px;
  width: 44px; height: 44px;
  display: flex; align-items: center; justify-content: center;
  border: 0;
  border-radius: 50%;
  cursor: pointer;
  z-index: 4;
  opacity: 0;
  transform: translateY(8px) scale(0.85);
  transition: opacity .15s, transform .15s, filter .12s;
  padding: 0;
}
.quick-play {
  right: 12px;
  background: var(--grad-cool);
  color: white;
  box-shadow: 0 6px 22px rgba(124,58,237,.55), inset 0 0 0 1px rgba(255,255,255,.2);
}
.quick-folder {
  right: 64px;
  background: rgba(20,23,36,.95);
  color: var(--text);
  border: 1px solid rgba(255,255,255,.15);
}
.quick-update {
  right: 116px;
  background: linear-gradient(135deg, #f97316, #ef4444);
  color: white;
  box-shadow: 0 6px 22px rgba(239,68,68,.55), inset 0 0 0 1px rgba(255,255,255,.2);
}
.tile:hover .quick-play,
.tile:hover .quick-folder,
.tile:hover .quick-update {
  opacity: 1;
  transform: translateY(0) scale(1);
}
.quick-play:hover   { filter: brightness(1.15); transform: scale(1.06) !important; }
.quick-folder:hover { background: rgba(40,45,65,.95); transform: scale(1.06) !important; }
.quick-update:hover { filter: brightness(1.15); transform: scale(1.06) !important; }
.quick-play:active,
.quick-folder:active,
.quick-update:active { transform: scale(0.96) !important; }

/* Bottom-left stack: rating strip sits on top of tile-info so they share
   layout — when the title wraps to two lines the strip moves up with it.
   Anchor both left AND right so the width is constrained regardless of how
   long the title is. The 144px on the right reserves space for the 3 quick-
   action buttons (Play/Folder/Update span right:12 → right:160). */
.tile-bl {
  position: absolute;
  left: 12px; bottom: 12px; right: 144px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  min-width: 0;
  z-index: 3;
  pointer-events: none;
}
.tile-bl > * { pointer-events: auto; max-width: 100%; min-width: 0; }
/* Holds the one score bar above the title. Kept as its own row so the bar can
   never be stretched by .tile-bl's column layout. */
.tile-chiprow {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: 6px;
  max-width: 100%;
  pointer-events: none;
}
.tile-chiprow > * { pointer-events: auto; }
/* .tile-bl reserves 144px on the right for the quick-action buttons, which leaves
   ~124px on the narrowest (280px) tile. Five stars plus the tally can exceed that
   when a hover reveals the empty stars, so the bar WRAPS instead of being clipped:
   the tally drops under the stars and the chip stays one rounded block. */
.tile .score-bar { flex-wrap: wrap; max-width: 100%; }

/* Compact rating strip when tile isn't hovered: hide empty stars so the strip
   only shows the actual rating. On hover (or for unrated tiles being shown
   while hovered) the full 5-star strip is visible for picking. */
.tile:not(:hover) .rating-strip.rated .rating-star:not(.filled) { display: none; }

/* Rating strip — compact, lives inside .tile-bl on tiles (static position)
   and inline in the detail-panel meta row. */
.rating-strip {
  display: inline-flex; align-items: center;
  gap: 1px;
  padding: 4px 6px;
  background: rgba(0,0,0,.72);
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 8px;
  user-select: none;
}
.rating-strip .rating-star {
  background: none;
  border: 0;
  color: rgba(255,255,255,.32);
  cursor: pointer;
  padding: 0 1px;
  font-size: 12px;
  line-height: 1;
  font-family: inherit;
  transition: color .12s, transform .08s, text-shadow .12s;
}
.rating-strip .rating-star:hover { transform: scale(1.18); }
.rating-strip .rating-star.filled { color: var(--star-color, #ffd700); }

/* Tier colors. Each tier defines --star-color + an optional glow. */
.rating-strip.tier-silver   { --star-color: #cbd5e1; }
.rating-strip.tier-silver   .rating-star.filled { text-shadow: 0 0 6px rgba(203,213,225,.5); }
.rating-strip.tier-silver   { border-color: rgba(203,213,225,.28); background: rgba(20,22,32,.78); }

.rating-strip.tier-gold     { --star-color: #fbbf24; }
.rating-strip.tier-gold     .rating-star.filled { text-shadow: 0 0 8px rgba(251,191,36,.65); }
.rating-strip.tier-gold     { border-color: rgba(251,191,36,.4); background: rgba(40,28,8,.72); }

.rating-strip.tier-platinum { --star-color: #f1f5ff; }
.rating-strip.tier-platinum .rating-star.filled {
  text-shadow:
    0 0 4px rgba(241,245,255,.9),
    0 0 14px rgba(170,200,255,.6),
    0 0 24px rgba(120,160,255,.35);
}
.rating-strip.tier-platinum {
  border-color: rgba(180,210,255,.5);
  background: linear-gradient(135deg, rgba(20,30,60,.78), rgba(40,30,80,.72));
  box-shadow: 0 0 18px rgba(120,160,255,.18);
}

/* Larger variant for the detail panel */
.rating-strip-large {
  position: static;
  gap: 2px;
  padding: 6px 10px;
}
.rating-strip-large .rating-star { font-size: 20px; padding: 0 2px; }
.rating-strip-large .rating-star:hover { transform: scale(1.22); }

/* ── Score bar — the private ★ grade and the communal bust tally, one chip ──
   They are two readings of the same item, so they share a shell instead of
   floating as two competing chips on a cover. The star strip keeps its own
   markup and behaviour; inside the bar it simply gives up its standalone
   background/border to the bar and gains a neighbour. */
.score-bar {
  display: inline-flex;
  align-items: stretch;
  background: rgba(0,0,0,.72);
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 8px;
  overflow: hidden;
  user-select: none;
}
/* The strip's own shell dissolves into the bar's. Tier colours on the stars are
   carried by the glyphs themselves, so they survive this untouched. */
.score-bar > .rating-strip {
  position: static;
  background: none;
  border: 0;
  border-radius: 0;
  opacity: 1;
}
.score-bar > .score-div {
  width: 1px;
  align-self: center;
  height: 15px;
  background: rgba(255,255,255,.14);
  flex: 0 0 auto;
}

/* ── The vote itself ───────────────────────────────────────────────────────
   One pip and a number — NOT a row of five. The bust score is a tally with no
   denominator; drawing it as five pips beside a five-star strip would read as
   the same measurement twice. */
.bust-vote {
  display: inline-flex; align-items: center;
  gap: 5px;
  padding: 4px 8px 4px 7px;
  background: none;
  border: 0;
  border-radius: 0;
  cursor: pointer;
  font: inherit;
  color: inherit;
  line-height: 1;
  transition: background .15s, transform .08s;
}
.bust-vote:hover { background: rgba(255,255,255,.07); }
.bust-vote:active { transform: translateY(1px); }
.bust-vote:focus-visible { outline: 2px solid var(--bust-color, #f6e3da); outline-offset: -2px; }

.bust-pip {
  position: relative;
  width: 14px; height: 14px;
  flex: 0 0 auto;
  background-color: rgba(255,255,255,.3);
  -webkit-mask: url('data:image/webp;base64,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') center / contain no-repeat;
          mask: url('data:image/webp;base64,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') center / contain no-repeat;
  transition: background-color .16s, filter .16s, transform .16s;
}
.bust-vote.busted .bust-pip {
  background-color: var(--bust-color, #f0ded3);
  filter: drop-shadow(0 0 var(--bust-glow, 0px) var(--bust-glow-color, transparent));
}
.bust-vote:hover .bust-pip { transform: translateY(-1px) scale(1.08); }

.bust-count {
  font-size: 11px;
  font-weight: 800;
  letter-spacing: .2px;
  font-variant-numeric: tabular-nums;
  color: rgba(255,255,255,.42);
  min-width: 7px;
  text-align: left;
  transition: color .16s;
}
.bust-vote.busted .bust-count { color: var(--bust-color, #f0ded3); }

/* Heat bands for an unbounded tally. Deliberately a cream/rose ramp so it can
   never be mistaken for the gold ★ sitting right beside it. */
.bust-vote.tier-warm { --bust-color: #e4cdbe; --bust-glow: 3px; --bust-glow-color: rgba(228,205,190,.45); }
.bust-vote.tier-hot  { --bust-color: #f7e2d6; --bust-glow: 5px; --bust-glow-color: rgba(247,180,170,.6); }
.bust-vote.tier-peak { --bust-color: #fffaf7; --bust-glow: 8px; --bust-glow-color: rgba(255,150,190,.75); }
.bust-vote.tier-peak .bust-count { text-shadow: 0 0 10px rgba(255,120,175,.5); }

/* Your own vote is in the tally — a lit backing, so "12 busts" and "12 busts
   including mine" are one glance apart. */
.bust-vote.mine {
  background: linear-gradient(180deg, rgba(255,120,175,.16), rgba(255,120,175,.07));
  box-shadow: inset 0 0 0 1px rgba(255,190,215,.35);
}
.bust-vote.mine:hover { background: linear-gradient(180deg, rgba(255,120,175,.24), rgba(255,120,175,.11)); }

/* ── The moment of the vote ────────────────────────────────────────────────
   An upvote has to feel like it LANDED: the pip kicks up and settles with a
   little overshoot, a ring breaks out of it, and the number rolls instead of
   blinking. Withdrawing plays the same beat downward and quieter — taking a
   vote back should not feel as good as giving one. */
@keyframes bust-launch {
  0%   { transform: translateY(0) scale(1); }
  30%  { transform: translateY(-7px) scale(1.34); }
  55%  { transform: translateY(1px) scale(.94); }
  75%  { transform: translateY(-2px) scale(1.08); }
  100% { transform: translateY(0) scale(1); }
}
@keyframes bust-sink {
  0%   { transform: translateY(0) scale(1); }
  45%  { transform: translateY(3px) scale(.86); }
  100% { transform: translateY(0) scale(1); }
}
@keyframes bust-ring {
  0%   { opacity: .85; transform: translate(-50%,-50%) scale(.35); }
  100% { opacity: 0;   transform: translate(-50%,-50%) scale(2.9); }
}
@keyframes bust-roll-up {
  0%   { opacity: 0; transform: translateY(7px); }
  100% { opacity: 1; transform: translateY(0); }
}
@keyframes bust-roll-down {
  0%   { opacity: 0; transform: translateY(-7px); }
  100% { opacity: 1; transform: translateY(0); }
}
@keyframes bust-flash {
  0%, 100% { background: none; }
  25%      { background: rgba(255,120,175,.22); }
}

.bust-vote.bust-cast .bust-pip { animation: bust-launch .52s cubic-bezier(.34,1.56,.64,1); }
.bust-vote.bust-undo .bust-pip { animation: bust-sink .32s ease-out; }
.bust-vote.bust-cast { animation: bust-flash .45s ease-out; }

/* The ring lives inside the pip so it breaks out of the art, not the chip.
   `mask` on the parent would clip a child, so it is drawn as a pseudo-element
   on .bust-burst, which sits unmasked in the pip's own coordinate space. */
.bust-burst {
  position: absolute;
  left: 50%; top: 50%;
  width: 14px; height: 14px;
  pointer-events: none;
  opacity: 0;
}
.bust-vote.bust-cast .bust-burst {
  border: 2px solid rgba(255,150,190,.95);
  border-radius: 50%;
  animation: bust-ring .55s ease-out;
}

.bust-count.roll-up   { animation: bust-roll-up .3s ease-out; }
.bust-count.roll-down { animation: bust-roll-down .3s ease-out; }

/* The server refused the vote — put the number back and say so. */
@keyframes bust-shake {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-3px); }
  75% { transform: translateX(3px); }
}
.bust-vote.bust-rejected { animation: bust-shake .3s ease-out; }

/* Larger variant for the detail panel, matching .rating-strip-large. */
.score-bar-large > .rating-strip { padding: 6px 10px; }
.score-bar-large > .score-div { height: 20px; }
.bust-vote[data-bust-large="1"] { padding: 6px 12px 6px 10px; gap: 7px; }
.bust-vote[data-bust-large="1"] .bust-pip { width: 19px; height: 19px; }
.bust-vote[data-bust-large="1"] .bust-burst { width: 19px; height: 19px; }
.bust-vote[data-bust-large="1"] .bust-count { font-size: 14px; }

/* On a tile the bar waits for a hover while nothing is rated or voted, so it
   never clutters a cover with two empty controls. Once it carries a score it
   stays — that is what a communal tally is FOR, being visible across the grid. */
.tile .score-bar,
.media-tile .score-bar { opacity: 0; transition: opacity .15s; }
.tile:hover .score-bar,
.media-tile:hover .score-bar { opacity: 1; }
.tile .score-bar:has(.bust-vote.busted),
.tile .score-bar:has(.rating-strip.rated),
.media-tile .score-bar:has(.bust-vote.busted),
.media-tile .score-bar:has(.rating-strip.rated) { opacity: 1; }

/* Media tiles anchor the bar where the ★ strip used to sit, bottom-right,
   clearing the 6px resume bar. */
.media-tile .score-bar {
  position: absolute;
  /* Inside the nameplate's field — never on top of its end bracket. */
  right: calc(12px + var(--plate-cap));
  bottom: 11px;
  z-index: 4;
}
/* HEIGHT IS LOAD-BEARING HERE. `.tile-views` sits at bottom:30px in the same
   right-hand column, so the bar has 22px of clearance from bottom:8px and no
   more — at its default 24px it clipped the corner of the view count. Measured,
   not guessed: web/test/tile-overlap.html reports every intersecting pair. */
.media-tile .score-bar { min-height: 0; }
.media-tile .score-bar > .rating-strip { padding: 3px 6px; }
.media-tile .score-bar .bust-vote { padding: 3px 7px 3px 6px; min-height: 0; }
.media-tile .score-bar .bust-pip { width: 12px; height: 12px; }
.media-tile .score-bar .bust-burst { width: 12px; height: 12px; }
.media-tile .score-bar .bust-count { font-size: 10.5px; }

/* Touch: a vote is a one-tap action, so give it a real target on a phone. */
@media (pointer: coarse) {
  .bust-vote { padding: 8px 11px 8px 10px; }
  .bust-pip { width: 16px; height: 16px; }
  .bust-count { font-size: 12px; }
  .tile .score-bar, .media-tile .score-bar { opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .bust-vote, .bust-pip, .bust-count { transition: none; }
  .bust-vote.bust-cast .bust-pip,
  .bust-vote.bust-undo .bust-pip,
  .bust-vote.bust-cast,
  .bust-vote.bust-cast .bust-burst,
  .bust-vote.bust-rejected,
  .bust-count.roll-up,
  .bust-count.roll-down { animation: none; }
  .bust-vote:hover .bust-pip { transform: none; }
}

/* version count chip — shown when multiple game folders share a group key */
.version-count {
  position: absolute;
  top: 10px; right: 120px;
  padding: 4px 10px;
  background: rgba(0,0,0,.78);
  color: #fff;
  font-family: ui-monospace, monospace;
  font-size: 11px;
  font-weight: 700;
  border-radius: 6px;
  border: 1px solid rgba(255,255,255,.18);
  z-index: 4;
  cursor: pointer;
  user-select: none;
  transition: background .12s, transform .08s;
}
.version-count:hover {
  background: rgba(167,139,250,.65);
  border-color: rgba(255,255,255,.35);
}
.version-count:active { transform: translateY(1px); }

/* Floating quick-launch popover anchored to the chevron */
.version-popover {
  position: fixed;
  z-index: 50;
  min-width: 260px;
  max-width: 360px;
  padding: 6px;
  background: var(--bg-2);
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  box-shadow: 0 16px 48px rgba(0,0,0,.6), 0 0 0 1px rgba(167,139,250,.15);
  animation: fadeIn .12s;
}
.version-popover .version-row {
  background: transparent;
  border-color: transparent;
  padding: 6px 8px;
}
.version-popover .version-row:hover { background: var(--surface-2); border-color: var(--border); }

.source-popover { padding: 6px; min-width: 260px; }
.source-popover .source-row {
  display: grid;
  grid-template-columns: 90px 1fr;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border-radius: 8px;
  cursor: pointer;
}
.source-popover .source-row:hover { background: var(--surface-2); }
.source-popover .src-label { font-weight: 700; font-size: 13px; }
.source-popover .src-url {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px;
  color: var(--text-mute);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* ─────────────── update modal ─────────────── */
.update-panel { max-width: 720px; }

/* ─────────────── activity popover (topbar Activity button) ─────────────── */
.activity-btn { position: relative; }
.activity-badge {
  position: absolute;
  top: -5px;
  right: -5px;
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 16px; height: 16px;
  padding: 0 4px;
  background: var(--grad-warm);
  color: white;
  font-size: 10px; font-weight: 700;
  line-height: 1;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(239,68,68,.5), 0 0 0 2px var(--bg);
  pointer-events: none;
  transition: transform .25s cubic-bezier(.4,0,.2,1);
  z-index: 3;
}
/* On hover, the badge slides over so it doesn't clip the revealed label */
.btn.icon-pill.activity-btn:hover .activity-badge,
.btn.icon-pill.activity-btn:focus-visible .activity-badge {
  transform: translate(2px, 0);
}

/* ─────────────── steam account switcher ─────────────── */
.steam-account-btn {
  display: flex; align-items: center; gap: 6px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 20px; padding: 3px 10px 3px 3px;
  cursor: pointer; transition: background .12s, border-color .15s;
  -webkit-app-region: no-drag;
}
.steam-account-btn:hover { background: var(--surface-2); border-color: var(--border-strong); }
.steam-account-btn:active { transform: scale(.97); }
.steam-switch-avatar {
  width: 24px; height: 24px; border-radius: 50%;
  object-fit: cover; background: var(--surface-3);
}
.steam-switch-name {
  font-size: 11.5px; font-weight: 600; color: var(--text-dim);
  max-width: 80px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.steam-account-btn.is-switching {
  opacity: .6; pointer-events: none;
}
.steam-switch-overlay {
  position: fixed; inset: 0; z-index: 9999;
  background: rgba(6, 7, 12, .88);
  backdrop-filter: blur(12px);
  display: flex; align-items: center; justify-content: center;
  animation: ssOverlayIn .25s ease-out;
}
@keyframes ssOverlayIn { from { opacity: 0; } to { opacity: 1; } }
.steam-switch-overlay-content {
  display: flex; flex-direction: column; align-items: center; gap: 18px;
}
.steam-switch-spinner {
  width: 40px; height: 40px;
  border: 3px solid rgba(255,255,255,.12);
  border-top-color: var(--accent);
  border-radius: 50%;
  animation: ssSpinner .8s linear infinite;
}
@keyframes ssSpinner { to { transform: rotate(360deg); } }
.steam-switch-overlay-text {
  font-size: 16px; font-weight: 600; color: var(--text);
  letter-spacing: .3px;
}
.steam-switch-overlay-target {
  font-size: 13px; color: var(--text-mute);
}
.steam-account-wrap { position: relative; display: inline-flex; }
.steam-switch-caret { margin-left: 1px; opacity: .65; transition: transform .18s; flex: 0 0 auto; }
.steam-account-btn.menu-open .steam-switch-caret { transform: rotate(180deg); }
.steam-switch-menu {
  position: absolute; top: calc(100% + 6px); right: 0; z-index: 200;
  min-width: 210px; padding: 5px; display: flex; flex-direction: column; gap: 2px;
  background: var(--surface-2, #1b1f2c); border: 1px solid var(--border-strong, #333a4f);
  border-radius: 10px; box-shadow: 0 12px 32px rgba(0,0,0,.45);
}
.steam-switch-menu.hidden { display: none; }
.ssm-head { font-size: 10px; text-transform: uppercase; letter-spacing: .5px; color: var(--text-dim, #8b93a7); padding: 5px 8px 3px; }
.ssm-item { display: flex; align-items: center; gap: 9px; width: 100%; padding: 7px 8px; border: 0; border-radius: 7px; background: transparent; color: var(--text, #e7ecf3); font: inherit; font-size: 12.5px; text-align: left; cursor: pointer; }
.ssm-item:hover { background: var(--surface-3, rgba(255,255,255,.06)); }
.ssm-item.is-active { background: rgba(167,139,250,.12); }
.ssm-ava { width: 22px; height: 22px; border-radius: 5px; object-fit: cover; flex: 0 0 auto; }
.ssm-ava-ph { display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; color: #fff; background: linear-gradient(135deg, #7c3aed, #06b6d4); }
.ssm-name { flex: 1 1 auto; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ssm-check { color: #a78bfa; font-weight: 700; flex: 0 0 auto; }
.ssm-launch { margin-left: 6px; flex: 0 0 auto; opacity: .5; }
.ssm-item:hover .ssm-launch { opacity: 1; color: #a78bfa; }
.ssm-cur { font-size: 9px; text-transform: uppercase; letter-spacing: .4px; color: #6ee7b7; background: rgba(110,231,183,.14); padding: 1px 5px; border-radius: 5px; flex: 0 0 auto; }

/* The Updates panel (.activity-pop / .ahist-* / .activity-row / .activity-bar)
   moved out whole to renderer/updates.css on 2026-09-28, when it became a
   painted modal. Only the per-TILE overlay below stayed: it paints on the
   grid and keeps the app's cool palette. @keyframes indet stays here too —
   both the tile bar and the modal's bar use it. */
/* ─────────────── per-tile update overlay ─────────────── */
.tile.is-updating { box-shadow: 0 0 0 2px rgba(167,139,250,.55), var(--shadow-card); }
.tile-activity {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 8px 10px 9px;
  background: linear-gradient(180deg, rgba(10,11,16,0), rgba(10,11,16,.92));
  z-index: 4;
  pointer-events: none;
}
.tile-activity .ta-stage {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .4px;
  color: #c4b5fd;
  margin-bottom: 5px;
  text-shadow: 0 1px 2px rgba(0,0,0,.6);
}
.tile-activity.good .ta-stage { color: #6ee7b7; }
.tile-activity.bad  .ta-stage { color: #fca5a5; }
.tile-activity .ta-bar {
  height: 4px;
  background: rgba(255,255,255,.12);
  border-radius: 2px;
  overflow: hidden;
}
.tile-activity .ta-bar > i {
  display: block; height: 100%; width: 0%;
  background: var(--grad-cool);
  transition: width .2s;
}
.tile-activity.good .ta-bar > i { background: linear-gradient(90deg, #10b981, #06b6d4); }
.tile-activity.bad  .ta-bar > i { background: var(--grad-warm); }
.tile-activity .ta-bar > i.indet {
  width: 30%;
  background: linear-gradient(90deg, transparent, var(--accent), transparent);
  animation: indet 1.2s linear infinite;
}
@keyframes indet { from { transform: translateX(-120%); } to { transform: translateX(380%); } }

/* ─────────────── privacy dropdown ─────────────── */
.privacy-pop {
  position: fixed;
  top: 60px;
  right: 130px;
  width: 340px;
  max-height: 70vh;
  overflow-y: auto;
  background: var(--bg-2);
  border: 1px solid var(--border-strong);
  border-radius: 12px;
  box-shadow: var(--shadow-lift);
  z-index: 50;
  padding: 14px;
  -webkit-app-region: no-drag;
}
.privacy-pop-section { margin-bottom: 14px; }
.privacy-pop-section:last-child { margin-bottom: 0; }
.privacy-pop-scan-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  width: 100%; padding: 10px 16px;
  background: linear-gradient(135deg, var(--accent), #7c3aed);
  color: #fff; border: none; border-radius: 10px;
  font-size: 14px; font-weight: 700; letter-spacing: .3px;
  cursor: pointer; transition: filter .15s, transform .1s;
}
.privacy-pop-scan-btn:hover { filter: brightness(1.15); }
.privacy-pop-scan-btn:active { transform: scale(.98); }
.privacy-pop-scan-btn svg { opacity: .85; }
.privacy-pop-heading {
  margin: 0 0 6px;
  font-size: 11px; letter-spacing: 1.2px; text-transform: uppercase;
  color: var(--text-mute);
}
.privacy-pop-blacklist {
  max-height: 180px;
  overflow-y: auto;
  display: flex; flex-direction: column; gap: 4px;
}
.privacy-pop-bl-row {
  display: flex; align-items: center; gap: 8px;
  padding: 5px 8px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  font-size: 12.5px;
}
.privacy-pop-bl-row .bl-kind {
  font-size: 10px; text-transform: uppercase; letter-spacing: .5px;
  color: var(--text-mute); flex-shrink: 0;
}
.privacy-pop-bl-row .bl-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.privacy-pop-bl-row .bl-remove {
  flex-shrink: 0; cursor: pointer; color: var(--text-dim);
  background: none; border: none; font-size: 14px; padding: 0 2px; line-height: 1;
}
/* Was var(--danger) — a token that is declared nowhere in this app, so the
   parser dropped the declaration and this control never turned red on hover.
   --accent-hot is the destructive colour the rest of the app uses (see
   .btn.danger-ghost above). Same class of bug as the undeclared --accent-pink. */
.privacy-pop-bl-row .bl-remove:hover { color: var(--accent-hot); }
.privacy-pop-chevron {
  display: inline-block; margin-right: 4px;
  font-size: 13px; font-weight: 700; color: var(--text-dim);
}
.privacy-pop-list-btn {
  display: flex; align-items: center; gap: 0; width: 100%;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 8px; padding: 8px 12px;
  font-size: 12px; font-weight: 600; letter-spacing: .8px;
  text-transform: uppercase; color: var(--text-mute);
  cursor: pointer; transition: background .12s;
}
.privacy-pop-list-btn:hover { background: var(--surface-2); }

/* sub-panels (hidden games, blacklist) */
.privacy-sub-panel {
  position: fixed;
  top: 60px; right: 130px;
  width: 340px; max-height: 70vh;
  background: var(--bg-2);
  border: 1px solid var(--border-strong);
  border-radius: 12px;
  box-shadow: var(--shadow-lift);
  z-index: 51;
  padding: 14px;
  display: flex; flex-direction: column;
  -webkit-app-region: no-drag;
}
.privacy-sub-header {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 10px;
}
.privacy-sub-header h4 {
  margin: 0; font-size: 14px; font-weight: 700;
}
.privacy-sub-back {
  background: none; border: none; color: var(--text-dim);
  font-size: 16px; cursor: pointer; padding: 2px 6px; border-radius: 6px;
}
.privacy-sub-back:hover { background: var(--surface-2); color: var(--text); }
.privacy-sub-search {
  width: 100%; margin-bottom: 10px;
  padding: 6px 10px; font-size: 12.5px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 8px; color: inherit;
}
.privacy-sub-list {
  flex: 1; overflow-y: auto; max-height: 50vh;
  display: flex; flex-direction: column; gap: 4px;
}

.privacy-pop-sched-row {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.privacy-pop-sched-toggle {
  position: relative; width: 36px; height: 20px; flex-shrink: 0;
}
.privacy-pop-sched-toggle input { opacity: 0; width: 0; height: 0; }
.privacy-pop-sched-slider {
  position: absolute; inset: 0; cursor: pointer;
  background: var(--surface-3); border-radius: 10px;
  transition: background .2s;
}
.privacy-pop-sched-slider::before {
  content: ''; position: absolute; left: 2px; top: 2px;
  width: 16px; height: 16px; border-radius: 50%;
  background: var(--text-dim); transition: transform .2s, background .2s;
}
.privacy-pop-sched-toggle input:checked + .privacy-pop-sched-slider {
  background: var(--accent);
}
.privacy-pop-sched-toggle input:checked + .privacy-pop-sched-slider::before {
  transform: translateX(16px); background: #fff;
}
.privacy-pop-sched-label { font-size: 12.5px; color: var(--text-dim); }
.privacy-pop-sched-hours-wrap {
  display: flex; align-items: center;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 8px; padding: 0 8px 0 0; overflow: hidden;
}
.privacy-pop-sched-hours {
  width: 44px; border: none; background: transparent; color: inherit;
  font-size: 13px; font-weight: 600; text-align: center;
  padding: 4px 4px 4px 8px;
  -moz-appearance: textfield;
}
.privacy-pop-sched-hours::-webkit-inner-spin-button,
.privacy-pop-sched-hours::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
.privacy-pop-sched-unit {
  font-size: 11px; color: var(--text-mute); font-weight: 600;
  letter-spacing: .3px;
}

.updates-panel { max-width: 760px; }
.updates-list {
  display: flex; flex-direction: column; gap: 8px;
  max-height: 60vh; overflow-y: auto;
  margin-bottom: 14px;
}
.upd-row {
  display: flex; gap: 12px; align-items: center;
  padding: 10px 12px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.upd-row-main { flex: 1; min-width: 0; }
.upd-row-title { font-weight: 600; font-size: 14px; margin-bottom: 4px; }
.upd-row-meta {
  display: flex; flex-wrap: wrap; gap: 10px;
  font-size: 12px; color: var(--text-mute);
  align-items: center; margin-bottom: 4px;
}
.upd-row-ver { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.upd-row-from { color: var(--text-mute); }
.upd-row-to   { color: var(--accent-good); font-weight: 600; }
.upd-row-host {
  padding: 2px 7px; border-radius: 4px;
  background: rgba(124,58,237,.15); color: #c4b5fd;
  font-size: 11px; font-weight: 600;
}
.upd-row-flag {
  padding: 2px 7px; border-radius: 4px;
  background: rgba(239,68,68,.15); color: #fca5a5;
  font-size: 11px; font-weight: 600;
}
.upd-row-archive { font-size: 11px; color: var(--text-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.upd-row-archive code { background: transparent; padding: 0; }
.upd-row-actions { display: flex; gap: 6px; }
.upd-row-actions .icon-btn {
  width: 30px; height: 30px;
  display: flex; align-items: center; justify-content: center;
  background: transparent;
  border: 1px solid var(--border);
  color: var(--text-mute);
  border-radius: 6px;
  cursor: pointer;
}
.upd-row-actions .icon-btn:hover { background: var(--surface-3); color: var(--text); }
.updates-footer { display: flex; gap: 8px; justify-content: flex-end; }
.upd-auto-row {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px;
  background: linear-gradient(135deg, rgba(52,211,153,.08), rgba(167,139,250,.08));
  border: 1px solid rgba(52,211,153,.3);
  border-radius: 10px;
  margin-bottom: 12px;
}
.update-links { display: flex; flex-direction: column; gap: 6px; margin-bottom: 18px; }
.upd-link {
  display: grid;
  grid-template-columns: 160px auto 1fr;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  text-align: left;
  cursor: pointer;
  color: var(--text);
  transition: border-color .12s, background .12s;
}
.upd-link:hover { background: var(--surface-2); border-color: var(--accent); }
.upd-link.tone-good { border-left: 3px solid #34d399; }
.upd-link.tone-mid  { border-left: 3px solid #fbbf24; }
.upd-link.tone-warn { border-left: 3px solid #ef4444; }
.upd-host { font-weight: 700; font-size: 13px; }
.upd-platform {
  font-size: 11px;
  color: var(--text-mute);
  background: var(--surface-3);
  padding: 2px 6px;
  border-radius: 4px;
}
.upd-url {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px;
  color: var(--text-mute);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.update-actions {
  display: flex; align-items: center; gap: 10px;
  margin: 10px 0 14px;
}
.update-progress {
  display: flex; align-items: center; gap: 10px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px 12px;
  margin-bottom: 14px;
  font-size: 13px;
}
.update-progress .bar {
  flex: 1; height: 4px; background: var(--surface-3); border-radius: 2px; overflow: hidden;
}
.update-progress .bar > i {
  display: block; height: 100%;
  background: var(--grad-cool);
  animation: shimmer 1.4s linear infinite;
  background-size: 200% 100%;
}
@keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.update-footer { display: flex; justify-content: flex-end; gap: 10px; }
.link-btn {
  background: none; border: 0; color: var(--accent); cursor: pointer; padding: 0;
  font: inherit; text-decoration: underline;
}

/* generic disabled state for buttons (was missing) */
.btn:disabled, .btn[disabled] { opacity: .5; cursor: default; pointer-events: none; }

/* ═══════════════ Automatic background updates (web tier) ═══════════════ */
.sched-section {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--bg-2);
  padding: 14px;
  margin: 4px 0 20px;
}
.sched-head { display: flex; align-items: flex-start; gap: 12px; justify-content: space-between; }
.sched-head-info { display: flex; align-items: flex-start; gap: 10px; min-width: 0; }
.sched-state-dot {
  width: 10px; height: 10px; border-radius: 50%; margin-top: 5px; flex: none;
  background: var(--text-mute); box-shadow: 0 0 0 3px transparent;
  transition: background .2s, box-shadow .2s;
}
.sched-state-dot.is-on { background: var(--accent-good); box-shadow: 0 0 0 3px rgba(16,185,129,.16); }
.sched-state-dot.is-off { background: var(--text-mute); }
.sched-state-dot.is-running { background: var(--accent-2); box-shadow: 0 0 0 3px rgba(6,182,212,.2); animation: schedPulse 1.3s ease-in-out infinite; }
@keyframes schedPulse { 0%,100% { box-shadow: 0 0 0 3px rgba(6,182,212,.28); } 50% { box-shadow: 0 0 0 6px rgba(6,182,212,.05); } }
.sched-head-text { min-width: 0; }
.sched-head-title { font-weight: 700; font-size: 15px; display: flex; align-items: center; gap: 8px; }
.sched-head-sub { font-size: 12.5px; color: var(--text-dim); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 46ch; }
.sched-pill {
  font-size: 10.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 999px; color: var(--text-mute);
  background: var(--surface-3); border: 1px solid var(--border);
}
.sched-pill.on  { color: var(--accent-good); background: rgba(16,185,129,.12); border-color: rgba(16,185,129,.3); }
.sched-pill.off { color: var(--text-mute); }
.sched-pill.run { color: var(--accent-2); background: rgba(6,182,212,.12); border-color: rgba(6,182,212,.35); }
.sched-head-actions { display: flex; gap: 8px; flex: none; }

/* settings drawer */
.sched-settings {
  margin-top: 12px; padding: 12px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm);
  display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 8px 18px;
}
.sched-settings[hidden] { display: none; }
.sched-set-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  font-size: 13px; color: var(--text-dim); min-height: 30px;
}
.sched-set-row > span:first-child { color: var(--text); }
.sched-set-row.toggle { cursor: pointer; }
.sched-set-inline { display: inline-flex; align-items: center; gap: 6px; color: var(--text-mute); }
.sched-settings select,
.sched-settings input[type="number"] {
  background: var(--surface-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 6px; padding: 5px 8px; font: inherit; font-size: 13px;
}
.sched-settings input[type="number"] { width: 68px; text-align: right; }
.sched-settings select { max-width: 220px; }
.sched-settings select:focus,
.sched-settings input:focus { outline: none; border-color: var(--accent); }
.sched-settings input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--accent); cursor: pointer; }

/* live current-run panel */
.sched-live {
  margin-top: 12px; padding: 12px;
  background: linear-gradient(135deg, rgba(6,182,212,.08), rgba(167,139,250,.06));
  border: 1px solid rgba(6,182,212,.28); border-radius: var(--radius-sm);
}
.sched-live-top { display: flex; align-items: center; gap: 10px; }
.sched-live-title { font-weight: 600; font-size: 13.5px; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sched-live-phase { font-size: 12px; color: var(--accent-2); flex: none; }
.sched-live-top .btn { flex: none; }
.sched-live-bar { height: 6px; background: var(--surface-3); border-radius: 3px; overflow: hidden; margin: 9px 0 4px; }
.sched-live-bar > i { display: block; height: 100%; width: 0; background: var(--grad-cool); border-radius: 3px; transition: width .25s ease; }
.sched-live-bar.indet > i { width: 40%; animation: schedIndet 1.15s ease-in-out infinite; }
@keyframes schedIndet { 0% { margin-left: -40%; } 100% { margin-left: 100%; } }
.sched-live-bytes { font-size: 11px; color: var(--text-mute); font-variant-numeric: tabular-nums; }
.sched-live-counts { display: flex; flex-wrap: wrap; gap: 12px; font-size: 12px; color: var(--text-mute); margin-top: 6px; font-variant-numeric: tabular-nums; }
.sched-live-counts .good { color: var(--accent-good); }
.sched-live-counts .warn { color: var(--accent-warm); }
.sched-live-counts .bad  { color: var(--accent-hot); }

/* last-run summary chips */
.sched-summary { margin-top: 12px; }
.sched-summary-label { font-size: 11.5px; color: var(--text-mute); margin-bottom: 6px; }
.sched-summary-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.sched-chip {
  font-size: 12px; font-weight: 600; padding: 3px 10px; border-radius: 999px;
  background: var(--surface-2); border: 1px solid var(--border); color: var(--text-dim);
  font-variant-numeric: tabular-nums;
}
.sched-chip.good { color: var(--accent-good); background: rgba(16,185,129,.1); border-color: rgba(16,185,129,.28); }
.sched-chip.warn { color: var(--accent-warm); background: rgba(245,158,11,.1); border-color: rgba(245,158,11,.28); }
.sched-chip.bad  { color: var(--accent-hot); background: rgba(239,68,68,.1); border-color: rgba(239,68,68,.28); }
.sched-chip.zero { opacity: .5; }

/* group headers + counts + search */
.sched-group-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 18px 0 8px; }
.sched-group-h { font-size: 13px; font-weight: 700; color: var(--text); margin: 0; display: flex; align-items: center; gap: 8px; text-transform: uppercase; letter-spacing: .03em; }
.sched-count { font-size: 11px; font-weight: 700; color: var(--text-mute); background: var(--surface-3); border-radius: 999px; padding: 1px 8px; }
.sched-search {
  flex: none; width: 200px; max-width: 46%;
  background: var(--surface-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 6px 10px; font: inherit; font-size: 13px;
}
.sched-search:focus { outline: none; border-color: var(--accent); }
.sched-search::placeholder { color: var(--text-mute); }

/* dense scroll lists */
.sched-thin { gap: 6px; }
.sched-games-list { max-height: 44vh; }
#sched-manual-list { max-height: 30vh; }
.sched-thin .upd-row { padding: 8px 11px; }
.sched-empty { padding: 14px; text-align: center; font-size: 13px; }

/* status badges + inline reason + timestamp on rows */
.sched-badge {
  font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px;
  background: var(--surface-3); color: var(--text-dim); border: 1px solid var(--border); flex: none;
}
.sched-badge.good { color: var(--accent-good); background: rgba(16,185,129,.12); border-color: rgba(16,185,129,.3); }
.sched-badge.warn { color: var(--accent-warm); background: rgba(245,158,11,.12); border-color: rgba(245,158,11,.3); }
.sched-badge.bad  { color: var(--accent-hot); background: rgba(239,68,68,.12); border-color: rgba(239,68,68,.3); }
.sched-badge.mute { color: var(--text-mute); }
.sched-reason { color: var(--text-mute); font-size: 12px; }
.sched-reason-detail {
  color: var(--text-mute); font-size: 11px; margin-top: 3px; opacity: .8;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%;
}
.upd-row-when { color: var(--text-mute); font-size: 11.5px; margin-left: auto; }

/* engine pill in tile top-left — only visible on hover */
.tile .engine-pill {
  opacity: 0;
  transition: opacity .15s;
}
.tile:hover .engine-pill { opacity: 1; }

.engine-pill {
  position: absolute;
  top: 10px; left: 10px;
  padding: 3px 8px;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: .6px;
  text-transform: uppercase;
  border-radius: 4px;
  background: rgba(0,0,0,.72);
  color: var(--text);
  border: 1px solid rgba(255,255,255,.1);
  z-index: 3;
}
.engine-pill[data-engine="renpy"]    { color: #f0a3ff; border-color: rgba(240,163,255,.35); }
.engine-pill[data-engine="godot"]    { color: #75e3ff; border-color: rgba(117,227,255,.35); }
.engine-pill[data-engine="unity"]    { color: #ffffff; border-color: rgba(255,255,255,.25); }
.engine-pill[data-engine="rpgmaker"] { color: #ffd166; border-color: rgba(255,209,102,.35); }
.engine-pill[data-engine="html"]     { color: #a0e8af; border-color: rgba(160,232,175,.35); }
.engine-pill[data-engine="java"]     { color: #ffa07a; border-color: rgba(255,160,122,.35); }

.tile-info {
  /* Position handled by .tile-bl wrapper */
  width: 100%;
  max-width: 100%;
  min-width: 0;
  padding: 4px 10px 5px;
  background: rgba(0,0,0,.82);
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 8px;
  text-align: left;
  opacity: 0;
  visibility: hidden;
  transition: opacity .15s, visibility 0s .15s;
}
.tile:hover .tile-info { opacity: 1; visibility: visible; transition: opacity .15s, visibility 0s; }
.tile:hover .tile-info { opacity: 1; }

.tile-title-row {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 6px;
  width: 100%;
  min-width: 0;
  overflow: hidden;
}
.tile-exe-icon {
  width: 16px; height: 16px;
  border-radius: 3px;
  flex-shrink: 0;
}
.tile-title { text-align: left; }
.tile-sub   { justify-content: flex-start; }
.tile-title {
  font-weight: 600;
  font-size: 12px;
  color: #fff;
  line-height: 1.25;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  letter-spacing: .1px;
  min-width: 0;
  flex: 1 1 auto;
  word-break: break-word;
  overflow-wrap: anywhere;
}
.tile-sub {
  font-size: 10px;
  color: #cdd3df;
  margin-top: 2px;
  display: flex; gap: 6px; align-items: center;
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  transition: max-height .15s, opacity .15s, margin-top .15s;
}
.tile:hover .tile-sub {
  max-height: 16px;
  opacity: 1;
  margin-top: 3px;
}

.empty {
  text-align: center;
  padding: 80px 20px;
  color: var(--text-dim);
}
.empty h2 { color: var(--text); }
.empty-jumps { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 16px; }
.empty-jump { display: inline-flex; align-items: center; gap: 7px; }
.empty-jump img { width: 18px; height: 18px; object-fit: contain; }

/* ─────────────── detail sheet ─────────────── */
.detail {
  position: fixed; inset: 0; z-index: 100;
}
.detail-scrim {
  position: absolute; inset: 0;
  background: rgba(0,0,0,.6);
  backdrop-filter: blur(8px);
  animation: fadeIn .2s;
}
.detail-panel {
  position: absolute;
  top: 0; right: 0; bottom: 0;
  width: min(720px, 96vw);
  background: var(--bg-2);
  border-left: 1px solid var(--border);
  overflow-y: auto;
  box-shadow: -40px 0 80px rgba(0,0,0,.6);
  animation: slideIn .25s cubic-bezier(.2,.7,.3,1);
}
.detail-close {
  position: absolute;
  top: 14px; right: 14px;
  width: 36px; height: 36px;
  background: rgba(0,0,0,.4);
  border: 1px solid var(--border);
  border-radius: 8px;
  font-size: 22px; line-height: 1; color: var(--text);
  cursor: pointer;
  z-index: 5;
  backdrop-filter: blur(8px);
}
.detail-close:hover { background: rgba(0,0,0,.6); }

.detail-hero {
  position: relative;
  height: 320px;
  overflow: hidden;
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
}
.detail-hero img {
  position: absolute;
  /* width / height / left / top inline via applyCoverGeometry */
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 50% 30%;
  filter: brightness(.7);
  cursor: grab;
  user-select: none;
  -webkit-user-drag: none;
  touch-action: none;
}
.detail-hero img.dragging { cursor: grabbing; filter: brightness(.85); }
.detail-hero-fade {
  position: absolute; inset: 0;
  background: linear-gradient(to top, var(--bg-2) 0%, transparent 60%);
}
.detail-hero-content {
  position: absolute;
  left: 28px; right: 28px; bottom: 22px;
}
.detail-meta { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 10px; }
.detail-meta .engine-pill, .detail-meta .version-badge {
  position: static;
}
.detail-hero-content h1 {
  margin: 0;
  font-size: 30px;
  font-weight: 800;
  letter-spacing: -.5px;
  color: #fff;
  text-shadow: 0 2px 12px rgba(0,0,0,.6);
  outline: none;
  border-bottom: 1px dashed transparent;
  padding-bottom: 2px;
  display: inline-block;
}
.detail-hero-content h1:focus { border-bottom-color: rgba(167,139,250,.6); }
.folder-line {
  margin: 6px 0 0;
  font-family: ui-monospace, monospace;
  font-size: 12px;
  color: var(--text-mute);
}

/* F95 latest version row */
.update-row {
  display: inline-flex; align-items: center; gap: 8px;
  margin-top: 10px;
  padding: 6px 12px;
  background: rgba(0,0,0,.35);
  backdrop-filter: blur(8px);
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 8px;
  font-size: 12px;
}
.update-row .update-label {
  color: var(--text-mute);
  font-size: 11px;
  letter-spacing: .8px;
  text-transform: uppercase;
  font-weight: 600;
}
.update-row .update-version {
  font-family: ui-monospace, monospace;
  font-weight: 700;
  color: var(--text);
}
.update-row .update-state.outdated {
  color: var(--accent-warm);
  font-weight: 600;
}
.update-row .update-state.uptodate {
  color: var(--accent-good);
  font-weight: 600;
}

/* "Last change" — the newest history entry, under the update row. Opens History. */
.history-line {
  display: flex; align-items: baseline; gap: 10px;
  max-width: 100%;
  margin-top: 8px;
  padding: 4px 0;
  background: none; border: 0;
  font: inherit; font-size: 12px;
  color: var(--text-dim);
  cursor: pointer;
  text-align: left;
}
.history-line.hidden { display: none; }
.history-line .hl-label {
  flex-shrink: 0;
  color: var(--text-mute);
  font-size: 11px; font-weight: 600;
  letter-spacing: .8px; text-transform: uppercase;
}
.history-line .hl-text {
  min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: var(--text);
}
.history-line .hl-when { flex-shrink: 0; white-space: nowrap; font-variant-numeric: tabular-nums; }
.history-line:hover .hl-text,
.history-line:focus-visible .hl-text { text-decoration: underline; text-underline-offset: 3px; }
.history-line:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; }

/* History section — a ledger: one row per event, divided by rules, not boxed. */
.history-section { scroll-margin-top: 16px; }
.history-section.hidden { display: none; }
#d-history-wrap.hidden { display: none; }
.history-list {
  list-style: none; margin: 0; padding: 0;
  border-top: 1px solid var(--border);
}
.hist-row {
  --rail: var(--text-mute);
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr);
  gap: 16px;
  padding: 10px 0 10px 12px;
  border-bottom: 1px solid var(--border);
  box-shadow: inset 2px 0 0 var(--rail);
  animation: hist-in .32s cubic-bezier(.2, .7, .2, 1) both;
  animation-delay: calc(var(--i, 0) * 40ms);
}
.hist-row.k-installed, .hist-row.k-grabbed, .hist-row.k-added { --rail: var(--accent-good); }
.hist-row.k-updated, .hist-row.k-reinstalled { --rail: var(--accent); }
.hist-row.k-update-failed, .hist-row.k-removed { --rail: var(--accent-warm); }
.hist-row.k-note, .hist-row.k-files { --rail: var(--accent-2); }
.hist-when {
  display: flex; flex-direction: column; gap: 2px;
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.hist-when .hist-day { color: var(--text); font-weight: 600; }
.hist-when .hist-clock { color: var(--text-mute); }
.hist-body { min-width: 0; }
.hist-what { display: flex; align-items: baseline; gap: 10px; min-width: 0; font-size: 13px; color: var(--text); }
.hist-kind {
  flex-shrink: 0;
  color: var(--rail);
  font-size: 10.5px; font-weight: 700;
  letter-spacing: .8px; text-transform: uppercase;
  white-space: nowrap;
}
.hist-text { min-width: 0; overflow-wrap: anywhere; text-wrap: pretty; }
.hist-meta {
  margin-top: 3px;
  font-size: 12px;
  color: var(--text-mute);
  overflow-wrap: anywhere;
}
.hist-detail {
  margin-top: 4px;
  font-family: ui-monospace, monospace;
  font-size: 11.5px;
  color: var(--text-dim);
  overflow-wrap: anywhere;
}
.hist-empty { padding: 12px 0; font-size: 13px; color: var(--text-mute); border-bottom: 1px solid var(--border); }
.history-more {
  margin-top: 8px;
  padding: 6px 0;
  background: none; border: 0;
  font: inherit; font-size: 12px; font-weight: 600;
  color: var(--accent);
  cursor: pointer;
}
.history-more.hidden { display: none; }
.history-more:hover { text-decoration: underline; text-underline-offset: 3px; }
.history-more:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; }
.history-section.flash .section-toggle { animation: hist-flash 1.1s ease-out; }
@keyframes hist-in { from { opacity: 0; transform: translateX(-6px); } to { opacity: 1; transform: none; } }
@keyframes hist-flash { 0%, 30% { color: var(--accent); } 100% { color: var(--text-mute); } }
@media (max-width: 560px) {
  .hist-row { grid-template-columns: minmax(0, 1fr); gap: 4px; }
  .hist-when { flex-direction: row; gap: 8px; }
  .history-line .hl-when { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .hist-row, .history-section.flash .section-toggle { animation: none; }
}

.detail-actions {
  display: flex; gap: 8px; flex-wrap: wrap;
  padding: 18px 28px;
  border-bottom: 1px solid var(--border);
}

.detail-body { padding: 24px 28px 40px; }
.detail-body section { margin-bottom: 28px; }
.detail-body h2 {
  font-size: 11px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--text-mute);
  font-weight: 600;
  margin: 0 0 10px;
}

/* Sidebar collapsible sections (Server / Library root / Show). Header reuses
   the same .section-toggle pill as detail-panel sections so chevron + caps
   look identical. */
.sidebar .collapsible .section-toggle {
  margin-bottom: 0;
}
.sidebar .collapsible .collapsible-body {
  margin-top: 10px;
}
.sidebar .collapsible .collapsible-body.hidden {
  display: none;
}

/* section-level collapsible header (the outer chevron on Saves, Versions, etc.) */
.section-toggle {
  width: 100%;
  display: flex; justify-content: space-between; align-items: center;
  background: none; border: 0;
  padding: 0;
  margin: 0 0 10px;
  font: inherit;
  font-size: 11px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--text-mute);
  font-weight: 600;
  cursor: pointer;
}
.section-toggle:hover { color: var(--text); }
.section-toggle .chev {
  font-size: 13px;
  color: var(--text-mute);
  transition: transform .15s;
}
.section-toggle.open .chev { transform: rotate(90deg); }
.section-count {
  color: var(--text-mute);
  font-variant-numeric: tabular-nums;
  margin-left: 4px;
  font-weight: 500;
}

/* save list — chevron toggle for non-existing candidate paths */
.save-toggle {
  display: block;
  width: 100%;
  text-align: left;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 8px 12px;
  color: var(--text-dim);
  font: inherit;
  font-size: 12px;
  cursor: pointer;
  margin-top: 6px;
}
.save-toggle:hover { background: var(--surface-2); color: var(--text); }
.save-others { margin-top: 6px; display: flex; flex-direction: column; gap: 8px; }

/* save list */
.save-list { display: flex; flex-direction: column; gap: 8px; }
.save-row {
  display: flex; gap: 10px; align-items: center;
  padding: 12px 14px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.save-row.exists { border-color: rgba(16,185,129,.35); background: rgba(16,185,129,.05); }
.save-row .save-info { flex: 1; min-width: 0; }
.save-row .save-label {
  font-size: 11px;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: var(--text-mute);
  font-weight: 600;
  display: flex; align-items: center; gap: 6px;
}
.save-row.exists .save-label { color: var(--accent-good); }
.save-row.exists .save-label::before {
  content: '';
  display: inline-block;
  width: 6px; height: 6px;
  background: var(--accent-good);
  border-radius: 50%;
  box-shadow: 0 0 8px var(--accent-good);
}
.save-row .save-path {
  font-family: ui-monospace, monospace;
  font-size: 12px;
  color: var(--text);
  word-break: break-all;
  margin-top: 3px;
}
.save-row:not(.exists) .save-path { color: var(--text-mute); }
.save-row .save-actions { display: flex; gap: 6px; flex-shrink: 0; }
.save-row .icon-btn {
  width: 32px; height: 32px;
  display: flex; align-items: center; justify-content: center;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 6px; cursor: pointer;
  color: var(--text-dim);
  transition: all .12s;
}
.save-row .icon-btn:hover { background: var(--surface-3); color: var(--text); border-color: var(--border-strong); }
.save-row.exists .icon-btn:hover { color: var(--accent-good); border-color: rgba(16,185,129,.4); }

/* tag editor */
.tag-editor {
  display: flex; flex-wrap: wrap; gap: 6px;
  padding: 8px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  min-height: 44px;
}
.tag-editor input {
  flex: 1; min-width: 140px;
  background: none; border: 0; outline: none;
  color: var(--text);
}
.tag-pill {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 8px;
  background: rgba(167,139,250,.15);
  color: #d6c9ff;
  border: 1px solid rgba(167,139,250,.3);
  border-radius: 999px;
  font-size: 12px;
}
.tag-pill button {
  background: none; border: 0; color: inherit; opacity: .6;
  cursor: pointer; padding: 0 0 0 2px; font-size: 14px; line-height: 1;
}
.tag-pill button:hover { opacity: 1; }

/* versions list */
.versions-section { padding: 0 28px 4px; }
.versions-section h2 {
  font-size: 11px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--text-mute);
  font-weight: 600;
  margin: 0 0 10px;
}
.versions-list { display: flex; flex-direction: column; gap: 6px; }
.version-row {
  display: flex; gap: 10px; align-items: center;
  padding: 8px 12px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  cursor: pointer;
  transition: border-color .12s, background .12s;
}
.version-row.active {
  border-color: rgba(167,139,250,.5);
  background: rgba(167,139,250,.08);
}
.version-row:hover { border-color: var(--border-strong); }
.version-row .v-version {
  font-family: ui-monospace, monospace;
  font-weight: 700;
  font-size: 13px;
  min-width: 92px;
  color: var(--text);
}
.version-row .v-folder {
  flex: 1;
  font-family: ui-monospace, monospace;
  font-size: 11px;
  color: var(--text-mute);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.version-row .v-play,
.version-row .v-open {
  width: 32px; height: 32px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 6px;
  cursor: pointer;
  flex-shrink: 0;
}
.version-row .v-play {
  background: var(--grad-cool);
  border: 0;
  color: white;
}
.version-row .v-play:hover { filter: brightness(1.1); }
.version-row .v-open {
  background: var(--surface-2);
  border: 1px solid var(--border);
  color: var(--text-dim);
}
.version-row .v-open:hover {
  background: var(--surface-3);
  color: var(--text);
  border-color: var(--border-strong);
}

/* url fields */
.url-fields { display: flex; flex-direction: column; gap: 8px; }
.url-row {
  display: flex; gap: 8px; align-items: center;
  padding: 6px 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
}
.url-row .url-label {
  min-width: 64px;
  font-size: 11px;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: var(--text-mute);
  font-weight: 600;
}
.url-row[data-which="f95"]     .url-label { color: #9ad0ff; }
.url-row[data-which="patreon"] .url-label { color: #ff8a65; }
.url-row[data-which="itch"]    .url-label { color: #ff4f7b; }
.url-row input {
  flex: 1;
  min-width: 0;
  background: none; border: 0; outline: none;
  color: var(--text);
  font-family: ui-monospace, monospace;
  font-size: 12px;
}
.url-row input::placeholder { color: var(--text-mute); }
.url-row .icon-btn {
  width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text-dim);
  cursor: pointer;
  font-size: 14px;
  flex-shrink: 0;
}
.url-row .icon-btn:hover { background: var(--surface-3); color: var(--text); }

/* notes */
.detail-body textarea {
  width: 100%;
  min-height: 88px;
  resize: vertical;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 12px;
  color: var(--text);
  font: inherit;
  font-size: 13px;
}
.detail-body textarea:focus {
  outline: none;
  border-color: rgba(167,139,250,.5);
  box-shadow: 0 0 0 3px rgba(167,139,250,.12);
}

/* meta dl */
.meta-section dl {
  display: grid;
  grid-template-columns: 130px 1fr;
  gap: 6px 14px;
  margin: 0;
  font-size: 13px;
}
.meta-section dt {
  color: var(--text-mute);
  font-weight: 500;
}
.meta-section dd {
  margin: 0;
  color: var(--text);
  word-break: break-word;
}
.meta-section dd code {
  font-family: ui-monospace, monospace;
  font-size: 12px;
  color: var(--text-dim);
}

/* ─────────────── modal ─────────────── */
.modal { position: fixed; inset: 0; z-index: 200; }
.modal-scrim {
  position: absolute; inset: 0;
  background: rgba(0,0,0,.7);
  backdrop-filter: blur(6px);
}
.modal-panel {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: min(540px, 92vw);
  max-height: 90vh;
  overflow-y: auto;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 28px;
  box-shadow: 0 24px 80px rgba(0,0,0,.6);
}
/* Modal entrance — a soft scrim fade + a subtle scale/fade so panels ease in
   instead of popping (matches the ~150-200ms transition rhythm used app-wide).
   Only while shown; `to` matches the base transform so there's no post-anim jump. */
@keyframes modalScrimIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes modalPanelIn {
  from { opacity: 0; transform: translate(-50%, -48%) scale(.975); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.modal:not(.hidden) > .modal-scrim { animation: modalScrimIn 150ms ease-out; }
.modal:not(.hidden) > .modal-panel { animation: modalPanelIn 180ms cubic-bezier(.2, .8, .2, 1); }
@media (prefers-reduced-motion: reduce) {
  .modal:not(.hidden) > .modal-scrim,
  .modal:not(.hidden) > .modal-panel { animation: none; }
}
.modal-panel h2 { margin: 0 0 18px; font-size: 22px; }
.modal-panel h3 {
  margin: 0 0 8px;
  font-size: 11px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--text-mute);
}
.modal-panel section { margin-bottom: 24px; }

/* ─────────────── settings redesign ─────────────── */
.settings-panel {
  width: min(780px, 94vw) !important;
  max-height: 85vh !important;
  padding: 0 !important;
  overflow: hidden !important;
}
.settings-layout {
  display: flex; height: 100%; max-height: 85vh;
}
.settings-nav {
  width: 180px; flex-shrink: 0;
  background: rgba(0,0,0,.15);
  border-right: 1px solid var(--border);
  padding: 24px 0;
  display: flex; flex-direction: column;
}
.settings-nav h2 {
  margin: 0 0 16px; padding: 0 20px;
  font-size: 18px; font-weight: 700;
}
.settings-nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 20px;
  font-size: 13px; font-weight: 500;
  color: var(--text-dim);
  cursor: pointer; transition: background .1s, color .1s;
  text-decoration: none;
  border-left: 3px solid transparent;
}
.settings-nav-item:hover { background: rgba(255,255,255,.04); color: var(--text); }
.settings-nav-item.is-active {
  color: var(--text);
  background: rgba(124,58,237,.08);
  border-left-color: var(--accent);
  font-weight: 600;
}
.settings-nav-item svg { opacity: .6; flex-shrink: 0; }
.settings-nav-item.is-active svg { opacity: 1; }
.settings-content {
  flex: 1; overflow-y: auto; padding: 28px 32px;
}
.settings-category { margin-bottom: 32px; }
.settings-category:last-child { margin-bottom: 0; }
.settings-cat-title {
  font-size: 11px !important; letter-spacing: 1.4px;
  text-transform: uppercase; color: var(--text-mute);
  margin: 0 0 14px !important;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border);
}
.settings-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 16px 18px;
  margin-bottom: 12px;
}
.settings-card:last-child { margin-bottom: 0; }
.settings-card-header {
  font-size: 14px; font-weight: 600;
  margin-bottom: 6px;
}
.settings-card .muted { font-size: 12px; color: var(--text-dim); margin-bottom: 10px; }
.settings-card label { margin-bottom: 8px; }
.settings-card .btn { margin-top: 2px; }
/* Streaming card: the pair button and the sentence that reports on it share one row, and the
   sentence wraps under the button on a narrow panel instead of squeezing beside it. */
.moon-pair { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin-top: 14px; }
.moon-pair .btn { margin-top: 0; min-height: 44px; flex: none; }
.settings-card .moon-pair .muted { margin: 0; flex: 1 1 220px; transition: color .2s ease; }
.moon-pair[data-state="waiting"] .btn { pointer-events: none; opacity: .6; }
.settings-card .moon-pair[data-state="paired"] .muted { color: var(--text); }
.settings-card .moon-pair[data-state="failed"] .muted { color: var(--accent-hot); }
.moon-pair.owner-only { display: none; }
/* Two wordings of the same card: a browser needs the helper, the Hearth app does not. */
#moonlight-pref-card .moon-in-shell { display: none; }
#moonlight-pref-card.in-shell .moon-in-shell { display: revert; }
#moonlight-pref-card.in-shell .moon-needs-helper { display: none; }
/* The Moonlight hand-off toast (mlHandoff) and the shell's one-line progress note (moonNote).
   These classes were written by app.js for months with no rule behind them, so the toast was
   bare text appended under the page. Bottom-right, above the grid, below a modal's scrim. */
.ml-toast {
  position: fixed; right: var(--page-gutter); bottom: var(--page-gutter); z-index: 900;
  width: min(380px, calc(100vw - 2 * var(--page-gutter)));
  padding: 14px 16px;
  background: var(--surface); color: var(--text);
  border: 1px solid var(--border-strong); border-radius: var(--radius);
  box-shadow: var(--shadow-card);
  font-size: 13px; line-height: 1.45;
  opacity: 0; transform: translateY(10px);
  transition: opacity .18s ease, transform .22s cubic-bezier(.2, .8, .2, 1);
}
.ml-toast.in { opacity: 1; transform: none; }
.ml-toast-title { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 14px; margin-bottom: 4px; }
.ml-toast-body { color: var(--text-dim); }
.ml-toast-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.ml-toast-actions button {
  min-height: 36px; padding: 0 14px; cursor: pointer;
  background: var(--surface-2, var(--bg)); color: var(--text);
  border: 1px solid var(--border); border-radius: var(--radius-sm); font: inherit;
}
.ml-toast-actions button:hover { border-color: var(--border-strong); }
.ml-toast-actions button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* The progress note stacks above the hand-off toast when both are up. */
.ml-toast.ml-toast-note { bottom: calc(var(--page-gutter) + 132px); padding: 10px 14px; }
.ml-toast.ml-toast-note:only-of-type, body:not(:has(.ml-toast:not(.ml-toast-note))) .ml-toast.ml-toast-note { bottom: var(--page-gutter); }
@media (prefers-reduced-motion: reduce) { .ml-toast { transition: none; transform: none; } }
@media (prefers-reduced-motion: reduce) { .settings-card .moon-pair .muted { transition: none; } }
.modal-panel .muted { color: var(--text-dim); font-size: 12px; }
.modal-panel label {
  display: flex; flex-direction: column; gap: 4px;
  margin-bottom: 12px;
  font-size: 12px;
  color: var(--text-dim);
}
/* A .show-chip inside a modal is an inline row chip (icon + text), not a stacked
   input-field label — undo the column layout the generic rule above forces. */
.modal-panel label.show-chip {
  display: inline-flex; flex-direction: row; align-items: center; gap: 10px;
  width: auto; align-self: flex-start;
  margin-bottom: 0;
  font-size: 13px;
}
.modal-panel input {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 8px 10px;
  color: var(--text);
  font: inherit;
}
.modal-panel code {
  display: block;
  font-size: 12px;
  color: var(--text-dim);
  background: var(--surface);
  padding: 8px 10px;
  border-radius: 6px;
  margin-bottom: 8px;
  word-break: break-all;
}

/* ─── AI content-check section (media settings modal) ─── */
.ai-check-section {
  margin-top: 22px;
  padding-top: 20px;
  border-top: 1px solid var(--border);
}
.ai-check-section.hidden { display: none; }
.ai-check-section h3 { margin-bottom: 10px; }
/* The toggle is an inline checkbox row, not a stacked input field — undo the
   column layout `.modal-panel label` forces, and strip the input-box styling
   off the checkbox itself. */
.modal-panel label.ai-check-toggle {
  flex-direction: row;
  align-items: center;
  gap: 8px;
  margin-bottom: 16px;
  font-size: 13px;
  color: var(--text);
  cursor: pointer;
}
.ai-check-section label.ai-check-toggle input[type="checkbox"] {
  width: 16px; height: 16px;
  margin: 0; padding: 0;
  background: none; border: 0;
  accent-color: var(--accent);
  flex: none;
}
.ai-check-section select {
  width: 100%;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 8px 10px;
  color: var(--text);
  font: inherit;
  transition: border-color .12s;
}
.ai-check-section select:hover { border-color: var(--border-strong); }
.ai-check-section select:focus { outline: none; border-color: var(--accent); }
.ai-check-section input:focus { outline: none; border-color: var(--accent); }

/* crop modal — sized exactly like a grid tile so what you see is what you get */
.crop-panel { width: min(560px, 96vw); }
.crop-panel h2 { margin: 0 0 4px; font-size: 22px; }
.crop-panel .muted { margin: 0 0 16px; }
.crop-stage {
  display: flex; flex-direction: column; gap: 8px;
  margin-bottom: 18px;
}
.crop-frame {
  position: relative;
  width: 100%;
  aspect-ratio: 3 / 2;             /* matches tile aspect */
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  cursor: grab;
  user-select: none;
}
.crop-frame.dragging { cursor: grabbing; }
.crop-frame { touch-action: none; }
.crop-frame:focus-visible { outline: 2px solid var(--accent-warm); outline-offset: 3px; }
.crop-actions .btn { min-width: 44px; min-height: 44px; }
.crop-hints { flex-wrap: wrap; }
#crop-error:empty { display: none; }
#crop-error { color: var(--text); margin: 12px 0 0; }
.crop-frame img {
  position: absolute;
  /* width / height / left / top inline via applyCoverGeometry */
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 50% 30%;
  display: block;
  pointer-events: none;
  -webkit-user-drag: none;
}
.crop-hints {
  display: flex;
  gap: 14px;
  font-size: 11px;
  color: var(--text-mute);
  font-family: ui-monospace, monospace;
  padding: 0 4px;
}
.crop-hints span:last-child { margin-left: auto; color: var(--text); font-weight: 600; }
.crop-actions { display: flex; gap: 8px; align-items: center; }

/* cleanup modal */
.cleanup-panel { width: min(720px, 94vw); }
.cleanup-list {
  max-height: 50vh;
  overflow-y: auto;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 6px;
  margin-bottom: 14px;
}
.cleanup-row {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 10px;
  align-items: center;
  padding: 6px 10px;
  font-family: ui-monospace, monospace;
  font-size: 12px;
  border-bottom: 1px solid var(--border);
}
.cleanup-row:last-child { border-bottom: 0; }
.cleanup-row .from { color: var(--text-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cleanup-row .arrow { color: var(--accent); }
.cleanup-row .to { color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cleanup-row.nested .to { color: #fde047; }
.cleanup-actions { display: flex; gap: 8px; justify-content: flex-end; }

/* ─── Old versions cleanup modal ─── */
.old-versions-panel { width: min(760px, 94vw); }
.ov-toolbar {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 10px 12px;
  margin: 10px 0 8px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  font-size: 12.5px;
}
.ov-select-all { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; color: var(--text-dim); }
.ov-select-all input { accent-color: var(--accent); cursor: pointer; }
.ov-list {
  max-height: 56vh;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 14px;
  margin-bottom: 14px;
}
.ov-family {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  overflow: hidden;
}
.ov-family-header {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 10px 14px;
  background: rgba(255,255,255,.02);
  border-bottom: 1px solid var(--border);
}
.ov-family-title { font-weight: 600; font-size: 13.5px; color: var(--text); }
.ov-family-latest {
  margin-left: auto;
  font-size: 11px;
  letter-spacing: .3px;
  color: var(--accent-good);
  font-weight: 600;
}
.ov-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 14px;
  cursor: pointer;
  border-bottom: 1px solid var(--border);
  font-size: 12.5px;
  transition: background .12s;
}
.ov-row .ov-folder { flex: 1; min-width: 0; }
.ov-row:last-child { border-bottom: 0; }
.ov-row:hover { background: rgba(255,255,255,.02); }
.ov-row input { accent-color: var(--accent-hot); cursor: pointer; flex: 0 0 auto; }
.ov-row .ov-version {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11.5px;
  padding: 2px 8px;
  background: var(--surface-3);
  border-radius: 4px;
  color: var(--text);
  font-weight: 600;
  min-width: 60px;
  text-align: center;
}
.ov-row .ov-folder {
  color: var(--text-mute);
  font-size: 11.5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.ov-saves-badge {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: .3px;
  padding: 2px 7px;
  background: rgba(245,158,11,.15);
  color: var(--accent-warm);
  border: 1px solid rgba(245,158,11,.4);
  border-radius: 4px;
  text-transform: uppercase;
}
.ov-row.has-saves { background: rgba(245,158,11,.04); }
.ov-row.has-saves:hover { background: rgba(245,158,11,.08); }

/* Fetch-versions modal rows */
.fv-row .fv-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 500; color: var(--text); }
.fv-row.no-url .fv-title { color: var(--text-mute); }
.fv-row.done { background: rgba(16,185,129,.05); }
.fv-row .fv-sources { display: inline-flex; gap: 4px; flex: 0 0 auto; }
.fv-row .fv-src {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .3px;
  padding: 2px 6px;
  border-radius: 4px;
  background: var(--surface-3);
  color: var(--text-mute);
  text-transform: uppercase;
  border: 1px solid var(--border);
}
.fv-row .fv-src.on {
  background: rgba(124,58,237,.18);
  color: #c4b5fd;
  border-color: rgba(167,139,250,.4);
}
.fv-row .fv-status { flex: 0 0 auto; min-width: 110px; text-align: right; font-size: 11.5px; }
.fv-status-pill {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 4px;
  font-weight: 600;
  font-size: 10.5px;
  letter-spacing: .2px;
}
.fv-status-pill.working { background: rgba(124,58,237,.18); color: #c4b5fd; }
.fv-status-pill.good    { background: rgba(16,185,129,.18); color: #6ee7b7; }
.fv-status-pill.bad     { background: rgba(239,68,68,.18);  color: #fca5a5; }

/* Validate-URLs modal: slug link on the right */
.vu-link {
  margin-left: auto;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11.5px;
  color: var(--accent-warm);
  text-decoration: none;
  max-width: 60%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex: 0 1 auto;
}
.vu-link:hover { color: #fde68a; text-decoration: underline; }
.vu-row { background: rgba(245,158,11,.04); }
.vu-row:hover { background: rgba(245,158,11,.08); }

/* lock screen — full-page opaque overlay shown before the UI is interactive */
.lock-screen {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex; align-items: center; justify-content: center;
  -webkit-app-region: drag;
  /* Painted fully opaque by renderer/lock/lock.css (the "Hearthside" look) —
     the library is hidden behind. */
}
/* The Hearth mark opens the pattern unlock, and it deliberately pokes ABOVE the
   card (margin-top:-70px) — so its top half hangs over the backdrop, outside
   .lock-card's no-drag box and inside the drag region above. In the Electron
   shell that turns a click on it into a window drag and the button never hears
   it. Opt the mark out explicitly; the card's own rule cannot reach it there. */
.lock-screen .lock-mark-wrap { -webkit-app-region: no-drag; }
/* When locked, the underlying chrome/grid is hidden entirely. */
body.locked .topbar,
body.locked .view-tabs,
body.locked .layout,
body.locked .bg-glow { visibility: hidden; }
/* …and so are the floating overlays. These live as <body> children (not inside
   .layout, so the rule above misses them) and many sit at a z-index far above the
   lock (z:1000) — .itch-provider-overlay is 100000, others go to max-int — so a
   picker left open when the app privacy-locks (e.g. the itch download-provider
   chooser, or a star/bundle picker on the video you were ripping) floated ON TOP
   of the login screen. visibility:hidden beats z-index unconditionally, which the
   z-index space (saturated to 2147483647) does not allow any other way.

   We target the app's OWN two overlay-marker conventions rather than a brittle
   class-by-class list: `.wcv-suppress` (every app.js body overlay incl.
   .itch-provider-overlay — the same marker the window-controls MutationObserver
   watches) and `.media-prompt-overlay` (every common.js media picker), plus
   `.modal` and the stray in-chrome menus. The lock card and the Touch-ID banner
   (.hearth-bio-banner) carry none of these classes, so they still show over the
   lock. Progress pills and toasts USED to as well -- see the privacy rule below,
   which is what now keeps game titles off a locked screen.

   ⚠️ THIS RULE HIDES; IT DOES NOT RESOLVE. It used to claim "everything
   reappears on unlock, so a picker now waits for login" — that was only ever
   true if the user completed an unlock. An overlay someone is AWAITING becomes
   invisible AND un-hit-testable here, so its owner sits on `await` forever:
   sendUrlToLibrary died exactly this way, spinner turning, finally{} never
   reached ("Send to Videos does nothing"). Its required partner is the
   lock-cancelable registry in renderer/app.js (registerLockCancelable /
   cancelOverlaysForLock, called from enterLockedState()), which settles every
   awaited overlay before the lock paints. Keep this rule as the belt-and-
   suspenders guarantee — but any NEW overlay that awaits an answer must
   register a canceller, or it will hang instead of merely hiding. */
body.locked .modal,
body.locked .media-prompt-overlay,
body.locked .wcv-suppress,
body.locked .media-ctx-menu,
body.locked .hm-root,
body.locked .web-mini-menu,
body.locked .bm-popover,
body.locked .narrator-bar,
body.locked .narrator-menu,
body.locked .autolock-menu,
body.locked .steam-switch-overlay,
body.locked .torrent-lightbox,
body.locked .video-popout,
body.locked #video-marker-picker,
body.locked #browser-url-suggest,
body.locked .browser-folder-menu,
body.locked #browser-send-menu { visibility: hidden !important; }

/* ── Progress pills + toasts must never survive the lock screen (privacy) ──
   The lock screen exists so someone glancing at this machine learns nothing
   about the library. Every floating notification defeated that: they are
   appended to <body>, outside .layout (which body.locked already hides), and
   they carry a GAME TITLE. Caught live 2026-09-08 -- the lock card reading
   "Enter password to unlock" with a pill beside it naming the game and
   reporting "811.0 MB / 3.48 GB - 23.4 MB/s".

   Fixed in CSS rather than by dismissing them on lock, deliberately: a download
   in flight keeps emitting progress WHILE locked, so a one-shot dismissal in
   enterLockedState() would clear the pill on screen and let the next tick paint
   a new one. A rule on body.locked holds for anything that appears later too.

   Unlike the overlays above, none of these awaits an answer -- they are pure
   status -- so hiding them strands nothing and they need no lock-cancelable
   registration. The jobs keep running underneath and reappear on unlock. */
body.locked #grab-floater,
body.locked #steam-install-pill,
body.locked #privacy-toast-stack,
body.locked #hearth-notify-host,
body.locked .itch-dl-toast,
body.locked .aitag-toast,
body.locked .ml-toast { visibility: hidden !important; }

/* Window controls on the lock screen — same chrome as the main topbar so the
   user can minimise/close without unlocking first. */
.lock-window-controls {
  position: absolute;
  top: 8px;
  right: 8px;
  display: flex;
  gap: 2px;
  -webkit-app-region: no-drag;
  z-index: 1;
}
/* .lock-card, the mark, title, input, buttons and errors: renderer/lock/lock.css */
/* The lock form is layout-transparent — its children join .lock-card's flex column
   directly, so wrapping the inputs changed nothing visually. The username field
   exists only for password-manager credential association: visually gone but NOT
   display:none (several managers skip display:none fields when parsing the form). */
#lock-form { display: contents; }
.lock-card input.lock-user-assoc {
  position: absolute; width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  opacity: 0; overflow: hidden; pointer-events: none;
}
/* ── Touch ID on the lock (web tier only; injected by app.js) ─────────────── */
/* The lock's Touch ID button, "or" divider and "Use password instead" link are
   styled in renderer/lock/lock.css. */

/* One-time "enable Touch ID" offer after a password unlock. */
.hearth-bio-banner {
  position: fixed; left: 50%; bottom: 22px;
  transform: translateX(-50%) translateY(8px);
  z-index: 1200;
  display: flex; align-items: center; gap: 14px;
  max-width: min(92vw, 470px);
  padding: 12px 14px 12px 16px;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: 0 18px 50px rgba(0,0,0,.55);
  opacity: 0;
  transition: opacity .2s ease, transform .2s ease;
}
.hearth-bio-banner.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.hearth-bio-banner .bb-icon {
  flex: none; width: 34px; height: 34px;
  display: flex; align-items: center; justify-content: center;
  color: var(--accent);
  background: rgba(167,139,250,.12);
  border-radius: 9px;
}
.hearth-bio-banner .bb-icon svg { width: 20px; height: 20px; }
.hearth-bio-banner .bb-txt { flex: 1; font-size: 13px; line-height: 1.4; color: var(--text-dim); }
.hearth-bio-banner .bb-txt b { color: var(--text); font-weight: 700; }
.hearth-bio-banner .bb-actions { display: flex; gap: 8px; flex: none; }
.hearth-bio-banner .bb-actions .btn { padding: 8px 14px; font-size: 13px; }
.hearth-bio-banner .bb-ghost {
  background: transparent; border: 1px solid var(--border);
  color: var(--text-dim); box-shadow: none;
}
.hearth-bio-banner .bb-ghost:hover { color: var(--text); border-color: var(--accent); background: transparent; }

@media (max-width: 520px) {
  .hearth-bio-banner { flex-wrap: wrap; left: 12px; right: 12px; transform: translateY(8px); max-width: none; }
  .hearth-bio-banner.show { transform: translateY(0); }
  .hearth-bio-banner .bb-txt { flex: 1 1 100%; order: 2; }
  .hearth-bio-banner .bb-actions { flex: 1 1 100%; order: 3; }
  .hearth-bio-banner .bb-actions .btn { flex: 1; }
}

/* ─────────────── pending add-game tile ─────────────── */
.tile-pending { pointer-events: none; }
.tile-pending .pending-overlay {
  position: absolute;
  inset: 0;
  background: rgba(10, 12, 20, .55);
  backdrop-filter: blur(4px);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  z-index: 4;
  color: #fff;
  text-align: center;
  padding: 16px;
}
.tile-pending .pending-msg {
  font-size: 12px;
  letter-spacing: .4px;
  max-width: 90%;
  text-shadow: 0 1px 4px rgba(0,0,0,.8);
}
.tile-pending-error { pointer-events: auto; }
.tile-pending-error .pending-overlay {
  background: rgba(60, 14, 14, .82);
  pointer-events: auto;
}
.tile-pending-error .pending-msg {
  color: #ffd6d6;
  font-size: 11px;
  line-height: 1.4;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  white-space: pre-wrap;
  word-break: break-word;
}
.pending-dismiss {
  pointer-events: auto;
  margin-top: 6px;
  padding: 5px 12px;
  background: rgba(255,255,255,.12);
  border: 1px solid rgba(255,255,255,.25);
  border-radius: 6px;
  color: #fff;
  font: inherit;
  font-size: 11px;
  cursor: pointer;
}
.pending-dismiss:hover { background: rgba(255,255,255,.2); }
.pending-spinner {
  width: 28px;
  height: 28px;
  border: 3px solid rgba(255,255,255,.2);
  border-top-color: #fff;
  border-radius: 50%;
  animation: pending-spin 1s linear infinite;
}
@keyframes pending-spin { to { transform: rotate(360deg); } }

/* ─────────────── in-flight download skeletons (Games grid) ───────────────
   A grab job / Games-routed torrent drawn in its destination lane. Wears the
   media-rip skeleton (.media-tile-skeleton: shimmer, info band, violet bar) on
   the grid's own .tile shape, so a download reads the same on every shelf. */
.grab-skeleton .tile-cover { position: relative; overflow: hidden; }
.grab-skeleton .tile-placeholder { opacity: .35; }
.grab-skeleton .media-tile-skeleton-label { font-size: 12px; }
.grab-skeleton .tile-sub { color: rgba(167,139,250,.85); }
.grab-skeleton.failed .tile-sub { color: #f87171; }
/* Calm, not busy: a slow ease-in-out sweep, and a bar that glides to its new
   width (the fill element is patched in place, never recreated). */
.grab-skeleton .media-tile-shimmer {
  animation-duration: 2.4s;
  animation-timing-function: ease-in-out;
}
.grab-skeleton .media-tile-skeleton-bar-fill { transition: width .6s ease; }
.grab-skel-indeterminate {
  width: 30% !important;
  opacity: .7;
  animation: grab-skel-slide 2.6s ease-in-out infinite alternate;
}
@keyframes grab-skel-slide {
  from { transform: translateX(0); }
  to { transform: translateX(233%); }
}
.grab-skeleton .media-tile-skeleton-msg:empty { display: none; }
/* A download inside a collection strip is a strip card (64-150px wide, a
   third of a grid tile), so it keeps only what reads at that size: the short
   name and the bar. Phase, bytes and the failed-job buttons live in the
   tooltip and on the loose grid tile. */
.cs-row .grab-skeleton .media-tile-skeleton-sub,
.cs-row .grab-skeleton .media-tile-skeleton-msg,
.cs-row .grab-skeleton .grab-skel-actions,
.cs-row .grab-skeleton .tile-info { display: none; }
.cs-row .grab-skeleton .media-tile-skeleton-info { padding: 12px 6px 5px; }
.cs-row .grab-skeleton .media-tile-skeleton-label { font-size: 10px; font-weight: 600; }
.cs-row .grab-skeleton .media-tile-skeleton-bar { margin-top: 4px; height: 3px; }
.cs-row .grab-skeleton .tile-placeholder { font-size: 16px; }
/* "19 downloading" on the strip header — the same accent pill Toons shelves use. */
.collection-strip .cs-downloading {
  flex: none; white-space: nowrap;
  font-size: 11px; font-weight: 600; letter-spacing: .02em;
  padding: 3px 8px; border-radius: 999px;
  color: #d9ccff;
  background: color-mix(in srgb, var(--accent) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
}
.collection-strip.grab-skel-strip { border-style: dashed; }
.collection-strip.grab-skel-strip .cs-title-static { flex: 1; font-weight: 650; }
.grab-skel-actions { display: flex; gap: 6px; margin-top: 8px; pointer-events: auto; }
.grab-skel-actions .btn { min-height: 32px; }
@media (prefers-reduced-motion: reduce) {
  .grab-skeleton .media-tile-shimmer, .grab-skel-indeterminate { animation: none; }
}

/* ───────────────── narrator ───────────────── */
.narrator-section { margin-top: 4px; }
.narrator-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
}
.narrator-head h2 { margin: 0; }
.narrator-enable {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--text-dim);
  cursor: pointer;
}
.narrator-body {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 12px 14px;
}
.narrator-grid {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.narrator-row {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.narrator-row-tight { gap: 6px; }
.narrator-label {
  color: var(--text-dim);
  font-size: 12px;
  min-width: 84px;
}
.narrator-rect {
  font-family: ui-monospace, Consolas, monospace;
  font-size: 11px;
  color: var(--text-mute);
}
.narrator-rate {
  color: var(--accent);
  font-family: ui-monospace, Consolas, monospace;
}
.narrator-body select,
.narrator-body input[type="number"] {
  background: var(--surface);
  color: var(--text);
  border: 1px solid var(--border);
  padding: 4px 8px;
  border-radius: 6px;
  font-size: 13px;
}
.narrator-body input[type="number"] { width: 80px; }
.narrator-body input[type="range"] { flex: 1; max-width: 240px; accent-color: var(--accent); }
.narrator-auto {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--text-dim);
  cursor: pointer;
}
.narrator-controls {
  margin-top: 4px;
  padding-top: 8px;
  border-top: 1px solid var(--border);
}
.narrator-status {
  font-size: 12px;
  color: var(--text-mute);
  margin-left: auto;
  font-family: ui-monospace, Consolas, monospace;
}
.narrator-status.active { color: var(--accent); }
.narrator-status.speaking { color: var(--accent-2); }
.narrator-status.error { color: var(--accent-hot); }
.narrator-hint { margin: 10px 0 0 0; font-size: 12px; }
.narrator-body.disabled { opacity: 0.65; }

.narrator-orb-wrap { position: relative; display: inline-block; }
.narrator-menu {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  min-width: 220px;
  background: rgba(15, 17, 23, 0.96);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  box-shadow: 0 12px 30px rgba(0,0,0,0.55);
  padding: 6px;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: 2px;
  animation: narrator-menu-in 120ms ease-out;
}
.narrator-menu.hidden { display: none; }
@keyframes narrator-menu-in {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.narrator-menu-item {
  background: transparent;
  border: none;
  color: var(--text);
  text-align: left;
  padding: 7px 10px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 13px;
  font-family: inherit;
  display: flex;
  align-items: center;
  gap: 10px;
}
.narrator-menu-item:hover { background: rgba(167,139,250,0.14); }
.narrator-menu-item .check {
  width: 14px; height: 14px;
  border-radius: 3px;
  border: 1px solid var(--border-strong);
  flex-shrink: 0;
  position: relative;
}
.narrator-menu-item.checked .check {
  background: var(--accent);
  border-color: var(--accent);
}
.narrator-menu-item.checked .check::after {
  content: "";
  position: absolute;
  left: 3px; top: 0px;
  width: 4px; height: 8px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.narrator-menu-sep { height: 1px; background: var(--border); margin: 4px 2px; }
.narrator-menu-stop { color: #fecaca; }
.narrator-menu-stop:hover { background: rgba(239,68,68,0.18); }
.narrator-menu-stop:disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; }
.narrator-menu-stop .check { display: none; }

/* Topbar narrator-toggle orb — small round gradient button with animated halo
   when narrator is running. */
.narrator-orb {
  position: relative;
  width: 30px;
  height: 30px;
  padding: 0;
  border-radius: 50%;
  border: 1px solid rgba(167, 139, 250, 0.55);
  background:
    radial-gradient(circle at 30% 30%, rgba(255,255,255,0.18), transparent 55%),
    linear-gradient(135deg, #7c5fed 0%, #06b6d4 100%);
  color: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  box-shadow: 0 2px 10px rgba(124, 95, 237, 0.35);
  transition: transform 120ms ease, box-shadow 200ms ease, filter 120ms ease;
}
.narrator-orb:hover {
  transform: translateY(-1px);
  filter: brightness(1.1);
  box-shadow: 0 4px 18px rgba(124, 95, 237, 0.55);
}
.narrator-orb:active { transform: translateY(0) scale(0.94); }
.narrator-orb svg { display: block; }

.narrator-orb.narrator-active {
  border-color: rgba(16, 185, 129, 0.8);
  background:
    radial-gradient(circle at 30% 30%, rgba(255,255,255,0.22), transparent 55%),
    linear-gradient(135deg, #10b981 0%, #06b6d4 100%);
  animation: narrator-orb-pulse 1.6s ease-in-out infinite;
}
@keyframes narrator-orb-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.55), 0 2px 10px rgba(16, 185, 129, 0.35); }
  60%      { box-shadow: 0 0 0 6px rgba(16, 185, 129, 0), 0 2px 14px rgba(16, 185, 129, 0.55); }
}
.narrator-orb.narrator-active::after {
  content: "";
  position: absolute;
  top: -2px; right: -2px;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--accent-good, #10b981);
  border: 2px solid var(--bg, #0a0b10);
}

/* Floating status bar (bottom-right) */
.narrator-bar {
  position: fixed;
  bottom: 16px;
  right: 16px;
  z-index: 2000;
  display: flex;
  align-items: center;
  gap: 12px;
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: 12px;
  padding: 10px 14px;
  box-shadow: var(--shadow-lift);
  max-width: 480px;
  min-width: 320px;
}
.narrator-bar.hidden { display: none; }
.narrator-bar-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--accent);
  flex-shrink: 0;
  box-shadow: 0 0 0 0 rgba(167,139,250,0.6);
  animation: narrator-pulse 1.6s ease-out infinite;
}
.narrator-bar.speaking .narrator-bar-dot { background: var(--accent-2); }
.narrator-bar.error .narrator-bar-dot { background: var(--accent-hot); animation: none; }
@keyframes narrator-pulse {
  0%   { box-shadow: 0 0 0 0   rgba(167,139,250,0.6); }
  70%  { box-shadow: 0 0 0 10px rgba(167,139,250,0);   }
  100% { box-shadow: 0 0 0 0   rgba(167,139,250,0);   }
}
.narrator-bar-info { flex: 1; min-width: 0; }
.narrator-bar-line {
  font-size: 12px;
  color: var(--text-dim);
  display: flex;
  gap: 6px;
  align-items: center;
}
.narrator-bar-status { color: var(--accent); font-weight: 600; }
.narrator-bar.speaking .narrator-bar-status { color: var(--accent-2); }
.narrator-bar.error    .narrator-bar-status { color: var(--accent-hot); }
.narrator-bar-game { color: var(--text); font-weight: 500; }
.narrator-bar-sep { color: var(--text-mute); }
.narrator-bar-last {
  font-size: 12px;
  color: var(--text);
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.narrator-bar-last b { color: var(--accent); margin-right: 4px; }

/* ─────────────── add-game modal ─────────────── */
.add-game-panel { max-width: 760px; }
.add-game-panel h3 { margin-top: 20px; }
.ag-fields { display: flex; gap: 12px; margin-top: 8px; }
.ag-fields label { flex: 1; }

.ag-covers {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 10px;
  margin-top: 8px;
}
.ag-cover-card {
  position: relative;
  aspect-ratio: 3 / 4;
  border: 2px solid var(--border);
  border-radius: 10px;
  background: var(--bg-2);
  cursor: pointer;
  overflow: hidden;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: border-color .15s, transform .15s;
}
.ag-cover-card:hover { border-color: var(--accent); }
.ag-cover-card.selected {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(167,139,250,.2);
}
.ag-cover-card img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
}
.ag-cover-source {
  position: absolute;
  left: 6px; bottom: 6px;
  padding: 3px 8px;
  background: rgba(0,0,0,.7);
  color: #fff;
  font-size: 10px;
  letter-spacing: .6px;
  text-transform: uppercase;
  border-radius: 999px;
}
.ag-cover-none {
  background: var(--surface-2);
}
.ag-cover-none-label {
  color: var(--text-mute);
  font-size: 12px;
  letter-spacing: .4px;
}

/* The add-game URL rows don't have data-which attrs — give them a neutral label color */
#add-game-modal .url-row .url-label { color: var(--text-dim); }
#add-game-modal .url-row input { background: var(--bg-2); }

/* ─────────────── animations ─────────────── */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes slideIn { from { transform: translateX(100%); } to { transform: translateX(0); } }

/* Scrollbar colors come from media/profiles.css: gold by default, pink only
   in NSFW. Keep the existing heart decoration exclusive to that profile. */
.layout > .sidebar {
  scrollbar-width: thin;
  scrollbar-color: var(--profile-scroll-thumb) transparent;
}
.layout > .sidebar::-webkit-scrollbar { width: 12px; }
.layout > .sidebar::-webkit-scrollbar-track { background: transparent; }
.layout > .sidebar::-webkit-scrollbar-thumb {
  background: var(--profile-scroll-thumb);
  border-radius: 6px;
  border: 2px solid var(--bg);
}
.layout > .sidebar::-webkit-scrollbar-thumb:hover { background: var(--profile-scroll-hover); }
[data-content-profile="nsfw"] .layout > .sidebar::-webkit-scrollbar-thumb {
  background:
    url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="white" d="M12 21s-6.7-4.4-9.3-8.1C.9 10.2 1.7 6.6 4.5 5.2c2-1 4.3-.4 5.9 1.2L12 8l1.6-1.6c1.6-1.6 3.9-2.2 5.9-1.2 2.8 1.4 3.6 5 1.8 7.7C18.7 16.6 12 21 12 21z"/></svg>')
    center / 8px auto no-repeat,
    linear-gradient(180deg, #f9a8d4, #ec4899);
}
[data-content-profile="nsfw"] .layout > .sidebar::-webkit-scrollbar-thumb:hover {
  background:
    url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="white" d="M12 21s-6.7-4.4-9.3-8.1C.9 10.2 1.7 6.6 4.5 5.2c2-1 4.3-.4 5.9 1.2L12 8l1.6-1.6c1.6-1.6 3.9-2.2 5.9-1.2 2.8 1.4 3.6 5 1.8 7.7C18.7 16.6 12 21 12 21z"/></svg>')
    center / 8px auto no-repeat,
    linear-gradient(180deg, #fbc4e0, #f472b6);
}

/* ─────────────── Steam view ─────────────── */
.steam-tile { cursor: pointer; }
.steam-tile .tile-cover { position: relative; }
.steam-tile .tile-cover img.header-fallback { object-fit: cover; }
.steam-badge {
  position: absolute;
  top: 8px; left: 8px;
  padding: 3px 8px;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: .4px;
  text-transform: uppercase;
  border-radius: 4px;
  box-shadow: 0 2px 8px rgba(0,0,0,.4);
  z-index: 3;
}
.steam-badge.installed {
  background: linear-gradient(135deg, #10b981, #06b6d4);
  color: white;
}
.steam-badge.owned {
  background: rgba(0,0,0,.7);
  color: #cbd5e1;
  border: 1px solid rgba(255,255,255,.15);
  backdrop-filter: blur(4px);
}
.steam-playtime {
  position: absolute;
  top: 8px; right: 8px;
  padding: 3px 7px;
  font-size: 10.5px;
  font-weight: 700;
  background: rgba(0,0,0,.65);
  color: #fde68a;
  border-radius: 4px;
  backdrop-filter: blur(4px);
  z-index: 3;
}
.steam-tile .tile-sub { font-size: 11px; color: var(--text-mute); }
.steam-sub-installed { color: var(--accent-good); font-weight: 600; }
.steam-sub-owned { color: var(--text-mute); font-style: italic; }
.steam-tile:hover .steam-badge.installed { filter: brightness(1.1); }
.steam-tile:hover .tile-cover img { transform: scale(1.03); }

/* ── live install progress (web: install-and-play via stream) ── */
.steam-badge.installing {
  background: rgba(124, 58, 237, .92);
  color: #f5f3ff;
}
.steam-install-bar {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 4px;
  background: rgba(0, 0, 0, .5);
  z-index: 3;
}
.steam-install-bar i {
  display: block;
  height: 100%;
  width: 0;
  background: var(--grad-cool);
  transition: width .6s ease;
}

/* The global install pill — visible on every tab (fixed, bottom-right; the left
   corner would sit on top of the sidebar's filter rows). */
#steam-install-pill {
  position: fixed;
  right: 18px;
  bottom: calc(18px + env(safe-area-inset-bottom, 0px));
  z-index: 90;                       /* above content, below modals/overlays */
  display: flex;
  align-items: center;
  gap: 11px;
  max-width: min(360px, calc(100vw - 36px));
  padding: 11px 16px 14px 13px;
  background: var(--surface-2);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius);
  box-shadow: var(--shadow-card);
  cursor: pointer;
  overflow: hidden;
  animation: sip-in .18s ease;
  transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease;
}
#steam-install-pill:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
  border-color: var(--accent);
}
@keyframes sip-in {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: none; }
}
#steam-install-pill .sip-close {
  flex: none;
  width: 22px; height: 22px;
  display: grid; place-items: center;
  margin-left: 2px;
  background: none; border: 0; border-radius: 50%;
  color: var(--text-mute);
  font-size: 15px; line-height: 1;
  cursor: pointer;
  transition: color .12s ease, background .12s ease;
}
#steam-install-pill .sip-close:hover { color: var(--text); background: rgba(255, 255, 255, .08); }
#steam-install-pill .sip-close:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
#steam-install-pill .sip-text {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
#steam-install-pill .sip-text b {
  font-size: 13px;
  font-weight: 650;
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#steam-install-pill .sip-text small {
  font-size: 11.5px;
  color: var(--text-dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#steam-install-pill .sip-spin {
  flex: 0 0 auto;
  width: 18px; height: 18px;
  border-radius: 50%;
  border: 2px solid var(--surface-3);
  border-top-color: var(--accent);
  animation: sip-rot .9s linear infinite;
}
@keyframes sip-rot { to { transform: rotate(360deg); } }
#steam-install-pill .sip-bar {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 3px;
  background: rgba(0, 0, 0, .45);
}
#steam-install-pill .sip-bar i {
  display: block;
  height: 100%;
  width: 0;
  background: var(--grad-cool);
  transition: width .6s ease;
}
#steam-install-pill.done {
  border-color: rgba(16, 185, 129, .55);
  cursor: default;
}
#steam-install-pill.done .sip-check {
  flex: 0 0 auto;
  width: 18px; height: 18px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: rgba(16, 185, 129, .18);
  color: var(--accent-good);
  font-size: 12px;
  font-weight: 800;
}
/* Privacy toasts share the bottom-right corner — slide the stack up while the
   install pill is on screen so the two never overlap. */
/* (A class set by has-flags.js, not `body:has()`: see that file.) */
body.has-steam-install-pill #privacy-toast-stack {
  bottom: 96px;
}
.steam-tile .tile-cover img { transition: transform .35s cubic-bezier(.4,0,.2,1); z-index: 1; }
.steam-tile .tile-cover img.header-fallback {
  /* Header art is landscape (460x215); cover-fitting it in a portrait tile
     crops the sides but at least fills the frame and usually keeps the logo
     centered. */
  object-fit: cover;
  object-position: 50% 50%;
}
.steam-tile .steam-placeholder {
  position: absolute; inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
  z-index: 0;
}
.steam-tile .steam-placeholder span {
  font-size: 44px;
  font-weight: 800;
  letter-spacing: 1px;
  color: var(--text-mute);
  text-shadow: 0 2px 8px rgba(0,0,0,.5);
}

/* Corner button to open the game in Steam's library (separate from launching).
   Visible on tile hover so the cover art stays clean at rest. */
.steam-open-library {
  position: absolute;
  bottom: 8px;
  right: 8px;
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(0,0,0,.7);
  color: #cbd5e1;
  border: 1px solid rgba(255,255,255,.18);
  border-radius: 6px;
  cursor: pointer;
  opacity: 0;
  transform: translateY(4px);
  transition: opacity .15s, transform .15s, background .15s, color .15s, border-color .15s;
  backdrop-filter: blur(4px);
  z-index: 4;
}
.steam-tile:hover .steam-open-library,
.steam-open-library:focus-visible {
  opacity: 1;
  transform: translateY(0);
}
.steam-open-library:hover {
  background: linear-gradient(135deg, #7c3aed, #06b6d4);
  color: #fff;
  border-color: rgba(167,139,250,.6);
}
.steam-uninstall-btn { bottom: 40px !important; }
.steam-uninstall-btn:hover {
  background: rgba(239,68,68,.85) !important;
  color: #fff !important;
  border-color: rgba(239,68,68,.6) !important;
}

.steam-play-btn {
  position: absolute;
  bottom: 8px; right: 8px;
  display: inline-flex; align-items: center; gap: 5px;
  padding: 5px 12px 5px 8px;
  background: rgba(16,185,129,.85);
  color: #fff;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  opacity: 0;
  transform: translateY(4px);
  transition: opacity .15s, transform .15s, background .12s;
  font-size: 12px; font-weight: 700; letter-spacing: .3px;
  backdrop-filter: blur(4px);
  z-index: 10;
}
.steam-tile:hover .steam-play-btn {
  opacity: 1;
  transform: translateY(0);
}
/* Running steam game: green ring (box-shadow → no layout shift) + a persistent action row
   across the bottom of the cover art — Resume (rejoin the live stream, the thing you almost
   always want after closing the tab) as the wide primary, Stop beside it. The row lives at the
   cover's bottom edge, ABOVE the title band, so two buttons never sit on top of the title the
   way the old lone corner Stop did. Play is hidden while running (Resume replaces it). */
.steam-tile.running { box-shadow: 0 0 0 2px #34d399, 0 6px 22px rgba(52,211,153,.28); }
.steam-run-acts {
  position: absolute; left: 8px; right: 8px; bottom: 8px; z-index: 11;
  display: none; gap: 6px;
}
.steam-tile.running .steam-run-acts { display: flex; }   /* persistent, not hover-only */
.steam-tile.running .steam-play-btn { display: none; }
.steam-stop-btn, .steam-resume-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: 34px; padding: 0 12px; border: none; border-radius: 9px; cursor: pointer;
  color: #fff; font-size: 12.5px; font-weight: 700; letter-spacing: .3px;
  backdrop-filter: blur(4px);
  transition: filter .12s, transform .12s, opacity .15s;
}
.steam-stop-btn {
  flex: 0 0 auto;
  background: linear-gradient(135deg, #ef4444, #b91c1c);
  box-shadow: 0 4px 14px rgba(239,68,68,.5), inset 0 0 0 1px rgba(255,255,255,.2);
}
.steam-resume-btn {
  flex: 1 1 auto; min-width: 0;
  background: var(--grad-cool);
  box-shadow: 0 6px 18px rgba(124,58,237,.55), inset 0 0 0 1px rgba(255,255,255,.22);
}
.steam-resume-btn svg { flex: 0 0 auto; }
.steam-stop-btn:hover, .steam-resume-btn:hover   { filter: brightness(1.12); transform: scale(1.03); }
.steam-stop-btn:active, .steam-resume-btn:active { transform: scale(0.97); }
.steam-stop-btn:focus-visible, .steam-resume-btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
.steam-stop-btn:disabled { cursor: default; opacity: .8; }
/* Mid-stop there is no stable session to rejoin — dimmed, not just inert, because Resume is an
   invitation rather than a safety button. */
.steam-resume-btn:disabled { cursor: default; opacity: .45; filter: none; transform: none; }
.steam-tile.stopping .steam-stop-btn { animation: tileStopPulse 1s ease-in-out infinite; }
/* In flight: the resume RPC is a host round-trip — spinner in place of the icon. */
.steam-resume-btn.is-loading { pointer-events: none; }
.steam-resume-btn.is-loading svg { display: none; }
.steam-resume-btn.is-loading::before {
  content: ''; width: 14px; height: 14px; border-radius: 50%; flex: 0 0 auto;
  border: 2px solid rgba(255,255,255,.3); border-top-color: #fff;
  animation: spin .6s linear infinite;
}
.steam-play-btn:hover { background: rgba(16,185,129,1); }
.steam-play-btn:active { transform: scale(.95); }
/* Web build: not-installed tiles show "Install & Play" — tint it blue so it reads
   as an install action (it opens the install-then-stream flow), not a plain launch. */
.steam-play-btn.needs-install { background: rgba(47,129,247,.9); }
.steam-play-btn.needs-install:hover { background: rgba(47,129,247,1); }

/* Top-left × button to hide / unhide a Steam game */
.steam-hide-btn {
  position: absolute;
  top: 34px;
  left: 6px;
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(0,0,0,.65);
  color: #fca5a5;
  border: 1px solid rgba(255,255,255,.15);
  border-radius: 50%;
  cursor: pointer;
  opacity: 0;
  transition: opacity .15s, background .15s, color .15s, transform .15s;
  backdrop-filter: blur(4px);
  z-index: 5;
}
.steam-tile:hover .steam-hide-btn { opacity: 1; }
.steam-hide-btn:hover {
  background: #ef4444;
  color: #fff;
  transform: scale(1.08);
}
/* Hidden tiles (only visible when "Show hidden" is on) dim down so they
   read as muted compared to the rest of the grid */
.steam-tile.is-hidden { opacity: 0.42; }
.steam-tile.is-hidden:hover { opacity: 1; }
.steam-tile.is-hidden .steam-hide-btn {
  /* Flip the icon meaning: × → ↩ feel via a different tint */
  background: rgba(124,58,237,.4);
  color: #c4b5fd;
  opacity: 1;
}
.steam-tile.is-hidden .steam-hide-btn:hover {
  background: linear-gradient(135deg, #7c3aed, #06b6d4);
  color: #fff;
}

/* Art-missing tile gets a faint warm tint so it stands out when you toggle
   the "Missing art only" filter on. */
.steam-tile.art-missing { outline: 1px solid rgba(245,158,11,.35); }

/* Private tiles get a lock corner button mirroring .steam-hide-btn but offset
   to the right (top-right is occupied by the hide button). When marked, the
   lock stays visible without hover so the user can see what's flagged. */
.steam-private-btn {
  position: absolute;
  top: 6px;
  right: 34px;
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(0,0,0,.65);
  color: #fbbf24;
  border: 1px solid rgba(255,255,255,.15);
  border-radius: 50%;
  cursor: pointer;
  opacity: 0;
  transition: opacity .15s, background .15s, color .15s, transform .15s;
}
.steam-tile:hover .steam-private-btn { opacity: 1; }
.steam-private-btn:hover {
  background: #f59e0b;
  color: #1a0f00;
  transform: scale(1.08);
}
.steam-tile.is-private .steam-private-btn {
  /* Stay visible without hover so user sees the flag */
  background: rgba(245,158,11,.85);
  color: #1a0f00;
  opacity: 1;
}
.steam-tile.is-private {
  outline: 1px solid rgba(245,158,11,.55);
}

/* ─────────── Privacy wizard ─────────── */
.pw-stepper {
  display: flex; gap: 6px; flex-wrap: wrap;
  margin: -6px 0 16px;
}
.pw-step {
  flex: 1; min-width: 90px;
  padding: 6px 8px; border-radius: 6px;
  font-size: 11.5px; text-align: center;
  background: rgba(255,255,255,.04);
  color: var(--text-dim);
  border: 1px solid rgba(255,255,255,.06);
}
.pw-step.is-active {
  background: rgba(245,158,11,.18);
  color: #fbbf24;
  border-color: rgba(245,158,11,.45);
}
.pw-step.is-done {
  background: rgba(16,185,129,.12);
  color: #6ee7b7;
  border-color: rgba(16,185,129,.35);
}

.pw-pane { display: block; }
.pw-pane.hidden { display: none; }
.pw-pane-actions {
  display: flex; gap: 8px; align-items: center;
  margin-top: 18px; padding-top: 14px;
  border-top: 1px solid rgba(255,255,255,.07);
}

.pw-private-list {
  margin: 14px 0;
  max-height: 320px; overflow: auto;
  border: 1px solid rgba(255,255,255,.06);
  border-radius: 8px;
}
.pw-private-section {
  padding: 10px 12px;
  border-bottom: 1px solid rgba(255,255,255,.05);
}
.pw-private-section:last-child { border-bottom: none; }
.pw-private-section h4 {
  margin: 0 0 6px; font-size: 12px;
  color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.5px;
}
.pw-private-row {
  display: flex; align-items: center; gap: 8px;
  padding: 4px 0; font-size: 13px;
}
.pw-private-row .pw-tag {
  font-size: 10.5px; padding: 1px 6px; border-radius: 4px;
  background: rgba(245,158,11,.18); color: #fbbf24;
}
.pw-private-empty {
  padding: 22px;
  text-align: center;
  color: var(--text-dim);
  font-size: 13px;
}

.pw-picker-toolbar {
  display: flex; gap: 8px; align-items: center;
  margin: 12px 0 8px;
  flex-wrap: wrap;
}
.pw-picker-toolbar input[type="text"] {
  flex: 1; min-width: 160px;
  padding: 6px 10px;
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 6px;
  color: var(--text);
  font-size: 13px;
}
.pw-picker-toolbar input[type="text"]:focus {
  outline: none;
  border-color: rgba(245,158,11,.5);
  background: rgba(255,255,255,.06);
}
.pw-tab-row { display: flex; gap: 4px; }
.pw-tab {
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.07);
  border-radius: 6px;
  padding: 5px 10px;
  font-size: 12px;
  color: var(--text-dim);
  cursor: pointer;
}
.pw-tab.is-active {
  background: rgba(245,158,11,.18);
  border-color: rgba(245,158,11,.45);
  color: #fbbf24;
}

.pw-picker-list {
  margin: 4px 0;
  max-height: 380px; overflow-y: auto;
  border: 1px solid rgba(255,255,255,.06);
  border-radius: 6px;
  /* Two-column grid: lots of small rows fit at a glance */
  display: grid;
  grid-template-columns: 1fr 1fr;
}
.pw-picker-row {
  display: flex; align-items: center; gap: 8px;
  padding: 3px 10px;
  font-size: 12.5px;
  line-height: 1.35;
  border-bottom: 1px solid rgba(255,255,255,.035);
  cursor: pointer;
  position: relative;
  min-width: 0;
}
/* Vertical divider between the two columns */
.pw-picker-row:nth-child(odd) {
  border-right: 1px solid rgba(255,255,255,.035);
}
.pw-picker-row:hover { background: rgba(255,255,255,.04); }
.pw-picker-row.is-marked { background: rgba(245,158,11,.10); }
.pw-picker-row.is-marked:hover { background: rgba(245,158,11,.14); }
.pw-picker-row input[type="checkbox"] {
  margin: 0; cursor: pointer;
  width: 13px; height: 13px;
  flex-shrink: 0;
  accent-color: #f59e0b;
}
.pw-picker-row .pw-row-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: #c4b5fd; flex-shrink: 0;
}
.pw-picker-row .pw-row-dot.steam { background: #7dd3fc; }
.pw-picker-row .pw-row-title {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* Single-column fallback if the modal gets narrow */
@media (max-width: 640px) {
  .pw-picker-list { grid-template-columns: 1fr; }
  .pw-picker-row:nth-child(odd) { border-right: none; }
}

/* Start-scan button: animated indeterminate progress bar overlay */
.pw-scan-btn { position: relative; overflow: hidden; min-width: 140px; }
.pw-scan-btn .pw-scan-btn-bar {
  position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.35), transparent);
  transform: translateX(-100%);
  pointer-events: none;
  opacity: 0;
  transition: opacity .15s;
}
.pw-scan-btn.is-scanning { cursor: progress; }
.pw-scan-btn.is-scanning .pw-scan-btn-bar {
  opacity: 1;
  animation: pw-bar-sweep 1.1s linear infinite;
}
@keyframes pw-bar-sweep {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}

/* Big scan-status panel sitting under the bouncing dots so the user gets
   real-time category-by-category progress. */
.pw-scan-panel {
  margin: 16px auto 0;
  max-width: 480px;
  background: rgba(0,0,0,.20);
  border: 1px solid rgba(255,255,255,.06);
  border-radius: 8px;
  padding: 10px 14px;
  font-size: 12px;
  color: var(--text-dim);
  line-height: 1.7;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.pw-scan-panel .pw-scan-line {
  display: flex; align-items: center; gap: 8px;
}
.pw-scan-panel .pw-scan-line.is-done { color: #6ee7b7; }
.pw-scan-panel .pw-scan-line.is-current { color: #fbbf24; }
.pw-scan-panel .pw-scan-line.is-pending { opacity: 0.5; }
.pw-scan-panel .pw-scan-mark { width: 14px; text-align: center; }

.pw-watch-row {
  margin: 10px 0 14px;
  padding: 10px 12px;
  background: rgba(245,158,11,.06);
  border: 1px solid rgba(245,158,11,.18);
  border-radius: 6px;
}

/* Auto-marked toast — slides in from bottom-right when a new install is
   detected and instantly flagged Private. */
#privacy-toast-stack {
  position: fixed; bottom: 20px; right: 20px;
  display: flex; flex-direction: column; gap: 10px;
  z-index: 10000;
  pointer-events: none;
}
.privacy-toast {
  background: rgba(15,15,17,.95);
  border: 1px solid rgba(245,158,11,.55);
  border-left: 3px solid #f59e0b;
  border-radius: 6px;
  padding: 10px 14px;
  font-size: 12.5px;
  color: var(--text);
  max-width: 360px;
  box-shadow: 0 8px 28px rgba(0,0,0,.5);
  animation: pw-toast-in .25s ease-out;
  pointer-events: auto;
}
.privacy-toast .toast-title {
  font-weight: 600; color: #fbbf24; font-size: 12px;
  display: flex; align-items: center; gap: 6px;
  margin-bottom: 4px;
}
.privacy-toast .toast-title svg { flex-shrink: 0; }
.privacy-toast.is-leaving { animation: pw-toast-out .25s ease-in forwards; }
@keyframes pw-toast-in {
  from { transform: translateX(20px); opacity: 0; }
  to   { transform: translateX(0); opacity: 1; }
}
@keyframes pw-toast-out {
  from { transform: translateX(0); opacity: 1; }
  to   { transform: translateX(20px); opacity: 0; }
}

.pw-progress-wrap { margin: 24px 0 14px; text-align: center; }
.pw-progress-bar {
  width: 100%; height: 14px;
  background: rgba(255,255,255,.06);
  border-radius: 8px;
  overflow: hidden;
  border: 1px solid rgba(255,255,255,.08);
}
.pw-progress-fill {
  height: 100%;
  background: linear-gradient(90deg, #f59e0b, #fbbf24);
  border-radius: 8px;
  width: 0%;
  transition: width .35s ease-out;
  box-shadow: 0 0 10px rgba(245,158,11,.4);
}
.pw-progress-meta {
  margin-top: 10px;
  font-size: 12.5px;
  color: var(--text-dim);
  font-variant-numeric: tabular-nums;
}
.pw-progress-meta #pw-progress-pct {
  color: #fbbf24; font-weight: 600;
}
.pw-progress-meta #pw-progress-stage {
  color: var(--text);
}

.pw-scan-anim {
  display: flex; justify-content: center; gap: 10px;
  margin: 40px 0 18px;
}
.pw-scan-dot {
  width: 12px; height: 12px; border-radius: 50%;
  background: #fbbf24;
  animation: pw-bounce 1.1s infinite ease-in-out;
}
@keyframes pw-bounce {
  0%, 80%, 100% { transform: scale(0.5); opacity: 0.4; }
  40% { transform: scale(1.0); opacity: 1; }
}

.pw-results-summary {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
  gap: 8px;
  margin-top: 12px;
}
.pw-res-card {
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.07);
  border-radius: 8px;
  padding: 10px 12px;
}
.pw-res-card .pw-res-count {
  font-size: 22px; font-weight: 600; color: #fbbf24;
}
.pw-res-card.is-admin .pw-res-count { color: #fb7185; }
.pw-res-card .pw-res-label {
  font-size: 11px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.5px;
}
.pw-res-empty {
  padding: 22px; text-align: center;
  color: var(--text-dim); font-size: 13px;
}

.pw-intro-list {
  list-style: none; padding: 0;
  margin: 14px 0 8px;
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.07);
  border-radius: 8px;
}
.pw-intro-list li {
  padding: 10px 14px;
  font-size: 13px;
  border-bottom: 1px solid rgba(255,255,255,.04);
}
.pw-intro-list li:last-child { border-bottom: none; }

.pw-results-list {
  margin: 4px 0;
  max-height: 420px; overflow-y: auto;
  border: 1px solid rgba(255,255,255,.06);
  border-radius: 6px;
  display: grid;
  grid-template-columns: 1fr 1fr;
}
.pw-results-row {
  display: flex; align-items: center; gap: 8px;
  padding: 5px 10px;
  font-size: 12.5px;
  border-bottom: 1px solid rgba(255,255,255,.035);
  cursor: pointer;
  min-width: 0;
}
.pw-results-row:nth-child(odd) {
  border-right: 1px solid rgba(255,255,255,.035);
}
.pw-results-row:last-child { border-bottom: none; }
.pw-results-row:hover { background: rgba(255,255,255,.04); }
@media (max-width: 720px) {
  .pw-results-list { grid-template-columns: 1fr; }
  .pw-results-row:nth-child(odd) { border-right: none; }
}
.pw-results-row input[type="checkbox"] {
  margin: 0; cursor: pointer;
  width: 14px; height: 14px;
  accent-color: #f59e0b;
  flex-shrink: 0;
}
.pw-results-row .pw-row-info {
  flex: 1; min-width: 0;
  overflow: hidden;
}
.pw-results-row .pw-row-name {
  font-size: 12.5px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  display: flex; align-items: center; gap: 6px;
}
.pw-results-row .pw-row-detail {
  display: none;  /* fold detail into hover tooltip to save space */
}
.pw-results-row .pw-row-count {
  font-size: 12px; font-weight: 600;
  color: #fbbf24;
  background: rgba(245,158,11,.12);
  border-radius: 4px;
  padding: 1px 7px;
  min-width: 28px; text-align: center;
}
.pw-results-row.is-system .pw-row-count { color: #94a3b8; background: rgba(148,163,184,.12); }
.pw-row-exclude { opacity: 0; padding: 2px 6px !important; font-size: 11px !important; margin-left: auto; flex-shrink: 0; }
.pw-results-row:hover .pw-row-exclude { opacity: .6; }
.pw-row-exclude:hover { opacity: 1 !important; color: #f87171 !important; }
.pw-results-row .pw-row-kind {
  font-size: 9.5px;
  padding: 1px 5px;
  border-radius: 3px;
  background: rgba(124,58,237,.18); color: #c4b5fd;
  text-transform: uppercase; letter-spacing: 0.3px;
}
.pw-results-row .pw-row-kind.steam { background: rgba(56,189,248,.18); color: #7dd3fc; }
.pw-results-row .pw-row-kind.system { background: rgba(148,163,184,.18); color: #cbd5e1; }
.pw-results-row.is-already-private {
  background: rgba(245,158,11,.06);
  border-left: 2px solid #f59e0b;
}

.pw-sched-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 8px; margin-top: 6px;
}
.pw-sched-card {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 10px 12px;
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.07);
  border-radius: 8px;
  cursor: pointer;
  transition: background .12s, border-color .12s;
}
.pw-sched-card:hover { background: rgba(255,255,255,.06); }
.pw-sched-card input { margin-top: 3px; }
.pw-sched-card:has(input:checked) {
  background: rgba(245,158,11,.12);
  border-color: rgba(245,158,11,.5);
}
.pw-sched-title { font-size: 13px; font-weight: 500; }
.pw-sched-sub { font-size: 11.5px; color: var(--text-dim); margin-top: 2px; }

.pw-done-summary {
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.07);
  border-radius: 8px;
  padding: 14px;
  margin-top: 8px;
  font-size: 13px;
  line-height: 1.6;
}
.pw-done-summary code { font-size: 11.5px; }
.pw-followup.hidden { display: none; }

/* Header icon: hover countdown bubble */
#btn-privacy { position: relative; }
#btn-privacy.is-scheduled .label::after {
  content: ''; display: inline-block;
  width: 6px; height: 6px; border-radius: 50%;
  background: #10b981;
  margin-left: 6px;
  vertical-align: middle;
  box-shadow: 0 0 6px rgba(16,185,129,.6);
}
#btn-privacy[data-tooltip]:hover::after {
  content: attr(data-tooltip);
  position: absolute; top: 110%; right: 0;
  background: rgba(0,0,0,.85);
  color: #fff;
  padding: 6px 10px;
  border-radius: 6px;
  font-size: 11.5px;
  white-space: nowrap;
  border: 1px solid rgba(255,255,255,.1);
  z-index: 1000;
  pointer-events: none;
}

/* "Missing art only" filter — done in CSS because image load errors fire
   async and a JS-array filter at render time would yield an empty grid.
   Hide every tile that isn't flagged as art-missing; as errors fire and
   tiles get .art-missing, they pop into view live. */
#steam-grid.show-missing-only .steam-tile:not(.art-missing) { display: none; }

/* ─── Steam card title + meta area ─── */
.steam-tile .tile-meta {
  padding: 10px 12px 11px;
  background: linear-gradient(180deg, rgba(15,17,24,.0) 0%, rgba(15,17,24,.85) 35%, rgba(15,17,24,.95) 100%);
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.steam-tile .tile-title {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: .2px;
  color: #f5f7fb;
  line-height: 1.3;
  text-shadow: 0 1px 3px rgba(0,0,0,.6);
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  transition: color .15s;
}
.steam-tile:hover .tile-title { color: #fff; }
.steam-tile .tile-sub {
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .15px;
  color: var(--text-dim);
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 0;
  max-height: none;
  opacity: 1;
  overflow: visible;
}
.steam-tile .tile-sub .steam-sub-installed {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.steam-tile .tile-sub .steam-sub-installed::before {
  content: "";
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--accent-good);
  box-shadow: 0 0 6px rgba(16,185,129,.6);
}
.steam-tile .tile-sub .steam-sub-owned::before {
  content: "";
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--text-mute);
  margin-right: 4px;
  display: inline-block;
}

/* ─── Steam sidebar action buttons ─── */
.steam-sidebar-actions {
  display: flex;
  gap: 6px;
  align-items: stretch;
}
.btn.steam-action-primary {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 32px;
  padding: 0 12px;
  border: 0;
  border-radius: 9px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .2px;
  color: #fff;
  background: linear-gradient(120deg, #7c3aed 0%, #8b5cf6 45%, #06b6d4 100%);
  background-size: 160% 100%;
  background-position: 0% 50%;
  box-shadow: 0 2px 8px rgba(124,58,237,.28), inset 0 1px 0 rgba(255,255,255,.18);
  cursor: pointer;
  transition: background-position .5s cubic-bezier(.4,0,.2,1), box-shadow .2s, filter .15s, transform .08s;
}
.btn.steam-action-primary:hover {
  background-position: 100% 50%;
  filter: brightness(1.06);
  box-shadow: 0 4px 16px rgba(124,58,237,.48), 0 0 0 1px rgba(167,139,250,.45), inset 0 1px 0 rgba(255,255,255,.22);
}
.btn.steam-action-primary:active { transform: translateY(1px); }
.btn.steam-action-primary svg { transition: transform .35s cubic-bezier(.4,0,.2,1); }
.btn.steam-action-primary:hover svg { transform: rotate(180deg); }

.btn.steam-action-secondary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 32px;
  padding: 0 12px;
  background: rgba(255,255,255,.025);
  border: 1px solid var(--border);
  border-radius: 9px;
  color: var(--text-dim);
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  transition: background .15s, border-color .15s, color .15s;
  backdrop-filter: blur(8px);
}
.btn.steam-action-secondary:hover {
  background: var(--surface-3);
  border-color: var(--border-strong);
  color: var(--text);
}
.btn.steam-action-secondary svg { flex: 0 0 auto; }
.btn.steam-action-full { width: 100%; justify-content: flex-start; padding-left: 14px; }
.btn.steam-action-full:hover { border-color: rgba(167,139,250,.4); color: #c4b5fd; }
.btn.steam-action-full[disabled] { opacity: .6; cursor: not-allowed; }
.btn.steam-action-full[disabled]:hover { background: rgba(255,255,255,.025); border-color: var(--border); color: var(--text-dim); }

/* "Stream Steam" — full-width primary action (reuses the steam-action-primary
   gradient + hover glow); the Steam mark stays put instead of spinning. */
.btn.steam-stream-btn { width: 100%; justify-content: flex-start; padding-left: 14px; height: 34px; }
.btn.steam-stream-btn:hover svg { transform: none; }
.btn.steam-stream-btn .steam-stream-ico { flex: 0 0 auto; width: 16px; height: 16px; display: block; }
/* The stream is already open in another window, so the press brings it back rather than
   starting a second viewer of it. Cyan instead of the purple call-to-action, because
   "resume" must never look like "start another one". */
.btn.steam-stream-btn.is-live {
  /* Deep enough that the white label keeps the contrast the purple one has: the visible band
     at rest is only the first ~62% of the ramp (background-size 160%, position 0%), so a
     bright cyan there would be ~2.3:1. These stops hold 5:1 or better across it. */
  background: linear-gradient(120deg, #075985 0%, #0e7490 45%, #0891b2 100%);
  background-size: 160% 100%;
  box-shadow: 0 2px 8px rgba(7,89,133,.34), inset 0 1px 0 rgba(255,255,255,.16);
}
.btn.steam-stream-btn.is-live:hover {
  box-shadow: 0 4px 16px rgba(8,145,178,.45), 0 0 0 1px rgba(34,211,238,.45), inset 0 1px 0 rgba(255,255,255,.2);
}
.btn.steam-stream-btn[disabled] { opacity: .62; cursor: progress; filter: saturate(.5); }
.btn.steam-stream-btn[disabled]:hover {
  background-position: 0% 50%; filter: saturate(.5); transform: none;
  box-shadow: 0 2px 8px rgba(124,58,237,.28), inset 0 1px 0 rgba(255,255,255,.18);
}
.btn.steam-stream-btn[disabled]:hover svg { transform: none; }

/* ─────────────── Cheats section (detail panel) ─────────────── */
.cheats-section h2 { display: flex; align-items: center; gap: 8px; }
.cheats-list { display: flex; flex-direction: column; gap: 10px; }
.cheat-row {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px 14px;
  transition: border-color .15s, background .15s;
}
.cheat-row.is-applied {
  border-color: rgba(16,185,129,.4);
  background: linear-gradient(135deg, rgba(16,185,129,.05), rgba(6,182,212,.03));
}
.cheat-head {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 6px;
}
.cheat-name {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-weight: 600;
  font-size: 13px;
  color: var(--text);
  flex: 1;
  min-width: 0;
}
.cheat-kind {
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: .4px;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: 3px;
  background: var(--surface-3);
  color: var(--text-mute);
  border: 1px solid var(--border);
}
.cheat-kind.deploy   { background: rgba(124,58,237,.15); color: #c4b5fd; border-color: rgba(167,139,250,.35); }
.cheat-kind.patch    { background: rgba(245,158,11,.15); color: var(--accent-warm); border-color: rgba(245,158,11,.35); }
.cheat-kind.info     { background: rgba(6,182,212,.15);  color: #67e8f9; border-color: rgba(6,182,212,.35); }
.cheat-kind.external { background: rgba(239,68,68,.15);  color: #fca5a5; border-color: rgba(239,68,68,.35); }
.cheat-kind.applied  { background: rgba(16,185,129,.2);  color: #6ee7b7; border-color: rgba(16,185,129,.4); }
.cheat-actions {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-left: auto;
}
.cheat-auto {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11.5px;
  color: var(--text-dim);
  cursor: pointer;
  user-select: none;
}
.cheat-auto input { accent-color: var(--accent); cursor: pointer; }
.cheat-desc {
  font-size: 12px;
  line-height: 1.5;
  margin: 0;
}

/* ─── Cheat Studio (RPG Maker save editor) ─── */
.cheat-studio-panel {
  width: min(900px, 96vw);
  height: 90vh;          /* not just max-height — flex children need definite height to compute their own */
  max-height: 90vh;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.cs-toolbar { display: flex; align-items: center; gap: 10px; padding: 10px 0 12px; flex-wrap: wrap; }
.cs-toolbar label { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-dim); }
.cs-toolbar select {
  background: var(--surface); border: 1px solid var(--border); border-radius: 6px;
  color: var(--text); padding: 6px 10px; font: inherit; font-size: 12.5px;
}
.cs-tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--border); padding: 0 2px; }
.cs-tab {
  padding: 8px 14px; background: transparent; border: 0; color: var(--text-mute);
  font: inherit; font-size: 12px; font-weight: 600; cursor: pointer;
  position: relative; transition: color .15s;
}
.cs-tab:hover { color: var(--text-dim); }
.cs-tab.active { color: var(--text); }
.cs-tab.active::after {
  content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 2px;
  background: linear-gradient(90deg, var(--accent), var(--accent-2));
  border-radius: 2px 2px 0 0;
}
.cs-body {
  flex: 1 1 auto;
  overflow: hidden;
  padding-top: 10px;
  min-height: 0;        /* critical — without this, flex items refuse to shrink below content height, killing inner scroll */
}
.cs-pane {
  display: none;
  height: 100%;
  overflow-y: auto;
  overflow-x: hidden;
  padding-right: 4px;
  min-height: 0;
}
.cs-pane.active { display: block; }
.cs-field { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; font-size: 13px; color: var(--text-dim); }
.cs-field input {
  background: var(--surface); border: 1px solid var(--border); border-radius: 6px;
  color: var(--text); padding: 6px 10px; font: inherit; font-size: 14px; width: 160px;
}
.cs-actor-row {
  display: flex; flex-direction: column; gap: 8px; padding: 10px 12px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
  margin-bottom: 8px; font-size: 12.5px;
}
.cs-actor-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.cs-actor-row .cs-actor-name { font-weight: 600; color: var(--text); min-width: 120px; }
.cs-actor-row label { display: inline-flex; gap: 5px; color: var(--text-mute); font-size: 11.5px; align-items: center; }
.cs-actor-row input {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 5px;
  color: var(--text); padding: 4px 7px; font: inherit; font-size: 12px; width: 72px;
}
.cs-stat-row {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px 12px;
  padding-top: 8px; border-top: 1px dashed var(--border);
}
.cs-stat { display: inline-flex; align-items: center; gap: 4px; color: var(--text-mute); font-size: 11px; }
.cs-stat input {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 5px;
  color: var(--text); padding: 3px 6px; font: inherit; font-size: 11.5px; width: 64px;
  margin-left: auto;
}
.cs-search {
  width: 100%; padding: 8px 12px; margin-bottom: 8px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
  color: var(--text); font: inherit; font-size: 13px;
}
.cs-list { display: flex; flex-direction: column; gap: 2px; }
/* Switches pack into a dense grid — each row is just id + name + toggle.
   150px min → ~5–6 columns on the 900px modal; more on wider screens. */
.cs-switches-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 2px 10px;
}
.cs-switches-grid .cs-kv-row {
  padding: 4px 8px;
  gap: 6px;
  font-size: 11.5px;
}
.cs-switches-grid .cs-kv-row .cs-kv-id { min-width: 32px; font-size: 10px; }
.cs-switches-grid .cs-kv-row .cs-kv-name { font-size: 11.5px; }
.cs-switches-grid .cs-kv-row input[type="checkbox"] { width: 30px; height: 17px; }
.cs-switches-grid .cs-kv-row input[type="checkbox"]::after { width: 13px; height: 13px; }
.cs-switches-grid .cs-kv-row input[type="checkbox"]:checked::after { left: 14px; }
.cs-kv-row {
  display: flex; align-items: center; gap: 10px; padding: 5px 10px;
  border-radius: 5px; font-size: 12px;
  transition: background .1s;
  cursor: default;
}
.cs-kv-row:hover { background: var(--surface); }
.cs-kv-id {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 10.5px; color: var(--text-mute); min-width: 50px;
}
.cs-kv-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text); }
.cs-kv-row input {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 4px;
  color: var(--text); padding: 3px 8px; font: inherit; font-size: 12px; min-width: 90px;
}
.cs-kv-row input[type="checkbox"] {
  min-width: 0; width: 36px; height: 20px;
  appearance: none; -webkit-appearance: none;
  background: var(--surface-3);
  border: 1px solid var(--border);
  border-radius: 11px;
  position: relative;
  cursor: pointer;
  transition: background .15s, border-color .15s;
}
.cs-kv-row input[type="checkbox"]::after {
  content: ""; position: absolute;
  top: 1px; left: 1px; width: 16px; height: 16px;
  background: var(--text-dim);
  border-radius: 50%;
  transition: left .15s, background .15s;
}
.cs-kv-row input[type="checkbox"]:checked {
  background: linear-gradient(135deg, #7c3aed, #06b6d4);
  border-color: rgba(167,139,250,.5);
}
.cs-kv-row input[type="checkbox"]:checked::after {
  left: 16px;
  background: #fff;
}
.cs-pane[data-pane="ai"] textarea {
  width: 100%; background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
  color: var(--text); padding: 10px 12px; font: inherit; font-size: 13px;
  resize: vertical; margin-bottom: 8px;
}
.cs-ai-output {
  margin-top: 14px; padding: 12px; background: var(--surface);
  border: 1px solid var(--border); border-radius: 10px;
}
.cs-ai-output:empty { display: none; }
.cs-ai-patches {
  list-style: none; margin: 8px 0; padding: 0;
  font-size: 12px; color: var(--text);
}
.cs-ai-patches li {
  padding: 5px 0;
  border-bottom: 1px dashed var(--border);
}
.cs-ai-patches li:last-child { border-bottom: 0; }
.cheats-section h2 { display: flex; align-items: center; }

/* Actors tab — per-actor equipment, skills, EXP */
.cs-actor-section {
  background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
  padding: 12px; margin-bottom: 10px;
}
.cs-actor-section h4 { margin: 0 0 8px; font-size: 11px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--text-mute); }
.cs-inline-fields { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.cs-inline-fields label { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--text-dim); }
.cs-inline-fields input {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 5px;
  color: var(--text); padding: 4px 8px; font: inherit; font-size: 12px; width: 100px;
}
.cs-equip-row { display: flex; align-items: center; gap: 10px; padding: 4px 0; font-size: 12px; }
.cs-equip-label { min-width: 80px; color: var(--text-mute); }
.cs-equip-input {
  flex: 1; background: var(--surface-2); border: 1px solid var(--border); border-radius: 5px;
  color: var(--text); padding: 5px 8px; font: inherit; font-size: 12px;
}
.cs-skill-row { display: flex; align-items: center; gap: 10px; padding: 4px 0; font-size: 12px; }
.cs-skill-row .cs-kv-id { min-width: 50px; }
.cs-add-skill { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cs-add-skill input {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 5px;
  color: var(--text); padding: 4px 8px; font: inherit; font-size: 12px;
}

/* Backups tab */
.cs-backup-row {
  display: flex; align-items: center; gap: 12px; padding: 8px 12px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
  margin-bottom: 5px; font-size: 12px;
}
.cs-backup-time { flex: 1; color: var(--text); font-weight: 500; }
.cs-backup-size { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }

/* Diff Scanner tab */
.cs-diff-list { display: flex; flex-direction: column; gap: 4px; margin-top: 8px; }
.cs-diff-row {
  display: flex; align-items: center; gap: 10px; padding: 6px 10px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 6px;
  font-size: 12px;
}
.cs-diff-kind { min-width: 200px; color: var(--text); font-weight: 500; }
.cs-diff-from {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11.5px;
  color: var(--accent-hot); padding: 2px 6px; background: rgba(239,68,68,.1); border-radius: 4px;
  max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cs-diff-arrow { color: var(--text-mute); }
.cs-diff-to {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11.5px;
  color: var(--accent-good); padding: 2px 6px; background: rgba(16,185,129,.1); border-radius: 4px;
  max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cs-diff-label {
  margin-left: auto;
  font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 4px;
  cursor: help;
}
.cs-diff-label.conf-low    { background: rgba(245,158,11,.12); color: var(--accent-warm); border: 1px solid rgba(245,158,11,.3); }
.cs-diff-label.conf-medium { background: rgba(124,58,237,.15); color: #c4b5fd; border: 1px solid rgba(167,139,250,.35); }
.cs-diff-label.conf-high   { background: rgba(16,185,129,.15); color: #6ee7b7; border: 1px solid rgba(16,185,129,.35); }

/* Inventory: two clearly-labeled sections — Held + Browse all */
.cs-inv-section { margin-bottom: 12px; }
.cs-inv-section h4 {
  margin: 0 0 6px; font-size: 11px; letter-spacing: 1.2px; text-transform: uppercase;
  color: var(--text-mute); font-weight: 600;
}
.cs-inv-browse { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; }
.cs-inv-browse summary {
  cursor: pointer; user-select: none; padding: 2px 0;
  list-style: none;
}
.cs-inv-browse summary::-webkit-details-marker { display: none; }
.cs-inv-browse summary::before {
  content: "▸"; display: inline-block; margin-right: 8px;
  color: var(--text-mute); transition: transform .15s;
}
.cs-inv-browse[open] summary::before { transform: rotate(90deg); }

.cs-raw {
  background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
  padding: 12px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px; color: var(--text); line-height: 1.4;
  max-height: 60vh; overflow: auto; white-space: pre;
}

/* Detected Steam accounts in the setup modal */
.steam-user-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.steam-user-pick {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
}
.steam-user-pick.most-recent {
  border-color: rgba(167,139,250,.5);
  background: rgba(124,58,237,.1);
}
.steam-user-pick .steam-user-flag {
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: .3px;
  text-transform: uppercase;
  padding: 1px 5px;
  border-radius: 3px;
  background: rgba(167,139,250,.25);
  color: #c4b5fd;
}

/* ─────────────────── Media (Comics / Images / Videos) ─────────────────── */

.media-grid {
  display: grid;
  gap: 14px;
}
#comics-grid {
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
}
#images-grid {
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
#videos-grid {
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
}

.media-tile {
  position: relative;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  cursor: pointer;
  box-shadow: var(--shadow-card);
  transition: transform .15s, box-shadow .15s, border-color .15s;
  display: flex;
  flex-direction: column;
  aspect-ratio: auto;
}
.media-tile:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
  border-color: rgba(167,139,250,.4);
}
.media-tile.selected {
  border-color: rgba(167,139,250,.9);
  box-shadow: 0 0 0 2px rgba(167,139,250,.6), var(--shadow-card);
}
.media-tile-skeleton {
  cursor: default;
  background: linear-gradient(135deg, rgba(167,139,250,.08), rgba(99,102,241,.04));
  border-color: rgba(167,139,250,.35);
  position: relative;
  overflow: hidden;
}
.media-tile-skeleton:hover {
  transform: none;
  border-color: rgba(167,139,250,.45);
}
.media-tile-skeleton.failed {
  background: linear-gradient(135deg, rgba(248,113,113,.08), rgba(0,0,0,.04));
  border-color: rgba(248,113,113,.5);
}
.media-tile-shimmer {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    90deg,
    transparent 0%,
    rgba(167,139,250,.15) 50%,
    transparent 100%
  );
  background-size: 200% 100%;
  animation: media-shimmer 1.6s linear infinite;
  pointer-events: none;
}
.media-tile-skeleton.failed .media-tile-shimmer {
  animation: none;
  background: rgba(248,113,113,.12);
}
@keyframes media-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
.media-tile-skeleton-info {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 10px 12px;
  background: linear-gradient(to top, rgba(0,0,0,.85), rgba(0,0,0,.45) 70%, transparent);
  color: var(--text);
  z-index: 2;
}
.media-tile-skeleton-label {
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.media-tile-skeleton-sub {
  font-size: 11px;
  color: rgba(255,255,255,.55);
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.media-tile-skeleton-msg {
  font-size: 10px;
  color: rgba(255,255,255,.45);
  margin-top: 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.media-tile-skeleton-bar {
  margin-top: 8px;
  height: 4px;
  border-radius: 999px;
  background: rgba(255,255,255,.1);
  overflow: hidden;
}
.media-tile-skeleton-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, #a78bfa, #818cf8);
  transition: width .25s ease;
}
.media-tile-skeleton.failed .media-tile-skeleton-bar-fill {
  background: #f87171;
}
/* Failed-download actions — the tile persists until the user retries or
   clears it, so these are the two ways out. */
.media-tile-skeleton-actions {
  display: flex;
  gap: 6px;
  margin-top: 8px;
}
.media-tile-skeleton-actions .skel-act {
  flex: 1;
  padding: 5px 8px;
  border-radius: 6px;
  font-size: 11.5px;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  border: 1px solid rgba(255,255,255,.14);
  background: rgba(255,255,255,.06);
  color: var(--text, #e8e8f0);
  transition: background .12s, border-color .12s;
}
.media-tile-skeleton-actions .skel-act.retry {
  border-color: rgba(167,139,250,.5);
  background: rgba(167,139,250,.16);
  color: #d6c8ff;
}
.media-tile-skeleton-actions .skel-act.retry:hover { background: rgba(167,139,250,.3); }
.media-tile-skeleton-actions .skel-act.clear:hover { background: rgba(248,113,113,.18); border-color: rgba(248,113,113,.5); }

/* A comic inspection can fail before a download starts. Its reason must be
   readable on the shelf, including at narrow widths. */
.media-tile-comics.media-tile-skeleton .media-tile-skeleton-info {
  max-height: 100%;
  box-sizing: border-box;
  overflow-y: auto;
}
.media-tile-comics.media-tile-skeleton .media-tile-skeleton-label,
.media-tile-comics.media-tile-skeleton .media-tile-skeleton-msg {
  white-space: normal;
  overflow-wrap: anywhere;
  line-height: 1.4;
}
.media-tile-comics.media-tile-skeleton .media-tile-skeleton-msg {
  font: inherit;
  font-size: 12px;
  color: var(--text-muted, #b8b5c5);
}
.media-tile-comics .media-tile-skeleton-actions .skel-act { min-height: 44px; }
.media-tile-skeleton-actions .skel-act:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
  .media-tile-shimmer { animation: none; }
  .media-tile-skeleton-bar-fill { transition: none; }
}

/* Rip-fixer: a repair in flight gets a warmer amber tint (distinct from the
   plain violet scrape skeleton) so an auto-fix reads as "Hearth is on it",
   not "still downloading". */
.media-tile-skeleton.repairing {
  background: linear-gradient(135deg, rgba(251,191,36,.10), rgba(167,139,250,.05));
  border-color: rgba(251,191,36,.4);
}
.media-tile-skeleton.repairing .media-tile-shimmer {
  background: linear-gradient(90deg, transparent 0%, rgba(251,191,36,.16) 50%, transparent 100%);
  background-size: 200% 100%;
}
.media-tile-skeleton.repairing .media-tile-skeleton-bar-fill {
  background: linear-gradient(90deg, #fbbf24, #a78bfa);
}
/* "✨ AI" pill — only shown once the LLM rung actually engaged. */
.media-tile-ai-pill {
  position: absolute;
  top: 8px; left: 8px;
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: .02em;
  color: #f5f3ff;
  background: linear-gradient(135deg, rgba(167,139,250,.95), rgba(129,140,248,.95));
  border: 1px solid rgba(255,255,255,.28);
  box-shadow: 0 1px 6px rgba(99,102,241,.4);
  pointer-events: none;
}

/* Select toggle — the discoverable entry point into multi-select. Fades in on
   tile hover, stays put once the tile is selected. Ctrl/Cmd+click and Shift+click
   still work; this exists so you don't have to know that (and because macOS eats
   Ctrl+click as a right-click before the tile ever sees it).

   It claims the top-left slot, which on video tiles is where .tile-topbadges
   starts — so that row gets --lane-x of left padding while the toggle is showing.
   At rest --lane-x is 0, so tiles you aren't pointing at don't move. */
/* The top-left lane, in order: select toggle · bundle chip · .tile-topbadges.
   Each occupant publishes its own width as a variable and --lane-x is their
   sum, so a new one is added by declaring its width here and nothing has to
   know about anything else's offsets. At rest every width is 0, so tiles you
   aren't pointing at don't move. (A tile frame does not join this lane: its
   rail owns the whole top edge, above the padding box everything here is laid
   out in.) */
.media-tile { --sel-x: 0px; --bundle-x: 0px;
              --lane-x: calc(var(--sel-x) + var(--bundle-x)); }
.media-tile:hover,
.media-tile.selected { --sel-x: calc(var(--chip-h) + var(--chrome-gap)); }
/* Bundled tiles lead the lane with the pink chip, so the badge row starts
   after it. --bundle-chip-w is published per-tile from the member count, so a
   3-digit bundle pushes the lane further without anything overlapping. */
.media-tile.in-bundle { --bundle-x: calc(var(--bundle-chip-w, 34px) + 6px); }
.media-tile.in-bundle .tile-bundle-chip { left: calc(var(--chrome-x) + var(--sel-x)); }

.tile-select {
  position: absolute;
  /* On a media tile the chrome tokens place this; the games grid, which has no
     such tokens, falls back to the 6px corner it has always used. */
  top: var(--chrome-y, 6px);
  left: var(--chrome-x, 6px);
  width: var(--chip-h, 22px);
  height: var(--chip-h, 22px);
  padding: 0;
  border-radius: var(--chip-r, 50%);
  border: 1px solid rgba(255,255,255,.55);
  background: rgba(12,14,18,.72);
  color: rgba(255,255,255,.75);
  font-size: 13px;
  font-weight: 700;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 4;
  opacity: 0;
  transform: scale(.85);
  backdrop-filter: blur(4px);
  box-shadow: 0 2px 6px rgba(0,0,0,.4);
  transition: opacity .15s ease, transform .15s ease, background .15s ease, border-color .15s ease;
}
.media-tile:hover .tile-select,
.tile-select:focus-visible {
  opacity: 1;
  transform: scale(1);
}
.tile-select:hover {
  background: rgba(167,139,250,.55);
  border-color: rgba(167,139,250,.9);
  color: #fff;
}
.tile-select:focus-visible {
  outline: 2px solid rgba(167,139,250,.9);
  outline-offset: 2px;
}
.tile-select.on {
  opacity: 1;
  transform: scale(1);
  background: rgba(167,139,250,.95);
  border-color: rgba(167,139,250,1);
  color: #fff;
}
.tile-select.on:hover {
  background: rgba(147,119,230,1);
}
/* Touch / trackpad-only surfaces get no hover event, so keep the affordance
   permanently visible there rather than making it unreachable — and hold the
   badge row's gap open permanently too, or the star stack sits under it. */
@media (hover: none) {
  .tile-select { opacity: .8; transform: scale(1); }
  .media-tile { --sel-x: calc(var(--chip-h) + var(--chrome-gap)); }
}

.media-bulk-bar {
  position: fixed;
  left: 50%;
  bottom: 24px;
  transform: translateX(-50%);
  background: rgba(20,22,28,.96);
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 8px 14px;
  display: flex;
  align-items: center;
  gap: 8px;
  /* The action set grows over time (Detect actors joined it), so the bar can
     outgrow a narrow window. Clamp to the viewport and wrap onto a second row
     instead of running off both edges — it is centre-anchored, so an overflow
     hides controls on BOTH sides. */
  max-width: calc(100vw - 24px);
  flex-wrap: wrap;
  justify-content: center;
  box-shadow: 0 10px 36px rgba(0,0,0,.55);
  z-index: 1000;
  backdrop-filter: blur(10px);
}
.media-bulk-bar.hidden { display: none; }
.media-bulk-count {
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
  margin-right: 4px;
  padding-right: 8px;
  border-right: 1px solid var(--border);
}

.media-prompt-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.55);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1100;
  backdrop-filter: blur(4px);
}
.media-prompt-panel {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 18px 20px;
  min-width: 380px;
  max-width: 520px;
  box-shadow: 0 16px 48px rgba(0,0,0,.6);
}
/* ── "Who's in this video?" confirm dialog ─────────────────────────── */
.detect-stars-panel { width: min(560px, 92vw); }
.detect-stars-list {
  max-height: min(52vh, 460px);
  overflow-y: auto;
  margin: 4px 0 14px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.detect-stars-group {
  border: 1px solid var(--border, rgba(255,255,255,.08));
  border-radius: 10px;
  padding: 10px 12px;
  background: rgba(255,255,255,.02);
}
.detect-stars-video {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-dim, rgba(255,255,255,.62));
  margin-bottom: 8px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.detect-stars-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 4px;
  border-radius: 8px;
  cursor: pointer;
  transition: background 120ms ease;
}
.detect-stars-row:hover { background: rgba(167,139,250,.10); }
.detect-stars-row input[type=checkbox] {
  accent-color: #a78bfa;
  width: 16px;
  height: 16px;
  flex: 0 0 auto;
  cursor: pointer;
}
.detect-stars-face {
  width: 40px;
  height: 40px;
  flex: 0 0 auto;
  border-radius: 50%;
  overflow: hidden;
  background: linear-gradient(135deg, rgba(167,139,250,.35), rgba(124,58,237,.45));
  border: 1px solid rgba(255,255,255,.14);
}
.detect-stars-face img { width: 100%; height: 100%; object-fit: cover; display: block; }
.detect-stars-face.noimg { background: rgba(255,255,255,.06); }
.detect-stars-meta { min-width: 0; flex: 1; }
.detect-stars-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text, #f0e6ff);
  display: flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.detect-stars-badge.new {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .3px;
  text-transform: uppercase;
  padding: 1px 5px;
  border-radius: 4px;
  background: rgba(52,211,153,.18);
  color: #6ee7b7;
  border: 1px solid rgba(52,211,153,.35);
  flex: 0 0 auto;
}
.detect-stars-why {
  font-size: 11px;
  margin-top: 1px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.detect-stars-why.conf-high { color: #6ee7b7; }
.detect-stars-why.conf-medium { color: rgba(255,255,255,.55); }
.detect-stars-why.conf-low { color: rgba(255,255,255,.42); }

/* Filtered-out names: closed by default, opened when you want to overrule the
   accuracy checks. Deliberately quieter than the suggestions above it — this is
   the "I looked at these and said no" pile, not a second list of answers. */
.detect-stars-rejected {
  margin-top: 8px;
  border-top: 1px solid var(--border, rgba(255,255,255,.08));
  padding-top: 6px;
}
.detect-stars-rejected > summary {
  display: flex;
  align-items: center;
  gap: 7px;
  list-style: none;
  cursor: pointer;
  padding: 4px 2px;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 600;
  color: var(--text-dim, rgba(255,255,255,.55));
  transition: background 120ms ease, color 120ms ease;
}
.detect-stars-rejected > summary::-webkit-details-marker { display: none; }
.detect-stars-rejected > summary:hover { background: rgba(255,255,255,.05); color: var(--text, #f0e6ff); }
.detect-stars-rejected > summary:focus-visible {
  outline: 2px solid rgba(167,139,250,.7);
  outline-offset: 1px;
}
.detect-stars-chevron {
  width: 0;
  height: 0;
  flex: 0 0 auto;
  border-left: 5px solid currentColor;
  border-top: 4px solid transparent;
  border-bottom: 4px solid transparent;
  transition: transform 140ms ease;
}
.detect-stars-rejected[open] > summary .detect-stars-chevron { transform: rotate(90deg); }
.detect-stars-rejected-hint {
  margin: 4px 2px 6px;
  font-size: 11px;
  line-height: 1.45;
  color: var(--muted, #94a3b8);
}
/* Dimmed until hovered/ticked, so the eye keeps going to the real suggestions. */
.detect-stars-rejected .detect-stars-row { opacity: .62; }
.detect-stars-rejected .detect-stars-row:hover,
.detect-stars-rejected .detect-stars-row:focus-within { opacity: 1; }
.detect-stars-rejected .detect-stars-face { width: 30px; height: 30px; }

/* Title repair rows: the NEW name reads as the headline, the old one sits under
   it struck through — you are approving a replacement, so both must be legible
   at a glance and neither may be truncated into ambiguity. */
.title-repair-row { align-items: flex-start; padding: 8px 4px; }
.title-repair-row input[type=checkbox] { margin-top: 2px; }
.title-repair-row .detect-stars-name { white-space: normal; overflow-wrap: anywhere; }
.title-repair-from {
  font-size: 11px;
  margin-top: 2px;
  color: var(--muted, #94a3b8);
  text-decoration: line-through;
  text-decoration-color: rgba(248,113,113,.65);
  overflow-wrap: anywhere;
}

.media-prompt-panel h3 {
  margin: 0 0 10px 0;
  font-size: 15px;
  font-weight: 600;
  color: var(--text);
}
.media-prompt-message {
  margin: 0 0 12px 0;
  font-size: 12px;
  color: var(--muted, #94a3b8);
  line-height: 1.45;
  white-space: pre-line;
}
.media-prompt-hint {
  margin: 10px 0 0 0;
  font-size: 11px;
  line-height: 1.45;
}
.media-prompt-panel input[type="text"] {
  width: 100%;
  padding: 8px 10px;
  background: rgba(255,255,255,.04);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text);
  font-size: 13px;
  outline: none;
}
.media-prompt-panel input[type="text"]:focus {
  border-color: rgba(167,139,250,.7);
  box-shadow: 0 0 0 2px rgba(167,139,250,.25);
}
.media-prompt-actions {
  margin-top: 14px;
  display: flex;
  gap: 8px;
  justify-content: flex-end;
}

/* ── Frame picker — "set thumbnail from a frame of the video" ───────────
   A scrub-and-grab dialog: video stage, seek track, sprite filmstrip.
   z-index sits ABOVE the fullscreen video player (9000) and its marker
   picker (9100), because the in-player capture path hands off to this
   dialog when the canvas turns out to be cross-origin tainted. */
.frame-pick-overlay { z-index: 9200; padding: 20px; animation: fadeIn 140ms ease-out; }
.frame-pick-panel {
  width: min(900px, 94vw);
  min-width: 0;
  max-width: none;
  max-height: 92vh;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 16px 18px;
  animation: framePickIn 180ms cubic-bezier(.2, .8, .2, 1);
}
@keyframes framePickIn {
  from { opacity: 0; transform: translateY(6px) scale(.985); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .frame-pick-overlay, .frame-pick-panel { animation: none; }
}

.frame-pick-head {
  display: flex;
  align-items: baseline;
  gap: 10px;
  min-width: 0;
}
.frame-pick-head h3 { margin: 0; flex: none; }
.frame-pick-name {
  flex: 1;
  min-width: 0;
  font-size: 12px;
  color: var(--text-dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Stage keeps the video's own ratio but never grows past the viewport; the
   video letterboxes inside it so a clamped stage still shows a correct frame. */
.frame-pick-stage {
  position: relative;
  width: 100%;
  max-height: 54vh;
  background: #000;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  overflow: hidden;
}
.frame-pick-video {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: contain;
  background: #000;
}
.frame-pick-skeleton,
.frame-pick-fail {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  flex-direction: column;
  font-size: 12px;
  color: var(--text-dim);
  background: linear-gradient(90deg, rgba(255,255,255,.03) 25%, rgba(255,255,255,.07) 37%, rgba(255,255,255,.03) 63%);
  background-size: 400% 100%;
  animation: media-shimmer 1.6s linear infinite;
}
.frame-pick-fail {
  animation: none;
  background: rgba(248,113,113,.10);
  color: var(--text);
}
.frame-pick-fail p { margin: 0; }
.frame-pick-skeleton.hidden,
.frame-pick-fail.hidden,
.frame-pick-seeking.hidden,
.frame-pick-hover.hidden,
.frame-pick-strip.hidden { display: none; }
.frame-pick-spinner {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  border: 2px solid rgba(167,139,250,.22);
  border-top-color: var(--accent);
  animation: scrape-spin .7s linear infinite;
}
/* Only shown when a seek is genuinely slow — see showSeeking() in common.js. */
.frame-pick-seeking {
  position: absolute;
  left: 50%;
  bottom: 10px;
  transform: translateX(-50%);
  padding: 3px 9px;
  border-radius: 999px;
  background: rgba(0,0,0,.72);
  color: #fff;
  font-size: 11px;
  pointer-events: none;
}

.frame-pick-bar {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.frame-pick-btn {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  padding: 0;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface-2);
  color: var(--text);
  cursor: pointer;
  transition: background 140ms ease, border-color 140ms ease, transform 140ms ease;
}
.frame-pick-btn.small {
  width: auto;
  min-width: 40px;
  height: 30px;
  padding: 0 9px;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}
.frame-pick-btn:hover { background: var(--surface-3); border-color: var(--border-strong); }
.frame-pick-btn:active { transform: scale(.96); }
.frame-pick-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.frame-pick-btn svg { width: 18px; height: 18px; display: block; }
.frame-pick-btn .fp-icon-pause { display: none; }
.frame-pick-panel.playing .fp-icon-play { display: none; }
.frame-pick-panel.playing .fp-icon-pause { display: block; }
.frame-pick-steps { display: flex; gap: 6px; flex: none; }
.frame-pick-time {
  flex: none;
  min-width: 124px;
  font-size: 12px;
  color: var(--text-dim);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* Same shape as the main player's scrubber so the two feel like one control. */
.frame-pick-track-wrap {
  flex: 1 1 220px;
  position: relative;
  height: 28px;
  display: flex;
  align-items: center;
  min-width: 140px;
}
.frame-pick-track {
  position: relative;
  width: 100%;
  height: 6px;
  background: rgba(255,255,255,.18);
  border-radius: 3px;
  cursor: pointer;
  touch-action: none;
  transition: height 120ms ease;
}
.frame-pick-track-wrap:hover .frame-pick-track,
.frame-pick-track-wrap.scrubbing .frame-pick-track { height: 10px; }
.frame-pick-buffered,
.frame-pick-progress {
  position: absolute;
  left: 0; top: 0;
  height: 100%;
  border-radius: 3px;
  pointer-events: none;
}
.frame-pick-buffered { background: rgba(255,255,255,.22); }
.frame-pick-progress { background: var(--accent); }
.frame-pick-knob {
  position: absolute;
  left: 0;
  top: 50%;
  width: 12px;
  height: 12px;
  margin-left: -6px;
  margin-top: -6px;
  background: var(--accent);
  border-radius: 50%;
  pointer-events: none;
  box-shadow: 0 0 0 3px rgba(167,139,250,.18);
  transition: opacity 120ms ease;
}
.frame-pick-hover {
  position: absolute;
  bottom: 26px;
  left: 0;
  transform: translateX(-50%);
  padding: 2px 6px;
  background: rgba(0,0,0,.85);
  color: #fff;
  font-size: 11px;
  border-radius: 3px;
  font-variant-numeric: tabular-nums;
  pointer-events: none;
  white-space: nowrap;
}

/* Filmstrip of the pre-rendered hover-scrub sprite — coarse jumps. */
.frame-pick-strip {
  display: flex;
  gap: 4px;
  overflow-x: auto;
  padding-bottom: 2px;
}
.frame-pick-cell {
  flex: 1 1 0;
  min-width: 54px;
  height: 42px;
  padding: 0;
  border: 1px solid var(--border);
  border-radius: 6px;
  background-color: #000;
  background-repeat: no-repeat;
  background-size: 1000% 100%;
  cursor: pointer;
  opacity: .62;
  transition: opacity 140ms ease, border-color 140ms ease, transform 140ms ease;
}
.frame-pick-cell:hover { opacity: 1; border-color: var(--border-strong); }
.frame-pick-cell:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.frame-pick-cell.active {
  opacity: 1;
  border-color: var(--accent);
  box-shadow: 0 0 0 1px rgba(167,139,250,.45);
}

.frame-pick-foot {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.frame-pick-hint {
  flex: 1 1 220px;
  min-width: 0;
  font-size: 11px;
  color: var(--text-mute);
  line-height: 1.4;
}
.frame-pick-actions { margin-top: 0; flex: none; }

/* Narrow windows: the stage gets more of the height, controls stack. */
@media (max-width: 640px) {
  .frame-pick-overlay { padding: 10px; }
  .frame-pick-panel { width: 100%; padding: 14px; gap: 10px; }
  .frame-pick-stage { max-height: 42vh; }
  .frame-pick-time { min-width: 0; font-size: 11px; }
  .frame-pick-track-wrap { flex-basis: 100%; order: 3; }
  .frame-pick-steps { margin-left: auto; }
  .frame-pick-cell { min-width: 44px; height: 34px; }
  .frame-pick-hint { flex-basis: 100%; }
  .frame-pick-actions { flex: 1; }
  .frame-pick-actions .btn { flex: 1; }
}

/* Category groups in the sidebar */
.cat-group {
  margin-top: 4px;
  border-top: 1px solid var(--border);
  padding-top: 4px;
}
.cat-group-header {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  font-weight: 600;
  color: rgba(255,255,255,.75);
  padding: 3px 2px;
  cursor: pointer;
  user-select: none;
}
.cat-group-header:hover { color: var(--text); }
.cat-group-chev { font-size: 10px; opacity: .7; }
.cat-group-name { flex: 1; }
.cat-group-count {
  font-size: 10px;
  color: rgba(255,255,255,.45);
  font-variant-numeric: tabular-nums;
}
.cat-group-body {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 4px 0;
  min-height: 26px;
  border-radius: 4px;
  transition: background .12s, outline .12s;
  outline: 1px dashed transparent;
}
.cat-group-body.drop-target {
  outline-color: rgba(167,139,250,.6);
  background: rgba(167,139,250,.08);
}
.cat-group.collapsed .cat-group-body { display: none; }
.cat-group-ungrouped { min-height: 26px; }
.cat-chip.dragging { opacity: .5; }
.cat-groups-cog {
  padding: 4px 7px;
  margin-left: 6px;
  vertical-align: middle;
  line-height: 0;
}
.cat-groups-cog svg { display: block; }

/* Manage Category Groups modal — wide multi-column layout */
.cat-groups-panel {
  min-width: 720px;
  max-width: 1100px;
  max-height: 86vh;
  display: flex;
  flex-direction: column;
}
.cat-groups-newrow {
  display: flex;
  gap: 8px;
  margin: 8px 0 12px;
}
.cat-groups-newrow input[type="text"] {
  flex: 1;
  padding: 6px 10px;
  background: rgba(255,255,255,.04);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text);
  font-size: 13px;
  outline: none;
}
.cat-groups-cols {
  display: flex;
  gap: 10px;
  overflow-x: auto;
  flex: 1;
  min-height: 280px;
  padding-bottom: 8px;
}
.cat-group-col {
  flex: 0 0 220px;
  display: flex;
  flex-direction: column;
  background: rgba(0,0,0,.18);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 8px;
  max-height: 60vh;
}
.cat-group-col.is-ungrouped {
  background: rgba(167,139,250,.06);
  border-color: rgba(167,139,250,.3);
}
.cat-group-col-head {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 700;
  margin-bottom: 8px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--border);
}
.cat-group-col-name { flex: 1; }
.cat-group-col-count {
  font-size: 10px;
  color: rgba(255,255,255,.5);
  font-variant-numeric: tabular-nums;
}
.cat-group-col-body {
  flex: 1;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 4px;
  border-radius: 4px;
  transition: background .12s, outline .12s;
  outline: 1px dashed transparent;
}
.cat-group-col-body.drop-target {
  outline-color: rgba(167,139,250,.7);
  background: rgba(167,139,250,.08);
}
.cat-group-pill {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 6px 10px;
  font-size: 12px;
  cursor: grab;
  user-select: none;
  color: var(--text);
}
.cat-group-pill:hover {
  border-color: rgba(167,139,250,.6);
  background: rgba(167,139,250,.08);
}
.cat-group-pill:active { cursor: grabbing; }

/* Collapsible Server section in the media sidebar */
.media-section-server h3 {
  display: flex;
  align-items: center;
  gap: 6px;
}
.media-server-chevron {
  margin-left: auto;
  font-size: 11px;
  color: rgba(255,255,255,.55);
  transition: transform .15s;
}
.media-section-server.collapsed .media-section-server-body { display: none; }
.media-section-server-body {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

/* Quick-add button in the Server header — always visible, fires the scrape
   modal even when the section is collapsed. */
.media-server-quickadd {
  margin-left: auto;
  width: 24px; height: 24px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: rgba(167,139,250,.18);
  color: #c4b5fd;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  transition: background .12s, border-color .12s, transform .08s;
}
.media-server-quickadd:hover {
  background: rgba(167,139,250,.35);
  border-color: rgba(167,139,250,.7);
  transform: scale(1.08);
}
/* When the quickadd is present, the chevron sits to its right (not auto-flushed). */
.media-section-server h3 .media-server-quickadd + .media-server-chevron { margin-left: 4px; }

/* Rating filter — sidebar visualizer */
.media-rating-filter {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.media-rating-filter [data-rating-pick] {
  align-self: flex-start;
}
.media-rating-filter [data-rating-pick] .rating-star {
  font-size: 18px;
  padding: 0 3px;
}
.media-rating-filter-controls {
  display: flex;
  gap: 6px;
  align-items: center;
  font-size: 11px;
}
.media-rating-filter-controls [data-rating-mode] {
  font-variant-numeric: tabular-nums;
}

/* Star picker — pill grid + search-as-create */
.star-picker-panel {
  min-width: 480px;
  max-width: 640px;
  max-height: 80vh;
  display: flex;
  flex-direction: column;
}
.star-picker-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 12px;
  padding: 8px;
  background: rgba(0,0,0,.18);
  border: 1px solid var(--border);
  border-radius: 6px;
  max-height: 320px;
  overflow-y: auto;
}
.star-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 12px 4px 4px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 999px;
  cursor: pointer;
  color: var(--text);
  font-size: 12px;
  font-weight: 500;
  transition: border-color .12s, background .12s, transform .08s;
}
.star-pill:hover {
  border-color: rgba(167,139,250,.7);
  transform: translateY(-1px);
}
.star-pill.selected {
  background: rgba(167,139,250,.18);
  border-color: rgba(167,139,250,.95);
}
.star-pill.already {
  background: rgba(167,139,250,.08);
}
/* Star already on the item, toggled OFF this session → pending removal. */
.star-pill.removing {
  border-color: rgba(248,113,113,.85);
  background: rgba(248,113,113,.10);
}
.star-pill.removing .star-pill-name {
  text-decoration: line-through;
  opacity: .75;
}
.star-pill-avatar {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: rgba(167,139,250,.18);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  font-size: 9px;
  font-weight: 700;
  flex-shrink: 0;
}
.star-pill-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.star-picker-summary {
  margin-top: 10px;
  font-size: 11px;
  color: rgba(255,255,255,.6);
  min-height: 14px;
}

/* Source tray — the dock's smaller walnut/brass companion. The grid's framed
   labels project 11px upward (14px on hover); reserve that space in flow. */
.media-sources {
  --source-brass: 198, 160, 94;
  --source-ember: 245, 158, 11;
  --source-ink: #f4ead8;
  --source-muted: #c4b59d;
  --source-wood: #211b15;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 10px;
  min-width: 0;
  margin: 0 0 30px;
  padding: 9px 12px;
  border: 1px solid rgba(var(--source-brass), .4);
  border-radius: 12px;
  background:
    linear-gradient(180deg, rgba(var(--source-brass), .08), transparent 48%),
    repeating-linear-gradient(97deg, transparent 0 3px, rgba(0, 0, 0, .09) 3px 5px),
    var(--source-wood);
  box-shadow: inset 0 1px 0 rgba(var(--source-brass), .17), inset 0 -3px 0 rgba(0, 0, 0, .3), 0 6px 14px -10px #000;
}
.media-sources.hidden { display: none; }
.media-sources-all { min-width: 0; }
.media-sources-window {
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr) 44px;
  align-items: center;
  gap: 3px;
  min-width: 0;
}
.media-sources-viewport { position: relative; min-width: 0; }
.media-source-track {
  position: relative;
  display: flex;
  min-width: 0;
  gap: 6px;
  padding: 3px;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scrollbar-width: none;
  scroll-snap-type: x mandatory;
  scroll-padding-inline: 3px;
}
.media-source-track::-webkit-scrollbar { display: none; }
.media-source-chip,
.media-source-nav,
.media-sources-icons,
.media-sources-expand {
  min-height: 44px;
  border-radius: 8px;
  border: 1px solid rgba(var(--source-brass), .28);
  background: linear-gradient(180deg, rgba(255, 236, 202, .05), rgba(0, 0, 0, .15)), rgba(6, 5, 4, .6);
  box-shadow: inset 0 1px 0 rgba(var(--source-brass), .1), inset 0 -1px 0 rgba(0, 0, 0, .5);
  color: var(--source-ink);
  font-family: inherit;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  touch-action: manipulation;
  transition: border-color .15s, background-color .15s, color .15s;
}
.media-source-chip {
  display: flex;
  align-items: center;
  flex: 0 0 calc((100% - (var(--source-slots, 1) - 1) * 6px) / var(--source-slots, 1));
  scroll-snap-align: start;
  min-width: 0;
  gap: 8px;
  padding: 0 10px;
}
.media-source-chip:hover,
.media-source-nav:hover:not([aria-disabled='true']),
.media-sources-icons:hover,
.media-sources-expand:hover { border-color: rgba(var(--source-brass), .75); background-color: rgba(var(--source-brass), .13); }
.media-source-chip:focus-visible,
.media-source-nav:focus-visible,
.media-sources-icons:focus-visible,
.media-sources-expand:focus-visible { outline: 2px solid var(--source-ink); outline-offset: 1px; }
.media-source-chip:active,
.media-source-nav:active:not([aria-disabled='true']),
.media-sources-icons:active,
.media-sources-expand:active { background-color: rgba(var(--source-ember), .22); }
.media-source-chip.active,
.media-sources-icons[aria-pressed='true'] {
  border-color: rgba(var(--source-ember), .8);
  background-color: rgba(var(--source-ember), .2);
  box-shadow: inset 0 -2px 0 rgba(var(--source-ember), .8), inset 0 1px 0 rgba(var(--source-brass), .18);
}
.media-source-chip > img { width: 22px; height: 22px; display: block; flex: none; object-fit: contain; }
.media-source-chip-label {
  min-width: 0;
  text-align: left;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.media-source-count {
  flex: none;
  margin-left: auto;
  padding-left: 6px;
  border-left: 1px solid rgba(var(--source-brass), .22);
  color: var(--source-muted);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}
.media-source-all { width: 100%; }
.media-source-nav { display: grid; place-items: center; width: 44px; padding: 0; color: var(--source-muted); }
.media-source-nav > span { font: 26px/1 Georgia, serif; }
.media-source-nav[aria-disabled='true'] { opacity: .35; cursor: default; }
.media-sources-icons { padding: 0 12px; }
.media-sources-expand { display: flex; align-items: center; justify-content: center; gap: 9px; padding: 0 12px; white-space: nowrap; }
.media-source-chevron { width: 7px; height: 7px; border-right: 1.5px solid; border-bottom: 1.5px solid; transform: translateY(-2px) rotate(45deg); }
.media-sources.expanded { grid-template-columns: minmax(0, 1fr) auto auto; }
.media-sources.expanded .media-sources-all { justify-self: start; max-width: 100%; }
.media-sources.expanded .media-sources-icons { grid-column: 2; grid-row: 1; }
.media-sources.expanded .media-sources-expand { grid-column: 3; grid-row: 1; }
.media-sources.expanded .media-source-chevron { transform: translateY(2px) rotate(225deg); }
.media-sources.expanded .media-sources-window { grid-column: 1 / -1; grid-row: 2; display: block; }
.media-sources.expanded .media-source-nav { display: none; }
.media-sources.expanded .media-source-track { flex-wrap: wrap; overflow: visible; scroll-snap-type: none; }
.media-sources.expanded .media-source-chip { flex: 1 0 170px; }
/* Follow the available shelf width too: an open sidebar/detail panel can
   leave a narrow tray inside a desktop viewport. */
.media-sources.compact { grid-template-columns: minmax(0, 1fr) auto auto; gap: 6px; padding: 8px; }
.media-sources.compact .media-sources-all { justify-self: start; max-width: 100%; }
.media-sources.compact .media-sources-icons { grid-column: 2; grid-row: 1; }
.media-sources.compact .media-sources-expand { grid-column: 3; grid-row: 1; }
.media-sources.compact .media-sources-window { grid-column: 1 / -1; grid-row: 2; }
.media-sources.compact.expanded .media-source-chip { flex-basis: 140px; }
@media (max-width: 700px) {
  .media-sources { grid-template-columns: minmax(0, 1fr) auto auto; gap: 6px; padding: 8px; }
  .media-sources-all { justify-self: start; max-width: 100%; }
  .media-sources-icons { grid-column: 2; grid-row: 1; }
  .media-sources-expand { grid-column: 3; grid-row: 1; }
  .media-sources-window { grid-column: 1 / -1; grid-row: 2; }
  .media-sources.expanded .media-source-chip { flex-basis: 140px; }
}
/* Opt-in icon mode is separate from the narrow-layout .compact class. Names
   and counts rejoin the row on hover/focus; no floating tooltip or overlay. */
.media-sources.icons-only .media-source-track { scroll-snap-type: none; }
.media-sources.icons-only .media-source-chip,
.media-sources.icons-only.expanded .media-source-chip { flex: 0 0 auto; width: auto; min-width: 44px; max-width: 100%; }
.media-sources.icons-only .media-source-chip-label,
.media-sources.icons-only .media-source-count { display: none; }
.media-sources.icons-only .media-source-chip:is(:hover, :focus-visible) > .media-source-chip-label,
.media-sources.icons-only .media-source-chip:is(:hover, :focus-visible) > .media-source-count { display: block; }
.media-sources.icons-only .media-source-chip-label { max-width: 180px; }
/* Touch has no hover. A tapped button keeps its name visible while focused. */
@media (hover: none) {
  .media-sources.icons-only .media-source-chip:focus > .media-source-chip-label,
  .media-sources.icons-only .media-source-chip:focus > .media-source-count { display: block; }
}
@media (prefers-reduced-motion: reduce) {
  .media-source-chip, .media-source-nav, .media-sources-icons, .media-sources-expand { transition: none; }
}

/* Star chip — avatar + name in a pill, used in sidebar Stars filter list */
.star-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding-left: 3px;
  padding-right: 10px;
}
.star-chip-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: rgba(167,139,250,.18);
  color: var(--text);
  font-size: 9px;
  font-weight: 700;
  flex-shrink: 0;
  overflow: hidden;
}
.star-chip-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.star-chip-name {
  font-size: 11px;
  font-weight: 500;
}

/* Stars manager modal bulk action bar */
.stars-bulk-bar {
  display: flex;
  gap: 8px;
  align-items: center;
  padding: 8px 0;
  border-bottom: 1px solid var(--border);
  margin-bottom: 8px;
}
.stars-bulk-count {
  flex: 1;
  font-size: 12px;
  color: rgba(255,255,255,.55);
}

/* Stars manager modal rows */
.stars-row {
  display: flex;
  gap: 8px;
  align-items: center;
  padding: 6px 0;
}
.stars-row.stars-row-hidden { opacity: 0.55; }
.stars-row-uses {
  display: inline-block;
  min-width: 28px;
  padding: 2px 8px;
  font-size: 11px;
  font-weight: 600;
  text-align: center;
  background: rgba(167,139,250,.18);
  color: #d6c9ff;
  border-radius: 999px;
}
.stars-row-uses.empty {
  background: rgba(255,255,255,.06);
  color: var(--text-mute);
  font-weight: 500;
  font-style: italic;
}
.stars-row input[type="text"] {
  flex: 1;
  padding: 6px 10px;
  background: rgba(255,255,255,.04);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text);
  font-size: 13px;
  outline: none;
}
.star-avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: rgba(167,139,250,.12);
  padding: 0;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  flex-shrink: 0;
  font-size: 12px;
  font-weight: 700;
  color: var(--text);
  transition: border-color .12s;
}
.star-avatar:hover {
  border-color: rgba(167,139,250,.7);
}
.star-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.media-ctx-menu {
  position: fixed;
  z-index: 1200;
  background: rgba(22,24,30,.98);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 4px;
  min-width: 180px;
  box-shadow: 0 12px 36px rgba(0,0,0,.6);
  backdrop-filter: blur(8px);
  display: flex;
  flex-direction: column;
}
.media-ctx-item {
  background: transparent;
  border: none;
  color: var(--text);
  text-align: left;
  padding: 7px 12px;
  font-size: 13px;
  border-radius: 5px;
  cursor: pointer;
}
.media-ctx-item:hover {
  background: rgba(167,139,250,.18);
}
.media-ctx-item.is-disabled,
.media-ctx-item:disabled {
  opacity: .45;
  cursor: default;
  background: transparent;
}
.media-ctx-item.danger {
  color: #f87171;
}
.media-ctx-item.danger:hover {
  background: rgba(248,113,113,.18);
}
.media-ctx-sep {
  height: 1px;
  background: var(--border);
  margin: 4px 4px;
}

/* Make Source URLs readable on dark detail modal */
.detail-row a {
  color: #c4b5fd;
  text-decoration: none;
}
.detail-row a:hover {
  color: #e9d5ff;
  text-decoration: underline;
}
/* One source of truth for a media tile's BOX. The tab sets the ratio once, and
   every tile that tab can draw — an ordinary item, a download/scrape skeleton,
   a collapsed bundle stack — is that exact box. Anything that owns its own
   ratio instead drifts, and because the grid row stretches to its tallest
   member, one taller tile puts dead space under every normal card beside it. */
.media-tile-comics { --tile-aspect: 3 / 4; }
.media-tile-images { --tile-aspect: 1 / 1; }
.media-tile-videos { --tile-aspect: 16 / 9; }
.media-tile-comics,
.media-tile-images,
.media-tile-videos { aspect-ratio: var(--tile-aspect); }

.media-tile > img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  background: #0a0b10;
}
.media-tile-videos > img {
  object-fit: cover;
}
/* Portrait video (fitPortraitTile in media/common.js): the tile keeps the
   grid's 16:9 box, but the poster is shown whole — sized to the tile's height
   at its own ratio and centred — over a quiet neutral backdrop instead of
   being cropped to a zoomed-in band. Forty forge-generated backdrops
   (media/icons/portrait-bg-<n>.webp); fitPortraitTile picks one per item and
   sets --portrait-bg inline. The shadow lifts the frame off the
   backdrop so it reads as a picture, not a hole. */
.media-tile-videos.media-tile-portrait {
  background: #0a0b10 var(--portrait-bg, none) center / cover no-repeat;
}
.media-tile-videos.media-tile-portrait > img {
  width: auto;
  max-width: 100%;
  height: 100%;
  aspect-ratio: var(--media-ar, 9 / 16);
  align-self: center;
  object-fit: contain;
  background: transparent;
  box-shadow: 0 0 0 1px rgba(255,255,255,.06), 0 0 26px 6px rgba(0,0,0,.6);
}
.media-tile .tile-meta {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 8px 10px;
  background: linear-gradient(to top, rgba(0,0,0,.92), rgba(0,0,0,.55) 60%, transparent);
  color: var(--text);
}
.media-tile .tile-title {
  /* The library-tab .tile-title rule sets display:-webkit-box + line-clamp
     for 2-line wrapping; on media tiles we want a single ellipsised line,
     so force display:block here to neutralise -webkit-box (otherwise
     text-overflow:ellipsis doesn't truncate and the title runs into the
     rating strip). */
  display: block;
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
  max-width: 100%;
}
/* ── The nameplate ──────────────────────────────────────────────────────
   A video's name used to be bare white text lying on the scrim, so every grid
   read as artwork with a caption dropped on it — and on a framed tile (gold /
   violet / cyan) the name was the one part of the card that belonged to
   nothing. It sits on a painted plaque now: a pewter field with a hairline
   rule top and bottom, closed at each end by a scrollwork bracket
   (icons/tile/plate-cap-l|r.webp — one forge-painted plate's end, cut out and
   mirrored, so both ends are the same casting).

   The plaque is the BAR, not the text — see "the tile docks" at the end of
   this file. One frame per bar, and the name, the score and every badge live
   inside it. Putting the face on the title instead gave a tile two frames
   stacked in one band, which is the thing Rober asked to be rid of.

   It is deliberately NEUTRAL — pewter and bone, no colour of its own. The three
   state frames already speak in colour, and a plate that joined in would turn
   the tile into an argument; this one reads the same under every frame and
   under none, so the name always looks like the name.

   The bracket ships at 40x78 — about 2.6x the size it is drawn at, sharpened
   for that size on purpose. Handing the browser the 128px original made the
   scrollwork grey mush at 13px; a purpose-built small asset keeps the curls
   legible and is a tenth of the bytes. */
.media-tile {
  --plate-h: 26px;
  --plate-cap: 14px;   /* the art is 40x78, so a bracket is ≈ .51 × --plate-h */
}
.media-tile .tile-title,
.media-tile .bundle-tile-title {
  letter-spacing: .15px;
  color: #f3f5f9;
  text-shadow: 0 1px 2px rgba(0,0,0,.9);
}

/* ⛔ There is NO reserved strip any more, and there must not be one again.
   The score used to float over the band and the title made room for it with a
   `padding-right` of a guessed width — which was wrong twice over: the number
   had to be re-derived every time the bar or the plate changed (it silently
   re-opened a 2px overlap once), and it was hung on `:hover` while a rated or
   busted tile shows its score AT REST, so on exactly the tiles with a score
   the name ran straight under the stars (Rober, 2026-09-28: "i think these
   overlap when scored to the bust + the stars").

   The band is a two-cell row instead: the name, then the score. The title
   ellipsises where the bar begins at whatever width the bar actually is —
   narrower at rest, where only the filled stars show — and when there is no
   score to show the cell collapses and the name gets the whole band. Nothing
   to keep in sync, and an overlap is not expressible. The subtitle lines a
   comic carries stay under the title, in the name column. */
/* The band's two-cell layout lives with the bottom dock at the end of this
   file — it is one of the two bars, not a thing of its own. */

.media-tile .tile-sub {
  font-size: 11px;
  color: rgba(255,255,255,.7);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.media-tile .tile-sub.muted { color: rgba(255,255,255,.5); }

.media-tile .tile-duration {
  position: absolute;
  right: 6px; top: 6px;
  background: rgba(0,0,0,.78);
  color: #fff;
  padding: 2px 6px;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  border-radius: 4px;
  transition: opacity .15s;
}
/* The edit "…" button takes this corner on hover; let it have the spot. */
.media-tile:hover .tile-duration { opacity: 0; }

/* Animated (GIF-style) image tiles — badge top-left (duration + edit own the
   right corner) and a hover-play <video> overlay covering the tile. */
.media-tile .tile-gif-badge {
  position: absolute;
  left: 6px; top: 6px;
  z-index: 3;
  background: rgba(244,114,182,.24);
  color: #f9a8d4;
  border: 1px solid rgba(244,114,182,.45);
  padding: 1px 6px;
  font: 600 10px ui-monospace, monospace;
  letter-spacing: .05em;
  border-radius: 4px;
  pointer-events: none;
}
.media-tile .tile-gif-preview {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: 2;
  background: #000;
  pointer-events: none;
}

/* Active-download skeleton tile (videos grid). Placeholder cover + name +
   speed/ETA + progress bar. Tile is dim and tagged so the user can tell it
   apart from real videos at a glance. */
.video-torrent-skeleton {
  cursor: pointer;
  background: linear-gradient(135deg, #1a1a22 0%, #14141a 100%);
  border: 1px dashed rgba(255,255,255,.12);
  overflow: hidden;
  position: relative;
}
/* Fills the card, which already owns the 16/9 via --tile-aspect. It used to
   declare its own 16/9 in flow: that consumed the whole card, and the name +
   speed/ETA underneath it were pushed past the bottom edge and clipped away by
   the tile's overflow:hidden — the download showed a % pill and nothing else. */
.video-torrent-skeleton .video-torrent-cover {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  color: rgba(255,255,255,.55);
  background:
    repeating-linear-gradient(45deg, rgba(255,255,255,.025) 0 8px, transparent 8px 16px),
    linear-gradient(135deg, #1f1f28 0%, #16161d 100%);
}
.video-torrent-skeleton .video-torrent-pct {
  background: rgba(255, 140, 60, .92);
  color: #1a1009;
  font-weight: 600;
}
.video-torrent-skeleton:hover .tile-duration { opacity: 1; }
/* Overlaid on the cover, same as every other tile's footer, so the box stays
   exactly one --tile-aspect tall however long the torrent name is. */
.video-torrent-skeleton .video-torrent-label {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  z-index: 2;
  padding: 6px 8px 10px;
  color: var(--text);
  background: linear-gradient(to top, rgba(0,0,0,.92), rgba(0,0,0,.55) 60%, transparent);
}
.video-torrent-skeleton .video-torrent-name {
  font-size: 12px;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.video-torrent-skeleton .video-torrent-meta {
  font-size: 10px;
  color: var(--text-mute);
  margin-top: 2px;
  font-variant-numeric: tabular-nums;
}
.video-torrent-skeleton .video-torrent-bar {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  z-index: 3;
  height: 3px;
  background: rgba(255,255,255,.06);
}
.video-torrent-skeleton .video-torrent-fill {
  height: 100%;
  background: linear-gradient(90deg, #ff8c3c, #ffb066);
  transition: width .6s ease;
}
/* Inside a Toons shelf the placeholder is an episode card's width (down to
   110px), so it wears what a real episode card wears at rest: the EP pill
   top-left, the % badge top-right, one line of status and the bar. The
   release name is in the tooltip; the shelf header already names the show. */
.video-torrent-skeleton.is-shelved .video-torrent-name { display: none; }
.video-torrent-skeleton.is-shelved .video-torrent-label { padding: 4px 6px 7px; }
.video-torrent-skeleton.is-shelved .video-torrent-meta {
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.video-torrent-skeleton.is-shelved .video-torrent-cover svg { width: 24px; height: 24px; }
.video-torrent-skeleton .video-torrent-ep {
  position: absolute;
  top: 6px; left: 6px;
  z-index: 2;
}

/* Hover-scrub overlay: covers the thumb while the tile is hovered, cycles
   through a 10-frame sprite via JS background-position changes. */
.media-tile .tile-scrub {
  position: absolute;
  left: 0; top: 0; right: 0; bottom: 0;
  background-repeat: no-repeat;
  background-color: #000;
  pointer-events: none;
  z-index: 1;
  opacity: 1;
  transition: opacity 1.3s ease-out;
  /* Sit BELOW the bottom-meta gradient and overlay badges so the title/
     rating/duration still show through, but ABOVE the still <img>. */
}
.media-tile .tile-scrub.lingering { opacity: 0; }
/* Portrait: the sprite's frames are portrait too, so the scrub layer takes
   the poster's footprint (not the whole 16:9 tile, which stretched each frame
   sideways) and the backdrop stays visible either side. */
.media-tile-portrait .tile-scrub {
  left: 50%;
  right: auto;
  height: 100%;
  aspect-ratio: var(--media-ar, 9 / 16);
  max-width: 100%;
  transform: translateX(-50%);
}

/* Browser tab — multi-tab webview shell */
.browser-view { display: flex; flex-direction: column; height: 100%; }
.browser-view.hidden { display: none; }
.tab-bar.browser-hides-nav,
.view-tabs.browser-hides-nav,
header.topbar.browser-hides-nav { display: none !important; }
#browser-tabbar {
  display: flex; align-items: center; gap: 4px;
  background: #1a1d24; border-bottom: 1px solid #2a2d36;
  padding: 4px 6px; flex: 0 0 36px; box-sizing: border-box;
  /* Empty space on the tab strip is a window-drag region (matches every
     modern browser's tab bar). Interactive children opt back out via
     -webkit-app-region: no-drag below. */
  -webkit-app-region: drag;
}
#browser-tabbar button,
#browser-tabbar input,
#browser-tabbar .browser-tab,
#browser-tabbar #browser-tabs,
#browser-tabbar #browser-newtab,
#browser-tabbar #browser-hearth-toggle {
  -webkit-app-region: no-drag;
}
#browser-hearth-toggle { width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; background: rgba(167,139,250,.15); border: 1px solid rgba(167,139,250,.4); color: #c4b5fd; border-radius: 6px; cursor: pointer; padding: 0; flex-shrink: 0; }
#browser-hearth-toggle:hover { background: rgba(167,139,250,.3); }
/* No flex:1 here — tabs take only the room they need so the new-tab
   `+` button sits immediately to their right (instead of being pushed to
   the far end of the bar). The bar's right side just stays empty. */
#browser-tabs { display: flex; gap: 3px; overflow-x: auto; min-width: 0; max-width: calc(100% - 40px); flex: 0 1 auto; }
#browser-tabs::-webkit-scrollbar { display: none; height: 0; }
.browser-tab { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; background: rgba(255,255,255,.04); border: 1px solid var(--border, #2a2d36); border-radius: 6px 6px 0 0; font-size: 12px; color: var(--text, #e8e8f0); cursor: pointer; max-width: 180px; min-width: 80px; user-select: none; flex-shrink: 0; }
.browser-tab:hover { background: rgba(167,139,250,.10); }
.browser-tab.active { background: rgba(167,139,250,.18); border-color: rgba(167,139,250,.6); }
.browser-tab-favicon { width: 14px; height: 14px; flex-shrink: 0; }
.browser-tab-title { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 11px; }
.browser-tab-close { width: 16px; height: 16px; border: none; background: transparent; color: #aaa; cursor: pointer; padding: 0; font-size: 14px; line-height: 1; border-radius: 50%; }
.browser-tab-close:hover { background: rgba(255,255,255,.15); color: #fff; }
#browser-newtab { width: 26px; height: 26px; border: 1px solid var(--border, #2a2d36); background: rgba(255,255,255,.04); color: var(--text, #e8e8f0); border-radius: 6px; cursor: pointer; font-size: 16px; line-height: 1; padding: 0; flex-shrink: 0; }
#browser-newtab:hover { background: rgba(167,139,250,.15); border-color: rgba(167,139,250,.5); }
/* ── Hearth view pins in the tab strip (Home / Videos / Images / Toons) ──
   Only while the Hearth nav is collapsed (the real view-tabs are off screen),
   and only on LEFTOVER room: renderBrowserViewPins() measures after the
   browser tabs and condenses the pins — labels off the low-priority pair,
   then icon-only, then dropped by priority — until the tabs stop being
   squeezed. Home is the floor; it never drops. Same ghost-pill language as
   the new-tab and Home-toggle buttons, so they read as chrome, not as tabs.
   They sit at the FAR RIGHT (margin-left:auto) so the tabs start at the left
   edge; the hairline divider is therefore on their left. */
#browser-viewpins {
  display: flex; align-items: center; gap: 3px;
  flex: 0 0 auto; min-width: 0;
  margin-left: auto; /* far right: tabs + "+" stay flush left */
  -webkit-app-region: no-drag;
}
#browser-viewpins[hidden] { display: none; }
#browser-viewpins:not(:empty)::before {
  content: ""; width: 1px; height: 18px; flex: none;
  margin: 0 4px 0 3px; background: var(--border, #2a2d36);
}
.browser-viewpin {
  position: relative;   /* anchors its send-to badge (.view-tab-badge) */
  display: inline-flex; align-items: center; gap: 6px; flex: none;
  height: 26px; padding: 0 9px; box-sizing: border-box;
  border: 1px solid transparent; border-radius: 6px; background: transparent;
  color: var(--text-mute, #8b8f9c);
  font: inherit; font-size: 11.5px; font-weight: 600; letter-spacing: .2px;
  white-space: nowrap; cursor: pointer; user-select: none;
  transition: color .12s ease, background .12s ease, border-color .12s ease;
}
.browser-viewpin svg { width: 14px; height: 14px; flex: none; }
.browser-viewpin .view-tab-ico { width: 16px; height: 16px; filter: none; opacity: 1; transform: none; }
.browser-viewpin:hover { color: var(--text, #e8e8f0); background: rgba(167,139,250,.12); border-color: rgba(167,139,250,.35); }
.browser-viewpin:active { background: rgba(167,139,250,.2); }
.browser-viewpin:focus-visible { outline: 2px solid rgba(167,139,250,.7); outline-offset: 1px; }
.browser-viewpin.compact { width: 26px; padding: 0; justify-content: center; }
/* Privacy (auto-lock / auto-hide) at the end of the pins: a hairline sets it
   apart from the ways out, and it takes the top bar pill's warm colour the
   moment a protection is off. Engaged is the normal state, so it stays quiet. */
.browser-viewpin.browser-privacypin { margin-left: 4px; }
.browser-viewpin.browser-privacypin::before {
  content: ""; position: absolute; left: -5px; top: 4px; bottom: 4px;
  width: 1px; background: var(--border, #2a2d36);
}
.browser-viewpin.browser-privacypin.is-partial {
  background: rgba(245, 158, 11, .08); border-color: rgba(245, 158, 11, .26);
}
.browser-viewpin.browser-privacypin.is-off {
  background: rgba(245, 158, 11, .14); border-color: rgba(245, 158, 11, .42);
}
.browser-viewpin.browser-privacypin:is(.is-off, .is-partial):hover {
  background: rgba(245, 158, 11, .22); border-color: rgba(245, 158, 11, .6);
}
/* Send-to badge on a view pin. The Browser tab hides the Hearth nav, so these
   pins ARE the tabs while you are browsing — and browsing is where the send
   was made. Smaller than the nav's, pulled onto the pin's corner, and ringed
   in the tab strip's own colour rather than the page background. It sits in
   the strip's 5px of vertical slack, so nothing clips and the fit pass (which
   measures pin WIDTH) never sees it. */
.browser-viewpin .view-tab-badge {
  /* Barely outside the pin horizontally: the last pin sits flush against the
     strip's right edge (and, in the shell, the floating window controls), so
     a badge hanging further out would be the one that clips. */
  top: -3px; right: -1px;
  min-width: 13px; height: 13px;
  padding: 0 3px;
  border-radius: 7px;
  font-size: 8.5px;
  box-shadow: 0 1px 4px rgba(245,158,11,.4), 0 0 0 2px #1a1d24;
}
.browser-viewpin .view-tab-badge.is-new { box-shadow: 0 1px 4px rgba(16,185,129,.45), 0 0 0 2px #1a1d24; }
.browser-viewpin .view-tab-badge.is-error { box-shadow: 0 1px 4px rgba(239,68,68,.5), 0 0 0 2px #1a1d24; }
.browser-viewpin .view-tab-badge.is-working { animation: pin-badge-breathe 1.9s ease-in-out infinite; }
@keyframes pin-badge-breathe {
  0%, 100% { transform: scale(1);    box-shadow: 0 1px 4px rgba(245,158,11,.35), 0 0 0 2px #1a1d24; }
  50%      { transform: scale(1.16); box-shadow: 0 1px 8px rgba(245,158,11,.75), 0 0 0 2px #1a1d24; }
}
@media (prefers-reduced-motion: reduce) {
  .browser-viewpin .view-tab-badge.is-working { animation: none; }
}
@media (prefers-reduced-motion: reduce) { .browser-viewpin { transition: none; } }
#browser-bar { display: flex; align-items: center; gap: 6px; padding: 6px 10px; background: #1a1d24; border-bottom: 1px solid #2a2d36; flex: 0 0 42px; box-sizing: border-box; }

/* Send-to-library button + its drop-down (Videos / Images / Comics). The
   drop-down opens BELOW the button and pushes the URL through the same
   scrape pipeline the in-app "Add from URL" path uses. */
#browser-send-wrap { flex-shrink: 0; }
#browser-send-menu {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  background: #1a1d24;
  border: 1px solid #2a2d36;
  border-radius: 6px;
  box-shadow: 0 10px 30px rgba(0,0,0,.5);
  padding: 4px;
  display: flex;
  flex-direction: column;
  gap: 1px;
  z-index: 200;
  min-width: 140px;
}
#browser-send-menu.hidden { display: none; }
#browser-send-menu button {
  background: transparent;
  border: none;
  color: rgba(232,232,240,.88);
  font-size: 12px;
  padding: 6px 10px;
  text-align: left;
  border-radius: 4px;
  cursor: pointer;
  font-family: inherit;
}
#browser-send-menu button:hover { background: rgba(167,139,250,.18); color: #fff; }
#browser-send-menu button.send-games,
#browser-send-menu button.send-webgames { color: var(--accent, #a78bfa); font-weight: 600; }
/* One rule draws the single divider between the game destinations and the
   media ones. A border-bottom on each game item instead drew a second line
   whenever both were showing, and none at all when the itch-only item was
   hidden -- the adjacent-sibling selector is indifferent to display:none, so
   this lands in the right place either way. */
#browser-send-menu button.send-games-group + button:not(.send-games-group) {
  border-top: 1px solid var(--border, #2a2d36);
}
#browser-send-menu button.send-games.hidden { display: none; }
#browser-bar .iconbtn { width: 28px; height: 28px; background: rgba(255,255,255,.04); border: 1px solid var(--border, #2a2d36); color: var(--text, #e8e8f0); border-radius: 6px; cursor: pointer; padding: 0; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; }
#browser-adblock-toggle.on  { color: #c4b5fd; border-color: rgba(167,139,250,.5); background: rgba(167,139,250,.15); }
#browser-adblock-toggle.off { color: rgba(232,232,240,.45); }
#browser-bar .iconbtn:hover { background: rgba(167,139,250,.15); border-color: rgba(167,139,250,.5); }
#browser-bar .iconbtn:disabled { opacity: .4; cursor: default; }
/* Pressed state — the toolbar buttons had hover/disabled but no :active feedback
   (bookmark chips already got one). ~120ms scale, matches the rest of the chrome. */
#browser-bar .iconbtn:active:not(:disabled), #browser-newtab:active { transform: scale(.94); background: rgba(167,139,250,.22); }
#browser-bar .iconbtn { transition: background .12s ease, border-color .12s ease, transform .1s ease; }
/* Reconnect-stream only means something on the streamed engine —
   body.browser-streamed is set by setEngine (web build only, so it never
   appears in the Electron bar either). */
#browser-bar #browser-reconnect { display: none; }
body.browser-streamed #browser-bar #browser-reconnect { display: inline-flex; }

/* Responsive toolbar. #browser-bar holds ~16 non-shrinking 28px buttons; without a
   floor the URL input collapsed to 0 and trailing buttons clipped off-screen on a
   narrow desktop window / the 720px pop-out. Give the URL bar a floor and drop
   SECONDARY actions progressively; essentials (nav, URL, ★, reload, send) always stay. */
body.hearth-web #browser-url-wrap { flex: 1 1 auto; min-width: 132px; }
@media (max-width: 1040px) {
  body.hearth-web #browser-diagnose,
  body.hearth-web #browser-adblock-toggle { display: none; }
}
@media (max-width: 880px) {
  body.hearth-web #browser-history,
  body.hearth-web #browser-copy,
  body.hearth-web #browser-external,
  body.hearth-web #browser-bookmarks-manage { display: none; }
}

/* Bookmark bar overflow affordance: 237 favicon chips overflow far past the edge and
   the scrollbar is hidden, so the overflow was invisible/undiscoverable. Fade the
   right edge whenever there's more to scroll to (toggled from JS on render/scroll). */
body.hearth-web #browser-bookmarks.bm-overflow-r {
  -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 34px), transparent);
  mask-image: linear-gradient(90deg, #000 calc(100% - 34px), transparent);
}

/* History-modal rows had no hover/focus feedback (a full-width clickable row that
   looked dead next to the start page's hoverable history). */
body.hearth-web .wb-hist-row { cursor: pointer; border-radius: 6px; transition: background .1s ease; }
body.hearth-web .wb-hist-row:hover { background: rgba(167,139,250,.09); }
#browser-url-wrap { position: relative; flex: 1; display: flex; align-items: center; min-width: 0; }
#browser-url { flex: 1; min-width: 0; padding: 7px 12px 7px 28px; border-radius: 6px; border: 1px solid var(--border, #2a2d36); background: rgba(0,0,0,.25); color: var(--text, #e8e8f0); font-size: 12px; outline: none; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
#browser-url:focus { border-color: rgba(167,139,250,.7) !important; }
#browser-url-spinner { position: absolute; left: 10px; top: 50%; width: 12px; height: 12px; margin-top: -6px; border: 2px solid rgba(167,139,250,.22); border-top-color: rgba(167,139,250,.95); border-radius: 50%; opacity: 0; pointer-events: none; transition: opacity .12s ease; }
#browser-url-wrap.loading #browser-url-spinner { opacity: 1; animation: hearth-url-spin .75s linear infinite; }
@keyframes hearth-url-spin { to { transform: rotate(360deg); } }

#browser-url-suggest {
  position: fixed;
  z-index: 9999;
  max-width: 720px;
  max-height: 420px;
  overflow-y: auto;
  background: #1a1d24;
  border: 1px solid #2a2d36;
  border-radius: 6px;
  box-shadow: 0 6px 24px rgba(0,0,0,.45);
  padding: 4px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 12px;
}
#browser-url-suggest.hidden { display: none; }
#browser-url-suggest .suggest-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 8px;
  border-radius: 4px;
  cursor: pointer;
  color: var(--text, #e8e8f0);
  user-select: none;
}
#browser-url-suggest .suggest-row:hover,
#browser-url-suggest .suggest-row.selected {
  background: rgba(167,139,250,.18);
}
#browser-url-suggest .suggest-fav {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
  border-radius: 2px;
  object-fit: contain;
}
#browser-url-suggest .suggest-fav-placeholder {
  background: rgba(255,255,255,.08);
}
#browser-url-suggest .suggest-text {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 1px;
}
#browser-url-suggest .suggest-title {
  font-family: var(--font-ui, system-ui, sans-serif);
  font-size: 12px;
  color: var(--text, #e8e8f0);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#browser-url-suggest .suggest-url {
  font-size: 11px;
  color: rgba(167,139,250,.85);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#browser-url-suggest .suggest-badge {
  color: #f5c542;
  font-size: 11px;
  flex-shrink: 0;
}

#browser-bookmarks {
  display: flex;
  gap: 4px;
  padding: 4px 10px;
  background: transparent;
  border-bottom: none;
  overflow-x: hidden;
  overflow-y: hidden;
  flex: 0 0 30px;
  box-sizing: border-box;
  /* Middle-click drag-pan handled in JS; never show a scrollbar. */
  scrollbar-width: none;
  -ms-overflow-style: none;
  user-select: none;
}
#browser-bookmarks::-webkit-scrollbar { display: none; width: 0; height: 0; }
#browser-bookmarks.empty { display: none; }
#browser-bookmarks.panning { cursor: grabbing; }
#browser-bookmarks.panning * { pointer-events: none; }
.browser-bookmark {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 6px;
  background: transparent;
  border: none;
  border-radius: 0;
  font-size: 12px;
  color: rgba(232,232,240,.72);
  cursor: pointer;
  flex-shrink: 0;
  max-width: 180px;
  transition: color .12s, opacity .12s;
  font-family: inherit;
}
.browser-bookmark:hover {
  background: transparent;
  color: #fff;
}
.browser-bookmark img { width: 17px; height: 17px; flex-shrink: 0; opacity: .85; transition: opacity .12s; }

/* Floating window controls — only visible when the Hearth chrome is hidden
   inside the Browser view. Sits in the top-right corner above the webview. */
#floating-win-controls {
  position: fixed;
  top: 4px;
  right: 4px;
  z-index: 999;
  display: none;
  gap: 2px;
  -webkit-app-region: no-drag;
}
body.browser-nav-hidden #floating-win-controls { display: flex; }
#floating-win-controls .winbtn {
  width: 32px;
  height: 24px;
  background: rgba(20, 22, 28, .72);
  border: 1px solid rgba(255,255,255,.08);
  color: rgba(232,232,240,.85);
  border-radius: 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  padding: 0;
  backdrop-filter: blur(4px);
}
#floating-win-controls .winbtn:hover { background: rgba(40, 44, 52, .85); color: #fff; }
#floating-win-controls .winbtn.close:hover { background: #c23535; border-color: #d54444; color: #fff; }
.browser-bookmark:hover img { opacity: 1; }
.browser-bookmark span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.browser-bookmark.favicon-only { padding: 3px 4px; }
.browser-bookmark.favicon-only span:not(.bm-mono) { display: none; }
/* Letter-chip fallback for a bookmark whose favicon won't load (Chrome-style). */
.browser-bookmark .bm-mono {
  width: 17px; height: 17px; flex-shrink: 0;
  border-radius: 4px;
  display: inline-grid; place-items: center;
  font-size: 10px; font-weight: 700; color: #fff;
  background: hsl(var(--h, 260) 45% 42%);
}

/* Folder chip = button + dropdown menu */
.browser-folder { position: relative; }
.browser-folder-btn { font-weight: 600; }
/* Label inside a folder chip — shrinks before the caret does, so the caret
   is never the thing that gets clipped when the chip hits its max-width. */
.browser-folder-btn .browser-folder-name {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Caret stays legible against the dark bar; override the parent .browser-bookmark
   span rule which would otherwise inherit overflow:hidden + tiny size and clip
   the glyph at narrow widths. */
.browser-folder-caret {
  font-size: 11px;
  opacity: .9;
  color: rgba(232,232,240,.85);
  margin-left: 0;
  flex: 0 0 auto;
  overflow: visible !important;
  width: 12px;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.browser-bookmark:hover .browser-folder-caret { color: #fff; opacity: 1; }
/* Icon-only folder — no text label, caret renders immediately after icon. */
.browser-folder-btn.folder-iconly { padding: 3px 4px; }
.browser-folder.dragging { opacity: .35; }
.browser-folder.drag-over-before { box-shadow: -2px 0 0 #a78bfa; }
.browser-folder.drag-over-after { box-shadow: 2px 0 0 #a78bfa; }
.browser-bookmark.dragging { opacity: .35; }
.browser-bookmark.drag-over-before { box-shadow: inset 2px 0 0 #a78bfa; }
.browser-bookmark.drag-over-after { box-shadow: inset -2px 0 0 #a78bfa; }
.browser-folder.drag-over-folder > .browser-folder-btn,
.browser-bookmark.drag-over-folder {
  background: rgba(167,139,250,.18);
  outline: 1px dashed rgba(167,139,250,.5);
}
.browser-folder-menu {
  position: absolute;
  top: calc(100% + 2px);
  left: 0;
  background: #1a1d24;
  border: 1px solid var(--border, #2a2d36);
  border-radius: 6px;
  box-shadow: 0 10px 30px rgba(0,0,0,.5);
  padding: 4px;
  display: flex;
  flex-direction: column;
  gap: 1px;
  z-index: 100;
  min-width: 220px;
  max-width: 360px;
  max-height: 60vh;
  overflow-y: auto;
}
.browser-folder-menu.hidden { display: none; }

/* Bookmark add/edit popover — full URL + editable name, off the star button. */
.bm-popover {
  z-index: 1000; width: 300px; max-width: calc(100vw - 16px);
  background: #1a1d24; border: 1px solid var(--border-strong, #3a4159);
  border-radius: 12px; box-shadow: 0 16px 44px rgba(0,0,0,.55);
  padding: 12px; color: var(--text, #e7e9ef);
  animation: bmPopIn .12s ease;
}
@keyframes bmPopIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
.bm-pop-head { font-size: 13px; font-weight: 700; margin-bottom: 10px; color: var(--text, #e7e9ef); }
.bm-pop-row { display: flex; align-items: center; gap: 8px; }
.bm-pop-row + .bm-pop-label { margin-top: 10px; }
.bm-pop-label { font-size: 11px; color: var(--text-mute, #8b90a3); margin: 0 2px 4px; letter-spacing: .02em; }
.bm-pop-row + .bm-pop-foot { margin-top: 14px; }
.bm-pop-fav { width: 18px; height: 18px; border-radius: 4px; flex: none; }
.bm-pop-name {
  flex: 1; min-width: 0; height: 34px; padding: 0 10px;
  background: var(--surface-2, #1c2030); border: 1px solid var(--border, #2a2d36);
  border-radius: 8px; color: var(--text, #e7e9ef); font-size: 14px;
}
.bm-pop-name:focus { border-color: var(--accent, #a78bfa); outline: none; box-shadow: 0 0 0 3px rgba(167,139,250,.16); }
.bm-pop-url { margin: 8px 2px 12px; font-size: 12px; color: var(--text-mute, #8b90a3);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bm-pop-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.bm-pop-btns { display: flex; gap: 8px; margin-left: auto; }
.bm-pop-foot button {
  height: 32px; padding: 0 14px; border-radius: 8px; cursor: pointer;
  border: 1px solid var(--border, #2a2d36); background: var(--surface-2, #1c2030);
  color: var(--text, #e7e9ef); font-size: 13px; font-weight: 600; transition: border-color .12s ease, filter .12s ease;
}
.bm-pop-foot button:hover { border-color: var(--border-strong, #3a4159); }
.bm-pop-save { background: var(--accent, #a78bfa) !important; border-color: var(--accent, #a78bfa) !important; color: #14141c !important; }
.bm-pop-save:hover { filter: brightness(1.06); }
.bm-pop-del { color: #ff6b6b !important; }
.bm-pop-del:hover { border-color: #ff6b6b !important; }
.browser-folder-menu .browser-bookmark {
  max-width: none;
  width: 100%;
  justify-content: flex-start;
}
.browser-folder-menu .browser-bookmark:hover { background: rgba(167,139,250,.15); color: #fff; }
/* Nested folder rows inside a menu: render as a row with a right-side caret;
   submenu pops out to the RIGHT of the parent menu. */
.browser-folder.in-menu { width: 100%; }
.browser-folder.in-menu > .browser-folder-btn { width: 100%; justify-content: flex-start; }
.browser-folder.in-menu > .browser-folder-btn .browser-folder-caret { margin-left: auto; }
.browser-folder.in-menu > .browser-folder-menu {
  top: -4px;
  left: calc(100% + 2px);
}
.browser-folder-empty {
  padding: 6px 8px;
  font-size: 11px;
  color: rgba(232,232,240,.45);
  font-style: italic;
}

/* Bookmark manager modal — overrides the default .modal-panel which is
   28px-padded + h2-with-18px-bottom-margin (way too loose for a dense list). */
.bookmark-manager-panel {
  max-width: 760px;
  width: 760px;
  max-height: 82vh;
  padding: 14px 16px 12px !important;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.bookmark-manager-panel .bm-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 0;
}
.bookmark-manager-panel .bm-header h3 {
  margin: 0;
  padding: 0;
  font-size: 14px;
  letter-spacing: .6px;
  text-transform: uppercase;
  color: rgba(232,232,240,.9);
}
.bookmark-manager-panel #bm-status {
  font-size: 11px;
  color: var(--text-dim, rgba(232,232,240,.5));
}
.bookmark-manager-panel #bm-toolbar {
  display: flex;
  gap: 6px;
  align-items: center;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border, #2a2d36);
}
.bookmark-manager-panel #bm-tree {
  flex: 1;
  overflow: auto;
  padding: 0;
  margin: 0;
}
#bm-tree { font-size: 13px; }
.bm-row {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 0 6px;
  border-radius: 3px;
  position: relative;
  /* Row height owns the vertical rhythm; no padding so we don't accidentally
     stack pad + line-height + button height = giant row. */
  line-height: 20px;
}
/* The empty leaf-row twisty (<span class="bm-twisty empty">) is a display:flex box
   that flex-STRETCHES to fill the row's cross-axis, blowing every bookmark row up to
   ~160px ("weirdly gigantic spacing" in the manager). line-height alone can't cap it,
   so pin the row height — rows stay compact regardless of the twisty. */
#bm-tree .bm-row { height: 24px; }
.bm-row:hover { background: rgba(255,255,255,.04); }
.bm-row.dragging { opacity: .35; }
.bm-row.drag-over-folder { background: rgba(167,139,250,.18); outline: 1px dashed rgba(167,139,250,.5); }
.bm-row.drag-over-before::before,
.bm-row.drag-over-after::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  height: 2px;
  background: #a78bfa;
}
.bm-row.drag-over-before::before { top: 0; }
.bm-row.drag-over-after::after { bottom: 0; }
.bm-twisty {
  width: 14px; height: 14px;
  display: inline-flex; align-items: center; justify-content: center;
  color: rgba(232,232,240,.6);
  font-size: 10px;
  cursor: pointer;
  user-select: none;
  flex-shrink: 0;
}
.bm-twisty.empty { visibility: hidden; }
.bm-folder-icon { width: 14px; height: 14px; flex-shrink: 0; color: #c4b5fd; }
.bm-favicon { width: 14px; height: 14px; flex-shrink: 0; opacity: .9; }
.bm-name {
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  line-height: 20px;
  text-overflow: ellipsis;
  cursor: text;
  padding: 0 4px;
  border-radius: 3px;
}
.bm-name:hover { background: rgba(255,255,255,.05); }
.bm-name:focus { outline: 1px solid rgba(167,139,250,.6); background: rgba(0,0,0,.25); }
.bm-name.folder { font-weight: 600; }
.bm-url-hint {
  font-size: 11px;
  color: rgba(232,232,240,.4);
  max-width: 220px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex-shrink: 0;
  line-height: 20px;
}
.bm-actions { display: flex; gap: 4px; flex-shrink: 0; opacity: 0; transition: opacity .12s; align-items: center; }
.bm-row:hover .bm-actions { opacity: 1; }
.bm-actions .btn,
.bm-actions .btn.small {
  /* Tight buttons that match the row height — no growing the row. */
  padding: 0 6px;
  font-size: 10.5px;
  line-height: 18px;
  height: 18px;
  min-height: 0;
}
.bm-children { padding-left: 16px; }
.bm-children.collapsed { display: none; }

/* WebContentsView lives in main process, parented to the BrowserWindow.
   This div is a layout placeholder whose bounding rect tells main where
   to position the view (via ResizeObserver → tab:setBounds). Background
   stays solid so we don't see white flashes during reflows before main
   repositions. */
/* ── Find in page (Hearth Shell; app.js shellFind) ──
   A row of the browser chrome, in the flow between the bookmarks and the page.
   It cannot float over the page: the shell's native view is an OS layer above
   every DOM element. The controls sit at the right, where the eye already is
   for the page's own scrollbar, and the row drops in from the bar above. */
#browser-find {
  flex: 0 0 auto; display: flex; align-items: center; justify-content: flex-end; gap: 6px;
  padding: 6px 10px; box-sizing: border-box;
  background: linear-gradient(#1a1d24, #15171d); border-bottom: 1px solid #2a2d36;
  -webkit-app-region: no-drag;
  animation: bf-drop .18s cubic-bezier(.2, .8, .2, 1);
}
#browser-find[hidden] { display: none; }
@keyframes bf-drop { from { opacity: 0; transform: translateY(-6px); } }
#browser-find .bf-box {
  display: flex; align-items: center; gap: 8px; width: min(380px, 100%); height: 30px; padding: 0 10px 0 8px; box-sizing: border-box;
  border: 1px solid var(--border, #2a2d36); border-radius: 15px; background: rgba(255, 255, 255, .04);
  transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
}
#browser-find .bf-box:focus-within { border-color: rgba(245, 158, 11, .65); background: rgba(245, 158, 11, .06); box-shadow: 0 0 0 3px rgba(245, 158, 11, .14); }
#browser-find.is-miss .bf-box { border-color: rgba(248, 113, 113, .6); box-shadow: 0 0 0 3px rgba(248, 113, 113, .12); }
#browser-find .bf-lens { flex: none; width: 18px; height: 18px; object-fit: contain; pointer-events: none; }
#browser-find input {
  flex: 1 1 auto; min-width: 0; height: 100%; padding: 0; border: 0; outline: 0; background: none;
  color: var(--text, #e8e8f0); font: inherit; font-size: 13px;
}
#browser-find input::placeholder { color: var(--text-dim, #8a8fa3); }
#browser-find .bf-tally { flex: none; color: var(--text-dim, #8a8fa3); font-size: 12px; font-variant-numeric: tabular-nums; white-space: nowrap; }
#browser-find.is-miss .bf-tally { color: #fca5a5; }
#browser-find .bf-btn {
  flex: none; display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; padding: 0;
  border: 1px solid var(--border, #2a2d36); border-radius: 6px; background: rgba(255, 255, 255, .04); color: var(--text, #e8e8f0);
  cursor: pointer; transition: background .12s ease, border-color .12s ease, transform .1s ease;
}
#browser-find .bf-btn:hover { background: rgba(167, 139, 250, .15); border-color: rgba(167, 139, 250, .5); }
#browser-find .bf-btn:active { transform: scale(.94); background: rgba(167, 139, 250, .22); }
#browser-find .bf-btn:focus-visible { outline: 2px solid var(--accent, #a78bfa); outline-offset: 1px; }
#browser-find .bf-close { margin-left: 4px; }
@media (prefers-reduced-motion: reduce) { #browser-find { animation: none; } #browser-find .bf-box, #browser-find .bf-btn { transition: none; } }

#browser-webviews { flex: 1; min-height: 0; background: #000; position: relative; }

/* Top-left badge row: star stack + resolution + orientation flow in one
   flex container so variable-width content (a "1080p" pill is wider than
   "4K", a 3-avatar stack wider than 1) can never overlap — no per-width
   left offsets to keep in sync. Wraps on narrow tiles instead of running
   under the "…" edit button (top-right). */
.media-tile .tile-topbadges {
  position: absolute;
  top: var(--chrome-y);
  left: var(--chrome-x);
  /* clears BOTH action buttons — they share this line now */
  right: calc(var(--chrome-x) + 2 * var(--btn-s) + 2 * var(--chrome-gap));
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--chrome-gap);
  /* Keeps clear of the select toggle that shares this corner. */
  padding-left: var(--lane-x, 0px);
  transition: padding-left .15s ease;
  z-index: 3;
  /* Container itself is transparent to the mouse; interactive children
     (star stack, orientation) opt back in. */
  pointer-events: none;
}
.media-tile .tile-topbadges > * { flex-shrink: 0; }

.media-tile .tile-resolution {
  background: rgba(167,139,250,.88);
  color: #fff;
  padding: 2px 6px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .3px;
  border-radius: 4px;
  white-space: nowrap;
  opacity: 0;
  transform: translateY(-2px);
  transition: opacity .15s, transform .15s;
  pointer-events: none;
}
.media-tile:hover .tile-resolution {
  opacity: 1;
  transform: translateY(0);
}

/* Orientation indicator (landscape/portrait icon). Sits to the right of
   the resolution badge, hover-revealed like it. Title attribute provides
   the "Landscape" / "Portrait" tooltip. */
/* Connect-your-headset panel (VR tab). Compact by design: this is a sidebar,
   and the addresses only need to be readable long enough to hit Copy. The key
   is masked on screen (see maskKey) so a 48-char credential doesn't wrap the
   URL to four lines or sit permanently in view. */
.media-section-headset .vr-connect-intro {
  margin: 0 0 8px;
  font-size: 11px;
  line-height: 1.5;
  color: rgba(232, 232, 240, .6);
}

/* Home / Away switch */
.vr-connect-seg {
  display: flex;
  gap: 2px;
  padding: 2px;
  margin-bottom: 8px;
  background: rgba(0, 0, 0, .28);
  border: 1px solid #2a2d36;
  border-radius: 7px;
}
.vr-connect-seg-btn {
  flex: 1 1 0;
  min-width: 0;
  padding: 5px 6px;
  font: inherit;
  font-size: 10.5px;
  font-weight: 650;
  white-space: nowrap;
  color: rgba(232, 232, 240, .6);
  background: transparent;
  border: 0;
  border-radius: 5px;
  cursor: pointer;
  transition: background .13s ease, color .13s ease;
}
.vr-connect-seg-btn:hover { color: rgba(232, 232, 240, .9); background: rgba(255, 255, 255, .05); }
.vr-connect-seg-btn:focus-visible { outline: 2px solid #7c5cff; outline-offset: -2px; }
.vr-connect-seg-btn.on {
  color: #fff;
  background: linear-gradient(180deg, #7c5cff, #6344e8);
  box-shadow: 0 1px 3px rgba(0, 0, 0, .35);
}

.vr-connect-row {
  margin-bottom: 6px;
  padding: 7px 8px;
  background: rgba(255, 255, 255, .03);
  border: 1px solid #2a2d36;
  border-radius: 6px;
  transition: border-color .13s ease;
}
.vr-connect-row:last-child { margin-bottom: 0; }
.vr-connect-row:hover { border-color: #3a3f4c; }
.vr-connect-head {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-bottom: 5px;
  min-width: 0;
}
.vr-connect-head b { flex: 0 0 auto; font-size: 11.5px; font-weight: 700; }
.vr-connect-head span {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 9.5px;
  color: rgba(232, 232, 240, .42);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.vr-connect-head .vr-connect-copy { flex: 0 0 auto; margin-left: auto; }
.vr-connect-urlrow { min-width: 0; }
/* Full sidebar width, wrapping rather than truncating. A LAN address is short
   enough to read in two lines, and these get RETYPED on a headset keyboard —
   a left-clipped stub like "…0.197:8770/heresphere" is worse than useless. */
.vr-connect-urlrow code {
  display: block;
  font-size: 10px;
  line-height: 1.5;
  word-break: break-all;
  user-select: all;
  color: rgba(232, 232, 240, .85);
}
.vr-connect-copy { transition: background .13s ease, color .13s ease; }
.vr-connect-copy.ok { background: rgba(34, 197, 94, .9); color: #fff; border-color: transparent; }
.media-section-headset .vr-connect-note {
  margin: 8px 0 0;
  font-size: 10.5px;
  line-height: 1.55;
  color: rgba(232, 232, 240, .55);
}

/* Scrape modal — "This is a VR video" hint row. The projection select sits
   inline and disables itself until the box is ticked, so an unticked row reads
   as one control rather than two. */
#scrape-vr-row {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
#scrape-vr-row .scrape-vr-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
}
#scrape-vr-row .scrape-vr-label input { cursor: pointer; }
#scrape-vr-row select { flex: 1 1 180px; min-width: 0; }
#scrape-vr-row select:disabled { opacity: .45; cursor: not-allowed; }

/* VR badge — persistent (no hover gate) because 180/360 stereo is a content
   type, not a detail. Uses the accent hue at full strength so it reads ahead of
   the violet resolution pill sitting next to it. A low-confidence guess is
   dimmed + dashed so an uncertain call never looks authoritative. */
.media-tile .tile-vr {
  background: rgba(34, 197, 94, .92);
  color: #fff;
  padding: 2px 6px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .3px;
  border-radius: 4px;
  white-space: nowrap;
  pointer-events: auto;
  cursor: help;
  border: 1px solid transparent;
  transition: background .15s ease, border-color .15s ease;
}
.media-tile .tile-vr.tile-vr-unsure {
  background: rgba(34, 197, 94, .42);
  border-color: rgba(34, 197, 94, .75);
  border-style: dashed;
}
.media-tile:hover .tile-vr { background: rgba(34, 197, 94, 1); }
.media-tile:hover .tile-vr.tile-vr-unsure { background: rgba(34, 197, 94, .58); }

.media-tile .tile-orientation {
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, .72);
  color: #fff;
  border-radius: 4px;
  opacity: 0;
  transform: translateY(-2px);
  transition: opacity .15s, transform .15s;
  pointer-events: auto;
  cursor: help;
}
.media-tile:hover .tile-orientation {
  opacity: 1;
  transform: translateY(0);
}
.media-tile .tile-orientation svg { display: block; }

.media-tile .tile-views {
  position: absolute;
  /* Clear of the nameplate, derived from its height rather than guessed. */
  right: 6px; bottom: calc(var(--plate-h) + 14px);
  background: rgba(0,0,0,.78);
  color: #fff;
  padding: 2px 6px;
  font-size: 11px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  border-radius: 4px;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  z-index: 2;
  pointer-events: none;
  opacity: 0;
  transition: opacity .15s;
}
.media-tile:hover .tile-views { opacity: 1; }

/* Rating strip lives inline inside .tile-meta (column layout). Hover-only
   per user pref — overrides the library-tab "always show if rated" rule. */
.media-tile .tile-rating {
  position: absolute;
  right: calc(12px + var(--plate-cap));
  bottom: 11px;
  z-index: 4;
  opacity: 0;
  transition: opacity .15s;
}
.media-tile:hover .tile-rating { opacity: 1; }
.media-tile .tile-rating.rated { opacity: 0; }
.media-tile:hover .tile-rating.rated { opacity: 1; }

/* The ★ strip now sits INSIDE .score-bar (renderer/bust.js) next to the bust
   tally, and the BAR is what gets positioned and hover-revealed. The rules just
   above still match the strip by class, so undo them for the wrapped case —
   otherwise the stars are absolutely positioned inside their own chip and fade
   out from under it. */
.media-tile .score-bar > .tile-rating,
.media-tile:hover .score-bar > .tile-rating,
.media-tile .score-bar > .tile-rating.rated,
.media-tile:hover .score-bar > .tile-rating.rated {
  position: static;
  opacity: 1;
  z-index: auto;
}

.media-tile .tile-progress {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 6px;
  background: rgba(0,0,0,.7);
  box-shadow: 0 -1px 0 rgba(255,255,255,.08), 0 -2px 6px rgba(0,0,0,.5);
  z-index: 4;
  overflow: hidden;
}
.media-tile .tile-progress-fill {
  height: 100%;
  background: linear-gradient(90deg, #c4b5fd, #f472b6);
  box-shadow: 0 0 6px rgba(244,114,182,.55), inset 0 1px 0 rgba(255,255,255,.35);
  transition: width .25s ease;
}

/* Mouse-driven scrub: thin playhead line marking the frame being previewed.
   Sits above the resume progress bar so both can coexist. Continuous
   left% is set in JS from mouse-X; short transition smooths the gaps
   between mousemove samples without introducing visible lag. */
.media-tile .tile-scrub-pos {
  position: absolute;
  bottom: 0;
  width: 2px;
  height: 14px;
  background: #fff;
  box-shadow: 0 0 4px rgba(0,0,0,.8);
  border-radius: 1px;
  transform: translateX(-50%);
  pointer-events: none;
  z-index: 5;
  transition: left .05s linear;
  will-change: left;
}

.media-tile .tile-edit {
  position: absolute;
  top: 6px; right: 6px;
  width: 26px; height: 26px;
  border: none;
  border-radius: 50%;
  background: rgba(0,0,0,.6);
  color: #fff;
  font-size: 14px;
  cursor: pointer;
  opacity: 0;
  transition: opacity .15s;
  z-index: 4;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  padding: 0;
}
.media-tile:hover .tile-edit { opacity: 1; }

/* Pop-out button (Videos / VR / Hentai) — opens the item in the floating
   player so the grid stays browsable. Stacked directly UNDER the "…" edit
   button: the top row is already spoken for (.tile-topbadges runs left:6 →
   right:38, .tile-edit owns right:6), so sitting beside it would collide
   with a wide badge row. Hover-revealed like every other tile control. */
.media-tile .tile-popout {
  position: absolute;
  top: 38px; right: 6px;
  width: 26px; height: 26px;
  border: none;
  border-radius: 50%;
  background: rgba(0,0,0,.6);
  color: #fff;
  cursor: pointer;
  opacity: 0;
  transition: opacity .15s, background .15s;
  z-index: 4;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.media-tile:hover .tile-popout { opacity: 1; }
.media-tile .tile-popout:hover { background: rgba(124,58,237,.85); }
.media-tile .tile-popout:focus-visible {
  opacity: 1;
  outline: 2px solid var(--accent, #a78bfa);
  outline-offset: 2px;
}
.media-tile .tile-popout svg { display: block; }
.media-tile .tile-edit:hover { background: rgba(124,58,237,.85); }

/* Avatars sit inside a flex stack container so multi-star videos show
   overlapping pills. The stack lives inside .tile-topbadges, so the
   resolution/orientation badges flow naturally to its right whatever
   its width. */
.media-tile .tile-star-stack {
  display: flex;
  cursor: pointer;
  pointer-events: auto;
  transition: opacity .15s;
}
.media-tile .tile-star-avatar {
  position: relative;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  overflow: hidden;
  background: rgba(0,0,0,.6);
  border: 2px solid rgba(255,255,255,.65);
  box-shadow: 0 2px 6px rgba(0,0,0,.4);
  margin-left: -10px;
  /* Center initials text when used as a placeholder (no <img> inside). */
  display: flex;
  align-items: center;
  justify-content: center;
  color: #f0e6ff;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .3px;
  font-family: inherit;
}
.media-tile .tile-star-stack .tile-star-avatar:first-child { margin-left: 0; }
.media-tile .tile-star-avatar.placeholder {
  background: linear-gradient(135deg, rgba(167,139,250,.45), rgba(124,58,237,.55));
}
.media-tile .tile-star-avatar.tile-star-more {
  background: linear-gradient(135deg, #2a2535, #1a1620);
  color: #e8dfff;
  font-size: 10px;
}
.media-tile .tile-star-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Click-popover anchored under the star stack, listing every star's name
   as a one-click-copy row. */
.media-tile .tile-stars-popover {
  position: absolute;
  top: 38px;
  left: 6px;
  z-index: 6;
  display: flex;
  flex-direction: column;
  min-width: 140px;
  max-width: calc(100% - 12px);
  max-height: calc(100% - 80px);
  overflow-y: auto;
  background: rgba(18, 14, 26, .96);
  border: 1px solid rgba(167, 139, 250, .35);
  border-radius: 6px;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .5);
  padding: 4px;
  gap: 2px;
}
.media-tile .tile-stars-popover-row {
  appearance: none;
  background: transparent;
  border: none;
  color: #f0e6ff;
  font: inherit;
  font-size: 12px;
  text-align: left;
  padding: 5px 8px;
  border-radius: 4px;
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.media-tile .tile-stars-popover-row:hover {
  background: rgba(124, 58, 237, .35);
}
.media-tile .tile-stars-popover-row.copied {
  background: rgba(74, 222, 128, .25);
  color: #d6ffd9;
}

/* Instant hover tooltip for star avatars — native title tooltips are slow
   and unreliable (Safari especially), so the name pops immediately in a
   styled pill under the hovered avatar. Positioned by JS, clamped to the
   card. */
.media-tile .tile-star-tip {
  position: absolute;
  z-index: 6;
  background: rgba(18, 14, 26, .96);
  border: 1px solid rgba(167, 139, 250, .35);
  color: #f0e6ff;
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: .2px;
  padding: 3px 8px;
  border-radius: 5px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, .45);
  white-space: nowrap;
  max-width: calc(100% - 12px);
  overflow: hidden;
  text-overflow: ellipsis;
  pointer-events: none;
  opacity: 0;
  transform: translateY(-2px);
  transition: opacity .12s ease, transform .12s ease;
}
.media-tile .tile-star-tip.show {
  opacity: 1;
  transform: translateY(0);
}

/* Server-status text styling lives inline (color set by JS) */
.media-server-status {
  margin: 0 0 6px 0;
}

/* Detail modal rows */
#media-detail-body .detail-row {
  margin-top: 10px;
}
#media-detail-body label {
  display: block;
  font-size: 11px;
  color: var(--text-mute);
  text-transform: uppercase;
  letter-spacing: .5px;
  margin-bottom: 4px;
}
#media-detail-body input[type="text"],
#media-detail-body select,
#media-detail-body textarea {
  width: 100%;
  padding: 6px 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text);
  font: inherit;
  font-size: 13px;
}
.star-picker {
  display: flex;
  gap: 6px;
  align-items: center;
  flex-wrap: wrap;
}
.star-picker .chip-list { flex: 0 1 auto; }
.star-picker select { width: auto; flex: 0 0 160px; }

/* Tag picker (detail modal): assigned tags as removable pills + search +
   clickable suggestion chips. Max-height on the suggestion list keeps the
   modal scroll-free even for tabs with hundreds of tags. */
.tag-picker { display: flex; flex-direction: column; gap: 6px; }
.tag-picker-assigned {
  min-height: 28px;
  padding: 4px 0;
  border-bottom: 1px solid var(--border);
}
.tag-picker-search { display: flex; }
.tag-picker-search input[type="search"] {
  width: 100%;
  padding: 6px 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text);
  font: inherit;
  font-size: 13px;
}
.tag-picker-suggestions {
  max-height: 180px;
  overflow-y: auto;
  padding: 4px 0 2px;
}
.tag-chip-assigned {
  background: rgba(167,139,250,.18);
  border-color: rgba(167,139,250,.5);
  color: #d6c9ff;
}
.tag-chip-assigned:hover {
  background: rgba(239,68,68,.22);
  border-color: rgba(239,68,68,.55);
  color: #fecaca;
}
.tag-chip-new {
  background: rgba(74,222,128,.14);
  border-color: rgba(74,222,128,.45);
  color: #bbf7d0;
}
.tag-chip-new:hover {
  background: rgba(74,222,128,.28);
  color: #dcfce7;
}
.tag-picker-empty { font-size: 12px; padding: 2px 4px; }
.tag-picker-overflow { font-size: 11px; padding: 4px 6px; align-self: center; }

/* ── Edit dialog: facts pickers, errors, source row (media/common.js
   factsCombo / pickCategory / committingControl) ──────────────────────
   The label's small-caps styling (#media-detail-body label) inherits into
   whatever sits inside it, so the controls in a label opt back out of it:
   a URL or a performer's name must read exactly as stored. */
#media-detail-body label > * { text-transform: none; letter-spacing: normal; }
#media-detail-body .detail-label {
  display: block;
  font-size: 11px;
  color: var(--text-mute);
  text-transform: uppercase;
  letter-spacing: .5px;
  margin-bottom: 4px;
}
#media-detail-body .detail-row.is-saving { opacity: .85; }
.detail-error {
  margin: 6px 0 0;
  font-size: 12px;
  line-height: 1.4;
  color: #fecaca;
  text-wrap: pretty;
}
.detail-source-line { display: flex; gap: 8px; align-items: center; min-width: 0; }
.detail-row a.detail-source-link {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 14px;   /* body size: a link is read, not a caption */
  line-height: 1.4;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.media-detail-actions { margin-top: 18px; display: flex; gap: 8px; flex-wrap: wrap; }

/* The token field: chosen values in ONE row that scrolls sideways (never a
   ragged wrap of pills), the filter input, and the list under it. */
.fc { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.fc-tokens {
  display: flex;
  flex-wrap: nowrap;
  gap: 6px;
  min-height: 32px;
  align-items: center;
  overflow-x: auto;
  scrollbar-width: thin;
  padding: 2px 0;
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 24px), transparent);
          mask-image: linear-gradient(to right, #000 calc(100% - 24px), transparent);
  padding-right: 24px;
}
.fc-none { font-size: 12px; color: var(--text-mute); white-space: nowrap; }
.fc-token {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 28px;
  padding: 0 8px 0 10px;
  border-radius: 999px;
  border: 1px solid rgba(167,139,250,.5);
  background: rgba(167,139,250,.16);
  color: #e3dbff;
  font: inherit;
  font-size: 12px;
  white-space: nowrap;
  cursor: pointer;
  transition: background .12s, border-color .12s, color .12s;
}
.fc-token:has(.fc-face) { padding-left: 3px; }
.fc-token:hover, .fc-token:focus-visible {
  background: rgba(239,68,68,.2);
  border-color: rgba(239,68,68,.55);
  color: #fee2e2;
}
.fc-token:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.fc-token-x { font-size: 14px; line-height: 1; opacity: .7; }
.fc-face {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  overflow: hidden;
  background: rgba(167,139,250,.2);
  color: var(--text);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .3px;
}
.fc-face img { width: 100%; height: 100%; object-fit: cover; display: block; }
.fc-face-sm { width: 22px; height: 22px; font-size: 9px; }
.fc-plus { background: rgba(74,222,128,.16); color: #bbf7d0; font-size: 16px; font-weight: 500; }
#media-detail-body input.fc-input,
.fc-pick input.fc-input {
  width: 100%;
  min-height: 36px;
  padding: 7px 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text);
  font: inherit;
  font-size: 13px;
}
.fc-input:focus-visible { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(167,139,250,.22); }
.fc-list {
  list-style: none;
  margin: 0;
  padding: 4px;
  max-height: 232px;
  overflow-y: auto;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 8px;
}
.fc-list[hidden] { display: none; }
.fc-list-pick { max-height: min(48vh, 360px); margin-top: 10px; }
.fc-opt {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 40px;
  padding: 6px 10px;
  border-radius: 6px;
  cursor: pointer;
  color: var(--text);
}
.fc-opt.is-active { background: var(--surface-2); box-shadow: inset 2px 0 0 var(--accent); }
.fc-opt-text { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; }
.fc-opt-name {
  font-size: 13px;
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fc-opt-sub {
  font-size: 11px;
  line-height: 1.3;
  color: var(--text-mute);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fc-opt.is-create .fc-opt-name { color: #bbf7d0; }
.fc-opt-state {
  flex: 0 0 auto;
  font-size: 11px;
  font-weight: 600;
  color: #d6c9ff;
  padding: 2px 8px;
  border-radius: 999px;
  background: rgba(167,139,250,.16);
  white-space: nowrap;
}
.fc-more { padding: 8px 10px; font-size: 11px; color: var(--text-mute); }
.media-prompt-panel.fc-pick { width: min(480px, 92vw); min-width: 0; max-width: none; }

/* The token row's "+N": what does not fit folds into one count, never a
   second ragged line (media/combobox.js fit()). Pressing it opens the row to
   scroll sideways. A multi-edit token says how many of the selection hold it. */
.fc-overflow {
  flex: 0 0 auto;
  height: 28px;
  min-width: 40px;
  padding: 0 10px;
  border-radius: 999px;
  border: 1px solid var(--border-strong);
  background: var(--surface-2);
  color: var(--text);
  font: inherit;
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
}
.fc-overflow:hover { border-color: var(--accent); }
.fc-overflow:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.fc-token[hidden], .fc-overflow[hidden] { display: none; }
.fc-token.is-partial { border-style: dashed; background: rgba(167,139,250,.08); }
.fc-token-share { font-size: 11px; color: var(--text-dim); font-variant-numeric: tabular-nums; }

/* The tile's Edit facts button carries the painted quill, not a "…". */
.media-tile .tile-edit-facts img {
  width: 16px;
  height: 16px;
  object-fit: contain;
  display: block;
  filter: drop-shadow(0 1px 1px rgba(0,0,0,.6));
}

/* ── Video facts sheet (media/common.js openFactsSheet) ────────────────
   One popout for everything a video is: header (scrub preview, the title as
   a large inline field, one facts line, "Was …"), Facts / Identify / History
   tabs, and a pinned footer with the save state. A centred popout on a wide
   screen; a full-height sheet on a phone. Direction: Hearth's own dark
   editorial chrome — the video's thumbnail lends the header its ambient
   colour, everything else is the app's tokens. */
.vfs .vfs-panel {
  --vfs-pad: 24px;
  --vfs-label: 136px;
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: min(880px, 92vw);
  /* One height for every tab: a dialog that grows and shrinks as you switch
     tabs moves its own buttons out from under the pointer. */
  height: min(820px, 92vh);
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr) auto;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: 16px;
  box-shadow: 0 30px 90px rgba(0,0,0,.65), 0 0 0 1px rgba(167,139,250,.07);
  overflow: hidden;
  color: var(--text);
}
@keyframes vfsIn {
  from { opacity: 0; transform: translate(-50%, -48%) scale(.98); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
@keyframes vfsRise { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@keyframes vfsFade { from { opacity: 0; } to { opacity: 1; } }
.vfs:not(.hidden) > .modal-scrim { animation: modalScrimIn 150ms ease-out; }
.vfs:not(.hidden) .vfs-panel { animation: vfsIn 200ms cubic-bezier(.2, .8, .2, 1); }

/* Header */
.vfs-head {
  position: relative;
  isolation: isolate;
  display: grid;
  grid-template-columns: 240px minmax(0, 1fr) auto;
  gap: 20px;
  align-items: start;
  padding: var(--vfs-pad) var(--vfs-pad) 18px;
}
.vfs-head::before {
  /* The thumbnail, blurred far past recognition, as the header's light. */
  content: '';
  position: absolute;
  inset: -60px -60px 0;
  z-index: -1;
  background: var(--vfs-ambient, none) center / cover no-repeat;
  filter: blur(48px) saturate(1.3);
  opacity: .28;
  -webkit-mask-image: linear-gradient(to bottom, #000 40%, transparent);
          mask-image: linear-gradient(to bottom, #000 40%, transparent);
  pointer-events: none;
}
.vfs-preview {
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
  padding: 0;
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 10px;
  overflow: hidden;
  background: #05060a;
  cursor: pointer;
  box-shadow: 0 10px 30px rgba(0,0,0,.45);
}
.vfs-preview:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.vfs-thumb { width: 100%; height: 100%; object-fit: cover; display: block; }
.vfs-scrub {
  position: absolute; inset: 0;
  background-size: 1000% 100%;
  background-repeat: no-repeat;
  opacity: 0;
  transition: opacity .12s;
}
.vfs-preview.is-scrubbing .vfs-scrub { opacity: 1; }
.vfs-scrub-pos {
  position: absolute; left: 0; right: 0; bottom: 0;
  height: 3px;
  background: var(--accent);
  transform-origin: left center;
  transform: scaleX(0);
  opacity: 0;
}
.vfs-preview.is-scrubbing .vfs-scrub-pos { opacity: 1; }
.vfs-play {
  position: absolute; left: 50%; top: 50%;
  width: 40px; height: 40px;
  margin: -20px 0 0 -20px;
  padding: 8px;
  border-radius: 50%;
  background: rgba(8,9,14,.62);
  opacity: 0;
  transform: scale(.9);
  transition: opacity .15s, transform .15s;
  pointer-events: none;
}
.vfs-preview:hover .vfs-play, .vfs-preview:focus-visible .vfs-play { opacity: 1; transform: none; }
.vfs-preview.is-scrubbing .vfs-play { opacity: 0; }
.vfs-dur {
  position: absolute; right: 6px; bottom: 7px;
  padding: 2px 6px;
  border-radius: 4px;
  background: rgba(8,9,14,.78);
  font-size: 11px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: #f3f5f9;
}
.vfs-headtext { min-width: 0; display: flex; flex-direction: column; gap: 6px; padding-top: 2px; }
.vfs-eyebrow {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 1.1px;
  text-transform: uppercase;
  color: var(--text-dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.vfs .vfs-title {
  width: 100%;
  margin: 0 0 0 -9px;
  padding: 4px 8px;
  resize: none;
  overflow: hidden;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 8px;
  color: var(--text);
  font: inherit;
  font-size: 23px;
  font-weight: 650;
  line-height: 1.25;
  letter-spacing: -.2px;
  text-wrap: balance;
  transition: background .12s, border-color .12s;
}
.vfs .vfs-title:hover { border-color: var(--border); }
.vfs .vfs-title:focus-visible, .vfs .vfs-title:focus {
  outline: none;
  background: var(--surface);
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(167,139,250,.2);
}
.vfs-headtext.is-saving .vfs-title { opacity: .8; }
.vfs-factsline {
  margin: 0;
  font-size: 13px;
  color: var(--text-dim);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.vfs-was {
  margin: 0;
  display: flex;
  align-items: baseline;
  gap: 10px;
  min-width: 0;
  font-size: 12.5px;
  color: var(--text-dim);
}
.vfs-was[hidden] { display: none; }
.vfs-was-text { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vfs-was-meta { flex: none; white-space: nowrap; color: var(--text-mute); }
.vfs-panel:focus { outline: none; }
.vfs-link {
  flex: none;
  padding: 0;
  border: 0;
  background: none;
  color: var(--accent);
  font: inherit;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
}
.vfs-link:hover { text-decoration: underline; }
.vfs-link:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 3px; }
.vfs-close {
  width: 36px; height: 36px;
  border: 1px solid var(--border);
  border-radius: 50%;
  background: rgba(8,9,14,.5);
  color: var(--text);
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
}
.vfs-close:hover { background: var(--surface-2); border-color: var(--border-strong); }
.vfs-close:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* Tabs: one segmented control, equal cells. */
.vfs-tabs {
  display: grid;
  grid-template-columns: repeat(var(--n, 3), minmax(0, 1fr));
  gap: 2px;
  margin: 0 var(--vfs-pad);
  padding: 3px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 11px;
}
.vfs-tab {
  min-height: 36px;
  padding: 0 12px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--text-dim);
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
  transition: background .15s, color .15s;
}
.vfs-tab:hover { color: var(--text); }
.vfs-tab[aria-selected="true"] {
  background: var(--surface-2);
  color: var(--text);
  box-shadow: inset 0 0 0 1px var(--border-strong), 0 1px 0 rgba(255,255,255,.04);
}
.vfs-tab:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* Body */
.vfs-body {
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 4px var(--vfs-pad) 28px;
  scrollbar-width: thin;
}
.vfs-tabpanel:focus { outline: none; }
.vfs-tabpanel:not([hidden]) { animation: vfsFade 160ms ease-out; }
.vfs-section { padding-top: 20px; }
.vfs-section + .vfs-section { margin-top: 12px; border-top: 1px solid var(--border); }
.vfs:not(.hidden) .vfs-section { animation: vfsRise 280ms cubic-bezier(.2, .8, .2, 1) backwards; animation-delay: calc(var(--i, 0) * 60ms + 80ms); }
.vfs .vfs-h {
  margin: 0 0 6px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--text-mute);
  text-wrap: balance;
}
/* Form rows: the label in one fixed column beside its control; the error and
   any note sit under the control, in its column. */
.vfs-body .detail-row {
  display: grid;
  grid-template-columns: var(--vfs-label) minmax(0, 1fr);
  column-gap: 20px;
  row-gap: 4px;
  align-items: start;
  margin: 0;
  padding: 9px 0;
}
.vfs-body .detail-row[hidden] { display: none; }
.vfs-body .detail-row > .detail-label {
  grid-column: 1;
  margin: 0;
  padding-top: 8px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  color: var(--text-dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.vfs-body .detail-row > :not(.detail-label) { grid-column: 2; min-width: 0; }
.vfs-body .detail-row.is-saving > :not(.detail-label) { opacity: .85; }
.vfs .fc-input, .vfs .vfs-input, .vfs .vfs-notes {
  width: 100%;
  min-height: 38px;
  padding: 8px 11px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text);
  font: inherit;
  font-size: 14px;
}
.vfs .fc-input:focus-visible, .vfs .vfs-input:focus-visible, .vfs .vfs-notes:focus-visible {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(167,139,250,.2);
}
.vfs .vfs-notes { min-height: 104px; resize: vertical; line-height: 1.5; }
.vfs .btn.small { min-height: 32px; }
.vfs .btn.small.ghost { border-style: solid; color: var(--text-dim); }
.vfs .btn.small.ghost:hover { color: var(--text); }
.vfs .btn.vfs-danger:hover { color: #fecaca; border-color: rgba(239,68,68,.55); background: rgba(239,68,68,.1); }
.vfs-value { margin: 0; padding-top: 7px; font-size: 14px; line-height: 1.45; color: var(--text); overflow-wrap: anywhere; }
.vfs-muted { color: var(--text-mute); }
.vfs-hint, .detail-source-sub { margin: 6px 0 0; font-size: 12px; line-height: 1.45; color: var(--text-mute); max-width: 65ch; text-wrap: pretty; }
.vfs-inline { display: flex; align-items: center; gap: 12px; min-width: 0; }
.vfs-inline .vfs-value { padding-top: 0; }
.vfs-body .rating-strip { padding-top: 4px; }

/* Lane: three equal cells, one border. */
.vfs-seg {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 2px;
  max-width: 420px;
  padding: 3px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.vfs-seg-cell {
  min-height: 32px;
  padding: 0 10px;
  border: 0;
  border-radius: 7px;
  background: transparent;
  color: var(--text-dim);
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
}
.vfs-seg-cell:hover { color: var(--text); }
.vfs-seg-cell[aria-checked="true"] { background: rgba(167,139,250,.2); color: #ede7ff; box-shadow: inset 0 0 0 1px rgba(167,139,250,.45); }
.vfs-seg-cell:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.vfs-series-save { margin-top: 10px; }

/* Where it's from */
.vfs-original {
  padding: 12px 14px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.vfs-original-head { display: flex; align-items: center; gap: 12px; min-width: 0; }
.vfs-favicon {
  flex: none;
  width: 20px; height: 20px;
  border-radius: 5px;
  background: var(--surface-3);
  object-fit: contain;
}
.vfs-favicon.is-missing { visibility: hidden; }
.vfs-original-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.vfs-original-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  text-decoration: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.vfs-original-title:hover { color: var(--accent); text-decoration: underline; }
.vfs-original-meta { font-size: 12px; color: var(--text-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-variant-numeric: tabular-nums; }
.vfs-original-acts { display: flex; gap: 8px; margin-top: 10px; padding-left: 32px; }
.vfs-also summary {
  padding-top: 7px;
  font-size: 13px;
  color: var(--text-dim);
  cursor: pointer;
  list-style-position: inside;
}
.vfs-also summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; }
.vfs-also ul { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.vfs-also li { display: flex; align-items: center; gap: 10px; min-width: 0; min-height: 28px; }
.vfs-also li a { min-width: 0; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vfs-paste { display: flex; gap: 8px; align-items: center; min-width: 0; }
.vfs-paste .vfs-input { flex: 1 1 auto; min-width: 0; }
.vfs .detail-source-line { padding-top: 4px; }

/* Notes: the person's text, then Hearth's block, read-only. */
.vfs-findings {
  padding: 10px 14px 12px;
  border-left: 2px solid rgba(167,139,250,.55);
  border-radius: 0 8px 8px 0;
  background: rgba(167,139,250,.06);
}
.vfs-findings-text {
  margin: 0;
  font-size: 13px;
  line-height: 1.5;
  color: var(--text-dim);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  max-height: 180px;
  overflow-y: auto;
}
.vfs-findings .btn { margin-top: 10px; }

/* Identify */
.vfs-lead { margin: 6px 0 14px; max-width: 65ch; font-size: 14px; line-height: 1.55; color: var(--text-dim); text-wrap: pretty; }
.vfs-identify-go { gap: 10px; }
.vfs-identify-go img { display: block; width: 18px; height: 18px; object-fit: contain; }
.vfs-known { margin-top: 18px; border-top: 1px solid var(--border); padding-top: 6px; }
.vfs-evidence { list-style: none; margin: 0; padding: 4px 0 0; display: flex; flex-direction: column; gap: 4px; }
.vfs-evidence li { padding: 3px 0 3px 12px; border-left: 2px solid var(--border-strong); font-size: 13px; color: var(--text-dim); overflow-wrap: anywhere; }

/* History */
.vfs-history { list-style: none; margin: 4px 0 0; padding: 0; }
.vfs-change {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 16px;
  align-items: center;
  min-height: 56px;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.vfs-change:last-child { border-bottom: 0; }
.vfs-change-text { min-width: 0; }
.vfs-change-top { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
.vfs-change-field { font-size: 13px; font-weight: 650; white-space: nowrap; }
.vfs-change-who { font-size: 12px; color: var(--text-mute); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vfs-change-what { margin: 3px 0 0; font-size: 13px; color: var(--text-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vfs-change.is-undone .vfs-change-text { opacity: .55; }
.vfs-change.is-undone .vfs-change-what { text-decoration: line-through; text-decoration-color: rgba(154,163,184,.5); }
.vfs-change.is-undo .vfs-change-field { color: var(--text-dim); }
.vfs-change-tag {
  padding: 3px 9px;
  border-radius: 999px;
  border: 1px solid var(--border);
  font-size: 11px;
  font-weight: 600;
  color: var(--text-mute);
  white-space: nowrap;
}

/* Footer: pinned, always in reach. */
.vfs-foot {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 12px;
  padding: 12px var(--vfs-pad);
  border-top: 1px solid var(--border);
  background: color-mix(in srgb, var(--bg-2) 88%, var(--bg));
}
.vfs-state {
  margin: 0;
  min-width: 0;
  font-size: 12.5px;
  color: var(--text-mute);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.vfs-state[data-tone="good"] { color: var(--accent-good); }
.vfs-state[data-tone="bad"] { color: #fecaca; }
.vfs-state[data-tone="busy"] { color: var(--text-dim); }
.vfs-state.is-fresh { animation: vfsFade 220ms ease-out; }
.vfs-undo[hidden] { display: none; }
.vfs-done { min-width: 96px; justify-content: center; }

/* Phone: a full-height sheet; the picture shrinks beside the title, labels
   go above their controls, every target is a thumb's width. */
@media (max-width: 640px) {
  .vfs .vfs-panel {
    --vfs-pad: 16px;
    top: 0; left: 0;
    transform: none;
    width: 100%;
    height: 100%;
    height: 100dvh;
    min-height: 0;
    max-height: none;
    border: 0;
    border-radius: 0;
  }
  @keyframes vfsUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }
  .vfs:not(.hidden) .vfs-panel { animation: vfsUp 220ms cubic-bezier(.2, .8, .2, 1); }
  .vfs-head { grid-template-columns: 112px minmax(0, 1fr) auto; gap: 12px; padding: max(12px, env(safe-area-inset-top)) var(--vfs-pad) 14px; }
  .vfs-dur { font-size: 10px; right: 4px; bottom: 4px; }
  .vfs .vfs-title { font-size: 18px; }
  /* Narrow: the facts line and the old name may take two lines, never more. */
  .vfs-factsline, .vfs-was-text {
    font-size: 12px;
    white-space: normal;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
  }
  .vfs-was { flex-wrap: wrap; row-gap: 2px; }
  .vfs-was-meta { display: none; }
  .vfs-close { width: 44px; height: 44px; }
  .vfs-tab { min-height: 40px; }
  .vfs-body .detail-row { grid-template-columns: minmax(0, 1fr); padding: 10px 0; }
  .vfs-body .detail-row > .detail-label { padding-top: 0; }
  .vfs-body .detail-row > :not(.detail-label) { grid-column: 1; }
  .vfs .fc-input, .vfs .vfs-input, .vfs .vfs-notes, .vfs .vfs-title { font-size: 16px; }   /* no iOS zoom on focus */
  .vfs-seg { max-width: none; }
  .vfs-seg-cell { min-height: 40px; }
  .vfs-original-acts { padding-left: 0; }
  .vfs-foot { padding: 10px var(--vfs-pad) max(10px, env(safe-area-inset-bottom)); gap: 8px; }
}
@media (pointer: coarse) {
  .vfs .btn.small, .vfs .vfs-done, .vfs .vfs-more, .vfs .vfs-undo { min-height: 44px; }
  .vfs .fc-token, .vfs .fc-overflow { height: 44px; }
}
@media (prefers-reduced-motion: reduce) {
  .vfs:not(.hidden) .vfs-panel,
  .vfs:not(.hidden) > .modal-scrim,
  .vfs:not(.hidden) .vfs-section,
  .vfs-tabpanel:not([hidden]),
  .vfs-state.is-fresh { animation: none; }
  .vfs-preview .vfs-play, .vfs .vfs-title, .vfs-tab, .vfs-scrub { transition: none; }
}

/* F2 on a tile: the title as a field, in the title's own place and size. */
.tile-title input.tile-rename {
  width: 100%;
  font: inherit;
  color: #fff;
  background: rgba(10,11,16,.85);
  border: 1px solid var(--accent);
  border-radius: 4px;
  padding: 2px 4px;
  outline: none;
}
@media (prefers-reduced-motion: reduce) {
  .fc-token { transition: none; }
}

/* Tag-picker popup (right-click → Tags…). Reuses star-picker-panel + star-pill
   but the tag pills have no avatar, so even out the padding and add an accent
   for the "create new" pill. */
.tag-picker-grid .star-pill { padding: 4px 12px; }
.tag-pill-new {
  background: rgba(74,222,128,.14);
  border-color: rgba(74,222,128,.55);
  color: #bbf7d0;
}
.tag-pill-new:hover {
  background: rgba(74,222,128,.28);
  border-color: rgba(74,222,128,.9);
  color: #dcfce7;
}

.star-chip {
  display: inline-flex;
  align-items: center;
  padding: 3px 8px;
  font-size: 12px;
  background: rgba(167,139,250,.18);
  color: #d6c9ff;
  border-radius: 999px;
  cursor: pointer;
}
.star-chip:hover { background: rgba(167,139,250,.32); }

/* Stars modal */
.stars-list { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
.stars-row {
  display: flex;
  gap: 6px;
  align-items: center;
}
.stars-row input[type="text"] {
  flex: 1;
  padding: 6px 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text);
  font: inherit;
  font-size: 13px;
}

/* Fullscreen modals: comic reader, lightbox, video player */
.modal.media-fullscreen {
  display: none;
}
.modal.media-fullscreen:not(.hidden) {
  display: flex;
  align-items: center;
  justify-content: center;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.96);
  z-index: 9000;
}
.modal.media-fullscreen .modal-scrim {
  position: absolute;
  inset: 0;
}
.modal.media-fullscreen .detail-close {
  position: absolute;
  top: 14px; right: 18px;
  width: 44px; height: 44px;
  font-size: 22px;
  z-index: 10;
}
.modal.media-fullscreen img,
.modal.media-fullscreen video {
  max-width: 96vw;
  max-height: 94vh;
  display: block;
  /* position:relative is load-bearing: without a positioned box the z-index
     never forms a stacking context here, and the sibling .modal-scrim's
     rgba(0,0,0,.7) + blur(6px) paints ON TOP of the media — the lightbox
     showed every image/gif dimmed and blurry. */
  position: relative;
  z-index: 5;
  background: #000;
}

/* Video stage: wraps <video> + custom controls so markers can sit ON the
   seek track instead of fighting native control geometry. */
.video-stage {
  position: relative;
  display: inline-flex;
  flex-direction: column;
  z-index: 5;
  line-height: 0;

  /* Aspect ratio of the loaded video, written by videos.js on loadedmetadata.
     The 16/9 default only ever applies for the instant before metadata lands. */
  --vid-ar: 1.7778;
  /* Height budget for the picture: the viewport, less the 48px control bar
     stacked under it and a little breathing room top and bottom. */
  --vid-h: calc(100vh - 64px);
}
/* A bare <video> lays out at its INTRINSIC resolution — a 854x480 source
   rendered 854x480 no matter how big the window was, which is why most of the
   library "played small". Size it to the largest box that fits the stage while
   keeping the source's aspect ratio, so low-res clips scale UP to fill too.
   Width-driven so the stage still shrink-wraps the picture and the control bar
   below stays exactly as wide as the video. */
/* Selector carries .media-fullscreen so it outranks the generic
   `.modal.media-fullscreen video` max-width/max-height rule above. */
.media-fullscreen .video-stage video {
  width: min(96vw, calc(var(--vid-h) * var(--vid-ar)));
  height: auto;
  max-width: 96vw;
  max-height: var(--vid-h);
  display: block;
}
/* Native fullscreen: the stage becomes the screen, so spend all of it. */
.video-stage:fullscreen {
  --vid-h: calc(100vh - 48px);
  width: 100vw;
  justify-content: center;
}
.video-stage:fullscreen video {
  width: min(100vw, calc(var(--vid-h) * var(--vid-ar)));
  max-width: 100vw;
  max-height: var(--vid-h);
  margin: 0 auto;
}

/* ─── Mid-right overlay tag pill (round icon → vertical tag column) ─── */
.video-overlay-legend {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  z-index: 8;
  /* Collapsed: small round icon. */
  width: 32px;
  height: 32px;
  background: rgba(15, 15, 18, .5);
  border: 1px solid rgba(255, 255, 255, .12);
  border-radius: 50%;
  color: #d0d0d8;
  font-size: 12px;
  line-height: normal;
  opacity: 0.35;
  /* overflow:visible so the count badge can sit at the top-right corner
     outside the round shape without being clipped. Scroll handling lives
     on .legend-expanded when expanded. */
  overflow: visible;
  transition: opacity 180ms ease, background 180ms ease, border-radius 180ms ease;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  user-select: none;
}
.video-overlay-legend:hover,
.video-overlay-legend:focus-within {
  opacity: 1;
  width: 180px;
  height: auto;
  max-height: 70vh;
  background: rgba(15, 15, 18, .94);
  border-radius: 10px;
}
.video-overlay-legend:hover .legend-expanded,
.video-overlay-legend:focus-within .legend-expanded {
  max-height: calc(70vh - 40px);
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--profile-scroll-thumb) transparent;
}
.video-overlay-legend::-webkit-scrollbar { width: 6px; }
.video-overlay-legend::-webkit-scrollbar-thumb { background: var(--profile-scroll-thumb); border-radius: 3px; }

.legend-toggle {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  padding: 0;
  background: transparent;
  border: none;
  color: inherit;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  align-self: center;
}
.legend-toggle svg { display: block; }

.legend-expanded {
  display: none;
  flex-direction: column;
  gap: 6px;
  padding: 4px 8px 8px;
}
.video-overlay-legend:hover .legend-expanded,
.video-overlay-legend:focus-within .legend-expanded {
  display: flex;
}

/* Count badge over the round toggle when there are markers (only visible
   in the collapsed state, since the expanded panel lists them all). */
.legend-toggle { position: relative; }
.legend-toggle-count {
  position: absolute;
  top: -2px;
  right: -2px;
  min-width: 14px;
  height: 14px;
  padding: 0 3px;
  background: var(--accent, #a78bfa);
  color: #fff;
  border-radius: 7px;
  font-size: 9px;
  font-weight: 700;
  line-height: 14px;
  text-align: center;
  box-sizing: border-box;
  pointer-events: none;
}
.legend-toggle-count:empty { display: none; }
.video-overlay-legend:hover .legend-toggle-count { display: none; }

.legend-markers {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.legend-markers:empty::before {
  content: 'No markers yet';
  color: #888;
  font-size: 11px;
  font-style: italic;
  padding: 2px 4px;
}
.legend-marker {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 3px 6px;
  background: transparent;
  border: none;
  border-radius: 4px;
  color: #d0d0d8;
  cursor: pointer;
  text-align: left;
  font: inherit;
  font-size: 11px;
}
.legend-marker:hover {
  background: rgba(255, 255, 255, .10);
  color: #fff;
}
.legend-marker-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  color: #ffce5e;
}
.legend-marker-icon svg { width: 18px; height: 18px; }
.legend-marker-text {
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.legend-marker-time {
  font-variant-numeric: tabular-nums;
  color: #888;
  font-size: 10px;
}

/* ─── Custom video controls ──────────────────────────────────────────── */
.vc-bar {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 14px;
  background: rgba(15, 15, 18, .92);
  color: #f0f0f4;
  line-height: normal;
  font-size: 12px;
  user-select: none;
  /* Stacks above the <video> so marker hover-labels and the hover-time
     tooltip aren't clipped behind it when they extend upward. */
  position: relative;
  z-index: 10;
}
.vc-btn {
  width: 32px; height: 32px;
  padding: 0;
  background: transparent;
  border: none;
  color: #f0f0f4;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 4px;
}
.vc-btn:hover { background: rgba(255,255,255,.10); }
.vc-btn svg { width: 22px; height: 22px; display: block; }
#vc-play .vc-icon-pause { display: none; }
.vc-bar.playing #vc-play .vc-icon-play { display: none; }
.vc-bar.playing #vc-play .vc-icon-pause { display: block; }
#vc-mute .vc-icon-mute { display: none; }
.vc-bar.muted #vc-mute .vc-icon-vol { display: none; }
.vc-bar.muted #vc-mute .vc-icon-mute { display: block; }

/* Subtitles: the button only exists when the video has tracks; lit when a
   track is showing, dimmed when they are switched off. */
/* Always available now — it is also the door to the online search. */
#vc-subs { display: inline-flex; opacity: .45; }
.vc-bar.has-subs #vc-subs { opacity: .55; }
.subs-menu { min-width: 260px; max-width: 360px; z-index: 1400; }
.subs-menu-head { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--text-mute); padding: 6px 12px 4px; }
.subs-menu .media-ctx-item.subs-track { padding-left: 28px; position: relative; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.subs-menu .media-ctx-item.subs-track.active::before { content: '✓'; position: absolute; left: 10px; color: var(--accent, #a78bfa); }
.subs-sync-row { display: flex; align-items: center; gap: 4px; padding: 6px 10px 2px; }
.subs-sync-label { font-size: 11px; color: var(--text-mute); margin-right: 4px; }
.subs-nudge { background: transparent; border: 1px solid var(--border); color: var(--text); border-radius: 4px; font-size: 11px; padding: 3px 7px; cursor: pointer; }
.subs-nudge:hover:not(:disabled) { border-color: var(--accent, #a78bfa); color: #ede9fe; }
.subs-nudge:disabled { opacity: .4; cursor: default; }
.subs-nudge.subs-reset { margin-left: 2px; color: var(--text-mute); }
.subs-offset-val { min-width: 58px; text-align: center; font-variant-numeric: tabular-nums; font-size: 12px; }
.subs-menu-hint { font-size: 10.5px; color: var(--text-mute); padding: 2px 12px 6px; }
/* Above the full-window player (9000) and its marker picker (9100): opened from
   the player's Subtitles menu, it was drawn behind the video and looked dead. */
.media-prompt-overlay.subs-search-overlay { z-index: 9300; }
.subs-search-panel { width: min(680px, 94vw); }
.subs-search-form { display: flex; gap: 6px; align-items: center; margin-bottom: 10px; }
.subs-search-form .subs-q { flex: 1; min-width: 0; }
.subs-search-form input[type="number"] { width: 58px; }
.subs-results { max-height: 52vh; overflow: auto; display: flex; flex-direction: column; gap: 4px; }
.subs-result { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border: 1px solid var(--border); border-radius: 6px; }
.subs-result.is-hash { border-color: color-mix(in srgb, var(--accent-good) 55%, transparent); background: color-mix(in srgb, var(--accent-good) 8%, transparent); }
.subs-result-main { flex: 1; min-width: 0; }
.subs-result-name { font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.subs-result-meta { font-size: 11px; color: var(--text-mute); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.subs-result.is-hash .subs-result-meta { color: var(--accent-good); }
.subs-search-lede { font-size: 12px; color: var(--text-mute); margin: 0 0 14px; max-width: 65ch; text-wrap: pretty; }
.subs-best { display: flex; align-items: center; gap: 16px; padding: 12px 14px; margin-bottom: 16px; border: 1px solid color-mix(in srgb, var(--accent-good) 45%, var(--border)); border-radius: 8px; background: color-mix(in srgb, var(--accent-good) 6%, transparent); }
.subs-best-text { flex: 1; min-width: 0; }
.subs-best-title { font-size: 13px; font-weight: 600; }
.subs-best-status { font-size: 12px; color: var(--text-mute); overflow-wrap: anywhere; }
.subs-best-go { white-space: nowrap; min-height: 36px; }
.subs-note { font-size: 12px; }
.subs-result { min-height: 44px; }
.subs-result.is-forced { opacity: .62; }
.subs-result.is-forced .subs-result-meta { color: var(--text-mute); }
.subs-use { white-space: nowrap; }
@media (max-width: 560px) {
  .subs-search-form { flex-wrap: wrap; }
  .subs-search-form .subs-q { flex: 1 1 100%; }
  .subs-search-form .subs-lang { flex: 1; min-width: 0; }
  .subs-best { flex-direction: column; align-items: stretch; }
}
.vc-bar.has-subs.subs-on #vc-subs { opacity: 1; color: var(--accent, #a78bfa); }
.vc-bar.has-subs #vc-subs:hover { opacity: 1; }
#video-player-el::cue {
  font-family: inherit;
  font-size: 1.05em;
  line-height: 1.3;
  color: #fff;
  background: rgba(0, 0, 0, .55);
  text-shadow: 0 1px 2px rgba(0, 0, 0, .8);
}

/* Volume group: mute button + slider sit side-by-side. The slider widens
   on hover so you can drag precisely without sacrificing too much space
   when idle. */
.vc-volume-group {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.vc-volume {
  -webkit-appearance: none;
  appearance: none;
  width: 72px;
  height: 4px;
  background: rgba(255, 255, 255, .18);
  border-radius: 2px;
  outline: none;
  cursor: pointer;
  transition: width 180ms ease, background 180ms ease;
}
.vc-volume-group:hover .vc-volume,
.vc-volume:focus { width: 100px; background: rgba(255, 255, 255, .28); }
.vc-volume::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 12px;
  height: 12px;
  background: var(--accent, #a78bfa);
  border-radius: 50%;
  border: none;
  cursor: pointer;
  transition: transform 120ms ease;
}
.vc-volume::-webkit-slider-thumb:hover { transform: scale(1.18); }
.vc-volume::-moz-range-thumb {
  width: 12px;
  height: 12px;
  background: var(--accent, #a78bfa);
  border-radius: 50%;
  border: none;
  cursor: pointer;
}
.vc-bar.muted .vc-volume::-webkit-slider-thumb { background: #888; }
.vc-bar.muted .vc-volume::-moz-range-thumb     { background: #888; }
.vc-time {
  font-variant-numeric: tabular-nums;
  color: #d0d0d8;
  white-space: nowrap;
  min-width: 90px;
}
/* Narrow bar (portrait video, small pop-out — .vc-narrow is set by a
   ResizeObserver in media/videos.js): the seek track gets a full-width row
   above the buttons instead of the sliver left between them, and the right
   cluster stays pinned right. The picture's height budget gives back the
   extra row so a portrait clip still fits the window without scrolling. */
.vc-bar.vc-narrow {
  flex-wrap: wrap;
  row-gap: 0;
  padding-top: 2px;
}
.vc-bar.vc-narrow .vc-track-wrap {
  order: -1;
  flex: 1 0 100%;
}
.vc-bar.vc-narrow .vc-volume-group { margin-left: auto; }
.vc-bar.vc-narrow .vc-time { min-width: 0; }
.video-stage:has(.vc-bar.vc-narrow) { --vid-h: calc(100vh - 100px); }
.video-stage:fullscreen:has(.vc-bar.vc-narrow) { --vid-h: calc(100vh - 84px); }

/* Track wrapper: flex-1 so it eats the leftover width between the left and
   right control clusters. Markers sit in this same wrapper, so a marker at
   t/duration*100% lines up exactly with the scrubber's position. */
.vc-track-wrap {
  flex: 1;
  position: relative;
  height: 28px;
  display: flex;
  align-items: flex-end;
}
.vc-track {
  position: relative;
  width: 100%;
  height: 6px;
  background: rgba(255,255,255,.18);
  border-radius: 3px;
  cursor: pointer;
  transition: height 120ms ease;
}
.vc-track-wrap:hover .vc-track,
.vc-track-wrap.scrubbing .vc-track { height: 10px; }
.vc-buffered, .vc-progress {
  position: absolute;
  left: 0; top: 0;
  height: 100%;
  border-radius: 3px;
  pointer-events: none;
}
.vc-buffered { background: rgba(255,255,255,.22); }
.vc-progress { background: var(--accent, #a78bfa); }
.vc-thumb {
  position: absolute;
  left: 0;
  top: 50%;
  width: 12px;
  height: 12px;
  margin-left: -6px;
  margin-top: -6px;
  background: var(--accent, #a78bfa);
  border-radius: 50%;
  pointer-events: none;
  opacity: 0;
  transition: opacity 120ms ease;
}
.vc-track-wrap:hover .vc-thumb,
.vc-track-wrap.scrubbing .vc-thumb { opacity: 1; }
.vc-hover-time {
  position: absolute;
  bottom: 24px;
  left: 0;
  transform: translateX(-50%);
  padding: 2px 6px;
  background: rgba(0,0,0,.85);
  color: #fff;
  font-size: 11px;
  border-radius: 3px;
  font-variant-numeric: tabular-nums;
  pointer-events: none;
  white-space: nowrap;
}
.vc-hover-time.hidden { display: none; }

/* ─── Loading veil (renderer/media/videos.js "Loading veil") ──────────────
   Plex's waiting screen in the Cinema's screening-room dress: the title's
   backdrop drifting slowly under a vignette, its logo (else its name) bottom
   left, a ring and the server's own words in the middle. It dissolves into the
   film when the first frame plays. `.is-stall` is the rebuffer: the ring alone
   over the frozen frame. `.is-error` keeps the art and lets the player's
   status line (with Retry) speak. Sized off its own box (container units), so
   the pop-out gets the same card, smaller. */
.video-veil {
  --vv-accent: var(--accent, #a78bfa);
  --vv-ink: #f4f0e9;
  --vv-muted: #c9c4ba;
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 48px;
  z-index: 5;
  overflow: hidden;
  container-type: size;
  background: #07080b;
  line-height: normal;
  color: var(--vv-ink);
  pointer-events: none;
  opacity: 0;
  transition: opacity .6s cubic-bezier(.4, 0, .2, 1), background-color .3s ease;
}
.video-stage.is-sfw .video-veil { --vv-accent: #edc78d; }
.video-veil[hidden] { display: none; }
.video-veil.is-on { opacity: 1; }
.vv-art { position: absolute; inset: -3%; opacity: 0; transition: opacity 1.1s ease; }
.vv-art.is-in { opacity: 1; }
.video-stage .video-veil img.vv-img {
  max-width: none; max-height: none; position: static; display: block;
  width: 100%; height: 100%;
  object-fit: cover; object-position: 50% 30%;
  filter: saturate(.82) brightness(.62);
  transform-origin: 62% 40%;
  animation: vv-drift 26s ease-in-out infinite alternate;
}
@keyframes vv-drift {
  from { transform: scale(1.03) translate3d(0, 0, 0); }
  to   { transform: scale(1.12) translate3d(-1.6%, -1%, 0); }
}
.vv-shade {
  position: absolute; inset: 0;
  background:
    radial-gradient(130% 95% at 50% 42%, transparent 28%, rgba(4, 5, 8, .78) 100%),
    linear-gradient(to top, rgba(4, 5, 8, .92) 0%, rgba(4, 5, 8, .35) 34%, transparent 58%),
    linear-gradient(to right, rgba(4, 5, 8, .62) 0%, transparent 52%);
  transition: opacity .3s ease;
}
.vv-center {
  position: absolute; left: 50%; top: 46%;
  transform: translate(-50%, -50%);
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(10px, 2.2cqh, 18px);
}
/* The ring: a faint track, an arc of the accent sweeping it, a soft glow. */
.vv-ring {
  display: block;
  position: relative;
  width: clamp(38px, 7.5cqmin, 68px); aspect-ratio: 1;
  border-radius: 50%;
  box-shadow: inset 0 0 0 3px rgba(255, 255, 255, .14);
}
.vv-ring-arc {
  position: absolute; inset: 0; border-radius: 50%;
  background: conic-gradient(from 0deg, transparent 0 45%, color-mix(in srgb, var(--vv-accent) 35%, transparent) 62%, var(--vv-accent) 97%, transparent 97.5%);
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 3.5px), #000 calc(100% - 3px));
          mask: radial-gradient(farthest-side, transparent calc(100% - 3.5px), #000 calc(100% - 3px));
  filter: drop-shadow(0 0 8px color-mix(in srgb, var(--vv-accent) 60%, transparent));
  animation: vv-spin .95s linear infinite;
}
@keyframes vv-spin { to { transform: rotate(360deg); } }
.vv-status {
  max-width: min(60cqw, 460px);
  font-size: clamp(12px, 2cqh, 15px); font-weight: 500;
  letter-spacing: .03em; text-align: center; text-wrap: balance;
  color: var(--vv-muted);
  text-shadow: 0 1px 3px rgba(0, 0, 0, .7);
}
.vv-title {
  position: absolute;
  left: clamp(16px, 5cqw, 72px); bottom: clamp(14px, 8cqh, 72px);
  max-width: min(46cqw, 640px);
  display: flex; flex-direction: column; align-items: flex-start;
  gap: clamp(4px, 1.1cqh, 10px);
  opacity: 0; transform: translate3d(-14px, 0, 0);
  transition: opacity .7s ease .15s, transform .9s cubic-bezier(.16, 1, .3, 1) .15s;
}
.video-veil.is-on .vv-title { opacity: 1; transform: none; }
.video-stage .video-veil img.vv-logo {
  display: none; position: static;
  width: auto; height: auto;
  max-width: 100%; max-height: clamp(36px, 17cqh, 170px);
  object-fit: contain; object-position: left bottom;
  filter: drop-shadow(0 4px 18px rgba(0, 0, 0, .65));
}
.video-stage .video-veil .vv-title.has-logo img.vv-logo { display: block; }
.vv-name {
  font-size: clamp(18px, 4.4cqw, 56px); font-weight: 750; line-height: 1.04;
  letter-spacing: -.025em; text-wrap: balance;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  text-shadow: 0 2px 16px rgba(0, 0, 0, .6);
}
.vv-eyebrow {
  font-size: clamp(10px, 1.6cqh, 12px); font-weight: 700;
  letter-spacing: .16em; text-transform: uppercase;
  color: var(--vv-accent);
  text-shadow: 0 1px 4px rgba(0, 0, 0, .7);
}
.vv-title.has-logo .vv-name { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
.vv-sub {
  font-size: clamp(11px, 2.1cqh, 16px); font-weight: 500;
  color: var(--vv-muted);
  letter-spacing: .01em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%;
  text-shadow: 0 1px 4px rgba(0, 0, 0, .7);
}
.vv-sub:empty { display: none; }
/* Rebuffering: the frame stays, the ring sits on a light dim. */
.video-veil.is-stall { background: transparent; }
.video-veil.is-stall .vv-art,
.video-veil.is-stall .vv-title { display: none; }
.video-veil.is-stall .vv-shade { background: rgba(0, 0, 0, .28); }
.video-veil.is-stall .vv-status { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
/* An error: the art stays, the player's status line (it has Retry) speaks. */
.video-veil.is-error .vv-center { display: none; }
.video-stage.is-veiled .playback-status:not(.has-error),
.video-stage.is-veiled .video-overlay-legend { display: none; }

/* The echo of a jump (+30 s) or a speed change (1.5×), mid-screen. */
.video-osd {
  position: absolute; left: 50%; top: 42%;
  z-index: 9;
  padding: 9px 18px;
  border-radius: 999px;
  background: rgba(10, 11, 16, .72);
  border: 1px solid rgba(255, 255, 255, .12);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  color: #f4f0e9;
  font-size: 17px; font-weight: 650; line-height: 1.2;
  font-variant-numeric: tabular-nums; white-space: nowrap;
  pointer-events: none;
  opacity: 0; transform: translate(-50%, -50%) scale(.9);
}
.video-osd.is-on { animation: vv-osd .75s cubic-bezier(.2, .8, .2, 1) both; }
/* Picture in picture (media/pip.js): while the picture floats in the OS's own
   window, the stage says so and offers the way back. Above the picture and the
   upscaler's canvas (z 5), under the OSD (9) and the bar (10), so play/pause and
   the PiP button stay usable. */
.video-pip-note {
  position: absolute; inset: 0; z-index: 6;
  display: grid; place-content: center; justify-items: center; gap: 14px;
  padding: 24px 24px 120px;
  background: radial-gradient(ellipse at 50% 40%, #151820 0%, #07080b 72%);
  color: var(--vc-ink, #f4f0e9);
  text-align: center;
  animation: vpn-in .5s cubic-bezier(.2, .8, .2, 1) both;
}
.video-pip-note[hidden] { display: none; }
.vpn-glyph { width: 64px; height: 64px; color: var(--vc-dim, #b9b4aa); animation: vpn-glyph .6s cubic-bezier(.34, 1.4, .64, 1) .08s both; }
.vpn-glyph rect:last-child { fill: var(--vc-accent, #a78bfa); }
.vpn-text { margin: 0; max-width: 32ch; font-size: 17px; font-weight: 650; line-height: 1.3; text-wrap: balance; }
.vpn-back {
  min-height: 40px; padding: 0 18px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, .18);
  background: rgba(255, 255, 255, .08);
  color: inherit; font: inherit; font-size: 14px; font-weight: 600; white-space: nowrap;
  cursor: pointer;
  transition: background-color .15s ease, transform .15s ease;
}
@media (hover: hover) { .vpn-back:hover { background: rgba(255, 255, 255, .16); } }
.vpn-back:active { transform: scale(.97); }
.vpn-back:focus-visible { outline: 2px solid var(--vc-accent, #a78bfa); outline-offset: 2px; }
@media (pointer: coarse) { .vpn-back { min-height: 44px; } }
.video-stage.is-pip .video-overlay-legend,
.video-stage.is-float .video-overlay-legend { display: none; }
/* Lit while the picture floats, like Subtitles when they are on. The id beats
   the full player's own button colour (#video-player > .video-stage .vc-btn). */
#video-player > .video-stage #vc-pip[aria-pressed="true"],
.video-stage #vc-pip[aria-pressed="true"] { color: var(--vc-accent, #a78bfa); }
/* .vc-btn's display beats the hidden attribute: without this the button showed
   in browsers that can open neither window, and did nothing when pressed. */
.vc-bar #vc-pip[hidden] { display: none; }
/* Which window the button opens, shown by its mark (media/pip.js sets .is-float in the shell). */
#vc-pip .vc-pip-float, #vc-pip.is-float .vc-pip-os { display: none; }
#vc-pip.is-float .vc-pip-float { display: block; }
/* The small in-app pop-out: the bar sits under the picture, so no room to leave for it. */
.video-stage.in-popout .video-pip-note { gap: 8px; padding: 12px; }
.video-stage.in-popout .vpn-glyph { width: 36px; height: 36px; }
.video-stage.in-popout .vpn-text { font-size: 13px; }
.video-stage.in-popout .vpn-back { min-height: 32px; padding: 0 12px; font-size: 12px; }
@keyframes vpn-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes vpn-glyph { from { opacity: 0; transform: scale(.86) translateY(6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .video-pip-note, .vpn-glyph { animation: none; } }
@keyframes vv-osd {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(.88); }
  18%  { opacity: 1; transform: translate(-50%, -50%) scale(1); }
  70%  { opacity: 1; transform: translate(-50%, -50%) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.04); }
}
.vc-skip svg text { font-variant-numeric: tabular-nums; }

/* ─── The bar's groups ─────────────────────────────────────────────────
   One row under the picture in the pop-out (transport, time, track, tools);
   Plex's two-tier overlay in the full player (below). The queue's buttons
   (.vc-q) exist only while more than one thing is queued. */
.vc-left, .vc-transport, .vc-tools { display: flex; align-items: center; gap: 10px; min-width: 0; }
.vc-transport { order: 0; gap: 4px; }
.vc-left { order: 1; }
.vc-track-wrap { order: 2; }
.vc-tools { order: 3; }
.vc-bar.vc-narrow .vc-tools { margin-left: auto; }
.vc-title { display: none; }
.vc-q { display: none; }
.vc-bar.has-queue .vc-q:not([hidden]) { display: inline-flex; }
.vc-btn:disabled { opacity: .32; cursor: default; background: transparent; }
.vc-btn:focus-visible { outline: 2px solid var(--accent, #a78bfa); outline-offset: 1px; }

/* ─── The full player: the whole window, Plex's overlay bar ─────────────
   The stage fills the screen (the picture letterboxed inside it), and the bar
   lies over the bottom of the picture on a shade: the track across, then what
   is playing and the time on the left, the transport centred, the tools on
   the right. Everything but the picture fades out while it plays untouched
   (`.is-idle`, videos.js "Idle"). The pop-out keeps its own rules: the stage
   leaves #video-player when it moves there. */
#video-player.media-fullscreen:not(.hidden) { background: #000; }
#video-player > .video-stage {
  position: fixed; inset: 0;
  display: block;
  width: 100vw; height: 100vh; height: 100dvh;
  background: #000;
}
#video-player > .video-stage video {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  max-width: none; max-height: none;
  margin: 0;
  object-fit: contain;
}
#video-player > .video-stage .vc-bar {
  position: absolute; left: 0; right: 0; bottom: 0;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  grid-template-areas: "track track track" "left transport tools";
  align-items: center;
  column-gap: 16px; row-gap: 2px;
  padding: 64px clamp(16px, 2.6vw, 40px) max(14px, env(safe-area-inset-bottom));
  background: linear-gradient(to top, rgba(0, 0, 0, .88) 0%, rgba(0, 0, 0, .62) 42%, rgba(0, 0, 0, 0) 100%);
  transition: opacity .4s ease, transform .4s cubic-bezier(.2, .8, .2, 1);
}
#video-player > .video-stage .vc-track-wrap { grid-area: track; }
#video-player > .video-stage .vc-left { grid-area: left; flex-direction: column; align-items: flex-start; gap: 3px; }
#video-player > .video-stage .vc-transport { grid-area: transport; gap: 10px; }
#video-player > .video-stage .vc-tools { grid-area: tools; justify-self: end; gap: 8px; }
#video-player > .video-stage .vc-title { display: flex; flex-direction: column; min-width: 0; max-width: 100%; line-height: 1.25; }
.vct-name { font-size: 15px; font-weight: 650; color: #f4f0e9; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vct-sub { font-size: 12.5px; color: #c9c4ba; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vct-sub:empty { display: none; }
#video-player > .video-stage .vc-time { font-size: 12.5px; color: #c9c4ba; min-width: 0; }
#video-player > .video-stage .vc-btn { width: 40px; height: 40px; border-radius: 50%; }
#video-player > .video-stage .vc-btn svg { width: 24px; height: 24px; }
#video-player > .video-stage .vc-transport .vc-play { width: 52px; height: 52px; background: rgba(255, 255, 255, .12); }
#video-player > .video-stage .vc-transport .vc-play svg { width: 26px; height: 26px; }
@media (hover: hover) { #video-player > .video-stage .vc-transport .vc-play:hover { background: rgba(255, 255, 255, .22); } }
/* The close button and the marker pill fade with the bar. */
#video-player .detail-close { transition: opacity .4s ease; }
#video-player.is-idle .detail-close,
#video-player > .video-stage.is-idle .video-overlay-legend,
#video-player > .video-stage.is-idle .vc-bar { opacity: 0; pointer-events: none; }
#video-player > .video-stage.is-idle .vc-bar { transform: translateY(10px); }
/* While the title card is up only the close button stays, as on Plex. */
#video-player > .video-stage.is-loading .vc-bar,
#video-player > .video-stage.is-loading .video-overlay-legend { opacity: 0; pointer-events: none; }
.video-stage.is-idle, .video-stage.is-idle video { cursor: none; }
/* A narrow window (a phone using the desktop UI): three tiers — the track,
   what is playing, then the transport beside the tools. The pop-out, the volume
   slider and the mute button give way (a phone has its own volume keys). The
   media query covers the first frame, before videos.js measures the bar. */
#video-player > .video-stage .vc-bar.vc-narrow {
  grid-template-columns: auto minmax(0, 1fr);
  grid-template-areas: "track track" "left left" "transport tools";
  column-gap: 8px;
  padding-top: 48px;
}
#video-player > .video-stage .vc-bar.vc-narrow .vc-btn { width: 36px; height: 36px; }
#video-player > .video-stage .vc-bar.vc-narrow .vc-transport { gap: 2px; }
#video-player > .video-stage .vc-bar.vc-narrow .vc-transport .vc-play { width: 44px; height: 44px; }
#video-player > .video-stage .vc-bar.vc-narrow .vc-tools { gap: 2px; }
#video-player > .video-stage .vc-bar.vc-narrow .vc-volume-group,
#video-player > .video-stage .vc-bar.vc-narrow #vc-popout { display: none; }
#video-player > .video-stage .vc-bar.vc-narrow button.playback-quality { max-width: 136px; }
@media (max-width: 640px) {
  #video-player > .video-stage .vc-bar {
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-areas: "track track" "left left" "transport tools";
    column-gap: 8px;
    padding-top: 48px;
  }
  #video-player > .video-stage .vc-bar .vc-btn { width: 36px; height: 36px; }
  #video-player > .video-stage .vc-bar .vc-transport { gap: 2px; }
  #video-player > .video-stage .vc-bar .vc-transport .vc-play { width: 44px; height: 44px; }
  #video-player > .video-stage .vc-bar .vc-tools { gap: 2px; }
  #video-player > .video-stage .vc-bar .vc-volume-group,
  #video-player > .video-stage .vc-bar #vc-popout { display: none; }
  #video-player > .video-stage .vc-bar button.playback-quality { max-width: 136px; }
}
@media (pointer: coarse) { #video-player > .video-stage .vc-btn { width: 44px; height: 44px; } }
/* ─── Polish: the full player's finish (2026-10-10) ───────────────────
   One accent for everything on the stage (brass in SFW, the app's accent
   otherwise), a shade behind the top controls as well as the bottom ones, a
   round glass close button, a slim track that thickens under the pointer,
   borderless pill controls, and a volume track that shows its level. */
.video-stage { --vc-accent: var(--accent, #a78bfa); --vc-ink: #f4f0e9; --vc-dim: #b9b4aa; }
.video-stage.is-sfw { --vc-accent: #edc78d; --accent: #edc78d; }
#video-player > .video-stage::before {
  content: ''; position: absolute; left: 0; right: 0; top: 0; height: 150px;
  z-index: 6; pointer-events: none;
  background: linear-gradient(to bottom, rgba(0, 0, 0, .62) 0%, rgba(0, 0, 0, .28) 55%, transparent 100%);
  transition: opacity .4s ease;
}
#video-player > .video-stage.is-idle::before,
#video-player > .video-stage.is-loading::before { opacity: 0; }
#video-player .detail-close {
  top: 18px; right: 22px;
  width: 44px; height: 44px;
  display: grid; place-items: center;
  padding: 0;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, .14);
  background: rgba(14, 15, 20, .5);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  color: var(--vc-ink, #f4f0e9);
  font-size: 22px; line-height: 1;
  transition: opacity .4s ease, background-color .15s ease, transform .15s ease;
}
@media (hover: hover) { #video-player .detail-close:hover { background: rgba(255, 255, 255, .16); } }
#video-player .detail-close:active { transform: scale(.94); }
#video-player .detail-close:focus-visible { outline: 2px solid var(--accent, #a78bfa); outline-offset: 2px; }

/* Windowed playback needs a real title strip, not a few invisible pixels at
   the screen edge. Keep it outside the moving stage so the floating player
   retains its own header, and true fullscreen gets the entire picture. */
.video-windowbar { display: none; }
body.hearth-shell #video-player { --video-windowbar-h: 44px; }
body.hearth-shell #video-player > .video-stage {
  top: var(--video-windowbar-h);
  height: calc(100vh - var(--video-windowbar-h));
  height: calc(100dvh - var(--video-windowbar-h));
}
body.hearth-shell #video-player .video-windowbar {
  position: absolute; inset: 0 0 auto;
  height: var(--video-windowbar-h);
  display: flex; align-items: center; gap: 24px;
  padding: 0 68px 0 16px; overflow: hidden;
  background: #1c2027;
  box-shadow: inset 0 -1px rgba(237, 199, 141, .25);
  color: #e1ddd5; font-size: 12px; line-height: 1;
  user-select: none; -webkit-app-region: drag;
  z-index: 9;
}
.video-windowbrand { display: flex; align-items: center; gap: 8px; font-weight: 650; letter-spacing: .03em; }
body.hearth-shell #video-player .video-windowbrand img { width: 24px; height: 24px; background: none; }
.video-windowhint { margin-left: auto; color: #b9b4aa; font-size: 11px; white-space: nowrap; }
body.shell-mac #video-player .video-windowbar { padding-left: 84px; }
/* The close control follows the drag region in DOM order, so its no-drag
   rectangle punches through Electron's native region. Never fade it while
   windowed: the title strip remains usable even when playback is idle. */
body.hearth-shell #video-player > .detail-close {
  top: 6px; right: 12px; width: 32px; height: 32px;
  border-radius: 7px; border-color: transparent; background: transparent;
  opacity: 1; pointer-events: auto; -webkit-app-region: no-drag;
}
@media (hover: hover) {
  body.hearth-shell #video-player > .detail-close:hover { background: #ffffff18; }
}
@media (pointer: coarse) {
  body.hearth-shell #video-player > .detail-close { top: 0; right: 6px; width: 44px; height: 44px; }
}
/* The old edge lip is appended at the end of body. It must yield, otherwise
   it repaints drag over the close button despite the button's no-drag. */
/* has-video-player / has-fullscreen: renderer/has-flags.js (a body :has()
   re-runs style for the whole page on every class change under it). */
body.hearth-shell:not(.locked).has-video-player > .shell-drag-lip,
body.has-fullscreen .shell-drag-lip,
:root:fullscreen .shell-drag-lip { display: none; }
:root:fullscreen body.hearth-shell #video-player,
body.hearth-shell:fullscreen #video-player,
body.hearth-shell.has-fullscreen #video-player { --video-windowbar-h: 0px; }

/* Back, top-left of every full-screen viewer (video, comic, image). It does
   exactly what × does; × alone read as "close the whole app" (Rober,
   2026-11-03). Same glass as the round close button. In the video player it
   sits under the shell's title strip and fades with the controls. */
.modal.media-fullscreen > .media-back {
  position: absolute; z-index: 10;
  top: 14px; left: 18px;
  height: 44px; padding: 0 18px 0 12px;
  display: inline-flex; align-items: center; gap: 6px;
  border-radius: 22px;
  border: 1px solid rgba(255, 255, 255, .14);
  background: rgba(14, 15, 20, .5);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  color: #f4f0e9;
  font: inherit; font-size: 14px; font-weight: 600; line-height: 1; white-space: nowrap;
  cursor: pointer;
  -webkit-app-region: no-drag;
  transition: opacity .4s ease, background-color .15s ease, transform .15s ease;
}
.modal.media-fullscreen > .media-back svg { flex: none; }
@media (hover: hover) { .modal.media-fullscreen > .media-back:hover { background: rgba(255, 255, 255, .16); } }
.modal.media-fullscreen > .media-back:active { transform: scale(.96); }
.modal.media-fullscreen > .media-back:focus-visible { outline: 2px solid var(--accent, #a78bfa); outline-offset: 2px; }
#video-player > .media-back {
  top: calc(var(--video-windowbar-h, 0px) + 18px);
  top: calc(var(--video-windowbar-h, 0px) + max(18px, env(safe-area-inset-top)));
  left: max(22px, env(safe-area-inset-left));
}
#video-player.is-idle > .media-back { opacity: 0; pointer-events: none; }
/* The bundle queue bar is centred at the top: keep it clear of Back and ×. */
#video-player .video-queue-bar { max-width: min(520px, calc(100% - 280px)); }
/* A phone: Back becomes a round chevron the size of ×; the name stays in aria-label. */
@media (max-width: 520px) {
  .modal.media-fullscreen > .media-back { width: 44px; padding: 0; justify-content: center; }
  .modal.media-fullscreen > .media-back span {
    position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
  }
  #video-player .video-queue-bar { max-width: calc(100% - 152px); }
}
@media (prefers-reduced-motion: reduce) { .modal.media-fullscreen > .media-back { transition: none; } }

#video-player > .video-stage .vc-bar { row-gap: 12px; padding-top: 80px; padding-bottom: max(18px, env(safe-area-inset-bottom)); }
#video-player > .video-stage .vc-btn {
  color: rgba(244, 240, 233, .9);
  transition: background-color .15s ease, color .15s ease, transform .12s ease;
}
@media (hover: hover) { #video-player > .video-stage .vc-btn:hover:not(:disabled) { color: #fff; background: rgba(255, 255, 255, .12); } }
#video-player > .video-stage .vc-btn:active:not(:disabled) { transform: scale(.92); }
#video-player > .video-stage .vc-btn:focus-visible { outline: 2px solid var(--vc-accent); outline-offset: 2px; }
#video-player > .video-stage .vc-skip svg { width: 28px; height: 28px; }
#video-player > .video-stage .vc-transport .vc-play { color: #fff; background: rgba(255, 255, 255, .14); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .1); }
/* The subtitles button reads as a control, not as switched off. */
#video-player > .video-stage #vc-subs { opacity: .9; }
#video-player > .video-stage .vc-bar.has-subs.subs-on #vc-subs { opacity: 1; color: var(--vc-accent); }
/* What is playing. */
#video-player > .video-stage .vc-left { gap: 4px; }
#video-player > .video-stage .vct-name { font-size: 16px; font-weight: 650; letter-spacing: -.01em; color: var(--vc-ink); }
#video-player > .video-stage .vct-sub { font-size: 13px; color: var(--vc-dim); }
#video-player > .video-stage .vc-time { font-size: 12.5px; color: var(--vc-dim); font-variant-numeric: tabular-nums; letter-spacing: .01em; }
/* The track: slim, thickening under the pointer; the played part glows faintly. */
#video-player > .video-stage .vc-track-wrap { height: 22px; align-items: center; }
#video-player > .video-stage .vc-track { height: 4px; border-radius: 999px; background: rgba(255, 255, 255, .2); }
#video-player > .video-stage .vc-track-wrap:hover .vc-track,
#video-player > .video-stage .vc-track-wrap.scrubbing .vc-track { height: 7px; }
#video-player > .video-stage .vc-buffered { border-radius: 999px; background: rgba(255, 255, 255, .3); }
#video-player > .video-stage .vc-progress {
  border-radius: 999px; background: var(--vc-accent);
  box-shadow: 0 0 12px color-mix(in srgb, var(--vc-accent) 45%, transparent);
}
#video-player > .video-stage .vc-thumb {
  width: 14px; height: 14px; margin-left: -7px; margin-top: -7px;
  background: var(--vc-accent);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--vc-accent) 28%, transparent), 0 1px 6px rgba(0, 0, 0, .5);
}
#video-player > .video-stage .vc-hover-time {
  bottom: 20px; padding: 4px 9px; border-radius: 7px;
  background: rgba(12, 13, 18, .86); border: 1px solid rgba(255, 255, 255, .12);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  font-size: 12px; font-weight: 600; color: var(--vc-ink);
}
/* The Quality trigger is a pill among round buttons, not a boxed field. */
#video-player > .video-stage .vc-bar button.playback-quality {
  min-height: 36px; padding: 0 14px; border: 0; border-radius: 999px;
  background: rgba(255, 255, 255, .09); color: var(--vc-ink); font-size: 12.5px;
}
@media (hover: hover) { #video-player > .video-stage .vc-bar button.playback-quality:hover { background: rgba(255, 255, 255, .17); } }
#video-player > .video-stage .vc-bar button.playback-quality[aria-expanded="true"] { background: rgba(255, 255, 255, .17); box-shadow: inset 0 0 0 1px var(--vc-accent); }
/* The tools in three groups, in one order, whoever added them (Rober, 2026-11-03: "improve
   framing, and consistency and order? like the watch together should move over"). Three
   modules insert buttons here (playback.js the Quality pill, watch/together.js Watch together,
   upscale.js its button), each before #vc-subs, so their DOM order is whichever ran first;
   `order` fixes the row instead: sound · picture (Quality, Upscale) · watching (Subtitles,
   Watch together, the list) · where it plays (Pop out, the floating window, Fullscreen). */
.vc-tools > .vc-volume-group { order: 1; }
.vc-tools > .playback-quality { order: 2; }
.vc-tools > .vc-upscale { order: 3; }
.vc-tools > #vc-subs { order: 4; }
.vc-tools > #vc-together { order: 5; }
.vc-tools > #vc-list { order: 6; }
.vc-tools > #vc-popout { order: 7; }
.vc-tools > #vc-pip { order: 8; }
.vc-tools > #vc-fullscreen { order: 9; }
/* The full player's wide bar: each group gets air around it. */
#video-player > .video-stage .vc-bar:not(.vc-narrow) .vc-tools > .vc-volume-group { margin-right: 8px; }
#video-player > .video-stage .vc-bar:not(.vc-narrow) .vc-tools > #vc-subs,
#video-player > .video-stage .vc-bar:not(.vc-narrow) .vc-tools > #vc-popout { margin-left: 8px; }
@media (max-width: 640px) {
  #video-player > .video-stage .vc-bar .vc-tools > .vc-volume-group { margin-right: 0; }
  #video-player > .video-stage .vc-bar .vc-tools > #vc-subs,
  #video-player > .video-stage .vc-bar .vc-tools > #vc-popout { margin-left: 0; }
}
/* Stacked (videos.js sets .vc-stack when the tools would run into the centred transport):
   the title gets its own row, the transport goes left, every tool stays on the right. */
#video-player > .video-stage .vc-bar.vc-stack:not(.vc-narrow) {
  grid-template-columns: auto minmax(0, 1fr);
  grid-template-areas: "track track" "left left" "transport tools";
}
/* Narrow (a phone on the desktop UI): the tools get a row of their own under the transport,
   spread across it, and Upscale gives way like the pop-out and the volume slider (a phone
   GPU is no place for it). Beside the transport they ran off the screen. */
#video-player > .video-stage .vc-bar.vc-narrow {
  grid-template-columns: minmax(0, 1fr);
  grid-template-areas: "track" "left" "transport" "tools";
}
#video-player > .video-stage .vc-bar.vc-narrow .vc-transport { justify-self: center; }
#video-player > .video-stage .vc-bar.vc-narrow .vc-tools { justify-self: stretch; justify-content: space-between; margin-left: 0; }
#video-player > .video-stage .vc-bar.vc-narrow button.vc-upscale { display: none; }
@media (max-width: 640px) {
  #video-player > .video-stage .vc-bar {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas: "track" "left" "transport" "tools";
  }
  #video-player > .video-stage .vc-bar .vc-transport { justify-self: center; }
  #video-player > .video-stage .vc-bar .vc-tools { justify-self: stretch; justify-content: space-between; }
  #video-player > .video-stage .vc-bar button.vc-upscale { display: none; }
}
/* Upscale is the Quality pill's twin: same height, shape and fill (it was a boxed outline
   beside a filled pill). Switched on, it keeps its brass. */
#video-player > .video-stage .vc-bar button.vc-upscale {
  min-height: 36px; padding: 0 14px; border-radius: 999px; font-size: 12.5px;
}
#video-player > .video-stage .vc-bar button.vc-upscale:not(.is-on) {
  border-color: transparent; background: rgba(255, 255, 255, .09); color: var(--vc-ink);
}
@media (hover: hover) { #video-player > .video-stage .vc-bar button.vc-upscale:not(.is-on):hover { background: rgba(255, 255, 255, .17); } }
#video-player > .video-stage .vc-bar button.vc-upscale:not(.is-on)[aria-expanded="true"] { background: rgba(255, 255, 255, .17); box-shadow: inset 0 0 0 1px var(--vc-accent); }
/* Volume: always shown in the full player, the level filled in the accent. */
#video-player > .video-stage .vc-volume,
#video-player > .video-stage .vc-volume-group:hover .vc-volume,
#video-player > .video-stage .vc-volume:focus {
  width: 92px; height: 4px; border-radius: 999px;
  background: linear-gradient(to right, var(--vc-ink) var(--vol, 100%), rgba(255, 255, 255, .22) var(--vol, 100%));
}
#video-player > .video-stage .vc-volume::-webkit-slider-thumb { background: var(--vc-ink); box-shadow: 0 1px 4px rgba(0, 0, 0, .5); }
#video-player > .video-stage .vc-volume::-moz-range-thumb { background: var(--vc-ink); }
/* The settings menu wears the stage's accent and a deeper glass. */
.video-stage .playback-menu {
  --pb-accent: var(--vc-accent);
  --pb-surface: rgba(16, 17, 22, .9);
  border-radius: 14px;
  -webkit-backdrop-filter: blur(18px) saturate(1.2); backdrop-filter: blur(18px) saturate(1.2);
}

/* The Up next card clears the overlaid bar. */
#video-player > .video-stage .video-upnext { bottom: 150px; }
/* SFW: the Cinema's brass on the track, as Plex wears its amber. */
.video-stage.is-sfw .vc-progress,
.video-stage.is-sfw .vc-thumb { background: #edc78d; }
.video-stage.is-sfw .vc-volume::-webkit-slider-thumb { background: #edc78d; }
.video-stage.is-sfw .vc-volume::-moz-range-thumb { background: #edc78d; }
/* SFW: no marker pill (markers are a personal-library tool). */
.video-stage.is-sfw .video-overlay-legend { display: none; }

@media (prefers-reduced-motion: reduce) {
  .video-stage .video-veil img.vv-img { animation: none; transform: scale(1.04); }
  .vv-ring-arc { animation: vv-breathe 1.6s ease-in-out infinite; }
  .vv-title { transition: opacity .3s ease; transform: none; }
  .video-veil, .vv-art { transition-duration: .2s; }
  .video-osd.is-on { animation: vv-osd-still .9s linear both; }
}
@keyframes vv-breathe { 50% { opacity: .35; } }
@keyframes vv-osd-still { 0%, 80% { opacity: 1; transform: translate(-50%, -50%); } 100% { opacity: 0; transform: translate(-50%, -50%); } }

/* Markers row — sits above the track inside the same wrapper. A marker at
   X% is positioned so its needle tip lines up with the scrubber's X%. */
.video-markers {
  position: absolute;
  left: 0; right: 0;
  bottom: 6px;     /* rests on top of the (6px-tall idle) track */
  height: 22px;
  pointer-events: none;
}
.video-marker-flag {
  position: absolute;
  bottom: 0;
  /* Needle tip is at viewBox X=12 (center). translateX(-50%) anchors that
     tip at the marker's time position on the track. */
  transform: translateX(-50%);
  width: 24px;
  height: 22px;
  padding: 0;
  border: none;
  background: transparent;
  color: #ffce5e;
  cursor: pointer;
  pointer-events: auto;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,.8));
  line-height: 0;
}
.video-marker-flag svg { width: 24px; height: 22px; display: block; }
.video-marker-flag.has-icon { width: 26px; height: 26px; }
.video-marker-flag.has-icon svg { width: 26px; height: 26px; }
.video-marker-flag:hover { color: #ffe39b; transform: translateX(-50%) scale(1.18); z-index: 2; }
.video-marker-flag .video-marker-label {
  position: absolute;
  bottom: 100%;
  left: 50%;
  transform: translateX(-50%);
  margin-bottom: 4px;
  padding: 3px 8px;
  background: rgba(0,0,0,.88);
  color: #fff;
  font-size: 11px;
  white-space: nowrap;
  border-radius: 4px;
  opacity: 0;
  transition: opacity 120ms ease;
  pointer-events: none;
}
.video-marker-flag:hover .video-marker-label { opacity: 1; }

/* ─── Add-marker popover (anchored over the video) ───────────────────── */
.video-marker-popover {
  position: absolute;
  z-index: 12;
  display: flex;
  gap: 4px;
  padding: 6px;
  background: rgba(20, 20, 24, .96);
  border: 1px solid rgba(255, 255, 255, .15);
  border-radius: 6px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, .6);
  line-height: normal;
}
.video-marker-popover.hidden { display: none; }
.video-marker-popover input {
  width: 200px;
  padding: 4px 8px;
  background: #111;
  color: #fff;
  border: 1px solid rgba(255,255,255,.15);
  border-radius: 4px;
  font-size: 12px;
}

/* ─── Preset picker modal ────────────────────────────────────────────── */
#video-marker-picker { z-index: 9100; }
.marker-picker-custom { margin-bottom: 12px; }
.marker-picker-custom input {
  width: 100%;
  padding: 8px 12px;
  background: var(--surface, #1a1a20);
  border: 1px solid rgba(255,255,255,.12);
  border-radius: 6px;
  color: #fff;
  font-size: 13px;
  box-sizing: border-box;
}
.marker-picker-custom input:focus {
  outline: none;
  border-color: rgba(167, 139, 250, .6);
}
.marker-preset-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(98px, 1fr));
  gap: 8px;
  max-height: 60vh;
  overflow-y: auto;
}
.marker-preset {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 12px 6px;
  background: var(--surface, #1a1a20);
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 6px;
  color: #ddd;
  cursor: pointer;
  font-size: 11px;
  text-align: center;
  transition: background 120ms ease, border-color 120ms ease, transform 80ms ease;
}
.marker-preset:hover {
  background: rgba(167,139,250,.18);
  border-color: rgba(167,139,250,.5);
  color: #fff;
}
.marker-preset:active { transform: scale(0.96); }
.marker-preset .marker-preset-icon {
  width: 56px;
  height: 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255,255,255,.04);
  border-radius: 6px;
  color: #ffce5e;
}
.marker-preset svg { width: 44px; height: 44px; display: block; }
.marker-preset-label { line-height: 1.2; }

.comic-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 56px;
  height: 96px;
  background: rgba(0,0,0,.45);
  color: #fff;
  border: none;
  font-size: 40px;
  cursor: pointer;
  z-index: 8;
  border-radius: 8px;
  user-select: none;
}
.comic-nav:hover { background: rgba(167,139,250,.4); }
.comic-nav.prev { left: 12px; }
.comic-nav.next { right: 12px; }

.comic-hud {
  position: absolute;
  bottom: 12px; left: 50%;
  transform: translateX(-50%);
  background: rgba(0,0,0,.6);
  color: #fff;
  font-size: 12px;
  padding: 4px 10px;
  border-radius: 999px;
  z-index: 8;
}

.btn.ghost {
  background: transparent;
  border: 1px dashed var(--border);
  color: var(--text-mute);
}
.btn.ghost:hover {
  color: var(--text);
  border-color: rgba(167,139,250,.5);
}
.btn.danger {
  background: rgba(239,68,68,.18);
  border: 1px solid rgba(239,68,68,.35);
  color: #fca5a5;
}
.btn.danger:hover { background: rgba(239,68,68,.32); }

/* ─────────────── media sidebar (Comics / Images / Videos) ─────────────── */
/* Scoped via `.media-view .sidebar` (and the helper `.media-sidebar` class
   added in markup) so the Library and Steam sidebars are untouched. */

.media-view .sidebar.media-sidebar {
  padding: 16px 12px 22px;
  background:
    linear-gradient(180deg, rgba(124,58,237,.06) 0%, transparent 220px),
    rgba(10,11,16,.55);
}

/* Tighten chip density inside the media sidebar so Stars / Tags pack at
   least 2 chips per row instead of one-per-line. Scoped to .media-sidebar
   so other chip surfaces (modals, picker dialogs, etc.) keep the roomier
   default styling. */
.media-sidebar .chip-list { gap: 4px; }
.media-sidebar .chip {
  padding: 2px 8px;
  font-size: 11px;
  max-width: 100%;
}
.media-sidebar .chip > * {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.media-sidebar .star-chip {
  padding-left: 2px;
  padding-right: 8px;
  gap: 5px;
  max-width: 100%;
}
.media-sidebar .star-chip-avatar {
  width: 18px;
  height: 18px;
  font-size: 8px;
}
.media-sidebar .star-chip-name {
  font-size: 11px;
  max-width: 90px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Stars sidebar list — render as a fixed 2-column grid so chip widths
   are predictable and two stars sit side-by-side regardless of the
   sidebar's natural wrap point. Cap height generously so the scrollbar
   only appears for large star libraries; long names truncate inside
   their cell and the existing title= tooltip reveals the full name. */
.media-sidebar .media-star-filters {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 4px;
  max-height: 260px;
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-width: thin;
  scrollbar-color: var(--profile-scroll-thumb) transparent;
  align-content: start;
}
/* Each chip stretches across its grid cell; the name inside truncates. */
.media-sidebar .media-star-filters .star-chip { width: 100%; min-width: 0; }
.media-sidebar .media-star-filters .star-chip-name { max-width: none; }
/* Inline note / "no stars yet" messages should span the full row. */
.media-sidebar .media-star-filters > p.muted { grid-column: 1 / -1; }
.media-sidebar .media-star-filters::-webkit-scrollbar { width: 6px; }
.media-sidebar .media-star-filters::-webkit-scrollbar-track { background: transparent; }
.media-sidebar .media-star-filters::-webkit-scrollbar-thumb {
  background: var(--profile-scroll-thumb);
  border-radius: 3px;
}
.media-sidebar .media-star-filters::-webkit-scrollbar-thumb:hover {
  background: var(--profile-scroll-hover);
}

/* Bulk-tool dock pinned to the bottom of the media sidebar. Compact emoji
   buttons with a CSS tooltip on hover. Sticks to the bottom via the
   sidebar's flex column. */
.media-sidebar { display: flex; flex-direction: column; min-height: 0; }
.media-tools-dock {
  margin-top: auto;
  display: flex;
  gap: 8px;
  padding: 12px 4px 6px;
  border-top: 1px solid rgba(255,255,255,.06);
  flex-wrap: wrap;
  /* Center the row in the dock so the cluster sits visually balanced
     under the sidebar rather than crammed to the left edge. */
  justify-content: center;
  align-items: center;
}
.media-tool-btn {
  position: relative;
  width: 34px;
  height: 34px;
  padding: 0;
  background: var(--surface, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(255,255,255,.08));
  border-radius: 8px;
  color: var(--text-dim, rgba(255,255,255,.72));
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 120ms ease, transform 80ms ease, border-color 120ms ease, color 120ms ease;
}
.media-tool-btn svg {
  width: 18px;
  height: 18px;
  display: block;
}
.media-tool-btn:hover:not(:disabled) {
  background: rgba(167,139,250,.18);
  border-color: rgba(167,139,250,.5);
  color: #f0e6ff;
}
.media-tool-btn:active:not(:disabled) { transform: scale(.94); }
.media-tool-btn:disabled { opacity: .55; cursor: progress; }

/* Tooltip — themed to match the app's other floating chrome. Anchored to
   each button's LEFT edge by default so it extends rightward into the
   visible sidebar area (otherwise the leftmost button's tooltip would
   clip on the sidebar's left edge with a center-anchored layout). */
.media-tool-btn::after {
  content: attr(data-tooltip);
  position: absolute;
  bottom: calc(100% + 10px);
  left: 0;
  padding: 5px 10px;
  background: var(--bg-2, rgba(20, 20, 26, .98));
  color: var(--text, #f0e6ff);
  border: 1px solid var(--border, rgba(255,255,255,.10));
  border-radius: 6px;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .15px;
  /* The dock lives in .sidebar, which sets overflow-y:auto — and per spec a
     non-visible overflow on one axis forces the other to clip too. So a
     tooltip that runs past the 240px sidebar gets sliced mid-word rather than
     overflowing into the grid. Cap the width and let it wrap, then anchor the
     row's outer buttons inward so nothing reaches an edge. */
  max-width: 150px;
  white-space: normal;
  text-align: center;
  line-height: 1.35;
  opacity: 0;
  pointer-events: none;
  transition: opacity 140ms ease, transform 140ms ease;
  transform: translateY(2px);
  z-index: 50;
  box-shadow: 0 6px 18px rgba(0,0,0,.55);
}
/* Left two open rightward, right two open leftward, anything between centers. */
.media-tool-btn:nth-child(n+3)::after {
  left: 50%;
  margin-left: -75px;
}
.media-tool-btn:nth-last-child(-n+2)::after {
  left: auto;
  right: 0;
  margin-left: 0;
}
.media-tool-btn:nth-last-child(-n+2)::before {
  left: auto;
  right: 12px;
}
.media-tool-btn::before {
  content: '';
  position: absolute;
  bottom: calc(100% + 5px);
  left: 12px;
  width: 8px;
  height: 8px;
  background: var(--bg-2, rgba(20, 20, 26, .98));
  border-right: 1px solid var(--border, rgba(255,255,255,.10));
  border-bottom: 1px solid var(--border, rgba(255,255,255,.10));
  transform: rotate(45deg);
  opacity: 0;
  pointer-events: none;
  transition: opacity 140ms ease;
  z-index: 51;
}
.media-tool-btn:hover::after,
.media-tool-btn:hover::before { opacity: 1; }
.media-tool-btn:hover::after { transform: translateY(0); }

/* Transient status pill (e.g. "Pushed: 47 items") replaces the tooltip
   when JS sets data-status. Accent color so it reads as feedback. */
.media-tool-btn[data-status]::after {
  content: attr(data-status);
  opacity: 1;
  transform: translateY(0);
  background: rgba(167,139,250,.98);
  border-color: rgba(167,139,250,.55);
  color: #fff;
}
.media-tool-btn[data-status]::before {
  opacity: 1;
  background: rgba(167,139,250,.98);
  border-right-color: rgba(167,139,250,.55);
  border-bottom-color: rgba(167,139,250,.55);
}

/* Stars with zero items on the current tab render dimmed — still
   clickable, but visually pushed back so the populated ones stand out. */
.media-sidebar .star-chip.star-chip-empty {
  opacity: 0.45;
  filter: saturate(.4);
}
.media-sidebar .star-chip.star-chip-empty:hover { opacity: 0.9; filter: none; }
/* Allow plain text tag chips to ellipsis too. Tags render as bare text
   inside .chip — wrap them in a span via CSS won't work, but we can apply
   the same constraints to the chip's own text by relying on flex-shrink
   from the overflow rules above. */

.media-view .sidebar .media-section {
  margin: 0;
  padding: 14px 4px 16px;
  border-bottom: 1px solid rgba(255,255,255,.04);
}
.media-view .sidebar .media-section:last-of-type { border-bottom: 0; }
.media-view .sidebar .media-section:first-of-type { padding-top: 4px; }

.media-view .sidebar .media-section h3 {
  display: flex;
  align-items: center;
  gap: 7px;
  margin: 0 0 10px;
  font-size: 10.5px;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--text-mute);
  font-weight: 700;
}
.media-view .sidebar .media-h3-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px; height: 18px;
  border-radius: 5px;
  background: rgba(167,139,250,.08);
  color: var(--accent);
}
/* Magnifying-glass toggle on filterable section headers. Sits flush right
   so the section title still owns the row's leading space. */
.media-view .sidebar .media-section-search-toggle {
  margin-left: auto;
  width: 18px; height: 18px;
  display: inline-flex; align-items: center; justify-content: center;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 4px;
  color: var(--text-mute);
  cursor: pointer;
  padding: 0;
  opacity: .65;
  transition: opacity .12s, color .12s, background .12s, border-color .12s;
}
.media-view .sidebar .media-section-search-toggle:hover {
  opacity: 1; color: var(--accent);
  background: rgba(167,139,250,.10);
  border-color: rgba(167,139,250,.25);
}
.media-view .sidebar .media-section-search-toggle.active {
  opacity: 1; color: var(--accent);
  background: rgba(167,139,250,.18);
  border-color: rgba(167,139,250,.5);
}
.media-view .sidebar .media-section-search-row {
  margin: -4px 0 8px;
}
.media-view .sidebar .media-section-search-row.hidden { display: none; }
.media-view .sidebar .media-section-search-row input {
  width: 100%;
  box-sizing: border-box;
  padding: 4px 8px;
  font-size: 11.5px;
  background: rgba(0,0,0,.25);
  border: 1px solid var(--border, #2a2d36);
  border-radius: 4px;
  color: var(--text, #e8e8f0);
  font-family: inherit;
  outline: none;
}
.media-view .sidebar .media-section-search-row input:focus {
  border-color: rgba(167,139,250,.65);
}

/* ─── Collapsible media-section chevron (generic, all non-server sections) ─── */
.media-view .sidebar .media-section h3.media-section-h3-clickable {
  cursor: pointer;
  user-select: none;
  padding: 4px 6px;
  margin: 0 -6px 10px;
  border-radius: 6px;
  transition: background .12s, color .12s;
}
.media-view .sidebar .media-section h3.media-section-h3-clickable:hover {
  background: rgba(167,139,250,.08);
  color: var(--text, #e8e8f0);
}
.media-view .sidebar .media-section .media-section-chevron {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px; height: 18px;
  background: rgba(167,139,250,.10);
  border: 1px solid rgba(167,139,250,.25);
  border-radius: 4px;
  color: var(--accent);
  padding: 0;
  font-size: 12px;
  line-height: 1;
  opacity: .85;
  transition: opacity .12s, transform .15s, background .12s, border-color .12s;
}
.media-view .sidebar .media-section .media-section-search-toggle + .media-section-chevron {
  margin-left: 4px;
}
.media-view .sidebar .media-section h3.media-section-h3-clickable:hover .media-section-chevron {
  opacity: 1;
  background: rgba(167,139,250,.22);
  border-color: rgba(167,139,250,.55);
}
.media-view .sidebar .media-section.collapsed > :not(h3) { display: none; }
.media-view .sidebar .media-section.collapsed { padding-bottom: 6px; }
.media-view .sidebar .media-section.collapsed h3.media-section-h3-clickable { margin-bottom: 0; }

/* ─── Server section: status pill + action stack ─── */
.media-view .sidebar .media-section-server {
  background: linear-gradient(180deg, var(--surface) 0%, var(--surface-2) 100%);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 14px;
  margin-bottom: 14px;
  box-shadow: 0 1px 0 rgba(255,255,255,.02) inset, 0 6px 18px rgba(0,0,0,.18);
}

.media-view .sidebar .media-server-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 5px 11px 5px 9px;
  background: rgba(255,255,255,.03);
  border: 1px solid var(--border);
  border-radius: 999px;
  font-size: 11.5px;
  margin-bottom: 12px;
  max-width: 100%;
}
.media-view .sidebar .media-server-pill .media-server-status {
  margin: 0;
  font-size: 11.5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.media-view .sidebar .media-server-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--accent-warm);
  box-shadow: 0 0 0 0 rgba(245,158,11,.55);
  animation: media-pulse-warn 1.6s ease-out infinite;
  flex: 0 0 auto;
}
/* React to JS-set inline color on the status span */
.media-view .sidebar .media-server-pill:has(.media-server-status[style*="#4ade80"]) {
  background: rgba(16,185,129,.08);
  border-color: rgba(16,185,129,.32);
}
.media-view .sidebar .media-server-pill:has(.media-server-status[style*="#4ade80"]) .media-server-dot {
  background: #4ade80;
  box-shadow: 0 0 0 0 rgba(74,222,128,.55);
  animation: media-pulse-ok 1.8s ease-out infinite;
}
.media-view .sidebar .media-server-pill:has(.media-server-status[style*="#f87171"]) {
  background: rgba(239,68,68,.08);
  border-color: rgba(239,68,68,.32);
}
.media-view .sidebar .media-server-pill:has(.media-server-status[style*="#f87171"]) .media-server-dot {
  background: #f87171;
  animation: none;
  box-shadow: 0 0 6px rgba(239,68,68,.5);
}

@keyframes media-pulse-ok {
  0%   { box-shadow: 0 0 0 0 rgba(74,222,128,.55); }
  70%  { box-shadow: 0 0 0 7px rgba(74,222,128,0); }
  100% { box-shadow: 0 0 0 0 rgba(74,222,128,0); }
}
@keyframes media-pulse-warn {
  0%   { box-shadow: 0 0 0 0 rgba(245,158,11,.5); }
  70%  { box-shadow: 0 0 0 7px rgba(245,158,11,0); }
  100% { box-shadow: 0 0 0 0 rgba(245,158,11,0); }
}

/* Action stack inside the server card */
.media-view .sidebar .media-actions {
  display: grid;
  grid-template-columns: 1fr;
  gap: 7px;
}
.media-view .sidebar .media-actions .btn.small {
  width: 100%;
  justify-content: center;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 8px 12px;
  font-size: 12.5px;
  font-weight: 500;
  border-radius: 9px;
  margin: 0 !important;
}
.media-view .sidebar .media-actions .btn.small svg { flex: 0 0 auto; }
.media-view .sidebar .media-actions .btn.small.primary {
  background: var(--grad-cool);
  border-color: transparent;
  color: #fff;
  box-shadow: 0 6px 18px rgba(124,58,237,.28);
}
.media-view .sidebar .media-actions .btn.small.primary:hover {
  filter: brightness(1.08);
  transform: translateY(-1px);
}
.media-view .sidebar .media-actions .media-action-settings {
  background: transparent;
  border: 1px solid transparent;
  color: var(--text-mute);
  font-size: 12px;
  padding: 6px 10px;
}
.media-view .sidebar .media-actions .media-action-settings:hover {
  color: var(--text);
  background: var(--surface-3);
  border-color: var(--border);
}

/* ─── Chip lists tightened up for media sidebar ─── */
.media-view .sidebar .chip-list { gap: 5px; }
.media-view .sidebar .chip-list .chip {
  font-size: 11.5px;
  padding: 4px 10px;
  border-radius: 999px;
  transition: background .12s, border-color .12s, color .12s, transform .06s;
}
.media-view .sidebar .chip-list .chip:hover { transform: translateY(-1px); }
.media-view .sidebar .chip-list .chip.active {
  background: linear-gradient(135deg, rgba(124,58,237,.28), rgba(6,182,212,.18));
  border-color: rgba(167,139,250,.55);
  color: #ece4ff;
  box-shadow: 0 0 0 1px rgba(167,139,250,.18), 0 4px 14px rgba(124,58,237,.22);
}
.media-view .sidebar .chip-list .chip .count { font-variant-numeric: tabular-nums; }

.media-view .sidebar .media-add-btn {
  margin-top: 10px !important;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 11px;
  font-size: 11.5px;
  border-radius: 999px;
}

/* ─── Sort + search controls ─── */
.media-view .sidebar select {
  width: 100%;
  padding: 8px 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text);
  font: inherit;
  font-size: 12.5px;
  transition: border-color .12s, background .12s, box-shadow .12s;
  appearance: none;
  -webkit-appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, var(--text-mute) 50%),
                    linear-gradient(135deg, var(--text-mute) 50%, transparent 50%);
  background-position: calc(100% - 14px) center, calc(100% - 9px) center;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
  padding-right: 26px;
}
.media-view .sidebar select:hover {
  border-color: var(--border-strong);
  background-color: var(--surface-2);
}
.media-view .sidebar select:focus {
  outline: none;
  border-color: rgba(167,139,250,.55);
  box-shadow: 0 0 0 3px rgba(167,139,250,.14);
}

.media-view .sidebar .media-search-wrap {
  position: relative;
  display: flex;
  align-items: center;
}
.media-view .sidebar .media-search-icon {
  position: absolute;
  left: 10px;
  color: var(--text-mute);
  pointer-events: none;
}
.media-view .sidebar .media-search-wrap input[type="search"] {
  width: 100%;
  padding: 8px 10px 8px 32px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text);
  font: inherit;
  font-size: 12.5px;
  transition: border-color .12s, background .12s, box-shadow .12s;
}
.media-view .sidebar .media-search-wrap input[type="search"]::placeholder {
  color: var(--text-mute);
}
.media-view .sidebar .media-search-wrap input[type="search"]:hover {
  border-color: var(--border-strong);
  background: var(--surface-2);
}
.media-view .sidebar .media-search-wrap input[type="search"]:focus {
  outline: none;
  border-color: rgba(167,139,250,.55);
  background: var(--surface-2);
  box-shadow: 0 0 0 3px rgba(167,139,250,.14);
}
.media-view .sidebar .media-search-wrap:focus-within .media-search-icon {
  color: var(--accent);
}

/* Slim scrollbar for the media sidebar */
.media-view .sidebar.media-sidebar::-webkit-scrollbar { width: 8px; }
.media-view .sidebar.media-sidebar::-webkit-scrollbar-thumb {
  background: var(--profile-scroll-thumb);
  border-radius: 999px;
}
.media-view .sidebar.media-sidebar::-webkit-scrollbar-thumb:hover {
  background: var(--profile-scroll-hover);
}

/* ─────────────── Kind picker (Add / Rescan topbar popover) ─────────────── */
.kind-picker {
  position: fixed;
  top: 60px;
  left: 0;
  width: 260px;
  background: var(--bg-2);
  border: 1px solid var(--border-strong);
  border-radius: 12px;
  box-shadow: var(--shadow-lift);
  z-index: 60;
  padding: 10px;
  -webkit-app-region: no-drag;
}
.kind-picker.hidden { display: none; }
.kind-picker-header {
  margin: 2px 6px 8px;
  font-size: 11px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--text-mute);
}
.kind-picker-list {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.kind-picker-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 9px 10px;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 8px;
  color: var(--text);
  text-align: left;
  cursor: pointer;
  font: inherit;
  transition: background-color .12s ease, border-color .12s ease, transform .08s ease;
}
.kind-picker-item:hover,
.kind-picker-item:focus-visible {
  background: var(--surface);
  border-color: var(--border);
  outline: none;
}
.kind-picker-item:active { transform: translateY(1px); }
.kind-picker-item.is-default {
  border-color: rgba(167,139,250,.45);
  background: rgba(124,58,237,.10);
}
.kind-picker-icon {
  flex: 0 0 auto;
  width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 7px;
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--accent);
}
.kind-picker-item.is-default .kind-picker-icon {
  color: var(--accent);
  background: rgba(124,58,237,.18);
  border-color: rgba(167,139,250,.45);
}
.kind-picker-body {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 0;
}
.kind-picker-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
}
.kind-picker-hint {
  font-size: 11px;
  color: var(--text-mute);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ─── Scrape modal: per-item gallery picker ─────────────────────────── */
.scrape-modal-panel {
  max-width: 820px;
  width: min(90vw, 820px);
}
.scrape-picker {
  margin-top: 12px;
  border-top: 1px solid var(--border);
  padding-top: 10px;
}
.scrape-picker-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 8px;
  flex-wrap: wrap;
}
.scrape-picker-actions {
  display: flex;
  gap: 6px;
}
.scrape-picker-count {
  font-size: 12px;
  color: var(--text-mute);
}
.scrape-picker-count #scrape-picker-selected {
  color: var(--accent);
  font-weight: 600;
}
.scrape-picker-truncated {
  margin: 0 0 8px;
  color: var(--accent-warm);
}
.scrape-picker-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 10px;
  max-height: 56vh;
  overflow-y: auto;
  padding: 4px;
}
/* The send-to picker (.sp-*) and the candidate cards (.scrape-card*) moved to
   renderer/sendto.css in the 2026-09-28 "dispatch bench" overhaul — painted
   backdrop, brass/ember palette and the icons/sendto/ art set. */
.btn.xs {
  padding: 3px 9px;
  font-size: 11px;
  line-height: 1.4;
}


/* Scrape modal: the resolve→download status — a spinner + staged label + an
   indeterminate progress bar shown while a peek/browser-resolve is in flight
   (the ~10s the worker Firefox loads the page and sniffs the media). Replaces the
   old manual "Resolve in browser" button/hint, now that the fallback is automatic. */
.scrape-status {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
  font-size: 12px;
  color: #cfd2dc;
}
.scrape-status.hidden { display: none; }
.scrape-status .scrape-spinner {
  width: 14px;
  height: 14px;
  flex: none;
  border-radius: 50%;
  border: 2px solid rgba(167, 139, 250, .22);
  border-top-color: var(--accent, #a78bfa);
  animation: scrape-spin .7s linear infinite;
}
@keyframes scrape-spin { to { transform: rotate(360deg); } }
.scrape-status-label { transition: opacity 120ms ease; }
.scrape-status-bar {
  position: relative;
  height: 3px;
  margin-top: 6px;
  border-radius: 999px;
  background: rgba(255, 255, 255, .07);
  overflow: hidden;
}
.scrape-status-bar.hidden { display: none; }
.scrape-status-bar-fill {
  position: absolute;
  inset: 0 auto 0 0;
  height: 100%;
  width: 38%;
  border-radius: 999px;
  background: var(--grad-cool, linear-gradient(90deg, #7c3aed, #06b6d4));
  animation: scrape-indet 1.15s ease-in-out infinite;
}
@keyframes scrape-indet {
  0%   { transform: translateX(-130%); }
  100% { transform: translateX(360%); }
}
@media (prefers-reduced-motion: reduce) {
  .scrape-spinner, .scrape-status-bar-fill { animation-duration: 3s; }
}


/* ─── Rips (the media history popout) ─────────────────────────────────
   Every rip, upload and download, opened from the Rips crate on each media
   dock (media/dock.js buildRips). Dressed like the dock it comes from: a
   brass rule under the head, the painted crate as its mark. Status is a word
   in a fixed column (never a coloured dot); a failed row carries a red edge
   and its error in full, with Retry in reach. Two segmented filters, labels
   in one column. Rows: media/common.js historyRow. */
.media-history-panel {
  --rip-brass: 198, 160, 94;
  --rip-fail: 239, 91, 82;
  --rip-run: 245, 158, 11;
  --rip-done: 16, 185, 129;
  width: min(880px, 92vw);
  max-width: none;
  max-height: 86vh;
  display: flex;
  flex-direction: column;
  padding: 22px 24px 16px;
  overflow: hidden;
  background:
    radial-gradient(600px 180px at 0% 0%, rgba(var(--rip-brass), .09), transparent 70%),
    var(--bg-2);
}
.media-history-head {
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr) auto;
  align-items: center;
  gap: 14px;
  padding: 0 36px 14px 0;
  border-bottom: 1px solid rgba(var(--rip-brass), .28);
  flex: none;
}
.media-history-mark { width: 44px; height: 44px; object-fit: contain; filter: drop-shadow(0 3px 6px rgba(0, 0, 0, .55)); }
.media-history-heading { min-width: 0; }
.media-history-head h2 { margin: 0; font-size: 20px; line-height: 1.2; text-wrap: balance; }
.media-history-lede {
  margin: 3px 0 0;
  font-size: 12.5px;
  color: var(--text-dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-variant-numeric: tabular-nums;
}
.media-history-refresh { white-space: nowrap; }

.media-history-filters {
  display: grid;
  grid-template-columns: 52px minmax(0, 1fr);
  align-items: center;
  gap: 10px 12px;
  padding: 14px 0;
  flex: none;
}
.media-history-flabel {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.media-history-seg {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  border: 1px solid var(--border);
  border-radius: 9px;
  background: var(--surface);
  overflow: hidden;
}
.media-history-tab {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 34px;
  min-width: 0;
  padding: 0 10px;
  border: 0;
  background: transparent;
  color: var(--text-dim);
  font: inherit;
  font-size: 12.5px;
  white-space: nowrap;
  cursor: pointer;
  transition: background .15s ease, color .15s ease;
}
.media-history-tab + .media-history-tab { border-left: 1px solid var(--border); }
.media-history-tab:hover { color: var(--text); background: var(--surface-2); }
.media-history-tab:focus-visible { outline: 2px solid rgb(var(--rip-brass)); outline-offset: -2px; }
.media-history-tab[aria-pressed='true'] {
  color: #1c140a;
  font-weight: 600;
  background: linear-gradient(180deg, rgb(var(--rip-brass)), rgba(var(--rip-brass), .78));
}
.media-history-n {
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  opacity: .75;
}
.media-history-n:empty { display: none; }
.media-history-tab.is-failed:not([aria-pressed='true']) .media-history-n:not(:empty) {
  opacity: 1;
  color: rgb(var(--rip-fail));
  font-weight: 700;
}
.media-history-tab.is-failed[aria-pressed='true'] {
  color: #fff6f4;
  background: linear-gradient(180deg, rgb(var(--rip-fail)), rgba(var(--rip-fail), .72));
}

.media-history-list {
  flex: 1 1 auto;
  overflow-y: auto;
  overscroll-behavior: contain;
  min-height: 280px;
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
}
.media-history-row {
  display: grid;
  grid-template-columns: 76px minmax(0, 1fr) auto;
  gap: 14px;
  align-items: start;
  padding: 12px 8px 12px 12px;
  border-bottom: 1px solid var(--border);
  box-shadow: inset 3px 0 0 transparent;
  font-size: 12.5px;
  animation: ripRowIn .28s cubic-bezier(.2, .8, .2, 1) backwards;
}
.media-history-row:nth-child(2) { animation-delay: .02s; }
.media-history-row:nth-child(3) { animation-delay: .04s; }
.media-history-row:nth-child(4) { animation-delay: .06s; }
.media-history-row:nth-child(n+5) { animation-delay: .08s; }
@keyframes ripRowIn { from { opacity: 0; transform: translateX(-6px); } }
.media-history-row:last-child { border-bottom: none; }
.media-history-row:hover { background: rgba(255, 255, 255, .025); }
.media-history-row.is-failed { box-shadow: inset 3px 0 0 rgb(var(--rip-fail)); background: rgba(var(--rip-fail), .045); }
.media-history-row.is-in_progress { box-shadow: inset 3px 0 0 rgb(var(--rip-run)); }
.media-history-status {
  justify-self: start;
  margin-top: 1px;
  padding: 2px 8px;
  border-radius: 6px;
  border: 1px solid var(--border);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .02em;
  white-space: nowrap;
  color: var(--text-dim);
}
.is-success > .media-history-status { color: rgb(var(--rip-done)); border-color: rgba(var(--rip-done), .4); }
.is-failed > .media-history-status { color: rgb(var(--rip-fail)); border-color: rgba(var(--rip-fail), .5); background: rgba(var(--rip-fail), .1); }
.is-in_progress > .media-history-status { color: rgb(var(--rip-run)); border-color: rgba(var(--rip-run), .45); }
.media-history-body { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.media-history-title {
  color: var(--text);
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.media-history-sub {
  font-size: 11.5px;
  color: var(--text-mute);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.media-history-error {
  margin-top: 2px;
  font-size: 12px;
  line-height: 1.45;
  color: #f4a19b;
  max-width: 72ch;
  text-wrap: pretty;
  overflow-wrap: anywhere;
}
.media-history-warning {
  font-size: 12px;
  color: var(--text);
  overflow-wrap: anywhere;
}
.media-history-meta {
  font-size: 11px;
  color: var(--text-mute);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-variant-numeric: tabular-nums;
}
.media-history-actions {
  display: flex;
  gap: 6px;
  flex: none;
  align-self: center;
}
.media-history-actions .btn { min-height: 30px; padding: 4px 11px; font-size: 12px; white-space: nowrap; }
.media-history-actions .icon-only { padding: 4px 9px; }
.media-history-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding-top: 12px;
  flex: none;
}
.media-history-note { margin: 0; min-width: 0; font-size: 12px; color: var(--text-mute); text-wrap: pretty; }
.media-history-empty {
  margin: 0;
  padding: 48px 24px;
  text-align: center;
  color: var(--text-dim);
  text-wrap: balance;
}
@media (max-width: 640px) {
  .media-history-panel { padding: 18px 16px 14px; }
  .media-history-head { grid-template-columns: 36px minmax(0, 1fr) auto; gap: 10px; }
  .media-history-mark { width: 36px; height: 36px; }
  .media-history-lede { white-space: normal; text-wrap: balance; }
  .media-history-filters { grid-template-columns: minmax(0, 1fr); gap: 6px; }
  .media-history-flabel { margin-top: 4px; }
  .media-history-seg.is-kind { grid-auto-flow: row; grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .media-history-seg.is-kind .media-history-tab:nth-child(4) { border-left: 0; }
  .media-history-seg.is-kind .media-history-tab:nth-child(n+4) { border-top: 1px solid var(--border); }
  .media-history-seg.is-status .media-history-tab { padding: 0 6px; }
  .media-history-row { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .media-history-status { grid-row: 1; }
  .media-history-actions { justify-content: flex-start; flex-wrap: wrap; }
  .media-history-note { display: none; }
}
.media-history-list.is-quiet .media-history-row { animation: none; }
@media (prefers-reduced-motion: reduce) {
  .media-history-row { animation: none; }
}

/* ─────── Server-game sync (F:\Patreon mirror) ─────── */

/* Server-only tile: dimmed so installed games visually dominate. The cover
   still shows so the user can still recognize the game, just muted. */
.tile.server-only {
  border-color: rgba(120, 130, 160, 0.35);
  background: rgba(20, 22, 32, 0.7);
}
.tile.server-only .tile-cover img,
.tile.server-only .tile-cover .tile-placeholder {
  filter: grayscale(0.4) brightness(0.55);
}
.tile.server-only:hover .tile-cover img,
.tile.server-only:hover .tile-cover .tile-placeholder {
  filter: grayscale(0.15) brightness(0.85);
}
.tile.server-only .tile-title {
  color: var(--text-mute);
}
.tile.server-only:hover .tile-title {
  color: var(--text);
}

/* Server-only badge: stays at top-right, with the "Server" label, so a greyed
   tile reads as "you don't have this — pull from server" at a glance. */
.server-only-badge {
  position: absolute;
  top: 8px;
  right: 8px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 6px 3px 5px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.3px;
  border-radius: 4px;
  z-index: 3;
  pointer-events: auto;
  background: rgba(96, 117, 196, 0.85);
  color: #fff;
}

/* Server-synced badge: subtle icon-only chip in the bottom-left corner of an
   installed game's tile, indicating "this is backed up on the server". Sits
   below the tile-bl content band (which starts 12px in from the edges) so it
   doesn't collide with the rating strip / title. Hidden on hover so the
   tile's active state has clean focus. */
.server-synced-badge {
  position: absolute;
  bottom: 6px;
  left: 6px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  padding: 0;
  border-radius: 50%;
  background: rgba(40, 70, 40, 0.92);
  color: #b8f0b8;
  border: 1px solid rgba(184, 240, 184, 0.25);
  z-index: 4;
  pointer-events: auto;
  transition: opacity .15s;
  /* Hide the title-attr text content (we want icon-only) */
  font-size: 0;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35);
}
.server-synced-badge > svg { display: block; }
.tile:hover .server-synced-badge { opacity: 0; pointer-events: none; }

.quick-download {
  position: absolute;
  right: 8px;
  bottom: 8px;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  border: none;
  background: rgba(96, 117, 196, 0.95);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.4);
  z-index: 4;
  transition: transform .15s, background .15s;
}
.quick-download:hover {
  background: rgba(116, 137, 216, 1);
  transform: scale(1.07);
}

/* In-progress upload/download overlay painted on top of the tile. */
.sync-overlay {
  position: absolute;
  inset: 0;
  background: rgba(8, 10, 16, 0.78);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 5;
  pointer-events: none;
  backdrop-filter: blur(2px);
}
.sync-overlay-inner {
  text-align: center;
  padding: 12px 14px;
  max-width: 90%;
}
.sync-overlay-title {
  font-size: 13px;
  font-weight: 600;
  color: #fff;
  margin-bottom: 4px;
}
.sync-overlay-sub {
  font-size: 11px;
  color: rgba(220, 225, 240, 0.85);
  line-height: 1.4;
}
.sync-overlay-bar {
  margin-top: 8px;
  height: 4px;
  background: rgba(255, 255, 255, 0.1);
  border-radius: 2px;
  overflow: hidden;
}
.sync-overlay-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--accent), #a78bfa);
  width: 0%;
  transition: width 200ms linear;
}

/* ─────── Themed confirm dialog (drop-in replacement for window.confirm) ─────── */

.confirm-panel { max-width: 460px; padding: 22px 24px 20px; }
.confirm-header {
  display: flex; align-items: flex-start; gap: 14px; margin-bottom: 16px;
}
.confirm-icon {
  width: 40px; height: 40px;
  border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, rgba(167, 139, 250, 0.16), rgba(96, 117, 196, 0.16));
  border: 1px solid rgba(167, 139, 250, 0.28);
  color: var(--accent);
  flex: 0 0 auto;
}
.confirm-icon.danger {
  background: linear-gradient(135deg, rgba(224, 112, 112, 0.18), rgba(200, 80, 80, 0.14));
  border-color: rgba(224, 112, 112, 0.4);
  color: #ff8080;
}
.confirm-icon.warn {
  background: linear-gradient(135deg, rgba(240, 160, 80, 0.18), rgba(200, 130, 50, 0.14));
  border-color: rgba(240, 160, 80, 0.4);
  color: #f0a050;
}
.confirm-titles { flex: 1; min-width: 0; }
.confirm-titles h2 { margin: 0 0 4px; font-size: 17px; line-height: 1.25; }
.confirm-titles .muted { margin: 0; font-size: 13px; color: var(--text-dim); line-height: 1.45; white-space: pre-wrap; }
.confirm-detail {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px 12px;
  margin-bottom: 16px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 11.5px;
  color: var(--text-dim);
  word-break: break-all;
}
.confirm-actions { display: flex; justify-content: flex-end; gap: 10px; }

/* ─────── Game-sync modal (themed download/upload popup) ─────── */

.gamesync-panel {
  max-width: 520px;
  padding: 24px 26px 22px;
}
.gamesync-header {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 18px;
}
.gamesync-icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, rgba(167, 139, 250, 0.18), rgba(96, 117, 196, 0.18));
  border: 1px solid rgba(167, 139, 250, 0.3);
  color: var(--accent);
  flex: 0 0 auto;
}
.gamesync-icon.uploading {
  background: linear-gradient(135deg, rgba(96, 117, 196, 0.2), rgba(110, 90, 200, 0.18));
}
.gamesync-titles { flex: 1; min-width: 0; }
.gamesync-titles h2 { margin: 0 0 2px; font-size: 18px; line-height: 1.2; }
.gamesync-game {
  margin: 0; font-size: 13px; color: var(--text); font-weight: 500;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

.gamesync-meta {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px 14px;
  margin-bottom: 18px;
}
.gamesync-meta-row {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: 12px; padding: 5px 0; font-size: 12.5px;
}
.gamesync-meta-row + .gamesync-meta-row { border-top: 1px solid rgba(255, 255, 255, 0.04); }
.gamesync-meta-label {
  color: var(--text-mute); font-size: 11px;
  text-transform: uppercase; letter-spacing: 0.6px; flex: 0 0 auto;
}
.gamesync-meta-value { color: var(--text); text-align: right; word-break: break-word; min-width: 0; }
.gamesync-meta-value.gamesync-path {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 11.5px; color: var(--text-dim);
}

.gamesync-progress { margin-bottom: 18px; }
.gamesync-phase {
  font-size: 12.5px; color: var(--text); margin-bottom: 8px;
  display: flex; align-items: center; gap: 6px;
}
.gamesync-phase::before {
  content: ''; width: 7px; height: 7px; border-radius: 50%;
  background: var(--accent); box-shadow: 0 0 8px var(--accent);
  animation: gamesync-pulse 1.4s ease-in-out infinite;
}
@keyframes gamesync-pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: 0.5; transform: scale(0.7); }
}
.gamesync-bar {
  height: 8px; background: var(--surface);
  border-radius: 4px; overflow: hidden; border: 1px solid var(--border);
}
.gamesync-bar-fill {
  height: 100%; width: 0%;
  background: linear-gradient(90deg, var(--accent), #a78bfa);
  transition: width 200ms linear;
  box-shadow: 0 0 12px rgba(167, 139, 250, 0.4);
}
.gamesync-stats {
  display: flex; align-items: center; gap: 8px;
  font-size: 11.5px; color: var(--text-dim);
  margin-top: 6px; font-variant-numeric: tabular-nums;
}
.gamesync-stats-sep { color: var(--text-mute); opacity: 0.5; }
.gamesync-current {
  font-size: 11px; color: var(--text-mute); margin-top: 6px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

.gamesync-actions { display: flex; justify-content: flex-end; gap: 10px; }

/* ─────── Sidebar "Sync from server" pill ─────── */

.server-sync-pill {
  margin-top: 10px;
  padding: 12px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  text-align: center;
}
.server-sync-pill .btn { width: 100%; justify-content: center; }
.server-sync-status {
  font-size: 11px; color: var(--text-dim);
  line-height: 1.4; margin: 0;
  display: inline-flex; align-items: center; gap: 6px;
}
.server-sync-status .dot {
  display: inline-block; width: 6px; height: 6px;
  border-radius: 50%; background: var(--text-mute);
}
.server-sync-status.ok .dot   { background: #6dd47a; box-shadow: 0 0 6px rgba(109, 212, 122, 0.5); }
.server-sync-status.warn .dot { background: #f0a050; }
.server-sync-status.err .dot  { background: #e07070; }
.server-sync-status.syncing .dot {
  background: var(--accent);
  animation: gamesync-pulse 1.4s ease-in-out infinite;
}

/* ─────────────── Torrents tab ─────────────── */
/* Moved to renderer/torrents.css (2026-09-28 overhaul). */

/* ── itch.io one-click game download ──────────────────────────────────── */
/* Status toast — anchored to the TOP band. The in-app browser is a native
   WebContentsView overlay that paints above all DOM in the page area, so a
   bottom/centre toast would be hidden behind it. The top strip (tab bar /
   address bar) is the one region the overlay never covers. */
.itch-dl-toast {
  position: fixed; left: 50%; top: 6px; z-index: 2147483647;
  max-width: 460px; padding: 7px 14px;
  background: var(--surface-2, #1a1d24); color: var(--text, #e8e8f0);
  border: 1px solid var(--border-strong, #3a4159); border-left: 3px solid var(--accent, #a78bfa);
  border-radius: 8px; font-size: 12.5px; line-height: 1.35;
  box-shadow: 0 10px 30px rgba(0,0,0,.6);
  opacity: 0; transform: translateX(-50%) translateY(8px); transition: opacity .2s, transform .2s;
  pointer-events: none;
}
.itch-dl-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.itch-dl-toast.ok { border-left-color: #34d399; }
.itch-dl-toast.error { border-left-color: #f87171; }

/* Host-picker modal (only when the default host isn't on the page). */
.itch-provider-overlay {
  position: fixed; inset: 0; z-index: 100000;
  background: rgba(0,0,0,.55); display: flex; align-items: center; justify-content: center;
}
.itch-provider-box {
  background: var(--surface-2, #1a1d24); border: 1px solid var(--border-strong, #3a4159);
  border-radius: 12px; padding: 18px; min-width: 280px;
  display: flex; flex-direction: column; gap: 8px; box-shadow: 0 16px 48px rgba(0,0,0,.5);
}
.itch-provider-title { font-size: 13px; color: var(--text-dim, #aab); margin-bottom: 6px; text-align: center; }
.itch-provider-btn {
  padding: 10px 14px; border-radius: 8px; cursor: pointer; font-size: 14px;
  background: rgba(167,139,250,.12); color: var(--text, #e8e8f0);
  border: 1px solid rgba(167,139,250,.4);
}
.itch-provider-btn:hover { background: rgba(167,139,250,.24); border-color: var(--accent, #a78bfa); }
.itch-provider-cancel {
  padding: 8px 14px; border-radius: 8px; cursor: pointer; font-size: 12.5px; margin-top: 4px;
  background: transparent; color: var(--text-dim, #99a); border: 1px solid var(--border, #262b3c);
}
.itch-provider-cancel:hover { color: var(--text, #e8e8f0); }

/* ── "Send to Web Games" found nothing ─────────────────────────────────────
   Same chrome as the host picker above (surface-2 card, violet accent), on
   purpose: this is the same family of browser-tab overlay and it must not
   introduce a second look. It carries .wcv-suppress, which is what makes the
   native browser view yield — without that marker the box paints BEHIND the
   page and the warning is invisible, which is the exact failure this popup
   exists to prevent. Purely informational (nothing awaits it), so unlike the
   pickers it needs no lock-cancelable registration. */
.webgame-warn-overlay {
  position: fixed; inset: 0; z-index: 100000;
  background: rgba(0,0,0,.6); display: flex; align-items: center; justify-content: center;
  padding: 20px; animation: webgame-warn-in .14s ease-out;
}
.webgame-warn-box {
  background: var(--surface-2, #1a1d24); border: 1px solid var(--border-strong, #3a4159);
  border-left: 3px solid #f0b34a;                  /* warning, not error: nothing broke */
  border-radius: 12px; padding: 18px 20px 16px;
  width: min(430px, 100%); max-height: 84vh; overflow-y: auto;
  box-shadow: 0 16px 48px rgba(0,0,0,.5);
}
.webgame-warn-title {
  margin: 0; font-size: 15.5px; font-weight: 600; color: var(--text, #e8e8f0); line-height: 1.3;
}
.webgame-warn-sub {
  margin: 3px 0 0; font-size: 12px; color: var(--text-dim, #99a);
  overflow-wrap: anywhere;
}
.webgame-warn-lead { margin: 13px 0 5px; font-size: 12.5px; color: var(--text-dim, #aab); }
.webgame-warn-list {
  margin: 0; padding-left: 0; list-style: none;
  display: flex; flex-direction: column; gap: 5px;
  font-size: 12.5px; color: var(--text, #e8e8f0); line-height: 1.45;
}
.webgame-warn-list li { display: flex; gap: 8px; }
/* An en-dash rule rather than a disc: dot bullets are house-banned, and the
   dash also keeps a wrapped second line aligned under the first (flex, not a
   text-indent), which a marker cannot do. */
.webgame-warn-list li::before {
  content: '–'; color: var(--accent, #a78bfa); flex: 0 0 auto;
}
.webgame-warn-hint {
  margin: 13px 0 0; padding-top: 11px; border-top: 1px solid var(--border, #262b3c);
  font-size: 12px; color: var(--text-dim, #99a); line-height: 1.5;
}
.webgame-warn-close {
  margin-top: 14px; width: 100%; min-height: 44px;   /* a real touch target on a phone */
  padding: 10px 14px; border-radius: 8px; cursor: pointer; font-size: 14px;
  background: rgba(167,139,250,.12); color: var(--text, #e8e8f0);
  border: 1px solid rgba(167,139,250,.4);
}
.webgame-warn-close:hover { background: rgba(167,139,250,.24); border-color: var(--accent, #a78bfa); }
.webgame-warn-close:focus-visible { outline: 2px solid var(--accent, #a78bfa); outline-offset: 2px; }
@keyframes webgame-warn-in { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .webgame-warn-overlay { animation: none; }
}

/* ── Spam overlay config (game detail view) ──────────────────────────── */
.spam-section { margin: 14px 22px 0; }
.spam-toggle {
  display: flex; align-items: center; gap: 9px; cursor: pointer;
  padding: 9px 12px; border: 1px solid var(--border, #262b3c); border-radius: 9px;
  background: rgba(255,255,255,.02);
}
.spam-toggle:hover { border-color: var(--border-strong, #3a4159); }
.spam-toggle input { accent-color: var(--accent, #a78bfa); width: 15px; height: 15px; cursor: pointer; }
.spam-toggle-icon { font-size: 14px; }
.spam-toggle-label { font-weight: 600; color: var(--text, #e8e8f0); font-size: 13px; }
.spam-toggle-hint { color: var(--text-dim, #9aa0b4); font-size: 11px; margin-left: auto; }
.spam-config {
  margin-top: 9px; padding: 12px; border: 1px solid var(--border, #262b3c);
  border-radius: 9px; background: rgba(0,0,0,.18); display: flex; flex-direction: column; gap: 11px;
}
.spam-config.hidden { display: none; }
.spam-field { flex: 1; }
.spam-field-row { display: flex; gap: 14px; }
.spam-field label { display: block; color: var(--text-dim, #9aa0b4); font-size: 11px; margin-bottom: 5px; }
.spam-field label b { color: var(--accent, #a78bfa); }
.spam-syntax { opacity: .7; }
.spam-syntax code { background: rgba(167,139,250,.12); padding: 0 4px; border-radius: 3px; color: #c4b5fd; }
.spam-config input[type=text] {
  width: 100%; background: var(--surface, #16181f); border: 1px solid var(--border, #262b3c);
  border-radius: 6px; color: var(--text, #e8e8f0); font-size: 13px; padding: 7px 9px; outline: none;
}
.spam-config input[type=text]:focus { border-color: var(--accent, #a78bfa); }
.spam-config input[type=range] { width: 100%; accent-color: var(--accent, #a78bfa); }

/* ── Tile frames: favorite · just added · recently played ───────────────
   Three states worth spotting from across a grid, each with its own rim
   colour and a painted plaque icon in the corner of the frame. Games
   (.tile) and media (.media-tile) share the whole treatment: to the eye
   they are the same object, so a second visual language for the same three
   states would read as a bug, not a style.

   A tile wears at most ONE frame — priority favorite > just added >
   recently played, decided in JS — because a grid where every tile is
   outlined in a different colour says nothing at all. The windows are kept
   short for the same reason (7 days added, 3 days played): a frame that
   everything qualifies for is decoration.

   Colours are the ones the app already speaks: gold is favorite (it was the
   pinned-game rim before this), violet is the accent used for new arrivals,
   cyan the second accent. Each icon is cut from a gem of its own colour, so
   the plaque and its frame read as one object.

   It is a REAL frame, not an overlay: the tile's own box becomes the frame and
   the artwork is inset inside it, so nothing the frame draws ever covers the
   art. The top edge widens into a rail that carries the icon and the state's
   name — that is the whole reason the frame exists, and hiding it under a
   hover was making the colour a riddle. The tile's outer size is untouched, so
   framed and unframed tiles stay the same shape in the grid. */
/* Each kind is a real painted picture frame (forge-generated, magenta-keyed to a
   transparent opening, icons/tile/frame-*.webp): baroque gold for a favorite,
   violet art-deco for just added, silver-and-teal waves for watched, a rose-gold
   braid for a bundle. --frame-slice is where each image's opening begins (its
   band width in the 400px art), measured from the centre outward. */
.tile[data-frame="fav"],    .media-tile[data-frame="fav"]    { --frame-ink: #f5c542; --frame-soft: rgba(245,197,66,.34); --frame-wash: rgba(245,197,66,.50); --frame-art: url('data:image/webp;base64,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'); --frame-slice: 70; }
.tile[data-frame="new"],    .media-tile[data-frame="new"]    { --frame-ink: #a78bfa; --frame-soft: rgba(167,139,250,.36); --frame-wash: rgba(167,139,250,.52); --frame-art: url('data:image/webp;base64,UklGRp5TAABXRUJQVlA4WAoAAAAQAAAAjwEAjwEAQUxQSBkMAAABGUVtG0lqvwl/xrMngYj+TwBkkTXBgRQY+p9rXXMtcUM8Ztq2ScqfdbddAxARE4BnuNlRQcz60pmzeLZa29azbcufc5I5+OhQKBSWSrJmoJDUQws0gQafs8rrD/chbnWpuxjSdsc8Dfz+K+BRxx1SGRRwE64G3iIo4SLcBXxlvCpiAiYAa23bzjbpQb8JwMhSibucXAbCSkIRCCkHzy30ot57+L1Vbd6S+im20EFPAD9XAu02O6QdFVcAL9psk48rAQXwkJNAZ1EJXHKDKRQRE2CkbeSkf+nPCmfqjH1ETMA9pQc85V7fd5/7PWg+6q7Oh+zap7/L/p7h79C0BzVWz7/PeKVh42l/e6+vK6OwJVnC7mwKTw+VSWUiPJEb0RpXsPYqx/aMKji992SWaLcTRcmI3lFMPnO3lYTpGikqOdM1HYiHdspi8i2sKO7n9Irj9vwL+g9NSl5iTXf3hl7xdGXq+ox/s7vgspByRfTVEiBpGtfa6mWAJtHEaVI4TVyE6ToToo7aaQWBaDA7l9LqlkdG1MXVneufej3quj7850f1evNA0WM+5sNeUl0uT7tmyVNWdztlSwAStAxJGCQ0HMHpK/20qlP1F7//y78qfdZHCZsX5SDRjdwQiHdz/fTvPukjRpck/9QJ9KIDNy8VWJ/9zM8/45xthaBh5yf2s+4qEvXd79+doYB8EwzWjAbfnLEAjzvlSJBu1KEAu1qRmFwUjQ6HGQzJTTDYDgVhdyi8jpRmMMxnN8HQrWjsMxjSGQwwwmEPhmQGA5w/56DXDjiDwRMO+WswZGYwUA6GOBr2rmBAGQyJg8GewRDCMQ4GTzS8fpSvwRBmMDjRECoYkIPBW9E4FQyOglFUMKAzGrgbDLaDgRzBoMlooIPBcTC06m0g70nes+hW9IKgvMJEnuhe9N7pVSB4jd+TD9zpuTfEA5IUVItCFZpECcpafvSuoM4uLdKuSuKrVcyHZUcibZNGlJQqTKQO4ApXdkeXhE5d3pk8zmx1YydZbTzLE6IWa0+LqMl+Ek+spa21dur5tEf2pbMzs7YTP/RcrViOLCLUWO0I3IokcEBBYxSwkETLM4x4BUqCt3/7F/48AQhAAMLTIOxUptt0T1SoSYfQUcsrElFoCT1J+E/RFlJrOqOWE5UmbZAQNxVM3gVBtG/oRnlVndOXi/cP+TTDwoCFX+QlA4TbARoId6ugJxGgoOhJEAGUF/yq/VkAEVBQeIV/xhd8QBbKJCtz/cm4XvCy4c7DK1vhpl4Belfc5/oitdDpYsGHzaE48o7o07TKsSB9BQ7TFuRY+AaaJmkJh6I1aEj05mjkdeFyNCwcsNAcTpMF5GgYvJPWHI0HTRJOR8Oi4UU7Hs0Sdm5LrWZBatIecyxISfO509Y+mHQK56Nhp+GkfXgeDVdYOBctOhoSBhG9OJr2ZIU3kGOhYeEsFnyIDoYDBmpacTQu3IjuPhqMw7TjsXnXreng5dY0ZJq3pkN0TVoOh+Y1rQ4H44Jbh8PCadG6cTCMpCmNLXpEbw4DN5N2PBYuN7SLA1+T1hyGDNtNS6PQum01i4PmnsLb4TVpncZuWooWDpk0nTRxGHqnvxoG45y0pDGTNjhxOHDS5mzaJK094D87acfjGDS8NbXok6xQHLJxZh2RC2fRxaFNo2nNwY0rWjjINM/NqWn3XxxSdDVNHJo3tiY3jaaFw77T2rTjcQ1W2LjiYNGDOx6PRaNp4VDFEhG9OWSywv2LQxULdtOag5olLHpx+M1vWGFMC4aWmgUR/cIg2SzBpDUGaxYruGnTKEhzZ4mI7h6DzQobl4ahigVqGj0GfptWDUM37Sxa0jiStpNGj8GiB3elsXEWfTgUr2jVMPCdLKEeQw9amwWVxtE0mnZAJk2mDYfE0awQDsIZBvYwaa2t2abJtHDQoKV5w5AHTUmjx9CDFtGVxjppbt4wtOiaNKexl5p1NW0wtLoFT9KCQToGbUw7HkfTrK05B61qa6qTpkUTB5k22pyLpqKFg01r0ZtDLloG7YCctHPRxkPSZNrxmIvWOHkQvURvDi7aWTRxUNOyaM2hEzdo4TCuNJpmDnPSatLCQabF4TA2p6ZV0YrDSFqftHDoQdOV1hzW32hOWnFo0cc0eUhaNic1jZP28GDaSpY4HrtpvVhHZE0aRTMHFy07bXGoHVe047Emrc0Kw+mzYoE5vA0Omjh009bamjxpFt0eTMtOGw9Fm6SZU0S/OHTTaNpnHMaV9sCFQw+aFu3i4EnzpB2PNq1NEwfhBtcemrZ7a1q/ofXYmvg27eRQhStaOPikpWnNQQOnrblN66K1B9ELdzzaNE2aOeSibdzxWCftOmibg4om08Khdhq4BwflO90BWSzBYon20KyAWbA84GvSzKF2WgZNHLpp26wQDp40igXyILxp24NxSWsOfJsl4sG0LXYYDsbFLJAH4XtrehtMWjg0TtqcBi1N2x6EEz0cXDSbdjxa9CRtOPAbJw7ZNE3a4vS2acNBSbNp24NpSVpzuranprlo4tA80ZuDknYlbXHIRVu443GetPsXhxZ+0oqDcYVbHM4LzU3bHKpoOVjiQw6dtJ4sWBzoogYrmINhoMUSzUFmBRULxKGmTIKYFg5Ot1ESfYsQWVSxgjm0WECzRHOwZNjJgvJgwWuxwsmhmoZZIhxk2hZdHNw0khXMKWZxQLQM06CJgyx4nTRz6C5Y5tbkEv1KawzuEn1EDwbJpgl3PE7R+6QNB76LdjymCkZvTSV2sOjmYBick9ac2jRz8qKNp0ETh5ZhEX04vA0OWjwlTRxm4+bWZFzj4kH4Rdscqmkteji0DKNpB/ROaw7nSXPTFgeblqKZA3/11pTNErVo5SFZENOOx2nc3JpcNJ+05cE0Jc2croMmDt20En04WHSZJg+mUbTjkaekbQ7TMmzRHhxaatY6aOZg0au3pm6acmsaSWvxHkM3jUmbNGbSZFpzOIvWBy0Ng0VP8zQWrv5KU4/hNO0y7XhM0X3SxkPTwIXDXydNpg0HN+0aNHFoscWHuOPxLBZgmjBYFlvUhXY80iCi63AY0D2FSZoPB5G7gnPQjseTey/RfTgM0X110Y7HfXf3n8Ph3kWZdh5M0GKLfTic97dYkMPB99bVapYPB91XoCWzvj4cXoFD8CEHw3lvXYtmjsZ9b6jUrP+xRD4ICKJbQXciQH1fwrMEf26e6lZARDeC3pnIy+hJ9L5SbuVdUG5FEL0gegkR5YaAKOgFeUF4BQaK791XSN+yzI9/9WePN0VuAYHcgLyz/+IqCAggYaVbBIESbMndQsGTmEhusJSY0Zz+7Pyx76B7gnokS/zob/3dh//3v7nWxpj4ITe6zkirr8gW15yphLQk7TadulBL3bK1kLqHB5vqU72MO662aavcpUJSsD9Tuz3VSm91a+kMFpqFREuNs1MRLlLLkxHtFOFsWB/GA9oTE217LykyKZ/KZ1msTbUdaemzvfdUjyaZ3ZnCoxZR4iiEpAHfFz1kEuT7P8QHf/OSQdx3SDVLCZAPGroVEfQk6D25qRvm3qWL6DLHsnbc0ZylYOwawUAuwZDVwfAa0iMYwjUYyAqG9TaDgRxyMFzUoRBasWhlMHSvYAiSQ4GkOhRSQ7GYpBwK1FSHQiUVi8kKBnTIsZBdwVgZDWl1KOhsBaOGHApVqVhMORhIBoNVwZBkMDQdDCQersEgdzCkogEqGCJHw/pNKERJy4EAohWLyW/kWGDp5xubEQzhDAaRwRBGMMBoh0Jzm7MdCbodCsW35zVj4cPXDst3jlDIW33Zkd7WAnp3AvT+S77k/69ppfoHeeuSgH5nQgJ2/wp3PuVz/n2WNvS69uZdvdbbD//gl5A+74Pe8qq/v3+/82bNSt3+5vqb4zqq6jLfn/MyUegIiW3NlHZDzXONstt6iNWJs1PIz+JDRev56oQZMTuTi2+wplproLFxP86u51aqtnU1p9q2GLUyndbTk44deXnTpn329XUx13LUhbOgK/WwVEnvzhjDqB9jpQqueV7ocqr5bKVb3aqGq91rdkqyWhlKXgpnNfk67WxWJVW6qOUpWJCWl6JEGGvJKdtUnLjsWJHbGhfd4ap68w8fep8KztkgFMVrva03//3/n0EAAFZQOCBeRwAAkOIAnQEqkAGQAT4xFolDoiEhEdq2XCADBLK0FOWrX73iB/SdsH9deH/s8vjqvdpXqH/g9BDxv/0tfJ6mfgnmAf431k/9Xqf/9PRZ//7IA3viCBLIjbYwBbFKGDMUcAfq50O/UQ/fUB+Kvfp1D8V/A/kz/YPfq6vx/V1Z1B/c8qnl3/VfcH9Ff+Z/rfx5+bP+X9QL9Xf8B+Y/+A7sHmE/kH9S/yX+X94b/lf9n/be8X+s/6//l/tH8gf8j/tXrjerx/gf+f7Cv8n/pXrN/9z/rf5z4cv69/tP/B/xPgX/mv9d/4X58fIB6AHoAfv/73/pf93/tH44e5n6T9sPC/y6+mvor/P/3H/zf6L7tf07/R8cnXf+w/MD1dfdr8F/cv2y/wn7gfhD+//035g+sv8H+7/5j+sfuV/kPkL/JP5f/if7x+039y86rwTrg+gR7c/SP8X/dP2y/wPwzfrf7b0S+u//D/Mf6Af5t/Rv8l+X3+Z///0n46H2n/o+wL/O/6x/sP71+9X+c+oD+Z/7P+S/137ce875+/6P+O+Av+Y/1D/Y/3394f8/////d90X/19vH7P///3T/1x/9ISbxvPaetFFLJp2IhkzAIOoR8guuijEScSpH05dE1nLusTWRKHubHXrjXNp4e8KjH3xxz+6P1SpUqVDCBqG6VKk9BvOmkLjqC9D04kH/6ccjnoDL9WM80bQ6ui4S3v0Pnc9lfJLLDH9N7nf3KWBYggfd79RZSiPaDsPJdrYk59abDxZqKmsFX2bCrFo/yTW4kjg2+FYlTkdVv+TVOSeh90Fr0D3Y/CMVu5qP/JTWe+AEOysd3hLJdxWHTbmafzEQAyt9IE3e3zGSKL/OufuI1mUO4xeklsUtsIHXO7vHKOsHWssE1XL16woLB6b+xpQ5E5mo1XjJ9ORgmdCvmzky/w1XZndXJDTDibRK6+/8NKTRLW65wjiJoS93dKS1g/PbyEjpPkGB/ovu5agpHHItE/dy0/9D5Fr6xjXb430QjEiPRMX7drpvHt0SDuznI1FtaUVHuF69/XZlKC9m6nn6cg/pkrHjpPBAvPuebgH3RKvJBuQQkb/Cl4vt3Avmt1PRpALhE4hy9+OU+teWfrhOfzBwRwPyFHZ36m1JlZ33Lc8iLREvfHVV3f49n2ptLZymK3sLjpgUGXf72S4SF47lQacOIuy1yytLYL6mEoomvHU6ctfOyUv33rNa2w4Lp4iTmo9syYoGLxErcckAWlxiSCrn/GJyglglthWLcArj2HBlovBjNMTfM1w4I+Hm/Lt0WJhF2/ZZ1iYRdMUcecuH0D5oc8olc4uwYfAytZ4v3kdT+mGzXFpNPx/ss6xMIu37LOrA0dIGXy7S45tP9RCgsbvXEOeT2qJKk7FgdBtk74rhiaLJjgBaYmiyUujyWSDof3ttBjoVNJVZhWuN3rXocXdnVQmwoQG+aJdb9lnWJhF2/ZZ1iKqjPgnJDIAQXQ0AQP7nA/iWhC1kE2zlrj74vJzTE0WTHAC0xNFdVPcHWsbYEY8xsNq8icRIHVi981Ad459D8nDHAC0xNFkxvncMJwxMqA5WJEkAimD9Q5/yQ0TwBaYmiyY4AWmJMrGvAMIb6+/At30Mz1USkxUCe2cy4CaYmiyY4AWmJo99RgRh9FutmSBWLvdNS8q+ofO+0xNFkxwAtMTRWQtJemorAj1YDa/L5XlWQOf8aCoj8wY4AWmJosmOAC6WonlagTvVDKy6YtbYAtMTRZMcALTEkeOBHohxzyZgk8TwJcCcneqUlCk8fss6xMIu3hl+ajy0nkZAhaB4c5POUxlxCzx+YMcALTE0WTHABMQFaOUuNMyM4raQ3qoLQff+M5osVroJnVWse7my5piaLJjgBaYmiu0bBjRy9R+ZQ8p+ULIzklvy3psxTiBAmA7lS39kzdcZghB2hBqP/828bZy4GUu5UHdGYnkTuo4vRc9Rk7H4HbYE2dkPry7a/wQ8WP1Ti8yQM6DmZx2TTjw4e84borkI1kXirWMEe941XGepCxhViZs586cYsMGIf+ekXTDoRYAmbvwQKrI34E2jZs2cLEpA7gv3cH/6IN0XXmCj6hbOwsxKYq68OxzdmFkhsbpppZUd834uT/FOZblytBKhmKVAKQplAVsYVTdOFwwJ3YuY6nlRA//+AnlmQ/031SMKtdNY1OEhDhrsLabIvSB0lsqP44FeYESIyxeOIzTlrsXrsVoO52T9QAnQFbqEov+I29MyjL/E1P5AU0tu445akED499O8pv9o9wuH/rNvf+pVgaZYOdZjQ+tpJ2bNmzZs3FLVq1aYzYKU0FJcARYPNjDV9f7MD9BK63LLyiH5I+yAuYA5cuHFd7p9TTxJK/CW5GJwjxKNU/v38ReyC8poiBIlc7VFIniJBiKa0/qcOJibdbq2103VfJEAP2YcdKe9J/AUfYOMN87un+bon2LvxfT4J/1KNJCccO6Q8WXYifsHpE5TwJBuAk0i/WdqTY9Dt4Tf/NxcCg0+fBD0NU98puSy+OCNRyR8095ghQH1/TwrjlX9WZwrod374cSXD5powHeu2gDJisgRdeJxfWDCZ7fXmrwqfHXuN+esxQ9oexzgYC+0TXs82v40oOI7RwxbGG5kj1IClfxMrHfXpYG6/tAIYtqN0eszKfjnMwob9lrhG9wBljYwLhmMDgTVvq0eeTxrPQr8GBZCJ8AaHRVh/9ydjPn7tXQyVWK/28W37Fojt0l5ITFgzD6YYnhqsMSK3Yi14x1J8dn91f6UayBMLU5Fq9EZCUf6FzFmYB70YPIyZaJGCT1ds60GlA38anzFHgatiLGVE0ZZgASIvKzpGHYJ6K6MNwvLaprRShZEG+MMjnfWB6aDHR3QdA653qNtCgFCyky9Y6qe8amjBcpx02NlsVimrOHyamTfQX+CRgGmxsNwOWzMR7DzXv9YGAKI9l7yHw8pzSsig65gU0MCY1WxYh+bLkoKRvfBS6+K/2nvtj75FTZ4F8/EQplvHSsEtfXE3jySCLo9NngRJMYdlv8Oz8I2AIMjlP85HCMck3fK40yJgI5C+AF56GadzuuL090oybu/465WNhfah7pdDw0gaBeeF1nMk6UWzmzQTPY/Mycx0KOTLKZcJfJbxFzaAmxgzvWqodcQcB0PbjRgbYhpcSGZDuCcXDIqOhQnSK2tRgMrhr2WoVnZZXBkWdr+mvL/x8PuxoF1o4IZCc7eJz2gMJkNaZijvKeFIQMFlp+caD9rIGPWK7FIDSyESDQUfIPbNDn2hplvSsRQK9Sfr3ieFWtQa37/i/sowzJGzEZsn5NGlRDJzpMg2EOvJcvYSjEIEMStJlC2mBSfWSd36ZYhaOEvn8Ca5ehYBoAEovmxm4n76Zx4kVtmpTA/DPJx26H4sf3rfyFhsVoKB9+tPubqOGu/lmphbgaGhCOgZKKun7JqW+f2+LsHAsjMOxFVYmeClkN3/fl2W5fzy4pOCfwIVtYbu53eFoZDT3LjSYPCdjxreOv1PdQH1LTyvMR8QJa/8/d/cfLOleF4RvVUsz4PnK4ijFsEa/J1XgGe2N4MqiLTYxxRQ8/pJRTZRDs0PZedEvXy83J6JqjG/Qp69UmPn+oxloWu4xWOWsR9cyrZteAOlWze/hcMbUpIFRZqWlsRH+AZlPqG534C5OuIQvqLNVCZlRfwV1+CD9c+R4FPMZoFVVY9pnzEFKIoAQqbXox3m36y85xhssQkbtvAwCC9r0a+xrY07m2AdwTDSyskIxU37yy6YmQ4s5Nr+Ksq3bAqyFusNOmxhhBJ6VlnQvoOzUpN90hgQ9DNSeqQUfyQXxNYkm+jrPEICyIcJr/zdQV4vNcI34LqOUzub9PEN9NwBbFcPCn9PLp/YKxKEtWtRriBQabqMK39mWEiv7qDqYAmfvJTrHtqXfnkH5XFYGtW/DLk+bBrDo960piCksvDBUnw1Ub1ijbydt23Vv9VrOXiHq5s1xaDsID+5JKogVJjx+QLcL3CWBt/6bUHSyJIzxPjLsd7FhIQHCWe0r5Gv5YUg089KqcJXEUoD/RM828RAiugX+w4ILNvxOz4/gxMzIgZoGFZ+JR3Q87WbKp8zIukmJc1Ub6YbrtJKWrQqDQZBQhIhB5Ja+OltfNMbk/X7scEHCP262K4pBQgOw5/R4Rg4BMWFNz2haX2sDn1dg8d6TX7NIwfbSxVSgczCH+N1ZV01G+WG88M4IkhXh1mFb+3UUSbNVoiB7tt6MjOUY59ZKri5W5YYfAoLrybmjhKHjigfVTab9aH4SPXUrRPkN/6vS//T87aM7OVsCoR7FssK8Qi1E9Hew30/b7b8f7fSxzMNdHfHGNrOaWG4byAsfSgMTVKUJENi0syx7LUURkZCGbjGRIWw0dbE3AYZR3MyZi7bGfoDB8RoUfiVub+0ttY1IYJp+iUjD7GFs/C3imvFnli8WTvEYkzDnU03oaDqgMVVcitimTSc191dHdkvME8wUgyRjBNorV9ylIWhvh5JYT2aiDj7IhsW2Q98QH7paFSaoEHWmz6/QiBolGZsbkNFvyeyvi6zi7OyKln5CvPbFRsL845ni5rcbtqQHKirdUMJiCYdflMq7uj4ciaJeKZk8wjzaHqZvseaMBT3hTYFG5w5sLVRP67+kj9HXcm46blPcRBbBKDfeJTi2zRxDeOVjuefvn47zoC5xAmCZMKfUoPG2I6eAdKeyFiXdyg4A3llugaN7AgkxVDMkwQChIvTRNbo2BSLhINn2H6iyPHCFtDNdjMbCs6xo8ooAVXt+8gw40Psn7XGR9rVCuErJmVRmGjea1CFj4kTGjP11SWXfrTvqOFyCwShiDJ852XmDZY6x2E4E4XgETAJ9zuooY7ch33vwRuvzT6HOnMwV2bqokJoY6esTj8wIA8jx9EM4T+5qh3Uf+xsVZOWdVlby/q64HBEwwPlZzN35OVelHoez6otBVIpMAcj2q9th58qQylMI79lTA0Ql9S6D8GUcak/ztplriZXM+pQTQFyN9DWvmt6btdJdKmLDfIH2pe99iPEQPdnb0+GVF/xTZYC53gtCGwLdJf67QgFHKHEStanhXzMrA7c2DUalmaozLoHTf2bd6j6u+NL/SnHeZDu+74hFaa/QdtM3+eLeNRHuG/HWl4JYl/VjRrHcufPJ5691nbqQwg6BaJGWEf8IG0tXm7CAFOmVaVZqw5kky2stmAlTnwsmN+i53e6nCHInF3vsHeak3n7vJct45CVUbycWHGbhRYh6osdlGRouLph1iGXIgr8gjvNlrm5ESx5/RMrnqatIeyCr81XWQZSk8/G+DTdyj4QnyvOCOvv0+mqnU5OUbFI5iHj/S87Vs25uLVLcEYNLWybTPDoGQVwJTn72XUvqk2tewt8uAEfIKL8eTQ/chv7TLHDglqeEmEHtTJywtb/KXu9eXulhnFv7pPeEWlwUyMyHrhysNEA0iKIHFAaeHKM1N9gM4LUn7lHPPr4li4ZzKuVM7bJsqyhVJdPClA2OeS8DPtqCdN/ncyyCOkgQJ+ZYxhrzOuaumennM87Pe4xz9ZnQ4G2/Y5B8PEQ7JGk13NQB1T2c7CzL4Dw6SDv7j8YxuMk8bJdJR5GPahDvS9qgQ+T8gVBuFds8eKCVee1WciQIb2nYZ2PpRaigK9/Va+JZqfjF7Fa+GBnqf2CRAl6vBaBxjGZm8cwe6a8YSlHBKa6qngsMLyYs/kTKrhd4cKykRd9ZWJTyEM8EIuYDRd8NRxysly0s5XsVzgK9MXN9z50C3gjNORTbZshzsvz7uvENOr1QIhqcLVaK5cngbRAzpPNgnPaowFLBBBUGY+ysSC1uYM0a03QdDReXcDyX8fTTgI92I+UqHHe5oWo7EkEfgPjgaQ2myn2pIctsS4GdN9/MA4aLk+mg2LtYmgoFHQqo3ArOiYNqJHpU51JttFJ+vQy9CHArCEhd3OdY51jWEuMmYe9nWE9fHfFMS4WiJKev2+Xr9tGAG9sJPASVkMIFgpn/IQpdkRzxMG22oTr2k/mngEl+5oEtdnZMIQxDUAMAvEB2Ts7+sSVrnP5CIHl5CWQb0M1aA5jsUPeRGR4YCgq9kNx/gs96WdBP7XWEbOEQTmBAEOOMzbX3dOva+SXCyH5YD9BCyLHxlqF1S6OpZwj6YpOW3XZW/dLC25Yr7PXXwb+mksVJNRqAWIjh2XOREzR6V2lY9kfyrP7tdtD4dnkmm8ySEaVvikKWrpDGkqU3I1rL6Qnh37fXygWcqRYmXdGex54nAyQC2Rby/IS8bZXBTcJj6MFdiBZaolnmK3qt9tI4EJb1i0ZujvoRVkEtdvcX+STITGm409MpGGgaiY3odBtTnHvx9hHRLT+PbFPD7ufAfW0vmV9pxH3aRaHiinYWsycPUllGmtapReISsdZzeRVVu8N7KzUXvKJBoNzugfhV2+xBf0OgPiVPVy/WrEYiq9Ps+Q8nm0DAW/Ii2qQJF/PLtkvDvyXCXNP3uqFgaFsRGGwwqllTNWzm1jw1YdI5ZDl9bwDsOl1no51PZIhkcGCivAh5uka7rFRBaD54IAdwrRadjNAA/74KOty7LoZkinTCwvRukFSg+QfqzwwU42bjyraxQZab7eHSZHF2OsXt7+xAfmCy4Xw8sS1fiXfdPrSFzQtgfG6qlgwDJgq6nFMw+1Me3F2nZndE32SuC0JpUhdhWgD5bYmGAEs7tKwWzP5BiZoZVX+6zt0sP9t6EOb+Yt4i7U/dA6bnR4hLYQTc51Ltl6LO0QNgicgzpl8dbeB1UNLmpFkpvezs5XU+kvPoODoi/BFd6005I12HGsS0jbljV/APaL8C4VzmLLQY/70BSe1IGtJ+gQWQUHxA2z81Zo94dWutinv5opXCSTHwSCFAEzIalF0LOhRqgqmjJJ+WxbiKIOPX8roUNm/PixOyTRL6vry5Odsuxf+c1mJEz5chIsUNCo2YkSe32UDy19YEzud5/qKXsD8iINW+ec359mNKD0ttRMHf3bBNtXhG1+a5lFtcj3mHpTttkOdTbHzXyV0i3a7I9hnb72OYollmJTM+Yv9efsbpcfmr3ug72izaheSdtnM5TdJYpHdUWC8AQSvAoR05eTVOTcqzUYnVIHW9s5RM2PO1eZMfP/zlbe0woYiucEL5nIQYsgI5mBGp/h+WeKLKagl64yu/+F8L17ysM8S9I5l3Ga1b42e2MxDR/djdCH50GTLp06f5X/pmyvxrhfhDLnoqzwksM2GipjB9bCgLgBvFSA/geEfLtnxe9HQ/lGgeGCCxtDMWd+YFmSF3gmAEDTFGaP9BfcXlXRXtMKNsPsuJSLCK/dhPU53MNhLZfTdW70bwVce4/aT+EqCsjI1JqYpA39jwzmVmSofTlyUklj4MUT/iCII0T3ju4cOgQsklIc+BuVIKVWQvsUEH/uyDQTmJxyR4Tikib9UszhraaoJwsEdPStm+6+yv38Jmq5ycnfSF06fnhZQStBonnHP8b2vxXv+mRx11dLHk8cygUfi+qu6yV5ysFMHEXsAP1fgK0JukORWLcTvEDpnZfsvyV0WK5mf46Q6SxXaUfWebC74UlpK0IU/LO8h+0FdsM1c6qi8iqe1Q135FzRerdh16ASQAGm2iwYuMFIUtrUmPtkSWdoNCFIxhCFfXGNPQYzQbIB7wrFUmzRaOFi8mJQyAyo6tUwbOX4DQJVIHcLsfONqzHDGtEGldYxDeRSwsNvs9+aSIdGOR6qo+KX9Iz2VXG3CLVT/RPRcXAEo4mBoTGHVULTaq9PwTnwvGwy/ZJH9Lq6MngAcOdkpggd6Mi/QDmZWcMfGDmA/gDuxns5rcDkiu2qi4YGQgT8c5dS/3o7TMuoveAz3YxZwpaVC+huRYoRUMlXBMySTbyljjsrSAuh/xqw1D+9FfL10h/NIMSBs6ZEDSu7m/BZF34OjCcXVafKjDlWjUWt015zAXzFujP8+VGH4H2HhzxzsVLjdJJYdP8aVBdqNRpzOkWpIUL6ezt0cPsEmuOs5RjaL/RlT1HnfO0/jNHej/EoBM99nkB4DJO7/49XK5cHRATNJskX1BMdXpDZxoMwWtldtAjrq0rDM8RoWUmYoTEG70ajiYCUrbTW/QmVUqEIRfEpscToyyh/5s3HdChbkV/QXjZoArTk1naxJurbHjKynMw+bzzrfTAl7lWLsB7UYRaSgpYqOYK5xL09AGTqidl84RK2zLsttCAaFaebujr+ilBUTuYssh0t2+vdHn5rVuW+25N0rGhyHwaA9+qz+ji/X6j82AH73W5p8I6V1l77i9qgrVJJD+yHS0wuFMoMjZTL8+R4UeTrnXE56ddgrXwW1dZfJL2gYjkvobf/ASqx7mu0w0aCt5XIn5VTyjzenxqGitBw7Gzc5nQcXMYMfLFJtUZ7i6/r2FNHr7R0buP17Ay8Z4BMVRwAn9Y9BwchiVdS8q2ytwd/zj7Nqnz6plMpprfyrACST35hnWemU0htFfYzCM3ljyjjSlAm17rH4eZt5VuPJEGFyTsP2o5A4dUMvu34JvJ1QQ0mOUTlokoFoEcnArq1+2xQQ84JNJrfo+ZerFcMCLzau/GJDjbxHoy/a+fyI5jBe6Fe7PkmIj5tuy65HxwX/dO5M4wa5NUlwkzmcjlBYXfiulKVI/5GLfPa3ELZZ6gpjK/QdTK6KzSJ/jNzDhZDSKr+1+sQ055BqPfu6jaYXmKZJirrKULMiwuUQyzXjKgHTPOvGGUOe+TlwKKMX20ea2Al1c52lXu5F98pXwC3M3IH1MmdXweJ0NSLQi5rSdILw7oPEq3h2GaXZ5Y+oUjcWkizoeSy5rh1CBI6FMxoGkcbA8Fi+gAtErHKDjKYzsUipW1IWP2HP2i1Le+Qt2NzT5mXejPv+rLwkn2/HUTqFra0RrrpZTfrZ/wd4UfjG2yc0jasbS9/px2ZxBEkG6+uu/fex5jJht4KRaK2mo/QDt8e7yyjzR8gSWyv5pKpRFjwiNaujkpuv44qykBbJ2ZKqYLX6n3zNESDkHUGnNCYpGjobLmbo9VE7ewnWdCRP2Otyq+YU6swtH5dBbhdRtfusRUwMY52f18P6L/omc0e75XSdG0D8QF1tvRxGq3h8q4m/ln04yNR1SdemwXrrOHgozg0q8gjsnYMyzngu0lx61PHXZVfDmXjxgAN9B1sMFsXBoZ69asSlx7lGtM7fHbhsj6fd/j2vNlPbQ3xOGFKox+vfU2hwZkdicUzPHjHwDhdFlYvCPrJaku9lga0hTlr/ENSi1Ij+8xjWMGCgcTFucPTIyu5i/rP6QM47pTLpwn9qE0qzo+chDZUd01/N7MKN5Y7a1T1bzv0NvziUI2NS/HAH//Lf9a7pL0aGDvSNj5x6SBH+73FZm+BAAhn++MTd/DmttzZJevtnG42tCOjwhnGQKW8aY1+1104U0iclt4DS66Kf/b9Xp/CbNmEMHPalXWc6NQ6egI/ow1bEVeI5kFtcoh2pGrIG2AUs2jTYeeCxfmOXsXrjf3r5LZjLHYgtMcFgZ0Q7hiJEa898YVfwbUQ84fsk8lyp5dSuyH6qYZv15ag+jg1o/UoACY74LTInVvLE2O2HgOl2fKiK1qoaIEDQThNyGktjHLhor/5VDTQxdZdEpvZFw+lcPbV4uEQiRalqN4TekLR/HCO4GlEhyzmEqnux4ZZx6xNr24NmFoU1mlh4xzgnVKwVT5LXUB3O0h7bZeIoIyxK/vHVjCEEiY/bwjeuVnnr1m/aeQl9VQZabl+qNcnOvc6adzLFcMASloJ8LP7/+ECC0XOUkzXd5eiLkCbHlGQDBqhQKOnAGSxp5ewd1JoeDWL51eRUdJPWKg/+dsrmEWlPWxL7WPyfzdzji2RYWNjtjdsGdHbnzYhOYOzfXuwjbIorJmLRdnsbrJ5LM4dHUaxk3wLqemeNpHCNG3zBwItvRPLHNjnvjEK/qytEwKu4RjAfkvBwZwUAZE4Frvi0fabdWTt0bcuAOeZz0tc6VC1qpH8gII+BAvKn6Bj7+OOkvdaphh3LTWCji6Z3impA8ZtvluQh7gtyWHytbiOJ/q1aacoZEfTNVRuBODqJnUrZ9ugYYDyJXSadPICzSxRStJY/oAnxzvVg5LFQrIyRCeKd5o3gh8EbX5D87rd77Je5A2SR0QQI9HCLt+wxU2EA4PSYwlKZ3RofyE4fux0T2kT3yDqbv8pjpqOLhIf4dIBAH4/nl0EmvwdPgr+zxBWZ8haLThhUupC7z3Bra+nIv4wkMy1Yi0rFoTm6uOD6QOxgLvqMNQYe4p6Xsp7LafcGpD+Bx4ip3YFJM15r107WtkUtH+vXHEShjAWUC10agCWtJ72UmXwSC8p9hpty801yEPPNB3obf5JnqEMWNpCNwjfXTJv+pKJYPmn5vqWIv0zfWwFT898o5gfeqr6eE7+lugq/YEzQmnFqc5upVl8RFqk+1U0AioU06OeFz2jbfhii25R9T5kmMmSxxgFUwBEPePEFJAVR+WFkmJoPShLsYgK2xlgXtDiGOXcCFs03KOWZYN7XxPSPLkt5+pvnR3JOmSS23JQEhJ8Rq3/BHusMynEGDilDEfdHsrOTJyPuTXTKcl39KiqHsaBokHsr5liuwEbklbpr0JUZksfMDb3F1g8ULAyBPpH77kXW8ojcSW6kRKkTqnYXDszjoO9wZrIRMguje7xFQ8yw6pZHO6a62qsOr8TgKXCfZelVdzjvP5xNqyKHu9ZgBENy14P69Amo4O+eB6h4fw97WAKDjgViHo73RA6U8CsXMDGQZJVQxBXm5kK9UBAIJQK4o0O/Y61HIMvK71tlJKhlO5Ho+9BQfsyklAySgDujc8lQ/5I3m9uTW/W2kkAUIBHot3gqVguffX/DmFOK4kLsvF7uS33vCcf5rw6GZIT0zGAiKRc4DaofctxVwBTCO9whJEr5mcQgjpeNC4XuemmCSLNCyH9oZ6llAdEBp0WKKSK01PRyzYWcas8J9IAL48coaLZmjIlYb65nh5bvWoy5D/Jt9ytz8vuX7PgD5FAJLguEfvwoVQr8QwCkP5Feu/Qtd4I60IMjRWnX3pZ+9uRnXa3K6O61Tqzl5fsydZJTQw1n2L4dHWlbvxMoF6MS5FuAAAAAAAAKEzxgNvoxz4L21lLczPYt0tms4abf59tudv1/FPNqHwHDrxinFzoCgrCz3r3qPOR02bvvvRSzN2x4SYYwn8ep/rLiG7VPWb0Ow6MGDVlBE1D79XlY7/N8dcvMaIZgEMRU8B4PXu2lccN7UAwlawLrCTpveib7ke3YQqePreiZt5W5YLYo3Khf3gz/z4LAryzlWzp/KuyCCyun7cKoFxwR/LmrFkHTLnmo0nqjqgJ7gyWWn4igVctO8fMvMEk6L3Hk0532FGDfugc+gzf7utUsz2t5j6/jU42dvZYoYU6NevAuSqX6KkGJPDEH448nVeeWaxlD2BT7focNdqTZxF1NJLLleqA7FO08s8UHEFpGHCnS/Tlr1Upm8gpWHMod41t7nkP5nbAR7KCN6foP/PTuRvLYrWVqCvsYo9p5xKkYpHeHPsqR7UzFRVwp1zdJXwYm/fjp68AfgHRGi4M+zPOxwcd8zFqk191fznEHv4AAAAbcavB0rEcBqoGqBlqZhxhM3ROxZCjeVXYgA8FvSD5FHwZvcLKMFcNQXewJaBJqWITFKJpIT083iidVvIwbyoM7dIpGt9bpuD9ygbdzV/P1AG0HtNFf0fmx9Uy8+p2YWPPPcGAcZfvuc9msXewl1j2UbX+3H+F7chr00/4pcB6Q4zAhS0lV1qSJWdnD1nGEaLGFBHjwIcQPhdA+TczFhNWOkJEgdRNWvrKxVPrqmVWy+kWJ4JRwxb/Vgq4TFlC0rC6RFMWhpHMyalk9YaNrb+Qm3gyV2CPnQTAciaYDDTeftjHQXwx9sOyiIAAAAAVgXBj3Jj963/3lUNGOdCwEnp3mOip38WkkJTRaIo4tS+Q62OPXfSh2bNX0tfzYF7Jj1bGjRi68YT75FPFdyJoMaq8PRnCIXyJnddx15f8oDltgvgfSlMCAiSThRUe5YttWwtm0DTAsChILFuAKlU93mVGoQ/3pVo4dshZqg1EPatGFFB94He0VbR9m/2xp8JfNKzX32S40oOKzHhCTOoz3VXXeUECplLp/G8cDJITAmTdyfLt1nSachCeXRmVE/HHJ/hfXweAhH6pS20a8svSuqPmAs2Bs16wAAADRTnAVnlbrzJ8mDcSfeOjL8t7RgYB/jYL5gpLqQxC3nvdlbsd26AuOLq72RKJ6p3YZEaWRULHOwnQ6niM7KDjcmAh2cxFt45/B8QxQr7s+5jZmpquvHJJXTGnLsJzzSaONjBe8vO4otFJln1uM7GSQqX6mRGPLwu4kVG1+lHMPNSaQOW+E9/XRk0KaBLZM/D5zh67awWpKg6izKXzzjj6N1RQtyyOvaP+WIl3lf3PQ6QPCfGS5AYd0Hf2O1V6ZZ4JqylHU1ewAAAEg5QjfUeQxinqpzzWPomGJ++lESN9O7G9GVyXpzdbpdHHmxeT3ZCXjGmsgFDn/OfLp4qnhhFmRmhl3QB5KZNDQ9hmFbQMKTpFC4szvMUmMvV4Pm3CPT6VusexvRkR4CXQSNMjXOGOc7/2rLNm7ZBufwtF/1nbf3DA9NlE1eDo6yIADse5wlu9pxXBH+6nTp2F/2i/5qdM/nQIHc1oxZ7tEa1s0Xbkj2OM0+0gydsi4783SJlV///EOgGEJAqHzYAAABEVh1gayqLc1Df7Fd5odO/mG1mAiG+YsPT64ZU8ytlWeq32BkPId6NcSfi/1f/nDuzeoHikIGXQUROQQG7m8JpccMKbk2Slz+bkiyvNC6ga5RA0DDOt7VK7x4L0gcCFYjyz4z4IxDypgKeg8Mat/zaj6grD3kOpoKlP1CC/pXjgR/AW3Y8hJz0xpdQ12Z75A4g224+pxkrwDUVy2yp8wxq75BqGRMsGaFiPaZ7Hdty6PzNQK4S7BGIF3A8GBJzc9MHqrryjsvSAAOIAAAAGQClNILrubKVimmpWyGPgriwSZd9551WOdZG+dlw9Lvd3hvr1dvw+4DwT4/pu6rtQhPogrzQfc31NsYx5bB4S0b8L+RlRA00PxPeD4a9g/R66B3UHrY0OU9Kod/d1LakQQx+oreE6dQXcmZP97IZ+XgZZJxzC4CWNxpErWbQdeNHrwgXG1JkKOnuylBppmJO2ozCUtkso3ISNuwkJAAAAFBTFqVoKb60lIXudW9VYUEydv70T0JJs+VoD5pcWwXkmQd3zEHIXDs9NDqC753nZjkYnf1sHVUO6NMOOddLcV12mVfhSNhNUgVSb6dz6vWJImpt8WEwCK/+Ye1l3nshx6P9ljZ01mKnKdIyWhvALUKZnPPXFR1rRZBsE6z2cmynH5Xa5XMyIPPKh6QRYD8hDgP1ptGQOHsyee3JRy5iBcWOGPMbCArc6v5qDTGm4CbObmQ0LW6wsVgDmgAAAAB08fZOghoLDB2b3FuVvADP1gQ1aMUZfbz0HkII93h3XvPDgPMLNolC3Eb7/ZMgQquBzakYhwwpltq6BfDv35IarxW3r+oNfzMv+Tan9NUd+l0JAquaEWnLsJpL0uWA4JxuNDdF74fgtIQzBxhGiVy80uMAFlVU1XTChe6Y6GFNPkht4TYBEOHiCpdZjLeBMLTxa37NwC3iYT+R6A2AEagJQnPIGpQDUAAAAA/7n3dN9aShVuTVPff0sjJ1BKwAy9j8bDwvIGIWoqu7FTgUs8WSc1G0JMSYitXNCLAgKMiijMLz8iDMUfjsEk1Pe4op0rb/UHRAuIdD1iErGnK1GeZ+BGSIDsh6lKnnoL7QuYvBSuqda/onGfWfyyhcDlIqk1jWvaVM+P4Oj6Wknyivxd4FN+B5k/GymFO5LkF3u0xWJXdH5R6jv9utqymYhFkcwnBxfgKLcfxqB34z3nTr9eSaXcxJ8PReTXjf10B93icmsKcpwlPkIQhuQcyqOQcJSchETFjX0TwhgkAAAAEGPG6Eiu2qrzUHjW6uMXSTXBkcDXunN6i2aAnaCqUu1gIcGjmv0mIH7ehz4zSPmnWoA4v/7FhD+nECWv/ys2lp9D0P/h+MGpAKjffQjtFC8hCWS21bBAGde6FUg43ZeSN7XR/YY5LVm+o7rNC6B8SwPjbXIjDyTkZZ43am/5R4AgDExmz58wYP8EC7vT/wRb9/lIIeLKOtCUbZKd2H4vGU+GdvFDBWFRZK306CPdn2XoOxGT7xGP58sKWhalBaFD7bLKsHbfECyrYKNxrWmJluAh9lneALngAAAA3QI0uW62ECZ9aKrp/EXB61FMcSiYNgiqsNQq4n1vPznYvnUztbpJwHDlHNZbU1ZzexSKFQvBf6EC1QJozq3kI40aGkKSxj8WKpR8l3NpSpKMAp2shV+hy4ebWS3qJsaUomwMGd1cz5WFATdnVqxOHbSmef//ji/mZZiVPPuHT7000QWqsQDs5AN0vglEg0ULTCDePBMG3qVA74f4JSc0KchxaMUPme+n2JXV7el17o+lVnKB6JmVTYuswACW8LqDLsA97UKtM+I8V4CqAAAACp8rV8gRucwomyBWxiji/CwP73DIUsZs6q4V5aKDZ5wWkL8rkqTmLaaNCm0mJKrGX6IiJ26iSSQfTuuarNjVqJbVdX5ecJbg+OAM0sykU19ydDQd70SIWPPNbySjZzw7rhRxm/l3/0u080Mzi8g08oH2J/g6eaHTvqvRIkPw2KSNQFAVwBFANOPx4431lJmGj4ngI3GEW0t9WoD3n8MdeOeJDRQ6/JPJ7loY2q3X9wR8AnhsOiY7wgQgbecA89dDjDtB1jSpjYZrvRIQykdYopKC9DuAAAAAAA+KLlg1rxMkf9TqGnjCzONpwFSC5Ptla6mc3GlQ9qIPl47oaEPqYBckES6IXRdn8SGlwbTA47anXGULcxWb9TqVflrUNpJMAVD5nsbQqssGa7sxEP80qxFZVKp7YEPL4qUSYOAWeEE6ViZ9BD9FFJsOS+OARZpcwEp4vmai538qmAy6HvM2FxNw8gqVStMRRYvoAQp/T9MDbtkegeceSqObs0GmJx8VLLdwOJF9s6c15mzNQh7Jm2AmXZ4ZgeOn3vqL5v7KMBRzUFa2dRpciHiE4+0j00zcpOv1BXX6jyoAF24Mc7o1QTWWnniNq3IqmyXLOE4K2Z3aYe8Gfc9GfgfsEmZ8tLbxd3WyTMqH5TabnEAboqJNlcCw5HOXVktLup478d7oXaLEEEdO4C210tXDVS0g+cnRaMvM/WVNFXE0pwHt70swlXN7hgttBgECVX5x1DODP4pXSOFgAAAAP8naqJ+yiNixFloJCdXG8TykOiCYIFEMEJ+yPPjSFhJgf40O2NeJlhHN0ihuAwFsZY1gcKyyLztIUR+UdVtEa8/uEG7PFABUSsN+vhMFr8ZJ7bQP6hZro9q1HFnBZacNaE+sV0Ay5H7FtrxQkpWMT0T//OkS3qJs5eb728K5WCe3wW4utPB4AKTUvqVuP/wqFsv9moDaFDqGXcXDsBjjRI+APEoVMepXT1hkDnATMFvPGok2DFLVVOYT14oq1QhDr454FOWA1hNa/Ko7XIxplRHSC++WfHdmyLchovNotI9Kf1+oacSBQKL1RnA78PsBoImoFQ31oVZoajHFfEAnpTZ/in6TEeilvyu4q6pA5cGZ5xk7feFqqFpYT/Du+U2Af7bhT1CzTGTW+vdkNmgPFnebdHZflODpxw2zxkcDBAnbFMLX2/JJqK/xll6C5ULmYs+dl2vvBcSzDY5bzBoJgK3qD/674Lmj6QUrXMec0zW2QrWDuVlGq7VTWcR4HcK1tUHYihku3PU6rVd64O4S16LfWGnUcHRnrErHlFu/uIY8KPjdIqLs5YXgvPuFMl2vbovV5gtGeYTXuDSLfegDxLj6W7vp7FIMt8umKN2PDYIzgk1ut/S6jB7aRo4q3F/QZ6lVcHXpdFGV/F6mJqliZZQDrGE6fvsOZN8g1BB4WcUKvVifEtl9RDnFxcOH3pKYbpl5kB7IJObpQWuJvCtTYKw9q6FNM/NYqHeD+e9a8N5D7HAcMCnR6bk0UEznKeh1ef5XBRll6W/fRemqJ0aLf8GdIzHpHsYmoIUiLxOg9tECr/m45Rz1cfz4sh0wpxrJ37x7sW4veVxm3lSRQ6/xJo13aUzk7BbWJARDYjLB+8DWJMVLDLMpbIgA9fZkE/WZfDrKrFa5GWRxYExuZtmnNPd9u7zsXod7Vp28injfVKWWEvNcm4dayrPo413UftsdJrJh49Ls0+Hwmvwyk22vJajDq7t++iV7Tb6usj01/h/2wuHS1fgX2S+PMmJ5GmktfpVCspDEnf28pE3l5Z9MhY3B/3uZxl+kR2Z/9y7HfXcr7S9RPkpqbpzPhC6rS7BXy0hQHtwKsrNdzFNMgII6fO0r2zah69YT6DrtfdYfI6Pzx5/W6u1LBpmQcpqH5xnCEwimyC3VfLn77lg5oAHe+mFQpKyaH6TuCi1V6v8AzGAEF5Fugtct3qozxLFpx/imnde1z5O1smzZJXAOXEb+bBHTCiLsLC9qLB/4LbB6hLi8e1N76I9mvTIvUyiPKWFHql1zHcbll1pUs1LEoRsi63S2mKjlo3y10ey+BdFqghbTOAA+GvQEX/dOcsngbZZrKDeTjFNaVydI8m9BvYQAaLYnUlvUYriQYUCyvK/+4K0WhG2+keT/WCUWJjpI4P7otqkMESDG1/Qcf7E9E6Kl37Hmr8iXVAqk+/HqvXrp8TFL89u3/1R24ShY5hTO0AStbtLRztAAcr+wlEuDr+EJ73jzfhrEOOYsZCsWZsPB/4YanhbprDimWntsROfhMhQ1oxk22Ow86Zf5C7vKqU+nBPsfkB8BC1vUPOTXiQ8Jl+/ENd/CfrQtNx9yR58tfJ0g7nZOoliAz3mGVWQP1JMIJklJ8C+yXlBkEZp5WUzMA4Pgoc8r8OMGAKUqCJbv3zSlXwdegZlzxOBqqeHEBbeQKQj+ne73wld4cVaujNgqPNZQbQMrQtxzlHClQh0ROsn5AfTOeKsvwjbDHjmS+pa/5ttMBfueLeUaDGlNkdW2XIBFoxiW3vH/pEQbg0RSumhVrBmPH8ejaWXnuKMREqdpbythUawLPiDAVU8xNEMjVjDTo9WZHNHMERoH1GUe5mWGKFqTz7/N5GTZSrLe4ZoMxeAZSAVR/Ib2vpWY5m2DqOpOzDx2VK4xHvAdeF94+XPPdOftqpyr+kN+EC44QwlB+JmSgE6K+LdnRbBf4NndIzSwhfq+0cYRKHTblCrnn4tAYRPYf3pytE4zjYdn8XkzsyvitImEpXGrkyY5h9vyO4FYEWRI+GEcTQUZGsk/UJ0iDNmPB+h+ueldx7F6eI0/eF/XH6SrB4AhRKEn6bAYk+vKPQ+TbIgPy4Bqdd1hef5z/yQ94/v7ArH/jqQMTgiRsIUfyTMnqQkmAMGij9LukswMVI6tRdpGEJ+suCN3ZbSWHBpb01aKNk0PjN3N62b8MDt3ENyb+wlehIJY62H8UZyh6CxIavz8RWilwhLj8IAaWfKrDzQumOF7Vtf9+DKWkEDagHF9qxlTeRpjRERVoVXn76dDXy5yhqlxJi0/MgyrzqxL/kj8OuaTNEOv3WAIKX3oSLrt8kBE41gPSKxnChqoqyZBuNubQW274yRX92VVKxd05dXzvZ4p4TcfRjbuqcLYmU8s0lk/tlC5qv89RJAvhjtBdRMpLhN2z0nFXbFaFb3b0Htsibqh5kh/Qs+5l2GzMtTAM2Bu5q+0eYY5Roadv1u5QOuamXr+BModnrtqoiBay80iE2ut60jJFGtMwuTxBt+qNIkmK8ughIxFDNT7EzQaNRqZljL5Iqoe7IY2WfodK5UW9Ytns1H0jbUBfAswEKm53V/5HJ5gQOvHogpgJdJIOMsGLVN8bYOAv/OhRHIBRQ17qy+GzJZg4A/lTOKkoYkT0eqwx+/DsIOFTQac2Zp0l3dYKNqM/pm9qPWioTkUt1SFWPymE4LdAsmVmxWJB71H+bF0809tSLsGKhBJ3Ai/wHxVXqpeoU9hsHKKbWjJtzuiFsH/sIqncn4pJlVn9VBHkfQfIwvubLUwLRDcC4xvd1KgetZ6bWdhHBZWzvgum8PCJhaUD10xxBqyRlZ6d0jpXmMZvwjFVaPqI1DU2DZnEWungyhqS2AtRuSvpIrf6RV4PLQykderXWbNupzKEAl8q1f3nNmM0V5KX5WNRhjB1c49anxsDhJOPQFZYPT0+Lybb4eisv+Gdo6AubGVwPKkzxeIvP8hrFmXejikCGqMwOwNvxiLzkte81A+C4drlHIaZwzKsfYLD9XKQT6wWizvP2PDf/SDU9fT/n6561cI5uFUK6nrnndM6BQlvx/mTPRt8vS0ywUflr0gX3t+e0a+erTOD29cVTr7asigXFkqYCMl/QoexOGUSpZ6gxvI+vUbWJcHFaJAkYNpOYdE802wFt2ywJaGt18d/TJHLJ4zYgBoO2U4xhpaNYtXWZNwMSVbLbAgRnx1H3cOxhmgo+2S8PE9fzC3s08pdUcGUsnRxDir7RGhtt4mvdf+7cEULIpajzEDt+m5xAqIF4vOF7Cnj0NHQgZHZTFQfCpgQjNQdE1qkacsRHLV7biIsbpp4TJuhgG4RZqdwt+L7uWLyeclbsljvIEkYlfGVYStZneZdRmrf1e0H9Spbh/ja+PMAWndqUR59E+GTzQZpoBbWzBs4r+s9M0t8mXOn6L5B7+MOm7aI1FS68k5UJTq/Mnwi1j+OJH+/X17n+MwHLKf0GNtq20RH73aVV+FeunNX+fPShAm55kmzzWLXgXkZdRidZTVeDfWhHebr7f3xIUlNLB69wpO/6r5DpEC2GZmQUpQj952qMztZgdfsLj0m3P9Dh5yD5jDRgNYLMITJyRndu4Xhh1Chl4IAI3Pwhjldi7JNjRlvXULuRrCYyFw2ZN+rF+s3MijBfqWz/v1kSAx4GTEfmjbu6dv5T84r5FMwe0ysjc4HLVFjxHewIzOGYgIgjdYIsiWxjernJWdr6kzFkhJ17kU3oKJQjmOvkOCoZn5I1WhR6IfJ/3laTYJmq/4DdUCGfIszD/zlOXEiIZylEg+Iosz8s6DkOUYhkpAgFcC+tLDRpoZ3q0AolPBx5RpgjImmBnIYMGq0sGJVfLT4dB/+VebHygSAhKKkPvqOr6xX1RPLfeQhWu7iEDhe4PcRyFb3fRdvCY5UgHJVzAbMed+MwV08tSGfL6NktuX7/kVcnGrUV82SJNk6IR0XO3P1+iJlOQ5rgFVGTH0uPwhlFe7eAKh4Er5vSjah0F6YBoOZltk3V0ulpXzsED2MY58JIE8QtshRyoPx4Dt2Nur937KVdozSS9oGLUDlpgPROsN5ydz10Qb43F/GfZoerD7Ja0mB0zY50NqViKteYXj0Helk/8QS9ZsBjZKcJO59nmCEifrlLacbSmse6tnxt5zEX7DaSBBWxqZRJypvzAFERNMLtL165xpT2Q4hxS7FVZDMC8mbwgjtI7+90i9nORIqBysG+3qd5QsUWUsNkyhVoV1QGDE2mwghK9RZ0MkbOHyRDnrTGyzHlw4XMvIcSxobK2l3HUR4xP5TaGADB5RKO8avMFIvdQr1MZIVI2Bt2EJ4TyzP6VluasARTFXLl9hAHilp5xiPfrq9iUKICX2BNVTdP/4dMTXB4wCJX8PJClz6HlcQ17p/hKe5DcinGYsCLHVJS/XzIgws2q1R0kbwWutzGCFGr18kj1LBWs0zpWxzgOr+dgMUe3qIRYRwQ/CeqQLqmrTNq+xr9+TOiXJKiqdFZKGRucwYKu6OKR/M1maj4OpAiYfDPur9hv5/mHUxM8P30lQ/dl/TuXOahjck4TRqyUAWPaFHswH1ymQ91wWQTcaNFr7USbAOXwsxy11gfZw7kwstu45jqrCiddShCSRdHa02zQNq009/oQ7icdW6NCnQnxZNDqYA/YUSXA8VRejbEMPx1ZQS/x89ZlCxZ6bJGcv3JFN2WFou0hLF4ioXWRvEy5bvnSEHmqFwtj9xsAK1VAdiyAjQp63X7AxiEDeQ+4AzRcLYZR4Dp0gcreAHKAWWmGx2U6a+papqhTJybs8JGeOrLuPF6TM22tfi7aGzqNYImreUmExlAB6oRQtTw09yDj7EPWZPlB+BtC4TangZPh4ff/BjtMIKODZPpYozfvHBIeHj6tf+pngWhei5oDjJ9P6bbwx5j3N1K4a+gV0cMcyxd8A0Gf8ZnSllApn8F4uE9GriIiIGZG0v5PfWezdUrx0Rufh94LBfXrT15Ce0s3PmIqDZYH4+JSBjbQq+OL2tteQgORJcUz/iS1UM9yiJv8goLu5Bn8mvHCLwOI2/xjV+KXuhBi0JrgKK2SksA85sgCbVQs231GJoBQSFeNFubetQmu/ZEZxXRVkyM5pst7bAPS1mKu/chGpNhNypPUbHCWtf1H8mXUvpyt20WwWWpHO6oVYjnEl6x5qXCdAA37RQhXXtFCmUx9aESvPZG9nZ2rXPnooQG8kexFJcyE/RTx3TR39kR9Pbx8tQwG4Z51L3FiQsUi3RPIjPlN5ZCxLSugyLns7A8IGqcSToW5LO9YYbk3TOQoDcHMo/53txbUqeEEIefxtHLOLuPNz/kuH0lXtG4R0IdN97Dw2lY898JQuOdb6KIVArWB8EbWKNHzb6X+k6itn4zS0cfuB3/Z8EOITU2rVYFeXdgoZkLbd4qyDszdsV3NstPHgjqeSozsE4MBmmHR9oh2jZIi+wl7o8c0w6UwQLhFXRs/5HLKJTjsaqKYqXJcPG1eeyBx2GbSUjW4ZVPLQR38pt9q3iUO3inqKgN5/wDsLtBv2L1wHBAdUtjs6zs/E/y4kEsdu8kSD7HxWXqBQhgjW1qm+a5Jk3G19RCnTOSDUSYH8KPYdjEkzlvtsrPwgWhZYsRIIbRD4sFdQ/WVN6571DHZNQriXS+U/8ciDglUo3xGr9Oi6880OyymCbbHKPhiMsAZrkjujJDwJnGm7B//b96Ies8MSzxEKCKRmSQkbwxexxkc7pSCmsDMuNluL2N78WTqJP2QNVEE3PMNFjgKIo2RlZbldGAJbvSGdKHySa2XZEDpj1DfRmLXLqD+RN7U5lo8LkUjzWgHJ+bD11jY4I4urVKJ5zRG3watlyMiJ5/xyidTkZm75XIomuRVl4E+jh8Y0fx65fv7GWMnWlGkvJtqhbh5DIShDXaE0DvGmLPJskDfPADRZ3/ReL5yLjqNRU6qzz+Mp5kvx1Bc1/Qp7N92IJTO/VJ2kZ1wc6fdK0th9gClHHXQ1NunM3cLIMrQqiYfI+ECy7lfMd3OzggGWV5okbJ7CJFK//vRhxXFC76zoF7RPoAulq2cBQqgF336MrKypSTe74U7c9aAdyoaqfMO/0+Id+trDH9jiKdHJUSp+0M/R4c8gU5gJWC3UfggJC8/jY989bD48ysu54b7Alcd1SdglKp8Q64vGwiVDrR+RwqXg+LRarrpG0feY7iq5A/jsnAu1UgexoNcdB6jYafzoprtyF7ImneITiR4puI09YEGi3e5c71CFMpPtkVSOLE3EiRBj6Qwq5NjkpbTkRNUki3YBzaercT5S5MjGmtOzQKUsaWFR9iB/0+jeg5/4FQuryzWlzyB1He59dxf7KmCNJnMtBvawkar+ADxT+CJ0N4zZfqONRXG4DaMPtnlz8IlY+8sDojIEH1Db9H4nM0u6Ds9tV0kHA/wHWVguKGPjIutbHoOwX5Rh6tlE/gz+qgjCF/Iv65E8/W+yDz4viigwVr9Lr0CyQIglDCbV+3AtDMYynBe+OvnAFmsedfTlV1VoO1w0MTQJpAq00NuxOuTvWUSukRdfjQTww9E9D7m/HdMQHL+3iLAkpvdA1gjmNK6oDlTujl+p1Loa6tt4qOmyaUf+jR6DKY48sGOeNWdidtk6Ehdv9zDwZs2bUMLgpuUfheZabeUyYRfQCuUXhzQtoSq/S//x7Xo/4PoX7hnLSRGINrubHRwOcdftRhSu0TqDXScGNIrWYpvlLfdV93X7P4Pm5sMbdBlhXLZr2KLroSJ8RdSwKhmU5hTcbb4Gu99nSYWmqSo7WVrQjJzfoSVctIAwgfNSzHgCjfBdcKGSdGff33LXyfyYiOXVwzOgsrUpaJdFo3C/ivLz6hxJdZ58o+CMcar/sAr/CkTzCciuC205QRyShFli9qeMSh1kdmnNFSgk/3pDis4ot9drAEjuqY/5guBmrKs8XmoiJ68NAW/Swp+cUT4+HntszC8EpvVpos1kS00LOORQfy3+mRxv0SUJaPNaGWHeDApHJqYgbSIiKL7fVZOYNaFLGrNmlXu9cQAT/m0+kx0465/PsBQIm5RufgjGP6FURYNiim+z/bhLtBnLgG7b1nOGhATbXwHF610J/meSaavwGopvDha7xjp/Ptb74/g0bdYFlxHr2UxPD3AxgCD8JVCJD2AYSuo3olEHNAvsl0pR2Tn8Vi7FHipPFakP3IzWuSVcpWgtiVrAQQddM5My1wckQJt/Yi6HFCHztKuGi76pN9347qaOyJAd8hxcS+7MQ3sYNrh11lwUC0BOhcrWTY54nOPY20YVY4+vGVwgTXBprWUa+WwlfjJpkSsCrL5rmksVZ8FWmZaa5Mdbrdg8ImMc5CJ8W+zo6WWY9rtYDRLCRp6WVOY0z1NEFYjDIC0tAWa/ov8yyj3yAUktjIrd8DzHCSrKzRJxjE0TAx52nD/E62teo3ymohgcaU5xlIurbPX00ZBi6Oo3m+WBqtUG8cLQcqgLVcLdZC4bM/WUZF8mNLJBEXA0sIQN1d5NOG7UMPtEHxRxSmmQ6HmIwsFOLRU6C2WvG/yKuSQggdB47G0vYljCKbrDuOjsvw2XOhbutC9K5RhHq7a0pw3NZC64u1IvTTw78HH50qP5oLjhQHt0D9Oy1e0cXzizSxiCt+P/AiUnj2x/zMpG+pTy/MgwF+B1IW0vwxv+EyQdHUc3EncT07kmNjfDHcBXTVay2arUHhSgO3MfyKfLUJrwKuZ9h9W1OVPuW2zPAxJacd7WZ010+rEC/Em149vw+Tx45411GZGo3JouYq8CsLYg+GSY8nvCSHDZeObZgn/lRuRzNwto1kxLLiCmRBnczmBYKxztCZa1kaQXH3gx5GPd8YRu0mwODmtNCz/eQOenjKt+qih/nIhTn0BvQobrsr5ljkuq9hi0Gj/6cRz1wSbIIYNfoyxow6hiuEF1Z/b7UdLeGiuX6Xnts+wjfE83b2v+BVcHtKwPBMzBP6+PEXawAxc+zhI08Cd1sAD7WXHwK2JuLlNnejnrCaPelhnEWH/pUS4J7ABC+wY0Nj/4Oik7yTA5rOtwDeeTGzkxhPjd1GpeHL2lHQFvFG6V41KnahRasOnOWXyMPsxgo1NV178umzEWNsd97Wjnkbm6IKUH+f3YNMrcg8a1sAUd8NLeOFT5AuUsN7qQXLI2PY656o1yMLCzh/LWGodt6XS5nVGn/MuhF22hUnDIMoVduovOWKJ8f7KnAmrSDauAEx/8q7Oi4HUfPFjSbckgVTUdQcsv6gRZARUA9RkFneHw/dF1mG0MnGfS/pGJ5zXgCnzDAXJ0C0nJmxhP/hI/A4aF215TLX60E1lAH+dj0obvifWW1FYSH2sx3mATRb/5BJpZ5fBcSCxesG6zrUpo2xxeaxgW1j7xfeHZa0f0PGNfTujOxwHcWENzxecSfH3qHUa9chIZLBVbx4oXUqG0L0IDnry8vwyEVYvluSpX9Vmlkn34YdEStiQbFrTqIKIGnbHc6cuxxtp1+vApZ3Z0Z474JcYiSL0PnskNbzVAE3wPjw81RJg74W5D2lwBEs3Dfw2ltlCSFSOyA6+ZFTj3RauvnbuxiP1zmLA8VRwDJqUIOQNKtZ5v35b7ulPuCTMCM3Xv/Nmyuopp0rfVEMAj9miY7J+LQo4tJS7vAyC0u42erlW46PaO2P0hi6slY8qq8fFvi21wMFLuEEGhlNsRqzGHGqd0by7ikx0H3Zlsbt/yaFL/OMGSmzTrcv4SV/XX4PDcYq35KOAOIxyN1T80uUshJpcr1IROC0jazEPl07yu6WvOAhJesqNENWspXpwmjjnFEl/M7AMUKRd59PZPS5c1WazlKhAj/zpwR6bGoSOfwVSclMpJkdJTYA8lBM+bK8J3qlAIVWJLtAbe6Nr5VCAxZZzjAEWGCWyNa08jGLNdquFyhrBV8k8cfLtyxK3GqwQyS/npT0ZXCTvzLqIcgL9GOuUNDS9yQZtFTFtcb32CJc8GbXzT6kjPOPldkFofZCAAAA'); --frame-slice: 65; }
.tile[data-frame="played"], .media-tile[data-frame="played"] { --frame-ink: #22d3ee; --frame-soft: rgba(34,211,238,.32); --frame-wash: rgba(34,211,238,.46); --frame-art: url('data:image/webp;base64,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'); --frame-slice: 52; }

.tile[data-frame], .media-tile[data-frame] {
  --frame-band: 13px;   /* the painted frame's width, all four sides */
  --frame-label: 0px;   /* no strip: the name is a plaque ON the frame (below) */
  /* The plaque pops out past the frame's top-left corner, so a framed tile must
     not clip it. Safe: the artwork already sits inside the frame's opening. */
  overflow: visible;
  --frame-rail: calc(var(--frame-label) + var(--frame-band));   /* top offset of the art */
  --frame-inner: 2px;   /* the artwork's corners — the frame's own lip covers them */
  /* Padding IS the frame: every child — artwork, badges, the meta band, the
     absolutely-positioned buttons — is laid out against the padding box, so
     the whole tile moves inside the moulding with one declaration and no
     per-element offsets to keep in sync. */
  padding: var(--frame-rail) var(--frame-band) var(--frame-band);
  border-color: transparent;
  /* The card behind the frame: dark, with a faint wash of the kind's colour
     under the label strip. The frame itself is .tile-frame's border-image. */
  background-color: #111219;
  background-image: none;
  box-shadow: var(--shadow-card);
}
/* Higher specificity than .tile:hover / .media-tile:hover, so the frame keeps
   its colour under the pointer instead of flipping back to the violet default. */
.tile[data-frame]:hover, .media-tile[data-frame]:hover {
  border-color: transparent;
  box-shadow: 0 12px 34px -8px var(--frame-soft), var(--shadow-lift);
}

/* The frame: the kind's painted picture frame as a 9-slice border-image round
   the WHOLE tile. Its border is the tile's padding band, so the opening holds
   the label mat (.tile-frame-rail) and, under it, the artwork — the name is
   inside the frame and nothing the frame paints covers the picture. */
.tile-frame {
  position: absolute; z-index: 4;
  inset: 0;
  border: var(--frame-band) solid transparent;
  border-image-source: var(--frame-art);
  border-image-slice: var(--frame-slice);
  border-image-width: var(--frame-band);
  border-image-repeat: round;
  box-shadow: inset 0 0 7px 1px rgba(0,0,0,.65), 0 2px 3px rgba(0,0,0,.55);
  /* NO `filter` here. A filtered element is rasterised into its own composited
     layer, and that is the one way a z-index:4 sibling can end up painted OVER
     the z-index:7 plaque — which is exactly what the bright top rail of the
     moulding was doing across the label (Rober, 2026-09-28: "top left border is
     on top of text making it hard to read and messy"). The drop-shadow traced
     the art's alpha; the plain box-shadow traces the border box, which under a
     painted moulding reads the same and cannot reorder anything. */
  pointer-events: none;
}
/* Round the artwork to the opening. Games nest theirs in .tile-cover; media
   tiles put the image straight on the card, with the meta band flush to its
   bottom edge. */
.tile[data-frame] .tile-cover { border-radius: var(--frame-inner); }
.media-tile[data-frame] > img,
.media-tile[data-frame] > video,
.media-tile[data-frame] > canvas { border-radius: var(--frame-inner); }
.media-tile[data-frame] .tile-meta {
  /* Laid out against the padding box, which includes the frame band — so it is
     pulled into the opening, or the title runs under the frame's left edge. */
  left: var(--frame-band); right: var(--frame-band); bottom: var(--frame-band);
  border-radius: 0 0 var(--frame-inner) var(--frame-inner);
}

/* The rail: icon + the state's name on a dark mat just inside the frame's top
   edge, above the picture. */
.tile-frame-rail {
  /* An enamel plaque riveted to the frame's top-left corner: it overlaps the
     moulding and pops out past its top edge (Rober, 2026-09-28: "make the text
     and icon part of the frame, overlapping it a bit, popped out of it towards
     top left"). Its border is the kind's colour, so it reads as part of that
     frame.

     It pops UP only. The first cut also popped 7px LEFT, which with the gem's
     own -7px break-out put the plaque's leftmost pixel 11px outside the tile —
     and the media grid's column gutter is 12px, so on every tile but the first
     in a row the gem and the start of the label were sitting on the NEXT TILE
     ALONG'S painted moulding: an ornate, high-contrast pattern directly behind
     the text (Rober, 2026-09-28: "top left border is on top of text making it
     hard to read and messy"). The plaque now starts at the tile's own left
     edge, so the only thing that can ever be behind it is its own frame — and
     it sits high enough (-11px of its 26px) that it covers the whole 13px
     moulding band, leaving just 2px on the artwork's corner. */
  position: absolute; z-index: 7;   /* over .tile-frame (4) — see the no-filter note there */
  top: -11px; left: 0;
  max-width: calc(100% - 4px);
  height: 26px;
  display: flex; align-items: center; gap: 5px;
  padding: 0 11px 0 4px;
  border-radius: 999px;
  border: 1.5px solid var(--frame-ink);
  /* Opaque on its own line, never as the tail of the `background` shorthand:
     what is behind this plate is a busy painted moulding, and the label is only
     readable if none of it comes through. */
  background-color: #15131b;
  background-image:
    linear-gradient(to bottom, rgba(255,255,255,.14), rgba(255,255,255,0) 55%),
    linear-gradient(to bottom, var(--frame-soft), rgba(0,0,0,.45));
  box-shadow: 0 3px 9px rgba(0,0,0,.65), 0 0 0 1px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.15);
  pointer-events: none;
}
.tile-frame-icon {
  flex: none; width: 25px; height: 25px;
  margin: -4px 0 -4px -4px;   /* the gem breaks out of the plaque's left end, not the tile's */
  object-fit: contain;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,.75));
}
.tile-frame-label {
  min-width: 0;
  font-size: 10px; font-weight: 800; letter-spacing: .9px; text-transform: uppercase;
  color: var(--frame-ink);
  text-shadow: 0 1px 2px rgba(0,0,0,.9);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* Running beats every frame on the RIM while it lasts — "this is on screen
   right now" is the more urgent fact — and the plaque still says why the tile
   is framed. Favorite keeps its gold rim with a green ring, as it did before
   frames existed. */
.tile.running[data-frame] {
  border-color: #34d399;
  box-shadow: 0 0 0 1px rgba(52,211,153,.4), 0 6px 22px rgba(52,211,153,.25);
}
.tile.running[data-frame="fav"] {
  border-color: #f5c542;
  box-shadow: 0 0 0 2px rgba(52,211,153,.55), 0 6px 22px rgba(245,197,66,.25);
}
.tile.running .tile-frame { box-shadow: inset 0 0 0 1px rgba(52,211,153,.45); }

/* ── Framed tiles: keep the tile's OWN overlays off the moulding ─────────
   The moulding is the tile's padding — and an absolutely positioned child is
   laid out against the PADDING BOX, whose top edge is the inside of the
   border, NOT below the padding. So `top: 6px` on a badge puts it 6px from the
   tile's outer edge, i.e. ON the rail: the star avatars landed across the
   frame's icon and its "JUST ADDED" label (Rober, 2026-09-28: "framing needs
   to not overlap anything"). Measured, not guessed — #badges sat at top 7px
   while the artwork started at 27px.

   Every overlay that belongs to the CONTENT therefore gets pushed in by the
   band; the frame's own two parts (.tile-frame, .tile-frame-rail) keep their
   offsets, because they are the frame. Nothing here touches an unframed tile,
   so the plain grid is bit-for-bit what it was. */
.tile[data-frame], .media-tile[data-frame] {
  --ovl-t: calc(var(--frame-band) + 14px);  /* under the corner plaque */
  --ovl-x: calc(var(--frame-band) + 6px);   /* inside the side moulding */
  --ovl-b: calc(var(--frame-band) + 6px);   /* above the bottom moulding */
}
/* Top-left lane, top-right controls. */
.media-tile[data-frame] .tile-topbadges {
  top: var(--ovl-t);
  left: calc(var(--frame-band) + var(--lane-x, 0px));
  /* the same two-button clearance the unframed rail uses, pushed in by the band */
  right: calc(var(--ovl-x) + 2 * var(--btn-s) + 2 * var(--chrome-gap));
}
.media-tile[data-frame] .tile-duration,
.media-tile[data-frame] .tile-edit { top: var(--ovl-t); right: var(--ovl-x); }
.media-tile[data-frame] .tile-gif-badge,
.media-tile[data-frame] .tile-bundle-chip { top: var(--ovl-t); left: var(--ovl-x); }
.tile[data-frame] .tile-select,
.media-tile[data-frame] .tile-select { top: var(--ovl-t); left: var(--ovl-x); }
.media-tile[data-frame] .media-tile-ai-pill { top: calc(var(--frame-rail) + 8px); left: calc(var(--frame-band) + 8px); }
/* The pop-out shares the ⋯ button's line (see the tile-chrome block at the end
   of this file) — it is not a second row any more. */
.media-tile[data-frame] .tile-popout {
  top: var(--ovl-t);
  right: calc(var(--ovl-x) + var(--btn-s) + var(--chrome-gap));
}
/* Second row down — the popover still hangs under the top row. */
.media-tile[data-frame] .tile-stars-popover { top: calc(var(--frame-rail) + 18px); left: var(--ovl-x); }
/* Bottom corners. The view count is a lane badge now and the score rides ON the
   plate, so neither needs a rule here — except on a tile with no plate at all
   (an Images tile has no title), where the bar still floats in the corner and
   has to be pushed inside the moulding like everything else. */
.media-tile[data-frame] > .tile-rating,
.media-tile[data-frame] > .score-bar {
  right: var(--ovl-x);
  bottom: var(--ovl-b);
}
/* Edge-to-edge strips hug the artwork's edges, not the tile's. */
.media-tile[data-frame] .tile-progress,
.media-tile[data-frame] .tile-scrub-pos {
  left: var(--frame-band); right: var(--frame-band); bottom: var(--frame-band);
}
.media-tile[data-frame] .tile-scrub {
  inset: var(--frame-rail) var(--frame-band) var(--frame-band);
}
/* A framed PORTRAIT clip: the inset above pinned the scrub's left edge while the
   portrait rule still pulled it back by half its width (translateX(-50%)), so
   the hover preview was drawn off to the left of the poster — "a duplicate to
   the left of it" (Rober, 2026-09-28). Centre it inside the opening instead. */
.media-tile-portrait[data-frame] .tile-scrub {
  top: var(--frame-rail); bottom: var(--frame-band);
  left: 50%; right: auto;
  height: auto;
  max-width: calc(100% - 2 * var(--frame-band));
  transform: translateX(-50%);
}
/* Games grid: same frame, same rule. */
.tile[data-frame] .tile-running-badge { top: calc(var(--frame-rail) + 7px); right: calc(var(--frame-band) + 7px); }
.tile[data-frame] .tile-bl { left: calc(var(--frame-band) + 12px); bottom: calc(var(--frame-band) + 12px); right: calc(var(--frame-band) + 144px); }
.tile[data-frame] .tile-stop-btn,
.tile[data-frame] .tile-note-badge { bottom: calc(var(--frame-band) + 12px); right: calc(var(--frame-band) + 12px); }
.tile[data-frame] .tile-resume-btn { bottom: calc(var(--frame-band) + 64px); right: calc(var(--frame-band) + 12px); }
.tile[data-frame] .tile-activity { left: var(--frame-band); right: var(--frame-band); bottom: var(--frame-band); }

/* A shelf card shows the art and nothing else (see the .cs-row block near the
   top of this file), and at a third of a tile's width a rail would be most of
   the card. The moulding stays — it IS the card edge, not a pill fighting for
   a corner — and it closes up to an even band with nothing written on it. */
/* Any card ON A SHELF — Games collection rows and the Toons/Hentai series
   strips alike — is too small for a full frame and a named plaque: at that
   scale they were most of the card (Rober, 2026-09-28: "frames are way too much
   on categories of this scale"). There the frame thins to a fine line and the
   plaque shrinks to just its gem, still popped out of the top-left corner, so
   the state is readable at a glance without covering the episode. */
.collection-strip .tile[data-frame] { --frame-label: 0px; --frame-band: 4px; }
.collection-strip .tile-frame { filter: none; box-shadow: inset 0 0 3px rgba(0,0,0,.6); }
.collection-strip .tile-frame-rail {
  top: -5px; left: 0; height: auto;   /* up into the gutter, never sideways onto the next card */
  padding: 0; border: 0; background: none; box-shadow: none;
}
.collection-strip .tile-frame-label { display: none; }
.collection-strip .tile-frame-icon { width: 17px; height: 17px; margin: 0; }

/* ── Deleting a tile ────────────────────────────────────────────────────
   Deleting a game means trashing a folder that can be tens of gigabytes, and
   deleting a media item means a round trip to the media server; both used to
   spend that whole time looking like nothing had happened, so the tile got
   clicked again. The effect below runs the instant the confirm is answered
   and the tile is pulled out of the grid when it finishes — the real delete
   carries on behind it, and only a FAILURE brings the tile back (with the
   error), which is the one case worth waiting to be told about. */
.tile.tile-deleting, .media-tile.tile-deleting {
  pointer-events: none;
  border-color: rgba(239,68,68,.85) !important;
  animation: tileDissolve .34s cubic-bezier(.4, 0, .7, 1) forwards;
  z-index: 3;
}
.tile.tile-deleting::after, .media-tile.tile-deleting::after {
  content: ''; position: absolute; inset: 0; z-index: 9;
  border-radius: inherit;
  background: radial-gradient(circle at 50% 58%, rgba(239,68,68,.55), rgba(239,68,68,.12) 55%, transparent 75%);
  animation: tileDissolveBloom .34s ease-out forwards;
  pointer-events: none;
}
@keyframes tileDissolve {
  0%   { transform: none; opacity: 1; filter: none; }
  25%  { transform: scale(1.025); filter: brightness(1.3) saturate(.75); }
  100% { transform: scale(.8) translateY(8px); opacity: 0; filter: grayscale(1) brightness(.45); }
}
@keyframes tileDissolveBloom {
  0%   { opacity: 0; }
  30%  { opacity: 1; }
  100% { opacity: 0; }
}
/* Same promise, no motion: it still visibly leaves, it just fades. */
@media (prefers-reduced-motion: reduce) {
  .tile.tile-deleting, .media-tile.tile-deleting {
    animation: tileDissolveFade .18s linear forwards;
  }
  .tile.tile-deleting::after, .media-tile.tile-deleting::after { animation-duration: .18s; }
}
@keyframes tileDissolveFade {
  to { opacity: 0; }
}


/* ── Launch feedback: button reaction + "Playing" running state ───────── */
/* Tactile press on the quick-play button. */
.quick-play:active, .quick-folder:active, .quick-update:active, .quick-download:active { transform: scale(.86); }
.quick-play { transition: transform .06s ease; }

/* Quick-play shows a spinner while the launch IPC is in flight. */
.quick-play.is-loading { pointer-events: none; }
.quick-play.is-loading svg { display: none; }
.quick-play.is-loading::after {
  content: ''; width: 14px; height: 14px; border-radius: 50%;
  border: 2px solid rgba(255,255,255,.3); border-top-color: #fff;
  animation: spin .6s linear infinite;
}
.btn.is-loading { opacity: .7; pointer-events: none; }
@keyframes spin { to { transform: rotate(360deg); } }

/* Brief pulse the instant you click play, before the running state lands. */
.tile.launching { animation: tileLaunchPulse .9s ease-in-out infinite; }
@keyframes tileLaunchPulse { 0%,100% { box-shadow: 0 0 0 1px rgba(52,211,153,.35); } 50% { box-shadow: 0 0 0 2px rgba(52,211,153,.7), 0 0 18px rgba(52,211,153,.4); } }

/* Running game: green glow border. Plays nice with the gold favorite border. */
.tile.running { border: 2px solid #34d399; box-shadow: 0 0 0 1px rgba(52,211,153,.4), 0 6px 22px rgba(52,211,153,.25); }
.tile.running.pinned { border-color: #f5c542; box-shadow: 0 0 0 2px rgba(52,211,153,.55), 0 6px 22px rgba(245,197,66,.25); }

/* "● Playing" badge, top-right of the tile. */
.tile-running-badge {
  position: absolute; top: 7px; right: 7px; z-index: 5;
  display: inline-flex; align-items: center; gap: 5px;
  background: rgba(6,18,14,.82); color: #6ee7b7; border: 1px solid rgba(52,211,153,.55);
  font-size: 10.5px; font-weight: 700; letter-spacing: .3px;
  padding: 2px 7px 2px 6px; border-radius: 999px; pointer-events: none;
  box-shadow: 0 2px 8px rgba(0,0,0,.4);
}
.trb-dot { width: 7px; height: 7px; border-radius: 50%; background: #34d399; box-shadow: 0 0 6px #34d399; animation: trbPulse 1.1s ease-in-out infinite; }
@keyframes trbPulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }
/* "Stopping…" / "Restarting…" badge variant (amber) — both are "busy, hands off" states. */
.trb-dot--stop { background: #fbbf24; box-shadow: 0 0 6px #fbbf24; }
.tile.stopping .tile-running-badge,
.tile.restarting .tile-running-badge { color: #fcd34d; border-color: rgba(251,191,36,.55); }

/* Tile Stop button — persistent (not hover-only) on running tiles, bottom-right corner.
   Sits where the hover Play button is; Play is hidden while running (Stop replaces it), so
   they never overlap, and the top-right "Playing" badge is in a different corner. */
.tile-stop-btn {
  position: absolute; bottom: 12px; right: 12px; z-index: 6;
  width: 44px; height: 44px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  border: 0; border-radius: 50%; cursor: pointer; color: #fff;
  background: linear-gradient(135deg, #ef4444, #b91c1c);
  box-shadow: 0 6px 22px rgba(239,68,68,.55), inset 0 0 0 1px rgba(255,255,255,.22);
  transition: transform .12s, filter .12s, opacity .15s;
}
.tile-stop-btn:hover  { filter: brightness(1.12); transform: scale(1.06); }
.tile-stop-btn:active { transform: scale(0.95); }
.tile-stop-btn:disabled { cursor: default; }
.tile.stopping .tile-stop-btn,
.tile.restarting .tile-stop-btn { animation: tileStopPulse 1s ease-in-out infinite; }
@keyframes tileStopPulse { 0%,100% { opacity: 1; } 50% { opacity: .5; } }
/* On a running tile the persistent Stop replaces the hover Play (same corner). */
.tile.running .quick-play { opacity: 0 !important; pointer-events: none !important; }

/* Tile Resume button (web) — rejoin the stream of a game that is already running, from the
   card face. Persistent like Stop, and STACKED DIRECTLY ABOVE IT rather than beside it: the
   bottom edge is a queue of right-anchored slots (Play/Stop at right:12, Folder at 64, Update
   at 116) that .tile-bl already reserves exactly 144px for, so taking a fourth slot would push
   Update under the title on a 280px tile. The column is empty at every width, and a 3:2 tile is
   ≥186px tall, so the pair clears both the top-right "Playing" badge and the bottom-left title
   plate. Same 44px circle, radii, shadow and press feel as the other quick actions. */
.tile-resume-btn {
  position: absolute; bottom: 64px; right: 12px; z-index: 6;
  width: 44px; height: 44px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  border: 0; border-radius: 50%; cursor: pointer; color: #fff;
  background: var(--grad-cool);
  box-shadow: 0 6px 22px rgba(124,58,237,.55), inset 0 0 0 1px rgba(255,255,255,.2);
  transition: transform .12s, filter .12s, opacity .15s;
}
.tile-resume-btn:hover  { filter: brightness(1.15); transform: scale(1.06); }
.tile-resume-btn:active { transform: scale(0.95); }
.tile-resume-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* Mid stop/restart there is no stable session to rejoin — same reasoning as Stop's own
   disabled state, but visibly dimmed since Resume is an invitation, not a safety button. */
.tile-resume-btn:disabled { cursor: default; opacity: .45; filter: none; transform: none; }
/* In flight: the resume RPC is a host round-trip, so the icon becomes a spinner instead of
   the button looking untouched (same treatment as quick-play's launch spinner). */
.tile-resume-btn.is-loading { pointer-events: none; }
.tile-resume-btn.is-loading svg { display: none; }
.tile-resume-btn.is-loading::after {
  content: ''; width: 14px; height: 14px; border-radius: 50%;
  border: 2px solid rgba(255,255,255,.3); border-top-color: #fff;
  animation: spin .6s linear infinite;
}

/* ══════════════════════════════════════════════════════════════════════════
   HEARTH-WEB — immersive/fullscreen mode + iframe web browser (web build only)
   Inert on the desktop app: `.web-only` elements stay hidden, and the body
   classes `hearth-web` / `hearth-immersive` are only ever set by web-gated JS
   (window.__HEARTH_WEB__). Appended as one block — safe to lift out wholesale.
   ══════════════════════════════════════════════════════════════════════════ */

/* Web-only chrome — hidden on desktop, revealed on the web build. */
.web-only { display: none !important; }
body.hearth-web .btn.web-only,
body.hearth-web button.web-only { display: inline-flex !important; }
/* The reveal above is element-specific (.btn / button), so a web-only control
   that is neither stays hidden by `.web-only { display:none !important }` with
   nothing to un-hide it. The play-mode selector is a DIV (a radiogroup wrapping
   three buttons), which is exactly that case — it shipped invisible. */
body.hearth-web .play-mode-seg.web-only { display: inline-flex !important; }

/* The frameless-window minimize/close buttons (topbar, lock screen, floating
   bar) are Electron window controls — dead weight in a browser tab. */
body.hearth-web .winbtn { display: none !important; }
/* Hiding just the .winbtn buttons leaves the .window-controls container's
   border-left + margin/padding as a stray 1px divider and gap at the right of
   the topbar on web; hide the whole container. And the 🐞 DevTools pill opens
   the Electron main window's DevTools (on web, F12 is the browser's own), so
   it's a dead button here too. */
body.hearth-web .window-controls,
body.hearth-web #btn-main-devtools { display: none !important; }

/* ── Immersive mode: collapse Hearth's chrome so the active view fills the
   screen (topbar, view-tabs, and the active view's sidebar all go away). ── */
body.hearth-immersive header.topbar,
body.hearth-immersive nav.view-tabs { display: none !important; }
body.hearth-immersive .layout {
  height: 100vh;
  grid-template-columns: 1fr;          /* drop the sidebar column */
}
body.hearth-immersive .layout > .sidebar { display: none !important; }
body.hearth-immersive #view-browser.browser-view { height: 100vh; }

/* Floating "exit fullscreen" pill — only while immersive (overrides .web-only). */
body.hearth-web.hearth-immersive #hearth-immersive-exit {
  display: block !important;
  position: fixed;
  top: 10px; right: 12px;
  z-index: 1000;
  opacity: .35;
  transition: opacity .18s ease;
}
body.hearth-web.hearth-immersive #hearth-immersive-exit:hover { opacity: 1; }
#hearth-immersive-exit-btn {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 7px 12px;
  background: rgba(16,18,24,.82);
  border: 1px solid rgba(255,255,255,.10);
  color: rgba(232,232,240,.92);
  border-radius: 999px;
  font: inherit; font-size: 12px; font-weight: 600;
  cursor: pointer;
  backdrop-filter: blur(8px);
  box-shadow: 0 4px 16px rgba(0,0,0,.4);
}
#hearth-immersive-exit-btn:hover { background: rgba(30,33,42,.92); color: #fff; }

/* ── Pop-out window ─────────────────────────────────────────────────────────
   The topbar's Pop out button reopens Hearth via window.open(...,'popup') — a
   clean window with no tab strip / omnibox. Inside that window (or an
   installed-PWA standalone window) the button is moot: web-gated JS stamps
   body.hearth-popout there, and the ID selector outranks the .web-only reveal. */
body.hearth-popout #btn-popout { display: none !important; }

/* Splash shown in the ORIGINAL tab after a successful pop-out. The tab wasn't
   script-opened so it can't close itself — instead it becomes an obviously
   parkable/closable launcher. Same design language as the lock screen
   (.lock-screen/.lock-card): opaque --bg + ambient glow, centered card. */
#hearth-popout-splash {
  position: fixed; inset: 0;
  z-index: 12000; /* above every modal/overlay (current max is 10000) */
  display: flex; align-items: center; justify-content: center;
  background: var(--bg);
  opacity: 0;
  transition: opacity .2s ease;
}
#hearth-popout-splash.visible { opacity: 1; }
#hearth-popout-splash::before { /* keep the app's ambient glow for continuity */
  content: "";
  position: absolute; inset: 0;
  background: var(--grad-bg);
  pointer-events: none;
}
.hps-card {
  position: relative;
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  padding: 38px 44px 30px;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: 18px;
  box-shadow: 0 32px 80px rgba(0,0,0,.6);
  width: min(430px, calc(100vw - 40px));
  text-align: center;
  transform: translateY(8px) scale(.985);
  transition: transform .22s cubic-bezier(.2,.8,.3,1);
}
#hearth-popout-splash.visible .hps-card { transform: none; }
.hps-mark {
  width: 64px; height: 64px;
  margin-bottom: 4px;
  object-fit: contain;
  filter: drop-shadow(0 0 16px rgba(245,158,11,.4));
}
.hps-card h1 { margin: 0; font-size: 22px; letter-spacing: -.3px; }
.hps-card p {
  margin: 0 0 10px;
  color: var(--text-dim);
  font-size: 13px; line-height: 1.55;
  min-height: 40px; /* two lines — status text swaps without the card jumping */
}
.hps-card .btn { width: 100%; justify-content: center; }
.hps-card .btn.ghost { border-style: solid; }

/* ── Web browser — the DESKTOP chrome (#browser-bar + #browser-bookmarks +
   the tab strip) is reused verbatim for exact visual parity; only the
   WebContentsView host is hidden. The engines behind it live in #web-browser
   (Scramjet frame / proxied iframe / streamed Firefox). ── */
body.hearth-web #view-browser #browser-webviews { display: none !important; }
/* The tab strip is a window-drag region in Electron — meaningless in a tab. */
body.hearth-web #browser-tabbar { -webkit-app-region: no-drag; }
/* Ad-diagnosis probes the native webview's requests — desktop-only. The
   "Send to library" rip dropdown (#browser-send-wrap) IS kept on web: it runs
   through the media-server scrape pipeline, same as the desktop. */
body.hearth-web #browser-diagnose { display: none !important; }
/* Floating minimize/close (shown while the nav is collapsed) are Electron
   window controls — pointless in a browser tab. */
body.hearth-web #floating-win-controls { display: none !important; }
/* Local-file upload (sidebar "Upload videos/images/CBZ…") is an Electron native
   file dialog with no web equivalent — the web media tier has no upload endpoint
   — so hide the buttons on web rather than show a control that can't work. */
body.hearth-web [data-media-upload] { display: none !important; }

/* Host-only controls with no browser equivalent — hidden on the web tier so the
   UI only offers what actually works. Each drives a native OS picker, the host
   filesystem, or a host-side service (narrator TTS, cookie import) that isn't
   reachable from a tab; verified none have a web RPC handler.
     • #btn-add-game / #cs-pick / #btn-pick-root / #set-pick-root — native file
       or directory pickers (add a game archive, browse for a .rpgsave, change
       the library root). Web can't reach the user's local filesystem.
     • .narrator-orb-wrap / .narrator-section — narrator is host TTS (narrator:*
       is agent-forwarded, unhandled on web).
     • #btn-open-folder / #btn-activity-open-downloads / #btn-privacy-open-folder /
       .quick-folder (card hover) / .version-row .v-open / saves + update-history
       open buttons — open a host Explorer window (filesystem openFolder; the
       URL-opening variants are handled natively in the shim and stay visible).
   Windows trace cleanup is retired from the server UI; the full workflow is
   hidden by data-desktop-only below. Screen locking stays device-local. */
/* #btn-add-game is intentionally NOT hidden on web: its menu is now
   web-aware (Game-from-URL / Wishlist / From-URL — no native pickers), so the
   "+" belongs in the topbar where users look for it. See the click handler. */
body.hearth-web .narrator-orb-wrap,
body.hearth-web .narrator-section,
body.hearth-web #cs-pick,
body.hearth-web #btn-pick-root,
body.hearth-web #set-pick-root,
body.hearth-web #btn-open-folder,
body.hearth-web #btn-activity-open-downloads,
body.hearth-web #btn-privacy-open-folder,
body.hearth-web .quick-folder,
body.hearth-web .version-row .v-open,
body.hearth-web #d-saves .icon-btn[data-act="open"],
body.hearth-web #privacy-scrub-row,
body.hearth-web #updates-list .icon-btn[data-act="open-folder"] { display: none !important; }

/* Height: like the desktop, entering the Browser tab collapses the Hearth
   topbar + view-tabs (body.browser-nav-hidden) and the view owns the screen;
   with the nav toggled back on, reserve its height. Immersive still wins. */
body.hearth-web:not(.hearth-immersive) #view-browser.browser-view {
  height: calc(100vh - 60px - 41px - var(--np-h, 0px));
}
body.hearth-web.browser-nav-hidden:not(.hearth-immersive) #view-browser.browser-view {
  height: 100vh;
}

#web-browser {
  display: none;                        /* shown by setupWebBrowser() */
  flex: 1 1 auto; min-height: 0;
  width: 100%;
  background: var(--bg, #0a0b10);
}
body.hearth-web #web-browser { display: block; }
#web-browser-stage { position: relative; width: 100%; height: 100%; }

/* Streamed-browser mode: the hosted Firefox has its OWN address bar / tabs /
   content-blocking, so hide Hearth's proxy nav chrome and keep only reload
   (rewired to reload the stream) and the "rip page" send dropdown. The
   adblock toggle drove the *proxy engine's* server-side ad-stripping, which the
   stream never routes through — it's a dead no-op here (and could even replace
   the live stream with a proxied page if it ever fired navigate()), so hide it.
   The Hearth home toggle (#browser-hearth-toggle) STAYS visible — it's the handle
   that brings the Hearth nav back, i.e. the way OUT of the streamed browser.
   Hearth's BOOKMARK BAR (+ manager) also stays: the remote Firefox profile is
   fresh and has none of the user's bookmarks, and chip clicks route correctly
   (navigate() → browser:navigateDesktop drives the stream). */
/* In stream mode the address bar + back + bookmark star STAY — Firefox runs in
   --kiosk (no chrome of its own), so Hearth's URL bar is the ONLY way to type a
   URL, and it drives the stream via browser:navigateDesktop. Only the controls
   that don't work over the stream (forward, copy/share, autofill, adblock, the
   not-yet-wired tab strip) hide. */
/* Forward / history / copy / the tab strip all work in stream mode now (BiDi
   forward + reload, synced URL, real Firefox tabs), so they stay visible. Only
   the controls that genuinely don't apply to the stream are hidden: the "open in
   your computer's browser" escape hatch, same-origin autofill, and the scram/proxy
   adblock toggle (the streamed Firefox runs its own uBlock). */
body.browser-streamed #browser-external,
body.browser-streamed #browser-adblock-toggle { display: none !important; }
/* In stream mode "Bar size" lives inside the scroll-speed popover (one settings
   home), so the standalone Aa button would be a duplicate — hide it there. */
body.browser-streamed #browser-uiscale-wrap { display: none !important; }
body.browser-streamed #web-browser-frame { background: #0a0b10; }

/* In streamed mode the URL bar (the flex:1 spacer) is hidden, so the remaining
   controls bunch at the LEFT of the bar and the send button sits near the left
   edge. Its dropdown defaults to right:0 (opens leftward) — correct on desktop
   where the URL bar pushes send to the far right, but here that extends the menu
   off the left of the viewport and clips it. Flip it to open left-aligned
   (rightward, into the empty bar) so it stays fully on screen. */
body.browser-streamed #browser-send-menu { right: auto; left: 0; }

/* ── Hearth Shell local engine (body.browser-shelled) ──
   The page renders in a native BrowserView the shell app floats over the
   stage, so the chrome that only makes sense for the proxy/stream engines
   hides: the adblock toggle (it drives the proxy's server-side stripping — a
   dead no-op against a native view, which has Ghostery in-session instead).
   Back/forward/reload/URL bar/bookmarks — and the tab strip, which drives a
   per-tab BrowserView keyed by tab id — all stay: they drive the native
   view(s) over IPC. So does the autofill key: the shell fills saved logins
   into the native view over `hb:fill` (see fillLogin's 'shell' branch). */
body.browser-shelled #browser-adblock-toggle { display: none !important; }
body.browser-shelled #web-browser-frame { background: #0a0b10; }

/* ── Shell toolbar slim-down ────────────────────────────────────────────────
   The bar had grown past what fits comfortably, and several buttons are inert
   on this engine. Everything here is scoped to body.browser-shelled ON PURPOSE:
   the desktop-web bar is the working model and must not change.
     · #browser-diagnose has NO web-tier handler at all (its only wiring lives
       in the desktop-Electron block, which early-returns on web).
   The rest still work — they move into the "…" menu, which clicks these very
   nodes, so they must stay in the DOM and merely be invisible. */
/* Dropped on the shell at Rober's request (2026-08-30), each for a reason:
     · #browser-collapse   — the shell has real window chrome; hiding Hearth's
                             own bar on top of that is redundant.
     · #browser-fullscreen — hearthToggleImmersive only restyles the web
                             document, which does nothing visible inside the
                             native shell window.
     · #browser-popout     — not just redundant, BROKEN here: the second window
                             boots the shell engine but the BrowserViews stay
                             attached to the original window, so the popout is
                             empty chrome. */
body.browser-shelled #browser-collapse,
body.browser-shelled #browser-fullscreen,
body.browser-shelled #browser-popout,
body.browser-shelled #browser-diagnose,
body.browser-shelled #browser-history,
body.browser-shelled #browser-bookmarks-manage,
body.browser-shelled #browser-copy,
body.browser-shelled #browser-external { display: none !important; }

/* The two shell-only controls. Hidden everywhere else so no other tier grows a
   VPN pill it cannot honour or a menu whose rows are already on the bar. */
#browser-vpn, #browser-overflow { display: none; }
body.browser-shelled #browser-vpn,
body.browser-shelled #browser-overflow { display: inline-flex; }

/* VPN pill states live with the painted toolbar icons ("VPN pill" under
   "Browser chrome polish"). They used to be colours set here, which the later
   `#view-browser #browser-bar .iconbtn { color }` out-ranked — every state
   rendered identically. */

/* Download-the-app button (web only): hidden inside the shell itself and on
   the desktop Electron app — it exists to move a plain-browser user INTO the
   shell, nowhere else. body.hearth-shell is set by app.js on bridge detect. */
body:not(.hearth-web) #btn-shell-download,
body.hearth-shell #btn-shell-download { display: none !important; }

/* Frameless shell window chrome. The shell app has no OS title bar; the
   topbar (already -webkit-app-region: drag for the desktop app) doubles as
   it. Re-show the desktop .window-controls that body.hearth-web hides — the
   shell routes them over IPC — and on mac just clear the native traffic
   lights, which sit inset over the topbar's left edge. */
body.shell-frameless .window-controls { display: flex !important; }
/* …and the buttons themselves: body.hearth-web .winbtn nukes every winbtn
   (incl. the LOCK screen's — which is why the sign-in had no – / ✕). */
body.shell-frameless .winbtn { display: inline-flex !important; }
body.shell-mac .topbar { padding-left: 84px; }

/* Overlays opt OUT of the topbar's window-drag region. Electron resolves
   -webkit-app-region by page geometry, not by what is painted on top: a drag
   rect stays a drag rect under any overlay that doesn't say no-drag, so in the
   shell every control an overlay puts over the topbar's strip was dead — the
   click became a window drag. That is how the bundle viewer's ×, "Open in
   Videos", the video player's × and the popout header all stopped responding
   on the desktop app while working in a browser. Every full-screen overlay
   here is display:none when closed, so this only applies while one is up.
   NOT #privacy-shield / .bg-glow: those stay displayed, and no-drag on them
   would take window dragging away for good. A new full-screen overlay goes
   in this list. */
.steam-switch-overlay,
.detail,
.modal,
.media-prompt-overlay,
.sp-overlay,
.torrent-lightbox,
.itch-provider-overlay,
.webgame-warn-overlay,
#hearth-popout-splash,
.bundle-modal-scrim,
.bundle-viewer-scrim,
.drop-overlay,
.hentai-picker-overlay,
.hentai-dialog-overlay,
.mini-menu-backdrop { -webkit-app-region: no-drag; }

/* Grab lip: a slim always-there drag strip across the very top of the
   frameless window, so the window is movable even from screens with no
   topbar (lock/sign-in) and above the topbar icons. Sits over everything;
   6px is enough to grab without stealing clicks from real controls. */
body.shell-frameless .shell-drag-lip,
body.shell-mac .shell-drag-lip {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 6px;
  z-index: 13000;
  -webkit-app-region: drag;
}

/* Shell update card (.shell-update-ribbon): renderer/lock/lock.css */

/* Scroll-speed popover — same shell as #browser-send-menu, with a slider. The
   control only exists for the streamed engine (the wheel normalizer that reads it
   lives in the neko embed), so it is hidden otherwise rather than being dead UI. */
#browser-scroll-wrap { display: none; }
body.browser-streamed #browser-scroll-wrap { display: block; }
#browser-scroll-menu {
  position: absolute;
  top: calc(100% + 4px);
  /* Anchored to the RIGHT: this control sits near the right end of the browser bar,
     so a left-anchored panel opens straight off the screen edge (the readout, hint
     and Reset were all clipped). JS clamps it further on open for narrow windows. */
  right: 0;
  max-width: calc(100vw - 16px);
  background: #1a1d24;
  border: 1px solid #2a2d36;
  border-radius: 6px;
  box-shadow: 0 10px 30px rgba(0,0,0,.5);
  padding: 10px;
  z-index: 200;
  width: 216px;
}
#browser-scroll-menu .bsm-row { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
#browser-scroll-menu .bsm-title { font-size: 12px; color: var(--text, #e8e8f0); }
#browser-scroll-menu #browser-scroll-val { font-size: 12px; font-variant-numeric: tabular-nums; color: var(--accent, #a78bfa); }
#browser-scroll-menu input[type="range"] { width: 100%; margin: 8px 0 2px; accent-color: var(--accent, #a78bfa); cursor: pointer; }
#browser-scroll-menu input[type="range"]:focus-visible { outline: 2px solid rgba(167,139,250,.7); outline-offset: 2px; }
#browser-scroll-menu .bsm-row2 { margin-top: 10px; padding-top: 10px; border-top: 1px solid rgba(255,255,255,.07); }
#browser-scroll-menu .bsm-key {
  font-size: 9px; letter-spacing: .02em; color: #8a8f9c; padding: 1px 4px; margin-left: 4px;
  border: 1px solid var(--border, #2a2d36); border-radius: 4px; white-space: nowrap;
}
#browser-scroll-menu #browser-zoom-val,
#browser-scroll-menu #browser-barsize-val { font-size: 12px; font-variant-numeric: tabular-nums; color: var(--accent, #a78bfa); }
#browser-scroll-menu .bsm-hint { font-size: 10px; line-height: 1.35; color: #8a8f9c; }
#browser-scroll-menu .bsm-reset {
  margin-top: 8px; width: 100%; padding: 4px 6px; font-size: 11px; cursor: pointer;
  color: var(--text, #e8e8f0); background: rgba(255,255,255,.04);
  border: 1px solid var(--border, #2a2d36); border-radius: 5px;
  transition: background .12s ease, border-color .12s ease;
}
#browser-scroll-menu .bsm-reset:hover { background: rgba(167,139,250,.15); border-color: rgba(167,139,250,.5); }
#browser-scroll-menu .bsm-reset:focus-visible { outline: 2px solid rgba(167,139,250,.7); outline-offset: 1px; }

/* ── UI size — user-adjustable zoom for the browser chrome (web tier). The
   whole chrome is fixed-px, so a single zoom scales the tab strip, URL bar
   and bookmark bar together; the flex column re-lays the content below.
   Driven by the "Aa" dropdown slider in the bar (--wb-ui-scale on <body>). */
body.hearth-web #browser-tabbar,
body.hearth-web #browser-bar,
body.hearth-web #browser-bookmarks { zoom: var(--wb-ui-scale, 1); }

#browser-uiscale-wrap { position: relative; flex-shrink: 0; }
#browser-uiscale-menu {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  max-width: calc(100vw - 16px);
  background: #1a1d24;
  border: 1px solid #2a2d36;
  border-radius: 8px;
  box-shadow: 0 10px 30px rgba(0,0,0,.5);
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: 200;
  width: 210px;
}
#browser-uiscale-menu.hidden { display: none; }
#browser-uiscale-menu .uis-head {
  display: flex; align-items: center; justify-content: space-between;
  font-size: 12px; color: var(--text, #e8e8f0); font-weight: 600;
}
#browser-uiscale-menu .uis-head span:last-child {
  color: var(--accent, #a78bfa); font-variant-numeric: tabular-nums; font-weight: 700;
}
#browser-uiscale-menu input[type="range"] {
  width: 100%; margin: 0; accent-color: var(--accent, #a78bfa); cursor: pointer;
}
#browser-uiscale-menu .uis-reset {
  background: rgba(255,255,255,.04);
  border: 1px solid var(--border, #2a2d36);
  color: var(--text, #e8e8f0);
  border-radius: 6px;
  font-size: 11.5px;
  padding: 5px 8px;
  cursor: pointer;
  font-family: inherit;
  transition: background .12s, border-color .12s, opacity .12s;
}
#browser-uiscale-menu .uis-reset:hover:not(:disabled) { background: rgba(167,139,250,.15); border-color: rgba(167,139,250,.5); }
#browser-uiscale-menu .uis-reset:disabled { opacity: .4; cursor: default; }

/* Collapse the browser bar entirely — "just the browser". The slim restore
   pill lives inside #view-browser, so it's hidden when the tab isn't active. */
body.browser-bar-collapsed #browser-bar,
body.browser-bar-collapsed #browser-tabbar,
body.browser-bar-collapsed #browser-bookmarks { display: none !important; }
#browser-bar-restore {
  display: none;
  position: fixed; top: 0; left: 50%; transform: translateX(-50%);
  z-index: 2147483000;
  width: 56px; height: 15px; padding: 0;
  align-items: center; justify-content: center;
  border: 0; border-radius: 0 0 10px 10px;
  background: rgba(16,18,26,.5); color: #c7cad4;
  cursor: pointer; opacity: .28;
  transition: opacity .14s ease, background .14s ease, height .14s ease;
}
body.browser-bar-collapsed #browser-bar-restore { display: flex; }
#browser-bar-restore:hover { opacity: 1; height: 20px; background: rgba(30,33,45,.96); color: #fff; }
#web-browser-frame {
  position: absolute; inset: 0;
  width: 100%; height: 100%; border: 0; background: #fff;
}
#web-browser-fallback {
  position: absolute; inset: 0;
  display: none; flex-direction: column; align-items: center; justify-content: center;
  gap: 14px; text-align: center; padding: 40px;
  background: var(--bg, #0a0b10);
}
#web-browser-fallback.show { display: flex; }
#web-browser-fallback svg { color: var(--text-mute, #8b8f9c); opacity: .7; }
#web-browser-fallback h3 { margin: 0; font-size: 17px; color: var(--text, #e8e8f0); }
#web-browser-fallback p { margin: 0; max-width: 460px; color: var(--text-mute, #8b8f9c); font-size: 13px; line-height: 1.55; }
#web-browser-fallback code { background: rgba(255,255,255,.06); padding: 1px 6px; border-radius: 4px; font-size: 12px; }
#web-browser-fallback .wb-open { margin-top: 4px; }

/* Slim notice when a page's own scripts navigate the frame off the proxy
   (it may render fine, so don't cover the stage — just offer the way out). */
#web-browser-escape-banner {
  position: absolute; top: 10px; left: 50%; transform: translateX(-50%);
  display: none; align-items: center; gap: 10px;
  max-width: min(92%, 720px);
  padding: 8px 12px;
  background: rgba(20,22,28,.96);
  border: 1px solid rgba(167,139,250,.45);
  border-radius: 10px;
  box-shadow: 0 8px 28px rgba(0,0,0,.5);
  color: var(--text, #e8e8f0); font-size: 12.5px;
  z-index: 5;
}
#web-browser-escape-banner.show { display: flex; }
#web-browser-escape-banner span { min-width: 0; }


/* ═══════════ Web browser v2 (desktop web tier) — start page, Scramjet frame,
   URL suggestions, saved-login autofill, passwords vault ═══════════ */

/* Stage layers (absolute-stacked inside #web-browser-stage; JS toggles). */
#web-browser-home {
  position: absolute; inset: 0;
  display: none;
  overflow-y: auto;
  /* "Hearthside" tokens — warm lodge at night, ember accents (start page only). */
  --wbh-bg: #0d0a0c;
  --wbh-ember: #ff9a3c;
  --wbh-ember-hi: #ffc77a;
  --wbh-text: #f4ebe1;
  --wbh-dim: #baa996;
  --wbh-mute: #83766a;
  --wbh-line: rgba(255, 206, 160, .09);
  --wbh-line-hi: rgba(255, 190, 130, .22);
  --wbh-surface: rgba(255, 228, 196, .035);
  --wbh-well: rgba(8, 6, 7, .55);
  color: var(--wbh-text);
  background:
    radial-gradient(1100px 520px at 60% 0%, rgba(255, 128, 40, .10), transparent 65%),
    radial-gradient(900px 600px at 10% 110%, rgba(140, 60, 20, .10), transparent 60%),
    var(--wbh-bg);
}
#web-scram-wrap { position: absolute; inset: 0; display: none; }
#web-scram-frame { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; background: #fff; }

/* ── Start page ── */

/* Hero: the painted lodge, the fire glowing through it, the Hearth mark on top. */
.wbh-hero {
  position: relative; isolation: isolate;
  min-height: clamp(300px, 46vh, 440px);
  display: flex; align-items: flex-end;
}
.wbh-hero-art { position: absolute; inset: 0; overflow: hidden; z-index: -1; }
.wbh-hero-img {
  width: 100%; height: 100%;
  object-fit: cover; object-position: 64% 40%;
  opacity: 0; transform: scale(1.05);
  transition: opacity .9s ease, transform 2.2s cubic-bezier(.2, .8, .2, 1);
}
.wbh-hero-img.in { opacity: 1; transform: none; }
.wbh-hero-art::before { /* firelight breathing over the painting */
  content: ''; position: absolute; inset: 0;
  background: radial-gradient(26% 42% at 64% 52%, rgba(255, 140, 40, .34), transparent 70%);
  mix-blend-mode: screen;
  animation: wbh-flicker 3.4s ease-in-out infinite;
}
.wbh-hero-art::after {
  content: ''; position: absolute; inset: 0;
  background:
    linear-gradient(90deg, rgba(13, 10, 12, .94) 0%, rgba(13, 10, 12, .62) 34%, rgba(13, 10, 12, .08) 66%, rgba(13, 10, 12, .25) 100%),
    linear-gradient(180deg, rgba(13, 10, 12, .35) 0%, rgba(13, 10, 12, 0) 30%, rgba(13, 10, 12, .55) 72%, var(--wbh-bg) 100%);
}
@keyframes wbh-flicker {
  0%, 100% { opacity: .75; } 18% { opacity: 1; } 34% { opacity: .82; } 52% { opacity: .95; } 71% { opacity: .7; } 86% { opacity: .92; }
}
.wbh-embers { position: absolute; left: 50%; width: 30%; top: 0; bottom: 0; pointer-events: none; }
.wbh-embers i {
  position: absolute; bottom: 38%; left: var(--x);
  width: 2px; height: calc(var(--s) * 2.4);
  border-radius: 2px;
  background: linear-gradient(to top, rgba(255, 120, 30, 0), #ffb454 60%, #fff0c8);
  box-shadow: 0 0 8px 1px rgba(255, 140, 40, .65);
  opacity: 0;
  animation: wbh-rise var(--d) linear infinite;
  animation-delay: var(--delay);
}
@keyframes wbh-rise {
  0% { transform: translate(0, 0) rotate(-6deg); opacity: 0; }
  10% { opacity: .95; }
  55% { transform: translate(14px, -150px) rotate(8deg); opacity: .7; }
  100% { transform: translate(-10px, -300px) rotate(-4deg); opacity: 0; }
}
.wbh-hero-body {
  width: 100%; max-width: 1180px; margin: 0 auto;
  padding: 56px 32px 30px;
}
.wbh-brand { display: flex; align-items: center; gap: 22px; }
.wbh-mark { flex: 0 0 auto; width: 104px; height: 107px; position: relative; }
.wbh-mark::before {
  content: ''; position: absolute; inset: 18% 8% -6%;
  background: radial-gradient(closest-side, rgba(255, 140, 40, .55), transparent);
  filter: blur(14px);
  animation: wbh-flicker 3.4s ease-in-out infinite reverse;
}
.wbh-mark img {
  position: relative; width: 100%; height: 100%; object-fit: contain;
  filter: drop-shadow(0 10px 22px rgba(0, 0, 0, .55));
  transition: transform .35s cubic-bezier(.2, .8, .2, 1);
}
.wbh-brand:hover .wbh-mark img { transform: translateY(-3px) rotate(-3deg) scale(1.03); }
.wbh-brand-txt { min-width: 0; }
.wbh-greet {
  font-size: 12px; font-weight: 700; letter-spacing: .2em; text-transform: uppercase;
  color: var(--wbh-ember-hi);
  text-shadow: 0 0 18px rgba(255, 140, 40, .45);
}
.wbh-word {
  margin: 2px 0 4px;
  font-size: 46px; line-height: 1.02; font-weight: 800; letter-spacing: -.02em;
  background: linear-gradient(180deg, #fff8ee 10%, #ffd49a 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 2px 14px rgba(0, 0, 0, .5));
}
.wbh-tag { font-size: 14px; color: var(--wbh-dim); }

.wbh-find {
  display: flex; align-items: center; gap: 12px;
  max-width: 640px; height: 56px; margin-top: 26px;
  padding: 0 10px 0 16px;
  background: rgba(20, 14, 13, .66);
  -webkit-backdrop-filter: blur(16px) saturate(1.2); backdrop-filter: blur(16px) saturate(1.2);
  border: 1px solid rgba(255, 206, 160, .16);
  border-radius: 17px;
  box-shadow: 0 16px 40px rgba(0, 0, 0, .45), inset 0 1px 0 rgba(255, 236, 210, .06);
  transition: border-color .16s ease, box-shadow .16s ease, background .16s ease;
}
.wbh-find:focus-within {
  border-color: rgba(255, 154, 60, .6);
  background: rgba(24, 16, 14, .8);
  box-shadow: 0 16px 40px rgba(0, 0, 0, .45), 0 0 0 4px rgba(255, 154, 60, .14);
}
.wbh-find-ico { width: 24px; height: 24px; flex: 0 0 auto; }
.wbh-find input {
  flex: 1; min-width: 0; height: 100%;
  background: transparent; border: 0; outline: none;
  color: var(--wbh-text); font: inherit; font-size: 16px;
}
.wbh-find input::placeholder { color: var(--wbh-mute); }
.wbh-find .wbh-find-x {
  display: none; flex: 0 0 auto;
  width: 36px; height: 36px; border-radius: 10px;
  background: transparent; border: 0; color: var(--wbh-dim);
  cursor: pointer; font-size: 13px;
}
.wbh-find.has-text .wbh-find-x { display: grid; place-items: center; }
.wbh-find .wbh-find-x:hover { color: #fff; background: rgba(255, 228, 196, .08); }

/* Body */
.wbh-inner {
  container: wbh / inline-size;
  max-width: 1180px; margin: 0 auto;
  padding: 6px 32px 72px;
}
.wbh-section {
  display: flex; align-items: center; gap: 10px;
  margin: 26px 2px 14px;
}
.wbh-sec-ico { width: 26px; height: 26px; flex: 0 0 auto; filter: drop-shadow(0 2px 6px rgba(0, 0, 0, .5)); }
.wbh-sec-t {
  font-size: 12.5px; font-weight: 800; letter-spacing: .16em; text-transform: uppercase;
  color: #f0e1cd;
}
.wbh-sec-n {
  font-size: 11px; font-weight: 700; color: var(--wbh-ember-hi);
  padding: 2px 8px; border-radius: 999px;
  background: rgba(255, 154, 60, .12); border: 1px solid rgba(255, 154, 60, .22);
}
.wbh-sec-rule { flex: 1 1 auto; height: 1px; min-width: 20px; background: linear-gradient(90deg, var(--wbh-line-hi), transparent); }
.wbh-lnk {
  flex: 0 0 auto;
  font: inherit; font-size: 12px; font-weight: 600;
  color: var(--wbh-ember-hi);
  background: transparent; border: 1px solid transparent; border-radius: 9px;
  padding: 6px 10px; cursor: pointer;
  transition: background .14s ease, border-color .14s ease;
}
.wbh-lnk:hover { background: rgba(255, 154, 60, .1); border-color: rgba(255, 154, 60, .25); }

/* Tile grid — uniform columns; a short last row stretches to fill (no empty cells). */
.wbh-grid { --cols: 8; --gap: 12px; display: flex; flex-wrap: wrap; gap: var(--gap); }
@container wbh (max-width: 1060px) { .wbh-grid { --cols: 7; } }
@container wbh (max-width: 920px)  { .wbh-grid { --cols: 6; } }
@container wbh (max-width: 760px)  { .wbh-grid { --cols: 5; } }
@container wbh (max-width: 620px)  { .wbh-grid { --cols: 4; } }
@container wbh (max-width: 460px)  { .wbh-grid { --cols: 3; --gap: 10px; } }
.wbh-tile {
  --tint: #ff9a3c;
  position: relative; isolation: isolate; overflow: hidden;
  flex: 1 1 calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols));
  min-width: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  min-height: 128px; padding: 16px 10px 13px;
  font: inherit; color: inherit; text-align: center;
  background: linear-gradient(180deg, rgba(255, 232, 205, .06), rgba(255, 232, 205, .015)), rgba(18, 13, 14, .7);
  border: 1px solid var(--wbh-line);
  border-radius: 18px;
  cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255, 240, 220, .04);
  transition: transform .18s cubic-bezier(.2, .8, .2, 1), border-color .18s ease, box-shadow .18s ease;
}
.wbh-tile::before { /* the site's own colour, glowing up from behind its icon */
  content: ''; position: absolute; z-index: -1;
  left: 50%; top: 4px; width: 120px; height: 90px; transform: translateX(-50%);
  background: radial-gradient(closest-side, color-mix(in srgb, var(--tint) 55%, transparent), transparent);
  opacity: .5; filter: blur(8px);
  transition: opacity .2s ease;
}
.wbh-tile:hover {
  transform: translateY(-3px);
  border-color: color-mix(in srgb, var(--tint) 42%, rgba(255, 206, 160, .12));
  box-shadow: 0 16px 30px rgba(0, 0, 0, .42), inset 0 1px 0 rgba(255, 240, 220, .07);
}
.wbh-tile:hover::before { opacity: 1; }
.wbh-tile:active { transform: translateY(-1px) scale(.975); }
.wbh-ico {
  width: 56px; height: 56px; margin-bottom: 8px; border-radius: 16px;
  display: grid; place-items: center;
  background: var(--wbh-well);
  border: 1px solid rgba(255, 228, 196, .07);
  box-shadow: 0 6px 16px rgba(0, 0, 0, .35), inset 0 1px 0 rgba(255, 240, 220, .06);
  transition: transform .2s cubic-bezier(.2, .8, .2, 1);
}
.wbh-tile:hover .wbh-ico { transform: scale(1.06); }
.wbh-ico-in { display: grid; place-items: center; width: 32px; height: 32px; }
.wbh-ico-in img { width: 32px; height: 32px; border-radius: 7px; object-fit: contain; }
.wbh-mono {
  display: grid; place-items: center;
  width: 32px; height: 32px; border-radius: 9px;
  font-size: 16px; font-weight: 800; color: #fff;
  background: linear-gradient(160deg, hsl(var(--h, 30) 55% 52%), hsl(var(--h, 30) 50% 34%));
}
.wbh-mono[hidden] { display: none; }
.wbh-label {
  max-width: 100%;
  font-size: 12.5px; font-weight: 600; color: var(--wbh-text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.wbh-host {
  max-width: 100%;
  font-size: 10.5px; color: var(--wbh-mute);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.wbh-add { border-style: dashed; border-color: rgba(255, 206, 160, .16); background: rgba(255, 228, 196, .02); }
.wbh-add .wbh-ico { background: transparent; border: 0; box-shadow: none; }
.wbh-add .wbh-ico img { width: 44px; height: 44px; filter: drop-shadow(0 4px 10px rgba(0, 0, 0, .5)); }
.wbh-add .wbh-label { color: var(--wbh-ember-hi); }
.wbh-host.same { visibility: hidden; }

/* Folders */
.wbh-folders { display: grid; gap: 10px; }
.wbh-folder {
  border: 1px solid var(--wbh-line); border-radius: 18px;
  background: linear-gradient(180deg, rgba(255, 232, 205, .045), rgba(255, 232, 205, .012)), rgba(18, 13, 14, .6);
  overflow: hidden;
  transition: border-color .16s ease;
}
.wbh-folder:hover, .wbh-folder.open { border-color: var(--wbh-line-hi); }
.wbh-folder-head {
  width: 100%; display: flex; align-items: center; gap: 12px;
  min-height: 60px; padding: 10px 16px;
  font: inherit; color: var(--wbh-text); text-align: left;
  background: transparent; border: 0; cursor: pointer; user-select: none;
  transition: background .14s ease;
}
.wbh-folder-head:hover { background: rgba(255, 228, 196, .035); }
.wbh-folder-ico { width: 32px; height: 32px; flex: 0 0 auto; filter: drop-shadow(0 3px 8px rgba(0, 0, 0, .5)); }
.wbh-folder-name { font-size: 14.5px; font-weight: 700; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wbh-folder-count {
  flex: 0 0 auto; font-size: 11px; font-weight: 700; color: var(--wbh-dim);
  padding: 2px 8px; border-radius: 999px; background: rgba(255, 228, 196, .06);
}
.wbh-folder-peek { margin-left: auto; display: flex; padding-left: 6px; flex: 0 0 auto; }
.wbh-folder-peek + .wbh-folder-chev { margin-left: 0; }
.wbh-peek {
  width: 28px; height: 28px; margin-left: -7px; border-radius: 9px;
  display: grid; place-items: center;
  background: #16100f; border: 2px solid var(--wbh-bg);
  box-shadow: 0 2px 6px rgba(0, 0, 0, .4);
}
.wbh-peek img { width: 16px; height: 16px; border-radius: 3px; }
.wbh-peek .wbh-mono { width: 18px; height: 18px; border-radius: 5px; font-size: 10px; }
.wbh-folder-chev {
  flex: 0 0 auto; margin-left: auto; width: 28px; text-align: center;
  color: var(--wbh-mute); font-size: 20px; line-height: 1;
  transition: transform .2s ease, color .2s ease;
}
.wbh-folder.open .wbh-folder-chev { transform: rotate(90deg); color: var(--wbh-ember-hi); }
.wbh-folder-grid { display: none; padding: 4px 14px 14px; }
.wbh-folder.open .wbh-folder-grid { display: flex; animation: wbh-open .22s ease both; }
@keyframes wbh-open { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }

/* Recent + search results */
.wbh-hist-list {
  border: 1px solid var(--wbh-line); border-radius: 18px;
  background: rgba(18, 13, 14, .6);
  overflow: hidden;
}
.wbh-hist-row {
  width: 100%; display: flex; align-items: center; gap: 12px;
  min-height: 46px; padding: 8px 16px;
  font: inherit; color: inherit; text-align: left;
  background: transparent; border: 0; border-bottom: 1px solid rgba(255, 228, 196, .045);
  cursor: pointer;
  transition: background .12s ease;
}
.wbh-hist-row:last-child { border-bottom: 0; }
.wbh-hist-row:hover, .wbh-hist-row.first { background: rgba(255, 154, 60, .08); }
.wbh-fav {
  width: 28px; height: 28px; flex: 0 0 auto; border-radius: 8px;
  display: grid; place-items: center; background: var(--wbh-well);
}
.wbh-fav img { width: 16px; height: 16px; border-radius: 3px; }
.wbh-fav .wbh-mono { width: 18px; height: 18px; border-radius: 5px; font-size: 10px; }
.wbh-hist-row .wbh-t { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13.5px; color: var(--wbh-text); }
.wbh-hist-row .wbh-u { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: var(--wbh-mute); }
.wbh-hist-row .wbh-time {
  flex: 0 0 auto; font-size: 11px; font-weight: 600; color: var(--wbh-dim);
  padding: 2px 8px; border-radius: 999px; background: rgba(255, 228, 196, .05);
}
.wbh-hist-row b, .wb-suggest-row b { color: var(--accent, #a78bfa); font-weight: 700; }
#web-browser-home .wbh-hist-row b { color: var(--wbh-ember-hi); }
.wbh-go {
  width: 100%; display: flex; align-items: center; gap: 12px;
  min-height: 54px; margin-top: 22px; padding: 10px 16px;
  font: inherit; font-size: 14px; color: var(--wbh-dim); text-align: left;
  background: rgba(18, 13, 14, .6);
  border: 1px solid var(--wbh-line); border-radius: 16px;
  cursor: pointer; transition: border-color .14s ease, background .14s ease;
}
.wbh-go b { color: var(--wbh-text); font-weight: 700; }
.wbh-go img { width: 28px; height: 28px; flex: 0 0 auto; }
.wbh-go span { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wbh-go:hover, .wbh-go.primary { border-color: rgba(255, 154, 60, .45); background: rgba(255, 154, 60, .08); }
.wbh-go kbd {
  flex: 0 0 auto; font: inherit; font-size: 11px; font-weight: 700; color: var(--wbh-ember-hi);
  padding: 3px 8px; border-radius: 7px; border: 1px solid rgba(255, 154, 60, .35);
}
.wbh-empty { padding: 30px; text-align: center; color: var(--wbh-mute); font-size: 13.5px; }
.wbh-engine-chip {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  margin-top: 34px; padding: 14px 16px;
  border: 1px solid rgba(255, 154, 60, .22);
  border-radius: 18px;
  background: linear-gradient(90deg, rgba(255, 154, 60, .09), rgba(255, 154, 60, .02));
  font-size: 13px; color: var(--wbh-dim);
}
.wbh-engine-chip img { width: 34px; height: 34px; flex: 0 0 auto; }
.wbh-engine-chip span { flex: 1 1 240px; }

/* Keyboard focus */
.wbh-tile:focus-visible, .wbh-folder-head:focus-visible, .wbh-hist-row:focus-visible,
.wbh-lnk:focus-visible, .wbh-go:focus-visible, .wbh-find-x:focus-visible {
  outline: 2px solid var(--wbh-ember); outline-offset: 2px;
}
.wbh-hist-row:focus-visible, .wbh-folder-head:focus-visible { outline-offset: -2px; }

/* Phone */
@media (max-width: 640px) {
  .wbh-hero { min-height: 300px; }
  .wbh-hero-img { object-position: 66% 45%; }
  .wbh-hero-art::after {
    background: linear-gradient(180deg, rgba(13, 10, 12, .3) 0%, rgba(13, 10, 12, .35) 40%, rgba(13, 10, 12, .85) 78%, var(--wbh-bg) 100%);
  }
  .wbh-embers { left: 40%; width: 45%; }
  .wbh-hero-body { padding: 40px 16px 20px; }
  .wbh-brand { gap: 14px; }
  .wbh-mark { width: 72px; height: 74px; }
  .wbh-word { font-size: 34px; }
  .wbh-tag { font-size: 13px; }
  .wbh-find { height: 52px; margin-top: 18px; }
  .wbh-inner { padding: 4px 16px 56px; }
  .wbh-tile { min-height: 116px; padding: 14px 6px 11px; }
  .wbh-ico { width: 50px; height: 50px; }
  .wbh-folder-peek { display: none; }
  .wbh-folder-peek + .wbh-folder-chev { margin-left: auto; }
  .wbh-hist-row .wbh-u { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .wbh-embers { display: none; }
  .wbh-hero-art::before, .wbh-mark::before { animation: none; }
  .wbh-hero-img { transition: none; transform: none; }
  .wbh-tile, .wbh-ico, .wbh-mark img, .wbh-folder-chev { transition: none; }
  .wbh-folder.open .wbh-folder-grid { animation: none; }
}

/* ── URL-bar suggestions ── */
#browser-url-suggest {
  position: absolute;
  top: calc(100% + 6px); left: 0; right: 0;
  z-index: 210;
  background: #14161f;
  border: 1px solid var(--border-strong, #3a4159);
  border-radius: 10px;
  box-shadow: 0 18px 50px rgba(0,0,0,.6);
  overflow-y: auto; max-height: 420px;
  padding: 4px;
  /* Override the desktop block (4929): it caps at 720px + monospace, which on a
     wide window leaves the dropdown narrower than the URL bar and renders titles
     in mono. Span the bar and use the UI font. */
  max-width: none;
  font-family: var(--font-ui, system-ui, sans-serif);
}
.wb-suggest-row {
  display: flex; align-items: center; gap: 10px;
  padding: 7px 10px;
  border-radius: 7px;
  cursor: pointer;
  font-size: 12.5px;
}
.wb-suggest-row:hover, .wb-suggest-row.sel { background: rgba(167,139,250,.16); }
.wb-suggest-row .wbs-ic { width: 16px; height: 16px; flex: 0 0 auto; display: grid; place-items: center; color: var(--text-dim, #9aa3b8); }
.wb-suggest-row .wbs-ic img { width: 14px; height: 14px; }
.wb-suggest-row .wbs-t { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text, #e8e8f0); }
.wb-suggest-row .wbs-u { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-mute, #5d6678); font-size: 11.5px; }
.wb-suggest-row .wbs-tag { flex: 0 0 auto; color: var(--accent, #a78bfa); font-size: 11px; }
.wb-suggest-row.top .wbs-t { font-weight: 700; color: #fff; }

/* ── Saved-login autofill ── */
#browser-autofill-wrap { position: relative; display: flex; flex-shrink: 0; }
#browser-autofill.has-login { color: #c4b5fd; border-color: rgba(167,139,250,.5); background: rgba(167,139,250,.15); }
#browser-autofill-menu {
  /* Sits over #web-browser-stage (positioned, later in the DOM) - without a
     z-index the open menu painted BEHIND the stream/scram stage = invisible.
     Same tier as #browser-send-menu. */
  z-index: 200;
  max-height: min(420px, 60vh); overflow: auto;
  position: absolute;
  top: calc(100% + 4px); right: 0;
  background: #1a1d24;
  border: 1px solid #2a2d36;
  border-radius: 6px;
  box-shadow: 0 10px 30px rgba(0,0,0,.5);
  padding: 4px;
  display: flex; flex-direction: column; gap: 1px;
  z-index: 210;
  min-width: 210px; max-width: 320px;
}
#browser-autofill-menu.hidden { display: none; }
#browser-autofill-menu button {
  background: transparent; border: none;
  color: rgba(232,232,240,.88);
  font-size: 12px; padding: 6px 10px;
  text-align: left; border-radius: 4px;
  cursor: pointer; font-family: inherit;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
#browser-autofill-menu button:hover { background: rgba(167,139,250,.18); color: #fff; }
#browser-autofill-menu button.muted-row { color: var(--text-mute, #5d6678); cursor: default; }
#browser-autofill-menu button.muted-row:hover { background: transparent; color: var(--text-mute, #5d6678); }
#browser-autofill-menu button.vault-row { border-top: 1px solid rgba(255,255,255,.07); margin-top: 3px; padding-top: 8px; color: var(--accent, #a78bfa); }

/* Engine toggle (native ⇄ streamed signed-in browser). */
#browser-engine-toggle.on { color: #c4b5fd; border-color: rgba(167,139,250,.5); background: rgba(167,139,250,.15); }

/* ── Passwords vault modal rows ── */
.wv-row {
  display: flex; align-items: center; gap: 11px;
  padding: 8px 12px;
  border-bottom: 1px solid rgba(255,255,255,.05);
}
.wv-row:hover { background: rgba(167,139,250,.07); }
.wv-row img { width: 16px; height: 16px; flex: 0 0 auto; }
.wv-row .wv-host { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; color: var(--text, #e8e8f0); }
.wv-row .wv-user { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11.5px; color: var(--text-mute, #5d6678); }
.wv-row .wv-actions { flex: 0 0 auto; display: flex; gap: 5px; opacity: .55; transition: opacity .12s ease; }
.wv-row:hover .wv-actions { opacity: 1; }

/* ── Web browser v2 — interaction states (drag/reorder, toolbar) ── */
/* Star turns accent when the current page is bookmarked. */
#browser-bookmark.on { color: #f5c451; border-color: rgba(245,196,81,.5); background: rgba(245,196,81,.14); }
/* Favicon in the URL bar's left slot (idle); hidden while the spinner shows. */
#browser-url-favicon { position: absolute; left: 9px; top: 50%; width: 14px; height: 14px; margin-top: -7px; border-radius: 3px; pointer-events: none; }
#browser-url-wrap.loading #browser-url-favicon { display: none !important; }
/* Tab drag-to-reorder feedback. */
.browser-tab.dragging { opacity: .45; }
.browser-tab.drag-over { box-shadow: inset 2px 0 0 var(--accent, #a78bfa); }

/* Privacy popover on web: the READ views (mark private, hidden-games list,
   blacklist) work, but the SCHEDULE row (Windows Task Scheduler) and the
   HIDDEN-FOLDERS panel (UAC OS search-index exclusion) are host-only stubs —
   hide just those two sections so every remaining control actually does something. */
body.hearth-web .privacy-pop-section:has(#privacy-pop-sched-status),
body.hearth-web .privacy-pop-section:has(#privacy-pop-open-folders) { display: none !important; }

/* ── Web browser v2 — progress bar + mini context menu ── */
#web-browser-progress {
  position: absolute; top: 0; left: 0; height: 2px; width: 0;
  background: linear-gradient(90deg, var(--accent, #a78bfa), var(--accent-2, #06b6d4));
  box-shadow: 0 0 8px rgba(167,139,250,.6);
  opacity: 0; z-index: 6; pointer-events: none;
  transition: width .32s ease, opacity .25s ease;
}
#web-browser-progress.active { opacity: 1; }
.web-mini-menu {
  position: fixed; z-index: 2147483400;
  min-width: 176px; padding: 4px;
  background: #14161f;
  border: 1px solid var(--border-strong, #3a4159);
  border-radius: 8px;
  box-shadow: 0 14px 40px rgba(0,0,0,.6);
  display: flex; flex-direction: column; gap: 1px;
}
.web-mini-menu button {
  background: transparent; border: 0;
  color: var(--text, #e8e8f0);
  font: inherit; font-size: 12.5px; text-align: left;
  padding: 7px 11px; border-radius: 5px; cursor: pointer;
}
.web-mini-menu button:hover:not(:disabled) { background: rgba(167,139,250,.18); }
.web-mini-menu button:disabled { color: var(--text-mute, #5d6678); cursor: default; }

/* ═══════════ Web browser v2 — visual refinement pass (CSS only) ═══════════ */
/* Shared browser-chrome selectors (.browser-tab, .iconbtn, .browser-bookmark) are
   scoped to body.hearth-web so ONLY the web build is refined — the native Electron
   browser is left exactly as-is. The .wbh-* / .web-mini-menu rules are web-only by
   nature (those elements exist only in the web setupWebBrowser). */

/* Tabs: smoother state transitions + a clearer "selected" read (accent top edge),
   and reveal the close button on hover/active only so the strip stays clean. */
body.hearth-web .browser-tab {
  transition: background .13s ease, border-color .13s ease, box-shadow .13s ease;
  position: relative;
}
body.hearth-web .browser-tab.active {
  box-shadow: inset 0 2px 0 var(--accent, #a78bfa);
}
body.hearth-web .browser-tab-favicon { border-radius: 3px; }
body.hearth-web .browser-tab-close {
  opacity: 0;
  transition: opacity .12s ease, background .12s ease, color .12s ease;
}
body.hearth-web .browser-tab:hover .browser-tab-close,
body.hearth-web .browser-tab.active .browser-tab-close { opacity: 1; }
body.hearth-web .browser-tab.dragging { cursor: grabbing; }

/* Toolbar + bookmark buttons: consistent hover lift and a keyboard focus ring
   (accessibility — the app never had visible focus states on these). */
body.hearth-web .iconbtn { transition: background .12s ease, border-color .12s ease, color .12s ease; }
body.hearth-web #browser-bar .iconbtn:focus-visible,
body.hearth-web #browser-newtab:focus-visible,
body.hearth-web #browser-url:focus-visible {
  outline: 2px solid rgba(167,139,250,.7);
  outline-offset: 1px;
}
body.hearth-web .browser-bookmark { transition: color .12s ease, background .12s ease, transform .1s ease; border-radius: 6px; }
body.hearth-web .browser-bookmark:active { transform: scale(.92); }

/* URL suggestions + mini menus: gentle fade-in so they don't pop harshly. */
@keyframes wb-pop-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }
#browser-url-suggest, .web-mini-menu { animation: wb-pop-in .12s ease both; }

/* Streamed-browser "connecting…" overlay — covers the black frame while Selkies
   boots so it doesn't read as a failure. Web-only element (setupWebBrowser). */
#web-browser-connecting {
  position: absolute; inset: 0;
  display: none; flex-direction: column; align-items: center; justify-content: center;
  gap: 14px; z-index: 4;
  background:
    radial-gradient(700px 380px at 50% 42%, rgba(124,58,237,.14), transparent 65%),
    var(--bg, #0a0b10);
  color: var(--text, #e8e8f0);
}
#web-browser-connecting.show { display: flex; }
#web-browser-connecting .wbc-spinner {
  width: 34px; height: 34px; border-radius: 50%;
  border: 3px solid rgba(167,139,250,.22);
  border-top-color: var(--accent, #a78bfa);
  animation: hearth-url-spin .8s linear infinite;
}
#web-browser-connecting .wbc-title { font-size: 15px; font-weight: 600; }
#web-browser-connecting .wbc-sub { font-size: 12.5px; color: var(--text-dim, #9aa3b8); }

/* ── Hosted-browser health panel ──────────────────────────────────────────
   The honest end-state of the connecting overlay: when the streamed browser
   isn't coming back, this says so and offers the way out, instead of a spinner
   that spins forever. Last layer in the stage, so it sits above the frame, the
   connecting overlay (z 4) and the escape banner (z 5). */
#web-browser-health {
  position: absolute; inset: 0;
  display: none; align-items: center; justify-content: center;
  padding: 24px;
  z-index: 6;
  background:
    radial-gradient(700px 380px at 50% 42%, rgba(124,58,237,.14), transparent 65%),
    var(--bg, #0a0b10);
}
#web-browser-health.show { display: flex; animation: wbhx-fade .16s ease both; }
@keyframes wbhx-fade { from { opacity: 0; } to { opacity: 1; } }
.wbhx-card {
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  width: 100%; max-width: 460px;
  padding: 28px 26px 22px;
  text-align: center;
  background: var(--surface, #161924);
  border: 1px solid var(--border, #262b3c);
  border-radius: var(--radius, 14px);
  box-shadow: var(--shadow-card, 0 10px 30px rgba(0,0,0,.35));
  animation: wbhx-rise .18s cubic-bezier(.2,.8,.2,1) both;
}
@keyframes wbhx-rise { from { transform: translateY(6px) scale(.985); } to { transform: none; } }
.wbhx-icon { display: flex; align-items: center; justify-content: center; height: 40px; color: var(--text-mute, #5d6678); }
.wbhx-icon.warn { color: var(--accent-warm, #f59e0b); }
.wbhx-icon.busy { color: var(--accent, #a78bfa); }
.wbhx-icon.good { color: var(--accent-good, #10b981); }
.wbhx-spin {
  width: 34px; height: 34px; border-radius: 50%;
  border: 3px solid rgba(167,139,250,.22);
  border-top-color: var(--accent, #a78bfa);
  animation: hearth-url-spin .8s linear infinite;
}
#web-browser-health h3 { margin: 0; font-size: 17px; font-weight: 600; color: var(--text, #e7ecf3); line-height: 1.35; }
#web-browser-health p { margin: 0; font-size: 13px; line-height: 1.55; color: var(--text-dim, #9aa3b8); }
/* Elapsed-time bar for a restart in flight — real progress, not a barber pole. */
.wbhx-bar {
  width: 100%; height: 4px; margin-top: 2px;
  background: var(--surface-3, #242a3d);
  border-radius: 999px; overflow: hidden;
}
.wbhx-bar > i {
  display: block; height: 100%; width: 0;
  background: var(--grad-cool, linear-gradient(135deg, #7c3aed 0%, #06b6d4 100%));
  border-radius: 999px;
  transition: width .25s linear;
}
.wbhx-actions { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; margin-top: 4px; }
/* Technical truth, deliberately quiet — the headline stays in the owner's terms. */
.wbhx-detail {
  max-width: 100%;
  font-size: 11px; line-height: 1.5;
  color: var(--text-mute, #5d6678);
  word-break: break-word;
  border-top: 1px solid var(--border, #262b3c);
  padding-top: 10px; margin-top: 2px;
  width: 100%;
}
/* Phone widths (and a narrow split view): stack the actions full-width so the
   primary is a comfortable target and nothing wraps mid-label. */
@media (max-width: 460px) {
  #web-browser-health { padding: 14px; }
  .wbhx-card { padding: 22px 18px 18px; gap: 10px; }
  #web-browser-health h3 { font-size: 16px; }
  .wbhx-actions { flex-direction: column; align-self: stretch; }
  .wbhx-actions .btn { width: 100%; justify-content: center; }
}

/* Slim twin: picture fine, CONTROLS dead. Same slot as the escape banner (only
   one of the two is ever shown — see showControlStrip). */
#web-browser-health-strip {
  /* Centred with left/right + auto margins, NOT the left:50%/translateX trick:
     an absolutely-positioned box with only `left:50%` gets HALF the stage as its
     available width, so at phone widths this collapsed to ~194px and stacked
     four lines tall. left+right+margin auto gives it the full stage to shrink
     inside. */
  position: absolute; top: 10px; left: 10px; right: 10px;
  margin: 0 auto; width: fit-content;
  display: none; align-items: center; gap: 10px;
  max-width: min(92%, 720px);
  padding: 8px 10px 8px 12px;
  background: rgba(20,22,28,.96);
  border: 1px solid rgba(245,158,11,.45);
  border-radius: 10px;
  box-shadow: 0 8px 28px rgba(0,0,0,.5);
  color: var(--text, #e7ecf3); font-size: 12.5px;
  z-index: 5;
}
#web-browser-health-strip.show { display: flex; animation: wbhx-strip-in .16s ease both; }
@keyframes wbhx-strip-in { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
/* Shrink the message rather than letting it wrap to its own line — otherwise at
   phone widths the 7px status dot sat alone on line one. */
#web-browser-health-strip #wbhs-msg { flex: 1 1 120px; min-width: 0; }
#web-browser-health-strip .wbhs-dot {
  flex: none; width: 7px; height: 7px; border-radius: 50%;
  background: var(--accent-warm, #f59e0b);
  animation: wbhs-pulse 1.6s ease-in-out infinite;
}
@keyframes wbhs-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
#web-browser-health-strip .btn { flex: none; }
@media (max-width: 560px) {
  #web-browser-health-strip { flex-wrap: wrap; max-width: calc(100% - 20px); }
}

/* Privacy shield (web only) — covers the app the instant the window loses
   focus (⌘-tab / Alt-Tab / another window). Created by web-gated JS, so the
   desktop app never renders it. Always in the DOM at opacity 0: showing is a
   single cheap opacity flip that lands before the OS composites the
   switched-away frame. Instant on, soft fade off.

   LOOK — "Toon Hearth", the room at rest. This used to be the app icon and a
   violet→cyan gradient word floating on near-black: a surface that belonged to
   no other part of Hearth. It is now the desktop sibling of the PHONE shield
   (web/src/mobile-ui/styles.css .ps-scene/.ps-inner/.ps-logo/.ps-word) and of
   the lock card (renderer/lock/lock.css): the same cel-shaded cosy scene, the
   same chunky plum card with a 3px ink outline and hard offset shadow, the same
   cream ink-stroked wordmark. Three covers, one world.

   It shows the SAME ROOM the lock picked — app.js copies #lock-screen's
   data-scene onto .ps-scene, so the plate is already in cache and the cover
   costs no extra bytes. Unknown/missing scene falls back to nook.

   TWO RULES THIS SURFACE MUST KEEP:
   1. Fully opaque. #privacy-shield paints its own solid plum FIRST and the art
      sits on top as a child, so a scene that 404s or has not decoded still
      covers the library completely. Never give this element a translucent
      background, and never blur the live app instead (a filter over the real
      page is both expensive and readable while it resolves).
   2. Instant. Showing is one opacity flip and nothing else — no entrance
      animation on .on, no transition in (`transition: none`), no layout. The
      plate lives on a child that is in the DOM from boot, so the browser has
      fetched and rasterised it long before the first Alt-Tab.
   The scene is deliberately STATIC (the phone's drifts): this cover can sit on
   an unfocused window for hours, and a full-screen transform is not worth that.
   The mark keeps its hop — one small composited layer — so the room still
   breathes. Embers are left to the lock. */
#privacy-shield {
  position: fixed; inset: 0; z-index: 2147483000;
  display: grid; place-items: center;
  opacity: 0; pointer-events: none;
  overflow: hidden;
  background: #2a1838;            /* opaque floor — the library is behind this */
  color: #fff4e4;
  font-family: 'Hearth Fredoka', 'Nunito', ui-rounded, 'SF Pro Rounded', system-ui, sans-serif;
  transition: opacity .18s ease;
}
/* `cursor: pointer` is not decoration here: the shield dismisses itself on
   pointerdown (app.js), and a full-screen cover that looks inert is
   indistinguishable from a frozen app. */
#privacy-shield.on { opacity: 1; pointer-events: auto; transition: none; cursor: pointer; }
/* Dismissal is a whole gesture, not just its first half. The press that lifts
   the cover removes .on — which is also what was catching pointer events — so
   the mouseup and the click behind it used to land on the library and press
   whatever was under the pointer. `dismissing` keeps the (now fading, then
   invisible) layer catching events until app.js has swallowed the rest of that
   one press: a few hundred milliseconds, never longer. */
#privacy-shield.dismissing { pointer-events: auto; }

/* the room, lamps low. Scene keys mirror lock.css "SCENES". */
#privacy-shield .ps-scene {
  position: absolute; inset: 0;
  background: #2a1838 var(--ps-bg, none) 50% 55% / cover no-repeat;
  /* dimmer than the lock's .82 — the lamps are low because nobody is home —
     but not so dark the art turns to mud */
  filter: saturate(.95) brightness(.7);
}
#privacy-shield .ps-scene[data-scene="room"]     { --ps-bg: url('lock/scenes/room.webp'); }
#privacy-shield .ps-scene[data-scene="cabin"]    { --ps-bg: url('lock/scenes/cabin.webp'); }
#privacy-shield .ps-scene[data-scene="neon"]     { --ps-bg: url('lock/scenes/neon.webp'); }
#privacy-shield .ps-scene[data-scene="campfire"] { --ps-bg: url('lock/scenes/campfire.webp'); }
#privacy-shield .ps-scene[data-scene="clouds"]   { --ps-bg: url('lock/scenes/clouds.webp'); }
#privacy-shield .ps-scene[data-scene="nook"]     { --ps-bg: url('lock/scenes/nook.webp'); }
#privacy-shield .ps-scene[data-scene="gameroom"] { --ps-bg: url('lock/scenes/gameroom.webp'); }
#privacy-shield .ps-scene[data-scene="parlor"]   { --ps-bg: url('lock/scenes/parlor.webp'); }
/* plum wash + vignette, so the card reads on the bright scenes (parlor, clouds)
   as well as the dark ones, and no corner of the art competes with it */
#privacy-shield .ps-scene::after {
  content: "";
  position: absolute; inset: 0;
  background:
    radial-gradient(62% 62% at 50% 48%, rgba(27, 15, 36, .30) 0%, rgba(27, 15, 36, .66) 72%, rgba(27, 15, 36, .84) 100%),
    linear-gradient(180deg, rgba(27, 15, 36, .40) 0%, rgba(27, 15, 36, 0) 34%, rgba(27, 15, 36, 0) 66%, rgba(27, 15, 36, .46) 100%);
}
@media (max-width: 700px) {
  #privacy-shield .ps-scene { background-position: 50% 60%; }
  #privacy-shield .ps-scene[data-scene="room"]     { --ps-bg: url('lock/scenes/room-sm.webp'); }
  #privacy-shield .ps-scene[data-scene="cabin"]    { --ps-bg: url('lock/scenes/cabin-sm.webp'); }
  #privacy-shield .ps-scene[data-scene="neon"]     { --ps-bg: url('lock/scenes/neon-sm.webp'); }
  #privacy-shield .ps-scene[data-scene="campfire"] { --ps-bg: url('lock/scenes/campfire-sm.webp'); }
  #privacy-shield .ps-scene[data-scene="clouds"]   { --ps-bg: url('lock/scenes/clouds-sm.webp'); }
  #privacy-shield .ps-scene[data-scene="nook"]     { --ps-bg: url('lock/scenes/nook-sm.webp'); }
  #privacy-shield .ps-scene[data-scene="gameroom"] { --ps-bg: url('lock/scenes/gameroom-sm.webp'); }
  #privacy-shield .ps-scene[data-scene="parlor"]   { --ps-bg: url('lock/scenes/parlor-sm.webp'); }
}

/* the card — .lock-card's recipe, minus the form */
#privacy-shield .ps-inner {
  position: relative;
  display: flex; flex-direction: column; align-items: center; gap: 10px;
  width: min(360px, calc(100vw - 32px));
  box-sizing: border-box;
  padding: 26px 28px 24px;
  margin-top: 54px;               /* balances the mark poking out of the top */
  text-align: center;
  background:
    radial-gradient(120% 60% at 50% 0%, rgba(255, 180, 210, .16), transparent 60%),
    linear-gradient(180deg, #3b2350, #2e1a40);
  border: 3px solid #1b0f24;
  border-radius: 30px;
  box-shadow:
    inset 0 3px 0 rgba(255, 220, 240, .14),
    inset 0 -4px 0 rgba(0, 0, 0, .18),
    0 10px 0 #1b0f24,
    0 24px 50px rgba(20, 8, 30, .55),
    0 0 90px rgba(255, 150, 90, .14);   /* the fire's light wrapping the card */
}
/* contact shadow: the card sits IN the room instead of floating over it */
#privacy-shield .ps-inner::after {
  content: "";
  position: absolute; left: 7%; right: 7%; bottom: -30px;
  height: 40px;
  border-radius: 50%;
  background: radial-gradient(closest-side, rgba(12, 4, 18, .5), transparent 78%);
  filter: blur(7px);
  pointer-events: none;
}
#privacy-shield .ps-logo {
  width: 88px; height: 88px;
  margin: -74px 0 0;
  object-fit: contain;
  transform-origin: 50% 100%;
  filter: drop-shadow(0 5px 0 rgba(27, 15, 36, .55)) drop-shadow(0 0 18px rgba(255, 170, 80, .45));
  animation: ps-hop 4.2s cubic-bezier(.2, .8, .2, 1) 1s infinite;
}
@keyframes ps-hop {
  0%, 62%, 100% { transform: none; }
  66% { transform: scale(1.1, .88); }
  74% { transform: translateY(-14px) scale(.94, 1.08); }
  82% { transform: translateY(0) scale(1.08, .92); }
  94% { transform: none; }
}
#privacy-shield .ps-word {
  margin-top: 2px;
  font-size: 36px; font-weight: 700; line-height: 1;
  letter-spacing: .01em;
  color: #fff4e4;
  -webkit-text-stroke: 2px #1b0f24;
  paint-order: stroke fill;
  text-shadow: 0 4px 0 #1b0f24, 0 0 26px rgba(255, 170, 90, .38);
}
/* Says what the cover IS, and nothing about what is behind it. */
#privacy-shield .ps-note {
  margin: 0;
  font-size: 14px; font-weight: 600;
  color: #cbb6e6;
  text-wrap: balance;
}
@media (max-width: 480px) {
  #privacy-shield .ps-inner { padding: 22px 20px 20px; border-radius: 26px; margin-top: 44px; }
  #privacy-shield .ps-logo { width: 76px; height: 76px; margin-top: -64px; }
  #privacy-shield .ps-word { font-size: 31px; }
}
@media (max-height: 480px) {
  #privacy-shield .ps-inner { margin-top: 0; padding-top: 20px; }
  #privacy-shield .ps-logo { width: 56px; height: 56px; margin-top: 0; }
  #privacy-shield .ps-word { font-size: 28px; }
}
@media (prefers-reduced-motion: reduce) {
  #privacy-shield { transition: none; }
  #privacy-shield .ps-logo { animation: none; }
}

/* ── Auto-updater bell (topbar) + recently-updated popout ────────────────── */
.aupd-badge {
  background: linear-gradient(135deg, #10b981 0%, #06b6d4 100%);
  box-shadow: 0 2px 8px rgba(16, 185, 129, .45), 0 0 0 2px var(--bg);
}
#btn-aupd.aupd-ringing > svg { animation: aupd-ring 1.1s ease 1; transform-origin: 50% 15%; }
@keyframes aupd-ring {
  0%, 100% { transform: rotate(0); }
  15% { transform: rotate(16deg); }
  30% { transform: rotate(-13deg); }
  45% { transform: rotate(9deg); }
  60% { transform: rotate(-6deg); }
  75% { transform: rotate(3deg); }
}
.aupd-pop {
  position: fixed;
  top: 60px;
  right: 14px;
  width: 400px;
  max-height: min(72vh, 620px);
  display: flex;
  flex-direction: column;
  background: var(--bg-2);
  border: 1px solid var(--border-strong);
  border-radius: 12px;
  box-shadow: var(--shadow-lift);
  z-index: 60;
  overflow: hidden;
  -webkit-app-region: no-drag;
}
.aupd-head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 12px 14px 11px;
  border-bottom: 1px solid var(--border);
  flex: 0 0 auto;
}
.aupd-head-text { min-width: 0; }
.aupd-head h3 { margin: 0 0 2px; font-size: 14px; }
.aupd-head .btn.small { flex: 0 0 auto; }
.aupd-sub {
  display: block;
  font-size: 11.5px; color: var(--text-dim);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.aupd-list { flex: 1 1 auto; overflow-y: auto; padding: 6px; }
.aupd-row {
  display: flex; align-items: center; gap: 10px;
  width: 100%; padding: 6px 8px;
  border: 0; border-radius: 8px;
  background: transparent; color: var(--text);
  text-align: left; cursor: pointer; font: inherit;
  transition: background .15s ease;
}
.aupd-row:hover { background: var(--surface-2); }
.aupd-row:focus-visible { background: var(--surface-2); outline: 1px solid var(--accent); outline-offset: -1px; }
.aupd-row:active { background: var(--surface-3); }
.aupd-art {
  flex: 0 0 auto; width: 30px; height: 40px;
  border-radius: 6px; object-fit: cover;
  background: var(--surface-3);
  border: 1px solid var(--border);
}
.aupd-art-ph {
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 14px; font-weight: 700; color: var(--text-mute);
}
.aupd-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.aupd-title { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.aupd-ver { font-size: 11.5px; color: var(--text-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.aupd-ver b { color: var(--accent-good); font-weight: 600; }
.aupd-ver i { color: var(--accent-warm); font-style: normal; }
.aupd-side { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: 4px; }
.aupd-when { font-size: 10.5px; color: var(--text-mute); white-space: nowrap; }
.aupd-new-dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--accent-good);
  box-shadow: 0 0 6px rgba(16, 185, 129, .8);
}
.aupd-empty { margin: 0; padding: 20px 16px; font-size: 12.5px; }
@media (max-width: 640px) {
  .aupd-pop { left: 10px; right: 10px; width: auto; }
}
/* -- Beam "smooth mode" overlay (GPU/UDP fullscreen browser stream) -- */
/* (Beam smooth-mode toggle CSS removed 2026-07-20 — the ⚡ overlay is retired;
   the Browser tab's neko WebRTC stream is the smooth path now.) */

/* ─── Quick Grab modal ────────────────────────────────────────────────────── */
.grab-panel { max-width: 520px; }
.grab-input-row { display: flex; gap: 8px; margin-top: 12px; }
.grab-input-row input {
  flex: 1; min-width: 0; background: var(--bg-2, #14151d); color: var(--text, #e5e7eb);
  border: 1px solid var(--line, #262837); border-radius: 8px; padding: 9px 12px;
  font-size: 13px; outline: none; transition: border-color .15s ease;
}
.grab-input-row input:focus { border-color: var(--accent); }
.grab-error {
  margin-top: 10px; padding: 8px 10px; border-radius: 8px; font-size: 12px;
  color: #fca5a5; background: rgba(239, 68, 68, .08); border: 1px solid rgba(239, 68, 68, .25);
  overflow-wrap: anywhere;
}
.grab-title-row { display: flex; align-items: baseline; gap: 8px; margin-top: 6px; min-width: 0; }
#grab-job-title { font-weight: 600; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
#grab-job-host { font-size: 11px; flex: none; }
.grab-bar {
  height: 8px; border-radius: 999px; background: var(--bg-2, #14151d);
  border: 1px solid var(--line, #262837); overflow: hidden; margin-top: 10px; position: relative;
}
.grab-bar #grab-bar-fill {
  height: 100%; width: 0%; border-radius: 999px; background: var(--accent);
  transition: width .25s ease;
}
.grab-bar.ok #grab-bar-fill { background: var(--accent-good); }
.grab-bar.error #grab-bar-fill { background: var(--accent-hot); width: 100% !important; opacity: .55; }
.grab-bar.indet #grab-bar-fill { width: 40% !important; animation: grab-indet 1.2s ease-in-out infinite; }
@keyframes grab-indet {
  0%   { margin-left: -40%; }
  100% { margin-left: 100%; }
}
.grab-status-row { display: flex; justify-content: space-between; gap: 10px; margin-top: 8px; font-size: 12px; }
#grab-phase { overflow-wrap: anywhere; }
.grab-log {
  margin-top: 10px; max-height: 150px; overflow: auto; font-size: 11px; line-height: 1.5;
  background: rgba(0, 0, 0, .25); border: 1px solid var(--line, #262837); border-radius: 8px;
  padding: 8px 10px; white-space: pre-wrap; overflow-wrap: anywhere; color: var(--muted, #9ca3af);
}
.grab-log:empty { display: none; }
.grab-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 12px; }
.grab-recent { margin-top: 14px; border-top: 1px solid var(--line, #262837); padding-top: 10px; }
.grab-recent-head { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--muted, #9ca3af); margin-bottom: 6px; }
.grab-recent-row {
  display: flex; align-items: center; gap: 8px; width: 100%; text-align: left;
  background: none; border: 0; color: inherit; padding: 5px 6px; border-radius: 7px;
  cursor: pointer; font-size: 12px; min-width: 0; transition: background .12s ease;
}
.grab-recent-row:hover { background: rgba(255, 255, 255, .05); }
.grab-recent-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.grab-chip {
  flex: none; font-size: 10px; padding: 1px 7px; border-radius: 999px; text-transform: capitalize;
  background: rgba(167, 139, 250, .15); color: var(--accent);
}
.grab-chip.done { background: rgba(16, 185, 129, .15); color: var(--accent-good); }
.grab-chip.error { background: rgba(239, 68, 68, .15); color: #fca5a5; }
.grab-chip.cancelled { background: rgba(156, 163, 175, .15); color: var(--muted, #9ca3af); }
.grab-chip.running { background: rgba(16, 185, 129, .15); color: var(--accent-good); }
.grab-recent-pct { flex: none; font-size: 11px; }
.grab-recent-cancel {
  flex: none; width: 20px; height: 20px; margin-left: 2px;
  display: grid; place-items: center;
  background: none; border: 0; border-radius: 6px;
  color: var(--muted, #9ca3af); font-size: 14px; line-height: 1; cursor: pointer;
  transition: color .12s ease, background .12s ease;
}
.grab-recent-cancel:hover { color: #fca5a5; background: rgba(239, 68, 68, .12); }
.grab-recent-cancel:disabled { opacity: .5; cursor: default; }
.grab-recent-cancel:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* Optional Patreon uplink on the add form — same field family as the URL row. */
.grab-opt-label {
  display: block; margin-top: 14px; font-size: 12px; font-weight: 600;
  color: var(--text-dim, #c7cad3);
}
.grab-opt-label .muted { font-weight: 400; }
.grab-patreon-row { margin-top: 6px; }

/* ─── Grab floater ───
   Draggable mini progress pill for a grab running with the modal closed.
   Same bar/phase vocabulary as the modal so the two read as one flow. Sits
   above the toast corner by default (bottom-right stack: privacy toasts,
   steam pill) and below modals/toasts in z; a drag pins it anywhere. */
#grab-floater {
  position: fixed; right: 18px; bottom: 92px; z-index: 9500;
  width: 264px; max-width: calc(100vw - 24px);
  background: var(--bg-2, #14151d); border: 1px solid var(--line, #262837);
  border-radius: 12px; padding: 10px 12px 11px;
  box-shadow: 0 10px 32px rgba(0, 0, 0, .5);
  cursor: grab; user-select: none; touch-action: none;
  font-size: 12px;
  animation: grab-floater-in .18s ease-out;
}
#grab-floater.dragging { cursor: grabbing; }
#grab-floater.is-error { border-color: rgba(239, 68, 68, .45); }
@keyframes grab-floater-in {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: none; }
}
.grab-floater-head { display: flex; align-items: center; gap: 8px; min-width: 0; }
#grab-floater-title {
  flex: 1; min-width: 0; font-weight: 600; font-size: 12.5px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
#grab-floater-close {
  flex: none; width: 20px; height: 20px; display: grid; place-items: center;
  background: none; border: 0; border-radius: 6px; color: var(--muted, #9ca3af);
  font-size: 15px; line-height: 1; cursor: pointer; transition: background .12s ease, color .12s ease;
}
#grab-floater-close:hover { background: rgba(255, 255, 255, .08); color: var(--text, #e5e7eb); }
#grab-floater-close:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.grab-floater-bar {
  height: 5px; border-radius: 999px; background: rgba(0, 0, 0, .35);
  border: 1px solid var(--line, #262837); overflow: hidden; margin-top: 8px; position: relative;
}
.grab-floater-bar #grab-floater-fill {
  height: 100%; width: 0%; border-radius: 999px; background: var(--accent);
  transition: width .25s ease;
}
.grab-floater-bar.ok #grab-floater-fill { background: var(--accent-good); }
.grab-floater-bar.error #grab-floater-fill { background: var(--accent-hot); width: 100% !important; opacity: .55; }
.grab-floater-bar.indet #grab-floater-fill { width: 40% !important; animation: grab-indet 1.2s ease-in-out infinite; }
.grab-floater-sub {
  display: flex; justify-content: space-between; gap: 10px; margin-top: 6px;
  font-size: 11px; min-width: 0;
}
#grab-floater-phase {
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: var(--text-dim, #c7cad3);
}
#grab-floater.is-error #grab-floater-phase { color: #fca5a5; white-space: normal; overflow-wrap: anywhere; }
#grab-floater-stats { flex: none; }
.grab-floater-retry {
  flex: none; align-self: center;
  padding: 2px 10px; border-radius: 999px;
  border: 1px solid rgba(239, 68, 68, .4);
  background: rgba(239, 68, 68, .12); color: #fca5a5;
  font-size: 11px; font-weight: 600; cursor: pointer;
  transition: background .12s ease, color .12s ease, border-color .12s ease;
}
.grab-floater-retry:hover { background: rgba(239, 68, 68, .22); color: #fecaca; border-color: rgba(239, 68, 68, .6); }
.grab-floater-retry:disabled { opacity: .5; cursor: default; }
.grab-floater-retry:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.grab-floater-queue { margin-top: 4px; font-size: 10.5px; }
/* The floater's minimized form: a topbar chip, so a long queue never sits over
   the page. Accent badge while things run; the warm (red) one once a grab failed
   unseen. The icon breathes while downloading so it reads as live, not stuck. */
#btn-grabs-topbar .grabs-badge { background: var(--accent); box-shadow: 0 0 0 2px var(--bg); }
#btn-grabs-topbar.is-error { color: #fca5a5; }
#btn-grabs-topbar.is-error .grabs-badge { background: var(--grad-warm); box-shadow: 0 2px 8px rgba(239,68,68,.5), 0 0 0 2px var(--bg); }
#btn-grabs-topbar.is-busy > svg { animation: grabs-chip-pulse 1.6s ease-in-out infinite; }
@keyframes grabs-chip-pulse { 50% { transform: translateY(1.5px); opacity: .7; } }
@media (prefers-reduced-motion: reduce) { #btn-grabs-topbar.is-busy > svg { animation: none; } }

/* ─── Wishlist modal ───
   Same skeleton + tokens as the Grab modal; the status chips reuse the
   grab-chip pill shape so the two flows read as one family. */
.wishlist-panel { max-width: 640px; }
.wl-fields { display: grid; gap: 10px; margin-top: 12px; }
.wl-fields label {
  display: grid; gap: 4px;
  font-size: 12px; font-weight: 600; color: var(--text-dim);
}
.wl-fields .wl-hint { font-weight: 400; color: var(--text-mute); }
.wl-fields input {
  background: var(--bg-2, #14151d); color: var(--text, #e5e7eb);
  border: 1px solid var(--line, #262837); border-radius: 8px; padding: 9px 12px;
  font-size: 13px; outline: none; transition: border-color .15s ease;
}
.wl-fields input:focus { border-color: var(--accent); }
.wl-form-actions { display: flex; align-items: center; gap: 8px; justify-content: flex-end; margin-top: 12px; }
.wl-form-actions .grab-error { margin-top: 0; flex: 1; }
.wl-toolbar {
  display: flex; align-items: center; gap: 10px;
  margin-top: 16px; padding-top: 12px;
  border-top: 1px solid var(--line, #262837);
}
.wl-toolbar input {
  flex: 1; min-width: 0;
  background: var(--bg-2, #14151d); color: var(--text, #e5e7eb);
  border: 1px solid var(--line, #262837); border-radius: 8px; padding: 6px 10px;
  font-size: 12px; outline: none; transition: border-color .15s ease;
}
.wl-toolbar input:focus { border-color: var(--accent); }
.wl-meta { flex: none; font-size: 11.5px; color: var(--text-mute); white-space: nowrap; }
.wl-list { margin-top: 8px; max-height: 46vh; overflow-y: auto; display: grid; gap: 4px; }
.wl-nomatch { padding: 14px 10px; font-size: 12.5px; color: var(--text-mute); }
.wl-empty { margin-top: 16px; padding: 18px 14px; text-align: center; font-size: 13px; }
.wl-empty p { margin: 0 0 6px; }
.wl-row {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 9px 10px;
  border: 1px solid transparent; border-radius: var(--radius-sm, 9px);
  transition: background .15s, border-color .15s;
}
.wl-row:hover { background: var(--surface-2); border-color: var(--border); }
.wl-chip {
  flex: none; margin-top: 2px;
  font-size: 10px; font-weight: 700; padding: 2px 8px; border-radius: 999px;
  background: rgba(6, 182, 212, .14); color: var(--accent-2);
  white-space: nowrap;
}
.wl-chip.released { background: rgba(245, 158, 11, .16); color: var(--accent-warm); }
.wl-chip.grabbing { background: rgba(167, 139, 250, .15); color: var(--accent); }
.wl-chip.grabbed  { background: rgba(16, 185, 129, .15); color: var(--accent-good); }
.wl-chip.paused   { background: rgba(156, 163, 175, .13); color: var(--text-mute); }
.wl-main { flex: 1; min-width: 0; display: grid; gap: 2px; }
.wl-title-line { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.wl-name { font-size: 13px; font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.wl-ver { flex: none; font-size: 11px; color: var(--accent-warm); font-variant-numeric: tabular-nums; }
.wl-kind { flex: none; font-size: 10.5px; color: var(--text-mute); }
.wl-sub, .wl-notes {
  font-size: 11.5px; color: var(--text-mute);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.wl-links { display: flex; gap: 12px; }
.wl-links:empty { display: none; }
.wl-links a { font-size: 11px; color: var(--accent-2); text-decoration: none; }
.wl-links a:hover { text-decoration: underline; }
.wl-actions { flex: none; display: flex; align-items: center; gap: 4px; }
.wl-actions .icon-btn { opacity: 0; transition: opacity .15s; }
.wl-row:hover .wl-actions .icon-btn,
.wl-actions .icon-btn:focus-visible { opacity: 1; }
/* No hover on touch — actions must stay visible. */
@media (hover: none) { .wl-actions .icon-btn { opacity: 1; } }
.wl-foot {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  margin-top: 14px; padding-top: 12px;
  border-top: 1px solid var(--line, #262837);
  font-size: 12px; color: var(--text-dim);
}
.wl-toggle, .wl-cadence { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.wl-foot select {
  background: var(--bg-2, #14151d); color: var(--text, #e5e7eb);
  border: 1px solid var(--line, #262837); border-radius: 7px; padding: 3px 6px;
  font-size: 12px;
}
.wl-foot-sep { flex: 1; }
.wl-lastrun { font-size: 11px; color: var(--text-mute); }

/* ═══════════════════════════════════════════════════════════════════════
   HOME — the landing view Hearth opens on
   Shares every token with the rest of the app (--surface, --radius,
   --grad-cool …). Nothing here introduces a new grey, radius or type size.
   ═══════════════════════════════════════════════════════════════════════ */

.home-view {
  --home-gutter: 26px;
  position: relative;
  z-index: 1;
  height: calc(100vh - 60px - 41px - var(--np-h, 0px));   /* topbar (60) + view-tabs (~41) */
  overflow: hidden;
}
.home-scroll {
  height: 100%;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--profile-scroll-thumb) transparent;
  overflow-x: hidden;
  scroll-behavior: smooth;
  padding: 20px var(--home-gutter) 40px;
}
/* Cap the reading width on an ultrawide display — a 2560px-wide hero and a
   six-across stat row read as a stretched page, not a designed one. Rails still
   bleed past this box by the gutter. */
.home-scroll > * { max-width: 1720px; margin-left: auto; margin-right: auto; }

/* Sections rise as they reach the viewport, first landing of a session only
   (homeArmReveal decides; this is just the two states). The section carries
   the whole slab up with a soft overshoot; what is INSIDE it is dealt out one
   piece at a time by homeDealIn — see "first-load entrance" in home.css. */
.home-scroll > .reveal {
  opacity: 0;
  transform: translateY(24px) scale(.988);
  transition: opacity .42s cubic-bezier(.2,.7,.3,1), transform .6s cubic-bezier(.34,1.3,.64,1);
}
.home-scroll > .reveal.in { opacity: 1; transform: none; }
.home-scroll::-webkit-scrollbar { width: 10px; }
.home-scroll::-webkit-scrollbar-track { background: transparent; }
.home-scroll::-webkit-scrollbar-thumb {
  background: var(--profile-scroll-thumb);
  border: 3px solid var(--bg);
  border-radius: 999px;
}
.home-scroll::-webkit-scrollbar-thumb:hover { background: var(--profile-scroll-hover); }

.home-h2 {
  margin: 0;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--text-dim);
}

/* ─── hero ─── */
.home-hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius) + 6px);
  background:
    linear-gradient(135deg, rgba(30,34,52,.94), rgba(14,16,24,.96));
  box-shadow: var(--shadow-card), inset 0 1px 0 rgba(255,255,255,.045);
  padding: 40px 42px 34px;
  min-height: 248px;
  display: flex;
  align-items: flex-end;
}
.home-hero-inner {
  position: relative; z-index: 2; max-width: 760px;
  /* the copy drifts the other way and eases off as the hero scrolls away */
  transform: translate3d(calc(var(--px, 0) * 5px), calc(var(--py, 0) * 3px), 0);
  opacity: calc(1 - var(--sy, 0) / 520);
  transition: transform .45s cubic-bezier(.2,.7,.3,1);
}

/* Mostly abstract art. The one piece of library art here is the orb inside
   the rings — the last-played cover — and the discreet eye blurs it along
   with everything else. */
/* --px/--py: pointer offset from centre (-.5….5), --sy: pixels scrolled.
   Each layer takes a different multiplier, which is what sells the depth. */
.home-hero-art {
  position: absolute; inset: 0; z-index: 0; overflow: hidden;
  transform: translate3d(calc(var(--px, 0) * -16px), calc(var(--py, 0) * -11px + var(--sy, 0) * 0.11px), 0);
  transition: transform .35s cubic-bezier(.2,.7,.3,1);
  will-change: transform;
}
.hha-blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(60px);
  opacity: .5;
  will-change: transform;
}
.hha-blob.b1 {
  width: 460px; height: 460px; right: -80px; top: -180px;
  background: radial-gradient(circle, rgba(124,58,237,.75), transparent 68%);
  animation: hha-drift-a 22s ease-in-out infinite alternate;
}
.hha-blob.b2 {
  width: 380px; height: 380px; right: 180px; bottom: -220px;
  background: radial-gradient(circle, rgba(6,182,212,.55), transparent 68%);
  animation: hha-drift-b 27s ease-in-out infinite alternate;
}
.hha-blob.b3 {
  width: 300px; height: 300px; left: -120px; top: -120px;
  background: radial-gradient(circle, rgba(245,158,11,.3), transparent 70%);
  animation: hha-drift-a 31s ease-in-out infinite alternate-reverse;
}

/* Film grain — kills the banding a big soft gradient shows on an OLED/wide-gamut
   panel and gives the panel a printed, non-flat feel. */
.hha-grain {
  position: absolute; inset: -50%;
  opacity: .5;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.34'/%3E%3C/svg%3E");
}
/* Concentric rings around a warm ember — an abstract focal point for the hero's
   right half. Purely decorative, and nothing about the library leaks into it. */
.hha-rings {
  position: absolute;
  right: 84px; top: 50%;
  width: 300px; height: 300px;
  transform: translate3d(calc(var(--px, 0) * 30px), calc(-50% + var(--py, 0) * 20px), 0);
  transition: transform .5s cubic-bezier(.2,.7,.3,1);
  pointer-events: none;
}
.hha-rings::before {
  content: '';
  position: absolute; inset: 34%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(245,158,11,.5), rgba(239,68,68,.16) 45%, transparent 70%);
  filter: blur(16px);
  animation: hha-ember 6s ease-in-out infinite alternate;
}
.hha-rings i {
  position: absolute; inset: 0;
  border: 1px solid rgba(255,255,255,.055);
  border-radius: 50%;
}
.hha-rings i:nth-child(2) { inset: 14%; border-color: rgba(255,255,255,.045); }
.hha-rings i:nth-child(3) { inset: 28%; border-color: rgba(245,158,11,.10); }
@keyframes hha-ember {
  from { opacity: .55; transform: scale(.94); }
  to   { opacity: .9;  transform: scale(1.06); }
}

/* The orb — the last-played game's cover, floating inside the rings. Invisible
   until homeRenderHero() finds a cover (`.has-art` on the rings); with nothing
   played yet the ember alone holds the spot, exactly as before. The float runs
   permanently and only opacity gates it, so appearing never snaps the drift. */
.hha-orb {
  position: absolute; inset: 19%;
  border-radius: 50%;
  overflow: hidden;
  opacity: 0;
  border: 1px solid rgba(255,255,255,.14);
  box-shadow:
    0 18px 48px rgba(0,0,0,.5),
    0 0 0 6px rgba(255,255,255,.03),
    0 0 44px rgba(245,158,11,.18);
  animation: hha-orb-float 13s ease-in-out infinite alternate;
  transition: opacity .7s ease;
  will-change: transform;
}
.hha-rings.has-art .hha-orb { opacity: 1; }
.hha-orb img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  /* the art itself drifts INSIDE the circle — oversized so an edge never shows */
  transform: scale(1.18);
  animation: hha-orb-pan 26s ease-in-out infinite alternate;
}
.hha-orb::after {
  /* glass sheen + grounding shadow, so it reads as an orb rather than a sticker */
  content: '';
  position: absolute; inset: 0;
  border-radius: 50%;
  background:
    radial-gradient(90% 70% at 30% 18%, rgba(255,255,255,.15), transparent 52%),
    radial-gradient(130% 100% at 50% 118%, rgba(10,11,16,.55), transparent 56%);
  pointer-events: none;
}
@keyframes hha-orb-float {
  from { transform: translate3d(-7px, 5px, 0) scale(.985); }
  to   { transform: translate3d(8px, -7px, 0) scale(1.02); }
}
@keyframes hha-orb-pan {
  from { transform: scale(1.18) translate3d(-2.5%, -1.5%, 0); }
  to   { transform: scale(1.18) translate3d(2.5%, 2%, 0); }
}
.hha-vignette {
  position: absolute; inset: 0;
  background:
    radial-gradient(120% 130% at 22% 88%, rgba(10,11,16,.62), transparent 58%),
    linear-gradient(90deg, rgba(10,11,16,.5) 0%, transparent 46%);
}
.hha-mesh {
  position: absolute; inset: 0;
  transform: translate3d(calc(var(--px, 0) * 9px), calc(var(--py, 0) * 6px), 0);
  transition: transform .6s cubic-bezier(.2,.7,.3,1);
  background-image:
    linear-gradient(rgba(255,255,255,.028) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.028) 1px, transparent 1px);
  background-size: 46px 46px;
  mask-image: radial-gradient(120% 100% at 100% 0%, #000 10%, transparent 72%);
  -webkit-mask-image: radial-gradient(120% 100% at 100% 0%, #000 10%, transparent 72%);
}
@keyframes hha-drift-a {
  from { transform: translate3d(0,0,0) scale(1); }
  to   { transform: translate3d(-70px, 50px, 0) scale(1.12); }
}
@keyframes hha-drift-b {
  from { transform: translate3d(0,0,0) scale(1.05); }
  to   { transform: translate3d(60px, -60px, 0) scale(.92); }
}

.home-eyebrow {
  margin: 0 0 8px;
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.home-greet {
  margin: 0;
  font-size: clamp(30px, 3.6vw, 44px);
  font-weight: 800;
  letter-spacing: -.02em;
  line-height: 1.08;
  background: linear-gradient(100deg, var(--text) 30%, #c4b5fd 78%, var(--accent-2));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.home-sub {
  margin: 10px 0 0;
  font-size: 14px;
  color: var(--text-dim);
  min-height: 21px;
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px;
}
.home-sub .hs-dot { color: var(--text-mute); }
.home-sub .hs-hot { color: var(--accent-warm); font-weight: 600; }
.home-sub .hs-good { color: var(--accent-good); font-weight: 600; }

.home-hero-actions {
  margin-top: 22px;
  display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
}
.home-hero-actions .btn svg { flex: none; }
.home-hero-actions .btn.primary.big {
  padding: 11px 20px;
  font-size: 14px;
  max-width: min(460px, 60vw);
}
.home-hero-actions .btn.primary.big .hb-label {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.home-hero-actions .btn .hb-sub {
  font-weight: 500;
  opacity: .72;
  font-size: 12px;
  margin-left: 2px;
}

/* discreet (blur artwork) toggle — top-right of the hero */
.home-eye {
  position: absolute; top: 14px; right: 14px; z-index: 3;
  width: 34px; height: 34px;
  display: grid; place-items: center;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: rgba(10,11,16,.55);
  backdrop-filter: blur(10px);
  color: var(--text-dim);
  cursor: pointer;
  transition: color .15s, border-color .15s, background .15s, transform .15s;
}
.home-eye:hover { color: var(--text); border-color: var(--border-strong); transform: scale(1.06); }
.home-eye:active { transform: scale(.96); }
.home-eye:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.home-eye .eye-shut { display: none; }
.home-eye[aria-pressed="true"] { color: var(--accent); border-color: rgba(167,139,250,.45); }
.home-eye[aria-pressed="true"] .eye-shut { display: block; }
.home-eye[aria-pressed="true"] .eye-open { display: none; }

/* Discreet mode: every piece of artwork on Home blurs until you hover or
   focus it. Chrome (titles, counts, buttons) stays perfectly readable. */
.home-scroll.discreet .hc-art img,
.home-scroll.discreet .hn-art img {
  filter: blur(18px) saturate(.65);
  transform: scale(1.08);
}
/* The hero orb blurs too — no hover reveal (the rings are pointer-events:none
   and the hero is too big for hover to mean intent); the eye un-blurs it. */
.home-scroll.discreet .hha-orb img { filter: blur(18px) saturate(.65); }
.home-card:hover .hc-art img,
.home-card:focus-visible .hc-art img,
.home-now:hover .hn-art img {
  filter: none;
  transform: none;
}
.home-scroll.discreet .hc-art img,
.home-scroll.discreet .hn-art img { transition: filter .18s ease, transform .18s ease; }
/* What's New carries Steam's own art (games/steam-news.css), which the two
   selectors above do not reach — and a banner plus a game's logo say what you
   own just as plainly as a cover does. Same blur, same hover reveal. */
.home-scroll.discreet #home-steam-news .snews-img,
.home-scroll.discreet #home-steam-news .snews-gicon {
  filter: blur(18px) saturate(.65);
  transition: filter .18s ease, transform .18s ease;
}
.home-scroll.discreet #home-steam-news .snews-card:hover .snews-img,
.home-scroll.discreet #home-steam-news .snews-card:focus-visible .snews-img,
.home-scroll.discreet #home-steam-news .snews-card:hover .snews-gicon,
.home-scroll.discreet #home-steam-news .snews-card:focus-visible .snews-gicon { filter: none; }
/* Reviews & Discussions (community/community.css): a card is the title's own
   backdrop and logo. Same blur, revealed by pointing at the card. */
.home-scroll.discreet .home-community .cm-art-img,
.home-scroll.discreet .home-community .cm-mark img {
  filter: blur(18px) saturate(.65);
  transition: filter .18s ease;
}
.home-scroll.discreet .home-community .cm-art-img.is-poster { filter: blur(26px) saturate(.65); }
.home-scroll.discreet .home-community .cm-card:hover .cm-art-img:not(.is-poster),
.home-scroll.discreet .home-community .cm-card:focus-within .cm-art-img:not(.is-poster),
.home-scroll.discreet .home-community .cm-card:hover .cm-mark img,
.home-scroll.discreet .home-community .cm-card:focus-within .cm-mark img { filter: none; }

/* ─── now playing ─── */
.home-now {
  position: relative;
  overflow: hidden;
  margin-top: 16px;
  display: flex; align-items: center; gap: 16px;
  padding: 14px 18px 14px 14px;
  border: 1px solid rgba(16,185,129,.34);
  border-radius: var(--radius);
  background:
    linear-gradient(90deg, rgba(16,185,129,.14), transparent 55%),
    var(--surface);
  box-shadow: var(--shadow-card);
}
.home-now::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(105deg, transparent 30%, rgba(255,255,255,.06) 46%, transparent 62%);
  transform: translateX(-60%);
  animation: hn-sheen 5.5s ease-in-out infinite;
  pointer-events: none;
}
@keyframes hn-sheen {
  0%, 60% { transform: translateX(-60%); }
  100%    { transform: translateX(60%); }
}
.home-now .hn-art {
  width: 108px; height: 72px; flex: none;
  border-radius: var(--radius-sm);
  overflow: hidden;
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
}
.home-now .hn-art img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 30%; }
.home-now .hn-body { min-width: 0; flex: 1; }
.home-now .hn-kicker {
  display: flex; align-items: center; gap: 7px;
  font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--accent-good);
}
.home-now .hn-title {
  margin-top: 3px;
  font-size: 17px; font-weight: 700;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.home-now .hn-meta { margin-top: 2px; font-size: 12.5px; color: var(--text-dim); }
.home-now .hn-acts { display: flex; gap: 8px; flex: none; }
.hn-pulse {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--accent-good);
  box-shadow: 0 0 0 0 rgba(16,185,129,.6);
  animation: hn-pulse 2s ease-out infinite;
}
@keyframes hn-pulse {
  70%  { box-shadow: 0 0 0 9px rgba(16,185,129,0); }
  100% { box-shadow: 0 0 0 0 rgba(16,185,129,0); }
}

/* ─── quick actions ─── */
/* A fixed column grid, not auto-fit: the tile count varies by build (VR only
   exists where the VR tab does), and with flex/auto-fit the last row's tiles came
   out a different width from the first row's — which reads as ragged. Fixed
   columns keep every tile the same size and simply leave the trailing cell empty. */
.home-quick {
  margin-top: 18px;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
}
@media (max-width: 1080px) { .home-quick { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 780px)  { .home-quick { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.home-qa {
  position: relative;
  display: flex; align-items: center; gap: 11px;
  padding: 14px 15px;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  color: var(--text);
  font: inherit;
  text-align: left;
  cursor: pointer;
  overflow: hidden;
  transition: transform .16s cubic-bezier(.2,.7,.3,1), border-color .16s, background .16s, box-shadow .16s;
}
/* Each tile carries its own accent (--qa, set per tile in JS) so the row reads as
   six destinations rather than six identical grey boxes. */
.home-qa { --qa: 167,139,250; }
.home-qa::after {
  content: '';
  position: absolute; inset: 0;
  background: radial-gradient(220px 130px at var(--mx, 14%) var(--my, 0%), rgba(var(--qa), .2), transparent 72%);
  opacity: 0; transition: opacity .18s;
}
.home-qa::before {
  content: '';
  position: absolute; left: 0; right: 0; top: 0; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(var(--qa), .55), transparent);
  opacity: .35; transition: opacity .18s;
}
.home-qa:hover {
  transform: translateY(-2px);
  border-color: rgba(var(--qa), .45);
  box-shadow: var(--shadow-card), 0 0 0 1px rgba(var(--qa), .12);
}
.home-qa:hover::after { opacity: 1; }
.home-qa:hover::before { opacity: 1; }
.home-qa:active { transform: translateY(0) scale(.985); }
.home-qa:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.home-qa .qa-ico {
  width: 36px; height: 36px; flex: none;
  display: grid; place-items: center;
  border-radius: 11px;
  background: rgba(var(--qa), .13);
  color: rgb(var(--qa));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.06);
  transition: background .16s, transform .16s var(--home-ease, cubic-bezier(.2,.7,.3,1));
}
.home-qa:hover .qa-ico { background: rgba(var(--qa), .22); transform: scale(1.06); }
.home-qa .qa-text { min-width: 0; }
.home-qa .qa-label {
  display: block;                 /* spans would otherwise share a line once the tile is wide */
  font-size: 13.5px; font-weight: 650;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.home-qa .qa-sub {
  display: block;
  font-size: 11.5px; color: var(--text-mute);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.home-qa .qa-count {
  position: absolute; top: 10px; right: 12px;
  font-size: 11px; font-weight: 700; color: var(--accent-warm);
}
/* Something is waiting — a slow breath on the badge, not a blinking alert. */
.home-qa .qa-count::after {
  content: '';
  position: absolute; left: 50%; top: 50%;
  width: 20px; height: 20px; margin: -10px 0 0 -10px;
  border-radius: 50%;
  background: rgba(245,158,11,.28);
  animation: qa-breathe 2.8s ease-in-out infinite;
  z-index: -1;
}
@keyframes qa-breathe {
  0%, 100% { transform: scale(.55); opacity: .5; }
  50%      { transform: scale(1);   opacity: 0; }
}

/* ─── shelves + rails ─── */
.home-shelf { margin-top: 30px; }
.home-shelf-head {
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 12px;
}
/* The tick hangs in the gutter so the heading text still lines up with the
   left edge of the cards below it. */
.home-h2 { position: relative; }
.home-view .home-h2::before {
  content: '';
  position: absolute; left: -12px; top: 50%;
  width: 3px; height: 13px;
  transform: translateY(-50%);
  border-radius: 2px;
  background: var(--grad-cool);
  opacity: .8;
}
.home-shelf-head .hs-count {
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  font-size: 11px; font-weight: 700; color: var(--text-mute);
  font-variant-numeric: tabular-nums;
}
/* Scoped to the whole Home view, not just .home-shelf-head: the in-flight
   strip reuses the same "see all" affordance, and a second copy of these rules
   would be a near-duplicate of an existing component. */
.home-view .hs-more {
  margin-left: auto;
  background: none; border: 0; padding: 4px 6px;
  color: var(--text-dim); font: inherit; font-size: 12.5px;
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: color .15s, background .15s, transform .15s;
}
.home-view .hs-more:hover { color: var(--accent); background: var(--surface-2); transform: translateX(2px); }
.home-view .hs-more:active { transform: translateX(2px) scale(.97); }
.home-view .hs-more:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* Rails bleed past the content margin so cards run off the screen edge instead of
   stopping short of it, and a gradient at each end fades them out — the giveaway
   that a row keeps going, without a hard slice. */
.home-rail-wrap { position: relative; margin: 0 calc(-1 * var(--home-gutter)); }
.home-rail-wrap::before,
.home-rail-wrap::after {
  content: '';
  position: absolute; top: 0; bottom: 12px;
  width: 64px;
  pointer-events: none;
  z-index: 2;
  opacity: 0;
  transition: opacity .2s;
}
.home-rail-wrap::before { left: 0;  background: linear-gradient(90deg, var(--bg) 18%, rgba(10,11,16,0)); }
.home-rail-wrap::after  { right: 0; background: linear-gradient(270deg, var(--bg) 18%, rgba(10,11,16,0)); }
.home-rail-wrap.fade-l::before,
.home-rail-wrap.fade-r::after { opacity: 1; }
.home-rail {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 268px;
  gap: 14px;
  overflow-x: auto;
  overflow-y: hidden;
  scroll-snap-type: x proximity;
  padding: 4px var(--home-gutter) 12px;
  scroll-padding-left: var(--home-gutter);
  scrollbar-width: thin;
  scrollbar-color: var(--profile-scroll-thumb) transparent;
}
.home-rail::-webkit-scrollbar { height: 8px; }
.home-rail::-webkit-scrollbar-track { background: transparent; }
.home-rail::-webkit-scrollbar-thumb { background: var(--profile-scroll-thumb); border-radius: 4px; }
.home-rail::-webkit-scrollbar-thumb:hover { background: var(--profile-scroll-hover); }

.rail-nav {
  position: absolute; top: 50%; transform: translateY(-58%);
  width: 34px; height: 46px;
  display: grid; place-items: center;
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  background: rgba(12,14,20,.86);
  backdrop-filter: blur(8px);
  color: var(--text);
  cursor: pointer;
  opacity: 0; pointer-events: none;
  transition: opacity .16s, background .16s, transform .16s;
  z-index: 3;
}
.rail-nav.prev { left: 4px; }
.rail-nav.next { right: 4px; }
.home-rail-wrap:hover .rail-nav.can { opacity: 1; pointer-events: auto; }
.rail-nav:hover { background: var(--surface-2); transform: translateY(-58%) scale(1.06); }
.rail-nav:focus-visible { opacity: 1; pointer-events: auto; outline: 2px solid var(--accent); outline-offset: 2px; }

/* card */
.home-card {
  position: relative;
  display: block;
  width: 100%;
  padding: 0;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  color: var(--text);
  font: inherit;
  text-align: left;
  cursor: pointer;
  overflow: hidden;
  scroll-snap-align: start;
  box-shadow: var(--shadow-card);
  transition: transform .18s cubic-bezier(.2,.7,.3,1), box-shadow .18s, border-color .18s;
}
.home-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lift); border-color: rgba(167,139,250,.4); }
.home-card:active { transform: translateY(-1px) scale(.995); }
.home-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.home-card .hc-art {
  position: relative;
  display: block;
  aspect-ratio: 3 / 2;
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
  overflow: hidden;
}
.home-card .hc-art img {
  width: 100%; height: 100%;
  object-fit: cover; object-position: 50% 30%;
  display: block;
  -webkit-user-drag: none;
  transition: transform .4s cubic-bezier(.2,.7,.3,1), filter .3s;
}
.home-card:hover .hc-art img { transform: scale(1.055); filter: saturate(1.06) brightness(1.03); }
.home-card .hc-ph {
  position: absolute; inset: 0;
  display: grid; place-items: center;
  font-size: 30px; font-weight: 800; letter-spacing: .04em;
  color: rgba(231,236,243,.16);
}
.home-card .hc-shade {
  position: absolute; inset: 0;
  /* Two stops of scrim: enough that 11px meta stays readable over a bright
     cover, shallow enough that the art still shows. */
  background:
    linear-gradient(to top, rgba(8,9,13,.96) 0%, rgba(8,9,13,.74) 22%, rgba(8,9,13,.2) 48%, transparent 68%);
}
.home-card::after {
  /* hairline top highlight — lifts the card off the page background */
  content: '';
  position: absolute; left: 0; right: 0; top: 0; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.13), transparent);
  pointer-events: none;
  z-index: 3;
}
.home-card .hc-body {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 10px 12px 11px;
}
.home-card .hc-title {
  display: block;
  font-size: 13.5px; font-weight: 650; line-height: 1.25;
  text-shadow: 0 1px 3px rgba(0,0,0,.6);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.home-card .hc-dot {
  display: inline-block;
  width: 6px; height: 6px;
  margin-right: 6px;
  border-radius: 50%;
  background: var(--text-mute);
  box-shadow: 0 0 8px currentColor;
  vertical-align: 1px;
}
.home-card .hc-dot[data-engine="renpy"]    { background: #f0a3ff; }
.home-card .hc-dot[data-engine="godot"]    { background: #75e3ff; }
.home-card .hc-dot[data-engine="unity"]    { background: #ffffff; }
.home-card .hc-dot[data-engine="rpgmaker"] { background: #ffd166; }
.home-card .hc-dot[data-engine="html"]     { background: #a0e8af; }
.home-card .hc-dot[data-engine="java"]     { background: #ffa07a; }
.home-card .hc-dot[data-engine="native"]   { background: #9aa3b8; }
.home-card .hc-dot[data-engine="steam"]    { background: #66c0f4; }

.home-card .hc-meta {
  display: block;
  margin-top: 2px;
  font-size: 11.5px; color: #b8c1d4;
  text-shadow: 0 1px 3px rgba(0,0,0,.55);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
/* Pointer spotlight — a soft light that tracks the cursor across the card.
   --mx/--my come from one delegated rAF'd pointermove handler. */
.home-card .hc-spot,
.home-qa::after,
.home-stat::after { pointer-events: none; }
.home-card .hc-spot {
  position: absolute; inset: 0; z-index: 2;
  background: radial-gradient(220px 160px at var(--mx, 50%) var(--my, 50%), rgba(255,255,255,.14), transparent 62%);
  opacity: 0;
  transition: opacity .22s;
  mix-blend-mode: soft-light;
}
.home-card:hover .hc-spot { opacity: 1; }

.home-card .hc-chip {
  position: absolute; top: 9px; left: 9px;
  padding: 3px 7px;
  font-size: 10px; font-weight: 700; letter-spacing: .04em;
  border-radius: 999px;
  background: rgba(10,11,16,.72);
  backdrop-filter: blur(6px);
  color: var(--text-dim);
  border: 1px solid rgba(255,255,255,.07);
}
.home-card .hc-chip.upd { color: #0a0b10; background: var(--accent-warm); border-color: transparent; }
.home-card .hc-chip.new { color: #0a0b10; background: var(--accent-good); border-color: transparent; }
.home-card .hc-chip.fav { color: var(--accent-warm); }
.home-card .hc-play {
  position: absolute; top: 8px; right: 8px;
  width: 34px; height: 34px;
  display: grid; place-items: center;
  border: 0; border-radius: 50%;
  background: rgba(10,11,16,.66);
  backdrop-filter: blur(8px);
  color: #fff;
  cursor: pointer;
  opacity: 0; transform: scale(.86);
  transition: opacity .16s, transform .16s, background .16s;
}
.home-card:hover .hc-play,
.home-card:focus-within .hc-play { opacity: 1; transform: scale(1); }
.home-card .hc-play:hover { background: var(--accent); color: #0a0b10; }
.home-card .hc-play:focus-visible { opacity: 1; transform: scale(1); outline: 2px solid var(--accent); outline-offset: 2px; }
.home-card.is-running { border-color: rgba(16,185,129,.5); }

/* empty + skeleton states */
.home-empty {
  display: flex; align-items: center; gap: 14px;
  padding: 22px 20px;
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius);
  background: rgba(22,25,36,.5);
  color: var(--text-dim);
  font-size: 13px;
}
.home-empty .he-ico { color: var(--text-mute); flex: none; }
.home-empty strong { display: block; color: var(--text); font-size: 14px; margin-bottom: 2px; }
.home-empty .btn { margin-left: auto; flex: none; }

.home-skel {
  display: inline-block;
  height: 13px;
  border-radius: 6px;
  background: linear-gradient(90deg, var(--surface-2) 25%, var(--surface-3) 37%, var(--surface-2) 63%);
  background-size: 400% 100%;
  animation: home-shimmer 1.4s ease infinite;
}
.home-skel.btn-skel { height: 40px; width: 210px; border-radius: 10px; }
.home-skel.btn-skel.sm { width: 130px; }
.home-skel.card-skel { height: 100%; width: 100%; border-radius: var(--radius); }
.home-skel-card { aspect-ratio: 3 / 2; }
@keyframes home-shimmer {
  from { background-position: 100% 0; }
  to   { background-position: 0 0; }
}

/* ─── in-flight work (rips / grabs / game updates) ───
   Sits directly under the hero, and is TEXT ONLY — no thumbnails this high on
   the page. Hidden entirely when nothing is running, like .home-now. */
.home-active {
  margin-top: 16px;
  padding: 12px 14px 12px;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  box-shadow: var(--shadow-card);
}
.home-active .ha-head {
  display: flex; align-items: center; gap: 10px;
  margin: 2px 6px 9px 4px;
}
.home-active .ha-kicker {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--accent-2);
}
.home-active .ha-kicker.bad  { color: var(--accent-warm); }
.home-active .ha-kicker.good { color: var(--accent-good); }
/* Cool variant of the now-playing pulse — downloading, not playing. */
.home-active .hn-pulse {
  background: var(--accent-2);
  box-shadow: 0 0 0 0 rgba(6,182,212,.6);
  animation: ha-pulse 2s ease-out infinite;
}
@keyframes ha-pulse {
  70%  { box-shadow: 0 0 0 9px rgba(6,182,212,0); }
  100% { box-shadow: 0 0 0 0 rgba(6,182,212,0); }
}
/* minmax(0,…) + min-width on the row: a grid item's automatic minimum size is
   its min-content width, so without these a long unbroken status line can push
   the track wider than the card and bleed out of its right edge. The text is
   capped in homeShortSub() too — this is the containment that makes it
   impossible rather than merely unlikely. */
.home-active .ha-list { display: grid; grid-template-columns: minmax(0, 1fr); gap: 4px; }
.home-active .ha-row {
  display: flex; align-items: center; gap: 11px;
  width: 100%; min-width: 0; max-width: 100%;
  padding: 8px 10px;
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  background: none;
  color: var(--text);
  font: inherit; text-align: left;
  cursor: pointer;
  transition: background .15s, border-color .15s, transform .15s;
}
.home-active .ha-row:hover { background: var(--surface-2); border-color: var(--border); }
.home-active .ha-row:active { transform: scale(.995); }
.home-active .ha-row:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.home-active .ha-ico {
  width: 30px; height: 30px; flex: none;
  display: grid; place-items: center;
  border-radius: 9px;
  background: rgba(6,182,212,.13);
  color: var(--accent-2);
}
.home-active .ha-row.bad  .ha-ico { background: rgba(245,158,11,.14); color: var(--accent-warm); }
.home-active .ha-row.good .ha-ico { background: rgba(16,185,129,.13); color: var(--accent-good); }
.home-active .ha-main { min-width: 0; flex: 1; }
.home-active .ha-title {
  display: block;
  font-size: 13px; font-weight: 650;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.home-active .ha-sub {
  display: block; margin-top: 1px;
  font-size: 11.5px; color: var(--text-mute);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.home-active .ha-row.bad .ha-sub { color: var(--accent-warm); }
.home-active .ha-bar {
  display: block; position: relative;
  margin-top: 6px; height: 3px;
  border-radius: 999px;
  background: var(--surface-3);
  overflow: hidden;
}
.home-active .ha-bar i {
  display: block; height: 100%;
  border-radius: 999px;
  background: var(--grad-cool);
  transition: width .35s cubic-bezier(.2,.7,.3,1);
}
/* No byte total from the host — a travelling sliver instead of a fake number. */
.home-active .ha-bar.indet i {
  width: 38%;
  animation: ha-indet 1.5s cubic-bezier(.5,0,.5,1) infinite;
}
@keyframes ha-indet {
  from { transform: translateX(-105%); }
  to   { transform: translateX(300%); }
}
.home-active .ha-row.bad  .ha-bar i { background: var(--accent-warm); }
.home-active .ha-row.good .ha-bar i { background: var(--accent-good); }
.home-active .ha-pct {
  flex: none; min-width: 40px; text-align: right;
  font-size: 12px; font-variant-numeric: tabular-nums;
  color: var(--text-dim);
}
.home-active .ha-rest {
  margin-top: 2px;
  padding: 6px 10px;
  border: 0; border-radius: var(--radius-sm);
  background: none;
  color: var(--text-dim); font: inherit; font-size: 12px; text-align: left;
  cursor: pointer;
  transition: color .15s, background .15s;
}
.home-active .ha-rest:hover { color: var(--accent); background: var(--surface-2); }
.home-active .ha-rest:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* ─── wishlist releases strip ───
   Same card shell as .home-active, but warm — this one is a celebration.
   Text-only, so it's safe above the artwork fold. */
.home-wishlist {
  margin-top: 16px;
  padding: 12px 14px;
  border: 1px solid rgba(245, 158, 11, .28);
  border-radius: var(--radius);
  background:
    radial-gradient(500px 120px at 12% 0%, rgba(245, 158, 11, .09), transparent 70%),
    var(--surface);
  box-shadow: var(--shadow-card);
}
.home-wishlist .hw-head {
  display: flex; align-items: center; gap: 10px;
  margin: 2px 6px 9px 4px;
}
.home-wishlist .hw-kicker {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--accent-warm);
}
.home-wishlist .hw-head .hs-more { margin-left: auto; }
.home-wishlist .hw-list { display: grid; gap: 4px; }
.home-wishlist .hw-row {
  display: flex; align-items: center; gap: 11px;
  padding: 8px 10px;
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  transition: background .15s, border-color .15s;
}
.home-wishlist .hw-row:hover { background: var(--surface-2); border-color: var(--border); }
.home-wishlist .hw-main { min-width: 0; flex: 1; }
.home-wishlist .hw-title {
  display: block;
  font-size: 13px; font-weight: 650;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.home-wishlist .hw-ver { font-size: 11px; font-weight: 600; color: var(--accent-warm); font-variant-numeric: tabular-nums; }
.home-wishlist .hw-sub {
  display: block; margin-top: 1px;
  font-size: 11.5px; color: var(--text-mute);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.home-wishlist .hw-row.grabbed .hw-sub { color: var(--accent-good); }
.home-wishlist .hw-actions { flex: none; display: flex; align-items: center; gap: 6px; }
.home-wishlist .hw-dismiss {
  width: 26px; height: 26px; flex: none;
  display: grid; place-items: center;
  border: 0; border-radius: 7px;
  background: none; color: var(--text-mute);
  font-size: 15px; line-height: 1; cursor: pointer;
  transition: color .15s, background .15s;
}
.home-wishlist .hw-dismiss:hover { color: var(--text); background: var(--surface-3); }
.home-wishlist .hw-dismiss:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* ─── cartoon card patterns ───
   Chunky line-art tiles (squiggles, clouds, stars, confetti…) that drift slowly
   behind the Home cards. Each tile is a white-stroke SVG used as a MASK, so one
   file tints to any card's accent via --pat-ink, and a left→right ink ramp keeps
   the pattern faint under the text and a little stronger on the empty right.
   Which card gets which is homeApplyPatterns() in app.js (footer: "Patterns").
   The moving layer is oversized by 300px on every side and slides exactly one
   tile per loop, so the loop seam never shows. Purely decorative. */
:root {
  --pat-squiggle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='80' viewBox='0 0 96 80'%3E%3Cg fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 20c12-12 12-12 24 0s12 12 24 0 12-12 24 0 12 12 24 0'/%3E%3Cpath d='M-24 60c12-12 12-12 24 0s12 12 24 0 12-12 24 0 12 12 24 0 12-12 24 0'/%3E%3C/g%3E%3C/svg%3E");
  --pat-zigzag: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='64' height='72' viewBox='0 0 64 72'%3E%3Cg fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 24 16 12l16 12 16-12 16 12'/%3E%3Cpath d='M-16 60 0 48l16 12 16-12 16 12 16-12 16 12'/%3E%3C/g%3E%3C/svg%3E");
  --pat-confetti: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='168' height='168' viewBox='0 0 168 168'%3E%3Cg fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E %3Cpath d='M18 34c6-8 12-8 18 0s12 8 18 0'/%3E %3Cpath d='M112 22l14 24h-28z'/%3E %3Cpath d='M70 92a14 14 0 0 1 28 0'/%3E %3Cpath d='M140 100v18M131 109h18'/%3E %3Cpath d='M20 128l10-10 10 10 10-10 10 10'/%3E %3Crect x='104' y='142' width='22' height='12' rx='4' transform='rotate(-24 115 148)'/%3E %3Cpath d='M62 44l16 8'/%3E%3C/g%3E%3C/svg%3E");
  --pat-scales: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='30' viewBox='0 0 60 30'%3E%3Cg fill='none' stroke='%23fff' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 30a15 15 0 0 1 30 0 15 15 0 0 1 30 0'/%3E%3Cpath d='M-15 15a15 15 0 0 1 30 0 15 15 0 0 1 30 0 15 15 0 0 1 30 0'/%3E%3C/g%3E%3C/svg%3E");
  --pat-clouds: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='130' viewBox='0 0 260 130'%3E%3Cg fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E %3Cpath d='M34 70h58a14 14 0 0 0 0-28 22 22 0 0 0-40-8 16 16 0 0 0-18 36z'/%3E %3Cpath d='M162 116h50a12 12 0 0 0 0-24 19 19 0 0 0-34-7 14 14 0 0 0-16 31z'/%3E%3C/g%3E%3C/svg%3E");
  --pat-hearts: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='112' height='112' viewBox='0 0 112 112'%3E%3Cg fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E %3Cpath d='M30 46C12 35 10 22 18 17c6-4 11 0 12 4 1-4 6-8 12-4 8 5 6 18-12 29z'/%3E %3Cpath d='M84 100C70 92 68 82 75 78c4-3 8 0 9 3 1-3 5-6 9-3 7 4 5 14-9 22z'/%3E%3C/g%3E%3C/svg%3E");
  --pat-sprinkles: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96' viewBox='0 0 96 96'%3E%3Cg fill='none' stroke='%23fff' stroke-width='4.5' stroke-linecap='round' stroke-linejoin='round'%3E %3Cpath d='M14 18l12 6'/%3E%3Cpath d='M58 12l-4 13'/%3E%3Cpath d='M82 40l10 8'/%3E %3Cpath d='M30 56l13-3'/%3E%3Cpath d='M68 72l-6 11'/%3E%3Cpath d='M12 84l12-8'/%3E%3C/g%3E%3C/svg%3E");
  --pat-stars: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150' viewBox='0 0 150 150'%3E%3Cg fill='none' stroke='%23fff' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E %3Cpath d='M38 18l6 13 14 2-10 10 2 14-12-7-12 7 2-14-10-10 14-2z'/%3E %3Cpath d='M110 90l4 9 10 1.5-7 7 1.5 10-8.5-5-8.5 5 1.5-10-7-7 10-1.5z'/%3E%3C/g%3E%3C/svg%3E");
  --pat-stripes: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M-10 10 10-10M0 40 40 0M30 50l20-20'/%3E%3C/svg%3E");
}
[data-pat="squiggle"] { --pat: var(--pat-squiggle); --pat-w: 96px; --pat-h: 80px; --pat-dx: 96px; --pat-dy: 0px; --pat-dur: 14s; }
[data-pat="zigzag"] { --pat: var(--pat-zigzag); --pat-w: 64px; --pat-h: 72px; --pat-dx: 64px; --pat-dy: 0px; --pat-dur: 12s; }
[data-pat="confetti"] { --pat: var(--pat-confetti); --pat-w: 168px; --pat-h: 168px; --pat-dx: 0px; --pat-dy: 168px; --pat-dur: 22s; }
[data-pat="scales"] { --pat: var(--pat-scales); --pat-w: 84px; --pat-h: 42px; --pat-dx: 84px; --pat-dy: 0px; --pat-dur: 16s; }
[data-pat="clouds"] { --pat: var(--pat-clouds); --pat-w: 260px; --pat-h: 130px; --pat-dx: 260px; --pat-dy: 0px; --pat-dur: 40s; }
[data-pat="hearts"] { --pat: var(--pat-hearts); --pat-w: 112px; --pat-h: 112px; --pat-dx: 0px; --pat-dy: -112px; --pat-dur: 16s; }
[data-pat="sprinkles"] { --pat: var(--pat-sprinkles); --pat-w: 128px; --pat-h: 128px; --pat-dx: 0px; --pat-dy: 128px; --pat-dur: 18s; }
[data-pat="stars"] { --pat: var(--pat-stars); --pat-w: 150px; --pat-h: 150px; --pat-dx: 150px; --pat-dy: 0px; --pat-dur: 48s; }
[data-pat="stripes"] { --pat: var(--pat-stripes); --pat-w: 56px; --pat-h: 56px; --pat-dx: 56px; --pat-dy: 0px; --pat-dur: 9s; }
.home-active[data-pat],
.home-wishlist[data-pat],
.home-now[data-pat] { position: relative; isolation: isolate; overflow: hidden; }
.home-active[data-pat]::before,
.home-wishlist[data-pat]::before,
.home-now[data-pat]::before,
.hha-pat[data-pat]::before {
  content: '';
  position: absolute; inset: -300px;
  z-index: -1;
  pointer-events: none;
  background: linear-gradient(100deg,
    color-mix(in srgb, var(--pat-ink, #fff) calc(var(--pat-lo, 3.5) * 1%), transparent) 20%,
    color-mix(in srgb, var(--pat-ink, #fff) calc(var(--pat-hi, 11) * 1%), transparent) 85%);
  -webkit-mask: var(--pat) repeat 0 0 / var(--pat-w) var(--pat-h);
          mask: var(--pat) repeat 0 0 / var(--pat-w) var(--pat-h);
  animation: home-pat-drift var(--pat-dur, 20s) linear infinite;
  will-change: transform;
}
@keyframes home-pat-drift {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(var(--pat-dx, 0px), var(--pat-dy, 0px), 0); }
}
.home-active   { --pat-ink: #67e8f9; }
.home-wishlist { --pat-ink: #fbbf24; --pat-hi: 13; }
.home-now      { --pat-ink: #34d399; }

/* The hero: the pattern rides inside the parallax art (under the vignette and
   the orb), fading in from the right so the greeting stays clean. It replaces
   the faint grid mesh while a pattern is on. */
.hha-pat {
  position: absolute; inset: 0;
  overflow: hidden;
  isolation: isolate;
  --pat-ink: #c4b5fd; --pat-lo: 2; --pat-hi: 14;
  -webkit-mask-image: linear-gradient(90deg, transparent 8%, #000 62%);
          mask-image: linear-gradient(90deg, transparent 8%, #000 62%);
  transform: translate3d(calc(var(--px, 0) * 6px), calc(var(--py, 0) * 4px), 0);
  transition: transform .6s cubic-bezier(.2,.7,.3,1);
}
.hha-pat:not([data-pat]) { display: none; }
.home-hero-art:has(.hha-pat[data-pat]) .hha-mesh { display: none; }

@media (prefers-reduced-motion: reduce) {
  .home-active[data-pat]::before,
  .home-wishlist[data-pat]::before,
  .home-now[data-pat]::before,
  .hha-pat[data-pat]::before { animation: none; }
}
@media (max-width: 720px) {
  .home-wishlist .hw-row { flex-wrap: wrap; }
  .home-wishlist .hw-main { flex-basis: 100%; }
  .home-wishlist .hw-actions { margin-left: auto; }
}

/* ─── media cards on the rails ───
   Same .home-card skeleton as a game, so hover, spotlight, keyboard and — the
   part that matters — the discreet blur all apply without extra wiring. */
.hm-card .hc-dot[data-kind="videos"] { background: var(--accent-2); }
.hm-card .hc-dot[data-kind="vr"]     { background: #2dd4bf; }
.hm-card .hc-dot[data-kind="images"] { background: #34d399; }
.hm-card .hc-dot[data-kind="comics"] { background: var(--accent-pink); }
.hm-card .hc-dot[data-kind="bundle"] { background: var(--accent-pink); }
.hm-card.is-bundle { border-color: rgba(244,114,182,.42); }
.hm-card.is-bundle:hover { border-color: rgba(244,114,182,.85); }
/* Where you stopped — hairline across the foot of the card. */
.hm-card .hm-prog {
  position: absolute; left: 0; right: 0; bottom: 0;
  height: 3px;
  background: rgba(255,255,255,.10);
  z-index: 3;
}
.hm-card .hm-prog i {
  display: block; height: 100%;
  background: var(--grad-cool);
}
/* Play affordance, centred. Chips live top-left, so these never collide. */
.hm-card .hm-badge {
  position: absolute; left: 50%; top: 50%;
  width: 46px; height: 46px; margin: -23px 0 0 -23px;
  display: grid; place-items: center;
  border-radius: 50%;
  background: rgba(10,11,16,.62);
  backdrop-filter: blur(8px);
  color: #fff;
  z-index: 2;
  opacity: 0; transform: scale(.82);
  transition: opacity .18s, transform .18s, background .18s;
  pointer-events: none;
}
.hm-card:hover .hm-badge,
.hm-card:focus-visible .hm-badge { opacity: 1; transform: scale(1); }
.hm-card .hc-chip.vr { color: #2dd4bf; }
/* Bundle titles get long. The chip is a flex box, and text-overflow does not
   apply to an anonymous flex item — so the label gets its own span to clip. */
.hm-card .hc-chip.bundle {
  display: inline-flex; align-items: center; gap: 5px;
  max-width: min(calc(100% - 18px), 68%);
  color: var(--accent-pink);
}
.hm-card .hc-chip.bundle svg { flex: none; }
.hm-card .hc-chip.bundle .hcc-t {
  min-width: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
/* Skeletons are shaped exactly like a loaded card, so nothing moves when the
   media state lands. */
.hm-card.is-skel { cursor: default; pointer-events: none; }
.hm-card.is-skel .hc-body .home-skel { display: block; }

/* ─── stats ─── */
.home-stats-wrap { margin-top: 34px; }
.home-stats {
  margin-top: 12px;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(132px, 1fr));
  gap: 12px;
}
.home-stat {
  position: relative;
  padding: 14px 15px;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  color: var(--text);
  font: inherit;
  text-align: left;
  cursor: pointer;
  transition: transform .16s cubic-bezier(.2,.7,.3,1), border-color .16s, box-shadow .16s;
}
.home-stat { --st: 167,139,250; overflow: hidden; }
.home-stat::after {
  content: '';
  position: absolute; inset: 0;
  background: radial-gradient(180px 120px at var(--mx, 50%) var(--my, 50%), rgba(var(--st), .16), transparent 65%);
  opacity: 0; transition: opacity .2s;
}
.home-stat:hover::after { opacity: 1; }
.home-stat::before {
  content: '';
  position: absolute; left: 0; right: 0; top: 0; height: 2px;
  background: linear-gradient(90deg, rgba(var(--st), .8), rgba(var(--st), 0));
  opacity: .5; transition: opacity .18s;
}
.home-stat:hover {
  transform: translateY(-2px);
  border-color: rgba(var(--st), .45);
  box-shadow: var(--shadow-card), 0 0 0 1px rgba(var(--st), .12);
}
.home-stat:hover::before { opacity: 1; }
.home-stat:active { transform: translateY(0) scale(.985); }
.home-stat:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.home-stat .st-val {
  font-size: 24px; font-weight: 800; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}
.home-stat .st-label {
  margin-top: 3px;
  font-size: 11.5px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase;
  color: var(--text-mute);
}
.home-stat .st-sub { margin-top: 5px; font-size: 11.5px; color: var(--text-dim); }
.home-stat.accent .st-val { color: var(--accent-warm); }
.home-stat.good .st-val { color: var(--accent-good); }
.home-stat .home-skel { height: 24px; width: 56px; }

/* ─── footer ─── */
.home-foot {
  margin-top: 34px;
  padding-top: 16px;
  border-top: 1px solid var(--border);
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  font-size: 12px; color: var(--text-mute);
}
.home-startpref {
  margin-left: auto;
  display: flex; align-items: center; gap: 8px;
  color: var(--text-dim);
}
.home-startpref + .home-startpref { margin-left: 0; }
.home-startpref select {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  color: var(--text);
  font: inherit; font-size: 12px;
  padding: 5px 8px;
  cursor: pointer;
  transition: border-color .15s;
}
.home-startpref select:hover { border-color: var(--border-strong); }
.home-startpref select:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* ─── responsive ─── */
@media (max-width: 900px) {
  .home-view { --home-gutter: 16px; }
  .home-scroll { padding-top: 16px; padding-bottom: 32px; }
  .home-hero { padding: 28px 22px 24px; min-height: 190px; }
  /* Narrow hero: shrink the rings/orb, tuck them half off the right edge, and
     fade the orb's left side + dim it — the stats line runs underneath it
     here, and full-strength art would make that text unreadable. */
  .hha-rings { width: 200px; height: 200px; right: -48px; }
  .hha-rings.has-art .hha-orb { opacity: .55; }
  .hha-orb {
    -webkit-mask-image: linear-gradient(100deg, transparent 6%, #000 62%);
    mask-image: linear-gradient(100deg, transparent 6%, #000 62%);
  }
  .home-rail { grid-auto-columns: 232px; }
  .home-now { flex-wrap: wrap; }
  .home-now .hn-acts { width: 100%; }
  .home-active { padding: 10px 10px 10px; }
  .home-active .ha-pct { min-width: 0; }
}
@media (max-width: 640px) {
  .home-hero-actions .btn.primary.big { max-width: 100%; width: 100%; justify-content: center; }
  .home-rail { grid-auto-columns: 78vw; }
  .rail-nav { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .hha-blob, .hha-rings::before, .hha-orb, .hha-orb img { animation: none; }
  .home-now::after,
  .home-hero-actions .btn.primary::before { animation: none; opacity: 0; }
  .home-scroll > .reveal { opacity: 1; transform: none; transition: none; }
  .home-hero-art, .hha-rings, .hha-mesh, .home-hero-inner { transform: none; transition: none; }
  .home-card .hc-spot, .home-stat::after { display: none; }
  .home-qa .qa-count::after { animation: none; opacity: 0; }
  .home-skel { animation: none; }
  .home-active .hn-pulse { animation: none; }
  .home-active .ha-bar.indet i { animation: none; width: 100%; opacity: .5; }
  .home-active .ha-bar i { transition: none; }
  .hm-card .hm-badge { transition: none; }
  .home-scroll { scroll-behavior: auto; }
  .home-card, .home-qa, .home-stat { transition: border-color .16s, box-shadow .16s; }
  .home-card:hover, .home-qa:hover, .home-stat:hover { transform: none; }
}

/* card + affordances are role="button" divs (a real <button> can't nest one) —
   give them the button ergonomics CSS would otherwise have provided. */
.home-card, .home-card .hc-play {
  -webkit-user-select: none; user-select: none;
  -webkit-tap-highlight-color: transparent;
}
.home-card .hc-play.is-busy,
.home-hero-actions .btn.is-busy,
.home-now .hn-acts .btn.is-busy {
  pointer-events: none;
  opacity: .6;
}
.home-card .hc-play.is-busy::after,
.home-hero-actions .btn.is-busy::after,
.home-now .hn-acts .btn.is-busy::after {
  content: '';
  position: absolute; inset: 0;
  border-radius: inherit;
  background: repeating-linear-gradient(115deg, transparent 0 8px, rgba(255,255,255,.07) 8px 16px);
  animation: home-busy 1s linear infinite;
}
.home-hero-actions .btn,
.home-now .hn-acts .btn { position: relative; overflow: hidden; }
/* The hero's own busy/disabled read: Restart holds "Restarting…" for the whole kill →
   wait-for-exit → relaunch, and everything else stays out of the way until it lands.
   (.is-busy above supplies the animated stripe + dimming.) */
.home-now .hn-acts .btn:disabled:not(.is-busy) { opacity: .5; cursor: default; }
.home-hero-actions .btn.primary::before {
  content: '';
  position: absolute; top: 0; bottom: 0; width: 42%;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.22), transparent);
  transform: translateX(-160%);
  animation: home-cta-sweep 7s ease-in-out infinite;
  pointer-events: none;
}
@keyframes home-cta-sweep {
  0%, 72% { transform: translateX(-160%); }
  100%    { transform: translateX(320%); }
}
.home-hero-actions .btn svg.rolling { animation: home-roll .42s cubic-bezier(.3,.9,.4,1); }
@keyframes home-roll {
  from { transform: rotate(0) scale(1); }
  60%  { transform: rotate(300deg) scale(1.18); }
  to   { transform: rotate(360deg) scale(1); }
}
@keyframes home-busy { to { background-position: 32px 0; } }

/* ═══════════════════════════════════════════════════════════════════
   BUNDLES — cross-kind groups (an erome album's videos + images, or a
   hand-picked set). A bundled tile wears a pink rim and a chip that
   opens the popout; the tile's own click still plays / opens as normal.
   ═══════════════════════════════════════════════════════════════════ */

.media-tile.in-bundle {
  border-color: rgba(244,114,182,.55);
  box-shadow: var(--shadow-card), 0 0 0 1px rgba(244,114,182,.35), 0 0 18px -6px rgba(244,114,182,.55);
}
.media-tile.in-bundle:hover {
  border-color: rgba(244,114,182,.9);
  box-shadow: var(--shadow-lift), 0 0 0 1px rgba(244,114,182,.6), 0 0 26px -6px rgba(244,114,182,.7);
}
/* The rim reads as a rim, not a border, at any tile size. */
.media-tile.in-bundle::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 2px solid rgba(244,114,182,.42);
  pointer-events: none;
  z-index: 6;
  transition: border-color .16s ease;
}
.media-tile.in-bundle:hover::after { border-color: rgba(244,114,182,.75); }

/* Chip lives top-RIGHT: top-left is the star stack + resolution/orientation
   badges. Always visible (it's the affordance), so the edit button shifts
   left on bundled tiles to keep the two from stacking on hover. */
.media-tile .tile-bundle-chip {
  position: absolute;
  top: 6px;
  /* Leads the top-left badge lane. The lane yields exactly this much via
     --lane-x (below) rather than flowing under the chip; when the select
     toggle is also showing, both shift right together. */
  left: 6px;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 2px 6px 2px 5px;
  border: 1px solid rgba(255,255,255,.22);
  border-radius: 999px;
  background: linear-gradient(135deg, rgba(244,114,182,.95), rgba(219,39,119,.95));
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  cursor: pointer;
  z-index: 7;
  box-shadow: 0 1px 4px rgba(0,0,0,.5);
  /* `left` animates because the chip yields to the select toggle when the tile
     is hovered — same easing the badge lane uses, so the row moves as one. */
  transition: transform .14s cubic-bezier(.2,.7,.3,1), box-shadow .14s, filter .14s, left .15s ease;
}
.media-tile .tile-bundle-chip svg { display: block; }
.media-tile .tile-bundle-chip:hover {
  transform: scale(1.08);
  filter: brightness(1.1);
  box-shadow: 0 2px 10px rgba(244,114,182,.6);
}
.media-tile .tile-bundle-chip:active { transform: scale(.96); }
.media-tile .tile-bundle-chip:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 1px;
}

/* ─── Drag a tile onto another tile → bundle ───
   The whole tile is draggable; the tile under the cursor swells, takes a pink
   ring and states what the drop will do. Tiles that can't take the drop (the
   ones being dragged, or ones already in the same bundle) never light up —
   their dragover simply doesn't preventDefault, so the cursor says "no". */
.media-tile.dragging {
  opacity: .45;
  transform: scale(.97);
  box-shadow: var(--shadow-card);
}
body.tile-dragging .media-tile { cursor: grabbing; }
/* Kill hover lift while dragging so only the real drop target reacts. */
body.tile-dragging .media-tile:hover { transform: none; box-shadow: var(--shadow-card); }
body.tile-dragging .media-tile.dragging:hover { transform: scale(.97); }

.media-tile.bundle-drop,
body.tile-dragging .media-tile.bundle-drop:hover {
  transform: translateY(-3px) scale(1.035);
  border-color: var(--accent-pink);
  box-shadow: 0 0 0 3px rgba(244,114,182,.55), 0 16px 34px -10px rgba(244,114,182,.65);
}
.tile-drop-hint {
  position: absolute;
  inset: 0;
  z-index: 9;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 8px;
  border-radius: inherit;
  background: linear-gradient(160deg, rgba(244,114,182,.34), rgba(219,39,119,.5));
  backdrop-filter: blur(1.5px);
  pointer-events: none;
  animation: tile-drop-hint-in .14s ease both;
}
.tile-drop-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  max-width: 100%;
  padding: 6px 11px;
  border-radius: 999px;
  border: 1px solid rgba(255,255,255,.28);
  background: rgba(17,17,24,.82);
  color: #fff;
  font-size: 11.5px;
  font-weight: 650;
  line-height: 1.2;
  text-align: center;
  box-shadow: 0 4px 14px rgba(0,0,0,.45);
}
.tile-drop-pill > span:last-child {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tile-drop-pill svg { flex: none; }
@keyframes tile-drop-hint-in {
  from { opacity: 0; transform: scale(.97); }
  to   { opacity: 1; transform: none; }
}
/* Post-drop "it landed here" pulse on the tile that absorbed the drop. */
.media-tile.bundle-flash { animation: tile-bundle-flash .85s ease both; }
@keyframes tile-bundle-flash {
  0%   { box-shadow: 0 0 0 0 rgba(244,114,182,.9), var(--shadow-card); }
  35%  { box-shadow: 0 0 0 5px rgba(244,114,182,.5), 0 14px 30px -10px rgba(244,114,182,.7); }
  100% { box-shadow: 0 0 0 0 rgba(244,114,182,0), var(--shadow-card); }
}
@media (prefers-reduced-motion: reduce) {
  .tile-drop-hint { animation: none; }
  .media-tile.bundle-drop,
  body.tile-dragging .media-tile.bundle-drop:hover { transform: none; }
  .media-tile.dragging { transform: none; }
  .media-tile.bundle-flash { animation: none; }
}

/* ─── Sidebar bundle chips ─── */
.media-bundle-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  max-height: 220px;
  overflow-y: auto;
}
.media-bundle-filters .chip.bundle-chip {
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  border-color: rgba(244,114,182,.35);
}
.media-bundle-filters .chip.bundle-chip:hover { border-color: rgba(244,114,182,.7); }
.media-bundle-filters .chip.bundle-chip.active {
  background: rgba(244,114,182,.22);
  border-color: var(--accent-pink);
  color: #fff;
}
/* Drop tiles straight onto a bundle in the sidebar to file them into it. */
.media-bundle-filters .chip.bundle-chip.drop-target {
  background: rgba(244,114,182,.3);
  border-color: var(--accent-pink);
  color: #fff;
  box-shadow: 0 0 0 2px rgba(244,114,182,.45);
}
/* Bundles that also have members in another tab get a small pink dot. */
.media-bundle-filters .chip.bundle-chip-cross::before {
  content: '';
  display: inline-block;
  width: 5px; height: 5px;
  margin-right: 5px;
  border-radius: 50%;
  background: var(--accent-pink);
  vertical-align: middle;
}
.media-section-none { font-size: 11px; margin: 4px 2px; }

/* ─── Bundle popout ─── */
.bundle-modal-scrim {
  position: fixed;
  inset: 0;
  z-index: 900;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(6,7,12,.55);
  backdrop-filter: blur(3px);
  opacity: 0;
  transition: opacity .18s ease;
}
.bundle-modal-scrim.open { opacity: 1; }
.bundle-modal-scrim.hidden { display: none; }

/* The bundle view reads as a PAGE, not a dialog: a bundle is a place you go
   to browse an album, not a question to dismiss. Near-full-bleed with the
   grid getting the room, while keeping the scrim so Escape/back still works. */
.bundle-modal {
  width: min(1600px, 96vw);
  max-height: min(94vh, 1200px);
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border: 1px solid rgba(244,114,182,.35);
  border-radius: var(--radius);
  box-shadow: 0 30px 90px rgba(0,0,0,.65), 0 0 0 1px rgba(244,114,182,.18), 0 0 60px -20px rgba(244,114,182,.5);
  overflow: hidden;
  transform: translateY(10px) scale(.97);
  opacity: 0;
  transition: transform .2s cubic-bezier(.2,.8,.3,1), opacity .18s ease;
}
.bundle-modal-scrim.open .bundle-modal { transform: none; opacity: 1; }

/* "This one, or the whole set?" — asked once per bundle when you click a
   bundled tile. Pink accents tie it to the rim on the tile you just clicked. */
/* "This item, or the whole set?" — the choice is visual, so the dialog shows
   the set. Spacing runs on a 6 / 10 / 14 / 18 rhythm and every colour is an
   existing token. */
.bundle-ask-panel {
  border-color: rgba(244,114,182,.35);
  width: min(460px, calc(100vw - 32px));
}
.bundle-ask-head { display: flex; align-items: flex-start; gap: 10px; }
.bundle-ask-icon {
  flex: 0 0 auto;
  display: grid; place-items: center;
  width: 30px; height: 30px;
  color: #fff;
  background: linear-gradient(135deg, #db2777, #f472b6);
  border-radius: 9px;
  box-shadow: 0 4px 14px rgba(219,39,119,.32);
}
.bundle-ask-titles { min-width: 0; }
.bundle-ask-eyebrow {
  font-size: 9.5px; font-weight: 700; letter-spacing: .7px; text-transform: uppercase;
  color: var(--accent-pink);
}
.bundle-ask-title {
  margin-top: 2px;
  font-size: 15px; font-weight: 700; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.bundle-ask-sub {
  margin-top: 1px;
  font-size: 11.5px; color: var(--text-dim);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* Thumbnail strip. Cells are grid fractions with a fixed aspect ratio, so the
   row is its final size before a single image arrives — the dialog never
   jumps. Column count is set inline from how many are actually shown. */
.bundle-ask-strip {
  display: grid;
  gap: 6px;
  margin-top: 14px;
}
.bundle-ask-cell {
  position: relative;
  aspect-ratio: 16 / 11;
  min-width: 0;
  overflow: hidden;
  background: var(--surface-2);
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  /* Dimmed, but only enough to let the clicked item lead — you still have to
     be able to READ the rest, since seeing the set is the point. */
  opacity: .76;
  transition: opacity .15s ease, border-color .15s ease, transform .15s ease;
}
.bundle-ask-cell img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bundle-ask-cell.is-loading {
  background:
    linear-gradient(90deg, transparent 0%, rgba(244,114,182,.12) 50%, transparent 100%),
    var(--surface-2);
  background-size: 200% 100%, auto;
  animation: media-shimmer 1.6s linear infinite;
}
.bundle-ask-cell.no-thumb img { display: none; }
.bundle-ask-cell.no-thumb {
  background: linear-gradient(135deg, rgba(244,114,182,.14), rgba(167,139,250,.09));
}
/* The item you actually clicked, sitting inside its set — this is the whole
   point of the strip: "this one" versus "all of these", at a glance. */
.bundle-ask-cell.is-current {
  opacity: 1;
  border-color: var(--accent-pink);
  box-shadow: 0 0 0 1px rgba(244,114,182,.5), 0 4px 14px rgba(0,0,0,.4);
}
.bundle-ask-thisone {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 1px 0 2px;
  font-size: 8px; font-weight: 700; letter-spacing: .3px; text-transform: uppercase;
  line-height: 1.25;
  text-align: center; color: #fff;
  /* Slim, and scrimmed into the frame rather than sitting on it as a solid
     bar — it should mark the thumbnail, not replace a third of it. */
  background: linear-gradient(to top, rgba(219,39,119,.95), rgba(219,39,119,.72));
}
.bundle-ask-cell.is-more {
  display: grid; place-items: center;
  opacity: 1;
  font-size: 12px; font-weight: 700;
  color: var(--text-dim);
  background: rgba(255,255,255,.05);
  border: 1px dashed var(--border-strong);
}

.bundle-ask-actions {
  display: flex; gap: 8px; margin-top: 18px; flex-wrap: wrap;
}
.bundle-ask-actions .btn { flex: 1 1 auto; min-width: 140px; justify-content: center; }

.bundle-ask-remember {
  display: flex; align-items: center; gap: 8px;
  margin-top: 14px;
  padding: 6px 8px; margin-left: -8px; margin-right: -8px;
  font-size: 11.5px; color: var(--text-mute); cursor: pointer;
  user-select: none;
  border-radius: var(--radius-sm);
  transition: color .15s ease, background .15s ease;
}
.bundle-ask-remember:hover { color: var(--text-dim); background: rgba(255,255,255,.04); }
.bundle-ask-remember input {
  accent-color: var(--accent-pink);
  width: 14px; height: 14px;
  cursor: pointer;
  flex: 0 0 auto;
}
.bundle-ask-remember input:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }

@media (prefers-reduced-motion: reduce) {
  .bundle-ask-cell { transition: none; }
  .bundle-ask-cell.is-loading { animation: none; }
}
@media (prefers-reduced-motion: reduce) {
  .bundle-modal, .bundle-modal-scrim { transition: none; }
  .bundle-modal { transform: none; }
}

.bundle-modal-head {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 16px 16px 12px;
  border-bottom: 1px solid var(--border);
  background: linear-gradient(180deg, rgba(244,114,182,.10), transparent);
}
.bundle-modal-heading { display: flex; gap: 10px; align-items: flex-start; min-width: 0; flex: 1; }
.bundle-modal-icon {
  flex: 0 0 auto;
  width: 30px; height: 30px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 9px;
  background: linear-gradient(135deg, rgba(244,114,182,.95), rgba(219,39,119,.95));
  color: #fff;
  box-shadow: 0 2px 10px rgba(244,114,182,.4);
}
.bundle-modal-titles { min-width: 0; }
.bundle-modal-title {
  margin: 0;
  font-size: 16px;
  line-height: 1.25;
  cursor: pointer;
  border-radius: 5px;
  padding: 1px 5px;
  margin-left: -5px;
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  transition: background .14s;
}
.bundle-modal-title-text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* The rename affordance only announces itself on hover/focus — a permanent
   pencil next to every title is noise. */
.bundle-modal-title-pencil {
  flex: 0 0 auto;
  display: inline-flex;
  color: var(--text-mute);
  opacity: 0;
  transform: translateX(-3px);
  transition: opacity .14s ease, transform .14s ease;
}
.bundle-modal-title:hover,
.bundle-modal-title:focus-visible { background: rgba(255,255,255,.06); }
.bundle-modal-title:hover .bundle-modal-title-pencil,
.bundle-modal-title:focus-visible .bundle-modal-title-pencil {
  opacity: 1;
  transform: none;
}
.bundle-modal-title:focus-visible {
  outline: 2px solid var(--accent-pink);
  outline-offset: 1px;
}
.bundle-modal-sub { margin: 3px 0 0; font-size: 11.5px; }
.bundle-modal-close {
  flex: 0 0 auto;
  width: 28px; height: 28px;
  border: none;
  border-radius: 50%;
  background: rgba(255,255,255,.06);
  color: var(--text-dim);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  transition: background .14s, color .14s;
}
.bundle-modal-close:hover { background: rgba(255,255,255,.14); color: var(--text); }

.bundle-modal-toolbar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  padding: 10px 16px;
  border-bottom: 1px solid var(--border);
  background: rgba(0,0,0,.16);
}
.bundle-modal-spacer { flex: 1 1 auto; }
.bundle-modal-count {
  flex: 0 0 auto;
  font-size: 11.5px;
  font-variant-numeric: tabular-nums;
  color: var(--text-mute);
  white-space: nowrap;
}
/* Filtered counts read as a live value, not chrome. */
.bundle-modal-count.is-filtered { color: var(--accent-pink); font-weight: 600; }
.bundle-modal-toolbar .btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.bundle-modal-toolbar .btn svg { display: block; opacity: .85; }
.bundle-modal-search {
  flex: 0 1 240px;
  min-width: 140px;
  padding: 5px 9px;
  font-size: 12px;
  color: var(--text);
  background: rgba(0,0,0,.3);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  outline: none;
  transition: border-color .14s;
}
.bundle-modal-search:focus { border-color: var(--accent-pink); }
.bundle-modal-kinds { display: flex; gap: 5px; }
.bundle-kind-chip {
  padding: 3px 9px;
  font-size: 11px;
  font-weight: 600;
  color: var(--text-dim);
  background: rgba(255,255,255,.04);
  border: 1px solid var(--border);
  border-radius: 999px;
  cursor: pointer;
  transition: background .14s, border-color .14s, color .14s;
}
.bundle-kind-chip:hover { border-color: var(--border-strong); color: var(--text); }
.bundle-kind-chip.active {
  color: #fff;
  background: rgba(244,114,182,.22);
  border-color: var(--accent-pink);
}

.bundle-modal-body {
  flex: 1;
  overflow-y: auto;
  padding: 14px 16px 18px;
  overscroll-behavior: contain;
}
/* Fade the last row so a long album visibly continues past the fold. */
.bundle-modal-body-wrap { position: relative; display: flex; min-height: 0; flex: 1; }
.bundle-modal-body-wrap::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 34px;
  background: linear-gradient(180deg, transparent, var(--surface));
  pointer-events: none;
  opacity: 0;
  transition: opacity .18s ease;
}
.bundle-modal-body-wrap.can-scroll::after { opacity: 1; }
.bundle-modal-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
  gap: 10px;
}
.bundle-modal-empty { text-align: center; padding: 28px 0; font-size: 12px; }

.bundle-cell {
  position: relative;
  display: flex;
  flex-direction: column;
  padding: 0;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface-2);
  overflow: hidden;
  cursor: pointer;
  text-align: left;
  aspect-ratio: 3 / 2;
  transition: transform .16s cubic-bezier(.2,.7,.3,1), border-color .16s, box-shadow .16s;
  /* Cascade in: each cell is nudged by its index so the grid assembles. */
  animation: bundle-cell-in .26s cubic-bezier(.2,.8,.3,1) both;
  animation-delay: calc(var(--i, 0) * 18ms);
}
@keyframes bundle-cell-in {
  from { opacity: 0; transform: translateY(8px) scale(.97); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .bundle-cell { animation: none; }
}
.bundle-cell:hover {
  transform: translateY(-3px);
  border-color: rgba(244,114,182,.7);
  box-shadow: 0 10px 26px rgba(0,0,0,.5);
}
.bundle-cell:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }
.bundle-cell.is-current {
  border-color: var(--accent-pink);
  box-shadow: 0 0 0 1px rgba(244,114,182,.5);
}
.bundle-cell img {
  position: absolute;
  inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
}
.bundle-cell.no-thumb img { opacity: 0; }
.bundle-cell.no-thumb::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
}
.bundle-cell-kind {
  position: absolute;
  top: 6px; left: 6px;
  padding: 2px 6px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .3px;
  text-transform: uppercase;
  color: #fff;
  background: rgba(0,0,0,.72);
  border-radius: 4px;
  z-index: 2;
}
.bundle-cell-videos .bundle-cell-kind { background: rgba(167,139,250,.9); }
.bundle-cell-images .bundle-cell-kind { background: rgba(6,182,212,.9); }
.bundle-cell-duration {
  position: absolute;
  top: 6px; right: 6px;
  padding: 2px 6px;
  font-size: 10px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: #fff;
  background: rgba(0,0,0,.72);
  border-radius: 4px;
  z-index: 2;
}
.bundle-cell-title {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 14px 8px 6px;
  font-size: 11.5px;
  line-height: 1.3;
  color: #fff;
  background: linear-gradient(180deg, transparent, rgba(0,0,0,.85));
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  z-index: 2;
}

/* ─── Bundle target picker (bulk bar / context menu) ─── */
.bundle-pick-panel .bundle-pick-new { width: 100%; margin-bottom: 8px; }
.bundle-pick-panel .bundle-pick-search {
  width: 100%;
  box-sizing: border-box;
  padding: 6px 9px;
  font-size: 12px;
  color: var(--text);
  background: rgba(0,0,0,.3);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  outline: none;
  margin-bottom: 6px;
}
.bundle-pick-panel .bundle-pick-search:focus { border-color: var(--accent-pink); }
.bundle-pick-list {
  max-height: 240px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.bundle-pick-row {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 7px 9px;
  font-size: 12.5px;
  color: var(--text);
  background: rgba(255,255,255,.03);
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  cursor: pointer;
  text-align: left;
  transition: background .12s, border-color .12s;
}
.bundle-pick-row:hover { background: rgba(244,114,182,.14); border-color: rgba(244,114,182,.5); }
.bundle-pick-title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bundle-pick-count {
  flex: 0 0 auto;
  padding: 1px 7px;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--text-dim);
  background: rgba(0,0,0,.35);
  border-radius: 999px;
}

/* ─── "Keep as one bundle" row in the Add-from-URL modal ─── */
.scrape-bundle-row {
  margin-top: 10px;
  padding: 10px 12px;
  border: 1px solid rgba(244,114,182,.35);
  border-radius: var(--radius-sm);
  background: rgba(244,114,182,.07);
}
.scrape-bundle-row.hidden { display: none; }
.scrape-bundle-toggle {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  user-select: none;
}
.scrape-bundle-toggle input { accent-color: var(--accent-pink); width: 15px; height: 15px; cursor: pointer; }
.scrape-bundle-row #scrape-bundle-title {
  width: 100%;
  box-sizing: border-box;
  margin-top: 8px;
  padding: 6px 9px;
  font-size: 12.5px;
  color: var(--text);
  background: rgba(0,0,0,.28);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  outline: none;
  transition: border-color .14s, opacity .14s;
}
.scrape-bundle-row #scrape-bundle-title:focus { border-color: var(--accent-pink); }
.scrape-bundle-hint { font-size: 11px; margin: 6px 0 0; line-height: 1.4; }

/* ─── Dead-end rescue ───────────────────────────────────────────────────────
   Shown only when every scraper and the browser resolver came back empty. Amber
   rather than red: on the sites this exists for nothing is broken — the page
   genuinely holds no link — so it reads as "here's the way round", not "error". */
.scrape-rescue {
  margin-top: 10px;
  padding: 11px 12px;
  border: 1px solid rgba(245,158,11,.38);
  border-radius: var(--radius-sm);
  background: rgba(245,158,11,.08);
  animation: scrape-rescue-in 160ms ease both;
}
.scrape-rescue.hidden { display: none; }
@keyframes scrape-rescue-in { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: none; } }
.scrape-rescue-lead { margin: 0; font-size: 13px; font-weight: 600; }
.scrape-rescue-why { font-size: 11px; margin: 5px 0 9px; line-height: 1.45; }
.scrape-rescue-option {
  display: flex;
  align-items: center;
  gap: 9px;
  flex-wrap: wrap;
}
.scrape-rescue-option.hidden { display: none; }
.scrape-rescue-option + .scrape-rescue-option {
  margin-top: 9px;
  padding-top: 9px;
  border-top: 1px solid rgba(245,158,11,.2);
}
.scrape-rescue-hint { font-size: 11px; line-height: 1.4; flex: 1 1 240px; min-width: 0; }
.scrape-rescue-manual { align-items: flex-end; }
.scrape-rescue-label {
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 11px;
  flex: 1 1 260px;
  min-width: 0;
}
.scrape-rescue-label #scrape-manual-url {
  width: 100%;
  min-width: 0;
  padding: 6px 8px;
  font: inherit;
  font-size: 12px;
  color: var(--text);
  background: var(--bg-input, rgba(0,0,0,.25));
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  outline: none;
  text-overflow: ellipsis;
  transition: border-color .14s;
}
.scrape-rescue-label #scrape-manual-url:focus { border-color: var(--accent-pink); }
.scrape-rescue .btn[disabled] { opacity: .55; cursor: default; }

/* Narrow windows: the popout goes near-fullscreen and the grid relaxes to
   two columns so titles stay readable. */
@media (max-width: 720px) {
  .bundle-modal-scrim { padding: 10px; }
  .bundle-modal { width: 100%; max-height: 92vh; }
  .bundle-modal-toolbar { gap: 6px; }
  .bundle-modal-search { flex: 1 1 100%; }
  .bundle-modal-spacer { display: none; }
  .bundle-modal-grid { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); }
}

/* ═══════════════ Bundles: collapsed stack tile, playlist, page ═══════════════
   A ripped album arrives as N loose items. The grid draws it as ONE stacked
   tile; opening that gives the popout (grid to skim, playlist to work
   through); filtering to it gives a dedicated page. Everything below shares
   the bundle language already in use: pink accent, existing radii, existing
   surfaces. */

/* Pink-accent button, the bundle counterpart to .btn.primary. */
.btn.accent {
  color: #fff;
  background: linear-gradient(135deg, #db2777 0%, #f472b6 100%);
  border: 0;
  font-weight: 600;
  display: inline-flex; align-items: center; gap: 6px;
  box-shadow: 0 4px 16px rgba(219,39,119,.32);
}
.btn.accent:hover { filter: brightness(1.08); }
.btn.accent:active { filter: brightness(.95); transform: translateY(1px); }
.btn.accent:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }
.btn.accent[disabled] { opacity: .5; cursor: default; filter: none; box-shadow: none; }

/* ─── "Group bundles" switch (sidebar) ─── */
/* .media-bundle-filters is a wrapping flex row of chips. Without an explicit
   full-width basis the switch block is treated as just another chip, and the
   "All" chip flows up beside it and gets crushed into a vertical sliver. */
.bundle-switches {
  flex: 0 0 100%;
  width: 100%;
  display: flex; flex-direction: column; gap: 5px;
  margin: 0 0 4px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border);
}
.bundle-group-switch {
  display: flex; align-items: center; gap: 8px;
  width: 100%;
  margin: 0;
  padding: 6px 8px;
  font: inherit; font-size: 11.5px;
  color: var(--text-dim);
  background: rgba(255,255,255,.03);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  cursor: pointer;
  text-align: left;
  transition: color .15s, border-color .15s, background .15s;
}
.bundle-group-switch:hover:not([disabled]) {
  color: var(--text);
  background: rgba(255,255,255,.06);
  border-color: var(--border-strong);
}
.bundle-group-switch:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }
.bundle-group-switch[disabled] { opacity: .45; cursor: default; }
.bundle-group-switch.on { color: var(--text); border-color: rgba(244,114,182,.4); }
.bundle-group-track {
  position: relative; flex: 0 0 auto;
  width: 26px; height: 15px;
  border-radius: 999px;
  background: rgba(255,255,255,.12);
  transition: background .16s ease;
}
.bundle-group-switch.on .bundle-group-track { background: var(--accent-pink); }
.bundle-group-knob {
  position: absolute; top: 2px; left: 2px;
  width: 11px; height: 11px;
  border-radius: 50%;
  background: #fff;
  transition: transform .16s ease;
}
.bundle-group-switch.on .bundle-group-knob { transform: translateX(11px); }

/* ─── The collapsed stack tile ─── */
/* overflow:visible so the two "cards underneath" can peek out below; the cover
   clips itself instead. They sit 5/9px proud, inside the grid's 14px gap, so
   they can never touch the row beneath. */
.media-tile.media-tile-bundle {
  overflow: visible;
  border-color: rgba(244,114,182,.42);
  background: var(--surface);
}
.media-tile.media-tile-bundle::before,
.media-tile.media-tile-bundle::after {
  content: '';
  position: absolute;
  left: 7px; right: 7px; bottom: -5px;
  height: 12px;
  border: 1px solid rgba(244,114,182,.3);
  border-top: 0;
  border-radius: 0 0 var(--radius) var(--radius);
  background: var(--surface-2);
  transition: bottom .15s ease, opacity .15s ease;
}
.media-tile.media-tile-bundle::after {
  left: 14px; right: 14px; bottom: -9px;
  background: var(--surface);
  opacity: .75;
}
.media-tile.media-tile-bundle:hover {
  border-color: var(--accent-pink);
  box-shadow: 0 4px 8px rgba(0,0,0,.5), 0 24px 60px rgba(0,0,0,.55), 0 0 0 1px rgba(244,114,182,.35);
}
.media-tile.media-tile-bundle:hover::before { bottom: -7px; }
.media-tile.media-tile-bundle:hover::after { bottom: -13px; opacity: .9; }
.media-tile.media-tile-bundle:focus-visible {
  outline: 2px solid var(--accent-pink);
  outline-offset: 2px;
}
.media-tile.media-tile-bundle.dragging { opacity: .45; }

/* VR has no ordinary-tile ratio to inherit (its grid is one tile per row), so
   the stack states the 16/9 it always drew at. */
.media-tile-bundle[data-type="vr"] { aspect-ratio: 16 / 9; }

/* Collage cover. The CARD owns the aspect ratio (via --tile-aspect, same token
   as an ordinary tile of this tab) and the collage fills it edge to edge — so a
   stack is the same box as the cards beside it, and the grid is already the
   right size before any thumbnail loads: nothing shifts when they land.
   Each layout is chosen for the member count so there is never an empty cell:
   a 3-item bundle gets hero + 2, not a 2×2 with a hole in it. */
.bundle-cover {
  position: absolute;
  inset: 0;
  display: grid;
  gap: 3px;
  background: var(--bg-2);
  border-radius: calc(var(--radius) - 1px);
  overflow: hidden;
}

.bundle-cover[data-layout="solo"] { grid-template-columns: 1fr; }
.bundle-cover[data-layout="duo"]  { grid-template-columns: 1fr 1fr; }
/* Hero + 2 stacked. The hero is a touch wider than half so the pair beside it
   don't read as offcuts. */
.bundle-cover[data-layout="trio"] { grid-template-columns: 1.45fr 1fr; grid-template-rows: 1fr 1fr; }
.bundle-cover[data-layout="trio"] > :first-child { grid-row: 1 / 3; }
.bundle-cover[data-layout="quad"] { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
/* Hero + a 2×2 — five cells with no gap and no runt. */
.bundle-cover[data-layout="five"] { grid-template-columns: 1.55fr 1fr 1fr; grid-template-rows: 1fr 1fr; }
.bundle-cover[data-layout="five"] > :first-child { grid-row: 1 / 3; }
.bundle-cover[data-layout="six"]  { grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; }

.bundle-cover-cell {
  position: relative;
  overflow: hidden;
  background: var(--surface-2);
  min-width: 0; min-height: 0;
}
/* Crop to fill — never letterboxed, never stretched, whatever the source
   aspect. This is what lets a portrait still and a 16:9 video frame sit in the
   same grid without one of them looking wrong. */
.bundle-cover-cell img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  opacity: 0;
  transition: opacity .18s ease;
}
.bundle-cover-cell:not(.is-loading) img { opacity: 1; }
/* Skeleton per cell while its thumbnail is in flight, so the collage fills in
   rather than flashing empty boxes. */
.bundle-cover-cell.is-loading {
  background:
    linear-gradient(90deg, transparent 0%, rgba(244,114,182,.12) 50%, transparent 100%),
    var(--surface-2);
  background-size: 200% 100%, auto;
  animation: media-shimmer 1.6s linear infinite;
}
/* Nothing left to substitute in — a quiet tint, never a broken-image glyph. */
.bundle-cover-cell.no-thumb img { display: none; }
.bundle-cover-cell.no-thumb {
  background: linear-gradient(135deg, rgba(244,114,182,.14), rgba(167,139,250,.09));
}
/* "+N" on the last cell. Scrimmed rather than solid so the picture underneath
   still reads as part of the collage. */
.bundle-cover-more {
  position: absolute; inset: 0;
  display: grid; place-items: center;
  font-size: 15px; font-weight: 700; letter-spacing: .3px;
  color: #fff;
  background: rgba(5,6,10,.58);
  backdrop-filter: blur(2px);
  text-shadow: 0 1px 6px rgba(0,0,0,.6);
}
.bundle-cover[data-layout="six"] .bundle-cover-more { font-size: 13px; }

@media (prefers-reduced-motion: reduce) {
  .bundle-cover-cell.is-loading { animation: none; }
  .bundle-cover-cell img { transition: none; }
}

/* The count chip reuses the per-item chip verbatim — one badge shape means
   one idea, whether it's on a member or on the stack. */
.media-tile-bundle .tile-bundle-chip.is-stack {
  left: 6px;
  opacity: 1;
  pointer-events: none;
}

.bundle-cross-badge {
  position: absolute;
  top: 6px; right: 6px;
  z-index: 3;
  padding: 2px 7px;
  font-size: 10px; font-weight: 600; letter-spacing: .2px;
  color: #fde7f3;
  background: rgba(219,39,119,.85);
  border: 1px solid rgba(244,114,182,.5);
  border-radius: 999px;
  backdrop-filter: blur(6px);
  max-width: calc(100% - 60px);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* Footer. Overlaid on the collage exactly like an ordinary tile's .tile-meta —
   same corner, same padding, same scrim — rather than a band BELOW the cover.
   In flow it added its own height on top of the cover's, which is what made a
   stack ~56px taller than every card in its row. As an overlay it costs the
   box nothing, so the count line keeps its own line and the title stays full
   width. */
.bundle-tile-info {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  z-index: 2;
  /* Bottom/side padding matches .tile-meta exactly. The extra TOP padding is
     scrim runway: this footer carries two lines where .tile-meta carries one,
     so without it the title would sit in the faded half of the same gradient
     and lose contrast against a bright collage cell. */
  padding: 20px 10px 8px;
  min-width: 0;
  color: var(--text);
  background: linear-gradient(to top, rgba(0,0,0,.92), rgba(0,0,0,.55) 60%, transparent);
  border-radius: 0 0 calc(var(--radius) - 1px) calc(var(--radius) - 1px);
}
.bundle-tile-title {
  font-size: 13px; font-weight: 600; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.bundle-tile-sub {
  margin-top: 2px;
  font-size: 11px; color: rgba(255,255,255,.7);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* Hover CTA — the stack says what clicking does instead of leaving you to
   guess between "open" and "expand". */
.bundle-tile-cta {
  position: absolute;
  inset: 0 0 auto;
  height: 100%;
  display: flex; align-items: center; justify-content: center;
  opacity: 0;
  background: linear-gradient(180deg, rgba(10,11,16,.15), rgba(10,11,16,.55));
  border-radius: calc(var(--radius) - 1px);
  pointer-events: none;
  transition: opacity .15s ease;
}
.media-tile-bundle:hover .bundle-tile-cta,
.media-tile-bundle:focus-visible .bundle-tile-cta { opacity: 1; }
.bundle-tile-cta-pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 13px;
  font-size: 12px; font-weight: 600; color: #fff;
  background: rgba(219,39,119,.9);
  border-radius: 999px;
  box-shadow: 0 6px 20px rgba(0,0,0,.45);
  transform: translateY(4px);
  transition: transform .15s ease;
}
.media-tile-bundle:hover .bundle-tile-cta-pill { transform: none; }

/* ── The bundle frame ──
   A stack wears its own frame: rose moulding (the bundle pink every bundle
   badge already uses) and a linked-gem plaque on the rail with the count, in
   the same painted set as favorite / just added / watched
   (icons/tile/bundle.webp). The stack's own rule above sets a flat background,
   so the moulding is restated here, and every layer of the stack — collage,
   footer, hover call-to-action — is inset into the opening like any framed
   tile's artwork. */
.media-tile[data-frame="bundle"] { --frame-ink: #f472b6; --frame-soft: rgba(244,114,182,.34); --frame-wash: rgba(244,114,182,.52); --frame-art: url('data:image/webp;base64,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'); --frame-slice: 61; }
.media-tile.media-tile-bundle[data-frame] {
  border-color: transparent;
  background-color: #111219;
  background-image: none;
}
.media-tile.media-tile-bundle[data-frame]:hover { border-color: transparent; }
/* A framed tile sets its own box-shadow, which used to swallow the selection
   ring: a selected stack (or favourite) showed only its small tick. Same ring
   as .media-tile.selected, drawn outside the moulding. */
.media-tile[data-frame].selected,
.media-tile[data-frame].selected:hover {
  box-shadow: 0 0 0 2px rgba(167,139,250,.9), 0 0 18px rgba(167,139,250,.35), var(--shadow-card);
}
.media-tile.media-tile-bundle[data-frame]::before,
.media-tile.media-tile-bundle[data-frame]::after { border-color: var(--frame-soft); background: #1a1420; }
.media-tile-bundle[data-frame] .bundle-cover,
.media-tile-bundle[data-frame] .bundle-tile-cta {
  inset: var(--frame-rail) var(--frame-band) var(--frame-band);
  height: auto;
  border-radius: var(--frame-inner);
}
.media-tile-bundle[data-frame] .bundle-tile-info {
  left: var(--frame-band); right: var(--frame-band); bottom: var(--frame-band);
  border-radius: 0 0 var(--frame-inner) var(--frame-inner);
}
.media-tile-bundle[data-frame] .bundle-cross-badge { top: var(--ovl-t); right: var(--ovl-x); }
.media-tile-bundle[data-frame] .tile-bundle-chip.is-stack { display: none; }

@media (prefers-reduced-motion: reduce) {
  .media-tile.media-tile-bundle::before,
  .media-tile.media-tile-bundle::after,
  .bundle-tile-cta, .bundle-tile-cta-pill,
  .bundle-group-track, .bundle-group-knob { transition: none; }
  .bundle-tile-cta-pill { transform: none; }
}

/* ─── Dedicated bundle page header ─── */
.bundle-page-head {
  display: flex; align-items: center; gap: 14px;
  flex-wrap: wrap;
  margin: 0 0 16px;
  padding: 12px 14px;
  background:
    linear-gradient(135deg, rgba(219,39,119,.14), rgba(167,139,250,.07)),
    var(--surface);
  border: 1px solid rgba(244,114,182,.32);
  border-radius: var(--radius);
  box-shadow: var(--shadow-card);
}
.bundle-page-back {
  display: inline-flex; align-items: center; gap: 5px;
  flex: 0 0 auto;
  padding: 6px 10px 6px 7px;
  font: inherit; font-size: 12px;
  color: var(--text-dim);
  background: rgba(0,0,0,.22);
  border: 1px solid var(--border);
  border-radius: 999px;
  cursor: pointer;
  transition: color .15s, border-color .15s, background .15s;
}
.bundle-page-back:hover { color: var(--text); background: rgba(0,0,0,.35); border-color: var(--border-strong); }
.bundle-page-back:active { transform: translateY(1px); }
.bundle-page-back:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }
.bundle-page-back span { text-transform: capitalize; }

.bundle-page-main { display: flex; align-items: center; gap: 10px; min-width: 0; flex: 1 1 260px; }
.bundle-page-icon {
  flex: 0 0 auto;
  display: grid; place-items: center;
  width: 30px; height: 30px;
  color: #fff;
  background: linear-gradient(135deg, #db2777, #f472b6);
  border-radius: 9px;
  box-shadow: 0 4px 14px rgba(219,39,119,.35);
}
.bundle-page-titles { min-width: 0; }
.bundle-page-title {
  display: inline-flex; align-items: center; gap: 6px;
  margin: 0;
  max-width: 100%;
  padding: 2px 6px;
  margin-left: -6px;
  font-size: 17px; font-weight: 700; line-height: 1.25;
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: background .15s;
}
.bundle-page-title-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bundle-page-pencil {
  flex: 0 0 auto;
  display: inline-flex;
  opacity: 0; color: var(--accent-pink);
  transition: opacity .15s;
}
.bundle-page-title:hover, .bundle-page-title:focus-visible { background: rgba(255,255,255,.07); }
.bundle-page-title:hover .bundle-page-pencil,
.bundle-page-title:focus-visible .bundle-page-pencil { opacity: 1; }
.bundle-page-title:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 1px; }
.bundle-page-meta {
  margin: 1px 0 0;
  font-size: 11.5px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.bundle-page-actions { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; margin-left: auto; }

/* ─── Popout: Grid ⇄ Playlist switch ─── */
.bundle-view-switch {
  display: inline-flex;
  flex: 0 0 auto;
  padding: 2px;
  background: rgba(0,0,0,.28);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}
.bundle-view-switch button {
  display: grid; place-items: center;
  width: 26px; height: 22px;
  color: var(--text-mute);
  background: transparent;
  border: 0;
  border-radius: 6px;
  cursor: pointer;
  transition: color .14s, background .14s;
}
.bundle-view-switch button:hover { color: var(--text); background: rgba(255,255,255,.07); }
.bundle-view-switch button.active { color: #fff; background: rgba(219,39,119,.8); }
.bundle-view-switch button:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 1px; }

/* ─── Popout: playlist rows ─── */
.bundle-modal-grid.is-list { display: flex; flex-direction: column; gap: 3px; }
.bundle-row {
  position: relative;
  display: flex; align-items: center; gap: 10px;
  padding: 6px 8px;
  min-width: 0;
  text-align: left;
  background: transparent;
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  cursor: pointer;
  animation: bundle-cell-in .22s ease both;
  animation-delay: calc(var(--i, 0) * 12ms);
  transition: background .14s, border-color .14s;
}
.bundle-row:hover { background: rgba(255,255,255,.05); border-color: var(--border); }
.bundle-row:active { background: rgba(255,255,255,.08); }
.bundle-row:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: -1px; }
.bundle-row.is-current { background: rgba(219,39,119,.14); border-color: rgba(244,114,182,.45); }
.bundle-row-num {
  flex: 0 0 22px;
  font-size: 11px; font-variant-numeric: tabular-nums;
  color: var(--text-mute); text-align: right;
}
.bundle-row:hover .bundle-row-num { color: var(--text-dim); }
.bundle-row-thumb {
  position: relative;
  flex: 0 0 auto;
  width: 56px; height: 34px;
  border-radius: 5px;
  overflow: hidden;
  background: var(--surface-2);
}
.bundle-row-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bundle-row-thumb.no-thumb img { display: none; }
.bundle-row-thumb.no-thumb { background: linear-gradient(135deg, rgba(244,114,182,.16), rgba(167,139,250,.1)); }
.bundle-row-main { display: flex; min-width: 0; flex: 1 1 auto; }
.bundle-row-title {
  font-size: 12.5px; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* Fixed right-hand columns, so kind / size / duration line up down the list
   instead of ragging with each title's length. */
.bundle-row-side {
  display: flex; align-items: center; gap: 10px;
  flex: 0 0 auto;
  font-size: 10.5px; color: var(--text-mute);
  font-variant-numeric: tabular-nums;
}
.bundle-row-kind {
  width: 44px; text-align: center;
  padding: 2px 0;
  font-size: 9.5px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase;
  border-radius: 999px;
  background: rgba(255,255,255,.07);
  color: var(--text-dim);
}
.bundle-row-kind.is-videos { background: rgba(167,139,250,.16); color: #c4b5fd; }
.bundle-row-kind.is-images { background: rgba(6,182,212,.16); color: #67e8f9; }
.bundle-row-size { width: 58px; text-align: right; }
.bundle-row-dur  { width: 46px; text-align: right; }
.bundle-row-progress {
  position: absolute; left: 8px; right: 8px; bottom: 2px;
  height: 2px; border-radius: 999px;
  background: rgba(255,255,255,.1);
  overflow: hidden;
}
.bundle-row-progress > span { display: block; height: 100%; background: var(--accent-pink); }
.bundle-row-play {
  flex: 0 0 auto;
  display: grid; place-items: center;
  width: 28px; height: 28px;
  color: var(--text-dim);
  background: rgba(255,255,255,.05);
  border: 1px solid var(--border);
  border-radius: 50%;
  cursor: pointer;
  opacity: 0;
  transition: opacity .14s, color .14s, background .14s, border-color .14s;
}
.bundle-row:hover .bundle-row-play,
.bundle-row:focus-within .bundle-row-play { opacity: 1; }
.bundle-row-play:hover { color: #fff; background: rgba(219,39,119,.85); border-color: transparent; }
.bundle-row-play:active { transform: scale(.94); }
.bundle-row-play:focus-visible { opacity: 1; outline: 2px solid var(--accent-pink); outline-offset: 1px; }
/* Touch/coarse pointers never hover, so the play button has to be there. */
@media (hover: none) { .bundle-row-play { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .bundle-row { animation: none; } }

/* "Show N more" — paging, so a 400-item album opens as fast as a 4-item one. */
.bundle-more {
  display: block;
  width: 100%;
  margin: 10px 0 2px;
  padding: 9px 12px;
  font: inherit; font-size: 12px; font-weight: 600;
  color: var(--text-dim);
  background: rgba(255,255,255,.04);
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: color .15s, background .15s, border-color .15s;
}
.bundle-more:hover { color: var(--text); background: rgba(255,255,255,.07); border-color: var(--accent-pink); }
.bundle-more:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }
.bundle-more.hidden { display: none; }

/* ─── Player: bundle queue bar ─── */
.video-queue-bar {
  position: absolute;
  top: 12px; left: 50%;
  transform: translateX(-50%);
  z-index: 6;
  display: flex; align-items: center; gap: 4px;
  max-width: min(520px, calc(100% - 120px));
  padding: 4px 5px;
  color: var(--text);
  background: rgba(10,11,16,.78);
  border: 1px solid rgba(244,114,182,.35);
  border-radius: 999px;
  backdrop-filter: blur(10px);
  box-shadow: 0 8px 28px rgba(0,0,0,.5);
  opacity: .5;
  transition: opacity .18s ease;
}
.video-stage:hover .video-queue-bar,
.video-queue-bar:focus-within { opacity: 1; }
.vq-btn {
  flex: 0 0 auto;
  display: grid; place-items: center;
  width: 26px; height: 26px;
  color: var(--text-dim);
  background: transparent;
  border: 0; border-radius: 50%;
  cursor: pointer;
  transition: color .14s, background .14s;
}
.vq-btn:hover:not([disabled]) { color: #fff; background: rgba(255,255,255,.12); }
.vq-btn:active:not([disabled]) { transform: scale(.93); }
.vq-btn[disabled] { opacity: .3; cursor: default; }
.vq-btn:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 1px; }
.vq-label { display: flex; align-items: baseline; gap: 7px; min-width: 0; padding: 0 4px; }
.vq-pos {
  flex: 0 0 auto;
  font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums;
  color: var(--accent-pink);
}
.vq-name {
  font-size: 11.5px; color: var(--text-dim);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
@media (prefers-reduced-motion: reduce) { .video-queue-bar { transition: none; } }

/* ─── Viewers: bundle chip (image lightbox + video player) ───
   The tile chip's twin, parked just left of the 44px × (top 14 / right 18)
   and centred on it. Opens the bundle popout. */
.viewer-bundle-chip {
  position: absolute;
  top: 18px; right: 72px;
  z-index: 10;
  display: inline-flex; align-items: center; gap: 7px;
  height: 36px;
  max-width: min(340px, calc(100vw - 110px));
  padding: 0 13px 0 11px;
  color: #fff;
  font-size: 12.5px; font-weight: 600; line-height: 1;
  background: linear-gradient(135deg, rgba(244,114,182,.92), rgba(219,39,119,.92));
  border: 1px solid rgba(255,255,255,.22);
  border-radius: 999px;
  box-shadow: 0 6px 22px rgba(0,0,0,.5);
  cursor: pointer;
  transition: transform .14s cubic-bezier(.2,.7,.3,1), box-shadow .14s, filter .14s;
}
.viewer-bundle-chip[hidden] { display: none; }
.viewer-bundle-chip svg { flex: 0 0 auto; display: block; width: 14px; height: 14px; }
.viewer-bundle-chip .vbc-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.viewer-bundle-chip .vbc-pos {
  flex: 0 0 auto;
  padding-left: 7px;
  border-left: 1px solid rgba(255,255,255,.35);
  font-variant-numeric: tabular-nums; font-weight: 700;
}
.viewer-bundle-chip:hover { transform: scale(1.04); filter: brightness(1.08); box-shadow: 0 6px 24px rgba(244,114,182,.55); }
.viewer-bundle-chip:active { transform: scale(.97); }
.viewer-bundle-chip:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
/* Phone width: the queue bar owns the top centre, so the chip drops the
   title and keeps icon + position. */
@media (max-width: 720px) {
  .viewer-bundle-chip { right: 68px; padding: 0 11px 0 10px; }
  .viewer-bundle-chip .vbc-title { display: none; }
  .viewer-bundle-chip .vbc-pos { padding-left: 0; border-left: 0; }
}
@media (prefers-reduced-motion: reduce) { .viewer-bundle-chip { transition: none; } }

/* ─── Narrow windows ─── */
@media (max-width: 720px) {
  .bundle-page-head { gap: 10px; padding: 10px 11px; }
  .bundle-page-title { font-size: 15px; }
  /* The action row drops to its own line rather than squeezing the title to
     nothing — margin-left:auto would otherwise pin it against the meta text. */
  .bundle-page-actions { margin-left: 0; width: 100%; }
  .bundle-page-actions .btn { flex: 1 1 0; justify-content: center; }
  /* Wrapped onto three lines, source order stops meaning importance — so
     state it. Play all leads; Ungroup (destructive) goes last, where a
     mis-tap is least likely. */
  .bundle-modal-toolbar .bundle-modal-search { order: 1; }
  .bundle-modal-toolbar .bundle-modal-kinds  { order: 2; }
  .bundle-modal-toolbar .bundle-modal-count  { order: 3; }
  .bundle-modal-toolbar [data-bundle-act="playall"] { order: 4; }
  .bundle-modal-toolbar .bundle-view-switch  { order: 5; }
  .bundle-modal-toolbar [data-bundle-act="filter"]  { order: 6; }
  .bundle-modal-toolbar [data-bundle-act="source"]  { order: 7; }
  .bundle-modal-toolbar [data-bundle-act="ungroup"] { order: 8; margin-left: auto; }
  .bundle-row-thumb { width: 46px; height: 28px; }
  .bundle-row-size { display: none; }
  .bundle-cross-badge { max-width: calc(100% - 52px); font-size: 9.5px; padding: 2px 6px; }
}
@media (max-width: 460px) {
  .bundle-row-kind { display: none; }
  .bundle-page-back span { display: none; }
  .bundle-page-back { padding: 6px; }
  .bundle-tile-sub { font-size: 10.5px; }
}

/* ═══════════════ Bundle member viewer ═══════════════
   Layers ABOVE the bundle popout (z 900) and never closes it — so dismissing
   the viewer reveals the list exactly as you left it: same tab, same scroll,
   same filter. Nothing here navigates; the only way out to a library tab is
   the explicit "Open in …" button. */
.bundle-viewer-scrim {
  position: fixed;
  inset: 0;
  z-index: 950;
  display: flex; align-items: center; justify-content: center;
  padding: 20px;
  background: rgba(5,6,10,.86);
  backdrop-filter: blur(10px);
  opacity: 0;
  transition: opacity .16s ease;
}
.bundle-viewer-scrim.open { opacity: 1; }
.bundle-viewer-scrim.hidden { display: none; }
.bundle-viewer {
  position: relative;
  display: flex; flex-direction: column;
  width: min(1200px, 100%); height: 100%;
  min-height: 0;
  transform: scale(.985);
  transition: transform .16s ease;
}
.bundle-viewer-scrim.open .bundle-viewer { transform: none; }

.bundle-viewer-head {
  display: flex; align-items: center; gap: 10px;
  flex: 0 0 auto;
  padding: 8px 10px;
  background: rgba(22,25,36,.9);
  border: 1px solid var(--border);
  border-radius: var(--radius) var(--radius) 0 0;
}
.bundle-viewer-pos {
  flex: 0 0 auto;
  font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums;
  color: var(--accent-pink);
}
.bundle-viewer-title {
  min-width: 0;
  font-size: 13px; font-weight: 600; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.bundle-viewer-kind {
  flex: 0 0 auto;
  padding: 2px 8px;
  font-size: 9.5px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase;
  border-radius: 999px;
  background: rgba(255,255,255,.07); color: var(--text-dim);
}
.bundle-viewer-kind.is-videos { background: rgba(167,139,250,.16); color: #c4b5fd; }
.bundle-viewer-kind.is-images { background: rgba(6,182,212,.16); color: #67e8f9; }
.bundle-viewer-spacer { flex: 1 1 auto; }
.bundle-viewer-close {
  flex: 0 0 auto;
  width: 44px; height: 44px;
  display: grid; place-items: center;
  font-size: 19px; line-height: 1;
  color: var(--text-dim);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 50%;
  cursor: pointer;
  transition: color .14s, background .14s, border-color .14s;
}
.bundle-viewer-close:hover { color: var(--text); background: rgba(255,255,255,.08); border-color: var(--border); }
.bundle-viewer-close:active { transform: scale(.94); }
.bundle-viewer-close:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }

.bundle-viewer-stage {
  position: relative;
  flex: 1 1 auto;
  min-height: 0;
  display: flex; align-items: center; justify-content: center;
  padding: 12px;
  background: rgba(10,11,16,.72);
  border: 1px solid var(--border);
  border-top: 0;
}
.bundle-viewer-img {
  max-width: 100%; max-height: 100%;
  width: auto; height: auto;
  display: block;
  border-radius: var(--radius-sm);
  background: #000;
}
/* Video fills the stage rather than sizing off its metadata — a stream that
   hasn't reported dimensions yet (or at all) would otherwise collapse the
   element to a few pixels of naked controls. */
.bundle-viewer-video {
  width: 100%; height: 100%;
  object-fit: contain;
  display: block;
  border-radius: var(--radius-sm);
  background: #000;
}
.bundle-viewer-stage.no-media::after {
  content: 'This file could not be loaded.';
  position: absolute; inset: auto;
  font-size: 12px; color: var(--text-mute);
}
.bundle-viewer-stage.no-media .bundle-viewer-img { display: none; }
.bundle-viewer-fallback {
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  font-size: 13px; color: var(--text-dim);
}
.bundle-viewer-fallback p { margin: 0; }
.bundle-viewer-comic-cover {
  max-height: min(60vh, 520px); max-width: 100%;
  border-radius: 8px; cursor: pointer;
  box-shadow: 0 8px 28px rgba(0,0,0,.45);
}

.bundle-viewer-nav {
  position: absolute;
  top: 50%; transform: translateY(-50%);
  z-index: 2;
  display: grid; place-items: center;
  width: 40px; height: 40px;
  color: var(--text);
  background: rgba(22,25,36,.82);
  border: 1px solid var(--border);
  border-radius: 50%;
  cursor: pointer;
  backdrop-filter: blur(6px);
  transition: background .14s, border-color .14s, opacity .14s;
}
.bundle-viewer-nav.prev { left: 10px; }
.bundle-viewer-nav.next { right: 10px; }
.bundle-viewer-nav:hover:not([disabled]) { background: rgba(219,39,119,.8); border-color: transparent; }
.bundle-viewer-nav:active:not([disabled]) { transform: translateY(-50%) scale(.94); }
.bundle-viewer-nav[disabled] { opacity: .25; cursor: default; }
.bundle-viewer-nav:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }

/* Filmstrip — a window around the current item, not the whole album. */
.bundle-viewer-strip {
  flex: 0 0 auto;
  display: flex; align-items: center; gap: 6px;
  padding: 8px 10px;
  overflow-x: auto; overflow-y: hidden;
  background: rgba(22,25,36,.9);
  border: 1px solid var(--border);
  border-top: 0;
  border-radius: 0 0 var(--radius) var(--radius);
  scrollbar-width: thin;
}
.bundle-viewer-strip.hidden { display: none; }
.bundle-strip-cell {
  position: relative;
  flex: 0 0 auto;
  width: 68px; height: 40px;
  padding: 0;
  overflow: hidden;
  background: var(--surface-2);
  border: 1px solid transparent;
  border-radius: 6px;
  cursor: pointer;
  opacity: .55;
  transition: opacity .14s, border-color .14s, transform .14s;
}
.bundle-strip-cell img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bundle-strip-cell.no-thumb img { display: none; }
.bundle-strip-cell.no-thumb { background: linear-gradient(135deg, rgba(244,114,182,.18), rgba(167,139,250,.12)); }
.bundle-strip-cell:hover { opacity: 1; transform: translateY(-2px); }
.bundle-strip-cell.active { opacity: 1; border-color: var(--accent-pink); }
.bundle-strip-cell:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; opacity: 1; }
/* Images get a cyan hairline so a mixed album reads as mixed in the strip. */
.bundle-strip-cell.is-images::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 2px;
  background: var(--accent-2);
}
.bundle-strip-more {
  flex: 0 0 auto;
  height: 40px; padding: 0 10px;
  font: inherit; font-size: 11px; font-weight: 600;
  color: var(--text-dim);
  background: rgba(255,255,255,.05);
  border: 1px dashed var(--border-strong);
  border-radius: 6px;
  cursor: pointer;
  transition: color .14s, background .14s;
}
.bundle-strip-more:hover { color: var(--text); background: rgba(255,255,255,.09); }
.bundle-strip-more:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }

@media (prefers-reduced-motion: reduce) {
  .bundle-viewer-scrim, .bundle-viewer, .bundle-strip-cell, .bundle-viewer-nav { transition: none; }
  .bundle-viewer { transform: none; }
}
@media (max-width: 720px) {
  .bundle-viewer-scrim { padding: 8px; }
  .bundle-viewer-head { gap: 7px; padding: 7px 8px; }
  /* The "Open in …" button is the widest thing in the header and the least
     urgent — it drops out before the title starts truncating to nothing. */
  .bundle-viewer-head [data-viewer-act="tab"] { display: none; }
  .bundle-viewer-nav { width: 34px; height: 34px; }
  .bundle-strip-cell { width: 54px; height: 32px; }
  .bundle-strip-more { height: 32px; }
}

/* ─────────────── Patreon panel ───────────────
   Matches the sched-* language in the Updates modal (same chips, counts,
   group heads) so the two update surfaces read as one system. */
/* .modal-panel sets `width: min(540px,92vw)`, so a bare max-width does nothing —
   the width itself has to be overridden or the 3-control header rows collide. */
.patreon-panel { width: min(940px, 94vw); }

/* session banner — the whole panel is dead without a live cookie, so this
   states the failure in words rather than just colouring a dot. */
.pat-session {
  display: flex; align-items: center; gap: 12px;
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: 12px 14px; margin-bottom: 12px;
}
.pat-session-text { flex: 1; min-width: 0; }
.pat-session-title { font-size: 13px; font-weight: 700; }
.pat-session-sub {
  font-size: 12px; color: var(--text-dim); margin-top: 2px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pat-session-actions { display: flex; gap: 6px; flex: none; flex-wrap: wrap; }
.pat-dot {
  width: 9px; height: 9px; border-radius: 50%; flex: none;
  background: var(--text-mute); transition: background 160ms ease, box-shadow 160ms ease;
}
.pat-dot.ok  { background: var(--accent-good); box-shadow: 0 0 0 3px rgba(16,185,129,.16); }
.pat-dot.bad { background: var(--accent-hot);  box-shadow: 0 0 0 3px rgba(239,68,68,.16); }
.pat-dot.busy { background: var(--accent-warm); animation: pat-pulse 1.1s ease-in-out infinite; }
@keyframes pat-pulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }

.pat-cookie-row { display: flex; gap: 6px; margin-bottom: 12px; }
/* An author `display` beats the UA [hidden]{display:none} rule, so without this
   the row is permanently visible and the Set cookie… button looks dead. */
.pat-cookie-row[hidden] { display: none; }
.pat-cookie-input {
  flex: 1; background: var(--surface-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 8px 10px; font: inherit; font-size: 13px;
}
.pat-cookie-input:focus { outline: none; border-color: var(--accent); }
.pat-cookie-input::placeholder { color: var(--text-mute); }

.pat-progress {
  font-size: 12px; color: var(--text-dim); background: var(--surface-2);
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  padding: 8px 12px; margin-bottom: 12px;
}

.pat-group-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 18px 0 8px; flex-wrap: wrap; }
.pat-group-h { font-size: 13px; font-weight: 700; color: var(--text); margin: 0; display: flex; align-items: center; gap: 8px; text-transform: uppercase; letter-spacing: .03em; }

.pat-filters { display: flex; gap: 4px; flex-wrap: wrap; }
.pat-chip {
  font-size: 11px; font-weight: 700; padding: 3px 10px; border-radius: 999px;
  background: var(--surface-2); border: 1px solid var(--border); color: var(--text-dim);
  cursor: pointer; transition: background 140ms ease, color 140ms ease, border-color 140ms ease;
}
.pat-chip:hover { background: var(--surface-3); border-color: var(--border-strong); color: var(--text); }
.pat-chip:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.pat-chip:active { transform: translateY(1px); }
.pat-chip.active { background: rgba(167,139,250,.14); border-color: rgba(167,139,250,.4); color: var(--accent); }

/* rows — capped so a 90-item feed scrolls inside the panel, not the page */
.pat-list { display: flex; flex-direction: column; gap: 6px; max-height: 340px; overflow-y: auto; }
.pat-row {
  display: flex; align-items: center; gap: 10px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: 10px 12px;
  transition: border-color 140ms ease, background 140ms ease;
}
.pat-row:hover { border-color: var(--border-strong); background: var(--surface-2); }
.pat-row:focus-within { border-color: var(--accent); }
.pat-row-main { flex: 1; min-width: 0; }
.pat-row-title {
  font-size: 13px; font-weight: 600;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pat-row-sub {
  font-size: 11px; color: var(--text-dim); margin-top: 3px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pat-row-actions { display: flex; gap: 6px; flex: none; align-items: center; }

/* verdict + version chips — same shape as .sched-chip */
.pat-tag {
  display: inline-flex; align-items: center; vertical-align: -3px;
  font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 999px; border: 1px solid var(--border);
  background: var(--surface-3); color: var(--text-dim); flex: none;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
/* Only the TIER pill is free text from the creator, so only it needs a cap —
   applying one to every pill truncated the fixed status labels instead. */
.pat-tag.locked { max-width: 22ch; overflow: hidden; text-overflow: ellipsis; }
.pat-tag.release  { color: var(--accent-good); background: rgba(16,185,129,.1); border-color: rgba(16,185,129,.28); }
.pat-tag.upcoming { color: var(--accent-warm); background: rgba(245,158,11,.1); border-color: rgba(245,158,11,.28); }
.pat-tag.other    { opacity: .6; }
.pat-tag.download { color: var(--accent-2); background: rgba(6,182,212,.1); border-color: rgba(6,182,212,.28); }
.pat-tag.locked   { color: var(--accent-hot); background: rgba(239,68,68,.1); border-color: rgba(239,68,68,.28); }
.pat-tag.ver      { color: var(--accent); background: rgba(167,139,250,.12); border-color: rgba(167,139,250,.3); }

/* the "why did you call it that?" line — only rendered for release/upcoming */
.pat-why { font-size: 10px; color: var(--text-mute); margin-top: 3px; font-style: italic;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* skeletons, sized like the real rows so nothing jumps when data lands */
.pat-skel { height: 61px; border-radius: var(--radius-sm); background: var(--surface);
  border: 1px solid var(--border); position: relative; overflow: hidden; }
.pat-skel::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.045), transparent);
  animation: pat-shimmer 1.3s ease-in-out infinite;
}
@keyframes pat-shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }

@media (max-width: 720px) {
  .pat-session { flex-wrap: wrap; }
  .pat-session-actions { width: 100%; justify-content: flex-end; }
  .pat-group-head { flex-wrap: wrap; }
  .pat-row { flex-wrap: wrap; }
  .pat-row-actions { width: 100%; justify-content: flex-end; }
  .pat-list { max-height: none; }
}

/* Patreon event log */
/* These lists use <a class="btn"> for Open links — .btn never set a
   text-decoration, so they rendered underlined next to real <button>s. */
a.btn { text-decoration: none; }
.pat-log-controls { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
/* Specificity: `.modal-panel input` (0,1,1) beats a bare class, which left the
   search box 2px taller and a different grey than the selects beside it. */
.modal-panel .pat-select,
.modal-panel #pat-events-search,
.modal-panel #pat-ahead-search {
  background: var(--surface-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 6px 10px; font: inherit; font-size: 12px; line-height: 1.4;
}
.modal-panel .pat-select:hover { border-color: var(--border-strong); }
.modal-panel .pat-select:focus,
.modal-panel #pat-events-search:focus,
.modal-panel #pat-ahead-search:focus { outline: none; border-color: var(--accent); }
.modal-panel .pat-select:disabled { opacity: .5; cursor: not-allowed; }
.pat-log { max-height: 300px; font-variant-numeric: tabular-nums; }
.pat-log .pat-skel { height: 38px; }  /* log rows are single-line */
.pat-log .pat-row { padding: 7px 12px; }
.pat-log-ts { font-size: 11px; color: var(--text-mute); flex: none; width: 96px; }
.pat-cadence { font-size: 11px; color: var(--accent-2); margin-top: 3px; }
@media (max-width: 720px) {
  .pat-log-controls { width: 100%; }
  .pat-log-ts { width: auto; }
}
/* empty / error states inside the lists (matches the .sched-empty neighbour) */
.pat-empty {
  padding: 14px 12px; text-align: center; color: var(--text-dim); font-size: 12px;
  background: var(--surface); border: 1px dashed var(--border); border-radius: var(--radius-sm);
  display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap;
}
.pat-empty-error { color: var(--accent-hot); border-color: rgba(239,68,68,.35); }

/* ─────────────── Patreon panel: card layout ───────────────
   The first pass rendered every entry as three stacked lines of prose with no
   boundary between them, so 40 games read as one wall of text. These are proper
   cards: art on the left to make the list scannable, a clear title row, and the
   version delta on its own line because that is the thing being decided. */

/* Sections get real separation — a rule + generous space, so "Worth a look",
   "Newsletter", "Event log" and "Linked creators" read as distinct surfaces
   rather than one continuous scroll. */
.patreon-panel .pat-group-head {
  margin: 26px 0 10px;
  padding-top: 18px;
  border-top: 1px solid var(--border);
}
.patreon-panel .pat-group-head:first-of-type { margin-top: 18px; }

.pat-list { gap: 8px; }

.pat-card {
  display: flex; align-items: center; gap: 12px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: 10px 12px;
  transition: border-color 140ms ease, background 140ms ease, transform 140ms ease;
}
.pat-card:hover { border-color: var(--border-strong); background: var(--surface-2); }
.pat-card:focus-within { border-color: var(--accent); }

/* Game cover: 3:4 like the library tiles, so the same art reads the same way. */
.pat-art {
  width: 44px; height: 58px; flex: none;
  object-fit: cover; border-radius: 6px;
  background: var(--surface-3); border: 1px solid var(--border);
}
.pat-art-avatar, .pat-avatar {
  width: 40px; height: 40px; border-radius: 50%;
  object-fit: cover; flex: none;
  background: var(--surface-3); border: 1px solid var(--border);
}
.pat-art-blank {
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 700; color: var(--text-mute);
  letter-spacing: .04em;
}
.pat-card-sm .pat-art-blank { width: 40px; height: 40px; border-radius: 50%; }

.pat-card-body { flex: 1; min-width: 0; }
.pat-card-head { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.pat-card-title {
  font-size: 13.5px; font-weight: 650; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;
}
.pat-card-title-sm { font-size: 12.5px; color: var(--text); }
.pat-card-meta {
  font-size: 11.5px; color: var(--text-dim); margin-top: 3px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pat-tiers { font-size: 11px; color: var(--text-mute); margin-top: 3px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pat-card-actions { display: flex; gap: 6px; flex: none; align-items: center; }

/* The version delta — the decision the row exists to support. */
.pat-delta {
  display: inline-flex; align-items: center; gap: 6px;
  margin-top: 5px; font-size: 12px; color: var(--text-dim);
  font-variant-numeric: tabular-nums;
}
.pat-delta b { color: var(--text); font-weight: 600; }
.pat-delta-new { color: var(--accent-good) !important; }
.pat-delta-none { color: var(--text-mute); font-style: italic; }
.pat-arrow { color: var(--text-mute); }

.pat-why-bad { color: var(--accent-hot); font-style: normal; }

/* Event log: a dense timeline, deliberately tighter than the cards above it. */
.pat-logrow {
  display: flex; align-items: baseline; gap: 10px;
  padding: 7px 10px; border-radius: 6px;
  border-bottom: 1px solid var(--border);
}
.pat-logrow:last-child { border-bottom: none; }
.pat-logrow:hover { background: var(--surface-2); }

@media (max-width: 720px) {
  .pat-card { align-items: flex-start; }
  .pat-card-actions { width: 100%; justify-content: flex-end; margin-top: 6px; }
  .pat-card { flex-wrap: wrap; }
  .pat-logrow { flex-wrap: wrap; }
}

/* Wishlist release banner: show the game, not just its name. */
.hw-row { display: flex; align-items: center; gap: 12px; }
.hw-art {
  width: 40px; height: 53px; flex: none;
  object-fit: cover; border-radius: 6px;
  background: var(--surface-3); border: 1px solid var(--border);
}
.hw-art-blank {
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700; color: var(--text-mute); letter-spacing: .04em;
}
.hw-main { flex: 1; min-width: 0; }
@media (max-width: 720px) { .hw-art { width: 34px; height: 45px; } }
.pat-dupe { color: var(--accent-warm); }

/* ── Link state chips (game detail panel) ─────────────────────────────────────
   Shows why a URL box is empty: searched-and-missed reads differently from
   never-looked. Sits at the end of the row so it never displaces the input. */
.url-row .url-state {
  flex: 0 0 auto;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  padding: 2px 7px;
  border-radius: 999px;
  white-space: nowrap;
  border: 1px solid transparent;
  cursor: help;
  transition: background .15s ease, border-color .15s ease, color .15s ease;
}
.url-row .url-state:empty { display: none; }
.url-row .url-state.idle {
  color: var(--text-mute);
  background: var(--surface-2);
  border-color: var(--border);
}
.url-row .url-state.warn {
  color: var(--accent-warm);
  background: rgba(245, 158, 11, .12);
  border-color: rgba(245, 158, 11, .3);
}
.url-row .url-state.suggest {
  color: var(--accent-2);
  background: rgba(6, 182, 212, .12);
  border-color: rgba(6, 182, 212, .3);
}
.url-row .url-state.bad {
  color: var(--accent-hot);
  background: rgba(239, 68, 68, .12);
  border-color: rgba(239, 68, 68, .32);
}

/* ── Top-right problem notifications ─────────────────────────────────────────
   For failures that happen in the background (link/cover lookups), where the
   bottom-centre quick toast is both too brief and in the way of the action
   bar. Stacks, capped at 4, each dismissible. */
#hearth-notify-host {
  position: fixed;
  top: 14px;
  right: 14px;
  /* Above every modal/overlay (max 10000) but BELOW #hearth-popout-splash
     (12000): that splash is a full-screen takeover marking this tab as dead
     after a pop-out, and a notification floating on top of it would be an
     interactive control on a page that is deliberately finished. */
  z-index: 11500;
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-width: min(360px, calc(100vw - 28px));
  pointer-events: none;
}
.hearth-notify {
  pointer-events: auto;
  position: relative;
  background: var(--surface-2);
  border: 1px solid var(--border-strong);
  border-left: 3px solid var(--accent-warm);
  border-radius: 10px;
  padding: 10px 30px 10px 12px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, .45);
  opacity: 1;
  transition: opacity .35s ease, transform .35s ease;
  animation: hn-in .22s ease-out;
}
@keyframes hn-in {
  from { opacity: 0; transform: translateX(14px); }
  to   { opacity: 1; transform: translateX(0); }
}
.hearth-notify .hn-title {
  font-size: 12px;
  font-weight: 700;
  color: var(--text);
  line-height: 1.35;
}
.hearth-notify .hn-detail {
  margin-top: 3px;
  font-size: 11px;
  color: var(--text-dim);
  line-height: 1.45;
  word-break: break-word;
}
.hearth-notify .hn-close {
  position: absolute;
  top: 6px;
  right: 6px;
  width: 20px;
  height: 20px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: none;
  border: 0;
  border-radius: 6px;
  color: var(--text-mute);
  font-size: 15px;
  line-height: 1;
  cursor: pointer;
  transition: background .15s ease, color .15s ease;
}
.hearth-notify .hn-close:hover { background: var(--surface-3); color: var(--text); }
.hearth-notify .hn-close:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
@media (max-width: 720px) {
  #hearth-notify-host { top: 10px; right: 10px; left: 10px; max-width: none; }
}

/* ── Grab modal: "update an existing game" combobox ───────────────────────────
   A typeahead rather than a <select>: the library runs to hundreds of titles,
   and a bare dropdown stops being usable well before that. */
.grab-match-row { position: relative; }
.grab-combo { position: relative; flex: 1; min-width: 0; }
.grab-combo input { width: 100%; }
.grab-combo-clear {
  position: absolute; top: 50%; right: 6px; transform: translateY(-50%);
  width: 20px; height: 20px;
  display: flex; align-items: center; justify-content: center;
  background: none; border: 0; border-radius: 5px;
  color: var(--text-mute); font-size: 15px; line-height: 1; cursor: pointer;
  transition: background .15s ease, color .15s ease;
}
.grab-combo-clear:hover { background: var(--surface-3); color: var(--text); }
.grab-combo-list {
  /* FIXED, not absolute: the modal panel scrolls, and an absolute dropdown is
     clipped by it — the list was cut off and needed the dialog scrolled to be
     read. JS sets left/top/width/max-height from the input's live rect. */
  position: fixed;
  z-index: 11600;   /* over the modal (10000), under the pop-out splash */
  margin: 0; padding: 4px;
  list-style: none;
  overflow-y: auto;
  background: var(--surface-2);
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  box-shadow: 0 12px 34px rgba(0, 0, 0, .5);
}
.grab-combo-item {
  display: flex; align-items: center; gap: 8px;
  padding: 7px 9px;
  border-radius: 7px;
  cursor: pointer;
  font-size: 13px;
  color: var(--text);
  transition: background .12s ease;
}
.grab-combo-item:hover,
.grab-combo-item.active { background: var(--surface-3); }
.grab-combo-item .gc-title {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.grab-combo-item mark {
  background: none;
  color: var(--accent);
  font-weight: 700;
}
.grab-combo-item .gc-count {
  flex: 0 0 auto;
  font-size: 10px;
  color: var(--text-mute);
  background: var(--surface-3);
  border-radius: 999px;
  padding: 1px 6px;
}
.grab-combo-item .gc-ver {
  flex: 0 0 auto;
  font-size: 11px;
  color: var(--text-mute);
  font-family: ui-monospace, monospace;
}
.grab-combo-empty {
  padding: 9px;
  font-size: 12px;
  color: var(--text-mute);
}
.grab-match-chosen {
  margin-top: 6px;
  font-size: 12px;
  color: var(--text-dim);
  padding: 7px 10px;
  background: rgba(167, 139, 250, .10);
  border: 1px solid rgba(167, 139, 250, .28);
  border-radius: 8px;
}
.grab-match-chosen strong { color: var(--text); }

/* ── Auto-lock toggle ────────────────────────────────────────────────────────
   aria-pressed="true" means the protection is ENGAGED, which is the default —
   so the generic "lit pill" treatment is overridden here: a permanently glowing
   button with its label pinned open is noise for a normal state. The state
   worth seeing is OFF, so that one gets the warm colour and the pinned label. */
.autolock-wrap > .btn.icon-pill#btn-autolock[aria-pressed="true"] {
  color: inherit;
  background: transparent;
  border-color: transparent;
}
.autolock-wrap > .btn.icon-pill#btn-autolock[aria-pressed="true"]:hover {
  background: var(--surface-2);
  border-color: var(--border);
}
.btn.icon-pill#btn-autolock[aria-pressed="true"] .label {
  max-width: 0;
  opacity: 0;
  margin-left: 0;
}
.btn.icon-pill#btn-autolock:hover .label,
.btn.icon-pill#btn-autolock:focus-visible .label {
  max-width: 180px;
  opacity: 1;
  margin-left: 8px;
}
/* OFF: the library no longer hides itself — say so plainly and keep it said. */
.autolock-wrap > .btn.icon-pill#btn-autolock.is-off,
.btn.icon-pill#btn-autolock.is-off {
  color: var(--accent-warm);
  background: rgba(245, 158, 11, .14);
  border-color: rgba(245, 158, 11, .42);
}
.autolock-wrap > .btn.icon-pill#btn-autolock.is-off:hover {
  background: rgba(245, 158, 11, .22);
  border-color: rgba(245, 158, 11, .6);
}
.btn.icon-pill#btn-autolock.is-off .label {
  max-width: 180px;
  opacity: 1;
  margin-left: 8px;
}

/* PARTIAL: one of the two protections is off. Warm like OFF but quieter — the
   label says which half is still standing, so it has to stay readable. The
   wrapper prefix is load-bearing: aria-pressed is still "true" in this state
   (something IS still guarding), and the neutral [aria-pressed="true"] reset
   above outranks a plain `.btn.icon-pill#btn-autolock.is-partial` — which is
   how the warm treatment silently did nothing at all. */
.autolock-wrap > .btn.icon-pill#btn-autolock.is-partial {
  color: var(--accent-warm);
  background: rgba(245, 158, 11, .08);
  border-color: rgba(245, 158, 11, .26);
}
.autolock-wrap > .btn.icon-pill#btn-autolock.is-partial:hover {
  background: rgba(245, 158, 11, .16);
  border-color: rgba(245, 158, 11, .45);
}
.autolock-wrap > .btn.icon-pill#btn-autolock.is-partial .label {
  max-width: 180px;
  opacity: 1;
  margin-left: 8px;
}

/* ─── Auto-lock / auto-hide menu ─────────────────────────────────────────────
   Two switches behind one pill. The wrapper only anchors the popup; it carries
   no .web-only itself, because the reveal rule that un-hides web-only controls
   fires for buttons alone — the button keeps the class and the menu inherits
   its visibility by only ever being opened from it. */
.autolock-wrap { position: relative; display: inline-flex; }
/* The pill is no longer a direct child of .topbar-actions, so the standalone
   icon-pill chrome (subtle border + blur) has to be restated here. */
.autolock-wrap > .btn.icon-pill {
  background: rgba(255,255,255,.025);
  border: 1px solid var(--border);
  backdrop-filter: blur(10px);
}
.autolock-wrap > .btn.icon-pill:hover {
  background: var(--surface-3);
  border-color: var(--border-strong);
}
.autolock-menu {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  min-width: 268px;
  background: rgba(15, 17, 23, 0.96);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  box-shadow: 0 12px 30px rgba(0,0,0,0.55);
  padding: 6px;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: 2px;
  animation: narrator-menu-in 120ms ease-out;
}
.autolock-menu.hidden { display: none; }
@media (prefers-reduced-motion: reduce) { .autolock-menu { animation: none; } }
.autolock-menu-item {
  background: transparent;
  border: none;
  color: var(--text);
  text-align: left;
  padding: 8px 10px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 13px;
  font-family: inherit;
  display: flex;
  align-items: flex-start;
  gap: 10px;
  width: 100%;
}
.autolock-menu-item:hover { background: rgba(167,139,250,0.14); }
.autolock-menu-item:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.autolock-menu-item .check {
  width: 14px; height: 14px;
  border-radius: 3px;
  border: 1px solid var(--border-strong);
  flex-shrink: 0;
  position: relative;
  margin-top: 2px;
}
.autolock-menu-item.checked .check {
  background: var(--accent);
  border-color: var(--accent);
}
.autolock-menu-item.checked .check::after {
  content: "";
  position: absolute;
  left: 3px; top: 0px;
  width: 4px; height: 8px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.autolock-menu-item .am-text { display: flex; flex-direction: column; gap: 2px; }
.autolock-menu-item .am-title { line-height: 1.2; }
.autolock-menu-item .am-sub {
  font-size: 11px;
  color: var(--text-mute);
  line-height: 1.35;
}
/* Unchecked = a protection is OFF: colour the row so the menu shows the same
   warning the pill does, instead of reading as a neutral empty checkbox. */
.autolock-menu-item[role="menuitemcheckbox"]:not(.checked) .am-title { color: var(--accent-warm); }
/* "Hide screen now" is an action, not a switch: same row, same indent, no box,
   and a rule above it so it reads as a separate group. */
.autolock-menu-item.am-action {
  margin-top: 4px; padding-top: 10px;
  border-top: 1px solid var(--border-strong);
  border-radius: 0 0 6px 6px;
}
.autolock-menu-item.am-action .check { border-color: transparent; background: none; }
/* The timed unlock: its own group between the switches and "Hide screen now".
   The four lengths are one row of equal chips across the full width of the
   group; while a pause runs they give way to the single way to end it. */
.autolock-pause {
  display: flex; flex-direction: column; gap: 8px;
  margin-top: 4px; padding: 10px 10px 8px;
  border-top: 1px solid var(--border-strong);
}
.autolock-pause-head { display: flex; align-items: flex-start; gap: 10px; font-size: 13px; }
.autolock-pause-ico { width: 18px; height: 18px; margin: -1px -2px 0; flex-shrink: 0; object-fit: contain; }
.autolock-pause-head .am-text { display: flex; flex-direction: column; gap: 2px; }
.autolock-pause-head .am-title { line-height: 1.2; font-variant-numeric: tabular-nums; }
.autolock-pause-head .am-sub { font-size: 11px; color: var(--text-mute); line-height: 1.35; }
.autolock-pause.is-running .am-title { color: var(--accent-warm); }
.autolock-pause-chips { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.autolock-pause-chips.hidden,
.autolock-pause-end.hidden { display: none; }
.autolock-pause-chip,
.autolock-pause-end {
  font: inherit; font-size: 12px; color: var(--text);
  background: var(--bg-elev, rgba(255,255,255,0.06));
  border: 1px solid var(--border-strong); border-radius: 6px;
  min-height: 32px; padding: 4px 2px;
  cursor: pointer; white-space: nowrap;
}
.autolock-pause-chip:hover,
.autolock-pause-end:hover { background: rgba(167,139,250,0.14); border-color: var(--accent); }
.autolock-pause-chip:focus-visible,
.autolock-pause-end:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
@media (pointer: coarse) {
  .autolock-pause-chip,
  .autolock-pause-end { min-height: 44px; }
}
/* A switch that is on but standing down for the pause: the tick stays (it is
   what comes back) and dims, and its line carries the time in the warning tone. */
.autolock-menu-item.is-paused .check { opacity: 0.45; }
.autolock-menu-item.is-paused .am-sub { color: var(--accent-warm); }
/* The game stream's rows: one more group in the same menu, under its own rule. */
.autolock-stream { margin-top: 4px; padding-top: 6px; border-top: 1px solid var(--border-strong); }
.autolock-stream .am-heading {
  padding: 4px 10px 2px;
  font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--text-mute);
}
.autolock-menu-field {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 4px 10px 6px 34px;
  font-size: 12px; color: var(--text-mute);
}
.autolock-menu-field select {
  font: inherit; color: var(--text);
  background: var(--bg-elev, rgba(255,255,255,0.06));
  border: 1px solid var(--border-strong); border-radius: 6px;
  padding: 4px 6px; min-height: 28px;
}
.autolock-menu-field select:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.autolock-menu-field.is-off { opacity: 0.5; }
.autolock-menu-item:disabled { opacity: 0.55; cursor: default; }
.autolock-menu-item:disabled:hover { background: transparent; }

/* ─── Drop intake: full-window drop target + "what is this?" dialog ───────────
   Web tier only (the handlers are gated on window.__HEARTH_WEB__), but the
   rules are unconditional so the markup never half-styles if that ever changes.

   Z-ORDER, deliberately: the overlay sits ABOVE the lock screen (1000) because a
   drop landing on the privacy cover must still be accepted and acknowledged, and
   BELOW the notification host (11500) and the pop-out splash (12000) so neither
   is buried. It is NOT a `.modal`, so `body.locked .modal { visibility:hidden }`
   cannot hide it — and the intake dialog, which IS a .modal, still can never
   paint over the lock. */
.drop-overlay {
  position: fixed;
  inset: 0;
  z-index: 11400;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  /* Never intercept the pointer: the drag events have to keep reaching the real
     elements underneath, and an overlay that swallowed dragleave would make the
     enter/leave depth count drift and leave the overlay stuck on screen. */
  pointer-events: none;
  background: rgba(10, 11, 16, .72);
  backdrop-filter: blur(3px);
  opacity: 0;
  transition: opacity .15s ease;
}
.drop-overlay.show { opacity: 1; }
.drop-overlay-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  max-width: min(420px, calc(100vw - 48px));
  padding: 26px 30px;
  text-align: center;
  color: var(--text);
  background: var(--surface-2);
  border: 2px dashed var(--accent);
  border-radius: var(--radius);
  box-shadow: 0 24px 60px rgba(0, 0, 0, .55);
  transform: scale(.97);
  transition: transform .15s cubic-bezier(.2, .8, .2, 1);
}
.drop-overlay.show .drop-overlay-card { transform: scale(1); }
.drop-overlay-card svg { color: var(--accent); }
.drop-overlay-title { font-size: 17px; font-weight: 700; }
.drop-overlay-sub { font-size: 12px; color: var(--text-dim); line-height: 1.5; }

/* The lock's held-file hint (.lock-drop-hint): renderer/lock/lock.css */

/* ── the dialog ── */
/* Every .modal is z:200, and the grab floater is z:9500 — so the pill paints
   OVER a modal. Quick Grab dodges that by hiding the pill while its own modal is
   open; the intake dialog can't, because handing a file off to the floater is
   immediately followed by the dialog reopening for the NEXT queued file. So it
   outranks the pill instead. Still under the toast stack (10000) and the
   notification host (11500): those are transient status and belong on top. */
#drop-intake-modal { z-index: 9600; }
.di-panel { max-width: 540px; }
/* The close button is absolutely positioned in the panel's top-right; without
   this the heading wraps UNDER it at narrow widths ("…do wit / this?"). */
.di-panel #di-heading { padding-right: 44px; }
.di-file {
  display: flex;
  align-items: center;
  gap: 11px;
  margin-top: 14px;
  padding: 10px 12px;
  min-width: 0;
  background: rgba(255, 255, 255, .03);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.di-file-icon { font-size: 20px; line-height: 1; flex: none; }
.di-file-meta { min-width: 0; flex: 1; }
.di-file-name {
  font-size: 13px;
  font-weight: 600;
  /* A 90-character release filename must ellipsize, not stretch the dialog. */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.di-file-sub {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 3px;
  font-size: 11px;
  color: var(--text-dim);
}
.di-kind-chip {
  flex: none;
  padding: 1px 7px;
  border-radius: 999px;
  font-size: 10px;
  background: rgba(167, 139, 250, .15);
  color: var(--accent);
}

.di-modes { display: flex; flex-direction: column; gap: 6px; margin-top: 16px; }
.di-mode {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 10px 12px;
  text-align: left;
  color: var(--text);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  cursor: pointer;
  font: inherit;
  transition: background .15s ease, border-color .15s ease, opacity .15s ease;
}
.di-mode:hover:not(:disabled) { background: var(--surface-3); border-color: var(--border-strong); }
.di-mode:active:not(:disabled) { transform: translateY(1px); }
.di-mode:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.di-mode.selected {
  border-color: var(--accent);
  background: rgba(167, 139, 250, .12);
}
.di-mode:disabled { opacity: .4; cursor: not-allowed; }
.di-mode-ico { font-size: 17px; line-height: 1; flex: none; }
.di-mode-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.di-mode-txt b { font-size: 13px; font-weight: 650; }
.di-mode-txt span { font-size: 11px; color: var(--text-dim); }

.di-body { margin-top: 6px; }
.di-select {
  flex: 1;
  min-width: 0;
  background: var(--bg-2, #14151d);
  color: var(--text);
  border: 1px solid var(--line, #262837);
  border-radius: 8px;
  padding: 9px 12px;
  font-size: 13px;
  outline: none;
  transition: border-color .15s ease;
}
.di-select:focus { border-color: var(--accent); }
.di-actions { margin-top: 16px; justify-content: space-between; }

/* Progress bar reuses .grab-bar's shell so an upload and a grab read as one
   flow; only the fill needs its own id-scoped rules. */
.grab-bar #di-bar-fill {
  height: 100%; width: 0%; border-radius: 999px; background: var(--accent);
  transition: width .15s linear;
}
.grab-bar.indet #di-bar-fill { width: 40% !important; animation: grab-indet 1.2s ease-in-out infinite; }
#di-progress-title {
  font-weight: 600; font-size: 13px; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

@media (max-width: 720px) {
  .drop-overlay-card { padding: 20px 22px; }
  .drop-overlay-title { font-size: 15px; }
  /* Stacked, so a long primary label ("Install as new version") never collides
     with Skip on a narrow phone. */
  .di-actions { flex-direction: column-reverse; align-items: stretch; }
  .di-actions .btn { width: 100%; }
}

/* ═══════════════════════════════════════════════════════════════════════
   HENTAI TAB
   The Videos grid re-cut around series. Everything here is additive — no
   existing media rule is touched, so the Videos tab is byte-identical.
   Three surfaces: the series card, the episode picker, and the classifier
   (shared with the browser's rip dialog). See renderer/media/hentai.js.
   ═══════════════════════════════════════════════════════════════════════ */

/* Tile ratio is published per media type as a custom property, then applied
   once (see .media-tile-comics/-images/-videos above). Hentai tiles are video
   posters, so they take the same 16/9 — without this they collapse to the
   height of their text. */
.media-tile-hentai { --tile-aspect: 16 / 9; aspect-ratio: var(--tile-aspect); }

/* ── Series strip ────────────────────────────────────────────────────
   The Web Games collection shelf (see "collection strips" far above) re-cut
   for episodes. The HEADER borrows the shelf's own chrome — .cs-head,
   .cs-toggle, .cs-count, .cs-scale — so a series reads as the same kind of
   thing as a games collection. The ROW is its own grid, .toon-row, because
   the cards are 16:9 video posters carrying a media tile's chrome, not
   portrait covers carrying a game tile's; every offset differs. */
.toon-strip { margin-bottom: 8px; }
/* The first shelf used to sit flush against the top of the grid — the header
   chrome (cover thumb, Resume pill) had nowhere to breathe. */
.toon-strip:first-child { margin-top: 6px; }
.toon-strip-head button, .toon-strip-head input { touch-action: manipulation; }
.toon-strip-head { gap: 10px; padding: 6px 0 8px; margin-bottom: 4px; }
.toon-strip-cover {
  flex: none; width: 44px; height: 25px;
  border-radius: 5px; overflow: hidden;
  background: var(--surface-2);
  border: 1px solid var(--border);
  box-shadow: 0 1px 4px rgba(0,0,0,.5);
}
.toon-strip-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.toon-strip-title {
  background: none; border: 0; margin: 0; padding: 4px 6px;
  font: 650 15px/1.2 inherit; color: var(--text);
  letter-spacing: -.1px;
  border-radius: 6px; cursor: pointer; text-align: left;
  min-width: 0; max-width: 42%;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.toon-strip-title:hover { background: rgba(255,255,255,.06); }
.toon-strip-title:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.toon-strip-count { font-weight: 700; letter-spacing: .04em; white-space: nowrap; }
/* Downloads routed to this series, drawn inside its shelf (media/videos.js
   drawSkeletons). A pending strip is the shelf of a series that does not
   exist yet — header only, no cover, no progress, no menu. */
.toon-strip-pending {
  flex: none; white-space: nowrap;
  font-size: 11px; font-weight: 600; letter-spacing: .02em;
  padding: 3px 8px; border-radius: 999px;
  color: #d9ccff;
  background: color-mix(in srgb, var(--accent) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
}
.toon-strip.is-pending .toon-strip-head { cursor: default; }
.toon-strip.is-pending .toon-strip-title { cursor: default; max-width: 60%; }
.toon-strip.is-pending .toon-strip-title:hover { background: none; }
.toon-strip.is-pending .toon-strip-count { color: var(--text-mute); font-weight: 600; font-size: 11px; }
.toon-strip.is-pending { border-style: dashed; }
/* Progress + figures are one muted cluster: bar first (the glance), figures
   after (the detail), both quieter than the title they annotate. */
.toon-strip-meta { display: inline-flex; align-items: center; gap: 8px; min-width: 0; }
.toon-strip-progress {
  flex: none; width: 64px; height: 4px;
  border-radius: 999px; overflow: hidden;
  background: rgba(255,255,255,.08);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.04);
}
.toon-strip-progress i { display: block; height: 100%; background: linear-gradient(90deg, #c4b5fd, #f472b6); }
.toon-strip-progress.complete i { background: var(--accent-good); }
.toon-strip-sub {
  font-size: 11px; color: var(--text-mute);
  font-variant-numeric: tabular-nums; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}
.toon-strip.is-complete .toon-strip-sub { color: var(--accent-good); }
.toon-strip-play {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 11px 4px 9px; font-size: 11.5px; white-space: nowrap;
}
/* Slider + Manage group at the right edge. Manage is a quiet labelled pill —
   it is the only route to rename / renumber / move from the shelf, so unlike
   the games shelf's delete button it stays visible, just dim until wanted. */
.toon-strip-head .cs-scale { margin-left: auto; }
.toon-strip-more {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 7px 3px 9px; margin: 0;
  background: transparent; border: 1px solid transparent; border-radius: 999px;
  color: var(--text-mute); font: 600 11px/1.4 inherit; cursor: pointer;
  opacity: .75; transition: opacity .15s, background .15s, color .15s, border-color .15s;
}
.toon-strip:hover .toon-strip-more,
.toon-strip-more:focus-visible { opacity: 1; }
.toon-strip-more:hover { color: var(--text); background: rgba(255,255,255,.06); border-color: var(--border); }
.toon-strip-more:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* A download-only shelf (nothing landed yet): its one action, pushed right. */
.toon-strip-cancel { margin-left: auto; opacity: 1; color: #f87171; }
.toon-strip-cancel:hover { color: #f87171; background: rgba(248,113,113,.08); border-color: rgba(248,113,113,.35); }

/* Reorder shelves — the grid becomes one list row per series. */
.toon-reorder-bar {
  grid-column: 1 / -1;
  position: sticky; top: 0; z-index: 3;
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 10px 12px; margin-bottom: 4px;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 10px;
  box-shadow: 0 6px 18px rgba(0,0,0,.35);
}
.toon-reorder-copy { display: flex; flex-direction: column; gap: 2px; flex: 1 1 240px; min-width: 0; }
.toon-reorder-copy strong { font-size: 13px; color: var(--text); }
.toon-reorder-copy span { font-size: 11.5px; color: var(--text-dim); }
.toon-reorder-actions { display: flex; gap: 6px; margin-left: auto; }
.toon-reorder-list {
  grid-column: 1 / -1;
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-direction: column; gap: 6px;
}
.toon-reorder-row {
  display: flex; align-items: center; gap: 10px;
  padding: 6px 8px; min-height: 44px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 10px;
  transition: border-color .12s, box-shadow .12s;
}
.toon-reorder-row.dragging {
  position: relative; z-index: 2; transition: none;
  border-color: var(--accent); box-shadow: 0 10px 28px rgba(0,0,0,.5);
  cursor: grabbing;
}
.toon-reorder-list.is-dragging .toon-reorder-row.drop-before { box-shadow: 0 -3px 0 0 var(--accent); }
.toon-reorder-list.is-dragging.drop-end .toon-reorder-row:last-child:not(.dragging) { box-shadow: 0 3px 0 0 var(--accent); }
.toon-reorder-handle {
  flex: none; display: inline-flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; padding: 0;
  background: transparent; border: 1px solid transparent; border-radius: 8px;
  color: var(--text-dim); cursor: grab; touch-action: none;
}
.toon-reorder-handle:hover { color: var(--text); background: rgba(255,255,255,.06); }
.toon-reorder-handle:focus-visible, .toon-reorder-arrow:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.toon-reorder-pos {
  flex: none; width: 22px; text-align: right;
  font-size: 11px; font-weight: 700; color: var(--text-dim); font-variant-numeric: tabular-nums;
}
.toon-reorder-name {
  flex: 1 1 auto; min-width: 0;
  font-size: 13px; font-weight: 600; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.toon-reorder-arrows { flex: none; display: inline-flex; gap: 4px; }
.toon-reorder-arrow {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; padding: 0;
  background: transparent; border: 1px solid var(--border); border-radius: 8px;
  color: var(--text-dim); cursor: pointer;
}
.toon-reorder-arrow:hover:not(:disabled) { color: var(--text); background: rgba(255,255,255,.06); }
.toon-reorder-arrow:disabled { opacity: .3; cursor: default; }
@media (pointer: coarse) {
  .toon-reorder-handle, .toon-reorder-arrow { width: 44px; height: 44px; }
}
@media (max-width: 640px) {
  .toon-reorder-row .cs-count { display: none; }
  .toon-reorder-actions { width: 100%; justify-content: flex-end; }
}
@media (prefers-reduced-motion: reduce) {
  .toon-reorder-row { transition: none; }
}

/* Loose tiles under the shelves get a heading of their own, in the shelf
   header's voice, so the grid doesn't read as the last shelf's overflow. */
.toon-divider {
  grid-column: 1 / -1;
  display: flex; align-items: center; gap: 8px;
  margin-top: 6px; padding: 4px 6px 6px;
  border-bottom: 1px solid var(--border);
  font: 650 14px/1.2 inherit; color: var(--text-dim);
}

.toon-row {
  display: grid;
  /* A FIXED track measured per strip by sizeToonStrips() (renderer/media/
     hentai.js), so the shelf is at most two rows and a 4-episode OVA draws
     the same size card as a 24-episode run. 180px is only the fallback. */
  grid-template-columns: repeat(auto-fill, var(--ts-card, 180px));
  gap: 10px;
  /* Vertical room for the hover lift. */
  padding: 6px 0 12px;
}
.toon-strip.collapsed .toon-row { display: none; }
.toon-row > .tile { min-width: 0; }

/* At rest a strip card is the poster, its episode number and its progress.
   The title plate, view count, rating strip and resolution pill are sized for
   a 280px grid tile and would bury a 150px one; they come back on hover, when
   the card is big enough to carry them. */
.toon-row .toon-strip-card .tile-meta,
.toon-row .toon-strip-card .tile-views,
.toon-row .toon-strip-card .tile-resolution,
.toon-row .toon-strip-card .tile-rating,
.toon-row .toon-strip-card .score-bar { display: none; }
.toon-row .toon-strip-card .tile-duration { font-size: 10px; padding: 1px 5px; }
.toon-row .toon-strip-card .hentai-ep-pill { font-size: 10.5px; padding: 2px 7px; }
/* Where you are in the season, readable without a legend: the next episode
   wears the accent ring, the ones behind you sit back — dimmed and desaturated
   with their pill gone green — and the ones ahead are plain. */
.toon-row .toon-strip-card.is-next {
  box-shadow: 0 0 0 1.5px rgba(167,139,250,.85), 0 0 18px rgba(124,58,237,.28), var(--shadow-card);
}
.toon-row .toon-strip-card.is-watched > img { filter: saturate(.55) brightness(.62); transition: filter .15s; }
.toon-row .toon-strip-card.is-watched:hover > img { filter: none; }

/* Hover lightboxes the card: at 150px the art is a thumbnail, so growing it
   to something you can look at IS the preview (the hover-scrub sprite plays
   on it at that size too). --ts-zoom is set per strip from the measured card
   so a small card grows more than a large one and both land near 340px. */
.toon-row .toon-strip-card:hover {
  transform: scale(var(--ts-zoom, 1.6));
  z-index: 60;
  box-shadow: 0 30px 80px rgba(0,0,0,.8),
              0 0 0 1px rgba(167,139,250,.55),
              0 0 34px rgba(124,58,237,.22);
  border-color: transparent;
}
/* The card scales, so everything drawn on it scales with it. Counter-scale
   the chrome (and divide its insets, which are in CARD pixels) so the ART is
   what grows while the text and buttons stay the size they were. */
.toon-row .toon-strip-card:hover .tile-meta {
  /* grid, not block: the band is a name/score row now, and `block` here would
     drop the score out of its cell and under the title. */
  display: grid;
  right: auto; width: calc(100% * var(--ts-zoom, 1.6));
  transform: scale(calc(1 / var(--ts-zoom, 1.6)));
  transform-origin: bottom left;
}
/* Only a bar that still floats gets pulled to a corner and counter-scaled. One
   on the plate is inside .tile-meta, which is counter-scaled as a whole — doing
   it again would throw the stars off the card. */
.toon-row .toon-strip-card:hover > .tile-rating,
.toon-row .toon-strip-card:hover > .score-bar {
  display: flex;
  /* The inset is in CARD pixels because the card is scaled — but it still has
     to clear the nameplate's bracket, which is drawn at screen size. */
  right: calc((12px + var(--plate-cap)) / var(--ts-zoom, 1.6)); bottom: calc(11px / var(--ts-zoom, 1.6));
  transform: scale(calc(1 / var(--ts-zoom, 1.6)));
  transform-origin: bottom right;
}
/* The strip inside the bar must not ALSO be pulled to a corner and counter-scaled
   — the bar already is, and doubling it throws the stars off the card. */
.toon-row .toon-strip-card:hover .score-bar > .tile-rating {
  right: auto; bottom: auto;
  transform: none;
}
/* The badges and the buttons ride in the top dock now, and the dock is what
   gets counter-scaled (see the tile-docks block at the end of this file).
   Counter-scaling them individually as well would scale them twice and throw
   them off the card. */
.toon-row .toon-strip-card:hover .tile-progress { height: calc(6px / var(--ts-zoom, 1.6)); }
@media (prefers-reduced-motion: reduce) {
  .toon-row .toon-strip-card,
  .toon-row .toon-strip-card.is-watched > img { transition: none; }
}
/* Touch: the header controls are pointer-sized by the shelf's convention;
   give them a finger's worth of height where there is no pointer. */
@media (pointer: coarse) {
  .toon-strip-head .cs-toggle, .toon-strip-play, .toon-strip-more, .toon-strip-title { min-height: 36px; }
  .toon-strip-more { opacity: 1; }
}
@media (max-width: 640px) {
  /* A phone has no width to give and no hover: the shelf simply wraps, the
     header keeps cover + title + count + Play + Manage, and the cards carry
     their title plate at rest since nothing will ever hover it in. */
  .toon-row { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
  .toon-row .toon-strip-card:hover { transform: none; }
  .toon-strip-title { flex: 1 1 auto; max-width: none; }
  .toon-strip-meta, .toon-strip-count, .toon-strip-head .cs-scale { display: none; }
  .toon-strip-title { min-width: 96px; }
  .toon-strip-more span { display: none; }
  .toon-strip-more { padding: 3px 6px; }
  .toon-row .toon-strip-card .tile-meta { display: block; padding: 6px 8px; }
  .toon-row .toon-strip-card .tile-title { font-size: 11px; }
}

/* Kind + episode pills on standalone / drilled-in tiles. */
.hentai-kind-pill,
.hentai-ep-pill {
  padding: 2px 7px;
  border-radius: 4px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .04em;
  font-variant-numeric: tabular-nums;
  background: rgba(0,0,0,.8);
  color: var(--text);
  border: 1px solid var(--border-strong);
  pointer-events: none;
}
.hentai-kind-pill { background: rgba(6,182,212,.85); color: #04191d; border-color: transparent; }
.hentai-ep-pill.watched { background: rgba(16,185,129,.88); color: #04140e; border-color: transparent; }


/* ── Drill-in breadcrumb ─────────────────────────────────────────────── */

.hentai-crumb {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 14px;
  margin-bottom: 4px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}
.hentai-crumb-back {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 999px;
  color: var(--text-dim);
  padding: 4px 12px;
  font-size: 12px;
  cursor: pointer;
  transition: background .12s, color .12s, border-color .12s;
}
.hentai-crumb-back:hover { background: var(--surface-3); color: var(--text); border-color: var(--border-strong); }
.hentai-crumb-back:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.hentai-crumb-label { font-size: 15px; font-weight: 600; }
.hentai-crumb-sub { margin-left: auto; font-size: 12px; color: var(--text-mute); font-variant-numeric: tabular-nums; }

/* ── Episode picker ──────────────────────────────────────────────────── */

.hentai-picker-overlay {
  position: fixed;
  inset: 0;
  z-index: 11000;
  background: rgba(0,0,0,.6);
  backdrop-filter: blur(5px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 32px;
}
.hentai-picker {
  width: min(760px, 96vw);
  max-height: min(78vh, 820px);
  display: flex;
  flex-direction: column;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: 0 24px 80px rgba(0,0,0,.65);
  overflow: hidden;
}
.hentai-picker-head {
  position: relative;
  padding: 16px 48px 12px 18px;
  border-bottom: 1px solid var(--border);
  flex: none;
}
.hentai-picker-title { font-size: 18px; font-weight: 650; }
.hentai-picker-sub { margin-top: 3px; font-size: 12px; color: var(--text-mute); font-variant-numeric: tabular-nums; }
.hentai-picker-close {
  position: absolute;
  top: 12px; right: 12px;
  width: 28px; height: 28px;
  border-radius: 6px;
  background: transparent;
  border: 1px solid transparent;
  color: var(--text-dim);
  font-size: 19px;
  line-height: 1;
  cursor: pointer;
  transition: background .12s, color .12s;
}
.hentai-picker-close:hover { background: var(--surface-2); color: var(--text); }
.hentai-picker-close:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

.hentai-picker-search { padding: 10px 18px 0; flex: none; }
.hentai-picker-search input {
  width: 100%;
  padding: 7px 11px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  color: var(--text);
  font-size: 13px;
}
.hentai-picker-search input:focus {
  outline: none;
  border-color: var(--border-strong);
  box-shadow: 0 0 0 2px rgba(167,139,250,.22);
}

.hentai-picker-list {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 10px 12px 12px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.hentai-picker-empty { padding: 24px 8px; text-align: center; font-size: 12px; }

.hentai-ep-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 7px 10px;
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: background .12s, border-color .12s;
}
.hentai-ep-row:hover { background: var(--surface); border-color: var(--border); }
.hentai-ep-row.is-next {
  background: rgba(167,139,250,.1);
  border-color: rgba(167,139,250,.4);
}
.hentai-ep-row.is-watched .hentai-ep-title { color: var(--text-dim); }

.hentai-ep-num {
  flex: none;
  width: 30px;
  text-align: center;
  font-size: 15px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--text-mute);
}
.hentai-ep-row.is-next .hentai-ep-num { color: var(--accent); }

.hentai-ep-thumb {
  position: relative;
  flex: none;
  width: 104px;
  aspect-ratio: 16 / 9;
  border-radius: 5px;
  overflow: hidden;
  background: var(--surface-2);
}
.hentai-ep-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hentai-ep-dur {
  position: absolute;
  right: 3px; bottom: 3px;
  padding: 1px 4px;
  border-radius: 3px;
  background: rgba(0,0,0,.82);
  color: #fff;
  font-size: 10px;
  font-variant-numeric: tabular-nums;
}
.hentai-ep-progress {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 3px;
  background: rgba(0,0,0,.6);
}
.hentai-ep-progress > div { height: 100%; background: linear-gradient(90deg, #c4b5fd, #f472b6); }

.hentai-ep-body { flex: 1; min-width: 0; }
.hentai-ep-title {
  font-size: 13px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.hentai-ep-sub {
  margin-top: 2px;
  font-size: 11px;
  color: var(--text-mute);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* The row's rating strip is always visible here (unlike on a tile, where it
   is hover-revealed) — in a list there's room and no art to cover. */
.hentai-ep-row .rating-strip {
  position: static;
  flex: none;
  opacity: 1;
  display: flex;
  gap: 1px;
}
.hentai-ep-tick { flex: none; color: var(--accent-good); display: inline-flex; }

.hentai-picker-foot {
  flex: none;
  padding: 10px 18px;
  border-top: 1px solid var(--border);
  display: flex;
  justify-content: flex-end;
}

/* ── Classification component (rip dialog + move dialog + upload) ─────── */

.hentai-classifier {
  margin-top: 10px;
  padding: 10px 12px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  transition: border-color .14s, background .14s;
}
.hentai-classifier.is-on { border-color: rgba(167,139,250,.45); background: rgba(167,139,250,.06); }

.hentai-classifier-toggle {
  display: flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  user-select: none;
  font-size: 13px;
}
.hentai-classifier-toggle input { accent-color: var(--accent); width: 15px; height: 15px; cursor: pointer; }
.hentai-classifier-hint { margin-left: auto; font-size: 11px; color: var(--text-mute); }

.hentai-classifier-body { margin-top: 10px; display: flex; flex-direction: column; gap: 9px; }
.hentai-classifier-body.hidden { display: none; }

.hentai-kind-row { display: flex; gap: 6px; flex-wrap: wrap; }
.hentai-kind-btn {
  flex: 1 1 150px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 7px 10px;
  text-align: left;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  color: var(--text-dim);
  cursor: pointer;
  transition: background .12s, border-color .12s, color .12s;
}
.hentai-kind-btn:hover { background: var(--surface-3); color: var(--text); }
.hentai-kind-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.hentai-kind-btn.active {
  background: rgba(167,139,250,.16);
  border-color: rgba(167,139,250,.55);
  color: var(--text);
}
.hentai-kind-label { font-size: 12.5px; font-weight: 600; }
.hentai-kind-hint { font-size: 10.5px; color: var(--text-mute); }

.hentai-series-row { display: flex; gap: 8px; align-items: flex-start; }
.hentai-series-row.hidden { display: none; }

.hentai-series-field { position: relative; flex: 1; min-width: 0; }
.hentai-series-input,
.hentai-ep-input {
  width: 100%;
  padding: 7px 10px;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  color: var(--text);
  font-size: 13px;
}
.hentai-series-input:focus,
.hentai-ep-input:focus {
  outline: none;
  border-color: var(--border-strong);
  box-shadow: 0 0 0 2px rgba(167,139,250,.22);
}
.hentai-ep-field { flex: none; display: flex; align-items: center; gap: 6px; }
.hentai-ep-field > span { font-size: 12px; color: var(--text-mute); }
.hentai-ep-input { width: 74px; text-align: center; font-variant-numeric: tabular-nums; }

/* Type-ahead list. Anchored to the input, capped at 8 rows + a create row so
   it stays a glanceable list however large the series library grows. */
.hentai-series-suggest {
  position: absolute;
  top: calc(100% + 4px);
  left: 0; right: 0;
  z-index: 40;
  max-height: 236px;
  overflow-y: auto;
  background: rgba(22,24,30,.99);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  box-shadow: 0 14px 40px rgba(0,0,0,.6);
  padding: 3px;
  display: flex;
  flex-direction: column;
}
.hentai-series-suggest.hidden { display: none; }
.hentai-series-suggest-row {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 6px 9px;
  background: transparent;
  border: none;
  border-radius: 5px;
  color: var(--text);
  font-size: 12.5px;
  text-align: left;
  cursor: pointer;
  transition: background .1s;
}
.hentai-series-suggest-row:hover,
.hentai-series-suggest-row.active { background: var(--surface-2); }
.hentai-series-suggest-row .hs-name {
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.hentai-series-suggest-row .hs-count {
  flex: none;
  font-size: 10.5px;
  color: var(--text-mute);
  font-variant-numeric: tabular-nums;
}
.hentai-series-suggest-row.is-new .hs-name { color: var(--accent); }
.hentai-series-suggest-row.is-new .hs-count { color: var(--accent); opacity: .75; }

.hentai-classifier-note { font-size: 11px; color: var(--text-mute); min-height: 1.2em; }
.hentai-classifier.compact { margin-top: 8px; padding: 9px 11px; }

/* ── Classification dialog ───────────────────────────────────────────── */

.hentai-dialog-overlay {
  position: fixed;
  inset: 0;
  z-index: 12000;
  background: rgba(0,0,0,.6);
  backdrop-filter: blur(5px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 32px;
}
.hentai-dialog {
  width: min(560px, 95vw);
  max-height: 88vh;
  overflow-y: auto;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: 0 24px 80px rgba(0,0,0,.65);
  padding: 20px;
}
.hentai-dialog-head h3 { margin: 0; font-size: 17px; font-weight: 650; letter-spacing: 0; text-transform: none; }
.hentai-dialog-msg {
  margin: 5px 0 0;
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.hentai-dialog-actions { margin-top: 14px; display: flex; gap: 6px; justify-content: flex-end; }

/* ── Responsive ──────────────────────────────────────────────────────── */

@media (max-width: 720px) {
  .hentai-picker-overlay, .hentai-dialog-overlay { padding: 12px; }
  .hentai-picker { max-height: 92vh; }
  .hentai-ep-thumb { width: 76px; }
  /* The rating strip is the first thing to go when width runs out — the row
     still opens on click, and ratings are editable from the tile. */
  .hentai-ep-row .rating-strip { display: none; }
  .hentai-kind-btn { flex: 1 1 100%; }
  .hentai-series-row { flex-wrap: wrap; }
  .hentai-ep-field { width: 100%; }
  .hentai-ep-input { width: 100%; }
  .hentai-crumb { flex-wrap: wrap; gap: 8px; }
  .hentai-crumb-sub { margin-left: 0; }
}

/* Shell: empty tab-strip space drags the window (Chrome-style) — the tabs
   and buttons themselves stay clickable via no-drag. */
body.browser-shelled #browser-tabbar { -webkit-app-region: drag; }
body.browser-shelled #browser-tabbar .browser-tab,
body.browser-shelled #browser-tabbar button { -webkit-app-region: no-drag; }

/* Tab strip at narrow widths: condense, THEN scroll (Chrome behavior).
   Stock rules pinned .browser-tab at min-width:80px + flex-shrink:0 so tabs
   could never condense, and #browser-tabs' max-width:calc(100% - 40px)
   ignored the toolbar's other controls — so tabs ran under them instead of
   the strip scrolling. Shell-only: the web tier keeps its layout. */
body.browser-shelled #browser-tabbar { min-width: 0; }
body.browser-shelled #browser-tabs {
  max-width: none;
  /* 0 1 auto, NOT 1 1 auto: the strip must not stretch to fill the bar, or
     there is no empty tabbar space left to drag the window by. */
  flex: 0 1 auto;
  overflow-x: auto;
  scrollbar-width: none;
  overscroll-behavior-x: contain;
  /* Chromium ignores -webkit-app-region on scroll containers, so this one
     is explicitly no-drag; the drag lives on #browser-tabbar's own space. */
  -webkit-app-region: no-drag;
}
body.browser-shelled #browser-tabs .browser-tab {
  min-width: 34px;          /* favicon + close still hittable */
  flex: 0 1 auto;           /* may shrink before the strip scrolls */
}
/* Below the floor the title is noise — keep favicon + close. */
@media (max-width: 900px) {
  body.browser-shelled #browser-tabs .browser-tab { max-width: 120px; }
}

/* Drag surfaces in the Browser tab. The Hearth topbar (the usual drag
   region) is hidden here, so the window must be movable from the browser
   chrome itself: the lip, the tab strip's empty space, and the padding of
   the toolbar row (its controls are all no-drag). */
body.shell-frameless .shell-drag-lip,
body.shell-mac .shell-drag-lip { height: 10px; }
body.browser-shelled #browser-bar { -webkit-app-region: drag; }
body.browser-shelled #browser-bar > * { -webkit-app-region: no-drag; }

/* Shell: floating window controls in the Browser tab. The Hearth topbar
   (which normally carries – □ ✕) collapses in this view, so the desktop
   app's #floating-win-controls takes over — but body.hearth-web hides it,
   and the shell IS the web build. Re-show it (shell only) and reserve room
   at the right of the tab strip so tabs never run under the buttons. */
body.hearth-shell.browser-nav-hidden #floating-win-controls { display: flex !important; }
body.hearth-shell.browser-nav-hidden #floating-win-controls .winbtn { display: inline-flex !important; }
body.hearth-shell.browser-nav-hidden #browser-tabbar { padding-right: 104px; }

/* Backdrop under right-click mini menus — see openMiniMenu(). Transparent,
   full-window, one z-index below the menu itself: it exists so a click over
   the browser page (a native view above the DOM in the shell, an iframe in
   the streamed engine) can still dismiss the menu. */
.mini-menu-backdrop {
  position: fixed;
  inset: 0;
  z-index: 2147483399;
  background: transparent;
}

/* ═══════════ Cross-library search — "On Steam" / "In your library" ═══════════
   Two surfaces, one visual language (see xlibRenderLibraryCross / …SteamCross):
     · .xlib-chip   — a small badge welded onto a result tile that ALSO exists
                      in the other collection. Never a duplicate row.
     · .xlib        — the "Also found elsewhere" strip under the grid, holding
                      matches the current view genuinely cannot show.
   Steam speaks its own blue; the local library speaks the app's purple accent,
   so the two directions stay tellable apart at a glance. */

/* ── the strip ── */
.xlib { margin-top: 30px; }
.xlib-head {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 0 2px 14px;
}
.xlib-rule {
  flex: 1;
  height: 1px;
  min-width: 12px;
  background: linear-gradient(90deg, transparent, var(--border-strong), transparent);
}
.xlib-label {
  flex: 0 1 auto;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: var(--text-dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Slightly tighter than the main grid: this is a hint strip, not a second
   library. Narrower cards also stop it competing with the real results. */
.xlib-grid { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; }

/* ── a cross-library tile ── */
.xlib-tile {
  /* Reuses .tile (3/2 aspect, cover, lift-on-hover) but reads as "not from
     here": dimmer by default, full strength on hover/focus. */
  opacity: .82;
  border-style: dashed;
  border-color: var(--border-strong);
  transition: transform .15s cubic-bezier(.2,.7,.3,1), box-shadow .15s,
              border-color .15s, opacity .15s;
}
.xlib-tile:hover,
.xlib-tile:focus-visible { opacity: 1; border-style: solid; }
.xlib-tile:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  transform: translateY(-4px) scale(1.02);
  box-shadow: var(--shadow-lift);
}
.xlib-tile--steam:hover,
.xlib-tile--steam:focus-visible { border-color: rgba(102,192,244,.55); }
.xlib-tile--local:hover,
.xlib-tile--local:focus-visible { border-color: rgba(167,139,250,.55); }

/* Both art placeholders are scoped to their own tile type upstream
   (`.steam-tile .steam-placeholder`, and `.tile-placeholder` inside #grid), and
   a cross tile is neither — so the Steam one arrived completely unstyled: a
   small unpositioned glyph in the top-left corner, half under the badge.
   Restate both at a size that suits the narrower cross tile. */
.xlib-tile .steam-placeholder {
  position: absolute; inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #1a1d2a, #0e1018);
  z-index: 0;
}
.xlib-tile .steam-placeholder span {
  font-size: 30px;
  font-weight: 800;
  letter-spacing: 1px;
  color: var(--text-mute);
  text-shadow: 0 2px 8px rgba(0,0,0,.5);
}
.xlib-tile .tile-placeholder { font-size: 30px; }
.xlib-tile .tile-cover img {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 50% 30%;
  transition: transform .15s;
}
.xlib-tile:hover .tile-cover img { transform: scale(1.03); }

.xlib-meta {
  position: relative;
  padding: 8px 11px 10px;
  background: linear-gradient(180deg, rgba(15,17,24,0) 0%, rgba(15,17,24,.88) 40%, rgba(15,17,24,.97) 100%);
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.xlib-name {
  font-size: 12.5px;
  font-weight: 700;
  color: #f2f5fa;
  line-height: 1.25;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.xlib-hint {
  display: flex;
  align-items: baseline;
  gap: 6px;
  font-size: 10px;
  min-width: 0;
}
.xlib-where {
  color: var(--text-mute);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* The call to action stays quiet until the tile is hovered/focused, so the
   strip reads as information first and a button second. */
.xlib-go {
  margin-left: auto;
  flex: none;
  font-weight: 700;
  color: var(--text-dim);
  opacity: 0;
  transform: translateX(-3px);
  transition: opacity .15s, transform .15s, color .15s;
}
.xlib-tile:hover .xlib-go,
.xlib-tile:focus-visible .xlib-go { opacity: 1; transform: none; }
.xlib-tile--steam:hover .xlib-go,
.xlib-tile--steam:focus-visible .xlib-go { color: #7fcaf5; }
.xlib-tile--local:hover .xlib-go,
.xlib-tile--local:focus-visible .xlib-go { color: var(--accent); }

/* ── the big "which collection" badge on a cross-library tile ── */
.xlib-badge {
  position: absolute;
  top: 8px; left: 8px;
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 8px 3px 6px;
  border-radius: 4px;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: .5px;
  text-transform: uppercase;
  box-shadow: 0 2px 8px rgba(0,0,0,.45);
  max-width: calc(100% - 16px);
  white-space: nowrap;
}
.xlib-badge--steam {
  background: linear-gradient(135deg, #1b4568, #2a6f9e);
  color: #dff0fd;
  border: 1px solid rgba(102,192,244,.45);
}
.xlib-badge--local {
  background: linear-gradient(135deg, #5b32c0, #8b5cf6);
  color: #f3edff;
  border: 1px solid rgba(167,139,250,.5);
}
.xlib-glyph { width: 11px; height: 11px; flex: none; }

/* ── the small chip welded onto an EXISTING result tile ──
   Same game, both collections: annotate rather than duplicate. */
.xlib-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 7px 2px 5px;
  border-radius: 4px;
  font-size: 9.5px;
  font-weight: 800;
  letter-spacing: .4px;
  text-transform: uppercase;
  cursor: pointer;
  white-space: nowrap;
  max-width: 100%;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0,0,0,.45);
  transition: filter .15s, transform .15s, box-shadow .15s;
}
.xlib-chip:hover  { filter: brightness(1.15); transform: translateY(-1px); }
.xlib-chip:active { transform: translateY(0) scale(.97); }
.xlib-chip:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* On a LOCAL tile: static, top of the bottom-left stack (.tile-bl is bottom-
   anchored, so this grows upward and shifts nothing). */
.xlib-chip--steam {
  background: linear-gradient(135deg, #1b4568, #2a6f9e);
  color: #dff0fd;
  border: 1px solid rgba(102,192,244,.45);
}
/* On a STEAM tile: overlaid bottom-left of the cover — the one corner the
   Steam tile leaves free (badge top-left, playtime top-right, play/library
   buttons bottom-right). */
.xlib-chip--local {
  position: absolute;
  bottom: 8px; left: 8px;
  z-index: 3;
  background: linear-gradient(135deg, #5b32c0, #8b5cf6);
  color: #f3edff;
  border: 1px solid rgba(167,139,250,.5);
  max-width: calc(100% - 60px);
}

/* ── landing pulse after a cross-library jump ── */
@keyframes xlib-flash {
  0%   { box-shadow: 0 0 0 0 rgba(167,139,250,.75), var(--shadow-card); }
  55%  { box-shadow: 0 0 0 6px rgba(167,139,250,0), var(--shadow-lift); }
  100% { box-shadow: 0 0 0 0 rgba(167,139,250,0), var(--shadow-card); }
}
.tile.xlib-flash {
  animation: xlib-flash 1.6s cubic-bezier(.2,.7,.3,1);
  border-color: rgba(167,139,250,.7);
  z-index: 3;
}

/* Narrow windows: the strip keeps a readable card width and the divider gives
   its space to the label instead of squeezing it to an ellipsis. */
@media (max-width: 720px) {
  .xlib { margin-top: 22px; }
  .xlib-grid { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 10px; }
  .xlib-head { gap: 8px; }
  .xlib-rule:last-child { display: none; }
  .xlib-label { white-space: normal; }
  .xlib-go { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .xlib-tile, .xlib-chip, .xlib-go, .xlib-tile .tile-cover img { transition: none; }
  .tile.xlib-flash { animation: none; }
}

/* ── macOS window chrome ──
   The shell uses titleBarStyle:'hiddenInset', so the OS draws its traffic
   lights over the top-LEFT of our own chrome. In the Browser tab the Hearth
   topbar is collapsed and the TAB STRIP is what reaches the top edge, so it
   needs the same left inset the topbar already gets — otherwise the first
   tab sits underneath the close/minimise/zoom buttons (and stealing that
   click opens macOS's Move & Resize menu instead of the tab).
   Mac also must NOT get the custom – □ ✕ cluster: the traffic lights ARE the
   window controls there, and two sets is worse than none. */
body.shell-mac.browser-nav-hidden #browser-tabbar { padding-left: 84px; }
body.shell-mac #floating-win-controls,
body.shell-mac .window-controls { display: none !important; }

/* ─── Floating pop-out video player ──────────────────────────────────────
   The shared #video-stage is MOVED in here (see renderer/media/popout.js),
   so these rules only have to re-shape the stage from "centered in a
   fullscreen modal" to "fills a small window".

   z-index 9550: above the fullscreen player (9000) and the grab floater
   (9500, the other bottom-right resident) so the video is never buried, but
   below #drop-intake-modal (9600) and every alert layer above it. */
.video-popout {
  position: fixed;
  z-index: 9550;
  display: flex;
  flex-direction: column;
  background: #000;
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  box-shadow: var(--shadow-lift);
  overflow: hidden;
  /* Geometry is owned by JS (drag/resize/persisted rect) — don't set
     width/height/left/top here or the restore would fight the stylesheet. */
}
.video-popout.hidden { display: none; }
.video-popout.dragging,
.video-popout.resizing { user-select: none; }
.video-popout.dragging { cursor: grabbing; }

/* Header overlays the top of the video so it costs no height, and fades in
   on hover — the same bargain every PiP window makes between "I can grab
   this" and "get out of the picture". */
.video-popout .vp-header {
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 30px;
  z-index: 12;
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 0 4px 0 8px;
  background: linear-gradient(to bottom, rgba(8,9,14,.92), rgba(8,9,14,0));
  color: var(--text);
  cursor: grab;
  opacity: 0;
  transition: opacity .15s ease;
}
.video-popout:hover .vp-header,
.video-popout.dragging .vp-header,
.video-popout:focus-within .vp-header { opacity: 1; }
.video-popout.dragging .vp-header { cursor: grabbing; }
.video-popout .vp-grip { flex: none; color: var(--text-mute); display: inline-flex; }
.video-popout .vp-grip svg { fill: currentColor; display: block; }
.video-popout .vp-title {
  flex: 1;
  min-width: 0;
  font-size: 11px;
  font-weight: 600;
  color: var(--text-dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.video-popout .vp-btn {
  flex: none;
  width: 22px; height: 22px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  border-radius: 4px;
  color: var(--text-dim);
  cursor: pointer;
  transition: background .12s ease, color .12s ease;
}
.video-popout .vp-btn:hover { background: rgba(255,255,255,.12); color: #fff; }
.video-popout .vp-close:hover { background: rgba(239,68,68,.85); color: #fff; }
.video-popout .vp-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

.video-popout .vp-body {
  flex: 1;
  min-height: 0;
  display: flex;
}

/* The stage, re-shaped: fill the window, video takes the slack, control bar
   keeps its natural height. object-fit:contain so an odd window aspect
   letterboxes instead of stretching the picture. */
.video-stage.in-popout {
  display: flex;
  width: 100%;
  height: 100%;
  min-width: 0;
}
.video-stage.in-popout video {
  flex: 1;
  min-height: 0;
  width: 100%;
  max-width: none;
  max-height: none;
  object-fit: contain;
}
/* The mid-right marker legend needs room the pop-out doesn't have. Markers
   stay on the seek track, where they're still usable at this size. */
.video-stage.in-popout .video-overlay-legend { display: none; }
/* Compact control bar: same controls, tighter metrics. The volume slider is
   the one thing that goes — the mute button and the wheel still work. */
.video-stage.in-popout .vc-bar {
  gap: 6px;
  padding: 5px 8px;
  font-size: 11px;
}
.video-stage.in-popout .vc-btn { width: 26px; height: 26px; }
.video-stage.in-popout .vc-btn svg { width: 17px; height: 17px; }
.video-stage.in-popout .vc-volume { display: none; }
.video-stage.in-popout .vc-time { min-width: 0; font-size: 11px; }

/* Resize handles — 8 invisible strips on the edges and corners. */
.video-popout .vp-handle { position: absolute; z-index: 14; }
.video-popout .vp-handle-n { top: 0; left: 10px; right: 10px; height: 6px; cursor: ns-resize; }
.video-popout .vp-handle-s { bottom: 0; left: 10px; right: 10px; height: 6px; cursor: ns-resize; }
.video-popout .vp-handle-w { left: 0; top: 10px; bottom: 10px; width: 6px; cursor: ew-resize; }
.video-popout .vp-handle-e { right: 0; top: 10px; bottom: 10px; width: 6px; cursor: ew-resize; }
.video-popout .vp-handle-nw { top: 0; left: 0; width: 12px; height: 12px; cursor: nwse-resize; }
.video-popout .vp-handle-se { bottom: 0; right: 0; width: 12px; height: 12px; cursor: nwse-resize; }
.video-popout .vp-handle-ne { top: 0; right: 0; width: 12px; height: 12px; cursor: nesw-resize; }
.video-popout .vp-handle-sw { bottom: 0; left: 0; width: 12px; height: 12px; cursor: nesw-resize; }
/* Bottom-right gets a visible grip so "you can resize this" is discoverable
   without hunting for the cursor change. */
.video-popout .vp-handle-se::after {
  content: '';
  position: absolute;
  right: 3px; bottom: 3px;
  width: 7px; height: 7px;
  border-right: 2px solid rgba(255,255,255,.45);
  border-bottom: 2px solid rgba(255,255,255,.45);
  border-bottom-right-radius: 2px;
  opacity: 0;
  transition: opacity .15s ease;
}
.video-popout:hover .vp-handle-se::after { opacity: 1; }

/* Pop-out button on a Hentai episode row — inline with the rating strip
   rather than absolutely placed like the tile version. */
.hentai-ep-popout {
  position: static;
  flex: none;
  width: 26px; height: 26px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(255,255,255,.06);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text-dim);
  cursor: pointer;
  opacity: 0;
  transition: opacity .15s ease, background .15s ease, color .15s ease;
}
.hentai-ep-row:hover .hentai-ep-popout,
.hentai-ep-popout:focus-visible { opacity: 1; }
.hentai-ep-popout:hover { background: rgba(124,58,237,.85); color: #fff; }
.hentai-ep-popout svg { display: block; }

@media (prefers-reduced-motion: reduce) {
  .video-popout .vp-header,
  .video-popout .vp-handle-se::after,
  .hentai-ep-popout,
  .media-tile .tile-popout { transition: none; }
}

/* ═══════════════ Remove-from-bundle picker ═══════════════════════════
   The undo for an accidental drag-and-drop bundling: right-click a bundled
   tile (or the stack, or a member inside the popout) → "Remove from bundle…"
   → this thumbnail grid. Click to toggle; picked cells wear the bundle pink
   so the selection reads at a glance. Nothing here deletes a file.
   Rendered by pickBundleMembersToRemove() in renderer/media/common.js. */
.unbundle-panel {
  width: min(760px, calc(100vw - 32px));
  max-width: none;
  border-color: rgba(244,114,182,.35);
  display: flex;
  flex-direction: column;
  max-height: min(86vh, 860px);
}
.unbundle-panel .media-prompt-message { margin-bottom: 10px; }
.unbundle-search {
  width: 100%;
  margin: 0 0 10px;
  padding: 7px 10px;
  background: rgba(255,255,255,.04);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  color: var(--text);
  font-size: 13px;
  outline: none;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.unbundle-search::placeholder { color: var(--text-mute); }
.unbundle-search:focus {
  border-color: rgba(244,114,182,.7);
  box-shadow: 0 0 0 2px rgba(244,114,182,.22);
}
.unbundle-grid {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(124px, 1fr));
  gap: 10px;
  padding: 2px;
}
.unbundle-empty {
  grid-column: 1 / -1;
  margin: 18px 0;
  text-align: center;
  font-size: 12px;
  color: var(--text-dim);
}
.unbundle-cell {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 0 0 6px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  color: var(--text-dim);
  text-align: left;
  cursor: pointer;
  overflow: hidden;
  transition: border-color .15s ease, background .15s ease,
              transform .15s ease, box-shadow .15s ease;
}
.unbundle-cell img {
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  display: block;
  background: var(--surface-3);
}
.unbundle-cell.no-thumb img { visibility: hidden; }
.unbundle-cell-title {
  padding: 0 8px;
  font-size: 11px;
  line-height: 1.35;
  color: var(--text-dim);
  /* Two lines, then ellipsis — a 200-char scrape title must not stretch the
     cell and break the grid rhythm. */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  overflow-wrap: anywhere;
}
.unbundle-cell:hover {
  border-color: var(--border-strong);
  background: var(--surface-3);
  transform: translateY(-1px);
}
.unbundle-cell:focus-visible {
  outline: none;
  border-color: rgba(167,139,250,.8);
  box-shadow: 0 0 0 2px rgba(167,139,250,.35);
}
.unbundle-cell.picked {
  border-color: rgba(244,114,182,.85);
  background: rgba(244,114,182,.12);
  box-shadow: 0 0 0 1px rgba(244,114,182,.4);
}
.unbundle-cell.picked .unbundle-cell-title { color: var(--text); }
/* Checkbox affordance: an empty ring that fills pink with a tick once picked. */
.unbundle-tick {
  position: absolute;
  top: 6px;
  left: 6px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 1.5px solid rgba(255,255,255,.55);
  background: rgba(6,7,12,.55);
  backdrop-filter: blur(2px);
  transition: background .15s ease, border-color .15s ease, transform .15s ease;
}
.unbundle-cell:hover .unbundle-tick { border-color: rgba(255,255,255,.85); }
.unbundle-cell.picked .unbundle-tick {
  background: var(--accent-pink);
  border-color: var(--accent-pink);
  transform: scale(1.05);
}
.unbundle-cell.picked .unbundle-tick::after {
  content: '';
  position: absolute;
  left: 6px;
  top: 3px;
  width: 5px;
  height: 9px;
  border: solid #1b1020;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.unbundle-note {
  margin: 10px 0 0;
  padding: 8px 10px;
  border-radius: var(--radius-sm);
  border: 1px solid rgba(244,114,182,.3);
  background: rgba(244,114,182,.08);
  font-size: 11px;
  line-height: 1.45;
  color: var(--text-dim);
}
.unbundle-panel .media-prompt-actions { margin-top: 12px; }
@media (max-width: 640px) {
  .unbundle-panel { min-width: 0; padding: 14px; max-height: 92vh; }
  .unbundle-grid { grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 8px; }
}
@media (prefers-reduced-motion: reduce) {
  .unbundle-cell,
  .unbundle-tick,
  .unbundle-search { transition: none; }
  .unbundle-cell:hover { transform: none; }
}

/* ─────────────── AI auto-tagger (toast + review + config) ───────────────
   Draggable floating toast scoped to the videos tab. Default position is
   bottom-right (offset above the steam pill slot); once dragged, an explicit
   left/top is set inline and persisted. */
.aitag-toast {
  position: fixed;
  right: 18px;
  bottom: calc(86px + env(safe-area-inset-bottom, 0px));
  z-index: 95;                       /* above content + steam pill, below modals */
  width: min(320px, calc(100vw - 36px));
  background: var(--surface-2);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius);
  box-shadow: var(--shadow-card);
  cursor: grab;
  overflow: hidden;
  user-select: none;
  touch-action: none;
  animation: sip-in .18s ease;
  transition: box-shadow .15s ease, border-color .15s ease;
}
.aitag-toast:hover { box-shadow: var(--shadow-lift); border-color: var(--accent); }
.aitag-toast.dragging { cursor: grabbing; transition: none; opacity: .92; }
.aitag-toast.done { border-color: rgba(16,185,129,.45); }

.aitag-toast-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 12px 10px 13px;
  min-width: 0;
}
.aitag-toast-text { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }
.aitag-toast-text b {
  font-size: 13px; font-weight: 650; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.aitag-toast-text small {
  font-size: 11.5px; color: var(--text-dim);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.aitag-toast-x {
  flex: 0 0 auto;
  width: 22px; height: 22px;
  border: none; border-radius: 6px;
  background: transparent; color: var(--text-mute);
  font-size: 15px; line-height: 1; cursor: pointer;
  transition: background .15s, color .15s;
}
.aitag-toast-x:hover { background: var(--surface-3); color: var(--text); }

.aitag-spin {
  flex: 0 0 auto;
  width: 18px; height: 18px;
  border-radius: 50%;
  border: 2.5px solid var(--surface-3);
  border-top-color: var(--accent);
  animation: aitag-spin .8s linear infinite;
}
.aitag-spin.small { width: 12px; height: 12px; border-width: 2px; }
@keyframes aitag-spin { to { transform: rotate(360deg); } }
.aitag-check {
  flex: 0 0 auto;
  width: 18px; height: 18px; border-radius: 50%;
  background: rgba(16,185,129,.16);
  color: var(--accent-good);
  font-size: 12px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}

.aitag-toast-bar { height: 3px; background: var(--surface-3); }
.aitag-toast-bar i { display: block; height: 100%; background: var(--grad-cool); transition: width .3s ease; }
.aitag-toast.done .aitag-toast-bar i { background: var(--accent-good); }

.aitag-toast-body { padding: 10px 13px 12px; border-top: 1px solid var(--border); }
.aitag-cur-row {
  display: flex; align-items: center; gap: 8px;
  font-size: 12px; color: var(--text-dim);
  padding: 2px 0; min-width: 0;
}
.aitag-cur-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.aitag-toast-recent { margin-top: 6px; max-height: 180px; overflow-y: auto; }
.aitag-rec-row {
  display: flex; align-items: baseline; gap: 8px;
  font-size: 11.5px; padding: 3px 0; min-width: 0;
  border-top: 1px solid var(--border);
}
.aitag-rec-row:first-child { border-top: none; }
.aitag-rec-title { flex: 1; min-width: 0; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.aitag-rec-adds { flex: 0 1 auto; color: var(--accent); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 55%; }
.aitag-rec-empty { font-size: 11.5px; padding: 4px 0; }
.aitag-toast-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 10px; }

/* review modal: renderer/media/aitag-review.css */

/* config modal: renderer/media/aitag-review.css (.atr-config) */

@media (max-width: 640px) {
  .aitag-toast { right: 10px; bottom: calc(78px + env(safe-area-inset-bottom, 0px)); }
}
/* Keep the transient privacy toasts clear of the AI-tagger toast's default
   corner (same pattern as the steam-install-pill avoidance rule above). */
body.has-aitag-toast #privacy-toast-stack { bottom: 175px; }

/* AI deep-scan frame-count slider */
.aitag-deep-slider-row {
  display: flex;
  align-items: center;
  gap: 12px;
}
.aitag-deep-slider-row input[type="range"] {
  flex: 1;
  accent-color: var(--accent);
  cursor: pointer;
}
.aitag-deep-slider-row span {
  flex: 0 0 auto;
  min-width: 130px;
  text-align: right;
  font-size: 12px;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
}

/* ── game notes: hero pill + tile marker ─────────────────────────────── */
.notes-pill {
  padding: 3px 9px; font-size: 11px; font-weight: 600; letter-spacing: .3px;
  border-radius: 999px; font-family: inherit; cursor: pointer;
  background: rgba(245,197,66,.14); color: #f5c542; border: 1px solid rgba(245,197,66,.4);
}
.notes-pill:hover { background: rgba(245,197,66,.26); }
.tile-note-badge {
  position: absolute; bottom: 12px; right: 12px; z-index: 4; /* top-right belongs to NEW / Playing */
  font-size: 12px; line-height: 1; padding: 4px 6px; border-radius: 6px;
  background: rgba(0,0,0,.65); color: #f5c542; border: 1px solid rgba(245,197,66,.35);
  pointer-events: none;
}
.detail-body h2 .section-hint {
  font-size: 11px; font-weight: 400; color: var(--text-mute); margin-left: 8px;
  letter-spacing: 0; text-transform: none;
}
.tile.running .tile-note-badge { display: none; } /* Playing badge owns that corner */

/* ─────────────────── HOOKER card (detail panel, web build) ───────────────────
   Same surface/border/radius tokens as .cheat-row so it reads as one more cheat
   row — a live one. Status pills reuse the sched-chip palette (ok/warn/bad). */
.hooker-card {
  margin-top: 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px 14px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.hk-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.hk-name {
  font-weight: 700; letter-spacing: .12em; font-size: 11.5px; color: var(--text);
  display: inline-flex; align-items: center; gap: 7px;
}
.hk-name::before {
  content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--text-mute);
  box-shadow: 0 0 0 3px rgba(255,255,255,.04);
}
.hooker-card.is-live .hk-name::before { background: #10b981; box-shadow: 0 0 0 3px rgba(16,185,129,.18); animation: hk-pulse 1.8s ease-in-out infinite; }
.hooker-card.is-armed:not(.is-live) .hk-name::before { background: var(--accent); box-shadow: 0 0 0 3px rgba(167,139,250,.18); }
@keyframes hk-pulse { 0%,100% { box-shadow: 0 0 0 3px rgba(16,185,129,.18); } 50% { box-shadow: 0 0 0 6px rgba(16,185,129,.06); } }
@media (prefers-reduced-motion: reduce) { .hooker-card.is-live .hk-name::before { animation: none; } }
.hk-pill {
  font-size: 11px; padding: 3px 8px; border-radius: 999px; border: 1px solid var(--border);
  color: var(--text-dim); background: var(--bg-2); white-space: nowrap;
}
.hk-pill.ok   { color: #34d399; background: rgba(16,185,129,.1); border-color: rgba(16,185,129,.28); }
.hk-pill.warn { color: #fbbf24; background: rgba(245,158,11,.1); border-color: rgba(245,158,11,.28); }
.hk-pill.bad  { color: var(--accent-hot); background: rgba(239,68,68,.1); border-color: rgba(239,68,68,.28); }
.hk-actions { margin-left: auto; display: flex; gap: 6px; flex-wrap: wrap; }
.hk-actions .btn { min-height: 32px; }
.hk-live {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 8px;
  padding: 10px 12px; border-radius: 8px; background: var(--bg-2); border: 1px solid var(--border);
}
.hk-stat { min-width: 0; }
.hk-stat b { display: block; font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase; color: var(--text-mute); font-weight: 600; margin-bottom: 2px; }
.hk-stat span { display: block; font-size: 13px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-variant-numeric: tabular-nums; }
.hk-stat.wide { grid-column: 1 / -1; }
.hk-stat.wide span { white-space: normal; }
.hk-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12.5px; color: var(--text-dim); }
.hk-row .grow { flex: 1; min-width: 0; }
.hk-plan-edit { display: none; flex-direction: column; gap: 6px; }
.hk-plan-edit.open { display: flex; }
.hk-plan-edit textarea {
  width: 100%; min-height: 150px; resize: vertical; font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 12px; line-height: 1.45; color: var(--text); background: var(--bg-2); border: 1px solid var(--border);
  border-radius: 8px; padding: 8px 10px; box-sizing: border-box;
}
.hk-plan-edit textarea:focus { outline: 2px solid var(--accent); outline-offset: 1px; }
.hk-events { display: flex; flex-direction: column; gap: 3px; }
.hk-ev { display: flex; gap: 8px; font-size: 11.5px; color: var(--text-mute); min-width: 0; }
.hk-ev time { font-variant-numeric: tabular-nums; color: var(--text-mute); flex: 0 0 auto; }
.hk-ev .k { color: var(--text-dim); flex: 0 0 auto; }
.hk-ev .m { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hk-ev.kind-applied .k, .hk-ev.kind-attached .k { color: #34d399; }
.hk-ev.kind-attach-failed .k, .hk-ev.kind-plan-failed .k, .hk-ev.kind-mem-failed .k, .hk-ev.kind-pre-launch-failed .k { color: var(--accent-hot); }
.hk-shot { width: 100%; height: auto; border-radius: 8px; border: 1px solid var(--border); display: block; }
.hk-hookup { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11.5px; color: var(--text-dim); background: var(--bg-2); border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; word-break: break-all; user-select: all; }
.hk-note { font-size: 12px; color: var(--text-dim); }
@media (max-width: 640px) {
  .hk-actions { margin-left: 0; width: 100%; }
  .hk-actions .btn { min-height: 44px; flex: 1; }
  .hk-live { grid-template-columns: 1fr 1fr; }
}

/* ─────────────────── HOOKER topbar pill + panel ─────────────────── */
.hk-tb { position: relative; }
.hk-tb-dot {
  position: absolute; top: 6px; right: 6px; width: 7px; height: 7px; border-radius: 50%;
  background: var(--text-mute); opacity: .55; transition: background .2s, opacity .2s;
}
.hk-tb.is-running .hk-tb-dot { background: #fbbf24; opacity: 1; }
.hk-tb.is-live .hk-tb-dot { background: #10b981; opacity: 1; box-shadow: 0 0 0 3px rgba(16,185,129,.18); animation: hk-pulse 1.8s ease-in-out infinite; }
.hk-tb.is-down .hk-tb-dot { background: var(--accent-hot); opacity: 1; }
@media (prefers-reduced-motion: reduce) { .hk-tb.is-live .hk-tb-dot { animation: none; } }
.hooker-panel { width: min(760px, 94vw); padding: 24px 26px; }
.hooker-panel h2 { display: flex; align-items: center; gap: 12px; letter-spacing: .1em; font-size: 18px; margin-bottom: 14px; }
.hkp-body { display: flex; flex-direction: column; gap: 18px; }
.hkp-section h3 { margin: 0 0 8px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--text-mute); font-weight: 600; display: flex; align-items: center; gap: 10px; }
.hkp-section h3 .grow { flex: 1; }
.hkp-now { display: flex; flex-direction: column; gap: 10px; }
.hkp-game { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.hkp-game .title { font-weight: 600; color: var(--text); font-size: 15px; }
.hkp-game .sub { color: var(--text-mute); font-size: 12px; }
.hkp-game .hk-actions { margin-left: auto; }
.hkp-empty { color: var(--text-dim); font-size: 13px; padding: 14px; border: 1px dashed var(--border); border-radius: 10px; }
.hkp-plans { display: flex; flex-direction: column; gap: 4px; }
.hkp-plan {
  display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 8px;
  background: var(--surface); border: 1px solid var(--border); font-size: 12.5px; color: var(--text-dim);
  cursor: pointer; min-height: 40px; text-align: left; width: 100%; font: inherit;
}
.hkp-plan:hover { background: var(--surface-2); }
.hkp-plan:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.hkp-plan .t { color: var(--text); font-weight: 600; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hkp-plan .counts { font-variant-numeric: tabular-nums; white-space: nowrap; }
.hkp-settings { display: flex; flex-direction: column; gap: 10px; }
.modal-panel .hkp-toggle, .hkp-toggle { display: flex; flex-direction: row; align-items: flex-start; gap: 12px; font-size: 13px; color: var(--text); cursor: pointer; min-height: 44px; margin: 0; }
.hkp-toggle input { width: 18px; height: 18px; margin: 2px 0 0; accent-color: var(--accent); flex: 0 0 auto; }
.hkp-toggle small { display: block; color: var(--text-mute); font-size: 12px; margin-top: 2px; }
.hkp-events .hk-events { max-height: 220px; overflow: auto; }
@media (max-width: 640px) {
  .hooker-panel { padding: 18px 16px; width: 96vw; }
  .hkp-game .hk-actions { margin-left: 0; width: 100%; }
}

/* ── Steam tile: install-date suffix + cover picker (right-click → Change cover…) ── */
.steam-tile .steam-sub-when { opacity: .7; }
.steam-cover-picker { width: min(760px, calc(100vw - 32px)); max-width: none; max-height: calc(100vh - 48px); display: flex; flex-direction: column; }
.scp-head { display: flex; gap: 16px; align-items: flex-start; }
.scp-current {
  flex: 0 0 96px; width: 96px; aspect-ratio: 2 / 3; border-radius: 8px; overflow: hidden;
  background: var(--surface-2, #1a1d24); border: 1px solid var(--border);
}
.scp-current img { width: 100%; height: 100%; object-fit: cover; display: block; }
.scp-head-text { flex: 1; min-width: 0; }
.scp-head-text h3 { margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.scp-status { font-size: 11.5px; color: var(--text-mute, #94a3b8); min-height: 16px; }
.scp-sections { flex: 1 1 auto; overflow-y: auto; margin-top: 12px; padding-right: 2px; min-height: 60px; }
.scp-section + .scp-section { margin-top: 12px; }
.scp-section-title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .5px; color: var(--text-mute, #94a3b8); margin-bottom: 6px; }
.scp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); grid-auto-rows: 126px; grid-auto-flow: dense; gap: 8px; }
.scp-item {
  position: relative; padding: 0; margin: 0; border: 2px solid transparent; border-radius: 8px; overflow: hidden;
  background: var(--surface-2, #1a1d24); cursor: pointer; transition: border-color .12s ease, transform .12s ease;
}
.scp-item.landscape { grid-column: span 2; }
.scp-item img { width: 100%; height: 100%; object-fit: cover; display: block; }
.scp-item:hover { border-color: rgba(167,139,250,.5); transform: translateY(-1px); }
.scp-item.selected { border-color: var(--accent, #a78bfa); box-shadow: 0 0 0 2px rgba(167,139,250,.35); }
.scp-item.is-current { border-color: rgba(52,211,153,.6); }
.scp-kind, .scp-now {
  position: absolute; bottom: 4px; left: 4px; font-size: 9.5px; font-weight: 700; letter-spacing: .3px;
  padding: 1px 5px; border-radius: 999px; background: rgba(0,0,0,.65); color: #e8e8f0; pointer-events: none;
}
.scp-now { left: auto; right: 4px; background: rgba(52,211,153,.85); color: #062016; }
.scp-url-row { display: flex; gap: 8px; margin-top: 12px; }
.scp-url-row input[type="text"] { flex: 1; }
.scp-spacer { flex: 1; }
@media (max-width: 520px) {
  .scp-current { flex-basis: 64px; width: 64px; }
  .scp-grid { grid-template-columns: repeat(auto-fill, minmax(72px, 1fr)); grid-auto-rows: 108px; }
}
/* Touch: a 16px input so iOS doesn't zoom the page when the cover-URL field
   gets focus. (Menu row heights live in hearth-menu.css — every tile menu is a
   hearthMenu now.) */
@media (pointer: coarse) {
  .steam-cover-picker .scp-url { font-size: 16px; }
}

/* ─────────────── rip log (renderer/rip-log.js) ─────────────── */
#btn-riplog .riplog-badge.is-busy { background: var(--accent); box-shadow: 0 0 0 2px var(--bg); }
.riplog-panel { width: min(820px, 94vw); display: flex; flex-direction: column; }
.riplog-panel h2 { margin: 0 0 4px; }
.rl-toolbar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
  margin: 12px 0 10px; padding: 10px 12px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 10px;
}
.rl-filters { display: flex; flex-wrap: wrap; gap: 6px; }
.rl-filters button {
  min-height: 36px; padding: 0 12px; border-radius: var(--radius-sm);
  background: transparent; border: 1px solid var(--border); color: var(--text-dim);
  font: inherit; font-size: 13px; cursor: pointer;
}
.rl-filters button b { font-weight: 700; color: var(--text); margin-left: 4px; }
.rl-filters button b:empty { display: none; }
.rl-filters button[aria-pressed="true"] { background: var(--surface-3); border-color: var(--border-strong); color: var(--text); }
.rl-filters button:focus-visible, .rl-search:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.rl-search {
  flex: 1 1 180px; min-width: 0; min-height: 36px; padding: 0 12px;
  background: var(--bg-2); border: 1px solid var(--border); border-radius: var(--radius-sm);
  color: var(--text); font: inherit; font-size: 16px;
}
#riplog-retry-all { min-height: 36px; }
.rl-list { list-style: none; margin: 0 0 10px; padding: 0; max-height: 56vh; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
.rl-row {
  display: grid; grid-template-columns: 112px minmax(0, 1fr) auto; gap: 12px; align-items: start;
  padding: 10px 12px; background: var(--surface); border: 1px solid var(--border); border-radius: 10px;
}
.rl-status {
  justify-self: start; padding: 3px 8px; border-radius: 6px; font-size: 11.5px; font-weight: 700;
  letter-spacing: .02em; text-transform: uppercase; white-space: nowrap;
  background: var(--surface-3); color: var(--text-dim);
}
.rl-row[data-st="running"] .rl-status { background: rgba(6,182,212,.14); color: var(--accent-2); }
.rl-row[data-st="done"] .rl-status, .rl-row[data-st="sent"] .rl-status, .rl-row[data-st="resolved"] .rl-status { background: rgba(16,185,129,.14); color: var(--accent-good); }
.rl-row[data-st="failed"] .rl-status { background: rgba(239,68,68,.16); color: #fca5a5; }
.rl-row[data-st="interrupted"] .rl-status { background: rgba(245,158,11,.16); color: #fcd34d; }
.rl-row[data-st="failed"] { border-color: rgba(239,68,68,.35); }
.rl-row[data-st="interrupted"] { border-color: rgba(245,158,11,.35); }
.rl-title { color: var(--text); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rl-meta { display: flex; flex-wrap: wrap; gap: 4px 12px; margin-top: 3px; font-size: 12px; color: var(--text-mute); }
.rl-meta .rl-dest { color: var(--text-dim); font-weight: 600; }
.rl-why { margin-top: 4px; font-size: 12.5px; color: var(--text-dim); overflow-wrap: anywhere; }
.rl-row[data-st="failed"] .rl-why, .rl-row[data-st="interrupted"] .rl-why { color: #fecaca; }
.rl-actions { display: flex; gap: 6px; align-items: center; }
.rl-actions .btn { min-height: 36px; padding: 0 12px; font-size: 13px; }
.rl-link { font-size: 13px; color: var(--accent); white-space: nowrap; padding: 8px 4px; }
.rl-empty { padding: 28px 12px; text-align: center; color: var(--text-dim); background: var(--surface); border: 1px dashed var(--border); border-radius: 10px; }
.rl-foot { font-size: 12px; margin: 0; }
.rl-foot code { display: inline; padding: 1px 5px; margin: 0; font-size: 11.5px; background: var(--surface); border-radius: 4px; white-space: nowrap; }
.rl-dismiss { color: var(--text-dim); }
@media (max-width: 640px) {
  .riplog-panel { padding: 20px 16px; }
  .rl-row { grid-template-columns: minmax(0, 1fr); gap: 6px; }
  .rl-actions { flex-wrap: wrap; }
  .rl-actions .btn { min-height: 44px; flex: 1 1 auto; }
  .rl-filters { display: grid; grid-template-columns: 1fr 1fr; width: 100%; }
  .rl-filters button { min-height: 44px; }
  .rl-list { max-height: none; overflow: visible; }
  #riplog-retry-all { width: 100%; min-height: 44px; }
}

/* ═══════════ Browser chrome — "Hearthside" (2026-09-28) ═══════════
   The tab strip, address bar, bookmark bar and their menus in the start page's
   warm lodge palette, so the page and the chrome around it read as one room.
   Web tier + Hearth Shell both render this chrome. Tokens: --wbc-*. */
:root {
  --wbc-bg: #120d0e;
  --wbc-bar: #19120f;
  --wbc-panel: #1b1412;
  --wbc-line: rgba(255, 206, 160, .09);
  --wbc-line-hi: rgba(255, 190, 130, .26);
  --wbc-text: #f1e6da;
  --wbc-dim: rgba(241, 230, 218, .7);
  --wbc-ember: #ff9a3c;
  --wbc-ember-hi: #ffc77a;
  --wbc-hover: rgba(255, 154, 60, .12);
  --wbc-press: rgba(255, 154, 60, .2);
}
#view-browser.browser-view { background: var(--wbc-bg); }
#view-browser #browser-tabbar {
  background: linear-gradient(180deg, #150f10, var(--wbc-bg));
  border-bottom: 1px solid var(--wbc-line);
}
#view-browser .browser-tab {
  background: transparent; border-color: transparent; color: var(--wbc-dim);
  border-radius: 9px 9px 0 0;
}
#view-browser .browser-tab:hover { background: rgba(255, 228, 196, .05); color: var(--wbc-text); }
#view-browser .browser-tab.active {
  background: var(--wbc-bar); color: var(--wbc-text);
  border-color: var(--wbc-line-hi); border-bottom-color: transparent;
  box-shadow: inset 0 2px 0 var(--wbc-ember);
}
#view-browser .browser-tab.drag-over { box-shadow: inset 2px 0 0 var(--wbc-ember); }
#view-browser .browser-tab-close { color: var(--wbc-dim); }
#view-browser .browser-tab-close:hover { background: rgba(255, 228, 196, .12); color: #fff; }
#view-browser #browser-newtab {
  background: transparent; border-color: var(--wbc-line); color: var(--wbc-ember-hi); border-radius: 8px;
}
#view-browser #browser-newtab:hover { background: var(--wbc-hover); border-color: var(--wbc-line-hi); }
#view-browser #browser-bar {
  background: linear-gradient(180deg, var(--wbc-bar), #160f0e);
  border-bottom: 1px solid var(--wbc-line);
}
#view-browser #browser-bar .iconbtn {
  background: rgba(255, 228, 196, .035); border-color: var(--wbc-line); color: var(--wbc-text); border-radius: 8px;
}
#view-browser #browser-bar .iconbtn:hover { background: var(--wbc-hover); border-color: var(--wbc-line-hi); color: #fff; }
#view-browser #browser-bar .iconbtn:active:not(:disabled), #view-browser #browser-newtab:active { background: var(--wbc-press); }
#view-browser #browser-bar .iconbtn:focus-visible,
#view-browser #browser-newtab:focus-visible,
#view-browser #browser-url:focus-visible { outline: 2px solid var(--wbc-ember); outline-offset: 1px; }
/* The Hearth button wears the fireplace mark instead of a house glyph. */
#view-browser #browser-hearth-toggle {
  background: rgba(255, 154, 60, .1); border-color: rgba(255, 154, 60, .32); border-radius: 8px;
}
#view-browser #browser-hearth-toggle:hover { background: rgba(255, 154, 60, .2); border-color: rgba(255, 154, 60, .5); }
.hearth-toggle-mark { width: 20px; height: 20px; object-fit: contain; display: block; filter: drop-shadow(0 1px 3px rgba(0, 0, 0, .5)); }
#view-browser #browser-url {
  background: rgba(8, 5, 6, .45); border-color: var(--wbc-line); color: var(--wbc-text); border-radius: 9px;
}
#view-browser #browser-url::placeholder { color: rgba(241, 230, 218, .42); }
#view-browser #browser-url:focus { border-color: rgba(255, 154, 60, .6) !important; box-shadow: 0 0 0 3px rgba(255, 154, 60, .14); }
#view-browser #browser-url-spinner { border-color: rgba(255, 154, 60, .22); border-top-color: var(--wbc-ember); }
#view-browser #browser-bookmarks { background: linear-gradient(180deg, #160f0e, var(--wbc-bg)); border-bottom: 1px solid var(--wbc-line); }
#view-browser .browser-bookmark { color: var(--wbc-dim); border-radius: 7px; }
#view-browser .browser-bookmark:hover { color: #fff; background: rgba(255, 228, 196, .05); }
#view-browser .browser-bookmark.drag-over-before { box-shadow: inset 2px 0 0 var(--wbc-ember); }
#view-browser .browser-bookmark.drag-over-after { box-shadow: inset -2px 0 0 var(--wbc-ember); }

/* Menus and popovers the chrome opens. */
#browser-url-suggest,
#view-browser .browser-folder-menu,
#view-browser #browser-send-menu,
#view-browser #browser-scroll-menu,
.bm-popover,
.web-mini-menu {
  background: var(--wbc-panel);
  border-color: var(--wbc-line-hi);
  border-radius: 12px;
  box-shadow: 0 16px 44px rgba(0, 0, 0, .6), inset 0 1px 0 rgba(255, 240, 220, .04);
}
#browser-url-suggest .suggest-row:hover,
#browser-url-suggest .suggest-row.selected,
#view-browser .browser-folder-menu .browser-bookmark:hover,
#view-browser #browser-send-menu button:hover,
.web-mini-menu button:hover:not(:disabled) { background: var(--wbc-hover); color: #fff; }
#browser-url-suggest .suggest-row { border-radius: 8px; }
#browser-url-suggest .suggest-url { color: rgba(255, 199, 122, .85); }
#browser-url-suggest .suggest-row b, .wbh-hist-row b { color: var(--wbc-ember-hi); }
#view-browser #browser-send-menu button.send-games,
#view-browser #browser-send-menu button.send-webgames { color: var(--wbc-ember-hi); }

/* ── Browser chrome polish (2026-09-28): painted toolbar icons, tab states ──
   Pictorial buttons wear the app's painted icon set (same art as the topbar and
   context menus); the SVG stays in the DOM for the JS that swaps it, just hidden.
   Back / forward / reload / stop keep their simple line glyphs. */
#view-browser #browser-bar .iconbtn.pic { width: 32px; height: 30px; }
#view-browser #browser-bar .iconbtn.pic > svg { display: none; }
#view-browser #browser-bar .iconbtn.pic::before {
  content: ''; width: 20px; height: 20px;
  background: var(--pic) center / contain no-repeat;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .55));
  transition: transform .16s cubic-bezier(.2, .8, .2, 1), filter .16s ease, opacity .16s ease;
}
#view-browser #browser-bar .iconbtn.pic:hover::before { transform: translateY(-1px) scale(1.08); }
#view-browser #browser-bar .iconbtn.pic:active::before { transform: scale(.92); }
#browser-bookmark         { --pic: url('browser-home/shortcuts.webp'); }
#browser-bookmarks-manage { --pic: url('data:image/webp;base64,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'); }
#browser-history          { --pic: url('browser-home/recent.webp'); }
#browser-copy             { --pic: url('data:image/webp;base64,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'); }
#browser-external         { --pic: url('data:image/webp;base64,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'); }
#browser-send             { --pic: url('data:image/webp;base64,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'); }
#browser-scroll           { --pic: url('data:image/webp;base64,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'); }
#browser-adblock-toggle   { --pic: url('browser-home/shield.webp'); }
#browser-autofill         { --pic: url('data:image/webp;base64,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'); }
/* State reads through the painting itself: an unset star / a disabled blocker is
   a faded, desaturated version of the same icon; "on" glows. */
#view-browser #browser-bar #browser-bookmark.pic:not(.on)::before,
#view-browser #browser-bar #browser-adblock-toggle.pic.off::before { filter: grayscale(1) brightness(.8); opacity: .55; }
#view-browser #browser-bar #browser-bookmark.pic:not(.on):hover::before,
#view-browser #browser-bar #browser-adblock-toggle.pic.off:hover::before { opacity: .85; }
#view-browser #browser-bar #browser-bookmark.pic.on,
#view-browser #browser-bar #browser-adblock-toggle.pic.on {
  background: rgba(255, 154, 60, .12); border-color: rgba(255, 154, 60, .38);
}
#view-browser #browser-bar #browser-bookmark.pic.on::before,
#view-browser #browser-bar #browser-adblock-toggle.pic.on::before { filter: drop-shadow(0 0 5px rgba(255, 150, 50, .55)); }

/* VPN pill (Hearth Shell only). One painted tunnel, three lightings, plus a
   word, so the state never rides on colour alone:
     on       lantern lit green   "VPN"       browsing exits through Mullvad
     warn     cracked, red flame  "VPN down"  wanted, but no route — going out direct
     off      cold and dark       "Direct"    turned off on purpose
     checking cold, faded         "VPN…"      before the shell has answered
   Selectors carry three ids so the theme's `#browser-bar .iconbtn` rule
   cannot swallow them again. */
#view-browser #browser-bar #browser-vpn {
  --pic: url('browser-home/vpn-off.webp');
  --vpn-ink: var(--wbc-dim);
  width: auto; height: 30px; padding: 0 10px 0 5px; gap: 5px;
  border-radius: 999px; color: var(--vpn-ink);
  font-size: 11.5px; font-weight: 650; letter-spacing: .02em; white-space: nowrap;
  font-variant-numeric: tabular-nums;
  transition: background .18s ease, border-color .18s ease, color .18s ease, box-shadow .18s ease;
}
#view-browser #browser-bar #browser-vpn::before {
  content: ''; width: 22px; height: 22px; flex: none;
  background: var(--pic) center / contain no-repeat;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .55));
  transition: transform .16s cubic-bezier(.2, .8, .2, 1), filter .2s ease, opacity .2s ease;
}
#view-browser #browser-bar #browser-vpn:hover::before { transform: translateY(-1px) scale(1.08); }
#view-browser #browser-bar #browser-vpn:active::before { transform: scale(.92); }
#view-browser #browser-bar #browser-vpn .vpn-word { line-height: 1; }

#view-browser #browser-bar #browser-vpn[data-state="on"] {
  --pic: url('browser-home/vpn-on.webp');
  --vpn-ink: #bff08f;
  background: rgba(126, 206, 84, .1); border-color: rgba(150, 222, 98, .38);
}
#view-browser #browser-bar #browser-vpn[data-state="on"]::before { filter: drop-shadow(0 0 5px rgba(150, 230, 90, .55)); }
#view-browser #browser-bar #browser-vpn[data-state="on"]:hover { background: rgba(126, 206, 84, .17); border-color: rgba(150, 222, 98, .55); }

#view-browser #browser-bar #browser-vpn[data-state="warn"] {
  --pic: url('browser-home/vpn-warn.webp');
  --vpn-ink: #ffb27a;
  background: rgba(255, 110, 40, .12); border-color: rgba(255, 130, 60, .55);
  animation: vpn-warn-breathe 2.4s ease-in-out infinite;
}
#view-browser #browser-bar #browser-vpn[data-state="warn"]::before { filter: drop-shadow(0 0 5px rgba(255, 110, 40, .6)); }
@keyframes vpn-warn-breathe {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255, 120, 50, 0); }
  50%      { box-shadow: 0 0 0 3px rgba(255, 120, 50, .22); }
}

#view-browser #browser-bar #browser-vpn[data-state="off"],
#view-browser #browser-bar #browser-vpn[data-state="none"] {
  --vpn-ink: rgba(241, 230, 218, .72);
  background: rgba(8, 5, 6, .35); border-style: dashed;
}
#view-browser #browser-bar #browser-vpn[data-state="off"]:hover,
#view-browser #browser-bar #browser-vpn[data-state="none"]:hover { --vpn-ink: #fff; }

#view-browser #browser-bar #browser-vpn[data-state="checking"]::before { opacity: .55; filter: grayscale(.6) drop-shadow(0 1px 2px rgba(0, 0, 0, .55)); }
#view-browser #browser-bar #browser-vpn[disabled] { opacity: .6; cursor: progress; }

@media (prefers-reduced-motion: reduce) {
  #view-browser #browser-bar #browser-vpn[data-state="warn"] { animation: none; box-shadow: 0 0 0 2px rgba(255, 120, 50, .22); }
  #view-browser #browser-bar #browser-vpn::before { transition: none; }
}

/* Address bar: the UI font (a monospace URL read as a terminal), a touch larger. */
#view-browser #browser-url {
  font-family: var(--font-ui, system-ui, -apple-system, 'Segoe UI', sans-serif);
  font-size: 13px; letter-spacing: .01em; height: 30px;
}
#view-browser #browser-url-favicon { border-radius: 4px; }

/* Tabs */
#view-browser .browser-tab { min-height: 27px; transition: background .14s ease, color .14s ease, border-color .14s ease; }
#view-browser .browser-tab .browser-tab-favicon { width: 15px; height: 15px; border-radius: 3px; object-fit: contain; }
#view-browser .browser-tab .browser-tab-favicon.start { width: 17px; height: 17px; border-radius: 0; filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .5)); }
#view-browser .browser-tab .bm-mono {
  display: inline-grid; place-items: center; flex: 0 0 auto;
  font-size: 9px; font-weight: 800; color: #fff;
  background: linear-gradient(160deg, hsl(var(--h, 30) 55% 52%), hsl(var(--h, 30) 50% 34%));
}
#view-browser .browser-tab.active .browser-tab-title { font-weight: 600; }
/* Loading: an ember ring takes the favicon's place on the active tab. */
#view-browser .browser-tab.loading { position: relative; }
#view-browser .browser-tab.loading .browser-tab-favicon { visibility: hidden; }
#view-browser .browser-tab.loading::before {
  content: ''; position: absolute; left: 8px; top: 50%;
  width: 11px; height: 11px; margin-top: -7.5px;
  border: 2px solid rgba(255, 154, 60, .22); border-top-color: var(--wbc-ember, #ff9a3c);
  border-radius: 50%;
  animation: hearth-url-spin .75s linear infinite;
}
@media (prefers-reduced-motion: reduce) {
  #view-browser .browser-tab.loading::before { animation-duration: 2.4s; }
  #view-browser #browser-bar .iconbtn.pic::before { transition: none; }
}

/* Page-load progress: an ember line along the top of the page. */
#web-browser-progress {
  height: 2px;
  background: linear-gradient(90deg, #ff7a1a, var(--wbc-ember-hi, #ffc77a));
  box-shadow: 0 0 10px rgba(255, 140, 40, .7);
}
/* The wrapped buttons (send, scroll speed, autofill) line up with their neighbours. */
#view-browser #browser-send-wrap,
#view-browser #browser-scroll-wrap,
#view-browser #browser-autofill-wrap { display: inline-flex; align-items: center; }
/* The shell-only VPN pill and "…" menu: `#browser-bar .iconbtn { display:
   inline-flex }` out-ranked the plain `#browser-vpn { display: none }`, so both
   leaked onto the web tier's bar. Same rule, specific enough to hold. */
#view-browser #browser-bar #browser-vpn,
#view-browser #browser-bar #browser-overflow { display: none; }
body.browser-shelled #view-browser #browser-bar #browser-vpn,
body.browser-shelled #view-browser #browser-bar #browser-overflow { display: inline-flex; }

/* ── Browser round 3 (2026-09-28): suggestions, error + connecting screens,
   history window — all in the Hearthside palette. ── */

/* Address-bar suggestions */
#browser-url-suggest {
  background: var(--wbc-panel, #1b1412);
  border: 1px solid var(--wbc-line-hi, rgba(255, 190, 130, .26));
  border-radius: 14px;
  box-shadow: 0 18px 48px rgba(0, 0, 0, .6), inset 0 1px 0 rgba(255, 240, 220, .04);
  padding: 6px;
}
#browser-url-suggest .wb-suggest-row {
  gap: 11px; min-height: 40px; padding: 7px 10px; border-radius: 10px;
  font-family: var(--font-ui, system-ui, -apple-system, 'Segoe UI', sans-serif);
}
#browser-url-suggest .wb-suggest-row:hover,
#browser-url-suggest .wb-suggest-row.sel { background: rgba(255, 154, 60, .12); }
#browser-url-suggest .wb-suggest-row.sel { box-shadow: inset 2px 0 0 var(--wbc-ember, #ff9a3c); }
#browser-url-suggest .wbs-ic {
  width: 26px; height: 26px; border-radius: 8px;
  background: rgba(8, 6, 7, .5); display: grid; place-items: center; flex: 0 0 auto;
}
#browser-url-suggest .wbs-ic .browser-tab-favicon { width: 16px; height: 16px; border-radius: 3px; }
#browser-url-suggest .wbs-ic .bm-mono { width: 16px; height: 16px; display: inline-grid; place-items: center; font-size: 9px; font-weight: 800; color: #fff; border-radius: 4px;
  background: linear-gradient(160deg, hsl(var(--h, 30) 55% 52%), hsl(var(--h, 30) 50% 34%)); }
#browser-url-suggest .wbs-pic { width: 22px; height: 22px; object-fit: contain; }
#browser-url-suggest .wbs-t { font-size: 13px; color: var(--wbc-text, #f1e6da); }
#browser-url-suggest .wbs-u { font-size: 12px; color: rgba(241, 230, 218, .45); }
#browser-url-suggest .wb-suggest-row[data-kind="search"] .wbs-u,
#browser-url-suggest .wb-suggest-row[data-kind="go"] .wbs-u { color: var(--wbc-ember-hi, #ffc77a); }
#browser-url-suggest .wb-suggest-row b { color: var(--wbc-ember-hi, #ffc77a); }
#browser-url-suggest .wbs-kind { width: 18px; height: 18px; flex: 0 0 auto; opacity: .8; }
#browser-url-suggest .wbs-enter {
  display: none; flex: 0 0 auto;
  font: 600 10.5px var(--font-ui, system-ui, sans-serif); color: var(--wbc-ember-hi, #ffc77a);
  padding: 2px 7px; border-radius: 6px; border: 1px solid rgba(255, 154, 60, .35);
}
/* Enter goes to the selected row, or to the first row while nothing is selected. */
#browser-url-suggest .wb-suggest-row.sel .wbs-enter,
#browser-url-suggest:not(:has(.sel)) .wb-suggest-row:first-child .wbs-enter { display: inline-block; }

/* "This page didn't load" — the fire went out */
#web-browser-fallback {
  gap: 12px;
  background:
    radial-gradient(520px 360px at 50% 38%, rgba(255, 128, 40, .08), transparent 70%),
    var(--wbc-bg, #120d0e);
}
#web-browser-fallback .wbf-art { width: 176px; height: auto; filter: drop-shadow(0 14px 30px rgba(0, 0, 0, .55)); margin-bottom: 4px; }
#web-browser-fallback h3 { font-size: 20px; font-weight: 800; color: var(--wbc-text, #f1e6da); letter-spacing: -.01em; }
#web-browser-fallback p { color: rgba(241, 230, 218, .6); font-size: 13.5px; }
#web-browser-fallback code { background: rgba(255, 154, 60, .12); color: var(--wbc-ember-hi, #ffc77a); border-radius: 6px; padding: 1px 7px; }
#web-browser-fallback .wbf-actions { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; margin-top: 6px; }
#web-browser-fallback .btn.primary {
  background: linear-gradient(180deg, #ff9a3c, #e8761c); border-color: #ff9a3c; color: #1a0f08; font-weight: 700;
}
#web-browser-fallback .btn.primary:hover { filter: brightness(1.08); }

/* Escape banner */
#web-browser-escape-banner {
  background: rgba(27, 20, 18, .96);
  border-color: rgba(255, 154, 60, .4);
  border-radius: 12px;
}

/* Connecting to the streamed browser: the Hearth mark inside an ember ring */
#web-browser-connecting {
  background:
    radial-gradient(640px 380px at 50% 42%, rgba(255, 128, 40, .12), transparent 65%),
    var(--wbc-bg, #120d0e);
  color: var(--wbc-text, #f1e6da);
}
#web-browser-connecting .wbc-spinner {
  position: relative; width: 76px; height: 76px;
  border: 3px solid rgba(255, 154, 60, .16); border-top-color: var(--wbc-ember, #ff9a3c);
  display: grid; place-items: center;
  animation: hearth-url-spin 1.1s linear infinite;
}
#web-browser-connecting .wbc-spinner img {
  width: 44px; height: auto;
  animation: hearth-url-spin 1.1s linear infinite reverse; /* the mark stays upright */
  filter: drop-shadow(0 4px 10px rgba(255, 120, 30, .35));
}
#web-browser-connecting .wbc-sub { color: rgba(241, 230, 218, .55); }

/* History window */
.wbhm-panel {
  max-width: 820px; width: min(820px, calc(100vw - 32px));
  height: 80vh; max-height: 80vh;
  display: flex; flex-direction: column; gap: 12px;
  background: linear-gradient(180deg, #1c1513, #140f0f);
  border: 1px solid var(--wbc-line-hi, rgba(255, 190, 130, .26));
  border-radius: 18px;
  color: var(--wbc-text, #f1e6da);
}
.wbhm-head { display: flex; align-items: center; gap: 12px; padding-right: 40px; }
.wbhm-head img { filter: drop-shadow(0 3px 8px rgba(0, 0, 0, .5)); }
.wbhm-head h2 { margin: 0; font-size: 19px; font-weight: 800; letter-spacing: -.01em; }
.wbhm-count { font-size: 12px; color: rgba(241, 230, 218, .5); }
.wbhm-tools { display: flex; gap: 10px; align-items: center; }
.wbhm-find {
  flex: 1; display: flex; align-items: center; gap: 10px; height: 42px; padding: 0 12px;
  background: rgba(8, 5, 6, .45); border: 1px solid var(--wbc-line, rgba(255, 206, 160, .09)); border-radius: 12px;
}
.wbhm-find:focus-within { border-color: rgba(255, 154, 60, .55); box-shadow: 0 0 0 3px rgba(255, 154, 60, .14); }
.wbhm-find input { flex: 1; min-width: 0; height: 100%; background: transparent; border: 0; outline: none; color: var(--wbc-text, #f1e6da); font: inherit; font-size: 14px; }
.wbhm-find input::placeholder { color: rgba(241, 230, 218, .4); }
#browser-history-list {
  flex: 1; min-height: 0; overflow: auto;
  border: 1px solid var(--wbc-line, rgba(255, 206, 160, .09)); border-radius: 14px;
  background: rgba(8, 5, 6, .3);
}
.wbhm-day {
  position: sticky; top: 0; z-index: 1;
  padding: 9px 14px 7px;
  font-size: 11px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase;
  color: var(--wbc-ember-hi, #ffc77a);
  background: rgba(22, 16, 15, .96);
  border-bottom: 1px solid var(--wbc-line, rgba(255, 206, 160, .09));
}
.wbhm-row {
  width: 100%; display: flex; align-items: center; gap: 12px;
  min-height: 44px; padding: 7px 14px;
  font: inherit; color: inherit; text-align: left;
  background: transparent; border: 0; border-bottom: 1px solid rgba(255, 228, 196, .04);
  cursor: pointer;
}
.wbhm-row:hover, .wbhm-row.first { background: rgba(255, 154, 60, .09); }
.wbhm-row:focus-visible { outline: 2px solid var(--wbc-ember, #ff9a3c); outline-offset: -2px; }
.wbhm-fav { width: 26px; height: 26px; flex: 0 0 auto; border-radius: 8px; display: grid; place-items: center; background: rgba(8, 6, 7, .5); }
.wbhm-fav .browser-tab-favicon { width: 16px; height: 16px; border-radius: 3px; }
.wbhm-fav .bm-mono { width: 16px; height: 16px; display: inline-grid; place-items: center; font-size: 9px; font-weight: 800; color: #fff; border-radius: 4px;
  background: linear-gradient(160deg, hsl(var(--h, 30) 55% 52%), hsl(var(--h, 30) 50% 34%)); }
.wbhm-t { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13.5px; }
.wbhm-u { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: rgba(241, 230, 218, .45); }
.wbhm-time { flex: 0 0 auto; font-size: 11.5px; color: rgba(241, 230, 218, .55); font-variant-numeric: tabular-nums; }
.wbhm-row b { color: var(--wbc-ember-hi, #ffc77a); }
.wbhm-empty { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 48px 20px; color: rgba(241, 230, 218, .5); font-size: 14px; }
@media (max-width: 640px) { .wbhm-u { display: none; } .wbhm-panel { height: 88vh; max-height: 88vh; } }
@media (prefers-reduced-motion: reduce) {
  #web-browser-connecting .wbc-spinner, #web-browser-connecting .wbc-spinner img { animation-duration: 3s; }
}
/* The history search row is a plain row whatever generic modal label/input
   rules say. */
.wbhm-panel .wbhm-find { flex-direction: row; margin: 0; font-size: inherit; }
.wbhm-panel .wbhm-find input { width: auto; margin: 0; padding: 0; border: 0; background: transparent; box-shadow: none; }
/* Buttons on the warm browser surfaces (error screen, history, health card). */
#web-browser-fallback .btn,
.wbhm-panel .btn,
#web-browser-escape-banner .btn {
  background: rgba(255, 228, 196, .06); border: 1px solid var(--wbc-line-hi, rgba(255, 190, 130, .26));
  color: var(--wbc-text, #f1e6da); border-radius: 10px; box-shadow: none;
}
#web-browser-fallback .btn:hover,
.wbhm-panel .btn:hover,
#web-browser-escape-banner .btn:hover { background: rgba(255, 154, 60, .14); border-color: rgba(255, 154, 60, .5); }
#web-browser-fallback .btn.ghost,
.wbhm-panel .btn.ghost,
#web-browser-escape-banner .btn.ghost { background: transparent; border-color: transparent; color: rgba(241, 230, 218, .7); }
#web-browser-fallback .btn.ghost:hover,
.wbhm-panel .btn.ghost:hover,
#web-browser-escape-banner .btn.ghost:hover { background: rgba(255, 228, 196, .06); color: #fff; border-color: transparent; }
#web-browser-fallback .btn.primary {
  background: linear-gradient(180deg, #ff9a3c, #e8761c); border-color: #ff9a3c; color: #1a0f08; font-weight: 700;
  box-shadow: 0 8px 22px rgba(255, 120, 30, .28);
}
.wbhm-panel .detail-close { color: rgba(241, 230, 218, .7); background: rgba(255, 228, 196, .06); border-color: var(--wbc-line, rgba(255, 206, 160, .09)); }

/* ════════════════════════════════════════════════════════════════════
   THE TILE DOCKS live at the END of this file ON PURPOSE: they re-dress
   badges and buttons that blocks above define at the SAME specificity, so
   the cascade's last-one-wins is what makes one look stick. Keep them last.
   ════════════════════════════════════════════════════════════════════ */

/* ── A tile's chrome is TWO BARS, each one frame ────────────────────────
   Rober, 2026-09-28: "i feel like the hover thing should be a nice unified
   dock bar with a single frame for if its up top or down below … highly
   polished, animates in on hover".

     ┌──────────────────────────────────────────┐  top dock
     │ ✓ ⟨3⟩ EP12 ★stack 720p ▭ 👁2   12:04 ⧉ ⋯ │  badges left, actions right
     │                                          │
     │                 artwork                  │
     │                                          │
     │ Girlfriend Invited her PAWG…  ★★★ │ ✊ 3 │  bottom dock = the nameplate
     └──────────────────────────────────────────┘

   ONE frame per bar. Before this every badge and button carried its own
   little plate, which is what "all over the place" meant even after they
   were lined up: eight framed things on one tile. Now the BAR is the frame
   — the same painted pewter as the nameplate, with its scrollwork end caps
   — and everything inside it is plain text, an icon, or a quiet button.

   The bars are built by dockChrome() in renderer/media/common.js, which
   only MOVES what each grid already made (the sidebar-kit pattern). Add a
   badge by appending it to the card as before and naming it in DOCK_LEFT /
   DOCK_RIGHT there; it needs no rule here unless it wants a colour.

   The top bar is a hover bar: at rest its frame is invisible and it shows
   only what is true without pointing at anything (the duration, an episode
   number, a bundle count). On hover the frame fades up and the rest slide
   down into it, staggered. Everything is opacity/transform — no width or
   position animates, so nothing reflows and the grid never jumps. */
/* The bar wears a PAINTED RAIL (Rober, 2026-09-28: the first cut was pewter,
   and "the dock … doesnt really fit our style" — it was the one cold silver
   thing in an app of walnut, brass and ember; then "walnut … but maybe
   randomize it and add a setting to change it"). Five of them ship, below.
   `mockups/dock-styles.html` shows all five on the same tile. */
.media-tile {
  --dock-pad: 6px;      /* the bar's inset from the picture's edge */
  --dock-h: 30px;
  --dock-gap: 7px;
  --btn-s: 24px;        /* a painted icon needs the room */
  --dock-lit: linear-gradient(180deg, rgba(190,167,255,.95), rgba(124,58,237,.92));
}

/* ── The five rails ──────────────────────────────────────────────────────
   One token set each, and `data-dock` on the tile says which. dockChrome()
   stamps it: by default every tile draws its own from a hash of its id — the
   same trick the portrait backdrops use, so a grid is varied but a tile keeps
   its rail — and Settings → Appearance pins one for every tile instead.

   A band width is that art's slice expressed at --dock-h, so the two ALWAYS
   move together (the Flash mantel rule). Widening the band also narrows the
   bar's content box, which is what the badge-fitting queries measure — they
   need no per-rail numbers because they read the box, not the rail. */
.media-tile,
.media-tile[data-dock="walnut"] {
  /* 579x96: a 10px lip and a 60px brass cap, at a 30px bar */
  --dock-art: url('data:image/webp;base64,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');
  --dock-slice: 10 60;
  --dock-band-y: 3px;
  --dock-band-x: 19px;
}
.media-tile[data-dock="lane"] {
  /* 1332x243, the lane dock's own rail: slice 34 86 32 86 */
  --dock-art: url(media/dock/frame.webp);
  --dock-slice: 34 86 32 86;
  --dock-band-y: 4px;
  --dock-band-x: 9px;
}
.media-tile[data-dock="iron"] {
  /* 580x190: a 22px edge and a 75px riveted strap */
  --dock-art: url('data:image/webp;base64,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');
  --dock-slice: 22 75;
  --dock-band-y: 4px;
  --dock-band-x: 12px;
}
/* The last two are not 9-sliced art at all, so they dress the ::before as a
   plain box instead — same element, same fade, no border-image. */
.media-tile[data-dock="pewter"] { --dock-band-y: 2px; --dock-band-x: 14px; }
.media-tile[data-dock="pewter"] .tile-dock::before {
  border: 0;
  border-radius: 3px;
  background:
    url('data:image/webp;base64,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') left center / auto 100% no-repeat,
    url('data:image/webp;base64,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') right center / auto 100% no-repeat,
    linear-gradient(180deg, rgba(226,232,240,.13), rgba(226,232,240,.02) 45%, rgba(226,232,240,.08)),
    linear-gradient(180deg, rgba(14,16,23,.66), rgba(7,8,12,.82));
  box-shadow:
    inset 0 1px 0 rgba(226,232,240,.30),
    inset 0 -1px 0 rgba(226,232,240,.18),
    0 1px 4px rgba(0,0,0,.55);
  backdrop-filter: blur(4px);
}
.media-tile[data-dock="glass"] { --dock-band-y: 3px; --dock-band-x: 6px; }
.media-tile[data-dock="glass"] .tile-dock::before {
  border: 0;
  border-radius: 13px;
  background: linear-gradient(180deg, rgba(10,12,18,.72), rgba(6,7,11,.8));
  box-shadow:
    inset 0 1px 0 rgba(255,196,140,.22),
    inset 0 0 0 1px rgba(0,0,0,.5),
    0 2px 10px rgba(0,0,0,.55);
  backdrop-filter: blur(7px);
}

/* ── A bundled tile wears the bundle's OWN rail ────────────────────────
   Rober, 2026-09-29: "i meant like dock on theme pink or something." A tile
   that belongs to a bundle already says so in rose-gold — the frame's braid,
   the chip's pink, the chain on it — so its dock says it too, and the whole
   card reads as one thing instead of a grey bar with a pink sticker.

   The art is the walnut rail RE-PIGMENTED (hue rotated to the chip's pink,
   every pixel keeping its own value so the painting's light survives, the
   recessed panel taken deeper so a name on it stays readable). Same slice,
   same bands — it is the same carving in another wood.

   It beats the per-tile random rail AND a pinned choice on purpose: this one
   is information, not decoration, so it is not in the Appearance picker. */
.media-tile.in-bundle {
  --dock-art: url('data:image/webp;base64,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');
  --dock-slice: 10 60;
  --dock-band-y: 3px;
  --dock-band-x: 19px;
}
/* A bundle STACK is a bundle by definition, so it wears the same rail — and
   its footer is the dock (it is named .bundle-tile-info rather than
   .tile-meta, which is why it was the last tile kind still showing a bare
   title on a scrim). */
.media-tile-bundle {
  --dock-art: url('data:image/webp;base64,UklGRpI7AABXRUJQVlA4WAoAAAAQAAAAQgIAXwAAQUxQSO8LAAAB/6WgbRtmK3/YZxdARChs2wbpmHdH5BeC+4DnqE/zPqK+nqY+HxV5npMDhpBgGABpGwmkS/L/wd2tB0T0fwLikIBtPGnj/eU4IggQP5ekCBL/P0BmESRZAKC2ZhFz29fgZVlqWD1NJTTb0yTpfzyZhgTA9h3v4WPMww8NDJLcRchG5hN5Ec974JChoG0bKeEPe9u9BRARE8Cs+CPLAn69kNAcWIyA5DSKGSSl9P7PYqEKcgpOsa3Nac6x6GnbtkOStv3b9zOQmWW33ct127btke+Z7W9wfwRz5Pue2m7bF8tmFiMD5z6IyOyuzM5BnaOImABPtm3bbiPbVmtjgjKPef5T6bGvgNkCa2GBhMk/YigiJgAtSxCEJOwFEwQgob2W9u/v7/CoZG1qLt7r8QePDHR4ZLw4uVhT+zDDb/vwYCU0gGpLl/6wrD2d7je//kCHRynbnLv9jzHbNjpPnxyC8TwLEjtnfrq0l9P10bf1UQAku1Mb/9nNNqFtUykFMMZIEM3Ob3+Z7N2Yt3+iDyIAyCbinW+3B63OWuMHJAFAkLn3rZkH4lu7F9LzzVeCqGuF9J9qCzu3NphHXZm1n/0jEWBPhMK+rW1kmbytsDPPpE/zpAt5LX8ldk068+AhCAQ8U6grAYJ2fGJg+JIQ0llP7MTALvlCL5iEn9YXSE+6Yp7z2cM2RyEvrnZmbcCOzYrIExDydm46Bgl0kowi34dNsP5yA+ggQLaVOYSvYOBZvBihAYaveBLQNU8E8iQvnGeABBiAwYYYBEgBycAApSdFKT6TAOlKQASOIRCvJ0c7yNWI63IsCQaIwgGMY9Kz9KzDeWEHQfBHjpSQJyDkdcjXQ4oAVPT3v905lWMA8vxELievFqUKkBDmSfKlIedxNHxy9SCdnUry1kGxPUg8jQBBgRAOFY7ycs8sCkjUwzFJCDDAkJfjqUAnR4tTISCU5wIEGMBZHD3jIBDP5diB9Mp3J1VAAHpIMOwdHun206WJpZow9I8Hp3IeQIDEZenkqT0jjvLVXurklykB9inGaUAM1+NoyPUABKRr14MAE3lHoZN3DXlb42UBedoB8ZkfzQJBz77hHmwsLK/XbMsFg896/vGBrpDYWXj0H4/3fXhz2jPiXOiKnPZEToy3lev9QuR5X/Hn/JK3lqe90dfblxwvHAOiMz9bOvyqZ410hUg21yav35xPWio8+vYXHe72AAFUNvdY/yNQvNprcrGDAIHQu8jLAfYLkKu9JEBvZZ/hoT+PXOyXIZeAzuyJvCzUnlw5ur8ECATs1tTlf48nLeONvOZVp8tCsWSYESi/uwUQEoi68cT//jrfIuEjzztYkggCEACIgPwGlwAiT0AQsXP3d6VWYNfJA2WIIPIF9fvdBUDIE3lB1MLpLjbddB/sJAiivhr5LS6AaFBA14FuNlu5O4BTWAh7K01GzwCgQwCECf1mUmqthWsoQErUNNrcyWQhOQdgbVPNsrGSSQIcBGQLa02yMxWj0EXA9vhOU6RPVEkIzmGR1p5Mm0CTMyKcRJIE7Oykdi946/N8OI21e2u7d/pNXcjTUSjMX053q/LWw3Acmd4Z0+7w+S8OZNwGYen/0S6w1H/8PSMgHAems52HKnww7HjWKx8Z6gngQPLEBz/0nMqD8E++48XDAQX3UYDff+IFL9/v3VfplR84FYKgAwESVt7AI0e8+zC9f/0AFEDOAxAg6B3wGrIIBOTb5AEMjW0graZ0jG8WQFJN69jpTRAE0JEASEBbM7ZAc+MZKYB8t8ymZgo2r23C0RSwddUDYC8/ATkb0hP9AJb/vEaHg9XnEZhTSDoaID9eWgHGPQOSjgat0wfAeZ9wOGX4ERMsGTibAlROBaUqATkaCHgHyqV1I0COBhL7y2GVcDzLJW/V+TC+B7keoJXkcASyTGKnA1DCaFN0NwIQMVqyEiA342g3SvFEDAt3M9K5wD65KsjdgO0ZYnYySjNBLka0WdiCEi/ILMm3TBI9oxUg2+ivGEPwOwbM4KMEEPX0kOTbJQGA5U4PANJln4DfLgAQJlwzOWys+b7hu2XIe9vLKLSzUWAooO8SAUByezIrQjy6CUG+TcZ59fEd1N+8u7KhDpLrEE/tws1VNQDT/6z9PkjCfRTrRFdvGNxneHikQoA5ugwRgIh04eIMcd9WveWS7z6cMl597GoZDzKrLm/tdLgQqo6NjpF4sIoXR0dgQNdh+z/XA2IXbV8QAJKchYCeuotd9uIOwnHcuOLtFhb9wHGw95ax6+bUSU85uQky8xfN7iF8bn8B6CCQ6L9YQTP2nQwkF0ESEJ4cRVNy37CBgZvI4QOmOeAd6DbMyTlg5yEPzeoPBiDycgU6CwYCNK8XssgVjFOv4qOZiQb6/RfnMh6aPEsl5QCwAaHfXwLARoRCKU3Q9HZtIwNUAIAqyNc7qR35/x6hPiEUS8g2VrPmQzI1FwGSmCsWcfQ9lGM9UQUsEOAh3AWB9RLIAE8CT8LXfun+LxQaZZEgbN+eiNGK2dTd+VjW5pgTDXR4QwFgDqAAELA29ZAWULECKeuRmsBk1ggGMj7SnzhmSeb5FMOp2Q2PPdxZcyPYDDC0EUHsIBmSIAECfkYH6SC9TWf+LxN1RTSaTv/v/wla065duj4deAZWIAGTbaBEX9MZAFmb2Sy1WWoh2SyOhdqOtangZ+uxF9zno79veiUTy1gZIAhN9I9ZS7wnWdDBNOz6Y+9bDPfWvs/t9oN0M7aWbdaiuY2GCMrgDIPgjEcUBE80Uc5FQFBASZMlIoIIguahP4v/NQk7cckXVEDEs5f/uUi0bDL2l0iGgvGoePHa/5JnFgFd6NpTZUmWpFkaR1s7cS1K46iWGKamDFiASC0CGLbQOMVVAjSS8lwBAYQBdGRGhVHUWa7b4Fq6ZnBkHNbMODqDS1FHGFA8LlRjBF2DMwRrHNA1MzgIIr4bvtb7CAFCZxIgBHjWZ3kW4GcEeCGAxeI/bvXtGwgNYLPa2tjVM9NEKyuqTozNzq+uL6+M374wzsmEM3wS5wlFoDJra1FGiKxtxbUYMF7gGeLhL0fxyDBrfECBqEvgZBwV0XQ7QZwGOzd7py3b6qiOMwu9LVDXwtz3jykckjaALAhrFUfwPW5ou8BPiPc3XjSOHuLTvYCvxWvC0h9vbd+afe6xvsBuLkxfe2wdrW+j5dHbV86Mz20DSG/8MT3i6kkd+nkv0sRZGieAIf1ky5LGGIO2q4ozE4TS7DagU65bomCsgt1+PPauXTx2zOPfzJDL2uSsBW0f3m7lQmTfvG9M17C6/3tsGkdgVouT6ga6/CyKNSrPPYvTdpiKb/D6pQBCKsZLeK1rJoBncVz92z0gmvZKoVFSS/Ew9ssUyQbqd/93BciuAEClHrZLBIS2hMyMcRw7StPDjWvWx21m2cds24+7QO0Nj3h43zNr1u22vM9atfdjPzYS05nKZI/1+Klt/5G4aFj3xyMDq3IQbwIrUflAZ7zXuD5uM3z6vm+HAyIhJAR+xZ7Dq/XoMKpggHy1Gspr41/X8fD3+zpNTmCdbGUhNfd//Ms1IGz3z3/VkixJt6sLXSFJtClQoYh2BLtZOv74sdb6cVPXLHeH/di72rirduL88QGMc/tYrI+P+YEaO8oi15qZGO7GrHawIwksaTsColRDHQm329w+ZsYTw0NXHhsVAY3rPhEkJECg+0wMMzb34ObPvbs/cLsWAoIqApFAzzqhNzhs6gkEkF78D9ogB06XCRAQWLD+rzuy+5HIqbRVaK3vkdjlmz8R+sU8N6oej467OIqgHOUYp3ExEMZNCALCQkZDAMhRII4S56SsIMD6RgjKuTx/IsfkGHLsWmAg58np1s3gHzD/PPDY8aKAQgCBxKvyXv7x4XqFGv092wG80yMGJACIovTEOFpYWN7TflXPA4j/TY0/cfdXXusVCMwt/T9Dewz3l0DlAALTl00r/d+fz/3ScapAIjf+X0G79BlZz+SE2uSZAHu5/qs/fDxEcbJ8LkH7TB67crjTl2xcnXzKx96uf+p1j/QERrLx7J0K2ml0bUkALEoB9n6DznLoycpUiBYFAFZQOCB8LwAAMJMAnQEqQwJgAD4dDIVCIQSWkbQEAHEo7VVW8kFOZ57hoRTfwAs4/VM3/sB0g+g/EPyzXt/zmUX73+1/7X80P8V80P9t/4P9P7r/z57Af6pf7D+3+1b/tftF79P7R/zvUz/Qv8h+x/vl/5b9r/dz/ov8Z7AH9U/uf/27Cn9tfYF/a/1l/+h+1/xB/2f/f/uH7T3/71juVbpf4O/kn1X+d/Lv/D+6Rkn7Wv9v0N+uT6b8tvzT+Zf+b/lfH34+f4P3C/IR+P/zz/Jf2j9wv8N+33zWwxuQH2//k9Q72b+n/6H/BfvV/jfhh+6/5/pN9nfYA/n39c/1X5q85Z5d+0/wCf0X+5/83/D/kB9N/93/6/9r6Xf0f/W/9r/YfAp/N/7d/x/zq/f/xV/uv7MP7cOIKgvtUoCMmxzxzYhyqu2qNSWF2CiczdL+kHu8TzZs8+kiYoIDn6YXtfMZt1RKoUu5lIzQfGUxJvIeejQM4wm+ZaTIf3mztn1LIXg+MpiTeQ89GgZxhTjickgNmSbmK461nPb+n7D5xRNStpMdyKRLyy/VkGiH92IAH+KLfx5sC1CUZxCl7q0zSERoxz624wnrhR+KoG16tkIHFkZbEtsGFbfDaO0gFOyRNdTG1zUNGz7JohV70I5nmYxspXBTen29/TY3L2oxe0YvaMXtGayYn22T7c77LO/CtFNkwI1beK4qhJt3dCCLlHp5eASs32oJN+O28BEh7dbPAUXK/zyHVjsQNkAc/CDIHLkwp83vUemslmuMGzZT1o12PT4YYasP4kriY5wjF5H9sDDfbfgGcgMdLhVmIzprz41glUNbLZXghJTVGdpL09zzpfow3tgNXDjL3yvSJ2/AGmDgSsrsnhBuISdu/U5HncE1oglFXyWHSyom6QKU+CdvcN20gQnrKCA+x4qJhFYX+xS7rvWGvApGwMrkcHRoBr5LWwKQuvA4vxVf3qa67y3KXT0hr9JuVdWeebMQTn6RkZeZ/aR++BL3ojU86BnI3Z0kNoXIwHmEY73pM7qhdT/M2snt9VsCQZF3feOICXk6af79tcYZh0o87o2+0938nOriOk3QOmw2gjpJLjbvL+dV2GhBYln0l0ccFI19G0FLuNcydFI5XQ3uH+7d3o/J4k2rO7lwG+Zcq50pAUvyGeKqwXWfMrsJYS4iVdrieBA1/XDRm7kWPST6UBBX9OZ8rQgyQ6+VHiPLcGNOOyYcTwOIAA6AWqiKuXTs3qhRSuTGSX0eVyg12ThzxAsJHlwp0cd2J0saBHBbYq1Eqp5IQoVAtCJQNIXnIhHoZY56901vXEDEhxKzpkOcJOwIKNT4xFflknTzTeX2F0AkPkxcuP9bPHSSfvSH2dfZQ5sGoOoRWG6z7DvVcTWMjcCHGxpHVAjWMyubaMS9qgecwIorBmpuG6nk4BiKvoTz4uhAsk8TKh5a1KBh3tbLGidxdzOy9F7N/vc6/C2+5H8dDOcNd/VdkBQDdeYw1RuFGQ/0OgNVSn3KNS1R5Kt6obAz5zZl61bHVupn0XA2jOTuJuMlOFhQ7nMo7XfTBnRgpQIMsp1XBjPiVwsDEwX6AAD+/6tQi0wS5y4qxkTWomuDCN2L8SIyRLrkL7kDUwFJV7C46+JMx9lBoe4AY+7whNqOZi6pjr5mliBTlI89nV0NWgtm1n8BqLupmMt291+7BQ/WoNR3GWBtLm9/97WxIegcJSQnz/l+cHyyEmk0grXuPiAg5oNsTpcCFHg4/iWYqz+US9MJ1UeVuUAKQrViL7qLJpZTO9ClnyR4SUNGs2IfARq3lAize6pi58KW+oVNdbBKE+gfMigPuYI9TlyLEJNhybPwznV4F9pmXIwx8p26S1lmt5WTMU1iuWn4+zmxBYpJr/M4u7+Uup2miNcvj63ZkWx5pmnXnxHD7YBn1JmUv/VuczBAWRCYyueK52YltS/urgmMlwhp/wszAydL+1Xebw2XsLV5vJo7b/v1OQg95S6sbiDu/sFTkuRYrpLN9qNO/5l85MiwSggy+WmGQOpG2DQekugcULxbBAQ7KSm+FcMEh0dxW5CXIJVsgD0PU0/wbZo6ACJqwmar92hNj3eZbaFHfa4y9KZLZDczs208zUTWCqF+r2SNB5WcCZcCiEmpQIdVqKpevG876OsOjT5cmJDsYJ8tsGCi0G2JaV46wr/YKYpLPBJKZCLqivvAZQNS9Aqd8yeA8jZ+06CTaNXosJ6Gbr8vRWYv6Z04IIQzkkhbCzojy3pNuJKCPSc1lhUQ6cLQ7qgkT7MxJjsLfPDWTVBVfMEjNqq2wZtYKQLI7TnuXRlTG3smu6CmlCaM4n1kPdDlLJ5VeQpCb2krWsJYuBsOor5yhqCU7NXKy4ITjre2m9Au3LwbIHa8yOtrweeE5d5Iq41u7M8oxj3yMV1I2OGNAkaY1xC6OGsFo76+av2t59kzXyPPLDtONLSAvZ6jVyKcshR2ciMTt0l9bsvsgGXlMpJvPPkDJxd6fs+t5Sk07ggPRHEWLPM7sldFt106z+CJ80gwjfGmKHoe9XMDicx/1gxrtxkUYR6A9bKamyf8SifJEUjlWzYX2tsVEfAM+w+/h1ELerfac8kBp1O6owkbpuTItTX5o7vKqqUZuq914bMrvsT+MEB6jxI2zhrut/NEVhKQ2UmSh6s7V899VyFP+vhvRmSgnzxm2Otr3+7cVBhnV5s+wUqVMzeSWzqDBMMXzJWvA+ZDF4rZYJP4n5+3yFpTyZP4NcgkH3N2tuMpAnTBkdUhNlAIGmKrUX/W66X7qR42Yaz75n/hTzX9rx3Iiu6fxG7KhgqFB2t3z889TlyXD6VpP3QcjzYZnnfiTG+vI9iUikqoqTm/9+vAdsHd8JloqoCxL/v+M39N7l1fiTdP9Zjy3+Taa5NGn1Ie6iOf/9RjX283YONeP//ybRyePxBLLVEL5PxPz9FsPVXD1RRh3Wwi1GFHsaoBBraoJwp6MJGeyxVuIz4wFx6HyuepBQ0zmAur5mZ53wFVrh/xYXoq02a4ed91DkunEXTlZt3L86p09YfTOksXDFP+zsxfirHhPuMHd74a99OqAlfdYkEiIxpctD+Fo7v+bvWRJuSwKTkVyWHRvJiJNHNTqj6RKBrT0frxw28cln+gaQbjdBOhT9Z1vCsmvie2p/kdLDCoNq4ttrR/Cbtd5k49ZmXGhhu0c5Vr56lpp5RLpdyf1j9MJerogCgUvbNv1A42KY2HlaRcUYjj+xEOYza5AfLY8y2h3HxJNXB3mBvqe+KxsXGYx3Xf5jmhgjOd7B8gVD/TUDdhltOahD3Dfi3mQdYbTbk8J5u0Kc0veYo/cXm/YFAtP3uorYLnTJluh8FDJW9H+eBE4Kvr+bVnbZcl7hjvZ7zZdjoML0CF83gTJflN3Zr2NJntFoZn/hs4q0/PL+K4OfPsQqTVXZvwCO58BvVKxqfdUbwItSbTmxOKFxC+0t5rdj10/CkDd/fU2pYZmvInd+Z237Jy1kcfHY/X2sAEzvZog5LUsle19V4e2RfUxlfzXdosd/F7F9HP3nTM4E2qxh7Iq1LqAW1cOgHVFx/1gZVtLSuEfQQWyo3ixqoU0VbDzlOzhT6d1PIqkWeSRT00KuWycO2xVKwbw2ou2TFXBLP3Ukd6+p//4RRvFuU04KgGQGiKb49Jid/1wmVJXAyCPviubsw0JQNjPaoO+bbRRUxo2ruQYsBAOvJKA0qCCJyCjo7outduGQmzA8BexewSNd3f46sOOrY/YbpdBXiK+De9qkXaW+mO9crwoeHkOa7KQ0OmMxYu5T5NKdusS8CYV8VRyCT+B3gv0IRSqxgCFn/AQjqOBSgEDTfh3gvFSIazTRNe/phqIdQUQeNY1kRWx307quZlEKtIIkl9as/UPZekmjGaVoRv2OzkSYtQJnk9rjqb5Mp+r/wLDoSxK7UeDVg/kqfqZuTdY+W/M49wb02rpkffiWLFQTkieYvNQFBdhmv+h5He7455ncvKiYgM1lzq/WGyiX8LOvmu43LhZaVMB4nDjzsto7YW4xfr4skjrKlEUbJKw8bhx+iRqk/ReSuwUYI/IUbkuLJRq/TSL8A/GyO1auiwZNCVOoMD07ndv2d+1hsHBSywnRNYMgXFouf0Bmd1yKNaR5SSVCsNnZUcf6PE5ZRQEZMVjGHuqR1aV6+noGuQNcFc4jNSyvAgQ3zeLYkiUzc5UhYJOZgZHp3uGRaD6rtS8aj//pcs9b0/C7FgJ1/jtB88Yw8xqsv0YdaOO/XzjX/5U7+jXzrhAMvAvr2yL73hX+L7lVkGhpxYDl4Eg8yVZJQE1E5TeQBqjODEgKioaBcKUXEOGCeWJQ0LdONg49jubYXr5S8EsQAnHIJ9Yqz6jrQxbaDvHWb2fP+2ZuXT+DTPyZyRjKT8ac4E1Y9k6ZPM6bxk64oRVBkenY4jfAM8nCXLxSR0HI/WCfkowIj1W5nwQgG8CTaWH/qZC4oYY8dGJUhUBXn1KpbUxFni5uF43N+nSI1hpTJFL7XuqdVk6KiKOIoenH/fNyAs3CyhkCvGkOaiH3G6RJjmTtkERCs2JhgEJyObFwOFhT+uquIpiyWoXRWuC4ZJ1zDU8Qj1USMmMrycKC4+wf8Rf23HRQb3WEabA+pdK5uQDbRwENpp+6+emgR6tg3STgnlUadbSfJrMzcybFlM1WODF7B4s/1qRFlTyjI9AHmkhgSbgTVLeDxYZfbhnKOLhNXv+PX06JSHRHH8p5DQ4fWhMJq4IWf7B7WZp3MSg17blcURyFKXP4Kl5O8wjRjMKmNRLI+GB9zBrRCyc1VI4WU/BT7nR2pa86WQdeuuD3uNbRhm4LCaYL64eBMZiYBf52vP1OSEk8i1x3KRs9b/WdSHUhbEg016xgdfg8aAcX/Tv1NFdbuzCN7TpHDC3TQ5/nXFKtDP2etduci8EeYIJ9SclhQTe6JnZ/5TLK8bSqv+u/OVhzbZJbqQ/al9AdvtXnuE2j9QqMU2AcB1zKP3y0Jy8ZxvhsmnAjLFApqUrNwmp9XuW4DYjyNdhdoWOQA9XKVfUNSHdbuAMrgnXMhN9FY5kz7N1TWa3gbWB7d1w9j+QSK4cgnSSn9jXb/iwg1CrHaHrsPAh8I6ZxXrkEt92VC0iMJRpLa0kgTPFI/Vy3Te/zXXJIr/hYgA6FJhxhkWGcePOEsYUbWUgosemJ9qegiqeIxGMnO3pAPllm++fIgl8k9iJGb6mZ+pIOGZwb24WznLFCx1rr2omCHAG9Mx+H9l+LCX+CYfCds+EYmV1gFjKY3JQum6thzvR2UpV0tgdR+5kNEQisYg3YiJQYajhh+yNSB3SLqmNTka/5dO8wsUY6cwzakTG+9F+GiRYDGY6moIVTTK5t1yAwAoTAgmfboWLt4PXA0u/9pU5hVXUmd2FozdWti0YvwS2lzqY4/pJ25VGzEX5cSsHmgof8ROmyMr/Nqh9A/b0H8S5BPmcnpyMR0z7cW1CsCyIRz7S+srp2BkYKhos9xFVZj6qsevcnNy2PtHc6u3VexKnDDfVHjRAu2mcUXVNNyMQH/V/JHJj/2N87cB9bVy9n/8CXi01jYqhRyVPCR0VdgOWD6wGa8Um6LzMX1hGz92Kd+btlSNoL+Ofzvq/47Plbbr+WRMUz9+ouzN/hXHMxQRKc0JBFlMa+u/JgI94R4r+sYtGmcY3JbRzgHP0gO7BgWfFiWtB+YLvy0xGm3jY+Dv843xepPjV0zO+TcFn/AkY2JP7exkUS9fR/yLaUiKP+65ci5KgZtkvtqx0REyZycd7YwELipc8ob1AsuzyjnZthMI1d2n7SkiB5EGqaTqMtv+xqJN+vEJnjnQyYuGWR2RHo70quH7HU35wGkM3gMHpf6sbx/i3dLzuOLBd1jVhfmXu+0IxyMupzjx+vHz0uFovwcyCPTZBD4jjhZA4VVf9LLSpBg2LWax662vCc/1utgbAkLP/wDtVB1UDwLxLZbhGFk8AUlPS7WtRkrjkfldRpIxZ8bZNqJFvaYhn5kCUZ8RgObvy4FgFxq1iykFzSgqbCxOTpckm57fFXi41fdZPnK7KSU7y+SbBgf0OvbQ7kubh+sCYoSlICY74BSdtr7Su/4NROv5A8Vuoj+5V32RhzcDPk904NCzDMitqtQ9ikNnPir6HvP0sx8DUJ92TYJ3jRtgwJo6Yf4YrLfj79g3COw4B5N50ZfUBSnqf1KozYXdHoUOEO1y2VNDqP9ntNBLrD6IbePfr3Xpl8JYic9ntNm2i9VhEcRuRt8of96k52wbWxjzPDy6T5uTdg2kdL8/sP7qKUSUq/BOIm8iXp6wIIpMTGVGBwV0h3cdVywp5zo900tyOkMb8/ukvkvsBz3T4VIghw3A38MMSkhsAQSxNl3lOj3KnZthtgdmz6pQU83zO/2lSwWdGAgLpoLL5r21dEFq3by/if8adiPRlrO/1SF0jBC4muxhcZT62QxnesXnnqx77c0AtQC7vu5yqSuNfWE//u4dON34HgZUPVNRLlpHg8rU+IEv29VvN8mxEW6tgEGA/ES/0RhoOO8WYFcDPkcT4yQ/w6lvfTdil0rx/qpZFSZ9zrBJXJipGMuEgVZ8/WC+A/39nZci2lTr2c94khxzrmY6bI3iPxO3f4fjpnywmHTkVO9Q1vmkvwrSh6L1bItlZJ8nZURm/VkSum4qknMIKmmBIQNSmHEF9fOhL3OsSP1EQPWu4csNqrW/OdZS6KT+xIt9/k3IIgwy7/p9ibBWiLHw9HdIxfVuvVDB9nUGEbIgtWiNMNcxQXSwpcK+6CEdXkVf3vqcVnVL0S//8pQ0B0OAYRbvPzQsMf1mR1T7FYRvTypoGZ2T8+6sFxX8JW4Fkk0l4XwdljsHNUADEW3SBaAQs2KBAqlb4STNTS//eKCCG3R2xFIOCL521xal6AGUZ6KYP/fjPmOuXFv/BpYRxm4rAHjVVYWmGvd0V/P0TC6yYlxOAZ9zg32hdvhzQKgFlBWkzk0e/d7piAftgGhQ5jK3XwzWApseFsztvEaRSIi8WdfRXP7YRbwEN3oBdSpsygikNSPxdj2QAm9eJ8H2Z7BbroS/vvAk3zBTNxKH6PayjZR5qPk8F7A4eulaiGmcJb513gTnKVgzcwVVBd86U9gS1dDmgq+EFVgzJRuPXZ1fISUNJdAq5oVRoos9bG1aPon7joFyaB7tIYPKXOp6LSiLZwj8Mljs8xpn0Y/sVV7ILzoozL6eSuDM1ZpcC3aKeJgE9BgafZqmmAVx9WtjOG/voRnoRhmE1XJ4LiwA5jw4phHY+HY1LNW1Ms/UsmUy5wuCabRa4+CFJcKi1PN8Mi0E6ZQsOFZgWVtlpVOYu0n3mc5//+D1qU56qvvEFjoomidmWNgRcu36cWwmv2bSGco13Nyii8sQwXqu+I3Vk9Gr2qlYVWPQ+t1ZHc8jtTS9vFd6c8KtnFTzSDevtjFsgGbCwjEyaifuf/rS0PX3KV9ck61Cp5X2g3IoyFr6CoN5jTVI6eS+riAQOrohotaOnXnk7VJWs5jSE5Iz338u08qQ24pkUa8+Lo5FfLRboKlNdkoGeCOdEUKbaxn0vpiUXaPj8Wk+gfBO2YGlzwm4D9ekEZAbOovcvbmBU7SD35FlWVPY7yYTZIp40QretTH4jtmzmHewzy6PSNn1zlOGWPD6WNuzfifViIm4N+C8OMOXrAOm0THRYW733x/nKz2uTsur21z+BJEAFNUn/tAnKZQHgtmLXPGlKOHq3Wa5tZrX0W1uVGeYkAVLhqFJ81EH9tWsaRt5uE+uwnu2bfMDE50muCaFKbf4fAE9su0YpCYR3YEQyhs9BMTsWfMpTO64oCXpqtb8F7Qkn0FakN0Db87K4/DZS2y4KclYsDxPqRpwNIo6pBmmLLHUDboviHYzrnd+VIP2EVENX4QXUUnCNG5FkEzVvbzgRBGFuNCD+rT5zHsTUuv2YpFGQztKuCtBGoW1xlZA6vrxtgGuiVGrM2IluciDVATtxeRWyOGs/Wx1WVNqf2L2Qxv14wVbfbbfXinFlVLYlYrx4WsmznwVzZ/um1ujbbbbSuELqbrqFS1ciEWSfsU/Cu61fxrvcUkXW+a7p3kjwQ4JhulJ+bLkcRBy3PNwmRH5AcVt2SRTJ0/TdwfQH/bMO8SF13Jt+1pEoz1VhYY4zTJPE64F77pjQEpjMJM5AgfUz61lGTOV6cF2F7/VuxHSEjzyAjhjV5C2Sjqecw5mnBOMFPa4tb1JDYuxO4WF/PBdXucAkNTYEPfc7CY24PocYWUBDbI3xOQjiFwhcjLqEX/qpilxff6YAKcvoYdQDn4haO43MPptwzuc60T53gBD94Vp7Xhd7/KloLX0xuoXJOmh+36ZA27RJf5YcDmNwrdXF7qObKtxq5ptX2BO4xZuUnlFUmRE+7krScB+8K5BkuT+UFe1qM7MFnS+ZbUIIs7KrcLJ23e2Kpl5DdXK5ruToO/lwtwX2SswTWnomIbORxxjaBov1s/O60ZknD3wIFf706CBeATW9EzSXcGDBxdwubLL0WJsGpgAF1D/ahREcLCnKIvccvlkrsUBkl33wEG4nktwgDVxpW5XPT7DfH1RcnZILNNRe9tie9m+d1cDKFi5zw369GnzsLtE2XwyR57l5ls6cUL6mYRfSu1HGk9vdG7GRE4GwIC8izG4T+wxzcW763Clbri6YS6aZcDbjlxl8AODVVjaTMNmjA6nKr9pV5XEcwGGvffhjh5B+LuGOpCV/+G0a3LNoQ2lgAH8kXdpHLwDuzTSdXRfD7dzFadsI/OCWnewXSjFsibCqLDhSU9/1QigDj8sZ/0U6wi/XyWQW1J19wJz+uLlEi3eB3mJ+3wwoczfyJMGEHtNPmm91M+kUoaMkUCsOKPXHGPEHTzR7eMAKC8guioqarmpaFOXSYdU2BpZIJU/163MfTflPruJ6Tnf5nj3qgkuYYt1yDhavs5sb/9nS9pIAZlhkrzMJYIK4o2/3j8E/ecQI9YJ/AGk5fqz45jMUbd4mYXgcL6WOPyLVUvyWnzJ1jUSg+ErhPXnGNXvkQu3u0qywWS4g2TtuTcSrIXMrx0CoipKrHA34H4jMNseKfAKPj2Fop7sHBMvQ6A+caCH6n2hZKLfLC739Et/8Bhy0JMexwx1Sqm8bfm5Uh0Q0UNFU9FLWAWMvHPYiiKJKl3GrXvFEkVBA+l9BZ3rR4c1j00TTKRnCAW40YWI1BKrpfejC0dvWNv4gboFjGq/kMYYu6V9SDcFabaMEeIC/fpoc81JN8xdbyM+ND1KG8BJCRwO6mvFxx0Z5wiUHAvCGiueBpdQE0wcDxchOXir7icc4lYtA1EPb+8+YSm2z00LgLc14strUP7G+i9PBzDELxVwFoMgtSJWmimJL8AdGbXpd1DEPMOHeLpySrf5gFpEyhaB0Gd6duoRL5Wsi7Y9uDJQtYjE9xTZATEFn0F2qk+oJp4T3DJJE44ezmVvZ3+0AVZUq3DsuK8VteTCrDGiyqMewrEK32N8IUnyFLktC0+TlDzd5029IZtAtQf7B0I97UdGMZppMZH7VTi2/RvOdC+tYuL/qf9pH+vcC/gV9ReSCg6it4sAKIT3DqGc8e21mkvpY6Tqm5VRpNlRwUNh6xpggdsiRdAFGTHZHDXkT0h70mXWtSvZzngTO3QXFf3eqmyjWfQal66FrcSwWz7LNED3Esc/eRQbLom7FyR+aW31ZDUBTtPzHAcWwJzfg642ir8y+xmc5j7Lrl7OMkXXjrqpfZTJCcN3yBCjt4kEOEdtv9j+NRdDbrkOb8c9/CvME0ZQGHlB+PeFUQ8F23k9ETegD5YzQjcFbzdzcN02zGb0ozC27rw5WtRZcEDQ+h1QW3UpTwwDrQ6HeUuWdgNACrk4WGtheUrnL1/Iwb2NUsdmQMXGbQGLAlgk0gK34eCyhyXmnB6bXtIo/YcCvbsSlGozZSgukuuxaqqu6P3Z56khgA8Socu4BQ95Iwy81LsIJ85M7Hfkutu6Dh8TktZO5ijqJvSyXBDGkibvzKShxkm1Q7niv/cwYoFus5tRs0Vd13uY7Gd6jkiWkstpih9VRJ2nTv826PpXsEkx4sNsNGZmPnCEH6yrb46N7FqYVTxO07LuMT75Vx6NhhE70We63IdTnGceThqDladNyMbVmFWGKJralkTZQDcjS7ulZr15QzBo2EVlhCEx/8LmOdXPZ0v1wIf0xMEJwINbLPcCbNwJumDZhWK6EgTo0Lq4/O3LTKgvtaU8gOnIkmCJLd1CRNDQEzrJWgBPVxtg3XB4SpZ0630FT1QgUh/Qv5AN7657F5dVnvBnxbt03ElQ6sesPCwYdkW20RurQV+5A8o5YiuycnhRCrTJsyzHrCiChIYyHnAA2Pz6SrOYDzV1ivRuN+eUzYcU2j9HcCHxavUMKANs6Pkl+71SDEymrhf/4UaJYBDUGlIJEpq37/zO+xloEruTrI0aePwwUsSBfNkPP22pw9PhZ/zr67ZgqLkfVhQpj8lsCLysQ2gRYQEXYVARn8KEUeVr3ze6Wa/OZaF8MPBihPvYp2ro6SjrYZie8PiKGQvkA6tfEAc03mUnY5ANlb/2TQlO6Sy1Apa9iwxT6HAETPs2BV5Pxv8MoibQLQNUczIzmr05sXPspyunBc4QOO7xJZt3HpwVjXAjISHOw4y/2qKcASicTidbImWpNFLrx5VpJQpCxnbx8IIZdH7ODgoR4MqpN62hyL+b4UEFFFmkj5tG/SoVWrGVEaYXPkDE5k7+EAsrf/FAjBO0tUNkxn6Md482OuedhzYaYZYMRm8717LAVPM+p6/yFn9/XVNnDtgA+3xMm1eDm4/md0z7P99eEGRvpSXVl2LmFxxGHS3jIS00HQcUDjVVgCQ9OftSvTGn+dly/xqmK072pnSlsBEEFuGxpw1nZTyz/6daK/Ee7cXIUPywcrCBsXQxS9jPfLehvVh68bkPi6mOimyxunQw4PbZLrNaxkWNF3KvwtwItP5GF+X1oAID8DANFN4Wr5yyInR9zTa+6aRtwCU3f2l7Xkcf55xp0qa2nARBYtP7UGltfS9lRCjwFyNMMJhS+1mx2saB1yR4PUSPX9lDyLdyK1gl+i66OFu8etTYbRb8Cglpg2rkVtxZdMvVu3GIw/P99iO1knRQ0QKLKfRdXwnwff+6gfgDmUPWFCgPIwha4344lnFoQym4anWCUWhsbL7OahGH5ZxlpCDAB3HIJO5kMi/R56O8hP8mLjnhBGt5WUSMcTse9JznmDGD31NlDlD1s/cj95Tka0WzIaJaRPDROEH7MbX/u6unDLHsMf8YFZ2vYrgL+7t0jd4dtcuTvVU6wJtvvTuNqqcVDSWf6lSrSjK5wC+XW13swWHMqtiMiuoPUDBNCwapH9b5r3xTFElBuC8HDcLUJ90OqYHeA+ZlA6hpQh66+ycvMhXYWJK4YxDncFWZZqllzv7RvLEmm7cOJI3wfBesqVNtH/OAf/niuQJ8gQ7PpHFczE2vqhw2c1B4sjo+t6jLqKWyv+6GZz/gWCQ5/1yrS1oXh6HwP55+59gh+IXlGH23kHVuWhoDKIDvbBtanfD1n5yWpqmGP+fITHo8xrPs0DOUaXWa0bnGPkJAot/7nqQXURYK3Nu+rBus9DneN5WS3HjXTGwxxkEjpwnslicQVRtb0iB1VR8JjCa68BYt0PyRc9gWczM3i1/QNQ/F2xkoxDAdD3oO0/xfQGAqA/n4Gm007TBXcsWUupJoBTRdy6DR8iE805pt4llfnKMzjxWKxHO0X2WXC6mLwBMBTN+HR2MAOJBs58rOE15z35Mhe4ji3zJtLkZqlW6YNhOJsHXmznUWydQWWdU+0QVLmTzcXamZMlf4d+wM1insD7E1nGTPHV2WGFJJet3unxqj6GiM2VwJNXmHqwi6nZvlq4gKwkrTQ8jw2Y368xdBd3Hm4/yHpS0cZutO194U+B28ElvyS8NANOumrol7dlqgWNvmFuPkSiw+JhOk6HocyJT4rHrbr+LOCc99MgMQ67S8o3xj3mItBZQvoHwQqxtwlfPnOGnJgNNdkUSTJu6xy+gOVFqect3spCucYr0CYDZVH44cLFWe7suMBmNcuy1CLMhTHqs/rxqpcdJ8YN7WN8MtOD5mtcSx9BgdZweJi7q6Z4Vtg4TOJNGKYGTQMAB/X8cwvoihbk2OQONk4CHyVK0/wK18VkpmVcJd9bTamQYCzpitZGTTJXl08qTJ5W5RHCVQKz9sAr9FmNKZPM+TnKdfAjimCL3xs9Xf91lAZv28RhBaggg84gEMYJzKumf1mY9cI3lev/dp7J186ATMSw5uC6MFBx26FHr29gUV0N8yJv8AFb0lB0qO3WKIZ2zfUSQ3fvA+iqbn+Ub8W+EOEFwrUk/xK0CyJIqNkBWCBJyOqCbwSnvOqm+X2emQt/+Fdk/ZG1xoiDf6ocK9BHQ4DjUWH3InMe9/VHK/CqO423AXL4y9zFH8NW8XmfaqcORuGlNjoVEXwMtiyCmOiBzU4wv3Uodlz6JPyJA0U9ydqPsCqC3FTej0tzHabsEz7nXQi6C+Z1sHh+GsB5i/rFUC3i97Eglb+RcUwT2K0cHs1bbc3wXiNb0pocLsc2/N2cEEMwZk0YPOjnXuej0yi9QzWlXJrkeevhhxXhtkWFcBtOljb5OBKBJieDEDbPpI2yvWtqwBdZ/mP4nIdH+qmGvtm1CA0EMar+ZFWe++Z9opF5gZ6ZnCuZto+zttgXNtnc/Q72E7zePS2Qc4cUYhUg3Pnb/CGHWHmZw4lxq3b9M6DDLUKq6BKONeCh0WGLS4Gt/MpnVT79ZCQS8Aba759a/n7bp20b5C/2sGtovmRCDGlxsbyeo5okdZYUk5M3s/TTL9J6lXjbkvKZ8RA61zMt8qfcwxiFfDBU3RlxOAGATGrTClWuxWIzAh6cZFx8Z0VYRktdaM4VOFkxNgtkzy8uNtgZYqKOXAAgVXIfqRsjO93A+mTggJePJFVV0iAqYqy9sFun53fr09yh7wSu8E7MwmyBssE6zhFnOqmcwXdKRLXSe5Fx/L7att4WxgkdnaZcEUg1oAfTGXD+KLQhFcZzcFHi3PQgECi+UgxrOogEo5miqLu1ym/Z7Iufhh/NY8qCX1TFYLMliaSQJCjhy8wYB0qGPuLUX6Hr0U7ZUoMMPYDSONPzbfB13FhBKy9kKd24WGeBo6EpwR/blyGAvfjNU3B/lyWalDTn11TGkWda4xYlaPzk1rKxftv0bmEMJKFrK9vnJTGp6VB7Ip63LcRJXy+7ZOQPOlg8CNTY6vU1gACyQYPSGVO/k/wFlcXA9cQQL+CSzW4z1PHfJLpPwYccLC4+vGdLP8xGKKDrljTJ59KtyrVOqTJmTEPXteSL6s3HbsaQzZGPoe4JsxuY1sn0x2CAC4Dg4KQQRXPy5zhYpjv8+GP3euR9lC8gNg1Sxn4XrOKcv2wWpufRkBcmFlRJStWmKUZj0aWsdLI7uH5zrVqr/AzKNYcu08M/KfFUexWAQu/cnObwoOMjp9PgUhtutNJynEtXxnBDJjyF7mcq9K0U1eYD7e1YhyckqdaRjH9L10+J3FUeaIPfkGlqUAl2VAHuY7OQ888LsSzU0zs1Btvx7kAw5etGdEla+JW0VkQUtaCkMV0tf0+LQY6EjwOodCxYA+E5KP1umKFYvc6xCPksH8LRuY0IJKc7lHDWe72H+CG+ZDJ3LpIcY04PmCEqcyxk1Rgf6VRFHxoSE6mOREU+uXiIvoPM3YLJ8nRqAHCAk4ptI43AUcHK8+Z90tm8QP7d/bjyfOWKhjXFqypjW8nCMVmoxKYoLh5ZdOORyuUBxsTFFPMk3KoLQwFvgSPzSGvn/jOibW10+znB3qy23/8ewuURd8WRoXd0QHM0JNx25xizrTA0Y7a0qL89H35V28i2Jn9MtKqWJjpLxK/1b2UwvVit6lCGsPNlS0/f02PvtGUPTzhE0iEucRsow+z/bXzOaF56MmFHeuocfeN5F4Q0stAsPQ0zDn5W3QVJYL20VoquSwmh8fmBoxHfwBy+B1DdZtXm3lh6Z8b/4HR+YDZVmoVHPwHLgnp42DIcDNaOI5XuLj5JhfkAaPmn/hhfWcPTnwvm6kOHQLsLnEfNWvY5PDvHRtDIdNhGWJHqcyPOWUuAc+cF1BMuFMPTq0uHrhi8eoSfsrq4P4ckT3OcW7yQmzb9Atir0fXgkliQGFm3ReZ57L9J+WocoM/Sxn5j0t4kA3ITmoxqEJsVF6MSKpYRsyQovyRG91c2jqlPDyf3lpmJ+xwnhPbM8WUDUonoOf+XAAC++n5LXtIUasB2zHGgrK9L29ufg8tmqwJqL4icdzcBuBTdrUfDcZTYULtj2ZvZEyxE+nyPWlVVq8nzl7qlSzgsV2zJMWfRGvB8W+xk3Z4TLPJV7hyKVMVyrSmNL1Nze2zC0rUzGFoqmLHbYo2jAyONW2FzQcpATc89Bs9Cmxu16eCIPio6o9aBl06FEPOi/ippsf9GWqu67TGKiRtOjsea+kS0Vd6k7WoyqmixDXj6W0wZsQ3K9j69WFi+xq9thLlatouk8EXLMMtvw/BeNAUuS6hH49wLCPM6qPKM53gSeMr65uaJ80qNb1euOYG65s36gFETPR7PX4F6bgk3wfXOLdIInU+Ipowg6BgWsardF3B4Jnt3jb12cqov8KuiLlJk0//qwj5YPnIX2yWkGglsQ9/vHMRbYmTS0DFgtioayv7OG9gpfKKKCAqX+nIOM7ZYAz5SoYuVWmHJg2bnF7a85AEe0FS/mlCWuDFwvxhfqnA1xz1gPYvPjQdBBnNyYkPukZxXaPU/YCAnwDUSl3Qi15bzuAX7xdkVXMx7pbRNGwpoSNXCC89JGxIalrhVWIQBflbO7s2eGbYMZdkE69nUrh8ho6vyOSnJq5j/RG4/te/LAgX3BTaJRHy4gn7K619WDEDmetRkEKcBZ9i1SJ5+tYWlfZGxk2ImDeNy9yVqZDbLNIoVOkPQmVQ3PYpZjMQR3h9Innlat44arShL1HcxXNyNMVmQaLpHNiuPGn8w9NOiBu9ZV2qhFmnQ4AORK3hcTaK/x0aWH8yFXpgVxj8k9c3sDyxwR+KSES93+/XowWamxox1hteb+cP77esaHFtqFLd/olkrJ1Hqyf29c9JEjdYF7D6fwq6mjWvL20yhUp+e1m/F54X5W+OgG6J0gaSzlHDuNtPkxgTYOgRDsNeZpz30zWAfibqdsqA/ChU7G2/9bFFVBhoma7TpkegaVTRV5x+37YnF/jd7gfTbWsADPVy1s+DHSOKWpARpe9n4rfpxOIoHYQR7YxGw1CQGvykTdR32QLIE2ahSHDpa4OoRxaTPGf2BIEy8oB0Klr/EhO4De6eD1gPZMuLYkGbQVoQ/GI6GaoJzmI5obxjf91vI2n3e7VF9KOATSwOtFM0neuuhAeeQthtqXNrOhFtDJmt2ARnthH1NZrcAeI+PKfTJXKlznDkIIzWybu8T/vZAnCWqw9CTuXgYQQZzVmuUwvK/WiakfKXtlp/XxHxnc73hg53QBp8sho/C9BsU+vsGOjjg4ti+jWmt6exxH+8Z2CVY2lLNPAiW5gwDRART4xGLBIAgIr0D1F/LeT3H2H4sMioeGgnrU05zZ9rNTFdJ7WjyDCTJJ3/GKRXq2NjRedFlAe0ASPu+1VSVgY1G8ZVK5q+2ci/ZYlkeRPX1Dn1zuR+af8APC2RZ0iSQELl6asnyxWZi/+zegpkLji1lGPlOtGQb6XICHm/o8Ajkr5rXVtoftYFS32ODXcpg9gk7s5Ouq6EBeaU9dJbRTTWkASztBmMg1PeXcOo/EhrcY6mn6OAElyCUcpj9whJ5t7NboFuh8qR7O2L9IeKrDtcDbhxY9fmj/CD13Ssaq93A885Z9CWo+C3y0rFaQQjYX2ncdYsXQo0AsInr9F6/MqncdpElXxpnyrlJZiATbeXH3wkoiXgzO3TKoBWxWAdFBfoZpcZAaPghoXUrSECEsK455dajLjp9A3GpzFLKEBEV823Jc6P5pmXx9JomJxC2gy5SmFywbqycFgs1Nk6NjilocQJJwhUNnfw6xk6VAgH2dfoiTcS8/+6HPe17oEDsZj9xhBW0ZfdcPUWeSTX2MDwdXRSeKxPh4VeTLUWfk/jFqPpQ34VmmtEE+Im+VeICOontX/qjQ4P0Gj/onxhlBzcBUjgAAA');
  --dock-slice: 10 60;
  --dock-band-y: 3px;
  --dock-band-x: 19px;
}
.media-tile .tile-dock-bottom.bundle-tile-info {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  /* the bar paints the band now; the scrim under it was for bare text */
  background: none;
  border-radius: 0;
}
/* One line, like every other tile's plate (Rober, 2026-09-29: "dont line
   break into 2 lines on title dock"). The name takes what is left and
   ellipsises; the count line keeps its full width on the right. */
.media-tile .tile-dock-bottom.bundle-tile-info { column-gap: 6px; }
.media-tile .tile-dock-bottom > .bundle-tile-title { grid-column: 1; }
.media-tile .tile-dock-bottom > .bundle-tile-sub {
  grid-column: 2;
  grid-row: 1;
  margin-top: 0;
}
.media-tile .tile-dock-bottom > .bundle-tile-sub::before {
  content: '·';
  margin-right: 6px;
  opacity: .6;
}

/* The painted chain wherever a link glyph used to be drawn. */
.bundle-link {
  width: 13px;
  height: 13px;
  object-fit: contain;
  display: block;
  flex: none;
  filter: drop-shadow(0 1px 2px rgba(60,6,32,.8));
}

/* …and on that rail the chip drops its own pink pill. The bar is already the
   bundle's colour; a pink sticker on a pink rail is the sticker look this was
   meant to end. The chain and the count stay, like every other badge. */
.media-tile.in-bundle .tile-dock .tile-bundle-chip {
  background: none;
  border: 0;
  box-shadow: none;
  padding: 0;
  color: #fde7f3;
  text-shadow: 0 1px 3px rgba(60,6,32,.9);
}

.media-tile .tile-dock {
  position: absolute;
  left: var(--dock-pad);
  right: var(--dock-pad);
  z-index: 4;
  box-sizing: border-box;
  min-height: var(--dock-h);
  padding: var(--dock-band-y) calc(var(--dock-band-x) + 6px);
  color: #f3f5f9;
}
/* The rail is a pseudo-element, not the bar's own border, for two reasons: a
   `border-image` cannot be faded (the top bar arrives with the pointer), and a
   real border would push the contents around as it appeared. This one sits
   behind them and only its opacity changes. */
.media-tile .tile-dock::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  border: var(--dock-band-y) solid transparent;
  border-left-width: var(--dock-band-x);
  border-right-width: var(--dock-band-x);
  border-image-source: var(--dock-art);
  border-image-slice: var(--dock-slice) fill;
  border-image-repeat: stretch;
  pointer-events: none;
  transition: opacity .18s ease;
}
.media-tile .tile-dock-top {
  top: var(--dock-pad);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--dock-gap);
}
/* At rest there is no bar — only the two or three things that are true without
   hovering. The rail arrives with the pointer. */
.media-tile .tile-dock-top::before { opacity: 0; }
.media-tile:hover .tile-dock-top::before { opacity: 1; }
.media-tile .tile-dock-side {
  display: flex;
  align-items: center;
  gap: var(--dock-gap);
  min-width: 0;
}
/* The actions keep their room whatever else is on the bar; the badges give way.
   Without this the two groups simply ran into each other on a 150px tile —
   "720p" printed over the duration. Low-value badges are dropped by priority
   below rather than clipped mid-glyph. */
.media-tile .tile-dock-r { flex: 0 0 auto; }
.media-tile .tile-dock-l { flex: 0 1 auto; overflow: hidden; }
/* The badge lane is just one item in the left group now — flex does the
   spacing that --lane-x used to do by hand. */
.media-tile .tile-dock .tile-topbadges {
  position: static;
  padding-left: 0;
  gap: var(--dock-gap);
  flex-wrap: nowrap;
  right: auto;
}
/* Everything that was absolutely placed is now laid out by the bar. */
.media-tile .tile-dock > *,
.media-tile .tile-dock .tile-select,
.media-tile .tile-dock .tile-bundle-chip,
.media-tile .tile-dock .tile-gif-badge,
.media-tile .tile-dock .tile-duration,
.media-tile .tile-dock .tile-edit,
.media-tile .tile-dock .tile-popout,
.media-tile .tile-dock .tile-views,
.media-tile .tile-dock .tile-resolution,
.media-tile .tile-dock .tile-orientation,
.media-tile .tile-dock .tile-vr {
  position: static;
  top: auto; right: auto; bottom: auto; left: auto;
  transform: none;
}

/* ── Inside a bar, a badge is TEXT, not another plate ─────────────────── */
.media-tile .tile-dock .tile-views,
.media-tile .tile-dock .tile-resolution,
.media-tile .tile-dock .tile-orientation,
.media-tile .tile-dock .tile-vr,
.media-tile .tile-dock .tile-duration,
.media-tile .tile-dock .hentai-kind-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: auto;
  min-width: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  backdrop-filter: none;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .2px;
  line-height: 1;
  color: rgba(243,245,249,.9);
  /* At rest the bar is not painted, so the text carries its own legibility. */
  text-shadow: 0 1px 3px rgba(0,0,0,.95);
}
.media-tile:hover .tile-dock .tile-views,
.media-tile:hover .tile-dock .tile-resolution,
.media-tile:hover .tile-dock .tile-orientation,
.media-tile:hover .tile-dock .tile-vr,
.media-tile:hover .tile-dock .tile-duration { text-shadow: 0 1px 2px rgba(0,0,0,.7); }
.media-tile .tile-dock svg { display: block; }

/* A button still has to look pressable inside the bar — quietly. */
.media-tile .tile-dock .tile-select,
.media-tile .tile-dock .tile-edit,
.media-tile .tile-dock .tile-popout {
  flex: none;
  width: var(--btn-s);
  height: var(--btn-s);
  padding: 0;
  border: 0;
  border-radius: 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  line-height: 1;
  color: #eef1f6;
  background: rgba(226,232,240,.10);
  box-shadow: inset 0 0 0 1px rgba(8,9,14,.45);
  backdrop-filter: none;
  cursor: pointer;
}
/* A painted icon, not a drawn-from-memory SVG glyph — the same window the
   menu and the top bar use for "open this in its own window". It is drawn at
   17px, which is why the asset ships at 44px rather than 512. */
.media-tile .tile-dock .tile-popout img {
  width: 17px;
  height: 17px;
  object-fit: contain;
  display: block;
  filter: drop-shadow(0 1px 1px rgba(0,0,0,.6));
}
.media-tile .tile-dock .tile-select:hover,
.media-tile .tile-dock .tile-edit:hover,
.media-tile .tile-dock .tile-popout:hover {
  background: var(--dock-lit);
  color: #0b0c11;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), 0 2px 8px rgba(124,58,237,.4);
}
/* Selected is a STATE: it stays lit, and it stays visible at rest. */
.media-tile .tile-dock .tile-select.on,
.media-tile .tile-dock .tile-select.on:hover {
  background: var(--dock-lit);
  color: #0b0c11;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.45), 0 2px 8px rgba(124,58,237,.45);
}
/* Two badges keep a colour, because theirs is a category rather than a
   label — and they show at rest, so they keep a backdrop of their own. */
.media-tile .tile-dock .tile-bundle-chip,
.media-tile .tile-dock .tile-gif-badge,
.media-tile .tile-dock .hentai-ep-pill {
  flex: none;
  height: 18px;
  padding: 0 7px;
  border: 0;
  border-radius: 4px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 10.5px;
  font-weight: 700;
  line-height: 1;
}
.media-tile .tile-dock .hentai-ep-pill.watched {
  background: linear-gradient(180deg, rgba(52,211,153,.95), rgba(16,185,129,.92));
  color: #04140e;
}

/* ── The hover half: what is only true while you are pointing ─────────
   `display` is what changes, not opacity alone — an invisible item would
   still hold its place in the bar and push the duration away from the
   corner at rest. `allow-discrete` + @starting-style animate that; an
   engine without them simply shows the item at once. */
.media-tile .tile-dock-top .tile-select,
.media-tile .tile-dock-top .tile-edit,
.media-tile .tile-dock-top .tile-popout,
.media-tile .tile-dock-top .tile-views,
.media-tile .tile-dock-top .tile-resolution,
.media-tile .tile-dock-top .tile-orientation,
.media-tile .tile-dock-top .tile-vr,
.media-tile .tile-dock-top .tile-star-stack {
  display: none;
  opacity: 0;
  transform: translateY(-5px);
  transition: opacity .16s ease, transform .22s cubic-bezier(.2,.75,.3,1), display .22s allow-discrete;
}
.media-tile:hover .tile-dock-top .tile-select,
.media-tile:hover .tile-dock-top .tile-edit,
.media-tile:hover .tile-dock-top .tile-popout,
.media-tile:hover .tile-dock-top .tile-views,
.media-tile:hover .tile-dock-top .tile-resolution,
.media-tile:hover .tile-dock-top .tile-orientation,
.media-tile:hover .tile-dock-top .tile-vr,
.media-tile .tile-dock-top .tile-select.on,
.media-tile:hover .tile-dock-top .tile-star-stack {
  display: inline-flex;
  opacity: 1;
  transform: none;
}
@starting-style {
  .media-tile:hover .tile-dock-top .tile-select,
  .media-tile:hover .tile-dock-top .tile-edit,
  .media-tile:hover .tile-dock-top .tile-popout,
  .media-tile:hover .tile-dock-top .tile-views,
  .media-tile:hover .tile-dock-top .tile-resolution,
  .media-tile:hover .tile-dock-top .tile-orientation,
  .media-tile:hover .tile-dock-top .tile-vr,
  .media-tile:hover .tile-dock-top .tile-star-stack { opacity: 0; transform: translateY(-5px); }
}
/* The stagger: the bar fills left to right rather than all at once. Cheap,
   and it is the whole difference between "appeared" and "opened". */
.media-tile:hover .tile-dock-l > *:nth-child(2) { transition-delay: .03s; }
.media-tile:hover .tile-dock-l > *:nth-child(3) { transition-delay: .06s; }
.media-tile:hover .tile-dock-l .tile-topbadges > *:nth-child(2) { transition-delay: .04s; }
.media-tile:hover .tile-dock-l .tile-topbadges > *:nth-child(3) { transition-delay: .07s; }
.media-tile:hover .tile-dock-l .tile-topbadges > *:nth-child(n+4) { transition-delay: .1s; }
.media-tile:hover .tile-dock-r > *:nth-child(2) { transition-delay: .04s; }
.media-tile:hover .tile-dock-r > *:nth-child(3) { transition-delay: .07s; }
@media (prefers-reduced-motion: reduce) {
  .media-tile .tile-dock-top *,
  .media-tile .tile-dock-top { transition-duration: .01s !important; transition-delay: 0s !important; transform: none !important; }
}
/* Touch surfaces have no hover to give: show the bar and its contents. */
@media (pointer: coarse) {
  .media-tile .tile-dock-top::before { opacity: 1; }
  .media-tile .tile-dock-top .tile-select,
  .media-tile .tile-dock-top .tile-edit,
  .media-tile .tile-dock-top .tile-popout,
  .media-tile .tile-dock-top .tile-views,
  .media-tile .tile-dock-top .tile-resolution,
  .media-tile .tile-dock-top .tile-orientation,
  .media-tile .tile-dock-top .tile-vr { display: inline-flex; opacity: 1; transform: none; }
}

/* ── The bottom bar: the nameplate, with the score in the SAME frame ──── */
.media-tile .tile-dock-bottom {
  bottom: var(--dock-pad);
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
}
/* The name is TEXT on the bar now — the bar is the plate, so the title must
   not carry one of its own or there are two frames again. */
.media-tile .tile-dock-bottom > .tile-title {
  height: auto;
  min-height: 20px;
  line-height: 20px;
  padding: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  backdrop-filter: none;
  grid-column: 1;
}
.media-tile .tile-dock-bottom > .tile-sub { grid-column: 1; }
.media-tile .tile-dock-bottom > .score-bar,
.media-tile .tile-dock-bottom > .tile-rating {
  grid-column: 2;
  grid-row: 1;
  position: static;
  right: auto; bottom: auto;
  margin-left: 9px;
  padding-left: 9px;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: inset 1px 0 0 rgba(226,232,240,.18);   /* the one divider */
  backdrop-filter: none;
  /* Not `opacity: 0`: an invisible score would still hold its column open
     and shorten the name for nothing. These mirror the rules that reveal
     the bar — keep them in step. */
  display: none;
}
.media-tile:hover .tile-dock-bottom > .score-bar,
.media-tile .tile-dock-bottom > .score-bar:has(.bust-vote.busted),
.media-tile .tile-dock-bottom > .score-bar:has(.rating-strip.rated),
.media-tile:hover .tile-dock-bottom > .tile-rating,
.media-tile .tile-dock-bottom > .tile-rating.rated { display: inline-flex; opacity: 1; }

/* ── A framed tile: both bars sit inside the moulding ─────────────────── */
.media-tile[data-frame] .tile-dock {
  left: calc(var(--frame-band) + var(--dock-pad));
  right: calc(var(--frame-band) + var(--dock-pad));
}
/* The top bar rides the TOP moulding, exactly as the nameplate rides the
   bottom one. It used to be parked below the corner plaque (top: --ovl-t), so
   on a framed tile the bar started 12px into the picture and finished 42px in
   — the plaque's whole row was dead space and the bar paid for it out of the
   artwork, which is what you watch while the hover-scrub plays (Rober,
   2026-10-02: "can the top bar overlap the just added area so you can see the
   scrub of the video better?"). Mounted on the band it covers 14px of picture
   instead of 42px, and the plaque — now the bar's first item, see dockChrome's
   DOCK_LEFT — sits ON it rather than above it. */
.media-tile[data-frame] .tile-dock.tile-dock-top {
  left: var(--dock-pad);
  right: var(--dock-pad);
  top: -3px;
  z-index: 5;   /* over the frame layer (z 4), like the nameplate below */
  /* …and the last 14px it still covers go when you point at it (below). */
  transition: top .26s cubic-bezier(.2, .8, .25, 1);
}
/* ── Pointing at it takes the bar off the picture altogether ──────────────
   Rober, 2026-10-02: "maybe it can slightly push up … so it can be even more
   off the thumbnail?" At rest the bar rides the moulding with its bottom 14px
   over the artwork — fine over a still cover. Under the pointer that artwork
   is a PLAYING hover-scrub, so the bar climbs the moulding and leaves 6px.

   ⚠ The lift is bounded by the gutter, not by the picture. Taking the bar
   fully off the artwork wants 14px, and the media grid's row gap is 14px —
   with the tile's own 3px hover rise that is exactly the space there is, so a
   14px lift puts the bar flush against the nameplate of the tile ABOVE it,
   two bars stacked with no air between them. 8px keeps ~6px of gutter, which
   is what makes it read as the hovered tile's bar rather than the row above's
   footer. Rendered side by side at 3px / 11px / 17px in mockups/ before
   picking; do not raise it without looking at a two-row grid again.

   It rises WITH the rail fading up and the controls sliding in — one movement,
   not a jump — and it is `top`, not a transform, so the reduced-motion rule
   further down (which zeroes transforms inside this bar) still gets the bar
   out of the way, just instantly.

   A toon strip card is excluded: its own hover already scales the bar, and at
   that size the lift would stand the bar off the card. */
.media-tile[data-frame] { --dock-lift: 8px; }
.media-tile[data-frame]:hover .tile-dock.tile-dock-top {
  top: calc(-3px - var(--dock-lift));
}
.toon-row .toon-strip-card[data-frame]:hover .tile-dock.tile-dock-top { top: -3px; }
/* The plaque inside the bar. `relative`, not `static`: it keeps popping out of
   the top-left corner the way Rober asked for when frames were built ("part of
   the frame, overlapping it a bit, popped out of it towards top left") without
   taking that 9px out of the bar's own height — and it lands on the same pixels
   it occupied before the bar came up to meet it. */
/* The left group clips what overflows it, which is how a badge ellipsises
   instead of printing over the duration — but `overflow: hidden` clips BOTH
   axes, and the plaque pops 9px above the bar. `clip` is the one overflow
   value that can be set per axis without the other computing to auto, so the
   group still cuts a badge off horizontally and lets the plaque out the top.
   Only a bar that carries a plaque changes; every other bar clips as before. */
.media-tile .tile-dock-l:has(.tile-frame-rail) {
  overflow-x: clip;
  overflow-y: visible;
}
.media-tile .tile-dock-top .tile-frame-rail {
  position: relative;
  top: -9px;
  left: auto;
  flex: 0 1 auto;
  max-width: 100%;
  transition: top .22s cubic-bezier(.2,.75,.3,1), padding .2s cubic-bezier(.2,.75,.3,1),
              border-width .2s cubic-bezier(.2,.75,.3,1),
              background-color .18s ease, border-color .18s ease, box-shadow .18s ease;
}
/* …and on hover it dissolves INTO the rail. The bar's whole rule is one frame
   per bar — a pill sitting on a painted rail is the sticker look the dock was
   built to end — and the word is already said by the gem beside it. So as the
   controls slide in, the plate, the word and the pop-out all go, and what is
   left is the kind's gem seated on the bar with everything else. At rest,
   which is how a grid is scanned, nothing has changed: the enamel plaque is
   still popped out of the top-left corner reading JUST ADDED. */
.media-tile:hover .tile-dock-top .tile-frame-rail {
  top: 0;
  /* No plate means no plate's padding or rim either — on a 180px tile those
     eleven pixels are a badge. */
  padding: 0;
  border-width: 0;
  background-color: transparent;
  background-image: none;
  border-color: transparent;
  box-shadow: none;
}
.media-tile .tile-dock-top .tile-frame-label {
  max-width: 11em;
  transition: max-width .2s cubic-bezier(.2,.75,.3,1), opacity .14s ease, margin .2s ease;
}
.media-tile:hover .tile-dock-top .tile-frame-label {
  max-width: 0;
  opacity: 0;
  margin-right: -6px;
}
/* The nameplate is mounted ON the moulding, not hung inside the opening
   (Rober, 2026-09-29: "move the title more to overlap the frame and less of
   the video"). It spans the side rails and rides the bottom band, a few px
   proud of the edge like the top-left plaque, so roughly half of it covers
   frame instead of all 30px covering the picture. A framed tile is already
   `overflow: visible`, so nothing clips it. */
.media-tile[data-frame] .tile-dock.tile-dock-bottom {
  left: var(--dock-pad);
  right: var(--dock-pad);
  bottom: -3px;
  z-index: 5;   /* over the frame layer (z 4) it now sits on, under the plaque (z 7) */
}

/* ── A toon strip card scales on hover, and its chrome counter-scales.
   The two bars are the only things to counter-scale now. ──────────────── */
.toon-row .toon-strip-card:hover .tile-dock-top {
  transform: scale(calc(1 / var(--ts-zoom, 1.6)));
  transform-origin: top left;
  width: calc(100% * var(--ts-zoom, 1.6));
  right: auto;
}

/* ── Narrow tiles drop badges by priority, they do not crush ────────────
   A 150px strip card cannot carry six badges and three buttons. The tile is
   a size container, so the bar can decide for itself: the orientation glyph
   goes first (the poster already shows its shape), then the view count, then
   the resolution. The actions and the state badges never go. */
/* The BAR is the size container, not the tile: a framed tile's bar is ~38px
   narrower than the same tile's width, and it is the bar that runs out of
   room. ⚠ A container query measures the container's CONTENT box, so these
   numbers are the space INSIDE the bar's cap padding — ~38px less than the
   bar and ~50px less than the tile. Measured with mockups/tile-chrome.html and web/test/tile-overlap.html,
   both of which report a group that overflows; do not re-guess them. They move
   whenever the bar's padding or the button size does.
   mockups/tile-chrome-sweep.html runs the same measurement across every tile
   width from 150px to 340px, which is where the framed numbers below come
   from. */
.media-tile .tile-dock-top { container-type: inline-size; container-name: tiledock; }
@container tiledock (max-width: 223px) {
  .tile-dock-top .tile-orientation { display: none !important; }
}
@container tiledock (max-width: 203px) {
  .tile-dock-top .tile-views { display: none !important; }
}
/* A lane carrying a WIDE state badge — an episode number, a bundle count, a
   GIF marker — has ~40px less to give, and those badges outrank a resolution
   or a view count, so the two of them go sooner. (The query has to match a
   DESCENDANT of the container: the bar itself IS the container, so
   `.tile-dock-top:has(...)` inside @container would match nothing.) */
@container tiledock (max-width: 244px) {
  .tile-dock-l:has(.hentai-ep-pill, .tile-bundle-chip, .tile-gif-badge) .tile-views { display: none !important; }
}
@container tiledock (max-width: 209px) {
  .tile-dock-l:has(.hentai-ep-pill, .tile-bundle-chip, .tile-gif-badge) .tile-resolution { display: none !important; }
}
@container tiledock (max-width: 168px) {
  .tile-dock-top .tile-resolution { display: none !important; }
}
/* On a strip card there is room for the buttons and nothing else. */
@container tiledock (max-width: 120px) {
  .tile-dock-top .tile-duration { display: none !important; }
}
/* The plaque's word goes the same way. Hover already tucks it (above), but a
   touch surface has no hover to tuck it with, and below this the word cannot
   be read anyway: the label needs ~75px next to its gem and the duration, so
   under ~156px of bar it would arrive as "JUST A…". There the plaque is its
   gem, exactly as it is on a collection strip. (It ellipsises rather than
   overflowing, so this threshold is legibility, not fit — the sweep reports no
   overflow at any width with the word on.) */
@container tiledock (max-width: 156px) {
  .tile-dock-top .tile-frame-label { display: none !important; }
  .tile-dock-top .tile-frame-rail { padding-right: 4px; }
}
/* ── A framed bar carries one more thing than an unframed one ────────────
   The gem costs the left group ~30px once the plaque has dissolved into the
   rail, so every drop above happens 30px of bar earlier on a framed tile.
   These are the same measurements, re-run with the plaque in the bar
   (mockups/tile-chrome-sweep.html); they are not the unframed numbers with a
   guess added. The rule they hold to: a framed bar must not overflow at any
   width where the same tile unframed does not. */
@container tiledock (max-width: 253px) {
  .tile-dock-l:has(.tile-frame-rail) .tile-orientation { display: none !important; }
}
@container tiledock (max-width: 233px) {
  .tile-dock-l:has(.tile-frame-rail) .tile-views { display: none !important; }
}
@container tiledock (max-width: 198px) {
  .tile-dock-l:has(.tile-frame-rail) .tile-resolution { display: none !important; }
}
/* …and a framed bar that ALSO carries a wide state badge gives them up sooner
   again, exactly as the unframed pair above does. */
@container tiledock (max-width: 266px) {
  .tile-dock-l:has(.tile-frame-rail):has(.hentai-ep-pill, .tile-bundle-chip, .tile-gif-badge) .tile-orientation { display: none !important; }
}
@container tiledock (max-width: 284px) {
  .tile-dock-l:has(.tile-frame-rail):has(.hentai-ep-pill, .tile-bundle-chip, .tile-gif-badge) .tile-views { display: none !important; }
}
@container tiledock (max-width: 239px) {
  .tile-dock-l:has(.tile-frame-rail):has(.hentai-ep-pill, .tile-bundle-chip, .tile-gif-badge) .tile-resolution { display: none !important; }
}
/* Below this the bar is the two buttons and nothing else — there is no room
   for a gem beside them. It goes only while the bar is open: at rest the
   plaque is the only thing on that line and it still says JUST ADDED. A bar
   already carrying an episode number or a bundle count runs out sooner, so it
   gives the gem up sooner; both numbers keep a framed bar level with the same
   tile unframed, which is the bar this change is allowed to cost. */
@container tiledock (max-width: 150px) {
  .media-tile:hover .tile-dock-top .tile-frame-rail { display: none; }
}
@container tiledock (max-width: 200px) {
  .media-tile:hover .tile-dock-l:has(.hentai-ep-pill, .tile-bundle-chip, .tile-gif-badge) .tile-frame-rail { display: none; }
}
/* At REST the plaque still wears its word, and that word is ~75px. A bar with
   an episode number or a bundle count on it does not have them to give once
   the tile is also selected (the select toggle stays lit at rest), so on those
   the plaque is its gem from much wider up — measured the same way, in the
   sweep's rest pass. */
@container tiledock (max-width: 250px) {
  .tile-dock-l:has(.hentai-ep-pill, .tile-bundle-chip, .tile-gif-badge) .tile-frame-label { display: none !important; }
}
/* A selected tile keeps its toggle lit at rest, and that is another 31px on a
   line that already holds the gem, the word and the duration. */
@container tiledock (max-width: 186px) {
  .tile-dock-l:has(.tile-select.on) .tile-frame-label { display: none !important; }
}
/* And at the very bottom of the range the gem goes too: a bar this narrow is
   the state badge and the buttons, and the frame's own colour still says why
   the tile is framed. */
@container tiledock (max-width: 150px) {
  .tile-dock-l:has(.hentai-ep-pill, .tile-bundle-chip, .tile-gif-badge) .tile-frame-rail { display: none; }
}

/* ── Settings → Appearance → Tile dock ──────────────────────────────────
   Each option is a real .tile-dock in its own style (app.js renderDockPicker),
   because the only honest preview of a painted rail is the rail. The preview
   carries .media-tile purely to inherit the dock tokens — it is a <span>, and
   nothing else on it applies. */
.dock-picker {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: 10px;
  margin-top: 10px;
}
.dock-opt {
  display: block;
  text-align: left;
  padding: 9px 9px 7px;
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 9px;
  background: rgba(0,0,0,.28);
  color: inherit;
  font: inherit;
  cursor: pointer;
  transition: border-color .14s, background .14s, transform .08s;
}
.dock-opt:hover { border-color: rgba(167,139,250,.5); background: rgba(167,139,250,.08); }
.dock-opt:active { transform: translateY(1px); }
.dock-opt.is-on { border-color: rgba(167,139,250,.9); background: rgba(167,139,250,.14); }
.dock-opt:focus-visible { outline: 2px solid var(--accent, #a78bfa); outline-offset: 2px; }
/* A scrap of tile for the bar to sit on, so the rail is read against artwork
   the way it will be in the grid. */
.dock-opt-preview {
  position: relative;
  display: block;
  height: 46px;
  border-radius: 6px;
  overflow: hidden;
  background: #16121c url('data:image/webp;base64,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') center / cover no-repeat;
}
.dock-opt-preview .tile-dock {
  position: absolute;
  left: var(--dock-pad); right: var(--dock-pad); bottom: var(--dock-pad);
  display: flex; align-items: center;
}
.dock-opt-preview .tile-dock::before { opacity: 1; }
.dock-opt-name {
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: .15px;
  color: #f3f5f9;
  text-shadow: 0 1px 2px rgba(0,0,0,.9);
}
.dock-opt-note {
  display: block;
  margin-top: 6px;
  font-size: 11px;
  color: rgba(232,232,240,.55);
}
.dock-opt.is-on .dock-opt-note { color: rgba(232,232,240,.8); }

/* The bundle chip's painted chain (the same one the bundle frame's plaque
   wears, cut out of its medallion — see tileBase in media/common.js). */
.media-tile .tile-dock .tile-bundle-chip img {
  width: 13px;
  height: 13px;
  object-fit: contain;
  display: block;
  /* rose-gold on the chip's pink is a close pair; the shadow is what separates
     them at 13px */
  filter: drop-shadow(0 1px 2px rgba(60,6,32,.8));
}

/* Bundle covers: a real action on the top rail, also reachable without hover. */
.media-tile .tile-dock .tile-bundle-covers {
  position: static;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-height: 28px;
  padding: 3px 8px;
  border: 0;
  border-radius: 5px;
  background: var(--surface-2);
  color: var(--text);
  font: inherit;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  touch-action: manipulation;
}
.media-tile .tile-dock .tile-bundle-covers img { width: 18px; height: 18px; object-fit: contain; }
.media-tile .tile-dock .tile-bundle-covers:hover { background: var(--accent-pink); color: var(--bg); }
.media-tile .tile-dock .tile-bundle-covers:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }
.media-tile .tile-dock-top:focus-within::before { opacity: 1; }
@media (pointer: coarse) {
  .media-tile .tile-dock .tile-bundle-covers { min-height: 44px; }
}

.bundle-cover-editor { padding: 12px; box-sizing: border-box; }
.bundle-cover-editor .bundle-cover-panel {
  display: flex;
  flex-direction: column;
  width: 880px;
  min-width: 0;
  max-width: 100%;
  max-height: calc(100vh - 24px);
  max-height: calc(100dvh - 24px);
  padding: 0;
  overflow: hidden;
  border-color: var(--accent-pink);
}
.bundle-cover-head, .bundle-cover-footer { padding: 14px 18px; flex: none; }
.bundle-cover-head { display: flex; align-items: flex-start; gap: 12px; border-bottom: 1px solid var(--border); }
.bundle-cover-head > div { flex: 1; min-width: 0; }
.bundle-cover-head h3 { margin: 0 0 4px; }
.bundle-cover-name { margin: 0; color: var(--text-dim); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.bundle-cover-body {
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
  gap: 20px;
  padding: 16px 18px;
  overflow-y: auto;
  min-height: 0;
  overscroll-behavior: contain;
}
.bundle-cover-editing, .bundle-cover-choices { min-width: 0; }
.bundle-cover-options { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; }
.bundle-cover-options label { display: flex; align-items: center; gap: 8px; }
.bundle-cover-panel select, .bundle-cover-panel input[type="search"] {
  color: var(--text);
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 8px;
  font: inherit;
  font-size: 16px;
  min-height: 44px;
  box-sizing: border-box;
}
.bundle-cover-panel button { min-height: 44px; touch-action: manipulation; }
.bundle-cover-panel .btn.ghost { color: var(--text-dim); border-color: var(--border-strong); border-style: solid; }
.bundle-cover-panel .btn.ghost:hover { color: var(--text); background: var(--surface-2); }
.bundle-cover-panel button:disabled { opacity: .55; cursor: wait; }
.bundle-cover-panel button:focus-visible,
.bundle-cover-panel input:focus-visible,
.bundle-cover-panel select:focus-visible { outline: 2px solid var(--accent-pink); outline-offset: 2px; }
.bundle-cover-preview { position: relative; border-radius: var(--radius); overflow: hidden; background: var(--surface-2); }
.bundle-cover-preview .bundle-cover-panel-pick {
  position: absolute;
  inset: 0;
  width: 100%; height: 100%;
  border: 0;
  padding: 6px;
  background: transparent;
  cursor: pointer;
  text-align: left;
  display: flex;
  align-items: flex-start;
}
.bundle-cover-panel-pick > span { background: var(--bg); color: var(--text); border-radius: 4px; min-width: 24px; line-height: 24px; text-align: center; }
.bundle-cover-panel-pick[aria-pressed="true"] { box-shadow: inset 0 0 0 3px var(--accent-pink); }
.bundle-cover-panel-pick[aria-pressed="true"] > span { background: var(--accent-pink); color: var(--bg); }
.bundle-cover-panel-pick:hover { box-shadow: inset 0 0 0 2px var(--text); }
.bundle-cover-panel .bundle-cover-panel-pick:focus-visible { outline-offset: -4px; }
.bundle-cover-instruction { font-size: 12px; color: var(--text-dim); margin: 8px 0; }
.bundle-cover-crop { border: 0; border-top: 1px solid var(--border); padding: 8px 0 0; margin: 12px 0 0; min-width: 0; }
.bundle-cover-crop legend { padding-right: 8px; font-weight: 600; }
.bundle-cover-crop label { display: grid; grid-template-columns: 76px minmax(0, 1fr) 48px; align-items: center; gap: 8px; min-height: 44px; font-size: 12px; }
.bundle-cover-crop input { min-width: 0; width: 100%; height: 44px; accent-color: var(--accent-pink); margin: 0; }
.bundle-cover-crop output { text-align: right; font-variant-numeric: tabular-nums; }
.bundle-cover-search { display: flex; flex-direction: column; gap: 6px; font-weight: 600; }
.bundle-cover-search input { width: 100%; }
.bundle-cover-members { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; max-height: 380px; overflow-y: auto; overscroll-behavior: contain; padding: 3px; }
.bundle-cover-member {
  position: relative;
  flex: 1 0 calc(50% - 8px);
  min-width: 0;
  padding: 0;
  border: 2px solid transparent;
  border-radius: 6px;
  background: var(--surface-2);
  color: var(--text);
  overflow: hidden;
  cursor: pointer;
  font: inherit;
  text-align: left;
}
.bundle-cover-member > img { display: block; width: 100%; height: 82px; object-fit: cover; }
.bundle-cover-member.no-thumb > img { visibility: hidden; }
.bundle-cover-member > span:not(.bundle-cover-member-slot) { display: block; padding: 7px; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bundle-cover-member:hover { border-color: var(--text); }
.bundle-cover-member[aria-pressed="true"] { border-color: var(--accent-pink); }
.bundle-cover-member-slot { position: absolute; top: 4px; left: 4px; background: var(--bg); color: var(--text); font-size: 11px; padding: 3px 5px; border-radius: 3px; }
.bundle-cover-more-items { width: 100%; margin-top: 8px; }
.bundle-cover-more-items[hidden] { display: none; }
.bundle-cover-footer { border-top: 1px solid var(--border); }
.bundle-cover-status { margin: 0; overflow-wrap: anywhere; font-size: 13px; }
.bundle-cover-status:not(:empty) { margin-bottom: 10px; }
.bundle-cover-actions { display: flex; justify-content: flex-end; gap: 10px; }
@media (max-width: 600px) {
  .bundle-cover-body { grid-template-columns: minmax(0, 1fr); gap: 16px; padding: 12px; }
  .bundle-cover-head, .bundle-cover-footer { padding: 12px; }
  .bundle-cover-members { max-height: 250px; }
}

/* Server EXE, Docker and thin Shell share these capability boundaries. Keep the
   legacy desktop elements in the DOM for its event bindings. */
body.hearth-web [data-desktop-only],
body.hearth-web #privacy-pop,
body.hearth-web .steam-private-btn,
body.hearth-web[data-server-manage="false"] [data-media-settings],
body.hearth-web[data-server-manage="false"] #btn-update,
body.hearth-web[data-server-manage="false"] #btn-delete,
body.hearth-web[data-server-manage="false"] .quick-update,
body.hearth-web[data-server-game-tools="false"] #btn-hooker { display: none !important; }

/* ═══════════ Exit routes (2026-10-04) — renderer/egress-routes.js ═══════════
   The browser bar's "Routes" button and #routes-modal: which connection each
   site's server-side requests leave through, and the two editable site lists.
   Hearthside palette (--wbc-*), like the browser chrome it sits in. The button
   wears a painted signpost (browser-home/routes.webp) beside the VPN lantern;
   its state rides on a word and a number, never on colour alone. */
#view-browser #browser-bar #browser-routes {
  display: inline-flex; align-items: center; gap: 5px;
  width: auto; height: 30px; padding: 0 10px 0 5px;
  border-radius: 999px; color: var(--wbc-dim);
  font-size: 11.5px; font-weight: 650; letter-spacing: .02em; white-space: nowrap;
  transition: background .18s ease, border-color .18s ease, color .18s ease;
}
#view-browser #browser-bar #browser-routes[hidden] { display: none; }
#view-browser #browser-bar #browser-routes::before {
  content: ''; width: 22px; height: 22px; flex: none;
  background: url('browser-home/routes.webp') center / contain no-repeat;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .55));
  transition: transform .16s cubic-bezier(.2, .8, .2, 1);
}
#view-browser #browser-bar #browser-routes:hover { color: var(--wbc-text); }
#view-browser #browser-bar #browser-routes:hover::before { transform: rotate(-6deg) scale(1.08); }
#view-browser #browser-bar #browser-routes:active::before { transform: scale(.92); }
#view-browser #browser-bar #browser-routes .routes-word { line-height: 1; }
#view-browser #browser-bar #browser-routes .routes-count {
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px;
  display: inline-grid; place-items: center;
  background: var(--wbc-ember); color: #1a0f08; font-size: 11px; font-weight: 800;
  font-variant-numeric: tabular-nums;
}
#view-browser #browser-bar #browser-routes .routes-count[hidden] { display: none; }
#view-browser #browser-bar #browser-routes[data-state="fallback"] {
  color: var(--wbc-ember-hi); border-color: rgba(255, 154, 60, .45); background: rgba(255, 154, 60, .1);
}
@media (max-width: 720px) {
  #view-browser #browser-bar #browser-routes .routes-word { display: none; }
  #view-browser #browser-bar #browser-routes { padding: 0 5px; }
}
@media (prefers-reduced-motion: reduce) {
  #view-browser #browser-bar #browser-routes::before { transition: none; }
}

.routes-panel {
  width: min(860px, 94vw);
  background: linear-gradient(180deg, #1d1512, var(--wbc-panel)) !important;
  border-color: var(--wbc-line-hi) !important;
  color: var(--wbc-text);
  padding: 26px 28px 20px;
}
.routes-panel h2 { margin: 0 0 4px; font-size: 22px; letter-spacing: -.01em; color: #fff3e6; }
.routes-panel h3 {
  margin: 0 0 8px; font-size: 11.5px; font-weight: 750; letter-spacing: .12em; text-transform: uppercase;
  color: var(--wbc-ember-hi);
}
.routes-panel .muted { color: var(--wbc-dim); }
.routes-panel .btn { min-height: 40px; }
.routes-panel :is(button, input, summary):focus-visible { outline: 2px solid var(--wbc-ember); outline-offset: 2px; }
.rt-head { display: grid; grid-template-columns: 56px 1fr; gap: 14px; align-items: center; margin: 0 28px 18px 0; }
.rt-mark { filter: drop-shadow(0 4px 10px rgba(0, 0, 0, .55)); }
.rt-lede { margin: 0; font-size: 13.5px; line-height: 1.5; max-width: 62ch; }

/* Right now: the exit ladder, then only the sites that are off their first choice. */
.rt-now { padding: 14px 0 16px; border-top: 1px solid var(--wbc-line); }
.rt-exits {
  list-style: none; margin: 0 0 12px; padding: 0; counter-reset: rung;
  /* One row, one tile per exit (--n is set from the exit count), so the ladder
     reads left to right and never ends on an empty cell. */
  display: grid; grid-template-columns: repeat(var(--n, 3), minmax(0, 1fr)); gap: 8px;
}
.rt-exit {
  counter-increment: rung; position: relative;
  padding: 9px 12px 9px 40px; border-radius: 10px;
  background: rgba(255, 228, 196, .04); border: 1px solid var(--wbc-line);
  display: flex; flex-direction: column; min-width: 0;
}
.rt-exit::before {
  content: counter(rung); position: absolute; left: 11px; top: 50%; transform: translateY(-50%);
  width: 20px; height: 20px; border-radius: 6px; display: grid; place-items: center;
  font-size: 11px; font-weight: 800; background: rgba(150, 222, 98, .16); color: #bff08f;
}
.rt-exit[data-kind="direct"]::before { background: rgba(255, 154, 60, .18); color: var(--wbc-ember-hi); }
.rt-exit-name { font-weight: 650; font-size: 13.5px; }
.rt-exit-sub { font-size: 11.5px; color: var(--wbc-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rt-sites { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.rt-site {
  display: grid; grid-template-columns: 1fr auto; gap: 2px 12px; align-items: center;
  padding: 11px 14px; border-radius: 10px;
  background: rgba(8, 5, 6, .35); border: 1px solid var(--wbc-line);
  animation: rt-in .26s cubic-bezier(.2, .8, .2, 1) both;
}
.rt-site[data-fallback="1"] { border-color: rgba(255, 154, 60, .38); background: linear-gradient(90deg, rgba(255, 154, 60, .09), rgba(8, 5, 6, .35) 60%); }
.rt-site-main { display: flex; align-items: center; gap: 8px; min-width: 0; }
.rt-site-name { font-weight: 700; font-size: 14.5px; overflow: hidden; text-overflow: ellipsis; }
.rt-site-via, .rt-site-why { grid-column: 1; font-size: 12.5px; color: var(--wbc-dim); overflow-wrap: anywhere; }
.rt-site-via b { color: var(--wbc-text); }
.rt-site-why { color: #f4c8a8; }
.rt-retry {
  grid-column: 2; grid-row: 1 / span 3; white-space: nowrap; padding: 0 14px;
  background: rgba(150, 222, 98, .1) !important; border: 1px solid rgba(150, 222, 98, .4) !important;
  color: #d6f7b8 !important; border-radius: 9px;
}
.rt-retry:hover { background: rgba(150, 222, 98, .18) !important; }
.rt-retry:disabled { opacity: .7; cursor: default; }
.rt-tag {
  font-size: 10.5px; font-weight: 750; letter-spacing: .06em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 5px; background: rgba(255, 228, 196, .07); color: var(--wbc-dim);
}
.rt-tag[data-group="personal"] { background: rgba(255, 154, 60, .14); color: var(--wbc-ember-hi); }
.rt-tag[data-group="direct"] { background: rgba(120, 190, 255, .12); color: #b9dcff; }
.rt-calm { list-style: none; padding: 10px 2px; font-size: 13px; color: var(--wbc-dim); }

/* The two lists sit side by side and share one height, so neither leaves a slab. */
.rt-lists {
  display: grid; grid-template-columns: 1fr 1fr; gap: 0;
  border: 1px solid var(--wbc-line); border-radius: 12px; overflow: hidden;
}
.rt-list { padding: 14px 16px 16px; display: flex; flex-direction: column; min-width: 0; }
.rt-list + .rt-list { border-left: 1px solid var(--wbc-line); }
.rt-list[data-group="personal"] { background: linear-gradient(180deg, rgba(255, 154, 60, .06), transparent 70%); }
.rt-list[data-group="direct"] { background: linear-gradient(180deg, rgba(120, 190, 255, .05), transparent 70%); }
.rt-rule { margin: 0 0 10px; font-size: 12.5px; line-height: 1.45; color: var(--wbc-dim); }
.rt-chips { list-style: none; margin: 0 0 12px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; flex: 1; align-content: flex-start; }
.rt-chip {
  display: inline-flex; align-items: center; gap: 2px; padding-left: 10px; border-radius: 8px;
  background: rgba(255, 228, 196, .06); border: 1px solid var(--wbc-line);
  font-size: 13px; animation: rt-in .2s ease both;
}
.rt-chip button {
  width: 32px; height: 32px; border: 0; background: none; color: var(--wbc-dim);
  font-size: 17px; line-height: 1; cursor: pointer; border-radius: 0 7px 7px 0;
}
.rt-chip button:hover { color: #fff; background: rgba(255, 90, 60, .2); }
.rt-chip-empty { font-size: 13px; color: var(--wbc-dim); padding: 6px 0; }
.rt-add { display: flex; gap: 8px; }
.rt-add input {
  flex: 1; min-width: 0; min-height: 40px; padding: 0 12px; border-radius: 9px;
  background: rgba(8, 5, 6, .5); border: 1px solid var(--wbc-line); color: var(--wbc-text);
  font-size: 16px;   /* ≥16px: no zoom-on-focus on phones */
}
.rt-add input::placeholder { color: rgba(241, 230, 218, .38); }
.rt-add input:focus { border-color: rgba(255, 154, 60, .6); outline: none; box-shadow: 0 0 0 3px rgba(255, 154, 60, .14); }
.rt-else { margin: 10px 2px 0; font-size: 12.5px; color: var(--wbc-dim); }
.rt-error { margin: 10px 0 0; padding: 8px 12px; border-radius: 8px; background: rgba(239, 68, 68, .14); color: #fecaca; font-size: 13px; }
.rt-error[hidden] { display: none; }

.rt-test { padding: 16px 0 4px; margin-top: 16px; border-top: 1px solid var(--wbc-line); }
.rt-test-out { margin: 8px 2px 0; font-size: 13px; min-height: 1.4em; color: var(--wbc-dim); overflow-wrap: anywhere; }
.rt-test-out[data-state="good"] { color: #bff08f; }
.rt-test-out[data-state="bad"] { color: #f4c8a8; }

.rt-history { margin-top: 12px; border-top: 1px solid var(--wbc-line); padding-top: 10px; }
.rt-history summary { cursor: pointer; font-size: 13px; font-weight: 650; color: var(--wbc-text); padding: 6px 0; min-height: 32px; }
.rt-events { list-style: none; margin: 6px 0 0; padding: 0; max-height: 220px; overflow-y: auto; }
.rt-events li { display: grid; grid-template-columns: 120px 1fr; gap: 10px; padding: 6px 0; font-size: 12.5px; border-bottom: 1px solid var(--wbc-line); color: var(--wbc-dim); }
.rt-events li b { color: var(--wbc-text); }
.rt-events li[data-kind="recovered"] b { color: #bff08f; }
.rt-events time { font-variant-numeric: tabular-nums; }
.rt-foot { margin: 14px 0 0; font-size: 12px; }
.rt-foot code { padding: 1px 5px; font-size: 11.5px; background: rgba(8, 5, 6, .5); border-radius: 4px; }

@keyframes rt-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }

@media (max-width: 720px) {
  .routes-panel { padding: 20px 16px 16px; width: 100vw; max-height: 100dvh; border-radius: 0; }
  .rt-head { grid-template-columns: 44px 1fr; }
  .rt-head .rt-mark { width: 44px; height: 44px; }
  .rt-lists { grid-template-columns: 1fr; }
  .rt-list + .rt-list { border-left: 0; border-top: 1px solid var(--wbc-line); }
  .rt-site { grid-template-columns: 1fr; }
  .rt-exit { padding: 8px 8px 8px 34px; }
  .rt-exit::before { left: 8px; }
  .rt-exit-sub { display: none; }
  .rt-retry { grid-column: 1; grid-row: auto; margin-top: 6px; justify-self: start; }
  .rt-events li { grid-template-columns: 1fr; gap: 2px; }
}
@media (prefers-reduced-motion: reduce) {
  .rt-site, .rt-chip { animation: none; }
}
/* The panel's own buttons in the ember palette (the global .btn is the cool
   library look, which reads as a different app inside this warm room). */
.routes-panel section { margin: 0; }
.routes-panel .rt-add .btn {
  padding: 0 16px; border-radius: 9px; font-weight: 650;
  background: rgba(255, 154, 60, .12) !important; border: 1px solid rgba(255, 154, 60, .4) !important;
  color: var(--wbc-ember-hi) !important; box-shadow: none !important;
}
.routes-panel .rt-add .btn:hover { background: rgba(255, 154, 60, .22) !important; color: #fff !important; }
.routes-panel .rt-add .btn.primary {
  background: linear-gradient(180deg, var(--wbc-ember-hi), var(--wbc-ember)) !important;
  border-color: transparent !important; color: #1a0f08 !important;
}
.routes-panel .rt-add .btn.primary:hover { filter: brightness(1.08); color: #1a0f08 !important; }
.routes-panel .rt-add .btn:disabled { opacity: .65; cursor: progress; }
.rt-now { padding-bottom: 14px; }
.rt-now + .rt-lists { margin-top: 2px; }
@media (max-width: 720px), (pointer: coarse) {
  .rt-chip { padding-left: 12px; }
  .rt-chip button { width: 44px; height: 44px; }
}
