:root{--bg:#fff;--surface:#f6f7f9;--border:#e3e5e8;--border-strong:#b9bec7;--text:#1a1a1a;--muted:#6b6b6b;--accent:#3b6fe0;--on-accent:#fff;--error:#c4321b;--bar:#c3c9d4;--compare:#e5a50a;--swap:#e0563b;--held:#7a5af5;--sorted:#2f9e5b;--mark:#d6336c;--stripes:repeating-linear-gradient(-45deg, transparent 0 5px, #ffffff4d 5px 8px);--ready-bg:#fff;--chip-bg:#eceef2;--chip-border:#d2d6dd;--ready-text:var(--text);--idle-bg:var(--surface);--idle-text:var(--muted);--inspect-filter:brightness(.8);--code-active:#e8eefc;--tok-keyword:#8a3fd1;--tok-builtin:#1f7a8c;--tok-number:#b35c00;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5}:root[data-theme=dark]{--bg:#121316;--surface:#1b1d21;--border:#2c2f35;--border-strong:#4a4f58;--text:#e8e8ea;--muted:#9a9aa2;--accent:#7b9ef0;--on-accent:#10131a;--error:#ff8a73;--bar:#4a505c;--compare:#f0b429;--swap:#ff7a5c;--held:#a38bff;--sorted:#3fbf74;--mark:#f06595;--ready-bg:#e4e6ea;--chip-bg:#2a2e35;--chip-border:#464b55;--ready-text:#15171a;--idle-bg:#2a2d33;--idle-text:#b4b8bf;--inspect-filter:brightness(1.35);--code-active:#1e2a44;--tok-keyword:#c792ea;--tok-builtin:#6cc3d5;--tok-number:#f2a65a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0}button,input,select{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.array-input{position:relative}.array-input input{border:1px solid var(--border);background:var(--bg);border-radius:8px;width:100%;height:40px;padding:0 10px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:15px}.array-input input.has-expand{padding-right:40px}.array-input input[aria-invalid=true],.array-editor textarea[aria-invalid=true]{border-color:var(--error)}.expand-button{background:var(--surface);width:28px;height:28px;color:var(--muted);cursor:pointer;border:none;border-radius:6px;place-items:center;padding:0;display:grid;position:absolute;top:6px;right:6px}.expand-button:hover{color:var(--text)}.expand-button:hover .array-tip,.expand-button:focus-visible .array-tip,.expand-button.show-tip .array-tip{visibility:visible;opacity:1}.array-tip{z-index:10;background:var(--text);color:var(--bg);white-space:nowrap;pointer-events:none;visibility:hidden;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;transition:opacity .12s;position:absolute;top:calc(100% + 8px);right:-6px}.array-tip:before{content:"";border:6px solid #0000;border-bottom-color:var(--text);position:absolute;bottom:100%;right:14px}.array-tip kbd,.array-editor-hint kbd{background:#7f7f7f4d;border-radius:3px;padding:0 4px;font-family:inherit;font-size:11px}.array-editor{z-index:20;background:var(--bg);border-radius:8px;position:absolute;top:0;left:0;right:0;box-shadow:0 8px 24px #0000002e}.array-editor textarea{border:1px solid var(--accent);background:var(--bg);resize:vertical;border-radius:8px 8px 0 0;outline:none;width:100%;padding:9px 10px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:15px;line-height:1.5;display:block}.array-editor-hint{border:1px solid var(--accent);background:var(--surface);color:var(--muted);border-top:none;border-radius:0 0 8px 8px;padding:4px 10px;font-size:12px}.array-view{--lane-height:clamp(140px, calc(100vh - 520px), 280px);--lift-room:16px;--aux-gap:98px;touch-action:pan-y;-webkit-user-select:none;user-select:none}.array-lane{z-index:1;height:var(--lane-height);margin-top:var(--lift-room);position:relative}.array-view.has-lift{--lane-height:clamp(140px, calc(100vh - 570px), 260px);--lift-room:64px}.array-view.has-aux{--lane-height:clamp(100px, calc((100vh - 540px) / 2), 200px)}.slot{height:100%;transition:transform var(--move-ms) ease-in-out, opacity .2s;flex-direction:column;justify-content:flex-end;align-items:center;display:flex;position:absolute;bottom:0;left:0}.slot.is-outside{opacity:.3}.slot.is-inspected{z-index:1}.bar{width:calc(100% - clamp(1px,16%,6px));height:var(--bar-height);background:var(--bar);border-radius:6px 6px 2px 2px;min-height:6px;transition:background-color .12s,filter .12s}.compact .bar{border-radius:3px 3px 0 0;min-height:2px}.is-inspected .bar{filter:var(--inspect-filter)}.value{font-variant-numeric:tabular-nums;white-space:nowrap;height:24px;font-size:15px;font-weight:600;line-height:24px}.value sup{color:var(--muted);margin-left:1px;font-size:10px;font-weight:500}.compact .value{visibility:hidden}.compact .is-inspected .value{visibility:visible;background:var(--bg);border-radius:4px;padding:0 4px}.is-sorted .bar{background:var(--sorted)}.is-held .bar{background:var(--held)}.is-held .value{color:var(--held)}.is-pivot .bar,.is-min .bar{background:var(--mark)}.is-pivot .value,.is-min .value{color:var(--mark)}.is-compare .bar{background:var(--compare)}.array-view:not(.compact) .is-compare .bar{box-shadow:0 0 0 2px var(--bg), 0 0 0 4px var(--compare)}.is-swap .bar,.is-write .bar{background:var(--swap) var(--stripes)}.gap .bar{border:2px dashed var(--border-strong);background:0 0}.ghost .bar{border:2px dashed var(--border-strong);background:0 0;border-bottom:none}.ghost .value{color:var(--muted);font-weight:400}.compact .ghost .value{visibility:hidden}.array-indices{border-top:1px solid var(--border);height:24px;padding-top:4px;display:flex;position:relative}.array-indices span{text-align:center;color:var(--muted);font-variant-numeric:tabular-nums;font-size:12px}.array-indices .index-reveal{position:absolute;top:4px;transform:translate(-50%)}.array-indices .index-caption{color:var(--muted);opacity:.7;font-style:italic;position:absolute;top:4px;left:0}.array-indices .index-caption.on-right{left:auto;right:0}.array-pointers{height:34px;position:relative}.pointer{color:var(--accent);white-space:nowrap;transition:left var(--move-ms) ease-in-out;flex-direction:column;align-items:center;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12px;font-weight:600;line-height:1.2;display:flex;position:absolute;transform:translate(-50%)}.pointer:before{content:"▲";font-size:9px}.array-regions{height:32px;position:relative}.region{border:2px solid var(--muted);height:8px;transition:left var(--move-ms) ease-in-out, width var(--move-ms) ease-in-out;border-top:none;border-radius:0 0 4px 4px;position:absolute;top:0}.region span{white-space:nowrap;color:var(--muted);font-size:12px;position:absolute;top:10px;left:50%;transform:translate(-50%)}.aux-area{height:calc(var(--lane-height) + 22px);margin-top:8px;position:relative}.aux-buffer{border:1px dashed var(--border-strong);background:var(--surface);border-radius:8px;position:absolute;top:0;bottom:0}.aux-buffer span{color:var(--muted);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12px;position:absolute;bottom:2px;left:50%;transform:translate(-50%)}@media (prefers-reduced-motion:reduce){.slot,.region,.pointer{transition:none}}.code-panel{flex-direction:column;gap:8px;min-width:0;display:flex}.code-tabs{border-bottom:1px solid var(--border);gap:2px;display:flex}.code-tabs button{color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px 6px 0 0;margin-bottom:-1px;padding:4px 10px;font-size:12px;font-weight:600}.code-tabs button:hover{color:var(--text)}.code-tabs button[aria-selected=true]{border-color:var(--border);border-bottom-color:var(--bg);background:var(--bg);color:var(--text)}.panel-title{letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-size:12px;font-weight:600}.code{border:1px solid var(--border);background:var(--surface);border-radius:8px;max-height:340px;margin:0 0 8px;padding:8px 0;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12.5px;line-height:1.7;position:relative;overflow:auto}.code code{min-width:100%;display:inline-block}.code-line{white-space:pre;border-left:3px solid #0000;padding-right:12px;transition:background-color .12s;display:flex}.code-line.is-active{border-left-color:var(--accent);background:var(--code-active)}.line-number{text-align:right;width:32px;color:var(--muted);opacity:.6;-webkit-user-select:none;user-select:none;flex:none;padding-right:12px}.tok-keyword{color:var(--tok-keyword);font-weight:600}.tok-builtin{color:var(--tok-builtin)}.tok-number{color:var(--tok-number)}.vars{flex-wrap:wrap;gap:6px;margin:0;display:flex}.var{border:1px solid var(--border);border-radius:6px;gap:6px;padding:2px 10px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:14px;transition:border-color .12s,background-color .12s;display:flex}.var dt{color:var(--muted)}.var dt:after{content:" ="}.var dd{margin:0;font-weight:600}.var.is-changed{border-color:var(--accent);background:var(--code-active)}.vars-empty{color:var(--muted);margin:0;font-size:14px}.info-card{border:1px solid var(--border);border-radius:12px;padding:20px}.info-card h2{margin:0 0 8px;font-size:18px}.info-card p{margin:12px 0 0;line-height:1.6}.info-card .info-idea{margin-top:0;font-size:16px}.info-stats{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin:16px 0 4px;display:grid}.info-stats div{background:var(--surface);border-radius:8px;padding:8px 12px}.info-stats dt{color:var(--muted);font-size:12px}.info-stats dd{margin:2px 0 0;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:14px;font-weight:600}.info-card .info-glossary{border-top:1px solid var(--border);color:var(--muted);padding-top:12px;font-size:14px}.heap-tree{margin:8px 0 16px;position:relative}.tree-edges{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.tree-edges line{stroke:var(--border-strong);stroke-width:1.5px;transition:opacity .2s}.tree-edges line.out{opacity:.25}.tree-node{width:var(--node-size);aspect-ratio:1;background:var(--bar);color:var(--text);font-variant-numeric:tabular-nums;transition:left var(--move-ms) ease-in-out, top var(--move-ms) ease-in-out, background-color .12s, opacity .2s;border-radius:50%;place-items:center;font-size:13px;font-weight:600;display:grid;position:absolute;transform:translate(-50%,-50%)}.dense .tree-node{font-size:10px}.tree-node sup{font-size:.65em;font-weight:500}.tree-node.is-sorted{background:var(--sorted);opacity:.45}.tree-node.is-compare{background:var(--compare);box-shadow:0 0 0 2px var(--bg), 0 0 0 4px var(--compare)}.tree-node.is-swap{background:var(--swap) var(--stripes)}.tree-index{color:var(--muted);font-size:10px;position:absolute;transform:translate(-50%)}.tree-note{color:var(--muted);margin:8px 0 16px;font-size:14px}@media (prefers-reduced-motion:reduce){.tree-node{transition:none}}.player-controls{flex-wrap:wrap;align-items:center;gap:12px 20px;display:flex}.transport{gap:4px;display:flex}.icon-button{border:1px solid var(--border);background:var(--surface);width:40px;height:40px;color:var(--text);cursor:pointer;border-radius:8px;place-items:center;padding:0;display:grid}.icon-button:hover{border-color:var(--border-strong)}.sound-button{color:var(--muted)}.sound-button.is-on{color:var(--accent)}.icon-button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.scrub{flex:240px;align-items:center;gap:12px;display:flex}.scrub input{flex:1;min-width:0}.step-count,.speed-value{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:13px}.speed{align-items:center;gap:8px;font-size:14px;display:flex}.speed input{width:120px}.speed-value{min-width:72px}.app{flex-direction:column;gap:14px;max-width:1200px;margin:0 auto;padding:20px 16px 96px;display:flex}.app-header{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.theme-switcher{border:1px solid var(--border);background:var(--surface);border-radius:10px;flex:none;padding:3px;display:flex}.theme-switcher button{width:32px;height:32px;color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:7px;place-items:center;padding:0;display:grid}.theme-switcher button:hover{color:var(--text)}.theme-switcher button[aria-pressed=true]{background:var(--bg);color:var(--text);box-shadow:0 1px 3px #00000026}.app-header h1{margin:0;font-size:24px}.input-panel{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.field{color:var(--muted);flex-direction:column;gap:4px;font-size:13px;display:flex}.field select{border:1px solid var(--border);background:var(--bg);border-radius:8px;height:40px;padding:0 10px;font-size:15px}.array-field{flex:260px}.random-group{border:1px solid var(--border);border-radius:8px;align-items:center;gap:8px;height:40px;padding:0 4px 0 10px;display:flex}.random-group input[type=range]{width:110px}.random-group .shape-select{border:1px solid var(--border);background:var(--bg);border-radius:6px;height:30px;padding:0 6px;font-size:13px}.button.generate{background:var(--idle-bg);color:var(--idle-text)}.button.generate.is-ready{background:var(--ready-bg);border-color:var(--border-strong);color:var(--ready-text);box-shadow:0 1px 2px #00000014}.size-input{text-align:center;font-variant-numeric:tabular-nums;cursor:text;background:0 0;border:1px solid #0000;border-radius:4px;width:4ch;padding:2px 0;font-weight:600}.size-input:hover{border-color:var(--border)}.size-input:focus{border-color:var(--accent);background:var(--bg);outline:none}.button{border:1px solid var(--border);background:var(--surface);cursor:pointer;border-radius:8px;height:40px;padding:0 18px;font-weight:500}.button:hover{border-color:var(--border-strong)}.button.small{height:32px;padding:0 14px;font-size:14px}.button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.input-error{color:var(--error);flex-basis:100%;margin:0;font-size:14px}.stage{border:1px solid var(--border);border-radius:12px;padding:16px 20px 20px}.stage-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;display:flex}.stage-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.share-note{color:var(--muted);font-size:13px}.share-note:empty{display:none}.segmented{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:3px;display:flex}.segmented button{height:28px;color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:0 12px;font-size:13px}.segmented button[aria-pressed=true]{background:var(--bg);color:var(--text);font-weight:500;box-shadow:0 1px 3px #00000026}.stage-body{grid-template-columns:minmax(0,1fr) 420px;gap:24px;display:grid}.stage-main{min-width:0}.stage-side{flex-direction:column;gap:12px;min-width:0;padding-top:12px;display:flex}.stage-title{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.stage-title-line{align-items:center;gap:8px;display:flex}.stage-title h2{margin:0;font-size:20px;font-weight:650}.stage-variant{border:1px solid var(--chip-border);background:var(--chip-bg);color:var(--muted);cursor:help;border-radius:999px;padding:1px 8px;font-size:13px;position:relative}.variant-tip{z-index:10;background:var(--text);width:280px;color:var(--bg);visibility:hidden;opacity:0;pointer-events:none;border-radius:6px;padding:8px 10px;font-size:13px;line-height:1.45;transition:opacity .12s;position:absolute;top:calc(100% + 8px);left:0}.stage-variant:hover .variant-tip,.stage-variant:focus-visible .variant-tip{visibility:visible;opacity:1}.about-button{border:1px solid var(--border-strong);width:22px;height:22px;color:var(--muted);cursor:pointer;background:0 0;border-radius:50%;place-items:center;padding:0;font-size:13px;font-weight:600;display:grid}.about-button:hover{border-color:var(--accent);color:var(--accent)}.narration{min-height:72px;margin:4px 0 12px}.narration p{margin:0}.narration .narration-phase{color:var(--muted);margin-bottom:4px;font-size:14px}.narration-text{font-size:17px;line-height:1.55}.level-expert .narration-phase,.level-expert .narration-text{font-family:ui-monospace,SF Mono,Menlo,monospace}.level-expert .narration-text{font-size:15px}.legend{color:var(--muted);flex-wrap:wrap;gap:6px 16px;margin:0;padding:0;font-size:13px;list-style:none;display:flex}.legend li{align-items:center;gap:6px;display:flex}.swatch{border-radius:3px;width:12px;height:12px}.swatch-compare{background:var(--compare)}.swatch-swap,.swatch-write{background:var(--swap) var(--stripes)}.swatch-held{background:var(--held)}.swatch-sorted{background:var(--sorted)}.swatch-mark{background:var(--mark)}.swatch-ghost{border:1.5px dashed var(--border-strong)}.variant-picker{align-items:center;height:40px}.tree-section{margin-top:4px}.app>.player-controls{z-index:5;padding:10px max(16px, calc((100vw - 1200px) / 2 + 16px)) calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--border);background:var(--bg);position:fixed;bottom:0;left:0;right:0;box-shadow:0 -4px 12px #0000000a}.counters{gap:24px;margin:0;display:flex}.counters div{gap:6px;font-size:14px;display:flex}.counters dt{color:var(--muted)}.counters dd{font-variant-numeric:tabular-nums;margin:0;font-weight:600}@media (width<=900px){.stage-body{grid-template-columns:minmax(0,1fr)}.stage-side{padding-top:0}}@media (width<=600px){.stage{padding:12px}.narration-text{font-size:16px}.app>.player-controls{z-index:5;padding:10px max(16px, calc((100vw - 1200px) / 2 + 16px)) calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--border);background:var(--bg);position:fixed;bottom:0;left:0;right:0;box-shadow:0 -4px 12px #0000000a}.counters{gap:16px}}
