/* Webfonts — jarvis design system.

   The @import that used to live here has moved to app/views/shared/_webfonts.html.erb
   as a <link> in the <head>. An @import is invisible to the browser's preload
   scanner, so the font request could not start until application.css had been
   fetched and parsed — a serialized chain that delayed first paint on every page.

   Nothing else belongs in this file today. For a fully self-hosted build,
   download Newsreader + Hanken Grotesk into app/assets/fonts and declare local
   @font-face rules here (then drop the <link> and the preconnects). */
/* ---------------------------------------------------------------
   jarvis — Color tokens
   Warm, calm, editorial. Paper surfaces on a warm canvas, deep warm
   ink for text, a muted forest green as the single primary, with
   terracotta and provider-purple as sparing accents.
   All base values are literal; semantic aliases reference the base.
   --------------------------------------------------------------- */
:root {
  /* --- Neutrals (warm) --- */
  --canvas:        #efece4;  /* app background */
  --canvas-hi:     #f5f2ec;  /* top of page gradient */
  --canvas-lo:     #eae6dd;  /* bottom of page gradient */
  --paper:         #ffffff;  /* card / sheet surface */
  --paper-warm:    #faf8f3;  /* subtle raised strip, table headers */

  --ink:           #26221b;  /* primary text */
  --ink-soft:      #6f6a5e;  /* secondary text */
  --ink-faint:     #9a9384;  /* tertiary / meta text */
  --ink-ghost:     #a49d8d;  /* placeholders, monospace hints */

  --border:        #e6e1d6;  /* default hairline */
  --border-soft:   #ece8df;  /* inner dividers */
  --border-strong: #d9d3c6;  /* hover border */

  /* --- Primary: forest green --- */
  --primary:        #2f6d5b;
  --primary-press:  #28604f;
  --primary-tint:   #eef4f1;  /* green wash background */
  --primary-tint-2: #f4f8f6;
  --primary-border: #cfe0d9;  /* green hairline */
  --primary-chip:   #dcebe5;  /* filled green chip bg */

  /* --- Accent: terracotta (used sparingly for links/callouts) --- */
  --accent:         #b45b3e;
  --accent-soft:    #b0623c;

  /* --- Danger: destructive actions (Danger Zone only — not the same as accent) --- */
  --danger:           #b0553a;
  --danger-press:     #8f3f28;
  --danger-tint:      #fdf6f2;
  --danger-border:    #e8d3ca;
  --danger-disabled:      #ecdcd4;
  --danger-disabled-text: #c4a99d;

  /* --- Provider: muted purple (AI model badges only) --- */
  --provider:       #6a4c86;
  --provider-tint:  #efe9f2;

  /* --- Placeholder hatch (image / chart / map slots) --- */
  --hatch-a:        #f6f3ec;
  --hatch-b:        #f1ede4;

  /* --- Focus ring --- */
  --ring:           rgba(47,109,91,.35);

  /* ============ Semantic aliases ============ */
  --surface-page:    var(--canvas);
  --surface-card:    var(--paper);
  --surface-raised:  var(--paper-warm);

  --text-body:       var(--ink);
  --text-muted:      var(--ink-soft);
  --text-faint:      var(--ink-faint);
  --text-placeholder:var(--ink-ghost);
  --text-link:       var(--accent);

  --border-default:  var(--border);
  --border-divider:  var(--border-soft);

  --action-primary:      var(--primary);
  --action-primary-press:var(--primary-press);
  --focus-ring:          var(--ring);

  --success:  var(--primary);
  --warning:  var(--accent);
}
/* ---------------------------------------------------------------
   jarvis — Typography tokens
   Two families: Newsreader (serif) carries editorial headlines and
   any "document" numerals; Hanken Grotesk (sans) carries all UI.
   Monospace only for placeholder / data hints.
   --------------------------------------------------------------- */
:root {
  --font-display: 'Newsreader', Georgia, 'Times New Roman', serif;
  --font-sans:    'Hanken Grotesk', system-ui, -apple-system, sans-serif;
  --font-mono:    ui-monospace, 'SF Mono', Menlo, monospace;

  /* Reading scale. Stays 1 outside the reading surface — see .reading-scope
     at the bottom of this file. */
  --reading-scale: 1;

  /* Type scale. Baselines are a notch up from the original 10–15px set: this
     is a reading app and 13px body was under the 16px web norm. */
  --text-2xs: 11px;
  --text-xs:  12px;
  --text-sm:  13px;
  --text-ui:  14px;   /* default control text */
  --text-md:  15px;   /* body */
  --text-lg:  17px;   /* long-form prose */
  --display-sm: 22px;
  --display-md: 25px;
  --display-lg: 28px;
  --display-xl: 31px;

  /* Weights */
  --weight-regular: 400;
  --weight-medium:  500;
  --weight-semibold:600;
  --weight-bold:    700;

  /* Line heights */
  --leading-tight:  1.15;
  --leading-snug:   1.3;
  --leading-normal: 1.5;
  --leading-relaxed:1.6;

  /* Letter spacing */
  --tracking-label: .5px;   /* small caps labels */
  --tracking-tight: .2px;
}

/* ---------------------------------------------------------------
   Reading size (users.reading_scale).

   `.reading-scope` marks the one subtree the setting applies to: the brief
   body and the delivery templates. Everything outside it — nav, settings,
   admin, onboarding, and the .btn/.card sizes in components.css — keeps the
   baseline above, which is what the Settings copy promises.

   The scope has to redeclare the tokens rather than just setting
   --reading-scale, because a custom property's var() is substituted where it
   is DECLARED, not where it is used: tokens declared at :root would resolve
   against :root's scale and inherit down already-frozen. Declaring both the
   scale and the tokens on the same element is what makes them track.

   <html data-reading-scale> is rendered server-side so the first paint is
   already at the chosen size, with no flash-and-resize.
   --------------------------------------------------------------- */
:root[data-reading-scale="large"]  .reading-scope { --reading-scale: 1.15; }
:root[data-reading-scale="xlarge"] .reading-scope { --reading-scale: 1.32; }

.reading-scope {
  --text-2xs: calc(11px * var(--reading-scale));
  --text-xs:  calc(12px * var(--reading-scale));
  --text-sm:  calc(13px * var(--reading-scale));
  --text-ui:  calc(14px * var(--reading-scale));
  --text-md:  calc(15px * var(--reading-scale));
  --text-lg:  calc(17px * var(--reading-scale));
  --display-sm: calc(22px * var(--reading-scale));
  --display-md: calc(25px * var(--reading-scale));
  --display-lg: calc(28px * var(--reading-scale));
  --display-xl: calc(31px * var(--reading-scale));
}
/* ---------------------------------------------------------------
   jarvis — Spacing, radius, shadow & motion tokens
   --------------------------------------------------------------- */
:root {
  /* Spacing scale (4px base, plus a couple of editorial in-betweens) */
  --space-1:  4px;
  --space-2:  8px;
  --space-3:  12px;
  --space-4:  16px;
  --space-5:  20px;
  --space-6:  26px;
  --space-7:  34px;
  --space-8:  44px;

  /* Page gutter — the side padding on a full-page frame (.home, .hist, .rt,
     .acct-page, .sup, .adm-scroll). Phones drop to 16px: at 32px a side, a
     390px screen spends 27% of its width on the frame plus the nested card
     and row padding inside it, and this is a reading app. */
  --page-gutter: 32px;
  --page-top: 38px;

  /* Radii */
  --radius-xs:  7px;
  --radius-sm:  9px;
  --radius-md:  11px;   /* inputs, buttons */
  --radius-lg:  14px;   /* cards */
  --radius-xl:  16px;   /* feature cards */
  --radius-2xl: 20px;   /* sheets, modals */
  --radius-pill:999px;

  /* Elevation — warm-tinted, low and soft */
  --shadow-sm:   0 2px 6px rgba(50,42,28,.06);
  --shadow-card: 0 10px 34px rgba(50,42,28,.08);
  --shadow-pop:  0 16px 48px rgba(50,42,28,.11);
  --shadow-primary: 0 3px 10px rgba(47,109,91,.25);

  /* Borders */
  --hairline: 1.5px;

  /* Placeholder hatch (reusable background) */
  --hatch: repeating-linear-gradient(45deg, var(--hatch-a), var(--hatch-a) 8px, var(--hatch-b) 8px, var(--hatch-b) 16px);

  /* Motion */
  --ease-out: cubic-bezier(.2,.6,.2,1);
  --dur-fast: .15s;
  --dur-mid:  .3s;
  --dur-rise: .45s;
}

@media (max-width: 720px) {
  :root {
    --page-gutter: 16px;
    --page-top: 22px;
  }
}
/* ---------------------------------------------------------------
   jarvis — Base reset, page background & shared keyframes.
   --------------------------------------------------------------- */
*, *::before, *::after {
  box-sizing: border-box;
  -webkit-tap-highlight-color: transparent;
}

html, body {
  margin: 0;
  padding: 0;
  /* The app scrolls inside .app-main, not the document. Without this, hitting
     the end of that inner scroller chains the gesture out to the document,
     which drags the whole shell — and the top bar with it — before rubber-
     banding back. Also suppresses pull-to-refresh. */
  overscroll-behavior: none;
}

body {
  font-family: var(--font-sans);
  color: var(--text-body);
  background: var(--surface-page);
}

a {
  color: inherit;
  text-decoration: none;
}

.jarvis-page {
  min-height: 100vh;
  min-height: 100dvh;
  width: 100%;
  background: radial-gradient(120% 120% at 50% 0%, var(--canvas-hi) 0%, var(--canvas-lo) 100%);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: var(--space-8) var(--space-5);
}

.jarvis-hidden {
  display: none !important;
}

@keyframes riseIn {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes pulseDot {
  0%, 100% { transform: scale(1); opacity: 1; }
  50%      { transform: scale(.6); opacity: .5; }
}

@keyframes shimmer {
  0%   { background-position: -360px 0; }
  100% { background-position: 360px 0; }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

.jarvis-rise {
  animation: riseIn var(--dur-rise) ease both;
}
/* ---------------------------------------------------------------
   jarvis — Core & form component classes
   Ported from the Claude Design handoff's Button/Card/Chip/Badge/
   ProgressBar/BrandMark/Input/Textarea/Checkbox reference components.
   --------------------------------------------------------------- */

/* ============ Button ============ */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  font-family: var(--font-sans);
  font-weight: var(--weight-semibold);
  line-height: 1;
  cursor: pointer;
  border: 1.5px solid transparent;
  transition: background var(--dur-fast), border-color var(--dur-fast), transform var(--dur-fast);
  padding: 13px 16px;
  font-size: var(--text-md);
  border-radius: var(--radius-md);
}
.btn--block { display: flex; width: 100%; }
.btn--sm { padding: 7px 12px; font-size: var(--text-ui); border-radius: var(--radius-sm); }
.btn--lg { padding: 14px 18px; font-size: 14.5px; border-radius: var(--radius-md); }

.btn--primary {
  background: var(--action-primary);
  color: #fff;
  box-shadow: var(--shadow-primary);
}
.btn--primary:hover { background: var(--action-primary-press); }
.btn--primary:active { background: var(--action-primary-press); }

.btn--ghost {
  background: var(--surface-card);
  color: var(--primary);
  border-color: var(--primary-border);
}
.btn--ghost:hover { background: var(--primary-tint-2); }

.btn--subtle {
  background: var(--surface-raised);
  color: var(--text-body);
  border-color: var(--border-default);
}
.btn--subtle:hover { background: var(--paper-warm); border-color: var(--border-strong); }

.btn--danger {
  background: var(--danger);
  color: #fff;
  border-color: var(--danger);
}
.btn--danger:hover { background: var(--danger-press); border-color: var(--danger-press); }
.btn--danger:disabled {
  background: var(--danger-disabled);
  border-color: var(--danger-disabled);
  color: var(--danger-disabled-text);
  cursor: default;
}

/* ============ Card ============ */
.card {
  background: var(--surface-card);
  border: var(--hairline) solid var(--border-default);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  padding: var(--space-4);
  overflow: hidden;
}
.card--pad-0 { padding: 0; }
.card--flat { box-shadow: none; }
.card--card { box-shadow: var(--shadow-card); }
.card--pop  { box-shadow: var(--shadow-pop); }
.card--interactive {
  cursor: pointer;
  transition: transform var(--dur-fast), box-shadow var(--dur-fast), border-color var(--dur-fast);
}
.card--interactive:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-card);
  border-color: var(--primary-border);
}
.card--interactive:active {
  transform: translateY(0) scale(.98);
  box-shadow: var(--shadow-sm);
  border-color: var(--primary-border);
}

/* ============ Chip ============ */
.chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--font-sans);
  font-weight: var(--weight-semibold);
  font-size: var(--text-xs);
  padding: 5px 10px;
  border-radius: var(--radius-pill);
  white-space: nowrap;
  background: var(--hatch-b);
  color: var(--ink-soft);
}
.chip[data-clickable] { cursor: pointer; }
.chip--green      { background: var(--primary-tint);  color: var(--primary); }
.chip--purple     { background: var(--provider-tint);  color: var(--provider); }
.chip--terracotta { background: rgba(180,91,62,.10);   color: var(--accent); }
.chip--selected   { background: var(--primary); color: #fff; }

/* ============ Badge ============ */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-family: var(--font-sans);
  font-weight: var(--weight-semibold);
  font-size: var(--text-2xs);
  letter-spacing: .3px;
  padding: 3px 8px;
  border-radius: var(--radius-pill);
  background: var(--hatch-b);
  color: var(--ink-soft);
}
.badge--green      { background: var(--primary-tint); color: var(--primary); }
.badge--solid      { background: var(--primary); color: #fff; }
.badge--terracotta { background: rgba(180,91,62,.12); color: var(--accent); }

/* ============ ProgressBar ============ */
.progress {
  height: 8px;
  border-radius: var(--radius-pill);
  background: var(--canvas);
  overflow: hidden;
}
.progress__fill {
  height: 100%;
  width: 0%;
  border-radius: inherit;
  background: var(--primary);
  transition: width .12s linear;
}

/* ============ BrandMark ============ */
.brandmark { display: inline-flex; align-items: center; gap: 10px; }
.brandmark__glyph {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow-primary);
  flex: none;
  overflow: hidden;
}
.brandmark__glyph span { color: #fff; font-size: 13px; }
.brandmark__glyph img { width: 100%; height: 100%; display: block; object-fit: cover; }
.brandmark__name {
  font-family: var(--font-display);
  font-size: var(--display-sm);
  font-weight: var(--weight-semibold);
  color: var(--ink);
  letter-spacing: var(--tracking-tight);
}
.brandmark--sm .brandmark__glyph { width: 24px; height: 24px; border-radius: 7px; }
.brandmark--sm .brandmark__glyph span { font-size: 10px; }
.brandmark--sm .brandmark__name { font-size: 17px; }
.brandmark--lg .brandmark__glyph { width: 38px; height: 38px; border-radius: 11px; }
.brandmark--lg .brandmark__glyph span { font-size: 16px; }
.brandmark--lg .brandmark__name { font-size: 26px; }

/* ============ Passkey prompt banner ============ */
.passkey-banner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px 16px;
  width: 100%;
  max-width: 640px;
  margin: var(--space-4) auto 0;
  padding: 12px 16px;
  background: var(--primary-tint);
  border: var(--hairline) solid var(--primary-border);
  border-radius: var(--radius-md);
}
.passkey-banner__msg {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  font-size: var(--text-sm);
  line-height: 1.45;
  color: var(--ink-soft);
}
.passkey-banner__msg strong { color: var(--ink); font-weight: var(--weight-semibold); }
.passkey-banner__icon { font-size: 17px; flex-shrink: 0; }
.passkey-banner__actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.passkey-banner__error { flex-basis: 100%; color: var(--accent); font-size: var(--text-xs); }

/* Full-width variant: a notice bar that sits directly under the reader topbar,
   sharing its horizontal padding so the copy lines up with the topbar chips. */
.passkey-banner--bar {
  max-width: none;
  width: 100%;
  margin: 0;
  padding: 12px var(--space-5);
  border: 0;
  border-bottom: var(--hairline) solid var(--primary-border);
  border-radius: 0;
}

/* ============ Form field label ============ */
.field { display: block; }
.field__label {
  display: block;
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  color: var(--text-muted);
  margin-bottom: 7px;
}

/* ============ Input / Textarea ============ */
.input, .textarea {
  width: 100%;
  border: var(--hairline) solid var(--border-default);
  border-radius: var(--radius-md);
  font-family: var(--font-sans);
  color: var(--text-body);
  background: var(--surface-card);
  outline: none;
  transition: border-color var(--dur-fast), box-shadow var(--dur-fast);
}
.input {
  padding: 12px 13px;
  font-size: var(--text-md);
}
.textarea {
  padding: 11px 13px;
  min-height: 76px;
  font-size: var(--text-ui);
  line-height: var(--leading-normal);
  color: var(--ink);
  resize: none;
}
.input:focus, .textarea:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 3px var(--focus-ring);
}

/* ============ Checkbox ============ */
.checkbox-row { display: inline-flex; align-items: center; gap: 10px; }
.checkbox {
  width: 20px;
  height: 20px;
  flex: none;
  border-radius: var(--radius-xs);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 11px;
  background: transparent;
  border: 1.5px solid var(--border-strong);
  transition: background var(--dur-fast), border-color var(--dur-fast);
}
.checkbox.is-checked {
  background: var(--primary);
  color: #fff;
  border-color: var(--primary);
}
.checkbox-row__label {
  font-family: var(--font-sans);
  font-size: var(--text-ui);
  color: var(--ink);
}
/* ---------------------------------------------------------------
   jarvis — Onboarding flow screens
   Sign in -> magic link -> setup -> running -> delivery.
   --------------------------------------------------------------- */

.ob-brand { margin-bottom: 26px; }

.ob-screen { width: 100%; }
.ob-screen--sm  { max-width: 412px; }
.ob-screen--setup{ max-width: 500px; }
.ob-screen--run { max-width: 480px; }
.ob-screen--delivery{ max-width: 640px; }

/* ---- Sign in ---- */
.ob-signin-card { padding: 34px 30px; }
.ob-title {
  font-family: var(--font-display);
  font-weight: var(--weight-medium);
  line-height: var(--leading-tight);
  margin: 0 0 8px;
  color: var(--ink);
}
.ob-title--signin { font-size: 28px; }
.ob-subtitle { margin: 0 0 var(--space-6); font-size: var(--text-md); line-height: var(--leading-normal); color: var(--text-muted); }

