/* v2 shell (docs/planning/v2-design-2026-11-04.md). Tokens from shell.css; three type sizes (28 / 17 / 13),
   one card style, a fixed-height navy band per surface, 44 px targets, motion only as spec §5 allows and
   none under prefers-reduced-motion. Component sections (prefixed v2-<module>-) follow the shell. */
@font-face{font-family:Fraunces;src:url(/web/fonts/fraunces-latin.woff2) format("woff2");font-weight:500 600;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Inter;src:url(/web/fonts/inter-latin.woff2) format("woff2");font-weight:400 600;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Noto Sans Devanagari";src:url(/web/fonts/noto-sans-devanagari.woff2) format("woff2");font-weight:400 600;font-style:normal;font-display:swap;unicode-range:U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF}
@font-face{font-family:"Tiro Devanagari Hindi";src:url(/web/fonts/tiro-devanagari-hindi.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF}

:root{
  --sky:#0F1B2D;--sky-2:#1D3150;--sky-muted:#C9C3B5;--paper:#FAF7F0;--card:#FFFFFF;--ink:#1B2433;--muted:#5B6474;
  --teal:#1E5A52;--teal-soft:#E7EFEC;--saffron:#9C4518;--gold:#E8A33D;--line:#E6DFD0;--soft:#F3EEE3;--radius:20px;
  --fs-h:28px;--fs-b:17px;--fs-c:13px;
  --sans:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--serif:Fraunces,Georgia,serif;
  --col:640px;--gutter:16px;--top-h:56px;--tabs-h:64px;
}
:lang(hi){--sans:"Noto Sans Devanagari",Inter,sans-serif;--serif:"Tiro Devanagari Hindi","Noto Sans Devanagari",Fraunces,serif}
*{box-sizing:border-box}
html{background:var(--paper);overflow-x:hidden;-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;background:var(--paper);color:var(--ink);font:400 var(--fs-b)/1.45 var(--sans);overflow-x:hidden;padding-bottom:calc(var(--tabs-h) + env(safe-area-inset-bottom,0px))}
:lang(hi) body{line-height:1.6}
img,svg{max-width:100%}
a{color:inherit}
p{margin:0}
h1,h2,h3{margin:0;font-family:var(--serif);font-weight:600}
h1{font-size:var(--fs-h);line-height:1.15;letter-spacing:-.01em}
h2,h3{font-size:var(--fs-b);line-height:1.3}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
button,a,input,select,summary,textarea{touch-action:manipulation}
[hidden]{display:none!important}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
:is(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline:3px solid var(--focus,var(--teal));outline-offset:2px;border-radius:6px}
.v2-band,.v2-sheet .on-navy{--focus:var(--gold)}
.v2-skip{position:fixed;left:16px;top:-80px;z-index:60;background:var(--card);padding:12px 16px;border-radius:12px}
.v2-skip:focus-visible{top:8px}

/* shared pieces (contract): one card style, three type sizes */
.cap{font-size:var(--fs-c);line-height:1.4;color:var(--muted)}
.eyebrow{font-size:var(--fs-c);font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--saffron);margin:0 0 8px}
:lang(hi) .eyebrow{letter-spacing:0;text-transform:none}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px}
.btn,.btn-gold,.btn-quiet{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:52px;padding:0 22px;border-radius:26px;border:0;font:600 var(--fs-b) var(--sans);text-decoration:none;text-align:center}
.btn{background:var(--sky);color:var(--paper)}
.btn-gold{background:var(--gold);color:var(--sky)}
.btn-quiet{background:transparent;color:var(--ink);border:1.5px solid var(--line);min-height:44px;font-size:var(--fs-c);padding:0 16px;border-radius:22px}
.btn[disabled],.btn-gold[disabled],.btn-quiet[disabled],.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed}
.btn.wide,.btn-gold.wide{display:flex;width:100%}
.chip{display:inline-flex;align-items:center;min-height:44px;padding:0 16px;border-radius:22px;border:1px solid var(--line);background:var(--soft);color:var(--ink);font-size:var(--fs-c);white-space:nowrap;text-decoration:none}
.chip[aria-pressed=true]{background:var(--sky);border-color:var(--sky);color:var(--paper)}
.link{display:inline-flex;align-items:center;min-height:44px;font-size:var(--fs-c);font-weight:600;text-decoration:underline;text-underline-offset:3px;background:none;border:0;padding:0;color:var(--ink)}
.pill-good,.pill-easy{display:inline-block;padding:8px 14px;border-radius:18px;font-size:var(--fs-c);line-height:1.35}
.pill-good{background:var(--teal-soft);color:var(--teal)}
.pill-easy{background:var(--soft);color:var(--ink)}
.pill-good b,.pill-easy b{font-weight:600}
.v2-pill{display:inline-flex;align-items:center;min-height:28px;padding:4px 12px;border-radius:14px;background:var(--teal-soft);color:var(--teal);font-size:var(--fs-c);font-weight:600}
input[type=text],input[type=search],input[type=date],input[type=time],textarea,select{width:100%;min-height:50px;padding:12px 14px;border:1.5px solid var(--line);border-radius:12px;background:var(--card);font-size:var(--fs-b)}
textarea{resize:vertical;line-height:1.4}
label.v2-label{display:block;font-size:var(--fs-c);color:var(--muted);margin-bottom:6px}
.v2-section{padding:22px var(--gutter) 0}
.v2-section > * + *{margin-top:12px}
.v2-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.v2-scroll-row{display:flex;gap:8px;overflow-x:auto;margin:0 calc(-1 * var(--gutter));padding:2px var(--gutter) 4px;scrollbar-width:none}
.v2-scroll-row::-webkit-scrollbar{display:none}
.v2-error{margin:16px var(--gutter);padding:12px 16px;border-radius:14px;background:var(--soft);font-size:var(--fs-c)}
.v2-loading{padding:22px var(--gutter);color:var(--muted);font-size:var(--fs-c)}
.v2-empty{padding:16px;border-radius:var(--radius);background:var(--soft)}

/* top bar */
.v2-top{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:10px;height:var(--top-h);padding:0 var(--gutter);background:var(--paper);border-bottom:1px solid var(--line)}
.v2-brand{display:flex;align-items:center;gap:8px;min-height:44px;font:600 var(--fs-b) var(--serif);text-decoration:none;color:var(--ink)}
.v2-brand img{border-radius:7px}
.v2-sp{flex:1}
.v2-topnav{display:none}
.v2-lang{min-width:44px;height:44px;border-radius:22px;border:1px solid var(--line);background:var(--card);font:500 var(--fs-b) "Noto Sans Devanagari",var(--sans)}
.v2-lang:lang(en){font-family:var(--sans);font-size:var(--fs-c);font-weight:600}
.v2-signin{min-height:44px;padding:0 16px;border-radius:22px;border:1px solid var(--ink);background:transparent;font-size:var(--fs-c);font-weight:600}
.v2-me{width:44px;height:44px;border-radius:50%;background:var(--sky);color:var(--paper);display:grid;place-items:center;font:600 var(--fs-b) var(--serif);text-decoration:none}

