
/* ══ dossier v6 ═══════════════════════════════════════════════════════════
   One voice: Inter (--font-ui) everywhere; numbers are tabular Inter, never
   monospace. The page is tinted by the engine stance (--stance): aurora,
   hero ribbon and ladder all derive from the same verdict. */
*{box-sizing:border-box;}
:root{--stance:var(--muted);
      --hair:color-mix(in srgb,var(--line) 60%,transparent);
      --v6-radius:18px;}
body.st-pos{--stance:var(--up);}
body.st-warn{--stance:var(--warn);}
body.st-neg{--stance:var(--down);}
html body{font:400 13.5px/1.55 var(--font-ui);background:var(--bg);color:var(--text);margin:0;padding:24px 0 0;-webkit-font-smoothing:antialiased;}  /* 24px top gap = check_nav_gap contract */
html,body{overflow-x:clip;}  /* safety net — offenders are also fixed at the source */
a{text-decoration:none;color:inherit;}
.num{font-variant-numeric:tabular-nums;letter-spacing:-.01em;}
.pos{color:var(--ink-up, var(--up));}.neg{color:var(--ink-down, var(--down));}.wrn{color:var(--ink-warn, var(--warn));}.mut{color:var(--muted);}
.sm{font-size:12px;}

/* aurora — stance-tinted room light (plain gradients: no filter cost) */
.aurora{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;}
.aurora::before{content:"";position:absolute;width:1100px;height:780px;top:-260px;left:-180px;
  background:radial-gradient(closest-side,color-mix(in srgb,var(--stance) 9%,transparent) 0%,transparent 78%);}
.aurora::after{content:"";position:absolute;width:820px;height:640px;bottom:-160px;right:-140px;
  background:radial-gradient(closest-side,color-mix(in srgb,var(--info) 6%,transparent) 0%,transparent 78%);}

/* sticky jump strip */
.strip{position:fixed;top:0;left:0;right:0;z-index:220;display:flex;align-items:center;gap:12px;height:48px;overflow:hidden;
  padding:0 22px;background:color-mix(in srgb,var(--bg) 86%,transparent);
  backdrop-filter:blur(18px) saturate(150%);-webkit-backdrop-filter:blur(18px) saturate(150%);
  border-bottom:1px solid var(--hair);transform:translateY(-100%);transition:transform .3s cubic-bezier(.22,.9,.26,1.02);}
.strip.vis{transform:translateY(0);}
.strip .stk{font-size:14.5px;font-weight:800;}
.strip .stp{font-size:13.5px;font-weight:650;}
.schip{font-size:11px;font-weight:700;padding:3px 10px;border-radius:999px;white-space:nowrap;
  color:var(--stance);background:color-mix(in srgb,var(--stance) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--stance) 30%,transparent);}
.strip nav{display:flex;gap:2px;margin-left:6px;overflow-x:auto;scrollbar-width:none;flex:1;}
.strip nav::-webkit-scrollbar{display:none;}
.strip nav a{font-size:12px;color:var(--muted);padding:5px 10px;border-radius:8px;white-space:nowrap;}
.strip nav a:hover{color:var(--text);background:var(--gbtn-bg);}
.strip nav a.is-on{color:var(--text);background:color-mix(in srgb,var(--link) 14%,transparent);}
@media(max-width:760px){.strip nav{display:none;}.strip .sname{display:none;}}
@media(max-width:480px){.strip .schip{display:none;}}

/* layout */
.page-wrap{position:relative;z-index:1;max-width:1240px;margin:0 auto;padding:0 26px 60px;}
.crumb{font-size:11.5px;font-weight:550;color:var(--muted);padding:18px 2px 0;letter-spacing:.02em;}
.crumb a:hover{color:var(--ink-link, var(--link));}
.crumb b{color:var(--text);font-weight:600;}

/* module chrome */
.mod{background:var(--glass-bg);border:1px solid var(--glass-brd);border-radius:var(--v6-radius);
  box-shadow:var(--glass-shadow);backdrop-filter:blur(22px) saturate(150%);-webkit-backdrop-filter:blur(22px) saturate(150%);
  padding:20px 24px 22px;min-width:0;}
.mod-hd{display:flex;align-items:baseline;gap:10px;margin:0 0 16px;padding-bottom:12px;border-bottom:1px solid var(--hair);}
.mod-hd h2{display:flex;align-items:center;gap:10px;margin:0;font-size:15.5px;font-weight:650;letter-spacing:-.01em;}
.mod-hd h2::before{content:"";width:3px;height:15px;border-radius:2px;flex-shrink:0;
  background:linear-gradient(180deg,var(--link),color-mix(in srgb,var(--link) 30%,transparent));}
.mod-hd .hint{margin-left:auto;font-size:11.5px;color:var(--muted);font-weight:500;white-space:nowrap;display:flex;align-items:center;gap:8px;}
.mod-ft{margin-top:14px;padding-top:10px;border-top:1px solid var(--hair);font-size:11.5px;color:var(--muted);line-height:1.5;}

/* reveal-on-scroll (html.js gated; reduced-motion opts out; no-JS shows all) */
html.has-js .rv{opacity:0;transform:translateY(16px);}
html.has-js .rv.in{opacity:1;transform:none;transition:opacity .55s ease,transform .55s cubic-bezier(.22,.9,.26,1.02);transition-delay:var(--d,0ms);}
@media(prefers-reduced-motion:reduce){html.has-js .rv{opacity:1;transform:none;transition:none;}}

/* hero */
.hero{position:relative;margin-top:14px;padding:26px 30px 0;overflow:hidden;}
.hero::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,var(--stance),color-mix(in srgb,var(--stance) 12%,transparent));}
.hero-grid{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px 48px;align-items:start;}
.eyebrow{font-size:10.5px;font-weight:650;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);}
.hero h1{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 16px;margin:6px 0 0;
  font-size:clamp(38px,4.8vw,54px);font-weight:900;letter-spacing:-.04em;line-height:.95;}
.hero h1 a:hover{color:var(--ink-link, var(--link));}
.hero h1 .co{font-size:15px;font-weight:550;letter-spacing:0;color:var(--muted);}
.hero-desc{margin:12px 0 0;max-width:66ch;font-size:13px;line-height:1.6;color:var(--muted);}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:14px 0 0;}
.chip6{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 10px;
  border-radius:999px;background:var(--gbtn-bg);border:1px solid var(--gbtn-brd);color:var(--muted);}
.px-block{text-align:right;min-width:230px;}
.px-big{font-size:clamp(32px,3.6vw,44px);font-weight:750;letter-spacing:-.025em;line-height:1;}
.px-chg{display:inline-flex;align-items:center;gap:6px;margin-top:8px;font-size:13.5px;font-weight:650;}
.px-chg .pill6{padding:2px 9px;border-radius:8px;}
.px-chg.pos .pill6{background:color-mix(in srgb,var(--up) 13%,transparent);border:1px solid color-mix(in srgb,var(--up) 30%,transparent);}
.px-chg.neg .pill6{background:color-mix(in srgb,var(--down) 13%,transparent);border:1px solid color-mix(in srgb,var(--down) 30%,transparent);}
/* The live pip: one dot, used beside the price AND on the stance stamp so the
   two read as the same "this is current" signal. The glow is a box-shadow
   pulse rather than an opacity blink — the dot never disappears, so a glance
   that lands mid-cycle still sees it. Base state carries the glow, which is
   what reduced-motion falls back to. */
/* --ok, not --up: a live pip is a STATUS read, and the standing zh colour law
   (红涨绿跌) names "live/feed dots" in the list that must NOT flip. Painting it
   from --up made it turn red in Chinese, where red means "rising" — a
   directional claim from an indicator that only ever meant "this is current".
   --ok is the non-flipping status green and is theme-aware in both modes. */
.live-dot{width:6px;height:6px;border-radius:50%;background:var(--ok);display:inline-block;
  box-shadow:0 0 7px 1px color-mix(in srgb,var(--ok) 60%,transparent);animation:v6lp 2.6s ease-in-out infinite;}
@keyframes v6lp{
  0%,100%{opacity:1;box-shadow:0 0 7px 1px color-mix(in srgb,var(--ok) 62%,transparent);}
  50%{opacity:.62;box-shadow:0 0 2px 0 color-mix(in srgb,var(--ok) 14%,transparent);}}
/* stance stamp — replaces the old "Engine read · <date>" line */
.livestamp{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;color:var(--ink-ok, var(--ok));white-space:nowrap;}
[data-lang="zh"] .livestamp{letter-spacing:0;text-transform:none;}
/* Quote-state stamp. The pip and its label are painted from the QUOTE's own
   measured freshness, never from the build date — a nightly page used to print
   a pulsing green "Live" beside a price that was a day old. The green pulse is
   therefore reserved for `live`: a measured realtime row inside an open
   regular session. Every weaker state is a still, muted pip, so "current"
   can never be implied by decoration alone. */
