/* NULL//SEC — shared site styles (landing, legal, reset, admin) */
@import url("fonts/fonts.css");
:root{
  --font:"Archivo",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:"JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;
  --bg:#121311;--bg2:#0d0e0c;--panel:#1a1b19;--panel2:#22231f;--panel3:#2b2c28;
  --line:#34352f;--line2:#4a4b43;--text:#ebe9de;--muted:#9a988d;--dim:#6d6b62;
  --bone:#cfcdc1;--bone-ink:#141412;--accent:#ff5b3a;--accent-ink:#140a06;--accent-soft:rgba(255,91,58,.14);
  --acid:#d4ff3a;--acid-ink:#12160a;--acid-soft:rgba(212,255,58,.12);--led:#3dff7a;--warn:#ffb020;--err:#ff4b4b;
  --grid:rgba(235,233,222,.035);--pill:999px;--r:14px;--r-l:22px;--ease:cubic-bezier(.2,.8,.2,1)
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;
  background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:32px 32px;overflow-x:hidden}
a{color:inherit}
img,svg{max-width:100%;display:block}
h1,h2,h3{margin:0;line-height:1.05;font-weight:900;letter-spacing:-.015em;font-stretch:125%}
p{margin:0 0 1em}
:focus-visible{outline:2px solid var(--acid);outline-offset:3px;border-radius:4px}
.sr-only{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:fixed;left:12px;top:-60px;z-index:99;background:var(--acid);color:var(--acid-ink);padding:10px 14px;border-radius:8px;font-weight:700;text-decoration:none}
.skip:focus{top:12px}
.wrap{width:min(1180px,100% - 32px);margin:0 auto}
.lbl{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:500}
.mono{font-family:var(--mono)}
.muted{color:var(--muted)}.acc{color:var(--accent)}.ok{color:var(--led)}.acid{color:var(--acid)}
.wordmark{font-weight:900;font-stretch:125%;letter-spacing:.01em;white-space:nowrap;text-decoration:none}
.wordmark .slash{color:var(--accent);font-weight:300}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5em;min-height:46px;padding:0 22px;border-radius:var(--pill);border:1.5px solid var(--line2);
  background:transparent;color:var(--text);font-family:var(--mono);font-size:12.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;text-decoration:none;cursor:pointer;
  transition:transform .2s var(--ease),filter .2s,border-color .2s;white-space:nowrap}
