/* ── U0 · THE SHELL ────────────────────────────────────────────────────
   Ink, paper, ochre — the three named colours of the drawn screens — and
   the neutrals between them, every one biased toward the ink's blue so
   no grey on the page is an unchosen grey. `--accent` is the ochre
   darkened to #8A5A14: #C8862A on paper is 2.9:1, under the 4.5:1 that
   body-size link text needs, so the pure ochre is kept for rules and
   the lit tab, where it carries no words.

   NOTHING IS FETCHED. The screens link Google Fonts; /privacy promises
   no third party learns of a visit and the CSP is `style-src 'self'`.
   The stacks NAME Noto first, so a machine that has it uses it. */
/* The palette and type tokens live in tokens.css (S1, 2026-09-29),
   linked before this file; every rule below reads them as variables. */
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);
font:16px/1.6 var(--serif);
/* The bar is fixed to the bottom on a phone; without this it covers the
   last lines of every page. */
/* `--bar-h` is the height of a TAB; the bar is that plus its own
   1px top border, so the reserve carries the border too. */
padding-bottom:calc(var(--bar-h) + 1px + env(safe-area-inset-bottom,0px))}
a{color:var(--accent)}
a:hover{color:var(--ink)}
:focus-visible{outline:2px solid var(--ochre);outline-offset:2px}
.bar{display:flex;justify-content:space-between;align-items:center;gap:1rem;
padding:.7rem 1.25rem;border-bottom:1px solid var(--line);background:var(--card)}
.brand{display:flex;align-items:center;gap:.7rem;min-height:44px;
text-decoration:none;color:var(--ink);font-weight:600;font-size:1.1rem;
line-height:1.1}
.brand:hover{color:var(--ink)}
/* THE MARK IS A MARK, NOT A TILE (2026-10-19). It was an <img> over an
   ink background with a 10px radius, and the SVG it loaded painted its
   own opaque black rect edge to edge — so the header showed a black
   square on cream and neither the radius nor this background was ever
   visible. `scripts/generate_mark.py` now cuts the mark with no
   background of its own, in ink/paper/ochre, so the bar's own colour
   shows through and the box is the ring itself. 48px is the size the
   ring is drawn for; the comment that said 36px had been wrong since
   the rule said 48. `block` removes the inline-image baseline gap that
   would otherwise push the name down a pixel. */
.mark{display:block;width:48px;height:48px;flex:none}
.lang{display:flex;gap:0;max-width:none;border:1px solid var(--ink);
border-radius:6px;overflow:hidden;flex:none}
.lang button{background:transparent;color:var(--ink);border-radius:0;
padding:.35rem .7rem;min-height:40px;font:14px/1 var(--sans)}
.lang button[aria-current]{background:var(--ink);color:var(--paper)}
/* THE BAR. Bottom of the screen on a phone, where a thumb is. */
/* THE TAB COUNT IS NOT FIXED: three signed out (Today, Timing, Sign in),
   four signed in (People joins, 0010), and five once Ask is built. A
   hardcoded `repeat(3, …)` wrapped the fourth tab onto a second row,
   making the bar 121px tall against the 60px `--bar-h` the page reserves
   — 61px of every signed-in page sat under it. Auto-flow takes the count
   from the markup, so adding a tab cannot reopen this. */
body>nav{position:fixed;left:0;right:0;bottom:0;z-index:10;display:grid;
grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);background:var(--card);
border-top:1px solid var(--line);font:12px/1.2 var(--sans);
padding-bottom:env(safe-area-inset-bottom,0px)}
body>nav a{display:flex;flex-direction:column;align-items:center;
justify-content:center;gap:4px;min-height:var(--bar-h);color:var(--muted);
text-decoration:none;border-top:2px solid transparent}
body>nav a:hover{color:var(--ink)}
body>nav a[aria-current]{color:var(--ink);font-weight:600;
border-top-color:var(--ochre)}
/* …and under the header from 900px: the same three links, reflowed.
   One template, this breakpoint only. */
