* { box-sizing:border-box; }
  body { margin:0; background:var(--cream); color:var(--ink);
         font-family:var(--font-sans); font-size:15px; line-height:1.6; }
  /* Grid and flex children default to min-width:auto, which lets a wide table
     push the whole page sideways. This is the rule the signed-in mockup was
     missing on all seventeen routes. */
  .l-wrap > *, .l-sec > * { min-width:0; }
  .l-wrap { max-width:var(--wrap); margin:0 auto; padding:0 16px; }
  .l-sec { padding:38px 0; }
  .l-alt { background:var(--surface-2); border-block:1px solid var(--line-soft); }
  .l-sub { font-size:var(--text-base); line-height:1.62; color:var(--ink-2);
           margin:0; max-width:66ch; }
  /* A link in a lede had no colour and came out in the browser's own
     -webkit-link — rgb(158,158,255) in dark, #0000EE in light. .l-sub is on
     every page, so this was one page today and any page that adds a link to a
     lede tomorrow. Set here rather than on the page that happened to have
     one. */
  .l-sub a { color:var(--gold-dk); text-underline-offset:2px; }
  /* A CENTRED SECTION, for pages whose head is centred too. Lives here rather
     than in a page's stylesheet because two clusters use it now — it was
     .ai-c in ai_astrologer.py, and pages/dasha.py picked up the class without
     the rule, so its ledes rendered left under centred heads and looked like
     an oversight. margin-inline is not optional: .l-sub caps at 66ch, so
     centring the text without centring the box leaves a centred column
     sitting on the left of the wrap.
     Only the lede. Lists, tables and cards inside a .l-ctr stay left —
     centred body copy is ragged on both edges and a centred bulleted list
     stops forming a column to scan. */
  .l-ctr .l-sub { text-align:center; margin-inline:auto; }
  /* TWO LEDES GO SIDE BY SIDE. One is fine stacked: 66ch keeps a line
     readable and the grid or panel under it carries the width. Two of them
     stacked is not — they fill the left half of the band, the right half is
     empty, and under a full-width heading with a full-width panel below it
     the pair reads as a column that has been cut off rather than as air.
     Measured at 1280: 582px of a 1180px section, 49% of it, twice over.

     A track each, so both keep the SAME measure they had — this is a layout
     fix, not a wider line. Stretching one paragraph across 1180px would give
     150 characters to a line that is already at 74.

     auto-fit rather than two fixed columns, because the home page has a pair
     inside a half-width column; there they stack again rather than becoming
     two forty-character ribbons.

     .l-sub KEEPS ITS 66ch. Each track comes out at 552px against a 582px
     cap, so the track is what governs in two columns and the cap is what
     governs when it falls back to one — which is the width it has today.
     Overriding the cap to none looked tidier and gave a 736px tablet a
     93-character line, which is the fault this rule exists to avoid.

     min(400px, 100%), NOT 400px. A minimum track wider than the container
     does not shrink — it overflows it, and at 320px the whole page scrolled
     sideways by 26px. min() caps the floor at whatever room there is. */
  .l-lede { display:grid; gap:10px 44px; margin-bottom:20px;
            grid-template-columns:repeat(auto-fit, minmax(min(400px, 100%), 1fr)); }
  .l-mb { margin-bottom:20px; }
  .l-mt { margin-top:22px; }
  /* ── the header's two menus (language, account) ─────── */
  .c-dd { position:relative; }
  .c-dd > summary { list-style:none; }
  .c-dd > summary::-webkit-details-marker { display:none; }
  /* The theme toggle's size and shape (ui .c-th-t), so the three read as
     one set: 34px under a mouse, 44px under a finger. */
  .c-dd-b { display:grid; place-items:center; width:34px; height:34px; border-radius:10px;
            border:1px solid var(--line); background:var(--surface); color:var(--ink-2);
            cursor:pointer; }
  @media (pointer:coarse) { .c-dd-b { width:44px; height:44px; border-radius:12px; } }
  .c-dd-b:hover, .c-dd[open] > .c-dd-b { border-color:var(--gold); color:var(--gold-dk); }
  .c-dd-aa { font-size:13px; font-weight:700; letter-spacing:-.02em; }
  .c-dd-m { position:absolute; top:calc(100% + 8px); left:50%; transform:translateX(-50%); z-index:60;
            min-width:170px; padding:6px; border-radius:12px; border:1px solid var(--line);
            background:var(--surface); box-shadow:0 10px 30px rgba(0,0,0,.14);
            display:flex; flex-direction:column; gap:2px; }
  .c-dd-r { left:auto; right:0; transform:none; }
  .c-dd-i { display:flex; align-items:center; gap:10px; padding:9px 12px; border-radius:8px;
            min-height:44px; box-sizing:border-box;
            font-size:14.5px; color:var(--ink); text-decoration:none; white-space:nowrap; }
  .c-dd-i i { font-style:normal; width:18px; text-align:center; color:var(--ink-3); }
  .c-dd-i:hover { background:var(--gold-bg); }
  .c-dd-i.c-on { color:var(--gold-dk); font-weight:650; }
  .c-dd-i.c-on i { color:var(--gold-dk); }
  .l-act-u { display:flex; align-items:center; gap:8px; }
  /* Theme, language, account and the menu at 320px ran the menu button
     to the screen's edge, into the 16px gutter every page keeps. */
  @media (max-width:359px) { .l-act-u { gap:2px; } }
  /* The account in the drawer, only where it left the header. */
  .c-drawer-acct { display:none; }
  @media (max-width:359px) {
    .c-top-r:has(.l-lang) .l-acct { display:none; }
    .c-drawer-acct { display:grid; gap:4px; padding:2px 0 12px; margin-bottom:8px;
                     border-bottom:1px solid var(--line-soft); }
  }
  /* Date and time are one question, asked once. Both values are short enough
     to sit side by side even at 360px, and pairing them stops the form
     reading as five separate chores. */
  /* Date and time side by side, and STACKED on the narrowest phones. The two
     were always a 1fr 1fr grid; what changed is that the time trigger now
     reads 09:15 PM as four flex spans rather than one string, so its
     min-content is wider than half of a 288px card and the card grew to 311 —
     7px of sideways scroll on the page the whole site links to. minmax(0,1fr)
     alone would have kept the row and clipped the readout instead. */
  .l-dt { display:grid; grid-template-columns:1fr; gap:10px; }
  @media (min-width:360px) {
    .l-dt { grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
  }
  /* Part of the hero's left column, not a band of its own. It anchors the
     bottom of that column so it finishes level with the form card. */
  /* Inside the form card the list sits under the button, separated by a rule
     rather than by more whitespace — it is what pressing the button gets you,
     so it should read as part of the button's promise. */
  .l-cardsub { margin:2px 0 14px; }
  .l-cardinc { margin-top:14px; padding-top:14px;
               border-top:1px solid var(--line-soft); }
  .l-inc { list-style:none; margin:0; padding:0; display:grid; gap:9px; }
  .l-inc li { display:flex; align-items:flex-start; gap:9px; }
  .l-inc svg { flex:none; margin-top:2px; color:var(--gold-dk); }
  .l-inc span { font-size:14px; line-height:1.45; color:var(--ink-2); }

  .l-samp { display:flex; align-items:center; gap:13px; padding:14px 16px;
            text-decoration:none; color:var(--ink); border:1px solid var(--line);
            border-radius:var(--r-card); background:var(--surface); }
  .l-samp:hover { border-color:var(--gold); background:var(--gold-bg); }
  /* Between the two-column breakpoint and 1024 the left column runs 9px past
     the card, because the headline takes an extra line before the columns are
     wide enough. Four pixels off the padding and four off the stack gap close
     it without anyone being able to tell the difference. */

  .l-samp > svg:first-child { flex:none; color:var(--gold-dk); }
  .l-samp > svg:last-child { flex:none; color:var(--ink-3); margin-left:auto; }
  .l-samp span { min-width:0; }
  .l-samp b { display:block; font-size:14.5px; font-weight:700; }
  .l-samp i { display:block; font-style:normal; font-size:12.5px;
              color:var(--ink-3); margin-top:2px; line-height:1.45; }
  .l-dt .c-pf { margin-bottom:0; }
  .l-dth { margin:6px 0 var(--space-3); }
  .l-mb2 { margin-bottom:16px; }

  .l-mark { display:block; width:34px; height:34px; flex:none; }
  .l-mark img { display:block; width:100%; height:100%; border-radius:19%; }

  /* proof row */
  .l-proof { background:var(--gold-bg); border-block:1px solid var(--line); }
  .l-pfr { display:grid; grid-template-columns:repeat(2,1fr); gap:0;
           padding:4px 0; }
  .l-pf { padding:18px 4px 18px 18px; }
  /* Hairlines, not a colour change, do the separating — and only between
     cells that are actually side by side, which changes at each breakpoint. */
  .l-pf:nth-child(2n) { border-left:1px solid var(--line); }
  .l-pf:nth-child(n+3) { border-top:1px solid var(--line); }
  .l-pf:first-child { padding-left:0; }
  .l-pf b { display:block; font-family:var(--font-serif); font-size:29px;
            line-height:1.05; font-weight:600; color:var(--gold-dk);
            letter-spacing:-.015em; }
  .l-pf span { display:block; font-size:13.5px; font-weight:650; margin-top:5px;
               color:var(--ink); }
  .l-pf i { display:block; font-style:normal; font-size:12.5px; color:var(--ink-3);
            margin-top:2px; }
  @media (min-width:760px) {
    .l-pfr { grid-template-columns:repeat(4,1fr); }
    .l-pf:nth-child(n+3) { border-top:0; }
    .l-pf:nth-child(n+2) { border-left:1px solid var(--line); }
  }

  /* panchang */
  .l-panch { display:grid; gap:8px; grid-template-columns:repeat(2,1fr); }
  .l-pc { padding:13px 14px; border:1px solid var(--line); border-radius:var(--r-in);
          background:var(--surface); }
  .l-pc span { display:block; font-family:var(--font-mono); font-size:9px;
               letter-spacing:.13em; color:var(--ink-3); }
  .l-pc b { display:block; font-size:15px; margin-top:5px; }
  .l-pc i { display:block; font-style:normal; font-size:12px; color:var(--ink-3); }
  .l-pc.c-t-good b { color:var(--good); } .l-pc.c-t-bad b { color:var(--bad); }
  @media (min-width:700px) { .l-panch { grid-template-columns:repeat(3,1fr); } }
  @media (min-width:1000px) { .l-panch { grid-template-columns:repeat(6,1fr); } }

  /* rashifal */
  .l-rsg { display:grid; gap:7px; grid-template-columns:repeat(3,1fr); }
  .l-rs { display:flex; flex-direction:column; align-items:center; gap:1px;
          min-height:98px; justify-content:center; padding:12px 5px;
          border:1px solid var(--line); border-radius:var(--r-in);
          background:var(--surface); text-decoration:none; color:var(--ink);
          text-align:center; }
  .l-rs:hover { border-color:var(--gold); background:var(--gold-bg); }
  .l-rs .c-sym { color:var(--gold-dk); margin-bottom:4px; }
  .l-rs b { font-size:12.5px; font-weight:650; }
  .l-rs i { font-style:normal; font-size:10.5px; color:var(--ink-3); }
  .l-rs u { text-decoration:none; font-size:12px; color:var(--gold-dk); }
  @media (min-width:560px) { .l-rsg { grid-template-columns:repeat(4,1fr); } }
  @media (min-width:900px) { .l-rsg { grid-template-columns:repeat(6,1fr); } }

  /* tools */
  .l-tools { display:grid; gap:12px; }
  .l-ti { display:grid; place-items:center; width:40px; height:40px;
          border-radius:11px; color:var(--gold-dk); background:var(--gold-bg);
          margin-bottom:11px; }
  .l-tl { display:flex; flex-wrap:wrap; gap:6px; margin-top:13px; }
  .l-tl a { display:inline-flex; align-items:center; min-height:44px;
            font-size:12.5px; font-weight:600; padding:0 14px;
            border-radius:var(--r-pill); color:var(--ink-2);
            border:1px solid var(--line); background:var(--surface);
            text-decoration:none; }
  .l-tl a:hover { color:var(--gold-dk); border-color:var(--gold);
                  background:var(--gold-bg); }
  @media (min-width:720px) { .l-tools { grid-template-columns:repeat(2,1fr); } }


  /* The unknown-birth-time escape hatch belongs inside the time picker, where
     someone reaches it at the exact moment they realise they cannot answer. */
  .l-unk { margin-top:14px; padding-top:12px; border-top:1px solid var(--line-soft); }
  .l-faq { margin-top:16px; }


/* ── page head ────────────────────────────────────────── */
.s-crumb { padding-top:16px; }
.s-top { padding:22px 0 6px; }
.s-head { max-width:64ch; }
/* With a form beside it the header is the full width and the two columns
   share it, so the reading underneath is not squeezed into a rail. */
.s-head-2 { max-width:none; display:grid; gap:26px;
            grid-template-columns:minmax(0,1fr); align-items:start; }
.s-head-2 > * { min-width:0; }
@media (min-width:960px) {
  .s-head-2 { grid-template-columns:minmax(0,1fr) minmax(0,380px); }
}
.s-head-t { max-width:64ch; }
.s-eyebrow { display:inline-block; font-family:var(--font-mono); font-size:10px;
             letter-spacing:.14em; text-transform:uppercase; color:var(--gold-dk);
             padding:5px 10px; border-radius:var(--r-pill);
             background:var(--gold-bg); margin-bottom:14px; }
.s-h1 { font-family:var(--font-serif); font-size:clamp(27px,5.2vw,42px);
        line-height:1.08; letter-spacing:-.021em; font-weight:600;
        margin:0 0 13px; text-wrap:balance; }
.s-h1 em { font-style:normal; color:var(--gold-dk); }
.s-dek { font-size:var(--text-md); line-height:1.62; color:var(--ink-2);
         margin:0; max-width:58ch; }
/* What the page gives back, named. See page_head() for why it is only on the
   fourteen with a full birth-details form. */
.s-ret { margin-top:18px; max-width:58ch; }
.s-ret ul { margin:8px 0 0; padding:0; list-style:none; display:grid;
            gap:5px; }
.s-ret li { position:relative; padding-left:18px; font-size:14px;
            line-height:1.55; color:var(--ink-2); }
.s-ret li::before { content:''; position:absolute; left:2px; top:9px;
                    width:5px; height:5px; border-radius:50%;
                    background:var(--gold-solid); }
@media (min-width:960px) {
  .s-head-fill { align-items:stretch; }
  .s-head-fill > .s-head-t { display:flex; flex-direction:column; }
  .s-head-fill .s-meta { margin-top:auto; padding-top:16px; }
}
/* The facts a dek would otherwise carry as adjectives. Mono, so they read as
   data rather than as more sentence. */
/* THE CENTRED HEAD, for pages that are not asking for a birth time. The
   default sits beside a form card and runs to 64ch down the left; a page
   whose top is a choice rather than a form leaves that whole right-hand
   column empty, and the text reads as the caption of something that failed
   to load. Two pages want this — the tarot hub, whose top half is six
   readings, and the astrologer pages, whose top half is a roster — so it
   lives here rather than being written twice. */
.s-head-c { max-width:700px; margin-inline:auto; text-align:center; }
.s-head-c .s-eyebrow { font-size:11.5px; letter-spacing:.09em; font-weight:700;
          border:1px solid var(--gold-lt); padding:5px 13px; margin-bottom:16px; }
.s-head-c .s-h1 { font-size:clamp(30px,5.6vw,46px); }
.s-head-c .s-dek { margin-inline:auto; max-width:62ch; }
.s-head-c .s-meta { justify-content:center; }

.s-meta { display:flex; flex-wrap:wrap; gap:8px 18px; margin-top:16px;
          font-family:var(--font-mono); font-size:11px; letter-spacing:.04em;
          color:var(--ink-3); }
.s-meta span { display:flex; align-items:center; gap:7px; }
.s-meta span + span::before { content:''; width:3px; height:3px; flex:none;
          border-radius:50%; background:var(--line); margin-left:-11px; }
/* A price the API could not give takes its chip, and the dot after it, away. */
.s-meta > span:has(> .c-px-gone) { display:none; }
.s-meta > span:has(> .c-px-gone) + span::before { display:none; }

/* ── related ──────────────────────────────────────────── */
.s-rel { display:grid; gap:10px; grid-template-columns:1fr; }
@media (min-width:620px) { .s-rel { grid-template-columns:repeat(2,1fr); } }
@media (min-width:960px) { .s-rel { grid-template-columns:repeat(3,1fr); } }
.s-rel > * { min-width:0; }
.s-rel-i { display:flex; align-items:flex-start; gap:12px; padding:14px 16px;
           min-height:44px; text-decoration:none; color:var(--ink);
           background:var(--surface); border:1px solid var(--line);
           border-radius:var(--r-card); }
.s-rel-i:hover { border-color:var(--gold); background:var(--gold-bg); }
.s-rel-k { flex:none; display:grid; place-items:center; width:32px; height:32px;
           border-radius:9px; background:var(--gold-bg); color:var(--gold-dk); }
.s-rel-x { min-width:0; display:flex; flex-direction:column; line-height:1.4; }
.s-rel-x b { font-size:14px; font-weight:650; }
.s-rel-x i { font-style:normal; font-size:12.5px; color:var(--ink-3);
             margin-top:2px; }

/* ── closing CTA ──────────────────────────────────────── */
.s-cta { display:grid; gap:20px; align-items:center; padding:28px;
         border-radius:var(--r-card); border:1px solid var(--gold-lt);
         background:
           radial-gradient(120% 140% at 88% 0%, var(--gold-bg) 0%, transparent 64%),
           var(--surface); }
@media (min-width:820px) {
  .s-cta { grid-template-columns:1fr auto; gap:34px; padding:32px 36px; } }
.s-cta > * { min-width:0; }
.s-cta h2 { font-family:var(--font-serif); font-size:clamp(21px,3.4vw,28px);
            line-height:1.16; letter-spacing:-.018em; font-weight:600;
            margin:0 0 9px; text-wrap:balance; }
.s-cta p { font-size:var(--text-base); line-height:1.6; color:var(--ink-2);
           margin:0; max-width:52ch; }
.s-cta-b { display:flex; flex-wrap:wrap; gap:10px; }
.s-cta-b > * { flex:1 1 auto; }
.s-cta-alt { display:inline-flex; align-items:center; justify-content:center;
             gap:8px; text-decoration:none; white-space:nowrap; }
.s-cta-alt svg { color:var(--gold-dk); }

/* The banner: the page's line, then the astrologers and the reports. */
.s-cta.s-pro { display:block; position:relative; overflow:hidden;
  padding:36px 20px 26px;
  background:radial-gradient(120% 80% at 50% 0%, var(--gold-bg) 0%, transparent 70%), var(--cream); }
@media (min-width:760px) { .s-cta.s-pro { padding:44px 40px 36px; } }
/* The line art: faint, behind everything, never in the way. */
.s-pro-deco { position:absolute; top:0; pointer-events:none; display:block;
  background:var(--gold); opacity:.8;
  -webkit-mask:var(--m) no-repeat top / contain; mask:var(--m) no-repeat top / contain; }
.s-pro-sun { left:0; width:340px; aspect-ratio:340 / 250; -webkit-mask-position:left top; mask-position:left top; }
.s-pro-moon { right:0; width:404px; aspect-ratio:404 / 250; -webkit-mask-position:right top; mask-position:right top; }
/* Smaller and fainter behind a narrower headline; on a phone, a corner of
   each, inside the edge. */
@media (max-width:1099px) { .s-pro-sun { width:250px; } .s-pro-moon { width:290px; } }
@media (max-width:759px) { .s-pro-deco { opacity:.75; } .s-pro-sun { width:44%; left:-5%; }
  .s-pro-moon { width:48%; right:-4%; }
  /* The faces show at the edges, as in the mobile mock: the headline keeps
     to the middle. */
  .s-cta.s-pro .s-pro-h h2 { max-width:78%; margin-inline:auto; } }
.s-pro-h { position:relative; text-align:center; max-width:780px; margin:0 auto 28px; }
.s-cta.s-pro .s-pro-h h2 { font-size:clamp(28px,4.6vw,46px); line-height:1.08; margin:0; }
.s-cta.s-pro .s-pro-h p { margin:12px auto 0; max-width:60ch; font-size:17px; color:var(--ink-2); }
.s-pro-go1 { margin-top:20px; display:inline-flex; gap:10px; align-items:center; padding:0 26px;
  min-height:52px; font-size:16px; box-shadow:0 8px 22px -12px rgba(90,55,10,.55); }
.s-pro-g { position:relative; display:grid; gap:18px; grid-template-columns:minmax(0,1fr); }
/* Side by side from 1000px: narrower, the covers shrink under the chat card
   and no amount of tightening makes the two end together. */
@media (min-width:1000px) { .s-pro-g { grid-template-columns:repeat(2,minmax(0,1fr)); } }
.s-pro-c { display:flex; flex-direction:column; align-items:flex-start; gap:10px; min-width:0;
  padding:22px 20px; border:1px solid var(--line); border-radius:20px; background:var(--surface);
  color:inherit; text-decoration:none; transition:border-color .15s; }
@media (min-width:760px) { .s-pro-c { padding:26px 28px; } }
.s-pro-c:hover { border-color:var(--gold-lt); }
.s-pro-c h3 { font-family:var(--font-serif); font-size:clamp(24px,2.6vw,32px); font-weight:600;
  line-height:1.15; margin:6px 0 0; color:var(--ink); }
.s-pro-t { font-size:15px; line-height:1.55; color:var(--ink-2); }
.s-pro-p { font-size:15px; font-weight:600; color:var(--gold-dk); }
.s-pro-fs { display:flex; text-decoration:none; }
.s-pro-f { width:68px; height:68px; border-radius:50%; overflow:hidden; border:3px solid var(--surface);
  margin-left:-10px; background:var(--surface-2); box-shadow:0 0 0 1px var(--gold-lt); }
.s-pro-f:first-child { margin-left:0; }
/* Six across a phone's card: 44px at 320, 54 from 380. */
@media (max-width:759px) { .s-pro-f { width:44px; height:44px; margin-left:-10px; border-width:2px; } }
@media (min-width:380px) and (max-width:759px) { .s-pro-f { width:54px; height:54px; margin-left:-8px; } }
@media (min-width:760px) { .s-pro-f { width:76px; height:76px; margin-left:-12px; } }
.s-pro-f img { width:100%; height:100%; object-fit:cover; display:block; }
/* The four, as tiles with their subject's icon. */
.s-pro-rs { display:grid; gap:8px; grid-template-columns:repeat(2,minmax(0,1fr)); align-self:stretch; margin-top:4px; }
@media (min-width:480px) { .s-pro-rs { gap:10px; } }
.s-pro-r { display:flex; align-items:center; gap:10px; min-width:0; padding:11px 12px;
  border-radius:12px; background:var(--gold-bg); }
.s-pro-r svg { flex:none; color:var(--gold-dk); }
.s-pro-r > span { display:flex; flex-direction:column; min-width:0; }
.s-pro-r b { font-size:15px; font-weight:650; color:var(--ink); }
.s-pro-r i { font-style:normal; font-size:13.5px; color:var(--ink-2); }

.s-pro-qs { display:flex; flex-direction:column; gap:8px; align-self:stretch; margin-top:4px; }
.s-pro-qs > i { font-style:normal; font-size:12px; font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:var(--ink-3); }
.s-pro-q { display:flex; align-items:center; min-height:44px; padding:10px 14px; border-radius:12px;
  background:var(--gold-bg); color:var(--ink); font-size:14.5px; line-height:1.4; text-decoration:none; }
.s-pro-q:hover { background:var(--gold-lt); }
.s-pro-bs { display:grid; grid-template-columns:minmax(0,1fr); gap:10px; align-self:stretch; margin-top:6px; }
/* A price abroad is longer than ₹5 ("Chat from $0.10/min"), and at 320
   the nowrap button ran past the screen. Wrap there instead. */
@media (max-width:374px) { .s-pro-bs .c-btn { white-space:normal; flex-wrap:wrap; text-align:center; } }
@media (min-width:1000px) { .s-pro-bs { grid-template-columns:repeat(2,minmax(0,1fr)); } }
/* The rate sits beside its label, one line. */
.s-pro-bs .c-btn { display:flex; justify-content:center; align-items:center; gap:8px; white-space:nowrap;
  min-height:52px; font-size:16px; }
.s-pro-bs .c-as-rate { font-weight:650; }
.s-pro-fine { font-size:13px; color:var(--ink-3); }
/* ── THE PHONE (Rohit's mobile mock, 28 Sep 2026) ──
   The chat card centred — faces, heading, the line under it — with the
   four as one-row tiles, icon beside the name; Chat and Call full width,
   one over the other. The reports card leads with its heading, then the
   covers, the words, and Explore full width. Everything a little closer. */
@media (max-width:759px) {
  .s-cta.s-pro { padding:24px 12px 14px; }
  .s-pro-h { margin-bottom:18px; }
  .s-cta.s-pro .s-pro-h p { margin-top:8px; font-size:16px; }
  .s-pro-go1 { margin-top:14px; width:100%; max-width:360px; justify-content:center; }
  .s-pro-g { gap:14px; }
  .s-pro-c { padding:18px 12px; gap:10px; border-radius:18px; }
  .s-pro-g > .s-pro-c:first-child { align-items:center; text-align:center; }
  .s-pro-g > .s-pro-c:first-child .s-pro-fs { justify-content:center; }
  .s-pro-c h3 { margin-top:2px; font-size:26px; }
  .s-pro-rs { gap:8px; }
  .s-pro-r { flex-direction:row; align-items:center; gap:7px; padding:9px 8px; text-align:left; }
  .s-pro-r svg { width:20px; height:20px; }
  .s-pro-r b { font-size:14px; white-space:nowrap; }
  .s-pro-r i { font-size:12.5px; line-height:1.3; }
  .s-pro-rs { gap:6px; }
  .s-pro-bs { gap:8px; margin-top:2px; }
  .s-pro-bs .c-btn { min-height:50px; }
  .s-pro-fine { text-align:center; }
  .s-pro-rep h3 { order:-1; margin:0; text-align:center; align-self:stretch; }
  .s-pro-rep .s-pro-cvs { gap:10px; }
  .s-pro-go { align-self:stretch; justify-content:center; margin-top:4px; }
}
/* The smallest phones: a 66px name column cannot hold "Astro Vaidya" beside
   an icon, so the icon goes above it there. */
@media (max-width:359px) {
  .s-pro-r { flex-direction:column; align-items:flex-start; gap:5px; }
  .s-pro-r b { white-space:normal; }
}

/* THE TWO CARDS END TOGETHER (Rohit, 28 Sep 2026: "the right card has
   empty space, shrink the left to match"). Side by side the covers set the
   height, and they shrink with the card: from 1280px the two already match
   to a few pixels; between 1000 and 1279 the chat card is tightened —
   smaller faces, slimmer tiles, closer rows — to fit under the covers.
   Both cards' buttons sit on the bottom edge, so what little is left over
   falls above them and the two rows of buttons line up. */
.s-pro-g > .s-pro-c:first-child .s-pro-bs { margin-top:auto; }
@media (min-width:1000px) and (max-width:1279px) {
  .s-pro-g > .s-pro-c:first-child { gap:8px; }
  .s-pro-g > .s-pro-c:first-child .s-pro-f { width:58px; height:58px; margin-left:-10px; }
  .s-pro-g > .s-pro-c:first-child .s-pro-f:first-child { margin-left:0; }
  .s-pro-g > .s-pro-c:first-child h3 { margin-top:2px; font-size:clamp(22px,2.2vw,28px); }
  .s-pro-g > .s-pro-c:first-child .s-pro-t { font-size:14px; }
  .s-pro-rs { gap:8px; margin-top:2px; }
  .s-pro-r { padding:8px 12px; gap:10px; }
  .s-pro-r svg { width:22px; height:22px; }
  .s-pro-r b { font-size:14.5px; }
  .s-pro-r i { font-size:13px; }
  .s-pro-bs .c-btn { min-height:48px; }
}
/* The reports: the covers big, then the words, then the button. */
.s-pro-cvs { display:flex; gap:14px; align-items:flex-start; align-self:stretch; }
.s-pro-cv { flex:1 1 0; max-width:190px; border-radius:6px; overflow:hidden;
  box-shadow:0 10px 24px -14px rgba(60,30,5,.6); }
.s-pro-cv img { width:100%; height:auto; display:block; }
.s-pro-rep h3 { margin-top:10px; }
.s-pro-go { margin-top:auto; display:inline-flex; align-items:center; gap:8px; min-height:52px;
  padding:0 24px; font-size:16px; }
.s-pro-c .s-pro-p + .s-pro-go { margin-top:12px; }

  /* .l-wrap already sets the width and the gutter; this only adds the
     breathing room a detail page wants above and below its head. */
  .ag-main { padding-top:6px; padding-bottom:8px; }

  /* ── ONE CARD: WHO ON THE LEFT, WHAT THEY DO ON THE RIGHT ── */
  .ag-top { display:grid; grid-template-columns:1fr; margin-bottom:30px;
            border:1px solid var(--line); border-radius:var(--r-card);
            background:var(--surface); overflow:hidden; }
  @media (min-width:860px) {
    .ag-top { grid-template-columns:274px minmax(0,1fr); }
    /* The divider is a border on the rail rather than a rule between them,
       so it runs the full height of whichever column is taller. */
    .ag-rail { border-right:1px solid var(--line); }
    /* Sticky so the price and the two buttons stay in reach however far
       down the mastery list somebody has read. */
    .ag-rail { position:sticky; top:12px; align-self:start; }
  }

  .ag-rail { padding:26px 22px; text-align:center; }
  /* Stacked (the rail over the body, below the two-column width): a rule
     between them, and the body starts closer. Without it the card read as
     two loose halves with 60px of nothing between the credit line and the
     bio. */
  @media (max-width:859px) {
    .ag-top > .ag-rail + .ag-body { border-top:1px solid var(--line-soft); padding-top:22px; }
    .ag-rail { padding-bottom:22px; }
  }
  .ag-face, .ag-rail .c-avatar { width:104px; height:104px; border-radius:50%;
             object-fit:cover; background:var(--surface-2);
             margin:0 auto 10px; display:block; }
  .ag-on { display:flex; align-items:center; justify-content:center; gap:6px;
           margin:0 0 8px; font-size:12px; color:var(--good); white-space:nowrap; }
  /* The dot only: the words may be a span of their own (lib/i18n.py). */
  .ag-on > span:first-child { width:7px; height:7px; border-radius:50%;
                background:var(--good); flex:none; }
  .ag-rail h1 { font-family:var(--font-serif); font-size:23px; font-weight:600;
                letter-spacing:-.01em; margin:0; color:var(--ink);
                line-height:1.2; }
  .ag-spec { margin:4px 0 0; font-size:13.5px; font-weight:600;
             color:var(--gold-dk); }
  .ag-stat { display:flex; align-items:center; justify-content:center; gap:6px;
             flex-wrap:wrap; margin:9px 0 0; font-size:13px; }
  .ag-stat b { font-weight:700; color:var(--ink); }
  .ag-stat i { font-style:normal; color:var(--ink-3); }
  .ag-langs { margin:8px 0 0; font-size:12px; line-height:1.5;
              color:var(--ink-3); }
  /* The three children of .c-btn are laid out by its own
     grid-auto-flow:column with place-items:center, so icon, label and price
     centre as one group without anything here. gap:9px only widens the
     space the component already sets. */
  .ag-cta { width:100%; margin:14px 0 8px; gap:9px; }
  .ag-cta + .ag-cta { margin-top:0; }
  .ag-cta em { font-style:normal; font-weight:700; font-size:12.5px;
               opacity:.82; }
  .ag-fine { margin:6px 0 0; font-size:11px; line-height:1.5;
             color:var(--ink-3); }

  .ag-body { padding:26px 26px 24px; min-width:0; container-type:inline-size; }
  .ag-bio { font-size:15px; line-height:1.7; color:var(--ink);
            max-width:62ch; margin:0 0 16px; }
  .ag-why { margin:0 0 18px; padding:13px 17px; max-width:62ch;
            border-left:3px solid var(--gold-dk); background:var(--gold-bg);
            border-radius:0 var(--r-in) var(--r-in) 0; }
  .ag-why b { display:block; font-size:13px; color:var(--ink);
              margin-bottom:5px; }
  .ag-why p { margin:0; font-size:13px; line-height:1.65;
              color:var(--ink-2); font-style:italic; }

  /* The disciplines, as a dotted run rather than boxed chips: they are a
     list of nouns, and twenty-four bordered pills is more furniture than
     the words are worth. */
  .ag-mast2 { list-style:none; margin:0 0 20px; padding:0; display:flex;
              flex-wrap:wrap; gap:7px 20px; }
  .ag-mast2 li { position:relative; padding-left:14px; font-size:13.5px;
                 color:var(--ink-2); }
  .ag-mast2 li::before { content:''; position:absolute; left:0; top:.52em;
                 width:6px; height:6px; border-radius:50%;
                 background:var(--gold-dk); }
  /* The term, then what it means in a quieter line under it. */
  .ag-mast2 li > span { display:block; color:var(--ink); }
  .ag-mast2 li small { display:block; margin-top:2px; font-size:12.5px;
                       line-height:1.45; color:var(--ink-3); }

  .ag-mast h2, .ag-try h2 { font-family:var(--font-mono); font-size:10.5px; font-weight:700;
               letter-spacing:.14em; text-transform:uppercase;
               color:var(--ink-3); margin:0 0 9px; }
  /* The questions: pills as wide as their words, wrapping, each a link. */
  .ag-asks { display:flex; flex-wrap:wrap; gap:8px; }
  .ag-ask { display:inline-flex; align-items:center; min-height:44px; max-width:100%;
            font-size:13.5px; line-height:1.4; padding:8px 15px; border-radius:var(--r-pill);
            border:1px solid var(--line); background:var(--surface-2);
            color:var(--ink); text-decoration:none; }
  .ag-ask:hover { border-color:var(--gold); background:var(--gold-bg); }
  .ag-ask:focus-visible { outline:2px solid var(--gold); outline-offset:2px; }
  /* Who on the left, what to ask on the right, once the column has room
     for both (see main()). Below that, one column, as it always was. After the
     rules it refines: a container query adds no specificity. */
  @container (min-width:820px) {
    .ag-cols { display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);
               gap:0 32px; }
    .ag-b2 { padding-left:32px; border-left:1px solid var(--line-soft); }
    .ag-b1 .ag-bio, .ag-b1 .ag-why { max-width:none; }
    .ag-b1 .ag-bio { font-size:15.5px; }
    .ag-mast2 { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px 16px; }
    /* The questions as a list, each the column's width: they read top to
       bottom beside the bio instead of wrapping into a ragged run. */
    .ag-asks { flex-direction:column; align-items:stretch; }
    .ag-ask { border-radius:12px; }
  }
  .ag-gift { margin:10px 0 0; text-align:center; font-size:13px; font-weight:600;
             line-height:1.45; color:var(--good); text-wrap:balance; }
  .ag-gift[hidden] { display:none; }
  .ag-gift svg { display:inline; vertical-align:-3px; margin-right:5px; }

  .ag-after { display:flex; flex-wrap:wrap; gap:6px 22px; margin:12px 2px 0; }
  .ag-after a { display:inline-flex; align-items:center; gap:4px; min-height:44px;
                font-size:14px; font-weight:600; color:var(--gold-dk); text-decoration:none; }
  .ag-note { font-size:13px; line-height:1.6; color:var(--ink-2);
             max-width:68ch; margin:0 0 14px; }
  .ag-note a { color:var(--gold-dk); }

  /* ── ratings: one strip ── */
  .ag-rv { display:flex; gap:18px; align-items:center; margin-bottom:22px; max-width:720px;
           padding:16px 20px; border:1px solid var(--line); border-radius:var(--r-card);
           background:var(--surface); }
  .ag-rv-n { flex:none; display:flex; flex-direction:column; align-items:center; gap:4px;
             padding-right:18px; border-right:1px solid var(--line-soft); }
  .ag-rv-n b { font-family:var(--font-serif); font-size:36px; font-weight:600;
               line-height:1; color:var(--ink); }
  .ag-rv-new b { font-size:22px; color:var(--gold-dk); }
  .ag-rv-t { min-width:0; display:flex; flex-direction:column; gap:4px; }
  .ag-rv-l { margin:0; font-size:15.5px; line-height:1.45; color:var(--ink-2); }
  .ag-rv-l b { color:var(--ink); font-weight:700; }
  .ag-rv-s { margin:0; font-size:13px; line-height:1.5; color:var(--ink-3); }

  /* ── the reviews themselves ── */
  .ag-revs { display:grid; gap:10px; margin-bottom:14px; max-width:72ch; }
  .ag-revs[hidden] { display:none; }
  .ag-rev { padding:14px 17px; border:1px solid var(--line);
            border-radius:var(--r-card); background:var(--surface); }
  .ag-rev header { display:flex; align-items:baseline; gap:10px;
                   flex-wrap:wrap; margin-bottom:7px; }
  .ag-rev-s { color:var(--gold-dk); font-size:13px; letter-spacing:.08em; }
  .ag-rev header b { font-size:13.5px; color:var(--ink); font-weight:650; }
  .ag-rev header i { font-style:normal; font-size:12px; color:var(--ink-3); }
  .ag-rev p { margin:0; font-size:13.5px; line-height:1.65;
              color:var(--ink-2); }

  /* ── others ── */
  .ag-others { display:grid; gap:10px; margin-bottom:14px;
               grid-template-columns:1fr; }
  @media (min-width:720px) {
    .ag-others { grid-template-columns:repeat(3,minmax(0,1fr)); }
  }
  .ag-o { display:flex; align-items:center; gap:12px; min-width:0;
          padding:12px 14px; border:1px solid var(--line);
          border-radius:var(--r-card); background:var(--surface);
          text-decoration:none; transition:border-color .12s linear; }
  .ag-o:hover { border-color:var(--gold); }
  .ag-o img, .ag-noav { width:52px; height:52px; border-radius:50%;
          object-fit:cover; flex:none; background:var(--surface-2); }
  .ag-o span { min-width:0; flex:1; }
  .ag-o b { display:block; font-size:14px; color:var(--ink);
            white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .ag-o i { display:block; font-style:normal; font-size:12px;
            color:var(--ink-3); white-space:nowrap; overflow:hidden;
            text-overflow:ellipsis; }
  .ag-o em { flex:none; font-style:normal; font-size:12.5px; font-weight:650;
             color:var(--gold-dk); }

  /* ── how it answers ── */
  .ag-k { font-family:var(--font-mono); font-size:11px; font-weight:700;
          letter-spacing:.14em; text-transform:uppercase; color:var(--ink-3);
          margin:0 0 9px; }
  .ag-how { display:grid; gap:22px; margin-bottom:30px; }
  @media (min-width:900px) {
    .ag-how2 { grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:32px; }
  }
  .ag-how-l { min-width:0; max-width:68ch; }
  .ag-how-q { margin:0 0 20px; }
  .ag-reads { margin:0 0 14px; padding:0 0 0 20px; display:grid; gap:10px; }
  .ag-reads li { font-size:14.5px; line-height:1.65; color:var(--ink-2); }
  .ag-reads li::marker { color:var(--gold-dk); font-weight:700; }
  .ag-reads b { color:var(--ink); font-weight:650; }
  .ag-sample { min-width:0; padding:16px 16px 6px; border:1px solid var(--line);
               border-radius:var(--r-card); background:var(--surface-2); }
  .ag-tx { margin-bottom:12px; }
  .ag-tx .cq-b { font-size:13.5px; line-height:1.55; padding:10px 14px; }

  /* ── the other two of its topic ── */
  .ag-nb-lede { margin-bottom:14px; }
  .ag-nbs { display:grid; gap:10px; margin-bottom:30px; grid-template-columns:1fr; }
  @media (min-width:720px) {
    .ag-nbs { grid-template-columns:repeat(2,minmax(0,1fr)); }
  }
  .ag-nb { display:block; min-width:0; padding:14px 16px; text-decoration:none;
           border:1px solid var(--line); border-radius:var(--r-card);
           background:var(--surface); transition:border-color .12s linear; }
  .ag-nb:hover { border-color:var(--gold); }
  .ag-nb:focus-visible { outline:2px solid var(--gold); outline-offset:2px; }
  .ag-nb b { display:block; font-size:15px; color:var(--ink); }
  .ag-nb i { display:block; font-style:normal; font-size:12.5px; font-weight:600;
             color:var(--gold-dk); margin-top:2px; }
  .ag-nb p { margin:8px 0 0; font-size:13.5px; line-height:1.6; color:var(--ink-2); }
  .ag-nb .ag-nb-only { font-size:13px; color:var(--ink-2); }
  .ag-nb-only em { font-style:normal; font-weight:650; color:var(--ink); }

  /* ── THE PHONE, AND IT GOES LAST ────────────────────────────────────────
     A media query adds no specificity, so a block written above the rules it
     overrides loses at equal specificity. Every one of these overrides
     something set earlier in this same file.

     THIS BODY IS ON FORTY-EIGHT PAGES. astrologer_app.py shows it inside the
     signed-in shell without copying it, so each of these is one fix on
     twenty-four public pages and twenty-four signed-in ones. */
  @media (pointer:coarse) {
    /* THE ONLY WAY BACK TO THE ROSTER, 16px TALL. It is the whole of its
       paragraph bar the full stop, so 2.5.8's exemption for a link set in
       running text does not cover it — there is no running text, just a
       sentence-shaped link. inline-flex because an inline <a> ignores
       min-height entirely. */
    .ag-note a { display:inline-flex; align-items:center;
                 min-height:var(--tap-min); }
  }

  @media (max-width:640px) {
    /* 10.5px, and the site's floor is 11. The tracking is what makes an
       eyebrow read as one, not the smallness. */
    .ag-try h2 { font-size:11px; }

    /* ── THREE CARDS IN A ROW IS WHY THESE ELLIPSISE; A PHONE SHOWS ONE ──
       .ag-others is three columns above 720px and one below it, so on a
       phone each card has the full column and the truncation buys nothing —
       it just spends it. "Advanced Spiritual Wisdom" arrived as "Advanced
       Spiri…" at 320 on every one of these pages, and the specialty is half
       of what the card is for.
       The name goes with it. A list of people is the one place a name cannot
       be an ellipsis — same rule the profile list and the support subjects
       are already held to — and these names are close enough to the width
       that a longer one would have started clipping silently. */
    .ag-o b, .ag-o i { white-space:normal; overflow:visible; }
  }

  /* The scroller belongs to the caller — it knows its own height, padding
     and ground. This is the arrangement inside it. */
  /* minmax(0,1fr), NOT the default auto track: an auto column sizes to
     max-content and .cq-b's max-width is a percentage OF that track, so one
     long reply widened the column past the viewport and carried the header
     and the close button off the right edge with it. */
  .cq-tx { display:grid; grid-template-columns:minmax(0,1fr); gap:14px;
           justify-items:start; align-content:start; }
  .cq-b { max-width:min(680px,88%); padding:12px 16px; border-radius:16px;
          font-size:14px; line-height:1.62; border:1px solid var(--line);
          background:var(--surface); color:var(--ink);
          /* An order id, a URL or a pasted token has nowhere to break, and
             one of them widens the bubble until the layout gives. */
          overflow-wrap:break-word; }
  /* The account's own words, on the right, the way every chat client has
     done it for twenty years. Anything else reads as the astrologer talking. */
  .cq-b-me { justify-self:end; background:var(--gold-bg);
             border-color:var(--gold-lt); }
  .cq-b s { display:block; text-decoration:none; margin-bottom:5px;
            font-family:var(--font-mono); font-size:9.5px; letter-spacing:.1em;
            text-transform:uppercase; color:var(--ink-3); }
  /* The account's bubbles are plain text, so their paragraphs never get the
     tightening MARKDOWN_CSS gives the astrologer's, and would otherwise
     carry the browser's 1em top and bottom inside a 12px box. */
  .cq-b p { margin:0 0 9px; }
  .cq-b p:last-child { margin-bottom:0; }
  .cq-b audio { display:block; width:100%; max-width:320px; margin-top:9px; }

/* ── the small offer (strip) ───────────────────────────── */
/* Its own section adds no padding: between two padded sections it stacked
   to 88px above and 106 below (Rohit, 27 Sep 2026: "too much space"). */
section.l-sec.of-strip-sec { padding-top:0; padding-bottom:0; }
/* ...except above a tinted band, which would start flush under the strip. */
section.l-sec.of-strip-sec:has(+ .l-alt) { padding-bottom:38px; }
.of-strip { display:grid; grid-template-columns:auto 1fr; gap:12px 14px; align-items:center;
            padding:14px 16px; border-radius:var(--r-card); border:1px solid var(--gold-lt);
            background:var(--surface); }
@media (min-width:760px) { .of-strip { grid-template-columns:auto 1fr auto; } }
.of-strip-who { display:block; line-height:0; }
.of-strip .of-ph { width:48px; height:48px; border-radius:50%; object-fit:cover;
                   border:2px solid var(--gold-lt); }
.of-strip-t { display:flex; flex-direction:column; gap:2px; min-width:0; }
.of-strip-t b { font-size:16px; color:var(--ink); }
.of-strip-t span { font-size:14.5px; line-height:1.5; color:var(--ink-2); }
.of-strip-b { display:flex; gap:8px; flex-wrap:wrap; grid-column:1 / -1; }
@media (min-width:760px) { .of-strip-b { grid-column:auto; } }
.of-strip-b .c-btn { gap:7px; flex:1 1 150px; justify-content:center; white-space:nowrap; }
@media (min-width:760px) { .of-strip-b .c-btn { flex:0 0 auto; } }
.of-strip-b .c-as-rate { font-weight:600; opacity:.85; }
/* The WhatsApp Channel's strip: its own mark on WhatsApp's green, where the
   astrologer's face sits on the offer strip. */
.of-wa { display:grid; place-items:center; width:48px; height:48px; border-radius:50%;
         background:#1f8a4c; color:#fff; }
.of-wa .c-bnd { fill:currentColor; }
.of-follow .c-btn .c-bnd { width:16px; height:16px; fill:currentColor; }
/* ── the ask panel ─────────────────────────────────────── */
.of-ask { display:grid; gap:18px; padding:22px; border-radius:var(--r-card);
          border:1px solid var(--gold-lt);
          background:radial-gradient(120% 140% at 100% 0%, var(--gold-bg) 0%, transparent 62%),
                     var(--surface); }
@media (min-width:860px) {
  .of-ask { grid-template-columns:230px minmax(0,1fr); gap:30px; padding:28px 32px; } }
.of-ask > * { min-width:0; }
.of-who { display:flex; gap:13px; align-items:center; text-decoration:none; color:var(--ink);
          align-self:start; }
@media (min-width:860px) { .of-who { flex-direction:column; align-items:flex-start; } }
.of-who .of-ph { width:64px; height:64px; border-radius:50%; object-fit:cover; flex:none;
                 border:2px solid var(--gold-lt); }
.of-who-t { display:flex; flex-direction:column; gap:2px; min-width:0; }
.of-who-t b { font-size:16px; }
.of-who-t i { font-style:normal; font-size:13px; color:var(--ink-2); }
.of-who-t em { font-style:normal; font-size:12.5px; color:var(--ink-3);
               display:flex; align-items:center; gap:5px; flex-wrap:wrap; }
.of-t { font-family:var(--font-serif); font-size:clamp(20px,3.2vw,25px); line-height:1.2;
        letter-spacing:-.015em; font-weight:600; margin:0 0 8px; text-wrap:balance; }
.of-d { margin:0 0 16px; color:var(--ink-2); font-size:var(--text-md); line-height:1.6;
        max-width:62ch; }
.of-lbl { margin:0 0 9px; font-size:12.5px; font-weight:650; color:var(--ink-3); }
.of-qs { display:flex; flex-direction:column; gap:8px; margin-bottom:18px; }
.of-q { display:flex; align-items:flex-start; gap:10px; padding:11px 14px; min-height:44px;
        border-radius:12px; border:1px solid var(--line); background:var(--surface);
        color:var(--ink); text-decoration:none; font-size:14.5px; line-height:1.45; }
.of-q svg { flex:none; margin-top:2px; color:var(--gold-dk); }
.of-q:hover { border-color:var(--gold); background:var(--gold-bg); }
.of-buy { display:flex; flex-wrap:wrap; gap:10px; }
.of-buy .c-btn { flex:1 1 170px; justify-content:center; gap:8px; }
.of-buy .c-as-rate { font-weight:700; }
.of-buy .c-as-rate::before { content:'\00b7'; margin-right:7px; opacity:.6; }
.of-gift { display:flex; gap:8px; align-items:flex-start; margin:14px 0 0; font-size:13.5px;
           color:var(--ink-2); line-height:1.5; text-wrap:balance; }
.of-gift[hidden] { display:none; }
.of-gift svg { flex:none; margin-top:2px; color:var(--gold-dk); }

/* ── reports ───────────────────────────────────────────── */
.of-rp { display:grid; gap:12px; }
@media (min-width:900px) { .of-rp { grid-template-columns:repeat(2,minmax(0,1fr)); } }

/* ── the phone bar ─────────────────────────────────────── */
.of-stk, .of-stk-sp { display:none; }
@media (max-width:819px) {
  .of-stk { display:block; position:fixed; left:0; right:0; bottom:0; z-index:40;
            padding:9px 12px calc(9px + env(safe-area-inset-bottom));
            background:var(--surface); border-top:1px solid var(--line);
            box-shadow:0 -8px 24px rgba(0,0,0,.08);
            transform:translateY(110%); transition:transform .25s ease; }
  .of-stk.on { transform:none; }
  .of-stk-sp { display:block; height:76px; }
}
@media (prefers-reduced-motion:reduce) { .of-stk { transition:none; } }
.of-stk-a { display:flex; align-items:center; gap:11px; text-decoration:none; color:var(--ink); }
.of-stk-a .of-ph { width:38px; height:38px; border-radius:50%; object-fit:cover; flex:none; }
.of-stk-t { display:flex; flex-direction:column; min-width:0; flex:1; line-height:1.3; }
.of-stk-t b { font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.of-stk-t i { font-style:normal; font-size:12.5px; color:var(--ink-3); white-space:nowrap;
              overflow:hidden; text-overflow:ellipsis; }
.of-stk-a .c-btn { flex:none; }

  /* The wrapper t() puts round each Hindi string: no box, the parent's type. */
  :root .l-hi { display:contents; font:inherit; color:inherit; }
  /* The same Hindi rules as the signed-in pages (CSS above): matras need the
     taller line; under 15px goes up by 2, never past 15; no tracking, caps
     or slant, which pull a conjunct apart. */
  :root[lang^="hi"] body { line-height:1.6; }
  /* HEADINGS TOO. The display headings are set at ~1.1 for Latin, and in
     Devanagari that let one line's lower matra meet the next line's upper
     one: the ू of लो शू ग्रिड ran into the ी of "आपकी जन्म तिथि से". */
  :root[lang^="hi"] :is(h1, h2, h3) { line-height:1.32; }
  /* NO TRACKING ANYWHERE ON A HINDI PAGE. Eyebrows, field labels, the
     "example" tag and section heads are letter-spaced for Latin capitals;
     in Devanagari the spacing splits a word at its conjuncts ("मु फ़्त").
     One rule, and it wins, rather than a list that misses the next label. */
  :root[lang^="hi"] body * { letter-spacing:0 !important; }
  :root[lang^="hi"] .l-hi {
    font-size:max(1em, min(calc(1em + 2px), 15px));
    letter-spacing:0; text-transform:none; font-style:normal; }
  :root[lang^="hi"] .l-hi .l-hi { font-size:1em; }
  /* AND NOT MONO. The small labels are set in the mono face for English;
     Devanagari in it reads as a typewriter. On a Hindi page the mono face
     is the sans. */
  :root[lang^="hi"] { --font-mono:var(--font-sans); }
  /* AND A DEVANAGARI FACE IN THE SERIF. The serif stack names Latin faces
     only, so a Hindi heading fell through to whatever the system had: on a
     Mac that is Devanagari MT, which sets पें apart from the next letter
     ("पें टाकल्स", /hi/tarot/ card names). The Latin in a heading keeps the
     serif; the Devanagari gets the face the body text already uses. */
  :root[lang^="hi"] { --font-serif:"Iowan Old Style","Palatino Linotype",Palatino,"Book Antiqua",Georgia,
    "Kohinoor Devanagari","Nirmala UI","Noto Serif Devanagari","Noto Sans Devanagari",serif; }
  /* THE SHARED PARTS THAT CARRY HINDI WITHOUT t(): the header and drawer
     (common.chrome writes them in Hindi), the pickers, the report cards,
     the astrologer rate, the notes and the footer. The .l-hi rule above
     never reached them, so a /hi/ page had 9.5-13.5px Devanagari and tracked
     capitals in its menu (review, 28 Sep 2026: measured against the English
     twin, class by class). Each is its English size +2, never past 15. */
  :root[lang^="hi"] .c-nav-i, :root[lang^="hi"] .c-nav-px b,
  :root[lang^="hi"] .c-dd-i, :root[lang^="hi"] .c-pf-done, :root[lang^="hi"] .c-unknown,
  :root[lang^="hi"] .c-btn .c-as-rate, :root[lang^="hi"] .rv-btn,
  :root[lang^="hi"] .c-nav-mi, :root[lang^="hi"] .c-nav-mm,
  :root[lang^="hi"] .rv-c-d { font-size:15px; }
  :root[lang^="hi"] .c-nav-px i, :root[lang^="hi"] .c-note,
  :root[lang^="hi"] .c-as-rate { font-size:14.5px; }
  :root[lang^="hi"] .rv-c-m, :root[lang^="hi"] .p-hb-k,
  :root[lang^="hi"] .p-hb-k > * { font-size:14px; }
  :root[lang^="hi"] .c-drawer-h > *, :root[lang^="hi"] .c-drawer-h, :root[lang^="hi"] .c-dp-wd,
  :root[lang^="hi"] .c-nav-mh, :root[lang^="hi"] .c-field label {
    letter-spacing:0; text-transform:none; font-family:var(--font-sans); }
  :root[lang^="hi"] .c-drawer-h, :root[lang^="hi"] .c-drawer-h > * { font-size:13px; }
  :root[lang^="hi"] .c-dp-wd { font-size:11px; }
  :root[lang^="hi"] .c-nav-mh { font-size:11.5px; }