/* ============================================================
   Predicter — "Signal" experience.
   Visual language: dark void, Archivo Black display type, IBM Plex
   body/mono, cyan→violet gradients, hairline rules, card surfaces.
   Every class here is emitted either by index.html or signal.js.
   ============================================================ */
:root{
  --void:   #0b0d14;
  --void2:  #0e1018;
  --ink:    #f0ede6;
  --cyan:   #1ecfc4;
  --violet: #a855f7;
  --pink:   #ec4899;
  --green:  #22d3a0;
  --red:    #ff5b6b;
  --amber:  #fbbf24;
  --dim:    rgba(240,237,230,0.42);
  --dim2:   rgba(240,237,230,0.22);
  --rule:   rgba(240,237,230,0.07);
  --rule2:  rgba(240,237,230,0.14);
  --card:   rgba(255,255,255,0.04);
  --card2:  rgba(255,255,255,0.07);
  --f-disp: 'Archivo Black', 'Segoe UI Black', Impact, sans-serif;
  --f-body: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  --f-mono: 'IBM Plex Mono', ui-monospace, 'Cascadia Mono', Consolas, monospace;
  --grad:   linear-gradient(90deg,var(--cyan),var(--violet));
  --up:     var(--green);
  --down:   var(--red);
}
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
[hidden]{display:none !important}
html{scroll-behavior:smooth}
body{
  background:var(--void); color:var(--ink);
  font-family:var(--f-body); font-weight:300; line-height:1.6;
  overflow-x:hidden; -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
img{max-width:100%}
em{font-style:italic;color:var(--ink)}
section{scroll-margin-top:96px}

/* gradient text */
.gc{background:linear-gradient(90deg,var(--cyan),var(--violet));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.gp{background:linear-gradient(90deg,var(--violet),var(--pink));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.up{color:var(--up)} .down{color:var(--down)}
.tabnum,.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}

/* ---------------- custom cursor (fine pointers only) ---------------- */
#cd,#cr{display:none}
@media (hover:hover) and (pointer:fine){
  body.cursor-custom{cursor:none}
  body.cursor-custom a,body.cursor-custom button,body.cursor-custom .cpill,
  body.cursor-custom .urow,body.cursor-custom .brow{cursor:none}
  body.cursor-custom input,body.cursor-custom textarea{cursor:text}
  body.cursor-custom #cd{display:block;position:fixed;z-index:9999;pointer-events:none;width:6px;height:6px;border-radius:50%;background:var(--cyan);transform:translate(-50%,-50%);top:0;left:0}
  body.cursor-custom #cr{display:block;position:fixed;z-index:9998;pointer-events:none;width:30px;height:30px;border-radius:50%;border:1px solid rgba(30,207,196,.4);transform:translate(-50%,-50%);top:0;left:0;transition:width .2s,height .2s,border-color .2s}
}

/* ---------------- ticker ---------------- */
.ticker{position:fixed;top:0;left:0;right:0;z-index:300;height:28px;background:rgba(11,13,20,.95);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--rule);overflow:hidden;display:flex;align-items:center;white-space:nowrap}
.ticker-track{display:inline-flex;animation:tick 60s linear infinite;will-change:transform}
.ticker:hover .ticker-track{animation-play-state:paused}
@keyframes tick{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.tk{display:inline-flex;align-items:center;gap:7px;padding:0 22px;font-family:var(--f-mono);font-size:.62rem;
  letter-spacing:.04em;color:var(--dim);border-right:1px solid var(--rule);flex-shrink:0}
.tk b{color:var(--ink);font-weight:500}
.tk .up{color:var(--cyan)} .tk .down{color:var(--red)}
.tk .tag{color:var(--dim2);font-size:.58rem}
.blink{display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--cyan);animation:bl 1.6s ease-in-out infinite;flex-shrink:0}
@keyframes bl{0%,100%{opacity:1}50%{opacity:.1}}

/* ---------------- nav ---------------- */
nav{position:fixed;top:28px;left:0;right:0;z-index:200;padding:16px 48px;display:flex;align-items:center;
  justify-content:space-between;background:linear-gradient(to bottom,rgba(11,13,20,.97) 0%,rgba(11,13,20,.75) 60%,transparent 100%)}
.nav-logo{display:flex;align-items:center;gap:11px}
.logo-svg{width:34px;height:34px;flex-shrink:0}
.nav-brand{font-family:var(--f-disp);font-size:.85rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ink)}
.nav-links{display:flex;align-items:center;gap:26px;list-style:none}
.nav-links a{font-family:var(--f-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);transition:color .25s}
.nav-links a:hover{color:var(--ink)}
.nav-cta{background:var(--grad);color:var(--void) !important;padding:8px 18px;border-radius:100px;font-weight:500;
  transition:box-shadow .3s,transform .2s;white-space:nowrap}
