/* 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;
}

/* …but on phones the document IS the scroller now (see the mobile block in
   app_shell.css), so there is no inner pane whose gesture could chain out and
   drag the shell. The reason above no longer applies at this width, and the
   only thing `none` still buys us here is a dead pull-to-refresh gesture.

   Placed here rather than with the other phone rules in app_shell.css: that
   file loads before this one and a media query adds no specificity, so the
   override would lose to the rule directly above it. */
@media (max-width: 720px) {
  html, body { overscroll-behavior: auto; }
}

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; }
/* "You came from the House Hunt page" — continuity for a visitor who clicked a
   use-case CTA, so the sign-in card doesn't read as an unrelated detour. */
.ob-fromchip {
  display: inline-flex; align-items: center; gap: 7px;
  margin-bottom: 12px; padding: 5px 12px 5px 9px; border-radius: 999px;
  background: var(--primary-tint); color: var(--primary);
  font-size: var(--text-sm); font-weight: var(--weight-semibold);
}
.ob-fromchip span { font-size: 14px; line-height: 1; }
.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; }

/* Mode switch: this routine / all routines. Segmented control, same shape as
   the settings ones (.prof-seg) — a real two-state control in place of the
   inert "All" chip that used to imply a filter the panel never had. */
.ctx__modes {
  flex: none; display: flex; gap: 3px; margin: 12px 12px 8px; padding: 3px;
  background: #f1ede4; border-radius: 11px;
}
.ctx__mode {
  flex: 1; font: 600 12px 'Hanken Grotesk', system-ui, sans-serif; padding: 7px 8px;
  border: none; border-radius: 9px; background: none; color: #8f8877; cursor: pointer;
}
.ctx__mode:hover { color: #57513f; }
.ctx__mode.is-on { background: #fff; color: #322a1c; box-shadow: 0 1px 3px rgba(50,42,28,.10); }

/* Only one pane shows at a time; the head label follows the mode. */
.ctx__pane--all, .ctx__name--all { display: none; }
.ctx--all .ctx__pane--one, .ctx--all .ctx__name--one { display: none; }
.ctx--all .ctx__pane--all { display: block; }
.ctx--all .ctx__name--all { display: inline; }

/* All-routines rows: one per routine, its latest run. */
.ctx-rrow {
  display: block; padding: 11px 12px; margin-bottom: 8px; border-radius: 12px;
  border: 1.5px solid #e6ded1; background: #fff; text-decoration: none;
}
.ctx-rrow:hover { border-color: #cfe0d9; }
.ctx-rrow.is-current { border-color: #a9cabd; background: #f7fbf9; }
.ctx-rrow.is-paused { opacity: .62; }
.ctx-rrow__top { display: flex; align-items: center; gap: 7px; }
.ctx-rrow__dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: #2f6d5b; }
.ctx-rrow__dot--failed { background: #b45b3e; }
.ctx-rrow__dot--pending { background: #c2bbac; }
.ctx-rrow__name {
  flex: 1; min-width: 0; font-weight: 600; font-size: 14px; color: #322a1c;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ctx-rrow__ver { flex: none; font-size: 12px; color: #a49d8d; }
.ctx-rrow__meta {
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
  margin-top: 3px; padding-left: 15px; font-size: 12.5px; color: #9a9384;
}
.ctx-rrow__tag {
  font-size: 10px; font-weight: 700; letter-spacing: .4px; padding: 2px 6px;
  border-radius: 5px; background: #efece4; color: #8f8877;
}
.ctx-rrow__tag--flag { background: #f7e4de; color: #a3564c; }

.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__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;
}
/* The Article is read start to finish rather than scanned, so it opens with
   more air above the kicker than the briefing templates do. Doubled class for
   the same reason as the mobile rule below: the 16px it overrides comes from
   `.reader-body--template` in delivery_template.css, which loads after this. */
.reader-body.reader-body--article { padding-top: 31px; }

.reader-meta {
  font-size: var(--text-sm);
  color: var(--text-faint);
  margin-bottom: var(--space-3);
}

/* A run takes a couple of minutes, so the waiting state narrates the phase it's
   in rather than spinning silently. Steps come from the routine (no web step for
   a thinking routine, no formatting step without a template). */
.reader-running {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-5);
  background: var(--surface-raised);
  border-radius: var(--radius-lg);
  color: var(--text-muted);
}
.reader-running__head { display: flex; align-items: center; gap: var(--space-2); font-weight: 600; color: var(--ink); }
.reader-running__note { margin: 0; font-size: 12px; color: var(--text-muted); }

.reader-steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.reader-step { display: flex; align-items: center; gap: 9px; font-size: 12.5px; color: var(--text-muted); }
.reader-step__dot {
  width: 7px; height: 7px; border-radius: 50%; flex: none;
  background: var(--border-strong); transition: background .2s, box-shadow .2s;
}
.reader-step.is-done { color: var(--ink); }
.reader-step.is-done .reader-step__dot { background: var(--primary); }
/* The step in flight: filled and haloed, so the eye lands on it. */
.reader-step.is-now { color: var(--ink); font-weight: 600; }
.reader-step.is-now .reader-step__dot { background: var(--primary); box-shadow: 0 0 0 3px rgba(47,109,91,.18); }
.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); }

  /* The mobile bar sits directly above, so the template reader's 16px leaves
     the kicker looking stuck to it. The doubled class is deliberate: the 16px
     comes from `.reader-body--template` in delivery_template.css, which loads
     after this file, so a single-class selector here would lose the cascade. */
  .reader-body,
  .reader-body.reader-body--template { padding-top: 36px; }

  /* 26px leaves the last card sitting on the bottom edge, and on a phone that
     edge is shared with the browser's own chrome. Give the end of the page
     somewhere to finish. */
  .reader-body { padding-bottom: 72px; }

  .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; }
}

/* ==========================================================================
   Leave this run out / left-out state
   Shared by every delivery reader (plain markdown and all nine templates), so
   it carries its own neutral namespace rather than any one reader's prefix
   (hh-, tr-, nu-, db-). Sits under whichever feedback card the template shows.
   ========================================================================== */
.dexcl {
  display: flex; justify-content: space-between; align-items: center; gap: 14px; flex-wrap: wrap;
  margin-top: 16px; padding-top: 14px; border-top: 1px dashed #dfe7e3;
}
.dexcl__txt { font-size: 12px; color: #9a9384; }
.dexcl__btn {
  font: 600 12.5px var(--font-sans, inherit); padding: 8px 14px; border-radius: 10px;
  border: 1.5px solid #d8cfc4; background: transparent; color: #6f6a5e; cursor: pointer;
}
.dexcl__btn:hover { border-color: #b9736a; color: #a3564c; background: #fdf6f5; }

/* The left-out state replaces the feedback card entirely. */
.dexcl-out {
  max-width: 720px; margin-top: 8px; border: 1.5px solid #e2d8cd; border-radius: 16px;
  background: #faf8f5; overflow: hidden; scroll-margin-top: 20px;
}
.dexcl-out__head {
  padding: 13px 20px; background: #f4efe8; border-bottom: 1.5px solid #e2d8cd;
  font-size: 14px; color: #8a6f60;
}
.dexcl-out__head span { color: #a09684; font-weight: 400; }
.dexcl-out__body { padding: 18px 20px; }
.dexcl-out__note { margin: 0 0 14px; font-size: 13px; color: #8f8877; line-height: 1.55; }
.dexcl-out__undo {
  font: 600 12.5px var(--font-sans, inherit); padding: 8px 14px; border-radius: 10px;
  border: 1.5px solid #cfe0d9; background: #fff; color: #2f6d5b; cursor: pointer;
}
.dexcl-out__undo:hover { background: #f4f8f6; }

/* ==========================================================================
   Delivery notice — a caveat on a delivery that is otherwise readable.
   Not the error state: there IS something to read, it just stops short. Amber
   rather than red for exactly that reason.
   ========================================================================== */
.reader-notice {
  display: flex; gap: 12px; align-items: flex-start;
  max-width: 720px; margin: 0 0 22px; padding: 14px 16px;
  border: 1.5px solid #e0cd9a; border-radius: 13px; background: #fdf8ec;
}
.reader-notice__icon { flex: none; font-size: 15px; line-height: 1.5; color: #9a7b28; }
.reader-notice__body { flex: 1; min-width: 0; }
.reader-notice__text { margin: 0 0 10px; font-size: 13.5px; line-height: 1.55; color: #6f5a1f; }
.reader-notice__btn {
  font: 600 12.5px var(--font-sans, inherit); padding: 7px 13px; border-radius: 9px;
  border: 1.5px solid #ddc98f; background: #fff; color: #7a6224; cursor: pointer;
}
.reader-notice__btn:hover { background: #fbf3e0; }
.reader-notice__btn:disabled { opacity: .55; cursor: default; }
/* -----------------------------------------------------------------
   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; }

/* "Save for next run" and the line saying when it applies can't share a row on
   a phone — the button gives up and wraps its own label to two lines, which
   reads as a mistake beside a one-line note. Stack them: the note becomes a
   caption above a full-width button. Shared by every reader carrying this
   footer (watch, house hunt), not only the Article.

   This block sits here rather than with the other phone rules at the top of the
   file: a media query adds no specificity, so an override written above the
   rule it overrides simply loses. */
@media (max-width: 720px) {
  .hh-shape__foot,
  .hh-shape__foot-right { flex-direction: column; align-items: stretch; gap: 10px; }
  .hh-shape__save { width: 100%; }
}

/* "Leave this run out" lives in every reader, so its styles are shared —
   see the .dexcl block in reader.css, not here. */

@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; }

/* ── Watch template: change rows inside the reused hh-card ─────────────────── */
.wt-changes { display: flex; flex-direction: column; gap: 2px; margin-top: 12px; }
.wt-change { display: flex; align-items: baseline; gap: 10px; padding: 9px 0; border-top: 1.5px solid #f0ece3; }
.wt-change:first-child { border-top: none; }
.wt-change__sig { flex: none; width: calc(78px * var(--reading-scale)); font: 700 calc(9px * var(--reading-scale)) var(--font-sans); letter-spacing: .5px; color: #6a4c86; background: #efe9f2; border-radius: 5px; padding: 3px 6px; text-align: center; }
.wt-change__text { flex: 1; font-size: calc(13.5px * var(--reading-scale)); line-height: 1.5; color: #3a352c; }
.wt-change__text a { color: #2f6d5b; text-decoration: none; border-bottom: 1px solid #cfe0d9; }
.wt-change__text a:hover { color: #b45b3e; border-bottom-color: #b45b3e; }
.wt-change__new { flex: none; font: 700 calc(8.5px * var(--reading-scale)) var(--font-sans); letter-spacing: .5px; color: #b45b3e; background: #f6e2d8; border-radius: 999px; padding: 2px 7px; }
.wt-change__when { flex: none; font-size: calc(11px * var(--reading-scale)); color: #9a9384; }
.wt-quiet { opacity: .72; }
.wt-quiet__tag { flex: none; font: 600 calc(11px * var(--reading-scale)) var(--font-sans); color: #9a9384; background: #f1ede4; border-radius: 999px; padding: 3px 10px; }

/* A rejected note must not look like a saved one. */
.hh-shape__count.is-error, .tr-fb__status.is-error,
.nu-fb__status.is-error, .db-fb__status.is-error { color: #a3564c; font-weight: 600; }
/* ---------------------------------------------------------------
   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); }
/* One label column plus one per tier. --pmx-tiers is set inline from
   @tiers.size: this was hardcoded to 4 tiers from v1 (free/pro/pro_plus/custom),
   so when v2 dropped to 3 the grid stayed 5 wide and every row rendered one
   cell out of step — labels drifted into the rightmost column. */
.pmx__grid { display: grid; grid-template-columns: 1.6fr repeat(var(--pmx-tiers, 3), 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. */
/* A footer bar on the card, like the reply box's. It had vertical padding only,
   so it sat flush against the card's left edge while every other section was
   inset by 20px — the button visibly hung outside the content column. The
   margin-top on top of the meter's own bottom padding also left a dead gap. */
.plan-current__manage { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 13px 20px; border-top: 1.5px solid #ece8df; background: #faf8f3; }
.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; }
/* 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; }

  /* Let the DOCUMENT scroll on phones rather than an inner pane.
     Android Chrome only retracts its URL bar for document scrolls, so with the
     shell pinned to the dynamic viewport and .app-main scrolling inside it, the
     visible area never grows and the last stretch of a long page sits under the
     browser's chrome — unreachable. Intermittently so, which is the tell: dvh
     re-measures whenever the bar does happen to move, so how much you can reach
     depends on what the bar was doing when the shell was last laid out.

     The admin shell already carries this fix for the same reason. Making the
     bar sticky keeps the guarantee the dvh comment at the top of this file was
     protecting — it stays put without the shell having to pin the viewport. */
  .app-shell { height: auto; min-height: 100vh; min-height: 100dvh; overflow: visible; }
  .app-main { overflow: visible; }
  .mobile-topbar { position: sticky; top: 0; }

  /* Both drawers are fixed over a scrim, and the shell used to be unscrollable
     underneath them. Now that the document scrolls, a drag on the scrim would
     move the page behind the drawer — so hold it still while one is open. */
  html:has(.reader-shell--versions-open),
  html:has(.flyout.is-open) { overflow: hidden; }

  .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; }

/* Closes the feed when it's capped, so it doesn't just stop mid-scroll. */
.feed-more { display: flex; justify-content: center; margin: 4px 0 8px; }

.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-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 */
.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; }

@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); }
}
/* ==========================================================================
   "jarvis explains" — the dogfooding blog.
   Rides the marketing tokens (.mkt-*) so the section matches the rest of the
   site; only the list and the article column are new.
   ========================================================================== */

/* ── Tokens ─────────────────────────────────────────────────────────────── */
.blog-index, .blog-post {
  --blog-ink: #322a1c;
  --blog-muted: #8f8877;
  --blog-rule: #e6ded1;
  --blog-accent: #2f6d5b;
  --blog-measure: 720px;
}

/* ── Index list ─────────────────────────────────────────────────────────── */
.blog-list { display: grid; gap: 18px; max-width: var(--blog-measure); margin: 32px auto 0; }

.blog-card { display: block; padding: 22px 24px; text-decoration: none; }
.blog-card__date {
  display: block; font-size: 12.5px; letter-spacing: .04em; text-transform: uppercase;
  color: var(--blog-muted); margin-bottom: 8px;
}
.blog-card__title { margin: 0 0 8px; font-size: 21px; line-height: 1.3; color: var(--blog-ink); }
.blog-card__lead { margin: 0 0 14px; color: var(--blog-muted); line-height: 1.55; }
.blog-card--draft { border-style: dashed; }
.blog-card__warn { margin: 0; font-size: 13px; color: #a3564c; }

.blog-empty { text-align: center; color: var(--blog-muted); margin-top: 32px; }

/* Preview-only affordances. Loud on purpose — they must never be mistaken for
   published state by whoever is reviewing. */
.blog-preview-flag {
  max-width: var(--blog-measure); margin: 24px auto; padding: 12px 16px; border-radius: 12px;
  background: #fdf6e8; border: 1.5px dashed #d9c48f; color: #7a5f22; font-size: 14px; line-height: 1.5;
}
.blog-drafts { margin-top: 56px; }
.blog-drafts__head { text-align: center; color: var(--blog-muted); }

/* ── Article ────────────────────────────────────────────────────────────── */
.blog-post { max-width: var(--blog-measure); margin: 0 auto; }
.blog-post__head {
  display: flex; justify-content: space-between; align-items: baseline; gap: 16px;
  padding-bottom: 14px; border-bottom: 1px solid var(--blog-rule); margin-bottom: 32px;
}
.blog-post__back { color: var(--blog-accent); text-decoration: none; font-weight: 600; font-size: 14px; }
.blog-post__back:hover { text-decoration: underline; }

.blog-post__body { color: var(--blog-ink); line-height: 1.65; }
.blog-post__body h1 { font-size: 34px; line-height: 1.2; margin: 0 0 20px; }
.blog-post__body h2 { font-size: 23px; line-height: 1.3; margin: 40px 0 14px; }
.blog-post__body h3 { font-size: 18px; margin: 28px 0 10px; }
.blog-post__body p { margin: 0 0 18px; }
.blog-post__body ul, .blog-post__body ol { margin: 0 0 18px; padding-left: 22px; }
.blog-post__body li { margin-bottom: 8px; }
.blog-post__body a { color: var(--blog-accent); }
.blog-post__body blockquote {
  margin: 0 0 20px; padding: 14px 18px; border-left: 3px solid var(--blog-accent);
  background: #f4f8f6; color: #3d5f55; border-radius: 0 10px 10px 0;
}
.blog-post__body blockquote p:last-child { margin-bottom: 0; }
.blog-post__body pre {
  margin: 0 0 20px; padding: 16px 18px; border-radius: 12px; background: #f6f2ea;
  border: 1px solid var(--blog-rule); overflow-x: auto; font-size: 13.5px; line-height: 1.55;
}
.blog-post__body code { font-size: .92em; background: #f6f2ea; padding: 2px 5px; border-radius: 5px; }
.blog-post__body pre code { background: none; padding: 0; }
/* Tables can be wider than the measure; scroll them, never the page. */
.blog-post__body table { width: 100%; border-collapse: collapse; margin: 0 0 20px; font-size: 14.5px; display: block; overflow-x: auto; }
.blog-post__body th, .blog-post__body td { padding: 9px 12px; border-bottom: 1px solid var(--blog-rule); text-align: left; }
.blog-post__body th { font-weight: 600; color: var(--blog-muted); }
.blog-post__body img { max-width: 100%; height: auto; }
.blog-post__body hr { border: 0; border-top: 1px solid var(--blog-rule); margin: 36px 0; }

.blog-post__cta { margin-top: 56px; }

/* ── Responsive ─────────────────────────────────────────────────────────── */
@media (max-width: 720px) {
  .blog-post__body h1 { font-size: 27px; }
  .blog-post__body h2 { font-size: 20px; }
  .blog-card { padding: 18px 18px; }
  .blog-post__head { flex-direction: column; gap: 6px; }
}
/* 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: 4px; }
.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; }
}
/* ── Draft family (newsletter, social posts) ─────────────────────────────────
   Publish-ready content the user copies out. Reuses the reader shell; the dr-*
   classes below add the draft header, the copy affordance, and the post cards. */

.dr-raw { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; white-space: pre-wrap; }

.dr-head { display: flex; align-items: flex-start; gap: 16px; padding-bottom: 16px; margin-bottom: 20px; border-bottom: 1.5px solid #e6e1d6; }
.dr-head__main { flex: 1; min-width: 0; }
.dr-kicker { font: 700 calc(10px * var(--reading-scale)) var(--font-sans); letter-spacing: .6px; color: #9a9384; margin-bottom: 8px; }
.dr-subject { font-family: var(--font-display); font-weight: 600; font-size: calc(27px * var(--reading-scale)); line-height: 1.15; color: #26221b; margin: 0 0 8px; }
.dr-preview { font-size: calc(14px * var(--reading-scale)); color: #6f6a5e; line-height: 1.5; }
.dr-meta { font-size: calc(12px * var(--reading-scale)); color: #9a9384; margin-top: 8px; }

.dr-copy { flex: none; display: inline-flex; align-items: center; gap: 6px; font: 600 calc(12.5px * var(--reading-scale)) var(--font-sans); color: #fff; background: #2f6d5b; border: none; border-radius: 10px; padding: 9px 14px; cursor: pointer; box-shadow: 0 3px 10px rgba(47,109,91,.25); }
.dr-copy:hover { background: #28604f; }
.dr-copy.is-copied { background: #28604f; }
.dr-copy--ghost { color: #2f6d5b; background: #fff; border: 1.5px solid #cfe0d9; box-shadow: none; }
.dr-copy--ghost:hover { background: #f4f8f6; }

/* Icon-only export, with the label moved into a hover tooltip. The glyph swaps
   to a tick on success — see draft.js, which skips its textContent confirmation
   for these so the inline SVG survives. */
.dr-copy--icon { position: relative; width: 36px; height: 36px; padding: 0; justify-content: center; }
.dr-copy--icon svg { width: 17px; height: 17px; display: block; }
/* Both selectors carry .dr-copy--icon so they outrank `.dr-copy--icon svg`
   above — a bare .dr-copy__ok loses to it and shows both glyphs at once. */
.dr-copy--icon .dr-copy__ok,
.dr-copy--icon.is-copied .dr-copy__i { display: none; }
.dr-copy--icon.is-copied .dr-copy__ok { display: block; }

/* The app has no tooltip primitive, so this one is scoped to the button rather
   than invented as a system. Hover and keyboard focus both reveal it; the
   aria-label carries the same words for anyone who gets neither. */
.dr-copy--icon::after {
  content: attr(data-tip);
  position: absolute; top: calc(100% + 7px); right: 0;
  font: 500 11.5px/1 var(--font-sans); white-space: nowrap;
  color: #f7f4ec; background: #33302a; border-radius: 7px; padding: 6px 9px;
  opacity: 0; pointer-events: none; transition: opacity .12s ease;
  z-index: 5;
}
.dr-copy--icon:hover::after,
.dr-copy--icon:focus-visible::after { opacity: 1; }
/* Nothing to explain while the tick is showing — it just said "copied". */
.dr-copy--icon.is-copied::after { content: none; }

/* Phone: the headline and the export button fight over one row. "Copy as
   Markdown" takes nearly half the width, so a title wraps to five lines beside
   a button that isn't why anyone opened the page. Give the title the whole
   column and let the button wrap below the standfirst, where it reads as an
   aside rather than the delivery's main action. */
@media (max-width: 720px) {
  .dr-head { flex-wrap: wrap; gap: 12px; }
  .dr-head__main { flex: 1 0 100%; }
  .dr-copy { margin-left: auto; padding: 8px 12px; }

  /* The Article's export is a 36px icon, so it costs the headline almost no
     width — it stays on the title's row rather than wrapping to one of its own,
     where a lone small icon would read as stranded. */
  .dr-prose .dr-head__main { flex: 1 1 0; min-width: 0; }
  .dr-prose .dr-copy--icon { padding: 0; }
}

/* Newsletter body — long-form prose the user edits and sends. */
.dr-intro { font-size: calc(16px * var(--reading-scale)); line-height: 1.7; color: #3a352c; margin-bottom: 8px; }
.dr-intro p { margin: 0 0 14px; }
.dr-dek { font-family: var(--font-display); font-size: calc(17px * var(--reading-scale)); font-style: italic; color: #6f6a5e; margin: 0 0 18px; }
.dr-section { margin: 26px 0; }
.dr-section__h { font-family: var(--font-display); font-weight: 600; font-size: calc(20px * var(--reading-scale)); color: #26221b; margin: 0 0 10px; }
.dr-section__body { font-size: calc(15.5px * var(--reading-scale)); line-height: 1.7; color: #3a352c; }
.dr-section__body p { margin: 0 0 14px; }
.dr-section__src { font-size: calc(12.5px * var(--reading-scale)); color: #9a9384; margin-top: 6px; }
.dr-section__src a { color: #2f6d5b; text-decoration: none; border-bottom: 1px solid #cfe0d9; }
.dr-signoff { margin-top: 26px; padding-top: 18px; border-top: 1.5px solid #f0ece3; font-size: calc(15.5px * var(--reading-scale)); line-height: 1.7; color: #3a352c; }

/* Social posts — a few copy-ready cards. */
.dr-angle { font-size: calc(14px * var(--reading-scale)); color: #6f6a5e; line-height: 1.6; margin-bottom: 20px; }
.dr-posts { display: flex; flex-direction: column; gap: 16px; }
.dr-post { border: 1.5px solid #e6e1d6; border-radius: 14px; background: #fff; padding: 18px 20px; }
.dr-post__head { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.dr-post__platform { font: 700 calc(10px * var(--reading-scale)) var(--font-sans); letter-spacing: .5px; color: #2f6d5b; background: #dcebe5; border-radius: 999px; padding: 4px 10px; }
.dr-post__hook { font-family: var(--font-display); font-weight: 500; font-size: calc(17px * var(--reading-scale)); line-height: 1.3; color: #26221b; margin-bottom: 10px; }
.dr-post__body { font-size: calc(14.5px * var(--reading-scale)); line-height: 1.6; color: #3a352c; white-space: pre-wrap; }
.dr-post__body p { margin: 0 0 10px; }
.dr-post__tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.dr-post__tag { font: 600 calc(12px * var(--reading-scale)) var(--font-sans); color: #2f6d5b; }
.dr-post__foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 14px; padding-top: 12px; border-top: 1.5px solid #f0ece3; }
.dr-post__chars { font-size: calc(11.5px * var(--reading-scale)); color: #9a9384; }
.dr-post__src { font-size: calc(11.5px * var(--reading-scale)); color: #9a9384; }
.dr-post__src a { color: #2f6d5b; text-decoration: none; border-bottom: 1px solid #cfe0d9; }

/* Article template (blog_post) — adds a category chip, an example-Delivery
   figure, and a limitation section to the shared draft chrome. */
.dr-cat { color: #2f6d5b; background: #dcebe5; border-radius: 6px; padding: 2px 8px; letter-spacing: .4px; }
.dr-excerpt {
  margin: 22px 0; border: 1.5px solid var(--primary-border, #cfe0d9); border-radius: 14px;
  background: var(--primary-tint-2, #f4f8f6); padding: 16px 18px;
}
.dr-excerpt__cap { font: 700 calc(10px * var(--reading-scale)) var(--font-sans); letter-spacing: .6px; color: #2f6d5b; margin-bottom: 8px; }
.dr-excerpt__body {
  font: 400 calc(12.5px * var(--reading-scale))/1.75 "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  color: #3a352c; white-space: pre-wrap; word-break: break-word; margin: 0; background: none; border: 0; padding: 0;
}
.dr-section--limit { border-top: 1.5px solid #e6e1d6; margin-top: 30px; padding-top: 22px; }
.dr-cta { font-family: var(--font-display); font-size: calc(16px * var(--reading-scale)); color: #2f6d5b; margin: 26px 0 0; }
.dr-cta p { margin: 0 0 8px; }
.dr-cta a { color: #2f6d5b; text-decoration: underline; }

/* ── Article: long-form prose ─────────────────────────────────────────────
   The Article template is read start-to-finish, not scanned like a briefing,
   so its column opts out of the sans reader body and into the same serif
   measure the public jarvis explains reader uses. Scoped to .dr-prose so the
   briefing templates are untouched. */
.dr-prose .reader-document {
  font-family: var(--font-display);
  font-size: calc(18.5px * var(--reading-scale));
  line-height: 1.72;
  color: #33302a;
}
.dr-prose .reader-document p { margin: 0 0 calc(18px * var(--reading-scale)); }
.dr-prose .reader-document em { font-style: italic; }
.dr-prose .dr-section { margin-bottom: calc(26px * var(--reading-scale)); }
.dr-prose .dr-section__h {
  font-size: calc(23px * var(--reading-scale)); line-height: 1.2;
  letter-spacing: -.3px; margin: calc(34px * var(--reading-scale)) 0 12px;
}
.dr-prose .dr-dek {
  font-family: var(--font-display); font-size: calc(17.5px * var(--reading-scale));
  font-style: italic; line-height: 1.5; color: #6f6a5e; margin: 0 0 18px;
}
.dr-prose .dr-dek p { margin: 0; }
/* The excerpt stays monospace — it is the Delivery, not prose. */
.dr-prose .dr-excerpt__body { font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace; }
/* 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 */
/* The provenance + feedback should span the full plan width, not sit narrower
   than the meal and shopping cards above them (which fill .nu at 940px). */
.nu .brief { max-width: none; }
.nu-fb { 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-block__body { padding: 18px 20px; }
/* The block's category, e.g. "MAIN LIFT · CHEST" — was a pill over the (removed)
   video thumbnail; now a plain eyebrow above the name. */
.tr-block__eyebrow { font: 700 calc(10px * var(--reading-scale)) "Hanken Grotesk"; letter-spacing: .5px; text-transform: uppercase; color: #9a9384; margin-bottom: 6px; }
.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 explains — the public ideas blog.
   Extracted from the "Jarvis Explains" Claude Design file: every value below
   is the computed style taken from that render, not an approximation.
   Titles Newsreader, UI labels Hanken Grotesk, Delivery excerpts JetBrains Mono.
   ========================================================================== */
.exp{
  --exp-canvas: #efece4;
  --exp-paper: #faf8f3;      /* card + featured surface */
  --exp-ink: #26221b;
  --exp-body: #33302a;       /* long-form body text */
  --exp-soft: #6f6a5e;
  --exp-meta: #9a9384;
  --exp-rule: #e6e1d6;
  --exp-rule-2: #e0dacd;
  --exp-green: #2f6d5b;
  --exp-serif: var(--font-serif, Newsreader, Georgia, serif);
  --exp-sans: var(--font-sans, "Hanken Grotesk", system-ui, sans-serif);
  --exp-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  background: var(--exp-canvas);
  color: var(--exp-ink);
}

/* ── Category chip ────────────────────────────────────────────────────────── */
.exp .exp-chip{
  display: inline-block; font: 700 10.5px var(--exp-sans); letter-spacing: .6px;
  text-transform: uppercase; padding: 4px 10px; border-radius: 6px;
  color: var(--exp-green); background: #e4efe9;
}
.exp .exp-chip--green{ color: #2f6d5b; background: #e4efe9; }
.exp .exp-chip--terracotta{ color: #b45b3e; background: rgba(180, 91, 62, .10); }
.exp .exp-chip--purple{ color: #7a5cc0; background: rgba(122, 92, 192, .10); }
.exp .exp-chip--gold{ color: #b58a1f; background: rgba(192, 138, 44, .12); }
.exp .exp-chip--blue{ color: #3a6ea5; background: rgba(58, 110, 165, .10); }

/* ── Hero ─────────────────────────────────────────────────────────────────── */
.exp .exp-hero{ max-width: 900px; margin: 0 auto; padding: 64px 24px 0; text-align: center; }
.exp .exp-hero__kicker{
  font: 700 12px var(--exp-sans); letter-spacing: 2px; text-transform: uppercase;
  color: var(--exp-green); margin-bottom: 16px;
}
.exp .exp-hero__title{
  font-family: var(--exp-serif); font-weight: 500; font-size: 64px; line-height: 1.03;
  letter-spacing: -.6px; color: var(--exp-ink); max-width: 630px; margin: 0 auto 20px;
}
.exp .exp-hero__blurb{
  font: 400 17.5px/28px var(--exp-sans); color: var(--exp-soft);
  max-width: 588px; margin: 0 auto 12px;
}
.exp .exp-hero__meta{
  display: inline-flex; align-items: center; gap: 8px;
  font: 400 13px var(--exp-sans); color: var(--exp-meta); margin-top: 6px;
}
.exp .exp-hero__meta::before{ content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--exp-green); }

/* ── Filter tabs ──────────────────────────────────────────────────────────── */
.exp .exp-tabs{
  display: flex; flex-wrap: wrap; justify-content: center; gap: 9px;
  max-width: 900px; margin: 34px auto 0; padding: 0 24px;
}
.exp .exp-tab{
  font: 600 12.5px var(--exp-sans); padding: 8px 15px; border-radius: 999px;
  border: 1px solid var(--exp-rule); background: #fff; color: var(--exp-soft);
  text-decoration: none; transition: border-color .12s, color .12s;
}
.exp .exp-tab:hover{ border-color: #cfe0d9; color: var(--exp-green); }
.exp .exp-tab.is-on{ background: var(--exp-green); border-color: var(--exp-green); color: #fff; }

/* ── Layout ───────────────────────────────────────────────────────────────── */
.exp .exp-main{ max-width: 1040px; margin: 0 auto; padding: 34px 24px 0; }

/* ── Featured card ────────────────────────────────────────────────────────── */
.exp .exp-featured{
  display: grid; grid-template-columns: minmax(0, 404px) 1fr;
  background: var(--exp-paper); border: 1px solid var(--exp-rule); border-radius: 20px;
  overflow: hidden; margin-bottom: 26px; text-decoration: none; color: inherit;
}
.exp .exp-featured:hover{ border-color: #cfe0d9; }
.exp .exp-featured__panel{
  background: linear-gradient(150deg, #2f6d5b, #1f4a3d); color: #fff;
  padding: 26px; display: flex; flex-direction: column; justify-content: space-between;
}
.exp .exp-featured__flag{
  font: 700 10.5px var(--exp-sans); letter-spacing: .8px; text-transform: uppercase;
  color: rgba(255, 255, 255, .72); margin-bottom: 26px;
}
.exp .exp-featured__excerpt{
  font: 400 12px/22.2px var(--exp-mono); color: rgba(255, 255, 255, .9);
  white-space: pre-wrap; margin: 0; overflow: hidden;
}
.exp .exp-featured__body{ padding: 30px 34px; }
.exp .exp-featured__meta{
  font: 600 11px var(--exp-sans); letter-spacing: .5px; text-transform: uppercase;
  color: var(--exp-meta); margin-bottom: 12px;
}
.exp .exp-featured__title{
  font-family: var(--exp-serif); font-weight: 500; font-size: 34px; line-height: 1.08;
  letter-spacing: -.4px; color: var(--exp-ink); margin: 0 0 12px;
}
.exp .exp-featured__dek{ font: 400 16px/25px var(--exp-sans); color: var(--exp-soft); margin: 0 0 16px; }
.exp .exp-readlink{ font: 600 13.5px var(--exp-sans); color: var(--exp-green); }

/* ── Grid of cards ────────────────────────────────────────────────────────── */
.exp .exp-grid{ display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.exp .exp-card{
  display: flex; flex-direction: column;
  background: var(--exp-paper); border: 1px solid var(--exp-rule); border-radius: 18px;
  padding: 24px 24px 22px; text-decoration: none; color: inherit;
  transition: border-color .12s, box-shadow .12s;
}
.exp .exp-card:hover{ border-color: #cfe0d9; box-shadow: 0 6px 20px rgba(50, 42, 28, .05); }
.exp .exp-card__meta{ display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.exp .exp-card__time{ font: 400 12.5px var(--exp-sans); color: var(--exp-meta); }
.exp .exp-card__title{
  font-family: var(--exp-serif); font-weight: 500; font-size: 22px; line-height: 1.14;
  letter-spacing: -.3px; color: var(--exp-ink); margin: 0 0 9px;
}
.exp .exp-card__dek{ font: 400 14.5px/22px var(--exp-sans); color: var(--exp-soft); margin: 0 0 18px; flex: 1; }
.exp .exp-card__foot{ font: 600 12.5px var(--exp-sans); color: var(--exp-green); }

.exp .exp-empty{ text-align: center; color: var(--exp-meta); padding: 40px 0; }

/* ── Article reader ───────────────────────────────────────────────────────── */
.exp .exp-article{ max-width: 720px; margin: 0 auto; padding: 44px 30px 40px; }
.exp .exp-article__top{ display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 34px; }
.exp .exp-back{ font: 600 13px var(--exp-sans); color: var(--exp-green); text-decoration: none; }
.exp .exp-back:hover{ text-decoration: underline; }
.exp .exp-article__date{ font: 600 12px var(--exp-sans); letter-spacing: .5px; text-transform: uppercase; color: var(--exp-meta); }
.exp .exp-article__tagrow{ display: inline-flex; align-items: center; gap: 8px; margin-bottom: 16px; }
.exp .exp-article__cadence{ font: 400 12.5px var(--exp-sans); color: var(--exp-meta); }
.exp .exp-article__title{
  font-family: var(--exp-serif); font-weight: 600; font-size: 46px; line-height: 1.06;
  letter-spacing: -.6px; color: var(--exp-ink); margin: 0 0 30px;
}

/* Long-form body is SERIF — the single biggest thing that makes it read as an
   article rather than a UI screen. */
.exp .exp-body{ font: 400 19.5px/33.5px var(--exp-serif); color: var(--exp-body); }
.exp .exp-body p{ margin: 0 0 20px; }
.exp .exp-body h1{
  font-family: var(--exp-serif); font-weight: 600; font-size: 30px; line-height: 1.12;
  letter-spacing: -.3px; color: var(--exp-ink); margin: 40px 0 18px;
}
.exp .exp-body h2{
  font-family: var(--exp-serif); font-weight: 600; font-size: 28px; line-height: 1.1;
  letter-spacing: -.3px; color: var(--exp-ink); margin: 44px 0 20px;
}
.exp .exp-body h3{ font-family: var(--exp-serif); font-weight: 600; font-size: 22px; margin: 32px 0 14px; }
.exp .exp-body ul, .exp .exp-body ol{ margin: 0 0 20px; padding-left: 24px; }
.exp .exp-body li{ margin-bottom: 8px; }
.exp .exp-body a{ color: var(--exp-green); }
.exp .exp-body em{ font-style: italic; }
.exp .exp-body blockquote{
  margin: 0 0 22px; padding: 14px 20px; border-left: 3px solid var(--exp-green);
  background: #f4f8f6; color: #3d5f55; border-radius: 0 10px 10px 0;
}
.exp .exp-body hr{ border: 0; border-top: 1px solid var(--exp-rule); margin: 34px 0; }
.exp .exp-body pre:not(.exp-delivery__body){
  margin: 8px 0 30px; padding: 20px 22px; border: 1px solid var(--exp-rule-2);
  border-radius: 16px; background: #f7f4ec; overflow-x: auto;
  font: 400 13px/22.75px var(--exp-mono); color: #3a352c; white-space: pre-wrap; word-break: break-word;
}
.exp .exp-body pre code{ background: none; padding: 0; font-size: inherit; }
.exp .exp-body code{ font: 400 .85em var(--exp-mono); background: #f7f4ec; padding: 2px 6px; border-radius: 5px; }

/* The Delivery excerpt: raw markdown in monospace on warm paper — it is meant
   to look like the thing the Routine actually returns, not rendered prose. */
.exp .exp-delivery{
  margin: 8px 0 30px; padding: 24px 26px; border: 1px solid var(--exp-rule-2);
  border-radius: 16px; background: #f7f4ec;
}
.exp .exp-delivery__body{ border: 0; background: none; padding: 0; border-radius: 0;
  font: 400 13px/22.75px var(--exp-mono); color: #3a352c;
  white-space: pre-wrap; margin: 0;
}

.exp .exp-limit{ margin-top: 8px; }

/* ── Closing CTA — the dark green block, shared by index and reader ───────── */
.exp .exp-cta{
  background: linear-gradient(160deg, #22392f, #182a22); border-radius: 22px;
  padding: 48px 40px; margin: 46px auto 0; max-width: 1040px; text-align: center; color: #fff;
}
.exp .exp-cta__title{
  font-family: var(--exp-serif); font-weight: 500; font-size: 40px; line-height: 1.08;
  color: #fff; margin: 0 0 14px;
}
.exp .exp-cta__text{ font: 400 16px/26px var(--exp-sans); color: rgba(255, 255, 255, .72); max-width: 520px; margin: 0 auto 24px; }
.exp .exp-cta__btn{
  display: inline-block; font: 600 14px var(--exp-sans); background: #f5f2ec; color: #22392f;
  text-decoration: none; padding: 13px 24px; border-radius: 12px;
}
.exp .exp-cta__btn:hover{ background: #fff; }
.exp .exp-cta__fine{ margin-top: 14px; font: 400 12.5px var(--exp-sans); color: rgba(255, 255, 255, .5); }

/* "TRY IT YOURSELF" label above the CTA in the reader */
.exp .exp-tryit{ border-top: 1px solid var(--exp-rule); margin-top: 40px; padding-top: 26px; }
.exp .exp-tryit__label{ font: 700 11px var(--exp-sans); letter-spacing: .8px; text-transform: uppercase; color: var(--exp-green); margin-bottom: 10px; }
.exp .exp-tryit__text{ font: 400 16px/26px var(--exp-sans); color: var(--exp-soft); margin: 0; }
.exp .exp-tryit__text p{ margin: 0 0 10px; }
.exp .exp-tryit__text a{ color: var(--exp-green); }

/* Preview / draft affordances */
.exp .exp-flag{ max-width: 720px; margin: 20px auto; padding: 12px 16px; border-radius: 12px; background: #fdf6e8; border: 1px dashed #d9c48f; color: #7a5f22; font: 400 14px/1.5 var(--exp-sans); }
.exp .exp-drafts{ margin-top: 52px; }
.exp .exp-drafts__head{ text-align: center; color: var(--exp-meta); font-family: var(--exp-serif); font-weight: 500; }

/* ── Responsive ───────────────────────────────────────────────────────────── */
@media (max-width: 1000px) { .exp .exp-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 760px) {
  .exp .exp-hero { padding-top: 44px; }
  .exp .exp-hero__title { font-size: 38px; }
  .exp .exp-hero__blurb { font-size: 16px; line-height: 26px; }
  .exp .exp-featured { grid-template-columns: 1fr; }
  .exp .exp-grid { grid-template-columns: 1fr; }
  .exp .exp-article__title { font-size: 32px; }
  .exp .exp-body { font-size: 18px; line-height: 30px; }
  .exp .exp-cta { padding: 36px 24px; }
  .exp .exp-cta__title { font-size: 30px; }
}
/* ============================================================================
   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__cta { text-align: center; margin: 18px 0 0; }

.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; }

/* Draft-family marketing previews (newsletter + social posts). */
.mkt-nl { padding: 18px 20px 16px; }
.mkt-nl__kicker { font: 700 9px var(--sans); letter-spacing: .6px; color: var(--faint); margin-bottom: 9px; }
.mkt-nl__subject { font-family: var(--serif); font-weight: 600; font-size: 21px; line-height: 1.2; color: var(--ink); margin-bottom: 6px; }
.mkt-nl__preview { font-size: 12.5px; color: var(--muted); margin-bottom: 12px; }
.mkt-nl__intro { font-size: 13px; line-height: 1.6; color: var(--deep); padding-bottom: 13px; border-bottom: 1.5px solid var(--line-2); margin-bottom: 12px; }
.mkt-nl__secs { display: flex; flex-direction: column; gap: 7px; margin-bottom: 14px; }
.mkt-nl__sec { position: relative; padding-left: 16px; font-size: 12.5px; color: var(--deep); }
.mkt-nl__sec::before { content: ""; position: absolute; left: 0; top: 6px; width: 7px; height: 7px; border-radius: 2px; background: var(--green); }
.mkt-nl__foot { display: flex; align-items: center; gap: 9px; font-size: 11px; color: var(--faint); }
.mkt-nl__copy { font: 600 11px var(--sans); color: #fff; background: var(--green); border-radius: 8px; padding: 5px 10px; }

.mkt-sp { padding: 16px; display: flex; flex-direction: column; gap: 12px; }
.mkt-sp__card { border: 1.5px solid var(--line-2); border-radius: 12px; background: #fff; padding: 13px 15px; }
.mkt-sp__top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 9px; }
.mkt-sp__plat { font: 700 9px var(--sans); letter-spacing: .5px; color: var(--green); background: var(--mint-2); border-radius: 999px; padding: 4px 9px; }
.mkt-sp__copy { font: 600 10.5px var(--sans); color: var(--green); border: 1.5px solid var(--mint-br); border-radius: 7px; padding: 4px 8px; }
.mkt-sp__hook { font-family: var(--serif); font-weight: 500; font-size: 15px; line-height: 1.3; color: var(--ink); margin-bottom: 7px; }
.mkt-sp__body { font-size: 12.5px; line-height: 1.55; color: var(--muted); }
.mkt-sp__tags { margin-top: 9px; font: 600 11.5px var(--sans); color: var(--green); }

.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; }
}

/* Article template preview (use-cases/ai-blog-writer) */
.mkt-art { padding: 18px 20px 16px; }
.mkt-art__top { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; }
.mkt-art__cat { font: 700 9px var(--sans); letter-spacing: .6px; color: var(--green); background: #e4efe9; border-radius: 5px; padding: 3px 8px; }
.mkt-art__meta { font: 600 9px var(--sans); letter-spacing: .5px; color: var(--faint); }
.mkt-art__title { font-family: var(--serif); font-weight: 600; font-size: 20px; line-height: 1.18; color: var(--ink); margin-bottom: 7px; }
.mkt-art__hook { font-size: 12.5px; line-height: 1.6; color: var(--deep); padding-bottom: 12px; border-bottom: 1.5px solid var(--line-2); margin-bottom: 11px; }
.mkt-art__secs { display: flex; flex-direction: column; gap: 7px; margin-bottom: 12px; }
.mkt-art__sec { position: relative; padding-left: 16px; font-size: 12.5px; color: var(--deep); }
.mkt-art__sec::before { content: ""; position: absolute; left: 0; top: 6px; width: 7px; height: 7px; border-radius: 2px; background: var(--green); }
.mkt-art__excerpt {
  font: 400 10.5px/1.75 "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  color: #3a352c; background: #f7f4ec; border: 1px solid var(--line-2); border-radius: 10px;
  padding: 10px 12px; margin: 0 0 11px; white-space: pre-wrap;
}
.mkt-art__limit { font: 600 11px var(--sans); color: var(--green); }

/* ── Mobile nav ───────────────────────────────────────────────────────────
   Below 720px .mkt-nav__links is hidden; this replaces it. Native <details>,
   so it needs no JavaScript and Esc closes it. Hidden on desktop. */
.mkt-menu { display: none; position: relative; }
.mkt-menu__button {
  list-style: none; display: flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 11px; border: 1.5px solid var(--line-2);
  background: #fff; cursor: pointer;
}
.mkt-menu__button::-webkit-details-marker { display: none; }
.mkt-menu__bars, .mkt-menu__bars::before, .mkt-menu__bars::after {
  display: block; width: 17px; height: 2px; border-radius: 2px; background: var(--ink); content: "";
}
.mkt-menu__bars { position: relative; }
.mkt-menu__bars::before { position: absolute; top: -6px; }
.mkt-menu__bars::after { position: absolute; top: 6px; }
.mkt-menu[open] .mkt-menu__button { border-color: var(--green); }
.mkt-menu__sheet {
  position: absolute; right: 0; top: calc(100% + 10px); z-index: 60;
  display: flex; flex-direction: column; min-width: 190px; padding: 8px;
  background: #fff; border: 1.5px solid var(--line-2); border-radius: 14px;
  box-shadow: 0 12px 32px rgba(50, 42, 28, .14);
}
.mkt-menu__sheet a {
  padding: 11px 12px; border-radius: 9px; font: 600 14.5px var(--sans);
  color: var(--ink); text-decoration: none;
}
.mkt-menu__sheet a:hover { background: var(--paper-warm, #faf8f3); color: var(--green); }

@media (max-width: 720px) {
  .mkt-menu { display: block; }
  /* The brand name is the one thing that can push the row over on a phone. */
  .mkt-nav { gap: 10px; }
  .mkt-nav__name { font-size: 20px; }
}
/* 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: 14px; }
.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-headactions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 22px; }
.nrw-runbtn--resume { color: #fff; background: #2f6d5b; border-color: #2f6d5b; }
.nrw-runbtn--resume:hover { color: #fff; background: #28604f; border-color: #28604f; }
/* Transparent status right in the edit header. */
.nrw-status { display: inline-flex; align-items: center; gap: 5px; font-weight: 700; }
.nrw-status__dot { width: 7px; height: 7px; border-radius: 50%; }
.nrw-status--active { color: #2f6d5b; }
.nrw-status--active .nrw-status__dot { background: #2f6d5b; }
.nrw-status--paused { color: #b08a2e; }
.nrw-status--paused .nrw-status__dot { background: #d4a53a; }
.nrw-pausednote { display: flex; gap: 8px; background: #fdf7ea; border: 1.5px solid #ecdcae; border-radius: 12px; padding: 11px 14px; font-size: 13px; line-height: 1.5; color: #6f5b2e; margin: -8px 0 22px; }
.nrw-pausednote strong { color: #5a4a24; }
/* Opt-in delivery-email checkbox. */
.nrw-check { display: flex; align-items: flex-start; gap: 11px; margin: 4px 0 28px; cursor: pointer; }
.nrw-check input[type="checkbox"] { width: 18px; height: 18px; margin: 1px 0 0; flex: none; accent-color: #2f6d5b; cursor: pointer; }
.nrw-check__text { font-size: 13.5px; color: #3a352c; line-height: 1.4; }
.nrw-check__sub { display: block; font-size: 12px; color: #9a9384; margin-top: 2px; }
.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; }
/* Sits between a label and its field, so it is read before writing rather
   than after. Tighter than the standalone hint, and it must not push the
   field away from its label. */
.nrw-hint--field { margin: -3px 0 8px; }

/* Character counter, created by char_count.js next to any textarea carrying
   data-maxlen (the Direction, every feedback box). Hidden until close to the
   limit — a ceiling nobody is near is noise. */
.charcount { font-size: 11.5px; color: #9a9384; margin: -8px 0 12px; text-align: right; }
.charcount.is-over { color: #a3564c; font-weight: 600; }

.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 analyse your Direction" — 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; }

/* Async lifecycle: cancel while running, and a warning when the Direction has
   moved on since the review was made. */
.pc__cancel {
  margin-left: auto; flex: none;
  font: 600 11.5px var(--font-sans, inherit); padding: 5px 11px; border-radius: 8px;
  border: 1.5px solid #ddd6c9; background: #fff; color: #8f8877; cursor: pointer;
}
.pc__cancel:hover { border-color: #c9bfae; color: #6f6a5e; }

.pc__stale {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 0 0 12px; padding: 9px 12px; border-radius: 9px;
  background: #fdf8ec; border: 1.5px solid #e0cd9a; color: #6f5a1f; font-size: 12.5px;
}
.pc__restale {
  font: 600 11.5px var(--font-sans, inherit); padding: 5px 11px; border-radius: 8px;
  border: 1.5px solid #ddc98f; background: #fff; color: #7a6224; cursor: pointer;
}
.pc__restale:hover { background: #fbf3e0; }
/* 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; }
/* A plain note above the reopen box — it used to be a panel WRAPPING the
   reply form, which boxed a box and left the button floating inside it. */
.sup-resolved { font-size: 12.5px; color: #9a9384; margin: 0 2px 10px; }
/* "Sorted it yourself?" — the owner closing their own ticket. */
.sup-resolve { margin: 12px 2px 0; font-size: 12.5px; color: #9a9384; }
.sup-resolve__form { display: inline; }
.sup-resolve__link { border: none; background: none; padding: 0; font: inherit; color: #2f6d5b; text-decoration: underline; cursor: pointer; }
.sup-resolve__link:hover { color: #28604f; }
.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; }
}
/*

















 */

