
:root{
  --void:#f3f4fa;
  --surface:#ffffff;
  --surface2:#eef0f7;
  --surface3:#e2e5f2;
  --line:#dbdfec;
  --ink:#1b1f30;
  --muted:#5c6280;
  --muted2:#868cac;
  --teal:#0e9c86;
  --teal-dim:#bfe9e0;
  --amber:#c9790f;
  --amber-dim:#f3ddab;
  --violet:#6a5cf0;
  --violet-dim:#dcd7fb;
  --rose:#d43f66;
  --green:#1f9d52;
  --shadow: 0 10px 30px rgba(20,24,40,0.12);

  --i-ptr-bg-from:#ffedcf;
  --j-ptr-bg-from:#d3f5ef;
  --k-ptr-bg-from:#e5e0fc;
  --sorted-bg-from:#d2f3de;
  --node-active-bg:#ffedcf;
  --node-visited-bg:#d2f3de;
  --node-frontier-bg:#d3f5ef;

  --syn-kw:#9333c9;
  --syn-tp:#2a63d6;
  --syn-st:#2f8f4e;
  --syn-cm:#868cac;
  --syn-fn:#0e8f8f;
  --syn-nm:#c9591f;
  --code-text:#262b40;
  --code-active-text:#14161f;
}
html[data-theme="dark"]{
  --void:#0b0d14;
  --surface:#12141f;
  --surface2:#191d2b;
  --surface3:#212739;
  --line:#262c40;
  --ink:#e7e9f5;
  --muted:#8b90ab;
  --muted2:#5c6180;
  --teal:#35e0c2;
  --teal-dim:#1c6e60;
  --amber:#ffb454;
  --amber-dim:#8a611f;
  --violet:#8b7cf6;
  --violet-dim:#463a8f;
  --rose:#ff6b8b;
  --green:#63e88f;
  --shadow: 0 10px 30px rgba(0,0,0,0.45);

  --i-ptr-bg-from:#3a2f16;
  --j-ptr-bg-from:#123a34;
  --k-ptr-bg-from:#2a2050;
  --sorted-bg-from:#123a26;
  --node-active-bg:#3a2f16;
  --node-visited-bg:#123a26;
  --node-frontier-bg:#123a34;

  --syn-kw:#c792ea;
  --syn-tp:#82aaff;
  --syn-st:#c3e88d;
  --syn-cm:#5c6180;
  --syn-fn:#82d9d9;
  --syn-nm:#f78c6c;
  --code-text:#c7cbe0;
  --code-active-text:#fff;
}
*{box-sizing:border-box;}
html,body{height:100%;}
body{
  margin:0;
  background:
    radial-gradient(circle at 15% 0%, rgba(139,124,246,0.08), transparent 40%),
    radial-gradient(circle at 90% 10%, rgba(53,224,194,0.07), transparent 45%),
    var(--void);
  color:var(--ink);
  font-family:'Inter',sans-serif;
  overflow:hidden;
  transition:background-color .2s ease, color .2s ease;
}
::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-track{background:var(--surface);}
::-webkit-scrollbar-thumb{background:var(--surface3);border-radius:6px;}
::-webkit-scrollbar-thumb:hover{background:var(--line);}

.app{
  display:grid;
  grid-template-columns: 260px 1fr;
  grid-template-rows: 56px 1fr 26px;
  grid-template-areas:
    "topbar topbar"
    "sidebar main"
    "footer footer";
  height:100vh;
  width:100vw;
}