.nav-cta:hover{box-shadow:0 0 28px rgba(30,207,196,.4);transform:translateY(-1px)}
.nav-burger{display:none;flex-direction:column;gap:5px;cursor:pointer;background:none;border:none;padding:4px}
.nav-burger span{display:block;width:22px;height:1.5px;background:var(--dim);transition:all .3s}
.mobile-menu{display:none;position:fixed;top:28px;left:0;right:0;background:rgba(11,13,20,.98);backdrop-filter:blur(16px);
  padding:76px 24px 28px;z-index:190;border-bottom:1px solid var(--rule)}
.mobile-menu.open{display:block}
.mobile-menu a{display:block;font-family:var(--f-mono);font-size:.82rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--dim);padding:14px 0;border-bottom:1px solid var(--rule);transition:color .2s}
.mobile-menu a:hover{color:var(--cyan)}
.mobile-menu a:last-child{border-bottom:none;color:var(--cyan)}

/* ---------------- hero ---------------- */
.hero{position:relative;min-height:100vh;display:flex;flex-direction:column;justify-content:flex-end;
  padding:150px 108px 72px 48px;overflow:hidden}
.hero-grid{position:absolute;inset:0;background-image:linear-gradient(var(--rule) 1px,transparent 1px),
  linear-gradient(90deg,var(--rule) 1px,transparent 1px);background-size:60px 60px;pointer-events:none}
.glow-a{position:absolute;width:700px;height:700px;top:-150px;right:-120px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,rgba(168,85,247,.10) 0%,transparent 70%);animation:gd 14s ease-in-out infinite alternate}
.glow-b{position:absolute;width:500px;height:500px;bottom:80px;left:-80px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,rgba(30,207,196,.07) 0%,transparent 70%);animation:gd 18s ease-in-out infinite alternate-reverse}
@keyframes gd{from{transform:translate(0,0) scale(1)}to{transform:translate(24px,16px) scale(1.08)}}
#heroChart{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1;opacity:.62}
.hero-ghost{position:absolute;left:0;right:0;bottom:0;overflow:hidden;height:55%;display:flex;align-items:flex-end;
  padding:0 36px 54px;pointer-events:none;z-index:0}
.hero-ghost-word{font-family:var(--f-disp);font-size:clamp(9rem,20vw,20rem);line-height:.85;color:rgba(240,237,230,.03);
  letter-spacing:-.02em;user-select:none;white-space:nowrap}
.hero-scroll{position:absolute;right:34px;top:52%;transform:translateY(-50%);display:flex;flex-direction:column;
  align-items:center;gap:10px;z-index:10}
.scroll-lbl{font-family:var(--f-mono);font-size:.52rem;letter-spacing:.3em;text-transform:uppercase;color:var(--dim2);writing-mode:vertical-rl}
.scroll-line{width:1px;height:56px;background:linear-gradient(to bottom,var(--cyan),transparent);animation:sp 2.6s ease-in-out infinite}
@keyframes sp{0%{transform:scaleY(0);transform-origin:top;opacity:1}50%{transform:scaleY(1);transform-origin:top}
  51%{transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom;opacity:0}}

.hero-content{position:relative;z-index:10;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:flex-end;
  gap:48px;width:100%;max-width:1320px;margin:0 auto}
/* The chart runs the full width behind the copy (as in the design reference),
   so it is held well back in opacity and the copy gets a soft backing wash —
   enough that the type always wins, not so much that the motion disappears. */
