/* CYKI Market Hub layout and components (ADR-073, docs/screens/market-hub/README.md).
   Loaded after cyki-tokens.css on every /market/ page. All selectors are kv-prefixed or scoped to body.kvm. */
body.kvm{margin:0;background:var(--bg);color:var(--text);font-family:var(--f-ui);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}
body.kvm a{color:inherit;text-decoration:none}
body.kvm a:focus-visible,body.kvm button:focus-visible,body.kvm [tabindex]:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
body.kvm h1,body.kvm h2,body.kvm h3,body.kvm p{margin:0}
.kvpage{position:relative;isolation:isolate;min-height:100vh}
.kvsr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.kvmono{font-family:var(--f-num)}
.kvh{font-family:var(--f-head);font-weight:400;line-height:1.02;text-transform:uppercase;color:var(--text)}
.kvk{font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:500;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.kvskip{position:absolute;left:-9999px;top:8px;background:var(--text);color:var(--bg);padding:10px 14px;border-radius:6px;z-index:100}
.kvskip:focus{left:8px}

/* header: glass, one glass layer at a time */
.kvhead{position:sticky;top:0;z-index:50;background:var(--bg);border-bottom:1px solid var(--line)}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
.kvhead{background:var(--glass);-webkit-backdrop-filter:blur(14px) saturate(1.3);backdrop-filter:blur(14px) saturate(1.3)}}
.kvpage[data-pop="1"] .kvhead,.kvpage[data-gl="1"] .kvhead{background:var(--bg) !important;-webkit-backdrop-filter:none !important;backdrop-filter:none !important}
@media (prefers-reduced-transparency:reduce){.kvhead{background:var(--bg) !important;-webkit-backdrop-filter:none !important;backdrop-filter:none !important}}
.kvhead-in{max-width:1280px;margin:0 auto;padding:12px 32px;min-height:68px;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:12px 20px;flex-wrap:wrap}
.kvlogo{font-family:var(--f-head);font-size:30px;letter-spacing:.04em;color:var(--text)}
.kvnav{display:flex;gap:6px 22px;flex-wrap:wrap;font-size:15px;font-weight:500}
.kvnav a{color:var(--text2);padding:10px 0;min-height:24px}
.kvnav a[aria-current="page"]{color:var(--text);box-shadow:inset 0 -2px 0 var(--text)}
.kvacts{display:inline-flex;align-items:center;gap:12px;flex:none}

/* CTA: sheen + glow on hover and focus-visible, no movement toward the cursor, pressed state for touch */
.kvcta{position:relative;display:inline-flex;align-items:center;justify-content:center;background:var(--orange);color:var(--on-orange) !important;font-weight:700;font-size:16px;padding:14px 24px;border-radius:6px;overflow:hidden;transition:transform .12s ease-out,filter .12s;-webkit-tap-highlight-color:transparent}
.kvcta>span{position:relative;z-index:1}
.kvcta::after{content:"";position:absolute;top:0;bottom:0;left:0;width:100%;background:linear-gradient(105deg,transparent 38%,rgba(255,255,255,.4) 50%,transparent 62%);transform:translateX(-130%);pointer-events:none}
@media (hover:hover) and (pointer:fine){.kvcta:hover::after{transform:translateX(130%);transition:transform .75s ease}.kvcta:hover{box-shadow:0 0 0 1px rgba(255,74,23,.5),0 0 22px rgba(255,74,23,.45)}}
.kvcta:focus-visible::after{transform:translateX(130%);transition:transform .75s ease}
.kvcta:focus-visible{box-shadow:0 0 0 1px rgba(255,74,23,.5),0 0 22px rgba(255,74,23,.45)}
.kvcta:active{transform:scale(.97);filter:brightness(.92)}
.kvcta.sm{font-size:15px;padding:12px 20px}
.kvghost{display:inline-flex;align-items:center;border:1px solid var(--muted);color:var(--text);font-weight:500;font-size:16px;padding:14px 24px;border-radius:6px}
@media (prefers-reduced-motion:reduce){.kvcta{transition:none}.kvcta::after{display:none}}