.dq-stamp[data-dq-state]{color:var(--muted);}
.dq-stamp[data-dq-state] .live-dot{background:var(--muted);box-shadow:none;animation:none;}
.dq-stamp[data-dq-state="delayed"]{color:var(--warn);}
.dq-stamp[data-dq-state="delayed"] .live-dot{background:var(--warn);box-shadow:none;animation:none;}
.dq-stamp[data-dq-state="live"]{color:var(--ink-ok,var(--ok));}
.dq-stamp[data-dq-state="live"] .live-dot{background:var(--ok);
  box-shadow:0 0 7px 1px color-mix(in srgb,var(--ok) 60%,transparent);animation:v6lp 2.6s ease-in-out infinite;}
.wk52{margin-top:16px;}
.wk52 .lbls{display:flex;justify-content:space-between;gap:14px;font-size:10.5px;color:var(--muted);margin-bottom:5px;}
.wk52 .lbls b{color:var(--text);font-weight:650;}
.wk52 .track{position:relative;height:4px;border-radius:3px;background:var(--line);}
.wk52 .fill{position:absolute;top:0;bottom:0;left:0;border-radius:3px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--link) 40%,transparent),var(--link));}
.wk52 .dotp{position:absolute;top:50%;transform:translate(-50%,-50%);
  width:10px;height:10px;border-radius:50%;background:var(--text);box-shadow:0 0 0 3px color-mix(in srgb,var(--link) 35%,transparent);}
.stance-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:22px -30px 0;padding:13px 30px;
  border-top:1px solid var(--hair);background:color-mix(in srgb,var(--stance) 5%,transparent);}
.stance-big{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:750;padding:6px 14px;border-radius:10px;
  color:var(--stance);background:color-mix(in srgb,var(--stance) 13%,transparent);
  border:1px solid color-mix(in srgb,var(--stance) 32%,transparent);}
.stance-line{flex:1;min-width:260px;font-size:12.5px;color:var(--muted);line-height:1.5;}
.asof{font-size:11px;color:var(--muted);white-space:nowrap;}
@media(prefers-reduced-motion:no-preference){
  html.has-js .hi{opacity:0;transform:translateY(12px);animation:v6hin .6s cubic-bezier(.22,.9,.26,1.02) forwards;}
  html.has-js .hi2{animation-delay:.08s;}html.has-js .hi3{animation-delay:.16s;}html.has-js .hi4{animation-delay:.24s;}
  @keyframes v6hin{to{opacity:1;transform:none;}}
}

/* Company Intelligence — dynamic context plane, never a trading signal. */
.ci-mod{position:relative;margin-top:20px;padding:0;overflow:hidden;
  background:
    radial-gradient(900px 360px at 7% -34%,color-mix(in srgb,var(--link) 19%,transparent),transparent 58%),
    radial-gradient(560px 320px at 95% 8%,color-mix(in srgb,var(--info) 11%,transparent),transparent 66%),
    var(--glass-bg);}
.ci-mod::before{content:"";position:absolute;inset:0 0 auto;height:1px;pointer-events:none;
  background:linear-gradient(90deg,transparent,var(--link),color-mix(in srgb,var(--info) 65%,transparent),transparent);}
.ci-top{position:relative;display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:22px 26px 18px;border-bottom:1px solid var(--hair);}
.ci-kicker{display:flex;align-items:center;gap:8px;margin-bottom:5px;font-size:10px;font-weight:780;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-link, var(--link));}
.ci-orbit{position:relative;width:8px;height:8px;border-radius:50%;background:var(--link);box-shadow:0 0 0 4px color-mix(in srgb,var(--link) 11%,transparent);}
.ci-orbit::after{content:"";position:absolute;inset:-5px;border:1px solid color-mix(in srgb,var(--link) 36%,transparent);border-radius:50%;animation:ci-pulse 2.8s ease-out infinite;}
@keyframes ci-pulse{0%{transform:scale(.65);opacity:.8}70%,100%{transform:scale(1.55);opacity:0}}
.ci-top h2{margin:0;font-size:clamp(21px,2vw,27px);line-height:1.06;letter-spacing:-.035em;font-weight:780;}
.ci-top p{max-width:67ch;margin:8px 0 0;color:var(--muted);font-size:12.5px;line-height:1.55;}
.ci-mod{--ci-ok:#37c89a;--ci-caution:#e3a34b;}
[data-theme="light"] .ci-mod{--ci-ok:#126b51;--ci-caution:#8a5600;}
.ci-state{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;max-width:240px;padding:5px 10px;border-radius:999px;border:1px solid var(--gbtn-brd);background:var(--gbtn-bg);color:var(--muted);font-size:10.5px;font-weight:700;line-height:1.35;}
.ci-state::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;}
.ci-state.ready{color:var(--ci-ok);border-color:color-mix(in srgb,var(--ci-ok) 32%,transparent);background:color-mix(in srgb,var(--ci-ok) 9%,transparent);}
.ci-state.partial{color:var(--ci-caution);border-color:color-mix(in srgb,var(--ci-caution) 34%,transparent);background:color-mix(in srgb,var(--ci-caution) 10%,transparent);}
.ci-state.unavailable{color:var(--muted);}
.ci-loading[hidden],.ci-empty[hidden],#ci-content[hidden]{display:none!important;}
.ci-loading{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,.48fr);gap:18px;min-height:330px;padding:24px 26px 25px;}
.ci-skel{height:16px;border-radius:7px;background:linear-gradient(100deg,var(--gbtn-bg) 20%,color-mix(in srgb,var(--text) 7%,transparent) 48%,var(--gbtn-bg) 76%);background-size:220% 100%;animation:ci-shimmer 1.45s linear infinite;}
.ci-skel.big{height:86px}.ci-skel.med{width:72%;margin-top:12px}.ci-skel.sm{width:43%;margin-top:12px}
@keyframes ci-shimmer{to{background-position:-220% 0}}
.ci-empty{padding:25px 26px 27px;}
.ci-empty h3{margin:0 0 6px;font-size:16px}.ci-empty p{max-width:72ch;margin:0 0 15px;color:var(--muted);}
.ci-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(270px,.62fr);}
.ci-story{min-width:0;padding:24px 26px 22px;border-right:1px solid var(--hair);}
.ci-period{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;color:var(--muted);font-size:11px;font-weight:600;letter-spacing:.025em;}
.ci-period strong{color:var(--text);font-size:11.5px;}
.ci-period .ci-source-lang{display:inline-flex;padding:2px 7px;border:1px solid var(--hair);border-radius:999px;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;}
.ci-summary{max-width:840px;margin:0;font-size:clamp(18px,2.2vw,25px);line-height:1.28;letter-spacing:-.025em;font-weight:665;}
.ci-summary.is-empty{color:var(--muted);font-weight:560;}
.ci-lenses{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:20px;}
.ci-lens{position:relative;padding:14px 15px 15px;border:1px solid var(--hair);border-radius:13px;background:color-mix(in srgb,var(--panel2) 62%,transparent);min-width:0;}
.ci-lens::before{content:"";position:absolute;left:0;top:13px;bottom:13px;width:2px;border-radius:2px;background:var(--muted);}
.ci-lens.strength::before{background:var(--up)}.ci-lens.pressure::before{background:var(--warn)}
.ci-lens-label{display:flex;align-items:center;gap:7px;margin:0 0 7px;font-size:10px;font-weight:780;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);}
.ci-lens p{margin:0;color:var(--text);font-size:12.5px;line-height:1.55;}
.ci-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px;}
.ci-tag{padding:3px 8px;border:1px solid color-mix(in srgb,var(--link) 18%,var(--hair));border-radius:999px;background:color-mix(in srgb,var(--link) 6%,transparent);color:var(--muted);font-size:10px;font-weight:620;}
.ci-side{display:flex;flex-direction:column;min-width:0;padding:22px 22px 20px;background:color-mix(in srgb,var(--panel2) 38%,transparent);}
.ci-side-label{margin:0 0 10px;font-size:10px;font-weight:780;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);}
.ci-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;}
.ci-metric{min-height:76px;padding:10px 11px;border:1px solid var(--hair);border-radius:12px;background:color-mix(in srgb,var(--panel) 70%,transparent);}
.ci-metric span{display:block;color:var(--muted);font-size:10.5px;line-height:1.3;}
.ci-metric strong{display:block;margin-top:5px;font-size:19px;line-height:1;font-weight:760;font-variant-numeric:tabular-nums;}
.ci-metric small{display:block;margin-top:5px;color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums;}
.ci-metric small.up{color:var(--ink-up, var(--up))}.ci-metric small.down{color:var(--ink-down, var(--down))}
.ci-metric em{display:block;margin-top:5px;color:var(--muted);font:650 9px/1.2 var(--font-ui);font-style:normal;letter-spacing:.04em;text-transform:uppercase;}
.ci-next{margin-top:15px;padding-top:14px;border-top:1px solid var(--hair);}
.ci-next p{margin:0;color:var(--muted);font-size:11.5px;line-height:1.55;}
.ci-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:auto;padding-top:16px;}
.ci-actions .gbtn{justify-content:center;}
/* Company Intelligence action row — house .gbtn motion, nothing bespoke.
   The previous treatment defined its own ::after, which has the same
   specificity as .gbtn::after and lands later in the cascade, so it REPLACED
   the house sheen sweep with a static washed overlay at z-index:-1. It also
   left .gbtn:hover free to overwrite background and color, so hovering the
   primary swapped its gradient for grey glass and its dark ink for near-white.
   Both are gone: the buttons now take .gbtn / .gbtn-cta wholesale — the same
   sweep, lift and breathing halo as every other CTA on the site — and these
   rules only size them and lift the sweep to a strength that is actually
   visible against a tinted surface (the shared 13% white reads as nothing). */