.ob-google-btn {
  gap: 11px;
  background: var(--surface-card);
  border-color: var(--border-default);
  color: var(--ink);
}
.ob-google-btn:hover {
  background: var(--paper-warm);
  border-color: var(--border-strong);
}
.ob-google-dot {
  width: 18px; height: 18px; border-radius: 50%;
  background: conic-gradient(from -45deg, #ea4335 0 25%, #fbbc05 0 50%, #34a853 0 75%, #4285f4 0);
  flex: none;
}

.ob-divider { display: flex; align-items: center; gap: 12px; margin: 18px 0; }
.ob-divider__line { flex: 1; height: 1px; background: var(--border-soft); }
.ob-divider__label { font-size: var(--text-xs); color: var(--ink-ghost); letter-spacing: var(--tracking-label); }

.ob-passkey { text-align: center; margin-top: 16px; }
.ob-passkey span { font-size: var(--text-md); color: var(--ink-faint); cursor: pointer; }

.ob-trust { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 16px; }
.ob-trust span { font-size: var(--text-sm); color: var(--ink-faint); }
.ob-trust strong { color: var(--primary); font-weight: var(--weight-semibold); }

/* ---- Magic link sent ---- */
.ob-magic-card { padding: 36px 30px; text-align: center; }
.ob-magic-icon {
  width: 56px; height: 56px; border-radius: var(--radius-xl);
  background: var(--primary-tint);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto 18px; font-size: 24px;
}
.ob-magic-copy { margin: 0 0 6px; font-size: var(--text-md); line-height: 1.55; color: var(--text-muted); }
.ob-magic-copy strong { color: var(--ink); }
.ob-magic-expiry { margin: 0 0 22px; font-size: 12.5px; color: var(--ink-faint); }
.ob-magic-links {
  margin-top: 24px; padding-top: 18px;
  border-top: var(--hairline) solid var(--primary-border);
  display: flex; align-items: center; justify-content: center; gap: 12px;
}
/* Resend is a real POST (button_to), "use a different email" is a link — both
   render as matching, chrome-free text links so the row reads as one unit. */
.ob-linkbtn-form { margin: 0; display: inline-flex; }
.ob-linkbtn {
  appearance: none; -webkit-appearance: none;
  background: none; border: 0; padding: 0; margin: 0;
  font-family: var(--font-sans); font-size: var(--text-sm); line-height: 1;
  font-weight: var(--weight-semibold); color: var(--primary);
  cursor: pointer; text-decoration: none; transition: opacity .15s ease;
}
.ob-linkbtn:hover { text-decoration: underline; }
.ob-linkbtn--muted { color: var(--ink-faint); font-weight: var(--weight-medium); }
.ob-magic-dot { color: var(--ink-ghost); font-size: var(--text-sm); user-select: none; }

/* ---- Setup ---- */
.ob-setup-header { text-align: center; margin-bottom: 20px; }
.ob-title--setup { font-size: 27px; }
.ob-setup-card { padding: 22px; }
.ob-field { margin-bottom: 16px; }
.ob-setup-divider { height: 1px; background: var(--border-soft); margin: 0 0 16px; }

.ob-row { display: flex; justify-content: space-between; align-items: center; }
.ob-row--label { font-size: var(--text-ui); font-weight: var(--weight-semibold); color: var(--ink); }
.ob-row-runs { margin-bottom: 13px; }
.ob-row-model { margin-bottom: 16px; }
.ob-row-actions { display: flex; align-items: center; gap: 8px; }
.ob-link { font-size: var(--text-sm); color: var(--accent); font-weight: var(--weight-semibold); cursor: pointer; }

.ob-calendar-row {
  display: flex; justify-content: space-between; align-items: center;
  padding: 12px 13px;
  border: 1.5px dashed var(--border-strong);
  border-radius: var(--radius-md);
  margin-bottom: 18px;
}
.ob-calendar-row__title { font-size: var(--text-ui); font-weight: var(--weight-semibold); color: var(--ink); }
.ob-calendar-row__hint { font-size: 11.5px; color: var(--ink-faint); }
.ob-calendar-row__actions { display: flex; align-items: center; gap: 9px; }
.ob-calendar-connect {
  font: var(--weight-semibold) var(--text-xs) var(--font-sans);
  padding: 6px 11px; border-radius: var(--radius-pill);
  background: var(--surface-card); border: 1.5px solid var(--primary-border);
  color: var(--primary); cursor: pointer;
}
.ob-calendar-skip { font-size: var(--text-sm); color: var(--ink-faint); cursor: pointer; }

.ob-back { text-align: center; margin-top: 16px; }
.ob-back span { font-size: var(--text-ui); color: var(--ink-faint); cursor: pointer; }

/* ---- Running ---- */
.ob-run-card { padding: 30px 28px; }
.ob-run-head { display: flex; align-items: center; gap: 11px; margin-bottom: 6px; }
.ob-spinner {
  width: 26px; height: 26px; border-radius: 50%;
  border: 2.5px solid var(--primary-chip);
  border-top-color: var(--primary);
  display: inline-block;
  animation: spin .8s linear infinite;
  flex: none;
}
.ob-title--run { font-size: 23px; margin: 0; }
.ob-run-hint { margin: 0 0 var(--space-5) 37px; font-size: var(--text-ui); color: var(--ink-faint); }

.ob-progress { margin-bottom: 22px; }

.ob-steps { margin-bottom: 0; }
.ob-step { display: flex; align-items: center; gap: var(--space-3); padding: 7px 0; }
.ob-step__mark { width: 20px; height: 20px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; flex: none; }
.ob-step__mark--done { background: var(--primary); color: #fff; font-size: var(--text-xs); }
.ob-step__mark--active { border: 2px solid var(--primary); }
.ob-step__mark--pending { border: 2px solid var(--border-default); }
.ob-step__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--primary); animation: pulseDot 1s ease-in-out infinite; }
.ob-step__label { font-size: 13.5px; color: #3a352c; }

.ob-shimmer {
  margin-top: var(--space-5);
  height: 64px;
  border-radius: var(--radius-md);
  background: linear-gradient(100deg, var(--paper-warm) 30%, var(--canvas-lo) 50%, var(--paper-warm) 70%);
  background-size: 720px 100%;
  animation: shimmer 1.4s linear infinite;
}

/* ---- First delivery ---- */
.ob-delivery-card { padding: 0; }
.ob-delivery-head {
  display: flex; justify-content: space-between; align-items: center;
  padding: 14px 20px;
  border-bottom: var(--hairline) solid var(--border-soft);
  background: var(--paper-warm);
}
.ob-delivery-head__chips { display: flex; align-items: center; gap: 8px; }
.ob-delivery-head__version { font-size: var(--text-sm); color: var(--ink-faint); }

.ob-celebrate {
  display: flex; align-items: center; gap: 9px;
  padding: 11px 20px;
  background: var(--primary-tint);
  border-bottom: var(--hairline) solid var(--primary-border);
}
.ob-celebrate__icon { font-size: 15px; }
.ob-celebrate__text { font-size: var(--text-ui); color: var(--primary); font-weight: var(--weight-semibold); }

.ob-delivery-body { padding: 26px 30px; }
.ob-delivery-meta { font-size: var(--text-sm); color: var(--ink-faint); margin-bottom: var(--space-2); }
.ob-title--delivery { font-size: 27px; line-height: 1.2; margin: 0 0 var(--space-4); }

.ob-delivery-footer {
  display: flex; gap: var(--space-2);
  padding: 16px 20px;
  border-top: var(--hairline) solid var(--border-soft);
  background: var(--paper-warm);
}
.ob-delivery-footer .btn { flex: 1; }

.ob-below { text-align: center; margin-top: 16px; }
.ob-below span { font-size: 12.5px; color: var(--ink-faint); }

/* -- Delivery: shared bits -- */
.ob-stat-row { display: flex; gap: var(--space-3); margin-bottom: var(--space-5); }
.ob-stat {
  flex: 1;
  border: var(--hairline) solid var(--border-soft);
  border-radius: var(--radius-md);
  padding: var(--space-3);
}
.ob-stat__label { font-size: var(--text-xs); color: var(--ink-faint); margin-bottom: 4px; }
.ob-stat__value { font-family: var(--font-display); font-size: var(--display-md); }
.ob-stat__value--up { color: var(--primary); }

.ob-table { border: var(--hairline) solid var(--border-soft); border-radius: var(--radius-md); overflow: hidden; margin-bottom: var(--space-4); }
.ob-table__head, .ob-table__row {
  display: flex; gap: var(--space-3); padding: 9px 14px; align-items: center;
}
.ob-table__head { background: var(--paper-warm); font-size: var(--text-xs); color: var(--ink-faint); font-weight: var(--weight-semibold); }
.ob-table__row { border-top: var(--hairline) solid var(--border-soft); font-size: 13.5px; padding: 11px 14px; }
.ob-table__col--name { flex: 1; }
.ob-table__col--sets { width: 70px; color: var(--text-muted); }
.ob-table__col--rpe  { width: 44px; color: var(--text-muted); }

.ob-body-copy { font-size: 14.5px; line-height: var(--leading-relaxed); color: #3a352c; margin: 0 0 var(--space-4); }
.ob-body-copy--muted { font-size: 13.5px; line-height: 1.55; color: var(--text-muted); margin: 0; }

/* -- Nutrition -- */
.ob-macro-row { display: flex; gap: 14px; margin-bottom: var(--space-4); }
.ob-macro { flex: 1; }
.ob-macro__label { font-size: var(--text-xs); color: var(--ink-faint); margin-bottom: 5px; }
.ob-macro__track { height: 7px; border-radius: 5px; background: var(--canvas); }
.ob-macro__fill { width: 0; height: 100%; border-radius: 5px; }
.ob-macro__fill--protein { background: var(--primary); }
.ob-macro__fill--carbs { background: var(--accent); }
.ob-macro__fill--fat { background: var(--provider); }

.ob-meal-grid { display: grid; grid-template-columns: auto 1fr 1fr 1fr; gap: var(--space-2); margin-bottom: var(--space-4); }
.ob-meal-grid__head { font-size: var(--text-xs); color: var(--ink-faint); text-align: center; }
.ob-meal-grid__day { font-size: var(--text-sm); color: var(--ink-faint); align-self: center; }
.ob-meal { border: var(--hairline) solid var(--border-soft); border-radius: var(--radius-sm); padding: var(--space-2); }
.ob-meal__name { font-size: 12.5px; font-weight: var(--weight-semibold); }
.ob-meal__cal { font-size: var(--text-xs); color: var(--ink-faint); }

.ob-callout {
  display: flex; align-items: center; gap: 9px;
  padding: 11px 14px;
  border: var(--hairline) solid var(--primary-border);
  border-radius: var(--radius-md);
  background: var(--primary-tint-2);
}
.ob-callout span:last-child { font-size: var(--text-ui); color: var(--primary); font-weight: var(--weight-semibold); }

/* -- Brief -- */
.ob-listing-row { display: flex; gap: 14px; margin-bottom: var(--space-4); }
.ob-listing { flex: 1; border: var(--hairline) solid var(--border-soft); border-radius: var(--radius-md); overflow: hidden; }
.ob-listing__photo {
  height: 78px;
  background: var(--hatch);
  display: flex; align-items: center; justify-content: center;
  font: var(--weight-semibold) var(--text-2xs) var(--font-mono);
  color: var(--ink-ghost);
}
.ob-listing__body { padding: 11px; }
.ob-listing__price-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 5px; }
.ob-listing__price { font-family: var(--font-display); font-size: 17px; }
.ob-listing__meta { font-size: var(--text-sm); color: var(--text-muted); }
.ob-listing__sub { font-size: var(--text-sm); color: var(--ink-faint); margin: 4px 0 9px; }
.ob-listing__actions { display: flex; gap: 6px; }
.ob-listing__save, .ob-listing__hide {
  font: var(--weight-semibold) var(--text-xs) var(--font-sans);
  padding: 5px 10px; border-radius: var(--radius-sm);
}
.ob-listing__save { background: var(--primary); color: #fff; }
.ob-listing__hide { background: var(--hatch-b); color: var(--text-muted); }

.ob-map-placeholder {
  height: 90px;
  border-radius: var(--radius-md);
  background: var(--hatch);
  display: flex; align-items: center; justify-content: center;
  font: var(--weight-semibold) var(--text-2xs) var(--font-mono);
  color: var(--ink-ghost);
}

/* -- Finance -- */

/* Desktop: widen the auth / onboarding cards and add generous padding so the
   flow reads as desktop-native instead of a phone screen floating in space.
   Single-field cards stay comfortably narrow. */
@media (min-width: 768px) {
  .ob-screen--sm { max-width: 480px; }
  .ob-signin-card { padding: 44px 40px; }
  .ob-magic-card { padding: 44px 40px; }
}
/* ---------------------------------------------------------------
   jarvis — Home reader + timeline (1c: Journal & Reader)
   --------------------------------------------------------------- */
.reader-shell {
  display: flex;
  min-height: 100vh;
  min-height: 100dvh;
  width: 100%;
  background: var(--surface-page);
}

/* ============ Sidebar / timeline rail ============ */
.reader-sidebar {
  width: 260px;
  flex: none;
  display: flex;
  flex-direction: column;
  border-right: var(--hairline) solid var(--border-soft);
  background: var(--surface-raised);
  height: 100vh;
  height: 100dvh;
  position: sticky;
  top: 0;
}
.reader-sidebar__brand {
  padding: var(--space-4) var(--space-4) var(--space-3);
  border-bottom: var(--hairline) solid var(--border-soft);
}
.reader-sidebar__body {
  flex: 1;
  overflow-y: auto;
  padding: var(--space-3);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.reader-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: var(--space-2);
}
.reader-timeline-group__label {
  font-size: var(--text-2xs);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-label);
  color: var(--text-faint);
  margin: var(--space-3) 0 4px;
  text-transform: uppercase;
}
.reader-timeline-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 8px;
  border-radius: var(--radius-sm);
  color: var(--text-body);
}
.reader-timeline-row:hover { background: var(--paper); }
.reader-timeline-row.is-active { background: var(--primary-tint); }
.reader-timeline-row__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex: none;
  background: var(--ink-faint);
}
.reader-timeline-row__dot--success { background: var(--primary); }
.reader-timeline-row__dot--failed { background: var(--accent); }
.reader-timeline-row__dot--pending { background: var(--provider); }
.reader-timeline-row__text { display: flex; flex-direction: column; min-width: 0; }
.reader-timeline-row__title {
  font-size: var(--text-ui);
  font-weight: var(--weight-medium);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.reader-timeline-row__meta { font-size: var(--text-xs); color: var(--text-faint); }
.reader-timeline-empty { color: var(--text-faint); font-size: var(--text-ui); padding: var(--space-2); }

.reader-sidebar__footer {
  padding: var(--space-3);
  border-top: var(--hairline) solid var(--border-soft);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.reader-sidebar__links { display: flex; gap: 8px; justify-content: center; }

/* ============ Main reader pane ============ */
.reader-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}
/* Sticky delivery top bar (design: Delivery.dc.html main top bar). */
.reader-topbar {
  height: 56px; flex: none; display: flex; align-items: center; gap: 9px;
  padding: 0 22px; border-bottom: 1.5px solid #e6e1d6;
  background: rgba(245, 242, 236, .86); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  position: sticky; top: 0; z-index: 5; overflow-x: auto;
}
.reader-topbar__name { font-family: 'Newsreader', serif; font-weight: 600; font-size: 13.5px; white-space: nowrap; flex: none; }
.reader-topbar__spacer { flex: 1; }
.rtop-chip {
  font: 600 11px 'Hanken Grotesk', system-ui, sans-serif; padding: 5px 10px; border-radius: 999px;
  background: #f1ede4; color: #6f6a5e; white-space: nowrap; flex: none;
}
.rtop-chip--web { background: #eef4f1; color: #2f6d5b; }

.ver-nav { display: flex; align-items: center; background: #efece4; border: 1.5px solid #e6e1d6; border-radius: 999px; padding: 2px; flex: none; }
.ver-nav a, .ver-nav span { font: 600 11px 'Hanken Grotesk', system-ui, sans-serif; padding: 5px 10px; border-radius: 999px; color: #9a9384; text-decoration: none; white-space: nowrap; }
.ver-nav a:hover { color: #2f6d5b; text-decoration: none; }
.ver-nav .is-current { background: #2f6d5b; color: #fff; }
.ver-nav .is-disabled { opacity: .4; }

.rtop-btn { font: 600 12px 'Hanken Grotesk', system-ui, sans-serif; padding: 8px 13px; border-radius: 10px; cursor: pointer; flex: none; text-decoration: none; }
.rtop-btn--ghost { border: 1.5px solid #e6e1d6; background: #fff; color: #26221b; }
.rtop-btn--ghost:hover { background: #faf8f3; text-decoration: none; }
.rtop-btn--primary { border: none; background: #2f6d5b; color: #fff; box-shadow: 0 3px 10px rgba(47, 109, 91, .25); }
.rtop-btn--primary:hover { background: #28604f; text-decoration: none; }
.rtop-btn--primary:disabled, .rtop-btn--primary[disabled] { background: #9db8ae; box-shadow: none; cursor: default; pointer-events: none; }
.rtop-btn--primary form, .rtop-btn--primary { margin: 0; }

/* Reopen button — only visible in focus mode. */
.reader-topbar__reopen {
  width: 34px; height: 34px; flex: none; border-radius: 9px; border: 1.5px solid #e6e1d6; background: #fff;
  display: none; align-items: center; justify-content: center; color: #6f6a5e; cursor: pointer;
}
.reader-topbar__reopen:hover { background: #faf8f3; }
.reader-topbar__reopen svg { width: 17px; height: 17px; }
.reader-shell--focus .reader-topbar__reopen { display: flex; }
.reader-shell--focus .reader-sidebar,
.reader-shell--focus .ctx { display: none; }

/* Mobile-only "Versions" pill — opens .ctx as a slide-in drawer instead of
   the desktop's persistent column. Hidden on desktop; see the mobile block
   near the end of this file for its @media (max-width: 720px) treatment. */
.reader-topbar__versions {
  display: none; align-items: center; gap: 5px;
  font: 600 11.5px "Hanken Grotesk", system-ui, sans-serif; color: #2f6d5b;
  padding: 6px 10px; border-radius: 9px; border: 1.5px solid #cfe1d9; background: #eef3f1;
  cursor: pointer; flex: none;
}
.reader-topbar__versions svg { width: 15px; height: 15px; }
.ctx-scrim { display: none; }

.chip--disabled { opacity: .4; cursor: default; }

/* ============ Context panel (per-routine runs) ============ */
.ctx {
  width: 260px; flex: none; height: 100vh; height: 100dvh; position: sticky; top: 0;
  display: flex; flex-direction: column;
  border-right: 1.5px solid #ece8df; background: #faf8f2;
}
.ctx__head { height: 56px; flex: none; display: flex; align-items: center; gap: 8px; padding: 0 10px 0 16px; border-bottom: 1.5px solid #ece8df; }
.ctx__name { flex: 1; min-width: 0; font-family: 'Newsreader', serif; font-size: 16px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ctx__focus { width: 30px; height: 30px; flex: none; border: none; background: none; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: #9a9384; cursor: pointer; }
.ctx__focus:hover { background: #efece4; }
.ctx__focus svg { width: 17px; height: 17px; }

/* RUNS filter row */
.ctx__runs-filter { flex: none; display: flex; align-items: center; gap: 6px; padding: 12px 14px 8px; }
.ctx__runs-label { font-size: 10px; letter-spacing: .5px; color: #a49d8d; font-weight: 600; margin-right: 2px; }
.ctx__filter { font: 600 11px 'Hanken Grotesk', system-ui, sans-serif; padding: 5px 11px; border-radius: 999px; background: #f1ede4; color: #6f6a5e; }
.ctx__filter.is-active { background: #2f6d5b; color: #fff; }

.ctx__body { flex: 1; overflow: auto; padding: 4px 12px 12px; }

/* Routine card wrapping the version timeline */
.ctx-card { border: 1.5px solid #cfe0d9; border-radius: 12px; background: #fff; padding: 10px 10px 9px; }
.ctx-card__head { display: flex; align-items: center; gap: 7px; margin-bottom: 3px; }
.ctx-card__dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: #2f6d5b; }
.ctx-card__name { font-weight: 600; font-size: 13px; color: #26221b; }
.ctx-card__meta { font-size: 11px; color: #9a9384; margin-left: 15px; }

.ctx-runs { margin: 11px 0 2px 4px; border-left: 1.5px solid #ece8df; padding-left: 12px; display: flex; flex-direction: column; gap: 2px; }
.ctx-run { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 8px; text-decoration: none; color: inherit; }
.ctx-run:hover { background: #efece4; text-decoration: none; }
.ctx-run.is-active { background: #eef3f1; }
.ctx-run__dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: #9a9384; }
.ctx-run__dot--success { background: #2f6d5b; }
.ctx-run__dot--failed { background: #b45b3e; }
.ctx-run__dot--pending { background: #c8a24b; }
.ctx-run__label { flex: 1; font-weight: 600; font-size: 12px; color: #26221b; }
.ctx-run.is-active .ctx-run__label { color: #2f6d5b; }
.ctx-run__time { font-size: 11px; color: #9a9384; white-space: nowrap; }
.ctx__empty { color: #9a9384; font-size: 12px; padding: 4px; }
.ctx__legend { display: flex; gap: 12px; padding: 14px 6px 0; font-size: 10.5px; color: #9a9384; }
.ctx__legend span { display: flex; align-items: center; gap: 5px; }
.ctx__legend i { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }

.reader-body {
  flex: 1;
  padding: var(--space-6) clamp(var(--space-5), 8vw, 80px);
  max-width: 860px;
  width: 100%;
  margin: 0 auto;
}
.reader-meta {
  font-size: var(--text-sm);
  color: var(--text-faint);
  margin-bottom: var(--space-3);
}

.reader-running {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-5);
  background: var(--surface-raised);
  border-radius: var(--radius-lg);
  color: var(--text-muted);
}
.reader-running__spinner {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  border: 2px solid var(--border-strong);
  border-top-color: var(--primary);
  animation: spin .8s linear infinite;
  flex: none;
}

.reader-error {
  padding: var(--space-4);
  background: rgba(180,91,62,.08);
  border: var(--hairline) solid rgba(180,91,62,.25);
  border-radius: var(--radius-lg);
  color: var(--ink);
}
.reader-error p { color: var(--text-muted); white-space: pre-wrap; }

/* ============ Rendered markdown document ============ */
.reader-document {
  font-family: var(--font-sans);
  font-size: var(--text-lg);
  line-height: var(--leading-relaxed);
  color: var(--text-body);
}
.reader-document h1, .reader-document h2, .reader-document h3 {
  font-family: var(--font-display);
  font-weight: var(--weight-semibold);
  line-height: var(--leading-tight);
  color: var(--ink);
  margin: var(--space-5) 0 var(--space-2);
}
.reader-document h1 { font-size: var(--display-lg); font-variant-numeric: oldstyle-nums; }
.reader-document h2 { font-size: var(--display-md); font-variant-numeric: oldstyle-nums; }
.reader-document h3 { font-size: var(--display-sm); font-variant-numeric: oldstyle-nums; }
.reader-document p { margin: 0 0 var(--space-3); }
.reader-document ul, .reader-document ol { margin: 0 0 var(--space-3); padding-left: 1.4em; }
.reader-document li { margin-bottom: 4px; }
.reader-document strong { font-weight: var(--weight-semibold); }
.reader-document blockquote {
  margin: var(--space-3) 0;
  padding: var(--space-2) var(--space-3);
  border-left: 3px solid var(--primary-border);
  color: var(--text-muted);
}
.reader-document code {
  font-family: var(--font-mono);
  font-size: .92em;
  background: var(--paper-warm);
  padding: 1px 5px;
  border-radius: 4px;
}
.reader-document pre {
  background: var(--paper-warm);
  padding: var(--space-3);
  border-radius: var(--radius-md);
  overflow-x: auto;
}
.reader-document pre code { background: none; padding: 0; }
.reader-document table {
  width: 100%;
  border-collapse: collapse;
  margin: var(--space-3) 0;
  font-size: var(--text-md);
}
.reader-document th, .reader-document td {
  text-align: left;
  vertical-align: top;
  padding: 9px 12px;
  border-bottom: var(--hairline) solid var(--border-soft);
}
.reader-document th {
  background: var(--paper-warm);
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: var(--tracking-label);
  color: var(--text-faint);
  white-space: nowrap;
}
.reader-document tbody tr:hover { background: var(--paper-warm); }
.reader-document hr { border: none; border-top: var(--hairline) solid var(--border-soft); margin: var(--space-5) 0; }
.reader-document img { max-width: 100%; border-radius: var(--radius-md); }

/* Desktop: keep the prose column at its centered reading width, but let wide
   TABLES break out symmetrically (left + right) — centered on the same axis —
   so dense data isn't cramped. Capped so it never overflows the 260px sidebar. */
@media (min-width: 1200px) {
  .reader-document > table {
    position: relative;
    left: 50%;
    transform: translateX(-50%);
    width: max-content;
    max-width: min(1180px, calc(100vw - 324px));
  }
}
/* Narrow screens: let a wide table scroll instead of crushing every cell. */
@media (max-width: 640px) {
  .reader-document table { display: block; overflow-x: auto; white-space: nowrap; }
}

/* ============ Grounding citations ============ */
.reader-sources {
  margin-top: var(--space-6);
  padding-top: var(--space-4);
  border-top: var(--hairline) solid var(--border-soft);
}
.reader-sources__label {
  font-size: var(--text-2xs);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: var(--space-2);
}
.reader-sources__list {
  margin: 0;
  padding-left: 1.3em;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.reader-sources__list li { font-size: var(--text-md); }
.reader-sources__link { color: var(--text-link); }
.reader-sources__link:hover { text-decoration: underline; }

/* Feedback panel — captures a note that's fed into the routine's next run. */
.reader-feedback {
  margin-top: var(--space-6);
  padding-top: var(--space-4);
  border-top: var(--hairline) solid var(--border-soft);
}
.reader-feedback__label {
  font-size: var(--text-2xs);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: var(--space-2);
}
.reader-feedback__saved {
  font-size: var(--text-sm);
  color: var(--primary);
  margin: 0 0 var(--space-2);
}

/* ── Mobile (<=720px): the versions/runs panel becomes a slide-in drawer ──
   The global mobile top bar (app_shell.css) already replaces the icon
   spine; this handles the delivery-page-specific runs panel on top of it. */
@media (max-width: 720px) {
  /* Folded into the global mobile bar — see deliveries/show.html.erb. It held
     745px of content in a 390px viewport, so half of it (including both
     actions) sat off-screen behind a horizontal scroll nobody discovers. */
  .reader-topbar { display: none; }

  .reader-topbar__reopen { display: none; }
  .reader-topbar__versions { display: flex; }
  .ctx__focus { display: none; }

  /* The clamp above resolves to 8vw — ~31px a side on a phone, the widest
     gutter in the app on the one surface where line length matters most.
     Use the page gutter instead. */
  .reader-body { padding-left: var(--page-gutter); padding-right: var(--page-gutter); }

  .ctx {
    position: fixed; top: 0; right: 0; bottom: 0; width: 86%; max-width: 300px;
    height: auto; z-index: 56; border-right: none;
    box-shadow: -6px 0 26px rgba(50, 42, 28, .22);
    transform: translateX(102%);
    transition: transform .24s ease;
  }
  .reader-shell--versions-open .ctx { transform: translateX(0); }

  .ctx-scrim {
    display: block; position: fixed; inset: 0; z-index: 55;
    background: rgba(38, 34, 27, .34); opacity: 0; pointer-events: none;
    transition: opacity .22s;
  }
  .reader-shell--versions-open .ctx-scrim { opacity: 1; pointer-events: auto; }
}
/* -----------------------------------------------------------------
   jarvis — House-hunt output template (structured, interactive)
   Values mirror the Claude-Design spec (Delivery.dc.html), which
   already matches the brand palette.
   ----------------------------------------------------------------- */
.reader-body--template { max-width: 1040px; padding-top: var(--space-4); }

.hh-layout { display: flex; gap: 34px; align-items: flex-start; }
.hh-article { flex: 1; min-width: 0; max-width: 720px; }

.hh-metarow { display: flex; justify-content: space-between; align-items: center; margin-bottom: 18px; }
.hh-meta { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; }
.hh-pin {
  font: 600 calc(11px * var(--reading-scale)) var(--font-sans); padding: 6px 11px; border-radius: 9px;
  border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; cursor: pointer;
}
.hh-pin.is-on { border-color: #cfe0d9; background: #eef4f1; color: #2f6d5b; }

/* Pin never shrinks: the meta text was squeezing it to 60px, wrapping
   "☆ Pin" onto two lines and turning the pill into a stray blob. */
.hh-pin { flex: none; white-space: nowrap; }

@media (max-width: 720px) {
  /* The pill's white fill and border outweigh everything near them on a
     phone. The glyph and label carry the state on their own. */
  /* Stripping the pill also stripped its padding, so the hit area needs
     restating — min-height keeps it at 44px at every reading size. */
  .hh-pin, .hh-pin.is-on {
    background: none; border-color: transparent;
    display: inline-flex; align-items: flex-start; justify-content: flex-end;
    min-height: 44px; padding: 0 2px 0 14px;
  }

  /* Date and time stay together on one line; the rest drops below.
     The date is unbreakable, so if it can't share the row with the
     pin the pin wraps under it rather than forcing the date to
     split — which is what happens with a long weekday and month at
     the largest reading size. */
  /* baseline, not flex-start: the pin carries a 44px tap box, so aligning
     boxes would sit its label ~12px below the date it sits beside.
     Aligning text baselines lets the hit area extend without showing. */
  .hh-metarow { align-items: baseline; flex-wrap: wrap; }
  .hh-meta__sep { display: none; }
  .hh-meta__date, .hh-meta__detail { display: block; }
  .hh-meta__date { white-space: nowrap; }
  .hh-pin { margin-left: auto; }
}

.hh-title { font-family: var(--font-display); font-weight: 500; font-size: calc(34px * var(--reading-scale)); line-height: 1.15; margin: 0 0 6px; color: var(--ink); }
.hh-subtitle { font-size: calc(13px * var(--reading-scale)); color: #9a9384; margin-bottom: 22px; }

.hh-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 24px; }
.hh-kpi { border: 1.5px solid #e6e1d6; border-radius: 13px; padding: 14px 15px; background: #fff; }
.hh-kpi__value { font-family: var(--font-display); font-size: calc(27px * var(--reading-scale)); line-height: 1; color: var(--ink); }
.hh-kpi__value--accent { color: #b45b3e; }
.hh-kpi__label { font-size: calc(11.5px * var(--reading-scale)); color: #6f6a5e; margin-top: 6px; line-height: 1.35; }
.hh-kpi__label p { margin: 0; }

.hh-dofirst { border: 1.5px solid #cfe0d9; background: linear-gradient(180deg, #f4f8f6, #eef4f1); border-radius: 15px; padding: 18px 20px; margin-bottom: 30px; }
.hh-dofirst__body { margin: 8px 0 0; font-size: calc(14.5px * var(--reading-scale)); line-height: 1.55; color: var(--ink); }

/* "What changed since the last run" — the headline of a scheduled hunt, so it
   sits above the shortlist. Terracotta rather than the green used for
   recommendations: this is news, not advice. */
.hh-since { border: 1.5px solid #e8d3c8; background: linear-gradient(180deg, #fdf6f2, #faeee7); border-radius: 15px; padding: 18px 20px; margin-bottom: 26px; }
.hh-since__body { margin: 8px 0 0; font-size: calc(14.5px * var(--reading-scale)); line-height: 1.55; color: var(--ink); }

.hh-pill { font: 700 calc(10px * var(--reading-scale)) var(--font-sans); letter-spacing: .6px; padding: 4px 9px; border-radius: 999px; }
.hh-pill--do { color: #2f6d5b; background: #dcebe5; }
.hh-pill--match { font-size: calc(9.5px * var(--reading-scale)); letter-spacing: .5px; color: #2f6d5b; background: #dcebe5; padding: 3px 8px; }
.hh-pill--since { color: #b45b3e; background: #f6e2d8; }
.hh-pill--new { font-size: calc(9.5px * var(--reading-scale)); letter-spacing: .5px; color: #b45b3e; background: #f6e2d8; padding: 3px 8px; }
.hh-pill--changed { font-size: calc(9.5px * var(--reading-scale)); letter-spacing: .3px; font-weight: 600; color: #6f6a5e; background: #efeae0; padding: 3px 8px; }

.hh-h2 { font-family: var(--font-display); font-weight: 500; font-size: calc(21px * var(--reading-scale)); margin: 0 0 4px; scroll-margin-top: 20px; color: var(--ink); }
.hh-note { font-size: calc(13px * var(--reading-scale)); color: #9a9384; margin: 0 0 16px; }
.hh-verdict { font-size: calc(14.5px * var(--reading-scale)); line-height: 1.65; color: #3a352c; margin: 6px 0 34px; }

.hh-cards { display: flex; flex-direction: column; gap: 11px; margin-bottom: 34px; }
.hh-card { border: 1.5px solid #e6e1d6; border-radius: 14px; padding: 16px 18px; background: #fff; transition: opacity .15s; }
.hh-card--top { border-color: #cfe0d9; background: #f8fbfa; }
.hh-card.is-dismissed { opacity: .4; }
.hh-card__head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 11px; }
.hh-card__title { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.hh-card__name { font-weight: 600; font-size: calc(14.5px * var(--reading-scale)); }
.hh-card__name a { color: var(--ink); }
.hh-card__name a:hover { color: #b45b3e; }
.hh-card__source { font-size: calc(12px * var(--reading-scale)); color: #9a9384; }
.hh-card__source a { color: #2f6d5b; text-decoration: none; border-bottom: 1px solid #cfe0d9; }
.hh-card__source a:hover { color: #b45b3e; border-bottom-color: #b45b3e; }
.hh-card__actions { display: flex; gap: 6px; flex: none; }
.hh-save { font: 600 calc(11px * var(--reading-scale)) var(--font-sans); padding: 6px 11px; border-radius: 9px; border: none; cursor: pointer; white-space: nowrap; background: #eef4f1; color: #2f6d5b; }
.hh-save.is-on { background: #2f6d5b; color: #fff; }
.hh-dismiss { font: 600 calc(11px * var(--reading-scale)) var(--font-sans); padding: 6px 10px; border-radius: 9px; border: none; cursor: pointer; background: #f1ede4; color: #9a9384; }
.hh-dismiss.is-on { background: #b45b3e; color: #fff; }
.hh-card__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 12px; }
.hh-card__k { font-size: calc(10px * var(--reading-scale)); letter-spacing: .4px; color: #a49d8d; margin-bottom: 3px; }
.hh-card__v { font-size: calc(13px * var(--reading-scale)); font-weight: 600; }
.hh-card__vs { font-size: calc(12px * var(--reading-scale)); color: #6f6a5e; }
.hh-card__v2 { font-size: calc(13px * var(--reading-scale)); color: #3a352c; }
.hh-card__tags { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; border-top: 1.5px solid #f0ece3; padding-top: 11px; }
.hh-card__why { font-size: calc(11px * var(--reading-scale)); color: #9a9384; margin-right: 2px; }
.hh-tag { font: 600 calc(11px * var(--reading-scale)) var(--font-sans); padding: 4px 9px; border-radius: 999px; background: rgba(180,91,62,.1); color: #b45b3e; }

.hh-otable { border: 1.5px solid #e6e1d6; border-radius: 13px; overflow: hidden; background: #fff; margin-bottom: 20px; }
.hh-otable__head { display: flex; gap: 12px; padding: 10px 15px; background: #faf8f3; font: 600 calc(10.5px * var(--reading-scale)) var(--font-sans); letter-spacing: .4px; color: #a49d8d; }
.hh-otable__row { display: flex; gap: 12px; padding: 12px 15px; border-top: 1.5px solid #f0ece3; align-items: flex-start; font-size: calc(12.5px * var(--reading-scale)); }
.hh-oc1 { flex: 1.6; color: #3a352c; } .hh-oc1 a { color: #3a352c; }
.hh-oc2 { flex: 1; font-weight: 600; }
.hh-oc3 { flex: 1.2; color: #b45b3e; font-weight: 600; }

.hh-flag { border-left: 4px solid #b45b3e; background: #fbf3ef; border-radius: 0 12px 12px 0; padding: 14px 18px; margin: 0 0 34px; }
.hh-flag__label { font: 700 calc(10px * var(--reading-scale)) var(--font-sans); letter-spacing: .6px; color: #b45b3e; margin-bottom: 6px; }
.hh-flag__body { margin: 0; font-size: calc(13.5px * var(--reading-scale)); line-height: 1.6; color: #3a352c; }

.hh-custom { margin: 0 0 30px; font-size: calc(14.5px * var(--reading-scale)); }

.hh-steps { display: flex; flex-direction: column; gap: 14px; margin-bottom: 38px; }
.hh-step { display: flex; gap: 13px; align-items: flex-start; }
.hh-step__n { width: 24px; height: 24px; flex: none; border-radius: 50%; background: #eef4f1; color: #2f6d5b; font: 600 calc(12px * var(--reading-scale)) var(--font-sans); display: flex; align-items: center; justify-content: center; margin-top: 1px; }
.hh-step__body { margin: 0; font-size: calc(14px * var(--reading-scale)); line-height: 1.6; color: #3a352c; }

.hh-sources-label { font: 700 calc(11px * var(--reading-scale)) var(--font-sans); letter-spacing: .6px; color: #a49d8d; margin: 0 0 12px; scroll-margin-top: 20px; }
.hh-sources { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 7px; }
.hh-sources li { font-size: calc(13px * var(--reading-scale)); line-height: 1.4; }
.hh-sources a { color: #b45b3e; }

/* top: clears the 56px sticky reader-topbar (+12px breathing room) so the nav
   parks just below it instead of sliding behind it. */
.hh-nav { width: 156px; flex: none; position: sticky; top: 68px; align-self: flex-start; }

/* Anchor jumps (#verdict, #candidates …) must stop below the sticky topbar,
   not underneath it — matches the nav's 68px offset. */
.hh-h2, .hh-sources-label, .hh-shape { scroll-margin-top: 68px; }
.hh-nav__label { font: 700 calc(10px * var(--reading-scale)) var(--font-sans); letter-spacing: .6px; color: #a49d8d; margin-bottom: 11px; }
.hh-nav__links { display: flex; flex-direction: column; gap: 2px; border-left: 1.5px solid #e6e1d6; }
.hh-nav__links a { font-size: calc(12.5px * var(--reading-scale)); color: #6f6a5e; padding: 5px 0 5px 13px; margin-left: -1.5px; border-left: 1.5px solid transparent; }
.hh-nav__links a:hover { color: #2f6d5b; border-left-color: #2f6d5b; }
.hh-nav__shape { display: flex; align-items: center; gap: 6px; font-size: calc(12.5px * var(--reading-scale)); color: #2f6d5b; font-weight: 600; margin-top: 16px; padding-top: 14px; border-top: 1.5px solid #e6e1d6; }

.hh-shape { max-width: 720px; margin-top: 0; scroll-margin-top: 20px; }
.hh-shape__card { border: 1.5px solid #cfe0d9; border-radius: 16px; background: #fff; overflow: hidden; box-shadow: 0 10px 34px rgba(50,42,28,.06); }
.hh-shape__head { padding: 13px 20px; background: #f4f8f6; border-bottom: 1.5px solid #cfe0d9; font-size: calc(14px * var(--reading-scale)); color: #2f6d5b; }
.hh-shape__head span { color: #8f8877; font-weight: 400; }
.hh-shape__body { padding: 18px 20px; }
.hh-shape__lbl { font-size: calc(12.5px * var(--reading-scale)); font-weight: 600; color: #6f6a5e; margin-bottom: 9px; }
.hh-refine { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
.hh-refine__chip { font: 600 calc(12px * var(--reading-scale)) var(--font-sans); padding: 7px 13px; border-radius: 999px; cursor: pointer; background: #f1ede4; color: #6f6a5e; transition: .15s; }
.hh-refine__chip.is-on { background: #2f6d5b; color: #fff; }
.hh-notes { width: 100%; min-height: 84px; padding: 12px 14px; border: 1.5px solid #e6e1d6; border-radius: 12px; font: 400 calc(13.5px * var(--reading-scale))/1.55 var(--font-sans); color: #3a352c; outline: none; resize: vertical; }
.hh-notes:focus { border-color: #2f6d5b; box-shadow: 0 0 0 3px rgba(47,109,91,.2); }
.hh-shape__foot { display: flex; justify-content: space-between; align-items: center; gap: 14px; margin-top: 16px; }
.hh-shape__count { font-size: calc(12px * var(--reading-scale)); color: #9a9384; }
.hh-shape__foot-right { display: flex; align-items: center; gap: 14px; }
.hh-shape__applies { font-size: calc(12px * var(--reading-scale)); color: #9a9384; }
.hh-shape__save {
  font: 600 calc(13px * var(--reading-scale)) var(--font-sans); padding: 11px 18px; border-radius: 11px; border: none;
  background: #2f6d5b; color: #fff; cursor: pointer; box-shadow: 0 3px 10px rgba(47, 109, 91, .25);
}
.hh-shape__save:hover { background: #28604f; }
.hh-shape__save:disabled { opacity: .6; cursor: default; }

@media (max-width: 900px) {
  .hh-layout { flex-direction: column; }
  .hh-nav { display: none; }
  .hh-kpis, .hh-card__grid { grid-template-columns: repeat(2, 1fr); }
}

/* ── Brief provenance (collapsible; shared by reader + templates) ── */
.brief { max-width: 720px; margin: 40px 0 16px; border: 1.5px solid #e6e1d6; border-radius: 16px; background: #fff; overflow: hidden; }
.brief__summary { display: flex; align-items: center; gap: 11px; padding: 15px 18px; cursor: pointer; list-style: none; }
.brief__summary::-webkit-details-marker { display: none; }
.brief__icon { font-size: calc(16px * var(--reading-scale)); }
.brief__headings { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.brief__title { font-weight: 600; font-size: calc(14px * var(--reading-scale)); color: var(--ink); }
.brief__sub { font-size: calc(12px * var(--reading-scale)); color: #9a9384; }
.brief__chev { font: 600 calc(11px * var(--reading-scale)) var(--font-sans); color: #9a9384; }
.brief__chev--open { display: none; }
.brief[open] .brief__chev--closed { display: none; }
.brief[open] .brief__chev--open { display: inline; }
.brief__body { border-top: 1.5px solid #f0ece3; padding: 18px; display: flex; flex-direction: column; gap: 18px; }
.brief__ltag { display: flex; align-items: baseline; gap: 9px; margin-bottom: 9px; flex-wrap: wrap; }
.brief__pill { font: 700 calc(10px * var(--reading-scale)) var(--font-sans); letter-spacing: .5px; color: #6f6a5e; background: #f1ede4; padding: 4px 9px; border-radius: 999px; }
.brief__pill--accent { color: #2f6d5b; background: #dcebe5; }
.brief__hint { font-size: calc(11.5px * var(--reading-scale)); color: #9a9384; margin: 0; }
.brief__link { color: #b45b3e; }
.brief__quote { margin: 0; font-size: calc(13.5px * var(--reading-scale)); line-height: 1.65; color: #3a352c; background: #faf8f3; border-left: 3px solid #cfe0d9; border-radius: 0 10px 10px 0; padding: 12px 15px; white-space: pre-wrap; }
.brief__chips { display: flex; flex-wrap: wrap; gap: 7px; }
.brief__chip { font: 600 calc(12px * var(--reading-scale)) var(--font-sans); padding: 6px 11px; border-radius: 999px; background: #eef4f1; color: #2f6d5b; }
.brief__feedback { display: flex; flex-direction: column; gap: 10px; }
.brief__fitem { display: flex; gap: 10px; align-items: flex-start; }
.brief__forigin { font: 600 calc(10.5px * var(--reading-scale)) var(--font-sans); color: #9a9384; background: #f1ede4; padding: 3px 8px; border-radius: 6px; flex: none; margin-top: 1px; }
.brief__ftext { font-size: calc(13px * var(--reading-scale)); line-height: 1.5; color: #3a352c; }
.brief__foot { font-size: calc(11.5px * var(--reading-scale)); color: #9a9384; border-top: 1.5px solid #f0ece3; padding-top: 13px; }
/* ---------------------------------------------------------------
   jarvis — Create-routine wizard
   --------------------------------------------------------------- */
.wizard-shell {
  width: 100%;
  max-width: 460px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-4);
}
.wizard-brand { margin-bottom: var(--space-2); }
.wizard-card { width: 100%; padding: 0; overflow: hidden; }
.wizard-card__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-3) var(--space-4);
  background: var(--paper-warm);
  border-bottom: var(--hairline) solid var(--border-soft);
}
.wizard-step-label {
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-label);
  color: var(--text-faint);
  text-transform: uppercase;
}
.wizard-card__body {
  padding: var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.wizard-card__body .field__label, .wizard-card__body label { margin-top: var(--space-2); }
.wizard-chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.wizard-toggle-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-2) var(--space-3);
  border: var(--hairline) solid var(--border-default);
  border-radius: var(--radius-md);
}
.wizard-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: var(--space-3);
}
.wizard-nav--end { justify-content: flex-end; }
.wizard-nav [data-wizard-next], .wizard-nav [data-wizard-back] { cursor: pointer; }
.wizard-review-card { display: flex; flex-direction: column; gap: 6px; }
/* Preserve the user's line breaks / indentation in the direction preview. */
#wizard-review-direction { white-space: pre-wrap; word-break: break-word; }
.wizard-errors {
  color: var(--accent);
  font-size: var(--text-sm);
  background: rgba(180,91,62,.08);
  border-radius: var(--radius-md);
  padding: var(--space-2) var(--space-3);
}
[data-skill-pick], [data-frequency-pick], [data-provider-pick] { cursor: pointer; }

/* Desktop: give the wizard more room (roomier direction textarea, less cramped
   forms) and more generous padding. Mobile layout is unchanged. */
@media (min-width: 768px) {
  .wizard-shell { max-width: 600px; gap: var(--space-5); }
  .wizard-card__head { padding: var(--space-4) var(--space-6); }
  .wizard-card__body { padding: var(--space-6); gap: var(--space-3); }
}
/* ---------------------------------------------------------------
   jarvis — Settings screens (routines manage list, providers)
   --------------------------------------------------------------- */
.settings-shell {
  width: 100%;
  max-width: 620px;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.settings-topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.settings-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.settings-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
}
.settings-row__main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.settings-row__actions { display: flex; align-items: center; gap: 6px; flex: none; }

/* --- M3: routine management, edit tabs, history/compare --- */
.settings-row.is-paused { opacity: .6; }
.edit-tabs { display: flex; gap: 6px; margin: var(--space-3) 0 var(--space-2); flex-wrap: wrap; }
.edit-tab { font: 600 12px system-ui; padding: 6px 12px; border-radius: 999px; cursor: pointer; color: var(--ink-mut, #6b665c); background: var(--paper-2, #f4f2ec); }
.edit-tab.is-active { background: var(--primary, #2f6d5b); color: #fff; }
.history-search { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: var(--space-3); }
.compare-grid .delivery-body { font-size: 13px; }

/* --- M4: plans & usage --- */
.plan-grid { display: flex; gap: var(--space-3); flex-wrap: wrap; }
.plan-card { flex: 1 1 240px; display: flex; flex-direction: column; gap: var(--space-2); }
.plan-card--pro { border-color: var(--primary-border, #cfe0d9); background: var(--primary-tint-2, #f4f8f6); }
.plan-card--current { outline: 2px solid var(--primary, #2f6d5b); outline-offset: -2px; }
.plan-card__head { display: flex; align-items: baseline; justify-content: space-between; }
.plan-card__price { font: 600 15px var(--font-sans, system-ui); color: var(--ink, #26221b); }
.plan-card__rule { height: 1px; background: var(--border-soft, #ece8df); margin: 2px 0; }
.plan-card__features { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.plan-card__features li { font-size: 13px; color: var(--ink-soft, #6f6a5e); }
.plan-card__features li::before { content: "✓ "; color: var(--primary, #2f6d5b); font-weight: 600; }
.plan-card__foot { margin-top: auto; padding-top: var(--space-2); }

.usage-card { display: flex; flex-direction: column; }
.usage-nudge { margin-top: var(--space-3); padding: 10px 12px; border-radius: var(--radius-md, 11px);
  background: var(--primary-tint, #eef4f1); color: var(--ink, #26221b); font-size: 13px; }
.usage-nudge--warn { background: rgba(180,91,62,.10); }
.usage-nudge__link { color: var(--accent, #b45b3e); font-weight: 600; }
.usage-row { display: flex; align-items: center; justify-content: space-between;
  padding: 8px 2px; border-bottom: 1px solid var(--border-soft, #ece8df); }
.usage-row__name { font-size: 13px; color: var(--ink, #26221b); }

/* Standard account/settings page frame — matches Home/History/Routines
   (880px, left-aligned, hero + content) instead of the centered onboarding shell. */
.acct-page { width: 100%; max-width: 880px; margin: 0 auto; padding: var(--page-top) var(--page-gutter) 90px; }
.acct-page .settings-shell { max-width: 620px; }

/* Profile settings. */
.prof-divider { display: flex; align-items: baseline; gap: 9px; margin: 26px 0 12px; }
.prof-divider > span:first-child { font: 700 10px "Hanken Grotesk"; letter-spacing: .6px; color: #9a9384; }
.prof-divider__rule { flex: 1; height: 1.5px; background: #e2ddd0; }
.prof-card { border: 1.5px solid #e6e1d6; border-radius: 16px; background: #fff; overflow: hidden; box-shadow: 0 2px 6px rgba(50,42,28,.04); }

/* Danger zone — same shell, terracotta-tinted. */
.prof-divider--danger > span:first-child { color: var(--danger); }
.prof-divider--danger .prof-divider__rule { background: var(--danger-border); }
.prof-card--danger { border-color: var(--danger-border); }
.prof-danger-confirm { padding: 18px 20px; border-top: 1.5px solid var(--danger-border); background: var(--danger-tint); }
.prof-danger-confirm__title { font-size: 12.5px; font-weight: 600; color: var(--danger-press); margin-bottom: 4px; }
.prof-danger-confirm__body { font-size: 12px; color: #6f6a5e; line-height: 1.55; margin-bottom: 13px; }
.prof-danger-confirm .mono { font-family: var(--font-mono); font-size: 11.5px; color: var(--danger); }
.prof-danger-confirm .prof-input { margin-bottom: 13px; }
.prof-danger-confirm__actions { display: flex; gap: 9px; }

.prof-id { display: flex; align-items: center; gap: 15px; padding: 18px 20px; border-bottom: 1.5px solid #f3f0e8; }
.prof-id__av { width: 52px; height: 52px; flex: none; border-radius: 50%; background: #dcebe5; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font: 700 18px "Hanken Grotesk"; }
.prof-id__main { flex: 1; min-width: 0; }
.prof-id__name { font-weight: 600; font-size: 14px; }
.prof-id__email { color: #9a9384; margin-top: 2px; }
.prof-plan { flex: none; font: 600 10px "Hanken Grotesk"; padding: 5px 11px; border-radius: 999px; background: #efe9f2; color: #6a4c86; }

.prof-row { display: flex; align-items: flex-start; gap: 16px; padding: 14px 20px; border-bottom: 1.5px solid #f3f0e8; }
.prof-row--last { border-bottom: none; }
.prof-row__lbl { width: 150px; flex: none; font-size: 12.5px; font-weight: 600; color: #3a352c; padding-top: 9px; }
.prof-row__hint { font-size: 11px; font-weight: 400; color: #9a9384; margin-top: 2px; }
.prof-row__field { flex: 1; min-width: 0; }
.prof-row__note { font-size: 11px; color: #9a9384; margin-top: 7px; line-height: 1.5; }
.prof-input { width: 100%; border: 1.5px solid #e6e1d6; border-radius: 10px; padding: 10px 13px; font: 400 13.5px "Hanken Grotesk"; color: #26221b; outline: none; background: #fff; }
.prof-input:focus { border-color: #cfe0d9; }
.prof-tz { width: 100%; appearance: none; -webkit-appearance: none; border: 1.5px solid #e6e1d6; border-radius: 10px; padding: 10px 34px 10px 13px; font: 500 13px "Hanken Grotesk"; color: #26221b; background: #fff; cursor: pointer; outline: none; }
.prof-tz:focus { border-color: #cfe0d9; }
.prof-seg { display: inline-flex; gap: 6px; }
.prof-seg__opt { display: inline-flex; align-items: center; font: 600 11.5px "Hanken Grotesk"; padding: 8px 14px; border-radius: 9px; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; cursor: pointer; }
.prof-seg__opt.is-on { border-color: #2f6d5b; background: #eef4f1; color: #2f6d5b; }
.prof-seg__radio { position: absolute; opacity: 0; width: 0; height: 0; }

/* Reading-size preview. With the in-reader control gone this is the only
   feedback the setting has, so it renders the real brief template (see
   SettingsHelper#reading_size_sample_delivery) instead of a mock-up.

   .reading-scope (in tokens/typography.css) makes the type tokens track
   --reading-scale; reading_scale_preview.js sets that variable inline so the
   sample shows the PENDING selection rather than the saved one. */
.prof-rsize__preview {
  margin-top: 14px; border-radius: 12px; overflow: hidden;
  border: 1.5px solid #e6e1d6; background: #fcfbf7;
}
.prof-rsize__label {
  font: 700 9.5px "Hanken Grotesk"; letter-spacing: .5px; color: #a49d8d;
  padding: 10px 15px 0;
}
/* The brief template sets its own page-level padding and title size; rein
   both in so the sample sits as a card inside the settings row. */
.prof-rsize__doc { padding: 4px 15px 15px; }
.prof-rsize__doc .db { padding: 0; }
.prof-rsize__doc .db-title { margin-top: 6px; }
/* The TL;DR block carries a page-flow bottom margin that leaves a gap at the
   end of the card here, since it's the last thing in the sample. */
.prof-rsize__doc .db > :last-child { margin-bottom: 0; }
.prof-tf-now { margin-left: auto; flex: none; font-size: 12px; color: #9a9384; }
.prof-tf-now strong { color: #3a352c; font-weight: 600; }
/* Text-only rows (e.g. Email) center vertically — no input to align a top edge to. */
.prof-row--center { align-items: center; }
.prof-row--center .prof-row__lbl { padding-top: 0; }
/* Danger-zone row: label grows, the action stays pinned at the row's end
   (no fixed 150px label column like the label/input rows above it). */
.prof-row--wide .prof-row__lbl { width: auto; flex: 1; }
.prof-email { display: flex; align-items: center; gap: 10px; }
.prof-email .mono { color: #6f6a5e; }
.prof-verified { display: inline-flex; align-items: center; gap: 4px; font: 600 10px "Hanken Grotesk"; color: #2f6d5b; }
.prof-change { margin-left: auto; font: 600 11px "Hanken Grotesk"; padding: 7px 12px; border-radius: 9px; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; cursor: pointer; }
.prof-change:hover { border-color: #cfe0d9; color: #2f6d5b; }

/* Email-change reveal — CSS-only, toggled by the row's "Change" label. */
.prof-echange { max-height: 0; overflow: hidden; transition: max-height .25s ease; }
.prof-echange__cb:checked + .prof-echange { max-height: 220px; }
.prof-echange__body { border: 1.5px solid #e6e1d6; border-radius: 14px; background: #faf8f3; padding: 15px 17px; margin-top: 14px; }
.prof-echange__note { font-size: 12px; color: #6f6a5e; line-height: 1.5; margin: 0 0 11px; }
.prof-echange__form { display: flex; gap: 9px; align-items: center; }
.prof-echange__form .prof-input { flex: 1; }
.prof-foot { font-size: 12px; color: #9a9384; line-height: 1.7; margin-top: 22px; }
.prof-foot a { color: #b45b3e; font-weight: 600; }
.prof-foot a:hover { text-decoration: underline; }

/* Transparent plans page — 4-tier comparison. */
.plan-note { display: flex; gap: 11px; align-items: flex-start; border: 1.5px solid #cfe0d9; background: #f4f8f6; border-radius: 12px; padding: 13px 16px; margin-bottom: 18px; font-size: 12.5px; line-height: 1.55; color: #2f5f52; }
.plan-note strong { color: #245043; }
.plan-note__icon { width: 26px; height: 26px; flex: none; border-radius: 8px; background: #dcebe5; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font-size: 14px; }

/* Shared CTA control (matrix footer + mobile cards). button_to wraps a form;
   display:contents lets the button sit directly in the grid cell / card. */
.pmx form.button_to, .plan-cards form.button_to { display: contents; }
.plan-cta { display: inline-block; text-align: center; font: 600 11.5px "Hanken Grotesk"; padding: 8px 15px; border-radius: 9px; border: 1.5px solid transparent; cursor: pointer; }
.plan-cta--block { display: block; width: 100%; padding: 12px; font-size: 12.5px; border-radius: 11px; }
.plan-cta--go { background: #2f6d5b; color: #fff; border: none; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.plan-cta--go:hover { background: #28604f; text-decoration: none; }
.plan-cta--ghost { border-color: #e6e1d6; color: #26221b; background: #fff; }
.plan-cta--ghost:hover { border-color: #cfe0d9; text-decoration: none; }
.plan-cta--current { background: #faf8f3; border-color: #e6e1d6; color: #9a9384; cursor: default; }
.plan-cta--muted { background: #fff; border-color: #e6e1d6; color: #c2bbac; cursor: default; }

/* Desktop comparison matrix. */
.pmx { border: 1.5px solid #e6e1d6; border-radius: 16px; background: #fff; overflow: hidden; box-shadow: 0 2px 6px rgba(50,42,28,.04); }
.pmx__grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1fr 1fr; }
.pmx__corner { background: #f7f4ee; border-bottom: 1.5px solid #ece8df; }
.pmx__col { padding: 14px 10px; text-align: center; background: #f7f4ee; border-bottom: 1.5px solid #ece8df; }
.pmx__col.is-rec { background: #f4f8f6; box-shadow: inset 0 0 0 1.5px #cfe0d9; }
.pmx__col.is-current { background: #eef3f1; box-shadow: inset 0 0 0 1.5px #2f6d5b; }
.pmx__pname { font-family: "Newsreader", serif; font-size: 15px; font-weight: 600; }
.pmx__tag { display: inline-flex; align-items: center; gap: 3px; margin-top: 6px; font: 700 9.5px "Hanken Grotesk"; letter-spacing: .5px; text-transform: uppercase; padding: 4px 10px; border-radius: 999px; background: #f1ede4; color: #9a9384; }
.pmx__tag--rec { background: #2f6d5b; color: #fff; }
.pmx__tag--cur { background: #dcebe5; color: #2f6d5b; box-shadow: inset 0 0 0 1.5px #2f6d5b; }
.pmx__tag--cur::before { content: "✓"; font-size: 9px; font-weight: 800; }
.pmx__price { font-size: 11.5px; color: #9a9384; margin-top: 4px; }
.pmx__trial { font: 600 9.5px "Hanken Grotesk"; color: #2f6d5b; margin-top: 4px; }
.pmx__label { padding: 11px 16px; font-size: 12.5px; color: #3a352c; display: flex; align-items: center; gap: 6px; border-bottom: 1.5px solid #f3f0e8; }
.pmx__q { width: 15px; height: 15px; flex: none; border-radius: 50%; border: 1.5px solid #cbc4b6; color: #9a9384; display: inline-flex; align-items: center; justify-content: center; font: 700 9px "Hanken Grotesk"; cursor: help; }
.pmx__cell { padding: 11px 10px; display: flex; align-items: center; justify-content: center; text-align: center; border-bottom: 1.5px solid #f3f0e8; }
.pmx__cell.is-rec { background: #f9fbfa; }
.pmx__cell--cta { border-bottom: none; background: #faf8f3; padding: 14px 10px; }
.pmx__cell--cta.is-rec { background: #f4f8f6; }
.pmx__yes { width: 20px; height: 20px; border-radius: 6px; background: #eef4f1; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; }
.pmx__no { width: 20px; height: 20px; border-radius: 6px; background: #f1ede4; color: #c2bbac; display: flex; align-items: center; justify-content: center; font-size: 11px; }
.pmx__txt { font-size: 12px; font-weight: 600; color: #3a352c; white-space: pre-line; line-height: 1.5; }
.pmx__txt--dim { color: #c2bbac; }
.pmx__cell.is-rec .pmx__txt { color: #245043; }

/* Mobile stacked plan cards. */
.plan-cards { display: none; flex-direction: column; gap: 12px; }
.plan-card2 { border: 1.5px solid #e6e1d6; border-radius: 16px; background: #fff; padding: 16px; }
.plan-card2--rec { border: 2px solid #2f6d5b; box-shadow: 0 10px 30px rgba(47,109,91,.13); }
.plan-card2--current { box-shadow: inset 0 0 0 1.5px #2f6d5b; }
.plan-card2__head { display: flex; align-items: center; gap: 8px; margin-bottom: 3px; }
.plan-card2__name { font-family: "Newsreader", serif; font-size: 18px; font-weight: 500; }
.plan-card2__price { margin-left: auto; font-family: "Newsreader", serif; font-size: 18px; font-weight: 500; }
.plan-card2__tagline { font-size: 11.5px; color: #9a9384; margin-bottom: 12px; }
.plan-card2__feats { display: flex; flex-direction: column; gap: 7px; margin-bottom: 14px; }
.plan-card2__feat { display: flex; gap: 9px; align-items: flex-start; }
.plan-card2__ic { width: 18px; height: 18px; flex: none; border-radius: 5px; display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; margin-top: 1px; }
.plan-card2__ic.is-yes { background: #eef4f1; color: #2f6d5b; }
.plan-card2__ic.is-hero { background: #dcebe5; color: #2f6d5b; }
.plan-card2__ic.is-no { background: #f1ede4; color: #c2bbac; }
.plan-card2__ft { font-size: 12px; line-height: 1.4; color: #3a352c; }
.plan-card2__ft.is-dim { color: #9a9384; }

.plan-foot { font-size: 11.5px; color: #9a9384; line-height: 1.6; margin-top: 16px; }

/* Matrix → stacked cards on narrow screens. */
@media (max-width: 720px) {
  .pmx { display: none; }
  .plan-cards { display: flex; }

  /* The 150px label column plus a flex:1 field leaves ~180px for the control
     on a phone, which squeezes selects, segmented controls and the reading
     preview into a sliver. Stack label over field instead. */
  .prof-row, .prof-row--center { flex-direction: column; align-items: stretch; gap: 10px; }
  .prof-row__lbl { width: auto; padding-top: 0; }
  .prof-seg { flex-wrap: wrap; }
  .prof-seg__opt { flex: 1 1 auto; justify-content: center; }
}

/* Usage page — web/thinking meters + by-routine (three states). */
.use-muted { color: #9a9384; font-weight: 400; }
.use-card { border: 1.5px solid #e6e1d6; border-radius: 16px; background: #fff; padding: 20px 22px; margin-bottom: 12px; box-shadow: 0 2px 6px rgba(50,42,28,.04); }
.use-card--flush { padding: 0; overflow: hidden; }

.use-trial { display: flex; align-items: center; gap: 13px; border: 1.5px solid #cfe0d9; border-radius: 16px; background: linear-gradient(#f4f8f6, #eef4f1); padding: 16px 19px; margin-bottom: 14px; }
.use-trial__icon { width: 40px; height: 40px; flex: none; border-radius: 12px; background: #2f6d5b; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 18px; }
.use-trial__text { flex: 1; min-width: 0; }
.use-trial__title { font-weight: 700; font-size: 13.5px; color: #245043; }
.use-trial__sub { font-size: 12px; color: #2f5f52; }
.use-trial__btn { flex: none; padding: 10px 17px; border-radius: 11px; background: #2f6d5b; color: #fff; font: 600 12.5px "Hanken Grotesk"; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.use-trial__btn:hover { background: #28604f; text-decoration: none; }

.use-meter__head { display: flex; align-items: center; gap: 9px; margin-bottom: 12px; }
.use-meter__icon { width: 26px; height: 26px; flex: none; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 14px; }
.use-meter__icon--web { background: #dcebe5; }
.use-meter__icon--think { background: #f1ede4; }
.use-meter__label { font-weight: 600; font-size: 14px; flex: 1; }
.use-meter__count { font-size: 13px; color: #9a9384; }
.use-meter__used { font-family: "Newsreader", serif; font-size: 22px; font-weight: 500; }
.use-bar { height: 11px; border-radius: 999px; background: #f0ece3; overflow: hidden; margin-bottom: 11px; }
.use-bar__fill { height: 100%; border-radius: 999px; }
.use-meter__foot { display: flex; align-items: center; justify-content: space-between; font-size: 12.5px; color: #6f6a5e; }

.use-thinking { display: flex; align-items: center; gap: 12px; padding: 16px 22px; }
.use-thinking__text { flex: 1; }
.use-thinking__title { font-weight: 600; font-size: 13.5px; }
.use-thinking__sub { font-size: 11.5px; color: #9a9384; }
.use-thinking__count { font-size: 11.5px; color: #9a9384; }
.use-thinking__n { font-family: "Newsreader", serif; font-size: 20px; font-weight: 500; color: #26221b; }

.use-warn { display: flex; align-items: center; gap: 11px; border: 1.5px solid #f0e6d6; background: #faf6ef; border-radius: 14px; padding: 13px 16px; margin-bottom: 12px; }
.use-warn__icon { color: #a4712f; flex: none; font-size: 15px; }
.use-warn__text { flex: 1; font-size: 12px; line-height: 1.5; color: #8a6420; }
.use-warn__link { font: 600 11.5px "Hanken Grotesk"; color: #a4712f; flex: none; }

.use-freeweb { display: flex; gap: 15px; align-items: flex-start; }
.use-freeweb .use-meter__icon { width: 42px; height: 42px; font-size: 20px; color: #2f6d5b; background: #eef4f1; }
.use-freeweb__text { flex: 1; }
.use-freeweb__title { font-family: "Newsreader", serif; font-size: 18px; font-weight: 500; margin-bottom: 4px; }
.use-freeweb__sub { font-size: 12.5px; line-height: 1.55; color: #6f6a5e; margin-bottom: 12px; }
.use-freeweb__btn { display: inline-block; padding: 10px 16px; border-radius: 11px; background: #2f6d5b; color: #fff; font: 600 12.5px "Hanken Grotesk"; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.use-freeweb__btn:hover { background: #28604f; text-decoration: none; }

.use-divider { display: flex; align-items: baseline; gap: 9px; margin: 22px 0 12px; }
.use-divider span:first-child { font: 700 10px "Hanken Grotesk"; letter-spacing: .6px; color: #9a9384; }
.use-divider__rule { flex: 1; height: 1.5px; background: #e2ddd0; }

.use-row { display: flex; align-items: center; gap: 12px; padding: 13px 18px; border-bottom: 1.5px solid #f3f0e8; }
.use-row--last { border-bottom: none; }
.use-row__emoji { font-size: 15px; flex: none; width: 22px; text-align: center; }
.use-row__main { flex: 1; min-width: 0; }
.use-row__head { display: flex; align-items: center; gap: 7px; margin-bottom: 6px; }
.use-row__name { font-weight: 600; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.use-tag { font: 600 9px "Hanken Grotesk"; letter-spacing: .3px; padding: 2px 7px; border-radius: 999px; flex: none; }
.use-tag--web { background: #dcebe5; color: #2f6d5b; }
.use-tag--think { background: #f1ede4; color: #9a9384; }
.use-row__bar { height: 6px; border-radius: 999px; background: #f0ece3; overflow: hidden; max-width: 420px; }
.use-row__fill { height: 100%; border-radius: 999px; }
.use-row__count { flex: none; font-size: 13px; font-weight: 600; color: #26221b; width: 34px; text-align: right; }
.use-empty { padding: 22px; text-align: center; color: #9a9384; font-size: 12.5px; border: 1.5px solid #f0ece3; border-radius: 16px; }
.use-foot { font-size: 11.5px; color: #9a9384; margin-top: 16px; line-height: 1.55; }

/* Plan page — current-plan card, upsell banner, compare head, upgrade modal. */
.plan-current { border: 1.5px solid #e6e1d6; border-radius: 16px; background: #fff; overflow: hidden; margin-bottom: 26px; box-shadow: 0 2px 6px rgba(50,42,28,.04); }
.plan-current__head { display: flex; align-items: center; gap: 14px; padding: 18px 20px; }
.plan-current__badge-icon { width: 44px; height: 44px; flex: none; border-radius: 12px; background: #f1ede4; color: #6f6a5e; display: flex; align-items: center; justify-content: center; font: 700 15px "Hanken Grotesk"; }
.plan-current__id { flex: 1; min-width: 0; }
.plan-current__name { font-family: "Newsreader", serif; font-size: 19px; font-weight: 500; display: flex; align-items: center; gap: 8px; }
.plan-current__tag { font: 600 10px "Hanken Grotesk"; padding: 3px 9px; border-radius: 999px; background: #e8efe8; color: #2f6d5b; }
.plan-current__desc { font-size: 12.5px; color: #9a9384; margin-top: 2px; }
.plan-current__price { text-align: right; flex: none; }
.plan-current__amount { font-family: "Newsreader", serif; font-size: 26px; font-weight: 500; line-height: 1; }
.plan-current__per { display: block; font-size: 10.5px; color: #9a9384; }
.plan-current__meter { padding: 0 20px 18px; }
.plan-current__meterhead { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 7px; font-size: 12px; color: #6f6a5e; }
.plan-current__resets { font-size: 11.5px; color: #9a9384; margin-top: 8px; }

/* Subscription management (Stripe portal) + the billing-trouble escape hatch. */
.plan-current__manage { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 16px; padding-top: 16px; border-top: 1.5px solid #ece8df; }
.plan-current__managenote { flex: 1 1 220px; font-size: 11.5px; line-height: 1.5; color: #9a9384; }
.plan-help { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; margin: -14px 0 26px; font-size: 12.5px; color: #6f6a5e; }
.plan-help__form { display: inline; }
.plan-help__link { border: none; background: none; padding: 0; font: inherit; color: #2f6d5b; text-decoration: underline; cursor: pointer; }
.plan-help__link:hover { color: #28604f; }

.plan-upsell { display: flex; align-items: center; gap: 14px; border: 1.5px solid #cfe0d9; background: #f4f8f6; border-radius: 16px; padding: 18px 20px; margin-bottom: 26px; }
.plan-upsell__icon { width: 42px; height: 42px; flex: none; border-radius: 12px; background: #dcebe5; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font-size: 20px; }
.plan-upsell__text { flex: 1; min-width: 0; }
.plan-upsell__title { font-weight: 700; font-size: 14px; color: #245043; margin-bottom: 2px; }
.plan-upsell__sub { font-size: 12.5px; line-height: 1.5; color: #2f5f52; }
.plan-upsell__btn { flex: none; padding: 11px 18px; border-radius: 11px; background: #2f6d5b; color: #fff; font: 600 13px "Hanken Grotesk"; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.plan-upsell__btn:hover { background: #28604f; text-decoration: none; }

.plan-compare-head { display: flex; align-items: baseline; gap: 9px; margin-bottom: 13px; }
.plan-compare-head span:first-child { font: 700 10px "Hanken Grotesk"; letter-spacing: .6px; color: #9a9384; }
.plan-compare-head__rule { flex: 1; height: 1.5px; background: #e2ddd0; }
.plan-compare-head__note { font-size: 11px; color: #9a9384; }

/* upgrade modal via :target */
.plan-modal { display: none; position: fixed; inset: 0; z-index: 60; align-items: center; justify-content: center; padding: 30px; }
.plan-modal:target { display: flex; }
.plan-modal__scrim { position: absolute; inset: 0; background: rgba(38,34,27,.4); }
.plan-modal__card { position: relative; width: 430px; max-width: 100%; background: #fff; border-radius: 20px; overflow: hidden; box-shadow: 0 30px 70px rgba(50,42,28,.3); }
.plan-modal__hero { position: relative; padding: 26px 26px 22px; background: linear-gradient(#f4f8f6, #eef4f1); }
.plan-modal__close { position: absolute; top: 16px; right: 16px; width: 30px; height: 30px; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: #9a9384; }
.plan-modal__close:hover { background: rgba(0,0,0,.05); text-decoration: none; }
.plan-modal__icon { width: 46px; height: 46px; border-radius: 13px; background: #2f6d5b; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 22px; margin-bottom: 14px; }
.plan-modal__title { font-family: "Newsreader", serif; font-size: 23px; font-weight: 500; line-height: 1.15; margin-bottom: 6px; }
.plan-modal__sub { font-size: 13.5px; line-height: 1.6; color: #5c6b62; }
.plan-modal__body { padding: 20px 26px 24px; }
.plan-modal__perks { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; }
.plan-modal__perk { display: flex; gap: 11px; align-items: flex-start; font-size: 13px; line-height: 1.5; color: #3a352c; }
.plan-modal__check { width: 20px; height: 20px; flex: none; border-radius: 6px; background: #dcebe5; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font-size: 12px; margin-top: 1px; }
.plan-modal__cta { width: 100%; padding: 14px; border: none; border-radius: 12px; background: #2f6d5b; color: #fff; font: 600 14px "Hanken Grotesk"; cursor: pointer; box-shadow: 0 3px 10px rgba(47,109,91,.25); margin-bottom: 9px; }
.plan-modal__cta:hover { background: #28604f; }
.plan-modal__fine { text-align: center; font-size: 11px; color: #9a9384; }

/* Providers page — included (system) + BYOK (paid). */
.prov-divider { display: flex; align-items: baseline; gap: 9px; margin: 0 0 12px; }
.prov-divider span:first-child { font: 700 10px "Hanken Grotesk"; letter-spacing: .6px; color: #9a9384; }
.prov-divider__rule { flex: 1; height: 1.5px; background: #e2ddd0; }
.prov-discount { font: 600 10px "Hanken Grotesk"; padding: 2px 8px; border-radius: 999px; background: #eef4f1; color: #2f6d5b; }

.prov-card { border: 1.5px solid #e6e1d6; border-radius: 16px; background: #fff; overflow: hidden; box-shadow: 0 2px 6px rgba(50,42,28,.04); margin-bottom: 26px; }
.prov-row { display: flex; align-items: center; gap: 13px; padding: 14px 20px; border-bottom: 1.5px solid #f3f0e8; }
.prov-row--last { border-bottom: none; }
.prov-tile { width: 34px; height: 34px; flex: none; border-radius: 9px; display: flex; align-items: center; justify-content: center; font-size: 15px; }
.prov-row__main { flex: 1; min-width: 0; }
.prov-row__name { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 13.5px; }
.prov-row__model { color: #9a9384; margin-top: 2px; }
.prov-def { font: 600 10px "Hanken Grotesk"; padding: 3px 9px; border-radius: 999px; background: #e8efe8; color: #2f6d5b; }
.prov-keyok { display: inline-flex; align-items: center; gap: 4px; font: 600 10px "Hanken Grotesk"; color: #2f6d5b; }
.prov-managed { font: 600 11px "Hanken Grotesk"; color: #9a9384; flex: none; }

.prov-locked { display: flex; gap: 15px; align-items: flex-start; padding: 20px 22px; }
.prov-locked__icon { width: 42px; height: 42px; flex: none; border-radius: 12px; background: #f1ede4; color: #9a9384; display: flex; align-items: center; justify-content: center; font-size: 19px; }
.prov-locked__text { flex: 1; }
.prov-locked__title { font-family: "Newsreader", serif; font-size: 18px; font-weight: 500; margin-bottom: 4px; }
.prov-locked__sub { font-size: 12.5px; line-height: 1.55; color: #6f6a5e; margin-bottom: 12px; }
.prov-locked__sub strong { color: #3a352c; }
.prov-locked__btn { display: inline-block; padding: 10px 16px; border-radius: 11px; background: #2f6d5b; color: #fff; font: 600 12.5px "Hanken Grotesk"; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.prov-locked__btn:hover { background: #28604f; text-decoration: none; }

.prov-byok { border-color: #cfe0d9; }
.prov-byok__head { display: flex; align-items: center; gap: 13px; padding: 16px 20px; border-bottom: 1.5px solid #f0ece3; background: #f4f8f6; }
.prov-byok__icon { width: 34px; height: 34px; flex: none; border-radius: 9px; background: #dcebe5; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font-size: 16px; }
.prov-byok__title { font-weight: 600; font-size: 13.5px; }
.prov-byok__sub { font-size: 11.5px; color: #6f6a5e; }
.prov-byok__row { display: flex; align-items: center; gap: 13px; padding: 14px 20px; border-bottom: 1.5px solid #f3f0e8; }
.prov-byok__actions { display: flex; gap: 6px; flex: none; }
.prov-btn { font: 600 11px "Hanken Grotesk"; padding: 6px 11px; border-radius: 8px; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; cursor: pointer; }
.prov-btn:hover { border-color: #cfe0d9; text-decoration: none; }
.prov-byok__foot { display: flex; align-items: center; justify-content: space-between; padding: 13px 20px; }
.prov-byok__add { font: 600 12px "Hanken Grotesk"; color: #2f6d5b; }
.prov-foot { font-size: 11.5px; color: #9a9384; line-height: 1.55; margin-top: -14px; }

/* Providers — BYOM provider picker + guided form. */
.prov-back { display: inline-block; font: 600 12px "Hanken Grotesk"; color: #6f6a5e; margin-bottom: 14px; }
.prov-back:hover { color: #2f6d5b; text-decoration: none; }
.prov-formcard { padding: 22px; }
.prov-pick { display: flex; flex-direction: column; gap: 10px; max-width: 560px; }
.prov-pick__card { display: flex; align-items: center; gap: 13px; border: 1.5px solid #e6e1d6; border-radius: 14px; background: #fff; padding: 15px 17px; color: inherit; }
.prov-pick__card:hover { border-color: #cfe0d9; background: #fcfbf7; text-decoration: none; }
.prov-pick__card.is-soon { opacity: .7; }
.prov-pick__text { flex: 1; min-width: 0; }
.prov-pick__name { font-weight: 600; font-size: 14px; }
.prov-pick__hint { font-size: 11.5px; color: #9a9384; margin-top: 1px; }
.prov-pick__auth { font: 600 10.5px "Hanken Grotesk"; color: #2f6d5b; background: #eef4f1; padding: 4px 9px; border-radius: 999px; flex: none; }
.prov-pick__soon { font: 600 10px "Hanken Grotesk"; color: #9a9384; background: #f1ede4; padding: 4px 9px; border-radius: 999px; flex: none; }

.prov-btn--danger { border-color: #e5c3ba; color: #b45b3e; }
.prov-btn--danger:hover { border-color: #db9d8e; }
/* Global app navigation shell (shared/_app_shell + layouts/app).
   Design: Delivery.dc.html — Option B (permanent icon spine + flyouts).
   At <=720px the spine gives way to a top bar + slide-in drawer instead
   (see the mobile nav block near the end of this file). */

/* dvh, not vh: on mobile browsers 100vh is the LARGE viewport (URL bar
   retracted), so with the bar showing the shell is taller than the visible
   area. The page then scrolls by the height of the browser chrome even when
   the content fits, carrying .mobile-topbar off the top. dvh tracks the
   viewport as the bar shows and hides. vh first as the fallback. */
.app-shell { display: flex; height: 100vh; height: 100dvh; width: 100%; overflow: hidden; background: #efece4; }

/* ── Icon spine (always present) ─────────────────────────────── */
.spine {
  width: 62px; flex: none; z-index: 12;
  border-right: 1.5px solid #ece8df; background: #f4f1ea;
  display: flex; flex-direction: column; align-items: center;
  padding: 12px 0; gap: 5px;
}
.spine__mark {
  width: 32px; height: 32px; border-radius: 9px; flex: none; margin-bottom: 6px;
  overflow: hidden; cursor: pointer; border: none;
  box-shadow: 0 2px 7px rgba(47, 109, 91, .28);
}
.spine__mark img { width: 100%; height: 100%; display: block; object-fit: cover; }
.spine__btn {
  width: 40px; height: 40px; border-radius: 11px; border: none; background: none;
  display: flex; align-items: center; justify-content: center;
  color: #6f6a5e; cursor: pointer; transition: background .12s, color .12s;
}
.spine__btn:hover { background: #ece7dd; }
.spine__btn.is-active { background: #eef3f1; color: #2f6d5b; }
.spine__btn--muted { color: #9a9384; }
.spine__divider { width: 26px; height: 1.5px; background: #e0dacd; margin: 2px 0; }
.spine__spacer { flex: 1; }
.spine__new {
  width: 40px; height: 40px; border-radius: 11px; border: none;
  display: flex; align-items: center; justify-content: center;
  background: #2f6d5b; color: #fff; cursor: pointer;
  box-shadow: 0 3px 9px rgba(47, 109, 91, .28); transition: background .12s;
}
.spine__new:hover { background: #28604f; }
.spine__avatar {
  width: 32px; height: 32px; flex: none; border-radius: 50%; border: none;
  margin-top: 6px; cursor: pointer;
  background: #dcebe5; color: #2f6d5b;
  display: flex; align-items: center; justify-content: center;
  font: 700 11px 'Hanken Grotesk', system-ui, sans-serif;
}

/* ── Main content area ───────────────────────────────────────── */
/* contain: stop a gesture that reaches the end of this scroller from chaining
   out to the document and dragging the shell (and the top bar) with it. */
.app-main { flex: 1; min-width: 0; overflow: auto; overscroll-behavior-y: contain; background: #efece4; }

/* Sticky per-page top bar (design: Delivery.dc.html main top bar). */
.app-topbar {
  position: sticky; top: 0; z-index: 5;
  height: 56px; flex: none; display: flex; align-items: center; gap: 10px;
  padding: 0 22px; border-bottom: 1.5px solid #e6e1d6;
  background: rgba(245, 242, 236, .86); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
}
.app-topbar__title { font-family: 'Newsreader', serif; font-size: 17px; font-weight: 600; color: #26221b; }
.app-topbar__spacer { flex: 1; }
.app-topbar__actions { display: flex; align-items: center; gap: 8px; }
/* A page under the top bar starts at the top, not vertically centered. */
.app-topbar + .jarvis-page { justify-content: flex-start; }

/* Page hero — eyebrow + serif title + subtitle (Home/History/Routines). */
.page-hero__eyebrow { font-size: 12.5px; color: #9a9384; margin-bottom: 5px; }
.page-hero__title { font-family: 'Newsreader', serif; font-weight: 500; font-size: 30px; margin: 0 0 4px; color: #26221b; }
.page-hero__sub { font-size: 13.5px; color: #6f6a5e; margin: 0 0 22px; }
.page-hero__sub strong { color: #3a352c; font-weight: 600; }

/* ── Flyouts (nav + account) ─────────────────────────────────── */
.flyout { position: fixed; inset: 0; z-index: 30; background: rgba(38, 34, 27, .12); display: none; }
.flyout.is-open { display: block; }

.acctflyout {
  position: absolute; left: 70px; bottom: 14px; width: 250px;
  background: #fff; border: 1.5px solid #e6e1d6; border-radius: 14px;
  box-shadow: 0 20px 50px rgba(50, 42, 28, .18); padding: 7px;
}
.acctflyout__head {
  display: flex; align-items: center; gap: 9px; padding: 8px 9px 10px;
  border-bottom: 1.5px solid #f0ece3; margin-bottom: 5px;
}
.acctflyout__head--link { border-radius: 10px; }
.acctflyout__head--link:hover { background: #f4f1ea; text-decoration: none; }
.acctflyout__row {
  display: flex; align-items: center; gap: 11px; padding: 9px 10px; border-radius: 9px;
  color: #26221b; font: 600 12.5px 'Hanken Grotesk', system-ui, sans-serif;
  cursor: pointer; text-decoration: none; width: 100%; border: none; background: none; text-align: left;
}
.acctflyout__row:hover { background: #f4f1ea; text-decoration: none; }
.acctflyout__row .meta { margin-left: auto; font-size: 10.5px; color: #9a9384; font-weight: 600; }
.acctflyout__row--danger { color: #b45b3e; }

.av { width: 28px; height: 28px; flex: none; border-radius: 50%; background: #dcebe5; color: #2f6d5b;
  display: flex; align-items: center; justify-content: center; font: 700 11px 'Hanken Grotesk', system-ui, sans-serif; }
.av--sm { width: 28px; height: 28px; }
.nav-name { font-weight: 600; font-size: 12.5px; color: #26221b; }
.nav-sub { font-size: 11px; color: #9a9384; }
.nav-ic { width: 18px; height: 18px; flex: none; }

/* Icon sprite host */
.nav-sprite { position: absolute; width: 0; height: 0; }

/* Impersonation banner — shown app-wide while an admin is "viewing as" a user. */
.imp-banner { position: sticky; top: 0; z-index: 40; display: flex; align-items: center; gap: 10px; padding: 9px 18px; background: #b45b3e; color: #fff; font: 600 12.5px "Hanken Grotesk"; box-shadow: 0 2px 8px rgba(50,42,28,.18); }
.imp-banner strong { font-weight: 700; }
.imp-banner__eye { font-size: 14px; }
.imp-banner__spacer { flex: 1; }
.imp-banner__stop { font: 600 11.5px "Hanken Grotesk"; padding: 6px 13px; border-radius: 8px; border: 1.5px solid rgba(255,255,255,.6); background: rgba(255,255,255,.14); color: #fff; cursor: pointer; }
.imp-banner__stop:hover { background: rgba(255,255,255,.26); }

/* ── Mobile top bar + nav drawer (<=720px) ───────────────────────
   Replaces the icon spine: a hamburger opens .mobilenav as a slide-in
   drawer (reusing the .flyout backdrop/open mechanics used by the account
   flyout below), and the same avatar button reopens that existing flyout —
   repositioned for a top-anchored trigger instead of the spine's. */
.mobile-topbar { display: none; }
.mobilenav { display: none; }

@media (max-width: 720px) {
  .app-shell { flex-direction: column; }
  .spine { display: none; }

  .mobile-topbar {
    display: flex; align-items: center; gap: 10px;
    height: 52px; flex: none; padding: 0 14px;
    border-bottom: 1.5px solid #ece8df; background: #f4f1ea; z-index: 12;
  }
  .mobile-topbar__menu {
    width: 34px; height: 34px; flex: none; border: none; background: none; border-radius: 9px;
    display: flex; align-items: center; justify-content: center; color: #26221b; cursor: pointer;
  }
  .mobile-topbar__menu:hover { background: #ece7dd; }
  /* The page title and actions live here on mobile — .app-topbar is hidden at
     this width, so this is the only bar. */
  .mobile-topbar__title {
    font-family: "Newsreader", serif; font-weight: 600; font-size: 17px; color: #26221b;
    min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  .mobile-topbar__actions { display: flex; align-items: center; gap: 8px; flex: none; }
  .mobile-topbar__spacer { flex: 1; }

  .app-topbar { display: none; }

  /* Reader: routine name + current version, doubling as the runs-drawer
     trigger, in place of the folded-away .reader-topbar. */
  .mtop-ctx {
    display: flex; align-items: baseline; gap: 7px; min-width: 0;
    border: none; background: none; padding: 0; cursor: pointer; text-align: left;
  }
  .mtop-ctx__name {
    font-family: "Newsreader", serif; font-weight: 600; font-size: 17px; color: #26221b;
    min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  .mtop-ctx__ver { flex: none; font: 600 11px "Hanken Grotesk"; color: #6f6a5e; }
  .mtop-ctx:active { opacity: .6; }
  .mobile-topbar__avatar {
    width: 30px; height: 30px; flex: none; border-radius: 50%; border: none; cursor: pointer;
    background: #dcebe5; color: #2f6d5b;
    display: flex; align-items: center; justify-content: center;
    font: 700 11px "Hanken Grotesk", system-ui, sans-serif;
  }

  .mobilenav {
    display: flex; flex-direction: column;
    position: absolute; left: 0; top: 0; bottom: 0; width: 82%; max-width: 284px;
    background: #faf8f3; box-shadow: 6px 0 26px rgba(50,42,28,.22);
    padding: 14px 12px 18px;
  }
  .mobilenav__brand {
    display: flex; align-items: center; gap: 9px; padding: 4px 8px 16px;
    color: #26221b; text-decoration: none;
    font-family: "Newsreader", serif; font-weight: 600; font-size: 17px;
  }
  .mobilenav__brand img { border-radius: 8px; box-shadow: 0 2px 7px rgba(47,109,91,.28); }
  .mobilenav__row {
    display: flex; align-items: center; gap: 11px; padding: 10px 11px; border-radius: 10px;
    color: #6f6a5e; text-decoration: none; font: 600 13.5px "Hanken Grotesk", system-ui, sans-serif;
  }
  .mobilenav__row:hover { background: #f1ede4; text-decoration: none; }
  .mobilenav__row.is-active { background: #eef3f1; color: #2f6d5b; }
  .mobilenav__spacer { flex: 1; }
  .mobilenav__cta {
    display: flex; align-items: center; justify-content: center; gap: 8px;
    padding: 12px; border-radius: 11px; background: #2f6d5b; color: #fff; text-decoration: none;
    font: 600 13.5px "Hanken Grotesk", system-ui, sans-serif;
  }
  .mobilenav__cta:hover { background: #28604f; text-decoration: none; }

  /* Reposition the account flyout to anchor under the mobile top bar's
     avatar (top-right) instead of the desktop spine's (bottom-left). */
  .acctflyout { left: auto; right: 12px; bottom: auto; top: 60px; }
}
/* Home feed — "Latest across your routines" (design: Delivery.dc.html isHome). */

.home { max-width: 880px; margin: 0 auto; padding: var(--page-top) var(--page-gutter) 90px; }
.home--empty { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.home--empty .jarvis-card { max-width: 420px; width: 100%; }

.home__greet { font-size: 12.5px; color: #9a9384; margin-bottom: 5px; }
.home__title { font-family: 'Newsreader', serif; font-weight: 500; font-size: 30px; margin: 0 0 4px; color: #26221b; }
.home__sub { font-size: 13.5px; color: #6f6a5e; margin: 0 0 24px; }

.feed-card {
  display: block; text-decoration: none; color: inherit;
  border: 1.5px solid #e6e1d6; border-radius: 14px; background: #fff;
  padding: 16px 18px; margin-bottom: 12px; cursor: pointer;
  box-shadow: 0 2px 6px rgba(50, 42, 28, .05);
  transition: border-color .12s, box-shadow .12s;
}
.feed-card:hover { border-color: #cfe0d9; box-shadow: 0 8px 22px rgba(50, 42, 28, .08); text-decoration: none; }
.feed-card__head { display: flex; align-items: center; gap: 8px; margin-bottom: 9px; }
.feed-card__routine { font: 600 11px 'Hanken Grotesk', system-ui, sans-serif; padding: 5px 10px; border-radius: 999px; background: #eef4f1; color: #2f6d5b; }
.feed-card__status { font: 600 11px 'Hanken Grotesk', system-ui, sans-serif; padding: 5px 10px; border-radius: 999px; }
.feed-card__status--success { background: #eef4f1; color: #2f6d5b; }
.feed-card__status--failed { background: #fbf0ec; color: #b45b3e; }
.feed-card__status--pending { background: #f1ede4; color: #8a8478; }
.feed-card__time { margin-left: auto; font-size: 11.5px; color: #9a9384; white-space: nowrap; }
.feed-card__title { font-family: 'Newsreader', serif; font-size: 19px; font-weight: 500; margin-bottom: 5px; color: #26221b; }
.feed-card__snippet { font-size: 13.5px; line-height: 1.5; color: #6f6a5e; }

.feed-empty { border: 1.5px dashed #ddd6c9; border-radius: 14px; padding: 28px; text-align: center; color: #8a8478; }
.feed-empty p { margin: 0 0 14px; font-size: 13.5px; }
.feed-empty__actions { display: flex; gap: 10px; justify-content: center; }
/* History — searchable, date-grouped feed of every delivery.
   Design: Delivery.dc.html isHistory view. */

.hist { max-width: 880px; margin: 0 auto; padding: var(--page-top) var(--page-gutter) 90px; }

/* All three controls share one height for a balanced search header. */
.hist-search { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 24px; }
.hist-search__field {
  display: flex; align-items: center; gap: 8px; flex: 1; min-width: 220px; max-width: 360px;
  height: 44px; padding: 0 14px; border: 1.5px solid #e6e1d6; border-radius: 11px; background: #fff;
}
.hist-search__field svg { width: 16px; height: 16px; color: #9a9384; flex: none; }
.hist-search__field input {
  flex: 1; min-width: 0; height: 100%; border: none; outline: none; background: transparent;
  font: 400 13.5px 'Hanken Grotesk', system-ui, sans-serif; color: #26221b;
}
.hist-search__field input::placeholder { color: #9a9384; }

/* Select styled to match: same height/radius, custom chevron with breathing room. */
.hist-search__filter {
  height: 44px; max-width: 210px; margin: 0;
  padding: 0 38px 0 14px; border-radius: 11px;
  font-size: 13.5px; color: #26221b; cursor: pointer;
  -webkit-appearance: none; -moz-appearance: none; appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%239a9384' 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 13px center;
}

/* Search button matches the input height (was btn--sm, too small). */
.hist-search .btn { height: 44px; padding: 0 20px; border-radius: 11px; }

.hist-day {
  font: 700 10.5px 'Hanken Grotesk', system-ui, sans-serif; letter-spacing: .6px;
  color: #a49d8d; text-transform: uppercase; margin: 0 0 10px;
}
.hist-group { display: flex; flex-direction: column; gap: 8px; margin-bottom: 22px; }

.hist-row {
  display: flex; align-items: center; gap: 11px; padding: 11px 14px;
  border: 1.5px solid #e6e1d6; border-radius: 11px; background: #fff;
  cursor: pointer; text-decoration: none; color: inherit; transition: border-color .12s;
}
.hist-row:hover { border-color: #cfe0d9; text-decoration: none; }
.hist-row__dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: #9a9384; }
.hist-row__dot--success { background: #2f6d5b; }
.hist-row__dot--failed { background: #b45b3e; }
.hist-row__dot--pending { background: #c8a24b; }
.hist-row__chip {
  font: 600 11px 'Hanken Grotesk', system-ui, sans-serif; padding: 4px 9px; border-radius: 999px;
  background: #eef4f1; color: #2f6d5b; white-space: nowrap; flex: none;
}
.hist-row__title { flex: 1; min-width: 0; font-size: 13px; color: #3a352c; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hist-row__meta { font-size: 11.5px; color: #9a9384; white-space: nowrap; flex: none; }

.hist-empty { color: #8a8478; font-size: 13.5px; }
/* Routines list — overview table (design: Delivery.dc.html isRoutinesView). */

.rt { max-width: 880px; margin: 0 auto; padding: var(--page-top) var(--page-gutter) 90px; }

.rt-table { border: 1.5px solid #e6e1d6; border-radius: 14px; background: #fff; }
.rt-head, .rt-row { display: flex; gap: 12px; align-items: center; padding: 12px 18px; }
.rt-head {
  background: #faf8f3; border-radius: 14px 14px 0 0;
  font: 600 10.5px 'Hanken Grotesk', system-ui, sans-serif; letter-spacing: .4px; color: #a49d8d;
}
.rt-row { border-top: 1.5px solid #f0ece3; }
.rt-row:last-child { border-radius: 0 0 14px 14px; }
.rt-row:hover { background: #faf8f3; }
.rt-row.is-paused { opacity: .68; }

/* Columns (header + rows share these widths) */
.rt-c-routine { flex: 1.6; display: flex; align-items: center; gap: 9px; min-width: 0; }
.rt-c-schedule { width: 120px; flex: none; font-size: 12.5px; color: #6f6a5e; }
.rt-c-provider { width: 96px; flex: none; }
.rt-c-next { width: 96px; flex: none; font-size: 12px; color: #9a9384; }
.rt-c-menu { width: 26px; flex: none; display: flex; justify-content: flex-end; }

.rt-dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: #9a9384; }
.rt-dot--on { background: #2f6d5b; }
.rt-dot--paused { background: #c8a24b; }
.rt-routine-link { min-width: 0; text-decoration: none; color: inherit; }
.rt-routine-link:hover .rt-name { text-decoration: underline; }
.rt-name { font-weight: 600; font-size: 13.5px; color: #26221b; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rt-status { font-size: 11.5px; color: #9a9384; }
.rt-provider-chip {
  font: 600 10.5px 'Hanken Grotesk', system-ui, sans-serif; padding: 4px 8px; border-radius: 999px;
  background: #efe9f2; color: #6a4c86; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; max-width: 100%; display: inline-block;
}

/* Row actions — native <details> menu (no JS), escapes the table via overflow. */
.rt-menu { position: relative; }
.rt-menu > summary {
  list-style: none; cursor: pointer; width: 26px; height: 26px; border-radius: 7px;
  display: flex; align-items: center; justify-content: center;
  color: #9a9384; font-weight: 700; font-size: 16px; line-height: 1;
}
.rt-menu > summary::-webkit-details-marker { display: none; }
.rt-menu > summary:hover { background: #ece7dd; color: #6f6a5e; }
.rt-menu[open] > summary { background: #ece7dd; color: #2f6d5b; }
.rt-menu__panel {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 20; width: 172px;
  background: #fff; border: 1.5px solid #e6e1d6; border-radius: 12px; padding: 6px;
  box-shadow: 0 16px 40px rgba(50, 42, 28, .16); display: flex; flex-direction: column; gap: 1px;
}
/* Uniform rows whether link_to (<a>) or button_to (<form><button>) */
.rt-menu__panel a,
.rt-menu__panel button {
  display: flex; align-items: center; width: 100%; text-align: left;
  padding: 8px 10px; border: none; background: none; border-radius: 8px; cursor: pointer;
  font: 600 12.5px 'Hanken Grotesk', system-ui, sans-serif; color: #26221b; text-decoration: none;
}
.rt-menu__panel form { margin: 0; }
.rt-menu__panel a:hover,
.rt-menu__panel button:hover { background: #f4f1ea; text-decoration: none; }
.rt-menu__panel .is-danger { color: #b45b3e; }
.rt-menu__divider { height: 1.5px; background: #f0ece3; margin: 4px 2px; }

.rt-empty { color: #8a8478; font-size: 13.5px; }

/* The wrapper is transparent on desktop, so schedule/provider/next remain
   three independent flex columns matching the header row. */
.rt-c-meta { display: contents; }

/* ---- mobile ----
   The fixed columns total 338px plus gaps, which is already wider than a
   phone before .rt-c-routine (flex: 1.6) gets anything — so the routine name
   collapsed to 0 and vanished. Stack instead: name and menu on one line, the
   metadata on a second. */
@media (max-width: 720px) {
  .rt-head { display: none; }

  .rt-row { flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 14px 16px; }
  .rt-c-routine { order: 1; flex: 1 1 auto; min-width: 0; }
  .rt-c-menu { order: 2; }

  .rt-c-meta {
    order: 3; display: flex; flex: 1 1 100%; align-items: center;
    gap: 8px; flex-wrap: wrap;
  }
  .rt-c-schedule, .rt-c-provider, .rt-c-next { width: auto; flex: none; }
}
/* Admin console — owner-only dashboard shell + Overview. Same palette as the app. */
.adm { display: flex; height: 100vh; height: 100dvh; width: 100%; overflow: hidden; background: #efece4; color: #26221b; }
.adm .mono { font-family: ui-monospace, Menlo, monospace; font-size: 11.5px; }

/* icon spine */
.adm-spine { width: 62px; flex: none; border-right: 1.5px solid #ece8df; background: #f4f1ea; display: flex; flex-direction: column; align-items: center; padding: 12px 0; gap: 6px; z-index: 12; }
.adm-spine__logo { width: 32px; height: 32px; border-radius: 9px; box-shadow: 0 2px 7px rgba(47,109,91,.28); margin-bottom: 4px; display: block; }
.adm-spine__icon { width: 38px; height: 38px; border-radius: 11px; display: flex; align-items: center; justify-content: center; color: #6f6a5e; }
.adm-spine__icon:hover { background: #ece7dd; }
.adm-spine__icon.is-current { background: #26221b; color: #fff; }
.adm-spine__grow { flex: 1; }
.adm-spine__avatar { width: 32px; height: 32px; flex: none; border-radius: 50%; background: #dcebe5; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font: 700 11px "Hanken Grotesk"; margin-top: 6px; }

/* section nav */
.adm-nav { width: 222px; flex: none; background: #faf8f3; border-right: 1.5px solid #e6e1d6; display: flex; flex-direction: column; padding: 18px 13px; }
.adm-nav__head { display: flex; align-items: center; gap: 8px; padding: 0 6px 16px; }
.adm-nav__title { font-family: "Newsreader", serif; font-size: 20px; font-weight: 500; }
.adm-nav__owner { font: 700 8.5px "Hanken Grotesk"; letter-spacing: .4px; background: #26221b; color: #fff; padding: 2px 7px; border-radius: 5px; }
.adm-nav__list { display: flex; flex-direction: column; gap: 2px; }
.adm-navrow { display: flex; align-items: center; gap: 11px; padding: 9px 11px; border-radius: 10px; font: 600 12.5px "Hanken Grotesk"; color: #6f6a5e; cursor: pointer; }
.adm-navrow:hover { background: #efe9de; text-decoration: none; }
.adm-navrow.is-active { background: #26221b; color: #fff; }
.adm-navrow.is-active:hover { background: #26221b; }
.adm-navrow__label { flex: 1; }
.adm-navrow.is-disabled { color: #b7b0a1; cursor: default; }
.adm-navrow.is-disabled:hover { background: none; }
.adm-navrow__soon { font: 600 8.5px "Hanken Grotesk"; letter-spacing: .3px; background: #ece7dd; color: #9a9384; padding: 2px 6px; border-radius: 5px; }
.adm-nav__grow { flex: 1; }

/* main */
.adm-main { flex: 1; min-width: 0; display: flex; flex-direction: column; background: #efece4; }
.adm-topbar { height: 56px; flex: none; display: flex; align-items: center; gap: 11px; padding: 0 26px; border-bottom: 1.5px solid #e6e1d6; background: rgba(245,242,236,.86); backdrop-filter: blur(8px); }
.adm-topbar__title { font-family: "Newsreader", serif; font-size: 19px; font-weight: 500; }
.adm-topbar__spacer { flex: 1; }
.adm-topbar__crumb { color: #9a9384; }

/* Mobile-only "Sections" pill + close button — opens .adm-nav as a slide-in
   drawer instead of the desktop's persistent column. See the @media block
   below (replaces simply hiding .adm-nav with nothing to reopen it). */
.adm-topbar__sections {
  display: none; align-items: center; gap: 5px;
  font: 600 11.5px "Hanken Grotesk"; color: #2f6d5b;
  padding: 6px 10px; border-radius: 9px; border: 1.5px solid #cfe1d9; background: #eef3f1;
  cursor: pointer; flex: none; margin-right: 4px;
}
.adm-nav__close {
  display: none; width: 30px; height: 30px; flex: none; border-radius: 8px; border: none; background: none;
  align-items: center; justify-content: center; color: #9a9384; cursor: pointer; font-size: 14px;
}
.adm-nav__close:hover { background: #efece4; }
.adm-scrim { display: none; }
.adm-guidetoggle { font: 600 11px "Hanken Grotesk"; padding: 6px 12px; border-radius: 999px; cursor: pointer; border: 1.5px solid #e6e1d6; background: #fff; color: #9a9384; }
.adm-guidetoggle.is-on { border-color: #e0d3b8; background: #fbf3e4; color: #a4712f; }
.adm-scroll { flex: 1; overflow: auto; padding: 28px 30px 80px; }
.adm-content { max-width: 1040px; margin: 0 auto; }

/* guide banner */
.adm-guide { border: 1.5px solid #e0d3b8; background: linear-gradient(#fdf8ee, #fbf3e4); border-radius: 14px; padding: 16px 18px; margin-bottom: 18px; display: flex; gap: 13px; }
.adm-guide[hidden] { display: none; }
.adm-guide__icon { width: 32px; height: 32px; flex: none; border-radius: 9px; background: #f0e2c6; color: #a4712f; display: flex; align-items: center; justify-content: center; font-size: 16px; }
.adm-guide__body { flex: 1; min-width: 0; }
.adm-guide__title { font-weight: 700; font-size: 13px; margin-bottom: 4px; color: #5c4a28; }
.adm-guide__text { font-size: 12.5px; line-height: 1.6; color: #7a6a4c; }
.adm-guide__watch { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 11px; }
.adm-guide__chip { font: 600 11px "Hanken Grotesk"; padding: 5px 11px; border-radius: 999px; background: #fff; border: 1.5px solid #ecdcbf; color: #8a6420; }
.adm-guide__close { flex: none; width: 24px; height: 24px; border: none; background: none; border-radius: 7px; display: flex; align-items: center; justify-content: center; color: #b8a06f; cursor: pointer; font-size: 14px; }
.adm-guide__close:hover { background: #f0e2c6; }

/* KPIs */
.adm-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 13px; margin-bottom: 14px; }
.adm-kpi { border: 1.5px solid #e0dacd; border-radius: 14px; background: #fff; padding: 15px 16px; box-shadow: 0 2px 6px rgba(50,42,28,.04); }
.adm-kpi__label { font: 600 10px "Hanken Grotesk"; letter-spacing: .4px; color: #9a9384; margin-bottom: 10px; }
.adm-kpi__val { font-family: "Newsreader", serif; font-size: 27px; font-weight: 500; line-height: 1; }
.adm-kpi__delta { font-size: 10.5px; margin-top: 6px; }

/* two-column: bars + attention */
.adm-grid2 { display: grid; grid-template-columns: 1.6fr 1fr; gap: 14px; }
.adm-card { border: 1.5px solid #e0dacd; border-radius: 14px; background: #fff; padding: 18px 20px; }
.adm-card__head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 16px; }
.adm-card__title { font-weight: 600; font-size: 13px; }
.adm-card__sub { color: #9a9384; }
.adm-bars { display: flex; align-items: flex-end; gap: 6px; height: 132px; }
.adm-bar { flex: 1; background: linear-gradient(#cfe0d9, #b6d1c6); border-radius: 4px 4px 0 0; min-height: 2px; }
.adm-attn { display: flex; flex-direction: column; gap: 9px; }
.adm-attn__row { display: flex; align-items: center; gap: 11px; padding: 10px 11px; border: 1.5px solid #f0ece3; border-radius: 10px; }
.adm-attn__dot { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.adm-attn__text { flex: 1; font-size: 12.5px; }
.adm-attn__n { font-weight: 600; color: #6f6a5e; }

/* unit economics */
.adm-econ { margin-top: 14px; }
.adm-econ__head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 12px; }
.adm-econ__spacer { flex: 1; }
.adm-econ__legend { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; color: #9a9384; }
.adm-econ__sq { width: 8px; height: 8px; border-radius: 2px; display: inline-block; }
.adm-econ__stub { font-size: 12px; line-height: 1.6; color: #6f6a5e; background: #faf8f3; border: 1.5px solid #f0ece3; border-radius: 11px; padding: 12px 14px; margin-bottom: 16px; }
.adm-econ__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.adm-econ__card { border-radius: 12px; padding: 13px 15px; border: 1.5px solid #e0dacd; background: #fff; }
.adm-econ__card--input { border-color: #d7e0e6; background: #f7fafb; }
.adm-econ__label { display: flex; align-items: center; gap: 7px; font: 600 10px "Hanken Grotesk"; letter-spacing: .4px; color: #9a9384; margin-bottom: 9px; }
.adm-econ__val { font-family: "Newsreader", serif; font-size: 24px; font-weight: 500; line-height: 1; color: #c2bbac; }
.adm-econ__note { font-size: 10.5px; color: #9a9384; margin-top: 5px; line-height: 1.4; }
.adm-econ__plain { font-size: 11px; color: #6f6a5e; margin-top: 9px; padding-top: 9px; border-top: 1.5px solid #f3f0e8; line-height: 1.5; }

/* Matches shared/_app_shell's own breakpoint: below this .mobile-topbar (a
   flex child of .adm, same as every other page) becomes visible and must
   stack full-width above the nav+main row instead of sharing it. */
@media (max-width: 720px) {
  .adm { flex-direction: column; }

  /* The desktop shell pins itself to the viewport and scrolls .adm-scroll
     internally. Stacked, that inner pane grows to its full content height
     inside a 100vh clip, so nothing below the fold is reachable. On phones
     let the document scroll instead — the nav is position:fixed here, so it
     doesn't need the pinned parent. */
  .adm { height: auto; min-height: 100vh; min-height: 100dvh; overflow: visible; }
  .adm-scroll { overflow: visible; padding: 20px var(--page-gutter) 90px; }

  /* Folded into the global bar — see the :mobile_title block in
     admin/_shell.html.erb. Stacked under .mobile-topbar this was the same
     108px of chrome the app pages just shed, and the global bar was sitting
     empty above it because admin never sets :page_title. */
  .adm-topbar { display: none; }
}

@media (max-width: 860px) {
  .adm-topbar__sections { display: flex; }
  .adm-nav__close { display: flex; }

  .adm-nav {
    position: fixed; top: 0; right: 0; bottom: 0; width: 82%; max-width: 280px;
    height: auto; z-index: 56; border-right: none;
    box-shadow: -6px 0 26px rgba(50, 42, 28, .22);
    transform: translateX(102%);
    transition: transform .24s ease;
  }
  .adm--sections-open .adm-nav { transform: translateX(0); }

  .adm-scrim {
    display: block; position: fixed; inset: 0; z-index: 55;
    background: rgba(38, 34, 27, .34); opacity: 0; pointer-events: none;
    transition: opacity .22s;
  }
  .adm--sections-open .adm-scrim { opacity: 1; pointer-events: auto; }

  .adm-kpis { grid-template-columns: repeat(2, 1fr); }
  .adm-grid2, .adm-econ__grid { grid-template-columns: 1fr; }

  /* Dense data tables (Users, Providers, Tickets) keep their desktop column
     widths and scroll horizontally rather than squeezing — fixed-width
     columns can't shrink to fit a phone without overlapping. */
  .adm-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .adm-table__head, .adm-urow { width: max-content; min-width: 100%; }

  /* The one flexible column in each table sizes to its own content under
     max-content, so the header and every row would land on a different
     width and the columns would stop lining up. Pin it. */
  .adm-uc-user, .adm-tc-sub { flex: none; width: 190px; }
  .adm-pc-name { flex: none; width: 160px; }
  /* Empty in the header, buttons in the rows — pin it so the header strip
     ends where the rows do. */
  .adm-pc-act { width: 64px; }

  .adm-usearch { flex-wrap: wrap; }
  .adm-usearch__field { flex: 1 1 100%; }
  .adm-usearch__select, .adm-usearch__btn { flex: 1 1 auto; }
}

/* ---------------- Users: search + table ---------------- */
.adm-usearch { display: flex; gap: 10px; margin-bottom: 16px; }
.adm-usearch__field { flex: 1; display: flex; align-items: center; gap: 9px; border: 1.5px solid #e0dacd; border-radius: 11px; background: #fff; padding: 0 14px; color: #9a9384; }
.adm-usearch__input { flex: 1; border: none; outline: none; background: none; font: 400 12.5px "Hanken Grotesk"; color: #26221b; padding: 10px 0; }
.adm-usearch__select { font: 600 11.5px "Hanken Grotesk"; padding: 10px 12px; border: 1.5px solid #e0dacd; border-radius: 11px; background: #fff; color: #6f6a5e; cursor: pointer; }
.adm-usearch__btn { font: 600 11.5px "Hanken Grotesk"; padding: 10px 16px; border: none; border-radius: 11px; background: #2f6d5b; color: #fff; cursor: pointer; }
.adm-usearch__btn:hover { background: #28604f; }

.adm-table { border: 1.5px solid #e0dacd; border-radius: 14px; background: #fff; overflow: hidden; box-shadow: 0 2px 6px rgba(50,42,28,.04); }
.adm-table__head { display: flex; gap: 12px; padding: 11px 18px; background: #f7f4ee; border-bottom: 1.5px solid #ece8df; font: 700 9.5px "Hanken Grotesk"; letter-spacing: .4px; color: #a49d8d; }
.adm-urow { display: flex; gap: 12px; align-items: center; padding: 12px 18px; border-bottom: 1.5px solid #f3f0e8; color: #26221b; }
.adm-urow:hover { background: #fcfbf7; text-decoration: none; }
.adm-urow:last-child { border-bottom: none; }
.adm-uc-id { width: 40px; flex: none; }
.adm-uc-user { flex: 2; display: flex; align-items: center; gap: 11px; min-width: 0; }
.adm-uc-plan { width: 74px; flex: none; }
.adm-uc-auth { width: 56px; flex: none; font-size: 11.5px; color: #6f6a5e; }
.adm-uc-runs { width: 104px; flex: none; }
.adm-uc-rt { width: 52px; flex: none; }
.adm-uc-cc { width: 50px; flex: none; font-size: 11.5px; color: #6f6a5e; }
.adm-uc-pk { width: 56px; flex: none; font-size: 12px; }
.adm-uc-st { width: 66px; flex: none; }
.adm-uavatar { width: 30px; height: 30px; flex: none; border-radius: 50%; background: #ece7db; color: #6f6a5e; display: flex; align-items: center; justify-content: center; font: 700 11px "Hanken Grotesk"; }
.adm-uuser__text { min-width: 0; }
.adm-uuser__name { display: flex; align-items: center; gap: 6px; font-weight: 600; font-size: 12.5px; }
.adm-uuser__email { display: block; font-size: 10.5px; color: #9a9384; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.adm-ubadge { font: 700 8.5px "Hanken Grotesk"; letter-spacing: .4px; padding: 2px 6px; border-radius: 5px; background: #26221b; color: #fff; }
.adm-urunbar { display: block; height: 4px; border-radius: 2px; background: #f0ece3; margin-top: 4px; overflow: hidden; width: 82px; }
.adm-urunbar__fill { display: block; height: 100%; }
.adm-empty { padding: 22px; text-align: center; color: #9a9384; font-size: 12.5px; }
.adm-pager { display: flex; align-items: center; justify-content: space-between; margin-top: 12px; font-size: 11.5px; color: #9a9384; }
.adm-pager__nav { display: flex; gap: 14px; }

/* ---------------- User detail ---------------- */
.adm-back { display: inline-flex; align-items: center; gap: 6px; font: 600 12px "Hanken Grotesk"; color: #6f6a5e; margin-bottom: 16px; }
.adm-back:hover { color: #2f6d5b; text-decoration: none; }
.adm-muted { color: #9a9384; font-weight: 400; }
.adm-udetail { display: flex; gap: 16px; align-items: flex-start; }
.adm-udetail__main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
.adm-udetail__side { width: 288px; flex: none; display: flex; flex-direction: column; gap: 14px; }

.adm-uhero { display: flex; align-items: center; gap: 15px; }
.adm-uhero__avatar { width: 52px; height: 52px; flex: none; border-radius: 50%; background: #e8efe8; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font: 700 17px "Hanken Grotesk"; }
.adm-uhero__id { flex: 1; min-width: 0; }
.adm-uhero__name { font-family: "Newsreader", serif; font-size: 22px; font-weight: 500; }
.adm-uhero__meta { font-size: 11.5px; color: #9a9384; }

.adm-ustats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.adm-ustat { border: 1.5px solid #e0dacd; border-radius: 12px; background: #fff; padding: 13px 15px; }
.adm-ustat__label { font: 600 9.5px "Hanken Grotesk"; letter-spacing: .4px; color: #9a9384; margin-bottom: 7px; }
.adm-ustat__val { font-family: "Newsreader", serif; font-size: 20px; font-weight: 500; }

.adm-urt { display: flex; align-items: center; gap: 11px; padding: 9px 0; border-top: 1.5px solid #f3f0e8; }
.adm-urt:first-of-type { border-top: none; }
.adm-urt__dot { width: 7px; height: 7px; border-radius: 50%; flex: none; }
.adm-urt__name { flex: 1; font-size: 12.5px; font-weight: 600; }
.adm-urt__meta { font-size: 11px; color: #9a9384; }

.adm-ubars { display: flex; align-items: flex-end; gap: 10px; height: 76px; }
.adm-ubar { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 6px; height: 100%; justify-content: flex-end; }
.adm-ubar__stack { width: 100%; display: flex; flex-direction: column-reverse; border-radius: 3px 3px 0 0; overflow: hidden; min-height: 2px; }
.adm-ubar__web { background: #8a6fae; }
.adm-ubar__nonweb { background: #cfe0d9; }
.adm-ubar__m { font-size: 9px; color: #9a9384; }
.adm-ulegend { display: flex; gap: 16px; margin-top: 12px; font-size: 11px; color: #6f6a5e; }
.adm-ulegend span { display: flex; align-items: center; gap: 6px; }
.adm-sq { width: 9px; height: 9px; border-radius: 2px; display: inline-block; }

.adm-umix { display: flex; height: 34px; border-radius: 9px; overflow: hidden; margin-bottom: 14px; }
.adm-umix__web { background: #8a6fae; display: flex; align-items: center; padding: 0 12px; color: #fff; font: 600 12px "Hanken Grotesk"; }
.adm-umix__nonweb { background: #dfe8e2; display: flex; align-items: center; padding: 0 10px; color: #3f5b4f; font: 600 12px "Hanken Grotesk"; }
.adm-umixgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.adm-umixcard { border: 1.5px solid #f0ece3; border-radius: 10px; padding: 10px 12px; }
.adm-umixcard__head { display: flex; align-items: center; gap: 7px; margin-bottom: 5px; font-size: 11px; color: #6f6a5e; }
.adm-umixcard__dot { width: 7px; height: 7px; border-radius: 50%; }
.adm-umixcard__n { font-size: 13px; font-weight: 600; color: #26221b; }

/* actions + security + byok */
.adm-actions { display: flex; flex-direction: column; gap: 8px; }
.adm-action { display: block; width: 100%; padding: 10px 12px; border-radius: 10px; font: 600 12px "Hanken Grotesk"; cursor: pointer; text-align: center; border: 1.5px solid #e6e1d6; color: #26221b; background: #fff; }
.adm-action:hover { border-color: #cfe0d9; }
.adm-action--danger { border-color: #e5c3ba; color: #b45b3e; background: #fbf3f0; }
.adm-action--ok { border-color: #cfe0d9; color: #2f6d5b; background: #f4f8f6; }
.adm-action.is-disabled { color: #c2bbac; cursor: default; background: #faf8f3; }
.adm-action-inline { display: flex; gap: 7px; }
.adm-action-select { flex: 1; font: 600 12px "Hanken Grotesk"; padding: 9px 10px; border: 1.5px solid #e6e1d6; border-radius: 10px; background: #fff; }
.adm-action-inline .adm-action { width: auto; padding: 9px 12px; }

.adm-seclist { display: flex; flex-direction: column; gap: 9px; font-size: 12px; color: #6f6a5e; }
.adm-secrow { display: flex; justify-content: space-between; align-items: center; }
.adm-secval { font-weight: 600; color: #26221b; }

.adm-byok { display: flex; align-items: center; gap: 8px; font-size: 12px; margin-bottom: 8px; }
.adm-byok__dot { width: 6px; height: 6px; border-radius: 50%; flex: none; }
.adm-byok__name { flex: 1; }

@media (max-width: 900px) {
  .adm-udetail { flex-direction: column; }
  .adm-udetail__side { width: 100%; }
}

/* ---------------- Support inbox ---------------- */
.adm-navrow__badge { font: 600 9.5px "Hanken Grotesk"; padding: 2px 7px; border-radius: 999px; background: #cf8f7e; color: #fff; }
.adm-navrow.is-active .adm-navrow__badge { background: rgba(255,255,255,.22); }

.adm-tfilters { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.adm-tfilter { font: 600 11.5px "Hanken Grotesk"; padding: 8px 14px; border: 1.5px solid #e0dacd; border-radius: 999px; background: #fff; color: #6f6a5e; }
.adm-tfilter:hover { border-color: #cfe0d9; text-decoration: none; }
.adm-tfilter.is-on { border-color: #2f6d5b; background: #eef4f1; color: #2f6d5b; }
.adm-tfilters__spacer { flex: 1; }
.adm-tfilters__note { font-size: 11.5px; color: #9a9384; }

.adm-tc-id { width: 60px; flex: none; }
.adm-tc-sub { flex: 2; min-width: 0; display: flex; align-items: center; gap: 8px; }
.adm-tc-user { width: 150px; flex: none; display: flex; align-items: center; gap: 7px; min-width: 0; }
.adm-tc-cat { width: 92px; flex: none; }
.adm-tc-st { width: 78px; flex: none; }
.adm-tc-up { width: 74px; flex: none; font-size: 11px; color: #9a9384; }
.adm-tunread { width: 8px; height: 8px; border-radius: 50%; background: #2f6d5b; flex: none; }
.adm-tsub__text { min-width: 0; }
.adm-tsub__subject { display: block; font-weight: 600; font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.adm-tsub__preview { display: block; font-size: 10.5px; color: #9a9384; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.adm-uavatar--sm { width: 22px; height: 22px; font-size: 9px; }
.adm-tuser__email { font-size: 11.5px; color: #6f6a5e; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.adm-catpill { font: 600 9.5px "Hanken Grotesk"; padding: 3px 8px; border-radius: 999px; background: #f1ede4; color: #6f6a5e; }

.adm-tickethead { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.adm-tickethead__subject { font-family: "Newsreader", serif; font-size: 20px; font-weight: 500; line-height: 1.2; }

.adm-reply { border: 1.5px solid #cfe0d9; border-radius: 14px; background: #fff; overflow: hidden; }
.adm-reply__input { display: block; width: 100%; border: none; outline: none; padding: 14px 16px; font: 400 13px/1.6 "Hanken Grotesk"; color: #3a352c; resize: vertical; }
.adm-reply__foot { display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-top: 1.5px solid #f0ece3; background: #faf8f3; }
.adm-reply__resolve { font: 600 12px "Hanken Grotesk"; padding: 8px 15px; border-radius: 9px; border: none; background: #2f6d5b; color: #fff; cursor: pointer; }
.adm-reply__resolve:hover { background: #28604f; }

.adm-statusset { display: flex; gap: 6px; }
.adm-statusbtn { flex: 1; font: 600 10px "Hanken Grotesk"; padding: 6px 8px; border-radius: 8px; border: 1.5px solid #e6e1d6; background: #fff; color: #9a9384; cursor: pointer; }
.adm-statusbtn.is-on { border-color: #2f6d5b; background: #eef4f1; color: #2f6d5b; }
.adm-tuserctx { display: flex; align-items: center; gap: 10px; }
.adm-tuserctx__name { font-weight: 600; font-size: 12.5px; }
.adm-tuserctx__link { display: inline-block; margin-top: 12px; font: 600 11.5px "Hanken Grotesk"; color: #2f6d5b; }

/* ---------------- Security & abuse ---------------- */
.adm-kpis--4 { grid-template-columns: repeat(4, 1fr); }
.adm-seccluster__head { display: flex; align-items: center; gap: 9px; padding: 14px 18px; border-bottom: 1.5px solid #ece8df; }
.adm-cluster { display: flex; gap: 14px; align-items: center; padding: 13px 18px; border-bottom: 1.5px solid #f3f0e8; }
.adm-cluster:last-child { border-bottom: none; }
.adm-cluster__ip { width: 128px; flex: none; color: #26221b; }
.adm-cluster__main { flex: 1; min-width: 0; }
.adm-cluster__count { font-size: 12.5px; font-weight: 600; margin-bottom: 2px; }
.adm-cluster__meta { font-size: 11px; color: #9a9384; }
.adm-risk { font: 600 10px "Hanken Grotesk"; padding: 4px 10px; border-radius: 999px; }
.adm-risk--high { background: #f4dcd4; color: #b45b3e; }
.adm-risk--medium { background: #faece0; color: #a4712f; }
.adm-risk--low { background: #ece7dd; color: #9a9384; }
.adm-cluster__review { font: 600 11.5px "Hanken Grotesk"; padding: 7px 13px; border-radius: 9px; border: 1.5px solid #e5c3ba; color: #b45b3e; background: #fbf3f0; cursor: pointer; }
.adm-cluster__review:hover { background: #f7e9e3; }

.adm-secbars { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 14px; }
.adm-secbar { height: 9px; border-radius: 999px; background: #f0ece3; overflow: hidden; }
.adm-secbar__fill { height: 100%; border-radius: 999px; }

.adm-audit { display: flex; align-items: baseline; gap: 12px; padding: 8px 0; border-top: 1.5px solid #f3f0e8; }
.adm-audit:first-of-type { border-top: none; }
.adm-audit__action { flex: none; font: 600 11px "Hanken Grotesk"; padding: 3px 9px; border-radius: 7px; background: #f1ede4; color: #6f6a5e; }
.adm-audit__who { flex: 1; font-size: 12px; color: #6f6a5e; }
.adm-audit__time { flex: none; font-size: 11px; color: #9a9384; }

.adm-secnote { margin-top: 14px; border: 1.5px solid #cfe0d9; background: #f4f8f6; border-radius: 12px; padding: 14px 17px; font-size: 12px; line-height: 1.55; color: #2f5f52; }

/* ---------------- Providers ---------------- */
.adm-secnote--info { margin-top: 0; margin-bottom: 16px; border-color: #b7d0c7; background: #f1f6f3; }
.adm-pc-name { flex: 1.4; display: flex; align-items: center; gap: 10px; min-width: 0; }
.adm-pc-kind { width: 150px; flex: none; }
.adm-pc-model { width: 150px; flex: none; }
.adm-pc-key { width: 70px; flex: none; font-size: 11.5px; }
.adm-pc-def { width: 78px; flex: none; font-size: 11.5px; color: #6f6a5e; }
.adm-pc-state { width: 66px; flex: none; }
.adm-ptile { width: 30px; height: 30px; flex: none; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 14px; }
.adm-pname { font-weight: 600; font-size: 12.5px; }
.adm-pstate { font: 600 10px "Hanken Grotesk"; padding: 3px 9px; border-radius: 999px; }
.adm-pstate.is-on { background: #e8efe8; color: #2f6d5b; }
.adm-pstate.is-off { background: #ece7dd; color: #9a9384; }
.adm-provfoot { display: flex; align-items: center; gap: 12px; margin-top: 14px; }

/* ---------------- System health ---------------- */
.adm-health__link { font: 600 11px "Hanken Grotesk"; color: #3d5c72; }
.adm-queue { display: flex; align-items: center; gap: 11px; padding: 9px 0; border-top: 1.5px solid #f3f0e8; }
.adm-queue:first-of-type { border-top: none; }
.adm-queue__name { flex: 1; }
.adm-queue__latency { font-size: 11px; color: #9a9384; }
.adm-queue__depth { width: 44px; text-align: right; font-weight: 600; }
.adm-outcomes { display: flex; height: 15px; border-radius: 8px; overflow: hidden; margin-bottom: 14px; background: #f0ece3; }
.adm-outcomes__legend { display: flex; flex-direction: column; gap: 8px; font-size: 12px; color: #6f6a5e; }
.adm-outcomes__legend > div { display: flex; align-items: center; gap: 8px; }
.adm-outcomes__l { flex: 1; }
.adm-dot { width: 8px; height: 8px; border-radius: 50%; }
.adm-provhealth { display: flex; align-items: center; gap: 13px; padding: 10px 0; border-top: 1.5px solid #f3f0e8; }
.adm-provhealth:first-of-type { border-top: none; }
.adm-provhealth__name { width: 140px; font-size: 12.5px; font-weight: 600; }
.adm-provhealth__track { flex: 1; height: 8px; border-radius: 4px; background: #f0ece3; overflow: hidden; }
.adm-provhealth__fill { height: 100%; }
.adm-provhealth__rate { width: 52px; text-align: right; }
.adm-provhealth__tokens { width: 92px; text-align: right; color: #9a9384; }

/* ---------------- Plans & billing ---------------- */
.adm-plans { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 16px; }
.adm-plan { border: 1.5px solid #e0dacd; border-radius: 14px; background: #fff; padding: 17px 18px; display: flex; flex-direction: column; }
.adm-plan--hi { border-color: #cfe0d9; background: #f4f8f6; }
.adm-plan__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 3px; }
.adm-plan__name { font-family: "Newsreader", serif; font-size: 19px; font-weight: 500; }
.adm-plan__tagline { font-size: 11.5px; color: #9a9384; margin-bottom: 13px; }
.adm-plan__price { display: flex; align-items: baseline; gap: 5px; margin-bottom: 14px; }
.adm-plan__amount { font-family: "Newsreader", serif; font-size: 30px; font-weight: 500; line-height: 1; }
.adm-plan__per { font-size: 11.5px; color: #9a9384; }
.adm-plan__rows { display: flex; flex-direction: column; gap: 8px; border-top: 1.5px solid #f0ece3; padding-top: 12px; }
.adm-plan__row { display: flex; justify-content: space-between; font-size: 12px; color: #6f6a5e; }
.adm-plan__count { border-top: 1.5px solid #f0ece3; margin-top: 12px; padding-top: 11px; display: flex; justify-content: space-between; align-items: baseline; font-size: 14px; font-weight: 600; }

.adm-trial { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; }
.adm-trial__icon { width: 34px; height: 34px; flex: none; border-radius: 9px; background: #f1ede4; color: #a4712f; display: flex; align-items: center; justify-content: center; font-size: 16px; }
.adm-trial__text { flex: 1; }
.adm-trial__title { font-weight: 600; font-size: 12.5px; margin-bottom: 2px; }

.adm-billing { border: 1.5px solid #b7c9d6; background: #eef3f6; border-radius: 14px; padding: 18px 20px; }
.adm-billing__head { display: flex; align-items: center; gap: 9px; margin-bottom: 14px; }
.adm-billing__icon { width: 24px; height: 24px; border-radius: 7px; background: #5b7f9e; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 13px; }
.adm-billing__badge { font: 600 9px "Hanken Grotesk"; letter-spacing: .4px; background: #5b7f9e; color: #fff; padding: 2px 7px; border-radius: 5px; }
.adm-billing__spacer { flex: 1; }
.adm-billing__link { font: 600 11.5px "Hanken Grotesk"; color: #3d5c72; cursor: pointer; }
.adm-billing__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.adm-billing__val { font-family: "Newsreader", serif; font-size: 23px; font-weight: 500; color: #c2bbac; }
.adm-billing__label { font-size: 10.5px; color: #5c6b76; margin-top: 3px; }
.adm-billing__note { font-size: 11px; color: #5c6b76; margin-top: 14px; line-height: 1.55; border-top: 1.5px solid #d7e0e6; padding-top: 12px; }

@media (max-width: 900px) {
  .adm-plans, .adm-billing__grid { grid-template-columns: repeat(2, 1fr); }
}

/* System provider management controls */
.adm-pc-act { flex: none; display: flex; gap: 8px; align-items: center; margin-left: auto; }
.adm-linkbtn { font: 600 11px "Hanken Grotesk"; color: #2f6d5b; background: none; border: none; cursor: pointer; padding: 0; }
.adm-linkbtn:hover { text-decoration: underline; }
.adm-linkbtn--danger { color: #b45b3e; }
.adm-pstate--btn { border: none; cursor: pointer; }
.adm-provform__lbl { display: block; font: 600 11px "Hanken Grotesk"; color: #6f6a5e; margin: 12px 0 6px; }
.adm-provform__input { width: 100%; padding: 10px 12px; border: 1.5px solid #e6e1d6; border-radius: 10px; font: 400 13px "Hanken Grotesk"; color: #26221b; background: #fff; outline: none; }
.adm-provform__input:focus { border-color: #cfe0d9; }
.adm-provform__check { display: flex; align-items: center; gap: 8px; margin: 14px 0 4px; font-size: 12.5px; color: #6f6a5e; }
.adm-provform__errors { background: #fbf3f0; border: 1.5px solid #e5c3ba; color: #b45b3e; border-radius: 10px; padding: 10px 13px; font-size: 12.5px; margin-bottom: 12px; }
.adm-provform__foot { display: flex; align-items: center; gap: 10px; margin-top: 18px; }

/* ---- mobile overrides that must outrank later base rules ----
   A media query adds no specificity, so anything declared further down the
   file beats an earlier @media block. .adm-kpis--4 is defined below the
   860px block, so it kept its 4 columns on phones and overflowed the
   viewport by 26px on Security and System health. */
@media (max-width: 860px) {
  .adm-kpis--4 { grid-template-columns: repeat(2, 1fr); }
}
/* Daily-brief output templates — TL;DR and Newspaper styles share these tokens. */
.db-metarow { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 6px; }
.db-meta { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; }
.db-pin { font: 600 calc(12px * var(--reading-scale)) "Hanken Grotesk"; padding: 6px 12px; border-radius: 999px; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; cursor: pointer; }
.db-pin.is-on { border-color: #cfe0d9; background: #eef4f1; color: #2f6d5b; }

/* Pin never shrinks: the meta text was squeezing it to 60px, wrapping
   "☆ Pin" onto two lines and turning the pill into a stray blob. */
.db-pin { flex: none; white-space: nowrap; }

@media (max-width: 720px) {
  /* The pill's white fill and border outweigh everything near them on a
     phone. The glyph and label carry the state on their own. */
  /* Stripping the pill also stripped its padding, so the hit area needs
     restating — min-height keeps it at 44px at every reading size. */
  .db-pin, .db-pin.is-on {
    background: none; border-color: transparent;
    display: inline-flex; align-items: flex-start; justify-content: flex-end;
    min-height: 44px; padding: 0 2px 0 14px;
  }

  /* Date and time stay together on one line; the rest drops below.
     The date is unbreakable, so if it can't share the row with the
     pin the pin wraps under it rather than forcing the date to
     split — which is what happens with a long weekday and month at
     the largest reading size. */
  /* baseline, not flex-start: the pin carries a 44px tap box, so aligning
     boxes would sit its label ~12px below the date it sits beside.
     Aligning text baselines lets the hit area extend without showing. */
  .db-metarow { align-items: baseline; flex-wrap: wrap; }
  .db-meta__date { white-space: nowrap; }
  .db-pin { margin-left: auto; }
}

/* ---- shared feedback card ---- */
.db-fb { border: 1.5px solid #cfe0d9; border-radius: 16px; background: #fff; overflow: hidden; box-shadow: 0 10px 34px rgba(50,42,28,.06); margin-top: 22px; }
.db-fb__head { padding: 16px 18px 4px; }
.db-fb__title { font-family: "Newsreader", serif; font-size: calc(18px * var(--reading-scale)); font-weight: 500; }
.db-fb__sub { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; margin-top: 2px; }
.db-fb__body { padding: 12px 18px 18px; }
.db-fb__chips { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 12px; }
.db-fb__chip { font: 600 calc(11.5px * var(--reading-scale)) "Hanken Grotesk"; padding: 6px 11px; border-radius: 999px; cursor: pointer; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; }
.db-fb__chip.is-on { border-color: #2f6d5b; background: #eef4f1; color: #2f6d5b; }
.db-fb__notes { display: block; width: 100%; min-height: 56px; padding: 12px 14px; border: 1.5px solid #e6e1d6; border-radius: 11px; font: 400 calc(13px * var(--reading-scale))/1.6 "Hanken Grotesk"; color: #3a352c; outline: none; background: #fcfbf7; resize: vertical; }
.db-fb__notes:focus { border-color: #cfe0d9; }
.db-fb__foot { display: flex; align-items: center; gap: 14px; margin-top: 14px; }
.db-fb__spacer { flex: 1; }
.db-fb__status { font-size: calc(12px * var(--reading-scale)); color: #2f6d5b; }
.db-fb__save { font: 600 calc(13px * var(--reading-scale)) "Hanken Grotesk"; padding: 11px 18px; border-radius: 11px; border: none; background: #2f6d5b; color: #fff; cursor: pointer; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.db-fb__save:hover { background: #28604f; }

.db-colophon { text-align: center; padding: 22px 0 0; font-size: calc(11px * var(--reading-scale)); line-height: 1.6; color: #9a9384; }

/* =================== TL;DR =================== */
.db--tldr { max-width: 660px; margin: 0 auto; }
.db-title { font-family: "Newsreader", serif; font-weight: 500; font-size: calc(30px * var(--reading-scale)); line-height: 1.1; margin: 0 0 20px; }
/* Reading cue, under the title: how long the brief takes, not when it ran. */
.db-readtime {
  display: flex; align-items: center; gap: 6px;
  font-size: calc(12.5px * var(--reading-scale)); color: #9a9384;
  margin: -12px 0 20px;
}

.db-tldr { background: #eef4f1; border: 1.5px solid #cfe0d9; border-radius: 16px; padding: 18px 20px; margin-bottom: 26px; }
.db-tldr__head { display: flex; align-items: center; gap: 8px; margin-bottom: 13px; }
.db-tldr__badge { width: 24px; height: 24px; border-radius: 7px; background: #2f6d5b; color: #fff; display: flex; align-items: center; justify-content: center; font-size: calc(12px * var(--reading-scale)); }
.db-tldr__label { font: 700 calc(11px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .8px; color: #2f6d5b; }
.db-tldr__list { display: flex; flex-direction: column; gap: 11px; }
.db-tldr__item { display: flex; gap: 11px; align-items: flex-start; }
.db-tldr__n { font-family: "Newsreader", serif; font-weight: 600; font-size: calc(15px * var(--reading-scale)); color: #2f6d5b; flex: none; line-height: 1.3; }
.db-tldr__text { font-size: calc(14px * var(--reading-scale)); line-height: 1.5; color: #245043; }
.db-tldr__text strong { font-weight: 700; color: #1f3f36; }

.db-divider { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; }
.db-divider__label { font: 700 calc(10px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: 1px; color: #9a9384; }
.db-divider__rule { flex: 1; height: 1.5px; background: #e2ddd0; }
.db-divider__hint { font-size: calc(11px * var(--reading-scale)); color: #9a9384; }

.db-theme { margin-top: 16px; }
.db-theme__head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.db-theme__sq { width: 7px; height: 7px; border-radius: 2px; }
.db-theme__name { font: 700 calc(10px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .6px; color: #6f6a5e; }
.db-theme__count { font-size: calc(10.5px * var(--reading-scale)); color: #b9b2a3; }
.db-theme__items { border: 1.5px solid #e6e1d6; border-radius: 13px; background: #fff; overflow: hidden; }

.db-item + .db-item { border-top: 1.5px solid #f0ece3; }
.db-item__head { display: flex; align-items: center; gap: 11px; padding: 13px 15px; cursor: pointer; width: 100%; background: none; border: none; text-align: left; }
.db-item__dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: #d8d2c5; }
.db-item.is-open .db-item__dot { background: var(--dot, #2f6d5b); }
.db-item__headline { flex: 1; font-weight: 600; font-size: calc(13.5px * var(--reading-scale)); line-height: 1.35; min-width: 0; }
.db-item__time { font-size: calc(11px * var(--reading-scale)); color: #9a9384; flex: none; }
.db-item__chev { flex: none; color: #b9b2a3; font-size: calc(15px * var(--reading-scale)); transition: transform .2s; }
.db-item.is-open .db-item__chev { transform: rotate(90deg); }
.db-item__detail { display: none; padding: 0 15px 15px 41px; flex-direction: column; gap: 10px; }
.db-item.is-open .db-item__detail { display: flex; }
.db-item__body { font-size: calc(13px * var(--reading-scale)); line-height: 1.6; color: #443f34; margin: 0; }
.db-item__why { display: flex; gap: 8px; align-items: flex-start; background: #f4f8f6; border-radius: 9px; padding: 9px 12px; font-size: calc(12px * var(--reading-scale)); line-height: 1.5; color: #2f5f52; }
.db-item__whylbl { font: 700 calc(8px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .4px; color: #2f6d5b; flex: none; margin-top: 2px; }
.db-item__source { font: 600 calc(10.5px * var(--reading-scale)) "Hanken Grotesk"; color: #9a9384; }

/* =================== NEWSPAPER =================== */
.db--news { max-width: 860px; margin: 0 auto; }
.db-paper { background: #fdfcf9; border: 1.5px solid #e2ddd0; border-radius: 6px; box-shadow: 0 8px 30px rgba(50,42,28,.08); padding: 34px 44px 40px; }
.db--news .dropcap p:first-of-type::first-letter { font-family: "Newsreader", serif; font-weight: 500; font-size: calc(52px * var(--reading-scale)); line-height: .82; float: left; margin: 5px 9px 0 0; color: #2f6d5b; }

.db-masthead { text-align: center; border-bottom: 3px double #26221b; padding-bottom: 14px; margin-bottom: 8px; }
.db-masthead__eyebrow { font: 700 calc(10px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: 3px; color: #9a9384; margin-bottom: 6px; }
.db-masthead__name { font-family: "Newsreader", serif; font-weight: 600; font-size: calc(44px * var(--reading-scale)); line-height: 1; letter-spacing: .5px; }
.db-dateline { display: flex; align-items: center; justify-content: center; gap: 14px; flex-wrap: wrap; font: 600 calc(10.5px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .4px; color: #6f6a5e; border-bottom: 1.5px solid #e2ddd0; padding-bottom: 16px; margin-bottom: 22px; }
.db-dateline__sep { color: #cbc4b6; }

.db-lead { display: grid; grid-template-columns: 1.55fr 1fr; gap: 30px; padding-bottom: 22px; border-bottom: 1.5px solid #e2ddd0; margin-bottom: 20px; }
.db-lead__kicker { font: 700 calc(10px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: 1px; color: #b45b3e; margin-bottom: 8px; }
.db-lead__headline { font-family: "Newsreader", serif; font-weight: 600; font-size: calc(31px * var(--reading-scale)); line-height: 1.08; margin: 0 0 10px; }
.db-lead__body p { font-family: "Newsreader", serif; font-size: calc(15.5px * var(--reading-scale)); line-height: 1.62; color: #2b2820; margin: 0 0 12px; }
.db-lead__body p:last-child { margin-bottom: 0; }
.db-lead__aside { display: flex; flex-direction: column; gap: 14px; }
.db-lead__why { background: #f4f8f6; border: 1.5px solid #dcebe5; border-radius: 11px; padding: 14px 16px; }
.db-lead__whylbl { font: 700 calc(9px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .6px; color: #2f6d5b; margin-bottom: 7px; }
.db-lead__whytxt { font-size: calc(13px * var(--reading-scale)); line-height: 1.55; color: #2f5f52; }
.db-glance { border-top: 1.5px solid #e2ddd0; padding-top: 12px; }
.db-glance__lbl { font: 700 calc(9px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; color: #a49d8d; margin-bottom: 6px; }
.db-glance__row { display: flex; justify-content: space-between; font-size: calc(12.5px * var(--reading-scale)); color: #6f6a5e; margin-bottom: 7px; }
.db-glance__val { font-weight: 600; color: #26221b; }

.db-section { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.db-section__label { font: 700 calc(11px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: 1.5px; color: #26221b; }
.db-section__rule { flex: 1; height: 1.5px; background: #e2ddd0; }

.db-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 26px 34px; margin-bottom: 24px; }
.db-story__kicker { font: 700 calc(9.5px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .7px; margin-bottom: 7px; }
.db-story__headline { font-family: "Newsreader", serif; font-weight: 600; font-size: calc(19px * var(--reading-scale)); line-height: 1.15; margin: 0 0 7px; }
.db-story__standfirst { font-family: "Newsreader", serif; font-size: calc(14px * var(--reading-scale)); line-height: 1.55; color: #443f34; margin: 0 0 10px; }
.db-story__why { display: flex; gap: 7px; align-items: flex-start; margin-bottom: 9px; font-size: calc(11.5px * var(--reading-scale)); line-height: 1.45; color: #5c574c; }
.db-story__whytag { font: 700 calc(8px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .4px; color: #2f6d5b; background: #eef4f1; padding: 3px 6px; border-radius: 5px; flex: none; margin-top: 1px; }
.db-story__source { font: 600 calc(10.5px * var(--reading-scale)) "Hanken Grotesk"; color: #9a9384; }

.db-inbrief { background: #f7f4ee; border: 1.5px solid #e2ddd0; border-radius: 11px; padding: 16px 20px; margin-bottom: 20px; }
.db-inbrief__label { font: 700 calc(10px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: 1px; color: #26221b; margin-bottom: 12px; }
.db-inbrief__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 9px 26px; }
.db-inbrief__item { display: flex; gap: 9px; align-items: flex-start; font-size: calc(12.5px * var(--reading-scale)); line-height: 1.45; color: #3a352c; }
.db-inbrief__cat { font: italic 700 calc(10px * var(--reading-scale)) "Newsreader", serif; color: #b45b3e; flex: none; }

.db-colophon--paper { border-top: 1.5px solid #e2ddd0; padding-top: 16px; }

@media (max-width: 720px) {
  .db-paper { padding: 24px 20px 30px; }
  .db-masthead__name { font-size: calc(32px * var(--reading-scale)); }
  .db-lead, .db-grid, .db-inbrief__grid { grid-template-columns: 1fr; }
}

/* ---- mobile vertical rhythm ----
   Must come after the base .db-title / .db-readtime / .db-tldr rules above:
   a media query adds no specificity, so an earlier block would simply lose to
   them. Kept at the end of the file for that reason. */
@media (max-width: 720px) {
  /* The timestamp, a 40px headline and the read time were stacking ~6px
     apart, reading as one dense clump before the brief even started. */
  .db-metarow { margin-bottom: 16px; }
  .db-title { margin-bottom: 0; line-height: 1.15; }
  .db-readtime { margin: 10px 0 24px; }
  .db-tldr { padding: 20px 18px; margin-bottom: 30px; }
  .db-tldr__list { gap: 18px; }
  .db-divider { margin-bottom: 16px; }
  .db-theme { margin-bottom: 22px; }
}
/* Nutrition-plan output template — weekly meal plan + shopping list. */
.nu { max-width: 940px; margin: 0 auto; }

.nu-metarow { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 6px; }
.nu-meta { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; }
.nu-pin { font: 600 calc(12px * var(--reading-scale)) "Hanken Grotesk"; padding: 6px 12px; border-radius: 999px; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; cursor: pointer; }
.nu-pin.is-on { border-color: #cfe0d9; background: #eef4f1; color: #2f6d5b; }

/* Pin never shrinks: the meta text was squeezing it to 60px, wrapping
   "☆ Pin" onto two lines and turning the pill into a stray blob. */
.nu-pin { flex: none; white-space: nowrap; }

@media (max-width: 720px) {
  /* The pill's white fill and border outweigh everything near them on a
     phone. The glyph and label carry the state on their own. */
  /* Stripping the pill also stripped its padding, so the hit area needs
     restating — min-height keeps it at 44px at every reading size. */
  .nu-pin, .nu-pin.is-on {
    background: none; border-color: transparent;
    display: inline-flex; align-items: flex-start; justify-content: flex-end;
    min-height: 44px; padding: 0 2px 0 14px;
  }

  /* Date and time stay together on one line; the rest drops below.
     The date is unbreakable, so if it can't share the row with the
     pin the pin wraps under it rather than forcing the date to
     split — which is what happens with a long weekday and month at
     the largest reading size. */
  /* baseline, not flex-start: the pin carries a 44px tap box, so aligning
     boxes would sit its label ~12px below the date it sits beside.
     Aligning text baselines lets the hit area extend without showing. */
  .nu-metarow { align-items: baseline; flex-wrap: wrap; }
  .nu-meta__sep { display: none; }
  .nu-meta__date, .nu-meta__detail { display: block; }
  .nu-meta__date { white-space: nowrap; }
  .nu-pin { margin-left: auto; }
}

.nu-title { font-family: "Newsreader", serif; font-weight: 500; font-size: calc(32px * var(--reading-scale)); line-height: 1.1; margin: 0 0 8px; }
.nu-intro { font-size: calc(14.5px * var(--reading-scale)); line-height: 1.6; color: #3a352c; max-width: 680px; margin: 0 0 22px; }
.nu-intro p { margin: 0; }

/* day strip */
.nu-daystrip { display: flex; gap: 7px; margin-bottom: 20px; }
.nu-day { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 10px 0; border-radius: 12px; cursor: pointer; background: #fff; color: #6f6a5e; border: 1.5px solid #e6e1d6; }
.nu-day__dow { font-size: calc(10px * var(--reading-scale)); font-weight: 600; letter-spacing: .3px; opacity: .7; }
.nu-day__date { font: 700 calc(15px * var(--reading-scale)) "Hanken Grotesk"; }
.nu-day__dot { width: 5px; height: 5px; border-radius: 50%; background: #cfe0d9; }
.nu-day.is-active { background: #2f6d5b; color: #fff; border-color: #2f6d5b; box-shadow: 0 4px 12px rgba(47,109,91,.28); }
.nu-day.is-active .nu-day__dot { background: rgba(255,255,255,.8); }

/* day view (only active shows) */
.nu-dayview { display: none; }
.nu-dayview.is-active { display: block; }

/* today hero */
.nu-hero { border: 1.5px solid #e6e1d6; border-radius: 18px; background: #fff; padding: 22px 24px; margin-bottom: 16px; box-shadow: 0 4px 16px rgba(50,42,28,.05); }
.nu-hero__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }
.nu-hero__eyebrow { font: 700 calc(10px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; color: #a49d8d; }
.nu-hero__theme { font-family: "Newsreader", serif; font-size: calc(20px * var(--reading-scale)); font-weight: 500; }
.nu-badge { font: 600 calc(11px * var(--reading-scale)) "Hanken Grotesk"; padding: 6px 12px; border-radius: 999px; background: #f1ede4; color: #9a9384; }
.nu-badge--today { background: #dcebe5; color: #2f6d5b; }
.nu-hero__body { display: flex; gap: 26px; align-items: center; flex-wrap: wrap; }

/* The ring is a gauge, so its geometry scales with the text inside it —
   otherwise a 4-digit calorie count outgrows the fixed inner circle at the
   larger reading sizes. */
.nu-ring { position: relative; width: calc(132px * var(--reading-scale)); height: calc(132px * var(--reading-scale)); flex: none; border-radius: 50%; }
.nu-ring__inner { position: absolute; inset: calc(15px * var(--reading-scale)); border-radius: 50%; background: #fff; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.nu-ring__kcal { font-family: "Newsreader", serif; font-size: calc(30px * var(--reading-scale)); font-weight: 500; line-height: 1; }
.nu-ring__target { font-size: calc(10.5px * var(--reading-scale)); color: #9a9384; margin-top: 2px; }
.nu-ring__pct { font: 600 calc(10px * var(--reading-scale)) "Hanken Grotesk"; color: #2f6d5b; margin-top: 3px; }

.nu-macros { flex: 1; min-width: 230px; display: flex; flex-direction: column; gap: 13px; }
.nu-macro__row { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 5px; }
.nu-macro__label { font-weight: 600; font-size: calc(12.5px * var(--reading-scale)); color: #3a352c; }
.nu-macro__val { font: 600 calc(11.5px * var(--reading-scale)) "Hanken Grotesk"; color: #6f6a5e; }
.nu-macro__val span { color: #b9b2a3; }
.nu-macro__track { height: 9px; border-radius: 999px; background: #f0ece3; overflow: hidden; }
.nu-macro__fill { height: 100%; border-radius: 999px; }
.nu-macro__note { display: flex; align-items: center; gap: 6px; font-size: calc(11.5px * var(--reading-scale)); color: #9a9384; margin-top: 2px; }

/* meals */
.nu-meals { display: flex; flex-direction: column; gap: 11px; margin-bottom: 30px; }
.nu-meal { border: 1.5px solid #e6e1d6; border-radius: 15px; background: #fff; overflow: hidden; box-shadow: 0 2px 6px rgba(50,42,28,.04); }
.nu-meal__head { display: flex; gap: 14px; align-items: center; padding: 13px 15px; cursor: pointer; width: 100%; background: none; border: none; text-align: left; }
.nu-meal__swatch { width: 58px; height: 58px; border-radius: 12px; flex: none; background: #f3ede0; display: flex; align-items: center; justify-content: center; font-size: calc(24px * var(--reading-scale)); }
.nu-meal__main { flex: 1; min-width: 0; }
.nu-meal__slot { display: block; font: 700 calc(9.5px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .4px; color: #a49d8d; margin-bottom: 2px; }
.nu-meal__name { display: block; font-weight: 600; font-size: calc(15px * var(--reading-scale)); line-height: 1.2; margin-bottom: 4px; }
.nu-meal__tags { display: flex; gap: 6px; flex-wrap: wrap; }
.nu-tag { font: 600 calc(10px * var(--reading-scale)) "Hanken Grotesk"; padding: 3px 8px; border-radius: 999px; background: #f1ede4; color: #6f6a5e; }
.nu-tag--p { background: #eef4f1; color: #2f6d5b; }
.nu-meal__nums { text-align: right; flex: none; }
.nu-meal__kcal { font-family: "Newsreader", serif; font-size: calc(19px * var(--reading-scale)); font-weight: 500; line-height: 1; }
.nu-meal__kcallbl { display: block; font-size: calc(10px * var(--reading-scale)); color: #9a9384; }
.nu-meal__time { display: block; font: 600 calc(10.5px * var(--reading-scale)) "Hanken Grotesk"; color: #9a9384; margin-top: 6px; }
.nu-meal__chev { flex: none; color: #9a9384; font-size: calc(18px * var(--reading-scale)); transition: transform .2s; }
.nu-meal.is-open .nu-meal__chev { transform: rotate(90deg); }

.nu-meal__detail { display: none; border-top: 1.5px solid #f0ece3; padding: 16px 17px; gap: 22px; flex-wrap: wrap; background: #fcfbf7; }
.nu-meal.is-open .nu-meal__detail { display: flex; }
.nu-meal__col { flex: 1; min-width: 180px; }
.nu-meal__col--wide { flex: 1.4; min-width: 220px; }
.nu-meal__collbl { font: 700 calc(9px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; color: #a49d8d; margin-bottom: 9px; }
.nu-ing { display: flex; justify-content: space-between; font-size: calc(12.5px * var(--reading-scale)); color: #3a352c; margin-bottom: 6px; }
.nu-ing__qty { color: #9a9384; }
.nu-step { display: flex; gap: 9px; margin-bottom: 8px; }
.nu-step__n { width: 19px; height: 19px; flex: none; border-radius: 6px; background: #eef4f1; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font: 700 calc(10px * var(--reading-scale)) "Hanken Grotesk"; }
.nu-step span:last-child { font-size: calc(12.5px * var(--reading-scale)); line-height: 1.5; color: #3a352c; }

/* shopping list */
.nu-shop { border: 1.5px solid #e6e1d6; border-radius: 18px; background: #fff; overflow: hidden; margin-bottom: 26px; box-shadow: 0 4px 16px rgba(50,42,28,.05); scroll-margin-top: 20px; }
.nu-shop__head { display: flex; align-items: center; gap: 11px; padding: 16px 20px; border-bottom: 1.5px solid #f0ece3; }
.nu-shop__icon { width: 36px; height: 36px; flex: none; border-radius: 10px; background: #eef4f1; display: flex; align-items: center; justify-content: center; font-size: calc(18px * var(--reading-scale)); }
.nu-shop__titles { flex: 1; }
.nu-shop__title { font-family: "Newsreader", serif; font-size: calc(18px * var(--reading-scale)); font-weight: 500; }
.nu-shop__sub { font-size: calc(12px * var(--reading-scale)); color: #9a9384; }
.nu-shop__track { width: 120px; height: 8px; border-radius: 999px; background: #f0ece3; overflow: hidden; }
.nu-shop__fill { height: 100%; background: #2f6d5b; }
.nu-shop__grid { padding: 16px 20px; display: grid; grid-template-columns: 1fr 1fr; gap: 8px 30px; }
.nu-aisle { margin-bottom: 8px; }
.nu-aisle__name { font: 700 calc(9.5px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; color: #2f6d5b; margin-bottom: 8px; }
.nu-item { display: flex; align-items: center; gap: 10px; padding: 5px 4px; border-radius: 8px; cursor: pointer; width: 100%; background: none; border: none; text-align: left; }
.nu-item:hover { background: #faf8f3; }
.nu-item__box { width: 18px; height: 18px; flex: none; border-radius: 6px; display: flex; align-items: center; justify-content: center; border: 1.5px solid #cbc4b6; background: #fff; color: transparent; font-size: calc(11px * var(--reading-scale)); }
.nu-item__name { flex: 1; font-size: calc(13px * var(--reading-scale)); color: #3a352c; }
.nu-item__qty { font-size: calc(11.5px * var(--reading-scale)); color: #b9b2a3; }
.nu-item.is-on .nu-item__box { border-color: #2f6d5b; background: #2f6d5b; color: #fff; }
.nu-item.is-on .nu-item__name { color: #b9b2a3; text-decoration: line-through; }

/* feedback */
.nu-fb { max-width: 700px; border: 1.5px solid #cfe0d9; border-radius: 16px; background: #fff; overflow: hidden; box-shadow: 0 10px 34px rgba(50,42,28,.06); }
.nu-fb__head { padding: 16px 18px 4px; }
.nu-fb__title { font-family: "Newsreader", serif; font-size: calc(18px * var(--reading-scale)); font-weight: 500; }
.nu-fb__sub { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; margin-top: 2px; }
.nu-fb__body { padding: 12px 18px 18px; }
.nu-fb__chips { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 12px; }
.nu-fb__chip { font: 600 calc(11.5px * var(--reading-scale)) "Hanken Grotesk"; padding: 6px 11px; border-radius: 999px; cursor: pointer; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; }
.nu-fb__chip.is-on { border-color: #2f6d5b; background: #eef4f1; color: #2f6d5b; }
.nu-fb__notes { display: block; width: 100%; min-height: 64px; padding: 12px 14px; border: 1.5px solid #e6e1d6; border-radius: 11px; font: 400 calc(13px * var(--reading-scale))/1.6 "Hanken Grotesk"; color: #3a352c; outline: none; background: #fcfbf7; resize: vertical; }
.nu-fb__notes:focus { border-color: #cfe0d9; }
.nu-fb__foot { display: flex; align-items: center; gap: 14px; margin-top: 14px; }
.nu-fb__spacer { flex: 1; }
.nu-fb__status { font-size: calc(12px * var(--reading-scale)); color: #2f6d5b; }
.nu-fb__save { font: 600 calc(13px * var(--reading-scale)) "Hanken Grotesk"; padding: 11px 18px; border-radius: 11px; border: none; background: #2f6d5b; color: #fff; cursor: pointer; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.nu-fb__save:hover { background: #28604f; }

@media (max-width: 640px) {
  .nu-shop__grid { grid-template-columns: 1fr; }
}
/* Personal-trainer output template — follow-along session stepper. */
.tr { max-width: 720px; margin: 0 auto; }

.tr-metarow { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 6px; }
.tr-meta { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; }
.tr-pin { font: 600 calc(12px * var(--reading-scale)) "Hanken Grotesk"; padding: 6px 12px; border-radius: 999px; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; cursor: pointer; }
.tr-pin.is-on { border-color: #cfe0d9; background: #eef4f1; color: #2f6d5b; }

/* Pin never shrinks: the meta text was squeezing it to 60px, wrapping
   "☆ Pin" onto two lines and turning the pill into a stray blob. */
.tr-pin { flex: none; white-space: nowrap; }

@media (max-width: 720px) {
  /* The pill's white fill and border outweigh everything near them on a
     phone. The glyph and label carry the state on their own. */
  /* Stripping the pill also stripped its padding, so the hit area needs
     restating — min-height keeps it at 44px at every reading size. */
  .tr-pin, .tr-pin.is-on {
    background: none; border-color: transparent;
    display: inline-flex; align-items: flex-start; justify-content: flex-end;
    min-height: 44px; padding: 0 2px 0 14px;
  }

  /* Date and time stay together on one line; the rest drops below.
     The date is unbreakable, so if it can't share the row with the
     pin the pin wraps under it rather than forcing the date to
     split — which is what happens with a long weekday and month at
     the largest reading size. */
  /* baseline, not flex-start: the pin carries a 44px tap box, so aligning
     boxes would sit its label ~12px below the date it sits beside.
     Aligning text baselines lets the hit area extend without showing. */
  .tr-metarow { align-items: baseline; flex-wrap: wrap; }
  .tr-meta__sep { display: none; }
  .tr-meta__date, .tr-meta__detail { display: block; }
  .tr-meta__date { white-space: nowrap; }
  .tr-pin { margin-left: auto; }
}

.tr-eyebrow { font: 700 calc(11px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; color: #a49d8d; margin-bottom: 4px; }
.tr-title { font-family: "Newsreader", serif; font-weight: 500; font-size: calc(30px * var(--reading-scale)); line-height: 1.12; margin: 0 0 10px; }

.tr-focus { border: 1.5px solid #cfe0d9; background: #f4f8f6; border-radius: 13px; padding: 13px 16px; margin-bottom: 14px; display: flex; gap: 11px; }
.tr-focus__icon { width: 26px; height: 26px; flex: none; border-radius: 8px; background: #dcebe5; display: flex; align-items: center; justify-content: center; font-size: calc(14px * var(--reading-scale)); }
.tr-focus__body { font-size: calc(13px * var(--reading-scale)); line-height: 1.55; color: #2f5f52; }
.tr-focus__body strong { color: #245043; }

.tr-stats { display: flex; gap: 8px; margin: 0 0 22px; }
.tr-stat { flex: 1; border: 1.5px solid #e6e1d6; border-radius: 11px; background: #fff; padding: 11px 13px; text-align: center; }
.tr-stat__value { font-family: "Newsreader", serif; font-size: calc(20px * var(--reading-scale)); font-weight: 500; line-height: 1; }
.tr-stat__value--accent { color: #2f6d5b; }
.tr-stat__label { font-size: calc(10.5px * var(--reading-scale)); color: #9a9384; margin-top: 3px; }

.tr-stepper-head { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.tr-stepper-head__pos { font: 700 calc(11px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .4px; color: #6f6a5e; white-space: nowrap; }
.tr-dots { flex: 1; display: flex; gap: 4px; }
.tr-dot { flex: 1; height: 5px; border-radius: 999px; background: #e0dacd; }
.tr-dot.is-active { background: #8fb9ab; }
.tr-dot.is-done { background: #2f6d5b; }
.tr-skip { font: 600 calc(11.5px * var(--reading-scale)) "Hanken Grotesk"; color: #9a9384; cursor: pointer; }
.tr-skip:hover { color: #2f6d5b; }

/* only the active block shows (stepper). If JS is off, first block shows. */
.tr-block { display: none; border: 1.5px solid #d9d3c7; border-radius: 18px; background: #fff; overflow: hidden; box-shadow: 0 10px 34px rgba(50, 42, 28, .09); margin-bottom: 16px; }
.tr-block.is-active { display: block; }

.tr-clip { position: relative; height: 190px; background: #e6ebe4; display: flex; align-items: center; justify-content: center;
  background-image: repeating-linear-gradient(45deg, rgba(255,255,255,.35), rgba(255,255,255,.35) 11px, transparent 11px, transparent 22px); }
.tr-clip__play { width: 52px; height: 52px; border-radius: 50%; background: rgba(255,255,255,.92); display: flex; align-items: center; justify-content: center; color: #2f6d5b; font-size: calc(18px * var(--reading-scale)); box-shadow: 0 6px 18px rgba(50,42,28,.18); }
.tr-clip__tag { position: absolute; top: 12px; left: 14px; font: 600 calc(10px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .4px; color: #5c574c; background: rgba(255,255,255,.82); padding: 4px 9px; border-radius: 999px; }

.tr-block__body { padding: 18px 20px; }
.tr-block__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 3px; }
.tr-block__name { font-family: "Newsreader", serif; font-size: calc(23px * var(--reading-scale)); font-weight: 500; line-height: 1.1; }
.tr-block__target { flex: none; font: 700 calc(12px * var(--reading-scale)) "Hanken Grotesk"; padding: 6px 12px; border-radius: 999px; background: #eef4f1; color: #2f6d5b; white-space: nowrap; }
.tr-block__sub { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; margin-bottom: 16px; }

.tr-sets-label { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; font: 700 calc(9.5px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; color: #a49d8d; }
.tr-sets-label__hint { font-weight: 500; font-size: calc(11px * var(--reading-scale)); color: #9a9384; letter-spacing: 0; }
.tr-rest { margin-left: auto; font: 600 calc(11px * var(--reading-scale)) "Hanken Grotesk"; color: #6f6a5e; letter-spacing: 0; }
.tr-sets { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.tr-set { position: relative; width: 66px; height: 60px; border-radius: 12px; cursor: pointer; display: flex; flex-direction: column; align-items: center; justify-content: center; border: 1.5px solid #e6e1d6; background: #fff; color: #26221b; }
.tr-set__load { font: 700 calc(13px * var(--reading-scale)) "Hanken Grotesk"; line-height: 1; }
.tr-set__reps { font-size: calc(9.5px * var(--reading-scale)); opacity: .8; margin-top: 1px; }
.tr-set__tick { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; border-radius: 50%; background: #2f6d5b; color: #fff; font-size: calc(10px * var(--reading-scale)); display: none; align-items: center; justify-content: center; border: 2px solid #fff; }
.tr-set.is-on { border-color: #2f6d5b; background: #2f6d5b; color: #fff; }
.tr-set.is-on .tr-set__tick { display: flex; }

.tr-moves { display: flex; flex-direction: column; gap: 6px; margin-bottom: 16px; }
.tr-move { display: flex; align-items: center; gap: 11px; padding: 10px 12px; border-radius: 10px; cursor: pointer; border: 1.5px solid #f0ece3; background: #fff; text-align: left; }
.tr-move__box { width: 20px; height: 20px; flex: none; border-radius: 6px; display: flex; align-items: center; justify-content: center; border: 1.5px solid #cbc4b6; background: #fff; color: transparent; font-size: calc(11px * var(--reading-scale)); }
.tr-move__name { flex: 1; font-weight: 600; font-size: calc(13px * var(--reading-scale)); color: #26221b; }
.tr-move__detail { font: 600 calc(11px * var(--reading-scale)) "Hanken Grotesk"; color: #9a9384; }
.tr-move.is-on { border-color: #cfe0d9; background: #f4f8f6; }
.tr-move.is-on .tr-move__box { border-color: #2f6d5b; background: #2f6d5b; color: #fff; }
.tr-move.is-on .tr-move__name { color: #9a9384; }

.tr-cues { border-top: 1.5px solid #f0ece3; padding-top: 13px; margin-bottom: 16px; }
.tr-cues__label { font: 700 calc(9px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; color: #a49d8d; margin-bottom: 8px; }
.tr-cue { display: flex; gap: 8px; align-items: flex-start; margin-bottom: 6px; }
.tr-cue__dot { width: 5px; height: 5px; border-radius: 50%; background: #2f6d5b; flex: none; margin-top: 6px; }
.tr-cue span:last-child { font-size: calc(12.5px * var(--reading-scale)); line-height: 1.5; color: #3a352c; }

.tr-reg { display: flex; gap: 9px; background: #faf6ef; border: 1.5px solid #f0e6d6; border-radius: 11px; padding: 10px 13px; margin-bottom: 16px; font-size: calc(12px * var(--reading-scale)); line-height: 1.5; color: #6f6a5e; }
.tr-reg__icon { color: #b8862f; flex: none; }
.tr-reg strong { color: #8a6420; }

.tr-block__actions { display: flex; gap: 9px; }
.tr-next { flex: 1; padding: 13px; border: none; border-radius: 12px; background: #2f6d5b; color: #fff; font: 600 calc(13.5px * var(--reading-scale)) "Hanken Grotesk"; cursor: pointer; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.tr-next:hover { background: #28604f; }
.tr-swap { flex: none; padding: 13px 15px; border: 1.5px solid #e6e1d6; border-radius: 12px; background: #fff; color: #6f6a5e; font: 600 calc(13px * var(--reading-scale)) "Hanken Grotesk"; cursor: pointer; }
.tr-swap:hover { border-color: #cfe0d9; }

.tr-navrow { display: flex; align-items: center; gap: 12px; margin-bottom: 26px; }
.tr-nav-spacer { flex: 1; }
.tr-prev, .tr-nextlink { font: 600 calc(12px * var(--reading-scale)) "Hanken Grotesk"; color: #6f6a5e; cursor: pointer; }
.tr-nextlink { color: #2f6d5b; }
.tr-prev.is-disabled { color: #c2bbac; pointer-events: none; }

.tr-upnext { margin-bottom: 30px; }
.tr-upnext__label { font: 700 calc(9.5px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; color: #a49d8d; margin-bottom: 10px; }
.tr-upnext__list { display: flex; flex-direction: column; gap: 7px; }
.tr-upnext__item { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border: 1.5px solid #e6e1d6; border-radius: 12px; background: #fff; cursor: pointer; }
.tr-upnext__item:hover { border-color: #cfe0d9; }
.tr-upnext__item.is-current { display: none; }
.tr-upnext__num { width: 26px; height: 26px; flex: none; border-radius: 8px; background: #f1ede4; color: #9a9384; display: flex; align-items: center; justify-content: center; font: 700 calc(11px * var(--reading-scale)) "Hanken Grotesk"; }
.tr-upnext__name { flex: 1; font-weight: 600; font-size: calc(13px * var(--reading-scale)); }
.tr-upnext__detail { font: 600 calc(11px * var(--reading-scale)) "Hanken Grotesk"; color: #9a9384; }
.tr-upnext__after { padding: 14px; border: 1.5px dashed #cfe0d9; border-radius: 12px; text-align: center; font-size: calc(12.5px * var(--reading-scale)); color: #2f6d5b; background: #f4f8f6; }

.tr-fb { border: 1.5px solid #cfe0d9; border-radius: 16px; background: #fff; overflow: hidden; box-shadow: 0 10px 34px rgba(50,42,28,.06); }
.tr-fb__head { padding: 16px 18px 4px; }
.tr-fb__title { font-family: "Newsreader", serif; font-size: calc(18px * var(--reading-scale)); font-weight: 500; }
.tr-fb__sub { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; margin-top: 2px; }
.tr-fb__body { padding: 12px 18px 18px; }
.tr-fb__chips { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 12px; }
.tr-fb__chip { font: 600 calc(11.5px * var(--reading-scale)) "Hanken Grotesk"; padding: 6px 11px; border-radius: 999px; cursor: pointer; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; }
.tr-fb__chip.is-on { border-color: #2f6d5b; background: #eef4f1; color: #2f6d5b; }
.tr-fb__notes { display: block; width: 100%; min-height: 60px; padding: 12px 14px; border: 1.5px solid #e6e1d6; border-radius: 11px; font: 400 calc(13px * var(--reading-scale))/1.6 "Hanken Grotesk"; color: #3a352c; outline: none; background: #fcfbf7; resize: vertical; }
.tr-fb__notes:focus { border-color: #cfe0d9; }
.tr-fb__foot { display: flex; align-items: center; gap: 14px; margin-top: 14px; }
.tr-fb__spacer { flex: 1; }
.tr-fb__status { font-size: calc(12px * var(--reading-scale)); color: #2f6d5b; }
.tr-fb__save { font: 600 calc(13px * var(--reading-scale)) "Hanken Grotesk"; padding: 11px 18px; border-radius: 11px; border: none; background: #2f6d5b; color: #fff; cursor: pointer; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.tr-fb__save:hover { background: #28604f; }
/* ============================================================================
   jarvis — public marketing site (landing page)

   Everything the landing needs, organized top-to-bottom:
     1. Tokens          — palette, fonts, shadows (change the brand here)
     2. Base            — body, links, page wrapper
     3. Layout          — section containers, dividers, responsive padding
     4. Typography      — kicker / headings / lead
     5. Buttons         — .mkt-btn + variants
     6. Pills & badges  — chips, plan badges, proof row, eyebrow
     7. Nav + announcement
     8. Hero + reader mock
     9. How it works
    10. (removed — templates merged)
    11. Output templates (tabs / dots / arrows / panels + preview mocks)
    12. Pricing
    13. Trust
    14. Final CTA
    15. Footer
    16. Animation
    17. Responsive

   The ERB carries structure only — no inline styles. Every color/font flows
   from the tokens block, so re-theming is a one-place change.
   ============================================================================ */

/* ── 1. Tokens ───────────────────────────────────────────────────────────── */
body.mkt {
  --ink: #26221b; --muted: #6f6a5e; --faint: #9a9384;
  --green: #2f6d5b; --green-d: #28604f; --forest: #22463c;
  --deep: #245043; --deeper: #1f3f36;
  --rust: #b45b3e;
  --mint: #eef4f1; --mint-2: #dcebe5; --mint-br: #cfe0d9; --mint-soft: #f4f8f6;
  --cream: #efece4; --panel: #faf8f3; --tan: #f1ede4;
  --line: #e6e1d6; --line-2: #ece8df; --line-3: #f0ece3;
  --pro: #6a4c86; --pro-bg: #efe9f2;
  --serif: "Newsreader", serif;
  --sans: "Hanken Grotesk", system-ui, sans-serif;
  --mono: ui-monospace, "SF Mono", Menlo, monospace;
  --sh-sm: 0 2px 6px rgba(50, 42, 28, .06);
  --sh-md: 0 10px 34px rgba(50, 42, 28, .08);
  --sh-lg: 0 16px 48px rgba(50, 42, 28, .13);
  --edge: 1.5px solid var(--line);
}

/* ── 2. Base ─────────────────────────────────────────────────────────────── */
body.mkt { margin: 0; color: var(--ink); font-family: var(--sans); -webkit-font-smoothing: antialiased; }
body.mkt ::selection { background: var(--mint-2); }
/* Reset UA heading/paragraph margins so the explicit spacing in the component
   classes is the single source of truth (mirrors the design's own reset). */
.mkt-page :where(h1, h2, h3, p) { margin: 0; }
/* Generic link default at ZERO specificity (via :where), so any component that
   sets its own link color — nav, announcement, footer, buttons — always wins
   without !important. Only undecorated body links fall back to rust. */
.mkt-page :where(a) { color: var(--rust); text-decoration: none; }
.mkt-page :where(a):hover { text-decoration: underline; }
.mkt-mono { font-family: var(--mono); }
.mkt-em { font-style: italic; font-family: var(--serif); color: var(--rust); }

.mkt-page {
  width: 100%; min-height: 100vh; overflow-x: hidden;
  background: radial-gradient(120% 90% at 50% 0%, #f5f2ec 0%, var(--cream) 46%, #eae6dd 100%);
}
.mkt-sprite { position: absolute; width: 0; height: 0; }

/* ── 3. Layout ───────────────────────────────────────────────────────────── */
.mkt-section { max-width: 1080px; margin: 0 auto; padding: 0 30px; }
.mkt-wrap { max-width: 1080px; margin: 0 auto; padding: 0 30px; }

/* How-it-works is a band (panel bg), so the top of the page alternates
   gradient → band → gradient → band (assist) instead of reading flat. */
.mkt-how { background: var(--panel); border-top: 1.5px solid var(--line-2); border-bottom: 1.5px solid var(--line-2); }
.mkt-how .mkt-wrap { padding-top: 48px; padding-bottom: 56px; }
.mkt-tpl { padding-top: 60px; padding-bottom: 62px; }
.mkt-pricing { padding-top: 60px; padding-bottom: 30px; }
.mkt-trust { padding-top: 44px; padding-bottom: 60px; }
.mkt-cta { padding-bottom: 64px; }

.mkt-divider { max-width: 1080px; margin: 0 auto; padding: 56px 30px 0; }
.mkt-divider span { display: block; height: 1.5px; background: linear-gradient(90deg, transparent, #dcd6c9 18%, #dcd6c9 82%, transparent); }

.mkt-spacer { flex: 1; }

/* ── 4. Typography ───────────────────────────────────────────────────────── */
.mkt-kicker { font: 700 11px var(--sans); letter-spacing: .6px; color: var(--green); }
.mkt-h2 { font-family: var(--serif); font-weight: 500; font-size: clamp(28px, 3.6vw, 40px); line-height: 1.1; margin: 8px 0 10px; text-wrap: balance; }
.mkt-lead { font-size: 15px; line-height: 1.6; color: var(--muted); }

/* Section headers */
.mkt-head { margin-bottom: 34px; }
.mkt-head--center { text-align: center; margin-bottom: 40px; }
.mkt-head--center .mkt-lead { max-width: 560px; margin-left: auto; margin-right: auto; }
.mkt-head--tpl { max-width: 680px; }
.mkt-head--pricing { margin-bottom: 38px; }
.mkt-head--pricing .mkt-h2 { font-size: clamp(30px, 4vw, 46px); line-height: 1.06; margin-bottom: 12px; }
.mkt-head--pricing .mkt-lead { font-size: 15.5px; max-width: 580px; margin: 0 auto 14px; }

/* ── 5. Buttons ──────────────────────────────────────────────────────────── */
.mkt-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-weight: 600; font-size: 15px; border-radius: 12px; padding: 14px 24px; border: 1.5px solid transparent; cursor: pointer; text-decoration: none; }
.mkt-btn:hover { text-decoration: none; }
.mkt-btn svg { width: 16px; height: 16px; }
.mkt-btn--green { color: #fff; background: var(--green); box-shadow: 0 3px 10px rgba(47, 109, 91, .25); }
.mkt-btn--green:hover { background: var(--green-d); }
.mkt-btn--ghost { color: var(--green); background: #fff; border-color: var(--mint-br); padding: 14px 22px; }
.mkt-btn--ghost:hover { background: var(--mint-soft); }
/* A tier that's shown but not yet buyable (Scout). Inert, muted, no pointer. */
.mkt-btn--disabled { color: #9a9384; background: #f1ede4; border-color: transparent; cursor: default; }
.mkt-btn--disabled:hover { background: #f1ede4; }
.mkt-btn--cream { color: var(--forest); background: #f4f1e9; padding: 14px 26px; }
.mkt-btn--cream:hover { background: #fff; }
.mkt-btn--sm { font-size: 13.5px; padding: 10px 17px; border-radius: 11px; gap: 7px; }
.mkt-btn--block { display: flex; width: 100%; padding: 12px 0; border-radius: 11px; font-size: 14px; margin-bottom: 18px; }

/* ── 6. Pills, badges, small bits ────────────────────────────────────────── */
.mkt-chip { display: inline-flex; align-items: center; gap: 4px; font: 600 11px var(--sans); padding: 4px 9px; border-radius: 999px; }
.mkt-chip--mint { background: var(--mint); color: var(--green); }
.mkt-chip--tan { background: var(--tan); color: var(--muted); }
.mkt-chip--pro { background: var(--pro-bg); color: var(--pro); }
.mkt-chip svg { width: 11px; height: 11px; }

.mkt-badge { display: inline-flex; align-items: center; font: 700 9px var(--sans); letter-spacing: .5px; padding: 3px 8px; border-radius: 999px; }
.mkt-badge--free { background: var(--mint); color: var(--green); }
.mkt-badge--pro { background: var(--pro-bg); color: var(--pro); }

/* square rounded icon holder */
.mkt-glyph { display: inline-flex; align-items: center; justify-content: center; flex: none; border-radius: 11px; background: var(--mint); color: var(--green); }

.mkt-eyebrow { display: inline-flex; align-items: center; gap: 8px; background: #fff; border: var(--edge); border-radius: 999px; padding: 6px 12px 6px 8px; font-size: 12px; color: var(--muted); margin-bottom: 22px; }
.mkt-eyebrow__ico { width: 20px; height: 20px; border-radius: 6px; background: var(--mint-2); color: var(--green); display: inline-flex; align-items: center; justify-content: center; }
.mkt-eyebrow__ico svg { width: 12px; height: 12px; }

.mkt-proof { display: flex; flex-wrap: wrap; gap: 8px 18px; font-size: 12.5px; color: var(--faint); }
.mkt-proof span { display: inline-flex; align-items: center; gap: 6px; }
.mkt-proof svg { width: 14px; height: 14px; color: var(--green); }

/* ── 7. Announcement + nav ───────────────────────────────────────────────── */
.mkt-anno { background: var(--ink); color: #f2efe7; font-size: 12.5px; text-align: center; padding: 9px 18px; letter-spacing: .1px; }
.mkt-anno b { color: var(--mint-2); font-weight: 600; }
.mkt-anno a { color: #f2efe7; text-decoration: underline; text-underline-offset: 2px; }

.mkt-nav { position: sticky; top: 0; z-index: 40; display: flex; align-items: center; gap: 18px; padding: 14px 30px; background: rgba(245, 242, 236, .82); backdrop-filter: blur(10px); border-bottom: var(--edge); }
.mkt-nav__brand { display: flex; align-items: center; gap: 10px; text-decoration: none; }
.mkt-nav__brand:hover { text-decoration: none; }
.mkt-nav__logo { width: 34px; height: 34px; border-radius: 9px; box-shadow: 0 2px 8px rgba(47, 109, 91, .28); }
.mkt-nav__name { font-family: var(--serif); font-weight: 600; font-size: 23px; color: var(--ink); letter-spacing: -.2px; }
.mkt-nav__links { display: flex; align-items: center; gap: 26px; }
.mkt-nav__links a { color: var(--muted); font-weight: 600; font-size: 13.5px; }

/* ── 8. Hero ─────────────────────────────────────────────────────────────── */
.mkt-hero { max-width: 1180px; margin: 0 auto; padding: 54px 30px 34px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 44px; align-items: center; animation: riseIn .5s cubic-bezier(.2, .6, .2, 1) both; }
.mkt-hero__title { font-family: var(--serif); font-weight: 500; font-size: clamp(38px, 5.4vw, 60px); line-height: 1.04; letter-spacing: -.5px; margin-bottom: 20px; }
.mkt-hero__lead { font-size: 17px; line-height: 1.6; color: var(--muted); max-width: 520px; margin-bottom: 14px; }
.mkt-hero__sub { font-size: 14px; line-height: 1.55; color: var(--faint); max-width: 500px; margin-bottom: 28px; }
.mkt-hero__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-bottom: 20px; }
.mkt-hero__visual { position: relative; display: flex; justify-content: center; }

/* reader mock (the product visual) */
.mkt-reader { position: relative; background: #fff; border: var(--edge); border-radius: 20px; box-shadow: var(--sh-lg); overflow: hidden; width: 100%; max-width: 460px; }
.mkt-reader__bar { display: flex; align-items: center; gap: 7px; padding: 13px 16px; border-bottom: 1.5px solid var(--line-2); background: var(--panel); flex-wrap: wrap; }
.mkt-reader__bar .mkt-chip { padding: 5px 10px; }
.mkt-reader__ver { font-size: 11px; color: #b6afa0; }
.mkt-reader__body { padding: 20px 22px 24px; }
.mkt-reader__meta { display: flex; align-items: center; gap: 8px; font-size: 11.5px; color: var(--faint); margin-bottom: 5px; }
.mkt-reader__meta .dot { color: #cbc4b6; }
.mkt-reader__ran { display: inline-flex; align-items: center; gap: 4px; }
.mkt-reader__ran svg { width: 11px; height: 11px; color: var(--green); }
.mkt-reader__title { font-family: var(--serif); font-weight: 500; font-size: 24px; line-height: 1.12; margin-bottom: 16px; }

.mkt-tldr { background: var(--mint); border: 1.5px solid var(--mint-br); border-radius: 14px; padding: 15px 16px; margin-bottom: 16px; }
.mkt-tldr__head { display: flex; align-items: center; gap: 8px; margin-bottom: 11px; }
.mkt-tldr__ico { width: 22px; height: 22px; border-radius: 6px; background: var(--green); color: #fff; display: flex; align-items: center; justify-content: center; }
.mkt-tldr__ico svg { width: 12px; height: 12px; }
.mkt-tldr__label { font: 700 10px var(--sans); letter-spacing: .8px; color: var(--green); }
.mkt-tldr__list { display: flex; flex-direction: column; gap: 9px; }
.mkt-tldr__item { display: flex; gap: 9px; align-items: flex-start; }
.mkt-tldr__n { font-family: var(--serif); font-weight: 600; font-size: 14px; color: var(--green); line-height: 1.3; }
.mkt-tldr__txt { font-size: 13px; line-height: 1.5; color: var(--deep); }
.mkt-tldr__txt strong { color: var(--deeper); }

.mkt-seclabel { display: flex; align-items: center; gap: 9px; margin-bottom: 11px; }
.mkt-seclabel span:first-child { font: 700 9px var(--sans); letter-spacing: 1px; color: var(--faint); }
.mkt-seclabel span:last-child { flex: 1; height: 1.5px; background: #e2ddd0; }

.mkt-skel { display: flex; flex-direction: column; gap: 9px; }
.mkt-skel span { height: 9px; border-radius: 3px; background: var(--cream); }
.mkt-skel span:nth-child(1) { width: 96%; }
.mkt-skel span:nth-child(2) { width: 88%; }
.mkt-skel span:nth-child(3) { width: 74%; }

.mkt-reader__badge { position: absolute; left: -14px; bottom: 34px; background: #fff; border: 1.5px solid var(--mint-br); border-radius: 12px; box-shadow: 0 10px 34px rgba(50, 42, 28, .12); padding: 10px 13px; display: flex; align-items: center; gap: 9px; }
.mkt-reader__badge-ico { width: 26px; height: 26px; border-radius: 8px; background: var(--mint-2); color: var(--green); display: flex; align-items: center; justify-content: center; }
.mkt-reader__badge-ico svg { width: 14px; height: 14px; }
.mkt-reader__badge-t { font-size: 11.5px; font-weight: 700; color: var(--ink); }
.mkt-reader__badge-s { font-size: 10.5px; color: var(--faint); }

/* ── 9. How it works ─────────────────────────────────────────────────────── */
.mkt-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 16px; }
.mkt-card { background: #fff; border: var(--edge); border-radius: 16px; padding: 24px 22px; box-shadow: var(--sh-sm); }
.mkt-step__top { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.mkt-step__glyph { width: 38px; height: 38px; }
.mkt-step__glyph svg { width: 19px; height: 19px; }
.mkt-step__n { font-family: var(--serif); font-weight: 500; font-size: 26px; color: var(--green); opacity: .55; }
.mkt-step__title { font-family: var(--serif); font-weight: 500; font-size: 20px; margin-bottom: 8px; }
.mkt-step__body { font-size: 14px; line-height: 1.55; color: var(--muted); }

/* ── 10. Skills ──────────────────────────────────────────────────────────── */

/* ── 11. Output templates ────────────────────────────────────────────────── */
.mkt-tpl__foot { font-size: 13px; color: var(--faint); margin: 26px auto 0; max-width: 620px; text-align: center; }
/* Always-visible links to each template's /use-cases page (the per-panel links
   sit inside `hidden` panels for every tab but the active one). */
.mkt-tpl__links { font-size: 13px; color: var(--faint); margin: 12px auto 0; max-width: 620px; text-align: center; }
.mkt-tpl__links a { color: var(--green); font-weight: 600; }

.mkt-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.mkt-tpltab { display: inline-flex; align-items: center; gap: 8px; font: 600 13px var(--sans); padding: 9px 15px; border-radius: 999px; cursor: pointer; background: #fff; color: var(--muted); border: var(--edge); }
.mkt-tpltab__emoji { font-size: 15px; }
.mkt-tpltab .mkt-badge { margin-left: 1px; font-size: 8px; padding: 2px 6px; }
.mkt-tpltab.is-on { background: var(--green); color: #fff; border-color: var(--green); box-shadow: 0 3px 10px rgba(47, 109, 91, .22); }
.mkt-tpltab.is-on .mkt-badge { background: rgba(255, 255, 255, .18); color: #fff; }

.mkt-tpldot { height: 7px; width: 7px; border-radius: 999px; background: #d9d3c6; cursor: pointer; transition: all .3s; flex: none; }
.mkt-tpldot.is-on { width: 22px; background: var(--green); }
.mkt-arrow { width: 32px; height: 32px; border-radius: 9px; border: var(--edge); background: #fff; color: var(--muted); display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 16px; }
.mkt-arrow:hover { background: var(--mint-soft); }

.mkt-tplpanel { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 38px; align-items: center; background: #fff; border: var(--edge); border-radius: 20px; padding: 34px 38px; box-shadow: var(--sh-md); }
/* attribute selector outspecifies the base class → hides without !important */
.mkt-tplpanel[hidden] { display: none; }
.mkt-tplpanel__kicker { font: 700 10px var(--sans); letter-spacing: .6px; color: var(--green); margin-bottom: 10px; }
.mkt-tplpanel__title { font-family: var(--serif); font-weight: 500; font-size: clamp(23px, 2.5vw, 31px); line-height: 1.1; margin-bottom: 13px; text-wrap: balance; }
.mkt-tplpanel__body { font-size: 14.5px; line-height: 1.6; color: var(--muted); margin-bottom: 17px; }
.mkt-tplpanel__tag { display: inline-flex; align-items: center; gap: 8px; font-size: 11.5px; color: var(--muted); background: var(--panel); border: 1.5px solid var(--line-2); border-radius: 999px; padding: 6px 13px; margin-bottom: 24px; }
.mkt-tplpanel__tag span { width: 7px; height: 7px; border-radius: 2px; background: var(--green); flex: none; }
/* the tag's own bottom margin is the panel's breathing room when it's the last
   thing before the nav; with a link after it, the link owns that gap instead */
.mkt-tplpanel__tag:has(+ .mkt-tplpanel__more) { margin-bottom: 14px; }
/* flex (not inline-flex) so it breaks onto its own line after the inline tag */
.mkt-tplpanel__more { display: flex; width: fit-content; align-items: center; gap: 6px; font: 700 13px var(--sans); color: var(--green); margin-bottom: 22px; }
.mkt-tplpanel__more svg { width: 15px; height: 15px; }
.mkt-tplpanel__more:hover { text-decoration: underline; }
.mkt-tplpanel__nav { display: flex; align-items: center; gap: 9px; }
.mkt-tplpanel__viz { display: flex; justify-content: center; min-height: 300px; align-items: center; }

/* preview mock shell */
.mkt-mock { width: 100%; max-width: 392px; animation: riseIn .4s cubic-bezier(.2, .6, .2, 1) both; }
.mkt-mock__card { border: var(--edge); border-radius: 16px; background: #fff; overflow: hidden; box-shadow: var(--sh-md); }

/* workout preview */
.mkt-wk__head { padding: 16px 18px; border-bottom: 1.5px solid var(--line-3); }
.mkt-wk__kicker { font: 700 9px var(--sans); letter-spacing: .5px; color: #a49d8d; margin-bottom: 6px; }
.mkt-wk__title { font-family: var(--serif); font-size: 19px; font-weight: 500; margin-bottom: 11px; }
.mkt-wk__progress { display: flex; align-items: center; gap: 9px; }
.mkt-wk__track { flex: 1; height: 7px; border-radius: 999px; background: var(--line-3); overflow: hidden; }
.mkt-wk__fill { width: 38%; height: 100%; background: var(--green); }
.mkt-wk__count { font: 600 11px var(--sans); color: var(--muted); }
.mkt-wk__list { padding: 14px 16px 18px; display: flex; flex-direction: column; gap: 7px; }
.mkt-wk__row { display: flex; align-items: center; gap: 10px; padding: 9px 11px; border-radius: 9px; border: 1.5px solid var(--line-3); background: #fff; }
.mkt-wk__row--done { border-color: var(--mint-2); background: var(--mint-soft); }
.mkt-wk__check { width: 17px; height: 17px; flex: none; border-radius: 5px; border: 1.5px solid #cbc4b6; background: #fff; }
.mkt-wk__check--done { border: none; background: var(--green); color: #fff; display: flex; align-items: center; justify-content: center; font: 700 10px var(--sans); }
.mkt-wk__ex { flex: 1; }
.mkt-wk__ex-name { font-weight: 600; font-size: 13px; }
.mkt-wk__ex-name--done { color: var(--faint); }
.mkt-wk__ex-sub { font-size: 11px; color: var(--faint); }
.mkt-wk__reps { font: 600 12px var(--sans); color: var(--green); }

/* plate preview */
.mkt-pl__head { padding: 15px 17px; border-bottom: 1.5px solid var(--line-3); display: flex; justify-content: space-between; align-items: baseline; }
.mkt-pl__title { font-family: var(--serif); font-size: 18px; font-weight: 500; }
.mkt-pl__day { font: 600 11px var(--sans); color: var(--green); }
.mkt-pl__macros { padding: 17px 18px; display: flex; gap: 16px; align-items: center; border-bottom: 1.5px solid var(--line-3); }
.mkt-pl__ring { width: 70px; height: 70px; border-radius: 50%; flex: none; background: conic-gradient(var(--green) 0 72%, #e9e5db 72% 100%); display: flex; align-items: center; justify-content: center; }
.mkt-pl__ring-in { width: 50px; height: 50px; border-radius: 50%; background: #fff; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.mkt-pl__kcal { font: 700 13px var(--sans); color: var(--ink); }
.mkt-pl__kcal-u { font-size: 8px; color: var(--faint); }
.mkt-pl__bars { flex: 1; display: flex; flex-direction: column; gap: 8px; }
.mkt-pl__bar-top { display: flex; justify-content: space-between; font: 600 10.5px var(--sans); color: var(--muted); margin-bottom: 3px; }
.mkt-pl__track { height: 6px; border-radius: 999px; background: var(--line-3); overflow: hidden; }
.mkt-pl__fill { height: 100%; background: var(--green); }
.mkt-pl__bars > div:nth-child(1) .mkt-pl__fill { width: 100%; }
.mkt-pl__bars > div:nth-child(2) .mkt-pl__fill { width: 90%; }
.mkt-pl__bars > div:nth-child(3) .mkt-pl__fill { width: 88%; }
.mkt-pl__shop { padding: 13px 17px; background: var(--panel); }
.mkt-pl__shop-h { font: 700 9px var(--sans); letter-spacing: .5px; color: var(--green); margin-bottom: 8px; }
.mkt-pl__tags { display: flex; flex-wrap: wrap; gap: 5px; }
.mkt-pl__tags .mkt-chip { font-size: 10.5px; }

/* brief preview */
.mkt-br__tldr { padding: 15px 18px; background: var(--mint); border-bottom: 1.5px solid var(--mint-2); }
.mkt-br__tldr-h { font: 700 9px var(--sans); letter-spacing: .6px; color: var(--green); margin-bottom: 8px; }
.mkt-br__tldr-list { display: flex; flex-direction: column; gap: 7px; }
.mkt-br__tldr-item { display: flex; gap: 8px; align-items: flex-start; }
.mkt-br__bullet { width: 5px; height: 5px; border-radius: 50%; background: var(--green); flex: none; margin-top: 5px; }
.mkt-br__tldr-txt { font-size: 12.5px; color: #3a352c; line-height: 1.4; }
.mkt-br__rows { padding: 8px 10px; }
.mkt-br__row { display: flex; align-items: center; gap: 10px; padding: 11px 9px; }
.mkt-br__row + .mkt-br__row { border-top: 1.5px solid #f6f3ec; }
.mkt-br__tag { font: 700 8px var(--sans); letter-spacing: .3px; color: var(--faint); background: var(--tan); padding: 3px 6px; border-radius: 5px; flex: none; width: 52px; text-align: center; }
.mkt-br__row-txt { flex: 1; font-size: 12.5px; color: #3a352c; }
.mkt-br__chev { color: var(--faint); font-size: 14px; }

/* ── 12. Pricing ─────────────────────────────────────────────────────────── */
.mkt-pricing__note { display: inline-block; font-size: 12px; color: var(--faint); background: #fff; border: var(--edge); border-radius: 999px; padding: 6px 14px; }
.mkt-tiers { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 18px; max-width: 840px; margin: 0 auto; }
/* One live plan: a single centered card, so "One plan" reads true. */
.mkt-tiers--single { max-width: 420px; }
/* Scout preview strip — a teaser, not a co-equal pricing card. */
.mkt-soon { display: flex; align-items: center; gap: 14px; max-width: 620px; margin: 18px auto 0; padding: 14px 18px; border: 1.5px dashed var(--line); border-radius: 14px; background: #faf8f3; }
.mkt-soon__flag { flex: none; font: 700 9px var(--sans); letter-spacing: .6px; color: #fff; background: #b45b3e; border-radius: 999px; padding: 5px 10px; }
.mkt-soon__text { font-size: 13.5px; line-height: 1.55; color: #6f6a5e; }
.mkt-soon__text strong { color: #26221b; font-weight: 600; }
.mkt-tier { position: relative; background: #fff; border: var(--edge); border-radius: 20px; padding: 28px 26px; box-shadow: var(--sh-sm); }
.mkt-tier--pro { border-color: var(--green); box-shadow: 0 16px 48px rgba(50, 42, 28, .11); }
.mkt-tier__name { font-family: var(--serif); font-size: 22px; font-weight: 500; }
.mkt-tier__pitch { font-size: 12.5px; color: var(--faint); margin-bottom: 16px; min-height: 34px; }
.mkt-tier__price { display: flex; align-items: baseline; gap: 5px; margin-bottom: 20px; }
.mkt-tier__price b { font-family: var(--serif); font-size: 44px; font-weight: 500; line-height: 1; }
.mkt-tier__price span { font-size: 13px; color: var(--faint); }
.mkt-tier__flag { position: absolute; top: -11px; left: 26px; font: 700 9px var(--sans); letter-spacing: .6px; color: #fff; background: var(--green); border-radius: 999px; padding: 5px 12px; }
.mkt-tier__flag--soon { background: #b45b3e; }
.mkt-tier__feats { display: flex; flex-direction: column; gap: 11px; border-top: 1.5px solid var(--line-3); padding-top: 17px; }
.mkt-feat { display: flex; gap: 10px; align-items: flex-start; }
.mkt-feat__tick { width: 18px; height: 18px; flex: none; border-radius: 50%; background: var(--mint); color: var(--green); display: flex; align-items: center; justify-content: center; margin-top: 1px; }
.mkt-feat__tick svg { width: 11px; height: 11px; }
.mkt-feat span { font-size: 13px; line-height: 1.45; color: #3f3a30; }
.mkt-pricing__foot { text-align: center; margin-top: 22px; font-size: 12.5px; color: var(--faint); }

/* ── 13. Trust ───────────────────────────────────────────────────────────── */
.mkt-trust-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 16px 26px; }
.mkt-trust__item { display: flex; gap: 13px; align-items: flex-start; }
.mkt-trust__glyph { width: 34px; height: 34px; border-radius: 10px; }
.mkt-trust__glyph svg { width: 17px; height: 17px; }
.mkt-trust__title { font-size: 14px; font-weight: 700; margin-bottom: 4px; }
.mkt-trust__body { font-size: 13px; line-height: 1.5; color: var(--muted); }

/* ── 14. Final CTA ───────────────────────────────────────────────────────── */
.mkt-cta__box { position: relative; overflow: hidden; background: var(--forest); border-radius: 24px; padding: 56px 40px; text-align: center; box-shadow: 0 16px 48px rgba(50, 42, 28, .16); }
.mkt-cta__box::before { content: ""; position: absolute; inset: 0; background: radial-gradient(90% 120% at 50% -10%, rgba(220, 235, 229, .14), transparent 60%); }
.mkt-cta__inner { position: relative; }
.mkt-cta__title { font-family: var(--serif); font-weight: 500; font-size: clamp(30px, 4vw, 44px); line-height: 1.08; color: #f4f1e9; margin-bottom: 14px; text-wrap: balance; }
.mkt-cta__lead { font-size: 16px; line-height: 1.6; color: #c3cec8; max-width: 520px; margin: 0 auto 28px; }
.mkt-cta__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-bottom: 18px; }
.mkt-cta__fine { font-size: 12.5px; color: #9fb0a8; }

/* ── 15. Footer ──────────────────────────────────────────────────────────── */
.mkt-footer { border-top: var(--edge); }
.mkt-footer__inner { max-width: 1080px; margin: 0 auto; padding: 26px 30px; display: flex; flex-wrap: wrap; align-items: center; gap: 16px; }
.mkt-footer__brand { display: flex; align-items: center; gap: 9px; }
.mkt-footer__brand img { width: 26px; height: 26px; border-radius: 7px; }
.mkt-footer__name { font-family: var(--serif); font-weight: 600; font-size: 18px; }
.mkt-footer__tag { font-size: 12px; color: var(--faint); }
.mkt-footer__links { display: flex; gap: 20px; font-size: 12.5px; }
.mkt-footer__links a { color: var(--muted); }

/* ── 16. Animation ───────────────────────────────────────────────────────── */
@keyframes riseIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

/* ── 17. Responsive ──────────────────────────────────────────────────────── */
@media (max-width: 860px) {
  .mkt-hero { grid-template-columns: 1fr; gap: 30px; }
  .mkt-tplpanel { grid-template-columns: 1fr; gap: 22px; }
}
@media (max-width: 720px) {
  .mkt-nav__links { display: none; }
}
@media (max-width: 700px) {
  .mkt-section,
  .mkt-wrap,
  .mkt-hero,
  .mkt-nav,
  .mkt-divider,
  .mkt-footer__inner { padding-left: 18px; padding-right: 18px; }
  .mkt-hero { padding-top: 40px; }
  .mkt-reader__badge { left: 4px; }
  .mkt-tplpanel { padding: 22px; }
}
@media (max-width: 640px) {
}

/* ── Legal pages (privacy, terms) ────────────────────────────────────────
   Long-form reading, so this deliberately breaks from the marketing page's
   wide layout: one narrow measure, generous line height, no decoration. */
.legal { max-width: 720px; margin: 0 auto; padding: 56px var(--page-gutter, 24px) 80px; }
.legal__head { padding-bottom: 26px; margin-bottom: 30px; border-bottom: 1.5px solid #e6e1d6; }
.legal__title { font-family: "Newsreader", Georgia, serif; font-weight: 500; font-size: 38px; line-height: 1.15; margin: 0 0 10px; color: #26221b; }
.legal__lede { font-size: 16px; line-height: 1.6; color: #6f6a5e; margin: 0 0 10px; }
.legal__updated { font-size: 12.5px; color: #9a9384; margin: 0; }

.legal__body { font-size: 15.5px; line-height: 1.72; color: #3a352c; }
.legal__body h2 { font-family: "Newsreader", Georgia, serif; font-weight: 600; font-size: 23px; line-height: 1.25; margin: 40px 0 12px; color: #26221b; }
.legal__body h3 { font-size: 15px; font-weight: 700; margin: 26px 0 8px; color: #26221b; }
.legal__body p { margin: 0 0 16px; }
.legal__body ul { margin: 0 0 16px; padding-left: 22px; }
.legal__body li { margin-bottom: 8px; }
.legal__body strong { color: #26221b; font-weight: 600; }
.legal__body a { color: #2f6d5b; text-decoration: underline; text-underline-offset: 2px; }
.legal__body a:hover { color: #28604f; }

/* Sub-processor table — the one place a table beats prose, and the one place
   people actually look. Scrolls inside itself so the page never does. */
.legal__table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; margin: 0 0 18px; }
.legal__table { border-collapse: collapse; width: 100%; min-width: 520px; font-size: 14px; }
.legal__table th, .legal__table td { text-align: left; vertical-align: top; padding: 11px 14px; border-bottom: 1.5px solid #ece8df; }
.legal__table th { font-size: 11px; letter-spacing: .5px; text-transform: uppercase; color: #9a9384; font-weight: 700; }
.legal__table tbody tr:last-child td { border-bottom: none; }

.legal__foot { max-width: 720px; margin: 40px auto 0; padding-top: 22px; border-top: 1.5px solid #e6e1d6; font-size: 13.5px; color: #9a9384; }
.legal__foot a { color: #2f6d5b; text-decoration: none; }
.legal__foot a:hover { text-decoration: underline; }

@media (max-width: 720px) {
  .legal { padding-top: 34px; padding-bottom: 56px; }
  .legal__title { font-size: 30px; }
  .legal__body { font-size: 15px; }
  .legal__body h2 { font-size: 20px; margin-top: 32px; }
}

.legal__warn { border: 1.5px solid #e8d3c8; background: #fdf6f2; border-radius: 12px; padding: 14px 16px; margin: 0 0 26px; font-size: 14px; line-height: 1.6; color: #8a4a30; }
.legal__warn strong { color: #b45b3e; }
.legal__warn code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12.5px; background: #f6e2d8; padding: 1px 5px; border-radius: 4px; }

/* ── "Assist, don't interrupt" — the two assist moments (prompt coach + steering) ──
   A distinct band, like the how-it-works section, so it reads as its own section rather than a
   continuation of the output-templates section above it. */
.mkt-assist { background: var(--panel); border-top: 1.5px solid var(--line-2); border-bottom: 1.5px solid var(--line-2); }
.mkt-assist .mkt-wrap { padding-top: 58px; padding-bottom: 60px; }
.mkt-moments { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 26px; max-width: 900px; margin: 8px auto 0; }
.mkt-moment { display: flex; flex-direction: column; align-items: center; text-align: center; }
.mkt-moment__step { display: inline-flex; align-items: center; gap: 8px; font: 700 10px var(--sans); letter-spacing: .6px; color: #9a9384; margin-bottom: 10px; }
.mkt-moment__n { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 50%; background: var(--mint-soft); color: var(--green); font: 700 10px var(--sans); }
.mkt-moment__title { font-family: var(--serif); font-weight: 500; font-size: 20px; margin: 0 0 16px; color: #26221b; }
.mkt-mock--flush { max-width: 360px; }
.mkt-moment__cap { font-size: 13px; line-height: 1.55; color: #6f6a5e; margin: 16px 6px 0; max-width: 330px; }

/* mock interiors — suggestive, not pixel-perfect replicas of the app.
   Scoped to .mkt-assist so the shared .mkt-mock__card used elsewhere is untouched. */
.mkt-assist .mkt-mock__card { padding: 16px 18px; text-align: left; }
.mkt-coach__label { font: 700 9px var(--sans); letter-spacing: .6px; color: #9a9384; margin-bottom: 8px; }
.mkt-coach__prompt { font-family: var(--serif); font-size: 15px; color: #3a352c; padding-bottom: 12px; border-bottom: 1.5px solid var(--line); margin-bottom: 12px; }
.mkt-coach__grade { display: flex; gap: 10px; align-items: flex-start; margin-bottom: 14px; }
.mkt-coach__score { flex: none; font: 700 11px var(--sans); color: var(--green); background: var(--mint-soft); border-radius: 8px; padding: 4px 9px; }
.mkt-coach__tip { font-size: 12.5px; line-height: 1.5; color: #6f6a5e; }
.mkt-coach__cta { width: 100%; justify-content: center; }
.mkt-coach__cta svg { width: 14px; height: 14px; }

.mkt-steer__chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; }
.mkt-steer__note { font-size: 13.5px; line-height: 1.5; color: #3a352c; background: #faf8f3; border: 1.5px solid var(--line); border-radius: 10px; padding: 10px 12px; margin-bottom: 14px; }
.mkt-assist .mkt-mock--flush .mkt-btn--sm { width: 100%; justify-content: center; }

.mkt-assist__foot { text-align: center; font-size: 13.5px; color: #9a9384; margin: 30px auto 0; max-width: 560px; }

/* "…and anything you can describe" — Custom as the open-ended catch-all that
   closes the OUTPUT TEMPLATES showcase. Dashed edge signals "open-ended". */
.mkt-tplcustom { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; max-width: 760px; margin: 40px auto 0; padding: 18px 22px; border: 1.5px dashed var(--mint-br); border-radius: 16px; background: var(--mint-soft); }
.mkt-tplcustom__glyph { flex: none; width: 40px; height: 40px; border-radius: 11px; background: var(--mint-2); color: var(--green); display: inline-flex; align-items: center; justify-content: center; font-size: 20px; }
.mkt-tplcustom__text { flex: 1 1 300px; font-size: 13.5px; line-height: 1.55; color: var(--muted); }
.mkt-tplcustom__text strong { display: block; font-family: var(--serif); font-weight: 500; font-size: 17px; color: var(--ink); margin-bottom: 3px; }
.mkt-tplcustom__cta { flex: none; }

/* House-hunt preview mock (OUTPUT TEMPLATES 4th tab): vetting + what's-new. */
.mkt-hh__since { font: 700 10px var(--sans); letter-spacing: .3px; color: var(--green); background: var(--mint-soft); padding: 9px 14px; border-bottom: 1.5px solid var(--line-2); }
.mkt-hh__card { padding: 13px 15px; border-bottom: 1.5px solid var(--line-2); }
.mkt-hh__card--out { opacity: .62; }
.mkt-hh__card:last-child { border-bottom: none; }
.mkt-hh__row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.mkt-hh__new { flex: none; font: 700 8.5px var(--sans); letter-spacing: .5px; color: #fff; background: var(--rust); border-radius: 999px; padding: 3px 7px; }
.mkt-hh__title { font-weight: 600; font-size: 13.5px; color: var(--ink); }
.mkt-hh__title--out { text-decoration: line-through; color: var(--muted); }
.mkt-hh__price { margin-left: auto; font: 700 13px var(--mono); color: var(--ink); }
.mkt-hh__checks { display: flex; flex-wrap: wrap; gap: 5px 10px; }
.mkt-hh__ok { font: 600 11px var(--sans); color: var(--green); }
.mkt-hh__no { font: 600 11px var(--sans); color: var(--rust); }

/* ── 18. Use-case SEO pages (/use-cases/:slug) ────────────────────────────────
   Reuses the landing's chrome, hero/reader, steps and CTA. These rules add only
   what's specific to the persona pages: breadcrumb, problem list, output grid,
   FAQ accordion, related cards, and the footer use-case row. */
.mkt-hero--uc { align-items: start; padding-top: 30px; }
/* Keep the preview card sized to its content — never stretched to the (taller)
   hero text column, which is what left an empty tail under the delivery. */
.mkt-hero--uc .mkt-hero__visual { align-items: flex-start; }

/* Real template previews rendered inside the reader chrome (see the mocks/*
   partials). Only the small additions the richer versions need. */
.mkt-wk__phase { font: 700 8.5px var(--sans); letter-spacing: .7px; text-transform: uppercase; color: var(--faint); margin: 8px 2px 2px; }
.mkt-wk__list > .mkt-wk__phase:first-child { margin-top: 0; }

.mkt-pl__meals { padding: 6px 9px; }
.mkt-pl__meal { display: flex; align-items: baseline; gap: 10px; padding: 8px 8px; }
.mkt-pl__meal + .mkt-pl__meal { border-top: 1.5px solid var(--line-3); }
.mkt-pl__meal-t { flex: none; width: 64px; font: 700 9.5px var(--sans); letter-spacing: .3px; text-transform: uppercase; color: var(--green); }
.mkt-pl__meal-n { flex: 1; font-size: 12.5px; color: #3a352c; }
.mkt-pl__meal-k { flex: none; font: 600 11.5px var(--mono); color: var(--muted); }

.mkt-br__foot { padding: 11px 18px; border-top: 1.5px solid var(--line-3); font: 600 10.5px var(--sans); color: var(--faint); background: var(--panel); }

.mkt-hh__drop { font: 700 10px var(--sans); color: var(--rust); margin-left: 5px; }

.mkt-crumb { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12.5px; color: var(--faint); margin-bottom: 18px; }
.mkt-crumb a { color: var(--muted); }
.mkt-crumb__here { color: var(--green); font-weight: 600; }

/* "Who it's for" strip between hero and the problem section. */
.mkt-forwhom { max-width: 760px; margin: 8px auto 0; padding: 0 30px; display: flex; gap: 12px; align-items: center; justify-content: center; text-align: center; font-size: 14.5px; line-height: 1.55; color: var(--muted); }
.mkt-forwhom span { font-size: 22px; flex: none; }

/* The problem ("the old way"). */
.mkt-prob { padding-top: 56px; padding-bottom: 56px; }
.mkt-prob__list { list-style: none; margin: 0; padding: 0; max-width: 720px; display: grid; gap: 12px; }
.mkt-prob__list li { display: flex; gap: 12px; align-items: flex-start; font-size: 15px; line-height: 1.55; color: #3f3a30; }
.mkt-prob__x { flex: none; width: 22px; height: 22px; border-radius: 50%; background: #fbeee8; color: var(--rust); display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; margin-top: 1px; }

/* The delivery — what a run produces. Two-column tick list. */
.mkt-ucout { padding-top: 58px; padding-bottom: 58px; background: var(--panel); border-top: 1.5px solid var(--line-2); border-bottom: 1.5px solid var(--line-2); max-width: none; }
.mkt-ucout > .mkt-head, .mkt-ucout__grid { max-width: 1080px; margin-left: auto; margin-right: auto; }
.mkt-ucout__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px 40px; padding: 0 30px; }

/* FAQ accordion — native <details>, styled. Also emits FAQPage JSON-LD. */
.mkt-faq { padding-top: 58px; padding-bottom: 58px; }
.mkt-faq__list { max-width: 760px; margin: 0 auto; display: grid; gap: 10px; }
.mkt-faq__item { border: var(--edge); border-radius: 14px; background: #fff; padding: 0 20px; overflow: hidden; }
.mkt-faq__item summary { display: flex; align-items: center; gap: 12px; justify-content: space-between; cursor: pointer; list-style: none; padding: 16px 0; font-family: var(--serif); font-size: 17px; color: var(--ink); }
.mkt-faq__item summary::-webkit-details-marker { display: none; }
.mkt-faq__plus { flex: none; font: 400 20px var(--sans); color: var(--green); transition: transform .18s ease; line-height: 1; }
.mkt-faq__item[open] .mkt-faq__plus { transform: rotate(45deg); }
.mkt-faq__item p { margin: 0; padding: 0 0 18px; font-size: 14.5px; line-height: 1.6; color: var(--muted); max-width: 640px; }

/* Related use cases + the hub grid. */
.mkt-related { padding-top: 8px; padding-bottom: 58px; }
.mkt-related__card { display: flex; flex-direction: column; align-items: flex-start; text-decoration: none; transition: transform .16s ease, box-shadow .16s ease; }
.mkt-related__card:hover { text-decoration: none; transform: translateY(-2px); box-shadow: var(--sh-md); }
.mkt-related__emoji { font-size: 26px; margin-bottom: 12px; }
.mkt-related__go { margin-top: auto; padding-top: 14px; display: inline-flex; align-items: center; gap: 6px; font: 700 13px var(--sans); color: var(--green); }
.mkt-related__go svg { width: 15px; height: 15px; }

.mkt-uchub { padding-top: 56px; padding-bottom: 64px; }
.mkt-uchub__grid { margin-bottom: 8px; }
.mkt-uchub__cta { margin-top: 40px; }

/* Contact page — a real form (server-emailed, bot-protected). */
.mkt-contact { padding-top: 56px; padding-bottom: 64px; }
.mkt-form { max-width: 560px; margin: 0 auto; }
.mkt-form__label { display: block; font: 700 11px var(--sans); letter-spacing: .3px; color: var(--muted); margin: 16px 0 6px; }
.mkt-form__input { width: 100%; box-sizing: border-box; font: 400 14.5px var(--sans); color: var(--ink); background: #fff; border: var(--edge); border-radius: 11px; padding: 11px 13px; }
.mkt-form__input:focus { outline: none; border-color: var(--green); box-shadow: 0 0 0 3px rgba(47, 109, 91, .12); }
.mkt-form__textarea { resize: vertical; line-height: 1.5; }
.mkt-form__row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.mkt-form__selectwrap { position: relative; }
.mkt-form__selectwrap select { appearance: none; -webkit-appearance: none; padding-right: 34px; cursor: pointer; }
.mkt-form__chev { position: absolute; right: 13px; top: 50%; transform: translateY(-50%); pointer-events: none; color: var(--faint); font-size: 12px; }
.mkt-form__turnstile { margin-top: 18px; }
.mkt-form__submit { margin-top: 22px; }
.mkt-form__fine { margin-top: 12px; font-size: 12.5px; color: var(--faint); }
.mkt-form__err { background: #fbeee8; border: 1.5px solid #e8d3c8; color: #8a4a30; border-radius: 11px; padding: 11px 14px; font-size: 13.5px; line-height: 1.5; margin-bottom: 4px; }
/* Honeypot: off-screen, unfocusable, hidden from AT — only bots fill it. */
.mkt-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
/* Success state. */
.mkt-sent { max-width: 520px; margin: 20px auto 0; text-align: center; }
.mkt-sent__ico { display: inline-flex; align-items: center; justify-content: center; width: 46px; height: 46px; border-radius: 14px; background: var(--mint-2); color: var(--green); margin-bottom: 16px; }
.mkt-sent__ico svg { width: 22px; height: 22px; }
.mkt-sent .mkt-lead { margin: 10px auto 22px; max-width: 440px; }

@media (max-width: 560px) { .mkt-form__row { grid-template-columns: 1fr; } }

@media (max-width: 700px) {
  .mkt-forwhom, .mkt-ucout__grid { padding-left: 18px; padding-right: 18px; }
  .mkt-prob, .mkt-ucout, .mkt-faq, .mkt-related, .mkt-uchub, .mkt-contact { padding-top: 44px; padding-bottom: 44px; }
  .mkt-faq__item summary { font-size: 15.5px; }
}
/* New-routine wizard — two-step skill browser + configure, inside the app shell. */
/* The 56px is .app-topbar, which lives inside .app-main on desktop, so the
   wizard has to discount it to fill the rest. dvh for the reason in
   app_shell.css. On mobile both halves of that are wrong — see below. */
.nrw { display: flex; flex-direction: column; min-height: calc(100vh - 56px); min-height: calc(100dvh - 56px); }
.nrw-step { display: none; flex: 1; min-height: 0; }
.nrw-step.is-active { display: flex; align-items: stretch; }

/* ---------------- STEP 1: pick ---------------- */
.nrw-rail { width: 248px; flex: none; border-right: 1.5px solid #e6e1d6; background: #faf8f3; padding: 26px 14px 40px; display: flex; flex-direction: column; }
.nrw-rail__step { font-size: 11px; color: #9a9384; margin-bottom: 2px; }
.nrw-rail__title { font-family: "Newsreader", serif; font-size: 19px; font-weight: 500; margin-bottom: 18px; line-height: 1.2; }
.nrw-rail__label { font: 700 10px "Hanken Grotesk"; letter-spacing: .5px; color: #2f6d5b; margin: 0 0 9px 4px; }
.nrw-rail__list { display: flex; flex-direction: column; gap: 3px; }
.nrw-railrow { display: flex; align-items: center; gap: 10px; padding: 8px 9px; border-radius: 10px; cursor: pointer; background: none; border: none; text-align: left; width: 100%; }
.nrw-railrow:hover { background: #f1ede4; }
.nrw-railrow.is-active { background: #eef3f1; box-shadow: inset 0 0 0 1.5px #cfe0d9; }
.nrw-railrow__tile { width: 30px; height: 30px; flex: none; border-radius: 9px; background: #eef4f1; display: flex; align-items: center; justify-content: center; font-size: 15px; }
.nrw-railrow__tile--muted { background: #efece4; color: #9a9384; }
.nrw-railrow__text { min-width: 0; }
.nrw-railrow__name { display: block; font-weight: 600; font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nrw-railrow__short { display: block; font-size: 10.5px; color: #9a9384; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nrw-rail__div { height: 1.5px; background: #ece8df; margin: 14px 4px; }
.nrw-rail__soon { font-size: 10.5px; color: #9a9384; line-height: 1.45; padding: 0 4px; margin-top: auto; }

/* Mobile-only card grid (≤900px) — see the @media block below. Hidden on
   desktop, where the rail + one-at-a-time preview take over instead. */
.nrw-mobile-pick { display: none; padding: 22px 20px 8px; }
.nrw-mobile-pick__step { font-size: 11px; color: #9a9384; margin-bottom: 2px; }
.nrw-mobile-pick__title { font-family: "Newsreader", serif; font-size: 21px; font-weight: 500; margin: 0 0 16px; line-height: 1.2; }
.nrw-mobile-pick__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.nrw-mobile-card { display: flex; flex-direction: column; align-items: flex-start; text-align: left; gap: 4px; padding: 18px; }
.nrw-mobile-card__icon { width: 44px; height: 44px; border-radius: var(--radius-md); background: var(--primary-tint); border: 1.5px solid var(--primary-border); display: flex; align-items: center; justify-content: center; font-size: 21px; margin-bottom: 8px; }
.nrw-mobile-card__name { font-weight: 600; font-size: 14px; color: #26221b; line-height: 1.3; }
.nrw-mobile-card__desc { font-size: 12px; color: #857f70; line-height: 1.45; }
.nrw-mobile-pick__blank { display: block; width: 100%; text-align: center; margin-top: 14px; background: none; border: none; font: 600 12.5px "Hanken Grotesk"; color: var(--accent); cursor: pointer; padding: 8px; }

.nrw-browse { flex: 1; min-width: 0; background: #fbfaf7; display: flex; flex-direction: column; }
.nrw-panel { display: none; flex: 1; min-width: 0; flex-direction: column; }
.nrw-panel.is-active { display: flex; }
.nrw-panel__inner { flex: 1; display: flex; flex-direction: column; padding: 40px 44px 28px; max-width: 760px; width: 100%; margin: 0 auto; }
.nrw-panel__head { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; }
.nrw-panel__tile { width: 52px; height: 52px; flex: none; border-radius: 14px; background: #eef4f1; display: flex; align-items: center; justify-content: center; font-size: 26px; }
.nrw-panel__cat { font-size: 12px; color: #9a9384; margin-bottom: 2px; }
.nrw-panel__name { font-family: "Newsreader", serif; font-weight: 500; font-size: 28px; margin: 0; line-height: 1.1; }
.nrw-panel__desc { font-size: 14px; line-height: 1.6; color: #3a352c; margin: 0 0 8px; }
.nrw-panel__get { border: 1.5px solid #cfe0d9; background: #f4f8f6; border-radius: 12px; padding: 11px 14px; margin-bottom: 20px; font-size: 12.5px; line-height: 1.5; color: #2f6d5b; }
.nrw-panel__get strong { font-weight: 700; }

.nrw-window { flex: 1; border: 1.5px solid #d9d3c7; border-radius: 14px; background: #fff; overflow: hidden; display: flex; flex-direction: column; box-shadow: 0 12px 34px rgba(50,42,28,.12); }
.nrw-window__chrome { display: flex; align-items: center; gap: 10px; padding: 9px 13px; border-bottom: 1.5px solid #ece8df; background: #f1ede4; }
.nrw-window__dots { display: flex; gap: 6px; flex: none; }
.nrw-window__dots i { width: 11px; height: 11px; border-radius: 50%; }
.nrw-window__dots i:nth-child(1) { background: #e5a19a; }
.nrw-window__dots i:nth-child(2) { background: #e6cf9a; }
.nrw-window__dots i:nth-child(3) { background: #a9cbb2; }
.nrw-window__url { flex: 1; text-align: center; max-width: 340px; margin: 0 auto; background: #fff; border: 1.5px solid #e6e1d6; border-radius: 8px; padding: 4px 11px; font: 600 10.5px "Hanken Grotesk"; color: #9a9384; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nrw-window__badge { font: 700 8.5px "Hanken Grotesk"; letter-spacing: .4px; color: #9a9384; flex: none; background: #e6e1d6; padding: 3px 7px; border-radius: 5px; }
.nrw-window__doc { padding: 22px 24px; flex: 1; overflow: auto; }

.nrw-actionbar { border-top: 1.5px solid #e6e1d6; background: #fbfaf7; padding: 15px 44px; display: flex; align-items: center; gap: 14px; }
/* On any reasonably tall window, keep the "Use …" action pinned to the bottom so
   it's always visible however tall the preview grows. Skipped on short windows. */
@media (min-height: 620px) {
  .nrw-actionbar { position: sticky; bottom: 0; z-index: 5; box-shadow: 0 -7px 20px rgba(50,42,28,.07); }
}
.nrw-use { padding: 12px 22px; border: none; border-radius: 11px; background: #2f6d5b; color: #fff; font: 600 13.5px "Hanken Grotesk"; cursor: pointer; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.nrw-use:hover { background: #28604f; }
.nrw-actionbar__spacer { flex: 1; }
.nrw-actionbar__pos { font-size: 12px; color: #9a9384; }
.nrw-arrow { width: 36px; height: 36px; border-radius: 10px; border: 1.5px solid #e6e1d6; background: #fff; display: flex; align-items: center; justify-content: center; color: #6f6a5e; cursor: pointer; font-size: 18px; }
.nrw-arrow:hover { border-color: #cfe0d9; }

/* ---------------- shared sample doc ---------------- */
.nrw-doc { display: flex; flex-direction: column; gap: 13px; }
.nrw-doc__meta { font: 600 10.5px "Hanken Grotesk"; letter-spacing: .3px; color: #a49d8d; }
.nrw-doc__title { font-family: "Newsreader", serif; font-size: 22px; font-weight: 500; line-height: 1.15; margin-top: -4px; }
.nrw-doc__lead { font-size: 13px; line-height: 1.55; color: #6f6a5e; }
.nrw-doc__stats { display: flex; gap: 9px; }
.nrw-doc__stat { flex: 1; border: 1.5px solid #f0ece3; border-radius: 10px; padding: 10px 12px; background: #faf8f3; }
.nrw-doc__statv { font-family: "Newsreader", serif; font-size: 22px; font-weight: 500; color: #2f6d5b; line-height: 1; }
.nrw-doc__statl { font-size: 10.5px; color: #9a9384; margin-top: 4px; line-height: 1.35; }
.nrw-doc__rule { height: 1px; background: #f0ece3; }
.nrw-doc__row { display: flex; align-items: flex-start; gap: 11px; }
.nrw-doc__k { width: 20px; height: 20px; flex: none; border-radius: 6px; background: #eef4f1; color: #2f6d5b; display: flex; align-items: center; justify-content: center; font: 700 10px "Hanken Grotesk"; margin-top: 1px; }
.nrw-doc__rmain { flex: 1; min-width: 0; }
.nrw-doc__t { font-weight: 600; font-size: 13px; color: #26221b; }
.nrw-doc__s { font-size: 12px; color: #6f6a5e; line-height: 1.5; margin-top: 2px; }
.nrw-doc__m { font: 600 12.5px "Hanken Grotesk"; color: #26221b; flex: none; }
.nrw-doc__foot { border-top: 1.5px solid #f0ece3; padding-top: 11px; font-size: 12px; line-height: 1.5; color: #6f6a5e; }
.nrw-doc__foot strong { color: #3a352c; font-weight: 600; }

/* ---------------- STEP 2: config ---------------- */
.nrw-step--config.is-active { align-items: stretch; }
.nrw-config { display: flex; flex: 1; min-width: 0; width: 100%; }
.nrw-compose { flex: 1; min-width: 0; background: #f4f1ea; padding: 30px 34px 60px; display: flex; flex-direction: column; }
.nrw-back { align-self: flex-start; background: none; border: none; cursor: pointer; font: 600 12px "Hanken Grotesk"; color: #6f6a5e; margin-bottom: 18px; padding: 0; }
.nrw-back:hover { color: #2f6d5b; }
.nrw-compose__head { display: flex; align-items: center; gap: 13px; margin-bottom: 22px; }
.nrw-compose__tile { width: 44px; height: 44px; flex: none; border-radius: 12px; background: #eef4f1; display: flex; align-items: center; justify-content: center; font-size: 22px; }
.nrw-compose__cat { font-size: 12px; color: #9a9384; }
.nrw-compose__name { font-family: "Newsreader", serif; font-weight: 500; font-size: 24px; margin: 1px 0 0; }

/* Edit reuses the compose column full-width (no example pane, no picker). */
.nrw-compose--full { margin: 0 auto; width: 100%; max-width: 720px; padding-top: 34px; }
.nrw-compose__headtext { flex: 1; min-width: 0; }
.nrw-runbtn { flex: none; background: #fff; border: 1.5px solid #e6e1d6; border-radius: 10px; padding: 9px 13px; font: 600 12.5px "Hanken Grotesk"; color: #2f6d5b; cursor: pointer; }
.nrw-runbtn:hover { border-color: #cfe0d9; background: #f4f8f6; }
.nrw-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 14px; }
@media (max-width: 560px) { .nrw-grid2 { grid-template-columns: 1fr; } }

/* "What jarvis remembers" — folded-in feedback, each removable. */
.nrw-mem { margin-top: 34px; padding-top: 26px; border-top: 1.5px solid #e6e1d6; }
.nrw-mem__head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 12px; }
.nrw-mem__note { font-size: 11.5px; color: #9a9384; }
.nrw-mem__list { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
.nrw-mem__item { display: flex; align-items: flex-start; gap: 10px; padding: 11px 13px; border: 1.5px solid #e6e1d6; border-radius: 12px; background: #fbfaf7; }
.nrw-mem__ver { flex: none; font: 600 10.5px "Hanken Grotesk"; letter-spacing: .3px; color: #6f6a5e; background: #f1ede4; border-radius: 6px; padding: 3px 7px; margin-top: 1px; }
.nrw-mem__text { flex: 1; min-width: 0; font-size: 12.5px; line-height: 1.55; color: #3a352c; white-space: pre-wrap; word-break: break-word; }
.nrw-mem__rm { flex: none; background: none; border: none; cursor: pointer; font: 600 11.5px "Hanken Grotesk"; color: #b45b3e; padding: 0; }
.nrw-mem__rm:hover { text-decoration: underline; }
.nrw-mem__empty { font-size: 12.5px; line-height: 1.6; color: #9a9384; margin: 0; }

.nrw-lbl { display: block; font-size: 12px; font-weight: 600; color: #6f6a5e; margin: 0 0 7px; }
.nrw-lbl--inline { margin: 0; }
.nrw-input, .nrw-textarea { width: 100%; padding: 12px 14px; border: 1.5px solid #e6e1d6; border-radius: 12px; font: 400 13px/1.65 "Hanken Grotesk"; color: #3a352c; outline: none; background: #fff; box-shadow: 0 1px 3px rgba(50,42,28,.05); margin-bottom: 6px; }
.nrw-input:focus, .nrw-textarea:focus { border-color: #cfe0d9; }
.nrw-input { margin-bottom: 18px; }
.nrw-textarea { min-height: 220px; resize: vertical; white-space: pre-wrap; }
.nrw-hint { font-size: 11.5px; color: #9a9384; margin-bottom: 18px; line-height: 1.5; }

.nrw-toolshead { display: flex; align-items: baseline; gap: 8px; margin-bottom: 9px; }
.nrw-toolshead__note { font-size: 11.5px; color: #9a9384; }
.nrw-tools { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 22px; }
.nrw-tool { display: inline-flex; align-items: center; gap: 8px; padding: 9px 12px; border-radius: 11px; border: 1.5px solid #e6e1d6; background: #fff; cursor: pointer; }
.nrw-tool__icon { font-size: 13px; }
.nrw-tool__label { font-weight: 600; font-size: 12.5px; }
.nrw-tool__check { width: 20px; height: 20px; border-radius: 6px; background: #f1ede4; color: #9a9384; display: flex; align-items: center; justify-content: center; font: 700 11px "Hanken Grotesk"; }
.nrw-tool.is-on { border-color: #cfe0d9; background: #f4f8f6; }
.nrw-tool.is-on .nrw-tool__check { background: #2f6d5b; color: #fff; }
.nrw-tool--soon { cursor: default; opacity: .75; }
.nrw-tool__pro { font: 700 9px "Hanken Grotesk"; letter-spacing: .3px; color: #9a9384; background: #f1ede4; padding: 2px 6px; border-radius: 5px; }

.nrw-select { position: relative; margin-bottom: 22px; }
.nrw-select select { width: 100%; appearance: none; -webkit-appearance: none; padding: 12px 38px 12px 14px; border: 1.5px solid #e6e1d6; border-radius: 11px; font: 500 13px "Hanken Grotesk"; color: #26221b; background: #fff; cursor: pointer; outline: none; }
.nrw-select__chev { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); pointer-events: none; color: #9a9384; font-size: 11px; }

/* Rich schedule editor (shared partial). */
.sch [data-sch-row] { margin-bottom: 2px; }
.sch .nrw-input.mono { font-family: "IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace; font-size: 12.5px; letter-spacing: .2px; }
.sch-trans { margin: -12px 0 18px; font-size: 12px; line-height: 1.5; color: #9a9384; }
.sch-trans--ok { color: #2f6d5b; font-weight: 600; }
.sch-trans--bad { color: #b45b3e; }

.nrw-static { padding: 11px 13px; border: 1.5px solid #e6e1d6; border-radius: 11px; font-size: 12.5px; line-height: 1.5; color: #6f6a5e; background: #faf8f3; margin-bottom: 22px; }
.nrw-static strong { color: #2f6d5b; font-weight: 700; }
.nrw-schedule { display: flex; align-items: center; gap: 8px; padding: 11px 13px; border: 1.5px solid #e6e1d6; border-radius: 11px; font-size: 13px; color: #26221b; background: #fff; margin-bottom: 24px; }
.nrw-schedule__spacer { flex: 1; }
.nrw-schedule__change { font-size: 11.5px; color: #2f6d5b; font-weight: 600; }

.nrw-submit { width: 100%; padding: 14px; border: none; border-radius: 12px; background: #2f6d5b; color: #fff; font: 600 14px "Hanken Grotesk"; cursor: pointer; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.nrw-submit:hover { background: #28604f; }
.nrw-errors { margin-bottom: 14px; }

.nrw-example { flex: 1; min-width: 0; background: #fbfaf7; border-left: 1.5px solid #e6e1d6; padding: 30px 34px 60px; display: flex; flex-direction: column; gap: 16px; }
.nrw-example__get { border: 1.5px solid #cfe0d9; background: #f4f8f6; border-radius: 12px; padding: 11px 14px; font-size: 12.5px; line-height: 1.5; color: #2f6d5b; }
.nrw-example__get strong { font-weight: 700; }
.nrw-example__card { border: 1.5px solid #e6e1d6; border-radius: 16px; overflow: hidden; box-shadow: 0 4px 16px rgba(50,42,28,.05); background: #fff; }
.nrw-example__head { display: flex; align-items: center; gap: 10px; padding: 11px 15px; background: #faf8f3; border-bottom: 1.5px solid #f0ece3; }
.nrw-example__titles { flex: 1; }
.nrw-example__t { font-weight: 600; font-size: 12.5px; }
.nrw-example__s { font-size: 11px; color: #9a9384; }
.nrw-example__badge { font: 600 9.5px "Hanken Grotesk"; letter-spacing: .4px; padding: 3px 8px; border-radius: 6px; background: #f1ede4; color: #9a9384; }
.nrw-example__doc { display: none; }
.nrw-example__doc.is-active { display: block; }

/* Live template previews: render the real partial, scaled to fit the surface. */
.nrw-preview { zoom: .8; }
.nrw-preview .tr, .nrw-preview .nu, .nrw-preview .db, .nrw-preview .hh { max-width: none; margin: 0; }
.nrw-preview .hh-layout { display: block; }   /* drop the sticky side-nav column */
.nrw-preview .hh-nav { display: none; }
.nrw-window__doc .nrw-preview { padding: 4px; }
.nrw-example__doc .nrw-preview { padding: 18px 20px; }
.nrw-example__doc .nrw-doc { padding: 18px 20px; } /* Custom (no template) fallback */
@supports not (zoom: 1) { .nrw-preview { transform: scale(.8); transform-origin: top left; width: 125%; } }

@media (max-width: 720px) {
  /* .app-topbar is hidden at this width and the bar that replaces it
     (.mobile-topbar) sits OUTSIDE .app-main, so .app-main is already the
     right height — discounting another 56px here made the wizard overflow
     it and the page scrolled ~56px with nothing to show for it. Just fill
     the parent. */
  .nrw { min-height: 100%; }
}

@media (max-width: 900px) {
  .nrw-rail { display: none; }
  .nrw-browse { display: none; }
  /* It's a flex item of .nrw-step, so `display: block` alone leaves it
     shrink-to-fit — the card list ends up ~220px wide on a 390px phone. */
  .nrw-mobile-pick { display: block; flex: 1; min-width: 0; }
  .nrw-config { flex-direction: column; }
  .nrw-example { border-left: none; border-top: 1.5px solid #e6e1d6; }
}
/* One per row on phones. Stacked cards waste most of the width on a tall
   empty column, so lay each one out as an icon-left row instead — same
   treatment as the Help & support cards. */
@media (max-width: 560px) {
  .nrw-mobile-pick__grid { grid-template-columns: 1fr; gap: 10px; }
  .nrw-mobile-card {
    display: grid; grid-template-columns: auto 1fr;
    column-gap: 13px; row-gap: 2px; align-items: center; padding: 14px 15px;
  }
  .nrw-mobile-card__icon { grid-row: 1 / span 2; margin-bottom: 0; }
  .nrw-mobile-card__name { align-self: end; }
  .nrw-mobile-card__desc { align-self: start; }
}

/* Pro-gated (web) starting points for free users. */
.nrw-prolock { font: 700 8.5px "Hanken Grotesk"; letter-spacing: .3px; margin-left: 6px; padding: 2px 6px; border-radius: 5px; background: #efe9f2; color: #6a4c86; vertical-align: middle; }
.nrw-use--lock { background: #efe9f2; color: #6a4c86; box-shadow: none; text-decoration: none; }
.nrw-use--lock:hover { background: #e5ddf0; text-decoration: none; }
.nrw-actionbar__note { font-size: 11.5px; color: #9a9384; margin-left: 12px; }
/* "✨ Let jarvis improve this" — prompt coach widget (new + edit). */
.pc { margin: 0 0 18px; }
/* Several children below set their own `display: flex`, which otherwise beats
   the `hidden` attribute's UA-stylesheet `display: none` in the cascade. */
.pc [hidden] { display: none !important; }
.pc__bar { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }

.pc__btn {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 8px 13px; border: 1.5px solid #cfe0d9; border-radius: 11px;
  background: #f4f8f6; color: #2f6d5b; cursor: pointer;
  font: 600 12.5px "Hanken Grotesk";
}
.pc__btn:hover { background: #eaf2ee; }
.pc__btn:disabled { cursor: default; opacity: .7; }
.pc__spark { font-size: 13px; }
.pc.is-busy .pc__spark { animation: pc-pulse 1s ease-in-out infinite; }
@keyframes pc-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }

.pc__score { display: flex; align-items: center; gap: 9px; flex: 1; min-width: 140px; }
.pc__meter { flex: 1; height: 7px; border-radius: 999px; background: #e6e1d6; overflow: hidden; }
.pc__fill { display: block; height: 100%; width: 0; border-radius: 999px; background: #2f6d5b; transition: width .5s ease; }
.pc__num { flex: none; font: 700 13px "Hanken Grotesk"; color: #2f6d5b; min-width: 22px; text-align: right; }

.pc__panel { margin-top: 12px; padding: 14px 16px; border: 1.5px solid #e6e1d6; border-radius: 13px; background: #fbfaf7; }
.pc__verdict { margin: 0 0 10px; font-size: 13px; line-height: 1.5; color: #3a352c; font-weight: 600; }
.pc__verdict:empty { display: none; }

.pc__loading { display: flex; align-items: center; gap: 11px; padding: 2px 0; }
.pc__spinner {
  width: 16px; height: 16px; flex: none; border-radius: 50%;
  border: 2px solid #dbe6e0; border-top-color: #2f6d5b;
  animation: pc-spin .7s linear infinite;
}
.pc__loading-text { font-size: 12.5px; line-height: 1.5; color: #6f6a5e; }
@keyframes pc-spin { to { transform: rotate(360deg); } }

.pc__sugg { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.pc__item { font-size: 12.5px; line-height: 1.5; color: #3a352c; padding-left: 15px; position: relative; }
.pc__item::before { content: "→"; position: absolute; left: 0; color: #9a9384; }
.pc__item--none { color: #6f6a5e; }
.pc__issue { font-weight: 600; color: #b45b3e; margin-right: 6px; }
.pc__fix { color: #3a352c; }

.pc__apply-row { display: flex; align-items: center; gap: 10px; margin-top: 13px; }
.pc__apply {
  padding: 8px 14px; border: none; border-radius: 10px;
  background: #2f6d5b; color: #fff; cursor: pointer; font: 600 12.5px "Hanken Grotesk";
}
.pc__apply:hover { background: #28604f; }
.pc__undo { background: none; border: none; cursor: pointer; font: 600 12px "Hanken Grotesk"; color: #6f6a5e; padding: 0; }
.pc__undo:hover { color: #2f6d5b; }

.pc__err { margin: 10px 0 0; font-size: 12px; color: #b45b3e; }
/* User-facing Help & support (ticketing). Standard page frame (matches Routines/History). */
.sup { max-width: 880px; margin: 0 auto; padding: var(--page-top) var(--page-gutter) 90px; }
.sup__intro { font-size: 12.5px; color: #9a9384; margin-bottom: 5px; }
.sup__h1 { font-family: "Newsreader", serif; font-weight: 500; font-size: 30px; line-height: 1.1; margin: 0 0 22px; }
.sup__h1--sm { font-size: 26px; margin-bottom: 6px; }
.sup__lead { font-size: 13px; color: #6f6a5e; margin: 0 0 22px; }
.sup-back { display: inline-flex; align-items: center; gap: 6px; font: 600 12px "Hanken Grotesk"; color: #6f6a5e; margin-bottom: 16px; }
.sup-back:hover { color: #2f6d5b; text-decoration: none; }

/* quick-help cards */
.sup-quick { display: grid; grid-template-columns: 1fr 1fr; gap: 11px; margin-bottom: 14px; }
.sup-quick__card {
  border: 1.5px solid #e6e1d6; border-radius: 13px; background: #fff; padding: 15px 16px;
  display: flex; gap: 12px; align-items: center; color: inherit;
  transition: transform .12s ease, box-shadow .12s ease, border-color .12s ease;
}
.sup-quick__card:hover { border-color: #cfe0d9; background: #fcfbf7; text-decoration: none; transform: translateY(-1px); box-shadow: 0 4px 14px rgba(50,42,28,.06); }
.sup-quick__card:active { transform: translateY(0) scale(.98); }
.sup-quick__icon {
  width: 38px; height: 38px; flex: none; border-radius: var(--radius-md);
  background: var(--primary-tint); border: 1.5px solid var(--primary-border);
  display: flex; align-items: center; justify-content: center; font-size: 17px;
}
.sup-quick__title { font-weight: 600; font-size: 13px; margin-bottom: 2px; color: #26221b; }
.sup-quick__sub { font-size: 11.5px; color: #9a9384; line-height: 1.4; }
.sup-quick__chev { flex: none; margin-left: auto; color: #c2bbac; font-size: 16px; }

/* Two columns squeezes each card to ~150px of text on a phone, so every
   title wraps to three lines and the rows go ragged. Stack them. */
@media (max-width: 560px) {
  .sup-quick { grid-template-columns: 1fr; }
  .sup-quick__card { padding: 14px 15px; }
}

.sup-open { display: flex; align-items: center; gap: 12px; border: 1.5px dashed #cbc4b6; border-radius: 13px; padding: 15px 17px; margin-bottom: 30px; color: inherit; }
.sup-open:hover { border-color: #2f6d5b; background: #f4f8f6; text-decoration: none; }
.sup-open__plus { width: 34px; height: 34px; flex: none; border-radius: 9px; background: #2f6d5b; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 20px; }
.sup-open__text { flex: 1; }
.sup-open__title { font-weight: 600; font-size: 13.5px; }
.sup-open__sub { font-size: 12px; color: #9a9384; }
.sup-open__chev { color: #9a9384; font-size: 18px; }

.sup-divider { display: flex; align-items: baseline; gap: 9px; margin-bottom: 12px; }
.sup-divider span:first-child { font: 700 10px "Hanken Grotesk"; letter-spacing: .6px; color: #9a9384; }
.sup-divider__rule { flex: 1; height: 1.5px; background: #e2ddd0; }

.sup-list { display: flex; flex-direction: column; gap: 9px; }
.sup-row { display: flex; align-items: center; gap: 13px; border: 1.5px solid #e6e1d6; border-radius: 13px; background: #fff; padding: 14px 16px; color: inherit; }
.sup-row:hover { border-color: #cfe0d9; text-decoration: none; }
.sup-row__main { flex: 1; min-width: 0; }
.sup-row__top { display: flex; align-items: center; gap: 8px; margin-bottom: 3px; }
.sup-row__subject { font-weight: 600; font-size: 13.5px; }
.sup-row__dot { width: 7px; height: 7px; border-radius: 50%; background: #2f6d5b; }
.sup-row__meta { font-size: 11.5px; color: #9a9384; }
.sup-row__chev { color: #c2bbac; font-size: 16px; }
.sup-empty { padding: 22px; text-align: center; color: #9a9384; font-size: 12.5px; border: 1.5px solid #f0ece3; border-radius: 13px; }

/* new-ticket form */
.sup--article { max-width: 620px; }
.sup-qa { display: flex; flex-direction: column; gap: 10px; margin-bottom: 24px; }
.sup-qa__item { border: 1.5px solid #e6e1d6; border-radius: 13px; background: #fff; padding: 15px 17px; }
.sup-qa__q { font-weight: 600; font-size: 13.5px; margin-bottom: 6px; color: #26221b; }
.sup-qa__a { font-size: 12.5px; line-height: 1.6; color: #6f6a5e; }

.sup--form { max-width: 620px; }
.sup-errors { background: #fbf3f0; border: 1.5px solid #e5c3ba; color: #b45b3e; border-radius: 11px; padding: 11px 14px; font-size: 12.5px; margin-bottom: 16px; }
.sup-lbl { display: block; font-size: 12px; font-weight: 600; color: #6f6a5e; margin: 0 0 9px; }
.sup-cats { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 20px; }
.sup-cat { font: 600 12px "Hanken Grotesk"; padding: 8px 14px; border-radius: 999px; cursor: pointer; border: 1.5px solid #e6e1d6; background: #fff; color: #6f6a5e; }
.sup-cat:has(.sup-cat__input:checked), .sup-cat.is-on { border-color: #2f6d5b; background: #eef4f1; color: #2f6d5b; }
.sup-cat__input { position: absolute; opacity: 0; pointer-events: none; }
.sup-input, .sup-textarea { width: 100%; border: 1.5px solid #e6e1d6; border-radius: 11px; background: #fff; padding: 11px 14px; font: 400 13.5px "Hanken Grotesk"; color: #3a352c; outline: none; margin-bottom: 16px; }
.sup-textarea { font: 400 13px/1.6 "Hanken Grotesk"; resize: vertical; }
.sup-input:focus, .sup-textarea:focus { border-color: #cfe0d9; }
.sup-context { display: flex; gap: 10px; border: 1.5px solid #cfe0d9; background: #f4f8f6; border-radius: 11px; padding: 12px 15px; margin-bottom: 22px; font-size: 12px; line-height: 1.5; color: #2f5f52; }
.sup-context input { margin-top: 2px; accent-color: #2f6d5b; }
.sup-formfoot { display: flex; align-items: center; gap: 14px; }
.sup-formfoot__note { font-size: 12px; color: #9a9384; }
.sup-formfoot__spacer { flex: 1; }

/* thread + messages (shared with admin) */
.sup--thread { max-width: 680px; }
.sup-thread__head { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 20px; }
.sup-thread__subject { font-family: "Newsreader", serif; font-weight: 500; font-size: 23px; line-height: 1.2; margin: 0; }
.sup-thread__meta { font-size: 11.5px; color: #9a9384; margin-top: 4px; }
.sup-messages { display: flex; flex-direction: column; gap: 12px; margin-bottom: 20px; }
.sup-msg { display: flex; }
.sup-msg--admin { justify-content: flex-end; }
.sup-bubble { max-width: 80%; border: 1.5px solid #e6e1d6; background: #fff; border-radius: 14px; padding: 12px 15px; }
.sup-msg--admin .sup-bubble { border-color: #cfe0d9; background: #f4f8f6; }
.sup-bubble__head { display: flex; align-items: center; gap: 7px; margin-bottom: 6px; }
.sup-bubble__who { font: 700 9px "Hanken Grotesk"; letter-spacing: .4px; padding: 2px 7px; border-radius: 5px; background: #ece7db; color: #6f6a5e; }
.sup-msg--admin .sup-bubble__who { background: #dcebe5; color: #2f6d5b; }
.sup-bubble__time { font-size: 10.5px; color: #9a9384; }
.sup-bubble__text { font-size: 13px; line-height: 1.6; color: #3a352c; }
.sup-bubble__text p { margin: 0 0 6px; }
.sup-bubble__text p:last-child { margin-bottom: 0; }

.sup-reply { border: 1.5px solid #cfe0d9; border-radius: 14px; background: #fff; overflow: hidden; }
.sup-reply__input { display: block; width: 100%; border: none; outline: none; padding: 13px 15px; font: 400 13px/1.6 "Hanken Grotesk"; color: #3a352c; resize: vertical; }
.sup-reply__foot { display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-top: 1.5px solid #f0ece3; background: #faf8f3; }
.sup-reply__note { font-size: 11.5px; color: #9a9384; }
.sup-reply__spacer { flex: 1; }
.sup-resolved { font-size: 12.5px; color: #6f6a5e; border: 1.5px solid #f0ece3; border-radius: 13px; padding: 14px 16px; background: #faf8f3; }
.sup-reply--reopen { margin-top: 10px; }
/* Flash toasts — bottom-right stack, calm slide-in. */
.toast-stack {
  position: fixed; right: 20px; bottom: 20px; z-index: 60;
  display: flex; flex-direction: column; gap: 10px; align-items: flex-end;
  pointer-events: none;
}
.toast {
  pointer-events: auto;
  display: flex; align-items: center; gap: 11px;
  max-width: 380px; padding: 12px 14px;
  border-radius: 13px; border: 1.5px solid #e6e1d6; background: #fff;
  box-shadow: 0 12px 34px rgba(50, 42, 28, .16);
  font: 500 13px "Hanken Grotesk", system-ui, sans-serif; color: #26221b;
  opacity: 0; transform: translateY(10px); transition: opacity .26s ease, transform .26s ease;
}
.toast.is-in { opacity: 1; transform: translateY(0); }
.toast.is-leaving { opacity: 0; transform: translateY(10px); }

.toast__icon {
  width: 22px; height: 22px; flex: none; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font: 700 12px "Hanken Grotesk"; color: #fff;
}
.toast--good { border-color: #cfe0d9; }
.toast--good .toast__icon { background: #2f6d5b; }
.toast--bad { border-color: #e7cabf; }
.toast--bad .toast__icon { background: #b45b3e; }

.toast__msg { flex: 1; min-width: 0; line-height: 1.45; }
.toast__x {
  flex: none; background: none; border: none; cursor: pointer;
  color: #b7b0a1; font-size: 12px; padding: 2px 4px; line-height: 1;
}
.toast__x:hover { color: #6f6a5e; }

@media (max-width: 560px) {
  .toast-stack { right: 12px; left: 12px; bottom: 12px; align-items: stretch; }
  .toast { max-width: none; }
}
/*

















 */