/* exposed blueprint grid: the primitives (.kvgd .kvgv .kvv .kvhl .kvln .kvbx .kvmk .kvlbl .kvrow) live in cyki-tokens.css, shared by every page; only the draw-in animation stays here */
.kvjs .kvv{transform:scaleY(0);transform-origin:top}
.kvjs .kvgd.go .kvv{animation:kvvy .44s cubic-bezier(.2,.7,.2,1) both;animation-delay:var(--d,0ms)}
@keyframes kvvy{to{transform:scaleY(1)}}
.kvjs .kvln{transform:scaleX(0);transform-origin:left}
.kvjs .kvhl.go .kvln{animation:kvhx .44s cubic-bezier(.2,.7,.2,1) both}
@keyframes kvhx{to{transform:scaleX(1)}}
.kvjs .kvmk{transform:translate(-50%,-50%) scale(0)}
.kvjs .kvhl.go .kvmk{animation:kvmkp .25s cubic-bezier(.34,1.56,.64,1) both;animation-delay:450ms}
@keyframes kvmkp{to{transform:translate(-50%,-50%) scale(1)}}
@media (prefers-reduced-motion:reduce){.kvjs .kvv,.kvjs .kvln{transform:none;animation:none !important}.kvjs .kvmk{transform:translate(-50%,-50%);animation:none !important}}

/* layout */
.kvmain{box-sizing:border-box;max-width:1280px;margin:0 auto;padding:0 32px;display:flex;flex-direction:column;gap:72px;position:relative;z-index:1}
.kvsec{display:flex;flex-direction:column;gap:20px;padding-top:8px}
.kvrow.kvsec{padding-top:36px}
.kvsec-h{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}
.kvsec-h h2{font-size:36px}
.kvhero{display:flex;flex-wrap:wrap;gap:48px;padding-top:56px;align-items:stretch}
.kvhero>div{flex:1 1 440px;min-width:0;display:flex;flex-direction:column;gap:20px}
.kvhero h1{font-size:clamp(44px,7vw,72px);text-wrap:balance}
.kvfig{display:flex;align-items:baseline;gap:12px 20px;flex-wrap:wrap}
.kvlevel{display:inline-flex;align-items:flex-start;font-family:var(--f-num);font-weight:700;font-size:clamp(56px,10vw,96px);line-height:1;color:var(--text)}
.kvlevel.void{color:var(--muted)}
.kvchg{font-family:var(--f-num);font-weight:700;font-size:32px;display:inline-flex;align-items:center;gap:8px}
.kvchg.pos{color:var(--pos)}.kvchg.neg{color:var(--neg)}
.kvchg svg{width:22px;height:22px}
.kvchips{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.kvcard{background:var(--surf);border-radius:10px;padding:24px;display:flex;flex-direction:column;gap:14px;min-width:0}
.kvpos{color:var(--pos)}.kvneg{color:var(--neg)}
.kvbox{border:1px solid var(--border);border-radius:8px;padding:16px 20px;display:flex;flex-direction:column;gap:6px;background:var(--surf)}
.kvvoidbox{border:1px dashed var(--border);background:repeating-linear-gradient(135deg,var(--stripe) 0 8px,transparent 8px 16px);border-radius:8px;padding:18px 20px}
.kvbanner{border:1px solid var(--text2);border-radius:8px;padding:12px 16px;background:var(--surf);font-size:15px}
.kvprose{font-size:17px;line-height:1.6;color:var(--text2);max-width:680px}
.kvprose a,.kvlink{text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:4px}
.kvstale{display:none;background:var(--text);color:var(--bg);font-size:14px;padding:8px 32px;text-align:center}
.kvstale.on{display:block}

/* disclosure: info marker + toggletip */
.kvi{position:relative;display:inline-flex;vertical-align:middle;letter-spacing:0;text-transform:none}
.kvib{width:44px;height:44px;margin:-8px;border:0;background:transparent;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:inherit}
.kvib span{width:28px;height:28px;border-radius:50%;border:1px solid var(--border);color:var(--text2);font-family:var(--f-ui);font-size:13px;font-weight:700;line-height:1;display:inline-flex;align-items:center;justify-content:center}
.kvpop{position:absolute;z-index:40;top:34px;left:0;width:272px;box-sizing:border-box;border:1px solid var(--border);border-radius:8px;padding:12px 14px;font-family:var(--f-ui);font-size:14px;font-weight:400;line-height:1.5;letter-spacing:0;text-transform:none;text-align:left;white-space:normal;background:var(--popsolid);color:var(--poptx)}
.kvpop[hidden]{display:none}
.kvpop.r{left:auto;right:0}
.kvpop a{text-decoration:underline;font-weight:700}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
.kvpop{background:var(--popglass);-webkit-backdrop-filter:blur(12px) saturate(1.25);backdrop-filter:blur(12px) saturate(1.25)}}
.kvpage[data-gl="1"] .kvpop,.kvpage[data-pop="1"] .kvpop{background:var(--popsolid) !important;-webkit-backdrop-filter:none !important;backdrop-filter:none !important}
@media (prefers-reduced-transparency:reduce){.kvpop{background:var(--popsolid) !important;-webkit-backdrop-filter:none !important;backdrop-filter:none !important}}