.ci-upgrade{min-height:36px;padding:9px 15px;font-weight:770;color:#fff;border-color:rgba(255,255,255,.22);
  background:linear-gradient(112deg,#3b82f6,#6366f1 54%,#7c5cff);}
/* .gbtn:hover repaints background AND color, and it out-specifies a plain
   class — so a tinted button MUST restate both or it turns into grey glass
   with near-white ink on hover (which is what it used to do). */
.ci-upgrade:hover,.ci-upgrade:focus-visible{color:#fff;border-color:rgba(255,255,255,.4);
  background:linear-gradient(112deg,#4a8dff,#7076f5 54%,#8b6dff);}
/* Same house sweep, two inks: the secondaries sweep in the text colour so it
   reads in both themes, the tinted CTA sweeps in white because its surface is
   saturated blue in both. The shared 13% white is invisible on either. */
.ci-actions .gbtn:not(.ci-upgrade)::after{
  background:linear-gradient(105deg,transparent 38%,color-mix(in srgb,var(--text) 26%,transparent) 50%,transparent 62%);}
.ci-upgrade::after{background:linear-gradient(105deg,transparent 36%,rgba(255,255,255,.5) 50%,transparent 64%);}
.ci-history{display:flex;align-items:center;gap:10px;min-width:0;padding:13px 18px 14px;border-top:1px solid var(--hair);background:color-mix(in srgb,var(--bg) 14%,transparent);}
.ci-history-label{flex:0 0 auto;color:var(--muted);font-size:10px;font-weight:760;letter-spacing:.08em;text-transform:uppercase;}
.ci-history-tabs{display:flex;gap:6px;min-width:0;overflow-x:auto;scrollbar-width:none;}
.ci-history-tabs::-webkit-scrollbar{display:none;}
.ci-history-tab{appearance:none;min-height:34px;border:1px solid var(--hair);border-radius:9px;background:var(--gbtn-bg);color:var(--muted);padding:7px 10px;font:650 11px/1.2 var(--font-ui);white-space:nowrap;cursor:pointer;}
.ci-history-tab:hover,.ci-history-tab:focus-visible{color:var(--text);border-color:color-mix(in srgb,var(--link) 42%,var(--hair));outline:none;}
.ci-history-tab[aria-pressed="true"]{color:var(--ink-link, var(--link));background:color-mix(in srgb,var(--link) 10%,transparent);border-color:color-mix(in srgb,var(--link) 32%,transparent);}
.ci-receipt{margin-left:auto;flex:0 0 auto;color:var(--muted);font-size:10px;white-space:nowrap;}
.ci-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 22px 12px;border-top:1px solid var(--hair);color:var(--muted);font-size:11px;line-height:1.5;}
.ci-foot b{color:var(--text);font-weight:650;}.ci-foot .ci-note{margin-left:auto;text-align:right;}
.ci-sr{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important;}
[data-lang="zh"] .ci-kicker,[data-lang="zh"] .ci-lens-label,[data-lang="zh"] .ci-side-label,[data-lang="zh"] .ci-history-label,[data-lang="zh"] .ci-source-lang,[data-lang="zh"] .ci-metric em{letter-spacing:0;text-transform:none;}
/* Reduced motion: name the pseudo-elements explicitly — a bare element
   selector does not reach ::after. .live-dot keeps its resting glow, so
   stopping the pulse leaves a visible dot rather than a blank slot. */
@media(prefers-reduced-motion:reduce){.ci-orbit::after,.ci-skel,.live-dot{animation:none;}
  .fcard .fb[data-v]::after,.fcard .fb[data-v]:hover::after{transition:none;transform:translateX(-50%);}}
@media(max-width:900px){.ci-grid{grid-template-columns:1fr}.ci-story{border-right:0;border-bottom:1px solid var(--hair)}.ci-side{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,.65fr);gap:18px}.ci-actions{grid-column:1/-1;padding-top:0}.ci-next{margin-top:0;padding-top:0;border-top:0;border-left:1px solid var(--hair);padding-left:18px}}
@media(max-width:640px){.ci-top{padding:18px 16px 15px;gap:12px}.ci-top p{font-size:12px}.ci-state{max-width:152px;padding:5px 8px}.ci-loading{grid-template-columns:1fr;min-height:560px;padding:19px 16px}.ci-story{padding:19px 16px 17px}.ci-lenses{grid-template-columns:1fr}.ci-side{display:flex;padding:17px 16px}.ci-next{margin-top:14px;padding:13px 0 0;border-left:0;border-top:1px solid var(--hair)}.ci-actions{padding-top:15px}.ci-actions .ci-upgrade{width:100%;order:-1}.ci-history{align-items:flex-start;flex-wrap:wrap;padding:12px 16px}.ci-history-tabs{order:3;flex-basis:100%;padding-right:18px}.ci-receipt{margin-left:auto}.ci-foot{padding:10px 16px}.ci-foot .ci-note{margin-left:0;text-align:left}.ci-summary{font-size:18px}}
/* v2 glance row styles — Reported/Guidance/Watch/Coverage */
.ci-v2-rows{margin-top:12px;}
.ci-v2-section{font-size:10px;font-weight:780;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:14px 0 4px;padding-bottom:3px;border-bottom:1px solid var(--hair);}
.ci-v2-section:first-child{margin-top:0;}
.ci-v2-row{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1.4fr);gap:4px 12px;padding:5px 0;border-bottom:1px solid var(--hair);font-size:12.5px;align-items:baseline;}
.ci-v2-key{color:var(--muted);min-width:0;}
.ci-v2-val{font-weight:650;text-align:right;min-width:0;overflow-wrap:anywhere;}
/* In v2 mode: hide v1-specific composition areas via root data attribute */
#company-update[data-ci-mode="v2"] .ci-summary,
#company-update[data-ci-mode="v2"] .ci-lenses,
#company-update[data-ci-mode="v2"] .ci-next,
#company-update[data-ci-mode="v2"] #ci-history,
#company-update[data-ci-mode="v2"] #ci-tags,
#company-update[data-ci-mode="v2"] #ci-title,
#company-update[data-ci-mode="v2"] .ci-top > div > p,
#company-update[data-ci-mode="v2"] #ci-metrics-label,
#company-update[data-ci-mode="v2"] #ci-metrics{display:none!important;}
#company-update[data-ci-mode="v2"] #ci-v2-host{display:block;}
#company-update:not([data-ci-mode="v2"]) #ci-v2-host{display:none!important;}
#company-update[data-ci-mode="unavailable"] #ci-title,
#company-update[data-ci-mode="unavailable"] .ci-top > div > p{display:none!important;}
@media(max-width:390px){.ci-v2-row{grid-template-columns:minmax(0,1fr);}
  .ci-v2-val{text-align:left;font-weight:600;}}

/* chart module */
.chart-mod{margin-top:20px;padding:0;overflow:hidden;}
.chart-mod .mod-hd{padding:16px 24px 12px;margin:0;border-bottom:1px solid var(--hair);}
.chart-frame{position:relative;height:clamp(360px,42vw,520px);background:color-mix(in srgb,#0b0d11 40%,transparent);}
[data-theme="light"] .chart-frame{background:color-mix(in srgb,var(--panel2) 55%,transparent);}
.chart-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;opacity:0;transition:opacity .45s ease;}
.chart-frame.loaded iframe{opacity:1;}
.chart-skel{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:12px;overflow:hidden;}
.chart-skel::before{content:"";position:absolute;inset:0;
  background:linear-gradient(100deg,transparent 30%,color-mix(in srgb,var(--text) 4%,transparent) 50%,transparent 70%);
  transform:translateX(-100%);animation:v6sk 1.6s ease-in-out infinite;}
@media(prefers-reduced-motion:reduce){.chart-skel::before{animation:none;}}
@keyframes v6sk{to{transform:translateX(100%);}}
.chart-frame.loaded .chart-skel,.chart-frame.failed .chart-skel{display:none;}
.chart-fallback{position:absolute;inset:0;display:none;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--muted);font-size:13px;text-align:center;padding:20px;}
.chart-frame.failed .chart-fallback{display:flex;}
.chart-ft{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:10px 24px 14px;border-top:1px solid var(--hair);}
.powered{margin-left:auto;display:inline-flex;align-items:center;gap:7px;font-size:11.5px;font-weight:650;color:var(--muted);}
.powered:hover{color:var(--ink-link, var(--link));}
.powered .bolt{width:16px;height:16px;border-radius:5px;display:inline-flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--link),var(--info));color:#0f1115;font-size:10px;font-weight:900;}

