@font-face{font-family:"JetBrains Mono";font-style:normal;font-display:swap;font-weight:400;src:url(/hub-static/fonts/jbm-400.woff2) format("woff2")}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-display:swap;font-weight:600;src:url(/hub-static/fonts/jbm-600.woff2) format("woff2")}
:root{--bg:#070b0a;--bg2:#0c1311;--panel:rgba(10,17,15,.82);--line:rgba(214,226,214,.12);--line2:rgba(214,226,214,.22);--ink:#e8e6dc;--mute:#9aa69f;--dim:#5f6b65;--green:#3ee08f;--red:#ff5d4d;--gold:#f4b740;--blue:#5aa9ff;--violet:#b48cff;--mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--paper:#0a110f;--line-2:rgba(214,226,214,.22);--bg-2:#0c1311;--ink-2:#9aa69f;--pp-font:var(--mono);--sans:Inter,"PingFang SC","Hiragino Sans GB","Noto Sans CJK SC","Microsoft YaHei",system-ui,sans-serif;color-scheme:dark}
*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}
a{color:var(--green);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:0}
.mono{font-family:var(--mono)}.dim{color:var(--dim)}.small{font-size:12.5px}.sans{font-family:var(--sans)}
.blink{animation:blink 1.2s steps(2) infinite;color:var(--green)}@keyframes blink{50%{opacity:0}}
.topnav{display:flex;align-items:center;gap:28px;padding:14px 22px;position:sticky;top:0;z-index:20;background:linear-gradient(var(--bg),rgba(7,11,10,.85) 70%,transparent);backdrop-filter:blur(4px)}
.brand{display:flex;align-items:center;gap:10px;color:var(--ink)}.brand:hover{text-decoration:none}.brand-mark{font-family:var(--mono);font-weight:600;font-size:22px;letter-spacing:-.02em}.brand-mark b{color:var(--green);font-weight:600}
.brand-text{display:flex;flex-direction:column;line-height:1.15}.brand-text b{font-size:13px;letter-spacing:.04em}.brand-text small{font-family:var(--mono);font-size:9.5px;color:var(--dim);letter-spacing:.14em}
.tabs{display:flex;gap:4px;margin-left:auto}.tabs a{font-family:var(--mono);font-size:12px;color:var(--mute);padding:5px 10px;border:1px solid transparent;border-radius:3px}.tabs a.on,.tabs a:hover{color:var(--ink);border-color:var(--line2);text-decoration:none;background:rgba(255,255,255,.03)}
.lang{font-family:var(--mono);font-size:11px;color:var(--mute);border:1px solid var(--line2);padding:4px 8px;border-radius:3px}
.hero{position:relative;height:min(86vh,860px);min-height:560px;margin-top:-62px;border-bottom:1px solid var(--line);overflow:hidden;background:radial-gradient(ellipse at 60% 55%,#0d1a15 0,var(--bg) 70%)}
#graph{position:absolute;inset:0;width:100%;height:100%;cursor:grab}#graph:active{cursor:grabbing}
.hero-ov{position:absolute;left:22px;top:84px;max-width:560px;pointer-events:none}.hero-ov *{pointer-events:auto}
.kicker{font-size:11px;letter-spacing:.16em;color:var(--mute)}.hero h1{font-size:clamp(26px,3.4vw,40px);line-height:1.1;margin:10px 0 8px;letter-spacing:-.02em}.sub{color:var(--mute);font-size:14px;margin:0 0 16px;max-width:460px}
.stats{display:flex;gap:0;border:1px solid var(--line);width:max-content;background:rgba(7,11,10,.7)}.stats div{padding:8px 14px;border-right:1px solid var(--line)}.stats div:last-child{border:0}.stats small{display:block;font-size:9.5px;color:var(--dim);letter-spacing:.12em}.stats b{font-size:20px;font-weight:600}
.legend{display:flex;gap:16px;margin-top:14px;font-size:11px;color:var(--mute)}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:-1px}.dot.h{background:var(--green)}.dot.k{background:var(--gold)}.ring{display:inline-block;width:11px;height:11px;border-radius:50%;border:2px solid #9ff5c8;box-shadow:0 0 8px #3ee08f;margin-right:6px;vertical-align:-2px}
.tip{position:absolute;pointer-events:none;background:rgba(7,11,10,.95);border:1px solid var(--line2);padding:10px 12px;font-size:12px;max-width:300px;display:none;z-index:5;border-radius:3px}.tip b{display:block;font-size:13px;margin-bottom:4px}.tip .mono{color:var(--mute);font-size:11px}
.zoom{position:absolute;right:18px;bottom:18px;display:flex;gap:4px}.zoom button{border:1px solid var(--line2);width:30px;height:28px;background:rgba(7,11,10,.8);color:var(--mute)}
.band{padding:34px 0;border-bottom:1px solid var(--line)}.wrap{max-width:1320px;margin:0 auto;padding:0 22px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.panel{background:var(--panel);border:1px solid var(--line);padding:18px;border-radius:4px;margin-bottom:18px}
.sec{font-family:var(--mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--mute);margin:0 0 12px;font-weight:600}.sec small{letter-spacing:0}
.cards{display:flex;flex-direction:column;gap:6px;max-height:640px;overflow:auto}.cards.guides{display:grid;grid-template-columns:1fr 1fr;max-height:none}
.card{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:3px;color:var(--ink);background:rgba(255,255,255,.015);transition:border-color .15s,background .15s}.card:hover{text-decoration:none;border-color:var(--line2);background:rgba(62,224,143,.05)}
.card.k-kaggle:hover{background:rgba(244,183,64,.05)}
.sc{--s:50;width:42px;height:42px;border-radius:50%;flex:none;display:grid;place-items:center;background:conic-gradient(var(--green) calc(var(--s)*1%),rgba(255,255,255,.07) 0);position:relative}.sc:after{content:"";position:absolute;inset:4px;border-radius:50%;background:var(--bg)}.sc b{position:relative;z-index:1;font-family:var(--mono);font-size:13px}
.k-kaggle .sc{background:conic-gradient(var(--gold) calc(var(--s)*1%),rgba(255,255,255,.07) 0)}
.cb{flex:1;min-width:0}.ct{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cm{font-family:var(--mono);font-size:11px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.g{font-family:var(--mono);font-size:9.5px;color:var(--bg);background:var(--green);padding:1px 5px;border-radius:2px;margin-left:8px;vertical-align:2px;letter-spacing:.08em}
.cd{font-family:var(--mono);font-size:12px;color:var(--green);white-space:nowrap}.cd.hot{color:var(--red)}.cd.warm{color:var(--gold)}
.viz{width:100%;height:340px;display:block}.viz text{font-family:var(--mono);font-size:10px;fill:var(--mute)}
.cal{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.month h3{font-family:var(--mono);font-size:12px;color:var(--mute);margin:0 0 8px;letter-spacing:.12em}.days{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.days span{font-family:var(--mono);font-size:10px;color:var(--dim);text-align:center}
.day{position:relative;aspect-ratio:1;border:1px solid var(--line);border-radius:2px;font-family:var(--mono);font-size:10px;color:var(--dim);padding:3px;cursor:default}.day.today{border-color:var(--green);color:var(--green)}.day.has{color:var(--ink);background:rgba(62,224,143,.06)}
.day i{position:absolute;bottom:3px;width:6px;height:6px;border-radius:50%}.day i.h{background:var(--green)}.day i.k{background:var(--gold)}.day .n{position:absolute;right:3px;top:2px;font-size:9px;color:var(--mute)}
.day:hover .pop{display:block}.pop{display:none;position:absolute;z-index:6;left:0;top:100%;min-width:220px;background:#0a110f;border:1px solid var(--line2);padding:8px;font-size:11px;color:var(--ink)}.pop a{display:block;padding:2px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.formula{padding-left:18px;font-size:13.5px;line-height:1.55;color:var(--ink)}.formula li{margin-bottom:8px}.srcs{padding-left:16px;color:var(--mute);line-height:1.6}
.ticker{position:fixed;left:0;right:0;bottom:0;height:28px;background:rgba(7,11,10,.94);border-top:1px solid var(--line);overflow:hidden;font-size:11.5px;z-index:15;white-space:nowrap}.ticker .run{display:inline-block;padding-left:100%;animation:tick 90s linear infinite;line-height:28px}.ticker span{margin-right:34px;color:var(--mute)}.ticker b{color:var(--ink);font-weight:400}.ticker em{font-style:normal;color:var(--green)}
@keyframes tick{to{transform:translateX(-100%)}}body[data-page=hub]{padding-bottom:28px}
/* detail */
.dhero{max-width:1320px;margin:0 auto;padding:22px 22px 8px}.crumbs a{color:var(--mute)}.dhero h1{font-size:clamp(26px,3.2vw,38px);letter-spacing:-.02em;margin:10px 0}.lede{color:var(--mute);max-width:820px;font-size:15px;line-height:1.55}
.note{border-left:2px solid var(--gold);padding:6px 10px;color:var(--gold);font-size:13px;max-width:820px}
.drow{display:flex;gap:12px;align-items:stretch;flex-wrap:wrap;margin:16px 0}.count{border:1px solid var(--line);padding:10px 14px;min-width:200px;background:var(--panel)}.count small{display:block;font-size:9.5px;color:var(--dim);letter-spacing:.12em}.count b{font-size:20px;font-weight:600;display:block;margin:3px 0}
.cta{display:flex;align-items:center;padding:0 18px;border:1px solid var(--green);color:var(--green);font-family:var(--mono);font-size:13px;border-radius:3px}.cta:hover{background:rgba(62,224,143,.1);text-decoration:none}
.dgrid{max-width:1320px;margin:0 auto;padding:8px 22px 40px;display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:22px}.side{position:sticky;top:70px;align-self:start}
.cloud{width:100%;height:440px;display:block;cursor:pointer}.clegend{display:flex;gap:14px;margin:6px 0}.clegend span:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px}
.s-brief:before{background:var(--green)}.s-winners:before{background:var(--gold)}.s-discussion:before{background:var(--blue)}.s-gallery:before{background:var(--violet)}
.terms{color:var(--dim);line-height:1.6}#cloudhits ul{padding-left:18px}
.facts{margin:0;display:grid;grid-template-columns:1fr;gap:0}.facts div{display:grid;grid-template-columns:180px 1fr;border-top:1px solid var(--line);padding:8px 0}.facts dt{font-family:var(--mono);font-size:11px;color:var(--dim);letter-spacing:.06em;text-transform:uppercase;padding-top:2px}.facts dd{margin:0;font-size:14px;line-height:1.5}.facts.mini div{grid-template-columns:90px 1fr}.facts.mini dd{font-size:12.5px}
.src{font-size:11px;color:var(--dim)}
.angles{display:grid;grid-template-columns:1fr 1fr;gap:10px}.angle{border:1px solid var(--line);padding:12px;border-radius:3px}.angle b{font-size:14px}.angle p{margin:6px 0 0;color:var(--mute);font-size:13.5px;line-height:1.5}
.winners{padding-left:18px;font-size:13.5px;line-height:1.6}
.crit .cr{margin-bottom:14px}.crh{display:flex;justify-content:space-between}.crh em{font-family:var(--mono);font-style:normal;color:var(--green)}.cr i{display:block;height:6px;background:linear-gradient(90deg,var(--green),#1d8f5a);border-radius:3px;margin:6px 0}.cr p{margin:0;color:var(--mute);font-size:13.5px}
.stack{list-style:none;padding:0;margin:0}.stack li{border-top:1px solid var(--line);padding:8px 0;font-size:14px}.stack span{color:var(--mute)}
.tl{list-style:none;padding:0;margin:0;position:relative}.tl:before{content:"";position:absolute;left:6px;top:4px;bottom:4px;width:1px;background:var(--line2)}.tl li{position:relative;padding:6px 0 10px 24px;display:flex;flex-direction:column}.tl li:before{content:"";position:absolute;left:2px;top:11px;width:9px;height:9px;border-radius:50%;background:var(--bg);border:1px solid var(--green)}.tl li.past:before{background:var(--dim);border-color:var(--dim)}.tl li.next:before{background:var(--green);box-shadow:0 0 10px var(--green)}.tl time{font-size:11px;color:var(--dim)}.tl li.past span{color:var(--mute)}
.steps{padding-left:20px}.steps li{margin-bottom:10px}.steps p{margin:3px 0 0;color:var(--mute);font-size:13.5px;line-height:1.5}
.scorebox .big{--s:50;width:110px;height:110px;border-radius:50%;margin:0 auto 12px;display:grid;place-items:center;background:conic-gradient(var(--green) calc(var(--s)*1%),rgba(255,255,255,.07) 0);position:relative}.scorebox .big:after{content:"";position:absolute;inset:8px;border-radius:50%;background:var(--bg2)}.scorebox .big b,.scorebox .big small{position:relative;z-index:1;font-family:var(--mono)}.scorebox .big b{font-size:32px;margin-top:14px}.scorebox .big small{margin-top:-22px;color:var(--dim)}
.bar{display:grid;grid-template-columns:96px 1fr 44px;align-items:center;gap:8px;font-size:12px;margin:5px 0}.bar span{color:var(--mute)}.bar i{display:block;height:5px;background:var(--green);border-radius:3px}.bar em{font-family:var(--mono);font-style:normal;color:var(--dim);font-size:11px;text-align:right}
.share{display:flex;flex-wrap:wrap;gap:6px}.share a,.share button{border:1px solid var(--line2);padding:6px 10px;border-radius:3px;font-size:12px;color:var(--mute)}.share a:hover,.share button:hover{color:var(--ink);text-decoration:none}
.like{color:var(--green)!important;border-color:var(--green)!important}.like.on{background:rgba(62,224,143,.15)}
.mindmap{width:100%;height:640px;display:block}.mmtext{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px;color:var(--mute)}.mmtext ul{padding-left:16px;margin:4px 0}
.metric{display:grid;grid-template-columns:200px 1fr;gap:18px;align-items:center}.roc{width:200px;height:200px}.feat{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}.feat p{margin:4px 0;color:var(--mute);font-size:13px}
.tbl{width:100%;border-collapse:collapse}.tbl th,.tbl td{border-top:1px solid var(--line);padding:7px 6px;text-align:left;vertical-align:top}.tbl th{color:var(--dim);font-weight:400}
.sources{padding-left:18px;line-height:1.6}
@media (max-width:900px){.hero{height:920px}.hero-ov{left:14px;right:14px;top:70px;padding:10px;background:linear-gradient(rgba(7,11,10,.92),rgba(7,11,10,.75))}.hero .zoom{display:none}.viz{height:420px}.grid2,.cards.guides,.angles,.feat,.mmtext,.dgrid,.cal{grid-template-columns:1fr}.side{position:static}.tabs{display:none}.hero-ov{right:16px}.stats{flex-wrap:wrap;width:auto}.metric{grid-template-columns:1fr}.facts div{grid-template-columns:1fr}}
.pp-network{font-size:12px!important;color:var(--mute)!important;background:var(--bg2)!important;border-top:1px solid var(--line)!important}