/* launch strip: one 13 px line under the top bar */
.v2-strip{display:flex;align-items:center;gap:8px;min-height:44px;padding:0 var(--gutter);background:var(--soft);border-bottom:1px solid var(--line);font-size:var(--fs-c)}
.v2-strip .v2-strip-line{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v2-strip button{background:none;border:0;padding:0;font-weight:600;text-decoration:underline;text-underline-offset:2px;min-height:44px}
.v2-strip .v2-strip-x{width:44px;text-decoration:none;color:var(--muted);font-size:var(--fs-b)}

/* main column */
main{display:block;max-width:var(--col);margin:0 auto;outline:none}
.v2-surface{padding-bottom:8px}

/* the navy band: a fixed height per surface, so arriving data never moves the page */
.v2-band{background:linear-gradient(180deg,var(--sky) 0%,var(--sky-2) 100%);color:var(--paper);padding:24px var(--gutter) 18px}
.v2-band .eyebrow{color:var(--gold)}
.v2-band .cap,.v2-band .v2-sub{color:var(--sky-muted)}
.v2-band .v2-sub{margin-top:10px}
.v2-band-today{min-height:470px}
.v2-band-chart{min-height:300px}
.v2-band-home{min-height:560px}

/* footer and tabs */
.v2-foot{max-width:var(--col);margin:36px auto 0;padding:20px var(--gutter) 24px;border-top:1px solid var(--line);font-size:var(--fs-c);color:var(--muted)}
.v2-foot-links{display:flex;flex-wrap:wrap;column-gap:20px;align-items:center}
.v2-foot-links a,.v2-foot-links span{display:inline-flex;align-items:center;min-height:44px;text-decoration:none}
.v2-foot > .cap{margin:4px 0}
.v2-foot summary{min-height:44px;display:flex;align-items:center;cursor:pointer;list-style:none}
.v2-foot summary::-webkit-details-marker{display:none}
.v2-tabs{position:fixed;left:0;right:0;bottom:0;z-index:30;height:calc(var(--tabs-h) + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);display:grid;grid-template-columns:repeat(4,1fr);background:var(--card);border-top:1px solid var(--line)}
.v2-tabs a,.v2-tabs button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:var(--fs-c);color:var(--muted);text-decoration:none;background:none;border:0}
.v2-tabs [aria-current=page]{color:var(--sky);font-weight:600}

/* the sheet: bottom sheet on a phone, a centred card on a laptop */
.v2-dim{position:fixed;inset:0;z-index:40;background:rgba(15,27,45,.55)}
.v2-sheet{position:fixed;z-index:41;left:0;right:0;bottom:0;max-height:88vh;overflow:auto;background:var(--card);border-radius:24px 24px 0 0;padding:10px var(--gutter) calc(24px + env(safe-area-inset-bottom,0px));box-shadow:0 -10px 30px rgba(0,0,0,.18);outline:none}
.v2-sheet .v2-grab{width:40px;height:4px;border-radius:2px;background:var(--line);margin:0 auto 14px}
.v2-sheet-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.v2-sheet-head h2{flex:1}
.v2-x{width:44px;height:44px;border-radius:22px;border:0;background:var(--soft);font-size:var(--fs-b);line-height:1}
.v2-sheet > * + *{margin-top:12px}
.v2-sheet .v2-grab + *{margin-top:0}
@media (prefers-reduced-motion:no-preference){.v2-sheet{animation:v2-sheet-in .18s ease-out 1}@keyframes v2-sheet-in{from{transform:translateY(24px);opacity:.6}to{transform:none;opacity:1}}}

/* menu rows */
.v2-menu{list-style:none;margin:0;padding:0}
.v2-menu li + li{border-top:1px solid var(--line)}
.v2-menu a,.v2-menu button{display:flex;flex-direction:column;justify-content:center;width:100%;min-height:56px;padding:6px 0;text-align:left;text-decoration:none;background:none;border:0;font-size:var(--fs-b)}
.v2-menu .cap{display:block}

/* forms (home, birth sheet, place sheet) */
.v2-form{display:grid;gap:14px}
.v2-field-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.v2-band .v2-label{color:var(--sky-muted)}
.v2-band input:not([type=range]):not([type=checkbox]){background:var(--paper);border-color:transparent}
.v2-band .link{color:var(--paper)}
.v2-place{position:relative}
.v2-place-list{list-style:none;margin:6px 0 0;padding:0;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;color:var(--ink)}
.v2-place-list button{display:block;width:100%;min-height:44px;padding:10px 14px;text-align:left;background:none;border:0;font-size:var(--fs-c)}
.v2-place-list li + li{border-top:1px solid var(--line)}
.v2-place-list button[aria-selected=true],.v2-place-list button:hover{background:var(--soft)}
.v2-check{display:flex;align-items:center;gap:10px;min-height:44px;font-size:var(--fs-c)}
.v2-check input{width:22px;height:22px;min-height:0;margin:0}
.v2-band .v2-form{margin-top:22px}
.v2-band .v2-check,.v2-band [role=alert]{color:var(--paper)}
.v2-band [data-role=nolagna]{margin-top:6px}
.v2-free{font-size:var(--fs-c);color:var(--sky-muted);text-align:center;margin-top:12px}