.topbar{
  grid-area: topbar;
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:0 20px;
  border-bottom:1px solid var(--line);
  background:linear-gradient(180deg, rgba(25,29,43,0.9), rgba(18,20,31,0.9));
  backdrop-filter: blur(6px);
  z-index:10;
}
.brand{
  display:flex;
  align-items:center;
  gap:10px;
  font-family:'Space Grotesk',sans-serif;
  font-weight:700;
  font-size:18px;
  letter-spacing:0.2px;
  color: white;
}
.brand .dot{
  width:10px;height:10px;border-radius:3px;
  background:linear-gradient(135deg,var(--teal),var(--violet));
  box-shadow:0 0 12px rgba(139,124,246,0.6);
}
.brand small{
  font-family:'JetBrains Mono',monospace;
  font-weight:500;
  color:white;
  font-size:11px;
  border:1px solid var(--line);
  padding:2px 6px;
  border-radius:4px;
  margin-left:6px;
}
.topbar-right{display:flex;align-items:center;gap:14px;font-size:12px;color:var(--muted);font-family:'JetBrains Mono',monospace;}
.topbar-right span.k{color:var(--teal);}
.menu-btn{
  display:none;
  background:var(--surface2);border:1px solid var(--line);color:var(--ink);
  font-size:17px;line-height:1;padding:7px 11px;border-radius:8px;cursor:pointer;margin-right:8px;
  flex-shrink:0;
}
.menu-btn:hover{background:var(--surface3);}
.theme-btn{
  background:var(--surface2);border:1px solid var(--line);color:var(--ink);
  font-size:14px;line-height:1;width:34px;height:34px;border-radius:8px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
  transition:background .15s ease, transform .2s ease;
}
.theme-btn:hover{background:var(--surface3);}
.theme-btn:active{transform:scale(0.9);}
.theme-btn i{pointer-events:none;}
.sidebar-backdrop{
  display:none;
  position:fixed;top:56px;left:0;right:0;bottom:0;
  background:rgba(5,6,10,0.6);z-index:40;
}
.sidebar-backdrop.show{display:block;}

.sidebar{
  grid-area: sidebar;
  border-right:1px solid var(--line);
  background:var(--surface);
  overflow-y:auto;
  padding:14px 10px 40px;
  transition:transform .25s ease;
}
.cat{margin-bottom:4px;}
.cat-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:9px 10px;cursor:pointer;border-radius:8px;
  font-size:12.5px;font-weight:600;letter-spacing:0.4px;text-transform:uppercase;
  color:var(--muted);user-select:none;
}
.cat-head:hover{background:var(--surface2);color:var(--ink);}
.cat-head .chev{transition:transform .2s ease;font-size:10px;color:var(--muted2);}
.cat.open .cat-head .chev{transform:rotate(90deg);}
.cat-body{display:none;flex-direction:column;padding:2px 4px 10px 8px;gap:2px;}
.cat.open .cat-body{display:flex;}
.algo-item{
  padding:8px 10px;border-radius:7px;font-size:13px;color:var(--muted);
  cursor:pointer;border:1px solid transparent;display:flex;align-items:center;gap:8px;
}
.algo-item:hover{background:var(--surface2);color:var(--ink);}
.algo-item.active{
  background:linear-gradient(90deg, rgba(139,124,246,0.15), rgba(53,224,194,0.08));
  border-color:var(--violet-dim);color:var(--ink);font-weight:600;
}
.algo-item .tag{
  font-family:'JetBrains Mono',monospace;font-size:9.5px;color:var(--muted2);
  margin-left:auto;border:1px solid var(--line);padding:1px 5px;border-radius:4px;
}

.main{
  grid-area:main;
  display:grid;
  grid-template-columns: 1.15fr 0.85fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "stage code"
    "controls code";
  overflow:hidden;
}
.main-header{grid-area:header;padding:16px 22px 10px;border-bottom:1px solid var(--line);}
.main-header h1{
  font-family:'Space Grotesk',sans-serif;font-size:21px;margin:0 0 4px 0;
  display:flex;align-items:center;gap:10px;
}
.main-header .badge{
  font-family:'JetBrains Mono',monospace;font-size:10px;padding:3px 8px;border-radius:20px;
  border:1px solid var(--teal-dim);color:var(--teal);background:rgba(53,224,194,0.07);
}
.complexity-row{display:flex;gap:16px;flex-wrap:wrap;margin-top:8px;}
.complexity-chip{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);display:flex;gap:6px;align-items:center;}
.complexity-chip b{color:var(--ink);font-weight:600;}
.complexity-chip .v{color:var(--amber);}