.hero-copy{position:relative}
.hero-copy::before{content:'';position:absolute;inset:-50px -60px -40px -60px;z-index:-1;pointer-events:none;
  background:radial-gradient(ellipse 58% 54% at 30% 52%,rgba(11,13,20,.62) 0%,rgba(11,13,20,.34) 60%,rgba(11,13,20,0) 100%)}
/* opaque backing: the backdrop chart must never run through this line of text */
.h-live{display:inline-flex;align-items:center;gap:8px;background:rgba(12,22,26,.94);border:1px solid rgba(30,207,196,.2);
  border-radius:100px;padding:5px 15px 5px 11px;font-family:var(--f-mono);font-size:.6rem;letter-spacing:.08em;
  color:var(--cyan);margin-bottom:26px}
.hero-h1{font-family:var(--f-disp);font-size:clamp(2.6rem,5.6vw,5.2rem);line-height:1.03;letter-spacing:-.02em;
  font-weight:400;margin-bottom:26px}
.hero-desc{font-size:.95rem;line-height:1.85;color:var(--dim);max-width:540px;margin-bottom:32px}
.hero-desc strong{color:var(--ink);font-weight:500}
.hero-btns{display:flex;gap:12px;flex-wrap:wrap}
.btn-grad{font-family:var(--f-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--void);
  background:var(--grad);border:none;padding:14px 28px;border-radius:100px;cursor:pointer;display:inline-block;
  font-weight:500;transition:box-shadow .3s,transform .2s}
.btn-grad:hover{box-shadow:0 0 32px rgba(30,207,196,.4);transform:translateY(-2px)}
.btn-ghost{font-family:var(--f-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink);
  border:1px solid var(--rule2);padding:14px 28px;border-radius:100px;cursor:pointer;display:inline-block;
  background:transparent;transition:border-color .3s}
.btn-ghost:hover{border-color:rgba(240,237,230,.5)}
.hero-source{font-family:var(--f-mono);font-size:.62rem;color:rgba(30,207,196,.5);margin-top:20px}

/* hero stat tiles (#heroStats .hstat) */
.hero-cards{display:flex;flex-direction:column;gap:12px;min-width:230px}
.hstat{position:relative;background:rgba(14,16,24,.82);border:1px solid var(--rule2);border-radius:10px;padding:15px 18px;
  backdrop-filter:blur(10px);transition:background .3s,border-color .3s;cursor:help;outline:none}
.hstat:hover{background:rgba(20,23,34,.9);border-color:rgba(30,207,196,.3)}
.hstat .hk{font-family:var(--f-mono);font-size:.55rem;letter-spacing:.2em;text-transform:uppercase;color:var(--dim2);
  margin-bottom:6px;display:flex;align-items:center}
.hstat .hv{font-family:var(--f-disp);font-size:1.5rem;line-height:1;margin-bottom:4px}
.hstat .hsub{font-family:var(--f-mono);font-size:.62rem;color:var(--dim)}

/* ---------------- sections ---------------- */
.sec{position:relative;padding:96px 48px;border-top:1px solid var(--rule)}
.sec.alt{background:rgba(255,255,255,.012)}
.sec-inner{max-width:1200px;margin:0 auto}
.sec-tag{font-family:var(--f-mono);font-size:.58rem;letter-spacing:.4em;text-transform:uppercase;color:var(--cyan);
  display:block;margin-bottom:16px}
.sec-h2{font-family:var(--f-disp);font-size:clamp(1.9rem,4.2vw,3.4rem);line-height:1.06;letter-spacing:-.02em;
  font-weight:400;margin-bottom:18px}
.sec-h2.small{font-size:clamp(1.5rem,2.8vw,2.2rem)}
.sec-p{font-size:.93rem;line-height:1.85;color:var(--dim);max-width:620px}
.sec-p.small{font-size:.85rem}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:40px}

/* ---------------- market pulse + track-record meters (.ptile) ---------------- */
.pulse-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--rule);margin-top:44px;
  border-radius:10px;overflow:hidden;border:1px solid var(--rule)}