/* home */
.v2-tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.v2-tile{display:flex;flex-direction:column;gap:6px;min-height:104px;padding:14px 12px;text-decoration:none}
.v2-tile svg{color:var(--sky)}
.v2-trust{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.v2-trust li{display:flex;gap:10px;align-items:flex-start}
.v2-trust svg{flex:none;margin-top:3px;color:var(--teal)}

/* today */
.v2-today-ctx{color:var(--sky-muted);margin-top:10px;font-size:var(--fs-c)}
.v2-lucky{display:flex;align-items:center;gap:10px}
.v2-lucky .v2-dot{width:14px;height:14px;border-radius:50%;border:1px solid var(--line)}
.v2-next1{padding:12px 16px;border-radius:14px;background:var(--soft);font-size:var(--fs-c)}
.v2-askrow{display:flex;gap:8px;align-items:flex-end}
.v2-askrow textarea,.v2-askrow input{flex:1;min-height:48px;border-radius:14px;background:var(--paper)}
.v2-send{flex:none;width:48px;height:48px;border-radius:50%;background:var(--sky);color:var(--paper);display:grid;place-items:center;border:0}
.v2-send[disabled]{opacity:.45}
.v2-more{margin:22px var(--gutter) 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.v2-more > summary{list-style:none;min-height:56px;display:flex;align-items:center;justify-content:space-between;font-weight:600;cursor:pointer}
.v2-more > summary::-webkit-details-marker{display:none}
.v2-more[open] > summary span{transform:rotate(90deg)}
.v2-table{width:100%;border-collapse:collapse;font-size:var(--fs-c)}
.v2-table th,.v2-table td{text-align:left;padding:8px 8px 8px 0;border-bottom:1px solid var(--line);vertical-align:top}
.v2-table th{font-weight:600;color:var(--muted)}
.v2-place-line{display:flex;align-items:center;gap:6px;font-size:var(--fs-c);color:var(--sky-muted)}
.v2-place-line button{color:var(--paper);background:none;border:0;text-decoration:underline;min-height:44px;padding:0 4px;font-size:var(--fs-c)}

/* chart */
.v2-person{display:flex;align-items:center;gap:8px;min-height:44px;padding:0 var(--gutter);background:var(--soft);border-bottom:1px solid var(--line);font-size:var(--fs-c)}
.v2-person span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v2-person a,.v2-person button{display:inline-flex;align-items:center;font-weight:600;text-decoration:underline;background:none;border:0;padding:0;min-height:44px;font-size:var(--fs-c)}
.v2-facts{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.v2-fact{padding:7px 12px;border-radius:16px;border:1px solid rgba(201,195,181,.35);color:var(--sky-muted);font-size:var(--fs-c)}
.v2-fact b{color:var(--paper);font-weight:600}
.v2-tabbar{display:flex;gap:20px;margin:26px var(--gutter) 0;border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
.v2-tabbar::-webkit-scrollbar{display:none}
.v2-tabbar button{flex:none;min-height:44px;padding:0 0 6px;background:none;border:0;color:var(--muted);font-size:var(--fs-b);white-space:nowrap}
.v2-tabbar button[aria-selected=true]{color:var(--sky);font-weight:600;box-shadow:inset 0 -3px 0 var(--sky)}
.v2-chapters,.v2-areas-list{display:grid;gap:12px}
.v2-chap{display:grid;grid-template-columns:30px 1fr;column-gap:10px}
.v2-num{width:30px;height:30px;border-radius:50%;border:1.5px solid var(--saffron);color:var(--saffron);display:grid;place-items:center;font:600 var(--fs-b) var(--serif)}
.v2-chap h2{align-self:center}
.v2-chap > p,.v2-chap > .v2-chap-more,.v2-chap > .v2-foot-row{grid-column:1/-1}
.v2-chap > p{margin-top:8px}
.v2-foot-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px}
.v2-cite{display:inline-flex;align-items:center;font-size:var(--fs-c);font-weight:600;padding:4px 10px;border-radius:12px;background:var(--soft);border:1px solid var(--line)}
.v2-chap-more{margin-top:8px;display:grid;gap:12px}
.v2-chap-more h3{margin-top:4px}
.v2-why summary{font-size:var(--fs-c);font-weight:600;min-height:44px;display:flex;align-items:center;cursor:pointer}
.v2-area{display:grid;grid-template-columns:1fr auto;align-items:baseline;column-gap:10px;padding:14px 16px}
.v2-area > p,.v2-area > .v2-area-more{grid-column:1/-1}
.v2-area > p{margin-top:2px}
.v2-area-more{display:grid;gap:8px;margin-top:8px}
.v2-chip-note{display:inline-block;font-size:var(--fs-c);padding:4px 10px;border-radius:12px;background:var(--soft)}
.v2-sub-rows{display:grid;gap:10px}
.v2-sub-row{padding:12px 14px;border-radius:14px;border:1px solid var(--line);background:var(--card)}
.v2-sub-row[aria-current=true]{border:2px solid var(--sky)}
.v2-sub-row h3{display:flex;justify-content:space-between;gap:8px}

/* ask */
.v2-ask-head{padding:16px var(--gutter) 0}
.v2-about{font-size:var(--fs-c);color:var(--muted);margin-top:8px;display:flex;flex-wrap:wrap;align-items:center;gap:4px}
.v2-about button{font-weight:600;text-decoration:underline;color:var(--ink);background:none;border:0;padding:0 4px;min-height:44px;font-size:var(--fs-c)}
.v2-qbox{margin-top:12px;min-height:96px;border-radius:16px}
.v2-qbox:focus{border-color:var(--sky)}
.v2-who{font:600 var(--fs-b) var(--serif);margin:16px 0 8px}
.v2-pick{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.v2-opt{position:relative;text-align:left;background:var(--card);border:1.5px solid var(--line);border-radius:16px;padding:12px;display:grid;grid-template-columns:34px 1fr;column-gap:8px;row-gap:6px;align-items:center;align-content:start;min-height:104px}
.v2-opt .cap{grid-column:1/-1}
.v2-opt[aria-pressed=true]{border:2px solid var(--sky);padding:11.5px}
.v2-opt b{font:600 var(--fs-b) var(--serif)}
.v2-opt .v2-tick{position:absolute;top:-8px;right:-8px}
.v2-opt:not([aria-pressed=true]) .v2-tick{display:none}
.v2-suggest{grid-column:1/-1;justify-self:start;font-size:var(--fs-c);font-weight:600;color:var(--teal)}
.v2-av{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font:600 var(--fs-b) var(--serif)}
.v2-av.p{background:var(--sky);color:var(--paper)}
.v2-av.a{background:var(--card);color:var(--saffron);border:2px solid var(--saffron)}
.v2-fine{font-size:var(--fs-c);color:var(--muted);text-align:center;margin-top:10px}
.v2-boundary{margin-top:10px;display:grid;gap:4px;font-size:var(--fs-c);color:var(--ink);padding:10px 14px;border-radius:14px;background:var(--soft)}
.v2-ask-links{display:flex;justify-content:center;gap:20px;flex-wrap:wrap}
.v2-sample{display:grid;gap:10px}
.v2-sample .v2-q{margin-left:auto;max-width:85%;background:var(--teal);color:#fff;padding:10px 14px;border-radius:18px 18px 4px 18px}

/* account */
.v2-acc-list{list-style:none;margin:0;padding:0}
.v2-acc-list li{padding:12px 0;border-top:1px solid var(--line);display:grid;gap:2px}
.v2-acc-list li:first-child{border-top:0}
.v2-acc-list a{text-decoration:none}
.v2-acc-row{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.v2-acc-list details summary{font-size:var(--fs-c);color:var(--muted);cursor:pointer;min-height:32px;display:flex;align-items:center}

/* laptop: the same column at 640 px, the four words in the top bar, the chart beside the reading */
@media (min-width:768px){
  body{padding-bottom:0}
  .v2-tabs{display:none}
  .v2-topnav{display:flex;align-items:center;gap:4px;margin-left:20px}
  .v2-topnav a,.v2-topnav button{min-height:44px;padding:0 12px;display:inline-flex;align-items:center;text-decoration:none;background:none;border:0;font-size:var(--fs-b);color:var(--muted);border-radius:22px}
  .v2-topnav [aria-current=page]{color:var(--sky);font-weight:600}
  .v2-top,.v2-strip{padding:0 max(var(--gutter),calc(50vw - 560px))}
  .v2-sheet{left:50%;right:auto;bottom:auto;top:50%;transform:translate(-50%,-50%);width:min(480px,calc(100vw - 32px));border-radius:24px;padding:16px 24px 24px}
  .v2-sheet .v2-grab{display:none}
  @media (prefers-reduced-motion:no-preference){.v2-sheet{animation:none}}
  main{margin-top:16px}
  .v2-band{border-radius:var(--radius)}
}
@media (min-width:1100px){
  main.v2-wide{max-width:1120px}
  .v2-chart-grid{display:grid;grid-template-columns:440px minmax(0,1fr);gap:24px;align-items:start}
  .v2-chart-grid > .v2-chart-aside{position:sticky;top:calc(var(--top-h) + 16px)}
}

/* motion: nothing animates under reduce (spec §5); components add their own rules too */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important;scroll-behavior:auto!important}
}

/* kundli-chart.js drawing (the v1 rules from styles.css, so v2 needs no v1 stylesheet) */
.kundli-chart{width:100%;max-width:360px;height:auto;display:block;margin:0 auto}
.kc-frame{fill:#FFFDF8;stroke:var(--ink);stroke-width:1.5}
.kc-line{stroke:var(--ink);fill:none;stroke-width:1}
.kc-cell{fill:none;stroke:var(--ink);stroke-width:1}
.kc-asc{fill:#F6EBDD}
.kc-rule{fill:none;stroke:var(--ink);stroke-width:.6}
.kc-script-deva text.kc-planet,.kc-script-deva text.kc-transit{font-family:"Noto Sans Devanagari","Tiro Devanagari Hindi",var(--sans)}
.kc-rising{font:600 9px var(--sans);letter-spacing:.12em;fill:var(--saffron)}
.kc-sign{font:10px var(--sans);fill:var(--muted)}
.kc-planet{font:600 12px var(--sans);fill:var(--ink)}
.kc-planet.kc-small{font:600 10px var(--sans)}
.kc-p{cursor:default}
.kc-deg{font:9px var(--sans);fill:var(--muted);opacity:0}
.kc-deg-bg{fill:#FFFDF8;stroke:var(--line);stroke-width:.5;opacity:0;pointer-events:none}
.kc-title{font:600 14px var(--sans);fill:var(--muted)}
.kc-transit{font:600 11px var(--sans);fill:#C0601F}

/* ---- dayarc ---- */
/* dayarc.js: sits on the navy band (text --sky-muted / --paper, Abhijit gold). No transition and no animation: the sun moves in JS once a minute (M3). */
.v2-dayarc-svg { display: block; width: 100%; max-width: 420px; height: auto; margin: 0 auto; overflow: visible; }
.v2-dayarc-svg .v2-dayarc-t { font: 400 13px var(--sans); fill: var(--sky-muted); }
.v2-dayarc-svg .v2-dayarc-now { fill: var(--paper); }
.v2-dayarc-svg .v2-dayarc-label-gold { fill: var(--gold); font-weight: 600; }
.v2-dayarc-base { stroke: var(--sky-muted); stroke-opacity: .25; fill: none; }
.v2-dayarc-track { stroke: var(--sky-muted); stroke-opacity: .35; stroke-width: 2; fill: none; }
.v2-dayarc-win { fill: none; stroke-width: 9; stroke-linecap: butt; }
.v2-dayarc-grey { stroke: var(--sky-muted); stroke-opacity: .7; }
.v2-dayarc-gold { stroke: var(--gold); }
.v2-dayarc-lead { stroke: var(--sky-muted); stroke-opacity: .5; stroke-width: 1; }
.v2-dayarc-sun { fill: var(--gold); }
.v2-dayarc-ring { fill: none; stroke: var(--gold); stroke-opacity: .45; }
.v2-dayarc-legend { margin: 8px 0 0; color: var(--sky-muted); }

/* ---- breath ---- */
/* breath.js (M9): when the card opens, one inhale-exhale on the strokes of the side in use (about 4 s, iteration 1), then still. A tap replays it. No loop; no motion under reduced motion. */
.v2-breath { display: block; }
.v2-breath .v2-breath-fig { display: block; width: 100%; max-width: 240px; min-height: 44px; margin: 4px auto 8px; padding: 0; border: 0; background: transparent; cursor: pointer; border-radius: var(--radius); }
.v2-breath .v2-breath-fig:focus-visible { outline: 2px solid var(--sky); outline-offset: 2px; }
.v2-breath-svg { display: block; width: 100%; height: auto; }
.v2-breath-nostril { fill: var(--soft); stroke: var(--line); stroke-width: 1.5; }
.v2-breath-nostril.v2-breath-on { fill: var(--soft); stroke: var(--sky); stroke-width: 2; }
.v2-breath-svg .v2-breath-side { font: 400 13px var(--sans); fill: var(--muted); }
.v2-breath-svg .v2-breath-side-on { fill: var(--ink); font-weight: 600; }
.v2-breath-sun circle { fill: var(--gold); }
.v2-breath-sun line { stroke: var(--gold); stroke-width: 1.8; stroke-linecap: round; }
.v2-breath-moon { fill: var(--muted); fill-opacity: .55; }
.v2-breath-stroke { fill: none; stroke: var(--sky); stroke-width: 1.6; stroke-linecap: round; opacity: .9; }
.v2-breath-stroke-2 { opacity: .7; }
.v2-breath-stroke-3 { opacity: .5; }

/* one breath: in (strokes rise and the nostril opens a little), out (they settle). Plays once. */
.v2-breath-play .v2-breath-stroke { animation: v2-breath-rise 4s ease-in-out 1 both; }
.v2-breath-play .v2-breath-stroke-2 { animation-delay: .15s; }
.v2-breath-play .v2-breath-stroke-3 { animation-delay: .3s; }
.v2-breath-play .v2-breath-on { transform-box: fill-box; transform-origin: center; animation: v2-breath-open 4s ease-in-out 1 both; }
@keyframes v2-breath-rise {
  0% { transform: translateY(8px); opacity: 0; }
  45% { transform: translateY(-4px); opacity: 1; }
  100% { transform: translateY(0); }
}
@keyframes v2-breath-open {
  0% { transform: scale(1); }
  45% { transform: scale(1.1, 1.15); }
  100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .v2-breath-play .v2-breath-stroke, .v2-breath-play .v2-breath-on { animation: none; }
}

.v2-breath-lead { margin: 4px 0 4px; text-align: center; }
.v2-breath-second { margin: 0 0 8px; text-align: center; }
.v2-breath-tomorrow { margin: 0 0 8px; text-align: center; }
.v2-breath-why { border-top: 1px solid var(--line); }
.v2-breath-why summary { display: flex; align-items: center; min-height: 44px; cursor: pointer; font-size: 13px; text-decoration: underline; color: var(--ink); }
.v2-breath-body p { margin: 0 0 8px; }
.v2-breath-steps { margin: 0 0 8px; padding-left: 20px; }
.v2-breath-steps li { margin-bottom: 6px; }

/* ---- lifebar ---- */
/* lifebar.js: sits on the navy band (text --sky-muted, selected --sky). No animation in CSS: the line moves in JS, once, and jumps under reduced motion. */
.v2-lifebar { color: var(--sky-muted); }
.v2-lifebar-stage { position: relative; }
.v2-lifebar-art { display: block; }
.v2-lifebar-svg { display: block; width: 100%; height: auto; overflow: visible; }
.v2-lifebar-svg text { font: 400 13px var(--sans); fill: var(--sky-muted); }
.v2-lifebar-bubble { fill: var(--gold); }
.v2-lifebar-svg .v2-lifebar-bubble-text { fill: var(--sky); font-weight: 600; }
.v2-lifebar-seg { fill: var(--sky-muted); }
.v2-lifebar-past { fill-opacity: .55; }
.v2-lifebar-past.v2-lifebar-alt { fill-opacity: .4; }
.v2-lifebar-future { fill-opacity: .22; }
.v2-lifebar-future.v2-lifebar-alt { fill-opacity: .14; }
.v2-lifebar-seg.v2-lifebar-on { fill: var(--paper); fill-opacity: 1; }
.v2-lifebar-svg .v2-lifebar-name-on { fill: var(--sky); font-weight: 600; }
.v2-lifebar-svg .v2-lifebar-name { fill: var(--paper); }
.v2-lifebar-svg .v2-lifebar-name-on { fill: var(--sky); }
.v2-lifebar-zoom { fill: var(--sky-muted); fill-opacity: .07; stroke: none; }
.v2-lifebar-zoom-line { stroke: var(--sky-muted); stroke-opacity: .35; fill: none; }
.v2-lifebar-marker { fill: var(--gold); }
.v2-lifebar-marker-line { stroke: var(--gold); stroke-width: 2; stroke-opacity: .9; }
.v2-lifebar-thumb-line { stroke: var(--gold); stroke-width: 2.5; }
.v2-lifebar-halo { fill: var(--gold); fill-opacity: .25; }
.v2-lifebar-thumb { fill: var(--gold); stroke: var(--sky); stroke-width: 2.5; }

/* the slider laid over the main bar: transparent, but focusable with a visible ring */
.v2-lifebar-range {
  position: absolute; left: 0; width: 100%; height: 44px; margin: 0; padding: 0;
  background: transparent; opacity: 1; cursor: ew-resize; touch-action: pan-y;
  -webkit-appearance: none; appearance: none; border-radius: 8px;
}
.v2-lifebar-range::-webkit-slider-runnable-track { height: 44px; background: transparent; border: 0; }
.v2-lifebar-range::-moz-range-track { height: 44px; background: transparent; border: 0; }
.v2-lifebar-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 2px; height: 44px; background: transparent; border: 0; }
.v2-lifebar-range::-moz-range-thumb { width: 2px; height: 44px; background: transparent; border: 0; }
.v2-lifebar-range:focus { outline: none; }
.v2-lifebar-range:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }

.v2-lifebar-hint { display: flex; align-items: center; justify-content: center; gap: 8px; margin: 10px 0 0; font-size: 13px; color: var(--sky-muted); }
.v2-lifebar-next { display: flex; align-items: center; justify-content: center; min-height: 44px; margin: 8px auto 0; padding: 0 18px; color: var(--paper); border-color: var(--sky-muted); background: transparent; font-size: 13px; }
.v2-lifebar-next:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.v2-lifebar-live { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* compact "Your chapter" card (Today) */
.v2-lifebar-c-bar { display: flex; height: 14px; border-radius: 7px; overflow: hidden; margin: 14px 0 8px; background: var(--soft); }
.v2-lifebar-c-bar span { display: block; height: 100%; min-width: 2px; }
.v2-lifebar-c-past { background: var(--line); }
.v2-lifebar-c-now { background: var(--sky); }
.v2-lifebar-c-next { background: var(--teal-soft); border-left: 2px solid var(--card); }
.v2-lifebar-c-later { background: transparent; }
.v2-lifebar-c-legend { display: flex; justify-content: space-between; gap: 8px; margin: 0; font-size: 13px; color: var(--muted); }
.v2-lifebar-c-legend b { color: var(--ink); font-weight: 600; }
.v2-lifebar-c-link { display: inline-flex; align-items: center; min-height: 44px; margin-top: 8px; }

@media (prefers-reduced-motion: reduce) {
  .v2-lifebar-svg *, .v2-lifebar-range, .v2-lifebar-next { transition: none; animation: none; }
}

/* ---- chartview ---- */
/* chartview: the tappable birth chart, its house card and the first-view draw-in (M1). */
.v2-chart-toggle { display: flex; gap: 8px; justify-content: center; margin: 0 0 12px; }
.v2-chart-figure .kundli-chart { display: block; width: 100%; max-width: 360px; height: auto; margin: 0 auto; }

/* House hit shapes: transparent so the labels stay readable; the pressed house is gold at 0.2 with a navy outline. */
.v2-chart-house { fill: var(--gold); fill-opacity: 0; stroke: none; cursor: pointer; transition: fill-opacity 150ms ease-out; -webkit-tap-highlight-color: transparent; outline: none; }
.v2-chart-house:hover { fill-opacity: 0.08; }
.v2-chart-house[aria-pressed="true"] { fill-opacity: 0.2; stroke: var(--sky); stroke-width: 2.5; stroke-linejoin: round; }
.v2-chart-house:focus-visible { stroke: var(--teal); stroke-width: 2.5; stroke-linejoin: round; stroke-dasharray: 5 3; }

/* The card under the chart */
.v2-chart-card { margin-top: 12px; padding: 12px 16px; background: var(--soft); border-left: 3px solid var(--gold); border-radius: 12px; }
.v2-chart-card-title { margin: 0 0 4px; font: 600 17px/1.3 var(--serif); color: var(--ink); }
.v2-chart-card-planets { margin: 0; font: 400 17px/1.4 var(--sans); color: var(--ink); }
.v2-chart-card-why { margin: 8px 0 0; font: 400 13px/1.4 var(--sans); color: var(--muted); }

/* M1: the frame and house lines draw themselves, then each planet label drops into its house. About 3 s, once. */
.v2-chart-draw .kc-frame, .v2-chart-draw .kc-rule, .v2-chart-draw .kc-line, .v2-chart-draw .kc-cell { stroke-dasharray: 1; stroke-dashoffset: 1; animation: v2-chart-line 1000ms ease-out forwards; }
.v2-chart-draw .kc-rule { animation-delay: 100ms; }
.v2-chart-draw .kc-cell { animation-delay: 250ms; }
.v2-chart-draw .kc-line { animation-delay: 350ms; animation-duration: 900ms; }
.v2-chart-draw path.kc-asc, .v2-chart-draw .kc-sign, .v2-chart-draw .kc-rising { animation: v2-chart-fade 400ms ease-out 900ms both; }
.v2-chart-draw .v2-chart-drop { animation: v2-chart-drop 450ms ease-out both; animation-delay: calc(1300ms + var(--i, 0) * 120ms); }
@keyframes v2-chart-line { to { stroke-dashoffset: 0; } }
@keyframes v2-chart-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes v2-chart-drop { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: none; } }

@media (prefers-reduced-motion: reduce) {
  .v2-chart-house { transition: none; }
  .v2-chart-draw .kc-frame, .v2-chart-draw .kc-rule, .v2-chart-draw .kc-line, .v2-chart-draw .kc-cell,
  .v2-chart-draw path.kc-asc, .v2-chart-draw .kc-sign, .v2-chart-draw .kc-rising, .v2-chart-draw .v2-chart-drop { animation: none !important; stroke-dasharray: none !important; stroke-dashoffset: 0 !important; opacity: 1 !important; transform: none !important; }
}

/* ---- thread ---- */
/* v2 areas.js + thread.js styles. Tokens, .card/.eyebrow/.cap/.chip/.link/.pill-good come from v2.css. */

/* ---- areas ---- */
.v2-areas-row{display:flex;gap:8px;overflow-x:auto;margin:0 -16px;padding:0 16px 4px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.v2-areas-row::-webkit-scrollbar{display:none}
.v2-areas-chip{flex:none;white-space:nowrap}
.v2-areas-detected{display:flex;flex-wrap:wrap;gap:0 6px;margin-top:4px}
.v2-areas-lit{min-height:44px;display:inline-flex;align-items:center;padding:0;border:0;background:none;font:inherit;color:var(--ink);cursor:pointer}
.v2-areas-lit-label{font-size:13px;line-height:1;padding:7px 12px;border-radius:15px;background:var(--teal-soft);color:var(--teal);font-weight:600}
.v2-areas-lit[aria-pressed=false] .v2-areas-lit-label{background:var(--soft);color:var(--muted)}

/* ---- thread: jump bar, search, scrubber ---- */
.v2-thread{display:block}
.v2-thread-jump{display:flex;gap:8px;overflow-x:auto;margin:0 -16px;padding:0 16px 4px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.v2-thread-jump::-webkit-scrollbar{display:none}
.v2-thread-chip{flex:none;white-space:nowrap}
.v2-thread-search{display:block;width:100%;min-height:44px;margin:10px 0 0;padding:0 14px;border:1.5px solid var(--line);border-radius:22px;background:var(--card);color:var(--ink);font:400 17px/1.4 var(--sans);-webkit-appearance:none;appearance:none}
.v2-thread-search:focus{outline:2px solid var(--sky);outline-offset:1px;border-color:var(--sky)}
.v2-thread-scrub{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;margin-top:10px;min-height:44px}
.v2-thread-range{width:100%;min-height:44px;accent-color:var(--sky)}
.v2-thread-none{margin:16px 0 0}
.v2-thread-stack{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:12px}

/* ---- thread: a conversation card ---- */
.v2-thread-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.v2-thread-head{display:grid;grid-template-columns:34px 1fr 20px;align-items:start;gap:10px;width:100%;min-height:44px;padding:14px 16px;border:0;background:none;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.v2-thread-head:focus-visible{outline:2px solid var(--sky);outline-offset:-2px}
.v2-thread-headtext{display:grid;gap:2px;min-width:0}
.v2-thread-qtext{font:600 17px/1.3 var(--serif)}
.v2-thread-date{color:var(--muted)}
.v2-thread-first{font-size:17px;line-height:1.4;color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.v2-thread-chev{margin-top:4px;color:var(--muted);transition:transform .2s ease}
.v2-thread-card.is-open .v2-thread-chev{transform:rotate(180deg)}
.v2-thread-body{padding:0 16px 16px}
.v2-thread-av{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font:600 17px/1 var(--serif);flex:none}
.v2-thread-av-p{background:var(--sky);color:var(--paper)}
.v2-thread-av-a{background:var(--card);color:var(--saffron);border:2px solid var(--saffron)}
.v2-thread-av-sm{width:26px;height:26px;font-size:13px}

/* messages */
.v2-thread-msg + .v2-thread-msg{margin-top:16px}
.v2-thread-qb{margin-left:auto;max-width:78%;width:fit-content;background:var(--teal);color:#fff;padding:10px 14px;border-radius:18px 18px 4px 18px;font-size:17px;line-height:1.35;overflow-wrap:anywhere}
.v2-thread-from{display:flex;align-items:center;gap:8px;margin:10px 0 6px}
.v2-thread-ans{background:var(--card);border:1px solid var(--line);border-radius:4px 18px 18px 18px;padding:14px 16px;font-size:17px;line-height:1.45}
.v2-thread-ans p{margin:0}
.v2-thread-ans p + p{margin-top:10px}
.v2-thread-ans .v2-thread-cannot{color:var(--muted)}
.v2-thread-ans details{margin-top:12px;border-top:1px solid var(--line);padding-top:4px}
.v2-thread-ans summary{list-style:none;display:flex;align-items:center;min-height:44px;font-size:13px;font-weight:600;color:var(--ink);cursor:pointer}
.v2-thread-ans summary::-webkit-details-marker{display:none}
.v2-thread-ans details p{font-size:13px;line-height:1.4;color:var(--muted)}
.v2-thread-ans details p + p{margin-top:6px}
.v2-thread-loading{margin:8px 0 0}

/* follow-up pill, composer, deeper link */
.v2-thread-left{display:inline-block;margin:16px 0 0;padding:5px 10px;border-radius:14px;font-size:13px;font-weight:600;line-height:1.3}
.v2-thread-composer{margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.v2-thread-composer .cap{margin:0 0 8px}
.v2-thread-crow{display:flex;gap:8px;align-items:flex-end}
.v2-thread-reply{flex:1;min-height:48px;max-height:140px;padding:11px 14px;border:1.5px solid var(--line);border-radius:24px;background:var(--card);color:var(--ink);font:400 17px/1.4 var(--sans);resize:none;-webkit-appearance:none;appearance:none}
.v2-thread-reply:focus{outline:2px solid var(--sky);outline-offset:1px;border-color:var(--sky)}
.v2-thread-send{flex:none;width:48px;height:48px;border-radius:50%;border:0;background:var(--sky);color:var(--paper);display:grid;place-items:center;cursor:pointer}
.v2-thread-send:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.v2-thread-deeper{display:inline-flex;align-items:center;min-height:44px;margin-top:8px;padding:0;border:0;background:none;color:var(--ink);cursor:pointer}

/* deep child inside its parent */
.v2-thread-deep{margin-top:20px;padding-top:12px;border-top:1px solid var(--line)}
.v2-thread-deep .eyebrow{margin:0 0 2px}
.v2-thread-deep > .cap{margin:0 0 10px}

/* cards the astrologer posts himself */
.v2-thread-posted{display:grid;grid-template-columns:34px 1fr;gap:10px;align-items:start;padding:14px 16px;background:var(--soft)}
.v2-thread-clock{width:34px;height:34px;display:grid;place-items:center;color:var(--muted)}
.v2-thread-posted-text p{margin:0}
.v2-thread-posted-text .cap{margin-bottom:2px}

/* motion: only the chevron turn, once per toggle, never on text */
@media (prefers-reduced-motion: reduce){
  .v2-thread-chev{transition:none}
}

/* ---- paysheet ---- */
/* v2 pay sheet and shelf (paysheet.js, shelf.js). Uses the tokens and the shared .card .eyebrow .cap .btn-gold .link .pill-good classes. */

/* ---- pay sheet: the bottom sheet body (the lead supplies the dim layer and the positioned sheet element) ---- */
.v2-paysheet-grab { width: 40px; height: 4px; border-radius: 2px; background: var(--line); margin: 0 auto 16px; }
.v2-paysheet-close { position: absolute; top: 6px; right: 6px; width: 44px; height: 44px; display: grid; place-items: center; background: transparent; border: 0; color: var(--muted); cursor: pointer; border-radius: 50%; }
.v2-paysheet-close:focus-visible { outline: 2px solid var(--sky); outline-offset: 2px; }
.v2-paysheet-title { font: 600 17px var(--serif); margin: 0; padding-right: 36px; }
.v2-paysheet-sub { margin: 4px 0 0; }
.v2-paysheet-area { margin: 4px 0 0; }
.v2-paysheet-free { display: flex; align-items: center; gap: 8px; margin: 16px 0 0; padding: 12px 14px; border-radius: 14px; font-size: 17px; font-weight: 600; }
.v2-paysheet-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-top: 16px; padding: 14px 16px; border: 2px solid var(--sky); border-radius: 14px; background: var(--soft); }
.v2-paysheet-name { font: 600 17px var(--serif); }
.v2-paysheet-price { font-size: 17px; font-weight: 600; color: var(--ink); }
.v2-paysheet-terms, .v2-paysheet-agree { text-align: center; margin: 12px 0 0; }
.v2-paysheet-agree { margin-top: 4px; }
.v2-paysheet-agree a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
.v2-paysheet-pay { display: block; width: 100%; min-height: 52px; margin-top: 14px; }
.v2-paysheet-pay[disabled] { opacity: .55; cursor: not-allowed; }
.v2-paysheet-pay[aria-busy="true"] { cursor: progress; }
.v2-paysheet-switch { display: block; margin: 12px auto 0; min-height: 44px; padding: 0 12px; background: transparent; border: 0; color: var(--ink); }
.v2-paysheet-status { min-height: 18px; margin: 8px 0 0; text-align: center; }
.v2-paysheet-status[data-kind="error"] { color: var(--ink); font-weight: 600; }   /* no red: a plain, heavier line */

/* ---- shelf: two columns, one card per reading ---- */
.v2-shelf-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 8px; }
.v2-shelf-card { position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 4px; padding: 14px 12px; min-height: 128px; }
.v2-shelf-card[data-state="coming"] { background: var(--soft); }
.v2-shelf-icon { color: var(--sky); margin-bottom: 2px; flex: none; }
.v2-shelf-name { font: 600 17px var(--serif); margin: 0; }
.v2-shelf-link { color: inherit; text-decoration: none; }
.v2-shelf-link::after { content: ""; position: absolute; inset: 0; border-radius: var(--radius); }   /* the whole card is the link */
.v2-shelf-link:focus-visible { outline: none; }
.v2-shelf-link:focus-visible::after { outline: 2px solid var(--sky); outline-offset: 2px; }
.v2-shelf-line { margin: 0; flex: 1; }
.v2-shelf-tag { display: inline-block; margin-top: 4px; padding: 2px 8px; border: 1px solid var(--line); border-radius: 10px; background: var(--card); }
.v2-shelf-sample { position: relative; z-index: 1; display: inline-flex; align-items: center; min-height: 44px; margin-top: 2px; color: var(--ink); }   /* above the stretched link so a live card's sample is its own target */
span.v2-shelf-sample { z-index: auto; text-decoration: underline; text-underline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
  .v2-paysheet-pay, .v2-shelf-card, .v2-paysheet-close { transition: none; }
}

/* ---- practices ---- */
/* Practices page (module practices). Uses the shared tokens and classes: .card .cap .btn-quiet. */
.v2-practices { display: block; padding: 16px var(--gutter) 0; }
.v2-practices-h1 { font-family: var(--serif); font-size: 28px; font-weight: 600; line-height: 1.2; margin: 0 0 4px; color: var(--ink); }
.v2-practices-sub { margin: 0 0 16px; }
.v2-practices-breath { margin: 0 0 8px; }
.v2-practices-breath:empty { display: none; }
.v2-practices-h { font-family: var(--serif); font-size: 17px; font-weight: 600; line-height: 1.3; margin: 24px 0 8px; color: var(--ink); }
.v2-practices-h:focus { outline: none; }

.v2-practices-card { margin: 0 0 12px; }
.v2-practices-title { font-family: var(--serif); font-size: 17px; font-weight: 600; line-height: 1.3; margin: 0 0 4px; color: var(--ink); }
.v2-practices-label { margin: 12px 0 2px; text-transform: none; letter-spacing: 0; }
.v2-practices-line { font-size: 17px; line-height: 1.45; margin: 0; color: var(--ink); }
.v2-practices-cite { white-space: nowrap; }
.v2-practices-empty { margin: 0; }

.v2-practices-more { margin: 12px 0 0; border-top: 1px solid var(--line); }
.v2-practices-more > summary,
.v2-practices-dropped > summary {
  display: flex; align-items: center; min-height: 44px; cursor: pointer; font-size: 13px; color: var(--muted);
  list-style: none; text-decoration: underline;
}
.v2-practices-more > summary::-webkit-details-marker,
.v2-practices-dropped > summary::-webkit-details-marker { display: none; }
.v2-practices-more > summary:focus-visible,
.v2-practices-dropped > summary:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }

.v2-practices-helps { list-style: none; margin: 0; padding: 0; }
.v2-practices-help { padding: 8px 0; border-bottom: 1px solid var(--line); }
.v2-practices-help:last-child { border-bottom: 0; }
.v2-practices-add { min-height: 44px; margin-top: 8px; }
.v2-practices-add[aria-disabled="true"] { color: var(--teal); border-color: var(--teal); background: var(--teal-soft); cursor: default; }

.v2-practices-days { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.v2-practices-day { padding: 12px 16px; }

.v2-practices-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.v2-practices-item { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 16px; }
.v2-practices-item .cap { margin: 4px 0 0; }
.v2-practices-btns { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.v2-practices-btns .btn-quiet { min-height: 44px; }
.v2-practices-done .v2-practices-line { text-decoration: line-through; color: var(--muted); }
.v2-practices-dropped { margin-top: 8px; }
.v2-practices-dropped .v2-practices-item { background: var(--soft); }

/* M12: a newly accepted item slides into the plan once */
.v2-practices-new { animation: v2-practices-slide 300ms ease-out 1 both; }
@keyframes v2-practices-slide {
  from { opacity: 0; transform: translateY(-16px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .v2-practices-new { animation: none; }
}
@media (min-width:768px){.v2-paysheet-grab{display:none}}

/* ---- palm (Hast Rekha, palm.js + palmmap.js) ---- */
/* The traced lines draw in once after the check (one short stroke, spec §5) and the photos dissolve once after the
   reading (M11); under reduced motion both show their end state. Gold is a stroke only, never text. */
.v2-palm-sub{color:var(--muted)}
.v2-palm-steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.v2-palm-step{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:10px 8px;border-radius:16px}
.v2-palm-step svg{color:var(--sky)}
.v2-palm-step .cap{color:var(--ink)}
.v2-palm-whose select{min-height:48px}
.v2-palm-other{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
.v2-palm-slots{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.v2-palm-cell{min-width:0}
.v2-palm-slot{position:relative;display:grid;place-items:center;width:100%;height:160px;border-radius:16px;overflow:hidden;background:linear-gradient(160deg,#E9E2D4,#D9D0BF)}
.v2-palm-slot.is-empty{border:1.5px dashed #C9BFAE;background:var(--card);color:var(--muted);font-size:var(--fs-c);align-content:center;justify-items:center;gap:4px;padding:0}
.v2-palm-shot{display:block;width:100%;height:100%}
.v2-palm-slotlbl{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:4px;font-size:var(--fs-c);color:var(--muted);margin-top:6px}
.v2-palm-slotlbl b{color:var(--ink);font-weight:600}
.v2-palm-ok{display:inline-flex;align-items:center;gap:4px;font-weight:600;color:var(--teal)}
.v2-palm-fix{font-size:var(--fs-c);color:var(--saffron);margin-top:4px;line-height:1.35}
.v2-palm-pick{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:var(--fs-c);color:var(--muted)}
.v2-palm-writes{display:flex;align-items:center;justify-content:space-between;gap:10px}
.v2-palm-toggle{display:flex;flex:none;border:1.5px solid var(--line);border-radius:22px;overflow:hidden}
.v2-palm-toggle button{min-height:44px;min-width:64px;padding:0 14px;border:0;background:transparent;color:var(--muted);font-size:var(--fs-c)}
.v2-palm-toggle button[aria-pressed=true]{background:var(--sky);color:var(--paper);font-weight:600}
.v2-palm-adult{font-size:var(--fs-b)}
.v2-palm-status[data-kind=error]{color:var(--saffron)}
.v2-palm-guide summary{min-height:44px;display:flex;align-items:center;font-size:var(--fs-c);font-weight:600;cursor:pointer;list-style:none}
.v2-palm-guide summary::-webkit-details-marker{display:none}
.v2-palm-guide ol{margin:0;padding-left:20px;font-size:var(--fs-c)}
.v2-palm-stages{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.v2-palm-stages li{display:flex;align-items:center;gap:10px;color:var(--muted)}
.v2-palm-stages li[data-state=now]{color:var(--ink);font-weight:600}
.v2-palm-stages li[data-state=done]{color:var(--teal)}
.v2-palm-dot{width:10px;height:10px;margin:0 2px;border-radius:50%;border:1.5px solid currentColor}
.v2-palm-stages li[data-state=now] .v2-palm-dot{background:var(--sky);border-color:var(--sky)}
.v2-palm-ch{display:flex;align-items:center;gap:6px;min-height:48px;padding:0 var(--gutter);border-bottom:1px solid var(--line)}
.v2-palm-ch a{display:grid;place-items:center;width:44px;height:44px;margin-left:-12px;text-decoration:none;font-size:var(--fs-h);line-height:1}
.v2-palm-reading.v2-section{padding-top:10px}
.v2-palm-line{padding:10px 14px;border-radius:14px;background:var(--soft);border-left:3px solid var(--gold);display:grid;gap:6px}
.v2-palm-line .v2-cite{justify-self:start;background:var(--card)}
.v2-palm-ends{display:flex;justify-content:space-between;gap:10px;font-size:var(--fs-c);color:var(--muted)}
.v2-palm-ends > span:last-child{text-align:right}
.v2-palm-ends .on{color:var(--ink);font-weight:600}
.v2-palm-slider input[type=range]{width:100%;min-height:44px;margin:4px 0 0;accent-color:var(--sky)}
.v2-palm-says{margin-top:6px}
.v2-palm-cmp{list-style:none;margin:8px 0 0;padding:0;font-size:var(--fs-c)}
.v2-palm-cmp li{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:8px 0;border-top:1px solid var(--line)}
.v2-palm-cmp li > span:first-child{flex:1;min-width:0;color:var(--muted)}
.v2-palm-cmp li b{font-weight:600}
.v2-palm-changed{padding:2px 8px;border-radius:10px;background:var(--soft);color:var(--saffron);font-weight:600}
.v2-palm-rows{border-top:1px solid var(--line)}
.v2-palm-row{border-bottom:1px solid var(--line)}
.v2-palm-row summary{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:52px;cursor:pointer;list-style:none}
.v2-palm-row summary::-webkit-details-marker{display:none}
.v2-palm-row[open] summary span{transform:rotate(90deg)}
.v2-palm-row > p{margin:0 0 10px}
.v2-palm-cites{display:flex;flex-wrap:wrap;gap:6px}
.v2-palm-deleted{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-c);font-weight:600;padding:5px 11px;border-radius:14px;background:var(--teal-soft);color:var(--teal)}
.v2-palm-gone{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.v2-palm-gone .v2-palm-shot{height:110px;border-radius:14px;background:var(--soft)}
.v2-shelf-cta{margin-top:8px}
@media (prefers-reduced-motion:no-preference){
  .v2-palm-trace.is-drawing polyline{stroke-dasharray:1 1;stroke-dashoffset:1;animation:v2-palm-draw .9s ease-out .15s 1 forwards}
  .v2-palm-shot.is-dissolving .v2-palm-photo{animation:v2-palm-dissolve 1.6s ease-in .6s 1 forwards}
  @keyframes v2-palm-draw{to{stroke-dashoffset:0}}
  @keyframes v2-palm-dissolve{to{opacity:0;filter:blur(6px)}}
}
@media (min-width:768px){.v2-palm-slot{height:220px}}
.v2-pmap{display:block;width:100%;height:auto;max-width:420px;margin:0 auto}
.v2-pmap-t{cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}
.v2-pmap-t:focus-visible{outline:2px solid #1B2433;outline-offset:2px;border-radius:4px}
.v2-pmap-lbl{font-size:13px;font-family:inherit;fill:#5B6474;pointer-events:none}
.v2-pmap-hl{fill:#9C4518;font-weight:600}

/* ---- Phase C: Matching, Good dates, Learn (docs/planning/v2-phase-c-design-2026-11-04.md) ---- */
.v2-band-page{min-height:0}
.v2-info{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;margin:-10px 0 -10px -10px;background:none;border:0;color:inherit;font-size:var(--fs-b)}
.v2-info-line{display:block;margin-top:4px}
.v2-row-now th,.v2-row-now td{background:var(--teal-soft)}
.v2-toggle{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap}
.v2-band .v2-toggle .chip{background:transparent;color:var(--paper);border-color:rgba(255,255,255,.35)}
.v2-band .v2-toggle .chip[aria-pressed=true]{background:var(--paper);color:var(--sky);border-color:var(--paper)}
.v2-band .v2-sub .link{min-height:28px;color:var(--gold)}
.v2-ask-row{display:flex;justify-content:space-between;align-items:center;gap:12px;min-height:56px;padding:0 16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--card);text-decoration:none;font-weight:600}
.v2-faq > summary{display:flex;justify-content:space-between;align-items:center;min-height:48px;font-weight:600;cursor:pointer;list-style:none}
.v2-faq > summary::-webkit-details-marker{display:none}
.v2-match-next a{display:flex;justify-content:space-between;align-items:center;min-height:44px}
.v2-faq-q{border-top:1px solid var(--line);padding:10px 0}
.v2-faq-q summary{min-height:44px;display:flex;align-items:center;font-weight:600;cursor:pointer}
.v2-faq-q p{font-size:var(--fs-c);color:var(--muted)}

/* Matching */
.v2-match-forms{display:grid;gap:12px}
@media (min-width:720px){.v2-match-forms{grid-template-columns:1fr 1fr}}
.v2-match-side{margin:0;display:grid;gap:12px;min-width:0}
.v2-match-side legend{float:left;margin:0}
.v2-match-side legend + *{clear:both}
.v2-match-form > * + *{margin-top:12px}
.v2-match-under{display:flex;flex-wrap:wrap;align-items:center;gap:0 6px}
.v2-match-fold{display:flex;align-items:center;gap:8px}
.v2-match-score{display:grid;grid-template-columns:128px 1fr;gap:16px;align-items:center}
.v2-match-ring{position:relative;width:128px;height:128px}
.v2-match-ring-svg{width:128px;height:128px}
.v2-match-ring-track{fill:none;stroke:var(--soft);stroke-width:12}
.v2-match-ring-fill{fill:none;stroke:var(--teal);stroke-width:12;stroke-linecap:round}
.v2-match-num{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}
.v2-match-num b{font:600 var(--fs-h) var(--serif)}
.v2-match-num span{font-size:var(--fs-c);color:var(--muted);margin-top:4px}
.v2-match-word{font:600 var(--fs-h) var(--serif);margin-bottom:4px}
.v2-kootas{list-style:none;margin:0;padding:0}
.v2-koota{display:grid;grid-template-columns:minmax(96px,auto) 1fr 44px;gap:4px 12px;align-items:center;padding:8px 0;border-top:1px solid var(--line)}
.v2-koota-name{font-size:var(--fs-c);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.v2-koota-key .v2-koota-name{font-weight:600}
.v2-koota-ex{border:0;min-height:28px;cursor:pointer}
.v2-koota-bar{height:10px;border-radius:5px;background:var(--soft);overflow:hidden}
.v2-koota-bar i{display:block;height:100%;width:var(--w);background:var(--teal);border-radius:5px}
.v2-koota-n{font-size:var(--fs-c);text-align:right;font-variant-numeric:tabular-nums}
.v2-koota-exline{grid-column:1/-1}
@media (prefers-reduced-motion:no-preference){
  .v2-match-draw .v2-koota-bar i{width:0;transition:width .24s cubic-bezier(.2,.7,.2,1) calc(var(--i) * 40ms)}
  .v2-match-draw.v2-match-go .v2-koota-bar i{width:var(--w)}
  .v2-match-draw .v2-match-ring-fill{stroke-dashoffset:var(--full);transition:stroke-dashoffset .6s cubic-bezier(.2,.7,.2,1)}
  .v2-match-draw.v2-match-go .v2-match-ring-fill{stroke-dashoffset:var(--off)}
}

/* Good dates */
.v2-dayarc-green{stroke:#5BC08A}
.v2-dayarc-svg .v2-dayarc-label-green{fill:#7CD3A3;font-weight:600}
.v2-cal-nav{display:flex;align-items:center;justify-content:space-between}
.v2-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.v2-cal-head{font-size:var(--fs-c);color:var(--muted);text-align:center}
.v2-cal-day{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:52px;padding:6px 0;border:1px solid var(--line);border-radius:12px;background:var(--card);font-size:var(--fs-c)}
.v2-cal-day b{font-weight:600}
.v2-cal-off{color:var(--muted);justify-content:center}
.v2-cal-today{border-color:var(--sky)}
.v2-cal-day[aria-pressed=true]{background:var(--sky);color:var(--paper);border-color:var(--sky)}
.v2-cal-dots{display:flex;gap:3px;min-height:6px}
.v2-cal-dots i,.v2-cal-legend i{display:inline-block;width:6px;height:6px;border-radius:3px}
.v2-dot-p{background:#8A5CC2}
.v2-dot-b{background:var(--saffron)}
.v2-moon-dark{fill:var(--line)}
.v2-moon-lit{fill:var(--gold)}
.v2-cal-day[aria-pressed=true] .v2-moon-dark{fill:var(--sky-2)}
.v2-cal-legend{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.v2-gd-tabs{margin-top:8px}
.v2-gd-table{margin-top:8px}
.v2-gd-month{margin-top:20px}
.v2-gd-dates{list-style:none;margin:8px 0 0;padding:0}
.v2-gd-dates li{border-top:1px solid var(--line)}
.v2-gd-dates summary{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;padding:10px 0;min-height:44px;cursor:pointer;list-style:none}
.v2-gd-dates summary::-webkit-details-marker{display:none}
.v2-gd-win{text-align:right;font-variant-numeric:tabular-nums}
.v2-gd-why{grid-column:1/-1}
.v2-gd-dates details > p{padding:0 0 10px}

/* Learn */
.v2-ln-search{margin-top:16px}
.v2-band .v2-ln-search input{background:var(--paper);border-color:transparent}
.v2-gl-list{list-style:none;margin:0;padding:0}
.v2-gl-list > li{border-top:1px solid var(--line)}
.v2-gl-row{display:flex;justify-content:space-between;align-items:center;gap:12px;width:100%;min-height:48px;padding:0;background:none;border:0;text-align:left;font-size:var(--fs-b)}
.v2-gl-row[aria-expanded=true] span[aria-hidden]{transform:rotate(90deg)}
.v2-gl-def{padding:0 0 12px}
.v2-gl-sub{padding:0 0 8px 12px}
.v2-gl-group{margin-top:20px}
.v2-ln-chart{margin-bottom:12px}
.v2-ln-chart .v2-chart-figure{max-width:320px;margin:0 auto}
.v2-ln-house{min-height:3em;margin-top:8px;font-size:var(--fs-c)}
.v2-ln-read{margin:8px 0 0;padding-left:20px;font-size:var(--fs-c)}
.v2-method summary{display:grid;gap:2px;min-height:48px;padding:10px 0;cursor:pointer;list-style:none}
.v2-method summary::-webkit-details-marker{display:none}
.v2-method details > p{font-size:var(--fs-c);padding-bottom:10px}
.v2-koota-table{margin-top:8px}

/* Policy pages: the v1 legal text in the v2 type scale */
.v2-policy{padding:24px var(--gutter) 8px}
.v2-policy h1{margin-bottom:10px}
.v2-policy h2{margin:26px 0 8px;scroll-margin-top:calc(var(--top-h) + 12px)}
.v2-policy p,.v2-policy li{font-size:var(--fs-b)}
.v2-policy p + p{margin-top:10px}
.v2-policy ul,.v2-policy ol{padding-left:22px;margin:8px 0}
.v2-policy li + li{margin-top:6px}
.v2-policy .lede{color:var(--muted)}
.v2-policy a{text-decoration:underline;text-underline-offset:3px}
.v2-toc{margin:16px 0 0;padding:12px 16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--card)}
.v2-toc ol{margin:0;padding-left:20px;font-size:var(--fs-c)}
.v2-toc a{display:inline-block;min-height:32px;padding:6px 0}
.v2-policy-lang{margin:4px 0 0}