/* ══ SECURITY STATE — the Decision Spine ═══════════════════════════════════
   Eight panels on one listing, each carrying its own coverage state.
   The composition decisions, written down because they are choices:

   · ONE grid holding five axis cells, not five floating panels. The job is "one
     coherent answer you can audit"; five independent cards read as five
     independent widgets. The cell is the .ci-lens idiom (panel2 tint, hairline,
     left rail) widened to a three-column grid — house idiom extended, not a
     second card system. Nesting depth stays 2.
   · The LEFT RAIL is the signature, and its SHAPE is the state class, not just
     its hue: solid = covered · dashed = interrupted (stale/partial/corrected) ·
     hairline = absent (unavailable/not covered/not applicable/rights blocked) ·
     split = contradicted. Hue is never the only channel, so the grid survives
     zh, light mode and colour blindness. The chip dot repeats the same four
     shapes at glyph scale, and the tally ticks below the grid repeat them
     again — the strip is literally the grid's legend.
   · Absence is GREY. Only a contradiction between sources earns --act. An
     unavailable owner painted red would be a finding nobody made.
   · Ink marks epistemic status, never content: a covered card's answer prints
     in --text, a degraded card's headline prints in its state ink.
   · No composite. No total row, no score, no average, anywhere.               */
.ss-t-ok  {--ss-c:var(--ok);  --ss-ink:var(--ink-ok,  var(--ok));}
.ss-t-warn{--ss-c:var(--warn);--ss-ink:var(--ink-warn,var(--warn));}
.ss-t-act {--ss-c:var(--act); --ss-ink:var(--ink-act, var(--act));}
.ss-t-off {--ss-c:var(--muted);--ss-ink:var(--muted);}
.ss-tone-ink{color:var(--ss-ink);}

.ss-mod{margin-top:20px;}
.ss-sub{margin:-4px 0 15px;max-width:76ch;font-size:12.5px;line-height:1.55;color:var(--muted);}
.ss-mod > .ss-cell{margin-bottom:12px;}
.ss-mod > .ss-cell:last-child{margin-top:16px;margin-bottom:0;}
.ss-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;}
.ss-cell{position:relative;display:flex;flex-direction:column;min-width:0;
  padding:14px 15px 12px 17px;border:1px solid var(--hair);border-radius:13px;
  background:color-mix(in srgb,var(--panel2) 62%,transparent);}
.ss-cell::before{content:"";position:absolute;left:0;top:14px;bottom:14px;width:3px;border-radius:3px;}
.ss-r-solid::before {background:var(--ss-c);}
.ss-r-dash::before  {background:repeating-linear-gradient(180deg,var(--ss-c) 0 11px,transparent 11px 17px);}
.ss-r-hollow::before{left:1px;width:1px;background:color-mix(in srgb,var(--ss-c) 85%,transparent);}
.ss-r-split::before {background:linear-gradient(180deg,var(--warn) 0 50%,var(--act) 50% 100%);}

.ss-axis{display:flex;align-items:center;gap:9px;margin:0 0 9px;min-width:0;
  font-size:10px;font-weight:780;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);}
.ss-axis>span:first-child{min-width:0;overflow-wrap:anywhere;}
.ss-chip{display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;margin-left:auto;
  padding:2px 8px;border-radius:999px;font-size:9.5px;font-weight:720;letter-spacing:.01em;text-transform:none;
  color:var(--ss-ink);background:color-mix(in srgb,var(--ss-c) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--ss-c) 30%,transparent);}
/* the chip dot is the rail vocabulary at glyph scale */
.ss-chip::before{content:"";flex:0 0 auto;width:5px;height:5px;border-radius:50%;background:var(--ss-c);}
.ss-r-dash   .ss-chip::before{width:7px;height:2px;border-radius:1px;}
.ss-r-hollow .ss-chip::before{background:transparent;box-shadow:inset 0 0 0 1px var(--ss-c);}
.ss-r-split  .ss-chip::before{border-radius:1px;background:linear-gradient(90deg,var(--warn) 0 50%,var(--act) 50% 100%);}

.ss-head{margin:0;font-size:14.5px;font-weight:700;line-height:1.32;letter-spacing:-.012em;
  color:var(--text);overflow-wrap:anywhere;}
.ss-cell:not(.is-ok) .ss-head{color:var(--ss-ink);}
.ss-body{margin:7px 0 0;font-size:12.5px;line-height:1.55;color:var(--text);overflow-wrap:anywhere;}
.ss-why{margin:6px 0 0;font-size:11.5px;line-height:1.5;color:var(--muted);overflow-wrap:anywhere;}
.ss-note{margin:10px 0 0;padding-top:10px;border-top:1px solid var(--hair);
  font-size:11.5px;line-height:1.5;color:var(--muted);min-width:0;}
.ss-note b{display:block;margin-bottom:4px;font-size:9.5px;font-weight:780;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);}
.ss-note .v{color:var(--text);font-weight:600;overflow-wrap:anywhere;}
.ss-list{list-style:none;margin:0;padding:0;}
.ss-list li{position:relative;padding:2px 0 2px 13px;color:var(--text);overflow-wrap:anywhere;}
.ss-list li::before{content:"";position:absolute;left:1px;top:10px;width:5px;height:1px;background:var(--muted);}
.ss-more{display:block;margin-top:4px;}

.ss-foot{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;width:100%;margin-top:auto;
  padding:11px 0 0;border:0;border-top:1px solid var(--hair);background:none;text-align:left;
  appearance:none;cursor:pointer;font:inherit;color:inherit;transition:color .16s ease;}
.ss-foot .ss-clock{font-size:10.5px;line-height:1.4;color:var(--muted);font-variant-numeric:tabular-nums;
  min-width:0;overflow-wrap:anywhere;}
.ss-foot .ss-go{margin-left:auto;flex:0 0 auto;font-size:10.5px;font-weight:700;color:var(--muted);white-space:nowrap;}
.ss-foot .ss-go::after{content:" \2192";}
.ss-foot:hover .ss-go,.ss-foot:focus-visible .ss-go{color:var(--ink-link, var(--link));}
.ss-foot:focus-visible{outline:2px solid color-mix(in srgb,var(--link) 72%,transparent);outline-offset:3px;border-radius:4px;}

/* the one flag: identity that is not proven, or a read that could not be built.
   It names what failed AND what still works — never a bare degraded panel. */
.ss-flag{display:block;margin:0 0 14px;padding:11px 14px;border-radius:11px;
  border:1px solid color-mix(in srgb,var(--ss-c) 26%,var(--hair));border-left:3px solid var(--ss-c);
  background:color-mix(in srgb,var(--ss-c) 7%,transparent);font-size:12px;line-height:1.55;color:var(--text);}
.ss-flag b{display:block;margin-bottom:3px;font-size:11.5px;font-weight:750;color:var(--ss-ink);}

/* evidence strip — the grid's legend and its one panel-level as-of */
.ss-ev{display:flex;align-items:center;gap:10px 16px;flex-wrap:wrap;margin-top:16px;padding-top:13px;
  border-top:1px solid var(--hair);}