.stage-wrap{grid-area:stage;display:flex;flex-direction:column;overflow:hidden;border-right:1px solid var(--line);}
.stage{flex:1;position:relative;overflow:auto;padding:22px;display:flex;align-items:center;justify-content:center;touch-action:pan-x pan-y;}
#canvasHost{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative;}
.zoom-content{display:inline-flex;align-items:center;justify-content:center;transform-origin:center center;transition:transform .12s ease;}
.desc-bar{
  border-top:1px solid var(--line);background:var(--surface);padding:12px 20px;min-height:46px;
  font-size:13px;color:var(--ink);display:flex;align-items:center;gap:10px;
}
.desc-bar .step-no{
  font-family:'JetBrains Mono',monospace;color:var(--teal);font-weight:600;font-size:12px;
  border:1px solid var(--teal-dim);padding:2px 7px;border-radius:20px;flex-shrink:0;
}
.desc-bar .desc-text{color:var(--muted);}
.desc-bar .desc-text b{color:var(--ink);}

.controls{
  grid-area:controls;border-top:1px solid var(--line);border-right:1px solid var(--line);
  background:var(--surface);padding:12px 20px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
}
.btn{
  background:var(--surface2);border:1px solid var(--line);color:var(--ink);padding:8px 14px;border-radius:8px;
  font-size:13px;cursor:pointer;display:flex;align-items:center;gap:6px;font-family:'Inter',sans-serif;
  font-weight:500;transition:all .15s ease;
}
.btn:hover{background:var(--surface3);border-color:var(--violet-dim);}
.btn:active{transform:scale(0.96);}
.btn.primary{background:linear-gradient(135deg,var(--violet),#6a5cf0);border-color:transparent;color:#fff;font-weight:600;}
.btn.primary:hover{filter:brightness(1.1);}
.btn:disabled{opacity:0.35;cursor:not-allowed;}
.spacer{flex:1;}
.speed-wrap{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);font-family:'JetBrains Mono',monospace;}
input[type=range]{accent-color:var(--teal);width:100px;}
.mini-input{
  background:var(--surface2);border:1px solid var(--line);color:var(--ink);padding:7px 10px;border-radius:7px;
  font-size:13px;font-family:'JetBrains Mono',monospace;width:90px;
}
.mini-input.wide{width:170px;}
label.mlabel{font-size:11px;color:var(--muted2);font-family:'JetBrains Mono',monospace;}

.zoom-wrap{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);font-family:'JetBrains Mono',monospace;}
.zoom-btn{
  background:var(--surface2);border:1px solid var(--line);color:var(--ink);width:28px;height:28px;border-radius:7px;
  cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0;
  transition:all .15s ease;
}
.zoom-btn:hover{background:var(--surface3);border-color:var(--violet-dim);}
.zoom-btn:active{transform:scale(0.92);}
.zoom-label{min-width:42px;text-align:center;color:var(--ink);font-weight:600;}

.code-wrap{grid-area:code;display:flex;flex-direction:column;overflow:hidden;background:var(--surface);}
.lang-tabs{display:flex;border-bottom:1px solid var(--line);overflow-x:auto;flex-shrink:0;}
.lang-tab{
  padding:11px 16px;font-size:12.5px;font-family:'JetBrains Mono',monospace;color:var(--muted);
  cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;font-weight:500;
}
.lang-tab:hover{color:var(--ink);}
.lang-tab.active{color:var(--teal);border-bottom-color:var(--teal);background:rgba(53,224,194,0.06);}
.code-area{flex:1;overflow:auto;position:relative;font-family:'JetBrains Mono',monospace;font-size:12.6px;line-height:1.65;}
.code-line{display:flex;padding:0 16px;white-space:pre;border-left:3px solid transparent;}
.code-line .ln{color:var(--muted2);width:30px;flex-shrink:0;user-select:none;text-align:right;margin-right:16px;}
.code-line .code-text{color:var(--code-text);}
.code-line.active{
  background:linear-gradient(90deg, rgba(255,180,84,0.14), rgba(255,180,84,0.02));
  border-left-color:var(--amber);
}
.code-line.active .code-text{color:var(--code-active-text);}
.code-line.active .ln{color:var(--amber);}
.kw{color:var(--syn-kw);} .tp{color:var(--syn-tp);} .st{color:var(--syn-st);} .cm{color:var(--syn-cm);font-style:italic;} .fn{color:var(--syn-fn);} .nm{color:var(--syn-nm);}