.pulse-grid .ptile{border-radius:0;border:none}
.ptile{position:relative;background:var(--void);padding:26px 24px;transition:background .3s;cursor:help;outline:none;
  border:1px solid var(--rule);border-radius:10px}
.ptile::before{content:'';position:absolute;top:0;left:0;width:0;height:2px;background:var(--grad);transition:width .45s ease}
.ptile:hover::before{width:100%}
.ptile:hover{background:rgba(30,207,196,.03)}
.ptile .pk{font-family:var(--f-mono);font-size:.58rem;letter-spacing:.18em;text-transform:uppercase;color:var(--dim2);
  margin-bottom:10px;display:flex;align-items:center}
.ptile .pv{font-family:var(--f-disp);font-size:2.1rem;line-height:1;margin-bottom:6px;font-weight:400}
.ptile .pv.up{color:var(--green)} .ptile .pv.down{color:var(--red)}
.ptile .pv .pmax{font-family:var(--f-mono);font-size:.95rem;font-weight:300;color:var(--dim)}
.ptile .psub{font-family:var(--f-mono);font-size:.64rem;line-height:1.5;color:var(--dim)}

/* ---------------- sector rotation ---------------- */
.sectors-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:44px}
.scol{background:var(--card);border:1px solid var(--rule);border-radius:10px;overflow:hidden}
.scol .cl-title{padding:14px 20px;margin:0;border-bottom:1px solid var(--rule);display:flex;align-items:center;gap:8px}
.srow{display:flex;align-items:center;justify-content:space-between;padding:11px 20px;border-bottom:1px solid var(--rule);transition:background .2s}
.srow:last-child{border-bottom:none}
.srow:hover{background:rgba(255,255,255,.03)}
.sname{font-size:.84rem;color:var(--ink);font-weight:400}
.sval{font-family:var(--f-mono);font-size:.82rem;font-weight:500}
.sval.up{color:var(--green)} .sval.down{color:var(--red)}
.sectors-wrap .cl-lead{grid-column:1/-1;font-family:var(--f-mono);font-size:.7rem;color:var(--dim2);margin:0}

/* ---------------- what changed ---------------- */
.changed-list{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:44px}
.chg{display:flex;align-items:flex-start;gap:12px;background:var(--card);border:1px solid var(--rule);border-radius:10px;
  padding:17px 20px;font-size:.84rem;line-height:1.7;color:var(--dim);transition:background .3s,border-color .3s}
.chg:hover{background:var(--card2);border-color:rgba(30,207,196,.18)}
.chg b,.chg strong{color:var(--ink);font-weight:500}
.chg-dot{flex:none;width:8px;height:8px;border-radius:50%;margin-top:7px;background:linear-gradient(135deg,var(--cyan),var(--violet))}

/* ---------------- the cone ---------------- */
.coin-pills{display:flex;flex-wrap:wrap;gap:8px;margin:38px 0 26px}
.cpill{font-family:var(--f-mono);font-size:.72rem;letter-spacing:.05em;padding:7px 14px;border-radius:100px;
  border:1px solid var(--rule);background:var(--card);color:var(--dim);cursor:pointer;transition:all .25s;
  display:inline-flex;align-items:center;gap:7px}
.cpill:hover{background:rgba(30,207,196,.1);border-color:rgba(30,207,196,.4);color:var(--ink)}
.cpill.active{background:rgba(30,207,196,.15);border-color:var(--cyan);color:var(--cyan)}
.cpill .cp-score{background:var(--grad);color:var(--void);font-size:.58rem;font-weight:700;padding:2px 6px;border-radius:4px}
.cpill.active .cp-score{background:var(--cyan)}