.ss-ev-label{flex:0 0 auto;font-size:10px;font-weight:780;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);}
.ss-tally{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap;min-width:0;font-size:11.5px;color:var(--muted);}
.ss-tally>span{display:inline-flex;align-items:center;gap:6px;min-width:0;}
.ss-tally b{color:var(--text);font-weight:700;font-variant-numeric:tabular-nums;}
.ss-tick{flex:0 0 auto;width:3px;height:12px;border-radius:2px;background:var(--ss-c);}
.ss-tick.ss-r-dash  {background:repeating-linear-gradient(180deg,var(--ss-c) 0 3px,transparent 3px 6px);}
.ss-tick.ss-r-hollow{width:1px;background:color-mix(in srgb,var(--ss-c) 85%,transparent);}
.ss-tick.ss-r-split {background:linear-gradient(180deg,var(--warn) 0 50%,var(--act) 50% 100%);}
.ss-ev .gbtn{margin-left:auto;flex:0 0 auto;}

/* hero chip — additive, one element, jumps to the section it summarises */
.ss-hchip{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;padding:4px 11px;border-radius:999px;
  font-size:10.5px;font-weight:700;line-height:1.35;white-space:nowrap;color:var(--ss-ink);
  background:color-mix(in srgb,var(--ss-c) 11%,transparent);
  border:1px solid color-mix(in srgb,var(--ss-c) 28%,transparent);transition:border-color .16s ease;}
.ss-hchip::before{content:"";flex:0 0 auto;width:5px;height:5px;border-radius:50%;background:var(--ss-c);}
.ss-hchip:hover{border-color:color-mix(in srgb,var(--ss-c) 54%,transparent);}
.ss-hchip:focus-visible{outline:2px solid color-mix(in srgb,var(--link) 72%,transparent);outline-offset:2px;}

/* drilldown internals — reuse .dpanel/.dkv/.dnotes; mono is for the machine
   identifiers only (owner object ids, recipe id, gate codes), never for words */
.ss-dp{margin:0 0 8px;font-size:13px;line-height:1.6;}
.ss-dp:last-child{margin-bottom:0;}
.ss-dp.mut{font-size:12.5px;color:var(--muted);}
.ss-id{font-family:var(--font-mono);font-size:11px;letter-spacing:0;overflow-wrap:anywhere;}
.ss-gate{padding:9px 0;border-bottom:1px solid var(--hair);}
.ss-gate:last-child{border-bottom:0;}
.ss-gate .g{font-size:12.5px;font-weight:650;line-height:1.45;}
.ss-gate .c{display:block;margin-top:3px;color:var(--muted);}
.ss-gate .w{display:block;margin-top:4px;font-size:11.5px;line-height:1.5;color:var(--muted);}
.ss-gate .w em{font-style:normal;font-weight:650;color:var(--text);}
.ss-receipt{margin-top:8px;font-size:11.5px;line-height:1.55;color:var(--muted);}

/* ── the provenance register ──────────────────────────────────────────────
   Two kinds of line live in this panel: values quoted from an owner, and
   values worked out here from those quotes. Quoting is the majority and the
   default, so the QUOTED lines carry no mark at all and the worked-out ones
   carry this tag — mark the exception, not the rule, or the mark stops
   meaning anything. It is a tag, not a badge: hairline, muted, no hue, so it
   never competes with the state rail for attention.                        */
.ss-prov{display:inline-flex;align-items:center;flex:0 0 auto;margin-left:8px;padding:1px 6px;
  border:1px solid var(--hair);border-radius:5px;vertical-align:middle;
  font-size:9px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  line-height:1.6;white-space:nowrap;color:var(--muted);}
.dpanel h3 .ss-prov{position:relative;top:-1px;}

/* estimated timing — an estimate that could be mistaken for a diary entry is
   the failure mode this element exists to prevent, so the qualifier sits on
   its own line under the window rather than in a tooltip. */
.ss-est{display:block;margin-top:2px;font-size:10.5px;line-height:1.45;color:var(--ink-warn,var(--warn));}
.ss-when{font-variant-numeric:tabular-nums;}

/* nested owner reads inside one leg (opportunity context) */
.ss-subs{display:flex;flex-direction:column;gap:4px;}
.ss-sub-r{display:flex;align-items:baseline;gap:8px;min-width:0;}
.ss-sub-r>.n{min-width:0;overflow-wrap:anywhere;color:var(--text);}
.ss-sub-r>.s{margin-left:auto;flex:0 0 auto;font-size:10.5px;font-weight:650;color:var(--ss-ink);}
.ss-sub-r>.s::before{content:"";display:inline-block;width:5px;height:5px;margin-right:5px;
  border-radius:50%;background:var(--ss-c);vertical-align:middle;}
.ss-sub-r.ss-r-hollow>.s::before{background:transparent;box-shadow:inset 0 0 0 1px var(--ss-c);}
.ss-sub-r.ss-r-dash>.s::before{width:7px;height:2px;border-radius:1px;}

/* identity receipt rows — R1…R9, one block each, in the .ss-gate family */
.ss-chk{padding:11px 0;border-bottom:1px solid var(--hair);}
.ss-chk:last-child{border-bottom:0;}
.ss-chk-h{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;}
.ss-chk-h .r{font-family:var(--font-mono);font-size:11.5px;font-weight:700;color:var(--text);}
.ss-chk-h .v{font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ss-ink);}
.ss-chk-h .v::before{content:"";display:inline-block;width:5px;height:5px;margin-right:5px;
  border-radius:50%;background:var(--ss-c);vertical-align:middle;}
.ss-chk-h .c{margin-left:auto;color:var(--muted);}
.ss-chk-d{margin:4px 0 0;font-size:12px;line-height:1.5;color:var(--text);overflow-wrap:anywhere;}
.ss-chk-s{margin:4px 0 0;font-size:10.5px;line-height:1.5;color:var(--muted);overflow-wrap:anywhere;}
.ss-chk-v{display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px 10px;margin-top:6px;}
.ss-chk-v dt,.ss-chk-v dd{margin:0;font-family:var(--font-mono);font-size:10.5px;line-height:1.55;
  overflow-wrap:anywhere;}
.ss-chk-v dt{color:var(--muted);}
.ss-chk-v dd{color:var(--text);}

[data-lang="zh"] :is(.ss-axis,.ss-ev-label,.ss-note b,.ss-prov,.ss-chk-h .v){letter-spacing:0;text-transform:none;}

/* Light is designed, not translated: a 10% mix of a hue with `transparent`
   sits on white glass and disappears, so light tints mix with #fff instead,
   and the hairline rail is given more ink to stay ≥3:1 on white. */
