body:after{content:"";position:fixed;top:-200px;left:-200px;width:600px;height:600px;background:radial-gradient(circle,rgba(0,255,200,.04) 0%,transparent 70%);pointer-events:none;z-index:0;animation:cornerPulse 8s ease-in-out infinite alternate}@keyframes cornerPulse{0%{opacity:.5}to{opacity:1}}.app{display:grid;grid-template-rows:auto 1fr auto;min-height:100vh;position:relative;z-index:1}header{display:flex;align-items:center;justify-content:space-between;padding:14px 28px;border-bottom:1px solid var(--border);background:var(--panel);backdrop-filter:blur(20px);position:sticky;top:0;z-index:100}.logo{font-family:var(--font-ui);font-weight:800;font-size:1.3rem;letter-spacing:-.5px;display:flex;align-items:center;gap:10px}.logo-icon{width:32px;height:32px;border:1.5px solid var(--cyan);border-radius:6px;display:grid;grid-template-columns:repeat(4,1fr);align-items:flex-end;gap:2px;padding:5px 4px 4px;animation:logoPulse 3s ease-in-out infinite}@keyframes logoPulse{0%,to{box-shadow:0 0 8px #00ffc833}50%{box-shadow:0 0 18px #00ffc880}}.logo-icon span{background:var(--cyan);border-radius:1px;display:block}.logo-icon span:nth-child(1){height:40%}.logo-icon span:nth-child(2){height:70%}.logo-icon span:nth-child(3){height:55%}.logo-icon span:nth-child(4){height:90%}.logo-text{color:#fff}.logo-text em{color:var(--cyan);font-style:normal}.logo-sub{font-size:.6rem;color:var(--muted);letter-spacing:3px;margin-top:2px;display:block;font-family:var(--font-mono)}.header-stats{display:flex;gap:24px}.stat-item{text-align:center;font-size:.7rem;color:var(--muted);letter-spacing:1px}.stat-item strong{display:block;font-size:1.1rem;font-weight:700;color:var(--cyan);font-family:var(--font-ui);letter-spacing:-.5px}.header-controls{display:flex;align-items:center;gap:10px}main{display:grid;grid-template-columns:260px 1fr 300px;gap:0;min-height:0;height:calc(100vh - 120px)}.panel{background:var(--panel);border-right:1px solid var(--border2);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.panel:last-child{border-right:none;border-left:1px solid var(--border2)}.panel-header{padding:14px 18px;border-bottom:1px solid var(--border2);display:flex;align-items:center;gap:8px;position:sticky;top:0;background:var(--panel);z-index:10}.panel-title{font-size:.65rem;letter-spacing:3px;color:var(--muted);text-transform:uppercase;font-family:var(--font-mono)}.panel-dot{width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 6px var(--cyan)}.algo-list{padding:12px;display:flex;flex-direction:column;gap:4px}.algo-item{padding:12px 14px;border-radius:8px;border:1px solid transparent;cursor:pointer;transition:all .3s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden}.algo-item:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--cyan);transform:scaleY(0);transition:transform .3s cubic-bezier(.16,1,.3,1)}.algo-item:hover{background:#00ffc80a;border-color:var(--border)}.algo-item:hover:before{transform:scaleY(1)}.algo-item.active{background:#00ffc812;border-color:#00ffc840}.algo-item.active:before{transform:scaleY(1)}.algo-name{font-family:var(--font-ui);font-weight:700;font-size:.85rem;color:#fff;margin-bottom:4px}.algo-item.active .algo-name{color:var(--cyan)}.algo-badges{display:flex;gap:5px;flex-wrap:wrap}.badge{font-size:.6rem;padding:2px 6px;border-radius:3px;font-family:var(--font-mono);letter-spacing:.5px}.badge-time{background:#00ffc81a;color:var(--cyan2);border:1px solid rgba(0,255,200,.2)}.badge-space{background:#b06fff1a;color:var(--purple);border:1px solid rgba(176,111,255,.2)}.badge-stable{background:#39ff851a;color:var(--green);border:1px solid rgba(57,255,133,.2)}.badge-unstable{background:#ff40601a;color:var(--red);border:1px solid rgba(255,64,96,.2)}.visualiser{display:flex;flex-direction:column;background:var(--bg);position:relative;overflow:hidden}.visualiser:before{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(0,255,200,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(0,255,200,.025) 1px,transparent 1px);background-size:40px 40px;pointer-events:none}.viz-top-bar{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--border2);background:#060810cc;backdrop-filter:blur(8px);position:relative;z-index:5;flex-shrink:0}.algo-display-name{font-family:var(--font-ui);font-weight:800;font-size:1.5rem;color:#fff;letter-spacing:-.5px}.algo-display-name span{color:var(--cyan)}.complexity-pills{display:flex;gap:10px;align-items:center}.cpill{font-size:.7rem;font-family:var(--font-mono);padding:4px 10px;border-radius:4px;display:flex;align-items:center;gap:5px}.cpill-label{color:var(--muted)}.cpill-val{color:#fff;font-weight:700}.cpill.best{background:#39ff8514;border:1px solid rgba(57,255,133,.2)}.cpill.avg{background:#ffb83014;border:1px solid rgba(255,184,48,.2)}.cpill.worst{background:#ff406014;border:1px solid rgba(255,64,96,.2)}.cpill.space{background:#b06fff14;border:1px solid rgba(176,111,255,.2)}.bar-canvas-wrap{flex:1;position:relative;padding:30px 24px 16px;min-height:320px;overflow:hidden}.bar-wrap{position:absolute;bottom:26px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;will-change:transform,left;transition:transform var(--bar-anim, .5s) cubic-bezier(.34,1.56,.5,1),left var(--bar-anim, .5s) cubic-bezier(.34,1.56,.5,1)}.bar-wrap.lifted{z-index:20}.bar{width:100%;border-radius:4px 4px 0 0;transition:height .22s cubic-bezier(.34,1.2,.64,1),background .18s ease,box-shadow .18s ease;position:relative;min-width:2px;box-shadow:inset -2px 0 #00000040,inset 0 2px #ffffff14,2px 4px 8px #00000059}.bar-val{position:absolute;bottom:-18px;left:50%;transform:translate(-50%);font-family:var(--font-mono);font-size:.62rem;font-weight:700;color:#b0c8d8;line-height:1;user-select:none;text-align:center;pointer-events:none}.bar.default{background:linear-gradient(to right,#2a4a72,#1e3a5c)}.bar.comparing{background:linear-gradient(to right,var(--amber),#cc8800);box-shadow:inset -2px 0 #0003,inset 0 2px #ffffff1f,0 0 18px #ffb83099,0 4px 14px #ffb8304d}.bar.swapping{background:linear-gradient(to right,var(--red),#cc1030);box-shadow:inset -2px 0 #0003,inset 0 2px #ffffff1f,0 0 24px #ff4060b3,0 6px 18px #ff406066}.bar.sorted{background:linear-gradient(to right,var(--green),#1a7a40);box-shadow:inset -2px 0 #0003,inset 0 2px #ffffff1a,0 0 14px #39ff8573,0 3px 10px #39ff8533}.bar.pivot{background:linear-gradient(to right,var(--purple),#6030bb);box-shadow:inset -2px 0 #0003,inset 0 2px #ffffff1a,0 0 20px #b06fffa6,0 5px 14px #b06fff4d}.bar.selected{background:linear-gradient(to right,var(--cyan),#006688);box-shadow:inset -2px 0 #0003,inset 0 2px #ffffff1a,0 0 20px #00ffc8a6,0 5px 14px #00ffc84d}.axis-line{position:absolute;bottom:0;left:24px;right:24px;height:1px;background:linear-gradient(90deg,transparent,var(--border),transparent)}.controls-bar{padding:14px 24px;border-top:1px solid var(--border2);display:flex;align-items:center;gap:16px;flex-wrap:wrap;background:#060810cc;backdrop-filter:blur(8px);flex-shrink:0}.btn-group{display:contents}.btn{display:inline-flex;align-items:center;gap:7px;padding:9px 18px;border-radius:6px;border:1px solid;font-family:var(--font-mono);font-size:.75rem;cursor:pointer;transition:all .25s cubic-bezier(.16,1,.3,1);letter-spacing:.5px;white-space:nowrap;position:relative;overflow:hidden}.btn-primary{background:var(--cyan);border-color:var(--cyan);color:#000;font-weight:700}.btn-primary:hover{background:#fff;box-shadow:0 0 24px #00ffc880;transform:translateY(-1px)}.btn-primary:active{transform:translateY(0)}.btn-primary:disabled{opacity:.4;cursor:not-allowed;transform:none}.btn-ghost{background:transparent;border-color:var(--border);color:var(--text)}.btn-ghost:hover{border-color:var(--cyan);color:var(--cyan);background:#00ffc80d;transform:translateY(-1px)}.btn-ghost:active{transform:translateY(0)}.btn-ghost:disabled{opacity:.4;cursor:not-allowed;transform:none}.btn-danger{background:transparent;border-color:#ff40604d;color:var(--red)}.btn-danger:hover{background:#ff40601a;box-shadow:0 0 12px #ff406033}.btn-amber{background:transparent;border-color:#ffb8304d;color:var(--amber)}.btn-amber:hover{background:#ffb8301a}.ctrl-group{display:flex;flex-direction:column;gap:4px;min-width:120px}.ctrl-label{font-size:.6rem;letter-spacing:2px;color:var(--muted);text-transform:uppercase;display:flex;justify-content:space-between}.ctrl-label span{color:var(--cyan);font-weight:700}.slider{-webkit-appearance:none;width:100%;height:3px;border-radius:2px;background:var(--bg3);outline:none;cursor:pointer}.slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--cyan);cursor:pointer;box-shadow:0 0 8px var(--cyan);transition:box-shadow .2s}.slider::-webkit-slider-thumb:hover{box-shadow:0 0 16px var(--cyan)}.slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--cyan);cursor:pointer;border:none}.sound-btn{width:36px;height:36px;border-radius:6px;border:1px solid var(--border);background:transparent;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1rem;transition:all .2s}.sound-btn.on,.sound-btn:hover{border-color:var(--cyan);color:var(--cyan)}.step-group{display:flex;gap:6px;align-items:center;margin-left:auto}.status-bar{display:flex;align-items:center;gap:20px;padding:8px 24px;border-top:1px solid var(--border2);background:var(--bg2);font-size:.65rem;letter-spacing:1px;flex-shrink:0}.status-item{display:flex;align-items:center;gap:6px;color:var(--muted)}.status-item strong{color:var(--text);font-family:var(--font-ui)}.status-dot{width:5px;height:5px;border-radius:50%}.status-dot.idle{background:var(--muted)}.status-dot.running{background:var(--amber);box-shadow:0 0 6px var(--amber);animation:blinkDot .8s infinite}.status-dot.done{background:var(--green);box-shadow:0 0 6px var(--green)}@keyframes blinkDot{0%,to{opacity:1}50%{opacity:.3}}.legend{display:flex;gap:14px;margin-left:auto;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:5px}.legend-swatch{width:8px;height:8px;border-radius:1px}.legend-label{font-size:.6rem;color:var(--muted);letter-spacing:.5px}.right-panel{display:flex;flex-direction:column;overflow:hidden;min-height:0}.pseudo-wrap{flex:0 0 auto;padding:14px;border-bottom:1px solid var(--border2)}.pseudo-block{border-radius:8px;overflow:hidden;border:1px solid var(--border2)}.pseudo-header{padding:8px 12px;background:var(--bg3);display:flex;align-items:center;gap:6px;border-bottom:1px solid var(--border2)}.pseudo-header-title{font-size:.65rem;letter-spacing:1px;color:var(--muted);text-transform:uppercase}.pseudo-header-lang{margin-left:auto;font-size:.6rem;color:var(--cyan);background:#00ffc814;padding:2px 7px;border-radius:3px;border:1px solid rgba(0,255,200,.15)}.pseudo-lines{padding:10px 0;background:var(--bg2)}.pline{display:flex;align-items:flex-start;gap:0;padding:2px 0;transition:background .25s cubic-bezier(.16,1,.3,1),border-color .25s ease;border-left:2px solid transparent}.pline.active{background:#00ffc814;border-left-color:var(--cyan)}.pline.active .pcode{color:var(--cyan)}.pline-num{width:32px;text-align:right;color:var(--muted);font-size:.65rem;padding:0 10px;flex-shrink:0;line-height:1.8;user-select:none}.pcode{font-size:.7rem;color:#89a;line-height:1.8;font-family:var(--font-mono);white-space:pre}.pcode .kw{color:var(--purple)}.pcode .fn{color:#7dd3fc}.pcode .num{color:var(--amber)}.pcode .cmt{color:#3a4a5a;font-style:italic}.pcode .str{color:var(--green)}.info-wrap{flex:1 1 0;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:12px;min-height:0}.info-card{background:var(--bg2);border:1px solid var(--border2);border-radius:8px;overflow:visible}.info-card-header{padding:8px 12px;border-bottom:1px solid var(--border2);display:flex;align-items:center;gap:6px}.info-card-title{font-size:.62rem;letter-spacing:2px;text-transform:uppercase;color:var(--muted)}.info-card-body{padding:12px;overflow-wrap:break-word;word-wrap:break-word}.info-desc{font-size:.75rem;color:#7a8a9a;line-height:1.7;word-wrap:break-word;overflow-wrap:break-word}.complexity-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.cx-item{padding:8px 10px;border-radius:6px;border:1px solid transparent}.cx-item.best{border-color:#39ff8526;background:#39ff850a}.cx-item.avg{border-color:#ffb83026;background:#ffb8300a}.cx-item.worst{border-color:#ff406026;background:#ff40600a;grid-column:span 1}.cx-item.space{border-color:#b06fff26;background:#b06fff0a}.cx-label{font-size:.58rem;color:var(--muted);letter-spacing:1px;text-transform:uppercase;margin-bottom:3px}.cx-val{font-family:var(--font-ui);font-weight:700;font-size:.82rem;word-break:break-word;overflow-wrap:break-word}.cx-item.best .cx-val{color:var(--green)}.cx-item.avg .cx-val{color:var(--amber)}.cx-item.worst .cx-val{color:var(--red)}.cx-item.space .cx-val{color:var(--purple)}.use-case-list{list-style:none;display:flex;flex-direction:column;gap:6px}.use-case-list li{font-size:.7rem;color:#6a7a8a;display:flex;align-items:flex-start;gap:8px;line-height:1.6;word-wrap:break-word;overflow-wrap:break-word}.use-case-list li:before{content:"›";color:var(--cyan);margin-top:0;flex-shrink:0}.modal-overlay{position:fixed;inset:0;background:#000000d9;backdrop-filter:blur(8px);z-index:500;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .3s}.modal-overlay.open{opacity:1;pointer-events:all}.modal{background:var(--bg2);border:1px solid var(--border);border-radius:12px;max-width:880px;width:95vw;max-height:85vh;overflow:auto;box-shadow:0 0 60px #00ffc81a;transform:translateY(24px) scale(.97);transition:transform .4s cubic-bezier(.16,1,.3,1),opacity .3s ease;opacity:0}.modal-overlay.open .modal{transform:translateY(0) scale(1);opacity:1}.modal-head{padding:20px 24px;border-bottom:1px solid var(--border2);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:var(--bg2)}.modal-title{font-family:var(--font-ui);font-size:1.2rem;font-weight:700;color:#fff}.modal-title span{color:var(--cyan)}.close-btn{width:32px;height:32px;border-radius:6px;border:1px solid var(--border);background:transparent;color:var(--muted);cursor:pointer;font-size:1rem;display:flex;align-items:center;justify-content:center;transition:all .2s}.close-btn:hover{border-color:var(--red);color:var(--red)}.cmp-table{width:100%;border-collapse:collapse;font-size:.72rem}.cmp-table th{padding:10px 14px;text-align:left;font-size:.6rem;letter-spacing:2px;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--border2);font-weight:400;white-space:nowrap}.cmp-table td{padding:11px 14px;border-bottom:1px solid rgba(255,255,255,.03);font-family:var(--font-mono);vertical-align:middle}.cmp-table tr:hover td{background:#00ffc805}.cmp-table .algo-col{font-family:var(--font-ui);font-weight:700;color:#fff;font-size:.8rem}.cmp-table .good{color:var(--green)}.cmp-table .ok{color:var(--amber)}.cmp-table .bad{color:var(--red)}.cmp-table .stab{color:var(--green);font-size:.65rem}.cmp-table .unstab{color:var(--red);font-size:.65rem}footer{padding:28px 40px;border-top:1px solid var(--border2);background:var(--panel);font-size:.72rem;color:var(--muted)}footer .footer-inner{max-width:1200px;margin:0 auto}footer span{color:var(--cyan)}@keyframes slideIn{0%{opacity:0;transform:scaleY(0);transform-origin:bottom}to{opacity:1;transform:scaleY(1);transform-origin:bottom}}.bar-wrap{animation:slideIn .4s cubic-bezier(.34,1.56,.64,1) both}@keyframes completePulse{0%{box-shadow:0 0 #39ff8566}70%{box-shadow:0 0 0 20px #39ff8500}to{box-shadow:0 0 #39ff8500}}@media(max-width:1100px){main{grid-template-columns:240px 1fr 270px}}@media(max-width:960px){main{grid-template-columns:220px 1fr}.right-panel{display:none}header{padding:12px 18px}.header-stats{gap:16px}.viz-top-bar{padding:12px 16px}.algo-display-name{font-size:1.25rem}}@media(max-width:680px){header{flex-wrap:wrap;gap:10px;padding:10px 14px}.header-stats{order:3;width:100%;justify-content:space-between;gap:8px}.header-controls{gap:8px}main{grid-template-columns:1fr;height:auto}.panel:first-child{border-right:none;border-bottom:1px solid var(--border2);max-height:30vh}.algo-list{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:6px}.algo-item{flex:0 0 auto;min-width:140px}.visualiser{min-height:0}.bar-canvas-wrap{flex:0 0 auto;height:48vh;min-height:280px;padding:16px 14px 12px}.viz-top-bar{flex-wrap:wrap;gap:8px;background:#060810;backdrop-filter:none}.complexity-pills{flex-wrap:wrap;gap:6px}.controls-bar{gap:10px;padding:12px 14px}.ctrl-group{min-width:100px;flex:1 1 100px}.step-group{margin-left:0}.btn-group{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;width:100%;order:-1}.btn-group .btn{width:100%;margin:0;padding:11px 8px;justify-content:center;text-align:center}.btn-group #btnTeach{grid-column:1 / -1}.status-bar{flex-wrap:wrap;gap:10px 16px;padding:8px 14px}.legend{margin-left:0;width:100%;gap:10px}.algo-name{font-size:.95rem}.algo-badges .badge{font-size:.68rem}.panel-title{font-size:.75rem}.btn{font-size:.82rem;padding:10px 14px}.ctrl-label{font-size:.7rem}.status-bar{font-size:.72rem}.legend-label{font-size:.68rem}.algo-display-name{font-size:1.3rem}.cpill{font-size:.75rem}.controls-bar{justify-content:center}.ctrl-group{min-width:80px;flex:1 1 120px}.modal{width:98vw;max-height:90vh}.modal-title{font-size:1rem}.cmp-table{font-size:.7rem}.cmp-table th,.cmp-table td{padding:8px;white-space:nowrap}footer{padding:20px 16px;font-size:.8rem}}@media(max-width:460px){html{font-size:16px}.header-stats{gap:6px;font-size:.7rem}.btn{padding:8px 12px;font-size:.8rem}.algo-item{min-width:124px}.modal{width:96vw}.cmp-table{font-size:.64rem}.cmp-table th,.cmp-table td{padding:8px 9px}.algo-name{font-size:.9rem}.logo{font-size:1.1rem}.stat-item{font-size:.72rem}.stat-item strong{font-size:1rem}.legend{gap:8px}.legend-label{font-size:.65rem}.algo-display-name{font-size:1.1rem}.panel-title{font-size:.72rem}footer{padding:16px 14px}}@media(max-width:680px){.visualiser{overflow:visible}}@media(max-width:680px){.bar-val{font-size:.5rem}}.btn-teach{background:linear-gradient(120deg,#b06fff2e,#00ffc82e);border-color:var(--purple);color:#fff;font-weight:700}.btn-teach:hover{border-color:var(--cyan);box-shadow:0 0 20px #b06fff73;transform:translateY(-1px)}.btn-teach.active{background:linear-gradient(120deg,var(--purple),var(--cyan));color:#08111a;box-shadow:0 0 18px #00ffc866}.teach-extra{display:block;margin-top:3px;font-size:.82rem;color:var(--muted);font-style:italic}.teach-popup{position:absolute;inset:16px 16px auto auto;transform:translateY(-8px);z-index:40;display:flex;align-items:flex-start;gap:10px;width:320px;max-width:calc(100% - 32px);padding:12px 16px;background:linear-gradient(135deg,#100c1ef5,#081018f5);border:1px solid var(--purple);border-radius:12px;box-shadow:0 14px 44px #0000008c,0 0 26px #b06fff47;opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s cubic-bezier(.16,1,.3,1)}.teach-popup.show{opacity:1;transform:translateY(0)}.teach-popup.pulse{animation:teachPop .3s cubic-bezier(.34,1.56,.64,1)}@keyframes teachPop{0%{transform:translateY(0) scale(.97)}60%{transform:translateY(0) scale(1.02)}to{transform:translateY(0) scale(1)}}.teach-popup-icon{font-size:1.2rem;line-height:1;flex-shrink:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:#b06fff29;border:1px solid rgba(176,111,255,.4);border-radius:8px}.teach-popup-text{font-family:var(--font-ui);font-size:.86rem;line-height:1.5;color:#e7eef6}.teach-popup-text .ev{color:var(--cyan);font-weight:800;font-family:var(--font-mono);padding:0 2px}.teach-popup-text .teach-extra{display:block;margin-top:4px;font-size:.78rem;color:var(--muted);font-style:italic}@media(max-width:680px){.teach-popup{inset:8px auto auto 50%;width:calc(100% - 16px);max-width:calc(100% - 16px);transform:translate(-50%) translateY(-10px);padding:9px 14px;min-height:0;gap:10px;background:linear-gradient(135deg,#100c1ef5,#081018f5);backdrop-filter:blur(6px);border-radius:10px;box-shadow:0 8px 24px #00000080,0 0 16px #b06fff33}.teach-popup.show{transform:translate(-50%) translateY(0)}.teach-popup.pulse{animation:teachPopMobile .3s cubic-bezier(.34,1.56,.64,1)}@keyframes teachPopMobile{0%{transform:translate(-50%) translateY(0) scale(.96)}60%{transform:translate(-50%) translateY(0) scale(1.02)}to{transform:translate(-50%) translateY(0) scale(1)}}.teach-popup-icon{width:22px;height:22px;font-size:.9rem}.teach-popup-text{font-size:.68rem;line-height:1.45}.teach-popup-text .teach-extra{font-size:.6rem;margin-top:2px}.teach-popup.show:not(.teach-active){opacity:0;pointer-events:none}}