/* charts */
.kvchart{position:relative;touch-action:pan-y;cursor:crosshair;-webkit-user-select:none;user-select:none}
.kvchart svg{display:block;position:absolute;left:0;top:0;width:100%;height:100%}
.kvchart .kvbase{stroke:var(--border);stroke-width:1;stroke-dasharray:4 5}
.kvchart .kvl0{fill:none;stroke:var(--text);stroke-linejoin:round;stroke-linecap:round}
.kvchart .kvl1{fill:none;stroke:var(--line);stroke-linejoin:round;stroke-linecap:round}
.kvvx{display:none;position:absolute;top:0;bottom:0;width:1px;background:var(--muted)}
.kvvd{display:none;position:absolute;width:13px;height:13px;margin:-6.5px 0 0 -6.5px;border-radius:50%;background:var(--text);border:2px solid var(--surf);box-sizing:border-box}
.kved{position:absolute;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;border-radius:50%;background:var(--text)}
.kvchh{display:none;position:absolute;left:0;right:0;top:0;height:1px;background:var(--text);opacity:.5;pointer-events:none}
@media (hover:hover) and (pointer:fine){.kvchart.kvxh{cursor:none}}
.kvro{font-family:var(--f-num);font-size:15px;font-weight:700;min-height:22px}
.kvaxis{display:flex;justify-content:space-between;font-family:var(--f-num);font-size:13px;color:var(--muted)}

/* digit roll */
.kvdrum{display:inline-block;width:.6em;height:1em;overflow:hidden;position:relative}
.kvdrum>span{display:flex;flex-direction:column;will-change:transform}
.kvdrum i{display:block;height:1em;line-height:1em;text-align:center;font-style:normal}
.kvdot{display:inline-block;width:.34em;height:1em;line-height:1em;text-align:center}
.kvstamp{opacity:1}
.kvjs .kvstamp{opacity:0}
.kvjs .kvstamp.in{opacity:1;animation:kvstp .35s cubic-bezier(.34,1.56,.64,1) both}
@keyframes kvstp{0%{transform:scale(1.28);opacity:0}100%{transform:scale(1);opacity:1}}
@media (prefers-reduced-motion:reduce){.kvjs .kvstamp{opacity:1}.kvjs .kvstamp.in{animation:none}}

