/* ==========================================================================
   assets/css/app.css - the application shell (client area, auth pages, and
   the two admin panels). Spec: plan 53 (UI conventions), 53.9 (widths),
   53.10 (light palette). Redesigned 2026-09-09.

   ONE SET OF SEMANTIC TOKENS, TWO THEMES. Every rule reads a token; the light
   theme redefines the tokens and nothing else. <html data-theme> is stamped by
   the server (view_theme(): the AVNTHEME cookie, else the AvionettaCorp
   default from settings.site_default_theme), so there is never a flash of the
   wrong theme and the OS preference is never consulted.

   Separate from main.css on purpose: main.css belongs to the marketing page.
   The two share the same tokens and the same self-hosted type (IBM Plex).
   ========================================================================== */

@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/IBMPlexSans-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/IBMPlexSans-400-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/IBMPlexSans-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/IBMPlexSans-500-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/IBMPlexSans-600-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/IBMPlexSans-600-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/IBMPlexMono-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/IBMPlexMono-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* ------------------------------------------------------------------ tokens */
:root {
  --font-sans: 'IBM Plex Sans', ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-mono: 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  --bg:        #080b14;
  --bg-2:      #0c1120;
  --panel:     #10172a;
  --panel-2:   #161e33;
  --panel-3:   #1c2540;
  --line:      #212b46;
  --line-soft: #1a2238;
  --line-strong:#2c3858;
  --text:      #e9edf7;
  --text-2:    #b7c1d9;
  --muted:     #98a3bd;
  --dim:       #6f7a97;
  --faint:     #4d5776;
  --accent:    #4f8cff;
  --accent-2:  #22d3ee;
  --accent-ink:#04122a;
  --accent-soft:rgba(79,140,255,.14);
  --accent-ring:rgba(79,140,255,.35);
  --link:      #8ab4ff;
  --ok:        #34d399; --ok-soft: rgba(52,211,153,.13); --ok-ink:#06281c;
  --warn:      #fbbf24; --warn-soft:rgba(251,191,36,.14); --warn-ink:#2b1d02;
  --bad:       #f87171; --bad-soft: rgba(248,113,113,.14); --bad-ink:#2b0b0b;
  --info:      #7d9bff; --info-soft:rgba(125,155,255,.14);
  --grad-accent: linear-gradient(135deg, var(--accent), var(--accent-2));
  --shadow-1: 0 1px 2px rgba(0,0,0,.35), 0 8px 24px -16px rgba(0,0,0,.6);
  --shadow-2: 0 12px 40px -18px rgba(0,0,0,.7);
  --shadow-pop: 0 24px 60px -20px rgba(0,0,0,.8), 0 0 0 1px var(--line);
  --backdrop: rgba(3,7,18,.72);
  --glow: radial-gradient(900px 420px at 15% -10%, rgba(79,140,255,.16), transparent 60%),
          radial-gradient(700px 360px at 90% 0%, rgba(34,211,238,.10), transparent 60%);
  --radius: 10px; --r-sm: 6px; --r-lg: 14px; --r-xl: 20px;
  --focus: 0 0 0 3px var(--accent-ring);
  --ease: cubic-bezier(.22,.8,.28,1);
  --appbar-h: 60px;
}
:root[data-theme="light"] {
  /* Warm neutrals, off-white page, pure white panels (plan 53.10, 53.10b-d). */
  --bg:        #f5f4f1;
  --bg-2:      #eeece8;
  --panel:     #ffffff;
  --panel-2:   #f7f6f3;
  --panel-3:   #efede9;
  --line:      #e2dfda;
  --line-soft: #ebe8e3;
  --line-strong:#cfcac3;
  --text:      #1c1917;
  --text-2:    #3f3a36;
  --muted:     #57534e;
  --dim:       #75706a;
  --faint:     #9a948d;
  --accent:    #1e4fd6;
  --accent-2:  #0e7490;
  --accent-ink:#ffffff;
  --accent-soft:rgba(30,79,214,.10);
  --accent-ring:rgba(30,79,214,.28);
  --link:      #1e40af;
  --ok:        #047857; --ok-soft: rgba(4,120,87,.10);   --ok-ink:#ffffff;
  --warn:      #b45309; --warn-soft:rgba(180,83,9,.11);  --warn-ink:#ffffff;
  --bad:       #b91c1c; --bad-soft: rgba(185,28,28,.10); --bad-ink:#ffffff;
  --info:      #1e40af; --info-soft:rgba(30,64,175,.10);
  --grad-accent: linear-gradient(135deg, #1e4fd6, #0e7490);
  --shadow-1: 0 1px 2px rgba(28,25,23,.05), 0 8px 24px -14px rgba(28,25,23,.14);
  --shadow-2: 0 12px 32px -18px rgba(28,25,23,.22);
  --shadow-pop: 0 24px 60px -20px rgba(28,25,23,.35), 0 0 0 1px var(--line);
  --backdrop: rgba(28,25,23,.45);
  --glow: radial-gradient(900px 420px at 15% -10%, rgba(30,79,214,.07), transparent 60%),
          radial-gradient(700px 360px at 90% 0%, rgba(14,116,144,.06), transparent 60%);
}

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

/* THE hidden ATTRIBUTE HAS TO WIN. Any author rule that sets `display` on the
   same element beats the UA sheet's [hidden]{display:none}; .vstage__veil and
   .prog both set one, and the veil was painted over the player from the first
   frame. !important here is what every CSS reset does for this attribute. */
[hidden] { display: none !important; }

html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--bg);
  background-image: var(--glow);
  background-repeat: no-repeat;
  color: var(--text);
  font: 15px/1.6 var(--font-sans);
  min-height: 100vh; min-height: 100dvh;
  display: flex; flex-direction: column;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
a { color: var(--link); text-decoration: none; }
a:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; }
img, svg { max-width: 100%; }
code, pre, kbd { font-family: var(--font-mono); }
pre { overflow-wrap: anywhere; }
h1, h2, h3, h4 { color: var(--text); letter-spacing: -.01em; line-height: 1.25; }
h1 { font-size: 24px; margin: 0 0 6px; font-weight: 600; }
h2 { font-size: 17px; margin: 30px 0 12px; font-weight: 600; }
h3 { font-size: 15px; margin: 18px 0 8px; font-weight: 600; }
.sub { color: var(--muted); margin: 0 0 24px; font-size: 14px; line-height: 1.55; }
.muted { color: var(--muted); }
.dim   { color: var(--dim); font-size: 13px; }
.hint  { font-size: 12.5px; color: var(--dim); margin-top: 5px; line-height: 1.5; }
.mono, td.mono { font-family: var(--font-mono); font-size: 12.5px; }
.toolbar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 0 0 14px; }
.toolbar--right { justify-content: flex-end; }
.stack { display: flex; flex-direction: column; gap: 12px; }
.rowactions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 12px; }

/* Focus must stay visible: never `outline: none` (plan 53.10). */
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; }

.skip { position: absolute; left: -9999px; background: var(--accent); color: var(--accent-ink);
        padding: 10px 16px; border-radius: 0 0 8px 0; z-index: 100; font-weight: 600; }
.skip:focus { left: 0; top: 0; }
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }

/* ----------------------------------------------------------------- app bar */
.appbar {
  border-bottom: 1px solid var(--line);
  background: color-mix(in srgb, var(--bg-2) 82%, transparent);
  backdrop-filter: blur(14px) saturate(140%); -webkit-backdrop-filter: blur(14px) saturate(140%);
  position: sticky; top: 0; z-index: 40;
}
.appbar__in {
  max-width: 1120px; margin: 0 auto;
  padding: 0 20px; min-height: var(--appbar-h);
  display: flex; align-items: center; gap: 10px;
}
.appbar__logo {
  display: inline-flex; align-items: center; gap: 9px;
  font-weight: 600; font-size: 17px; letter-spacing: -.02em;
  color: var(--text); text-decoration: none; white-space: nowrap; min-width: 0;
}
.appbar__logo:hover { text-decoration: none; color: var(--text); }
.appbar__logo img { display: block; flex: 0 0 auto; width: 28px; height: 28px; filter: drop-shadow(0 4px 12px rgba(79,140,255,.35)); }
.appbar__logo b { font-weight: 600; background: var(--grad-accent); -webkit-background-clip: text; background-clip: text; color: transparent; -webkit-text-fill-color: transparent; }
.appbar__home {
  flex: 0 0 auto; margin-left: 6px; padding: 7px 12px; border-radius: 8px; font-size: 14px;
  color: var(--muted); border: 1px solid var(--line); text-decoration: none; white-space: nowrap;
  display: inline-flex; align-items: center; gap: 6px; min-height: 36px;
  transition: color .15s, border-color .15s, background .15s;
}
.appbar__home:hover { color: var(--text); border-color: var(--accent); background: var(--panel-2); text-decoration: none; }
.appbar__nav { margin-left: auto; display: flex; align-items: center; gap: 4px; }
.appbar__nav a {
  color: var(--muted); text-decoration: none; padding: 8px 11px; border-radius: 8px; font-size: 14px;
  font-weight: 500; white-space: nowrap; display: inline-flex; align-items: center; min-height: 36px;
}
.appbar__nav a:hover { color: var(--text); background: var(--panel-2); text-decoration: none; }
.appbar__nav a.is-active { color: var(--text); background: var(--accent-soft); }
.appbar__nav .nav__close, .appbar__nav .nav__foot { display: none; }