.cone-card{background:var(--card);border:1px solid var(--rule);border-radius:14px}
.cone-top{display:grid;grid-template-columns:1fr auto;align-items:center;gap:20px;padding:22px 28px;border-bottom:1px solid var(--rule)}
.cone-coin{display:flex;align-items:center;gap:13px;min-width:0}
.cone-logo{width:38px;height:38px;border-radius:50%;flex-shrink:0}
.cone-name{font-family:var(--f-disp);font-size:1.3rem;line-height:1.2;color:var(--ink)}
.cone-price{font-family:var(--f-mono);font-size:.72rem;color:var(--dim);margin-top:3px}
.cone-score{width:52px;height:52px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-family:var(--f-disp);font-size:1.35rem;color:var(--void);background:var(--cyan);flex-shrink:0}
.cone-body{display:grid;grid-template-columns:1.15fr 1fr}
.cone-left{padding:22px 28px;border-right:1px solid var(--rule);display:flex;flex-direction:column;justify-content:center}
.cone-chart{width:100%}
.cone-chart svg{width:100%;height:auto;display:block}
.cone-right{padding:22px 28px}
.cone-expect{font-size:.85rem;line-height:1.85;color:var(--dim)}
.cone-legend{display:flex;flex-direction:column;gap:6px;margin-top:18px}
.leg{position:relative;display:flex;align-items:center;gap:8px;padding:8px 11px;background:rgba(255,255,255,.03);
  border-radius:6px;font-family:var(--f-mono);font-size:.66rem;color:var(--dim);cursor:help;outline:none}
.leg b{margin-left:auto;font-family:var(--f-mono);font-size:.7rem;color:var(--ink);font-weight:500}
.leg .info-dot{margin-left:8px}
.leg i.sw{display:inline-block;width:12px;height:12px;border-radius:3px;flex:none}
.sw95{background:rgba(168,85,247,.22);border:1px solid rgba(168,85,247,.55)}
.sw68{background:rgba(30,207,196,.28);border:1px solid rgba(30,207,196,.7)}
.sw.swdrift{background:transparent;border-top:2px dashed var(--amber);height:0;width:14px;border-radius:0}
.swline{background:transparent;border-top:2px dashed var(--dim);height:0;width:14px;border-radius:0}
.cone-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:20px 28px;border-top:1px solid var(--rule)}
.cmet{position:relative;border:1px solid var(--rule);border-radius:8px;padding:11px 13px;background:rgba(255,255,255,.02);cursor:help;outline:none}
.cmet .ck{font-family:var(--f-mono);font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;color:var(--dim2);
  margin-bottom:6px;display:flex;align-items:center;line-height:1.35}
.cmet .cv{font-family:var(--f-mono);font-size:.92rem;font-weight:500;color:var(--ink)}
.cmet .cv.up{color:var(--green)} .cmet .cv.down{color:var(--red)}

/* ---------------- tooltips ----------------
   The explainer bubbles are NOT drawn where they are authored. Several cards
   clip their overflow (.pulse-grid, .scol, .hero, .urow) and the hero creates
   its own stacking context, so an absolutely-positioned bubble gets cut off or
   buried. Instead signal.js copies the text into #tipLayer — one fixed element
   on <body>, above everything, flipped and clamped to stay on screen. */
.tipwrap{position:relative;cursor:help;outline:none}
.info-dot{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;
  background:rgba(240,237,230,.1);color:var(--dim);font-family:var(--f-mono);font-size:.52rem;font-style:italic;
  font-weight:500;line-height:1;flex:none;margin-left:6px;transition:background .2s,color .2s}
.tip{display:none}                    /* source text only — never rendered in place */
.cmet:hover .info-dot,.cmet:focus .info-dot,.leg:hover .info-dot,.leg:focus .info-dot,
.ptile:hover .info-dot,.ptile:focus .info-dot,.hstat:hover .info-dot,.hstat:focus .info-dot,
.tipwrap:hover .info-dot,.tipwrap:focus .info-dot{background:var(--cyan);color:var(--void)}
#tipLayer{position:fixed;top:0;left:0;z-index:9999;width:max-content;max-width:min(340px,calc(100vw - 24px));
  background:#141826;color:var(--ink);border:1px solid var(--rule2);font-family:var(--f-body);font-size:.75rem;
  line-height:1.65;font-weight:300;letter-spacing:0;text-transform:none;padding:12px 14px;border-radius:10px;
  box-shadow:0 18px 44px rgba(0,0,0,.65);pointer-events:none;display:none}