@media (min-width:900px){
  body{padding-bottom:0}
  body>nav{position:static;display:flex;justify-content:center;gap:6px;
  padding:.5rem 1.25rem;border-top:0;border-bottom:1px solid var(--line);
  font-size:14px}
  body>nav a{flex-direction:row;gap:8px;min-height:40px;padding:0 16px;
  border:0;border-radius:6px;color:var(--ink)}
  body>nav a svg{width:18px;height:18px}
  body>nav a[aria-current]{background:var(--ink);color:var(--paper)}
  body>nav a[aria-current]:hover{color:var(--paper)}
}
@media (max-width:420px){.bar{padding:.6rem 1rem}.brand{font-size:1rem;gap:.55rem}}
.note.breach{border-left:4px solid #a00}
/* Devanagari, from the reader's own machine. Nothing is fetched: a
   webfont link is a third party learning that you visited, which
   /privacy promises does not happen, and `style-src 'self'` blocked it
   anyway. So the stack names the faces each platform actually ships —
   Noto Sans Devanagari (Android, most Linux), Kohinoor Devanagari
   (macOS, iOS), Nirmala UI and Mangal (Windows) — before falling back.
   16px body / 14px floor: below that the anusvara and the candrabindu
   merge, and अं vs अँ is a MEANING distinction, not a style one. `th`
   and `.card dt` are set at .78rem for English small-caps labels, which
   is under the floor, so Hindi raises them. */
html[lang="hi"] body{font-family:"Noto Serif Devanagari","Noto Sans Devanagari",
"Kohinoor Devanagari","Nirmala UI","Mangal",system-ui,sans-serif}
html[lang="hi"] th,html[lang="hi"] .card dt{font-size:.875rem}
main{max-width:56rem;margin:0 auto;padding:2rem 1.5rem}
h1{font-size:1.7rem;font-weight:600;line-height:1.15;margin:0 0 .5rem;text-wrap:balance}
h2{font-size:1.25rem;margin:2rem 0 .75rem;border-bottom:1px solid var(--line);
padding-bottom:.35rem}
.lede{color:var(--soft);margin:0 0 2rem}

/* ── THE MEASURE ───────────────────────────────────────────────────
   `main` is 56rem so tables, charts and the two-column cards have room.
   Prose does not want that room: at 1400px the body text on /privacy ran
   108 characters to the line, measured against the rendered font rather
   than estimated (848px of box, 7.83px average advance). Comfortable
   reading is 45-75, and 80 is the usual ceiling.

   38rem is about 75 characters at this face and size. Applied to the
   text elements rather than by narrowing `main`, because the same page
   holds a position table and a varga grid that need every pixel of the
   56rem — narrowing the container would fix the paragraphs by breaking
   those. */
main p,main li,main dd{max-width:38rem}
/* The exceptions are the places where a short string is laid out rather
   than read: a table cell, a definition grid inside a card, and the
   caption under a chart are positioned by their container and a measure
   cap would leave them hanging in the middle of it. */
main td p,main .card dd,main .legend,main .meta{max-width:none}
form{display:grid;gap:1rem;max-width:34rem}
label{display:block;font-family:var(--sans);font-size:.85rem;color:var(--muted);margin-bottom:.25rem}
/* ── FORM CONTROLS NEVER FALL BELOW 16px ───────────────────────────
   `font:inherit` alone takes the size from whatever encloses the
   control, and on /matching the inputs sit INSIDE their `<label>`,
   which is .85rem — so six fields rendered at 13.6px. Safari on iOS
   ZOOMS THE PAGE when a text field under 16px takes focus, and it does
   not zoom back out: the person is left scrolled sideways in the middle
   of a form. Stated as an explicit floor rather than fixed in that one
   template, because the next form written inside a label would inherit
   the same defect and nothing would say so. */
input,select{width:100%;padding:.7rem;border:1px solid var(--line);
border-radius:8px;background:var(--card);font:inherit;font-size:1rem}
button{padding:.65rem 1.4rem;background:var(--ink);color:var(--paper);border:0;
border-radius:10px;font:600 1rem/1.2 var(--sans);cursor:pointer}
button:hover{background:#2A2F55}
.row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
table{width:100%;border-collapse:collapse;font-size:.92rem}
th,td{text-align:left;padding:.45rem .6rem;border-bottom:1px solid var(--line)}
th{font-family:var(--sans);font-weight:600;color:var(--muted);font-size:.78rem;text-transform:uppercase;
letter-spacing:.05em}
.note{background:var(--warnbg);border-left:3px solid var(--warn);
padding:.9rem 1.1rem;margin:1.25rem 0;font-size:.92rem}
.note strong{color:var(--warn)}
.locked{opacity:.55}
.locked td:first-child::before{content:"🔒 ";font-size:.8em}
.choices{list-style:none;padding:0;display:grid;gap:.5rem}
.choices a{display:block;padding:.7rem 1rem;border:1px solid var(--line);
border-radius:3px;background:var(--card);text-decoration:none;color:var(--ink)}
.choices a:hover{border-color:var(--accent)}
.meta{font-size:.8rem;color:var(--muted);font-family:ui-monospace,monospace;
word-break:break-all}
footer{max-width:56rem;margin:3rem auto 2rem;padding:1.5rem;
border-top:1px solid var(--line);color:var(--muted);font:.82rem/1.5 var(--sans)}
.legal{display:flex;flex-wrap:wrap;gap:.25rem 1.1rem}
footer p{margin:.35rem 0}
.attrib{font-size:.75rem}
.tag{display:inline-block;font-size:.7rem;text-transform:uppercase;
letter-spacing:.06em;padding:.15rem .45rem;border-radius:2px;
background:#eee;color:var(--muted)}
.tag.practice{background:#f3e6e6;color:#8a3a3a}
.attest{border:1px solid var(--line);border-left-width:3px;border-radius:10px;
padding:.7rem .9rem;margin:.6rem 0;background:var(--card);font-size:.88rem}
.attest-head{display:flex;justify-content:space-between;align-items:center;
gap:.75rem}
.attest-body{margin:.35rem 0 0;color:var(--muted)}
.attest-practice{border-left-color:#a04545;background:#fdf6f6}
.attest-recovered{border-left-color:#8a6d1f}
.attest-transmitted{border-left-color:#5a7a4a}
.attest-commented{border-left-color:#3f6b8a}
.tag.commented{background:#e4eef5;color:#3f6b8a}
.tag.transmitted{background:#e8f0e4;color:#4a6b3a}
.tag.recovered{background:#f7f0dc;color:#8a6d1f}
.verdict{border:1px solid var(--line);border-radius:10px;padding:1.1rem 1.3rem;
background:var(--card);margin:1.25rem 0}
.verdict h2{margin:0 0 .35rem;border:0;padding:0;font-size:1.35rem}
.verdict .sub{color:var(--muted);margin:0}
.bhanga-list{list-style:none;padding:0;margin:.5rem 0 0}
.bhanga-list li{padding:.35rem 0;border-bottom:1px solid var(--line);
display:flex;justify-content:space-between;gap:1rem;font-size:.9rem}

/* ── Kundali diagram ────────────────────────────────────────────── */
.charts{display:flex;gap:1.5rem;flex-wrap:wrap;align-items:flex-start;
margin:1rem 0}
.chart-block{flex:1 1 340px;max-width:480px}
.chart-block h3{margin:0 0 .4rem;font-size:.8rem;text-transform:uppercase;
letter-spacing:.06em;color:var(--muted);font-weight:600}
.kundali{width:100%;height:auto;background:var(--card);border-radius:3px}
.kundali .frame{fill:var(--card);stroke:var(--ink);stroke-width:1.5}
.kundali .rule{stroke:var(--line);stroke-width:1}
.kundali .rule-fill{fill:none;stroke:var(--line);stroke-width:1}
.kundali .cell{fill:none;stroke:var(--line);stroke-width:1}
.kundali .cell.lagna{fill:#F8EBD3;stroke:var(--accent);stroke-width:1.5}
.kundali .sign{font:600 11px var(--sans);fill:var(--muted)}
.kundali .asc{font:600 11.5px var(--sans);fill:var(--accent)}
.kundali .graha{font:12.5px var(--sans);fill:var(--ink);
font-variant-numeric:tabular-nums}
.positions .num{font-variant-numeric:tabular-nums;white-space:nowrap}
.positions td:first-child{font-weight:600}
.legend{font-size:.78rem;color:var(--muted);margin:.3rem 0 0}
textarea{width:100%;padding:.6rem;border:1px solid var(--line);
/* 16px, not 13px, for the reason above: a textarea is a text field and
   iOS zooms into it on focus at anything smaller. */
border-radius:3px;background:var(--card);font:1rem/1.5 ui-monospace,monospace;
font-size:1rem;resize:vertical}

/* ── Structured detail ──────────────────────────────────────────── */
.glance th{width:9rem;text-transform:none;font-size:.9rem;letter-spacing:0;
color:var(--muted);font-weight:600;vertical-align:top}
.glance td{font-size:.95rem}
.card{border:1px solid var(--line);border-left:3px solid var(--accent);
border-radius:10px;padding:.8rem 1rem;margin:.7rem 0;background:var(--card)}
.card-head{display:flex;justify-content:space-between;align-items:baseline;
gap:1rem;margin-bottom:.45rem}
.card-head strong{font-size:1.05rem}
.card-pos{color:var(--accent);font-size:.9rem}
.card dl{display:grid;grid-template-columns:7.5rem 1fr;gap:.2rem .9rem;
margin:0;font-size:.88rem}
.card dt{color:var(--muted);font-size:.78rem;text-transform:uppercase;
letter-spacing:.04em;padding-top:.12rem}
.card dd{margin:0}
@media (max-width:520px){.card dl{grid-template-columns:1fr}
.card dt{margin-top:.4rem}}

/* ── Reading · the four-part frame ──────────────────────────────── */
.phase{border:1px solid var(--line);border-left:3px solid var(--accent);
border-radius:10px;padding:1.1rem 1.3rem;margin:1.2rem 0;background:var(--card)}
.phase h2{margin:0 0 .6rem;border:0;padding:0;font-size:1.3rem}
.frame-finding{font-size:1.02rem;margin:0 0 .7rem}
.frame-finding strong{color:var(--accent)}
.frame-reframe{color:var(--muted);font-style:italic;margin:0 0 .8rem;
padding-left:.9rem;border-left:2px solid var(--line)}
.frame-agency h4{margin:0 0 .3rem;font-size:.78rem;text-transform:uppercase;
letter-spacing:.06em;color:var(--muted)}
.frame-agency ul{margin:0;padding-left:1.1rem}
.frame-agency li{margin:.25rem 0;font-size:.94rem}
.frame-meta{font-size:.78rem;color:var(--muted);margin:.8rem 0 0;
padding-top:.5rem;border-top:1px solid var(--line)}
/* The technical line: the same finding, restated from the chart so a
   practitioner can check it against their own software. Monospace marks
   it as data rather than prose. */
.technical{font-family:ui-monospace,monospace;font-size:.86rem;color:#444;margin:.2rem 0 .6rem}

/* ── Instrument ─────────────────────────────────────────────────── */
.q{border-bottom:1px solid var(--line);padding:.75rem 0}
.q-prompt{font-size:.95rem;margin-bottom:.35rem}
.q-help{display:block;color:var(--muted);font-size:.8rem;margin-top:.15rem}
.q-row{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
@media (max-width:520px){.q-row{grid-template-columns:1fr}}
.consent{border:1px solid var(--line);border-left:3px solid var(--accent);
border-radius:10px;padding:.9rem 1.1rem;background:var(--card);font-size:.88rem}
.consent label{display:block;font-size:.95rem;color:var(--ink);
margin-bottom:.5rem}
.consent input[type=checkbox]{width:auto;margin-right:.4rem}
.consent ul{margin:.4rem 0 0;padding-left:1.1rem;color:var(--muted)}
.consent li{margin:.25rem 0}
.token{font:1.15rem ui-monospace,monospace;background:var(--card);padding:.5rem .7rem;
border:1px dashed var(--accent);border-radius:3px;display:inline-block;
margin:.4rem 0;user-select:all}

/* ── Accessibility and mobile, added after an audit ───────────────────
 *
 * WCAG 2.2 SC 2.5.8 (AA) requires pointer targets of at least 24x24 CSS
 * pixels or 24px of spacing. SC 2.5.5 (AAA) and both platform guidelines
 * ask for 44x44, and research finds targets under 44px carry roughly
 * three times the error rate. Nav links were inline text with no padding
 * and radio inputs were browser-default — around 13px.
 *
 * Body text is 16px and inputs inherit it, which also avoids iOS Safari
 * zooming on focus. That was already true; noted so it stays true.
 *
 * IT DID NOT STAY TRUE, and the note is why this reads as it does now.
 * Inheritance is a fact about the ancestor, not about the control: on
 * /matching the inputs are written inside their `<label>`, labels are
 * .85rem, and six fields rendered at 13.6px — under the floor, zooming
 * on focus, for as long as this comment said they could not. Found by
 * measuring the rendered pages on 2026-10-14, not by any test.
 *
 * The `input,select` rule above now sets `font-size:1rem` outright, so
 * the floor holds wherever a control is written rather than wherever it
 * happens to sit. A sentence asserting a property is not the same as a
 * rule enforcing it.
 */
button{min-height:44px}
input[type=radio],input[type=checkbox]{width:1.15rem;height:1.15rem;
vertical-align:middle}
label:has(input[type=radio]),label:has(input[type=checkbox]){
display:block;min-height:44px;padding:.55rem 0;line-height:1.5;cursor:pointer}
footer a,.meta a{display:inline-block;min-height:24px}

/* Secondary detail, disclosed on request. ONE level only: NN/g finds more
 * than two levels of disclosure has low usability because people lose
 * track of where they are. */
details{border:1px solid var(--line);border-radius:10px;background:var(--card);
margin:1.25rem 0}
details>summary{padding:.7rem 1rem;cursor:pointer;font-size:.9rem;
color:var(--muted);min-height:44px;line-height:1.9}
details>summary:hover{color:var(--accent)}
details[open]>summary{border-bottom:1px solid var(--line)}
details>*:not(summary){padding:0 1rem}
details>table{padding:0;width:calc(100% - 2rem);margin:.8rem 1rem}

/* THE ANSWER, BEFORE THE CAVEATS.
 * The chart page opened with a lede, then a warning, then "At a glance" —
 * so the one fact most people came for sat below a hedge. */
.answer{background:var(--card);border:1px solid var(--line);
border-left:3px solid var(--accent);border-radius:10px;
padding:1rem 1.2rem;margin:0 0 1.5rem;font-size:1.05rem}
.answer strong{color:var(--accent)}

/* Wide tables must scroll themselves rather than the page. */
.scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}

details.reason{display:inline;margin-left:.35rem}
details.reason>summary{display:inline;list-style:none;cursor:pointer}
details.reason>summary::-webkit-details-marker{display:none}
.reason-link,.reason-close{background:none;border:none;padding:0;font:inherit;color:#1a5c8a;text-decoration:underline;cursor:pointer}
.reason-link:focus-visible,.reason-close:focus-visible{outline:2px solid #1a5c8a;outline-offset:2px}
.reason-panel{max-width:36rem;border:1px solid #bbb;border-radius:6px;padding:.75rem 1rem;background:var(--card);color:#111;box-shadow:0 4px 18px rgba(0,0,0,.15);margin:0}
.reason-panel:popover-open{position:fixed;inset:auto;left:50%;top:20%;transform:translateX(-50%)}
.reason-panel::backdrop{background:rgba(0,0,0,.08)}
/* Browsers without popover support: the panel shows inline when <details> is open. */
@supports not selector(:popover-open){details.reason[open] .reason-panel{display:block}details.reason:not([open]) .reason-panel{display:none}}
@media print{details.reason{display:block}details.reason>summary{display:none}.reason-panel{display:block!important;position:static;box-shadow:none;border:none;padding:0}.reason-close{display:none}}

@media (max-width:520px){
  main{padding:1.25rem 1rem}
  .row{grid-template-columns:1fr}
  h1{font-size:1.5rem}
  table{font-size:.86rem}
  th,td{padding:.4rem .35rem}
}

/* ── PRINT ─────────────────────────────────────────────────────────────
   The packet is meant to be kept. `FORMAT.md` §8 separates the shareable
   artifact from the kept one, and the kept one is a document — people
   print readings, save them as PDF, and hand them to a practitioner.

   PRINT CSS RATHER THAN A PDF LIBRARY, deliberately. WeasyPrint or
   wkhtmltopdf would add a heavy dependency, a second rendering path that
   the harm scanner does not cover, and a font-embedding problem in
   Devanagari later. Every browser already exports PDF from print. The
   page IS the document.

   Measurements from docs/FORMAT.md §2: 50-65 characters per line (the
   band Astrodienst's best-set reports sit in; Understand Myself runs ~95
   and reads measurably worse), 10-12pt body, 120-145% leading. */
@media print {
  :root { color-scheme: light; }
  body {
    background: #fff; color: #000;
    font-size: 11pt; line-height: 1.4;
    max-width: none; margin: 0; padding: 0;
  }
  /* ~62 characters at 11pt — inside the 50-65 band. */
  main, .interp, section { max-width: 34em; }

  /* Navigation, forms and controls are not part of the document. */
  nav, footer .attrib, form, .q-row, button, input, select,
  a[href^="/nakshatra?"], .breach { display: none !important; }

  /* Links: keep the text, drop the affordance. A printed page cannot be
     clicked, and underlines collide with Devanagari below-base matras
     (W3C deva-gap #90) which matters once Hindi ships. */
  a { text-decoration: none; color: inherit; }
  /* Citations are the point of this project, so print the source URL for
     external references only — internal ones are noise on paper. */
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 8pt; }

  /* Never split a finding, a quoted verse, or a heading from its body. */
  article.finding, blockquote, .note, .frame { break-inside: avoid; }
  h1, h2, h3 { break-after: avoid; }

  /* Each part of the arc starts cleanly; the close gets its own page so
     the peak-end lands on something, not on a page break. */
  section#close { break-before: page; }

  /* The frames carry the confidence ceiling and the historical note.
     They must NOT be visually demoted on paper — a disclaimer printed in
     grey 7pt is a disclaimer designed not to be read. */
  .frame small, .rate small { font-size: 10pt; color: #000; }

  blockquote { border-left: 2pt solid #000; padding-left: 1em; }
  cite { display: block; font-size: 9pt; margin-top: .3em; }
  table { border-collapse: collapse; }
  td, th { padding: .25em .6em; border-bottom: .5pt solid #999; }
}

/* A5: the block the notification was about. */
h3:target{outline:2px solid currentColor;outline-offset:6px;border-radius:4px}

/* ── U5 · Tools: one row per calculator ─────────────────────────── */
.tools{list-style:none;margin:0 0 1.5rem;padding:0;border:1px solid var(--line);
border-radius:12px;background:var(--card);overflow:hidden}
.tools li+li{border-top:1px solid var(--line)}
.tools a{display:flex;flex-direction:column;justify-content:center;
min-height:56px;padding:.55rem 2.2rem .55rem 1rem;color:var(--ink);
text-decoration:none;position:relative}
.tools a::after{content:"›";position:absolute;right:1rem;top:50%;
transform:translateY(-50%);color:var(--muted)}
.tools a:hover .tool-name{color:var(--accent)}
.tool-what{font-size:.8rem;color:var(--muted);line-height:1.35}
html[lang="hi"] .tool-what{font-size:.875rem}
.declines{border:1px solid var(--line);border-radius:12px;padding:1rem}
.declines h2{margin:0 0 .35rem;border:0;padding:0;font-size:1rem}
.declines p{margin:0;font-size:.9rem;color:var(--muted)}
.deeper{display:flex;flex-wrap:wrap;gap:.25rem 1.25rem;margin:0 0 1.25rem;
font:.9rem/1.4 var(--sans)}
.deeper a{display:inline-block;min-height:44px;line-height:44px}
/* P1: the page was filled from the account. */
.own{max-width:56rem;margin:0 auto;padding:.6rem 1.5rem 0;color:var(--muted);
font:.85rem/1.4 var(--sans)}
.own a{display:inline-block;min-height:24px;margin-left:.4rem}
fieldset.role{border:1px solid var(--line);border-radius:10px;padding:.4rem 1rem;
margin:0;background:var(--card)}
fieldset.role legend{font:.85rem var(--sans);color:var(--muted);padding:0 .3rem}
/* P2a */
.own-order{font:.9rem/1.5 var(--sans);color:var(--muted);margin:1.5rem 0 0}
button.quiet{background:transparent;color:var(--accent);border:1px solid var(--line)}
button.quiet:hover{background:var(--card);color:var(--ink)}
fieldset.role label{text-transform:none}
/* P2b: trivia between the findings */
.trivia{margin:1.2rem 0;padding:.9rem 1.1rem;border:1px solid var(--line);
border-left:4px solid var(--ochre);border-radius:10px;background:#FBF6EA}
.trivia p{margin:.25rem 0;font-size:.95rem}
.trivia-lead{font:600 .72rem/1.2 var(--sans);letter-spacing:.1em;
text-transform:uppercase;color:var(--accent)}
.trivia-check{color:var(--soft);font-style:italic;font-size:.88rem}
.trivia-source{font:.75rem/1.4 var(--sans);color:var(--muted)}
/* P3: the landing page */
.hero{padding:1.5rem 0 1rem}
.hero h1{font-size:2.1rem}
.cta{margin:1.25rem 0}
.button{display:inline-block;padding:.8rem 1.5rem;background:var(--ink);color:var(--paper);
border-radius:10px;font:600 1rem/1.2 var(--sans);text-decoration:none;min-height:44px}
.button:hover{background:#2A2F55;color:var(--paper)}
.cta-note{margin-left:.9rem;font:.85rem var(--sans);color:var(--muted)}
.steps ol{padding-left:1.2rem}
.steps li{margin:.6rem 0}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem}
.cols>div{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:1rem 1.2rem}
.cols h3{margin:0 0 .5rem;font-size:1rem}
.cols ul{margin:0;padding-left:1.1rem}
.numbers{list-style:none;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}
.numbers li{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:1rem}
.numbers strong{display:block;font:600 2rem/1.1 var(--sans);color:var(--accent);
font-variant-numeric:tabular-nums;margin-bottom:.3rem}
@media (max-width:640px){.cols,.numbers{grid-template-columns:1fr}}

/* ── V1 · Today (docs/design/screens-v2/Today.dc.html) ──────────────── */
.day-head{padding:.5rem 0 0}
.small{font:.85rem/1.45 var(--sans);color:var(--muted)}
.day-head h1{font-size:1.5rem;margin:.2rem 0 0}
.eyebrow{font:600 .72rem/1.3 var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:0 0 .3rem}
/* `.tline`, not `.row`: `.row` is the two-column form grid above. */
.tline{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;flex-wrap:wrap}
.tline h2{margin:0;border:0;padding:0;font-size:1.1rem}
.clocks ul{list-style:none;margin:1rem 0;padding:0;display:grid;gap:.4rem;font:.9rem/1.4 var(--sans)}
.clock{display:flex;align-items:center;gap:.5rem;color:var(--soft)}
.clock-meter{width:56px;height:8px;flex:none}
meter{-webkit-appearance:none;appearance:none;border:0;background:var(--line);border-radius:4px;overflow:hidden}
meter::-webkit-meter-bar{background:var(--line);border:0;border-radius:4px}
meter::-webkit-meter-optimum-value,meter::-webkit-meter-suboptimum-value,meter::-webkit-meter-even-less-good-value{background:var(--ochre)}
meter::-moz-meter-bar{background:var(--ochre)}
.clock-label{color:var(--ink);font-weight:600}
.day-line{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1rem 1.2rem;margin:1rem 0}
.day-line h2{margin:0 0 .4rem;border:0;padding:0;font-size:1.35rem;line-height:1.25}
.day-line .reframe{margin:0;color:var(--soft)}
.carries{display:flex;justify-content:space-between;align-items:center;gap:.8rem;
padding:.8rem 1rem;border:1px solid var(--line);border-radius:12px;background:var(--card);
text-decoration:none;color:var(--ink);margin:1rem 0}
.carries .eyebrow{display:block}
.texts-line{border-left:4px solid var(--ochre);padding:.6rem 1rem;margin:1.2rem 0}
.texts-line .line{margin:.2rem 0;font-style:italic;font-size:1.02rem}
.day-bar,.plans,.one-sentence,.seasons,.pending{background:var(--card);border:1px solid var(--line);
border-radius:14px;padding:1rem 1.2rem;margin:1rem 0}
/* SCOPED TO `.day-bar` ON PURPOSE (2026-10-19). This 10px meter and the
   page header were BOTH `.bar`, and this rule is the later of the two,
   so it won on `<header class="bar">`: the header computed to 23.39px
   tall with `overflow:hidden` and wore this gradient instead of
   `var(--card)`, which cut the 48px mark in half — 23.39px of it was
   ever on screen. The only element that wants this rule is the day
   meter in `today.html`, and it already sits inside `.day-bar`, so
   scoping it here fixes the header without touching any template. */
.day-bar .bar{position:relative;height:10px;border-radius:5px;background:linear-gradient(90deg,#E8B65A,#F4EFE6 30%,#F4EFE6 70%,#E8B65A);margin:.6rem 0;overflow:hidden}
.day-bar .bar .avoid{position:absolute;top:0;bottom:0;background:var(--muted);opacity:.55}
.day-bar .cols{display:grid;grid-template-columns:1fr 1fr;gap:1rem;font:.9rem/1.5 var(--sans);margin-top:.6rem}
.day-bar .cols>div{min-width:0;overflow-wrap:anywhere}
.plan .windows{overflow-wrap:anywhere}
.texts-line .line,.one-sentence .sentence,.day-line h2{overflow-wrap:anywhere}
.plans ul{list-style:none;margin:.5rem 0;padding:0;font:.95rem/1.5 var(--sans)}
.plan{display:flex;justify-content:space-between;gap:1rem;padding:.4rem 0;border-bottom:1px solid var(--hair)}
.plan .windows{color:var(--soft);font-variant-numeric:tabular-nums;text-align:right}
.one-sentence .sentence{font-size:1.15rem;margin:.5rem 0}
.season{padding:.5rem 0;border-bottom:1px solid var(--hair)}
.season:last-child{border-bottom:0}
.season-bar{display:block;width:100%;height:6px;margin:.35rem 0}
.answers{display:flex;gap:.5rem;flex-wrap:wrap;margin:.6rem 0 0}
.answers button{flex:1 1 30%;min-width:6rem}
.tomorrow{margin:1rem 0 2rem;font:.9rem/1.5 var(--sans);color:var(--soft)}
@media (max-width:420px){.day-bar .cols{grid-template-columns:1fr}}
/* bar marks: left l0..l100 and width w2..w50, in 2% steps (no inline styles under the CSP) */
.avoid.l0{left:0%}.avoid.l2{left:2%}.avoid.l4{left:4%}.avoid.l6{left:6%}.avoid.l8{left:8%}.avoid.l10{left:10%}.avoid.l12{left:12%}.avoid.l14{left:14%}.avoid.l16{left:16%}.avoid.l18{left:18%}.avoid.l20{left:20%}.avoid.l22{left:22%}.avoid.l24{left:24%}.avoid.l26{left:26%}.avoid.l28{left:28%}.avoid.l30{left:30%}.avoid.l32{left:32%}.avoid.l34{left:34%}.avoid.l36{left:36%}.avoid.l38{left:38%}.avoid.l40{left:40%}.avoid.l42{left:42%}.avoid.l44{left:44%}.avoid.l46{left:46%}.avoid.l48{left:48%}.avoid.l50{left:50%}.avoid.l52{left:52%}.avoid.l54{left:54%}.avoid.l56{left:56%}.avoid.l58{left:58%}.avoid.l60{left:60%}.avoid.l62{left:62%}.avoid.l64{left:64%}.avoid.l66{left:66%}.avoid.l68{left:68%}.avoid.l70{left:70%}.avoid.l72{left:72%}.avoid.l74{left:74%}.avoid.l76{left:76%}.avoid.l78{left:78%}.avoid.l80{left:80%}.avoid.l82{left:82%}.avoid.l84{left:84%}.avoid.l86{left:86%}.avoid.l88{left:88%}.avoid.l90{left:90%}.avoid.l92{left:92%}.avoid.l94{left:94%}.avoid.l96{left:96%}.avoid.l98{left:98%}.avoid.l100{left:100%}
.avoid.w2{width:2%}.avoid.w4{width:4%}.avoid.w6{width:6%}.avoid.w8{width:8%}.avoid.w10{width:10%}.avoid.w12{width:12%}.avoid.w14{width:14%}.avoid.w16{width:16%}.avoid.w18{width:18%}.avoid.w20{width:20%}.avoid.w22{width:22%}.avoid.w24{width:24%}.avoid.w26{width:26%}.avoid.w28{width:28%}.avoid.w30{width:30%}.avoid.w32{width:32%}.avoid.w34{width:34%}.avoid.w36{width:36%}.avoid.w38{width:38%}.avoid.w40{width:40%}.avoid.w42{width:42%}.avoid.w44{width:44%}.avoid.w46{width:46%}.avoid.w48{width:48%}.avoid.w50{width:50%}

/* ── V2 · the evening state ─────────────────────────────────────────── */
.record,.week{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1rem 1.2rem;margin:1rem 0}
.record-bar{display:block;width:100%;height:10px;margin:.3rem 0 .8rem}
.record-bar.base::-webkit-meter-optimum-value{background:var(--muted)}
.record-bar.base::-moz-meter-bar{background:var(--muted)}
.days{list-style:none;margin:.5rem 0;padding:0;display:grid;grid-template-columns:repeat(7,1fr);gap:.3rem;text-align:center;font:.75rem/1.3 var(--sans);color:var(--muted)}
.day .dot{display:block;width:14px;height:14px;border-radius:50%;margin:0 auto .3rem;border:1px solid var(--line);background:var(--paper)}
.day.answered .dot{background:var(--ochre);border-color:var(--ochre)}
.day.now{color:var(--ink);font-weight:600}
.today.evening .pending .eyebrow{color:var(--accent)}
.answers{flex-direction:column}
.answers button{flex:none;width:100%}
.record .tline{font:.95rem/1.5 var(--sans)}
.record .tline strong{font-family:var(--sans)}
.today.evening .tomorrow{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1rem 1.2rem;margin:1rem 0;color:var(--ink);font:inherit}
.today.evening .tomorrow .tline h2{margin-bottom:.4rem}

/* ── V3 · Timing ───────────────────────────────────────────────────── */
.timing .running,.timing .next,.timing .turns,.timing .all,.timing .lords,.timing .findings,.timing .sandhi-note{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1rem 1.2rem;margin:1rem 0}
.timeline{list-style:none;margin:.4rem 0 0;padding:0 0 0 1.1rem;border-left:2px solid var(--line)}
.timeline li{position:relative;padding:.45rem 0 .45rem .6rem}
.timeline li::before{content:"";position:absolute;left:-1.55rem;top:.95rem;width:10px;height:10px;border-radius:50%;background:var(--line)}
.timeline li.running::before{background:var(--ochre)}
.timeline a{color:var(--ink);text-decoration:none}
.timeline a:hover strong{color:var(--accent)}
.timeline .dates{display:block;font:.85rem/1.4 var(--sans);color:var(--muted);font-variant-numeric:tabular-nums}
.timing .dates{font:.95rem/1.5 var(--sans);color:var(--soft)}
.turn-line{margin:.3rem 0 0;font-size:.98rem}
.turn.dates-only a strong{color:var(--muted)}
.lord-list{list-style:none;margin:.4rem 0 0;padding:0}
.lord-list li{padding:.4rem 0;border-bottom:1px solid var(--hair)}
.lord-list li:last-child{border-bottom:0}
.sandhi{margin-top:.6rem}

/* ── V3 · the picture (U-1b) ────────────────────────────────────────
   The rows are a grid of two columns — the level's name and its track —
   and the today line is one absolutely-positioned element over the whole
   block, so it crosses every row and stops exactly where they do.
   `--gantt-gutter` is the label column plus the column gap: the template
   re-bases the line's percentage with it, and it is defined here, beside
   the column it describes, so the two cannot drift apart. */
.gantt{--gantt-label:4.2rem;--gantt-gutter:calc(4.2rem + .55rem);
background:var(--card);border:1px solid var(--line);border-radius:14px;
padding:.9rem 1rem;margin:1rem 0;font:.72rem/1.3 var(--sans)}
.gantt-scale{display:flex;justify-content:space-between;color:var(--muted);
padding-left:var(--gantt-gutter);margin-bottom:.4rem;font-variant-numeric:tabular-nums}
.gantt-body{position:relative;display:grid;align-items:center;
grid-template-columns:var(--gantt-label) minmax(0,1fr);gap:.45rem .55rem}
.gantt-label{color:var(--muted)}
.gantt-track{position:relative;height:22px}
/* The right border is the GAP between adjacent bars, and it is a border
   rather than a narrower bar so that no geometry moves: the periods of a
   level tile the window exactly, and `box-sizing:border-box` takes the
   2px out of the bar's own width. Without it the three light antardasha
   bars read as one band with three words lying on it. */
.gantt-bar{position:absolute;top:0;bottom:0;border-radius:4px;background:var(--hair);
color:var(--ink);display:flex;align-items:center;padding-left:5px;overflow:hidden;
white-space:nowrap;box-sizing:border-box;border-right:2px solid var(--card)}
/* Dark is "running now", as the legend says. Paper on ink is the pairing
   the header already uses, so the contrast is the one the palette was
   checked at. */
.gantt-bar.now{background:var(--ink);color:var(--paper)}
.gantt-today{position:absolute;top:-2px;bottom:-2px;width:2px;margin-left:-1px;
background:var(--ochre)}
.gantt-legend{margin:.5rem 0 0;color:var(--muted);font:inherit}

/* ── S3 · two-choice feedback, and You ─────────────────────────────── */
.feedback{display:flex;gap:.5rem;flex-wrap:wrap;margin:.6rem 0 0;max-width:none}
/* 44px, THE TAP TARGET MINIMUM, not 32. These two buttons are how the
   outcome ledger gets filled — every answer the cohort study scores
   arrives through one of them — and they were the smallest targets on
   the page they live on. The padding carries the height rather than a
   bare `min-height`, so the text stays centred in the larger pill. */
.feedback .fb{background:transparent;color:var(--muted);border:1px solid var(--line);
border-radius:999px;padding:.6rem 1.1rem;min-height:44px;font:.8rem/1.2 var(--sans)}
.feedback .fb:hover{color:var(--ink);border-color:var(--ink);background:transparent}
.feedback .fb.on{color:var(--ink);border-color:var(--ochre);background:#FBF3DC}
.you .records,.you .events,.you .settings,.you .password,.you .export,.you .leave{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1rem 1.2rem;margin:1rem 0}
.you form{max-width:none}
.event-list{list-style:none;margin:.5rem 0;padding:0}
.event-list li{display:flex;gap:.5rem;align-items:flex-start;flex-wrap:wrap;padding:.5rem 0;border-bottom:1px solid var(--hair)}
.event-edit,.event-add{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;flex:1 1 100%}
.event-edit input[name=note],.event-add input[name=note]{grid-column:1 / -1}
.event-delete{flex:none}
.you .leave form{margin:.6rem 0}
.you .notify{margin-top:.8rem;padding-top:.8rem;border-top:1px solid var(--hair)}
/* ── S4: /you polish, and the birth Moon (V5) ───────────────────────── */
.you .moon,.you .answered,.you .kept{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1rem 1.2rem;margin:1rem 0}
.event-list li{display:block}
.event-list .when{font-family:var(--sans);font-size:.85rem;color:var(--muted)}
.event-list .edit{margin-left:.5rem;font-family:var(--sans);font-size:.8rem}
.event-edit{margin-top:.4rem}
.event-delete{margin-top:.6rem;display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}
.event-delete label{margin:0;font-size:.85rem}
.kept-list{list-style:none;margin:.5rem 0;padding:0}
.kept-list li{padding:.4rem 0;border-bottom:1px solid var(--hair)}
.birth-moon{margin:0;text-align:center}
.birth-moon svg{max-width:100%;height:auto;border-radius:50%}
.birth-moon.small-mark svg{width:160px;height:160px}
.first-run .moon{background:#000;border-radius:18px;padding:1.2rem;margin:1rem 0;text-align:center}
.first-run .moon-facts{color:#8E8E93;margin:.6rem 0 0}
.first-run .star,.first-run .calibrate,.first-run .share{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1rem 1.2rem;margin:1rem 0}
.first-run .nak-name{margin:0;font-size:1.9rem}
.first-run .sanskrit{margin:.1rem 0 .8rem;color:var(--muted)}
.first-run .nak-facts{display:grid;grid-template-columns:auto 1fr;gap:.25rem .8rem;margin:0 0 .8rem}
.first-run .nak-facts dt{font-family:var(--sans);font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.first-run .nak-facts dd{margin:0}
.first-run .archetype{font-size:1.6rem;margin:.6rem 0 0;color:var(--accent)}
.first-run .archetype+.small{margin-top:0}
.first-run details.verse{margin-top:.8rem}
.first-run details.verse summary{cursor:pointer;font-weight:600}
.first-run .anchor{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;margin:.4rem 0}
.first-run form{max-width:none}
/* ── S5-hindi: the one-tap language report on Hindi pages ─────────────── */
.hi-report{margin:.3rem 0 0;max-width:none}
.hi-report .fb{font-size:.75rem;border-style:dashed}
.hi-report.foot{margin:.8rem 0 .4rem}