.iconbtn, .themetoggle, .navtoggle {
  flex: 0 0 auto; width: 40px; height: 40px; border-radius: 10px;
  display: inline-flex; align-items: center; justify-content: center; padding: 0;
  font: inherit; font-size: 17px; line-height: 1; text-decoration: none; cursor: pointer;
  color: var(--muted); border: 1px solid var(--line); background: var(--panel);
  transition: color .15s, border-color .15s, background .15s;
}
.iconbtn:hover, .themetoggle:hover, .navtoggle:hover { color: var(--text); border-color: var(--accent); text-decoration: none; }
.iconbtn svg, .themetoggle svg, .navtoggle svg { width: 19px; height: 19px; }
.themetoggle { margin-left: 6px; }
.themetoggle .ico--sun { display: none; }
:root[data-theme="light"] .themetoggle .ico--moon { display: none; }
:root[data-theme="light"] .themetoggle .ico--sun { display: block; }
.navtoggle { display: none; }

/* ------------------------------------------------- display currency (60.22)
   The top-bar picker. Sits next to the theme switch and matches its height so
   the bar keeps one line. The label is for screen readers only: the bar has no
   room for the word, and a bare select with no name is unusable without it.
   The Set button exists for scripting-off; app.js hides it and submits on
   change (the same progressive pattern as the theme link). */