/* tiles and cells */
.kvtiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:16px}
.kvtile{background:var(--surf);border-radius:10px;padding:20px;display:flex;flex-direction:column;gap:12px;min-width:0;position:relative}
.kvtile .kvname{font-size:16px;font-weight:700}
.kvtile .kvlv{display:inline-flex;font-family:var(--f-num);font-weight:700;font-size:34px;line-height:1}
.kvtile .kvdc{display:flex;justify-content:space-between;gap:8px;font-family:var(--f-num);font-size:18px;font-weight:700}
.kvtile .kvspark{height:44px;margin-top:2px}
.kvtile .kvspark svg{width:100%;height:100%;display:block}
.kvspark .kvsp{fill:none;stroke:var(--text2);stroke-linejoin:round;stroke-linecap:round}
.kvspark .kvbase{stroke:var(--border);stroke-width:1;stroke-dasharray:4 5}
.kvtile .kvfr{display:flex;justify-content:space-between;gap:8px;font-size:13px;color:var(--muted)}
.kvbd{position:relative}
.kvbd::after{content:"";position:absolute;inset:-1px;pointer-events:none;border-radius:inherit;background-image:linear-gradient(var(--text),var(--text)),linear-gradient(var(--text),var(--text)),linear-gradient(var(--text),var(--text)),linear-gradient(var(--text),var(--text));background-repeat:no-repeat;background-position:0 0,100% 0,100% 100%,0 100%;background-size:0 2px,2px 0,0 2px,2px 0;transition:background-size .35s cubic-bezier(.2,.7,.2,1)}
.kvbd:focus-within::after,.kvbd:active::after{background-size:100% 2px,2px 100%,100% 2px,2px 100%}
@media (hover:hover){.kvbd:hover::after{background-size:100% 2px,2px 100%,100% 2px,2px 100%}}
@media (prefers-reduced-motion:reduce){.kvbd::after{transition:none}}
.kvfoil::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:3px;pointer-events:none;opacity:0;transition:opacity .25s;background:conic-gradient(from var(--fa,0deg) at var(--fx,50%) var(--fy,50%),#9db4ff,#f09ae0,#8be8c4,#ffd86b,#9db4ff);-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,linear-gradient(#000 0 0);mask-composite:exclude}
@media (hover:hover) and (pointer:fine){.kvfoil.kvfon::before{opacity:1}}
@media (prefers-reduced-motion:reduce){.kvfoil::before{display:none}}

/* tables, movers, heatmap */
.kvtblw{overflow-x:auto}
.kvtbl{width:100%;min-width:560px;border-collapse:collapse;font-size:15px}
.kvtbl th{padding:10px 12px;font-weight:500;color:var(--muted);font-size:13px;letter-spacing:.1em;text-transform:uppercase;text-align:left}
.kvtbl td{padding:14px 12px;border-top:1px solid var(--line);vertical-align:top}
.kvtbl .n{text-align:right;font-family:var(--f-num)}
.kvtbl th.n{text-align:right}
.kvmov{display:flex;flex-wrap:wrap;gap:24px}
.kvmov>div{flex:1 1 280px;min-width:0}
.kvmov .hd{font-size:13px;letter-spacing:.14em;text-transform:uppercase;font-weight:700;padding-bottom:10px;border-bottom:1px solid var(--line)}
.kvmov .rw{display:flex;justify-content:space-between;gap:12px;padding:14px 0;border-bottom:1px solid var(--line2);align-items:center}
.kvmov .rw b{font-family:var(--f-num);font-size:16px}
.kvheat{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:6px}
.kvheat>div{border-radius:6px;padding:28px 20px;display:flex;flex-direction:column;gap:8px;min-height:120px;justify-content:space-between;background:var(--heat-zero);color:var(--text)}
.kvheat .v{font-family:var(--f-num);font-weight:700;font-size:30px}
.kvheat .l{font-size:16px;font-weight:700}
.kvheat .f{font-size:12px;color:var(--text2)}
.kvheat .h-n1{background:var(--heat-neg-1)}.kvheat .h-n2{background:var(--heat-neg-2)}.kvheat .h-n3{background:var(--heat-neg-3)}
.kvheat .h-p1{background:var(--heat-pos-1)}.kvheat .h-p2{background:var(--heat-pos-2)}.kvheat .h-p3{background:var(--heat-pos-3)}
.kvheat .h-void{background:repeating-linear-gradient(135deg,var(--stripe) 0 8px,var(--bg) 8px 16px)}
:root:not([data-theme="dark"]) .kvheat>div{color:#0A0A0A}
:root:not([data-theme="dark"]) .kvheat .f{color:#3F3D39}

/* close picker / archive list */
.kvpick{display:flex;gap:8px;flex-wrap:wrap}
.kvpick a,.kvpick span{border:1px solid var(--border);border-radius:20px;padding:8px 16px;font-size:14px;color:var(--text2)}
.kvpick a[aria-current="page"],.kvpick span.cur{border-color:var(--text);color:var(--text)}
.kvpick span.dis{border-style:dashed;color:var(--muted)}

/* footer */
/* the footer itself lives in cyki-tokens.css (one footer for every page); hub-only spacing and link colours here */
body.kvm .kvfoot{margin-top:72px}

/* rulebook */
.kvrb{display:grid;grid-template-columns:220px 1fr;gap:48px;align-items:start}
.kvrb nav.toc{position:sticky;top:96px;display:flex;flex-direction:column;gap:2px;font-size:15px}
.kvrb nav.toc a{padding:8px 0;color:var(--text2)}
.kvrb article{display:flex;flex-direction:column;gap:14px;padding-bottom:40px;scroll-margin-top:96px}
.kvrb article h2{font-size:30px}
.kvrb ul{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:8px;color:var(--text2);font-size:16px;line-height:1.55;max-width:680px}
.kvfacts{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.kvfacts>div{border:1px solid var(--border);background:var(--surf);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}
.kvfacts .a{font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.kvfacts .b{font-family:var(--f-num);font-weight:700;font-size:18px}
@media (max-width:860px){.kvrb{grid-template-columns:1fr}.kvrb nav.toc{position:static;flex-direction:row;flex-wrap:wrap;gap:4px 16px}}

@media (max-width:700px){
  .kvhead-in,.kvmain{padding-left:16px;padding-right:16px}
  .kvmain{gap:56px}
  .kvhero{padding-top:36px;gap:32px}
  .kvsec-h h2{font-size:30px}
  .kvchg{font-size:26px}
  .kvcard{padding:18px}
  .kvlogo{font-size:26px}
  .kvstale{padding-left:16px;padding-right:16px}
}
/* hero line reveal on load (JS drives it; the CSS fallback un-hides it after 4.5 s if the script never runs) */
.kvjs [data-reveal="hero"] > svg{clip-path:inset(0 100% 0 0);animation:kvunhide 0s 4.5s forwards}
@keyframes kvunhide{to{clip-path:inset(0 0 0 0)}}
@media (prefers-reduced-motion:reduce){.kvjs [data-reveal="hero"] > svg{clip-path:none;animation:none}}
/* blur-to-sharp on recap words */
.kvbl{filter:blur(7px);opacity:.35;transition:filter .9s cubic-bezier(.2,.7,.2,1),opacity .9s;transition-delay:calc(var(--i,0)*120ms);display:inline}
.kvbl.in{filter:none;opacity:1}
@media (prefers-reduced-motion:reduce){.kvbl{filter:none;opacity:1;transition:none}}
.kvstrip{padding:20px 0 32px}
.kvcells{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:16px}
.kvcell{background:var(--surf);border-radius:10px;padding:24px;display:flex;flex-direction:column;gap:14px;min-width:0}
.kvlinks{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:16px}
.kvlinkcard{background:var(--surf);border-radius:10px;padding:22px;display:flex;flex-direction:column;gap:10px;color:var(--text);font-size:15px;line-height:1.5}
.kvlinkcard b{text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:4px;font-size:14px}
.kvctas{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px;background:var(--surf);border-radius:12px;padding:40px 32px 32px}