[data-theme="light"] .ss-cell{background:var(--panel2);}
[data-theme="light"] .ss-chip{background:color-mix(in srgb,var(--ss-c) 13%,#fff);
  border-color:color-mix(in srgb,var(--ss-c) 42%,transparent);}
[data-theme="light"] .ss-flag{background:color-mix(in srgb,var(--ss-c) 9%,#fff);}
[data-theme="light"] .ss-hchip{background:color-mix(in srgb,var(--ss-c) 12%,#fff);
  border-color:color-mix(in srgb,var(--ss-c) 40%,transparent);}
[data-theme="light"] :is(.ss-r-hollow::before,.ss-tick.ss-r-hollow){background:var(--ss-c);}

@media(max-width:1023px){.ss-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:640px){
  .ss-mod{padding:18px 16px 18px;}
  .ss-grid{grid-template-columns:minmax(0,1fr);gap:10px;}
  .ss-cell{padding:13px 14px 11px 16px;}
  .ss-sub{margin:-2px 0 14px;font-size:12px;}
  .ss-foot{padding-top:14px;padding-bottom:2px;min-height:40px;}
  .ss-ev .gbtn{width:100%;justify-content:center;margin-left:0;min-height:40px;}
}

/* two-column zone */
.cols{display:grid;grid-template-columns:minmax(0,1fr) 322px;gap:20px;margin-top:20px;align-items:start;}
.main-col,.rail-col{display:flex;flex-direction:column;gap:20px;min-width:0;}

/* ladder */
.lrow{position:relative;display:grid;grid-template-columns:84px 18px minmax(0,1fr) auto;gap:0 10px;align-items:center;
  padding:9px 6px;border-radius:12px;transition:background .18s;}
.lrow:hover{background:color-mix(in srgb,var(--panel2) 55%,transparent);}
.lrow .lpx{font-size:13.5px;font-weight:700;text-align:right;}
.lrow .lnode{position:relative;display:flex;align-items:center;justify-content:center;height:100%;}
.lrow .lnode::before{content:"";position:absolute;top:-10px;bottom:-10px;width:2px;background:var(--hair);}
.lrow:first-child .lnode::before{top:50%;}
.lrow.llast .lnode::before{bottom:50%;}
.ldot{position:relative;z-index:1;width:9px;height:9px;border-radius:50%;background:var(--muted);box-shadow:0 0 0 3px var(--panel);}
.ldot.wall{background:transparent;border:2px solid var(--muted);width:8px;height:8px;}
.ldot.chase{background:var(--warn);}
.ldot.buy{background:var(--up);}
.ldot.stop{background:var(--down);}
.lrow .lk{font-size:12.5px;font-weight:600;line-height:1.25;}
.lrow .lk small{display:block;font-size:11px;font-weight:500;color:var(--muted);margin-top:1px;}
.lrow .ld{font-size:11.5px;font-weight:650;color:var(--muted);}
.lrow.now{background:color-mix(in srgb,var(--stance) 8%,var(--panel2));
  border:1px solid color-mix(in srgb,var(--stance) 26%,transparent);box-shadow:0 8px 22px -12px rgba(3,7,18,.8);
  margin:3px -2px;padding:11px 8px;}
.lrow.now .lpx{font-size:15px;color:var(--text);}
.lrow.now .ldot{background:var(--stance);box-shadow:0 0 0 3px var(--panel),0 0 10px color-mix(in srgb,var(--stance) 60%,transparent);}
.lband{position:relative;margin:2px 0 2px 102px;padding:7px 12px;border-radius:10px;
  background:color-mix(in srgb,var(--up) 8%,transparent);border:1px dashed color-mix(in srgb,var(--up) 35%,transparent);
  font-size:11.5px;color:var(--ink-up, var(--up));font-weight:600;line-height:1.4;}

/* key-value rows */
.kv6 .r6{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:7px 0;border-bottom:1px solid var(--hair);font-size:12.5px;}
.kv6 .r6:last-child{border-bottom:0;}
.kv6 .k6{color:var(--muted);}
.kv6 .v6{font-weight:650;text-align:right;}

/* technicals */
.trow{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--hair);font-size:12.5px;flex-wrap:wrap;}
.trow:last-child{border-bottom:0;}
.trow .tk{color:var(--muted);flex:0 0 130px;}
.trow .tv6{font-weight:650;}
.minitrack{position:relative;flex:1;max-width:150px;min-width:90px;height:5px;border-radius:3px;background:var(--line);}
.minitrack .zone{position:absolute;top:0;bottom:0;left:30%;right:30%;background:color-mix(in srgb,var(--muted) 22%,transparent);border-radius:3px;}
.minitrack .mk{position:absolute;top:50%;transform:translate(-50%,-50%);width:2.5px;height:13px;border-radius:2px;background:var(--warn);}
.okx{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;}
.okx.y{color:var(--ink-up, var(--up));background:color-mix(in srgb,var(--up) 12%,transparent);}
.okx.n{color:var(--ink-down, var(--down));background:color-mix(in srgb,var(--down) 12%,transparent);}
.okx.w{color:var(--ink-warn, var(--warn));background:color-mix(in srgb,var(--warn) 12%,transparent);}
.okx.q{color:var(--muted);background:color-mix(in srgb,var(--muted) 12%,transparent);}
.sigchips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px;}

/* earnings */
.earn-top{display:grid;grid-template-columns:auto minmax(0,1fr);gap:20px;align-items:center;}
/* Countdown ring. "DAYS TO GO" is 10 uppercase characters — it does not fit
   inside a 78px inner disc, and used to sit on the ring stroke. The ring now
   holds the number alone (which can therefore be bigger) and the label sits
   under it, outside the circle. */
.cring-wrap{display:flex;flex-direction:column;align-items:center;gap:9px;flex-shrink:0;}
.cring-lbl{font-size:10px;font-weight:680;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);white-space:nowrap;}
[data-lang="zh"] .cring-lbl{letter-spacing:0;text-transform:none;font-size:11px;}
.cring{position:relative;width:92px;height:92px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;
  background:conic-gradient(var(--link) calc(var(--p)*1%),color-mix(in srgb,var(--line) 60%,transparent) 0);}
.cring::before{content:"";position:absolute;inset:7px;border-radius:50%;background:var(--panel);}
.cring .cd{position:relative;text-align:center;line-height:1.05;}
.cring .cd b{font-size:31px;font-weight:800;letter-spacing:-.03em;}
/* Surprise bars. The old fixed 78px height was smaller than the column it
   contained (a 56px bar plus two label lines is ~89px), and because the row
   bottom-aligns, the overflow went UPWARD — the tallest bar drew straight over
   the post-earnings-drift line above it. No fixed height: the row grows to fit
   its tallest bar, and bottom-alignment still puts every bar on one baseline. */
.sbars{display:flex;align-items:flex-end;gap:10px;margin-top:15px;}
.sbar{flex:1;max-width:64px;display:flex;flex-direction:column;align-items:center;gap:5px;}
.sbar i{width:100%;max-width:44px;border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,var(--up),color-mix(in srgb,var(--up) 45%,transparent));}
.sbar i.m{background:linear-gradient(180deg,var(--down),color-mix(in srgb,var(--down) 45%,transparent));}
.sbar b{font-size:11px;font-weight:700;}
.sbar span{font-size:10px;color:var(--muted);}

/* tables */
.vt-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -2px;padding:0 2px;}
.vt{width:100%;border-collapse:collapse;font-size:12.5px;}
.vt th{font-size:10.5px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;text-align:left;padding:2px 8px 8px;border-bottom:1px solid var(--hair);}
.vt td{padding:8px;border-bottom:1px solid var(--hair);}
.vt tr:last-child td{border-bottom:0;}
.vt td:nth-child(n+2){text-align:right;}
.vt td.b{font-weight:700;}
.cheapbar{display:inline-flex;align-items:center;gap:8px;justify-content:flex-end;}
.cheapbar .cb{width:74px;height:5px;border-radius:3px;background:var(--line);overflow:hidden;}
.cheapbar .cb i{display:block;height:100%;border-radius:3px;}

/* financials */
/* Financial history cards. Six per-bar value labels at 8.5px never fit a
   third-width card: they overlapped each other AND punched up through the
   card's own eyebrow, because .fbars was 70px tall while the column inside it
   (label + 50px bar + year) needed ~79px and the row bottom-aligns. The card
   now leads with the figure that actually carries the story — the latest year,
   at a readable size — and the bars became the shape of the trend. Per-year
   numbers are still there, one hover away, which is where six of them belong. */
.fin3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
.fcard{background:color-mix(in srgb,var(--panel2) 55%,transparent);border:1px solid var(--hair);border-radius:13px;padding:13px 14px;min-width:0;}
.fcard .fhd{display:flex;align-items:baseline;justify-content:space-between;gap:9px;min-width:0;}
.fcard .ft{min-width:0;font-size:10.5px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
[data-lang="zh"] .fcard .ft{letter-spacing:0;text-transform:none;font-size:11.5px;}
.fcard .flast{flex:0 0 auto;display:inline-flex;align-items:baseline;gap:5px;}
.fcard .flast b{font-size:15.5px;font-weight:750;letter-spacing:-.02em;font-variant-numeric:tabular-nums;}
.fcard .flast em{font-style:normal;font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums;}
.fcard .fbars{display:flex;align-items:flex-end;gap:5px;height:54px;margin-top:13px;}
.fcard .fb{position:relative;flex:1;min-width:0;display:flex;align-items:flex-end;}
.fcard .fb i{display:block;width:100%;border-radius:4px 4px 2px 2px;background:linear-gradient(180deg,var(--link),color-mix(in srgb,var(--link) 35%,transparent));}
.fcard .fb i.dn6{background:linear-gradient(180deg,var(--down),color-mix(in srgb,var(--down) 35%,transparent));}
.fcard .fb[data-v]::after{content:attr(data-y) " · " attr(data-v);position:absolute;left:50%;bottom:calc(100% + 7px);
  transform:translateX(-50%) translateY(3px);padding:3px 8px;border-radius:8px;
  background:var(--panel);border:1px solid var(--gbtn-brd);box-shadow:0 6px 18px -10px rgba(3,7,18,.7);
  font:650 10.5px/1 var(--font-ui);color:var(--text);white-space:nowrap;font-variant-numeric:tabular-nums;
  opacity:0;pointer-events:none;z-index:3;transition:opacity .16s ease,transform .16s ease;}
.fcard .fb[data-v]:hover::after{opacity:1;transform:translateX(-50%) translateY(0);}
.fcard .fspan{display:flex;justify-content:space-between;gap:8px;margin-top:8px;font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums;}
.fcard .fcagr{margin-top:9px;padding-top:9px;border-top:1px solid var(--hair);font-size:11px;color:var(--muted);}
.fcard .fcagr b{color:var(--text);}
.mrow{display:flex;align-items:center;gap:10px;padding:5px 0;font-size:12px;}
.mrow .mk{color:var(--muted);flex:0 0 130px;}
.mrow .mtr{flex:1;height:5px;border-radius:3px;background:var(--line);overflow:hidden;}
.mrow .mtr i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,color-mix(in srgb,var(--link) 50%,transparent),var(--link));}
.mrow .mv{width:52px;text-align:right;font-weight:650;font-size:12px;}
.hchips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;}
.pio{display:inline-flex;align-items:center;gap:2.5px;padding:5px 10px;border-radius:9px;background:var(--gbtn-bg);border:1px solid var(--gbtn-brd);}
.pio b{font-size:11px;margin-right:5px;}
.pio i{width:9px;height:5px;border-radius:1.5px;background:var(--line);}
.pio i.on6{background:var(--up);}
.kv2{display:grid;grid-template-columns:1fr 1fr;gap:4px 26px;margin-top:14px;}
.kv2 .r6{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:6px 0;border-bottom:1px solid var(--hair);font-size:12.5px;}
.kv2 .k6{color:var(--muted);}
.kv2 .v6{font-weight:650;text-align:right;}
.kv2 h4{grid-column:1/-1;margin:6px 0 2px;font-size:11px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;}