#tipLayer.on{display:block}
#tipLayer b{color:var(--ink);font-weight:500}
/* short windows: keep the bubble small enough to sit beside its trigger */
@media (max-height:660px){#tipLayer{font-size:.7rem;line-height:1.55;padding:9px 11px;max-width:min(300px,calc(100vw - 24px))}}

/* ---------------- track record ---------------- */
.rec-meters{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:44px}
.rec-list{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.rec{display:flex;gap:14px;align-items:flex-start;justify-content:space-between;background:var(--card);
  border:1px solid var(--rule);border-radius:10px;padding:15px 18px;font-size:.82rem;line-height:1.7;color:var(--dim)}
.rec b{color:var(--ink);font-weight:500}
.rec .up{color:var(--green);font-weight:500} .rec .down{color:var(--red);font-weight:500}
.badge{flex:none;font-family:var(--f-mono);font-size:.58rem;letter-spacing:.08em;text-transform:uppercase;
  padding:4px 10px;border-radius:100px;white-space:nowrap;margin-top:3px}
.badge.hit{color:var(--green);background:rgba(34,211,160,.1);border:1px solid rgba(34,211,160,.35)}
.badge.outer{color:var(--amber);background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.35)}
.badge.miss{color:var(--red);background:rgba(255,91,107,.1);border:1px solid rgba(255,91,107,.35)}

/* ---------------- market weather + clusters ---------------- */
.weather-card{display:grid;grid-template-columns:auto 1fr;gap:34px;align-items:center;margin-top:44px;
  background:linear-gradient(120deg,rgba(168,85,247,.07),rgba(30,207,196,.05));border:1px solid var(--rule);
  border-radius:14px;padding:32px}
.gauge{position:relative;width:200px;height:200px;flex:none}
.gauge svg{transform:rotate(-90deg)}
.gauge circle:first-child{stroke:rgba(240,237,230,.08)}
.gauge-mid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.gauge-val{font-family:var(--f-disp);font-size:1.9rem;line-height:1}
.gauge-lab{font-family:var(--f-mono);font-size:.62rem;color:var(--dim);margin-top:6px}
.weather-text h3{font-family:var(--f-disp);font-size:1.3rem;font-weight:400;margin-bottom:10px}
.weather-text p{color:var(--dim);font-size:.88rem;line-height:1.8;margin:0 0 16px}
.weather-chips{display:flex;gap:10px;flex-wrap:wrap}
.wchip{position:relative;display:inline-flex;align-items:center;font-family:var(--f-mono);font-size:.66rem;color:var(--dim);
  border:1px solid var(--rule);background:rgba(255,255,255,.03);padding:8px 14px;border-radius:100px}
.wchip b{color:var(--cyan);margin-left:6px;font-weight:500}
.clusters{margin-top:26px}
.cl-lead{font-size:.84rem;line-height:1.8;color:var(--dim);margin:0 0 16px;max-width:820px}
.cl-lead em{color:var(--ink);font-style:normal;font-weight:500}
.cl-title{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--dim2);margin-bottom:12px}
.cl-note{letter-spacing:0;text-transform:none;color:var(--dim2)}
.cl-groups{display:flex;flex-wrap:wrap;gap:12px}
.cl-group{display:flex;align-items:center;flex-wrap:wrap;gap:7px;border:1px solid var(--rule);background:var(--card);border-radius:22px;padding:8px 14px;max-width:100%}
.cl-tag{font-family:var(--f-mono);font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:var(--violet);margin-right:3px}
.cl-coin{font-family:var(--f-mono);font-size:.68rem;font-weight:500;color:var(--ink);background:rgba(168,85,247,.14);
  border:1px solid rgba(168,85,247,.28);padding:3px 10px;border-radius:100px}
.cl-loners{display:flex;flex-wrap:wrap;gap:8px}
.cl-coin.solo{background:rgba(255,255,255,.04);border-color:var(--rule);color:var(--dim)}