.btn:hover{border-color:var(--text)}.btn:active{transform:translateY(1px)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.acid{background:var(--acid);border-color:var(--acid);color:var(--acid-ink)}
.btn.primary:hover,.btn.acid:hover{filter:brightness(1.08)}
.btn.sm{min-height:34px;padding:0 14px;font-size:11px}
.btn.danger{border-color:var(--err);color:var(--err)}
.btn[disabled]{opacity:.4;cursor:not-allowed}
.tag{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 9px;border-radius:var(--pill);border:1px solid var(--line2);font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;color:var(--muted);white-space:nowrap}
.tag.acc{border-color:var(--accent);color:var(--accent)}.tag.ok{border-color:var(--led);color:var(--led)}.tag.acid{background:var(--acid);border-color:var(--acid);color:var(--acid-ink)}
.tag.err{border-color:var(--err);color:var(--err)}.tag.fill{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-l);padding:24px}
.input,.select,textarea.input{width:100%;min-height:48px;padding:0 16px;border-radius:12px;background:var(--bg2);border:1.5px solid var(--line2);color:var(--text);font-family:var(--mono);font-size:15px}
textarea.input{padding:12px 16px;min-height:100px;resize:vertical;line-height:1.5}
.input:focus,.select:focus{outline:none;border-color:var(--acid);box-shadow:0 0 0 3px var(--acid-soft)}
.field{display:flex;flex-direction:column;gap:7px;margin:14px 0}
.hint{font-family:var(--mono);font-size:11.5px;color:var(--muted)}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.notice{padding:12px 16px;border-radius:12px;border-left:3px solid var(--accent);background:var(--accent-soft);margin:14px 0;font-size:14.5px}
.notice.ok{border-color:var(--led);background:color-mix(in srgb,var(--led) 12%,transparent)}
.notice.err{border-color:var(--err);background:color-mix(in srgb,var(--err) 12%,transparent)}
.site-head{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.site-head .wrap{display:flex;align-items:center;gap:20px;min-height:66px}
.site-head .wordmark{font-size:22px}
.site-nav{display:flex;gap:6px;margin-left:auto;align-items:center}
.site-nav a:not(.btn){font-family:var(--mono);font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;text-decoration:none;color:var(--muted);padding:8px 10px;border-radius:8px}
.site-nav a:not(.btn):hover{color:var(--text);background:var(--panel)}
@media (max-width:820px){.site-nav a:not(.btn){display:none}}
.site-foot{border-top:1px solid var(--line);padding:40px 0 60px;margin-top:80px;background:var(--bg2)}
.site-foot .wrap{display:grid;grid-template-columns:2fr 1fr 1fr;gap:28px}
.site-foot a{color:var(--muted);text-decoration:none;font-family:var(--mono);font-size:12px;letter-spacing:.06em;display:block;padding:4px 0}
.site-foot a:hover{color:var(--text)}
@media (max-width:700px){.site-foot .wrap{grid-template-columns:1fr}}
.legal{max-width:780px;margin:50px auto;padding:0 16px}
.legal h1{font-size:clamp(32px,6vw,52px);margin:10px 0 16px}
.legal h2{font-size:20px;margin:34px 0 10px;font-stretch:112%}
.legal p,.legal li{color:#d7d5ca;font-size:15.5px}
.legal table{width:100%;border-collapse:collapse;font-size:14px;margin:12px 0}
.legal th,.legal td{text-align:left;padding:10px;border-bottom:1px solid var(--line);vertical-align:top}
.legal th{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.tbl-wrap{overflow-x:auto}
.cookie{position:fixed;left:16px;right:16px;bottom:16px;z-index:50;max-width:560px;margin-left:auto;background:var(--panel2);border:1px solid var(--line2);border-radius:18px;padding:16px 18px;box-shadow:0 20px 60px rgba(0,0,0,.5);font-size:14px}
.cookie p{margin:0 0 10px}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}

/* ---- NULL mascot · comic illustration ---- */
.mascot{--m-shell:#e4e1d3;--m-shade:#aba898;--m-ink:#0b0b0a;--m-ring:var(--line2,#4a4b43);--m-acc:var(--accent,#ff5b3a);--m-eye:var(--acid,#d4ff3a);--m-led:var(--led,#3dff7a);--m-edge:var(--m-ink);--m-face:var(--m-shell);width:64px;height:64px;overflow:visible}
html[data-theme="bone"] .mascot{--m-shell:#f6f4ec;--m-shade:#b9b6a8}
html[data-theme="acid"] .mascot{--m-shell:#e3ecc4;--m-shade:#9fab78;--m-eye:#d4ff3a}
.mascot .ring{fill:none;stroke:var(--m-ring);stroke-width:1.2;stroke-dasharray:3 5;transform-origin:50px 52px}
.mascot .m-sat{fill:var(--m-acc);stroke:var(--m-ink);stroke-width:.8;stroke-dasharray:none}
.mascot .face,.mascot .m-shell,.mascot .m-torso{fill:var(--m-shell);stroke:var(--m-ink);stroke-width:2.2;stroke-linejoin:round}
.mascot .m-shade{fill:var(--m-shade)}
.mascot .m-dots{fill:url(#nsec-dots);opacity:.24}
.mascot .m-hl{fill:none;stroke:#fff;stroke-width:1.3;stroke-linecap:round;opacity:.8}
.mascot .m-hl-fill{fill:#fff;opacity:.72}
.mascot .m-seam{fill:none;stroke:var(--m-ink);stroke-width:.85;stroke-linecap:round;opacity:.7}
.mascot .m-dark,.mascot .m-plate,.mascot .m-collar{fill:#1b1c19;stroke:var(--m-ink);stroke-width:1.4}
.mascot .m-vent{stroke:var(--m-acc);stroke-width:1.1;stroke-linecap:round;fill:none}
.mascot .m-pleds circle{fill:var(--m-acc)}
.mascot .m-pleds circle:nth-child(2){fill:var(--m-led)}
.mascot .m-rivets circle{fill:var(--m-shade);stroke:var(--m-ink);stroke-width:.85}
.mascot .m-neck{fill:#2a2b27;stroke:var(--m-ink);stroke-width:1.4}
.mascot .m-emblem{fill:var(--m-acc);stroke:var(--m-ink);stroke-width:.6}
.mascot .m-ant-base{fill:var(--m-shade);stroke:var(--m-ink);stroke-width:1.4}
.mascot .ant{fill:none;stroke:var(--m-ink);stroke-width:1.5;stroke-linejoin:round;stroke-linecap:round}
.mascot .led{fill:var(--m-led);stroke:var(--m-ink);stroke-width:1.5}
.mascot .m-glint{fill:#fff;opacity:.9}
.mascot .m-spark{fill:none;stroke:var(--m-led);stroke-width:1.3;stroke-linecap:round}
.mascot .visor{fill:#0a0a09;stroke:var(--m-ink);stroke-width:2.2}
.mascot .m-bezel{fill:none;stroke:#30322b;stroke-width:1}
.mascot .m-scan{fill:url(#nsec-scan)}
.mascot .eyes{fill:var(--m-eye);stroke:var(--m-eye);filter:drop-shadow(0 0 2.2px var(--m-eye))}
.mascot .eyes > g{display:none}
.mascot .eyes .m-eglint{fill:#fff;stroke:none;opacity:.85}
.mascot .m-glare{fill:#fff;opacity:.11}
.mascot .m-grille{fill:#141512;stroke:var(--m-ink);stroke-width:1.4}
.mascot .mouth{fill:var(--m-acc);font-family:var(--mono,ui-monospace,monospace);font-size:8.6px;font-weight:800}
.mascot .m-cheek{fill:var(--m-acc);opacity:.42}
.mascot .m-burst{fill:var(--m-acc);opacity:.28;display:none}
.mascot .fx > g{display:none}
.mascot .m-drop{fill:#8fd8ff;stroke:var(--m-ink);stroke-width:1.1}
.mascot .m-crack{fill:none;stroke:#fff;stroke-width:.9;opacity:.6;stroke-linejoin:round}
.mascot .m-zap{fill:none;stroke:var(--err,#ff4b4b);stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round}
.mascot .m-puff{fill:#5d5e57;stroke:var(--m-ink);stroke-width:.8;opacity:.85}
.mascot .m-bub{fill:var(--m-shell);stroke:var(--m-ink);stroke-width:1.1}
.mascot .m-q{fill:var(--m-ink);font-family:var(--font,system-ui,sans-serif);font-weight:900;font-size:9px}
.mascot .m-star{fill:var(--m-eye);stroke:var(--m-ink);stroke-width:.8}
.mascot .m-motion{fill:none;stroke:var(--m-acc);stroke-width:1.3;stroke-linecap:round;opacity:.8}
.mascot .m-padlock{fill:var(--warn,#ffb020);stroke:var(--m-ink);stroke-width:1.2}
.mascot .m-shackle{fill:none;stroke:var(--m-ink);stroke-width:1.6}
.mascot .m-keyhole{fill:var(--m-ink)}
.mascot[data-state="idle"] .e-idle,.mascot[data-state="explaining"] .e-idle,.mascot[data-state="thinking"] .e-think,
.mascot[data-state="happy"] .e-happy,.mascot[data-state="success"] .e-happy,.mascot[data-state="celebrating"] .e-star,
.mascot[data-state="warning"] .e-warn,.mascot[data-state="error"] .e-x,.mascot[data-state="locked"] .e-lock{display:inline}
.mascot[data-state="warning"] .fx-warn,.mascot[data-state="error"] .fx-err,.mascot[data-state="thinking"] .fx-think,
.mascot[data-state="celebrating"] .fx-celeb,.mascot[data-state="celebrating"] .m-burst,.mascot[data-state="happy"] .fx-happy,
.mascot[data-state="success"] .fx-happy,.mascot[data-state="locked"] .fx-lock{display:inline}
.mascot[data-state="locked"] .m-pleds{display:none}
.mascot[data-state="success"],.mascot[data-state="happy"]{--m-led:var(--led,#3dff7a)}
.mascot[data-state="warning"]{--m-led:var(--warn,#ffb020);--m-eye:var(--warn,#ffb020)}
.mascot[data-state="error"]{--m-led:var(--err,#ff4b4b);--m-eye:var(--err,#ff4b4b)}
.mascot[data-state="locked"]{--m-led:#8a887e;--m-eye:#8a887e}
.mascot[data-state="celebrating"]{--m-eye:var(--m-acc)}
.mascot[data-state="thinking"]{--m-led:var(--m-acc)}
.mascot .body{transform-origin:50px 52px}
.mascot.mini .m-dots,.mascot.mini .m-seam,.mascot.mini .m-rivets,.mascot.mini .m-spark,.mascot.mini .ring{display:none}

.mascot .body{animation:float 4.2s ease-in-out infinite}
.mascot .ring{animation:spin 14s linear infinite}
.mascot[data-state="celebrating"] .ring{animation-duration:1.6s}
.mascot[data-state="celebrating"] .body{animation:hop .7s ease-in-out infinite}
.mascot[data-state="celebrating"] .m-burst{transform-origin:50px 50px;animation:spin 9s linear infinite}
.mascot .e-idle{transform-origin:50px 49.5px;animation:blinkEye 5.5s infinite}
.mascot .e-think circle{animation:tdot 1s infinite}
.mascot .e-think circle:nth-child(2){animation-delay:.15s}
.mascot .e-think circle:nth-child(3){animation-delay:.3s}
.mascot[data-state="error"] .body{animation:glitch .5s steps(2) 2}
.mascot .led{animation:ledp 2.4s ease-in-out infinite}
.mascot .m-spark{animation:ledp 1.2s steps(2) infinite}
.mascot .fx-warn{animation:drip 1.6s ease-in infinite}
.mascot .m-star{transform-box:fill-box;transform-origin:center;animation:twinkle 1s ease-in-out infinite}
.mascot .m-star:nth-child(2n){animation-delay:.35s}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes hop{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes blinkEye{0%,94%,100%{transform:scaleY(1)}96%{transform:scaleY(.1)}}
@keyframes tdot{0%,100%{opacity:.25;transform:translateY(0)}50%{opacity:1;transform:translateY(-3px)}}
@keyframes glitch{0%{transform:translate(2px,-1px)}50%{transform:translate(-2px,1px)}100%{transform:translate(0,0)}}
@keyframes ledp{50%{opacity:.35}}
@keyframes drip{0%{transform:translateY(0);opacity:1}80%{transform:translateY(5px);opacity:1}100%{transform:translateY(6px);opacity:0}}
@keyframes twinkle{50%{transform:scale(.55) rotate(20deg)}}