.curswitch { display: inline-flex; align-items: center; gap: 6px; margin-left: 6px; flex: 0 0 auto; }
.curswitch__lb {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.curswitch__sel {
  height: 40px; padding: 0 28px 0 10px; border-radius: 10px;
  font: inherit; font-size: 13px; font-weight: 600; line-height: 1; cursor: pointer;
  color: var(--muted); border: 1px solid var(--line); background: var(--panel);
  transition: color .15s, border-color .15s;
  /* the native arrow differs per platform and per theme; draw our own */
  -webkit-appearance: none; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2398a3bd' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 8px center; background-size: 14px;
}
.curswitch__sel:hover { color: var(--text); border-color: var(--accent); }
.curswitch__sel:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.curswitch__go {
  height: 40px; padding: 0 10px; border-radius: 10px; font: inherit; font-size: 13px;
  cursor: pointer; color: var(--muted); border: 1px solid var(--line); background: var(--panel);
}
.curswitch__go:hover { color: var(--text); border-color: var(--accent); }
/* Below the hamburger breakpoint the bar is tight: keep the picker (it is the
   point of the exercise) but let it shrink. */
@media (max-width: 560px) {
  .curswitch { margin-left: 4px; }
  .curswitch__sel { padding-right: 24px; font-size: 12px; }
}
.navbackdrop { display: none; }

/* ------------------------------------------------------------------ layout */
main { flex: 1; width: 100%; min-width: 0; }
.wrap { max-width: 1120px; margin: 0 auto; padding: 28px 20px 56px; }
.body-wide .wrap, body.admin .wrap { max-width: 1600px; }

/* Centred card, for login / signup / reset. */
.card { max-width: 440px; margin: 0 auto; padding: 40px 20px 56px; width: 100%; }
.card__box { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 30px 28px; box-shadow: var(--shadow-1); }
/* .card--wide : the COMMERCE pages (plan 53.9). Login etc. keep 440. */
.card--wide { max-width: 1040px; }
.card--wide .card__box { padding: 34px 38px; }
.card--wide .buynow__thumb { width: 200px; height: 113px; }
.card--wide .buynow__item { gap: 20px; }
.card--wide .buynow__item h2 { font-size: 19px; }
.card--wide .buynow__item p { font-size: 14px; max-width: 62ch; }

.appfoot {
  border-top: 1px solid var(--line);
  padding: 20px; color: var(--dim); font-size: 13px;
  display: flex; flex-wrap: wrap; gap: 10px 20px; justify-content: center; align-items: center;
  padding-bottom: max(20px, env(safe-area-inset-bottom));
}
.appfoot p { margin: 0; }
.appfoot nav { display: flex; gap: 16px; flex-wrap: wrap; justify-content: center; }
.appfoot a { color: var(--dim); text-decoration: none; padding: 4px 0; }
.appfoot a:hover { color: var(--text); }

/* ------------------------------------------------------------------- forms */
.field { margin-bottom: 16px; min-width: 0; }
.field > label { display: block; margin-bottom: 6px; font-size: 13px; font-weight: 600; color: var(--muted); }
.field .hint { margin-top: 5px; }

input[type=text], input[type=email], input[type=password], input[type=tel], input[type=search],
input[type=number], input[type=url], input[type=date], input[type=datetime-local], select, textarea {
  width: 100%; padding: 10px 13px; min-height: 42px;
  background: var(--panel-2); border: 1px solid var(--line-strong); border-radius: 8px;
  color: var(--text); font: inherit; line-height: 1.35;
  transition: border-color .15s, box-shadow .15s;
}
:root[data-theme="light"] input, :root[data-theme="light"] select, :root[data-theme="light"] textarea { background: #fff; }
input::placeholder, textarea::placeholder { color: var(--faint); opacity: 1; }
input:hover, select:hover, textarea:hover { border-color: var(--accent); }
input:focus, select:focus, textarea:focus { border-color: var(--accent); outline: none; box-shadow: var(--focus); }
input[aria-invalid=true] { border-color: var(--bad); }
input:disabled, input[readonly], select:disabled, textarea:disabled { opacity: .7; cursor: not-allowed; background: var(--panel-3); }
input[readonly] { cursor: default; }
textarea { min-height: 100px; resize: vertical; line-height: 1.55; }
select { appearance: none; -webkit-appearance: none; padding-right: 34px; cursor: pointer;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2398a3bd' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat: no-repeat; background-position: right 10px center; background-size: 16px; }
:root[data-theme="light"] select { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2357534e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>"); }
input[type=file] { width: 100%; padding: 8px 10px; font-size: 13.5px; background: var(--panel-2); border: 1px solid var(--line-strong); border-radius: 8px; color: var(--text); cursor: pointer; }
input[type=file]::file-selector-button { font: inherit; font-size: 13px; font-weight: 600; border: 1px solid var(--line-strong); background: var(--panel); color: var(--text); border-radius: 6px; padding: 5px 10px; margin-right: 10px; cursor: pointer; }
input[type=checkbox], input[type=radio] { width: 18px; height: 18px; accent-color: var(--accent); cursor: pointer; flex: none; margin: 0; }

.check { display: flex; gap: 10px; align-items: flex-start; margin-bottom: 14px; font-size: 14px; cursor: pointer; }
.check input { margin-top: 3px; }
.check label, .check > span { font-size: 13.5px; color: var(--muted); line-height: 1.5; }
.check--terms { margin: 0 0 12px; }
fieldset { border: 1px solid var(--line); border-radius: 10px; padding: 12px 16px 4px; margin: 0 0 16px; min-width: 0; }
legend { padding: 0 6px; font-size: 13px; color: var(--muted); }
fieldset .check { margin-bottom: 8px; }

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 11px 20px; min-height: 42px;
  border: 1px solid var(--line-strong); border-radius: 9px;
  font: 600 14.5px/1.2 var(--font-sans); cursor: pointer;
  text-decoration: none; color: var(--text); background: var(--panel);
  white-space: nowrap; vertical-align: middle; position: relative;
  transition: transform .15s var(--ease), box-shadow .15s, background .15s, border-color .15s, color .15s;
}
.btn:hover { text-decoration: none; color: var(--text); border-color: var(--accent); }
.btn--primary { background: var(--grad-accent); border-color: transparent; color: var(--accent-ink); box-shadow: 0 6px 18px -10px rgba(79,140,255,.6); }
.btn--primary:hover { color: var(--accent-ink); transform: translateY(-1px); box-shadow: 0 10px 24px -10px rgba(79,140,255,.7); border-color: transparent; }
.btn--ghost { background: transparent; border-color: var(--line-strong); color: var(--text); }
.btn--ghost:hover { background: var(--panel-2); border-color: var(--accent); }
.btn--danger { background: var(--bad); border-color: transparent; color: #fff; }
.btn--danger:hover { color: #fff; background: color-mix(in srgb, var(--bad) 85%, #000); }
.btn--block { width: 100%; display: flex; }
.btn--sm { padding: 6px 12px; min-height: 34px; font-size: 13px; border-radius: 8px; }
.btn--xl { font-size: 17px; font-weight: 700; padding: 15px 30px; min-height: 52px; width: min(100%, 420px); }
.btn--half { font-size: 13.5px; font-weight: 700; padding: 7px 14px; letter-spacing: .04em; min-height: 36px; }
.btn[disabled], .btn.is-disabled { opacity: .5; cursor: not-allowed; transform: none; box-shadow: none; }
.btn.is-disabled { pointer-events: auto; }
/* D268: a plain LINK can be consent-gated too (the "Sign in" line on the
   free-video page), and it must look as inert as the buttons do. */
a.is-disabled:not(.btn) { opacity: .55; cursor: not-allowed; text-decoration: none; }
.btn--google { background: #fff; color: #1f1f1f; border: 1px solid #dadce0; font-weight: 500; }
.btn--google:hover { background: #f7f8f8; border-color: #d2d5d9; color: #1f1f1f; }
.btn--google img { display: block; flex: 0 0 auto; }
/* Very light blue with dark-blue text (owner request 2026-08-14): fixed, so it
   reads the same in both themes. */
.btn--soft { background: #dbe9ff; border-color: #b7d2ff; color: #14356b; }
.btn--soft:hover { background: #c7dcff; border-color: #9dc2ff; color: #0f2a56; }
/* Dark grey (owner request 2026-08-14): fixed for the same reason. */
.btn--grey { background: #2b2f38; border-color: #3a4050; color: #e8eaed; }
.btn--grey:hover { background: #353b47; border-color: #4a5162; color: #fff; }
@media (pointer: coarse) {
  .btn { min-height: 44px; }
  .btn--sm { min-height: 38px; }
  .btn--sm::after { content: ""; position: absolute; inset: -4px; }
  .iconbtn, .themetoggle, .navtoggle { width: 44px; height: 44px; }
}

.formfoot { margin-top: 20px; font-size: 13.5px; color: var(--muted); text-align: center; }
.formfoot p { margin: 6px 0; }
.sep { display: flex; align-items: center; gap: 12px; margin: 22px 0; color: var(--dim); font-size: 12px; }
.sep::before, .sep::after { content: ""; flex: 1; height: 1px; background: var(--line); }
/* Honeypot: hidden with CSS, not type=hidden, which bots detect (plan 12.6). */
.hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }

/* ----------------------------------------------------------------- flashes */
.flash, .alert {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 12px 14px; border-radius: 10px;
  border: 1px solid var(--line); background: var(--panel-2);
  margin-bottom: 18px; font-size: 14px; line-height: 1.5;
}
.flash__i { flex: none; width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center; font-size: 12px; font-weight: 700; background: var(--line-strong); color: var(--text); margin-top: 1px; }
.flash--success { border-color: color-mix(in srgb, var(--ok) 45%, transparent); background: var(--ok-soft); }
.flash--success .flash__i { background: var(--ok); color: var(--ok-ink); }
.flash--error, .alert--error { border-color: color-mix(in srgb, var(--bad) 50%, transparent); background: var(--bad-soft); }
.flash--error .flash__i { background: var(--bad); color: #fff; }
.flash--warning { border-color: color-mix(in srgb, var(--warn) 50%, transparent); background: var(--warn-soft); }
.flash--warning .flash__i { background: var(--warn); color: var(--warn-ink); }
.flash--info { border-color: color-mix(in srgb, var(--info) 50%, transparent); background: var(--info-soft); }
.flash--info .flash__i { background: var(--info); color: #fff; }
.err { color: var(--bad); font-size: 13px; margin-top: 6px; }
.errlist { margin: 0 0 16px; padding: 12px 14px 12px 30px; border-radius: 10px; border: 1px solid color-mix(in srgb, var(--bad) 50%, transparent); background: var(--bad-soft); color: var(--text); font-size: 13.5px; }
.errlist li { margin: 3px 0; }
.err-inline { color: var(--bad); font-weight: 600; }
.ok-inline { color: var(--ok); font-weight: 600; }

/* ------------------------------------------------------------------ panels */
.panel { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 22px 24px; margin-bottom: 18px; box-shadow: var(--shadow-1); min-width: 0; }
.panel h2 { margin-top: 0; }
.panel--sub { padding: 14px 18px; }
.panel--sub summary { cursor: pointer; font-weight: 600; }
.panel--sub[open] summary { margin-bottom: 12px; }
.grid { display: grid; gap: 16px; }
.grid > * { min-width: 0; }
@media (min-width: 760px) { .grid--2 { grid-template-columns: 1fr 1fr; } }
.kv { display: grid; grid-template-columns: 150px 1fr; gap: 8px 16px; font-size: 14px; margin: 0; }
.kv dt { color: var(--dim); }
.kv dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.uid { font-family: var(--font-mono); font-size: 12.5px; letter-spacing: .04em; background: var(--panel-2); border: 1px solid var(--line); padding: 2px 7px; border-radius: 5px; overflow-wrap: anywhere; }
.empty { text-align: center; padding: 44px 20px; color: var(--muted); border: 1px dashed var(--line-strong); border-radius: var(--r-lg); }
.empty h3 { margin: 0 0 8px; color: var(--text); font-size: 16px; }
.empty p { margin: 6px 0; }
.backlink { margin: 0 0 8px; font-size: 13.5px; }
.backlink a { color: var(--muted); text-decoration: none; }
.backlink a:hover { color: var(--text); }
.ctdmrow { border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px 4px; margin-bottom: 10px; }

/* ------------------------------------------------------------------- table */
.tablewrap, .tablewrap--wide {
  position: relative; overflow-x: auto; overscroll-behavior-x: contain; -webkit-overflow-scrolling: touch;
  border: 1px solid var(--line); border-radius: 10px; max-width: 100%;
  scrollbar-width: thin; scrollbar-color: var(--line-strong) transparent;
  background: var(--panel);
  background-image: linear-gradient(to right, var(--panel) 40%, transparent), linear-gradient(to left, var(--panel) 40%, transparent),
    radial-gradient(farthest-side at 0 50%, rgba(0,0,0,.28), transparent), radial-gradient(farthest-side at 100% 50%, rgba(0,0,0,.28), transparent);
  background-position: left center, right center, left center, right center; background-repeat: no-repeat;
  background-size: 40px 100%, 40px 100%, 16px 100%, 16px 100%; background-attachment: local, local, scroll, scroll;
}
:root[data-theme="light"] .tablewrap, :root[data-theme="light"] .tablewrap--wide {
  background-image: linear-gradient(to right, var(--panel) 40%, transparent), linear-gradient(to left, var(--panel) 40%, transparent),
    radial-gradient(farthest-side at 0 50%, rgba(28,25,23,.16), transparent), radial-gradient(farthest-side at 100% 50%, rgba(28,25,23,.16), transparent);
}
.tablewrap::-webkit-scrollbar { height: 10px; }
.tablewrap::-webkit-scrollbar-thumb { background: var(--line-strong); border-radius: 8px; border: 2px solid var(--panel); }
table.data { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 14px; }
table.data th, table.data td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--line-soft); vertical-align: middle; }
table.data thead th { color: var(--muted); font-weight: 600; font-size: 11.5px; text-transform: uppercase; letter-spacing: .06em; background: var(--panel-2); white-space: nowrap; position: sticky; top: 0; z-index: 1; }
table.data tbody tr:last-child td { border-bottom: 0; }
table.data tbody tr:hover > td { background: color-mix(in srgb, var(--panel-2) 70%, transparent); }
table.data td.num, table.data th.num { text-align: right; font-variant-numeric: tabular-nums; }
table.data tfoot td, table.data tfoot th { border-top: 1px solid var(--line); border-bottom: 0; font-weight: 600; background: var(--panel-2); }
table.data th a { color: var(--muted); text-decoration: none; }
table.data th a:hover { color: var(--text); }
table.data td form { margin: 0; }
.tablewrap--wide .data { min-width: 1180px; }
img.thumb { width: 64px; height: 36px; object-fit: cover; border-radius: 4px; background: var(--bg); border: 1px solid var(--line); display: block; }
code.uid { font-size: 12px; }
.rowacts { white-space: nowrap; }
.rowacts .btn + .btn { margin-left: 6px; }

.badge { display: inline-block; padding: 3px 9px; border-radius: 20px; font-size: 12px; font-weight: 600; background: var(--panel-2); border: 1px solid var(--line-strong); color: var(--muted); white-space: nowrap; vertical-align: middle; }
.badge--ok   { color: var(--ok);   border-color: color-mix(in srgb, var(--ok) 45%, transparent);   background: var(--ok-soft); }
.badge--warn { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 45%, transparent); background: var(--warn-soft); }
.badge--bad  { color: var(--bad);  border-color: color-mix(in srgb, var(--bad) 45%, transparent);  background: var(--bad-soft); }

.pager { display: flex; flex-wrap: wrap; gap: 10px 14px; align-items: center; margin-top: 16px; }

/* toolbars above tables (plan 53.5) */
.tbar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 14px; }
.tbar input[type=search], .tbar input[type=text] { flex: 1 1 240px; min-width: 0; }
.tbar select { flex: 0 1 auto; width: auto; min-width: 140px; }
.tbar .btn { flex: 0 0 auto; }
.tbar--sub { border-top: 1px solid var(--line-soft); padding-top: 12px; font-size: 13px; }
.tbar .ml-auto, .tbar .dim[style*="margin-left:auto"] { margin-left: auto; }
.pill { display: inline-flex; align-items: center; padding: 5px 12px; min-height: 32px; border-radius: 20px; border: 1px solid var(--line-strong); color: var(--muted); text-decoration: none; font-size: 13px; font-variant-numeric: tabular-nums; }
.pill:hover { background: var(--panel-2); color: var(--text); text-decoration: none; }
.pill.is-on { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); }
.inline-clear { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.inline-clear input[type=text] { width: auto; flex: 1 1 160px; min-height: 36px; padding: 6px 9px; }
form.inline { display: inline; margin: 0; }

/* -------------------------------------------------------------------- tabs */
.tabs { display: flex; gap: 4px; margin: 0 0 22px; border-bottom: 1px solid var(--line); overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.tabs::-webkit-scrollbar { display: none; }
.tabs a { padding: 10px 14px; min-height: 42px; display: inline-flex; align-items: center; color: var(--muted); text-decoration: none; font-size: 14px; font-weight: 500; border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap; flex: none; border-radius: 8px 8px 0 0; }
.tabs a:hover { color: var(--text); background: var(--panel-2); text-decoration: none; }
.tabs a.is-on { color: var(--text); border-bottom-color: var(--accent); }
.tabs--sub { border-bottom: 0; margin-bottom: 14px; flex-wrap: wrap; gap: 6px; }
.tabs--sub a { font-size: 13px; padding: 6px 12px; min-height: 34px; border: 1px solid var(--line); border-radius: 999px; margin: 0; }
.tabs--sub a.is-on { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); }

/* ------------------------------------------------------------------- modal */
dialog.modal {
  width: min(760px, calc(100vw - 32px)); max-height: calc(100dvh - 32px);
  border: 1px solid var(--line); border-radius: var(--r-lg);
  background: var(--panel); color: var(--text); padding: 0; box-shadow: var(--shadow-pop);
}
dialog.modal::backdrop { background: var(--backdrop); backdrop-filter: blur(4px); }
dialog.modal .modal__x { position: absolute; top: 8px; right: 8px; margin: 0; z-index: 2; }
dialog.modal .modal__x button { background: none; border: 0; color: var(--dim); font-size: 26px; line-height: 1; cursor: pointer; padding: 6px 10px; border-radius: 8px; min-width: 40px; min-height: 40px; }
dialog.modal .modal__x button:hover { color: var(--text); background: var(--panel-2); }
.modal__in { padding: 26px 28px 28px; }
.modal__in h2 { margin: 0 44px 4px 0; font-size: 19px; }
.modal__foot { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--line); }
.modal__foot .spacer { margin-left: auto; }
.prog { height: 8px; border-radius: 6px; background: var(--bg); border: 1px solid var(--line); overflow: hidden; margin-top: 10px; }
.prog > i { display: block; height: 100%; width: 0; background: var(--grad-accent); transition: width .2s; }
.ro { display: grid; grid-template-columns: 150px 1fr; gap: 6px 16px; font-size: 13px; margin: 4px 0 0; }
.ro dt { color: var(--dim); }
.ro dd { margin: 0; font-family: var(--font-mono); font-size: 12px; overflow-wrap: anywhere; }
dialog.modal--video { width: min(1000px, calc(100vw - 32px)); }
.vpreview { padding: 22px 24px 20px; }
.vpreview h2 { margin: 0 44px 12px 0; font-size: 17px; }
.vpreview__stage { position: relative; aspect-ratio: 16 / 9; max-height: 72vh; background: #000; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }
.vpreview__stage iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.vpreview .modal__foot { margin-top: 14px; }

/* ------------------------------------------ attachments (plan 51.11, 43.12) */
.attbox { border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px 4px; margin: 14px 0; min-width: 0; }
.attbox legend { padding: 0 6px; font-weight: 600; }
.attlist { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 8px; }
.attlist__row { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--panel-2); min-width: 0; }
.attlist__row.is-failed { border-color: #c0392b; }
.attlist__icon { flex: 0 0 auto; width: 40px; height: 40px; border-radius: 8px; display: grid; place-items: center; font-size: 11px; font-weight: 700; letter-spacing: .04em; background: var(--accent-soft); color: var(--accent); }
.attlist__meta { flex: 1 1 auto; min-width: 0; }
.attlist__name { display: block; font-weight: 600; overflow-wrap: anywhere; }
.attlist__sub { display: block; font-size: 12px; color: var(--dim); overflow-wrap: anywhere; }
.attlist__acts { flex: 0 0 auto; display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
.attlist__row .prog { display: block; margin-top: 6px; }
.attpanel h2 { margin-top: 0; }
.attpanel .attlist { margin-top: 12px; }
.attpreview { padding: 22px 24px 20px; }
.attpreview h2 { margin: 0 44px 12px 0; font-size: 17px; overflow-wrap: anywhere; }
.attpreview__stage { display: grid; place-items: center; background: #000; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; min-height: 140px; }
.attpreview__media { display: block; max-width: 100%; max-height: 72vh; width: auto; height: auto; }
audio.attpreview__media { width: calc(100% - 32px); max-width: 560px; margin: 32px 16px; }
.attpreview__fail { color: #fff; padding: 16px; text-align: center; }
.attpreview .modal__foot { margin-top: 14px; }
@media (max-width: 640px) {
  .attlist__row { flex-wrap: wrap; }
  .attlist__acts { width: 100%; justify-content: stretch; }
  .attlist__acts .btn { flex: 1 1 0; text-align: center; }
  .attpreview { padding: 18px 12px 14px; }
  .attpreview__media { max-height: 62vh; }
}

/* ------------------------------------------------------ catalogue + player */
.vgrid { display: grid; gap: 20px; grid-template-columns: 1fr; }
@media (min-width: 640px)  { .vgrid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .vgrid { grid-template-columns: repeat(3, 1fr); } }
.vcard { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); overflow: hidden; display: flex; flex-direction: column; box-shadow: var(--shadow-1); transition: transform .2s var(--ease), border-color .2s; color: inherit; text-decoration: none; min-width: 0; }
.vcard:hover { transform: translateY(-2px); border-color: var(--line-strong); text-decoration: none; color: inherit; }
.vcard__img { display: block; position: relative; line-height: 0; background: var(--bg-2); }
.vcard__img img { width: 100%; height: auto; aspect-ratio: 16/9; object-fit: cover; }
.vcard__dur { position: absolute; right: 8px; bottom: 8px; background: rgba(3,5,10,.82); color: #e8eaed; font-size: 12px; padding: 2px 7px; border-radius: 4px; font-variant-numeric: tabular-nums; }
.vcard__b, .vcard__body { padding: 16px 18px 18px; display: flex; flex-direction: column; flex: 1; min-width: 0; }
.vcard__body strong { font-size: 15px; margin-bottom: 4px; }
.vcard__b h2 { margin: 0 0 6px; font-size: 16px; }
.vcard__b h2 a { color: var(--text); text-decoration: none; }
.vcard__b h2 a:hover { color: var(--accent); }
.vcard__b p { margin: 0 0 12px; font-size: 13.5px; }
.vcard__meta { display: flex; gap: 12px; margin: 6px 0 0; font-size: 12px; color: var(--dim); font-variant-numeric: tabular-nums; }
.vcard__meta span + span::before { content: "·"; margin-right: 12px; color: var(--line-strong); }
.vcard__f { margin-top: auto !important; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; padding-top: 12px; }
/* THE BUY ROW - two equal halves (owner request 2026-09-09). Grid, not flex,
   because 1fr 1fr is an equal SPLIT. The form is a grid item too. */
.vcard__buy { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px; align-items: stretch; }
.vcard__buy > form { margin: 0; display: grid; min-width: 0; }
.vcard__buy .btn { width: 100%; height: 100%; padding-left: 8px; padding-right: 8px; }
.vposter { width: 100%; height: auto; aspect-ratio: 16/9; object-fit: cover; border-radius: 10px; border: 1px solid var(--line); margin-bottom: 18px; }

/* The player stage stays black in both themes - letterboxing against any
   other colour looks like a rendering fault. */
.vstage { position: relative; width: 100%; aspect-ratio: 16/9; background: #000; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; margin-bottom: 16px; }
.vstage__frame, .vstage__frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
/* The RT player's <video> fills the frame exactly as the BUN iframe does, so
   switching tabs does not move or resize the stage (owner instruction
   2026-09-22). object-fit: contain letterboxes rather than cropping. */
.vstage__frame video.r2video { position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: contain; background: #000; }

/* THE STAGE GOES FULLSCREEN, NOT THE VIDEO (2026-09-22), so the watermark
   overlay comes with it. It also grows with the screen: 12px on a monitor-wide
   frame is too small to identify anybody from a recording. */
.vstage:fullscreen, .vstage:-webkit-full-screen {
  width: 100%; height: 100%; max-height: none; aspect-ratio: auto;
  border: 0; border-radius: 0; margin: 0; }
.vstage:fullscreen .vstage__mark, .vstage:-webkit-full-screen .vstage__mark {
  font-size: clamp(14px, 1.5vw, 28px); }
.vfs { position: absolute; top: 10px; right: 10px; z-index: 4; width: 38px; height: 38px;
  border: 0; border-radius: 8px; background: rgba(0,0,0,.55); color: #fff;
  display: grid; place-items: center; cursor: pointer; opacity: .8; transition: opacity .15s; }
.vfs:hover, .vfs:focus-visible { opacity: 1; }
.vfs:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* BUN | RT - only rendered when a video has BOTH players available. */
/* Centred, so they stay with the player: a portrait video's stage is narrow
   and centred, and left-aligned tabs then sat far away from it. */
.vtabs { display: flex; width: fit-content; gap: 4px; margin: 0 auto 10px; padding: 4px;
  border: 1px solid var(--line); border-radius: 10px; background: var(--panel); }
.vtab { min-width: 64px; padding: 7px 16px; border: 0; border-radius: 7px;
  background: transparent; color: var(--muted); font: inherit; font-size: 13px;
  font-weight: 700; letter-spacing: .06em; cursor: pointer;
  transition: background .15s, color .15s; }
.vtab:hover { color: var(--text); }
.vtab.is-active { background: var(--accent); color: #fff; }
.vtab:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.vstage__mark { position: absolute; z-index: 3; pointer-events: none; font: 600 12px/1.2 var(--font-mono); color: rgba(255,255,255,.34); text-shadow: 0 1px 2px rgba(0,0,0,.85), 0 0 1px rgba(0,0,0,.9); letter-spacing: .04em; transition: left .8s ease, top .8s ease; left: 50%; top: 50%;
  /* WRAPS, never clips (2026-09-22). It was white-space: nowrap, and on a narrow
     portrait stage the ~58-character line overflowed and .vstage (overflow:
     hidden) cut BOTH ends off - including the start of the customer ID, the
     one thing the watermark exists to show. Seen in a screenshot. On a wide
     landscape stage it still fits on one line, so nothing changes there. */
  max-width: 92%; white-space: normal; overflow-wrap: anywhere; text-align: center; }
.vstage__veil { position: absolute; inset: 0; z-index: 4; display: grid; align-content: center; justify-items: center; gap: 14px; text-align: center; padding: 20px; background: rgba(6,8,13,.94); color: #b7c1d9; font-size: 14px; }
.vstage__veil p { margin: 0; max-width: 34ch; line-height: 1.5; }
.vnotice { margin-bottom: 22px; font-size: 13px; }
body.player .vstage { user-select: none; -webkit-user-select: none; }

.keepit { margin-bottom: 22px; }
.keepit h2 { font-size: 16px; margin: 0 0 10px; }
.keepit ul { margin: 0 0 16px; padding-left: 18px; color: var(--muted); font-size: 14px; line-height: 1.65; }
.keepit li { margin: 4px 0; }
.keepit li time { color: var(--text); white-space: nowrap; }
.keepit p { margin: 0; }
.keepit .hint { margin-top: 10px; }
.keepit p .btn + .btn { margin-left: 8px; }
.keepbox { margin-top: 18px; }
.keepbox__form { display: flex; gap: 16px; align-items: center; justify-content: space-between; flex-wrap: wrap; margin: 0; }
.keepbox__form p { margin: 4px 0 0; font-size: 13.5px; }
.keepbox__form .btn { flex: 0 0 auto; }
.keepbox__has { margin: 0; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }

.statrow { display: grid; gap: 12px; margin: 0 0 18px; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); }
.stat { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; box-shadow: var(--shadow-1); position: relative; overflow: hidden; min-width: 0; }
.stat::after { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: var(--grad-accent); }
.stat__n { display: block; font-size: 22px; font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; letter-spacing: -.02em; overflow-wrap: anywhere; }
.stat__l { display: block; font-size: 12px; color: var(--dim); margin-top: 2px; }

.price { font-size: 26px; font-weight: 700; color: var(--text); margin: 12px 0 18px; }
.fxbox { border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; margin: 0 0 18px; background: var(--panel-2); }
.fxbox h3 { font-size: 13px; font-weight: 600; color: var(--dim); margin: 0 0 8px; text-transform: uppercase; letter-spacing: .06em; }
.fxwrap { overflow-x: auto; margin: 0 0 10px; }
.fxtable { width: 100%; border-collapse: collapse; font-size: 14px; font-variant-numeric: tabular-nums; }
.fxtable th, .fxtable td { padding: 6px 8px; text-align: center; white-space: nowrap; }
.fxtable th { color: var(--dim); font-size: 11px; font-weight: 600; letter-spacing: .06em; border-bottom: 1px solid var(--line-soft); }
.fxtable td { color: var(--text); font-weight: 600; }

.agreement { margin: 0 0 18px; }
.agreement h3 { font-size: 15px; margin: 0 0 8px; }
.agreement__body { max-height: 220px; overflow-y: auto; border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; background: var(--bg-2); font-size: 13px; line-height: 1.6; color: var(--muted); }
:root[data-theme="light"] .agreement__body { background: var(--panel-2); }
.agreement__body p { margin: 0 0 10px; }
.agreement__body p:last-child { margin-bottom: 0; }
/* terms.php shows the whole agreement as page text, not a 220px scroll box. */
.agreement--full .agreement__body { max-height: none; overflow: visible; }

.billhead { font-size: 12px; font-weight: 600; color: var(--dim); text-transform: uppercase; letter-spacing: .06em; margin: 0 0 6px; }
.billaddr { font-style: normal; font-size: 14px; line-height: 1.6; color: var(--text); }

/* Cart actions: checkout first, browse to its right. */
.cartacts { margin-top: 20px; display: flex; flex-wrap: wrap; gap: 10px; justify-content: flex-end; align-items: flex-start; }
.cartacts form { margin: 0; }
.copyrow { display: flex; gap: 8px; align-items: stretch; margin-bottom: 8px; flex-wrap: wrap; }
.copyrow input { flex: 1 1 200px; min-width: 0; font-size: 13px; }
.copyrow .btn { flex: 0 0 auto; white-space: nowrap; }
.affshare h3 { margin-bottom: 10px; }
.themepick { display: flex; gap: 8px; flex-wrap: wrap; }
.themepick .btn.is-on { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
.couponbox { display: flex; gap: 8px; align-items: center; justify-content: flex-end; max-width: 340px; margin-left: auto; margin-top: 10px; flex-wrap: wrap; }
.couponbox input { flex: 1 1 140px; min-width: 0; }
.kv--totals { margin-top: 18px; max-width: 340px; margin-left: auto; }

/* ------------------------------------------------------------------ prompt */
.promptbox { margin-bottom: 22px; }
.promptbox__head { display: flex; align-items: center; gap: 12px; margin-bottom: 6px; flex-wrap: wrap; }
.promptbox__head h2 { font-size: 16px; margin: 0; }
.promptbox__acts { margin-left: auto; display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
.promptbox__acts .btn { flex: none; }
.promptbox .hint { margin: 0 0 12px; }
.promptbox__text { margin: 0; padding: 14px 16px; max-height: 62vh; overflow: auto; background: var(--panel-2); border: 1px solid var(--line); border-radius: 8px; font: 13px/1.65 var(--font-mono); color: var(--text); white-space: pre-wrap; overflow-wrap: anywhere; -webkit-user-select: text; user-select: text; }
.promptlock { display: flex; gap: 8px; align-items: baseline; margin: 14px 0; padding: 12px 14px; font-size: 13.5px; background: var(--panel-2); border: 1px solid var(--line); border-radius: 8px; color: var(--muted); }
.promptlock strong { color: var(--text); }
.promptlock__i { flex: none; }
.field textarea.mono { font: 13px/1.6 var(--font-mono); white-space: pre; overflow-wrap: normal; overflow-x: auto; }
.filebox { margin: 18px 0; padding: 14px 16px; background: var(--panel-2); border: 1px solid var(--line); border-radius: 8px; }
.filebox h2 { margin: 0 0 6px; }
.filebox p { margin: 0 0 10px; }
.filebox p:last-child { margin-bottom: 0; }
.filebox .field { margin-bottom: 10px; }
.filebox .prog { margin-bottom: 8px; }

/* The table thumbnail is a play button (plan 51.10). */
.thumbbtn { position: relative; display: block; padding: 0; border: 0; background: none; cursor: pointer; line-height: 0; }
.thumbbtn__play { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 15px; color: #fff; opacity: 0; background: rgba(0,0,0,.45); border-radius: 4px; transition: opacity .12s; }
.thumbbtn:hover .thumbbtn__play, .thumbbtn:focus-visible .thumbbtn__play { opacity: 1; }
@media (pointer: coarse) { .thumbbtn__play { opacity: .8; } }

/* ------------------------------------------------------------- sales page */
.sales { text-align: center; }
.sales__poster { width: 100%; max-width: 640px; border-radius: 10px; border: 1px solid var(--line); margin: 0 auto 18px; display: block; }
.sales__lede { font-size: 16.5px; color: var(--text); max-width: 46em; margin: 0 auto 22px; }
.sales__pricing { margin: 0 auto 22px; }
.sales__badge { display: inline-block; margin: 0 0 10px; padding: 5px 12px; background: var(--bad); color: #fff; border-radius: 999px; font-size: 12.5px; font-weight: 700; letter-spacing: .06em; }
.sales__price { margin: 0; display: flex; gap: 14px; align-items: baseline; justify-content: center; flex-wrap: wrap; }
.sales__was { color: var(--dim); font-size: 22px; text-decoration-thickness: 2px; }
.sales__now { font-size: clamp(34px, 8vw, 52px); font-weight: 700; line-height: 1.05; letter-spacing: -.02em; }
.sales__price--free { font-size: clamp(30px, 7vw, 44px); font-weight: 700; color: var(--ok); display: block; }
.sales__save { margin: 8px 0 0; color: var(--ok); font-size: 15px; }
.sales__note { margin: 8px 0 0; color: var(--muted); font-size: 13.5px; }
.sales__cta { margin: 24px 0 8px; }
.sales__cta2 { display: flex; gap: 10px; width: min(100%, 420px); margin: 10px auto 0; }
.sales__cta2 .btn { flex: 1 1 0; min-width: 0; }
.sales__reassure { margin: 10px 0 0; color: var(--muted); font-size: 13px; }
.sales__about { text-align: left; max-width: 46em; margin: 26px auto 0; padding-top: 20px; border-top: 1px solid var(--line-soft); }
.sales__about h2 { font-size: 16px; margin: 0 0 8px; }
.sales__about p { margin: 0; color: var(--muted); line-height: 1.75; }
.sales__alt { display: flex; gap: 10px; width: min(100%, 420px); margin: 22px auto 0; padding-top: 18px; border-top: 1px solid var(--line-soft); }
.sales__alt form { display: contents; }
.sales__alt .btn { flex: 1 1 0; min-width: 0; }
.sales .promptlock { text-align: left; max-width: 46em; margin-inline: auto; }
.sales .fxbox { text-align: left; }
/* Air between the end of "About this video" (which finishes with "The full
   prompt is included with this video.") and the currency disclaimer - the two
   were touching and read as one block (owner, 2026-09-19). */
.sales__about + .fxbox { margin-top: 34px; }
/* The referral line is centred on the video page, under the centred price and
   above the centred BUY NOW (owner, 2026-09-19). The catalogue and home page
   keep the plain left-aligned .refpitch. */
.refpitch--center { justify-content: center; text-align: center; }

.pricebox { border: 1px solid var(--line); border-radius: 8px; padding: 14px 16px 4px; margin: 0 0 16px; }
.pricebox legend { padding: 0 6px; font-size: 13px; color: var(--muted); }
.pricebox__out { margin: 4px 0 12px; font-size: 13.5px; color: var(--muted); }
.pricebox__out s { color: var(--dim); }
.pricebox input:disabled { opacity: .6; cursor: not-allowed; }

/* ---------------------------------------------------------------- BUY NOW */
.buynow__item { display: flex; gap: 14px; align-items: flex-start; margin-bottom: 16px; }
.buynow__thumb { width: 128px; height: 72px; object-fit: cover; border-radius: 6px; border: 1px solid var(--line); flex: none; }
.buynow__item h2 { margin: 0 0 4px; font-size: 17px; }
.buynow__item p { margin: 0; font-size: 13.5px; }
.buynow__price { display: flex; gap: 12px; align-items: baseline; margin: 0 0 4px; }
.buynow__price .sales__now { font-size: clamp(28px, 6vw, 38px); }
.buynow__h { font-size: 15px; margin: 22px 0 4px; }
.buynow__as { margin: 18px 0 4px; }
.buynow__safe { margin-top: 12px; text-align: center; }
.buynow__or { text-align: center; color: var(--muted); margin: 0 0 14px; }
.buynow .btn--xl { width: 100%; margin-top: 18px; }
.thumbfield__now { display: flex; gap: 14px; align-items: flex-start; margin: 0 0 10px; padding: 12px; border-radius: 8px; background: var(--panel-2); border: 1px solid var(--line); flex-wrap: wrap; }
.thumbfield__now img { width: 160px; height: 90px; object-fit: cover; border-radius: 6px; border: 1px solid var(--line); flex: none; background: var(--bg); }
.thumbfield__now p { margin: 0 0 8px; }
.aiengine { padding: 12px 14px; border: 1px solid var(--line); border-radius: 8px; background: var(--panel-2); }
.aiengine label { margin-bottom: 6px; }
.askrow { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.askrow > input[type="text"] { flex: 1 1 200px; min-width: 0; }
.askrow .btn { flex: none; }
.askrow--long { margin-bottom: 8px; justify-content: flex-end; }
.askrow__min { margin: 0; font-size: 13px; color: var(--muted); white-space: nowrap; }
.askrow--long input { width: 90px; flex: none; }

/* --------------------------------------------------------------- checkout */
.pay-grid { display: grid; gap: 20px; grid-template-columns: 1fr; }
@media (min-width: 860px) { .pay-grid { grid-template-columns: 1fr 320px; align-items: start; } .pay-side .panel { position: sticky; top: calc(var(--appbar-h) + 16px); } }
.steps { display: flex; gap: 8px; list-style: none; margin: 0 0 20px; padding: 0; counter-reset: step; flex-wrap: wrap; }
.steps li { flex: 1 1 auto; min-width: 120px; font-size: 13px; color: var(--dim); padding: 9px 12px; border-radius: 8px; background: var(--panel); border: 1px solid var(--line); }
.steps li.is-now  { color: var(--text); border-color: var(--accent); background: var(--accent-soft); font-weight: 600; }
.steps li.is-done { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 50%, transparent); }
.steps li.is-done::before { content: "\2713  "; }
.panel.is-waiting { opacity: .55; }
.panel.is-done h2 { color: var(--ok); }
.tick { color: var(--ok); margin-left: 6px; }
.sum-row { display: flex; justify-content: space-between; gap: 12px; padding: 7px 0; font-size: 14px; border-bottom: 1px solid var(--line-soft); }
.sum-row span:first-child { min-width: 0; overflow-wrap: anywhere; }
.sum-row span:last-child { font-variant-numeric: tabular-nums; white-space: nowrap; }
.sum-row:last-of-type { border-bottom: 0; }
.sum-total { font-weight: 600; font-size: 16px; padding-top: 12px; }
.or { position: relative; text-align: center; margin: 18px 0; color: var(--dim); font-size: 13px; }
.or::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; border-top: 1px solid var(--line); }
.or span { position: relative; background: var(--panel); padding: 0 12px; }
.signin-fold { margin-top: 16px; font-size: 14px; }
.signin-fold summary { cursor: pointer; color: var(--muted); padding: 6px 0; }

/* --------------------------------------------------- referral + impersonate */
.refnote { margin: 14px 0; padding: 12px 14px; border-radius: 10px; border: 1px solid var(--line); background: var(--panel-2); font-size: 14px; line-height: 1.55; }
.refnote--ok   { border-color: color-mix(in srgb, var(--ok) 45%, transparent); background: var(--ok-soft); }
.refnote--warn { border-color: color-mix(in srgb, var(--bad) 55%, transparent); background: var(--bad-soft); }
.refnote__pct  { display: inline-block; padding: 1px 8px; border-radius: 999px; background: var(--accent); color: var(--accent-ink); font-weight: 700; font-size: 12.5px; }
.refnote a { font-weight: 600; }
.refpitch { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 14px 0; font-size: 14px; color: var(--muted); }
.refpitch__badge { display: inline-block; padding: 2px 10px; border-radius: 999px; background: var(--accent); color: var(--accent-ink); font-weight: 700; font-size: 12.5px; letter-spacing: .02em; }
.hint--centre { text-align: center; margin: 8px 0 0; }

.impbox { display: flex; gap: 6px; align-items: center; margin-left: 6px; min-width: 0; }
.impbox input { width: 232px; max-width: 40vw; padding: 7px 10px; min-height: 36px; font-size: 13px; }
.impbar { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; margin: 0 0 18px; padding: 10px 14px; border: 1px solid var(--warn); border-left-width: 4px; border-radius: 10px; background: var(--warn-soft); font-size: 13.5px; }
.impbar__t { color: var(--text); }
.impbar__m { color: var(--dim); font-size: 12.5px; }
.impbar form { margin-left: auto; }

/* --------------------------------------------------------- misc page bits */
.iggrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 12px; padding: 4px; }
.igcard { display: flex; flex-direction: column; gap: 4px; padding: 0; border: 1px solid var(--line); border-radius: 10px; background: var(--panel); cursor: pointer; text-align: left; overflow: hidden; color: inherit; font: inherit; }
.igcard:hover, .igcard:focus-visible { border-color: var(--accent); outline: none; }
.igcard.is-on { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
.igcard__pic { position: relative; display: block; aspect-ratio: 1/1; background: var(--bg-2); }
.igcard__pic img { width: 100%; height: 100%; object-fit: cover; display: block; }
.igcard__noimg { display: flex; align-items: center; justify-content: center; height: 100%; font-size: 12px; opacity: .6; }
.igcard__badge { position: absolute; left: 6px; top: 6px; padding: 1px 6px; border-radius: 6px; background: rgba(3,8,20,.75); color: #fff; font-size: 10px; letter-spacing: .04em; }
.igcard__cap { padding: 0 8px; font-size: 12px; line-height: 1.35; }
.igcard__meta { padding: 0 8px 8px; font-size: 11px; opacity: .65; }
.payout { background: var(--panel-2); }
.payout__head { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
.payout__amt { margin-left: auto; text-align: right; }
.payout__amt strong { display: block; font-size: 19px; }
.receiptform { display: flex; gap: 6px; flex-wrap: wrap; }
.receiptform input[type=text] { flex: 1 1 120px; min-height: 36px; padding: 6px 9px; }
.signupcta { margin-top: 28px; text-align: center; }
.btnrow { display: flex; gap: 10px; flex-wrap: wrap; }
.btnrow--center { justify-content: center; }
.mt-12 { margin-top: 12px; } .mt-14 { margin-top: 14px; } .mt-18 { margin-top: 18px; } .mt-20 { margin-top: 20px; }
.mb-14 { margin-bottom: 14px; } .mb-18 { margin-bottom: 18px; }
.list { margin: 0 0 20px; padding-left: 18px; }

/* -------------------------------------------------------------- responsive */
@media (max-width: 860px) {
  /* backdrop-filter makes .appbar a containing block for fixed descendants,
     which would clip the drawer to the bar's height - so below 860px the bar
     is opaque and the drawer positions against the viewport. */
  .appbar { backdrop-filter: none; -webkit-backdrop-filter: none; background: var(--bg-2); }
  .navtoggle { display: inline-flex; order: -1; }
  .appbar__in { gap: 8px; }
  .appbar__home { display: none; }
  .impbox { display: none; }
  .appbar__nav {
    position: fixed; top: 0; left: 0; bottom: 0; width: min(320px, 88vw); z-index: 120;
    flex-direction: column; align-items: stretch; gap: 2px; margin: 0;
    padding: 0 12px max(16px, env(safe-area-inset-bottom));
    background: var(--panel); border-right: 1px solid var(--line); box-shadow: 0 0 60px rgba(0,0,0,.5);
    transform: translateX(-102%); visibility: hidden; transition: transform .25s var(--ease), visibility .25s;
    overflow-y: auto; overscroll-behavior: contain;
  }
  body.navopen .appbar__nav { transform: translateX(0); visibility: visible; }
  .appbar__nav .nav__close { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: var(--appbar-h); margin: 0 -12px 8px; padding: 0 10px 0 16px; border-bottom: 1px solid var(--line); }
  .appbar__nav .nav__close strong { font-size: 15px; }
  .appbar__nav a { min-height: 46px; padding: 10px 14px; font-size: 15px; color: var(--text); border-radius: 10px; }
  .appbar__nav a.is-active { background: var(--accent-soft); box-shadow: inset 3px 0 0 var(--accent); }
  .appbar__nav .nav__home { color: var(--text); }
  .appbar__nav .nav__foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: auto; padding-top: 14px; border-top: 1px solid var(--line); font-size: 13.5px; color: var(--muted); }
  .navbackdrop { display: block; position: fixed; inset: 0; z-index: 110; background: var(--backdrop); opacity: 0; pointer-events: none; transition: opacity .2s; }
  body.navopen .navbackdrop { opacity: 1; pointer-events: auto; }
  body.navopen { overflow: hidden; }
  .themetoggle { margin-left: auto; }
  .appbar__nav ~ .themetoggle { margin-left: auto; }
}
@media (max-width: 1080px) { .card--wide { padding-left: 20px; padding-right: 20px; } }
@media (max-width: 720px) {
  .card--wide .card__box { padding: 26px 20px; }
  .card--wide .buynow__thumb { width: 128px; height: 72px; }
  .card--wide .buynow__item { gap: 14px; }
}
@media (max-width: 640px) {
  h1 { font-size: 21px; }
  .wrap { padding: 20px 14px 44px; }
  .card { padding: 24px 14px 40px; }
  .card__box { padding: 24px 18px; }
  .panel { padding: 16px 16px; border-radius: 12px; }
  .kv, .ro { grid-template-columns: 1fr; gap: 2px 0; }
  .kv dt, .ro dt { margin-top: 10px; }
  .kv--totals { max-width: none; margin-left: 0; }
  .kv--totals dt { margin-top: 6px; }
  .modal__in { padding: 22px 16px 20px; }
  .modal__in h2 { margin-right: 40px; }
  .appbar__in { padding: 0 12px; }
  .appbar__logo span { font-size: 16px; }
  .statrow { grid-template-columns: 1fr 1fr; }
  .vcard__buy { grid-template-columns: 1fr; }
  .buynow__item { flex-wrap: wrap; }
  .promptbox__acts { margin-left: 0; width: 100%; justify-content: flex-start; }
  .impbar form { margin-left: 0; width: 100%; }
  .impbar form .btn { width: 100%; }
  .couponbox { max-width: none; margin-left: 0; }
  .btn--xl { width: 100%; }
  .cartacts .btn { flex: 1 1 auto; }
}
@media (max-width: 380px) {
  .statrow { grid-template-columns: 1fr; }
  .sales__cta2 { flex-direction: column; }
}
@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}

/* utilities that replaced the last inline styles (CSP forbids style= attributes) */
.text-center { text-align: center; } .text-right { text-align: right; }
.ml-auto { margin-left: auto; }
.mt-0 { margin-top: 0; } .mt-10 { margin-top: 10px; } .mt-16 { margin-top: 16px; } .mt-28 { margin-top: 28px; }
.mb-0 { margin-bottom: 0; } .m-0 { margin: 0; }
.tight { margin-top: -6px; }
.small { font-size: 11px; }
.nowrap { white-space: nowrap; }
.h-sm { font-size: 15px; }
.h-xs { font-size: 14px; margin-top: 18px; }
.hint--loose { line-height: 1.7; }
.stack--x { display: flex; gap: 10px; flex-wrap: wrap; }
.panel--tint { background: var(--panel-2); }
.tbar--top { align-items: flex-start; }
.payout__net { font-size: 19px; font-weight: 700; }
.payout__gross { font-size: 12px; }
.data--inset { margin: 10px 0; }
.clipcell { max-width: 280px; overflow: hidden; text-overflow: ellipsis; }
.inline-clear input.reason { width: 190px; display: inline-block; padding: 6px 9px; }
.prog--full > i { width: 100%; }
.dim--catalogue { margin: -8px 0 18px; }

/* the panel's own sections in the phone drawer; the desktop has the tab strip */
.appbar__nav .nav__admin { display: none; }
@media (max-width: 860px) {
  .appbar__nav .nav__admin { display: contents; }
  .appbar__nav .nav__label { font-size: 11px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--dim); padding: 14px 14px 4px; }
}

/* ============================================================================
   MASTER ADMIN - RECORD PAGES  (plan 52.11-52.13, owner request 2026-09-18)
   ----------------------------------------------------------------------------
   The customer and order pages edit live data, so the components here exist to
   make the CONSEQUENCE of a control visible before it is used: a danger panel
   that does not look like the others, a notice that carries its severity, and a
   progress bar that shows a send actually moving.
   Everything is built from the same tokens as the rest of the sheet, so the
   light theme in main.css flips these with no extra rules.
   ========================================================================== */

/* A short block of explanation inside a panel. */
.notice { background: var(--info-soft); border: 1px solid color-mix(in srgb, var(--info) 40%, transparent); border-radius: var(--radius); padding: 11px 14px; margin: 0 0 14px; font-size: 14px; color: var(--text); }
.notice--warn { background: var(--warn-soft); border-color: color-mix(in srgb, var(--warn) 45%, transparent); }
.notice--bad  { background: var(--bad-soft);  border-color: color-mix(in srgb, var(--bad) 45%, transparent); }

/* A panel whose contents are irreversible. Deliberately unlike the others. */
.panel--danger { border-color: color-mix(in srgb, var(--bad) 55%, transparent); box-shadow: 0 0 0 1px color-mix(in srgb, var(--bad) 18%, transparent), var(--shadow-1); }
.panel--danger > h2 { color: var(--bad); }
.panel--accent { border-color: color-mix(in srgb, var(--accent) 55%, transparent); }
.panel--accent > h2 { color: var(--accent); }

/* Two-column field grid for the record editors; one column on a phone. */
.grid2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px 18px; margin-bottom: 14px; }
.grid2 > label { display: flex; flex-direction: column; gap: 5px; font-size: 13px; font-weight: 600; color: var(--muted); min-width: 0; }
.grid2 > label > input, .grid2 > label > select { font-weight: 400; color: var(--text); }

/* A checkbox that reads as one line rather than a stack. */
label.chk { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 500; color: var(--text); margin: 6px 0; }
label.chk input { width: auto; margin: 0; }
label.chk .dim { margin-left: 4px; }

/* Campaign progress. The number is the truth; the bar is the glance. */
.progress { height: 10px; border-radius: 999px; background: var(--panel-3, var(--line-soft)); overflow: hidden; margin: 8px 0; }
.progress > i { display: block; height: 100%; background: var(--grad-accent); transition: width .4s var(--ease); }
.progress--done > i { background: var(--ok); }
.progress--warn > i { background: var(--warn); }

/* ------------------------------------------ newsletter composer (52.12) */
/* The bulk-send composer and the campaign page. One new component - the HTML
   editor - plus the two shapes that page needs: a wider progress bar, and a
   bordered box to preview the mail in. Everything else there is .panel, .data
   and .badge. Bar widths are set from JavaScript, never with style=: the CSP
   carries no 'unsafe-inline' for styles, which is why the server renders the
   percentage as data-pct and campaign-editor.js applies it. */
.editor { border: 1px solid var(--line-strong); border-radius: var(--radius); overflow: hidden; background: var(--panel-2); }
.editor__bar { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px; border-bottom: 1px solid var(--line); background: var(--panel-3); }
.editor__bar .btn { min-height: 30px; padding: 4px 10px; }
.editor__rich, .editor__code { display: block; width: 100%; min-height: 260px; max-height: 60vh; overflow: auto; margin: 0; padding: 14px 16px; border: 0; border-radius: 0; background: var(--panel); color: var(--text); }
.editor__rich { font: 14px/1.6 var(--font-sans); }
.editor__code { font: 13px/1.6 var(--font-mono); resize: vertical; }
.editor__rich:focus, .editor__code:focus { outline: 0; box-shadow: inset var(--focus); }
.editor__rich > :first-child { margin-top: 0; }
.editor__rich > :last-child { margin-bottom: 0; }
/* after the display rules above, or [hidden] loses and both surfaces show */
.editor__rich[hidden], .editor__code[hidden] { display: none; }
.mailprev { border: 1px solid var(--line); border-radius: var(--radius); background: var(--panel-2); padding: 18px 20px; overflow-x: auto; }
.mailprev > :first-child { margin-top: 0; }
.mailprev img { max-width: 100%; height: auto; }
.prog--lg { height: 12px; margin-top: 0; }
.progstat { margin: 10px 0 16px; font-size: 14px; font-variant-numeric: tabular-nums; }
table.data .prog { display: block; min-width: 120px; margin-top: 6px; }

/* The currency note inside the sales agreement (owner instruction 2026-09-19).
   A heading, not another paragraph: the buyer is accepting a document and needs
   to see that this part is about the estimate beside the price. */
.agreement__h { margin: 14px 0 6px; font-size: 14px; font-weight: 700; color: var(--text); }

/* The Video storage tab (adminmaster + adminvideo, 2026-09-22). */
.vstore { border: 1px solid var(--line); border-radius: 10px; padding: 14px 18px 6px; margin: 0 0 16px; }
.vstore legend { padding: 0 6px; font-weight: 700; }
.vstore__row { display: flex; gap: 18px; align-items: center; justify-content: space-between;
  padding: 10px 0; border-top: 1px solid var(--line); }
.vstore__row:first-of-type { border-top: 0; }
.vstore__q { display: grid; gap: 2px; }
.vstore__a { display: flex; gap: 18px; flex: 0 0 auto; }
@media (max-width: 560px) { .vstore__row { flex-direction: column; align-items: flex-start; gap: 8px; } }

/* PSEUDO-FULLSCREEN for iPhone (2026-09-22): Safari there has no Fullscreen API
   for elements, so the stage fills the viewport with CSS and the watermark comes
   along. !important because the stage carries inline sizing (its aspect ratio
   is set from the video's own dimensions) which would otherwise win. dvh is the
   viewport height that tracks Safari's collapsing toolbars; vh is the fallback. */
.vstage.vstage--pseudofs {
  position: fixed !important; inset: 0 !important; z-index: 2147483000 !important;
  width: 100vw !important; height: 100vh !important; height: 100dvh !important;
  max-height: none !important; aspect-ratio: auto !important;
  margin: 0 !important; border: 0 !important; border-radius: 0 !important; background: #000; }
.vstage--pseudofs .vstage__mark { font-size: clamp(13px, 3.4vw, 22px); }
.vstage--pseudofs .vfs { top: max(10px, env(safe-area-inset-top)); right: max(10px, env(safe-area-inset-right)); }
html.vfs-lock, html.vfs-lock body { overflow: hidden !important; overscroll-behavior: none; }


/* Video storage tab: the two "overwrite every video" buttons (2026-09-22). */
.vbulk h3 { margin: 0 0 .25rem; }
.vbulk__f { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem;
  padding: .75rem 0; border-top: 1px solid var(--line, rgba(127,127,127,.25)); }
.vbulk__warn { flex-basis: 100%; margin: 0; color: var(--bad); }