/* ---------------- boards: unusual + alpha ---------------- */
.board{display:flex;flex-direction:column;gap:12px;margin-top:26px}
/* unusual = explanatory cards */
.urow{background:var(--card);border:1px solid var(--rule);border-radius:10px;overflow:hidden;cursor:pointer;transition:background .3s,border-color .3s}
.urow:hover{background:var(--card2);border-color:rgba(30,207,196,.2)}
.urow-top{display:flex;align-items:center;gap:12px;padding:15px 18px;border-bottom:1px solid var(--rule)}
.uscore{margin-left:auto;font-family:var(--f-disp);font-size:1.5rem;line-height:1;white-space:nowrap}
.uscore-max{font-family:var(--f-mono);font-size:.8rem;font-weight:300;color:var(--dim)}
.uwhy{margin:0;padding:14px 18px;font-size:.8rem;line-height:1.8;color:var(--dim)}
.urow .bbar{margin-top:0;border-radius:0}
/* alpha = ranked rows */
.brow{display:grid;grid-template-columns:22px 1fr auto;gap:14px;align-items:center;background:var(--card);
  border:1px solid var(--rule);border-radius:10px;padding:13px 18px;cursor:pointer;transition:background .3s,border-color .3s}
.brow:hover{background:var(--card2);border-color:rgba(30,207,196,.2)}
.brank{font-family:var(--f-mono);font-size:.75rem;color:var(--dim2)}
.bcol{min-width:0}
.bmain{display:flex;align-items:center;gap:10px;min-width:0}
.bmain img{width:26px;height:26px;border-radius:50%;flex:none}
.bsym{font-family:var(--f-mono);font-weight:500;font-size:.85rem;color:var(--ink)}
.bname{color:var(--dim);font-size:.76rem}
.bbar{height:3px;border-radius:2px;background:var(--rule);overflow:hidden;margin-top:7px;width:100%}
.bbar span{display:block;height:100%;border-radius:2px;background:var(--grad)}
.bmeta{text-align:right}
.bval{font-family:var(--f-mono);font-size:.88rem;font-weight:500}
.bval.up{color:var(--green)} .bval.down{color:var(--red)}
.bsubv{font-family:var(--f-mono);font-size:.58rem;color:var(--dim)}

/* ---------------- why it's different ---------------- */
.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:44px}
.feature{background:var(--card);border:1px solid var(--rule);border-radius:10px;padding:26px 24px;transition:transform .25s,background .3s,border-color .3s}
.feature:hover{transform:translateY(-3px);background:var(--card2);border-color:rgba(30,207,196,.2)}
.f-ico{font-size:1.4rem;margin-bottom:14px}
.feature h3{font-family:var(--f-disp);font-size:1rem;font-weight:400;margin-bottom:9px}
.feature p{color:var(--dim);font-size:.82rem;line-height:1.75;margin:0}

/* ---------------- get the brief ---------------- */
.brief-sec{padding:84px 48px}
.get-wrap{position:relative;max-width:860px;margin:0 auto;text-align:center;overflow:hidden;
  background:linear-gradient(135deg,rgba(30,207,196,.07) 0%,rgba(168,85,247,.07) 100%);
  border:1px solid rgba(30,207,196,.15);border-radius:16px;padding:56px 44px}
.get-wrap::before{content:'';position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(ellipse 60% 50% at 50% 0%,rgba(30,207,196,.06),transparent)}
.get-wrap h2{position:relative;z-index:1;font-family:var(--f-disp);font-size:clamp(1.5rem,3.6vw,2.5rem);
  line-height:1.15;font-weight:400;margin-bottom:14px}
.get-sub{position:relative;z-index:1;font-size:.9rem;line-height:1.8;color:var(--dim);max-width:520px;margin:0 auto 32px}
.get-form{position:relative;z-index:1;display:flex;gap:10px;max-width:460px;margin:0 auto}
.get-form input{flex:1;min-width:0;font-family:var(--f-body);font-size:.88rem;font-weight:300;color:var(--ink);
  background:rgba(255,255,255,.06);border:1px solid var(--rule2);border-radius:100px;padding:13px 20px;outline:none;transition:border-color .3s}
.get-form input::placeholder{color:rgba(240,237,230,.25)}
.get-form input:focus{border-color:rgba(30,207,196,.5)}
.get-msg{position:relative;z-index:1;min-height:22px;margin-top:16px;font-family:var(--f-mono);font-size:.7rem;color:var(--cyan)}

