@font-face{font-family:Quicksand;src:url(/fonts/quicksand-latin.woff2) format("woff2");font-weight:300 700;font-style:normal;font-display:swap}
:root{--bg:#0b0d14;--panel:#151927;--text:#eef0f7;--muted:#aab1c6;--accent:#2fd4c0;--on-accent:#06211d;--warn:#f5b85a;--v:#8b7bff;--ok:#4ade9b;--pink:#ff7ab6;--card:rgba(255,255,255,.055);--line:rgba(255,255,255,.09);--shadow:0 10px 30px rgba(0,0,0,.35);--r:22px;--tabh:68px;color-scheme:dark}
@media (prefers-color-scheme:light){:root{--bg:#f4f5fb;--panel:#ffffff;--text:#161a2e;--muted:#4a526c;--accent:#0a7b6f;--on-accent:#ffffff;--v:#6d5cf0;--ok:#12805a;--pink:#d63b83;--card:rgba(255,255,255,.72);--line:rgba(20,24,50,.1);--shadow:0 10px 28px rgba(40,50,110,.12);color-scheme:light}}
:root[data-theme=dark]{--bg:#0b0d14;--panel:#151927;--text:#eef0f7;--muted:#aab1c6;--accent:#2fd4c0;--on-accent:#06211d;--v:#8b7bff;--ok:#4ade9b;--pink:#ff7ab6;--card:rgba(255,255,255,.055);--line:rgba(255,255,255,.09);--shadow:0 10px 30px rgba(0,0,0,.35);color-scheme:dark}
:root[data-theme=light]{--bg:#f4f5fb;--panel:#ffffff;--text:#161a2e;--muted:#4a526c;--accent:#0a7b6f;--on-accent:#ffffff;--v:#6d5cf0;--ok:#12805a;--pink:#d63b83;--card:rgba(255,255,255,.72);--line:rgba(20,24,50,.1);--shadow:0 10px 28px rgba(40,50,110,.12);color-scheme:light}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 Quicksand,ui-rounded,"SF Pro Rounded",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;min-height:100vh;overflow-x:hidden}
a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}
h1,h2,h3,p{margin:0}
.skip{position:absolute;left:-999px}.skip:focus{left:12px;top:12px;z-index:99;background:var(--panel);padding:8px 12px;border-radius:10px}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:10px}
.muted{color:var(--muted)}
.aurora{position:fixed;inset:0;z-index:-1;overflow:hidden;background:var(--bg)}
.aurora i{position:absolute;width:60vmax;height:60vmax;border-radius:50%;filter:blur(90px);opacity:.28}
.aurora i:nth-child(1){background:var(--v);left:-20vmax;top:-25vmax}
.aurora i:nth-child(2){background:var(--accent);right:-25vmax;top:10vmax;opacity:.18}
.aurora i:nth-child(3){background:var(--pink);left:10vmax;bottom:-35vmax;opacity:.12}
.center{display:grid;place-items:center;min-height:100vh;padding:20px}
.card,.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.signin{width:min(92vw,380px);text-align:center;padding:32px 24px}
.signin svg{display:block;margin:0 auto 12px}
.signin h1{font-size:1.7rem;margin-bottom:4px}
.btn{display:inline-flex;align-items:center;justify-content:center;margin-top:16px;padding:12px 20px;border-radius:14px;background:var(--accent);color:var(--on-accent);font-weight:700;min-height:44px}
.shell{display:block}
.rail{display:none}
.main{max-width:760px;margin:0 auto;padding:0 16px calc(var(--tabh) + 28px + env(safe-area-inset-bottom))}
.bar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;margin:0 -16px;padding:calc(10px + env(safe-area-inset-top)) 16px 10px;background:linear-gradient(var(--bg) 55%,transparent)}
.logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:1.15rem}
.bar-title{flex:1;font-size:1.05rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-tools{display:flex;gap:8px;margin-left:auto;flex-shrink:0}
.icon-btn{width:44px;height:44px;border-radius:14px;border:1px solid var(--line);background:var(--card);display:grid;place-items:center;transition:transform .15s}
.icon-btn:active{transform:scale(.94)}
.icon-btn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ghost{border:1px solid var(--line);background:var(--card);border-radius:999px;padding:8px 14px;font-weight:700;font-size:.88rem;min-height:44px}
.tabs{position:fixed;left:12px;right:12px;bottom:calc(10px + env(safe-area-inset-bottom));z-index:30;height:var(--tabh);display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:8px;border-radius:26px;background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);max-width:520px;margin:0 auto}
nav a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:44px;border-radius:18px;color:var(--muted);font-size:.74rem;font-weight:700}
nav svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
nav a[aria-current]{color:var(--text);background:var(--card);box-shadow:inset 0 0 0 1px var(--line)}
.banner{position:sticky;top:0;z-index:40;text-align:center;font-size:.82rem;font-weight:700;padding:6px 12px;background:var(--warn);color:#241a00}
section{margin-top:26px}
.sec-h{display:flex;align-items:baseline;justify-content:space-between;margin:0 2px 12px}
.sec-h h2{font-size:1.08rem;font-weight:700}
.sec-h a,.sec-h span{font-size:.85rem;color:var(--muted);font-weight:700}
.now{position:relative;overflow:hidden;padding:18px;margin-top:6px}
.now::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--v),var(--accent))}
.live{display:inline-flex;align-items:center;gap:8px;font-size:.76rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--accent)}
.live i{width:9px;height:9px;border-radius:50%;background:var(--accent);position:relative}
.live i::after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--accent);opacity:0}
.now h2{font-size:1.4rem;line-height:1.2;margin:10px 0 4px;font-weight:700}
.now .sub{color:var(--muted);font-size:.92rem}
.steps{display:flex;gap:6px;margin:16px 0 6px}
.steps b{flex:1;height:6px;border-radius:4px;background:var(--line);overflow:hidden;position:relative}
.steps b.done{background:linear-gradient(90deg,var(--v),var(--accent))}
.steps b.cur::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,var(--v),var(--accent));opacity:.55}
.step-l{display:flex;justify-content:space-between;color:var(--muted);font-size:.76rem;font-weight:700}
.step-l .on{color:var(--text)}
.wave{display:flex;align-items:flex-end;gap:3px;height:22px;position:absolute;right:18px;top:18px}
.wave i{width:3px;height:22px;border-radius:2px;background:linear-gradient(var(--accent),var(--v));transform:scaleY(.3);transform-origin:bottom}
.carousel{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -16px;padding:2px 16px 14px;scrollbar-width:none}
.carousel::-webkit-scrollbar{display:none}
.pcard{position:relative;flex:0 0 78%;max-width:320px;scroll-snap-align:center;padding:18px;overflow:hidden;display:flex;flex-direction:column;gap:14px}
.pcard::before,.phero::before{content:"";position:absolute;width:180px;height:180px;right:-60px;top:-70px;border-radius:50%;background:var(--ac);opacity:.26;filter:blur(30px)}
.mono{width:46px;height:46px;border-radius:15px;display:grid;place-items:center;font-weight:800;font-size:1.1rem;color:#fff;background:linear-gradient(135deg,var(--ac),var(--ac2));text-shadow:0 1px 2px rgba(0,0,0,.35)}
.pcard h3{font-size:1.18rem;line-height:1.2;font-weight:700}
.ver{font-size:2rem;font-weight:800;letter-spacing:-.5px;line-height:1;background:linear-gradient(135deg,var(--ac),var(--ac2));-webkit-background-clip:text;background-clip:text;color:transparent}
.meta{display:flex;flex-wrap:wrap;gap:8px}
.pill{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:4px 10px;font-size:.78rem;font-weight:700;background:var(--card);border:1px solid var(--line);color:var(--muted)}
.pill i{width:7px;height:7px;border-radius:50%;background:var(--ok)}
.pill.warn i{background:var(--warn)}
.spark{width:100%;height:42px;display:block}
.spark path{fill:none;stroke:var(--ac);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.spark circle{fill:var(--ac2)}
.dots{display:flex;justify-content:center;gap:6px}
.dots i{width:6px;height:6px;border-radius:50%;background:var(--line)}.dots i.on{width:18px;background:var(--muted)}
.chips{display:flex;gap:8px;overflow-x:auto;margin:0 -16px 14px;padding:0 16px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chips button{flex:none}
.chips button[aria-pressed=true]{background:var(--text);color:var(--bg);border-color:transparent}
.day{font-size:.78rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:20px 2px 10px}
.feed{list-style:none;margin:0;padding:0;position:relative}
.feed::before{content:"";position:absolute;left:21px;top:8px;bottom:8px;width:2px;background:var(--line)}
.ev{position:relative;display:flex;gap:14px;padding:8px 0}
.ic{flex:none;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--panel);border:2px solid var(--c);color:var(--c);position:relative;z-index:1}
.ic svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ev .body{flex:1;min-width:0;padding:2px 0}
.ev .t{font-weight:700;line-height:1.3}
.ev .s{display:flex;flex-wrap:wrap;gap:6px 10px;color:var(--muted);font-size:.84rem;margin-top:2px;font-weight:600}
.tag{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;color:var(--muted);background:var(--card);border:1px solid var(--line);border-radius:8px;padding:1px 7px}
.k-release{--c:var(--ok)}.k-preview{--c:var(--v)}.k-design{--c:var(--pink)}.k-backup{--c:var(--warn)}.k-refresh{--c:var(--accent)}.k-project{--c:var(--accent)}.k-work{--c:var(--v)}.k-issue{--c:var(--warn)}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.stat{padding:14px 12px;text-align:center}
.stat b{display:block;font-size:1.6rem;font-weight:800;line-height:1.1}
.stat span{font-size:.76rem;color:var(--muted);font-weight:700}
.phero{padding:20px;position:relative;overflow:hidden}
.phero .ver{font-size:3rem;margin:12px 0 6px}
.phero p{color:var(--muted);font-size:.92rem;max-width:46ch}
.back{display:inline-flex;align-items:center;gap:4px;color:var(--muted);font-weight:700;font-size:.88rem;min-height:44px}
.cad{padding:16px;margin-top:12px}
.cad svg{width:100%;height:96px;display:block}
.cad .axis{display:flex;justify-content:space-between;font-size:.74rem;color:var(--muted);font-weight:700;margin-top:6px}
.bar-r{fill:var(--ac);transform-origin:bottom;transform-box:fill-box}
.bar-r.z{fill:var(--line)}
.vlist{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.vrow{display:flex;align-items:center;gap:14px;padding:14px 16px}
.vrow .vt{font-weight:800;font-size:1.1rem}
.vrow .cur{font-size:.7rem;font-weight:800;color:#fff;background:linear-gradient(135deg,var(--ac),var(--ac2));padding:2px 8px;border-radius:999px;margin-left:8px;vertical-align:2px;text-shadow:0 1px 2px rgba(0,0,0,.35)}
.vrow .vs{color:var(--muted);font-size:.84rem;font-weight:600;display:flex;gap:10px;flex-wrap:wrap;margin-top:2px}
.vrow .vtxt{flex:1}
.issues{display:flex;flex-wrap:wrap;gap:8px}
.issue{padding:10px 14px;display:flex;gap:8px;align-items:center;font-weight:700;font-size:.9rem;min-height:44px}
.empty{padding:18px;text-align:center;color:var(--muted);font-weight:600}
dialog{width:min(92vw,560px);max-height:80vh;border:1px solid var(--line);border-radius:24px;background:var(--panel);color:var(--text);padding:16px;box-shadow:0 30px 80px rgba(0,0,0,.5)}
dialog::backdrop{background:rgba(5,7,14,.6)}
.sform{display:flex;gap:8px}
#sq{flex:1;min-height:44px;border-radius:14px;border:1px solid var(--line);background:var(--card);color:var(--text);padding:0 14px;font:inherit}
.results{list-style:none;margin:8px 0 0;padding:0;overflow:auto;max-height:50vh}
.results li{padding:10px 4px;border-bottom:1px solid var(--line)}
.results a{display:inline-block;min-height:24px}
select{min-height:44px;border-radius:12px;border:1px solid var(--line);background:var(--card);color:var(--text);padding:0 10px;font:inherit}
.skeleton{height:220px;border-radius:var(--r);margin-top:12px;background:var(--card);border:1px solid var(--line)}
.signout{display:inline-flex;align-items:center;min-height:44px;font-size:.84rem;color:var(--muted);font-weight:700}
@media (prefers-reduced-motion:no-preference){
.aurora i{animation:drift 26s ease-in-out infinite alternate}
.aurora i:nth-child(2){animation-delay:-9s}.aurora i:nth-child(3){animation-delay:-17s}
.live i::after{animation:ping 1.8s ease-out infinite}
.wave i{animation:bar 1.2s ease-in-out infinite}
.wave i:nth-child(2n){animation-delay:-.4s}.wave i:nth-child(3n){animation-delay:-.8s}.wave i:nth-child(5n){animation-delay:-.2s}
.idle .wave i,.idle .live i::after{animation:none}
.steps b.cur::after{animation:sweep 1.6s ease-in-out infinite}
.enter{animation:fade .35s ease-out both}
.ev{animation:in .5s both;animation-delay:calc(var(--i,0)*50ms)}
.ev.active .ic::after{content:"";position:absolute;inset:-5px;border-radius:50%;border:2px solid var(--c);animation:ping 1.8s ease-out infinite}
.bar-r{animation:grow .6s both;animation-delay:calc(var(--i)*45ms)}
.spark{animation:fade .8s .2s both}
.pcard,.stat{animation:fade .45s both}
.icon-btn:active,.pcard:active{transform:scale(.97)}
.pcard{transition:transform .2s}
@keyframes drift{to{transform:translate3d(6vmax,4vmax,0) scale(1.1)}}
@keyframes ping{to{transform:scale(3.2);opacity:0}}
@keyframes sweep{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
@keyframes bar{50%{transform:scaleY(1)}}
@keyframes in{from{opacity:0;transform:translateY(10px)}}
@keyframes grow{from{transform:scaleY(0)}}
@keyframes fade{from{opacity:0;transform:translateY(8px)}}
}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media (min-width:900px){
:root{--tabh:0px}
.tabs,.m-only{display:none!important}
.shell{display:grid;grid-template-columns:230px 1fr;min-height:100vh}
.rail{display:flex;flex-direction:column;gap:22px;padding:24px 16px;position:sticky;top:0;height:100vh;border-right:1px solid var(--line)}
.rail nav{display:grid;gap:6px}
.rail nav a{flex-direction:row;justify-content:flex-start;gap:12px;padding:12px 14px;font-size:.95rem}
.rail-foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between}
.main{max-width:1040px;width:100%;padding:0 32px 48px}
.bar{margin:0 -32px;padding-left:32px;padding-right:32px;background:none}
.carousel{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));overflow:visible;margin:0;padding:2px 0 8px}
.pcard{flex:none;max-width:none}
.dots{display:none}
.home-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:28px;align-items:start}
.vlist{grid-template-columns:1fr 1fr}
}
@media (prefers-color-scheme:light){.aurora{opacity:.45}}
:root[data-theme=light] .aurora{opacity:.45}
:root[data-theme=dark] .aurora{opacity:.7}
[hidden]{display:none!important}
.signin{background:var(--panel)}
/* richer project pages: links, stack, code, data */
.links{display:grid;gap:10px}
.linkrow{display:flex;align-items:center;gap:12px;padding:12px 14px;min-height:56px;transition:transform .2s}
.linkrow:active{transform:scale(.98)}
.li-ic{flex:none;width:40px;height:40px;border-radius:13px;display:grid;place-items:center;background:linear-gradient(135deg,var(--ac,#8b7bff),var(--ac2,#2fd4c0));color:#fff}
.li-ic svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.li-ic.big{width:52px;height:52px;border-radius:16px}
.li-ic.big svg{width:25px;height:25px}
.li-t{font-weight:700}
.li-u{flex:1;min-width:0;text-align:right;color:var(--muted);font-size:.78rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.li-go{color:var(--muted);font-size:1.2rem;font-weight:700}
.stack{padding:14px;display:flex;flex-wrap:wrap;gap:8px}
.stchip{display:inline-flex;align-items:center;gap:7px;border-radius:999px;padding:6px 12px;font-size:.82rem;font-weight:700;background:var(--card);border:1px solid var(--line)}
.stchip i{width:8px;height:8px;border-radius:50%;background:var(--c)}
.codec{padding:16px}
.codenums{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
.cn{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:12px;text-align:center}
.cn b{display:block;font-size:1.7rem;font-weight:800;line-height:1.1;background:linear-gradient(135deg,var(--ac,#8b7bff),var(--ac2,#2fd4c0));-webkit-background-clip:text;background-clip:text;color:transparent}
.cn span{font-size:.74rem;color:var(--muted);font-weight:700}
.langbar{display:flex;height:12px;border-radius:8px;overflow:hidden;background:var(--line)}
.langseg{display:block;background:var(--c);width:var(--w);transform-origin:left;transform-box:fill-box}
.legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:10px}
.lg{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;color:var(--muted);font-weight:700}
.lg i{width:9px;height:9px;border-radius:3px}
.lg b{color:var(--text);font-weight:800}
.datac{padding:16px;display:flex;gap:14px;align-items:flex-start}
.datac h3{font-size:1.02rem;font-weight:800;margin:2px 0 6px}
.datac ul{margin:0;padding-left:18px;color:var(--muted);font-size:.88rem;font-weight:600}
.datac li{margin:3px 0}
@media (prefers-reduced-motion:no-preference){
.langseg{animation:seggrow .7s cubic-bezier(.2,.7,.2,1) both;animation-delay:calc(var(--i)*90ms)}
.stchip{animation:fade .45s both;animation-delay:calc(var(--i)*55ms)}
.linkrow{animation:fade .45s both}
@keyframes seggrow{from{transform:scaleX(0)}}
}
@media (min-width:900px){
.links{grid-template-columns:1fr 1fr}
}