.bars-row{display:flex;align-items:flex-end;gap:6px;height:100%;width:100%;justify-content:center;padding-bottom:30px;}
.bar{
  position:relative;width:34px;border-radius:6px 6px 3px 3px;
  background:linear-gradient(180deg,var(--surface3),var(--surface2));border:1px solid var(--line);
  display:flex;align-items:flex-start;justify-content:center;transition:height .25s ease, background .2s ease, transform .2s ease;
}
.bar .val{position:absolute;bottom:-22px;font-size:11px;font-family:'JetBrains Mono',monospace;color:var(--muted);}
.bar .ptr{position:absolute;top:-26px;font-size:10px;font-family:'JetBrains Mono',monospace;font-weight:700;padding:2px 6px;border-radius:20px;white-space:nowrap;}
.bar.i-ptr{background:linear-gradient(180deg,var(--i-ptr-bg-from),var(--surface2));border-color:var(--amber-dim);}
.bar.i-ptr .ptr{background:var(--amber);color:#1a1300;top:-26px;}
.bar.j-ptr{background:linear-gradient(180deg,var(--j-ptr-bg-from),var(--surface2));border-color:var(--teal-dim);}
.bar.j-ptr .ptr{background:var(--teal);color:#00201a;top:-48px;}
.bar.k-ptr{background:linear-gradient(180deg,var(--k-ptr-bg-from),var(--surface2));border-color:var(--violet-dim);}
.bar.k-ptr .ptr{background:var(--violet);color:#fff;top:-70px;}
.bar.pivot{border-color:var(--rose);box-shadow:0 0 0 1px var(--rose);}
.bar.sorted{background:linear-gradient(180deg,var(--sorted-bg-from),var(--surface2));border-color:#1f5c3d;}
.bar.sorted .val{color:var(--green);}
.bar.found{background:linear-gradient(180deg,var(--sorted-bg-from),var(--surface2));border-color:var(--green);box-shadow:0 0 14px rgba(99,232,143,0.5);}

.stack-col, .queue-row{display:flex;gap:10px;align-items:center;}
.stack-col{flex-direction:column-reverse;}
.dsbox{
  min-width:70px;padding:12px 16px;background:var(--surface2);border:1px solid var(--line);border-radius:8px;
  font-family:'JetBrains Mono',monospace;font-size:14px;text-align:center;position:relative;color:var(--ink);
}
.dsbox.top{border-color:var(--amber);box-shadow:0 0 12px rgba(255,180,84,0.3);}
.dsbox.top::after{content:'TOP';position:absolute;right:-46px;top:50%;transform:translateY(-50%);font-size:9px;color:var(--amber);font-weight:700;}
.dsbox.front::before{content:'FRONT';position:absolute;top:-20px;left:50%;transform:translateX(-50%);font-size:9px;color:var(--teal);font-weight:700;}
.dsbox.rear::after{content:'REAR';position:absolute;bottom:-20px;left:50%;transform:translateX(-50%);font-size:9px;color:var(--violet);font-weight:700;}

.ll-row{display:flex;align-items:center;gap:0;flex-wrap:wrap;}
.ll-node{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--surface2);font-family:'JetBrains Mono',monospace;}
.ll-node .val{padding:12px 16px;font-size:14px;}
.ll-node .nxt{padding:12px 10px;border-left:1px solid var(--line);color:var(--muted2);font-size:12px;display:flex;align-items:center;}
.ll-node.active{border-color:var(--teal);box-shadow:0 0 12px rgba(53,224,194,0.3);}
.ll-node.new{border-color:var(--violet);}
.ll-arrow{color:var(--muted2);font-size:18px;margin:0 8px;}
.ll-null{font-family:'JetBrains Mono',monospace;color:var(--muted2);font-size:12px;margin-left:6px;}

.empty-hint{color:var(--muted2);font-family:'JetBrains Mono',monospace;font-size:13px;text-align:center;}

.legend{display:flex;gap:16px;flex-wrap:wrap;padding:0 22px 14px;}
.legend .li{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);font-family:'JetBrains Mono',monospace;}
.legend .sw{width:10px;height:10px;border-radius:3px;}

svg.dstruct{width:100%;height:100%;}
.node-circle{fill:var(--surface2);stroke:var(--line);stroke-width:2;transition:all .2s ease;}
.node-circle.active{fill:var(--node-active-bg);stroke:var(--amber);}
.node-circle.visited{fill:var(--node-visited-bg);stroke:var(--green);}
.node-circle.frontier{fill:var(--node-frontier-bg);stroke:var(--teal);}
.node-text{fill:var(--ink);font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:600;}
.edge-line{stroke:var(--line);stroke-width:2;}
.edge-line.active{stroke:var(--teal);stroke-width:3;}

.array-input-row{display:flex;gap:8px;align-items:center;}

.site-footer{
  grid-area:footer;
  display:flex;align-items:center;justify-content:center;gap:10px;
  border-top:1px solid var(--line);
  background:linear-gradient(180deg, rgba(18,20,31,0.9), rgba(11,13,20,0.95));
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted2);
  padding:0 12px;overflow:hidden;white-space:nowrap;
}
.site-footer a{color:var(--muted);text-decoration:none;border-bottom:1px dotted var(--line);transition:color .15s ease;}
.site-footer a:hover{color:var(--teal);border-bottom-color:var(--teal-dim);}
.site-footer .sep{color:var(--line);}

@media (max-width: 980px){
  html,body{height:auto;overflow-y:auto;overflow-x:hidden;}
  .app{
    grid-template-columns:1fr;
    grid-template-rows:56px auto minmax(0,auto);
    grid-template-areas:
      "topbar"
      "main"
      "footer";
    height:auto;min-height:100vh;width:100vw;
  }
  .menu-btn{display:inline-flex;align-items:center;justify-content:center;}
  .topbar{padding:0 12px;}
  .topbar-right{display:none;}
  .brand{font-size:15px;}
  .brand small{display:none;}

  .sidebar{
    display:flex;flex-direction:column;
    position:fixed;top:56px;left:0;bottom:0;
    width:82%;max-width:300px;
    transform:translateX(-105%);
    z-index:50;box-shadow:var(--shadow);
  }
  .sidebar.open{transform:translateX(0);}

  .main{
    grid-area:main;
    display:flex;flex-direction:column;
    overflow:visible;
  }
  .main-header{padding:12px 14px 8px;}
  .main-header h1{font-size:17px;gap:6px;flex-wrap:wrap;}
  .complexity-row{gap:8px 12px;margin-top:6px;}
  .complexity-chip{font-size:10px;}

  .stage-wrap{border-right:none;border-bottom:1px solid var(--line);}
  .stage{padding:14px 10px 26px;min-height:220px;overflow-x:auto;overflow-y:hidden;justify-content:flex-start;}
  #canvasHost{min-width:100%;width:max-content;justify-content:center;}
  .bar{width:26px;}
  .legend{padding:0 14px 12px;gap:10px;}
  .desc-bar{padding:10px 14px;font-size:12.5px;}

  .controls{
    border-right:none;
    padding:10px 14px;gap:8px;
  }
  .btn{padding:7px 11px;font-size:12.5px;}
  .speed-wrap{order:5;width:100%;justify-content:flex-start;}
  .zoom-wrap{order:4;}
  .dynamicControls, #dynamicControls{width:100%;}
  .array-input-row{width:100%;flex-wrap:wrap;}
  .mini-input.wide{width:100%;}

  .code-wrap{border-top:1px solid var(--line);min-height:280px;}
  .lang-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .code-area{max-height:340px;font-size:11.5px;}

  .site-footer{
    grid-area:footer;
    flex-wrap:wrap;
    gap:6px 10px;
    font-size:10.5px;
    padding:8px 12px;
    height:auto;
  }
}

@media (max-width: 480px){
  .main-header h1{font-size:15.5px;}
  .btn{padding:6px 9px;font-size:12px;}
  .bar{width:20px;}
  .code-area{font-size:11px;}
  .site-footer{font-size:10px;justify-content:flex-start;text-align:left;}
  .sidebar{width:88%;}
}
