/* Sweat reference CSS, generated by ref/build_all.mjs from the approved mocks (dir-fp.html, desk-fp.html). */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: block;
  src: url(fonts/google/7150c0ec5ad35645.woff2) format('woff2');
  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: 'Archivo';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: block;
  src: url(fonts/google/7150c0ec5ad35645.woff2) format('woff2');
  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: 'Archivo';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: block;
  src: url(fonts/google/7150c0ec5ad35645.woff2) format('woff2');
  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: 'Archivo';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: block;
  src: url(fonts/google/7150c0ec5ad35645.woff2) format('woff2');
  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: 'Archivo';
  font-style: normal;
  font-weight: 800;
  font-stretch: 100%;
  font-display: block;
  src: url(fonts/google/7150c0ec5ad35645.woff2) format('woff2');
  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;
}
@media (max-width:899.98px){

/* Tokens copied from concepts/sweat-f.css (Sweat F). Dark only, like F. */
:root{color-scheme:dark;--bg:#0A0F1E;--surface:#11182B;--raised:#1A2236;--raised-2:#222B44;--ink:#F3F4F8;--ink-2:#B4BACB;--muted:#8890A4;
--faint:#596380;--hairline:#1C2438;--line:#2C3550;--amber:#FF6134;--amber-text:#FF8763;--amber-bg:#2A1A14;--up:#37B98A;--down:#F06A8A;
--up-bg:#16332A;--brand:#B7C0FF;--sheen:linear-gradient(115deg,#EDE8FF 0%,#BCCBFF 35%,#C4F2E6 65%,#FFDCEB 100%);
--chartline:#E6E8F0;--ui:'Archivo',system-ui,-apple-system,'Segoe UI',sans-serif;--yahoo:#7FD3C3}
:root[data-theme="light"]{color-scheme:dark}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.5 var(--ui);-webkit-font-smoothing:antialiased;overflow-x:clip}
a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:0}
.wrap{max-width:1680px;margin:0 auto;padding:32px 16px 80px}
.intro{max-width:820px}
.intro h1{font:800 2.125rem/1.1 var(--ui);letter-spacing:-.02em;margin:0 0 8px}
.intro p{color:var(--ink-2);margin:0 0 10px}
.key{display:flex;flex-wrap:wrap;gap:8px 16px;font-size:0.8125rem;color:var(--muted);margin:12px 0 0}
.b{display:inline-block;font:700 0.6875rem/1 var(--ui);letter-spacing:.06em;text-transform:uppercase;padding:4px 7px;border-radius:6px;vertical-align:1px}
.b.y{background:#173430;color:var(--yahoo)}.b.s{background:#24264a;color:var(--brand)}.b.d{background:var(--raised);color:var(--ink-2)}
/* shell map */
.map{margin:28px 0 8px;padding:20px;border:1px solid var(--line);border-radius:20px;background:var(--surface);max-width:1100px}
.map h2{font:700 0.8125rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 14px}
.mrow{display:flex;flex-wrap:wrap;gap:10px;align-items:stretch;margin-bottom:12px}
.mbox{flex:1 1 180px;min-width:0;padding:12px 14px;border-radius:14px;background:var(--raised);font-size:0.875rem;color:var(--ink-2)}
.mbox b{display:block;color:var(--ink);font-size:0.9375rem;margin-bottom:2px}
.mbox.top{border:1px dashed var(--line);background:none}
.mlab{font-size:0.75rem;color:var(--muted);margin:6px 0 6px}
/* frames */
.frames{display:flex;flex-wrap:wrap;gap:40px 28px;margin-top:32px}
.shot{width:390px;max-width:100%;display:flex;flex-direction:column;gap:12px}
.shot h3{margin:0;font:700 1.0625rem var(--ui)}.shot h3 span{color:var(--muted);font-weight:500;font-size:0.875rem}
.ph{width:100%;height:844px;border-radius:30px;border:1px solid var(--line);background:var(--bg);position:relative;overflow:hidden;display:flex;flex-direction:column}
.scr{flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:none}.scr::-webkit-scrollbar{display:none}
.notes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;font-size:0.875rem;color:var(--ink-2)}
.notes li{line-height:1.45}
/* status bar */
.sb{height:28px;display:flex;justify-content:space-between;align-items:center;padding:0 22px;font:600 0.75rem var(--ui);color:var(--ink-2)}
/* shared top bar */
.tbar{display:flex;align-items:center;gap:6px;padding:6px 10px 8px 16px;position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(12px)}
.wm{font:800 1.375rem var(--ui);letter-spacing:-.02em;background:var(--sheen);-webkit-background-clip:text;background-clip:text;color:transparent;margin-right:4px}
.pill{flex:1;min-width:0;min-height:44px;display:flex;align-items:center;gap:8px;padding:0 14px;border-radius:999px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);color:var(--muted);font-size:0.875rem;white-space:nowrap;overflow:hidden}
.pill span{overflow:hidden;text-overflow:ellipsis}
.ib{width:44px;height:44px;flex:none;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;color:var(--ink-2);position:relative}
.ib svg{width:22px;height:22px}
.ib .dotn{position:absolute;top:10px;right:11px;width:8px;height:8px;border-radius:4px;background:var(--brand);box-shadow:0 0 0 2px var(--bg)}
.av{width:32px;height:32px;border-radius:16px;background:linear-gradient(135deg,#6E78C8,#C4F2E6);display:flex;align-items:center;justify-content:center;font:700 0.8125rem var(--ui);color:#0A0F1E}
.signin{min-height:44px;padding:0 14px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;font-weight:600;display:inline-flex;align-items:center;flex:none}
/* tab bar (stays on detail screens) */
/* module grammar */
.g{padding:0 16px}
.mod{margin-top:26px}
.mh{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:6px}
.cap{font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.more{min-height:44px;display:inline-flex;align-items:center;font-size:0.875rem;color:var(--brand);font-weight:600}
.clock{font-size:0.75rem;color:var(--muted)}
.chips{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:2px -16px 6px;padding:0 16px}.chips::-webkit-scrollbar{display:none}
.chip{flex:none;min-height:44px;display:inline-flex;align-items:center;padding:0 14px;border-radius:999px;font-size:0.875rem;color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line)}
.pps{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;margin:2px -16px 6px;padding:0 16px}
.pp{flex:none;min-height:52px;display:inline-flex;align-items:center;gap:8px;padding:6px 14px 6px 8px;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);color:var(--ink);text-decoration:none}
.pp.all,.pp.add{padding:0 16px;font-size:0.875rem;font-weight:600}
.pp.all.on{box-shadow:inset 0 0 0 1.5px var(--ink-2);background:var(--raised)}
.pp.add{color:var(--ink-2)}
.ppi{width:32px;height:32px;border-radius:9px;background:var(--line);display:flex;align-items:center;justify-content:center;font:700 0.625rem/1 var(--ui);color:var(--ink)}
.ppt{display:flex;flex-direction:column;line-height:1.25}.ppt b{font-size:0.875rem;font-weight:600;white-space:nowrap}
.ppt span{font-size:0.7813rem;color:var(--ink-2);white-space:nowrap}.ppt i{font-style:normal;font-weight:600}.ppt i.up{color:var(--up)}.ppt i.dn{color:var(--down)}
.chip.on{background:var(--line);color:var(--ink);box-shadow:none;font-weight:600}
/* market row (one row grammar) */
.row{display:flex;align-items:center;gap:10px;min-height:68px;padding:8px 0;border-top:1px solid var(--hairline)}
.row:first-of-type{border-top:0}
.pic{width:36px;height:36px;flex:none;border-radius:10px;display:flex;align-items:center;justify-content:center;font:800 0.8125rem var(--ui);color:#0A0F1E}
.rt{flex:1;min-width:0}
a.rt{min-height:44px;display:flex;flex-direction:column;justify-content:center}.rm{display:block}
.rq{font:600 0.9375rem/1.25 var(--ui);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.rm{font-size:0.75rem;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rr{flex:none;width:70px;display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.rp{font:700 0.9375rem var(--ui);white-space:nowrap}
.mv{font:600 0.75rem var(--ui);color:var(--ink-2);white-space:nowrap}
.mv.hot{color:var(--amber-text)}
.sp{display:block;width:64px;height:24px;overflow:visible}
.star{width:44px;height:44px;flex:none;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);margin-right:-10px}
.star svg{width:20px;height:20px}.star.on{color:var(--brand)}
/* lead card */
.lead{margin:6px 16px 0;padding:16px;border-radius:20px;background:var(--surface)}
.kick{font-size:0.75rem;color:var(--muted);display:flex;justify-content:space-between;gap:8px}
.lead h2{font:800 1.375rem/1.15 var(--ui);letter-spacing:-.01em;margin:6px 0 0}
.oc{font-size:0.875rem;color:var(--ink-2)}
.big{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-top:6px}
.big .sd{font-size:0.9375rem;color:var(--ink-2)}
.big .n{font:800 3.25rem/.9 var(--ui);letter-spacing:-.03em;background:var(--sheen);-webkit-background-clip:text;background-clip:text;color:transparent}
.dl{font:600 0.9375rem var(--ui);color:var(--ink-2);margin-top:6px}
.dl .hot{color:var(--amber-text)}
.money{font-size:0.875rem;color:var(--ink-2);margin-top:2px}.money b{font-weight:600}.money b.down{color:var(--down)}.money b.up{color:var(--up)}
.mini{display:block;width:100%;height:84px;margin-top:10px;overflow:visible}
.story{display:flex;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline)}
.src{width:28px;height:28px;flex:none;border-radius:8px;background:var(--raised-2);display:flex;align-items:center;justify-content:center;font:700 0.75rem var(--ui);color:var(--ink)}
.st{font-size:0.8125rem;color:var(--muted)}.st b{color:var(--ink);font-weight:600}
.sh{font-size:0.9375rem;line-height:1.35}
.cta{min-height:44px;display:flex;align-items:center;font-size:0.875rem;font-weight:600;color:var(--brand);margin-top:4px}
/* compact feed item */
.fi{display:flex;gap:10px;min-height:44px;padding:10px 0;border-top:1px solid var(--hairline)}
.fi:first-of-type{border-top:0}
.fm{font-size:0.75rem;color:var(--muted);margin-bottom:2px}
.fm .tg{color:var(--ink-2);font-weight:600}
/* market page */
.abar{display:flex;align-items:center;gap:0;padding:4px 6px 4px 6px;position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--hairline)}
.abar .lab{flex:1;min-width:0;font-size:0.8125rem;color:var(--muted);padding-left:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.abar .lab.live{color:var(--ink);font-weight:700;font-size:0.9375rem}
.abar .lab.live em{font-style:normal;color:var(--ink-2);font-weight:500;font-size:0.8125rem;margin-left:6px}
.mq h1{font:800 1.75rem/1.1 var(--ui);letter-spacing:-.02em;margin:10px 0 2px}
.mq .big .n{font-size:4rem}
.ruleline{font-size:0.8125rem;color:var(--muted);margin-top:6px}
.chart{display:block;width:100%;height:190px;margin-top:12px;overflow:visible}
.ticks{display:flex;justify-content:space-between;font-size:0.75rem;color:var(--muted);margin-top:4px}
.rng{display:flex;gap:2px;padding:3px;border-radius:999px;background:var(--surface);margin-top:10px}
.rng button{flex:1;min-height:44px;border-radius:999px;color:var(--muted);font-size:0.875rem}
.rng button.on{background:var(--line);color:var(--ink)}
.srcrow{display:flex;justify-content:space-between;flex-wrap:wrap;gap:0 10px;font-size:0.75rem;color:var(--muted);align-items:center}
.srcrow a{min-height:44px;display:inline-flex;align-items:center;color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:3px}
.lv{display:inline-flex;align-items:center;gap:6px}.lv i{width:6px;height:6px;border-radius:3px;background:var(--brand)}
.mindex{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:4px -16px 0;padding:0 16px}.mindex::-webkit-scrollbar{display:none}
.mchip{flex:none;min-height:44px;display:inline-flex;align-items:center;gap:6px;padding:0 12px;border-radius:12px;background:var(--surface);font-size:0.8125rem;color:var(--ink-2)}
.mchip b{font-weight:700;color:var(--ink)}.mchip.hot b{color:var(--amber-text)}
.mvh{margin-top:18px;display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.mvh .t{font:700 1.0625rem var(--ui);color:var(--amber-text)}
.mvh .t.calm{color:var(--ink)}
.mvh .w{font-size:0.8125rem;color:var(--muted)}
.mvh a,.mvh button{min-height:44px;display:inline-flex;align-items:center;font-size:0.875rem;color:var(--brand);white-space:nowrap}
.since{margin-top:6px;font-size:0.8125rem;color:var(--ink-2)}
.since a{display:inline-flex;min-height:44px;align-items:center;color:var(--brand);font-weight:600}
.post{margin-top:10px;padding:14px;border-radius:14px;background:var(--surface)}
.post .who{display:flex;align-items:center;gap:8px;font-size:0.8125rem;color:var(--muted)}
.post .who b{color:var(--ink);font-weight:600}
.post .who .x{margin-left:auto;font:800 0.9375rem var(--ui);color:var(--ink)}
.post .tx{font-size:0.9375rem;line-height:1.4;margin-top:6px}
.post .tm{color:var(--ink-2)}
.post .ft{display:flex;justify-content:space-between;align-items:center;margin-top:4px;font-size:0.8125rem;color:var(--muted)}
.post .ft a{min-height:44px;display:inline-flex;align-items:center}
.plus{min-height:44px;display:flex;align-items:center;font-size:0.875rem;color:var(--ink-2)}
.divider{display:flex;align-items:center;gap:8px;font-size:0.75rem;color:var(--muted);margin:14px 0 2px}
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--line)}
.divider svg{width:14px;height:14px}
.talk{margin-top:10px;min-height:48px;display:flex;align-items:center;justify-content:space-between;padding:0 14px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.9375rem;font-weight:600}
.talk span{color:var(--muted);font-weight:500;font-size:0.875rem}
/* alerts */
.stat{display:inline-flex;align-items:center;gap:6px;font-size:0.8125rem;color:var(--ink-2);padding:6px 12px;border-radius:999px;background:var(--surface)}
.stat i{width:7px;height:7px;border-radius:4px;background:var(--up)}
.acard{margin-top:8px;padding:14px;border-radius:16px;background:var(--surface)}
.acard .q{font:700 1rem var(--ui)}
.acard .l{font-size:0.875rem;color:var(--ink-2);margin-top:4px}
.yn{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:0.8125rem;color:var(--muted)}
.yn button{min-height:44px;padding:0 18px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink)}
.ar{display:flex;align-items:center;gap:10px;min-height:60px;padding:8px 0;border-top:1px solid var(--hairline)}
.ar .rt .rq{font-size:0.9375rem}
.chev{color:var(--muted);font-size:1.125rem;width:20px;text-align:right}
.hd2{display:flex;align-items:center;gap:4px;padding:4px 16px 0 6px}
.hd2 h2{font:800 1.375rem var(--ui);margin:0}
.ptitle{padding:6px 16px 0}.ptitle h2{font:800 1.625rem/1.1 var(--ui);margin:0;letter-spacing:-.01em}.ptitle p{margin:2px 0 0;font-size:0.8125rem;color:var(--muted)}
.hero-copy{font:700 1.3125rem/1.2 var(--ui);letter-spacing:-.01em;margin:6px 16px 0}
.hero-sub{font-size:0.875rem;color:var(--ink-2);margin:4px 16px 0}
.foot{padding:28px 16px 24px;font-size:0.75rem;color:var(--muted)}
.foot a{min-height:44px;display:inline-flex;align-items:center;color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:3px}
.ctx{margin:0 16px;padding:8px 12px;border-radius:10px;background:var(--raised);font-size:0.75rem;color:var(--muted)}
@media (max-width:440px){.wrap{padding:24px 16px 64px}.intro h1{font-size:1.75rem}.ph{height:780px}}

/* ---- Final: overrides on top of B ---- */
.ph{height:844px}
@media (max-width:440px){.ph{height:844px}}
/* tab bar: 4 tabs, quiet dot on Alerts */
/* annotations: mock notes drawn inside a frame, not product UI */
.anno{display:inline-flex;align-items:center;gap:6px;font:500 0.6875rem/1.3 var(--ui);color:var(--muted);border:1px dashed var(--faint);border-radius:8px;padding:3px 7px;white-space:nowrap}
.anno-b{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);z-index:7;background:var(--bg)}
.anno-b::before{content:"";width:28px;height:4px;border-radius:2px;background:var(--line)}
/* neutral monogram tiles */
.pic{background:var(--raised);color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line)}
/* moving-now strip (graft from A) */
.strip{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;margin:2px -16px 0;padding:0 16px}.strip::-webkit-scrollbar{display:none}
.mc{flex:none;width:112px;min-height:44px;padding:10px;border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:4px}
.mc .pic{width:28px;height:28px;border-radius:8px;font-size:0.6875rem}
.mc .q{font:600 0.8125rem/1.25 var(--ui);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:33px}
.mc .p{font:700 0.875rem var(--ui);white-space:nowrap}
.mc .sp{width:100%;height:22px}
/* chip with a question shortened by ellipsis */
.chip .qq{display:block;max-width:132px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* alert status: no green */
.stat i{background:var(--brand)}
/* market page: compact */
.mq .big .n{font-size:3.5rem}
.chart{height:118px;margin-top:10px}
.rng{margin-top:8px}
.rng button{min-height:44px}
.srcrow .lk{display:inline-flex;gap:12px}
.mvh{margin-top:12px}
/* offer alerts right after Watch */
.wbar{flex:none;display:flex;align-items:center;gap:6px;padding:6px 6px 6px 16px;border-top:1px solid var(--hairline);background:var(--surface)}
.wbar .ws{display:inline-flex;align-items:center;gap:6px;font-size:0.8125rem;color:var(--ink-2);white-space:nowrap}
.wbar .ws svg{width:16px;height:16px;color:var(--brand)}
.wbar .go{flex:1;min-width:0;min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:0 12px;border-radius:999px;background:var(--brand);color:#0A0F1E;font-size:0.875rem;font-weight:700;white-space:nowrap}
.wbar .x{width:44px;height:44px;flex:none;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);font-size:1.125rem}
.howlink{min-height:44px;display:inline-flex;align-items:center;margin:0 16px;font-size:0.875rem;font-weight:600;color:var(--brand)}
.sec-meta{font-size:0.75rem;color:var(--muted)}
/* tighter top so the first story's headline clears the Watching bar */
.mq h1{margin:6px 0 0}
.mq .big{margin-top:2px}
.mq .big .n{font-size:3.25rem}
.mq .dl{margin-top:4px}
.rng{margin-top:6px;padding:2px}
.mq .mvh{margin-top:6px}
.mq .post{margin-top:6px}
.more{min-width:44px;justify-content:flex-end}
.post .ft a{min-width:44px;justify-content:flex-end}
.fi .fm,.fi .sh{display:block}
/* ---- Fix round 1 ---- */
.i-fed{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%2326334f'/%3E%3Crect x='9' y='22' width='5' height='10' fill='%2393a7d6'/%3E%3Crect x='17' y='16' width='5' height='16' fill='%2393a7d6'/%3E%3Crect x='25' y='10' width='5' height='22' fill='%23c4d0ee'/%3E%3Crect x='7' y='32' width='26' height='2' fill='%23c4d0ee'/%3E%3C/svg%3E")}
.i-cut{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%231e3530'/%3E%3Cpath d='M8 29h24' stroke='%2386cdb5' stroke-width='2'/%3E%3Crect x='10' y='11' width='5' height='17' fill='%2386cdb5'/%3E%3Crect x='18' y='16' width='5' height='12' fill='%2386cdb5'/%3E%3Crect x='26' y='21' width='5' height='7' fill='%23b9e6d6'/%3E%3C/svg%3E")}
.i-us{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%232c2a42'/%3E%3Cpath d='M12 21a8 8 0 0 1 16 0z' fill='%23c3bbe4'/%3E%3Crect x='19.2' y='9' width='1.6' height='5' fill='%23c3bbe4'/%3E%3Crect x='10' y='22' width='20' height='2' fill='%23c3bbe4'/%3E%3Cpath d='M12 25v6M16 25v6M20 25v6M24 25v6M28 25v6' stroke='%23c3bbe4' stroke-width='2'/%3E%3Crect x='8' y='31' width='24' height='2.5' fill='%23c3bbe4'/%3E%3C/svg%3E")}
.i-btc{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23352f1f'/%3E%3Ccircle cx='20' cy='20' r='11' fill='none' stroke='%23e2c77a' stroke-width='2.5'/%3E%3Cpath d='M17 13v14M21 13v2M21 25v2M16 15h6a3 3 0 0 1 0 5h-6M16 20h7a3 3 0 0 1 0 5h-7' fill='none' stroke='%23e2c77a' stroke-width='2'/%3E%3C/svg%3E")}
.i-eth{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23252c45'/%3E%3Cpath d='M20 7l8 13-8 5-8-5z' fill='%23a8b6ec'/%3E%3Cpath d='M20 27l8-5-8 11-8-11z' fill='%237f8fcc'/%3E%3C/svg%3E")}
.i-tx{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%2336281f'/%3E%3Crect x='9' y='17' width='22' height='15' rx='2' fill='%23eaa98c'/%3E%3Crect x='14' y='9' width='12' height='12' rx='1' fill='%23f6d3c3' transform='rotate(-8 20 15)'/%3E%3Crect x='13' y='17' width='14' height='2.5' fill='%2336281f'/%3E%3C/svg%3E")}
.i-ec{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%2333261f'/%3E%3Cpath d='M7 13l8 6 6-4 7 9 5 4' fill='none' stroke='%23f0ae93' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M7 33h26' stroke='%237a5a4c' stroke-width='2'/%3E%3C/svg%3E")}
.i-nfl{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23243022'/%3E%3Cellipse cx='20' cy='20' rx='12' ry='7.5' fill='%23b3d39c' transform='rotate(-30 20 20)'/%3E%3Cpath d='M15 23l10-6M17 18.5l1.5 2.5M20 17l1.5 2.5M22.5 15.5l1.5 2.5' stroke='%23243022' stroke-width='1.6'/%3E%3C/svg%3E")}
.i-ai{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%232a2142'/%3E%3Ccircle cx='20' cy='20' r='8.5' fill='none' stroke='%23c2b0f5' stroke-width='2.5'/%3E%3Ccircle cx='20' cy='20' r='3' fill='%23c2b0f5'/%3E%3Cpath d='M20 6v5M20 29v5M6 20h5M29 20h5' stroke='%23c2b0f5' stroke-width='2'/%3E%3C/svg%3E")}
.a1{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%2334466e'/%3E%3Cstop offset='1' stop-color='%236f86b8'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='40' height='40' fill='url(%23g)'/%3E%3Ccircle cx='20' cy='16.5' r='7' fill='%23d3def4'/%3E%3Cpath d='M6.5 40c1.5-9 7-12.5 13.5-12.5S32 31 33.5 40z' fill='%23d3def4'/%3E%3C/svg%3E")}
.a2{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23523a66'/%3E%3Cstop offset='1' stop-color='%239273aa'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='40' height='40' fill='url(%23g)'/%3E%3Ccircle cx='20' cy='16.5' r='7' fill='%23ead9f4'/%3E%3Cpath d='M6.5 40c1.5-9 7-12.5 13.5-12.5S32 31 33.5 40z' fill='%23ead9f4'/%3E%3C/svg%3E")}
.a3{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%232a5049'/%3E%3Cstop offset='1' stop-color='%235e978a'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='40' height='40' fill='url(%23g)'/%3E%3Ccircle cx='20' cy='16.5' r='7' fill='%23d2efe6'/%3E%3Cpath d='M6.5 40c1.5-9 7-12.5 13.5-12.5S32 31 33.5 40z' fill='%23d2efe6'/%3E%3C/svg%3E")}
.m1{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 180' preserveAspectRatio='xMidYMid slice'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%232c3550'/%3E%3Cstop offset='1' stop-color='%231d2438'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='320' height='180' fill='url(%23g)'/%3E%3Crect x='0' y='120' width='320' height='60' fill='%231a2032'/%3E%3Crect x='60' y='40' width='6' height='90' fill='%2359647f'/%3E%3Cpath d='M66 42h34v22H66z' fill='%234a5674'/%3E%3Crect x='254' y='40' width='6' height='90' fill='%2359647f'/%3E%3Cpath d='M260 42h34v22h-34z' fill='%234a5674'/%3E%3Ccircle cx='160' cy='62' r='17' fill='%238d97b2'/%3E%3Cpath d='M128 118c2-22 15-32 32-32s30 10 32 32z' fill='%237a849f'/%3E%3Cpath d='M122 108h76l-8 54h-60z' fill='%233d4763'/%3E%3Crect x='150' y='118' width='20' height='12' rx='3' fill='%238d97b2'/%3E%3Cpath d='M160 108v-12' stroke='%23aab3c9' stroke-width='3'/%3E%3C/svg%3E")}
.m2{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 180' preserveAspectRatio='xMidYMid slice'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%233a3452'/%3E%3Cstop offset='1' stop-color='%231f2236'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='320' height='180' fill='url(%23g)'/%3E%3Ccircle cx='250' cy='52' r='16' fill='%23c9b9e8' opacity='.35'/%3E%3Cpath d='M120 96a40 40 0 0 1 80 0z' fill='%238e88ad'/%3E%3Crect x='157' y='40' width='6' height='20' fill='%238e88ad'/%3E%3Crect x='108' y='96' width='104' height='8' fill='%23a29dbf'/%3E%3Cpath d='M116 104v36M128 104v36M140 104v36M152 104v36M168 104v36M180 104v36M192 104v36M204 104v36' stroke='%238e88ad' stroke-width='5'/%3E%3Crect x='70' y='118' width='180' height='26' fill='%236d6890'/%3E%3Crect x='0' y='144' width='320' height='36' fill='%23191c2c'/%3E%3C/svg%3E")}
.m3{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 180' preserveAspectRatio='xMidYMid slice'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%2323324a'/%3E%3Cstop offset='1' stop-color='%23182030'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='320' height='180' fill='url(%23g)'/%3E%3Crect x='34' y='40' width='120' height='76' rx='6' fill='%2333415e'/%3E%3Crect x='166' y='40' width='120' height='76' rx='6' fill='%2333415e'/%3E%3Cpath d='M44 98l18-14 14 8 18-22 14 10 16-14 20 6' fill='none' stroke='%238fe0c4' stroke-width='3' stroke-linejoin='round'/%3E%3Cpath d='M176 60l18 10 16-6 18 18 14-4 16 16 16 2' fill='none' stroke='%23f2a0b4' stroke-width='3' stroke-linejoin='round'/%3E%3Crect x='84' y='116' width='20' height='16' fill='%232a3550'/%3E%3Crect x='216' y='116' width='20' height='16' fill='%232a3550'/%3E%3Crect x='0' y='132' width='320' height='48' fill='%23141a28'/%3E%3Crect x='60' y='140' width='200' height='10' rx='5' fill='%23232c42'/%3E%3C/svg%3E")}
/* the price is the one loud thing: 64px, as on F's market page */
.big .n,.mq .big .n{font-size:4rem;line-height:.9}
/* market pictures: illustrated tiles in muted tones, no letters */
.pic[class*=" i-"],.ppi[class*=" i-"]{background-color:var(--raised);background-size:cover;background-position:center;box-shadow:none;font-size:0;color:transparent}
.ppi{width:32px;height:32px;border-radius:9px;flex:none}
/* colour rule: green/red only on a side you hold; neutral when you only watch; orange marks a big move */
.mv.up,.ppt i.up,.cg.up{color:var(--up)}.mv.dn,.ppt i.dn,.cg.dn{color:var(--down)}.ppt i.nt,.cg.nt{color:var(--ink-2)}
/* the holder bar (F's market page, phone) */
.hbar{flex:none;display:flex;align-items:center;gap:12px;padding:10px 16px 16px;border-top:1px solid var(--hairline);background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(14px);position:relative;z-index:6}
.hbar .hp{display:flex;flex-direction:column;justify-content:center;flex:none;line-height:1.15;font-size:0.75rem;color:var(--ink-2)}
.hbar .hp b{font:700 1rem var(--ui);color:var(--ink)}
.hbar .hs{flex:1;min-width:0;min-height:44px;display:flex;align-items:center;gap:5px;font:600 0.875rem var(--ui);color:var(--brand);white-space:nowrap}
.hbar .hs .ck{color:var(--ink)}
.hbar .hal{flex:none;min-height:48px;display:inline-flex;align-items:center;gap:8px;padding:0 18px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);font:600 0.9375rem var(--ui);color:var(--ink)}
.hbar .hal svg{width:18px;height:18px}
/* detail page top bar: back, title, share */
.abar .lab.short{color:var(--ink);font-weight:700;font-size:0.9375rem}
.abar .lab.short em{font-style:normal;color:var(--muted);font-weight:500;font-size:0.8125rem;margin-left:6px}
/* posts that look like social posts (F's .pst), no engagement counts */
.post{margin-top:10px;padding:14px;border-radius:16px;background:var(--surface)}
.pt-h{display:flex;align-items:center;gap:10px}
.pav{width:40px;height:40px;border-radius:999px;flex:none;background-size:cover;background-color:var(--raised)}
.pid{display:flex;flex-direction:column;line-height:1.25;font-size:0.8125rem;color:var(--muted);min-width:0}
.pid b{font-size:0.9375rem;color:var(--ink);font-weight:700}
.pid span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.post .xm{margin-left:auto;width:16px;height:16px;flex:none;color:var(--ink)}
.psrc{display:flex;align-items:center;gap:8px;font-size:0.8125rem;color:var(--muted);min-width:0;flex-wrap:wrap;row-gap:0}
.psrc b{font-size:0.9375rem;color:var(--ink);font-weight:700}
.lg{width:24px;height:24px;border-radius:6px;flex:none;display:inline-flex;align-items:center;justify-content:center;font:700 0.8125rem/1 Georgia,'Times New Roman',serif}
.lg-r{background:#5a3a24;color:#ffd6b8}.lg-b{background:#2c2c3c;color:#e8e8f4;font-family:var(--ui)}.lg-ap{background:#3a2626;color:#f2cccc;font:700 0.6875rem/1 var(--ui)}.lg-c{background:#22344a;color:#cfe0f6;font-family:var(--ui)}
.post .tx{font-size:0.9375rem;line-height:1.4;margin:8px 0 0}
.post .tx.hl{font-weight:600;font-size:1rem;line-height:1.35}
.media{display:block;width:100%;aspect-ratio:16/9;border-radius:14px;margin-top:10px;background-color:var(--raised);background-size:cover;background-position:center}
.post .ft{display:flex;justify-content:space-between;align-items:center;margin:2px 0 -10px;font-size:0.8125rem;color:var(--muted)}
.post .ft a{min-height:44px;display:inline-flex;align-items:center;gap:6px}
.post .ft .rd{font-weight:600;color:var(--ink-2)}
.post .ft .cm{color:var(--muted);min-width:44px;justify-content:flex-end}
.post .ft .cm svg{width:17px;height:17px}
.post .tagl{display:flex;min-height:44px;align-items:center;font-size:0.75rem;color:var(--muted);margin:-12px 0 -2px;white-space:nowrap;overflow:hidden}
.post .tagl b{color:var(--ink-2);font-weight:600}
/* small feed items on Home: round picture for X posts, bigger source letters */
.fi .pav{width:28px;height:28px}
.src{font-size:0.8125rem}
/* signed-out Home: 2-line headline, link on the "Free to look" line */
.hero-copy{font:700 1.25rem/1.2 var(--ui)}
.hero-sub{display:flex;align-items:center;flex-wrap:wrap;gap:0 10px;margin:0 16px}
.hero-sub .howlink{margin:0}
/* wide strip cards: 1.2 cards in view reads as "scroll sideways" */
.strip.wide .mc{width:290px;flex-direction:row;align-items:center;gap:10px;padding:12px}
.strip.wide .mc .q{flex:1;min-width:0;min-height:0}
.strip.wide .mc .r{display:flex;flex-direction:column;align-items:flex-end;flex:none}
.strip.wide .mc .pic{width:36px;height:36px;border-radius:10px}
/* frame 8: a small phone */
.shot.small{width:375px}.ph.sm{height:667px}
.lg-ap{font-size:0.8125rem}
.pid span{white-space:normal}
.ph{container-type:inline-size}
@container (max-width:23.6875em){.hbar{gap:10px}.hbar .hal{width:48px;padding:0;justify-content:center}.hbar .hal .gl{display:none}.hero-copy{font-size:1.125rem}}
/* ---- First principles ---- */
/* fresh review: glance numbers at 14 px; All pill labels the strip's window */
.ppt span{font-size:0.875rem}
.pp.all{flex-direction:column;justify-content:center;align-items:flex-start;gap:0}
.pp.all .ppt b{font-size:0.875rem}
.ppt span.snc,.ppt em.snc{font-size:0.8125rem;font-weight:500;color:var(--muted);font-style:normal}
/* small phones keep the alerts label; the side text shortens instead */

.hbar .hico{display:none;width:16px;height:16px;flex:none;margin-left:2px;color:var(--brand)}
@container (max-width:23.6875em){.hbar .hal{width:auto;padding:0 12px;gap:6px}.hbar .hal .gl{display:inline}.hbar .hedt{display:none}.hbar .hico{display:inline-block}.ph.sm .hdl{display:none}}
/* final round: the strip's window is a muted line above it; "All" is a compact pill again */
.sncl{margin:6px 0 6px;font-size:0.8125rem;line-height:1.3;color:var(--muted)}
.sncl+.pps{margin-top:0}
.pp.all{flex-direction:row;align-items:center;justify-content:center}
.yn{flex-wrap:wrap}.yn button{padding:0 14px}
.b.m{background:#24264a;color:var(--brand)}
.pp.on{box-shadow:inset 0 0 0 1.5px var(--ink-2);background:var(--raised)}
.pp.all:not(.on){background:var(--surface)}
/* pinned big-move card */
.pin{margin:14px 16px 0;padding:6px 14px 4px;border-radius:18px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.pk{min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:8px;margin-right:-10px}
.pkt{font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.pinx{flex:none;min-height:44px;min-width:44px;padding:0 10px;border-radius:10px;font:600 0.8125rem var(--ui);color:var(--muted)}
/* money line under the pills (hidden for watch-only accounts) */
.money-l{margin:10px 0 0;font-size:0.8125rem;line-height:1.4;color:var(--muted)}
.money-l b{font-weight:600}.money-l b.down{color:var(--down)}.money-l b.up{color:var(--up)}
/* section heading: "Since you looked", new items below it */
h2.sh{margin:20px 0 4px;padding-bottom:8px;border-bottom:1px solid var(--hairline);font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.pq{display:flex;align-items:center;gap:10px;min-height:44px}
.pq b{display:block;font:700 1.0625rem/1.2 var(--ui)}
.pmv{display:block;font:600 0.875rem var(--ui);color:var(--ink-2);margin-top:2px}.pmv .hot{color:var(--amber-text)}
.pline{font-size:0.8125rem;color:var(--muted);margin-top:4px}.pline b.down{color:var(--down);font-weight:600}
.mini.pinchart{height:52px;margin-top:6px}
.pin .story{margin-top:8px;padding-top:8px}
.pin .cta{margin-top:0}
/* feed tag with a tiny market picture */
.post .tagl{gap:6px}
.tpi{width:18px;height:18px;border-radius:5px;flex:none;background-size:cover;background-color:var(--raised)}
#fp-div,.g>.divider:first-child{margin-top:16px}
.pin+.g>h2.sh{margin-top:22px}
/* short phones (under 700 px tall; the 375 x 667 frames): an 84 px chart keeps the first post above the holder bar */
.ph.sm .mq .chart{height:84px}
.ph.sm .mq .mindex{display:none}
.ph.sm .mq h1{font-size:1.5rem;margin:2px 0 0}
.ph.sm .mq .chart{margin-top:4px}
.ph.sm .mq .ticks{margin-top:2px}
.ph.sm .mq .rng{margin-top:4px;padding:0}
.ph.sm .mq .mvh{margin-top:2px}
.ph.sm .mq .post{margin-top:4px;padding-top:8px}
.ph.sm .mq .post .tx{margin-top:2px}
.ph.sm .mq>.mh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
/* paste field (Discovery and signed-out Home) */
.paste{min-height:52px;display:flex;align-items:center;gap:10px;padding:0 6px 0 16px;border-radius:16px;background:var(--surface);box-shadow:inset 0 0 0 1.5px var(--line);color:var(--ink-2);font-size:1rem;margin-top:10px}
.paste svg{width:20px;height:20px;flex:none;color:var(--brand)}
.paste>span:not(.pbtn){flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.paste .pbtn{flex:none;min-height:44px;display:inline-flex;align-items:center;padding:0 16px;border-radius:12px;background:var(--brand);color:#0A0F1E;font:700 0.875rem var(--ui)}
.paste.big{min-height:60px;border-radius:18px;box-shadow:inset 0 0 0 1.5px var(--brand)}
.hero-copy{margin:8px 16px 0}
.hero-sub{margin:4px 16px 0}
/* filter line */
.openm{min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:0.8125rem;color:var(--muted);margin-top:4px}
.openm b{color:var(--ink);font-weight:600}.openm .om{color:var(--brand);font-weight:600;white-space:nowrap}
.ptitle{padding-top:2px}
/* final round: timing and meta text at 13 px, never 12 */
.sb,.sb span,.pkt,h2.sh,.post .tagl,.divider,.ticks,.srcrow,.cap,.hbar .hp,.sec-meta,.rm,.mv,.foot,.kick,.mlab,.clock,.fm,.ctx{font-size:0.8125rem}
h2.sh,.pkt{font-size:0.8125rem}
/* last round: news pictures are a 72 px square to the right of the headline (X images that are the post stay full width) */
.nrow{display:flex;align-items:flex-start;gap:12px}
.nrow .tx.hl{flex:1;min-width:0}
.media.thumb{width:72px;height:72px;aspect-ratio:auto;flex:none;border-radius:10px;margin-top:8px}
/* last round: the live line keeps 12 px above Today's moves */
.mq .srcrow+.mh{margin-top:12px}
.ph.sm .mq .srcrow+.mh+.mindex+.mvh{margin-top:12px}
/* last round: frames 10 and 21 drop the @handle on phone widths, so name and time keep one line */
@container (max-width:26.8125em){.ph.nh .hdl{display:none}}
/* meta round: one muted meta line under the chart controls (only "Polymarket" is a link, 44 px row); Rules beside the outcome; 16 px to the move header */
.mline{min-height:44px;display:flex;flex-wrap:wrap;align-items:center;gap:0 6px;font-size:0.8125rem;line-height:1.3;color:var(--muted)}
.mline .ms{color:var(--faint)}
.mline a{min-height:44px;display:inline-flex;align-items:center;color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:3px}
.oc .rul{display:inline-block;padding:12px 0;margin:-12px 0;color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:3px}
.g.mq .mline+.mvh,.g.mq .mline+.mh,.ph.sm .g.mq .mline+.mvh{margin-top:16px}

/* ---- Home states (frames 8-13) ---- */
.ppt b .newm{display:inline-block;margin-left:6px;padding:1px 5px;border-radius:5px;font:700 0.5938rem/1.3 var(--ui);letter-spacing:.06em;text-transform:uppercase;color:var(--brand);background:#24264a;vertical-align:1px}
.quiet{min-height:44px;display:flex;align-items:center;gap:10px;margin-top:10px;padding:8px 6px 8px 14px;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink-2)}
.quiet .qd{width:8px;height:8px;border-radius:4px;flex:none;background:var(--faint)}
.quiet .qt{flex:1;min-width:0;line-height:1.35}.quiet b.down{color:var(--down);font-weight:600}.quiet b.hot{color:var(--amber-text);font-weight:600}
.quiet .qa{flex:none;width:28px;text-align:center;font-size:1.25rem;color:var(--brand)}
.mh.mr{margin:20px 0 0}
.lookback{display:flex;align-items:flex-start;gap:10px;margin-top:12px;padding:12px 14px;border-radius:14px;background:#171c34;box-shadow:inset 0 0 0 1px #2e3466;font-size:0.875rem;color:var(--ink-2);line-height:1.4}
.lookback svg{width:18px;height:18px;flex:none;color:var(--brand);margin-top:1px}.lookback b{color:var(--ink);font-weight:600}
.paste.two>span:not(.pbtn){white-space:normal;line-height:1.3;padding:8px 0}
.paste.two{min-height:72px}
.pvl{margin:26px 0 8px}
.preview{opacity:.4;filter:saturate(.6);pointer-events:none;user-select:none;max-height:300px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 60%,transparent);mask-image:linear-gradient(#000 60%,transparent)}
.preview .divider{margin-top:10px}
.pp.add.open{box-shadow:inset 0 0 0 1.5px var(--ink-2);background:var(--raised);color:var(--ink)}
.pronote{display:flex;align-items:center;gap:4px;margin-top:2px;padding:0 0 0 14px;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);font-size:0.8438rem;color:var(--ink-2)}
.pronote span{flex:1;min-width:0;line-height:1.35;padding:8px 0}
.pronote a{min-height:44px;display:inline-flex;align-items:center;padding:0 6px;font-weight:600;color:var(--brand);white-space:nowrap}
.pronote .ib{font-size:1.25rem;color:var(--muted)}
.pp.stale .ppt span{color:var(--muted)}.pp.stale .ppt i{font-weight:500}
.ferr{display:flex;align-items:center;gap:10px;margin-top:8px;padding:4px 4px 4px 14px;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink-2)}
.ferr svg{width:18px;height:18px;flex:none;color:var(--muted)}
.ferr span{flex:1;min-width:0;line-height:1.35;padding:8px 0}
.retry{flex:none;min-height:44px;padding:0 14px;border-radius:10px;background:var(--raised);color:var(--ink);font-weight:600;font-size:0.875rem}
#fp-div8{margin-top:16px}
#pro12{margin-top:8px}
.ppt i.nq{color:var(--muted);font-style:normal;font-weight:500}
.pp.add.quietadd{background:transparent;box-shadow:inset 0 0 0 1px var(--line);color:var(--muted);font-weight:500}
h2.sh.pvl{margin:28px 0 10px}
.skel{display:flex;flex-direction:column;gap:10px}
.skel i{display:block;background:var(--raised);border-radius:6px}
.sk-pills{display:flex;gap:8px}.sk-pill{width:96px;height:44px;border-radius:14px !important}
.sk-post{display:flex;flex-direction:column;gap:8px;padding:14px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--hairline)}
.sk-h{display:flex;align-items:center;gap:8px}.sk-av{width:24px;height:24px;border-radius:12px !important;flex:none}
.sk-l{height:10px}.w30{width:30%}.w40{width:40%}.w70{width:70%}.w90{width:90%}

/* ---- Frames 18-21 (phone parity) ---- */
.paste.filled>span:not(.pbtn){color:var(--ink)}
.paste .pbtn{border:0}
.pst{margin-top:6px}
.psl{margin:12px 0 4px;font:700 0.6875rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}
.pstate{min-height:52px;display:flex;align-items:center;gap:10px;padding:6px 6px 6px 14px;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink-2)}
.pspin{width:16px;height:16px;flex:none;border-radius:50%;border:2px solid var(--line);border-top-color:var(--brand)}
@keyframes spin{to{transform:rotate(360deg)}}

.pstate.prow{padding-left:10px}
.pstate .pic{width:32px;height:32px}
.pq2{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}
.pq2 b{font:600 0.9375rem var(--ui);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pq2 span{font-size:0.8125rem;color:var(--ink-2)}
.po{flex:none;min-height:44px;display:inline-flex;align-items:center;padding:0 10px;font:600 0.875rem var(--ui);color:var(--brand)}
.perr svg{width:18px;height:18px;flex:none;color:var(--muted)}
.perr span{flex:1;line-height:1.35;padding:6px 8px 6px 0}
.rres{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-top:6px}
.rres .rk{font:600 0.9375rem var(--ui);color:var(--ink-2)}
.rres .n{font:800 3.25rem/.95 var(--ui);letter-spacing:-.03em;background:var(--sheen);-webkit-background-clip:text;background-clip:text;color:transparent}
.rres .rdt{font:600 0.9375rem var(--ui);color:var(--ink-2)}
.rres.sm{margin-top:4px}.rres.sm .n{font-size:2.5rem}
.rmeta{font-size:0.8125rem;color:var(--muted);margin-top:6px}
.lv.off i{background:var(--faint)}
.mq.rsv .mh{margin-top:6px}
.bml{list-style:none;margin:2px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.bmc{min-height:48px;display:flex;align-items:center;gap:10px;padding:6px 12px;border-radius:12px;background:var(--surface);font-size:0.8125rem;color:var(--ink-2)}
.bmc .bn{width:22px;height:22px;flex:none;border-radius:11px;display:inline-flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1.5px var(--ink-2);font:700 0.75rem var(--ui);color:var(--ink)}
.bmc .bt{flex:1;min-width:0;line-height:1.3}.bmc b{color:var(--ink);font-weight:700}
.bmc .bs{display:block;color:var(--muted)}
.coll,.cclosed{font-size:0.8125rem;line-height:1.4;color:var(--muted);margin:6px 0 0}
.cclosed{margin-top:14px}
.hbar.fin .hsf{color:var(--ink);cursor:default}
.hbar .hal.off{color:var(--muted)}
.lg-wd{background:#2a3346;color:#d6def0;font:700 0.6875rem/1 var(--ui)}
.lg-rs{background:#2f2a3f;color:#e0d8f4;font:700 0.6875rem/1 var(--ui)}
.aloff{display:flex;align-items:center;flex-wrap:wrap;gap:0 8px;margin-top:4px;font-size:0.8125rem;color:var(--muted)}
.aloff svg{width:16px;height:16px;flex:none}
.aloff a{min-height:44px;display:inline-flex;align-items:center;font-weight:600;color:var(--brand)}
.pline b.up,.money b.up{color:var(--up);font-weight:600}
.pp.rsvp .ppt span{color:var(--muted)}
.rpin .pq{margin-top:0}
#fp-div20{margin-top:22px}
.cwrap{position:relative}
.ctip{position:absolute;top:2px;left:0;min-width:160px;height:56px;box-sizing:border-box;padding:0 10px;display:flex;flex-direction:column;justify-content:center;border-radius:10px;background:var(--raised-2);box-shadow:0 0 0 1px var(--line),0 6px 18px rgba(0,0,0,.4);font-size:0.8125rem;color:var(--ink-2);white-space:nowrap;pointer-events:none}
.ctip b{font:700 0.875rem var(--ui);color:var(--ink)}
.ctip i.hot{font-style:normal;font-weight:700;color:var(--amber-text)}

/* ---- Small-text sweep: info button, popover, live dot, About ---- */
.iw{position:relative;display:inline-flex;vertical-align:middle;margin-left:2px}
.ib-i{width:44px;height:44px;margin:-12px -8px -12px -6px;display:inline-flex;align-items:center;justify-content:center;background:none;border:0;padding:0;cursor:pointer;color:var(--muted);text-decoration:none}
.ib-i span{width:20px;height:20px;box-sizing:border-box;border-radius:50%;box-shadow:inset 0 0 0 1.5px currentColor;display:inline-flex;align-items:center;justify-content:center;font:700 0.75rem/1 var(--ui);letter-spacing:0;text-transform:none}
.ib-i:hover,.ib-i:focus-visible,.ib-i[aria-expanded="true"]{color:var(--ink-2)}
.ipop{display:none;position:absolute;top:calc(100% + 8px);left:-10px;z-index:30;width:max-content;max-width:min(260px,calc(100vw - 32px));box-sizing:border-box;padding:10px 12px;border-radius:12px;background:var(--raised);box-shadow:0 0 0 1px var(--line),0 8px 24px rgba(0,0,0,.45);font:400 0.8125rem/1.45 var(--ui);color:var(--ink-2);letter-spacing:0;text-transform:none;white-space:normal;text-align:left}
.ipop.r{left:auto;right:-10px}
.ipop .ip2{display:block;margin-top:6px}
.iw:hover .ipop,.iw:focus-within .ipop,.ipop.show{display:block}
h2 .iw,h1 .iw{vertical-align:2px}
.mq h1 .qi{vertical-align:3px;margin-left:2px}
.ldot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--brand);margin-left:12px;vertical-align:middle;flex:none;align-self:center}
.ptitle h2 .ldot{vertical-align:4px;margin-left:10px}
.g.mq .rng+.mvh,.g.mq .rng+.mh{margin-top:16px}
.about{margin-top:28px;border-top:1px solid var(--hairline)}
.about summary{list-style:none;min-height:52px;display:flex;align-items:center;justify-content:space-between;font:600 1rem var(--ui);color:var(--ink);cursor:pointer}
.about summary::-webkit-details-marker{display:none}
.about summary .chev{color:var(--muted);font-size:1.25rem}
.about[open] summary .chev{transform:rotate(90deg)}
.abt{display:flex;flex-direction:column}
.abt .ai{min-height:44px;display:flex;flex-direction:column;justify-content:center;gap:1px;padding:8px 0;border-top:1px solid var(--hairline);font-size:0.875rem;line-height:1.4;color:var(--ink-2)}
.abt .ak{font-size:0.8125rem;color:var(--muted)}
.abt a.ai span:last-child{color:var(--ink)}
.b.sw{background:#2a2a1c;color:#e8d9a0}

/* ---- Round 11 (fresh reviewer) ---- */
.pkt{font:600 0.9375rem var(--ui)!important;letter-spacing:0;text-transform:none;color:var(--ink-2)}
.acard .l .hot{color:var(--amber-text);font-weight:700}
.mvl{font-weight:600;color:var(--ink-2)}.mvl.hot{color:var(--amber-text)}
.dl .ms{color:var(--faint)}
.dl a.mvj{display:inline-block;padding:12px 0;margin:-12px 0;color:var(--brand);font-weight:600;white-space:nowrap}
.recap{font-size:0.9375rem;color:var(--ink-2);margin-top:4px}.recap .cg{font-weight:700}
.divider.nsd{color:var(--ink-2);font-weight:600;margin-top:16px}
.divider.nsd+.mvh{margin-top:6px}
.divider.nsd.old{margin:22px 0 0}.divider.nsd.old::after{background:var(--hairline)}.divider.nsd.old+.mvh{margin-top:10px}

/* ---- Big chart round ---- */
.chart,.mq .chart,.ph.sm .mq .chart{height:180px}
.ldot{display:inline-flex;align-items:center;gap:6px;width:auto;height:auto;background:none;border-radius:0;margin-left:12px;font:600 0.8125rem/1 var(--ui);letter-spacing:0;text-transform:none;color:var(--ink-2);white-space:nowrap;vertical-align:middle}
.ldot i{width:7px;height:7px;border-radius:50%;background:var(--brand);flex:none}
.big .ldot{align-self:center}
.ptitle h2 .ldot{vertical-align:6px}
.tbar .signin{margin-left:4px}
.dl a.mvj{padding:14px 0;margin:-14px 0}
.hbar.look{padding:10px 16px 16px}
.hbar.look .wcta{flex:1;min-height:52px;display:flex;align-items:center;justify-content:center;gap:8px;border-radius:999px;background:var(--brand);color:#0A0F1E;font:700 1rem var(--ui)}
.hbar.look .wcta svg{width:20px;height:20px}

/* ---- Phone nav A (navopts.html option A): one sticky top bar, no bottom tab bar ---- */
.nsp{flex:1;min-width:0;width:auto;height:auto}
.hdr{display:flex;align-items:center;gap:2px;padding:4px 6px 4px 16px;position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(12px);white-space:nowrap}
.hdr > *{flex:none}
.hdr > .nsp{flex:1 1 0}
.hdr.bk{padding-left:4px;border-bottom:1px solid var(--hairline)}
.hdr.bk .wl{margin-left:0}
.wl{min-height:44px;display:inline-flex;align-items:center}
.dlink{min-height:44px;display:inline-flex;align-items:center;padding:0 10px;font-size:0.9375rem;font-weight:600;color:var(--ink-2);border-radius:999px}
.dlink.on{color:var(--ink);background:var(--raised)}
.hdr .ib svg{width:24px;height:24px}
.ib.on{background:var(--raised);color:var(--ink)}
.bell .ndot{position:absolute;top:10px;right:11px;width:8px;height:8px;border-radius:4px;background:var(--brand);box-shadow:0 0 0 2px var(--bg)}
.hdr .signin{margin-left:4px}
@container (max-width:21.25em){.hdr{padding-left:10px}.hdr .dlink{padding:0 7px}}
.mq .ttl{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.mq .ttl h1{flex:1;min-width:0}
.shr{flex:none;width:44px;height:44px;margin:0 -4px 0 0;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);color:var(--ink-2)}
.shr svg{width:20px;height:20px}
/* short phones keep the 24 px title on one line: Share drops to the right of the outcome line */
.ph.sm .mq .ttl{display:block}
.ph.sm .mq .shr{float:right;margin:2px -4px -26px 8px}
/* the sticky bottom action clears the home indicator */
.hbar,.hbar.look{padding-bottom:calc(16px + env(safe-area-inset-bottom,0px))}

/* ---- Journey swarm fix round 1 ---- */
.iw:hover .ipop,.iw:focus-within .ipop{display:none}
.iw .ipop.show{display:block}
.b.jf{background:#1f2f2a;color:#bfe8d6}
.bkl{min-height:44px;flex:none;display:inline-flex;align-items:center;gap:0;padding:0 8px 0 2px;border-radius:999px;font:600 0.9375rem var(--ui);color:var(--ink-2)}
.bkl svg{width:22px;height:22px}
.hdr.bk .wl{margin-left:6px}
@container (max-width:22.4375em){.hdr.bk .wl{display:none}}
.efl{margin:6px 0 14px;font-size:0.9375rem;line-height:1.4;color:var(--ink-2)}
.pstate.prow{padding:0 0 0 0;gap:0}
.pstate .prl{flex:1;min-width:0;min-height:52px;display:flex;align-items:center;gap:10px;padding:6px 0 6px 10px}
.pstate.prow .star{margin-right:2px}
.stopw{flex:none;min-height:44px;padding:0 14px;border-radius:12px;background:var(--raised);color:var(--ink);font:600 0.875rem var(--ui);white-space:nowrap}
@container (max-width:23.6875em){.hbar.fin .hlong{display:none}}
.rcta{display:flex;align-items:center;justify-content:space-between;gap:8px}
.hbar.look.col{flex-direction:column;align-items:stretch;gap:2px;padding-top:10px}
.hbar.look .wsec{min-height:44px;display:flex;align-items:center;justify-content:center;font:600 0.9375rem var(--ui);color:var(--ink-2)}
.getal{min-height:52px;display:flex;align-items:center;gap:10px;margin-top:10px;padding:4px 6px 4px 14px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink-2)}
.getal svg{width:18px;height:18px;flex:none;color:var(--brand)}.getal span:not(.qa){flex:1;min-width:0;line-height:1.35}
.getal .qa{flex:none;width:28px;text-align:center;font-size:1.25rem;color:var(--brand)}
.scrim{position:absolute;inset:0;z-index:20;background:rgba(4,6,14,.62)}
.sheet{position:absolute;left:0;right:0;bottom:0;z-index:21;max-height:calc(100% - 40px);overflow-y:auto;box-sizing:border-box;padding:8px 16px 28px;border-radius:20px 20px 0 0;background:var(--surface);box-shadow:0 -1px 0 var(--line);display:flex;flex-direction:column;gap:12px}
.sheet .grab{display:block;width:36px;height:5px;border-radius:3px;background:var(--line);margin:0 auto 2px;flex:none}
.shd{display:flex;align-items:center;justify-content:space-between;min-height:44px;margin:-6px -10px -10px 0}
.skick{font:600 0.8125rem var(--ui);color:var(--muted)}
.stt{margin:0;font:700 1.375rem/1.2 var(--ui);color:var(--ink)}
.sbody{margin:0;font-size:0.9375rem;line-height:1.45;color:var(--ink-2)}
.seg{display:flex;padding:3px;border-radius:13px;background:var(--bg)}
.seg button{flex:1;min-height:44px;border-radius:10px;font:500 0.9375rem var(--ui);color:var(--muted)}
.seg button.on{background:var(--line);color:var(--ink);font-weight:600}
.fl2{display:flex;gap:10px}
.fld{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;font-size:0.8125rem;color:var(--muted)}
.inp{display:flex;align-items:center;min-height:48px;padding:0 12px;border-radius:12px;background:var(--bg);box-shadow:inset 0 0 0 1px var(--line)}
.inp input{flex:1;min-width:0;width:100%;align-self:stretch;min-height:46px;background:none;border:0;color:var(--ink);font:600 1.0625rem var(--ui);padding:0;outline:none}
.inp:focus-within{box-shadow:inset 0 0 0 1.5px var(--ink)}
.inp i{font-style:normal;color:var(--muted);font-size:0.9375rem}
.sprev{margin:0;font-size:0.875rem;color:var(--ink-2)}.sprev b.down{color:var(--down);font-weight:600}
.btn{width:100%;min-height:48px;border-radius:12px;font:600 0.9375rem var(--ui);display:flex;align-items:center;justify-content:center;gap:10px}
.btn.pri{background:var(--ink);color:var(--bg)}
.btn.qui{background:var(--raised);color:var(--ink)}
.btn.gho{min-height:44px;background:none;color:var(--ink-2);font-weight:500;margin-top:-6px}
.btn.ggl{background:#fff;color:#1f1f1f}.btn.ggl svg{width:20px;height:20px}
.consent{margin:-4px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.consent a{display:inline-block;padding:12px 2px;margin:-12px 0;color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:3px}
.sft{margin:0;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.salrt{display:flex;flex-direction:column;gap:3px;padding:12px 14px;border-radius:14px;background:var(--bg);box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;line-height:1.4;color:var(--ink-2)}
.salrt .sak{font-size:0.8125rem;color:var(--muted)}.salrt b{color:var(--ink);font-weight:700;font-size:0.9375rem}.salrt .hot{color:var(--amber-text);font-weight:700}
.srule{display:flex;align-items:center;gap:8px;font-size:0.875rem;line-height:1.4;color:var(--ink-2)}
.srule span{flex:1;min-width:0}.srule b{color:var(--ink)}
.srule a{flex:none;min-height:44px;display:inline-flex;align-items:center;padding:0 4px;font-weight:600;color:var(--brand)}
.sopt{display:flex;flex-direction:column;gap:3px;font-size:0.875rem;line-height:1.4;color:var(--ink-2)}.sopt b{font-size:0.9375rem;color:var(--ink)}
.star.tap{color:var(--brand);background:var(--raised);border-radius:999px}
.toast{position:absolute;left:16px;right:16px;bottom:16px;z-index:22;display:flex;align-items:center;gap:8px;padding:6px 6px 6px 14px;border-radius:14px;background:var(--raised-2);box-shadow:0 0 0 1px var(--line),0 8px 24px rgba(0,0,0,.45);font-size:0.875rem;line-height:1.4;color:var(--ink)}
.toast span{flex:1;min-width:0;padding:6px 0}
.undo{flex:none;min-height:44px;padding:0 12px;border-radius:10px;font:700 0.875rem var(--ui);color:var(--brand)}

/* ---- Journey fix round 2 ---- */
.msince{color:var(--muted)}
.toast.up{bottom:96px}
.alater{min-height:44px;flex:none;display:inline-flex;align-items:center;gap:4px;padding:0 8px;border-radius:999px;font:600 0.8125rem var(--ui);color:var(--muted)}
.alater svg{width:18px;height:18px}
@container (max-width:23.6875em){.alater svg{display:none}.alater{padding:0 6px}.alater span{display:block;white-space:normal;width:min-content;line-height:1.1;text-align:center}.hdr .alater~.signin{padding-left:10px;padding-right:10px}}
@container (max-width:21.25em){.hdr .alater~.signin{padding-left:6px;padding-right:6px}.hdr .alater{padding:0 4px}}
@container (max-width:23.6875em){.hbar:has(.hal[aria-label^="Get alerts"]) .hlong{display:none}}
.hbar .hs{min-width:max-content}
@container (max-width:22.4375em){.hbar .hlong,.hbar.fin .hwon{display:none}.hbar.fin .stopw{padding:0 10px}}
.consent a{padding:13px 2px;margin:-13px 0}
.perm{position:absolute;left:12px;right:12px;top:46px;z-index:30;padding:14px 14px 8px;border-radius:16px;background:#f1f3f4;color:#202124;box-shadow:0 8px 28px rgba(0,0,0,.55);font:500 0.9375rem/1.35 system-ui,sans-serif}
.pmh{display:flex;align-items:center;gap:10px}.pmi svg{width:20px;height:20px;display:block}
.pmb{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
.pmb button{min-height:44px;min-width:64px;padding:0 14px;border-radius:999px;font:600 0.875rem system-ui,sans-serif;color:#1a73e8;background:none}
.pmb .pmy{background:#1a73e8;color:#fff}
.hbar.fin .hs{color:inherit}

/* ---- Journey fix round 3 ---- */
details.later{margin:0;border-radius:12px;box-shadow:inset 0 0 0 1px var(--line)}
details.later summary{list-style:none;display:flex;align-items:center;justify-content:space-between;min-height:44px;padding:0 12px;font:600 0.875rem var(--ui);color:var(--ink-2);cursor:pointer}
details.later summary::-webkit-details-marker{display:none}
details.later p{margin:0;padding:0 12px 12px;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.g.mod details.later{margin:8px 0 4px}
.ar.dv{display:flex;align-items:center;gap:8px;min-height:52px}
.ar.dv .rt{flex:1;min-width:0}
.send{flex:none;min-height:44px;display:inline-flex;align-items:center;padding:0 4px;font:600 0.875rem var(--ui);color:var(--brand);white-space:nowrap}
.alt3{position:relative;flex:none;width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;color:var(--muted)}
.alt3 svg{width:22px;height:22px}
.alt3 .ltag{position:absolute;right:-2px;bottom:3px;padding:1px 4px;border-radius:6px;background:var(--raised);box-shadow:0 0 0 1px var(--line);font:700 0.5625rem/1.2 var(--ui);letter-spacing:.02em;color:var(--ink-2);white-space:nowrap}
@container (max-width:21.25em){.hdr:has(.alt3){gap:0}.hdr:has(.alt3) .dlink{padding:0 5px}.hdr:has(.alt3) .signin{padding:0 9px}}
.alend{margin:10px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.iab{display:flex;align-items:center;gap:10px;min-height:44px;padding:0 12px;background:#f4f4f6;color:#222;font:0.8125rem/1.25 system-ui,sans-serif}
.iab .iabx,.iab .iabm{flex:none;font-size:1rem;color:#555}.iab .iabt{flex:1;min-width:0;display:flex;flex-direction:column}.iab .iabt span{font-size:0.6875rem;color:#666}

/* ---- round 18 ---- */
.efl{margin:6px 0 10px;font-size:0.9375rem;line-height:1.4;color:var(--ink-2)}

/* ---- round 19 ---- */
.toast.top{top:84px;bottom:auto}
.alt3{width:auto;min-width:44px;gap:3px;padding:0 4px 0 2px;box-sizing:border-box}
.alt3 svg{width:20px;height:20px;flex:none}
.alt3 .ltag{position:static;padding:0;border-radius:0;background:none;box-shadow:none;font:600 0.7813rem/1.2 var(--ui);letter-spacing:0;color:var(--ink-2)}
@container (max-width:21.25em){.alt3{width:44px;padding:0;flex-direction:column;gap:1px}.alt3 svg{width:18px;height:18px}.alt3 .ltag{font-size:0.6875rem;line-height:1}.alt3 .lw{display:none}}

@media (prefers-reduced-motion: no-preference){
.pspin{animation:spin 1s linear infinite}
.about summary .chev{transition:transform .15s}
}

/* ---- reference additions (ref/build_all.mjs): replace the mock's inline styles and phone shell ---- */
.nw{white-space:nowrap}
.g.mq .mvh.later{margin-top:26px}
.g.mq .endpad{height:16px}
.ph{width:auto;max-width:none;height:auto;min-height:100vh;border:0;border-radius:0;overflow:visible}
.ph>.scr{flex:1 0 auto;overflow:visible}
.ph>.hbar{position:sticky;bottom:0}
/* live updates (RULES 15): the "N new" pill, the drop of a new item, the polite live region */
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
.newpill{position:fixed;left:0;right:0;margin:0 auto;width:max-content;top:calc(var(--bar-h) + 6px);z-index:20;height:40px;padding:0 18px;border-radius:999px;background:var(--ink);color:var(--bg);font:600 0.875rem var(--ui);box-shadow:0 6px 18px rgba(0,0,0,.45);white-space:nowrap}
.ph{--bar-h:53px}
/* health lines (RULES 15.3): the calm field-error style; the news family is the muted foot style */
.ferr.foot-h{margin:12px 0 4px;padding:0;background:none;box-shadow:none;color:var(--muted)}
.ferr.foot-h span{padding:4px 0}
.ferr.fill{margin-top:16px}
/* buttons that replaced <a href="#"> (2026-10-10): the global button reset plus these keep the pixels */
:where(button.act){text-align:start;line-height:inherit}
button.act.plus{width:100%}
button.act.ix{width:calc(100% + 24px)}
/* images are real <img> elements (2026-10-10): the box is fixed by CSS, the picture covers it */
img.pav{display:block;object-fit:cover}
img.media{height:auto;object-fit:cover}
img.media.thumb{height:72px}
.pav.lt{display:flex;align-items:center;justify-content:center;font:700 1rem var(--ui);color:var(--ink-2)}
.i-neutral{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23262c3f'/%3E%3Cpath transform='translate(8 8)' d='M4 19h16M5 15l4-4 3 3 7-7' fill='none' stroke='%23b4bacb' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
/* ---- Home (RULES 16): the mock's inline styles as classes ---- */
.pin .story .src.s28{width:28px;height:28px;border-radius:8px}
.g.hf .endpad{height:16px}
button.getal{width:100%;text-align:start}
.g.mod.mt20{margin-top:20px}
.g>h2.sh.fpd,.pin+.g>h2.sh.fpd{margin-top:16px}
.g.hf img.media:not(.thumb){aspect-ratio:16/9}
.pronote.mt8{margin-top:8px}
/* round 15 (RULES 32.7): every phone top bar (Home, Discovery, Alerts, Profile, and the market page's .hdr.mk) sits at
   top:0 and grows by the iPhone's safe area (the shell sets viewport-fit=cover); its blurred background covers the inset,
   so nothing scrolls into view above it under the status bar. Anchors land under it (--bar-h). */
.hdr{top:0;padding-top:calc(4px + env(safe-area-inset-top,0px))}
.ph{--bar-h:calc(53px + env(safe-area-inset-top,0px))}
/* pills show the market's stored title, truncated to one line (no curated short names); the full title is in the
   aria-label and title */
.pp .ppt{min-width:0}
.pp .ppt b{display:block;max-width:8.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.post .tagl{max-width:100%;min-width:0}
.post .tagl b{min-width:0;max-width:11rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* the pinned card carries its story's "+N more" (RULES 16.29): the market page's row (RULES 18.21), on the raised fill
   so it still reads as a row on the card's own surface */
.pin .plus:has(>.pgo){background:var(--raised)}
/* RULES 38: the lead card, the one loud thing on Home: the price in the opal sheen; the whole card opens the market (its
   name's link stretched over it; the x and the action sit above it). Calm days are compact (bar 5). */
.pin.lead{position:relative;margin:12px 16px 0;padding:4px 14px 10px}
.pin.lead .pq{min-height:40px;color:var(--ink);text-decoration:none}
.pin.lead .pq::after{content:"";position:absolute;inset:0;border-radius:inherit}
.pin.lead .pk button,.pin.lead .cta{position:relative;z-index:1}
.pin.lead .pq b{font:700 1rem/1.25 var(--ui);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.pin.lead .lp{display:flex;flex-direction:column;align-items:flex-start;margin-top:2px}
.pin.lead .lps{font-size:0.8125rem;line-height:1.3;color:var(--muted)}
.pin.lead .lpv{font:800 2.75rem/1 var(--ui);letter-spacing:-.03em;background:var(--sheen);-webkit-background-clip:text;background-clip:text;color:transparent;padding:2px 2px 2px 0}
.pin.lead .lm{font:600 0.875rem/1.35 var(--ui);color:var(--ink-2);margin-top:2px}
.pin.lead .lm .hot{color:var(--amber-text)}.pin.lead .lm .cg{font-weight:700}.pin.lead .lm .cg.dn{color:var(--down)}.pin.lead .lm .cg.up{color:var(--up)}
/* RULES 40.2: no story around the big move: one plain line where the story would be */
.pin.lead .story.none{margin:10px 0 0;font:500 0.875rem/1.4 var(--ui);color:var(--muted)}
.pin.lead .lmo{font-size:0.8125rem;line-height:1.35;margin-top:2px}
.pin.lead .lgn b{font-weight:600}.pin.lead .lgn.down b{color:var(--down)}.pin.lead .lgn.up b{color:var(--up)}
.pin.lead .mini.pinchart{display:block;width:100%;height:64px;margin-top:10px}
.pin.lead .story{margin-top:10px;padding-top:10px}
.g.hf>.osolo{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:6px -4px -6px 0}
.g.hf>.osolo>.ord{margin:0}
.g.hf>.osolo>.pp.add{flex:none;min-height:44px;display:inline-flex;align-items:center;padding:0 4px;border:0;box-shadow:none;background:none;color:var(--brand);font-weight:600}
.pin.lead.calm{margin-top:6px;padding:2px 14px 7px}
.pin.lead.calm .pq{min-height:28px;gap:8px}
.pin.lead.calm .pq .ppi{width:24px;height:24px;border-radius:7px}
.pin.lead.calm .pq b{-webkit-line-clamp:1;font-size:0.9375rem}
.pin.lead .lrow{display:flex;flex-wrap:wrap;align-items:flex-end;gap:4px 14px}
.pin.lead.calm .lpv{font-size:2rem}
.pin.lead .lcw{flex:1 1 9rem;min-width:0;display:flex;flex-direction:column;align-items:stretch;text-align:right}
.pin.lead .mini.pinchart.lcalm{height:18px;margin:0}
.pin.lead.calm .lmo{margin:0}
.pin.lead.calm .lm{margin-top:2px;font-weight:500;color:var(--muted)}

/* the "N new" pill reads as a notice: raised surface, ink text, a 1 px line, the pill shadow (ACCEPTED A13) */
.newpill{background:var(--raised);color:var(--ink);border:1px solid var(--line)}
/* filling: the calm empty chart frame, no line, no band */
svg.chart.empty{display:block;width:100%;background:linear-gradient(var(--hairline),var(--hairline)) left bottom/100% 1px no-repeat}
/* "+N more from …" reads as tappable on every surface (fifth review, RULES 18.21): a row on the card surface with a
   brand "›" at its end, as Home's desktop card (.fmore) has it; the text stays quiet (ink-2, regular), 44 px tall */
.plus:has(>.pgo){margin-top:10px;padding:0 14px;border-radius:12px;background:var(--surface);box-sizing:border-box}
.plus .pgo{margin-left:auto;padding-left:12px;color:var(--brand);font-weight:600}

/* About is a details toggle: the chevron points down closed and up open, like desktop's (ACCEPTED A15) */
.about summary .chev{transform:rotate(90deg)}
.about[open] summary .chev{transform:rotate(-90deg)}
/* the why line under the price (RULES 18.15): source and headline wrap to two lines at most (the headline clamped with
   an ellipsis), "N min into the move ›" on its own line under them; one link, a 44 px+ tap target whose padding keeps
   the line's own spacing (as the 24-hour line's "3 moves today ›") */
a.why{display:block;min-width:0;margin:-6px 0 -9px;padding:12px 0;font-size:0.8125rem;line-height:1.35;color:var(--ink-2)}
a.why .wt{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
a.why b{font-weight:600;color:var(--ink)}
a.why .wsep{white-space:pre}
a.why .wr,a.why .wg{white-space:nowrap}
a.why .wg{margin-left:6px;color:var(--brand);font-weight:600}
/* opened from an alert (P3, RULES 18.22): "Since your alert at 4:00 PM: ▼1¢ · now 26.5¢" under the price block, above
   the why line, with "2 new since your alert ↓" on its own line; one link to #alert-p, 44 px+ tall. Its 6 px bottom
   margin meets the why line's -6 px, so the two links touch and never overlap */
.alw{display:block;min-width:0;margin:-6px 0 6px;padding:12px 0 0;font-size:0.8125rem;line-height:1.35;color:var(--ink-2)}
.alw .aln{display:block;color:var(--brand);font-weight:600}
/* in-page anchors land under the sticky top bar, not beneath it (RULES 18.17): the move headers (#moves-p, #move-p-k),
   the "Your alert" divider (#alert-p), About (#about-p) and any other phone target */
.ph [id]{scroll-margin-top:calc(var(--bar-h) + 8px)}
/* Also on Sweat (RULES 13, round 8): a multi-outcome row names its leading outcome ("Nithya Raman 60.5¢"), wider than
   the 70 px column a side and price fill; the column grows to its text (up to half the row) and the question wraps */
.about .row .rr{width:auto;min-width:70px;max-width:50%}
}
@media (min-width:900px){

/* Tokens copied from concepts/sweat-f.css (Sweat F). Dark only, like F and the phone Final. */
:root{color-scheme:dark;--bg:#0A0F1E;--surface:#11182B;--raised:#1A2236;--raised-2:#222B44;--ink:#F3F4F8;--ink-2:#B4BACB;--muted:#8890A4;
--faint:#596380;--hairline:#1C2438;--line:#2C3550;--amber:#FF6134;--amber-text:#FF8763;--amber-bg:#2A1A14;--up:#37B98A;--down:#F06A8A;
--brand:#B7C0FF;--sheen:linear-gradient(115deg,#EDE8FF 0%,#BCCBFF 35%,#C4F2E6 65%,#FFDCEB 100%);--ui:'Archivo',system-ui,-apple-system,'Segoe UI',sans-serif}
:root[data-theme="light"]{color-scheme:dark}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.5 var(--ui);-webkit-font-smoothing:antialiased;overflow-x:clip}
a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:0}
svg.i{width:20px;height:20px;flex:none}
/* ---------- the mock page around the frames ---------- */
.wrap{max-width:1360px;margin:0 auto;padding:32px 16px 80px}
.intro{max-width:860px}
.intro h1{font:800 2.125rem/1.1 var(--ui);letter-spacing:-.02em;margin:0 0 8px}
.intro p{color:var(--ink-2);margin:0 0 10px}
.shots{display:flex;flex-direction:column;gap:56px;margin-top:36px}
.shot{display:flex;flex-direction:column;gap:12px}
.shot h3{margin:0;font:700 1.1875rem var(--ui)}.shot h3 span{color:var(--muted);font-weight:500;font-size:0.9375rem}
.wscroll{max-width:100%;overflow-x:auto;overflow-y:hidden;padding-bottom:4px}
.win{flex:none;border-radius:14px;border:1px solid var(--line);background:var(--bg);overflow:hidden;position:relative;box-shadow:0 30px 80px -40px #000}
.w1280{width:1280px}.w1024{width:1024px}
.chrome{height:36px;display:flex;align-items:center;gap:8px;padding:0 14px;background:#151C2E;border-bottom:1px solid var(--hairline);font-size:0.75rem;color:var(--muted)}
.chrome i{width:11px;height:11px;border-radius:6px;background:#2C3550}
.chrome .url{margin-left:18px;flex:0 1 460px;height:24px;border-radius:7px;background:var(--bg);display:flex;align-items:center;padding:0 12px}
.vp{height:800px;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;position:relative}.vp::-webkit-scrollbar{display:none}
.w1024 .vp{height:768px}
.vp.short{height:auto;overflow:visible}
.notes{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 24px;font-size:0.875rem;color:var(--ink-2);max-width:1280px}
.notes li{line-height:1.45;padding-left:12px;border-left:2px solid var(--line)}
.notes b{color:var(--ink)}
@media (max-width:900px){.notes{grid-template-columns:1fr}}
.anno{display:inline-flex;align-items:center;gap:6px;font:500 0.6875rem/1.3 var(--ui);color:var(--muted);border:1px dashed var(--faint);border-radius:8px;padding:3px 7px;white-space:nowrap;background:var(--bg)}

/* ---------- product: header ---------- */
.hd{position:sticky;top:0;z-index:20;height:64px;background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--hairline)}
.hdi{max-width:1200px;margin:0 auto;padding:0 32px;height:100%;display:flex;align-items:center;gap:4px}
.back{width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;border-radius:12px;color:var(--ink-2);margin-left:-12px}
.wm{font:800 1.5rem var(--ui);letter-spacing:-.02em;background:var(--sheen);-webkit-background-clip:text;background-clip:text;color:transparent;min-height:44px;display:inline-flex;align-items:center;padding-right:6px}
.tabs{display:flex;gap:2px;margin-left:18px}
.tabs a{position:relative;min-height:44px;padding:0 14px;display:inline-flex;align-items:center;font-size:0.9375rem;font-weight:500;color:var(--muted);border-radius:10px}
.tabs a:hover{color:var(--ink);background:var(--surface)}
.tabs a.on{color:var(--ink);font-weight:600}
.tabs a.on::after{content:"";position:absolute;left:14px;right:14px;bottom:-10px;height:2px;border-radius:2px;background:var(--brand)}
.tabs .tdot{width:7px;height:7px;border-radius:4px;background:var(--ink-2);margin-left:6px}
.paste{margin-left:auto;flex:0 1 400px;min-width:200px;height:44px;display:flex;align-items:center;gap:10px;padding:0 6px 0 16px;border-radius:999px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);color:var(--muted);font-size:0.875rem;white-space:nowrap;overflow:hidden}
.paste span{flex:1;overflow:hidden;text-overflow:ellipsis}
.paste kbd{font:600 0.6875rem var(--ui);color:var(--faint);border:1px solid var(--line);border-radius:6px;padding:2px 6px}
.paste.focus{box-shadow:inset 0 0 0 1.5px var(--brand);color:var(--ink)}
.paste .open{height:44px;margin-right:-6px;padding:0 18px;border-radius:999px;background:var(--brand);color:#0A0F1E;font-weight:700;display:inline-flex;align-items:center}
.me{width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;margin-left:10px;margin-right:-6px}
.av{width:34px;height:34px;border-radius:17px;background:linear-gradient(135deg,#6E78C8,#C4F2E6);display:flex;align-items:center;justify-content:center;font:700 0.875rem var(--ui);color:#0A0F1E}
.me.on .av{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--brand)}
.signin{margin-left:10px;min-height:44px;padding:0 18px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;font-weight:600;display:inline-flex;align-items:center}
.nopaste{margin-left:auto}
/* picture menu */
.menu{position:absolute;right:max(26px,calc((100% - 1200px)/2 + 26px));top:60px;width:260px;padding:6px;border-radius:16px;background:var(--raised);box-shadow:0 0 0 1px var(--line),0 24px 50px -20px #000;z-index:30}
.menu .who{padding:10px 12px 8px;font-size:0.8125rem;color:var(--muted);border-bottom:1px solid var(--line);margin-bottom:4px}.menu .who b{display:block;color:var(--ink);font-size:0.875rem}
.menu a{min-height:44px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border-radius:10px;font-size:0.875rem;color:var(--ink-2)}
.menu a:first-of-type{background:var(--raised-2);color:var(--ink)}
.menu a span{color:var(--muted);font-size:0.8125rem}

/* ---------- product: page grids ---------- */
.pg{max-width:1200px;margin:0 auto;padding:28px 32px 56px}
.two{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:40px;align-items:start}
.stick{position:sticky;top:88px}
.mkt{display:grid;grid-template-columns:minmax(0,1fr) 440px;align-items:start}
.mkt>.l{padding-right:40px;position:sticky;top:88px}
.mkt>.r{border-left:1px solid var(--hairline);padding-left:32px;min-height:700px}
.lat{display:grid;grid-template-columns:340px minmax(0,720px);gap:56px;align-items:start}
.mov{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:48px;align-items:start}
.w1024 .two{gap:28px;grid-template-columns:minmax(0,1fr) 380px}
.w1024 .mkt{grid-template-columns:minmax(0,1fr) 380px}
.w1024 .mkt>.l{padding-right:28px}.w1024 .mkt>.r{padding-left:24px}
.w1024 .pg{padding:24px 28px 48px}.w1024 .hdi{padding:0 28px}
.w1024 .paste{flex-basis:300px}

/* ---------- shared parts ---------- */
.mh{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:2px;min-height:44px}
.cap{font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.more{min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:flex-end;font-size:0.875rem;color:var(--brand);font-weight:600;white-space:nowrap}
.mod+.mod{margin-top:22px}
.ptitle h2{font:800 1.875rem/1.1 var(--ui);margin:0;letter-spacing:-.01em}.ptitle p{margin:4px 0 0;font-size:0.875rem;color:var(--muted)}
.pic{width:36px;height:36px;flex:none;border-radius:10px;display:flex;align-items:center;justify-content:center;font:800 0.75rem var(--ui);background:var(--raised);color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line)}
.row{display:flex;align-items:center;gap:12px;min-height:64px;padding:8px 10px;margin:0 -10px;border-top:1px solid var(--hairline);border-radius:12px}
.row:hover{background:var(--surface)}
.mod .row:first-of-type,.mh+.row{border-top-color:transparent}
.rt{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;min-height:44px}
.rq{font:600 0.9375rem/1.25 var(--ui);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.rm{font-size:0.7813rem;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rr{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:2px;min-width:72px}
.rp{font:700 0.9375rem var(--ui);white-space:nowrap}
.mv{font:600 0.7813rem var(--ui);color:var(--ink-2);white-space:nowrap}.mv.hot{color:var(--amber-text)}
.up{color:var(--up)}.dn{color:var(--down)}
.sp{display:block;width:72px;height:26px;flex:none;overflow:visible}
.sp.lg{width:132px;height:34px}
.star{width:44px;height:44px;flex:none;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);border-radius:10px;margin-right:-8px}
.star.on{color:var(--brand)}
.src{width:28px;height:28px;flex:none;border-radius:8px;background:var(--raised-2);display:flex;align-items:center;justify-content:center;font:700 0.75rem var(--ui);color:var(--ink)}
.foot{margin-top:28px;font-size:0.75rem;color:var(--muted)}
/* lead card */
.lead{padding:24px 26px 18px;border-radius:22px;background:var(--surface)}
.kick{font-size:0.8125rem;color:var(--muted);display:flex;justify-content:space-between;gap:8px}
.lead h2{font:800 1.875rem/1.12 var(--ui);letter-spacing:-.015em;margin:8px 0 0}
.oc{font-size:0.9375rem;color:var(--ink-2)}
.big{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:8px}
.big .sd{font-size:1.0625rem;color:var(--ink-2)}
.big .n{font:800 4.75rem/.92 var(--ui);letter-spacing:-.035em;background:var(--sheen);-webkit-background-clip:text;background-clip:text;color:transparent}
.big .ch{font:600 1.0625rem var(--ui);color:var(--ink-2)}
.dl{font:600 1rem var(--ui);color:var(--ink-2);margin-top:8px}.dl .hot{color:var(--amber-text)}
.money{font-size:0.9375rem;color:var(--ink-2);margin-top:2px}.money b{font-weight:600}
.since{font-size:0.875rem;color:var(--ink-2);margin-top:8px;padding:8px 12px;border-radius:10px;background:var(--raised);display:inline-block}
.since b{color:var(--ink)}
.mini{display:block;width:100%;height:190px;margin-top:14px;overflow:visible}
.ticks{display:flex;justify-content:space-between;font-size:0.75rem;color:var(--muted);margin-top:4px}
.story{display:flex;gap:12px;margin-top:14px;padding-top:14px;border-top:1px solid var(--hairline)}
.st{font-size:0.8125rem;color:var(--muted)}.st b{color:var(--ink);font-weight:600}
.sh{font-size:0.9688rem;line-height:1.38}
.cta{min-height:44px;display:inline-flex;align-items:center;font-size:0.9375rem;font-weight:600;color:var(--brand);margin-top:6px}
/* compact feed item */
.fi{display:flex;gap:12px;min-height:44px;padding:10px 10px;margin:0 -10px;border-top:1px solid var(--hairline);border-radius:12px}
.fi:hover{background:var(--surface)}
.mh+.fi{border-top-color:transparent}
.fm{display:block;font-size:0.7813rem;color:var(--muted);margin-bottom:2px}.fm .tg{color:var(--ink-2);font-weight:600}
.fi .sh{display:block;font-size:0.9375rem}
/* market page */
.mtop{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:-8px}
.mtop .lab{font-size:0.8125rem;color:var(--muted)}
.acts{display:flex;gap:6px}
.btn{min-height:44px;display:inline-flex;align-items:center;gap:8px;padding:0 16px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;font-weight:600;color:var(--ink);white-space:nowrap}
.btn:hover{background:var(--surface)}
.btn.ic{width:44px;padding:0;justify-content:center}
.btn.star-on svg{color:var(--brand)}
.btn.lit{box-shadow:inset 0 0 0 1.5px var(--brand)}
.mq h1{font:800 2.125rem/1.1 var(--ui);letter-spacing:-.02em;margin:6px 0 2px}
.chart{display:block;width:100%;height:210px;margin-top:14px;overflow:visible}
.ctl{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px;flex-wrap:wrap}
.rng{display:flex;gap:2px;padding:3px;border-radius:999px;background:var(--surface)}
.rng button{min-width:56px;min-height:44px;border-radius:999px;color:var(--muted);font-size:0.875rem}
.rng button.on{background:var(--line);color:var(--ink)}
.srcrow{display:flex;align-items:center;gap:14px;font-size:0.7813rem;color:var(--muted)}
.srcrow a{min-height:44px;display:inline-flex;align-items:center;color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:3px}
.lv{display:inline-flex;align-items:center;gap:6px}.lv i{width:6px;height:6px;border-radius:3px;background:var(--brand)}
.idx{margin-top:14px}
.ix{display:flex;align-items:center;gap:12px;min-height:46px;padding:0 12px;margin:0 -12px;border-radius:12px;font-size:0.875rem;color:var(--ink-2);position:relative}
.ix:hover{background:var(--surface)}
.ix b{font-weight:700;color:var(--ink);min-width:58px}.ix.hot b{color:var(--amber-text)}
.ix .tm{min-width:72px}
.ix .ct{color:var(--muted);flex:1}
.ix .go{color:var(--muted)}
.ix.cur{background:var(--surface)}
.ix.cur::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:2px;background:var(--brand)}
.sum{font-size:0.8125rem;color:var(--muted);min-height:44px;display:flex;align-items:center}.sum b{color:var(--ink-2)}
.mvh{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-top:10px}
.mvh .t{font:700 1.125rem var(--ui);color:var(--amber-text)}.mvh .t.calm{color:var(--ink)}
.mvh .w{font-size:0.8125rem;color:var(--muted)}
.mvh a,.mvh button{min-height:44px;display:inline-flex;align-items:center;font-size:0.875rem;color:var(--brand);white-space:nowrap;font-weight:600}
.post{margin-top:10px;padding:14px 16px;border-radius:14px;background:var(--surface)}
.post .who{display:flex;align-items:center;gap:8px;font-size:0.8125rem;color:var(--muted)}
.post .who b{color:var(--ink);font-weight:600}
.post .who .x{margin-left:auto;font:800 0.9375rem var(--ui);color:var(--ink)}
.post .tx{font-size:0.9688rem;line-height:1.42;margin-top:8px}
.post .ft{display:flex;justify-content:space-between;align-items:center;margin-top:2px;font-size:0.8125rem;color:var(--muted)}
.post .ft a{min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:flex-end;color:var(--ink-2)}
.post.new{box-shadow:inset 0 0 0 1px var(--line)}
.plus{min-height:44px;display:flex;align-items:center;font-size:0.875rem;color:var(--ink-2)}
.divider{display:flex;align-items:center;gap:10px;font-size:0.7813rem;color:var(--muted);margin:14px 0 2px}
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--line)}
.talk{margin-top:10px;min-height:48px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.9375rem;font-weight:600}
.talk span{color:var(--muted);font-weight:500;font-size:0.875rem}
.newpill{display:inline-flex;align-items:center;min-height:44px;color:var(--brand);font-weight:600;font-size:0.875rem}
.about{margin-top:28px;padding-top:4px;border-top:1px solid var(--hairline)}
.fold{min-height:48px;display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:0.9375rem}
/* Latest */
.flt{display:flex;flex-direction:column;gap:2px}
.fr{display:flex;align-items:center;gap:12px;min-height:60px;padding:8px 12px;border-radius:14px;color:var(--ink)}
.fr:hover{background:var(--surface)}
.fr.on{background:var(--raised);box-shadow:inset 0 0 0 1px var(--line)}
.fr .q{flex:1;min-width:0;font:600 0.875rem/1.28 var(--ui);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.fr .pr{flex:none;display:flex;flex-direction:column;align-items:flex-end;font-size:0.8125rem;color:var(--ink-2);white-space:nowrap}
.fr .pr b{font:700 0.875rem var(--ui);color:var(--ink)}
.fr.all{min-height:48px;font-weight:600;font-size:0.9375rem}
.fr.add{color:var(--brand);font-weight:600;font-size:0.875rem;min-height:52px}
.fpost{padding:16px 18px;border-radius:16px;background:var(--surface);margin-top:12px}
.fpost .tag{min-height:44px;display:inline-flex;align-items:center;gap:8px;font-size:0.8125rem;font-weight:600;color:var(--ink-2)}
.fpost .tag .pic{width:24px;height:24px;border-radius:7px;font-size:0.5625rem}
.fpost .who{display:flex;align-items:center;gap:8px;font-size:0.8125rem;color:var(--muted);margin-top:6px}
.fpost .who b{color:var(--ink);font-weight:600}
.fpost .tx{font-size:1rem;line-height:1.42;margin-top:6px}
.fpost .ft{display:flex;justify-content:space-between;align-items:center;font-size:0.8125rem;color:var(--muted);margin-top:2px}
.fpost .ft a{min-height:44px;display:inline-flex;align-items:center;color:var(--brand);font-weight:600}
/* Alerts */
.acard{display:block;margin-top:6px;padding:18px 20px;border-radius:18px;background:var(--surface)}
.acard .q{font:700 1.125rem var(--ui);color:var(--ink)}
.acard .l{font-size:0.9375rem;color:var(--ink-2);margin-top:6px}
.yn{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:0.8125rem;color:var(--muted)}
.yn button{min-height:44px;padding:0 18px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink)}
.ar{display:flex;align-items:center;gap:12px;min-height:60px;padding:8px 10px;margin:0 -10px;border-top:1px solid var(--hairline);border-radius:12px}
.ar:hover{background:var(--surface)}
.mh+.ar{border-top-color:transparent}
.chev{color:var(--muted);font-size:1.125rem;width:20px;text-align:right}
/* dialogs and panels */
.scrim{position:absolute;inset:36px 0 0 0;background:rgba(5,8,16,.62);z-index:40;display:flex;align-items:center;justify-content:center}
.dlg{width:440px;padding:28px;border-radius:22px;background:var(--surface);box-shadow:0 0 0 1px var(--line),0 40px 90px -30px #000}
.dlg h4{margin:0;font:800 1.375rem/1.2 var(--ui)}
.dlg .sub{font-size:0.875rem;color:var(--muted);margin-top:4px}
.dlg .lbl{font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:18px 0 6px}
.opt{display:flex;align-items:center;gap:12px;min-height:52px;padding:8px 14px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);margin-top:8px;font-size:0.9375rem}
.opt.on{box-shadow:inset 0 0 0 1.5px var(--brand);background:var(--raised)}
.opt .rd{width:20px;height:20px;border-radius:10px;box-shadow:inset 0 0 0 2px var(--faint);flex:none}
.opt.on .rd{box-shadow:inset 0 0 0 6px var(--brand)}
.opt small{display:block;color:var(--muted);font-size:0.8125rem}
.seg{display:flex;gap:2px;padding:3px;border-radius:999px;background:var(--bg)}
.seg button{flex:1;min-height:44px;border-radius:999px;font-size:0.875rem;color:var(--muted)}
.seg button.on{background:var(--line);color:var(--ink);font-weight:600}
.tgl{display:flex;align-items:center;justify-content:space-between;min-height:48px;font-size:0.9375rem}
.sw{width:44px;height:26px;border-radius:13px;background:var(--brand);position:relative;flex:none}
.sw::after{content:"";position:absolute;right:3px;top:3px;width:20px;height:20px;border-radius:10px;background:#0A0F1E}
.sw.off{background:var(--line)}.sw.off::after{right:auto;left:3px;background:var(--muted)}
.dact{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}
.pri{min-height:44px;padding:0 22px;border-radius:999px;background:var(--brand);color:#0A0F1E;font-weight:700;font-size:0.9375rem;display:inline-flex;align-items:center}
.calm{font-size:0.8125rem;color:var(--muted);margin-top:12px}
.conv{position:sticky;top:64px;height:736px;display:flex;flex-direction:column;border-left:1px solid var(--line);background:var(--surface);margin:-28px -32px -56px 0;width:440px}
.conv .ch{display:flex;align-items:center;gap:8px;padding:10px 12px 10px 20px;border-bottom:1px solid var(--line)}
.conv .ch h4{margin:0;font:700 1.0625rem var(--ui);flex:1}
.conv .ctx{margin:14px 20px 4px;padding:10px 12px;border-radius:12px;background:var(--raised);font-size:0.8125rem;color:var(--ink-2)}
.conv .ctx b{color:var(--amber-text)}
.conv .list{flex:1;overflow:auto;padding:4px 20px;scrollbar-width:none}
.cm{padding:12px 0;border-top:1px solid var(--hairline)}
.cm:first-child{border-top:0}
.cm .h{display:flex;align-items:center;gap:8px;font-size:0.8125rem;color:var(--muted)}
.cm .h b{color:var(--ink);font-weight:600}
.badge{font-size:0.7188rem;padding:1px 7px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);color:var(--ink-2)}
.cm .t{font-size:0.9375rem;margin-top:4px;line-height:1.4}
.cm .a{display:flex;gap:4px;margin-top:0;font-size:0.8125rem;color:var(--muted)}.cm .a a{min-height:44px;min-width:44px;display:inline-flex;align-items:center}
.comp{padding:12px 16px 16px;border-top:1px solid var(--line)}
.comp .box{min-height:48px;display:flex;align-items:center;gap:10px;padding:0 6px 0 14px;border-radius:14px;background:var(--bg);box-shadow:inset 0 0 0 1px var(--line);color:var(--muted);font-size:0.875rem}
.comp .box span:first-child{flex:1}
.comp .rule{font-size:0.75rem;color:var(--muted);margin-top:6px}
.pane-dim{opacity:.55}
/* signed out */
.hero{font:800 1.875rem/1.15 var(--ui);letter-spacing:-.02em;margin:0;max-width:780px}
.hero-sub{font-size:1rem;color:var(--ink-2);margin:8px 0 0}
.hlinks{display:flex;gap:18px;align-items:center;margin:4px 0 16px}
.hlinks a{min-height:44px;display:inline-flex;align-items:center;font-weight:600;color:var(--brand);font-size:0.9375rem}
.hlinks span{font-size:0.875rem;color:var(--muted)}
.qcard{margin-top:22px;padding:18px 20px;border-radius:18px;box-shadow:inset 0 0 0 1px var(--line)}
.qcard b{display:block;font-size:1rem}.qcard p{margin:4px 0 8px;font-size:0.875rem;color:var(--ink-2)}
/* header anatomy frame */
.hstack{display:flex;flex-direction:column;gap:0}
.hlab{max-width:1200px;margin:0 auto;padding:14px 32px 6px;font-size:0.75rem;color:var(--muted);width:100%}
.hstack .hd{position:relative}

/* ---------- desk-final additions ---------- */
.backpill{min-height:44px;display:inline-flex;align-items:center;gap:2px;padding:0 14px 0 6px;margin-left:-10px;margin-right:12px;border-radius:999px;color:var(--ink-2);font-size:0.875rem;font-weight:600;box-shadow:inset 0 0 0 1px var(--line)}
.backpill:hover{background:var(--surface);color:var(--ink)}
.ttl{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.ttl h1{font:800 2.125rem/1.1 var(--ui);letter-spacing:-.02em;margin:0 0 2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ttl .btn{flex:none;margin-top:-4px}
.lab2{font-size:0.8125rem;color:var(--muted)}
.hrow{display:flex;align-items:center;gap:6px;min-height:44px;margin-top:8px;font-size:0.875rem;color:var(--ink-2);flex-wrap:nowrap}
.hrow .hold{display:inline-flex;align-items:center;gap:6px;color:var(--ink);font-weight:600;white-space:nowrap}
.hrow .hold svg{width:18px;height:18px;color:var(--brand)}
.hrow .ed{min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center;padding:0 8px;color:var(--brand);font-weight:600;white-space:nowrap}
.hrow .btn{margin-left:auto}
.btn.alon{box-shadow:inset 0 0 0 1.5px var(--brand);color:var(--ink)}
.btn.alon svg{color:var(--brand)}
.btn.prim{background:var(--brand);color:#0A0F1E;box-shadow:none}
.pav{width:32px;height:32px;flex:none;border-radius:16px;display:flex;align-items:center;justify-content:center;font:700 0.75rem var(--ui);color:#0A0F1E;background:linear-gradient(135deg,#8C96D8,#C4F2E6)}
.pav.b2{background:linear-gradient(135deg,#C9A6E8,#FFDCEB)}
.post .who,.fpost .who{gap:10px}
.wn{display:flex;flex-direction:column;min-width:0;line-height:1.3}
.wn b{color:var(--ink);font-weight:600;font-size:0.875rem}
.wn span{font-size:0.7813rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.post .ft,.fpost .ft{margin-top:4px}
.post .ft a.cmn,.fpost .ft a.cmn{justify-content:flex-start;color:var(--muted);font-weight:500}
.post .ft a.out,.fpost .ft a.out{color:var(--ink-2);font-weight:500}
.fpost .ft .l{display:flex;gap:16px;align-items:center}
.fpost .ft a.cmn{min-width:44px}
.img{aspect-ratio:16/9;margin-top:10px;border-radius:12px;background:radial-gradient(120% 90% at 20% 15%,#2C3550 0%,#1A2236 55%,#141B2D 100%);box-shadow:inset 0 0 0 1px var(--line);display:flex;align-items:flex-end;padding:8px 12px;font-size:0.7188rem;color:var(--faint)}
.since b.dn{color:var(--down)}
.big .ch.dn{color:var(--down)}
.then{flex:none;font-size:0.8125rem;color:var(--muted);white-space:nowrap;text-align:right;min-width:92px}
.acard{padding:0;overflow:hidden}
.acard .acl{display:block;padding:18px 20px 4px}
.acard .yn{margin:0;padding:0 20px 14px;border-top:0}
.send{min-height:44px;display:inline-flex;align-items:center;font-size:0.875rem;font-weight:600;color:var(--brand);white-space:nowrap}
.dlg{width:460px;padding:24px 26px}
.dlg .lbl{margin:14px 0 4px}
.opt{margin-top:6px}
.opt b{font-weight:600}
.chips{display:flex;align-items:center;gap:6px;margin:8px 0 0 46px}
.chips .sl{font-size:0.8125rem;color:var(--muted);width:52px}
.chips button{min-height:44px;min-width:56px;padding:0 12px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink-2)}
.chips button.on{box-shadow:inset 0 0 0 1.5px var(--brand);color:var(--ink);font-weight:600}
.chips.dim{opacity:.55}
.seg button{padding:0 10px;white-space:nowrap}
.dfoot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px}
.dfoot span{font-size:0.7813rem;color:var(--muted);line-height:1.35}
.dfoot .b{display:flex;gap:8px;flex:none}
/* Home at 1024: lead card spans, chart beside the text */
.lead.wide{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:24px;align-items:center}
.lead.wide .mini{margin-top:0}
.w1024 .lead.wide h2{font-size:1.75rem}
.w1024 .lead.wide .big .n{font-size:4rem}
.under{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:28px;align-items:start;margin-top:22px}

/* ---------- desk-fp additions: Home is the feed ---------- */
.home{display:grid;grid-template-columns:300px minmax(0,680px);gap:48px;align-items:start}
.w1024 .home{grid-template-columns:284px minmax(0,1fr);gap:28px}
.w1024 .pos{font-size:0.8125rem;padding-left:4px;padding-right:0;white-space:nowrap}
.side .cap{white-space:nowrap}
.side .fr{align-items:flex-start;padding:10px 12px}
.side .fr .pic{margin-top:2px}
.side .fr .tx2{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.side .fr .q{font:600 0.875rem/1.3 var(--ui);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.side .fr .pl{font-size:0.8125rem;color:var(--ink-2);white-space:nowrap}
.side .fr .pl b{font:700 0.875rem var(--ui);color:var(--ink);margin-right:6px}
.side .fr .pl .nc{color:var(--muted)}
.side .fr.all{align-items:center}
.side .fr.add{align-items:center;min-height:44px;margin-top:2px;font-size:0.9375rem}
.side .fr.add .pic{margin-top:0}
.pos{margin:10px 0 0;padding:12px 12px 10px;border-top:1px solid var(--hairline);font-size:0.875rem;color:var(--ink-2)}
.pos b{font-weight:600}
.flab{font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);min-height:44px;display:flex;align-items:center;justify-content:space-between;margin-top:22px}
.flab a{letter-spacing:0;text-transform:none;font:600 0.875rem var(--ui);color:var(--brand);min-height:44px;display:inline-flex;align-items:center}
.feedtop{display:flex;align-items:center;justify-content:space-between;min-height:44px}
.feedtop .ftl{font-size:0.8125rem;color:var(--muted)}
/* pinned big-move card */
.pin{padding:16px 22px 12px;border-radius:20px;background:var(--surface)}
.pin .pk{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:-6px -12px 0 0;font-size:0.8125rem;color:var(--muted)}
.pin .pk button{width:44px;height:44px;border-radius:12px;color:var(--muted);font-size:1.25rem;display:inline-flex;align-items:center;justify-content:center}
.pin .pg2{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:22px;align-items:start}
.w1024 .pin .pg2{grid-template-columns:minmax(0,1fr) 200px}
.pin h2{font:800 1.5rem/1.15 var(--ui);letter-spacing:-.01em;margin:0}
.pin h2 a{display:inline-flex;min-height:44px;align-items:center}
.pin .dl{margin-top:2px}
.pin .nw{font-size:0.875rem;color:var(--ink-2);margin-top:2px}
.pin .nw b{color:var(--ink);font-weight:700}
.pin .mini{height:112px;margin-top:0}
.pin .story{margin-top:12px;padding-top:12px}
.pin .cta{margin-top:2px}
/* feed posts with a right-hand thumbnail for news */
.fpost .tag{color:var(--ink-2);font-weight:500}
.fpost .tag b{color:var(--ink);font-weight:600}
.fpost .bd{display:flex;gap:14px;align-items:flex-start}
.fpost .bd .bl{flex:1;min-width:0}
.thumb{width:72px;height:72px;flex:none;border-radius:10px;margin-top:8px;background:radial-gradient(120% 90% at 20% 15%,#2C3550 0%,#1A2236 55%,#141B2D 100%);box-shadow:inset 0 0 0 1px var(--line)}
.fpost{margin-top:10px}
/* quiet day */
.quiet{display:flex;align-items:center;gap:10px;min-height:56px;padding:0 16px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.9375rem;color:var(--ink-2)}
.quiet .qd{width:8px;height:8px;border-radius:4px;background:var(--faint);flex:none}
.quiet b{font-weight:700}
.quiet .go{margin-left:auto;color:var(--muted)}
/* paste fields on Discovery and the signed-out Home */
.paste.big{margin-left:0;flex:none;width:100%;max-width:640px;height:56px;font-size:1rem;padding:0 6px 0 18px}
.paste.big .open{height:44px;margin-right:0}
.paste.hero2{max-width:720px;height:64px;font-size:1.0625rem;box-shadow:inset 0 0 0 1.5px var(--brand);color:var(--ink-2)}
.paste.hero2 .open{height:52px;padding:0 24px;font-size:1rem}
.phint{font-size:0.8125rem;color:var(--muted);margin-top:8px}
.sample{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:40px;align-items:start}
/* round 3: the feed runs to the header's right edge; Dismiss as a word; dimmed chips */
.home{grid-template-columns:300px minmax(0,1fr)}
.pin .pk button.dis{width:auto;min-width:44px;padding:0 12px;font:600 0.875rem var(--ui);color:var(--ink-2)}
.chips.dim{opacity:.38}
.chips.dim button{cursor:default}
.chips.dim button.on{box-shadow:inset 0 0 0 1px var(--line);font-weight:500;color:var(--ink-2)}
.chips .why{font-size:0.7813rem;color:var(--muted);margin:6px 0 0 46px}
.since b{font-family:var(--ui);font-weight:400}
/* new desktop states */
.side .fr .pl .new{font:600 0.75rem var(--ui);color:var(--ink-2);padding:2px 8px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line)}
.side .fr .pl .as{color:var(--muted)}
.lookback{display:flex;align-items:center;min-height:44px;padding:0 16px;border-radius:14px;background:var(--surface);font-size:0.875rem;color:var(--ink-2)}
.pronote{display:flex;align-items:center;gap:12px;min-height:52px;padding:0 4px 0 16px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink-2)}
.pronote a{min-height:44px;display:inline-flex;align-items:center;color:var(--brand);font-weight:600}
.pronote button{margin-left:auto;width:44px;height:44px;border-radius:12px;color:var(--muted);font-size:1.125rem}
.status{display:flex;align-items:center;gap:10px;min-height:52px;padding:0 6px 0 16px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink-2)}
.status svg{width:18px;height:18px;flex:none;color:var(--muted)}
.status button{margin-left:auto;min-height:44px;padding:0 16px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;font-weight:600;color:var(--ink)}
.welcome{font:800 1.875rem/1.15 var(--ui);letter-spacing:-.02em;margin:0;max-width:680px}
.skel{display:flex;flex-direction:column;gap:14px;padding:18px 20px;border-radius:18px;box-shadow:inset 0 0 0 1px var(--hairline)}
.skel i{display:block;background:var(--raised);border-radius:6px;height:10px}
.skel .sk-post{display:flex;flex-direction:column;gap:8px;padding-top:12px;border-top:1px solid var(--hairline)}
.skel .sk-h{display:flex;align-items:center;gap:8px}.skel .sk-av{width:28px;height:28px;border-radius:8px;flex:none}
.skel .sk-rows{display:flex;flex-direction:column;gap:8px}.skel .sk-row{height:44px;border-radius:12px}
.w30{width:30%}.w40{width:40%}.w70{width:70%}.w90{width:90%}
.sklab{font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);min-height:44px;display:flex;align-items:center}
/* keyboard focus */
.kf{outline:2px solid var(--brand);outline-offset:2px}
.fpost.kf{outline-offset:6px;border-radius:12px}
.tabs a.kf{outline-offset:0}
.fr,.fpost{position:relative}
.kn{position:absolute;top:-7px;right:-7px;z-index:2;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:var(--bg);box-shadow:inset 0 0 0 1px var(--line);color:var(--muted);font:600 0.6563rem/1.125rem var(--ui);text-align:center;pointer-events:none}
.kn.cur{background:var(--brand);box-shadow:none;color:var(--bg)}
/* ---------- round 5 (fresh review) ---------- */
/* drawn market icons, the same art as the phone */
.pic[class*=" i-"]{background-color:var(--raised);background-size:cover;background-position:center;box-shadow:none;font-size:0;color:transparent}
.fpost .tag .pic{width:24px;height:24px;border-radius:7px}
/* drawn X marks */
a.cmn{gap:6px}
a.cmn svg,.talk svg{width:18px;height:18px;flex:none}
.talk span{display:inline-flex;align-items:center;gap:6px}
.xm{width:16px;height:16px;flex:none;margin-left:auto;color:var(--ink)}
/* feed cards sized to their content */
.fpost{padding:12px 18px 4px;margin-top:10px}
.fpost .tag{margin:-10px 0 -12px}
.fpost .who{margin-top:10px}
.fpost .tx{margin-top:4px;line-height:1.38}
.fpost .ft{justify-content:flex-start;gap:22px;margin-top:0}
.fpost .ft .l{gap:22px}
.fpost .ft a.go{color:var(--brand);font-weight:600}
.fpost.th .bl,.fpost.th>.tag{padding-right:92px}
.fpost.th .thumb{position:absolute;right:18px;top:14px;margin:0}
/* the left column: money, since-you-looked summary, alert status */
.side .fr .pl{white-space:normal}
.side .fr .pl .sl{color:var(--muted);white-space:nowrap;font-size:0.8125rem}
.side .pos{margin-top:12px}
.sumline{padding:10px 12px;font-size:0.875rem;color:var(--ink-2);border-top:1px solid var(--hairline)}
.sumline b{color:var(--ink);font-weight:600}
.alline{display:flex;align-items:center;gap:10px;min-height:44px;padding:0 12px;border-top:1px solid var(--hairline);font-size:0.875rem;color:var(--ink-2)}
.alline svg{width:18px;height:18px;flex:none;color:var(--ink-2)}
.alline .go{margin-left:auto;color:var(--muted)}
.alline:hover{color:var(--ink)}
/* market page: lit tab plus a breadcrumb, no back pill */
.crumb{display:flex;align-items:center;gap:6px;font-size:0.875rem;color:var(--muted);margin:-6px 0 2px}
.crumb a{min-height:44px;min-width:44px;padding:0 6px;margin-left:-6px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-2);font-weight:600}
.crumb a:hover{color:var(--ink)}
.pronote button.dis{width:auto;min-width:44px;padding:0 14px;font:600 0.875rem var(--ui);color:var(--ink-2)}
/* final round: the rail ends with your alert rules */
.alrules{margin-top:6px;border-top:1px solid var(--hairline);padding:0 0 0 12px}
.alrules .mh{margin-bottom:0}
.alrules .ar{display:flex;align-items:flex-start;gap:10px;min-height:44px;padding:8px 0;border-top:0}
.alrules .ar .pic{width:24px;height:24px;border-radius:7px;flex:none;margin-top:1px}
.alrules .rt{display:flex;flex-direction:column;gap:2px;min-width:0}
.alrules .rq{font:600 0.875rem/1.3 var(--ui);color:var(--ink)}
.alrules .rm{font-size:0.8125rem;color:var(--muted);white-space:normal}
/* final round: timing and meta text at 13 px, never 12 */
.cap,.foot,.ticks,.flab,.wn span,.divider,.srcrow,.srcrow a,.lv,.rm,.mv,.mh>span,.lbl,.why,.chips .why,.dfoot span,.rule,.sklab,.side .fr .pl .new,.url,.hlab,.img,.win svg text,.comp .rule{font-size:0.8125rem!important}
.side .foot{text-wrap:balance}
.i-fed{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%2326334f'/%3E%3Crect x='9' y='22' width='5' height='10' fill='%2393a7d6'/%3E%3Crect x='17' y='16' width='5' height='16' fill='%2393a7d6'/%3E%3Crect x='25' y='10' width='5' height='22' fill='%23c4d0ee'/%3E%3Crect x='7' y='32' width='26' height='2' fill='%23c4d0ee'/%3E%3C/svg%3E")}
.i-cut{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%231e3530'/%3E%3Cpath d='M8 29h24' stroke='%2386cdb5' stroke-width='2'/%3E%3Crect x='10' y='11' width='5' height='17' fill='%2386cdb5'/%3E%3Crect x='18' y='16' width='5' height='12' fill='%2386cdb5'/%3E%3Crect x='26' y='21' width='5' height='7' fill='%23b9e6d6'/%3E%3C/svg%3E")}
.i-us{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%232c2a42'/%3E%3Cpath d='M12 21a8 8 0 0 1 16 0z' fill='%23c3bbe4'/%3E%3Crect x='19.2' y='9' width='1.6' height='5' fill='%23c3bbe4'/%3E%3Crect x='10' y='22' width='20' height='2' fill='%23c3bbe4'/%3E%3Cpath d='M12 25v6M16 25v6M20 25v6M24 25v6M28 25v6' stroke='%23c3bbe4' stroke-width='2'/%3E%3Crect x='8' y='31' width='24' height='2.5' fill='%23c3bbe4'/%3E%3C/svg%3E")}
.i-btc{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23352f1f'/%3E%3Ccircle cx='20' cy='20' r='11' fill='none' stroke='%23e2c77a' stroke-width='2.5'/%3E%3Cpath d='M17 13v14M21 13v2M21 25v2M16 15h6a3 3 0 0 1 0 5h-6M16 20h7a3 3 0 0 1 0 5h-7' fill='none' stroke='%23e2c77a' stroke-width='2'/%3E%3C/svg%3E")}
.i-eth{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23252c45'/%3E%3Cpath d='M20 7l8 13-8 5-8-5z' fill='%23a8b6ec'/%3E%3Cpath d='M20 27l8-5-8 11-8-11z' fill='%237f8fcc'/%3E%3C/svg%3E")}
.i-tx{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%2336281f'/%3E%3Crect x='9' y='17' width='22' height='15' rx='2' fill='%23eaa98c'/%3E%3Crect x='14' y='9' width='12' height='12' rx='1' fill='%23f6d3c3' transform='rotate(-8 20 15)'/%3E%3Crect x='13' y='17' width='14' height='2.5' fill='%2336281f'/%3E%3C/svg%3E")}
.i-ec{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%2333261f'/%3E%3Cpath d='M7 13l8 6 6-4 7 9 5 4' fill='none' stroke='%23f0ae93' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M7 33h26' stroke='%237a5a4c' stroke-width='2'/%3E%3C/svg%3E")}
.i-nfl{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23243022'/%3E%3Cellipse cx='20' cy='20' rx='12' ry='7.5' fill='%23b3d39c' transform='rotate(-30 20 20)'/%3E%3Cpath d='M15 23l10-6M17 18.5l1.5 2.5M20 17l1.5 2.5M22.5 15.5l1.5 2.5' stroke='%23243022' stroke-width='1.6'/%3E%3C/svg%3E")}
.i-ai{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%232a2142'/%3E%3Ccircle cx='20' cy='20' r='8.5' fill='none' stroke='%23c2b0f5' stroke-width='2.5'/%3E%3Ccircle cx='20' cy='20' r='3' fill='%23c2b0f5'/%3E%3Cpath d='M20 6v5M20 29v5M6 20h5M29 20h5' stroke='%23c2b0f5' stroke-width='2'/%3E%3C/svg%3E")}
.i-au{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23352f1f'/%3E%3Cpath d='M8 30l3-7h8l3 7z' fill='%23e2c77a'/%3E%3Cpath d='M18 30l3-7h8l3 7z' fill='%23c9ad62'/%3E%3Cpath d='M13 22l3-7h8l3 7z' fill='%23f0d995'/%3E%3C/svg%3E")}
.i-nba{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%2336261f'/%3E%3Ccircle cx='20' cy='20' r='11' fill='%23e9a27c'/%3E%3Cpath d='M9 20h22M20 9v22M12.5 12.5c4 4 4 11 0 15M27.5 12.5c-4 4-4 11 0 15' fill='none' stroke='%2336261f' stroke-width='1.6'/%3E%3C/svg%3E")}

/* round 7 (Yahoo-desktop review): the pinned column fits the window */
.vp.cq{container-type:size;container-name:vp}
.vp.cq .mkt .chart{height:clamp(150px,calc(100cqh - 654px),210px)}

.lv.off i{display:none}
/* chart hover */
.chwrap{position:relative}
.ctip{position:absolute;left:0;top:0;min-width:160px;height:56px;box-sizing:border-box;padding:0 12px;border-radius:10px;background:var(--raised-2);box-shadow:0 0 0 1px var(--line),0 12px 24px -14px #000;display:flex;flex-direction:column;justify-content:center;gap:2px;white-space:nowrap;pointer-events:none;z-index:3}
.ctip b{font:700 0.875rem var(--ui);color:var(--ink)}
.ctip span{font-size:0.8125rem;color:var(--ink-2)}.ctip .hot{color:var(--amber-text);font-weight:700}
/* paste states */
.pfield{max-width:640px}
.paste.big.filled{box-shadow:inset 0 0 0 1.5px var(--brand);color:var(--ink)}
.pstack{display:flex;flex-direction:column;gap:4px;max-width:640px;margin-top:14px}
.pslab{font-size:0.8125rem;color:var(--muted);min-height:28px;display:flex;align-items:flex-end;padding:0 0 4px 2px}
.pst{display:flex;align-items:center;gap:12px;min-height:56px;padding:0 6px 0 16px;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);font-size:0.9375rem;color:var(--ink-2)}
.pst .pic{width:32px;height:32px;border-radius:9px;flex:none}
.pst .q{font-weight:600;color:var(--ink);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pst .pp{font-weight:700;color:var(--ink);white-space:nowrap}
.pst .fo{color:var(--ink-2);white-space:nowrap}
.pst a.op{min-height:44px;min-width:44px;padding:0 14px;display:inline-flex;align-items:center;color:var(--brand);font-weight:600;white-space:nowrap;border-radius:12px}
.pst .spin{width:16px;height:16px;border-radius:8px;border:2px solid var(--line);border-top-color:var(--brand);flex:none}
.pst svg{width:18px;height:18px;flex:none;color:var(--muted)}
.pst.err{padding-right:16px}
/* resolved market */
.big.res{margin-top:4px}.big.res .sd{font-size:1.0625rem;color:var(--ink-2)}
.rmeta{font-size:0.875rem;color:var(--ink-2);margin-top:4px}
.hline{font-size:0.9375rem;color:var(--ink-2);margin-top:2px}.hline b{font-weight:700}
.aloff{display:flex;align-items:center;gap:8px;min-height:44px;margin-top:0;font-size:0.875rem;color:var(--muted)}
.aloff svg{width:18px;height:18px;flex:none}
.aloff a{margin-left:auto;min-height:44px;display:inline-flex;align-items:center;color:var(--brand);font-weight:600;white-space:nowrap}
.ix .no{width:24px;height:24px;border-radius:12px;box-shadow:inset 0 0 0 1px var(--ink-2);display:inline-flex;align-items:center;justify-content:center;font:700 0.8125rem var(--ui);color:var(--ink);flex:none}
.ix.res b{min-width:auto;white-space:nowrap}
.ix.res .tm{min-width:52px}
.coll{font-size:0.8125rem;color:var(--muted);margin:0 0 4px;line-height:1.45}
.closed{min-height:48px;display:flex;align-items:center;padding:0 16px;border-radius:14px;background:var(--surface);font-size:0.875rem;color:var(--ink-2);margin-top:12px}
.side .fr.res .q{color:var(--ink-2)}
.side .fr.res .pl b{color:var(--ink-2)}
.side .fr.res .pl b.up{color:var(--up)}
.rescard .rbig{display:flex;align-items:baseline;gap:10px;margin-top:4px}
.rescard .rbig .sd{font-size:1rem;color:var(--ink-2)}
.rescard .rbig .n{font:800 3rem/1 var(--ui);letter-spacing:-.03em;background:var(--sheen);-webkit-background-clip:text;background-clip:text;color:transparent}
.alend{padding:8px 12px 10px;border-top:1px solid var(--hairline);font-size:0.8125rem;color:var(--muted);line-height:1.45}
.alend a{color:var(--brand);font-weight:600;min-height:44px;display:inline-flex;align-items:center}

/* ---- Small-text sweep: info button, popover, live dot, About ---- */
.iw{position:relative;display:inline-flex;vertical-align:middle;margin-left:2px}
.ib-i{width:44px;height:44px;margin:-12px -8px -12px -6px;display:inline-flex;align-items:center;justify-content:center;background:none;border:0;padding:0;cursor:pointer;color:var(--muted);text-decoration:none}
.ib-i span{width:20px;height:20px;box-sizing:border-box;border-radius:50%;box-shadow:inset 0 0 0 1.5px currentColor;display:inline-flex;align-items:center;justify-content:center;font:700 0.75rem/1 var(--ui);letter-spacing:0;text-transform:none}
.ib-i:hover,.ib-i:focus-visible,.ib-i[aria-expanded="true"]{color:var(--ink-2)}
.ipop{display:none;position:absolute;top:calc(100% + 8px);left:-10px;z-index:30;width:max-content;max-width:260px;box-sizing:border-box;padding:10px 12px;border-radius:12px;background:var(--raised);box-shadow:0 0 0 1px var(--line),0 8px 24px rgba(0,0,0,.45);font:400 0.8125rem/1.45 var(--ui);color:var(--ink-2);letter-spacing:0;text-transform:none;white-space:normal;text-align:left}
.ipop.r{left:auto;right:-10px;top:auto;bottom:calc(100% + 8px)}
.ipop .ip2{display:block;margin-top:6px}
.iw:hover .ipop,.iw:focus-within .ipop,.ipop.show{display:block}
h1 .qi{vertical-align:4px;margin-left:4px}
.ldot{display:inline-flex;align-items:center;gap:6px;margin-left:12px;vertical-align:middle;flex:none;font:600 0.8125rem/1 var(--ui)!important;letter-spacing:0;text-transform:none;color:var(--ink-2);white-space:nowrap}
.ldot i{width:7px;height:7px;border-radius:50%;background:var(--brand);flex:none}
.ptitle h2 .ldot{vertical-align:8px;margin-left:12px}
.foot.stale{color:var(--ink-2)}
.comp .box .iw{margin-left:4px}
.about2{border-top:1px solid var(--hairline);margin-top:4px}
.about2 summary{list-style:none;min-height:48px;display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:0.9375rem;color:var(--ink);cursor:pointer}
.about2 summary::-webkit-details-marker{display:none}
.about2 summary .chev{color:var(--muted);font-size:1.125rem}
.about2[open] summary .chev{transform:rotate(90deg)}
.abt{display:flex;flex-direction:column;margin-bottom:12px}
.abt .ai{min-height:44px;display:flex;flex-direction:column;justify-content:center;gap:1px;padding:8px 0;border-top:1px solid var(--hairline);font-size:0.875rem;line-height:1.4;color:var(--ink-2)}
.abt .ak{font-size:0.8125rem;color:var(--muted)}
.abt a.ai span:last-child{color:var(--ink)}
.notes li.swp b{color:#e8d9a0}

/* ---- Round 11 (fresh reviewer) ---- */
.home>div:last-child{width:100%;max-width:none;justify-self:stretch;min-width:0}
.side .fr .pl.ps{font-size:0.8125rem;color:var(--ink-2)}
.side .fr .pl.ps b{font:600 0.8125rem var(--ui);margin-right:0;color:var(--ink)}
.side .fr .pl.ps b.dn{color:var(--down)}.side .fr .pl.ps b.up{color:var(--up)}
.pin .pk>span:first-child{font:600 0.9375rem var(--ui);color:var(--ink-2)}
.ix b{min-width:190px;white-space:nowrap}
.w1024 .ix b{min-width:176px}
.vp.cq .mkt .chart,.mkt .chart{height:260px}
.w1024 .vp.cq .mkt .chart{height:240px}
.mkt>.l.mq{position:static}
.mkt .ticks{padding-right:84px}
.paste kbd{font:600 0.75rem var(--ui);color:var(--ink-2);border-color:var(--line)}
.acard .l .hot{color:var(--amber-text);font-weight:700}
.mvl{font-weight:600;color:var(--ink-2)}.mvl.hot{color:var(--amber-text)}
.img.m1,.thumb.m1,.img.m2,.thumb.m2,.img.m3,.thumb.m3{background-color:var(--raised);background-size:cover;background-position:center;box-shadow:none}
.recap{font-size:0.9375rem;line-height:1.3;color:var(--ink-2);margin-top:0}.recap b{font-weight:700}.recap b.dn{color:var(--down)}
.nsd{display:flex;align-items:center;gap:10px;margin:-4px 0 0;line-height:16px;font:600 0.8125rem/1rem var(--ui);color:var(--ink-2)}
.nsd::after{content:"";flex:1;height:1px;background:var(--line)}
.nsd.old{display:block;height:1px;margin:0;background:var(--line)}.nsd.old::after{display:none}
#s-market-since .idx{margin-top:6px}#s-market-since .nsd.rnew{margin:0 0 8px}#s-market-since .nsd.rold{margin:26px 0 0}#s-market-since .nsd.rold+.mvh{margin-top:12px}#s-market-since .idx .mh{min-height:36px}
.img.m1,.thumb.m1{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 180' preserveAspectRatio='xMidYMid slice'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%232c3550'/%3E%3Cstop offset='1' stop-color='%231d2438'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='320' height='180' fill='url(%23g)'/%3E%3Crect x='0' y='120' width='320' height='60' fill='%231a2032'/%3E%3Crect x='60' y='40' width='6' height='90' fill='%2359647f'/%3E%3Cpath d='M66 42h34v22H66z' fill='%234a5674'/%3E%3Crect x='254' y='40' width='6' height='90' fill='%2359647f'/%3E%3Cpath d='M260 42h34v22h-34z' fill='%234a5674'/%3E%3Ccircle cx='160' cy='62' r='17' fill='%238d97b2'/%3E%3Cpath d='M128 118c2-22 15-32 32-32s30 10 32 32z' fill='%237a849f'/%3E%3Cpath d='M122 108h76l-8 54h-60z' fill='%233d4763'/%3E%3Crect x='150' y='118' width='20' height='12' rx='3' fill='%238d97b2'/%3E%3Cpath d='M160 108v-12' stroke='%23aab3c9' stroke-width='3'/%3E%3C/svg%3E")}
.img.m2,.thumb.m2{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 180' preserveAspectRatio='xMidYMid slice'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%233a3452'/%3E%3Cstop offset='1' stop-color='%231f2236'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='320' height='180' fill='url(%23g)'/%3E%3Ccircle cx='250' cy='52' r='16' fill='%23c9b9e8' opacity='.35'/%3E%3Cpath d='M120 96a40 40 0 0 1 80 0z' fill='%238e88ad'/%3E%3Crect x='157' y='40' width='6' height='20' fill='%238e88ad'/%3E%3Crect x='108' y='96' width='104' height='8' fill='%23a29dbf'/%3E%3Cpath d='M116 104v36M128 104v36M140 104v36M152 104v36M168 104v36M180 104v36M192 104v36M204 104v36' stroke='%238e88ad' stroke-width='5'/%3E%3Crect x='70' y='118' width='180' height='26' fill='%236d6890'/%3E%3Crect x='0' y='144' width='320' height='36' fill='%23191c2c'/%3E%3C/svg%3E")}
.img.m3,.thumb.m3{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 180' preserveAspectRatio='xMidYMid slice'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%2323324a'/%3E%3Cstop offset='1' stop-color='%23182030'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='320' height='180' fill='url(%23g)'/%3E%3Crect x='34' y='40' width='120' height='76' rx='6' fill='%2333415e'/%3E%3Crect x='166' y='40' width='120' height='76' rx='6' fill='%2333415e'/%3E%3Cpath d='M44 98l18-14 14 8 18-22 14 10 16-14 20 6' fill='none' stroke='%238fe0c4' stroke-width='3' stroke-linejoin='round'/%3E%3Cpath d='M176 60l18 10 16-6 18 18 14-4 16 16 16 2' fill='none' stroke='%23f2a0b4' stroke-width='3' stroke-linejoin='round'/%3E%3Crect x='84' y='116' width='20' height='16' fill='%232a3550'/%3E%3Crect x='216' y='116' width='20' height='16' fill='%232a3550'/%3E%3Crect x='0' y='132' width='320' height='48' fill='%23141a28'/%3E%3Crect x='60' y='140' width='200' height='10' rx='5' fill='%23232c42'/%3E%3C/svg%3E")}

/* ---- Big chart round ---- */
.snl{display:flex;align-items:center;min-height:32px;margin:-6px 0 4px;font-size:0.8125rem;color:var(--muted)}
.snl .ldot{margin-left:14px}
.hrow.look{flex-wrap:wrap;gap:6px 16px;margin-top:12px}
.hrow.look .btn.wfree{margin-left:0;background:var(--brand);color:#0A0F1E;box-shadow:none;font-weight:700;font-size:0.9375rem;padding:0 20px}
.hrow.look .btn.wfree svg{width:18px;height:18px;color:#0A0F1E}
.hrow.look .lk{font-size:0.875rem;color:var(--ink-2)}
.hrow.look .lk a{display:inline-flex;align-items:center;min-height:44px;color:var(--brand);font-weight:600}

/* ---- moves jump link ---- */
.ctl{flex-wrap:nowrap}
.mvjump{min-height:44px;display:inline-flex;align-items:center;padding:0 4px;font-size:0.875rem;font-weight:600;color:var(--brand);white-space:nowrap}
.mvjump span{margin-left:4px}
.idx{scroll-margin-top:16px}

/* ---- news thumbnails on the market page ---- */
.post .nrow{display:flex;align-items:flex-start;gap:12px}
.post .nrow .tx{flex:1;min-width:0}
.post .nrow .thumb{width:72px;height:72px;flex:none;border-radius:10px;margin-top:2px}

/* ---- Kha's final notes: the bell ---- */
.bellw{position:relative;display:inline-flex}
.bell{position:relative;width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;border:0;padding:0;margin-left:auto;border-radius:999px;background:none;color:var(--ink-2);cursor:pointer}
.nopaste+.bell,.nopaste+.bellw{margin-left:0}
.bell svg{width:22px;height:22px}
.bell:hover{background:var(--surface);color:var(--ink)}
.bell.open,.bell.on{background:var(--raised);color:var(--ink)}
.bell .bdot{position:absolute;top:10px;right:11px;width:8px;height:8px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 2px var(--bg)}
.bell.open .bdot{box-shadow:0 0 0 2px var(--raised)}
.bell+.me,.bellw+.me{margin-left:4px}
.me{position:relative}
.bpop{position:absolute;top:calc(100% + 10px);right:-52px;width:380px;max-width:calc(100vw - 32px);padding:6px;border-radius:16px;background:var(--raised);box-shadow:0 0 0 1px var(--line),0 24px 50px -20px #000;z-index:30;text-align:left}
.bph{display:flex;align-items:baseline;justify-content:space-between;padding:10px 12px 8px;border-bottom:1px solid var(--line);margin-bottom:4px}
.bph b{font:700 0.9375rem var(--ui);color:var(--ink)}.bph span{font-size:0.8125rem;color:var(--ink-2)}
.bpr{position:relative;display:flex;align-items:flex-start;gap:12px;min-height:44px;padding:10px 28px 10px 12px;border-radius:12px}
.bpr+.bpr{margin-top:2px}
.bpr:hover{background:var(--raised-2)}
.bpr.new{background:var(--raised-2)}
.bpr .pic{width:28px;height:28px;border-radius:8px;margin-top:1px}
.bpt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.bpk{display:flex;align-items:baseline;gap:10px}
.bpq{flex:1;min-width:0;font:600 0.875rem/1.3 var(--ui);color:var(--ink)}
.bptm{flex:none;font-size:0.8125rem;color:var(--muted);white-space:nowrap}
.bpm{font-size:0.875rem;line-height:1.35;color:var(--ink-2)}.bpm .hot{color:var(--amber-text);font-weight:700}
.bpl{font-size:0.8125rem;line-height:1.35;color:var(--muted)}
.bpr .ud{position:absolute;right:12px;top:16px;width:8px;height:8px;border-radius:50%;background:var(--brand)}
.bpf{display:flex;align-items:center;justify-content:center;gap:6px;min-height:44px;margin-top:4px;border-top:1px solid var(--line);font:600 0.875rem var(--ui);color:var(--brand)}
.post .ft a.out,.fpost .ft a.out{justify-content:flex-start}

/* ---- journey swarm fix round (2026-10-09) ---- */
.fmore{display:flex;align-items:center;gap:10px;min-height:44px;margin:6px 0 2px;padding:0 14px;border-radius:12px;background:var(--surface);font:600 0.875rem var(--ui);color:var(--brand)}
.fmore .pic{width:20px;height:20px;border-radius:6px}.fmore span:last-child{margin-left:auto}
.nsd.seen{color:var(--muted);margin-top:6px}
.btn.stopb{margin-left:auto;color:var(--ink-2)}
.newb{display:inline-flex;align-items:center;height:20px;padding:0 7px;margin-left:6px;border-radius:999px;background:var(--raised);color:var(--brand);font:700 0.6875rem var(--ui);letter-spacing:.04em;text-transform:uppercase;vertical-align:2px}
.freel{margin-top:14px;font-size:0.8125rem;line-height:1.4;color:var(--muted)}
.getal{display:flex;align-items:center;gap:10px;min-height:44px;margin-top:8px;padding:0 12px;border-radius:12px;box-shadow:inset 0 0 0 1px var(--line);font:600 0.875rem var(--ui);color:var(--ink)}
.getal svg{width:18px;height:18px;color:var(--brand);flex:none}.getal span:last-child{margin-left:auto;color:var(--brand)}
.lbk{display:flex;align-items:center;min-height:44px;margin-bottom:6px;padding:0 14px;border-radius:12px;background:var(--surface);font-size:0.875rem;color:var(--ink-2)}
.scrim.ssr{justify-content:flex-end;align-items:stretch}
.ssh{width:420px;max-width:100%;height:100%;overflow:auto;padding:24px 28px;background:var(--surface);border-radius:20px 0 0 20px;box-shadow:0 0 0 1px var(--line),0 40px 90px -30px #000}
.ssh h4{margin:4px 0 0;font:800 1.375rem/1.2 var(--ui)}
.ssh .sub{display:flex;align-items:center;gap:8px;font-size:0.875rem;color:var(--muted);margin-top:6px}.ssh .sub .pic{width:20px;height:20px;border-radius:6px;flex:none}
.ssh .lbl{font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:18px 0 6px}
.ssk{display:flex;align-items:center;justify-content:space-between;font-size:0.8125rem;font-weight:600;color:var(--muted)}
.x{width:44px;height:44px;margin:-8px -12px 0 0;border-radius:999px;font-size:1.375rem;color:var(--ink-2);display:inline-flex;align-items:center;justify-content:center}
.ssf{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}
.ssf label{min-width:0;display:flex;flex-direction:column;gap:6px;font-size:0.8125rem;font-weight:600;color:var(--ink-2)}
.inp{min-width:0;display:flex;align-items:center;min-height:48px;padding:0 14px;border-radius:12px;background:var(--bg);box-shadow:inset 0 0 0 1px var(--line)}
.inp input{flex:1;min-width:0;background:none;border:0;outline:0;font:600 1.0625rem var(--ui);color:var(--ink)}.inp input::placeholder{color:var(--faint)}
.inp i{font-style:normal;color:var(--muted)}
.inp input{width:100%;height:46px;padding:0}
.ssc{margin-top:10px;font-size:0.8125rem;line-height:1.4;color:var(--muted)}.ssc b{font-weight:700}
.ssn{margin:14px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.gate .gth{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.gk{font-size:0.8125rem;font-weight:600;color:var(--muted);margin-bottom:6px}
.gp{margin:8px 0 0;font-size:0.9375rem;line-height:1.45;color:var(--ink-2)}.gp b{color:var(--ink)}
.gq{margin:10px 0 0;font-size:0.8125rem;color:var(--muted)}
.salert{display:flex;gap:12px;margin-top:14px;padding:12px;border-radius:14px;background:var(--raised)}
.salert .pic{width:28px;height:28px;border-radius:8px;flex:none}
.gbtn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:48px;margin-top:18px;border-radius:999px;background:#fff;color:#1f1f1f;font:600 0.9375rem var(--ui)}
.consent{margin:10px 0 0;font-size:0.8125rem;line-height:1.4;color:var(--muted);text-align:center}.consent a{color:var(--ink-2);text-decoration:underline;text-underline-offset:3px}
.btn.gnot{display:flex;width:100%;justify-content:center;margin-top:10px;box-shadow:none;color:var(--ink-2)}
.gbox{display:flex;flex-direction:column;gap:6px;margin-top:14px;padding:16px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line)}
.gbox b{font-size:0.9375rem;color:var(--ink)}.gbox span{font-size:0.875rem;line-height:1.45;color:var(--ink-2)}.gbox .pri,.gbox .btn{align-self:flex-start;margin-top:6px}
.btn.wfree2{margin-left:auto}.btn.wfree2 svg{width:18px;height:18px;color:var(--brand)}
.toast{position:absolute;left:50%;bottom:28px;transform:translateX(-50%);z-index:45;display:flex;align-items:center;gap:16px;max-width:calc(100% - 32px);min-height:52px;padding:4px 6px 4px 18px;border-radius:14px;background:var(--raised);box-shadow:0 0 0 1px var(--line),0 24px 50px -20px #000;font-size:0.875rem;color:var(--ink)}
.toast button{min-height:44px;padding:0 14px;border-radius:10px;color:var(--brand);font-weight:700}

/* ---- fix round 2 (2026-10-09) ---- */
.msince{color:var(--muted);font-weight:400}
.btn.getb{box-shadow:inset 0 0 0 1px var(--line)}.btn.getb svg{color:var(--ink-2)}
details.later{margin-top:8px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--hairline)}
details.later summary{list-style:none;display:flex;align-items:center;justify-content:space-between;min-height:44px;padding:0 14px;font-size:0.875rem;font-weight:600;color:var(--ink-2);cursor:pointer}
details.later summary::-webkit-details-marker{display:none}
details.later p{margin:0;padding:0 14px 12px;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.ask{margin:12px 0 0;font-size:0.875rem;line-height:1.45;color:var(--ink-2)}.ask.wait{color:var(--ink)}
.pri.wide{display:flex;width:100%;justify-content:center;min-height:48px;margin-top:16px}
.pri[aria-disabled="true"]{opacity:.45}
.perm{position:absolute;top:8px;left:92px;z-index:50;width:320px;max-width:calc(100% - 32px);padding:14px 16px;border-radius:12px;background:#F3F4F7;color:#1f1f1f;box-shadow:0 18px 40px -12px #000;font:0.875rem/1.4 var(--ui)}
.perm .pmh{font-size:0.875rem}.perm .pmr{display:flex;align-items:center;gap:10px;margin-top:10px;font-size:0.875rem}.perm .pmr svg{width:18px;height:18px;color:#444}
.perm .pmb{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
.perm .pmb button{min-height:44px;min-width:76px;padding:0 16px;border-radius:999px;box-shadow:inset 0 0 0 1px #c9ccd3;color:#1a4fb8;font-weight:600}
.perm .pmb button.al{background:#1a5fd8;color:#fff;box-shadow:none}
.notif{position:absolute;top:16px;right:20px;z-index:50;display:flex;gap:12px;width:360px;max-width:calc(100% - 32px);padding:14px;border-radius:16px;background:var(--raised);box-shadow:0 0 0 1px var(--line),0 24px 50px -20px #000}
.notif .pic{width:32px;height:32px;border-radius:8px;flex:none}
.notif .ntx{display:flex;flex-direction:column;gap:3px;min-width:0}
.notif .nth{display:flex;justify-content:space-between;gap:10px;font-size:0.875rem}.notif .nth span{font-size:0.8125rem;color:var(--muted);white-space:nowrap}
.notif .nb{font-size:0.875rem;line-height:1.4;color:var(--ink-2)}.notif .nf{font-size:0.8125rem;color:var(--muted)}
.tst{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:999px;background:var(--surface);color:var(--brand);font:700 0.6875rem var(--ui);letter-spacing:.04em;text-transform:uppercase}
.gate .gth h4{margin:0;font:800 1.25rem/1.25 var(--ui)}
.gate .gth .x{flex:none}

/* ---- fix round 3 (2026-10-09) ---- */
.mod details.later{margin:8px 0 4px}
.efl{margin:6px 0 14px;font-size:0.9375rem;line-height:1.4;color:var(--ink-2)}

/* ---- round 18 ---- */
.efl{margin:6px 0 14px;font-size:0.9375rem;line-height:1.4;color:var(--ink-2)}

@media (prefers-reduced-motion: no-preference){
.about2 summary .chev{transition:transform .15s}
}

/* ---- reference additions (ref/build_all.mjs): replace the mock's inline styles and window shell ---- */
.nw{white-space:nowrap}
.r .mvh.later{margin-top:26px}
.win.ref-page{width:auto;border:0;border-radius:0;box-shadow:none;overflow:visible}
.win.ref-page>.vp{height:auto;overflow:visible;container-type:inline-size}
/* live updates (RULES 15): the "N new" pill, the drop of a new item, the polite live region */
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
.newpill{position:fixed;left:0;right:0;margin:0 auto;width:max-content;top:calc(var(--bar-h) + 6px);z-index:20;height:40px;padding:0 18px;border-radius:999px;background:var(--ink);color:var(--bg);font:600 0.875rem var(--ui);box-shadow:0 6px 18px rgba(0,0,0,.45);white-space:nowrap}
.win.ref-page{--bar-h:64px}
.ferr{display:flex;align-items:center;gap:10px;margin-top:8px;padding:4px 4px 4px 14px;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;color:var(--ink-2)}
.ferr svg{width:18px;height:18px;flex:none;color:var(--muted)}
.ferr span{flex:1;min-width:0;line-height:1.35;padding:8px 0}
.retry{flex:none;min-height:44px;padding:0 14px;border-radius:10px;background:var(--raised);color:var(--ink);font-weight:600;font-size:0.875rem}
/* health lines (RULES 15.3): the calm field-error style; the news family is the muted foot style */
.ferr.foot-h{margin:12px 0 4px;padding:0;background:none;box-shadow:none;color:var(--muted)}
.ferr.foot-h span{padding:4px 0}
.ferr.fill{margin-top:16px}
.l .ferr.price-h{margin-top:12px}
/* buttons that replaced <a href="#"> (2026-10-10): the global button reset plus these keep the pixels */
:where(button.act){text-align:start;line-height:inherit}
button.act.plus{width:100%}
button.act.ix{width:calc(100% + 24px)}
/* images are real <img> elements (2026-10-10): the box is fixed by CSS, the picture covers it */
.post .who img.pav{display:block;object-fit:cover;background:var(--raised)}
img.img{display:block;width:100%;height:auto;object-fit:cover}
img.thumb{object-fit:cover}
.i-neutral{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23262c3f'/%3E%3Cpath transform='translate(8 8)' d='M4 19h16M5 15l4-4 3 3 7-7' fill='none' stroke='%23b4bacb' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}

/* round 15 (RULES 32.7): the desktop top bar sits at top:0 and grows by any safe area, its background covering it */
.hd{height:calc(64px + env(safe-area-inset-top,0px));padding-top:env(safe-area-inset-top,0px)}
/* ---- Home (RULES 16): the mock's inline styles as classes; buttons that were links keep the link's look ---- */
.home .divider.mt18{margin-top:18px}
.flab.mt0{margin-top:0}
.side .foot.mt10{margin-top:10px}
.mt18b{margin-top:18px}
.mod.mt22{margin-top:22px}
.rmeta.mt2{margin-top:2px}
.btn.stopb.ml8{margin-left:8px}
.fpost img.img{aspect-ratio:16/9}
/* the mock's 1024 window (.w1024) as a width rule: the reference is responsive, so the 1024 layout applies from the
   900 px switch up to 1151.98 px (proposed in RULES 16.7; the 1280 frames are unchanged) */
@media (max-width:1151.98px){
.win.ref-page .two{gap:28px;grid-template-columns:minmax(0,1fr) 380px}
.win.ref-page .mkt{grid-template-columns:minmax(0,1fr) 380px}
.win.ref-page .mkt>.l{padding-right:28px}
.win.ref-page .mkt>.r{padding-left:24px}
.win.ref-page .pg{padding:24px 28px 48px}
.win.ref-page .hdi{padding:0 28px}
.win.ref-page .paste{flex-basis:300px}
.win.ref-page .home{grid-template-columns:284px minmax(0,1fr);gap:28px}
.win.ref-page .pos{font-size:0.8125rem;padding-left:4px;padding-right:0;white-space:nowrap}
.win.ref-page .pin .pg2{grid-template-columns:minmax(0,1fr) 200px}
.win.ref-page .ix b{min-width:176px}
.win.ref-page .vp .mkt .chart{height:240px}
}
/* the pinned card carries its story's "+N more" (RULES 16.29): the market page's row (RULES 18.21), on the raised fill
   so it still reads as a row on the card's own surface */
.pin .plus:has(>.pgo){background:var(--raised)}
/* a draw on the ended card reads plain, in ink, as the market page's non-wins (MA21; RULES 16.18 addenda) */
.rescard .rbig.plain .n{font-size:2.5rem;background:none;color:var(--ink)}
/* RULES 38: the lead card at the top of the main column: the price in the opal sheen, the 24-hour line beside it */
.pin.lead{position:relative}
.pin.lead .pq{display:flex;align-items:center;gap:12px;min-height:44px;color:var(--ink);text-decoration:none}
.pin.lead .pq::after{content:"";position:absolute;inset:0;border-radius:inherit}
.pin.lead .pk button,.pin.lead .cta{position:relative;z-index:1}
.pin.lead .pq .pic{flex:none}
.pin.lead .pq b{font:800 1.375rem/1.2 var(--ui);letter-spacing:-.01em}
.pin.lead .lbody{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:28px;align-items:end;margin-top:8px}
.pin.lead .lp{display:flex;flex-direction:column;align-items:flex-start}
.pin.lead .lps{font-size:0.875rem;color:var(--muted)}
.pin.lead .lpv{font:800 4rem/.95 var(--ui);letter-spacing:-.035em;background:var(--sheen);-webkit-background-clip:text;background-clip:text;color:transparent;padding:2px 4px 4px 0}
.pin.lead .lm{font:600 1rem/1.35 var(--ui);color:var(--ink-2);margin-top:6px}
.pin.lead .lm .hot{color:var(--amber-text)}.pin.lead .lm .cg{font-weight:700}.pin.lead .lm .cg.dn{color:var(--down)}.pin.lead .lm .cg.up{color:var(--up)}
/* RULES 40.2: no story around the big move: one plain line where the story would be */
.pin.lead .story.none{margin:10px 0 0;font:500 0.875rem/1.4 var(--ui);color:var(--muted)}
.pin.lead .lmo{font-size:0.875rem;margin-top:4px}
.pin.lead .lgn b{font-weight:600}.pin.lead .lgn.down b{color:var(--down)}.pin.lead .lgn.up b{color:var(--up)}
.pin.lead .mini.pinchart{display:block;width:100%;height:120px}
.pin.lead .lrow{display:flex;align-items:flex-end;gap:28px;margin-top:4px}
.pin.lead.calm .lpv{font-size:3rem}
.pin.lead .lcw{flex:1;min-width:0}
.pin.lead .mini.pinchart.lcalm{height:40px}
.pin.lead .lcw{text-align:right}
.pin.lead.calm .lmo{margin:0 0 6px}
.pin.lead.calm .lm{font-weight:500;color:var(--muted);margin-top:6px}

/* the "N new" pill reads as a notice: raised surface, ink text, a 1 px line, the pill shadow (ACCEPTED A13) */
.newpill{background:var(--raised);color:var(--ink);border:1px solid var(--line)}
/* filling: the calm empty chart frame, no line, no band */
svg.chart.empty{display:block;width:100%;background:linear-gradient(var(--hairline),var(--hairline)) left bottom/100% 1px no-repeat}
/* "+N more from …" reads as tappable on every surface (fifth review, RULES 18.21): a row on the card surface with a
   brand "›" at its end, as Home's desktop card (.fmore) has it; the text stays quiet (ink-2, regular), 44 px tall */
.plus:has(>.pgo){margin-top:10px;padding:0 14px;border-radius:12px;background:var(--surface);box-sizing:border-box}
.plus .pgo{margin-left:auto;padding-left:12px;color:var(--brand);font-weight:600}

/* stale prices: a muted as-of suffix after the big price (desktop only; the phone relies on the health line) */
.big .asof{font-size:0.875rem;color:var(--muted);font-weight:500}
/* the left column (price, holder row, chart) stays under the 64 px header while the feed scrolls (RULES 18.14,
   ACCEPTED MA19). The mock set it static because its window shell scrolled .vp. A column taller than the viewport is
   capped at the viewport under the header and scrolls inside (scrolling chains on to the page); the negative bottom
   margin lets it stay pinned through the page's bottom padding instead of being pushed up under the header. */
.mkt>.l.mq{position:sticky;top:64px;max-height:calc(100vh - 64px);overflow-y:auto;scrollbar-width:thin;margin-bottom:-56px}
/* the right column's anchors (#alert-d, #about-d) land 16 px under the 64 px header (RULES 18.17); the left column's
   #moves-d scrolls inside the sticky column, which already starts under the header (.idx, 16 px) */
.mkt>.r [id]{scroll-margin-top:calc(var(--bar-h) + 16px)}
}

@keyframes drop{from{transform:translateY(-10px);opacity:0}to{transform:none;opacity:1}}
@keyframes fadein{from{opacity:0}to{opacity:1}}
@media (prefers-reduced-motion: no-preference){.is-new{animation:drop .35s ease-out both}.newpill{animation:drop .35s ease-out both}}
@media (prefers-reduced-motion: reduce){.is-new{animation:fadein .35s ease-out both}.newpill{animation:fadein .35s ease-out both}}
/* journey: market-rest */
@media (max-width:899.98px){
/* the small-phone shell (frame P15) is the page too: no fixed height */
.ph.sm{height:auto}
}
@media (min-width:900px){
/* "Since your alert" row (frame D4): the mock's inline style as a class; its "2 new ↓" link takes .alnew because
   .newpill is the floating live pill (RULES 15.5) */
.r .since.al{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 4px 0 12px;width:100%;white-space:nowrap}
.alnew{display:inline-flex;align-items:center;min-height:44px;color:var(--brand);font-weight:600;font-size:0.875rem}
/* the mock scoped these to its section id (#s-market-since) */
.nsd.rnew{margin:0 0 8px}
/* "Get alerts on big moves · free account" opens a sheet, so it is a <button> styled as the mock's link */
.hrow.look .lk button{display:inline-flex;align-items:center;min-height:44px;color:var(--brand);font-weight:600}
}
@media (max-width:899.98px){
/* the ended page's biggest-move rows (frame P19) open their move in place, so they are <button>s laid out as the mock's links */
button.bmc{width:100%;text-align:start}
}
@media (max-width:899.98px){
/* the ended page's holder bar fits from 320 up (RULES 18.13, ACCEPTED MA18): the side button's text wraps inside the
   button (each part stays whole) instead of the mock's max-content width pushing "Stop watching" off the right edge */
.hbar.fin .hs{min-width:0;flex:1 1 0;flex-wrap:wrap;white-space:normal;gap:0 5px;line-height:1.25}
.hbar.fin .hs>span{white-space:nowrap}
/* two lines, no orphan separator (2026-10-10, fourth review): "✓ Your side won" stays whole on the first line, "Edit
   side ›" sits on its own line under it (below 380 the pencil replaces it, inside the first line) */
.hbar.fin .hsf{flex-direction:column;align-items:flex-start;justify-content:center;gap:1px}
.hbar.fin .hsf .hwl{display:inline-flex;align-items:center;gap:0 5px;white-space:nowrap}
}
@media (max-width:899.98px){
/* non-wins read plain (RULES 18.11, 2026-10-10): a draw or a cancel is set in ink, smaller, never the gradient
   wordmark of a win; the holder bar shows no success check */
.rres.plain{align-items:baseline}
.rres.plain .n{font-size:2rem;line-height:1.05;background:none;color:var(--ink)}
/* cancelled: the bar is one line to Polymarket's payout, then Stop watching (wraps inside itself on the smallest phones) */
.hbar.fin.plain .hpay{flex:1 1 0;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:0 4px;min-height:44px;font:600 0.8125rem/1.25 var(--ui);color:var(--brand)}
.hbar.fin.plain .stopw{padding:0 10px}
.hbar.fin.plain .hpay b{font-weight:600;color:var(--ink)}
.hbar.fin.plain .hpay>*{white-space:nowrap}
}
@media (min-width:900px){
.big.res.plain .n{font-size:2.5rem;background:none;color:var(--ink)}
}
@media (max-width:899.98px){
/* a winning holder's next step (RULES 18.16): one muted line to collect on Polymarket, a 44 px tap target that keeps
   the line's own height */
a.collect{display:flex;align-items:center;width:max-content;max-width:100%;min-height:44px;margin:-10px 0 -12px;font-size:0.8125rem;line-height:1.35;color:var(--muted)}
}
@media (min-width:900px){
a.collect{display:flex;align-items:center;width:max-content;max-width:100%;min-height:44px;margin:-8px 0 -10px;font-size:0.875rem;line-height:1.4;color:var(--muted)}
}
@media (max-width:899.98px){
/* "Other news and posts" (RULES 18.23, ACCEPTED OT1): under the moves, above About. Its header is a usual-size move's
   (ink, never amber) with the count line in the window line's place; the cards are the moves' own. A later move's gap
   above it; on a quiet day (no moves) it follows the range buttons as the first move header would (16 px) */
.g.mq .oth{margin-top:26px}
.g.mq .rng+.oth{margin-top:16px}
.g.mq .oth>.mvh{margin-top:0}
.oth h2.t{margin:0}
/* "Show more": a quiet row on the card surface, as "+N more", with its words in the brand colour */
.oth .omore{justify-content:center;margin-top:10px;padding:0 14px;border-radius:12px;background:var(--surface);box-sizing:border-box;color:var(--brand);font-weight:600}
}
@media (min-width:900px){
/* "Other news and posts" (RULES 18.23): in the right column under the moves, a later move's gap above it; on a quiet
   day under "Today: 0 moves", as the first move header */
.r .oth{margin-top:26px}
.r .sum+.oth{margin-top:10px}
.r .oth>.mvh{margin-top:0}
.oth h2.t{margin:0}
.oth .omore{justify-content:center;margin-top:10px;padding:0 14px;border-radius:12px;background:var(--surface);box-sizing:border-box;color:var(--brand);font-weight:600}
/* a day with no moves: "0 moves today" is plain text, not a jump (there is no moves list under it), in the phone change
   line's ink-2, as the phone's "0 moves today" */
span.mvjump{color:var(--ink-2)}
}
/* Home: the muted link after a market's capped no-move items, "4 more on Fed Decision in October? ›" (RULES 16.4,
   ACCEPTED OT3); the "+N more" row's shape, in muted ink */
.plus.omh,.fmore.omh{color:var(--muted);font-weight:500}
.plus.omh>span:first-child,.fmore.omh>span[data-ref$=".text"]{min-width:0}
/* the market page's jump to "Other news and posts" keeps its words together (RULES 18.23, ACCEPTED OT3) */
.ojump{white-space:nowrap}
/* the other outlets on a story: one plain muted line inside its card, never a row or a link (ACCEPTED MA34) */
.acov{margin:8px 0 0;font-size:0.8125rem;line-height:1.35;color:var(--muted)}
.post>.acov,.fpost>.acov{margin:10px 0 0}
/* Home cards: the market line is the link to the market, in ink with a › (ACCEPTED HA48); 44 px tall as before */
.post .tagl b,.fpost .tag b{color:var(--ink)}
.tgo{flex:none;color:var(--ink);font-weight:600;margin-left:.35em}
.post .tagl .tgo{margin-left:0}
@media (min-width:900px){
/* desktop Home's feed filter above the feed (ACCEPTED HA49) */
.showf{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 14px}
.showf .shl{font-size:0.8125rem;color:var(--muted);margin-right:2px}
.showf .shc{display:inline-block;line-height:40px;min-height:40px;box-sizing:border-box;max-width:16em;padding:0 14px;border-radius:999px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);font:600 0.8125rem/40px var(--ui);color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.showf .shc:hover{background:var(--raised)}
.showf .shc.on{background:var(--raised);color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--brand)}
}
/* floor row 1 (RULES 18.24, 16.30; ACCEPTED FL1, FL2): the thin line after a thin market's items, on the market page
   and on a one-market Home. A calm note, outlined with the feed's hairline and no fill so it never reads as one more
   card, in muted words; never the error line's look (no icon, no tint) */
@media (max-width:899.98px){
.thin{margin:12px 0 0;padding:12px 14px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;line-height:1.45;color:var(--ink-2)}
.thin b{color:var(--ink);font-weight:600}
}
@media (min-width:900px){
.thin{margin:12px 0 0;padding:12px 16px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.875rem;line-height:1.45;color:var(--ink-2)}
.thin b{color:var(--ink);font-weight:600}
}
/* floor row 2 (RULES 18.25, 16.31; ACCEPTED FL3, FL4): the "Top · Latest" switch. Two buttons, 44 px tall to tap, the
   pressed one on a raised pill in ink and the other in muted words; quiet, so the list stays the loud thing. In the
   market page's "Other news and posts" header it sits at the right of the title; on Home it is its own row at the right,
   above the feed's heading */
.ord{display:inline-flex;flex:none;align-items:center;isolation:isolate}
.ord .ordb{position:relative;display:inline-flex;align-items:center;min-height:44px;padding:0 12px;margin:0;border:0;background:none;font:600 0.8125rem var(--ui);color:var(--muted);white-space:nowrap;cursor:pointer}
.ord .ordb::before{content:"";position:absolute;inset:8px 0;border-radius:999px;z-index:-1}
.ord .ordb[aria-pressed="true"]{color:var(--ink)}
.ord .ordb[aria-pressed="true"]::before{background:var(--raised);box-shadow:inset 0 0 0 1px var(--line)}
.ord .ordb:focus-visible{outline:2px solid var(--brand);outline-offset:-6px;border-radius:999px}
.mvh .ord{margin:-6px -4px 0 0}
.g.hf>.ord,[data-ref="home.feed"]>.ord{display:flex;width:max-content;margin:6px -4px -6px auto}
/* "See all {n} on {question} ›" under Top (RULES 16.31): OT3's muted link, its words in ink-2 so it reads as the way on */
.plus.omh.sall,.fmore.omh.sall{color:var(--ink-2)}
/* floor rows 3 + 3b (RULES 18.26, 16.32; ACCEPTED FL5, FL6): the crowd line, the notable-trade card and the crowd sheet.
   The crowd line is one quiet row, outlined with the feed's hairline, its count in ink and the rest in ink-2, a chevron
   that says it opens; on a stale read the glyph goes muted. A trade card is the feed's card with a lavender edge on its
   left and the two-arrow tile in place of an outlet's logo or a face, so it never reads as a post or a story; the
   holder's side is a small tag at the right of its header (with: up green, against: down pink, RULES 1.8's colours). */
.crowd{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;min-height:44px;margin:12px 0 2px;padding:9px 12px;border:0;border-radius:12px;background:none;box-shadow:inset 0 0 0 1px var(--line);text-align:start;font:400 0.8125rem/1.4 var(--ui);color:var(--ink-2);cursor:pointer}
.crowd>svg{width:16px;height:16px;flex:none;color:var(--brand)}
.crowd.stale>svg{color:var(--muted)}
.crowd .ct{flex:1;min-width:0}
.crowd .ct b{font-weight:600;color:var(--ink)}
.crowd .cs{color:var(--faint)}
.crowd .cg{flex:none;font-size:1rem;color:var(--muted)}
.crowd:hover{background:var(--surface)}
.crowd:focus-visible,.tgo:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.post.trade,.fpost.trade{box-shadow:inset 3px 0 0 var(--brand)}
.tico{width:24px;height:24px;border-radius:6px;flex:none;display:inline-flex;align-items:center;justify-content:center;background:var(--raised-2);color:var(--brand)}
.tico svg{width:15px;height:15px}
.tside{margin-left:auto;padding:2px 9px;border-radius:999px;background:var(--raised);font:600 0.75rem/1.5 var(--ui);white-space:nowrap}
.tside.with{color:var(--up)}
.tside.against{color:var(--down)}
.post.trade .tx,.fpost.trade .tx{font-size:0.9375rem;line-height:1.45;color:var(--ink-2)}
.post.trade .tx b,.fpost.trade .tx b,.crt b{font-weight:700;color:var(--ink)}
.tn{color:var(--ink-2)}
.tw{color:var(--muted)}
.tn,.tw,.crowd .cp,.crowd .ct b{white-space:nowrap}
.post.trade .ft,.fpost.trade .ft{display:flex;justify-content:flex-start}
.tgo{display:inline-flex;align-items:center;min-height:44px;padding:0;margin:0;border:0;background:none;font:600 0.8125rem var(--ui);color:var(--ink-2);cursor:pointer}
.csheet .cwin,.cdlg .cwin{margin:0;font-size:0.8125rem;color:var(--muted)}
.csheet .cstat,.cdlg .cstat{margin:0;font:600 1rem/1.35 var(--ui);color:var(--ink)}
.cnh{margin:6px 0 0;font:700 0.75rem/1.3 var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.clist{list-style:none;margin:0;padding:0}
.crow{padding:10px 0;border-top:1px solid var(--hairline)}
.crow:first-child{border-top:0;padding-top:4px}
.crt{margin:0;font-size:0.9375rem;line-height:1.4;color:var(--ink-2)}
.crm{display:flex;align-items:center;gap:8px;margin:4px 0 0;font-size:0.8125rem;color:var(--muted)}
.cnone{margin:0;font-size:0.875rem;line-height:1.45;color:var(--ink-2)}
@media (max-width:899.98px){
.post.trade{padding-top:12px}
.post.trade .psrc b{font-size:0.9375rem}
.post.trade .ft{margin:2px 0 -10px}
.post.trade .tagl{margin-top:-8px}
}
@media (min-width:900px){
.crowd{margin:14px 0 4px}
.post.trade .who .tico,.fpost.trade .who .tico{width:28px;height:28px;border-radius:8px}
.post.trade .ft,.fpost.trade .ft{margin-top:2px}
.dlg.cdlg{width:480px;max-height:calc(100vh - 80px);overflow-y:auto;display:flex;flex-direction:column;gap:12px}
.dlg.cdlg .dhd{margin-bottom:4px}
.dlg.cdlg .dfoot{margin-top:8px}
}
/* floor row 6 (RULES 18.30; ACCEPTED FL10): the pulse line, a link to About right above the crowd line (RULES 3.3). Its
   lead ("Calm for your Yes", or the day's change in the holder's side, coloured as RULES 1.8) in ink, the facts in ink-2,
   the dots faint, a chevron that says it opens. No outline, so it reads as the day's line, not one more card.
   On the phone, a day with no move compacts the head (`.pday`): P15's small-phone title (1.5rem, the share button
   floated), tighter margins over the chart, the change line dropped (the pulse carries it), and the crowd line as a row
   between two hairlines, without its glyph, so it holds one line at 390 (bar 5's budget, measured in RULES 18.30). */
.pulse{display:flex;align-items:flex-start;gap:8px;min-height:24px;margin:12px 0 0;padding:2px 0;font:400 0.8125rem/1.4 var(--ui);color:var(--ink-2);text-decoration:none}
.pulse .put{flex:1;min-width:0}
.pulse .pul{font-weight:600;color:var(--ink)}
.pulse .pul.up{color:var(--up)}
.pulse .pul.dn{color:var(--down)}
.pulse .pus{color:var(--faint)}
.pulse .puw{white-space:nowrap}
.pulse .pug{flex:none;font-size:1rem;line-height:1.15;color:var(--muted)}
.pulse:hover .put{color:var(--ink)}
.pulse:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}
.pulse+.crowd{margin-top:8px}
@media (max-width:899.98px){
.g.mq.pday h1{font-size:1.5rem;margin:2px 0 0}
.g.mq.pday .ttl{display:block}
.g.mq.pday .shr{float:right;margin:2px -4px -26px 8px}
.g.mq.pday .chart{margin-top:4px}
.g.mq.pday .ticks{margin-top:2px}
.g.mq.pday .rng{margin-top:4px;padding:0}
.g.mq.pday .pulse{margin-top:10px}
.g.mq.pday .pulse+.crowd{margin:6px 0 0;padding:0;border-radius:0;box-shadow:inset 0 1px 0 var(--line),inset 0 -1px 0 var(--line)}
.g.mq.pday .pulse+.crowd>svg{display:none}
.g.mq.pday .crowd+.oth{margin-top:12px}
}
/* floor row 7 (RULES 16.35; ACCEPTED FL12): Home under Top in blocks, one per market. A block opens with the market's
   name (several markets: a heading linking to the market, in the card's market-line look, 44 px to tap) and its
   since-you-looked line, "Since 9:10 AM: 26.8 → 26.5¢ for your Yes · 4 new · 21 trades", in ink-2 with the now price as
   the cards' price line draws it; "Nothing new since …" muted. Blocks are set apart by space, never a box, so the cards
   stay the loud thing */
.bhd{margin:26px 0 10px}
.bhd.b0{margin-top:8px}
.bhd .bnm{margin:0;font:600 0.875rem/1.3 var(--ui);color:var(--ink)}
.bhd .bnm a{display:flex;align-items:center;gap:8px;min-height:44px;margin:-6px 0 -4px;color:var(--ink);text-decoration:none;min-width:0}
.bhd .bnm b{min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bhd .bnm .tgo{margin-left:0}
.bhd .bnm .tpi{width:22px;height:22px;border-radius:6px}
.bhd .bnm .pic{width:24px;height:24px;border-radius:7px;flex:none}
.bsn{margin:0;font-size:0.8125rem;line-height:1.4;color:var(--ink-2)}
.bsn [data-ref$=".lead"]{color:var(--ink);font-weight:600}
.bsn .sn{font-weight:600;color:var(--ink)}
.bsn .sn.up{color:var(--up)}
.bsn .sn.dn{color:var(--down)}
.bsn.none{color:var(--muted)}
.divider.bdv{margin-top:14px}
@media (min-width:900px){
.bhd{margin:30px 0 12px}
.bhd.b0{margin-top:10px}
.bsn{font-size:0.875rem}
}

/* round 7 (RULES 18.37; ACCEPTED FL27): the "who's talking" strip, phone, a quiet day: one row right under the crowd
   row, sharing its bottom hairline, up to 3 overlapping 22 px avatars (or the trade tile), the counts, "↓"; a link to the
   first person card (24 px or more to tap, the pulse line's rule) */
.voices{display:flex;align-items:center;gap:8px;min-height:32px;margin:0;padding:4px 0;box-shadow:inset 0 -1px 0 var(--line);font:400 0.8125rem/1.4 var(--ui);color:var(--ink-2);text-decoration:none}
.voices .vpics{display:inline-flex;flex:none}
.voices .vpics>*{width:22px;height:22px;border-radius:50%;box-shadow:0 0 0 2px var(--bg);flex:none}
.voices .vpics>*+*{margin-left:-6px}
.voices .vav{display:inline-flex;align-items:center;justify-content:center;background:var(--raised);color:var(--ink);font:600 0.6875rem/1 var(--ui)}
.voices img.pav{object-fit:cover}
.voices .vtile{display:inline-flex;align-items:center;justify-content:center;background:var(--raised);color:var(--brand)}
.voices .vtile svg{width:14px;height:14px}
.voices .vt{flex:1;min-width:0}
.voices .vt>span:first-child{color:var(--ink);font-weight:600}
.voices .vs{color:var(--faint)}
.voices .vg{flex:none;font-size:1rem;line-height:1;color:var(--muted)}
.voices:hover .vt{color:var(--ink)}
.voices:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}
.g.mq.pday .crowd+.voices{margin-top:0}
.g.mq.pday .voices+.oth{margin-top:10px}

/* round 7 (RULES 18.39; ACCEPTED FL29): the signed-out holder bar in one line, 56 px (it was two rows, 125 px, and hid
   the quiet page's feed at 390×664): Watch and "Get alerts" side by side; " · Free" drops below 380 px of width */
.hbar.look.cmp{flex-direction:row;align-items:center;gap:8px;padding:5px 16px 6px;padding-bottom:calc(6px + env(safe-area-inset-bottom,0px))}
.hbar.look.cmp .wcta{min-height:44px;font-size:0.9375rem}
.hbar.look.cmp .wsec{flex:none;min-height:44px;display:flex;align-items:center;padding:0 6px;font:600 0.9375rem var(--ui);color:var(--ink-2)}
@container (max-width:23.6875em){.hbar.look.cmp .wfr{display:none}}
/* round 7 (RULES 18.38): a regional outlet's trust words, muted beside the rated classes */
.trust.rg,.acov.cxl .trust.rg,.clr .crt .trust.rg{color:var(--muted);font-weight:400}
/* round 11 C1 (RULES 18.64): the "Top today" strip over the newest-first feed. One-line rows, not mini cards: at 390 px
   three mini cards side by side leave each about 110 px, too narrow for a headline, and a sideways row hides the third.
   Quiet: a muted label, author in ink-2, the words cut to one line, the time at the right; the feed stays the loud thing */
.ttd{margin:2px 0 10px;padding:8px 12px 6px;border-radius:12px;background:var(--raised);box-shadow:inset 0 0 0 1px var(--line)}
.ttdh{margin:0 0 2px;font:600 0.75rem var(--ui);letter-spacing:.02em;color:var(--muted)}
.ttdo{list-style:none;margin:0;padding:0}
.ttdl{display:flex;align-items:center;gap:6px;min-height:36px;color:var(--ink);text-decoration:none;font:400 0.875rem/1.3 var(--ui)}
.ttdl:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}
.ttda{flex:none;max-width:38%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;color:var(--ink-2)}
.ttdt{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ttdw{flex:none;font-size:0.75rem;color:var(--muted)}
/* round 15 A2 (RULES 31): moves as slim feed rows; the band and "N moves today" scroll smoothly to a row and flash it */
.mrow{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:0;row-gap:2px;margin:14px 0 6px;padding:10px 12px;border-radius:10px;background:var(--hairline);font:400 0.875rem/1.35 var(--ui);color:var(--muted)}
.mrow .mrl{color:var(--muted);white-space:pre}
.mrow .mrs{color:var(--ink-2);font-weight:600;white-space:nowrap}
.mrow .mrw,.mrow .mru{white-space:pre}
.mrow.hot .mrs,.mrow.hot .mru{color:#FF6134}
.mrow.flash{box-shadow:0 0 0 2px #FF6134 inset}
.mrow:target{box-shadow:0 0 0 2px rgba(255,97,52,.55) inset}
@media (prefers-reduced-motion: no-preference){html:has(.mrow){scroll-behavior:smooth}.mrow{transition:box-shadow 1.2s ease-out}}
/* round 15 E (RULES 31.30): on the phone a move row lands under the sticky top bar AND the chart strip that shows once the
   chart has scrolled away (fixed at the safe area plus --bar-h; --strip-h, its measured height, set by strip.client.js;
   45 px, one row plus its hairline, until it runs), with 8 px to spare */
.ph .mrow[id]{scroll-margin-top:calc(env(safe-area-inset-top, 0px) + var(--bar-h) + var(--strip-h, 45px) + 8px)}
/* the card meta line wraps rather than cutting its time (RULES 31.8) */
.post .pid.x1{flex-wrap:wrap}
.post .pid.x1>span{flex:1 1 auto;white-space:normal;overflow:visible}
.post .wn.x1{flex-wrap:wrap}
.post .wn.x1>span{white-space:normal}
/* the desktop pinned column fits short windows: the chart gives up height first (RULES 31.9) */
@media (min-width:900px){.mkt>.l.mq .chart:not(.empty){height:clamp(110px,calc(100vh - 520px),240px)}}
/* round 15 D1 (RULES 31.11): the quiet head's moves count, in the price row after "Live" (no line of its own: bar 5) */
.big a.mvj{align-self:center;display:inline-flex;align-items:center;min-height:44px;margin:-15.5px 0;font:600 0.8125rem/1 var(--ui);color:var(--brand);white-space:nowrap}
/* journey: alerts */
@media (max-width:899.98px){
.g.mod.al-first{margin-top:16px}
.acard.al-blk{display:block}
.acard .q.al-ink{color:var(--ink)}
.since.al-sp{margin-top:6px}
button.ar{width:100%;text-align:start}
.g.mod.so{padding:20px 16px}
}
/* the alert's why line (RULES 20.2.1): the market page's why line (a.why) as plain text inside the card's link, the same
   wrap: source and headline on two lines at most (the headline clamped), the timing on its own line under them */
.al-why{display:block;min-width:0;margin-top:6px;font-size:0.8125rem;line-height:1.35;color:var(--ink-2)}
.al-why .wt{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
.al-why b{font-weight:600;color:var(--ink)}
.al-why .wsep{white-space:pre}
.al-why .wr{white-space:nowrap}
.bpt .al-why{margin-top:0}
/* signed out (RULES §20.2.8): the account ask, with the sheets' Google button and consent line */
.so .so-t{font:700 1.125rem/1.3 var(--ui);color:var(--ink);margin:0 0 6px}
.so .so-b{color:var(--ink-2);margin:0 0 16px;line-height:1.45}
.so .so-g{width:100%;min-height:48px}
.so .gbtn.so-g{margin-top:0}
.so .so-c{margin:12px 0 0;font-size:0.8125rem;color:var(--muted);line-height:1.45}
.so .so-c a{color:inherit;text-decoration:underline}
/* round 11b (RULES 20.2.11, 20.2.12): the empty state, the example row, the warning line, Turn on, the bell's empty list */
.aempty .et{font:700 1.125rem/1.3 var(--ui);color:var(--ink);margin:0 0 6px}
.aempty .eb{color:var(--ink-2);margin:0 0 12px;line-height:1.45}
.aempty .ar.ex{pointer-events:none;border:1px dashed var(--line);border-radius:12px;padding:10px 12px;margin:0 0 12px}
.aempty .extag{display:inline-block;margin:0 0 4px;padding:1px 6px;border-radius:6px;background:var(--raised-2);color:var(--muted);font-size:0.6875rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}
.aempty .ar.ex .rt{display:flex;flex-direction:column;align-items:flex-start}
.aempty .enext{margin:0;color:var(--ink);line-height:1.45}
.aempty .enext a{color:var(--ink);text-decoration:underline;white-space:nowrap}
.dwarn{margin:8px 0 12px;font-size:0.8125rem;line-height:1.45;color:var(--ink-2)}
.send.don{font-weight:600}
.bpe{display:flex;flex-direction:column;gap:4px;padding:16px 12px 12px}
.bpe b{font-weight:700;color:var(--ink)}
.bpe span{color:var(--ink-2);font-size:0.875rem;line-height:1.4}
/* round 15 (RULES 32.4, call A): alerts set, no device on: the honest line, its Turn on, the missed big moves */
.anod .ndl{margin:4px 0 6px;font-size:0.9375rem;line-height:1.45;color:var(--ink)}
.ndon{display:inline-flex;align-items:center;min-height:44px;padding:0;border:0;background:none;color:var(--brand);font:600 0.9375rem/1.3 var(--ui);cursor:pointer}
.anod .mh{margin-top:6px}
.bpnd{margin:0;padding:12px 12px 4px;font-size:0.875rem;line-height:1.45;color:var(--ink)}.bpld{margin:0;padding:14px 12px;font-size:0.875rem;line-height:1.45;color:var(--muted)}.bpnd .ndon{font-size:0.875rem;min-height:36px}
.bpm{display:flex;flex-direction:column;padding:4px 12px 8px}.bpm .bpmc{font-size:0.75rem;font-weight:600;color:var(--muted);margin:4px 0 2px}
.bpm .ar{display:flex;align-items:center;gap:12px;min-height:52px;color:var(--ink);text-decoration:none}.bpm .rt{display:flex;flex-direction:column;min-width:0;flex:1}.bpm .rq{font-size:0.875rem;font-weight:600;color:var(--ink)}.bpm .rm{font-size:0.75rem;color:var(--ink-2)}.bpm .hot{color:var(--amber-text);font-weight:600}.bpm .chev{color:var(--muted)}
/* 46.9: the Alerts sheet's .bpm (above) is not the bell row's move line; the bell keeps its own (.bpt>.bpm, line 1378) */
.bpt>.bpm{display:block;padding:0}.bpt>.bpm .hot{font-weight:700}
.anod .rm .hot{color:var(--amber-text)}
@media (min-width:900px){
.al-one .al-col{max-width:640px;margin:12px auto 0}
.al-one .al-col>.mod+.mod{margin-top:8px}
.al-one .crumb,.al-one .ptitle{max-width:640px;margin-left:auto;margin-right:auto}
.mod.so{max-width:440px}
.al-two{margin-top:20px}
.rq.w5{font-weight:500}
button.ar{width:calc(100% + 20px);text-align:start}
}
@media (min-width:900px) and (max-width:1151.98px){
.alp .two{gap:28px;grid-template-columns:minmax(0,1fr) 380px}
.alp .pg{padding:24px 28px 48px}
.alp .hdi{padding:0 28px}
}
/* journey: discovery (ref/render/discovery.js, discoveryDesktop.js): replaces the mocks' inline styles; the paste
   field is a real <form> with an <input> drawn like the mock's text span */
@media (max-width:899.98px){
.g.mod.d-first{margin-top:12px}
.g.mod.d-next{margin-top:8px}
.paste>input.pin{flex:1;min-width:0;align-self:stretch;margin:0;padding:0;border:0;background:none;font:inherit;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;outline:0;box-shadow:none;border-radius:0;appearance:none;min-height:0}
.paste>input.pin::placeholder{color:inherit;opacity:1}
.paste.filled>input.pin{color:var(--ink)}
.paste:focus-within{box-shadow:inset 0 0 0 1.5px var(--brand)}
.rm .rside{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis}
}
@media (min-width:900px){
.dpw{margin-top:16px}
.mov.dmov{margin-top:20px}
.paste>input.pin{flex:1;min-width:0;align-self:auto;height:auto;margin:0;padding:0;border:0;background:none;font:inherit;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;outline:0;box-shadow:none;border-radius:0;appearance:none;min-height:0}
.paste>input.pin::placeholder{color:inherit;opacity:1}
.paste:focus-within{box-shadow:inset 0 0 0 1.5px var(--brand)}
/* DH1: the big paste pill centres its icon, field, key and button (the market price row's .big rule set baseline and
   wrap on it); the "24 h" tag sits on the title's cap-height centre (0.46em of its own size, 6 px at 100% text) */
.paste.big{align-items:center;flex-wrap:nowrap}
.ptitle h2 .ldot{vertical-align:.46em}
}
/* round 11 C3 (RULES 21.18): Talked about now, Most traded today, Biggest moves' empty state, no dead column */
.tlk .tlist{display:flex;flex-direction:column}
.tcard{position:relative;padding:12px 0 12px 12px;border-top:1px solid var(--hairline)}
.tlk .mh+.tlist .tcard:first-child{border-top-color:transparent}
.tcard.xp{box-shadow:inset 2px 0 0 var(--line)}
.tcard .srcl{margin:0 0 4px}
.twho{display:flex;align-items:baseline;gap:6px;margin:0 0 4px;min-width:0;font:400 0.75rem/1rem var(--ui);color:var(--muted);white-space:nowrap;overflow:hidden}
.twho b{font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis}
.twho .th{overflow:hidden;text-overflow:ellipsis}
.ttx{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;font:500 0.9375rem/1.35 var(--ui);color:var(--ink);text-decoration:none}
.mchip{display:inline-flex;align-items:center;gap:6px;max-width:100%;min-height:32px;margin-top:8px;padding:3px 10px 3px 3px;border-radius:999px;background:var(--raised);box-shadow:inset 0 0 0 1px var(--line);font:600 0.75rem/1rem var(--ui);color:var(--ink-2);text-decoration:none}
.mchip .pic{width:24px;height:24px;border-radius:999px;font-size:0.625rem}
.mcq{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mco{flex:none;color:var(--muted);font-weight:500}
.dnone{margin:2px 0 4px;font:500 0.875rem/1.3 var(--ui);color:var(--muted)}
.row.dim{opacity:.72}
@media (max-width:899.98px){
.tlkp .tlk .mh{margin-bottom:0}
/* a multi-outcome price ("25 bps increase Yes 26.5¢") wraps inside the row's right side instead of running over the
   question (the phone's 70 px price column, round 11b's compact name) */
.row[data-ref^="discovery."] .rr{width:auto;min-width:70px;max-width:38%}
.row[data-ref^="discovery."] .rp{white-space:normal;text-align:right;line-height:1.25}
}
@media (min-width:900px){
.mov.dmov.solo{grid-template-columns:minmax(0,1fr)}
.mov.dmov.solo .mod+.mod{margin-top:22px}
.dwide .tlk+.mod{margin-top:22px}
.tlk .tlist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:24px}
.tlk .tcard:first-child{grid-column:1/-1}
.tlk .mh+.tlist .tcard:nth-child(2){border-top-color:var(--hairline)}
.row[data-ref^="discovery."] .rr{max-width:34%}
.dspan{grid-column:1/-1}
.tlk.wide .tlist{grid-template-columns:repeat(3,minmax(0,1fr))}
.tlk.wide .tcard:first-child{grid-column:span 2}
.tlk.wide .mh+.tlist .tcard:nth-child(3){border-top-color:var(--hairline)}
.dspan+.dwide{margin-top:4px}
.row[data-ref^="discovery."] .rp{white-space:normal;text-align:right;line-height:1.25}
}
/* end journey: discovery */
/* journey: card-v2 */
/* Card v2 (beyond-moves PLAN v10 §3 row 4, F2; RULES 18.29): the story's context line (trust class and cluster), the
   price line in the holder's side, and the X photo's box. Phone and desktop alike, inside every card. */
.acov.cxl .trust{color:var(--ink-2);font-weight:600}
.acov.cxl .cs{color:var(--faint)}
/* an X post's roster class sits in the trust class's slot, muted (RULES 18.29) */
.acov.cxl .trust.auth{color:var(--muted);font-weight:500}
.psn{margin:6px 0 0;font-size:0.8125rem;line-height:1.35;color:var(--ink-2)}
.psn .sn{font-weight:600;color:var(--ink)}
.psn .sn.up{color:var(--up)}
.psn .sn.dn{color:var(--down)}
.post>.psn,.fpost>.psn{margin:8px 0 0}
.acov.cxl+.psn{margin-top:4px}
/* the photo's box: the nearest of four shapes to the photo's own, the photo covering it from its centre */
:is(img.media,img.img):is(.ar-45,.ar-11,.ar-43,.ar-169,.ar-21){height:auto;object-fit:cover;object-position:50% 50%}
:is(img.media,img.img).ar-45{aspect-ratio:4/5}
:is(img.media,img.img).ar-11{aspect-ratio:1/1}
:is(img.media,img.img).ar-43{aspect-ratio:4/3}
:is(img.media,img.img).ar-169{aspect-ratio:16/9}
:is(img.media,img.img).ar-21{aspect-ratio:2/1}
.g.hf :is(img.media,img.img).ar-11,.fpost :is(img.media,img.img).ar-45{aspect-ratio:4/5}
:is(img.media,img.img).ar-11{aspect-ratio:1/1}
.g.hf :is(img.media,img.img).ar-43,.fpost :is(img.media,img.img).ar-43{aspect-ratio:4/3}
.g.hf :is(img.media,img.img).ar-21,.fpost :is(img.media,img.img).ar-21{aspect-ratio:2/1}
/* the fold (RULES 18.31; Sweat Algorithm's addendum 1): an author's further items within 3 hours sit under their first
   card as one quiet row, "+2 more from @pollsquares ›", which opens them in place (a native <details>), each a full card
   between hairlines, inside the first card, so the stack reads as one voice and never as three cards in a row */
details.fold{display:block;font:inherit;color:inherit;padding:0;background:none;box-shadow:none;border-radius:0;margin:8px 0 0;border-top:1px solid var(--line)}
details.fold>summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:44px;font:600 0.8125rem var(--ui);color:var(--ink-2);cursor:pointer}
details.fold>summary::-webkit-details-marker{display:none}
details.fold>summary:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}
details.fold .fchev{color:var(--muted);font-size:1.0625rem;line-height:1}
details.fold[open] .fchev{transform:rotate(90deg)}
details.fold .fbody>:is(.post,.fpost){margin:0;padding:12px 0 4px;background:none;border-radius:0;border-top:1px solid var(--line)}
details.fold .fbody>:is(.post,.fpost):first-child{border-top:0;padding-top:4px}
/* the role line (RULES 18.32): the roster's checked role in the author line's muted slot, one line (40 characters or
   fewer: one line at 390), cut with an ellipsis if a narrow phone cannot hold it */
.acov.cxl .trust.auth.role{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
/* the source label (round 11, RULES 18.52; Kha: "X vs news should be very clear which is which"): the card's first line,
   top left, small and muted, the X mark and "Post on X" on a post, a folded-paper mark and "News" on a story; a post
   also carries a thin neutral rule down its left edge, so a scan down the feed tells the voices from the reporting
   without reading. Never a colour of its own: the Courtside palette's muted inks only */
.srcl{display:flex;align-items:center;gap:6px;margin:0 0 8px;font:600 0.6875rem/1rem var(--ui);letter-spacing:0.02em;color:var(--muted)}
.srcl .sli{width:12px;height:12px;flex:none}
.srcl.sx .sli{width:11px;height:11px;color:var(--ink-2)}
.post.xp,.fpost.xp{box-shadow:inset 2px 0 0 var(--line)}
details.fold .post.xp,details.fold .fpost.xp{box-shadow:none}
.acov.cxl .trust.ot{color:var(--muted);font-weight:500}
/* round 11 (RULES 18.56): X posts in X's own structure, news as headline cards. A post: the round avatar, then the
   name, @handle and time on one line (the handle cut first), the text with the poster's own line breaks, the photo
   (4:5 at most), the reserved counts slot (empty, not drawn until live counts), the role line, the price line, the
   links. A story: the source label, a large headline, the outlet line with its trust class, "Also covered by", the
   earliest time. The label is never a colour of its own */
.srcl{white-space:nowrap}
.pid.x1{flex-direction:row;align-items:baseline;gap:5px;min-width:0;flex:1}
.pid.x1>b{flex:none;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pid.x1>span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wn.x1{flex-direction:row;align-items:baseline;gap:5px;flex:1}
.wn.x1>b{flex:none;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wn.x1>span{flex:1;min-width:0}
.tx.xt{white-space:pre-line;overflow-wrap:anywhere}
.xct:empty{display:none}
.post.nws .tx.hl.nh,.fpost.nws .tx.hl.nh{font-size:1.1875rem;line-height:1.3;font-weight:700;letter-spacing:-0.005em;margin:2px 0 0;color:var(--ink)}
.psrc.nsrc{margin-top:10px;gap:6px;font-size:0.8125rem}
.psrc.nsrc b{font-size:0.875rem;font-weight:600}
.psrc.nsrc .cs{color:var(--muted)}
.psrc.nsrc .trust{color:var(--ink-2);font-weight:600}
.psrc.nsrc .trust.ot,.psrc.nsrc .trust.rg{color:var(--muted);font-weight:500}
.psrc.nsrc .src{flex:none;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin:0;font-size:0.6875rem}
.post .psrc.nsrc .lg{width:22px;height:22px;font-size:0.75rem}
.psrc.nsrc+.acov.cxl{margin-top:4px}
.ntm{margin-top:4px;font-size:0.8125rem;color:var(--muted)}
/* the "Last big move" card (RULES 18.55): the move in its own words, then its reports */
.mcard{margin-top:6px;padding:12px 14px 14px;border-radius:16px;background:var(--surface-2,var(--surface));box-shadow:inset 0 0 0 1px var(--line)}
.mcard>.mvh{margin-top:0}
.mcard .mcl{color:var(--muted)}
.mcard .mcl b{color:var(--ink);font-weight:700}
.mcard .mcl b.dn{color:var(--down)}
.mcard .mcl b.up{color:var(--up)}
.mcard>.post,.mcard>.fpost{background:var(--raised,var(--surface));margin-top:8px}
/* round 11 B3: a "Top today" strip row (RULES 18.64) jumps to its card's anchor; the card lands below the sticky header,
   the header's height plus 16px (phone .hdr 52-53px + 16; desktop .hd 64px + 16, build measured 80px clears the bar); over the phone's .ph [id] rule */
.ph [id^="card-p-"],[id^="card-p-"]{scroll-margin-top:69px}
.win [id^="card-d-"],[id^="card-d-"]{scroll-margin-top:80px}
/* journey: floor-late */
/* Floor rows 8-11 (beyond-moves PLAN v10 §3; RULES 16.36-16.38, 18.35-18.36). Phone and desktop alike unless a rule
   says otherwise. */
/* row 8 (RULES 16.36): the daily note's offer, one quiet card at the end of Home's feed, after the cards that make its
   case: outlined with the feed's line (never a filled alarm), the brand only on its one button */
.note{margin:24px 0 4px;padding:16px;border-radius:16px;box-shadow:inset 0 0 0 1px var(--line);background:none}
.note .nok{margin:0;font:600 0.75rem var(--ui);letter-spacing:.02em;color:var(--muted)}
.note .not{margin:4px 0 0;font:600 1rem/1.3 var(--ui);color:var(--ink)}
.note .nob{margin:6px 0 0;font-size:0.875rem;line-height:1.45;color:var(--ink-2)}
.note .nos{margin:8px 0 0;padding-left:20px;font-size:0.875rem;line-height:1.45;color:var(--ink-2)}
.note .nos li+li{margin-top:2px}
/* Sweat's Home Screen icon beside "Open Sweat from your Home Screen." (RULES 2.5, round 8): 20 px, iOS's corner shape */
.note .nos .noi{display:inline-block;width:20px;height:20px;border-radius:5px;vertical-align:-5px;margin-right:6px;box-shadow:0 0 0 1px var(--line)}
.note .noa{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.note .non{min-height:44px;padding:0 16px;border:0;border-radius:12px;background:var(--brand);color:var(--bg);font:700 0.875rem var(--ui)}
.note .nol{min-height:44px;padding:0 14px;border:0;border-radius:12px;background:var(--raised);color:var(--ink);font:600 0.875rem var(--ui)}
.note .nof{margin:10px 0 0;font-size:0.8125rem;color:var(--muted)}
@media (min-width:900px){
.note{margin:28px 0 8px;padding:18px 20px}
}
/* row 9 (RULES 16.37): the first run's one line on alerts, right under the look-back line: plain ink-2 words when it is
   settled (alerts on; an iPhone's "come later", muted), else the quiet "Get alerts" row's shape as a button */
.frl{margin:8px 2px 0;font-size:0.875rem;line-height:1.4;color:var(--ink-2)}
.frl.later{color:var(--muted)}
button.getal.fra{width:100%;text-align:start;margin-top:8px}
/* round 13B (RULES 18.54) and round 15 A1 (RULES 30): the chart's press-and-drag details. At rest the chart has no item
   markers. The layer after the svg adds no height; chartScrub.client.js places its parts through the CSSOM: the ONE
   label at the top of the line ("71% · 6:28 AM") and the band's link over the orange band. Round 15 removed the caption
   above the chart. The chart takes vertical swipes for the page (pan-y) and holds sideways drags itself. */
.cscr{position:relative;height:0;margin:0}
.cscr .cread{position:absolute;left:0;top:0;z-index:2;padding:1px 6px;border-radius:6px;background:var(--raised-2);box-shadow:0 0 0 1px var(--line);font:600 0.75rem/1.125rem var(--ui);color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;visibility:hidden}
.cscr .cread.on{visibility:visible}
.cscr .cband{position:absolute;left:0;top:0;width:0;height:0;z-index:1;display:block;touch-action:pan-y;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
.cscr .cband[hidden]{display:none}
svg.chart[data-scrubs]{touch-action:pan-y;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
svg.chart[data-scrubs]:focus{outline:none}
svg.chart[data-scrubs]:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:4px}
/* the one-time hint BELOW the plot, under the time axis (round 15, RULES 30.3: never over the line): served in the layer
   (not shown there), the client moves it to just after the tick rows, in the flow; gone from sight once the viewer has
   dragged or hovered (its room stays until the page is left), not drawn at all on a later visit */
.cscr .chint{display:none}
.chint.below{margin:6px 0 0;padding:0 2px;font:500 0.75rem/1rem var(--ui);color:var(--muted)}
.chint.below.done{visibility:hidden}
.chint[hidden]{display:none}
/* a quiet day's compact phone head (.pday, bar 5's first-screen budget, RULES 18.37) draws no hint: its 22 px would push
   the first person's card off the first screen; the hint waits for a move day (it is remembered only after a drag) */
.g.mq.pday .chint.below{display:none}
/* the served touch and hover state (frames P21, D18): the same one label as the drag (round 15, RULES 30.2) */
.ctip{top:2px;min-width:0;height:auto;min-height:0;padding:1px 6px;border-radius:6px;gap:0;background:var(--raised-2);box-shadow:0 0 0 1px var(--line);z-index:3}
.ctip b{font:600 0.75rem/1.125rem var(--ui);color:var(--ink);font-variant-numeric:tabular-nums}
/* while the one label shows, the marks that share the chart's top lane step aside (the desktop's move tag, the bought
   edge marker), so the label never sits on them (round 15, RULES 30.2) */
svg.chart:has(+.cscr.on) [data-mark="tag"],svg.chart:has(+.cscr.on) [data-edge],svg.chart[data-pointer] [data-mark="tag"],svg.chart[data-pointer] [data-edge]{visibility:hidden}
/* row 11 (RULES 18.36): a card's Share, the last thing in its foot at the right, muted, 44 px to tap; the story's
   cluster line, a quiet button (or a link on Home) that opens every outlet on the story, with a brand "›" */
.ft:has(>.cshr){justify-content:flex-start}
.cshr{margin-left:auto;flex:none;width:44px;height:44px;display:inline-flex;align-items:center;justify-content:flex-end;padding:0;border:0;background:none;color:var(--muted);cursor:pointer}
.cshr svg{width:18px;height:18px}
.cshr:hover{color:var(--ink-2)}
.cshr:focus-visible{outline:2px solid var(--brand);outline-offset:-2px;border-radius:10px}
.acb{display:block;width:100%;min-height:24px;padding:3px 0;margin:-3px 0;border:0;background:none;font:inherit;line-height:inherit;color:inherit;text-align:start;text-decoration:none;cursor:pointer}
.acb .acg{margin-left:4px;color:var(--brand);font-weight:600}
.acb:hover{color:var(--ink-2)}
.acb:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}
/* the cluster sheet (RULES 18.36): the crowd sheet's list, one row per outlet's report */
.clh{margin:6px 0 0;font:600 1rem/1.35 var(--ui);color:var(--ink)}
.clr .crt .trust{color:var(--ink-2);font-weight:600}
.clr .crt .cs{color:var(--faint)}
.clr .clead{margin-left:8px;padding:1px 8px;border-radius:999px;background:var(--raised);font:600 0.6875rem var(--ui);color:var(--ink-2)}
.clr .psn{margin:4px 0 0}
.clr .rd{display:inline-flex;align-items:center;min-height:44px;font-size:0.8125rem;font-weight:600;color:var(--ink-2);text-decoration:none}
/* the daily note's row on the Alerts page (RULES 20.2.10): its own block, a row with an on/off switch at the right
   (44 px to tap), apart from the markets' move alerts */
.ar.nrow{display:flex;align-items:center;gap:12px}
.ar.nrow .rt{flex:1;min-width:0}
.nsw{flex:none;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 4px 0 0;border:0;background:none;font:600 0.8125rem var(--ui);color:var(--ink-2);cursor:pointer}
.nsw .nsk{position:relative;width:40px;height:24px;border-radius:999px;background:var(--raised-2);box-shadow:inset 0 0 0 1px var(--line)}
.nsw .nsk::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:var(--muted)}
.nsw.on .nsk{background:var(--brand);box-shadow:none}
.nsw.on .nsk::after{left:19px;background:var(--bg)}
.nsw.on{color:var(--ink)}
.nsw .nst{order:-1}
.nsw:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:12px}
.ar.nrow .rm{white-space:normal;overflow:visible;text-overflow:clip}
/* round 9 (RULES 18.45): the "New" marker on an unseen card under Top, after its time; a dot and the word, never colour alone */
.nwt{display:inline-flex;align-items:center;gap:4px;margin-left:2px;font:600 0.75rem/1 var(--ui);color:var(--brand);white-space:nowrap}
.nwt::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
/* journey: look */
.lkm .lkt{display:flex;gap:12px;align-items:flex-start}
.lkm .lkt .pic{flex:none;margin-top:2px}
.lkm .lktx{min-width:0}
.lkm .lkk{margin:0 0 2px;font-size:0.75rem;color:var(--muted)}
.lkm .lkh{margin:0;font:800 1.375rem/1.2 var(--ui);color:var(--ink);letter-spacing:-.01em;overflow-wrap:anywhere}
.lkm .lkoc{margin:4px 0 0;font-size:0.875rem;color:var(--ink-2)}
.lkm .lkoc b{color:var(--ink);font-weight:600}
.lkm .lkcard{margin-top:16px;padding:14px 14px 10px;border-radius:14px;background:var(--surface)}
.lkm .lkpr{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin-top:4px}
.lkm .lkn{font:800 1.75rem/1.1 var(--ui);color:var(--ink);font-variant-numeric:tabular-nums}
.lkm .lkd{font-size:0.875rem;color:var(--ink-2)}
.lkm .lkchart{margin-top:10px;height:120px;color:var(--muted)}
.lkm .lkline{display:block;width:100%;height:100%}
.lkm .lkaxis{display:flex;justify-content:space-between;gap:8px;margin-top:6px;font-size:0.75rem;color:var(--muted)}
.lkm .lkpanel,.lkm .lkerr,.lkm .lkmsg{margin-top:16px;padding:16px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line)}
.lkm .lkpt{margin:0 0 6px;font:700 1.0625rem/1.3 var(--ui);color:var(--ink)}
.lkm .lkpb,.lkm .lkeb{margin:0 0 12px;color:var(--ink-2);line-height:1.45}
.lkm .lkform{margin:4px 0 0}
.lkm .lkconsent{margin:8px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--muted)}.lkm .lkconsent a{color:inherit;text-decoration:underline}
.lkm .lkbtn{width:100%;min-height:48px;border:0;border-radius:12px;background:var(--brand);color:#0A0F1E;font:700 0.9375rem var(--ui);cursor:pointer}
.lkm .lkbtn.sec{background:var(--raised-2);color:var(--ink)}
.lkm .lkhelp{margin:10px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--ink-2)}
.lkm .lkfoot{margin:14px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.lkm .lkfoot .lkout{display:flex;width:max-content;margin-top:2px}
.lkm .lkout,.lkm .lkretry{display:inline-flex;align-items:center;min-height:44px;color:var(--ink);font-weight:600;text-decoration:underline;text-underline-offset:3px}
.lkm .lkerr{background:var(--surface);box-shadow:none}
.lkm .lket{display:flex;gap:10px;margin:0 0 6px;font:700 1.0625rem/1.3 var(--ui);color:var(--ink)}
.lkm .lkmark{flex:none;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-top:1px;border-radius:10px;box-shadow:inset 0 0 0 1.5px var(--ink-2);color:var(--ink-2);font:700 0.75rem/1 var(--ui)}
.lkm .lkerr .lkeb{margin:0}
.lkm .lkerr .lkretry{margin-top:4px}
.lkm .lkmsg .lkpb{margin:8px 0 0}
.lkm .lkpaste{display:block;margin-top:20px}
.lkm .lkcap{display:block;margin:0 0 8px;font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.lkm .lkrow{display:flex;align-items:center;gap:10px;min-height:52px;padding:0 6px 0 14px;border-radius:16px;background:var(--surface);box-shadow:inset 0 0 0 1.5px var(--line)}
.lkm .lkrow svg{width:20px;height:20px;flex:none;color:var(--brand)}
.lkm .lkin{flex:1;min-width:0;height:44px;border:0;background:transparent;color:var(--ink);font:400 0.9375rem var(--ui)}
.lkm .lkin::placeholder{color:var(--muted);opacity:1}
.lkm .lkin:focus-visible{outline:none}
.lkm .lkrow:focus-within{box-shadow:inset 0 0 0 2px var(--ink)}
.lkm .lkgo{flex:none;min-height:44px;padding:0 16px;border:0;border-radius:12px;background:var(--brand);color:#0A0F1E;font:700 0.875rem var(--ui);cursor:pointer}
.lkm .lklist{margin-top:24px}
.lkm .lklist .cap{margin:0}
.lkm .lkcount{flex:none;white-space:nowrap;font-size:0.75rem;color:var(--muted)}
.lkm .lkol{list-style:none;margin:0;padding:0}
.lkm .lkli{margin:0}
.lkm .lkli .ar{min-height:56px}
.lkm .lkli .rt{flex:1;min-width:0}
.lkm .lkli .rq{-webkit-line-clamp:3;line-clamp:3}
.lkm .abt1{margin:0}
.lkm .lkacts{display:flex;flex-wrap:wrap;align-items:center;gap:4px 20px;margin-top:16px}
.lkm a.lkbtn{display:inline-flex;align-items:center;justify-content:center;width:auto;padding:0 22px;text-decoration:none}
.lkm .lklost{box-shadow:none;padding:24px 0 0}
.lkm .abl{margin:10px 0 0;font-size:1rem;line-height:1.5;color:var(--ink)}
.lkm .absec{margin-top:22px}
.lkm .abh{margin:0 0 6px;font:700 1.0625rem/1.3 var(--ui);color:var(--ink)}
.lkm .abp{margin:0;line-height:1.5;color:var(--ink-2)}
.lkm .abul{margin:0;padding:0 0 0 18px;color:var(--ink-2);line-height:1.5}
.lkm .abli+.abli{margin-top:6px}
.lkm .abli b{color:var(--ink);font-weight:600}
.lkm .abfine{margin:24px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.lkm .ablegal{margin:8px 0 0;font-size:0.8125rem;color:var(--muted)}
.lkm .ablegal a{display:inline-flex;align-items:center;min-height:44px;color:var(--ink-2);text-decoration:underline}
@media (max-width:899.98px){
main.lkm{display:block;padding:12px 16px 32px}
}
@media (min-width:900px){
main.lkm .lkcols{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:40px;max-width:1040px;margin:0 auto}
main.lkm .lkone{max-width:680px;margin:0 auto}
main.lkm .lkside .lkpaste{margin-top:6px}
main.lkm .lkh{font-size:1.75rem}
main.lkm .lkchart{height:180px}
main.lkm .lkbtn{width:auto;min-width:220px;padding:0 24px}
}
/* end journey: look */
/* journey: you */
.ym .ywho{display:flex;align-items:center;gap:12px;margin-top:14px}
.ym .yav{flex:none;display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:24px;background:linear-gradient(135deg,#6E78C8,#C4F2E6);font:700 1.0625rem var(--ui);color:#0A0F1E}
.ym .ywt{min-width:0;display:flex;flex-direction:column;gap:2px}
.ym .ywn{font:700 1.0625rem/1.25 var(--ui);color:var(--ink);overflow-wrap:anywhere}
.ym .ywm{font-size:0.8125rem;color:var(--muted);overflow-wrap:anywhere}
.ym .ysec{margin-top:22px;scroll-margin-top:72px}
.ym .ysec .mh{margin-bottom:2px}
.ym .yval{font-size:0.8125rem;font-weight:600;color:var(--ink-2)}
.ym .ycard{margin-top:6px;padding:14px 14px 12px;border-radius:14px;background:var(--surface)}
.ym .ymh{display:flex;justify-content:space-between;gap:8px;font-size:0.875rem;color:var(--ink-2)}
.ym .ymh b{color:var(--ink);font-weight:700}
.ym .ymeter{display:flex;gap:6px;margin-top:10px}
.ym .ymk{flex:1;height:6px;border-radius:3px;background:var(--raised-2)}
.ym .ymk.on{background:var(--brand)}
.ym .ynote{margin:10px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--ink-2)}
.ym .ar{min-height:56px;margin:0;padding:8px 0;border-radius:0;border-top:1px solid var(--hairline)}
.ym .ar:hover{background:none}
.ym .mh+.ar{border-top-color:transparent}
.ym .ar .rm{white-space:normal;overflow:visible;text-overflow:clip}
.ym .ar .rq{-webkit-line-clamp:3;line-clamp:3}
.ym .yfoot{margin:10px 0 0;font-size:0.8125rem;line-height:1.45;color:var(--muted)}
.ym .yseg{flex:none;display:inline-flex;padding:2px;border-radius:12px;background:var(--raised-2)}
.ym .yseg button{min-width:56px;min-height:40px;padding:0 14px;border:0;border-radius:10px;background:none;color:var(--ink-2);font:600 0.875rem var(--ui);cursor:pointer}
.ym .yseg button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}
.ym .yleave{display:flex;flex-direction:column;gap:8px;margin-top:26px;padding-top:6px;border-top:1px solid var(--hairline)}
.ym .ybtn{width:100%;min-height:48px;border:0;border-radius:12px;background:var(--raised-2);color:var(--ink);font:700 0.9375rem var(--ui);cursor:pointer}
.ym .ybtn.ydel{background:none;color:var(--ink-2);font-weight:600;text-decoration:underline;text-underline-offset:3px}
.ym .lgtabs{display:inline-flex;gap:4px;padding:2px;margin:2px 0 14px;border-radius:12px;background:var(--raised-2)}
.ym .lgtabs a{display:inline-flex;align-items:center;min-height:40px;padding:0 18px;border-radius:10px;color:var(--ink-2);font:600 0.875rem var(--ui)}
.ym .lgtabs a[aria-current="page"]{background:var(--surface);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}
.ym .lgdraft{margin:10px 0 0;padding:10px 12px;border-radius:12px;background:var(--surface);font-size:0.8125rem;line-height:1.45;color:var(--ink-2)}
.ym .lgdraft b{color:var(--ink)}
.ym .lgdates{margin:10px 0 0;font-size:0.8125rem;color:var(--muted)}
.ym .lgph{color:var(--ink);background:var(--raised-2);border-radius:4px;padding:0 3px}
.ym .lgtoc{margin:14px 0 0;border-radius:12px;box-shadow:inset 0 0 0 1px var(--line)}
.ym .lgtoc summary{display:flex;align-items:center;justify-content:space-between;min-height:48px;padding:0 14px;list-style:none;cursor:pointer;font:600 0.9375rem var(--ui);color:var(--ink)}
.ym .lgtoc summary::-webkit-details-marker{display:none}
.ym .lgtoc ul{list-style:none;margin:0;padding:0 14px 8px}
.ym .lgtoc li a{display:flex;align-items:center;min-height:44px;color:var(--ink-2);font-size:0.9375rem}
.ym .lgh{margin:24px 0 6px;font:700 1.0625rem/1.3 var(--ui);color:var(--ink);scroll-margin-top:72px}
.ym .lgp{margin:0 0 10px;line-height:1.5;color:var(--ink-2)}
.ym .lgul{margin:0 0 10px;padding:0 0 0 18px;color:var(--ink-2);line-height:1.5}
.ym .lgul li+li{margin-top:6px}
.ym .lgul b,.ym .lgp b{color:var(--ink);font-weight:600}
.ym .lgdl{margin:0 0 10px}
.ym .lgdl dt{margin-top:10px;font-weight:600;color:var(--ink)}
.ym .lgdl dd{margin:2px 0 0;line-height:1.5;color:var(--ink-2)}
@media (min-width:900px){
main.ym .lkone{max-width:640px}
main.ym .lgp,main.ym .lgul{line-height:1.55}
main.ym .ybtn{width:auto;min-width:200px;align-self:flex-start}
main.ym .yleave{flex-direction:row;align-items:center;gap:16px}
}
/* end journey: you */
/* journey: discovery (ref/render/discovery.js, discoveryDesktop.js): replaces the mocks' inline styles; the paste
   field is a real <form> with an <input> drawn like the mock's text span. Round 12 B (RULES 21 "one list, four
   chips"): the chips, the caption, the phone's market rows, the desktop table; every new rule is scoped under .dsc */
@media (max-width:899.98px){
.paste>input.pin{flex:1;min-width:0;align-self:stretch;margin:0;padding:0;border:0;background:none;font:inherit;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;outline:0;box-shadow:none;border-radius:0;appearance:none;min-height:0}
.paste>input.pin::placeholder{color:inherit;opacity:1}
.paste.filled>input.pin{color:var(--ink)}
.paste:focus-within{box-shadow:inset 0 0 0 1.5px var(--brand)}
}
@media (min-width:900px){
.paste>input.pin{flex:1;min-width:0;align-self:auto;height:auto;margin:0;padding:0;border:0;background:none;font:inherit;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;outline:0;box-shadow:none;border-radius:0;appearance:none;min-height:0}
.paste>input.pin::placeholder{color:inherit;opacity:1}
.paste:focus-within{box-shadow:inset 0 0 0 1.5px var(--brand)}
/* DH1: the big paste pill centres its icon, field, key and button (the market price row's .big rule set baseline and wrap on it) */
.paste.big{align-items:center;flex-wrap:nowrap}
}
/* the chips: plain links, one lit; they scroll sideways inside their own row on a very small phone, never the page */
.dsc .lens{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}
.dsc .lens::-webkit-scrollbar{display:none}
.dsc .lens a{flex:none;height:32px;display:inline-flex;align-items:center;padding:0 11px;border-radius:999px;font:600 0.8125rem/1 var(--ui);color:var(--ink-2);background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);text-decoration:none}
.dsc .lens a.on{background:var(--ink);color:var(--bg);box-shadow:none}
.dsc .lcap{display:flex;align-items:center;gap:4px;margin:0;font-size:0.75rem;color:var(--muted)}
.dsc .lcap .ib-i{transform:scale(.85)}
.dsc .lcap .ferr{margin:0;min-width:0}
.dsc .lquiet,.dsc .dnone{margin:6px 0 0;font:500 0.875rem/1.3 var(--ui);color:var(--muted)}
.dsc .lfoot{margin:10px 0 0;font-size:0.75rem;color:var(--muted);text-align:center}
.dsc .lmore{display:flex;justify-content:center;margin:2px 0 0}
.dsc .mvl.q{color:var(--muted);font-weight:500}
.dsc .mks{font:600 0.6875rem/1 var(--ui);color:var(--brand)}
.dsc .mkp{font:700 1rem/1.15 var(--ui);font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ink)}
.dsc .mkq{font:600 0.9375rem/1.25 var(--ui);color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.dsc .mkt{min-width:0;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:3px}
.dsc .sli{width:13px;height:13px;flex:none;vertical-align:-2px;margin-right:4px;color:var(--muted)}
.dsc .src-x .sli{color:var(--ink)}
@media (max-width:899.98px){
.ph.dsc [data-ref="discovery.paste.block"]{margin-top:8px}
.ph.dsc .lens{padding:12px 16px 0;gap:5px}
.ph.dsc .lens a{font-size:0.78rem;padding:0 10px}
.ph.dsc .lcap{padding:8px 16px 2px}
.ph.dsc .lquiet,.ph.dsc .dnone{margin:2px 16px 0}
.ph.dsc .mkl{padding-bottom:4px}
/* RULES 48.3 (u89): the question runs the row's width up to the star; the price and the reason share the line under it */
.mkr{display:grid;grid-template-columns:36px minmax(0,1fr) 34px;column-gap:10px;row-gap:4px;align-items:start;padding:10px 0 9px;border-top:1px solid var(--hairline)}
.mkr:first-child{border-top:0}
.mkr .pic{margin-top:1px}
.ml2{font-size:0.78rem;color:var(--muted);overflow-wrap:anywhere}
/* round 15 (RULES 32.3): the reason line wraps between its parts, never cut ("11× usual" stays whole) */
.ml2>span{white-space:nowrap}
.mkb{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:10px;row-gap:2px;min-width:0}
.mkc{display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:2px 6px;flex:none;min-width:0;max-width:100%}
.ph.dsc .mkp{display:inline-flex;align-items:baseline;gap:.25em;min-width:0;max-width:100%;font-size:0.9375rem}
.ph.dsc .mkpc{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ph.dsc .mkpn{flex:none;white-space:nowrap}
.ph.dsc .mks{flex:none;white-space:nowrap}
.mko{font-size:0.6875rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.mkr .star{width:44px;height:44px;margin:-4px -10px -8px 0;justify-self:end;align-self:start}/* 44 px target (RULES 25.9), a sibling of the row link, never inside it */
.ml3{grid-column:2 / -1;display:flex;align-items:center;min-width:0;min-height:22px;font-size:0.78rem;color:var(--ink-2);text-decoration:none;white-space:nowrap}
.ml3 b{font-weight:600;color:var(--ink);flex:none;margin-right:6px}
.ml3 span{overflow:hidden;text-overflow:ellipsis;color:var(--muted)}
.ml3.src-x{padding-left:7px;box-shadow:inset 2px 0 0 var(--line)}
.ph.dsc .lfoot{margin:10px 16px 0}
.ph.dsc .lmore{margin:2px 16px 0}
}
@media (min-width:900px){
.dsc .dtop{display:flex;align-items:center;gap:24px}
.dsc .dtop h2{font:800 1.75rem/1.1 var(--ui);margin:0;letter-spacing:-.01em}
.dsc .dtop .dpw{margin:0 0 0 auto;flex:0 1 520px}
.dsc .dpw+.pstack{margin-top:12px}
.dsc .dlens{display:flex;align-items:center;gap:16px;margin-top:18px}
.dsc .dlens .lcap{gap:6px}
.dsc .dlens .ldot{margin-left:6px}
/* RULES 42: one grid for the whole table (the head and the rows are subgrids), so the Price track sizes to the widest
   price shown (at least 92 px, at most 9.5rem before its choice wraps) and stays one column; no cell draws over another */
.dsc .tbl{margin-top:12px;display:grid;grid-template-columns:36px minmax(0,1.15fr) fit-content(9.5rem) 64px 120px 120px minmax(0,1.45fr) 44px;column-gap:12px}
.dsc .thead,.dsc .trow{grid-column:1/-1;display:grid;grid-template-columns:subgrid;align-items:center}
/* round 15 (RULES 32.3): no "Trades · 24h" column when no shown row has trades */
.dsc .tbl.nt{grid-template-columns:36px minmax(0,1.3fr) fit-content(9.5rem) 64px 130px minmax(0,1.6fr) 44px}
.dsc .thead{min-height:34px;border-bottom:1px solid var(--hairline);font:700 0.6875rem/1 var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.dsc .thead .on{color:var(--ink)}
.dsc .thead .r{text-align:right}
.dsc .trow{min-height:68px;padding:8px 10px;margin:0 -10px;border-bottom:1px solid var(--hairline);border-radius:12px}
.dsc .trow:hover{background:var(--surface)}
.dsc .trow .c2,.dsc .trow .k-m,.dsc .trow .k-t .c1{font-size:0.78rem;color:var(--muted)}
.dsc .trow .c2{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dsc .trow .k-m,.dsc .trow .k-t .c1{color:var(--ink-2)}
.dsc .trow .k-t{display:flex;flex-direction:column;gap:2px;min-width:0}
.dsc .trow .k-t .c1{font-weight:600}
.dsc .k-p{display:flex;flex-direction:column;align-items:flex-end;gap:3px;min-width:92px}
/* RULES 42: the price keeps its choice and its number together; a long choice wraps in its own cell (two lines, then
   an ellipsis, the whole price in the title); the number never wraps or hides */
/* RULES 42: the name stays inside its track at any text size: a word longer than the track breaks, two lines then an
   ellipsis (the whole name in the title) */
.dsc .trow .mkt>*{max-width:100%}
.dsc .trow .mkq{overflow-wrap:anywhere}
.dsc .trow .mkp{display:flex;align-items:flex-end;justify-content:flex-end;gap:.25em;max-width:100%;white-space:normal;text-align:right}
.dsc .trow .mkpc{min-width:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.dsc .trow .mkpn{flex:none;white-space:nowrap}
.dsc .k-s .sp{display:block;width:64px;height:26px}
.dsc .k-i,.dsc .k-m{min-width:0}
.dsc .tc{display:flex;flex-direction:column;gap:3px;min-width:0;text-decoration:none}
.dsc .tc .c2 b{color:var(--ink);font-weight:600}
.dsc .tcx{font-size:0.875rem;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dsc .tc.src-x{padding-left:8px;box-shadow:inset 2px 0 0 var(--line)}
.dsc .tend{color:var(--amber-text)}
.dsc .trow .star{margin-right:0;justify-self:end}
.dsc .trow .star svg{width:20px;height:20px}
.dsc .lfoot{text-align:left;margin-top:14px}
.dsc .lmore{justify-content:flex-start;margin-top:12px}
}
@media (min-width:1100px){
.dsc .tbl{grid-template-columns:36px minmax(0,1.15fr) fit-content(10.5rem) 80px 150px 150px minmax(0,1.45fr) 44px;column-gap:16px}
.dsc .tbl.nt{grid-template-columns:36px minmax(0,1.3fr) fit-content(10.5rem) 80px 160px minmax(0,1.6fr) 44px}
.dsc .k-p{min-width:104px}
.dsc .k-s .sp{width:80px}
}
/* round 15 (RULES 32.10): the baseball tile for MLB and baseball markets (render/glyph.js 'baseball') */
.i-mlb{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' fill='%23243022'/%3E%3Ccircle cx='20' cy='20' r='11' fill='%23ece7dc'/%3E%3Cpath d='M13.2 12.6c3.4 3.2 3.4 11.6 0 14.8M26.8 12.6c-3.4 3.2-3.4 11.6 0 14.8' fill='none' stroke='%23d0574b' stroke-width='1.6'/%3E%3Cpath d='M14.6 15.2l1.6-.7M15.4 18.6l1.7-.2M15.4 21.4l1.7.2M14.6 24.8l1.6.7M25.4 15.2l-1.6-.7M24.6 18.6l-1.7-.2M24.6 21.4l-1.7.2M25.4 24.8l-1.6.7' stroke='%23d0574b' stroke-width='1.2'/%3E%3C/svg%3E")}
/* end journey: discovery */
/* journey: round-13a-market */
/* Round 13A part 1 (DECISIONS-KHA 2026-10-13; RULES 18.70 to 18.75): the range switch's rows, the holder line, the
   phone top bar (back · Sweat. · share), the quiet "✓ Alerts on", and the collapsing chart strip. Motion: transform and
   opacity only, under the no-preference gate. */
.ticks[hidden],.cdots[hidden]{display:none}
.hline{margin-top:2px;font-size:0.875rem;line-height:1.4;color:var(--ink-2);font-variant-numeric:tabular-nums}
.hline b{font-weight:600}.hline b.up{color:var(--up)}.hline b.down,.hline b.dn{color:var(--down)}.hline b.nt{color:var(--ink-2)}
@media (max-width:899.98px){
/* the top bar of a detail page: back, the wordmark, share; the wordmark stays at every width (it fits at 320 px) */
.hdr.mk .wl{display:inline-flex}
.hdr.mk .hshr{margin:0 4px 0 0}
/* the quiet alerts state: no outline, no bell, the label at every width (the 380 px rule keeps it) */
.hbar .hal.on{width:auto;padding:0 12px;box-shadow:none;color:var(--muted);font-weight:500}
.hbar .hal.on .gl{display:inline}
/* the strip: fixed under the top bar, inside the safe area; hidden by transform and opacity, never by layout */
.cstrip{position:fixed;left:0;right:0;top:calc(env(safe-area-inset-top, 0px) + var(--bar-h));z-index:4;display:flex;align-items:center;gap:8px;min-height:44px;padding:6px 16px;background:color-mix(in srgb,var(--bg) 94%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--hairline);color:var(--ink);font-size:0.8125rem;line-height:1.2;text-align:start;opacity:0;transform:translateY(-8px);pointer-events:none}
.cstrip.on{opacity:1;transform:none;pointer-events:auto}
.cstrip .csq{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.cstrip .csp{flex:none;color:var(--ink-2);white-space:nowrap}.cstrip .csp b{color:var(--ink);font-weight:700}
.cstrip .csc{flex:none;white-space:nowrap;color:var(--ink-2)}.cstrip .csc.up{color:var(--up)}.cstrip .csc.dn{color:var(--down)}
.cstrip .csl{flex:none;width:56px;height:28px;color:var(--ink-2)}
/* narrow or zoomed: the name gives way first, then the sparkline */
@container (max-width:22.4375em){.cstrip .csl{display:none}}
}
@media (min-width:900px){
.cstrip{display:none}
/* the quiet alerts state on desktop: plain text, no outline */
.hrow .btn.alon{box-shadow:none;color:var(--muted);font-weight:500}
}
@media (prefers-reduced-motion: no-preference){
.cstrip{transition:opacity .18s ease-out,transform .18s ease-out}
}
/* end journey: round-13a-market */
/* journey: round-16 (RULES 33.1): a long choice name in the phone holder bar never widens it (aria carries it whole) */
.hbar .hp>span{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* end journey: round-16 */
/* journey: round17 */
/* round 17 (RULES 34.5): the ended result's big side and "won" are one unit, so "won" never sits alone under the side */
.rsw{display:inline-flex;align-items:baseline;gap:8px;white-space:nowrap}
/* end journey: round17 */
/* journey: b9r1a */
/* B9 round 1 A (RULES 35.1): the 1D hour labels sit at their true times on the line's scale (placed by the chart's client,
   render/tickRow.client.js), unseen until placed; "now" (and a pinned card's first clock) keep the row's ends */
.ticks.tl{position:relative;justify-content:flex-start}
.ticks.tl>:last-child{margin-left:auto}
.ticks.tl>[data-t]{position:absolute;top:0;left:0;transform:translateX(-50%);white-space:nowrap;visibility:hidden}
.ticks.tl>[data-t][data-x]{visibility:visible}
/* RULES 35.10: desktop Home's "Show" chips on one row that scrolls sideways, its far edge fading (the 32 px end pad keeps
   the fade off the last chip when they all fit); never a second row holding one cut chip */
.showf{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-right:32px;-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 32px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 32px),transparent)}
.showf::-webkit-scrollbar{display:none}
.showf .shl,.showf .shc{flex:none}
/* end journey: b9r1a */
/* journey: b9r2 */
/* B9 round 2 (RULES 36.3): a time-linear row whose labels are all placed (the ended chart's days, no "now" in the flow)
   keeps one line of height, so the labels never sit on what follows */
.ticks.tl::after{content:"\200b"}
/* RULES 36.5: the ended bar names her own side in whole words; it wraps between words, never cut with "…" */
/* RULES 36.8 (V4): the desktop header's 24h change takes the holder's colour, as the pulse line does (".dn" already did) */
.big .ch.up{color:var(--up)}
.hbar .hp.mine>span{max-width:6.5rem;white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:normal}
/* end journey: b9r2 */
/* journey: b9r3 */
/* B9 round 3 (RULES 37.1): the phone's "Ended Oct 15" on its own line; the choice, its "·" and the result one unit
   (the choice wraps between its own words, the "·" never ends a line); a big move's date never splits "Oct" / "14" */
.rres.stack>.rk{flex-basis:100%}
.rres.stack .rsw{min-width:0;max-width:100%}
.rres.stack .rsw .rch{white-space:normal;min-width:0;flex:0 1 auto}
.bmc .bd{white-space:nowrap}
/* RULES 37.2: desktop Home's "Show:" row fades only an edge that hides chips (data-over from render/pills.client.js) */
.showf[data-over]{-webkit-mask-image:none;mask-image:none}
.showf[data-over="end"]{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 56px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 56px),transparent)}
.showf[data-over="start"]{-webkit-mask-image:linear-gradient(to left,#000 calc(100% - 56px),transparent);mask-image:linear-gradient(to left,#000 calc(100% - 56px),transparent)}
.showf[data-over="both"]{-webkit-mask-image:linear-gradient(to right,transparent,#000 56px,#000 calc(100% - 56px),transparent);mask-image:linear-gradient(to right,transparent,#000 56px,#000 calc(100% - 56px),transparent)}
/* RULES 37.5: the Alerts page's intro and its first section label get the section gap */
.anod .ndl+.mh{margin-top:24px}
/* RULES 37.6: a quoted choice in the phone holder bar stays whole; the lead grows to hold it */
.hbar .hp .q{white-space:nowrap}
.hbar:has(>.hs:not(.hsf)) .hp>span:has(.q){max-width:none}
/* RULES 37.7: the phone's source marks are one tile: the dark tile, the UI face (no bare serif letter) */
@media (max-width:899.98px){.lg{background:#2c2c3c;color:#e8e8f4;font-family:var(--ui)}}
/* end journey: b9r3 */
/* journey: b9-carry */
/* B9 (RULES 37.9): the sign-in carry line, the Pro line's note (.pronote) on Home and the market page: its words, the x
   top right, then "Swap one to keep it" on its own row, a 44 px target; wraps at any width and text size */
.pronote.carry{flex-wrap:wrap;align-items:flex-start;gap:0 4px;padding:0 4px 4px 14px}
.pronote.carry>span{flex:1 1 0;min-width:0;padding:12px 0 2px;line-height:1.35;overflow-wrap:anywhere}
.pronote.carry>button.cbtn{order:1;flex:none;margin:0 0 0 auto}
.pronote.carry>button.cact{order:2;flex:1 0 100%;width:auto;height:auto;min-height:44px;margin:0;padding:0;border-radius:6px;display:flex;align-items:center;justify-content:flex-start;text-align:left;font:600 0.8438rem/1.3 var(--ui);color:var(--brand)}
.pronote.carry>button.cact:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.mkt .l>.pronote.carry{margin:0 0 12px}
/* end journey: b9-carry */
/* journey: final-fix */
/* RULES 39.5: a money amount never breaks after its sign ("−" / "$10.00"): the holder and ended lines bold only the amount; the money line wraps the amount in .amt */
.hline b,.pline b,.amt{white-space:nowrap}
/* RULES 39.10: a long source name ("m.economictimes.com") wraps inside its row at 320 and 200% text, never past the edge */
.psrc b{min-width:0;max-width:100%;overflow-wrap:anywhere}
/* end journey: final-fix */
/* journey: post83 */
/* RULES 40.3: the ended bar's own side ("Los Angeles Dodgers · Yes") and the price it ended at read as one run that
   wraps between words, the price never alone on a third line */
.hbar .hp.mine{display:block;max-width:8.5rem;line-height:1.2}
.hbar .hp.mine>span{display:inline;max-width:none}
.hbar .hp.mine>b{white-space:nowrap;margin-left:4px}
/* end journey: post83 */
/* journey: post84 */
/* RULES 41.2: one colour per move: a held market's move in the quiet row and the market page's hot "Price moved" row
   takes the holder's colour (the lead card's, the summary's); amber stays for a watcher's move, the band and its tag */
.quiet b.dn{color:var(--down);font-weight:600}.quiet b.up{color:var(--up);font-weight:600}
.mrow.hot.held.dn .mrs{color:var(--down)}.mrow.hot.held.up .mrs{color:var(--up)}.mrow.hot.held .mru{color:var(--muted)}
/* RULES 41.3: the ended bar's status ("Your side lost") reads as the status and "Edit side ›" as a quieter link; one
   word space before "lost"; the side column fits its status at 390 (the bar's gaps and Stop's padding give it room) */
.hbar.fin .hsf .hwl{gap:0 .25em}
.hbar.fin .hsf .hedt{font-size:0.8125rem;font-weight:500;color:var(--brand)}
.hbar.fin:has(>.hsf){gap:8px}
.hbar.fin:has(>.hsf) .stopw{padding:0 10px}
/* below 400 px the won check would push "Your side won" past its column (106 of 94 px at 390): the word "won" takes the
   up colour in its place, so the status still reads as a win; at 320 the pencil alone fits (as before, less the check) */
@container (max-width:24.9375em){.hbar.fin .hsf .ck{display:none}.hbar.fin .hsf .hwl:has(.ck) .hwon{color:var(--up)}}
/* end journey: post84 */
/* journey: u86 */
/* RULES 43.1 (update 86, A2): the big number stands alone on its line; its caption reads as a sentence on the row
   under it ("chance of a 25 bps increase"), the choice in ink; "Live", the change and the moves link ride that row,
   never the number's baseline */
.big.solo{display:flex;align-items:flex-start}
.big.solo .n{display:inline-block;padding:0 4px 2px 0}
.pcap{display:flex;flex-wrap:wrap;align-items:center;gap:2px 10px;margin-top:6px;font:500 0.9375rem/1.35 var(--ui);color:var(--ink-2)}
.pcap .cpt{min-width:0;overflow-wrap:anywhere}
.pcap .cpt b{font-weight:700;color:var(--ink)}
.pcap .ldot{margin-left:auto}
.pcap a.mvj{display:inline-flex;align-items:center;min-height:44px;margin:-12px 0;font:600 0.8125rem/1.25 var(--ui);color:var(--brand)}
.pcap .ch{font:600 1rem var(--ui);color:var(--ink-2)}.pcap .ch.dn{color:var(--down)}.pcap .ch.up{color:var(--up)}
.pcap .asof{font-size:0.875rem;color:var(--muted);font-weight:500}
@media (min-width:900px){.big.solo{margin-top:10px}.pcap{margin-top:8px;font-size:1.0625rem;gap:4px 12px}.pcap .ch{font-size:1.0625rem}}
/* RULES 43.5 (update 86, B1): the Home lead sits on a lit, raised surface with a sheen edge, its chart full-bleed and
   its "See the move" a button; the number alone with its caption under it, then the move, then "Your Yes · −$17.40" */
.pin.lead.lit{background:linear-gradient(180deg,#252E4C 0%,#171F36 62%,#131A2E 100%);box-shadow:0 18px 36px -12px rgba(0,0,0,.6),0 0 0 1px rgba(183,192,255,.16);overflow:hidden}
.pin.lead.lit::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;background:var(--sheen);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);opacity:.6;pointer-events:none}
.pin.lead.lit .pk .pkt{color:var(--amber-text);font-weight:600}
.pin.lead .lp .lps{display:block;margin-top:4px;font:500 0.9375rem/1.35 var(--ui);color:var(--ink-2)}
.pin.lead .lp .lps b{font-weight:700;color:var(--ink)}
.pin.lead .lsd{color:var(--ink-2)}
.pin.lead.lit .cta.btn{display:flex;width:auto;justify-content:center;min-height:48px;margin:12px 0 4px;border-radius:12px;background:var(--brand);color:#0A0F1E;font:700 0.9375rem var(--ui);text-decoration:none;box-shadow:none}
.pin.lead.lit .cta.btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.pin.lead.calm .lp .lps{margin-top:2px;font-size:0.8125rem}
@media (max-width:899.98px){
.pin.lead.lit{border-radius:20px}
.pin.lead.lit:not(.calm) .lpv{font-size:3.25rem}
.pin.lead.lit:not(.calm) .lchart{margin:8px -8px 0 -14px}
.pin.lead.lit:not(.calm) .mini.pinchart{height:96px;margin-top:0}
}
@media (min-width:900px){
.pin.lead.lit{border-radius:22px}
.pin.lead.lit:not(.calm) .lbody{margin-right:-12px}
.pin.lead.lit:not(.calm) .mini.pinchart{height:150px}
.pin.lead.lit .cta.btn{display:inline-flex;padding:0 22px}
}
/* the feed starts under a divider: the Latest/Top switch drawn as one ruled row, the chosen order first as its label */
.fdiv{display:flex;align-items:center;margin:14px 0 2px}
.fdiv .ord{display:flex;flex:1;width:auto;margin:0;align-items:center}
.fdiv .ord::after{content:"";order:1;flex:1;height:1px;margin:0 10px;background:var(--line)}
.fdiv .ord .ordb[aria-pressed="true"]{order:0;padding:0 2px 0 0;font:700 1.0625rem var(--ui);color:var(--ink)}
.fdiv .ord .ordb[aria-pressed="true"]::before{display:none}
.fdiv .ord .ordb[aria-pressed="false"]{order:2;padding:0 4px}
.g.hf>.fdiv,[data-ref="home.feed"]>.fdiv{margin:4px 0 -6px}
/* flatter, smaller feed cards under it: no raised fill, a hairline, smaller headlines */
.g.hf .post,[data-ref="home.feed"] .fpost{background:rgba(17,24,43,.55);box-shadow:inset 0 0 0 1px var(--hairline)}
.g.hf .post{margin-top:8px;padding:10px 12px 12px;border-radius:12px}
.g.hf .post.nws .tx.hl.nh{font-size:1rem;line-height:1.3;font-weight:600}
[data-ref="home.feed"] .fpost.nws .tx.hl.nh{font-size:1.0625rem;line-height:1.3;font-weight:600}
.g.hf .post .tx{font-size:0.9375rem;line-height:1.38}
/* RULES 43.3 (update 86, C2): an ended market reads as ended within a second: a full-width banner under the header,
   a labelled Result with its mark, the holder's won/lost box; the chart greys out and its rule says "Ended Oct 28" */
.endban{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#222B44;border-bottom:1px solid var(--line)}
.endban .ebi{flex:none;display:grid;place-items:center;width:34px;height:34px;border-radius:10px;background:#0A0F1E;color:var(--ink)}
.endban .ebi svg{width:18px;height:18px}
.endban .ebt{display:flex;flex-direction:column;min-width:0}
.endban .ebt b{font:700 1rem/1.3 var(--ui);color:var(--ink)}
.endban .ebt>span{font-size:0.875rem;line-height:1.35;color:var(--ink-2)}
.eres{margin-top:14px}
.eres .erl{display:block;font:700 0.75rem/1 var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.eres .err{display:flex;align-items:center;gap:10px;margin-top:8px}
.eres .erm{flex:none;display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:var(--raised-2);color:var(--ink-2)}
.eres .erm svg{width:18px;height:18px}
.eres.yes .erm{background:#37B98A;color:#0A0F1E}
.eres.no .erm{background:#F06A8A;color:#0A0F1E}
.eres .ert{min-width:0;font:800 2rem/1.1 var(--ui);letter-spacing:-.02em;color:var(--ink);overflow-wrap:anywhere}
.ebx{display:flex;align-items:center;gap:12px;margin-top:12px;padding:12px 14px;border-radius:14px;background:var(--raised)}
.ebx.won{background:#16332A}.ebx.lost{background:#33192A}
.ebx-t{display:flex;flex:1;flex-direction:column;min-width:0}
.ebx-t b{font:700 1rem/1.3 var(--ui);color:var(--ink)}
.ebx-t span{font-size:0.8125rem;line-height:1.35;color:var(--ink-2)}
.ebx-amt{flex:none;font:800 1.375rem var(--ui);white-space:nowrap}.ebx-amt.up{color:var(--up)}.ebx-amt.down,.ebx-amt.dn{color:var(--down)}
svg.chart[data-ended] polyline{stroke:#596380}
svg.chart[data-ended] path{opacity:.4}
@media (min-width:900px){
.endban{padding:14px 32px}
.endban .ebt{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:2px 12px}
.endban .ebt b{font-size:1.0625rem}.endban .ebt>span{font-size:0.9375rem}
.eres{margin-top:18px}
.eres .erm{width:40px;height:40px}.eres .erm svg{width:22px;height:22px}
.eres .ert{font-size:2.5rem}
.ebx{max-width:560px;padding:14px 18px}
}
/* end journey: u86 */
/* journey: u86b */
/* update 86b (RULES 43.7): the change line right under the caption on every live market page, a quiet day too; the
   last big move below the chart. A quiet day's compact head (.pday) gives back the line's height so bar 5 holds. */
@media (max-width:899.98px){
.g.mq .pcap+.dl{margin-top:2px;line-height:1.3}
.g.mq.pday .pcap{margin-top:2px}
.g.mq.pday .pcap+.dl{margin-top:0}
.g.mq.pday .chart{margin-top:0}
.g.mq.pday .rng{margin-top:2px}
.g.mq.pday .pulse{margin-top:6px}
.g.mq.pday .pulse+.crowd{margin-top:4px}
.g.mq a.lbm{display:flex;align-items:center;min-height:44px;margin:2px 0 -6px;font:600 0.9375rem var(--ui);color:var(--brand)}
}
@media (min-width:900px){
.mq .pcap+.dl{margin-top:6px}
.mq .dl a.mvj{color:var(--brand);font-weight:600;padding:0;margin:0}
}
/* Discovery (RULES 43.10): the move keeps its " · 3× usual" on its line; the item's source shrinks and ellipsizes
   inside the row (200% text at 320 and 390 ran it to x=405) */
.mu{white-space:nowrap}
@media (max-width:899.98px){.mu .mud{display:none}}
.ml3 b{flex:0 1 auto;min-width:0;max-width:55%;overflow:hidden;text-overflow:ellipsis}
.ml3 b+span{flex:1 1 0;min-width:0}
/* end journey: u86b */
/* journey: fixes87 */
/* RULES 46.1: an up or down arrow is never grey. Discovery's moves (and the 24-hour change under them), the market
   page's other-markets rows and a page the viewer doesn't watch take the arrow's colour; a big move stays amber (41.2) */
.mvl.up,.mvl.q.up,.dsc .mvl.q.up{color:var(--up)}.mvl.dn,.mvl.q.dn,.dsc .mvl.q.dn{color:var(--down)}
.rr .mv.up,.cg.up,.csc.up{color:var(--up)}.rr .mv.dn,.cg.dn,.csc.dn{color:var(--down)}
/* RULES 46.2: the desktop feed's source line sets its logo tile 6 px from the outlet's name (it ran as a block, 0 px), and
   a card's market link keeps a gap before its chevron (0 px after "Fed Decision in October?" and after a time) */
@media (min-width:900px){
.psrc.nsrc{display:flex;align-items:center;flex-wrap:wrap;row-gap:0;min-width:0}
.tag .tgo,.rescard h2 a .tgo{margin-left:.35em}
}
/* RULES 46.7: "Also covered by" with long outlet names wraps inside its card (a host name has no space to break at) */
.acov,.acov .acb{overflow-wrap:anywhere;min-width:0}
/* RULES 46.8: the moves link inside the change line ("▼11 pts in 24h · 3 moves ›") is underlined, so it reads as a link
   without its colour (axe link-in-text-block) */
a.mvj{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
/* end journey: fixes87 */
/* journey: u89 */
/* RULES 48.1: the ended chart's caption for its wider final week: a swatch of the shaded band, then the words */
.cwarp{display:flex;align-items:center;gap:6px;margin:6px 0 0;font-size:0.75rem;line-height:1.3;color:var(--muted)}
.cwarp .cwk{flex:none;width:12px;height:10px;border-radius:2px;background:rgba(183,192,255,.14);box-shadow:inset 1px 0 0 rgba(183,192,255,.5)}
/* journey: fill49 */
/* RULES 49: the filling page (the checklist, the chart's skeleton, hidden ticks and switch), the crowd line's long
   choice, the week strip. Tokens only; motion only under no-preference. */
/* 49.1 the fill checklist: a quiet card in the filling line's slot, one loud thing at a time (the tick) */
.fillp{margin-top:16px;padding:14px 16px 16px;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.fillh{margin:0;font:600 0.9375rem/1.35 var(--ui);color:var(--ink)}
.fillt{margin:4px 0 12px;font-size:0.875rem;line-height:1.45;color:var(--ink-2)}
.fills{display:grid;gap:10px;margin:0;padding:0;list-style:none}
.fst{display:flex;align-items:flex-start;gap:10px;font-size:0.875rem;line-height:1.35rem;color:var(--ink-2)}
.fmk{flex:none;position:relative;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;margin-top:2px;border-radius:999px;font:600 0.875rem/1 var(--ui);color:var(--muted)}
.fmk i{font-style:normal}
.fmk svg{width:12px;height:12px}
.flb{flex:1;min-width:0;overflow-wrap:anywhere}
.fsw{flex:none;font-size:0.8125rem;color:var(--muted)}
.fst[data-state="waiting"] .fmk{box-shadow:inset 0 0 0 1.5px var(--line)}
.fst[data-state="working"]{color:var(--ink)}
.fst[data-state="working"] .fmk{box-shadow:inset 0 0 0 1.5px var(--brand)}
.fst[data-state="working"] .fmk::after{content:"";width:6px;height:6px;border-radius:999px;background:var(--brand)}
.fst[data-state="working"] .fsw{color:var(--ink-2)}
.fst[data-state="done"]{color:var(--ink)}
.fst[data-state="done"] .fmk{background:var(--brand);color:var(--bg)}
.fst.fx{color:var(--muted)}
/* 49.3 the chart's place: the same svg.chart box (its height rules all apply), a --raised block; the ticks and switch keep
   their room, hidden */
svg.chart.empty[data-skel]{border-radius:12px;background:var(--raised);background-size:200% 100%}
[data-fillwait]{visibility:hidden}
/* the desktop pinned column's short-window chart height (fp.css RULES 31.9 rule, written for :not(.empty)) holds for the skeleton too */
@media (min-width:900px){.mkt>.l.mq svg.chart.empty[data-skel]{height:clamp(110px,calc(100vh - 520px),240px)}}
/* 49.6 the week strip under the chart */
.wkf{margin:10px 0 0;font:500 0.8125rem/1.4 var(--ui);color:var(--ink-2)}
.wkf.d{margin:0;align-self:center}
/* 49.5 the crowd line: a long choice wraps inside the row, the side and each separator never orphaned */
.crowd .cs{white-space:nowrap}
.crowd .cp.cw{white-space:normal;overflow-wrap:anywhere}
.crowd .cp .nw{white-space:nowrap}
@keyframes fill-pulse{from{transform:scale(.6);opacity:.55}to{transform:scale(1);opacity:1}}
@keyframes fill-sheen{from{background-position:100% 0}to{background-position:-100% 0}}
@media (prefers-reduced-motion: no-preference){
.fst[data-state="working"] .fmk::after{animation:fill-pulse .9s ease-in-out infinite alternate}
svg.chart.empty[data-skel]{background-image:linear-gradient(100deg,var(--raised) 35%,var(--raised-2) 50%,var(--raised) 65%);animation:fill-sheen 1.8s linear infinite}
}
/* journey: b51 */
/* RULES 51: the new-market moment, option B (the page builds itself). Tokens only; every animation sits under
   prefers-reduced-motion: no-preference (build_all's motion gate covers the lifted mocks; this block keeps the rule by hand). */
/* 51.1 the card: one fixed height while the fill runs, patched in place, so nothing under it moves; the receipt, the slow
   card and an open Details take their natural height. Its own container, so large text or a narrow column relaxes it. */
.b5cw{container-type:inline-size;margin-top:14px}
.mkt>.r .b5cw{margin-top:0;margin-bottom:6px}
.b5c{position:relative;display:flex;flex-direction:column;height:13rem;overflow:hidden;padding:.75rem .875rem .875rem;border-radius:14px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.b5c.b5done,.b5c.b5slow,.b5c:has(>.b5det[open]){height:auto}
.b5s{display:flex;align-items:flex-start;gap:10px}
.b5done .b5s{padding-right:5.75rem}
.b5pd{flex:none;position:relative;width:18px;height:18px;margin-top:1px;border-radius:999px;box-shadow:inset 0 0 0 1.5px var(--brand);display:inline-flex;align-items:center;justify-content:center;color:var(--bg)}
.b5pd::after{content:"";width:6px;height:6px;border-radius:999px;background:var(--brand)}
.b5pd svg{width:12px;height:12px}
.b5done .b5pd{background:var(--brand)}
.b5done .b5pd::after{display:none}
.b5t{flex:1;min-width:0}
.b5k{margin:0;font:500 0.8125rem/1.1rem var(--ui);color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.b5m{margin:0;font:600 0.9375rem/1.3rem var(--ui);color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.b5done .b5k,.b5slow .b5k{font:600 0.9375rem/1.3rem var(--ui);color:var(--ink);white-space:normal}
.b5done .b5m{font:500 0.875rem/1.3rem var(--ui);color:var(--ink-2);white-space:normal}
.b5w{display:block;color:var(--muted);font-weight:500;font-size:0.8125rem}
/* 51.2 the newest slot: a link to the story's card in the feed; the headline on two lines */
.b5n{display:block;flex:none;height:3.875rem;margin:.625rem 0 0 28px;color:inherit;text-decoration:none;overflow:hidden;border-radius:6px}
.b5n:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
a.b5n:hover .b5nh{text-decoration:underline;text-decoration-color:var(--line)}
.b5nm{margin:0;display:flex;align-items:center;gap:6px;height:1.125rem;font:600 0.75rem/1.125rem var(--ui);color:var(--muted);white-space:nowrap;overflow:hidden}
.b5nm b{color:var(--ink-2);font-weight:600;overflow:hidden;text-overflow:ellipsis;min-width:0}
.b5nm span{flex:none}
.b5nh{margin:.1875rem 0 0;font:600 0.9375rem/1.3 var(--ui);color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.b5np{margin:0;font-size:0.8125rem;line-height:1.4;color:var(--muted)}
.b5r0{flex:none;width:9px;height:9px;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--brand)}
.b5ok{flex:none;display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:999px;background:var(--brand);color:var(--bg)}
.b5ok svg{width:10px;height:10px}
/* the outlet line, in words: the names cut with "…", " and N more" never cut */
.b5o{flex:none;display:flex;min-width:0;height:1.25rem;margin:.5rem 0 0 28px;padding-right:5.75rem;font:500 0.8125rem/1.25rem var(--ui);color:var(--ink-2);white-space:nowrap}
.b5on{min-width:0;overflow:hidden;text-overflow:ellipsis}
.b5om{flex:none;color:var(--muted);white-space:pre}
/* 51.4 the tail line's room is held from the first frame */
.b5tl{flex:none;height:2.2rem;margin:.25rem 0 0 28px;font-size:0.8125rem;line-height:1.1rem;color:var(--muted);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.b5tl.b5ink{color:var(--ink-2)}
/* Details: the summary sits at the outlet line's right end (top: the rows above it, in rem, so it scales with text); the
   checklist opens at the card's foot */
.b5det{order:9}
.b5sum{position:absolute;top:7.4rem;right:.375rem;min-height:2.75rem;padding:0 .5rem;display:inline-flex;align-items:center;gap:2px;font:600 0.8125rem var(--ui);color:var(--brand);cursor:pointer;list-style:none;border-radius:8px}
.b5sum::-webkit-details-marker{display:none}
.b5sum::marker{content:""}
.b5sum:focus-visible{outline:2px solid var(--brand);outline-offset:-4px}
.b5sum svg{width:14px;height:14px}
.b5det[open] .b5sum svg{transform:rotate(90deg)}
/* the receipt and the slow card: Details beside the head (their height is their own) */
.b5done .b5sum,.b5slow .b5sum{top:.125rem}
.b5slow .b5s{padding-right:5.75rem}
.b5dl{margin:12px 0 0;padding-top:12px;border-top:1px solid var(--hairline)}
.b5dl small{display:block;font-size:0.8125rem;line-height:1.3;color:var(--muted);font-variant-numeric:tabular-nums}
/* the X line under the receipt: muted with a dash, or the posts and accounts when X runs */
.b5x{display:flex;gap:10px;align-items:flex-start;margin:8px 0 0;font-size:0.8125rem;line-height:1.3;color:var(--muted)}
.b5x .fmk{width:18px;height:16px;margin-top:0}
.b5x.b5xon{margin-left:28px;color:var(--ink-2)}
/* large text or a narrow column: the card keeps its height as a floor and grows; nothing is clipped */
@container (max-width:21em){
.b5c{height:auto;min-height:13rem}
.b5s,.b5done .b5s,.b5slow .b5s{padding-right:0}
.b5k,.b5m,.b5nm{white-space:normal;height:auto;text-overflow:clip}
.b5n,.b5o,.b5tl{height:auto}
.b5o{display:block;white-space:normal;padding-right:0}
.b5nm{display:block}
.b5nm b{overflow:visible}
.b5nh{-webkit-line-clamp:3}
.b5tl{display:block}
.b5sum,.b5done .b5sum,.b5slow .b5sum{position:static;margin:.25rem 0 -.5rem 20px}
}
/* 51.3 the held switch, the caption's ring, the rings on the chart */
.rng.b5held button[disabled]{opacity:.45;cursor:default}
.b5mr{flex:none;align-self:center;display:inline-block;width:10px;height:10px;margin-right:8px;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--brand)}
.b5mr.b5f{background:var(--brand)}
.b5wk .b5mr{margin:0 4px 0 1px;vertical-align:-1px}
svg.chart .b5ring{fill:var(--bg);stroke:var(--brand);stroke-width:2;transform-box:fill-box;transform-origin:center}
svg.chart .b5ring.b5f{fill:var(--brand)}
svg.chart .b5halo{fill:none;stroke:var(--brand);stroke-width:2;opacity:0;transform-box:fill-box;transform-origin:center;pointer-events:none}
svg.chart .b5halo.b5seek{opacity:.6;stroke-width:1.5}
svg.chart.b5morph circle,svg.chart.b5morph text{opacity:0}
.ticks.b5hide{opacity:0}
/* 51.4 the feed: a line under a move with nothing kept yet */
.b5slot{margin:-2px 0 10px 12px;font-size:0.8125rem;line-height:1.35;color:var(--muted)}
@keyframes b5in{from{opacity:0}to{opacity:1}}
@keyframes b5seek{0%{transform:scale(1);opacity:.65}100%{transform:scale(2.3);opacity:0}}
@keyframes b5pop{0%{transform:scale(1)}40%{transform:scale(1.4)}100%{transform:scale(1)}}
@keyframes b5settle{from{transform:scale(1);opacity:.65}to{transform:scale(2.6);opacity:0}}
@keyframes b5tick{from{transform:scale(.5);opacity:0}to{transform:none;opacity:1}}
@media (prefers-reduced-motion: no-preference){
.b5c[data-phase="prices"]{animation:b5in .25s ease-out .3s both}
.b5dl .fst[data-state="working"] .fmk::after{animation:none}
.b5done[data-settle] .b5pd svg{animation:b5tick .35s cubic-bezier(.2,.7,.2,1) both}
.b5sum svg{transition:transform .2s}
svg.chart .b5halo.b5seek{animation:b5seek 1.4s ease-out infinite}
svg.chart .b5ring.b5pop{animation:b5pop .45s cubic-bezier(.2,.7,.2,1)}
svg.chart .b5halo.b5settle{animation:b5settle .9s ease-out both}
svg.chart .b5ring,svg.chart .b5halo{transition:opacity .25s}
.ticks.b5show{transition:opacity .3s}
}
/* journey: sheets */
@media (max-width:899.98px){
.ph>.scrim{position:fixed}
.ph>.sheet{position:fixed}
.ph>.toast,body>.toast,body>.scrim,body>.sheet{position:fixed}
.sheet.msheet{gap:0}
.sheet .ferr.serr{margin:0}
.msheet .mrow{width:100%;min-height:48px;display:flex;align-items:center;justify-content:space-between;padding:0 4px;font-size:1rem;color:var(--ink);text-align:start}
.msheet .mrow span{color:var(--muted);font-size:0.875rem}
.msheet .shd{margin-bottom:4px}
/* the Plan row (RULES 19.24): "Plan" and its value on one line, the beta note on its own muted line under both */
.msheet .mrow.mplan{flex-wrap:wrap;align-items:baseline;align-content:center;row-gap:2px;padding:8px 4px}
.msheet .mrow.mplan .mlab{margin:0;padding:0;color:var(--ink);font-size:1rem}
.msheet .mrow.mplan .mnote{flex:1 0 100%;font-size:0.8125rem;line-height:1.35;color:var(--muted)}
.toast,.toast.up,.toast.top{top:84px;bottom:auto;z-index:24}
.sheet .btn.pri[aria-disabled="true"]{opacity:.45}
/* the side sheet in the desktop drawer's structure (RULES 19.3, ACCEPTED S10): the "Your side" label over Yes / No,
   the helper line, the "Just watching" radio card (desktop's .opt, fitted to the phone sheet's 12 px rhythm) */
.sheet .lbl{margin:2px 0 -6px;font:700 0.75rem var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.sheet .ssc{margin:0;font-size:0.8125rem;line-height:1.4;color:var(--muted)}
.sheet .ssc b{font-weight:700}.sheet .ssc b.down{color:var(--down)}.sheet .ssc b.up{color:var(--up)}
.sheet .opt{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;padding:8px 14px;box-sizing:border-box;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line);text-align:start;font-size:0.9375rem;line-height:1.35;color:var(--ink)}
.sheet .opt.on{box-shadow:inset 0 0 0 1.5px var(--brand);background:var(--raised)}
.sheet .opt .rd{width:20px;height:20px;border-radius:10px;box-shadow:inset 0 0 0 2px var(--faint);flex:none}
.sheet .opt.on .rd{box-shadow:inset 0 0 0 6px var(--brand)}
.sheet .opt b{font-weight:600}
.sheet .opt small{display:block;color:var(--muted);font-size:0.8125rem}
}
/* small phones (under 380 px): the side sheet tightens its rhythm so it fits a 320 × 568 screen without scrolling */
@media (max-width:379.98px){
.sheet:has(>.opt){gap:7px;padding-bottom:16px}
.sheet:has(>.opt) .lbl{margin-bottom:-3px}
.sheet .opt{min-height:46px;padding:6px 12px;line-height:1.3}
}
.pick{display:flex;flex-direction:column;gap:6px}
.prow{display:grid;grid-template-columns:22px 1fr;column-gap:12px;row-gap:2px;align-items:center;width:100%;min-height:56px;padding:8px 12px;box-sizing:border-box;border-radius:14px;background:var(--bg);text-align:start;color:var(--ink)}
.prow .rdo{grid-row:1/3;width:20px;height:20px;box-sizing:border-box;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--muted)}
.prow.on .rdo{box-shadow:inset 0 0 0 6px var(--brand)}
.prow .pq{font:600 0.9375rem/1.3 var(--ui)}
.prow .ps{font:400 0.8125rem/1.3 var(--ui);color:var(--muted)}
.prow:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
@media (min-width:900px){
.scrim.sfix{position:fixed;inset:0}
.dlg .dhd{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.dlg .btn.dx{box-shadow:none;margin:-8px -12px 0 0;padding:0 14px;font:600 0.875rem var(--ui);color:var(--ink-2)}
button.opt.act{width:100%;text-align:start}
.menu button.mi{width:100%;min-height:44px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border-radius:10px;font-size:0.875rem;color:var(--ink-2)}
/* the Plan row (RULES 19.24): "Plan" and its value on one line, the beta note on its own muted line under both */
.menu .mplan{flex-wrap:wrap;align-items:baseline;align-content:center;row-gap:2px;padding:8px 12px}
.menu .mplan .mlab{margin:0;padding:0;color:inherit;font-size:0.875rem}
.menu .mplan .mnote{flex:1 0 100%;font-size:0.75rem;line-height:1.35;color:var(--muted);text-align:start}
.toast.tfix{position:fixed}
.toast,.toast.tfix{top:76px;bottom:auto;z-index:46}
.dlg.gate[data-ref="dialog.signin"]{width:440px}
.dlg .pick{margin:16px 0}
.ssh .ferr.serr{margin-top:14px}
.hrow.look .lk button.act{display:inline-flex;align-items:center;min-height:44px;color:var(--brand);font-weight:600}
}
/* end journey: sheets */
/* journey: close-pattern */
/* Round 13A part 2 (RULES 25, DECISIONS-KHA 2026-10-13): one close pattern, a real bottom sheet, remembered order.
   Only transform and opacity animate. Appended by build_close.mjs, after the other journeys. */
[hidden]{display:none!important}

/* ---- the x: every sheet, dialog and drawer (closeBtn) and every card that can be hidden (hideBtn) ---- */
.cbtn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:44px;height:44px;min-width:44px;min-height:44px;padding:0;border-radius:999px;color:var(--ink-2);background:none;box-shadow:none;cursor:pointer}
.cbtn .cx{width:20px;height:20px;display:block;pointer-events:none}
.cbtn:hover{background:var(--raised);color:var(--ink)}
.cbtn:focus-visible,.cbtn.ff{outline:2px solid var(--brand);outline-offset:-4px}
.pinx.cbtn{margin:0 -4px 0 0}
.shd .pinx.cbtn{margin:0 -4px 0 0}
.btn.dx.cbtn,.dlg .btn.dx.cbtn{margin:-8px -12px 0 0;padding:0;width:44px;font-size:0}
.x.cbtn{margin:-8px -12px 0 0;font-size:0}
.ssk .x.cbtn{margin:0 -12px 0 0}
/* a hideable card: a small x at the top right, quieter than a sheet's */
.hbtn{color:var(--muted)}
.hbtn .cx{width:16px;height:16px}
.pin .pk button.cbtn{width:44px;min-width:44px;padding:0;font-size:0}
.pronote button.cbtn,.pronote button.cbtn.dis{margin-left:auto;width:44px;min-width:44px;padding:0;font-size:0}
.pronote .pinx.cbtn{margin:0 4px 0 auto}

/* ---- the phone bottom sheet (sheet.client.js): the grip is the handle and the header ---- */
html.sheet-lock{overscroll-behavior:none}
html.sheet-lock body{position:fixed;left:0;right:0;width:100%;overflow:hidden}
@media (max-width:899.98px){
.sheet{overscroll-behavior:contain;will-change:transform}
.sheet .grab,.sheet .shd{touch-action:none;-webkit-user-select:none;user-select:none}
.sheet .grab{position:relative;cursor:grab}
.sheet .grab::after{content:"";position:absolute;left:-56px;right:-56px;top:-12px;bottom:-10px}
.sheet .shd{cursor:grab}
.sheet.dragging,.sheet.dragging .shd,.sheet.dragging .grab{cursor:grabbing}
.scrim{touch-action:none}
}
.sheet:focus,.dlg:focus,.ssh:focus{outline:none}
@media (prefers-reduced-motion: no-preference){
.sheet.settling{transition:transform .22s ease-out}
.scrim{transition:opacity .22s ease-out}
.sheet.dragging~.scrim,.scrim:has(+ .sheet.dragging){transition:none}
}
/* the mid-drag frame (P-sheet-dragging): the CSP forbids inline style, so the drag's position is a class here; the product sets it with CSSOM */
.sheet.down150{transform:translateY(150px)}
.scrim.fade62{opacity:.62}
/* end journey: close-pattern */
/* journey: text-zoom */
/* Zoomed text (RULES 9.6, ACCEPTED TZ1): at 200% browser text size, at 390 and 320 wide, nothing passes the right
   edge. Rows that fit are unchanged: the wraps below only move a part when it no longer fits on its line, and the
   em-gated rules (1em = 16 px at 100% text) apply at 100% text only at 320 px or less
   (holder bar) and below 312 px (the rest). */
@media (max-width:899.98px){
/* top bar: the parts wrap; a wrapped row (the bell and the account) sits at the right; 44 px targets kept. The
   spacer takes all free space on a row that fits, so the end alignment changes nothing there */
.hdr{flex-wrap:wrap;justify-content:flex-end}
/* Home's ended card: "Open the market" and "Stop watching" share a line while they fit */
.rcta{flex-wrap:wrap}
/* the big price never truncates or breaks: past 32% of the width it stops growing (64 px stays 64 px at 100%) */
.big .n,.mq .big .n{font-size:min(4rem,32vw)}
/* holder bar: price and side on the first line (the side text wraps inside its button), Alerts on its own line.
   20em = 320 px at 100% text, where "Alerts on" already passed the edge by 14 px; a flex-wrap without this gate
   would also move bars at 390 that fit only by shrinking the side text */
@container (max-width:20em){
.hbar{flex-wrap:wrap;row-gap:6px}
.hbar .hs{flex:1 1 0;min-width:0;flex-wrap:wrap;white-space:normal;line-height:1.25}
.hbar .hs>span{white-space:nowrap}
.hbar .hal{flex:1 1 100%;justify-content:center}
}
/* B9 r1 (RULES 35.22) and B9 r2 bar (RULES 36.9): the holder bar never runs past the edge, whatever the side's words
   or the alert's state, and keeps two lines at most at 320-390 with 100% text (bar 5: a third line put the first card
   under the fold). One row: the price, the side, the alert action at the right. The side takes the room left and its
   words wrap inside their button, up to two lines; the pencil stands in for "· Edit ›". The alert action never wraps
   or leaves the row: on a phone it shows its short label ("Alerts on", "Alerts: not set up", "Get alerts"; the full words stay
   in its aria-label and its text). RULES 48.2.2: this phone bar holds at every phone width (under 900 px), not only at
   25em and under: between 400 and 899 px the desktop's full alert label ("Alerts set · this phone isn't set up") took
   the row and starved the side, which ran one word per line under "· Edit ›" (202 px at 420, 132 at 500). The full
   label is the desktop holder row's (900 and up); the phone's pill keeps the short words whatever its width. */
.hbar{flex-wrap:wrap;row-gap:6px}
.hbar>.hs:not(.hsf){flex:1 1 0;min-width:0;max-width:none;white-space:normal;flex-wrap:wrap;line-height:1.25;gap:0 5px}
.hbar>.hs:not(.hsf) .hsw{white-space:normal;min-width:0;flex:1 1 0}
.hbar>.hs:not(.hsf) .ck{white-space:nowrap}
.hbar>.hal{flex:none;margin-left:auto}
.hbar .hal .gl{white-space:nowrap;text-align:center;line-height:1.2}
.hbar .hal .gl[data-short]::after{content:attr(data-short)}
.hbar .hal .gl[data-short]>.gll{display:none}
.hbar:has(>.hs:not(.hsf)){gap:10px}
.hbar:has(>.hs:not(.hsf)) .hp>span{width:min-content;min-width:100%;max-width:5rem;white-space:normal;overflow:visible;text-overflow:clip;line-height:1.1}
/* RULES 48.2 (u89): the choice name's lines are chosen by the render (render/market.js holderName): one line up to 12
   characters, else two balanced lines, a number kept with its word; each line stays whole (the column is the longer
   line's width, at most 5rem) and a line past the cap ends in "…". Never "October" / "31" / "11%". */
.hbar:has(>.hs:not(.hsf)) .hp>span>.hpl{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* RULES 48.2.1 / 48.2.2: her side and position are the last thing cut, and no line is a bare side word. On a choice
   market the side button is two lines: the check, the choice name, her side and the pencil ("✓ Los Angeles Dodg… · Yes
   ✎"), then her position on its own line ("120 at 41%"); with no position saved it is one line ("✓ You hold October 31
   · Yes ✎"). The side (" · Yes") and the position never shrink or break: they set the button's minimum width. The name gives way first (it ends in "…"; the price block names
   the choice already), then the price block's column (its lines end in "…"); the alert button never shrinks. The
   column may run to 8rem when the side still has its tail's width, so a long name ("Benjamin Netanyahu") is whole in
   the price block. The full side stays in the button's aria-label. */
.hbar:has(>.hs.hs2:not(.hsf)){flex-wrap:nowrap}
.hbar:has(>.hs.hs2:not(.hsf)) .hp{flex:0 1 auto;min-width:0}
.hbar:has(>.hs.hs2:not(.hsf)) .hp>span{width:auto;min-width:0;max-width:8rem}
.hbar>.hs.hs2:not(.hsf){display:flex;flex-wrap:wrap;align-items:center;align-content:center;gap:0 5px;min-width:auto;text-align:left}
.hbar>.hs.hs2:not(.hsf) .hsw{display:contents}
.hbar>.hs.hs2:not(.hsf) .hsn{order:1;flex:1 1 0;width:0;max-width:max-content;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.hbar>.hs.hs2:not(.hsf) .hsd{order:2;flex:none;white-space:nowrap}
.hbar>.hs.hs2:not(.hsf) .hsx{display:none}
.hbar>.hs.hs2:not(.hsf) .hico{order:3;margin-left:0}
.hbar>.hs.hs2:not(.hsf) .hst{order:4;flex:0 0 100%;white-space:nowrap}
.hbar>.hs:not(.hsf) .hedt{display:none}
.hbar>.hs:not(.hsf) .hico{display:inline-block}
.hbar>.hal.hal{width:auto;padding:0 12px}
.hbar>.hal>svg{display:none}
/* RULES 45.4 (Kha, the friends launch): the alert state is its own button, never read as part of the side: an outlined
   pill with the bell, words that name alerts ("Alerts on", "Alerts: not set up", "Get alerts"; up to two short lines
   inside the 48 px button, "Alerts:" over "not set up") and a 14-16 px gap from the side's pencil */
.hbar>.hal.hal{gap:6px;padding:0 10px;margin-left:6px;box-shadow:inset 0 0 0 1px var(--line);font-size:0.8125rem;font-weight:600}
.hbar>.hal.hal.on{color:var(--ink-2)}
.hbar>.hal.hal>svg{display:inline-block;flex:none;width:16px;height:16px}
.hbar>.hal .gl{white-space:normal;max-width:3.75rem;text-align:left;line-height:1.15}
/* the side gives way first: past two lines its words end in an ellipsis (the full side stays in its aria-label) */
.hbar>.hs:not(.hsf) .hsw{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}
/* 320 px: the side's words keep two lines: the check goes (the aria-label still says "You hold"), the gaps and the alert's padding tighten */
@container (max-width:20em){
.hbar>.hs:not(.hsf) .ck{display:none}
.hbar:has(>.hs:not(.hsf)){gap:8px}
.hbar>.hal.hal{padding:0 8px;gap:5px}
/* RULES 48.2.1: a choice market's side words take the price block's 13 px and the price-side gap 6 px, so the tail
   ("Yes · 120 at 41%") and a 71-73 px choice column ("Los Angeles", "“No change”") both fit beside every alert state */
.hbar:has(>.hs.hs2:not(.hsf)){column-gap:6px}
.hbar:has(>.hs.hs2:not(.hsf))>.hal.hal{margin-left:8px}
.hbar>.hs.hs2:not(.hsf){font-size:0.8125rem}
}
/* 200% text on a phone (390 px is 12.2em, 320 px is 10em; 125% text at 390 is 19.5em and keeps the line above):
   the price takes its own line ("“No change” 88%"), the side its own, the alert action its own */
@container (max-width:17em){
.hbar .hp{flex:1 1 100%;flex-direction:row;align-items:baseline;justify-content:flex-start;flex-wrap:wrap;gap:0 6px}
.hbar .hp>span{max-width:none;white-space:normal;overflow:visible}
.hbar:has(>.hs:not(.hsf)) .hp>span>.hpl,.hbar .hp>span>.hpl{display:inline;white-space:normal}
.hbar>.hs:not(.hsf){flex:1 1 100%;display:block;text-align:left;padding:10px 0}
.hbar>.hs:not(.hsf) .hico{vertical-align:-2px}
.hbar>.hal.hal{flex:1 1 100%;justify-content:center;padding:0 18px}
.hbar>.hal>svg{display:inline}
.hbar>.hs:not(.hsf) .ck{display:inline}
.hbar .hal .gl{white-space:normal}
.hbar>.hal.hal{margin-left:0}
.hbar>.hal .gl{max-width:none;text-align:center}
.hbar>.hs:not(.hsf) .hsw{display:inline;-webkit-line-clamp:none;overflow:visible}
/* RULES 48.2.2 at 200% text: the price block takes its own line and names the choice whole; a choice market's side
   keeps its two-line form (the name may end in "…", the side and position whole), so it is two lines at most here too
   (it ran inline to 3 lines and more for a long name); the alert button stands 12 px under it */
.hbar:has(>.hs:not(.hsf)){row-gap:12px}
.hbar:has(>.hs.hs2:not(.hsf)){flex-wrap:wrap;column-gap:8px}
.hbar:has(>.hs.hs2:not(.hsf))>.hal.hal{margin-left:0}
.hbar:has(>.hs.hs2:not(.hsf)) .hp{flex:1 1 100%;min-width:0}
.hbar:has(>.hs.hs2:not(.hsf)) .hp>span{width:min-content;min-width:100%;max-width:none}
.hbar>.hs.hs2:not(.hsf){display:flex;font-size:0.875rem}
.hbar>.hs.hs2:not(.hsf) .hsw{display:contents}
.hbar .hal .gl[data-short]::after{content:none}
.hbar .hal .gl[data-short]>.gll{display:inline}
/* S4: the change line's "Last move Thu Oct 15 9:00 PM", a move row's window, the crowd's parts and a move header's
   "Show on chart" wrap instead of passing the edge */
.dl a.mvj,.big a.mvj,.crowd .cp{white-space:normal}
.mrow .mrw,.mrow .mru{white-space:pre-wrap}
.mvh{flex-wrap:wrap}
/* B9 r2 (RULES 36.6, PH2-6): the wrapped "Last move …" link drops its fixed 44 px overhang (-15.5 px margins over a
   line-height of 1) and takes a relative line height, so its second line never sits on the holder line below */
.dl a.mvj,.big a.mvj{margin:0;line-height:1.25}
/* RC-S4: the sticky strip's change ("▲1 pt in 24h") wraps inside the strip instead of running past the right edge */
.cstrip .csc{flex:0 1 auto;min-width:0;white-space:normal;text-align:right;line-height:1.2}
}
/* B9 r1 (RULES 35.28): a choice market's two sides ("Gadi Eizenkot wins (Yes) · 47%" / "… doesn't win (No) · 53%")
   are two stacked full-width rows, never one run-on line; the side sheet's two fields go one under the other when
   "Optional, e.g. 41" would not fit beside the other field (320 px, or large text) */
.seg.stk{flex-direction:column;gap:2px;border-radius:13px}
.seg.stk button{flex:none;min-height:48px;padding:10px 14px;text-align:left;white-space:normal;line-height:1.3;border-radius:10px}
.seg.stk button:not(.on)+button:not(.on){box-shadow:inset 0 1px 0 var(--hairline)}
.fl2{flex-wrap:wrap}
.fl2>.fld{flex:1 1 10.5rem;min-width:0}
/* 19.5em: narrower than any phone at 100% text (320 px is 20em), reached from 125% text at 390 px */
@container (max-width:19.5em){
/* alert settings: "Send a test" goes under the device and wraps */
.ar.dv{flex-wrap:wrap}
.ar.dv .rt{flex:1 1 8em}
.ar.dv .send{flex:0 1 auto;white-space:normal;min-width:0}
/* Home's "Only <market>" line: "Open the market" goes under the name */
.openm{flex-wrap:wrap;justify-content:flex-start}
/* Home feed rows: the tag line (market name, move, time) and the meta lines wrap instead of clipping */
.post .tagl{flex-wrap:wrap;white-space:normal;overflow:visible;column-gap:6px}
.post .tagl b{max-width:none;white-space:normal;overflow:visible}
.rm,.rm .rside{white-space:normal;overflow:visible}
/* Discovery's pasted-market row: the market name wraps */
.pq2 b{white-space:normal;overflow:visible}
/* list titles show every line (the two-line clamp is for 100% text) */
.rq{display:block;-webkit-line-clamp:none;overflow:visible}
/* the chart's one label (round 15) stays inside the chart and wraps */
.ctip{max-width:100%;white-space:normal}
}
}
/* Desktop at 200% text (RULES 9.6, ACCEPTED TZ2), at 1280 and 1024: the alert line on a market opened from an alert
   ("Since your alert at 4:00 PM: ▼1¢ · now 26.5¢" and "2 new ↓", D4) wraps instead of running past the edge; at
   100% text it fits on one line and nothing moves */
@media (min-width:900px){
/* RULES 48.2.2: the desktop holder row never runs its side under "Edit ›" or past the edge (a long choice name, or
   200% text): the side is one line whose choice name gives way first ("Prime Minister Benj… · Yes · 120 at 41%"; the
   side and position never cut), and "Edit ›" and the alert button follow on the next line, 12 px down, when the row is
   full. A row that fits (every fixture name at 100% text) is unchanged */
.hrow:not(.look){flex-wrap:wrap;row-gap:12px}
.hrow .hold{min-width:0;max-width:100%;flex:0 1 auto}
.hrow .hold .hdn{min-width:0;overflow:hidden;text-overflow:ellipsis}
.hrow .hold .hdt{flex:none}
.hrow .btn{white-space:normal;text-align:center}
.r .since.al{flex-wrap:wrap;white-space:normal}
.r .since.al .alnew{white-space:nowrap}
}
/* end journey: text-zoom */
/* journey: opal */
/* Opal depth (Subtle) + Yahoo touches, RULES 47. A is paint only. Landing: journeys/opal-landing.css */
/* A: ground, grain, edges, panels, bars, chart fill, separators (47.1-47.3) */
:root{--od-g:.13;--od-m:.07;--od-e:.07;--od-i:.025;--od-h:rgba(10,15,30,.74);--od-c:.07;--od-l:.75;--sep:#737D9A;--od-va:0;--od-k:1;--od-nk:var(--od-n);
--od-n74:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.022'/%3E%3C/svg%3E");
--od-n:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.03'/%3E%3C/svg%3E")}
@media (min-width:900px){:root{--od-va:.28}}
/* 47.12: the ground is one fixed layer the size of the window (body::before, out of flow, z-index -1), so it runs under
   the sticky header and to the window's foot on a short page; the page box and the body are clear over it. The header's
   frost (74% ground + blur) carries the same layers at 74% (--od-k), so at the page top it reads as the glow below it. */
/* 47.18: the ground sits a clear step under the cards again. The glows live only in the header band (they end 48 px
   down, above any card at any scroll), the base runs #060B1B to #040816 and the grain is 3% (2.2% in the frost), so the
   effective ground is about the old --bg (10,15,30): 6+ levels under --surface (17,24,43) in every channel, top to foot */
html{background:#0A0F1E}body,[data-ref=page]{background:transparent}
body::before,.hdr,header.hd{--od-gl:var(--od-nk),linear-gradient(90deg,rgba(3,5,12,calc(var(--od-va)*var(--od-k))),transparent 7%,transparent 93%,rgba(3,5,12,calc(var(--od-va)*var(--od-k)))),radial-gradient(75% 92px at 22% -44px,rgba(222,216,255,calc(var(--od-g)*var(--od-k))),transparent),radial-gradient(60% 84px at 86% -40px,rgba(196,242,230,calc(var(--od-m)*var(--od-k))),transparent)}
body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:var(--od-gl),linear-gradient(#060B1B,#050A19 900px,#040816)}
:is(.post,.fpost,.pst,.st-card,.sheet):not(#od){background-image:linear-gradient(rgba(255,255,255,var(--od-e)),rgba(255,255,255,0) 1.5px),linear-gradient(rgba(183,192,255,var(--od-i)),rgba(183,192,255,0) 80px)}
details.fold :is(.post,.fpost):not(#od){background-image:none}
.g.hf .post,[data-ref="home.feed"] .fpost{box-shadow:inset 0 1px 0 rgba(255,255,255,var(--od-e)),inset 0 0 0 1px var(--hairline)}
.pin.lead.lit::before{opacity:var(--od-l)}
.pin.lead.lit{background:radial-gradient(90% 120% at 15% 0,rgba(222,216,255,.06),transparent 60%),linear-gradient(180deg,#252E4C 0%,#171F36 62%,#131A2E 100%)}
.hdr,header.hd,.hbar{background-color:var(--od-h);backdrop-filter:blur(20px) saturate(1.4)}
.hdr,header.hd{--od-k:.74;--od-nk:var(--od-n74);background:var(--od-gl) rgba(11,16,32,.74)}
.hbar{border-top-color:rgba(255,255,255,.07)}
[data-ref="market.chart"] stop:first-child{stop-color:var(--chartline);stop-opacity:var(--od-c)}
:is(.acov .cs,.crt .cs,.ct .cs,.dl .ms,.put .pus):not(#od){color:var(--sep)}
/* A: entrance, shimmer (47.4) */
@media (prefers-reduced-motion:no-preference){
/* 47.14: the first page load only; odometer.client.js sets data-entered when it ends, so a re-mount never fades again */
html:not([data-entered]) :is([data-ref="market.price"],[data-ref="market.chart"],[data-ref="home.pin"]){animation:od-in .3s ease-out both}
.skel i{background-image:linear-gradient(100deg,transparent 30%,rgba(237,232,255,.09) 45%,rgba(196,242,230,.09) 55%,transparent 70%);background-size:300% 100%;animation:od-sh 1.6s linear infinite}}
@keyframes od-in{from{opacity:0;transform:translateY(6px)}}
@keyframes od-sh{from{background-position:100% 0}to{background-position:0 0}}
/* C: tabular figures; hero tighter (47.9-47.10) */
:is(.big .n,.lpv,.csp,.hp,.hp b,.ppt,.pl,.psn,.since,.rr,.rmeta,.ebx-t,.ebx-amt,.lgn,.acard,.acl,.put,.ct,.cstrip,.dl,.lm,.mrow,.bt,.bmc,.ml2,.mu,.k-m,.k-t,.k-i,.tc,.rt,.ar,.tag,.tagl,.ntm,.pid,.wn,.kick,.wr,.ldot,.pin .st,.t+.w,.vt,.sumline,.tend,.snc,.sl,.cread,.lkn,svg text):not(#od){font-variant-numeric:tabular-nums}
:is(.big .n,.pin.lead .lpv):not(#od){letter-spacing:-.04em}
/* B: rolling digits (47.5-47.8, render/odometer.client.js) */
.odo-c{display:inline-block;position:relative}
/* 47.17: each rolling slot clips its glyphs to its own line box (top and bottom; the sides stay open for the glyphs'
   bearings), so the old or new digit never paints over the title above or the caption below. A clip, not overflow:
   overflow:hidden would move an inline-block's baseline to its bottom edge. The still runs (.odo-s) are inline
   blocks clipped the same way: a sheen hero paints its gradient only inside its own box, and a run's inline background
   would otherwise reach the glyphs' ascent above it (landing, line-height .84: one pixel row). */
.odo-c,.odo-s{clip-path:inset(0 -.3em)}.odo-s{display:inline-block}
.odo-o{position:absolute;left:0;top:0}
.odo-k :is(.odo-s,.odo-n,.odo-o){-webkit-background-clip:text;background-clip:text;color:transparent}
.odo-n{display:inline-block}
@media (prefers-reduced-motion:no-preference){
.odo-u .odo-n{animation:odo-a .22s ease-out both}.odo-u .odo-o{animation:odo-b .22s ease-out both}
.odo-d .odo-n{animation:odo-c .22s ease-out both}.odo-d .odo-o{animation:odo-e .22s ease-out both}}
@keyframes odo-a{from{transform:translateY(.6em);opacity:0}}
@keyframes odo-b{to{transform:translateY(-.6em);opacity:0}}
@keyframes odo-c{from{transform:translateY(-.6em);opacity:0}}
@keyframes odo-e{to{transform:translateY(.6em);opacity:0}}
/* D: start line (47.11) */
:is(svg.mini,svg.sp) .st0{stroke:var(--faint)}
/* E: direction has one colour; one warm accent (47.15-47.16, amending 41.2 and 46.1) */
/* 47.15: a move stated in words takes its printed arrow's colour (--up for ▲, --down for ▼), or on a held market the
   holder's colour, which the render already chose (priceChange: red against her side, green for it; holder wins).
   A big move (3× usual or more, `hot`) is weight beside its "3× usual" words, never a colour. Amber leaves text. */
:is(span,b).hot:not(#od){font-weight:700}
.rm .hot:not(#od){font-weight:600}
/* Discovery's move cell (and the start sheet's rows) is 600 already, and its desktop column is 150 px: a 700 big move
   wrapped "▼6 pts in 40 min 3× usual" to two lines. There the big move is 600 (as wide as before) and a calm one 500 */
.mvl:not(.hot):not(#od){font-weight:500}.mvl.hot:not(#od){font-weight:600}
.hot.up:not(#od),.acard .l .calm.up:not(#od){color:var(--up)}
.hot.dn:not(#od),.acard .l .calm.dn:not(#od){color:var(--down)}
.mrow.hot.up .mrs:not(#od){color:var(--up)}
.mrow.hot.dn .mrs:not(#od){color:var(--down)}
.mrow.hot .mru:not(#od){color:var(--muted)}
.pin.lead.lit .pk .pkt:not(#od){color:var(--ink-2)}
.dsc .tend:not(#od),.tend:not(#od){color:var(--ink)}
/* 47.16: the chart's one warm accent is --amber (#FF6134): the band, the move segment and the tag (render/chartLayout.js
   AMBER); the old coral text token resolves to it, so no second warm colour is left to draw */
:root{--amber-text:var(--amber)}
/* F: third fix pass after review 88c (47.18-47.22; 47.18's ground and glow are in A above) */
/* 47.19: the active nav marker is one step above the frosted header (it was --raised 26,34,54 on a frost of about
   25,31,49): #2E3858 with a periwinkle hairline ring; the bell's dot ring follows it */
:root{--od-on:#2E3858}
:is(.dlink.on,.ib.on,.bell.on,.bell.open):not(#od){background:var(--od-on);box-shadow:inset 0 0 0 1px rgba(183,192,255,.24)}
.bell:is(.on,.open) .bdot:not(#od){box-shadow:0 0 0 2px var(--od-on)}
/* 47.21: the Home lead's opal rim reads at 1x: the sheen ring at full strength, 2 px, in a deeper opal (still no outer
   glow; only the lead card) */
.pin.lead.lit:not(#od)::before{opacity:1;padding:2px;background:linear-gradient(115deg,#DCD3FF 0%,#9DB0FF 35%,#93E6CF 65%,#FFB8D4 100%)}
/* 47.22: a rolling slot is its own layer, so the clip that render/odometer.client.js fits to the hero's line box holds
   at its top edge (a row of the old glyph leaked past it); the slots exist only during a roll */
.odo-c{will-change:transform}
/* end journey: opal */
/* journey: b92 */
/* B9-2 round 1 fixes (RULES 52, 2026-10-22). The last block of fp.css, so these win. */
/* 52.1 (I1): Home's start rows on the phone: the price is its own line under the title; nothing shares a line */
.row.rpu a.rt{min-width:0;flex:1}
.row.rpu .rq{overflow-wrap:anywhere}
.row.rpu .rpl{display:block;margin-top:2px;white-space:normal;overflow-wrap:anywhere;line-height:1.25}
.row.rpu .rr{width:auto;min-width:0}
.row.rpu .rm{white-space:normal}
/* a narrow phone or large text: the spark gives its column to the words */
@media (max-width:22.5em){.row.rpu .rr{display:none}}
/* 52.7 (I8): the empty Home's example is one still row with an "Example" tag; no shimmer */
.skel.still i{animation:none!important;background-image:none!important}
.skel.still .sk-tag{display:inline-block;margin:0 0 8px;padding:2px 8px;border:1px solid var(--hairline);border-radius:999px;font:600 0.75rem var(--ui);color:var(--ink-2);letter-spacing:.02em}
/* 52.4 (I5, WCAG 2.4.11): focus scrolls clear of the phone dock; --dock-h is written by render/dock.client.js */
@media (max-width:899.98px){html:has(.hbar){scroll-padding-bottom:calc(var(--dock-h,96px) + 12px)}}
/* 52.2 (I2, amends 48.2.1/48.2.2): the phone side on a choice market runs as text: "✓ Nithya Raman · Yes ✎" on line 1
   (a long name wraps onto a second line, " · Yes" stays on the name's last line), the position "120 at 41% ✎" on the
   next; nothing shrinks to "…" (render/side.js sideName cuts a name past 26 characters at a word) */
.hbar>.hs.hs2:not(.hsf){display:block;font-size:0.8125rem;line-height:1.25;text-align:left;white-space:normal;align-self:center}
.hbar>.hs.hs2:not(.hsf) .hsw{display:inline}
.hbar>.hs.hs2:not(.hsf) .hsn{display:inline;width:auto;max-width:none;overflow:visible;white-space:normal;text-overflow:clip}
.hbar>.hs.hs2:not(.hsf) .hsd{display:inline;white-space:nowrap}
.hbar>.hs.hs2:not(.hsf) .hsx{display:block;height:0;overflow:hidden}
.hbar>.hs.hs2:not(.hsf) .hst{display:inline;white-space:nowrap}
.hbar>.hs.hs2:not(.hsf) .hico{display:inline-block;vertical-align:-2px;margin-left:5px}
/* 52.12 (I27): the Stop toast's two sentences on two lines; on the phone it sits at the bottom, above the dock, so it
   never covers the top of the page (the ended banner) */
.toast .tl1,.toast .tl2{display:block;padding:0;flex:none}
.toast .tl2{color:var(--ink-2)}
@media (max-width:899.98px){.toast,.toast.up,.toast.top,.toast.tfix{top:auto;bottom:calc(var(--dock-h,0px) + 12px)}}
/* 52.14 (I23): the pulse's coming events on their own line, with a capital: "Ends Oct 31" */
.pulse .pu2{display:block}
.pulse .pu2::first-letter{text-transform:uppercase}
/* 52.17 (I19): the desktop "Show" chips wrap onto a second row instead of scrolling under a fade, so the last chip and
   every focus ring show whole */
.showf,.showf[data-over],.showf[data-over="end"]{flex-wrap:wrap;overflow:visible;padding-right:0;-webkit-mask-image:none;mask-image:none;row-gap:8px}
/* 52.23: the settled slow card: a still hollow mark, nothing pulses */
.b5rest .b5rd{flex:none;width:18px;height:18px;margin-top:1px;border-radius:999px;box-shadow:inset 0 0 0 1.5px var(--ink-3,#596380)}
.pulse .pu2>.pus:first-child{display:none}
/* 52.2: the side name's narrow cut under 360 px (render/side.js sideNameHtml) */
.hbar .hsn .hss{display:none}
@media (max-width:359.98px){.hbar .hsn .hsl{display:none}.hbar .hsn .hss{display:inline}}
/* 52.2: under 360 px the price column caps at 4.75rem so the side keeps room for its name; from 360 its 8rem cap holds */
@media (max-width:359.98px){.hbar:has(>.hs.hs2:not(.hsf)) .hp>span{max-width:4.75rem}}
/* end journey: b92 */
/* journey: sx53 */
/* Site Experience's asks (RULES 53, 2026-10-22). The last block of fp.css, so these win. Every hit area here is
   invisible and moves no text: a positioned ::before (or ::after) on the target, or a chip drawn on ::before inside a
   44 px box with a matching negative margin. Measured by tools/tapcheck.mjs at 390 and 1280. */

/* 53.8 a · Discovery's phone rows: the row link grows down to 44 when it is shorter (one line, 40.5); its source line
   (.ml3) takes the 4 px gap above it and runs down to just above the next row's star (the rows tile, no overlap) */
.mkr a.mkt,.mkr .ml3{position:relative}
.mkr a.mkt::before{content:"";position:absolute;left:0;right:0;top:0;bottom:min(0px,calc(100% - 44px))}
.mkr .ml3::before{content:"";position:absolute;left:0;right:0;top:0;bottom:-16px}
/* 53.8 b · Discovery's desktop table: the market link (18.8 or 37.5) and the talked-about item (42.7) grow to 44 about
   their middle, inside the 68 px row */
.trow a.mkt,.dsc .trow a.tc{position:relative}
.trow a.mkt::before,.dsc .trow a.tc::before{content:"";position:absolute;left:0;right:0;top:min(0px,calc(50% - 22px));bottom:min(0px,calc(50% - 22px))}
/* 53.8 c · desktop "Show" chips (40): the box is 44, the chip is drawn on ::before 2 px in, the margin gives the 4 back */
@media (min-width:900px){
.showf .shc{position:relative;isolation:isolate;min-height:44px;line-height:44px;margin-block:-2px;background:none;box-shadow:none}
.showf .shc::before{content:"";position:absolute;inset:2px 0;z-index:-1;border-radius:999px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.showf .shc:hover{background:none}
.showf .shc:hover::before{background:var(--raised)}
.showf .shc.on{background:none;box-shadow:none}
.showf .shc.on::before{background:var(--raised);box-shadow:inset 0 0 0 1.5px var(--brand)}
.showf .shc:focus-visible{outline:none}
.showf .shc:focus-visible::before{outline:2px solid var(--brand);outline-offset:2px}
}
/* 53.8 d · the pulse link: 44 about its middle (two lines are 40.4); a one-line pulse (24) takes 3 px of the gap above
   and 2 px of the 4 px gap to the crowd line, never more (the range buttons sit 6 px above, the crowd line 4 px below) */
a.pulse{position:relative}
a.pulse::before{content:"";position:absolute;left:0;right:0;top:max(-3px,min(0px,calc(50% - 22px)));bottom:max(-2px,min(0px,calc(50% - 22px)))}
/* 53.8 e · "Also covered by …" (.acb, a 24 px box: its 17.5 px line and 3 px pads): the hit area reaches 20.5 px up over
   the outlet line above it (text, no target), so the box is 44 and the Read row under it keeps its own */
.acb{position:relative}
.acb::before{content:"";position:absolute;left:0;right:0;top:-20.5px;bottom:0}
/* 53.8 f · Terms and Privacy in every consent line: 44 tall from 8 px above the link's box (never over the Google button,
   8 px or more above), 4 px wider each side; the text does not move (the sheets' old 13 px pads, which reached over the
   Google button, go; their 2 px sides stay) */
.consent a{padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0}
.consent a,.so .so-c a,.lkm .lkconsent a{position:relative}
.consent a::before,.so .so-c a::before,.lkm .lkconsent a::before{content:"";position:absolute;left:-4px;right:-4px;top:-8px;height:44px}
/* 53.8 g · desktop "N moves ›" (fp.css .mq .dl a.mvj sets it flat on purpose): the look stays, the hit area grows to 44
   (19 px up over the caption, 8 px down: the holder row sits 8 to 12 px under it) */
@media (min-width:900px){
.mq .dl a.mvj{position:relative}
.mq .dl a.mvj::before{content:"";position:absolute;left:-2px;right:-2px;top:-19px;bottom:-8px}
}
/* the market page's "alert since" line under the holder row (17): 44 from its own top down over the gap to the chart */
a.alw{position:relative}
a.alw::after{content:"";position:absolute;left:0;right:0;top:0;height:44px}
/* 53.8 h · an ⓘ on a heading line just above a row (/alerts rules, Home's side list, the ended page's biggest moves):
   its 44 box extended 12 px below the 20 px line, 6 px into the first row. It now reaches 18 up and 6 down; the glyph
   keeps its place (padding-top 12 puts it where the centred box had it) */
.alr .mh .ib-i,.ar-h .ib-i,[data-ref="alerts.rules.info"],[data-ref="market.ended.biggest.info"]{box-sizing:border-box;margin:-18px -8px -6px -6px;padding-top:12px}
[data-ref="home.side.info"]{box-sizing:border-box;margin:-14px -8px -10px -6px;padding-top:4px}
/* 53.8 i · Discovery's lens chips (fp.css .dsc .lens a, 32 high; Site Experience's override, folded in): the link box is
   44, the chip is drawn on ::before 12 px down, the strip moves up 12 so nothing shifts; the box ends at the chip's
   bottom, so the ⓘ under the strip keeps its room */
.dsc .lens{margin-top:-12px}
.dsc .lens a{height:44px;box-sizing:border-box;position:relative;isolation:isolate;padding-top:12px;background:none;box-shadow:none}
.dsc .lens a::before{content:"";position:absolute;inset:12px 0 0;border-radius:999px;z-index:-1;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.dsc .lens a.on{background:none;box-shadow:none}
.dsc .lens a.on::before{background:var(--ink);box-shadow:none}
.dsc .lens a:focus-visible{outline:none}
.dsc .lens a:focus-visible::before{outline:2px solid var(--brand);outline-offset:2px}
@media (min-width:900px){.dsc .lens{padding-inline:4px;margin-inline:-4px}}
/* the ⓘ beside Discovery's caption (fp.css .dsc .lcap .ib-i scale(.85) shrank the 44 button to 37.5): the glyph is
   scaled, not the button. The caption's 20 px line sits 8 px under the lens chips and 8 px over the first row's star,
   so its box is 36 (8 up, 8 down, the glyph where it was): a tile, not 44 */
.dsc .lcap .ib-i{transform:none;box-sizing:border-box;height:36px;margin:-8px -8px -8px -6px}
.dsc .lcap .ib-i span{transform:scale(.85)}
/* /you's Show and Hide segments: 44 high (DESIGN-SYSTEM 8.8; were 40) */
.ym .yseg button{min-height:44px}
/* Home's Top / Latest (fp.css .fdiv .ord .ordb): the short label's box reaches 44 wide with padding and a matching
   negative margin, so the text and the hairline between them stay put */
.fdiv .ord .ordb[aria-pressed="false"]{padding:0 4px 0 18px;margin-left:-14px}
.fdiv .ord .ordb[aria-pressed="true"]{padding-right:16px;margin-right:-14px}
/* the Alerts empty state's link: a vertical hit pad with a matching negative margin, so the text does not move */
.aempty .enext a{padding:14px 4px;margin:0 -4px}
/* 53.9 · Discovery's pasted-market row (P41): the sheets' pick row (.prow, a 22 px grid) also styled .pstate.prow and
   squeezed its link to 22 px; the pasted row is a flex row again */
.pstate.prow{display:flex;grid-template-columns:none;column-gap:0;row-gap:0;min-height:52px;padding:0;background:var(--surface);color:var(--ink-2)}

/* 53.7 · empty states: You with nothing watched, signed-out You, Home's ended markets */
.ym .yadd .rq{color:var(--brand);font-weight:600}
.ym .ynone{margin:6px 0 0;font-size:0.875rem;line-height:1.45;color:var(--ink-2)}
.ym .yout{margin-top:22px}
.ym .ysign{width:100%;min-height:48px;margin-top:10px;border:0;border-radius:12px;background:var(--brand);color:#0A0F1E;font:700 0.9375rem var(--ui);cursor:pointer}
.hend{margin-top:14px}
.hend .er{display:flex;align-items:center;gap:10px;min-height:52px;padding:6px 0;border-top:1px solid var(--hairline);color:var(--ink-2);text-decoration:none}
.hend .er:first-of-type{border-top:0}
.hend .er .pic{flex:none;width:28px;height:28px;opacity:.6}
.hend .er .eq{flex:1;min-width:0;font:500 0.875rem/1.3 var(--ui);color:var(--ink-2)}
.hend .er .ew{flex:none;font-size:0.75rem;color:var(--muted);white-space:nowrap}
@media (min-width:900px){main.ym .ysign{width:auto;min-width:200px;padding:0 24px}}
/* end journey: sx53 */
/* journey: b92r2 */
/* B9-2 round 2 fixes (RULES 54, 2026-10-22). The last block of fp.css, so these win. */
/* 54.1 (R2-1): the phone pill "Alerts on · not on this phone yet" in the sheet's own words: "Alerts on ·" over "not on
   this phone yet" (smaller, muted, two short lines), the bell beside it, all inside the 48 px pill */
.hbar>.hal.hal .gl.gl2{width:min-content;max-width:none;white-space:normal;line-height:1.1;text-align:left}
.hbar .hal .gl2>.gla{display:block;white-space:nowrap}
.hbar .hal .gl2>.glb{display:block;font-size:0.6875rem;font-weight:500;line-height:1.15;color:var(--muted)}
@container (max-width:17em){.hbar>.hal.hal .gl.gl2{width:auto;max-width:none;text-align:center}.hbar .hal .gl2>.gla,.hbar .hal .gl2>.glb{display:inline}}
/* 54.2 (R2-2): a date market's side runs as text like a choice side (52.2): "✓ You hold Yes, by October 31", the ✓
   always drawn; under 360 px "You hold " gives way ("✓ Yes, by" / "October 31"), with a position up to 3 lines */
.hbar>.hs.hsdt:not(.hsf){display:block;font-size:0.8125rem;line-height:1.25;text-align:left;white-space:normal;align-self:center}
.hbar>.hs.hsdt:not(.hsf) .hsw{display:inline;-webkit-line-clamp:none;overflow:visible}
.hbar>.hs.hsdt:not(.hsf) .ck{display:inline}
.hbar>.hs.hsdt:not(.hsf) .hico{display:inline-block;vertical-align:-2px;margin-left:5px}
@media (max-width:359.98px){.hbar .hsdt .hsy{display:none}}
.hbar .hsdt .hsk{white-space:nowrap}
/* 54.3 (R2-4): the lead card's move time never breaks ("6:47 AM", never "AM" alone) */
.lck{white-space:nowrap}
/* 54.4 (R2-7): Save with nothing picked looks disabled on both devices, and the line above it says why */
.pri[aria-disabled="true"],.sheet .btn.pri[aria-disabled="true"],.ssh .dact .pri[aria-disabled="true"]{opacity:.45;cursor:not-allowed}
/* the desktop drawer's Save takes the phone's disabled look: the grey ink face at .45, not the lilac of a live button */
.ssh .dact .pri[aria-disabled="true"]{background:var(--ink);color:var(--bg)}
.sneed{margin:0;font-size:0.8125rem;line-height:1.4;color:var(--muted)}
.ssh .sneed{margin-top:12px}
/* 54.5 (R2-8): a toast on a computer sits at the bottom of the window, never over the title or the Share button */
@media (min-width:900px){.toast,.toast.up,.toast.top,.toast.tfix{position:fixed;top:auto;bottom:24px;left:50%;right:auto;transform:translateX(-50%)}}
/* 54.7 (R2-11): the count's last word and "· more than usual" keep one line */
.pulse .puk{white-space:nowrap}
/* 54.8 (R2-12): /alerts rows wrap their time instead of cutting it ("yesterday 6:39 PM", never "yesterday 6:…") */
.ar.ex .rm,.ar[data-ref^="alerts.earlier"] .rm,.ar[data-ref^="alerts.missed"] .rm,.ar.dv .rm{white-space:normal;overflow:visible;text-overflow:clip}
/* 54.9 (R2-13): the compact sticky header is opaque; the hero's number never shows through it */
.cstrip{background:var(--bg);-webkit-backdrop-filter:none;backdrop-filter:none}
/* 54.10 (Build's note c): the empty Home's "Example" tag is a small inline tag, not a full-width pill */
.skel.still .sk-tag{align-self:flex-start;width:max-content;max-width:100%}
/* end journey: b92r2 */
