:root{--bg:#0d1128;--bg2:#141a3a;--panel:#171d40;--line:#2b3369;--ink:#eceeff;--mute:#9199c9;--teal:#5eead4;--vio:#a78bfa;--amb:#fbbf24;--bad:#fb7185;--ok:#86efac;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
*,*::before,*::after{box-sizing:inherit}
html{scroll-padding-top:env(safe-area-inset-top,0px)}
body{margin:0;background:radial-gradient(1200px 600px at 80% -10%,#262b69 0,transparent 60%),radial-gradient(900px 500px at -10% 110%,#173a56 0,transparent 55%),var(--bg);color:var(--ink);font:400 16px/1.55 "Instrument Sans",system-ui,sans-serif;min-height:100vh}
h1,h2,h3{font-family:"Bricolage Grotesque",system-ui,sans-serif;margin:0;line-height:1.1}
.wrap{max-width:1180px;margin:0 auto;padding:28px 20px 48px}
header{display:flex;flex-wrap:wrap;gap:18px 40px;align-items:flex-end;justify-content:space-between;margin-bottom:26px}
header h1{font-size:clamp(34px,6vw,60px);font-weight:800;letter-spacing:-.02em}
header h1 span{background:linear-gradient(90deg,var(--teal),var(--vio));-webkit-background-clip:text;background-clip:text;color:transparent}
header p{margin:8px 0 0;color:var(--mute);max-width:46ch}
nav{display:flex;gap:8px;flex-wrap:wrap}
nav a{display:inline-block;text-decoration:none;white-space:nowrap;font:600 15px "Instrument Sans";color:var(--mute);background:transparent;border:1px solid var(--line);border-radius:999px;padding:9px 18px;cursor:pointer;transition:.2s}
nav a.on{color:#0d1128;background:linear-gradient(90deg,var(--teal),var(--vio));border-color:transparent}
nav button:disabled{opacity:.4;cursor:not-allowed}
nav a:not(.on):hover{color:var(--ink);border-color:var(--vio)}
a:focus-visible,button:focus-visible,input:focus-visible{outline:2px solid var(--amb);outline-offset:2px}
.grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:20px}
@media(max-width:900px){.grid{grid-template-columns:1fr}}
.card{background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.015));border:1px solid var(--line);border-radius:20px;padding:20px;backdrop-filter:blur(6px)}
.stage{min-height:420px;display:flex;flex-direction:column}
.stage h2{font-size:22px;margin-bottom:4px}
.stage .sub{color:var(--mute);font-size:14px;margin-bottom:12px}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.chip{font-size:13px;padding:3px 10px;border-radius:8px;background:#202858;color:var(--mute)}
.chip b{color:var(--teal);font-weight:600}
.canvas{flex:1;display:flex;align-items:center;overflow-x:auto;padding:18px 4px;min-height:260px;background-image:radial-gradient(#2b3369 1px,transparent 1px);background-size:22px 22px;border-radius:14px;margin-top:8px}
.hidden{display:none!important}
/* linked list */
#llTrack{display:flex;flex-direction:column;align-items:flex-start;padding:0 18px;margin:auto 0}
.nodewrap{display:flex;flex-direction:column;align-items:center;flex:none}
.tags{height:22px;display:flex;gap:4px}
.tag{font:700 11px "Bricolage Grotesque";padding:2px 8px;border-radius:6px;color:#0d1128}
.tag.h{background:var(--amb)}.tag.t{background:var(--vio)}
.node{display:flex;height:56px;border-radius:14px;overflow:hidden;border:1.5px solid #6d74d8;box-shadow:0 10px 30px -10px #6d74d8aa;transition:.25s}
.val{min-width:62px;padding:0 14px;display:grid;place-items:center;font:800 22px "Bricolage Grotesque";background:linear-gradient(145deg,#3d42a8,#6a44c4)}
.ptr{width:34px;display:grid;place-items:center;background:#1a2050;border-left:1.5px solid #6d74d8}
.ptr i{width:10px;height:10px;border-radius:50%;background:var(--teal);box-shadow:0 0 10px var(--teal)}
.idx{margin-top:6px;font-size:12px;color:var(--mute)}
.arrow{flex:none;margin-top:38px;width:58px;height:24px;overflow:visible}
.arrow path{stroke:var(--teal);stroke-width:2.2;fill:none;stroke-linecap:round;stroke-linejoin:round}
.arrow circle{fill:var(--teal)}
.null{flex:none;margin-top:22px;height:56px;padding:0 16px;border:1.5px dashed var(--line);border-radius:14px;display:grid;place-items:center;color:var(--mute);font:700 15px "Bricolage Grotesque"}
.node.visit{border-color:var(--amb);box-shadow:0 0 0 4px #fbbf2433,0 10px 30px -8px var(--amb);transform:translateY(-6px)}
.node.found{border-color:var(--ok);box-shadow:0 0 0 4px #86efac33,0 10px 30px -8px var(--ok);transform:translateY(-6px)}
.node.enter{animation:pop .5s cubic-bezier(.2,1.4,.4,1)}
.node.leave{animation:out .35s ease-in forwards}
@keyframes pop{from{opacity:0;transform:translateY(-40px) scale(.7)}to{opacity:1;transform:none}}
@keyframes out{to{opacity:0;transform:translateY(40px) scale(.6)}}
/* stack */
#stackView{margin:auto;display:flex;align-items:flex-end;gap:26px}
.tube{position:relative;width:200px;border:2px solid #6d74d8;border-top:none;border-radius:0 0 22px 22px;padding:6px 10px 10px;display:flex;flex-direction:column-reverse;gap:6px;background:linear-gradient(180deg,transparent,#6d74d818);overflow:visible}
.slot{height:38px;border-radius:10px;display:grid;place-items:center;font:800 19px "Bricolage Grotesque";position:relative;background:linear-gradient(145deg,#2f9d93,#5b5ce0);border:1.5px solid #ffffff30;flex:none;transition:.25s}
.slot.enter{animation:drop .55s cubic-bezier(.3,1.3,.5,1)}
.slot.leave{animation:fly .4s ease-in forwards}
.slot.top::after{content:"top";position:absolute;left:calc(100% + 18px);top:50%;transform:translateY(-50%);font:700 12px "Bricolage Grotesque";background:var(--amb);color:#0d1128;padding:2px 10px;border-radius:6px;white-space:nowrap}
.slot.top::before{content:"";position:absolute;left:calc(100% + 4px);top:50%;width:14px;height:2px;background:var(--amb)}
.slot.peek{border-color:var(--ok);box-shadow:0 0 0 4px #86efac33,0 0 24px -4px var(--ok)}
.tube.shake{animation:shake .4s}
.tube .cap{position:absolute;left:8px;right:8px;top:-2px;border-top:2px dashed var(--bad);opacity:.6}
.tube .cap::after{content:"max";position:absolute;right:0;top:-20px;font-size:11px;color:var(--bad)}
.sbadge{align-self:flex-end;color:var(--mute);font-size:14px;padding-bottom:6px;min-width:70px}
.sbadge b{display:block;font:800 36px "Bricolage Grotesque";color:var(--ink)}
@keyframes drop{from{opacity:0;transform:translateY(-260px)}to{opacity:1;transform:none}}
@keyframes fly{to{opacity:0;transform:translateY(-260px)}}
@keyframes shake{20%,60%{transform:translateX(-7px)}40%,80%{transform:translateX(7px)}}
.empty{color:var(--mute);text-align:center;padding:0 24px;margin:auto}
/* side */
.side{display:flex;flex-direction:column;gap:20px}
.side h3{font-size:17px;margin-bottom:12px}
.row{display:flex;gap:10px;margin-bottom:14px}
.row label{flex:1;font-size:13px;color:var(--mute);display:flex;flex-direction:column;gap:5px}
input{font:500 16px "Instrument Sans";color:var(--ink);background:#0f1432;border:1px solid var(--line);border-radius:10px;padding:9px 11px;width:100%}
.btns{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.btns button{font:600 14px "Instrument Sans";color:var(--ink);background:#222a62;border:1px solid var(--line);border-radius:10px;padding:10px 8px;cursor:pointer;transition:.15s}
.btns button:hover:not(:disabled){background:#2d3680;border-color:var(--vio)}
.btns button:disabled{opacity:.45;cursor:wait}
.btns .add{background:linear-gradient(90deg,#2aa89c,#6a5be8);border-color:transparent}
.btns .del{color:#ffc2cb}
.hint{font-size:12.5px;color:var(--mute);margin:12px 0 0}
#log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;max-height:220px;overflow:auto}
#log li{font-size:14px;padding:9px 12px;border-radius:10px;background:#0f1432;border-left:3px solid var(--teal)}
#log li.err{border-color:var(--bad);color:#ffd1d8}
#log li small{display:block;color:var(--mute);margin-top:2px}
#toasts{position:fixed;top:calc(14px + env(safe-area-inset-top,0px));right:14px;left:14px;display:flex;flex-direction:column;align-items:flex-end;gap:10px;z-index:50;pointer-events:none}
.toast{pointer-events:auto;cursor:pointer;display:flex;gap:12px;align-items:flex-start;max-width:380px;width:100%;padding:13px 16px;border-radius:14px;background:#2a1530;border:1px solid var(--bad);box-shadow:0 18px 40px -12px #000a;animation:tin .35s cubic-bezier(.2,1.2,.4,1)}
.toast i{flex:none;width:24px;height:24px;border-radius:50%;background:var(--bad);color:#2a1530;font:800 15px "Bricolage Grotesque";display:grid;place-items:center;font-style:normal}
.toast b{display:block;font:700 15px "Bricolage Grotesque"}
.toast span{display:block;font-size:13.5px;color:#ffd1d8}
.toast.out{opacity:0;transform:translateX(30px);transition:.3s}
@keyframes tin{from{opacity:0;transform:translateX(40px)}}
.row label{min-width:0}
.seg{display:flex;gap:4px;background:#0f1432;border:1px solid var(--line);border-radius:12px;padding:4px;margin-bottom:14px}
.seg button{flex:1;font:600 13px "Instrument Sans";color:var(--mute);background:transparent;border:0;border-radius:9px;padding:8px 4px;cursor:pointer}
.seg button.on{background:linear-gradient(90deg,#2aa89c,#6a5be8);color:#fff}
#qView{margin:auto;display:flex;flex-direction:column;padding:0 12px}
.qrow{display:flex;align-items:flex-start}
.qend{flex:none;display:flex;flex-direction:column;align-items:center;gap:4px;margin:34px 6px 0;color:var(--mute);font-size:12.5px;width:72px;text-align:center}
.qend svg{width:40px;height:20px;overflow:visible;fill:none;stroke:var(--teal);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.qcw{display:flex;flex-direction:column;align-items:center;flex:none;margin-right:8px}
.qc{position:relative;width:64px;height:64px;border-radius:14px;display:grid;place-items:center;font:800 22px "Bricolage Grotesque";background:linear-gradient(145deg,#2f9d93,#5b5ce0);border:1.5px solid #ffffff30;transition:.25s}
.qc.emp{background:transparent;border:1.5px dashed var(--line)}
.qc .pb{position:absolute;top:-8px;right:-8px;min-width:22px;height:22px;border-radius:11px;background:var(--amb);color:#0d1128;font:800 12px "Bricolage Grotesque";display:grid;place-items:center}
.qc.enter{animation:pop .5s cubic-bezier(.2,1.4,.4,1)}
.qc.lL{animation:outL .35s ease-in forwards}
.qc.lR{animation:outR .35s ease-in forwards}
.qc.peek{border-color:var(--ok);box-shadow:0 0 0 4px #86efac33,0 0 24px -4px var(--ok);transform:translateY(-6px)}
@keyframes outL{to{opacity:0;transform:translateX(-70px) scale(.6)}}
@keyframes outR{to{opacity:0;transform:translateX(70px) scale(.6)}}
.ring{width:min(430px,100%);height:auto}
.ring text{font-family:"Bricolage Grotesque",sans-serif;fill:#fff;text-anchor:middle}
.cs.enter{animation:pops .5s cubic-bezier(.2,1.4,.4,1);transform-box:fill-box;transform-origin:center}
.cs.leave{animation:pops2 .35s ease-in forwards;transform-box:fill-box;transform-origin:center}
.cs.peek circle{stroke:#86efac;stroke-width:4}
@keyframes pops{from{opacity:0;transform:scale(.3)}}
@keyframes pops2{to{opacity:0;transform:scale(.3)}}
.qc.used{opacity:.45;background:repeating-linear-gradient(45deg,transparent 0 6px,#2b336666 6px 12px)}
.out{margin-top:14px;display:flex;flex-wrap:wrap;gap:6px 14px;align-items:baseline;background:#0f1432;border:1px solid var(--line);border-radius:12px;padding:12px 16px}
.out b{color:var(--mute);font-weight:600;font-size:14px}
.out code{font:600 17px "Bricolage Grotesque",sans-serif;color:var(--teal);word-break:break-word}
#treeView{margin:auto;padding:0 8px}
#treeView svg{display:block;overflow:visible}
.te{stroke:#5c64b8;stroke-width:2.2;fill:none}
.tn circle{fill:url(#tg);stroke:#ffffff40;stroke-width:1.5;transition:.25s}
.tn text{font:800 17px "Bricolage Grotesque",sans-serif;fill:#fff;text-anchor:middle;dominant-baseline:central}
.tn.visit circle{stroke:#fbbf24;stroke-width:4;filter:drop-shadow(0 0 8px #fbbf24)}
.tn.found circle{stroke:#86efac;stroke-width:4;filter:drop-shadow(0 0 8px #86efac)}
.tn.enter{animation:pops .5s cubic-bezier(.2,1.4,.4,1);transform-box:fill-box;transform-origin:center}
.tn.leave{animation:pops2 .35s ease-in forwards;transform-box:fill-box;transform-origin:center}
.rt{font:700 11px "Bricolage Grotesque",sans-serif;fill:#0d1128;text-anchor:middle;dominant-baseline:central}
.tn.x1 circle{fill:#4b45b8}.tn.x2 circle{fill:#2f7f9d}.tn.x3 circle{fill:#3d5bc4}
.tn circle.ring2{fill:none;stroke:#86efac;stroke-width:2.5}
.tn text.sm{font-size:11px}
.tn text.bf{font-size:12px;fill:#86efac;font-weight:700}
.te.on{stroke:#fbbf24;stroke-width:3.5}
.qc.visit{border-color:var(--amb);box-shadow:0 0 0 4px #fbbf2433,0 10px 30px -8px var(--amb);transform:translateY(-6px)}
.ptr.pv{border-left:0;border-right:1.5px solid #6d74d8}
#heapView,#hashView{margin:auto;display:flex;flex-direction:column}
#heapView svg{display:block;margin:0 auto}
#arView,#graphView,#trieView{margin:auto;padding:0 8px}
#graphView svg,#trieView svg{display:block}
.hrow{display:flex;align-items:center;gap:12px;margin:5px 0;padding:4px 8px;border-radius:12px;transition:.25s}
.hrow.visit{background:#fbbf2418;box-shadow:inset 0 0 0 1.5px #fbbf24}
.hidx{flex:none;width:34px;height:46px;display:grid;place-items:center;border-radius:9px;background:#222a62;border:1px solid var(--line);font:800 16px "Bricolage Grotesque",sans-serif}
.hchain{display:flex;align-items:center}
.hchain .qc{width:54px;height:46px;font-size:18px;border-radius:11px}
.hchain .arrow{margin-top:0;width:44px}
.hchain .null{margin-top:0;height:40px;padding:0 10px;font-size:13px}
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition:none!important}}

button{touch-action:manipulation}
.brand{display:inline-block;color:var(--mute);text-decoration:none;font:600 14px "Instrument Sans",system-ui,sans-serif;margin-bottom:6px}
.brand:hover{color:var(--ink)}
header>nav{max-width:100%}
.doc{margin-top:28px;padding:26px 28px}
.doc h2{font-size:clamp(22px,3vw,30px);margin:0 0 12px}
.doc h3{font-size:19px;margin:26px 0 10px}
.doc p,.doc li,.doc dd{color:#c9cdf0;max-width:75ch}
.doc dt{font-weight:600;margin-top:14px}
.doc dd{margin:4px 0 0}
.doc a{color:var(--teal)}
.doc .tw{overflow-x:auto}
.doc table{border-collapse:collapse;width:100%;min-width:480px}
.doc th,.doc td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top}
.doc th{color:var(--mute);font-weight:600;font-size:14px}
.topics{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
.topics li{padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#0f1432}
.topics li a{font:700 16px "Bricolage Grotesque",sans-serif;display:block;margin-bottom:2px}
.topics li span{font-size:14px;color:var(--mute)}
.rel{display:flex;flex-wrap:wrap;gap:8px;list-style:none;padding:0;margin:0}
.rel a{display:inline-block;padding:7px 14px;border:1px solid var(--line);border-radius:999px;text-decoration:none;color:var(--ink)}
.rel a:hover{border-color:var(--vio)}
.foot{margin-top:22px;text-align:center;color:var(--mute);font-size:14px}
/* tablets: controls and log sit side by side under the diagram */
@media(max-width:1100px){.grid{grid-template-columns:minmax(0,1fr) 300px}}
@media(max-width:900px){.grid{grid-template-columns:1fr}.side{display:grid;grid-template-columns:1fr 1fr;align-items:start}}
/* phones */
@media(max-width:640px){
 .wrap{padding:16px 12px 32px}
 header{margin-bottom:16px}
 nav{flex-wrap:nowrap;overflow-x:auto;margin:0 -12px;padding:2px 12px 8px;scrollbar-width:none;width:calc(100% + 24px);max-width:none}
 nav::-webkit-scrollbar{display:none}
 .side{display:flex}
 .card{padding:14px;border-radius:16px}
 .stage{min-height:0}
 .canvas{min-height:220px}
 .btns button{padding:13px 8px;font-size:15px}
 .chip{font-size:12px}
 .out code{font-size:15px}
 .doc{padding:18px 16px}
 .toast{max-width:none}
}
/* large monitors and TVs */
@media(min-width:1600px){.wrap{max-width:1500px}.grid{grid-template-columns:minmax(0,1fr) 400px}}
@media(min-width:1900px){html{zoom:1.3}}
@media(min-width:2500px){html{zoom:1.7}}
@media(min-width:1600px){a:focus-visible,button:focus-visible,input:focus-visible{outline-width:3px}}
.ad{margin:22px 0;min-height:100px;text-align:center;overflow:hidden}
.foot a{color:var(--teal)}

/* ===== LIGHT MODE ===== */
body.light-mode{--bg:#f0f2f8;--bg2:#e4e7f0;--panel:#fff;--line:#c8cde0;--ink:#1a1d2e;--mute:#5c6180;--teal:#0d9488;--vio:#7c3aed;--amb:#d97706;--bad:#e11d48;--ok:#16a34a;background:radial-gradient(1200px 600px at 80% -10%,#c7d2fe44 0,transparent 60%),radial-gradient(900px 500px at -10% 110%,#a5f3fc44 0,transparent 55%),var(--bg);color:var(--ink)}
body.light-mode .card{background:rgba(255,255,255,.85);border-color:var(--line);backdrop-filter:blur(8px)}
body.light-mode .canvas{background-image:radial-gradient(var(--line) 1px,transparent 1px)}
body.light-mode input{background:#fff;border-color:var(--line);color:var(--ink)}
body.light-mode .btns button{background:#e8eaf2;border-color:var(--line);color:var(--ink)}
body.light-mode .btns button:hover:not(:disabled){background:#d4d8e8}
body.light-mode .btns .add{background:linear-gradient(90deg,#14b8a6,#8b5cf6);color:#fff}
body.light-mode .btns .del{color:var(--bad)}
body.light-mode .seg{background:#f0f2f8;border-color:var(--line)}
body.light-mode .seg button{color:var(--mute)}
body.light-mode .seg button.on{color:#fff}
body.light-mode .node{border-color:#8b8ec8;box-shadow:0 6px 20px -6px rgba(0,0,0,.15)}
body.light-mode .val{background:linear-gradient(145deg,#6366f1,#8b5cf6)}
body.light-mode .ptr{background:#e8eaf2;border-left-color:#8b8ec8}
body.light-mode .out{background:#fff;border-color:var(--line)}
body.light-mode .out code{color:var(--teal)}
body.light-mode #log li{background:#f8f9fc;border-left-color:var(--teal)}
body.light-mode .slot{background:linear-gradient(145deg,#14b8a6,#8b5cf6);color:#fff}
body.light-mode .qc{background:linear-gradient(145deg,#14b8a6,#8b5cf6);color:#fff}
body.light-mode .qc.emp{background:#f0f2f8}
body.light-mode .toast{background:#fef2f2;border-color:var(--bad);color:var(--ink)}
body.light-mode .toast span{color:#991b1b}
body.light-mode .hidx{background:#e8eaf2;border-color:var(--line)}
body.light-mode nav a{color:var(--mute);border-color:var(--line)}
body.light-mode nav a.on{color:#fff}
body.light-mode nav a:not(.on):hover{color:var(--ink);border-color:var(--vio)}
body.light-mode .doc{background:rgba(255,255,255,.9)}
body.light-mode .doc p,.doc li,.doc dd{color:#3c4060}
body.light-mode .topics li{background:#f8f9fc;border-color:var(--line)}
body.light-mode header h1 span{background:linear-gradient(90deg,var(--teal),var(--vio));-webkit-background-clip:text;background-clip:text;color:transparent}

/* ===== TOOLBAR ===== */
.toolbar{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.toolbar button,.toolbar label{font:500 13px "Instrument Sans",sans-serif;color:var(--mute);background:#0f1432;border:1px solid var(--line);border-radius:8px;padding:6px 12px;cursor:pointer;transition:.15s;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
body.light-mode .toolbar button,body.light-mode .toolbar label{background:#fff;border-color:var(--line);color:var(--ink)}
.toolbar button:hover{border-color:var(--vio);color:var(--ink)}
.toolbar button:disabled{opacity:.4;cursor:not-allowed}
.toolbar .sep{width:1px;height:20px;background:var(--line);margin:0 4px}
#speedSlider{width:80px;accent-color:var(--teal);vertical-align:middle;cursor:pointer}
#speedLabel{font:600 13px "Bricolage Grotesque",sans-serif;color:var(--teal);min-width:28px}
.toolbar .ticon{font-size:16px;line-height:1}

/* ===== PRESET BAR ===== */
#presetBar{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.preset-btn{font:500 12px "Instrument Sans",sans-serif;color:var(--teal);background:transparent;border:1px solid var(--teal);border-radius:8px;padding:5px 12px;cursor:pointer;transition:.15s}
.preset-btn:hover{background:var(--teal);color:#0d1128}
body.light-mode .preset-btn{color:var(--teal);border-color:var(--teal)}
body.light-mode .preset-btn:hover{background:var(--teal);color:#fff}

/* ===== TUTORIAL ===== */
.tutorial-highlight{position:relative;z-index:40;box-shadow:0 0 0 4px var(--amb),0 0 0 9999px rgba(0,0,0,.5)!important;border-radius:12px}
.tutorial-bubble{position:fixed;z-index:50;max-width:340px;background:var(--panel);border:1px solid var(--amb);border-radius:14px;padding:16px;box-shadow:0 12px 40px -8px rgba(0,0,0,.4);animation:tin .3s ease-out}
.tutorial-bubble p{margin:0 0 12px;font-size:14px;line-height:1.5;color:var(--ink)}
.tutorial-nav{display:flex;justify-content:space-between;align-items:center;gap:8px}
.tutorial-nav span{font-size:12px;color:var(--mute)}
.tutorial-nav button{font:600 13px "Instrument Sans",sans-serif;padding:6px 14px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--ink);cursor:pointer}
.tutorial-nav button:hover{border-color:var(--vio)}
.tutorial-nav button:last-child{margin-left:4px}

/* ===== MODAL ===== */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);display:grid;place-items:center;z-index:60;backdrop-filter:blur(4px)}
.modal{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:28px;max-width:520px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 20px 60px -12px rgba(0,0,0,.5)}
.modal h2{font-size:22px;margin:0 0 16px}
.modal .krow{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:14px}
.modal .krow:last-child{border:none}
.modal kbd{font:600 13px "Bricolage Grotesque",sans-serif;background:#222a62;color:var(--teal);padding:3px 8px;border-radius:6px;border:1px solid var(--line)}
body.light-mode .modal{background:#fff}
body.light-mode .modal kbd{background:#f0f2f8;color:var(--teal);border-color:var(--line)}
.modal .close-btn{float:right;background:none;border:none;color:var(--mute);font-size:20px;cursor:pointer;padding:4px 8px}

/* ===== COMPARE MODE ===== */
.compare-mode{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 340px!important}
@media(max-width:1200px){.compare-mode{grid-template-columns:1fr!important}}
.compare-card .canvas{min-height:200px;margin-top:8px}
.compare-card h4{color:var(--teal)}

/* ===== SEO CONTENT ===== */
.seo-block{margin-top:24px;padding-top:20px;border-top:1px solid var(--line)}
.seo-block h3{font-size:19px;margin:22px 0 10px}
.seo-block ul{padding-left:20px}
.seo-block li{margin:6px 0;color:#c9cdf0}
body.light-mode .seo-block li{color:#3c4060}
.seo-block p em{color:var(--mute);font-style:normal}
.faq-list dt{font-weight:700;margin-top:16px;font-size:16px}
.faq-list dd{margin:6px 0 0;max-width:75ch}

/* ===== FOOTER ===== */
.foot-wrap{margin-top:32px;padding:24px 0 8px;border-top:1px solid var(--line)}
.foot-links{display:flex;flex-wrap:wrap;gap:8px 16px;margin-bottom:12px;justify-content:center}
.foot-links a{color:var(--teal);text-decoration:none;font-size:13px}
.foot-links a:hover{text-decoration:underline}
