:root{--paper:#f6f1e8;--panel:#fffdf8;--panel-2:#fbf6ec;--sunk:#efe7d6;--ink:#221c14;--ink-soft:#7c6c52;--ink-faint:#ab9c82;--line:#221c14;--bw:2.5px;--radius:12px;--radius-sm:8px;--radius-pill:999px;--shadow:3px 3px 0 var(--ink);--shadow-lg:5px 5px 0 var(--ink);--shadow-press:1px 1px 0 var(--ink);--accent:#5a5142;--accent-soft:#efe7d6;--patch:#e0552b;--patch-deep:#c4441f;--patch-soft:#fbe3d8;--juke:#7c5cf0;--juke-deep:#5b3fd4;--juke-soft:#e7e0fb;--map:#0f9b8a;--map-deep:#0b7a6c;--map-soft:#d4efe9;--maxw:460px;--font-display:"Baloo 2", system-ui, sans-serif;--font-sans:"Hanken Grotesk", system-ui, sans-serif;--font-mono:"Space Mono", ui-monospace, monospace}.hub-page{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--font-sans);color:var(--ink);background-color:var(--paper);background-image:radial-gradient(var(--ink-faint) .7px, transparent .8px);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;background-position:-4px -4px;background-size:20px 20px;justify-content:center;align-items:stretch;min-height:100vh;display:flex}.hub-page *,.hub-page :before,.hub-page :after{box-sizing:border-box}.hub-page .shell{width:100%;max-width:var(--maxw);background:var(--paper);border-left:var(--bw) solid var(--line);border-right:var(--bw) solid var(--line);flex-direction:column;min-height:100vh;display:flex;position:relative;overflow:hidden}@media (max-width:500px){.hub-page .shell{border-left:none;border-right:none}}.hub-page .screen{flex-direction:column;flex:1;min-height:100vh;display:flex}.hub-head>*,.tiles>.tile,.hub-foot,.login-center>*{opacity:1;transition:opacity .55s cubic-bezier(.2,.9,.3,1),transform .55s cubic-bezier(.2,.9,.3,1);transform:translateY(0)}.screen.pre .hub-head>*,.screen.pre .tiles>.tile,.screen.pre .hub-foot,.screen.pre .login-center>*{opacity:0;transform:translateY(12px)}.hub-head>:first-child{transition-delay:20ms}.hub-head>:nth-child(2){transition-delay:60ms}.hub-head>:nth-child(3){transition-delay:.1s}.hub-head>:nth-child(4){transition-delay:.14s}.tiles>.tile:first-child{transition-delay:.2s}.tiles>.tile:nth-child(2){transition-delay:.27s}.tiles>.tile:nth-child(3){transition-delay:.34s}.hub-foot{transition-delay:.42s}.login-center>:first-child{transition-delay:40ms}.login-center>:nth-child(2){transition-delay:.12s}.login-center>:nth-child(3){transition-delay:.2s}@media (prefers-reduced-motion:reduce){.hub-head>*,.tiles>.tile,.hub-foot,.login-center>*{transition:none}}.hub-head{text-align:center;flex-direction:column;align-items:center;gap:15px;padding:44px 26px 26px;display:flex}.suite-glyph{border:var(--bw) solid var(--line);background:var(--panel);width:50px;height:50px;box-shadow:var(--shadow);border-radius:13px;flex:none;grid-template-rows:1fr 1fr;grid-template-columns:1fr 1fr;gap:5px;padding:11px;display:grid}.suite-glyph i{background:var(--ink);border-radius:3px;display:block}.suite-glyph i:first-child{background:var(--patch)}.suite-glyph i:nth-child(4){background:var(--ink-faint)}.hub-head .wordmark{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink);margin:0;font-size:42px;font-weight:800;line-height:.95}.hub-head .wordmark .dot{color:var(--patch)}.hub-head .domain{font-family:var(--font-mono);letter-spacing:.02em;color:var(--ink-faint);margin-top:-8px;font-size:11.5px;font-weight:700}.hub-head .tagline{color:var(--ink-soft);text-wrap:balance;max-width:28ch;margin:0;font-size:14.5px;font-weight:600;line-height:1.4}.tiles{flex-direction:column;gap:14px;padding:6px 18px 8px;display:flex}.tile{--acc:var(--ink-faint);--acc-deep:var(--ink);--acc-soft:var(--accent-soft);text-align:left;border:var(--bw) solid var(--line);border-radius:var(--radius);background:var(--panel);width:100%;box-shadow:var(--shadow-lg);cursor:pointer;font-family:var(--font-sans);color:var(--ink);align-items:center;gap:15px;padding:16px 16px 16px 19px;text-decoration:none;transition:transform .13s cubic-bezier(.2,.9,.3,1),box-shadow .13s;display:flex;position:relative;overflow:hidden}.tile:before{content:"";background:var(--acc);width:6px;position:absolute;top:0;bottom:0;left:0}.tile-icon{border:2.5px solid var(--line);background:var(--acc-soft);width:54px;height:54px;color:var(--acc-deep);border-radius:13px;flex:none;place-items:center;display:grid}.tile-icon svg{width:28px;height:28px;display:block}.tile-body{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.tile-name{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);font-size:22px;font-weight:800;line-height:1}.tile-name .dle{color:var(--acc-deep)}.tile-tag{color:var(--ink-soft);text-wrap:pretty;font-size:12.8px;font-weight:600;line-height:1.32}.tile-status{flex-direction:column;flex:none;align-items:flex-end;gap:6px;display:flex}.play-pill{font-family:var(--font-display);color:#fff;background:var(--acc);border:2.5px solid var(--line);border-radius:var(--radius-pill);box-shadow:var(--shadow);white-space:nowrap;align-items:center;gap:6px;padding:6px 13px 6px 14px;font-size:14px;font-weight:800;display:inline-flex}.play-pill svg{width:15px;height:15px}.soft-pill{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;border-radius:var(--radius-pill);white-space:nowrap;align-items:center;gap:5px;padding:4px 10px;font-size:10.5px;font-weight:700;display:inline-flex}.soft-pill svg{width:12px;height:12px}.soft-pill.soon{color:var(--acc-deep);background:var(--acc-soft);border:2px solid var(--acc-deep)}.soft-pill.planned{color:var(--ink-faint);border:2px dashed var(--ink-faint);background:0 0}.tile.live:hover{box-shadow:6px 7px 0 var(--ink);transform:translate(-1px,-2px)}.tile.live:active{box-shadow:var(--shadow-press);transform:translate(2px,2px)}.tile.live:focus-visible{outline:3px solid var(--acc);outline-offset:3px}.tile.soon{background:var(--panel-2)}.tile.soon:hover{box-shadow:6px 7px 0 var(--ink);transform:translate(-1px,-1px)}.tile.soon:active{box-shadow:var(--shadow);transform:translate(1px,1px)}.tile.soon:focus-visible{outline:3px solid var(--acc);outline-offset:3px}.tile.planned{border-style:dashed;border-color:var(--ink-faint);box-shadow:none;background:0 0}.tile.planned:before{background:var(--ink-faint);width:5px}.tile.planned .tile-icon{border-color:var(--ink-faint);color:var(--ink-faint);background:0 0}.tile.planned .tile-name{color:var(--ink-soft)}.tile.planned .tile-name .dle,.tile.planned .tile-tag{color:var(--ink-faint)}.tile.planned:hover{border-color:var(--ink-soft);transform:translate(-1px,-1px)}.tile.planned:active{transform:translate(1px,1px)}.tile.planned:focus-visible{outline:3px solid var(--ink-soft);outline-offset:3px}.tile.launching{pointer-events:none}.tile.launching:after{content:"";background:linear-gradient(100deg,#0000 30%,#ffffff80 50%,#0000 70%) 0 0/220% 100%;animation:.9s linear infinite shimmer;position:absolute;inset:0}@keyframes shimmer{0%{background-position:120% 0}to{background-position:-120% 0}}.hub-foot{flex-direction:column;align-items:center;gap:15px;margin-top:auto;padding:22px 22px 30px;display:flex}.foot-perf{border:none;border-top:2px dotted var(--ink-faint);width:100%;height:0}.reset-hint{color:var(--ink-soft);align-items:center;gap:8px;font-size:12.5px;font-weight:600;display:inline-flex}.reset-hint svg{width:14px;height:14px;color:var(--ink-faint)}.reset-hint b{font-family:var(--font-mono);color:var(--ink);letter-spacing:-.01em;font-weight:700}.hub-foot .foot-links{align-items:center;gap:8px;display:flex}.hub-foot .foot-btn{border:2px solid var(--ink-faint);border-radius:var(--radius-pill);background:var(--panel);min-width:34px;height:34px;color:var(--ink-soft);box-shadow:var(--shadow);justify-content:center;align-items:center;gap:6px;padding:0 10px;text-decoration:none;transition:color .15s,border-color .15s;display:inline-flex}.hub-foot .foot-btn:hover,.hub-foot .foot-btn:focus-visible{color:var(--ink);border-color:var(--ink);outline:none}.hub-foot .foot-btn:active{box-shadow:var(--shadow-press);transform:translate(1px,1px)}.hub-foot .foot-btn svg{width:17px;height:17px;display:block}.hub-foot .foot-kofi{background:var(--ink);border-color:var(--ink);color:var(--panel);font-family:var(--font-display);letter-spacing:.01em;padding:0 13px;font-size:13px;font-weight:800}.hub-foot .foot-kofi:hover,.hub-foot .foot-kofi:focus-visible{color:#fff;background:#000;border-color:#000}.foot-row{grid-template-columns:1fr auto 1fr;align-items:center;width:100%;display:grid}.foot-row .credit{grid-column:2}.foot-row .admin-link{grid-column:3;justify-self:end}.credit{color:var(--ink-faint);font-size:11.5px;font-weight:600}.credit a{color:var(--ink-soft);font-weight:700;text-decoration:none}.credit a:hover{color:var(--ink);text-decoration:underline}.admin-link{border:2px solid var(--ink-faint);border-radius:var(--radius-pill);background:var(--panel);height:32px;color:var(--ink-soft);cursor:pointer;font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;box-shadow:var(--shadow);align-items:center;padding:0 10px;font-size:11px;font-weight:700;text-decoration:none;transition:color .15s,border-color .15s;display:inline-flex}.admin-link svg{flex:none;width:13px;height:13px}.admin-link .lbl{white-space:nowrap;opacity:0;max-width:0;transition:max-width .22s,opacity .18s,margin .22s;overflow:hidden}.admin-link:hover,.admin-link:focus-visible{color:var(--ink);border-color:var(--ink);outline:none}.admin-link:hover .lbl,.admin-link:focus-visible .lbl{opacity:1;max-width:60px;margin-left:6px}.admin-link:active{box-shadow:var(--shadow-press);transform:translate(1px,1px)}.login{flex-direction:column;flex:1;padding:18px 26px 30px;display:flex}.login-back{cursor:pointer;color:var(--ink-soft);font-family:var(--font-sans);background:0 0;border:none;align-self:flex-start;align-items:center;gap:6px;padding:8px 4px;font-size:13.5px;font-weight:700;text-decoration:none;display:inline-flex}.login-back svg{width:16px;height:16px}.login-back:hover{color:var(--ink)}.login-back:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:6px}.login-center{flex-direction:column;flex:1;justify-content:center;gap:22px;width:100%;max-width:340px;margin:0 auto;padding-bottom:8vh;display:flex}.login-mark{text-align:center;flex-direction:column;align-items:center;gap:16px;display:flex}.login-titles{flex-direction:column;align-items:center;gap:7px;display:flex}.login-lock{background:var(--panel);border:var(--bw) solid var(--line);width:60px;height:60px;box-shadow:var(--shadow-lg);color:var(--ink);border-radius:14px;place-items:center;display:grid}.login-lock svg{width:28px;height:28px}.login-title{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);white-space:nowrap;margin:0;font-size:26px;font-weight:800;line-height:1}.login-sub{color:var(--ink-soft);font-size:13px;font-weight:600;font-family:var(--font-mono);letter-spacing:.01em;margin:0}.login-form{flex-direction:column;gap:12px;display:flex}.pw-field{background:var(--panel);border:var(--bw) solid var(--line);border-radius:var(--radius);height:54px;box-shadow:var(--shadow);align-items:center;gap:10px;padding:0 12px;transition:box-shadow .1s;display:flex}.pw-field:focus-within{box-shadow:0 0 0 3px #e0552b4d, var(--shadow)}.pw-field .sicon{color:var(--ink-soft);flex:none;place-items:center;display:grid}.pw-field .sicon svg{width:18px;height:18px}.pw-field input{font-family:var(--font-sans);color:var(--ink);letter-spacing:.04em;background:0 0;border:none;outline:none;flex:1;min-width:0;padding:0;font-size:16px;font-weight:600}.pw-field input::placeholder{color:var(--ink-faint);letter-spacing:0;font-weight:600}.pw-field .eye{cursor:pointer;color:var(--ink-soft);background:0 0;border:none;place-items:center;padding:6px;display:grid}.pw-field .eye:hover{color:var(--ink)}.pw-field .eye svg{width:18px;height:18px}.pw-field.err{box-shadow:0 0 0 3px #c0392b33, var(--shadow);border-color:#c0392b}.pw-field.shake{animation:.4s cubic-bezier(.36,.07,.19,.97) both shake}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}.pw-error{color:#c0392b;align-items:center;gap:6px;min-height:16px;padding-left:2px;font-size:12.5px;font-weight:700;display:flex}.pw-error svg{flex:none;width:14px;height:14px}.btn-enter{width:100%;height:52px;font-family:var(--font-display);letter-spacing:.01em;color:var(--panel);background:var(--ink);border:var(--bw) solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);cursor:pointer;justify-content:center;align-items:center;gap:8px;font-size:16.5px;font-weight:800;transition:transform 60ms,box-shadow 60ms;display:flex}.btn-enter:hover:not(:disabled){background:#000}.btn-enter:active:not(:disabled){box-shadow:var(--shadow-press);transform:translate(2px,2px)}.btn-enter:focus-visible{outline:3px solid var(--patch);outline-offset:2px}.btn-enter:disabled{opacity:.55;cursor:progress}.btn-enter svg{width:18px;height:18px}.btn-enter.ok{background:var(--map);border-color:var(--map-deep);color:#fff}.spin{border:2.5px solid #ffffff4d;border-top-color:var(--panel);border-radius:50%;width:17px;height:17px;animation:.6s linear infinite rot}@keyframes rot{to{transform:rotate(360deg)}}.login-foot{text-align:center;color:var(--ink-faint);font-size:11px;font-weight:600;font-family:var(--font-mono);letter-spacing:.02em;justify-content:center;align-items:center;gap:6px;display:flex}.login-foot svg{width:12px;height:12px}.toast{background:var(--ink);color:var(--panel);border:2.5px solid var(--line);border-radius:var(--radius-pill);z-index:90;box-shadow:var(--shadow-lg);max-width:calc(var(--maxw) - 40px);align-items:center;gap:9px;padding:11px 17px;font-size:13.5px;font-weight:700;animation:.3s cubic-bezier(.2,.9,.3,1.1) both toastIn;display:inline-flex;position:fixed;bottom:26px;left:50%;transform:translate(-50%)}.toast .tdot{background:var(--paper);border-radius:50%;flex:none;width:9px;height:9px}.toast.patch .tdot{background:var(--patch)}.toast.juke .tdot{background:var(--juke)}.toast.map .tdot{background:var(--map)}@keyframes toastIn{0%{opacity:0;transform:translate(-50%,14px)}to{opacity:1;transform:translate(-50%)}}.sr-only{clip:rect(0,0,0,0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){.tile.launching:after{animation:none}.spin{animation-duration:1.4s}}