/* why moving */
.why .wr{display:flex;gap:12px;align-items:flex-start;padding:8px 10px;border-radius:11px;font-size:12.5px;margin:2px -10px;}
.why .wr.wr-on{background:color-mix(in srgb,var(--up) 6%,transparent);}
.why .wd{width:8px;height:8px;border-radius:50%;background:var(--line);flex-shrink:0;margin-top:5px;}
.why .wr.wr-on .wd{background:var(--up);box-shadow:0 0 8px color-mix(in srgb,var(--up) 55%,transparent);}
.why .wc{flex:0 0 90px;color:var(--muted);font-size:11.5px;padding-top:1px;}
.why .wl{flex:1;line-height:1.5;min-width:200px;}

/* options tiles */
.otiles{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
.otile{background:color-mix(in srgb,var(--panel2) 55%,transparent);border:1px solid var(--hair);border-radius:12px;padding:11px 13px;min-width:0;}
.otile .ok6{font-size:10.5px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;}
.otile .ov{font-size:16.5px;font-weight:720;margin-top:4px;}
.otile .ob{position:relative;height:4px;border-radius:3px;background:var(--line);margin-top:8px;overflow:hidden;}
.otile .ob i{position:absolute;top:0;bottom:0;left:0;background:linear-gradient(90deg,color-mix(in srgb,var(--warn) 50%,transparent),var(--warn));border-radius:3px;}

/* holders */
.gchip{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:7px;font-size:11px;font-weight:800;background:var(--panel2);color:var(--muted);}
.gchip.A{background:color-mix(in srgb,var(--up) 16%,transparent);color:var(--ink-up, var(--up));}
.gchip.B{background:color-mix(in srgb,var(--warn) 16%,transparent);color:var(--ink-warn, var(--warn));}

/* timeline */
.tl{position:relative;padding-left:20px;}
.tl::before{content:"";position:absolute;left:5px;top:8px;bottom:8px;width:2px;background:var(--hair);}
.tev{position:relative;padding:7px 0 7px 6px;}
.tev::before{content:"";position:absolute;left:-19px;top:13px;width:8px;height:8px;border-radius:50%;background:var(--muted);box-shadow:0 0 0 3px var(--panel);}
.tev.up::before{background:var(--up);}
.tev.down::before{background:var(--down);}
.tev.caution::before{background:var(--warn);}
.tev .td{font-size:11px;color:var(--muted);font-weight:600;}
.tev .th{font-size:12.5px;font-weight:600;margin-top:1px;}
.tev .tx{font-size:11.5px;color:var(--muted);margin-top:1px;line-height:1.45;}
.pinned6{background:color-mix(in srgb,var(--warn) 7%,transparent);border:1px solid color-mix(in srgb,var(--warn) 26%,transparent);
  border-radius:12px;padding:11px 14px;margin-bottom:12px;font-size:12.5px;}
.pinned6 .ph{display:block;font-weight:700;}
.pinned6 .pd{color:var(--muted);font-size:11.5px;}

/* style DNA + watch items */
.dna .dr{display:flex;align-items:center;gap:12px;padding:6px 0;font-size:12.5px;}
.dna .dk{flex:0 0 118px;color:var(--muted);}
.dna .dtr{position:relative;flex:1;height:6px;border-radius:4px;background:var(--line);}
.dna .dtr::before{content:"";position:absolute;left:50%;top:-3px;bottom:-3px;width:1.5px;background:color-mix(in srgb,var(--muted) 45%,transparent);}
.dna .dtr i{position:absolute;top:0;bottom:0;border-radius:4px;}
.dna .dtr i.p{left:50%;background:linear-gradient(90deg,color-mix(in srgb,var(--up) 45%,transparent),var(--up));}
.dna .dtr i.n{right:50%;background:linear-gradient(270deg,color-mix(in srgb,var(--down) 45%,transparent),var(--down));}
.dna .dw{flex:0 0 96px;text-align:right;font-size:11.5px;font-weight:650;}
.watch{list-style:none;padding:0;margin:8px 0 0;}
.watch li{margin:5px 0;font-size:12.5px;color:var(--muted);line-height:1.5;padding-left:18px;position:relative;}
.watch li::before{content:"⚠";position:absolute;left:0;font-size:11px;color:var(--ink-warn, var(--warn));}
.subhd{font-size:11px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:14px 0 6px;}

/* seasonality */
.seas{display:grid;grid-template-columns:repeat(6,1fr);gap:5px;}
.seas .sc{aspect-ratio:1.25/1;border-radius:9px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:var(--panel2);font-size:11px;font-weight:700;}
.seas .sc span{font-size:9px;font-weight:600;color:var(--muted);}
.seas .sc.cur{outline:2px solid var(--link);outline-offset:1px;}

/* news / themes / peers */
.nrow{padding:9px 0;border-bottom:1px solid var(--hair);font-size:12.5px;line-height:1.45;}
.nrow:last-child{border-bottom:0;}
.nrow a{font-weight:550;}
.nrow a:hover{color:var(--ink-link, var(--link));}
.nrow .nm{display:block;font-size:11px;color:var(--muted);margin-top:2px;}
.throw{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--hair);font-size:12.5px;flex-wrap:wrap;}
.throw:last-child{border-bottom:0;}
.throw a{font-weight:650;color:var(--ink-link, var(--link));}
.throw a:hover{text-decoration:underline;}
.throw .tm{flex:1;color:var(--muted);font-size:11.5px;min-width:120px;}
.peers{display:grid;grid-template-columns:repeat(2,1fr);gap:9px;}
.pcard{background:color-mix(in srgb,var(--panel2) 55%,transparent);border:1px solid var(--hair);border-radius:12px;padding:10px 12px;min-width:0;
  transition:transform .16s,border-color .16s,background .16s;}
.pcard:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--link) 40%,var(--hair));background:color-mix(in srgb,var(--panel2) 80%,transparent);}
.pcard b{font-size:13.5px;font-weight:750;color:var(--ink-link, var(--link));}
.pcard span{display:block;font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pcard small{display:block;font-size:10.5px;color:var(--muted);margin-top:3px;}
/* Peers come from factors.json, a WIDER universe than the pages we render, so a
   real same-sector name can have no dossier to open. It keeps its card — the
   name and the market cap are the point of the grid — but must not advertise a
   click it cannot honour: no link colour, no hover lift, no pointer. */
.pcard-off{cursor:default;}
.pcard-off:hover{transform:none;border-color:var(--hair);background:color-mix(in srgb,var(--panel2) 55%,transparent);}
.pcard-off b{color:var(--text);}

/* rail CTA + band */
.railcta{background:linear-gradient(150deg,color-mix(in srgb,var(--link) 14%,var(--panel)),color-mix(in srgb,var(--info) 7%,var(--panel)));
  border:1px solid color-mix(in srgb,var(--link) 30%,transparent);}
.railcta h3{margin:0 0 6px;font-size:14.5px;font-weight:750;}
.railcta p{margin:0 0 14px;font-size:12px;color:var(--muted);line-height:1.55;}
.cta-band{margin-top:26px;padding:30px 34px;display:flex;align-items:center;gap:26px;flex-wrap:wrap;
  background:linear-gradient(120deg,color-mix(in srgb,var(--link) 12%,var(--panel)) 0%,var(--glass-bg) 60%);
  border:1px solid color-mix(in srgb,var(--link) 26%,var(--glass-brd));}
.cta-band .cc{flex:1;min-width:250px;}
.cta-band h2{margin:0 0 6px;font-size:19px;font-weight:800;letter-spacing:-.02em;}
.cta-band p{margin:0;font-size:12.5px;color:var(--muted);line-height:1.55;}
.brief-list{margin:4px 0 0;padding-left:18px;}
.brief-list li{margin:3px 0;font-size:12.5px;line-height:1.5;}

/* footer */
.site-footer6{margin-top:34px;padding-top:18px;border-top:1px solid var(--hair);color:var(--muted);font-size:11.5px;line-height:1.7;}
.site-footer6 a{color:var(--ink-link, var(--link));}
.site-footer6 a:hover{text-decoration:underline;}


/* ── popup dashboards (dsr-dlg — macro.html mx5 mechanics) ── */
html.dsr-dlg-lock{overflow:hidden;}
html.dsr-dlg-lock .strip{visibility:hidden;}
html.dsr-dlg-lock body{overflow:hidden;position:fixed;width:100%;}
.dsr-dlg{display:none;position:fixed;inset:0;z-index:300;align-items:center;justify-content:center;}
.dsr-dlg.open{display:flex;}
.dsr-dlg-backdrop{position:absolute;inset:0;background:rgba(3,6,10,.58);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);}
.dsr-dlg-panel{position:relative;z-index:1;max-width:880px;width:calc(100% - 48px);max-height:84vh;
  background:color-mix(in srgb,var(--panel) 94%,transparent);border:1px solid var(--glass-brd);border-radius:var(--v6-radius);
  backdrop-filter:blur(28px) saturate(1.4);-webkit-backdrop-filter:blur(28px) saturate(1.4);
  box-shadow:0 40px 120px rgba(0,0,0,.72),0 2px 0 rgba(255,255,255,.06) inset;overflow-y:auto;display:flex;flex-direction:column;}