/* ---------------- footer ---------------- */
.foot{border-top:1px solid var(--rule);padding:36px 48px}
.foot-disc{font-size:.78rem;line-height:1.75;color:var(--dim2);max-width:900px;margin-bottom:16px}
.foot-disc strong{color:var(--ink);font-weight:500}
.foot-meta{font-family:var(--f-mono);font-size:.62rem;color:rgba(30,207,196,.4);margin-bottom:5px}
.ft-bottom{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px;margin-top:22px;
  border-top:1px solid var(--rule);padding-top:20px}
.ft-logo{display:flex;align-items:center;gap:9px}
.ft-brand{font-family:var(--f-disp);font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(240,237,230,.25)}
.ft-copy{font-family:var(--f-mono);font-size:.6rem;color:var(--dim2)}
.ft-links{display:flex;gap:20px;list-style:none}
.ft-links a{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--dim2);transition:color .3s}
.ft-links a:hover{color:var(--cyan)}

/* ---------------- reveal on scroll ---------------- */
.reveal{opacity:0;transform:translateY(22px);transition:opacity .75s ease,transform .75s ease}
.reveal.in{opacity:1;transform:none}

/* ---------------- responsive ---------------- */
/* short laptop screens: don't push the hero content past the fold */
@media (max-height:820px) and (min-width:961px){
  .hero{padding-top:118px;padding-bottom:52px}
  .hero-h1{font-size:clamp(2.4rem,4.4vw,3.9rem)}
  .hero-desc{margin-bottom:24px}
  .h-live{margin-bottom:18px}
}
@media (max-width:1100px){
  .pulse-grid{grid-template-columns:1fr 1fr}
  .feature-grid{grid-template-columns:1fr 1fr}
  .rec-meters{grid-template-columns:1fr}
}
@media (max-width:960px){
  nav{padding:12px 22px}
  .nav-links{display:none}
  .nav-burger{display:flex}
  .hero{padding:120px 22px 64px;min-height:auto}
  .hero-content{grid-template-columns:1fr;gap:30px}
  .hero-cards{flex-direction:row;flex-wrap:wrap;min-width:0}
  .hstat{flex:1 1 calc(50% - 6px);min-width:150px}
  .hero-scroll,.glow-a,.glow-b{display:none}
  /* copy is full-width here, so drop the chart back further behind it */
  #heroChart{opacity:.45}
  .hero-copy::before{inset:-30px -20px -30px -20px;
    background:radial-gradient(ellipse 70% 60% at 40% 50%,rgba(11,13,20,.92) 0%,rgba(11,13,20,.78) 60%,rgba(11,13,20,0) 100%)}
  .hero-ghost{height:34%}
  .sec,.brief-sec{padding-left:22px;padding-right:22px}
  .sectors-wrap,.changed-list,.grid-2,.cone-body,.rec-list{grid-template-columns:1fr}
  .cone-left{border-right:none;border-bottom:1px solid var(--rule)}
  .cone-metrics{grid-template-columns:1fr 1fr}
  .weather-card{grid-template-columns:1fr;justify-items:center;text-align:center;padding:26px}
  .weather-chips{justify-content:center}
  .get-wrap{padding:40px 24px}
  .get-form{flex-direction:column}
  .ft-bottom{flex-direction:column;text-align:center}
  .foot{padding:32px 22px}
}
@media (max-width:560px){
  .pulse-grid,.feature-grid{grid-template-columns:1fr}
  .cone-metrics{grid-template-columns:1fr}
  .cone-top{padding:18px}
  .cone-left,.cone-right{padding:18px}
  .sec{padding:64px 22px}
  .hero-h1{font-size:2.3rem}
  #tipLayer{font-size:.72rem;padding:10px 12px}
}
@media (prefers-reduced-motion:reduce){
  .reveal{opacity:1;transform:none;transition:none}
  .glow-a,.glow-b,.scroll-line,.blink{animation:none}
  /* the price ticker is the page's one piece of essential motion — keep it,
     but run it slowly rather than killing it outright */
  .ticker-track{animation-duration:150s}
  html{scroll-behavior:auto}
}
