:root{--text:#6b6375;--text-h:#08060d;--bg:#fff;--border:#e5e4e7;--code-bg:#f4f3ec;--accent:#aa3bff;--accent-fg:#8b2fd6;--on-accent:#fff;--accent-bg:#aa3bff1a;--accent-border:#aa3bff80;--social-bg:#f4f3ec80;--warn-fg:#a1410a;--warn-bg:#b4530917;--warn-border:#b4530973;--shadow:#0000001a 0 10px 15px -3px, #0000000d 0 4px 6px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--heading:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, Consolas, monospace;font:18px/145% var(--sans);letter-spacing:.18px;color:var(--text);background-color:var(--bg);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (width<=1024px){:root{font-size:16px}}[data-theme=dark]{--text:#9ca3af;--text-h:#f3f4f6;--bg:#16171d;--border:#2e303a;--code-bg:#1f2028;--accent:#c084fc;--accent-fg:#c084fc;--on-accent:#1a1024;--accent-bg:#c084fc26;--accent-border:#c084fc80;--social-bg:#2f303a80;--warn-fg:#fbbf24;--warn-bg:#fbbf241f;--warn-border:#fbbf2473;--shadow:#0006 0 10px 15px -3px, #00000040 0 4px 6px -2px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{margin:0}*{box-sizing:border-box}.skip-link{z-index:10;background-color:var(--accent-fg);color:var(--on-accent);border-radius:0 0 6px 6px;padding:.5rem 1rem;font-size:.9rem;text-decoration:none;transition:transform .15s;position:absolute;top:0;left:50%;transform:translate(-50%,-150%)}.skip-link:focus{outline:2px solid var(--accent);outline-offset:2px;transform:translate(-50%)}@media (prefers-reduced-motion:reduce){.skip-link{transition:none}}.section-heading{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}h1,h2,h3{font-family:var(--heading);color:var(--text-h);font-weight:500}h1{letter-spacing:-.5px;margin:0;font-size:2rem}@media (width<=1024px){h1{font-size:1.5rem}}h2{letter-spacing:-.24px;margin:0 0 8px;font-size:1.25rem;line-height:118%}@media (width<=1024px){h2{font-size:1.1rem}}h3{margin:0 0 4px;font-size:1rem}p{margin:0}a{color:var(--accent-fg)}code{font-family:var(--mono);background-color:var(--code-bg);color:var(--text-h);border-radius:4px;padding:2px 6px;font-size:.85em;line-height:135%}#app{flex-direction:column;width:960px;max-width:100%;min-height:100svh;margin:0 auto;padding:0 1.5rem;display:flex}header{border-bottom:1px solid var(--border);padding:0 0 1rem;position:relative}.cl-hero{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:clamp(1rem,4vw,3rem);margin:clamp(1rem,3vw,2rem) 0 1.5rem;display:flex}.cl-hero-main{flex:22rem;min-width:min(100%,20rem)}.cl-hero-title{letter-spacing:.01em;color:var(--text-h);margin:0;font-size:clamp(1.6rem,3.8vw,2.7rem);font-weight:700;line-height:1.1}.cl-hero-sub{letter-spacing:.01em;color:var(--text);margin:.4rem 0 0;font-size:clamp(.9rem,1.6vw,1.05rem)}.cl-hero-desc{color:var(--text);max-width:60ch;margin:.55rem 0 0;font-size:1rem;line-height:1.5}.cl-hero-why{border:1px solid var(--accent-border);background:var(--accent-bg);border-radius:10px;flex:0 min(40%,26rem);min-width:min(100%,15rem);padding:.85rem 1.05rem}.cl-hero-why-label{letter-spacing:.14em;color:var(--accent-fg);font-size:.68rem;font-weight:700;display:block}.cl-hero-why-text{color:var(--text-h);margin:.35rem 0 0;font-size:.95rem;line-height:1.5}@media (width<=640px){.cl-hero{flex-direction:column}.cl-hero-why{flex-basis:auto;width:100%}}.theme-toggle{border:1px solid var(--border);background-color:var(--bg);width:2.75rem;height:2.75rem;color:var(--text-h);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:1.25rem;line-height:1;transition:border-color .2s;display:flex;position:absolute;top:1.2rem;right:0}.theme-toggle:hover{border-color:var(--accent-border)}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.intro{max-width:72ch;padding:1.25rem 0 .25rem}.intro p{color:var(--text);margin:0 0 .85rem;font-size:.95rem;line-height:152%}.intro-lead{color:var(--text-h)!important;font-size:1.05rem!important}.intro strong{color:var(--text-h);font-weight:600}.intro dfn{color:var(--accent-fg);font-style:normal;font-weight:600}.glossary{border:1px solid var(--border);background-color:var(--code-bg);border-radius:8px;margin-top:.5rem;padding:0 1rem}.glossary summary{cursor:pointer;color:var(--text-h);letter-spacing:.3px;padding:.7rem 0;font-size:.85rem;font-weight:500}.glossary summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.glossary-list{margin:0 0 .75rem}.glossary-list dt{color:var(--accent-fg);margin-top:.75rem;font-size:.85rem;font-weight:600}.glossary-list dd{color:var(--text);margin:.15rem 0 0;font-size:.85rem;line-height:148%}.glossary-list dd em{color:var(--text-h);font-style:italic}.controls{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:flex-end;gap:1rem;padding:1.25rem 0;display:flex}.control-group{flex-direction:column;gap:.25rem;display:flex}.control-group label{color:var(--text);text-transform:uppercase;letter-spacing:.5px;font-size:.8rem}.control-group input{font-family:var(--mono);border:1px solid var(--border);background-color:var(--code-bg);min-height:44px;color:var(--text-h);border-radius:4px;width:14rem;max-width:100%;padding:.55rem .6rem;font-size:max(1rem,16px)}.control-group input:focus{outline:2px solid var(--accent);outline-offset:1px}button.run-btn{font-family:var(--sans);background-color:var(--accent-fg);color:var(--on-accent);cursor:pointer;border:none;border-radius:6px;min-height:44px;padding:.5rem 1.5rem;font-size:.95rem;font-weight:500;transition:opacity .2s}button.run-btn:disabled{background-color:var(--code-bg);color:var(--text);cursor:not-allowed}button.run-btn:hover:not(:disabled){opacity:.85}button.run-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.params-advanced{border:1px solid var(--border);background-color:var(--code-bg);border-radius:8px;flex-basis:100%;padding:0 1rem}.params-advanced summary{cursor:pointer;color:var(--text-h);letter-spacing:.3px;padding:.75rem 0;font-size:.85rem;font-weight:500}.params-advanced summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.params-hint{color:var(--text);max-width:60ch;margin:0 0 1rem;font-size:.8rem}.param-set{border:1px solid var(--border);border-radius:6px;flex-wrap:wrap;gap:1rem;margin:0 0 1rem;padding:.75rem 1rem 1rem;display:flex}.param-set legend{color:var(--accent-fg);letter-spacing:.3px;padding:0 .4rem;font-size:.8rem;font-weight:500}.control-group-num input{width:9rem}.memory-caveat{font-style:italic}.control-group-check{justify-content:flex-end;gap:.35rem}.check-label{cursor:pointer;align-items:center;gap:.5rem;min-height:44px;display:flex;text-transform:none!important;letter-spacing:normal!important;color:var(--text-h)!important;font-size:.85rem!important}.check-label input[type=checkbox]{width:1.15rem;height:1.15rem;min-height:0;accent-color:var(--accent-fg);cursor:pointer}.check-label input[type=checkbox]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.check-hint{color:var(--text);max-width:28ch;font-size:.75rem;line-height:138%}.result-card .attacker{color:var(--text);border-top:1px dashed var(--border);margin-top:.5rem;padding-top:.5rem;font-size:.8rem}.attacker-label{text-transform:uppercase;letter-spacing:.5px;font-size:.7rem}.attacker-rate{font-family:var(--mono);color:var(--text-h);font-weight:600}.attacker-bound{letter-spacing:.3px;border:1px solid var(--border);color:var(--text-h);background-color:var(--bg);border-radius:4px;margin-left:.35rem;padding:.05rem .4rem;font-size:.68rem;font-weight:600;display:inline-block}.attacker-bound-memory{color:var(--on-accent);background-color:var(--accent-fg);border-color:var(--accent-fg)}.mem-showcase{border:1px solid var(--border);background-color:var(--code-bg);border-radius:10px;margin:1.75rem 0 0;padding:1.15rem 1.25rem 1.35rem}.mem-showcase-h{margin:0 0 .35rem}.mem-showcase-cap{color:var(--text);max-width:72ch;margin:0 0 1rem;font-size:.85rem;line-height:152%}.mem-showcase-cap strong,.mem-showcase-cap em{color:var(--text-h)}.mem-showcase-cap em{font-style:italic}.mem-grid-row{grid-template-columns:repeat(4,1fr);gap:1rem;display:grid}@media (width<=560px){.mem-grid-row{grid-template-columns:repeat(2,1fr);gap:.75rem}}.mem-fig{flex-direction:column;gap:.4rem;margin:0;display:flex}.mem-grid{border:1px solid var(--border);background-color:var(--bg);border-radius:6px;grid-template-columns:repeat(12,1fr);gap:2px;padding:4px;display:grid}.mem-cell{aspect-ratio:1;background-color:var(--border);border-radius:1px}.mem-cell-filled{background-color:var(--accent);animation:.4s both mem-fill}.mem-figcap{text-align:center;flex-direction:column;gap:.1rem;display:flex}.mem-figcap-kdf{color:var(--text-h);font-size:.8rem;font-weight:600}.mem-figcap-size{font-family:var(--mono);color:var(--text);font-size:.75rem}@keyframes mem-fill{0%{opacity:0;transform:scale(.2)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.mem-cell-filled{animation:none}}.schematic{border:1px dashed var(--border);background-color:var(--bg);border-radius:6px;margin:.6rem 0 .15rem;padding:.6rem .7rem}.sch-note{color:var(--text);margin:.45rem 0 0;font-size:.72rem;line-height:145%}.sch-note strong,.sch-note em{color:var(--text-h)}.sch-note em{font-style:italic}.sch-row{align-items:stretch;gap:.4rem;display:flex}.sch-box{border:1px solid var(--accent-border);background-color:var(--accent-bg);color:var(--text-h);text-align:center;border-radius:5px;flex-direction:column;flex:1;align-items:center;gap:.1rem;padding:.4rem .3rem;font-size:.78rem;font-weight:600;display:flex}.sch-box small{color:var(--text);font-size:.66rem;font-weight:400}.sch-arrow{color:var(--accent-fg);align-self:center;font-weight:700}.sch-loop{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.sch-loop-label{color:var(--accent-fg);font-size:.72rem;font-weight:600}.sch-box-hash{flex:none;padding:.3rem .7rem}.sch-counter{font-family:var(--mono);color:var(--text-h);font-size:.78rem;font-weight:600}.sch-counter-n{color:var(--accent-fg)}.sch-blocks{flex-wrap:wrap;gap:3px;display:flex}.sch-block{background-color:var(--accent);width:.85rem;height:.85rem;animation:.5s both sch-block-in;animation-delay:calc(var(--b,0) * 30ms);border-radius:2px}@keyframes sch-block-in{0%{opacity:0;background-color:var(--border);transform:scale(.3)}60%{opacity:1;background-color:var(--accent);transform:scale(1)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.sch-block{animation:none}}.rig{border:1px solid var(--border);background-color:var(--code-bg);border-radius:10px;margin:1.75rem 0 0;padding:1.15rem 1.25rem 1.35rem}.rig-h{margin:0 0 .35rem}.rig-cap{color:var(--text);max-width:72ch;margin:0 0 1rem;font-size:.85rem;line-height:152%}.rig-cap strong,.rig-cap em{color:var(--text-h)}.rig-cap em{font-style:italic}.rig-lanes{border:1px solid var(--border);background-color:var(--bg);border-radius:6px;grid-template-columns:repeat(24,1fr);gap:3px;padding:6px;display:grid}@media (width<=560px){.rig-lanes{grid-template-columns:repeat(15,1fr)}}.rig-token{aspect-ratio:1;background-color:var(--border);border-radius:2px;transition:background-color .25s,transform .25s}.rig-token-fit{background-color:var(--accent)}.rig-token-idle{background-color:var(--border);opacity:.6;transform:scale(.72)}@media (prefers-reduced-motion:reduce){.rig-token{transition:none}}.rig-status{color:var(--text);min-height:2.4em;margin:.75rem 0 0;font-size:.82rem;line-height:150%}.rig-status strong,.rig-status em{color:var(--text-h)}.rig-status em{font-style:italic}.rig-control{margin-top:1rem}.rig-control label{color:var(--text-h);margin-bottom:.4rem;font-size:.8rem;font-weight:500;display:block}.rig-control output{font-family:var(--mono);color:var(--accent-fg);font-weight:600}.rig-control input[type=range]{width:100%;max-width:30rem;accent-color:var(--accent-fg);min-height:44px}.rig-control input[type=range]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.rig-hint{color:var(--text);max-width:60ch;margin:.35rem 0 0;font-size:.75rem;line-height:145%}.chart-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem;margin-bottom:1rem;display:flex}.chart-head h2{margin-bottom:0}.scale-toggle{border:1px solid var(--border);border-radius:6px;flex-shrink:0;display:inline-flex;overflow:hidden}.scale-btn{font-family:var(--sans);background-color:var(--bg);min-height:36px;color:var(--text);cursor:pointer;border:none;padding:.35rem .7rem;font-size:.75rem;font-weight:500}.scale-btn+.scale-btn{border-left:1px solid var(--border)}.scale-btn.is-active{background-color:var(--accent-fg);color:var(--on-accent)}.scale-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.preset-row{flex-wrap:wrap;flex-basis:100%;align-items:center;gap:.6rem;margin-top:.25rem;display:flex}.preset-btn{font-family:var(--sans);border:1px solid var(--warn-border);background-color:var(--warn-bg);min-height:40px;color:var(--warn-fg);cursor:pointer;border-radius:6px;padding:.45rem .85rem;font-size:.78rem;font-weight:500;transition:background-color .15s,border-color .15s}.preset-btn:hover{border-color:var(--warn-fg)}.preset-btn.is-weak{background-color:var(--accent-bg);border-color:var(--accent-border);color:var(--accent-fg)}.preset-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.preset-hint{color:var(--text);font-size:.72rem;line-height:138%}.salt-callout{border:1px solid var(--accent-border);border-left:3px solid var(--accent-fg);background-color:var(--accent-bg);color:var(--text-h);border-radius:6px;margin:1.25rem 0 0;padding:.85rem 1rem;font-size:.85rem;line-height:150%}.salt-callout strong{color:var(--text-h)}.salt-callout code{word-break:break-all;font-size:.72rem}.salt-callout-warn{border-color:var(--warn-border);border-left-color:var(--warn-fg);background-color:var(--warn-bg)}.salt-callout-warn strong{color:var(--warn-fg)}.charts{gap:1.75rem;margin-top:1.5rem;display:grid}@media (width>=720px){.charts{grid-template-columns:1fr 1fr}}.chart-caption{color:var(--text);max-width:44ch;margin:-.5rem 0 1rem;font-size:.8rem;line-height:142%}.chart-scale{color:var(--text);font-size:.75rem;font-weight:400}.bar-fill-mem{background-color:var(--accent-fg)}.results{flex:1;padding:1.5rem 0}.results:focus{outline:none}.results:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:4px}.results-placeholder{text-align:center;color:var(--text);padding:3rem 1rem;font-style:italic}.result-cards{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin:0;padding:0;list-style:none;display:grid}.result-card{border:1px solid var(--border);background-color:var(--code-bg);border-radius:8px;padding:1rem}.result-card h3{color:var(--accent-fg);margin-bottom:.5rem}.result-card .time{font-family:var(--mono);color:var(--text-h);font-size:1.5rem;font-weight:600}.result-card .time-unit{color:var(--text);font-size:.85rem}.result-card .params,.result-card .memory,.result-card .output-preview{color:var(--text);margin-top:.35rem;font-size:.8rem}.result-card .output-preview code{word-break:break-all;font-size:.7rem}.result-card .note{color:var(--accent-fg);margin-top:.5rem;font-size:.75rem;font-style:italic}.bar-chart{margin-top:1.5rem}.bar-chart h2{margin-bottom:1rem}.bar-row{align-items:center;gap:.75rem;margin-bottom:.6rem;display:flex}.bar-label{text-align:right;width:5.5rem;color:var(--text-h);flex-shrink:0;font-size:.85rem;font-weight:500}@media (width<=480px){.bar-row{flex-wrap:wrap}.bar-label{text-align:left;flex-basis:100%;width:auto}.bar-value{flex-shrink:1;width:auto}.controls{flex-direction:column;align-items:stretch}.control-group input{width:100%}}.bar-track{background-color:var(--code-bg);border-radius:4px;flex:1;height:1.75rem;position:relative;overflow:hidden}.bar-fill{background-color:var(--accent);border-radius:4px;min-width:2px;height:100%;transition:width .6s}.bar-value{width:6rem;font-family:var(--mono);color:var(--text);flex-shrink:0;font-size:.8rem}footer{border-top:1px solid var(--border);text-align:center;color:var(--text);padding:1rem 0;font-size:.8rem}footer a{color:var(--accent-fg);text-decoration:none}footer a:hover{text-decoration:underline}footer a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}.status{text-align:center;color:var(--text);padding:1rem;font-style:italic}.status .spinner{margin-right:.35rem;animation:1s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.status-error{color:#c81e1e}[data-theme=dark] .status-error{color:#f87171}@media (prefers-reduced-motion:reduce){.bar-fill{transition:none}.spinner{animation:none}}