.dsr-dlg-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 22px 13px;position:sticky;top:0;z-index:2;
  background:color-mix(in srgb,var(--panel) 96%,transparent);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--hair);}
.dsr-dlg-title{font-size:15px;font-weight:700;letter-spacing:-.01em;display:flex;align-items:center;gap:10px;}
.dsr-dlg-title::before{content:"";width:3px;height:15px;border-radius:2px;background:linear-gradient(180deg,var(--stance),color-mix(in srgb,var(--stance) 25%,transparent));}
.dsr-dlg-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;
  background:var(--gbtn-bg);border:1px solid var(--gbtn-brd);cursor:pointer;color:var(--muted);font-size:17px;line-height:1;font-family:inherit;flex-shrink:0;transition:background .15s,color .15s;}
.dsr-dlg-close:hover{background:var(--gbtn-bg-hover);color:var(--text);}
.dsr-dlg-body{padding:18px 22px 24px;flex:1;overflow-y:auto;overflow-x:hidden;}
.dpanel{margin:0 0 20px;}
.dpanel:last-child{margin-bottom:0;}
.dpanel h3{margin:0 0 10px;font-size:12px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.07em;}
.dpanel .dfoot{margin-top:8px;font-size:11.5px;color:var(--muted);line-height:1.5;}
/* macro PR 6920 round-4 review MAJOR-3 fix: round-3's `.dfoot .c` rule set
   only `color:var(--muted)`, identical to the `.dpanel .dfoot` color it
   inherits already — a no-op, so the code sat inline with the sentence,
   indistinguishable from the prose (each refusal/disclosure line also ran
   on into the next via " · ", a run-on paragraph). Each line now gets its
   own row (`<br>` in the template between items) and the code is a real
   bordered pill — same family as `.ci-tag`/`.ss-chip`/`.schip` elsewhere in
   this file, using the shared pill-radius token (`--r-pill`, same fallback
   convention `templates/reference.html.j2` already uses), a `--hair`
   border and a `--muted`-tinted fill, never a new palette or component. */
.dfoot-row{display:inline-block;}
.dfoot .c{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:var(--r-pill,999px);
  border:1px solid var(--hair);background:color-mix(in srgb,var(--muted) 12%,transparent);
  color:var(--muted);font-size:9.5px;letter-spacing:.02em;}
.dcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;}
.dcard{background:color-mix(in srgb,var(--panel2) 55%,transparent);border:1px solid var(--hair);border-radius:12px;padding:11px 13px;}
.dcard .dk{font-size:10.5px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;}
.dcard .dv{font-size:16px;font-weight:750;margin-top:4px;}
.dkv .r6d{display:flex;justify-content:space-between;align-items:baseline;gap:14px;padding:7px 0;border-bottom:1px solid var(--hair);font-size:12.5px;}
.dkv .r6d:last-child{border-bottom:0;}
.dkv .r6d .k{color:var(--muted);}
.dkv .r6d .vv{font-weight:650;text-align:right;}
.dtable{width:100%;border-collapse:collapse;font-size:12.5px;}
.dtable th{font-size:10.5px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;text-align:right;padding:2px 8px 7px;border-bottom:1px solid var(--hair);white-space:nowrap;}
.dtable th:first-child{text-align:left;}
.dtable td{padding:7px 8px;border-bottom:1px solid var(--hair);text-align:right;font-variant-numeric:tabular-nums;}
.dtable td:first-child{text-align:left;color:var(--muted);}
.dtable tr:last-child td{border-bottom:0;}
.dtable-wrap{overflow-x:auto;margin:0 -4px;padding:0 4px;}
.dnotes{list-style:none;margin:0;padding:0;}
.dnotes li{font-size:12.5px;line-height:1.55;padding:5px 0 5px 16px;position:relative;}
.dnotes li::before{content:"·";position:absolute;left:2px;font-weight:900;}
@media(prefers-reduced-motion:no-preference){
  .dsr-dlg-backdrop{opacity:0;transition:opacity 240ms ease-out;}
  .dsr-dlg.dsr-in .dsr-dlg-backdrop{opacity:1;}
  .dsr-dlg-panel{opacity:0;transform:translateY(14px) scale(.965);transition:opacity 320ms cubic-bezier(.22,.9,.26,1.02),transform 320ms cubic-bezier(.22,.9,.26,1.02);}
  .dsr-dlg.dsr-in .dsr-dlg-panel{opacity:1;transform:translateY(0) scale(1);}
  .dsr-dlg.dsr-closing .dsr-dlg-backdrop,.dsr-dlg.dsr-closing .dsr-dlg-panel{transition-duration:180ms;}
  .dsr-dlg-body > .dpanel{opacity:0;transform:translateY(10px);transition:opacity 300ms ease-out,transform 300ms cubic-bezier(.22,.9,.26,1.02);}
  .dsr-dlg.dsr-in .dsr-dlg-body > .dpanel{opacity:1;transform:translateY(0);}
  .dsr-dlg.dsr-in .dsr-dlg-body > .dpanel:nth-child(1){transition-delay:60ms;}
  .dsr-dlg.dsr-in .dsr-dlg-body > .dpanel:nth-child(2){transition-delay:100ms;}
  .dsr-dlg.dsr-in .dsr-dlg-body > .dpanel:nth-child(n+3){transition-delay:140ms;}
  .dsr-closing .dsr-dlg-body > .dpanel{transition-delay:0ms!important;}
}
@media(max-width:700px){
  .dsr-dlg{align-items:flex-end;}
  .dsr-dlg-panel{width:calc(100% - 20px);max-width:none;max-height:88vh;border-radius:var(--v6-radius) var(--v6-radius) 0 0;margin:0 10px;}
  .dsr-dlg-close{width:42px;height:42px;font-size:21px;}
  .dsr-dlg-body{padding:15px 15px 24px;}
}

/* ── responsive (media queries AFTER base rules, always) ── */
@media(max-width:980px){.cols{grid-template-columns:1fr;}}
@media(max-width:860px){.hero-grid{grid-template-columns:1fr;gap:12px;}.px-block{text-align:left;}}
@media(max-width:760px){.chart-mod .mod-hd{flex-wrap:wrap;}}
@media(max-width:700px){
  .mod-hd{flex-wrap:wrap;row-gap:8px;}
  .mod-hd .hint{white-space:normal;flex-wrap:wrap;justify-content:flex-end;row-gap:6px;}
}
@media(max-width:480px){
  .why .wr{flex-wrap:wrap;}
  .why .wc{flex-basis:calc(100% - 20px);padding-top:0;}
  .why .wl{min-width:0;}
}
@media(max-width:640px){
  .page-wrap{padding:0 14px 44px;}
  .mod{padding:16px 15px 17px;border-radius:15px;}
  .hero{padding:20px 18px 0;}
  .stance-row{margin:18px -18px 0;padding:12px 18px;}
  .chart-mod .mod-hd{padding:13px 15px 10px;}
  .chart-ft{padding:9px 15px 12px;}
  .fin3{grid-template-columns:1fr;}
  .earn-top{grid-template-columns:1fr;}
  .kv2{grid-template-columns:1fr;}
  .otiles{grid-template-columns:repeat(2,1fr);}
}
