/* QuantumCanvas — main layout, canvas, toolbar, nodes */

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#0A0C14;--surface:#0F1220;--card:#161A2E;--border:#1E2540;
  --teal:#00D4AA;--teal2:rgba(0,212,170,.12);--teal3:rgba(0,212,170,.06);
  --violet:#9B6DFF;--violet2:rgba(155,109,255,.12);
  --amber:#FFB84D;--amber2:rgba(255,184,77,.12);
  --rose:#FF6B9D;--rose2:rgba(255,107,157,.12);
  --gray:#8A97B4;--dim:#2E3550;--white:#EEF1FA;
  --valid:#00D4AA;--warn:#FFB84D;--error:#FF6B9D;
}
html,body{height:100%;overflow:hidden;background:var(--bg);color:var(--white);font-family:'DM Sans',sans-serif}

/* ── layout ── */
.app{display:grid;grid-template-columns:64px 1fr 280px;grid-template-rows:48px 1fr 44px;height:100vh}
.topbar{grid-column:1/4;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 14px;gap:12px;z-index:10}
.logo{font-family:'Space Mono',monospace;font-size:.9rem;color:var(--teal);letter-spacing:.02em}
.tb-sep{width:1px;height:20px;background:var(--border)}
.tb-tag{font-size:.68rem;padding:2px 8px;border-radius:20px;background:var(--teal2);color:var(--teal);font-weight:500;letter-spacing:.06em}
.tb-status{font-size:.75rem;color:var(--gray);margin-left:auto}
.tb-status b{color:var(--white);font-weight:500}

/* ── sidebar toolbar ── */
.sidebar{background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;padding:10px 0;gap:2px;overflow:hidden}
.tool-sep{width:36px;height:1px;background:var(--border);margin:6px 0}
.tool{width:44px;height:44px;border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;gap:2px;border:1px solid transparent;transition:all .15s;position:relative}
.tool:hover{background:var(--card);border-color:var(--border)}
.tool.active{background:var(--teal2);border-color:var(--teal)}
.tool-sym{font-size:16px;line-height:1}
.tool-lbl{font-size:8px;color:var(--gray);letter-spacing:.04em;font-family:'Space Mono',monospace}
.tool.active .tool-lbl{color:var(--teal)}
.tool.active .tool-sym{filter:drop-shadow(0 0 4px var(--teal))}
.tool[data-prim="shake"] .tool-sym{color:var(--teal)}
.tool[data-prim="mark"] .tool-sym{color:var(--rose)}
.tool[data-prim="boost"] .tool-sym{color:var(--amber)}
.tool[data-prim="link"] .tool-sym{color:var(--violet)}
.tool[data-prim="look"] .tool-sym{color:var(--gray)}
.tool[data-tool="select"] .tool-sym,.tool[data-tool="qubit"] .tool-sym{color:var(--white)}

/* ── canvas ── */
.canvas-wrap{position:relative;overflow:hidden;background:var(--bg);cursor:crosshair}
.canvas-wrap.select-mode{cursor:default}
#grid{position:absolute;inset:0;pointer-events:none}
#canvas{position:absolute;inset:0}

/* ── qubit nodes ── */
.qnode{position:absolute;transform:translate(-50%,-50%);width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .35s cubic-bezier(.4,0,.2,1);border:2px solid var(--border);background:var(--card);z-index:5;user-select:none}
.qnode:hover{border-color:var(--gray)}
.qnode.selected{border-color:var(--teal);box-shadow:0 0 0 3px var(--teal3)}
.qnode.state-ground .qlabel{color:var(--gray)}
.qnode.state-super{border-color:var(--teal);background:var(--teal3);animation:pulse-teal 2s ease-in-out infinite}
.qnode.state-marked{border-color:var(--rose);background:var(--rose2)}
.qnode.state-entangled{border-color:var(--violet);background:var(--violet2)}
.qnode.state-measured{border-color:var(--dim);background:var(--surface);opacity:.6}
.qnode.state-boosted{border-color:var(--amber);background:var(--amber2)}
.qnode.invalid-flash{animation:invalid-shake .4s ease-in-out}
@keyframes pulse-teal{0%,100%{box-shadow:0 0 0 3px rgba(0,212,170,.1)}50%{box-shadow:0 0 0 8px rgba(0,212,170,.06)}}
@keyframes invalid-shake{0%,100%{transform:translate(-50%,-50%)}20%{transform:translate(calc(-50% - 4px),-50%)}40%{transform:translate(calc(-50% + 4px),-50%)}60%{transform:translate(calc(-50% - 4px),-50%)}80%{transform:translate(calc(-50% + 4px),-50%)}}
.qlabel{font-family:'Space Mono',monospace;font-size:.65rem;font-weight:700;color:var(--white);text-align:center;line-height:1}
.qstate-dot{width:8px;height:8px;border-radius:50%;position:absolute;bottom:2px;right:2px}
.amp-display{position:absolute;bottom:-18px;left:50%;transform:translateX(-50%);font-family:'Space Mono',monospace;font-size:.6rem;color:var(--gray);white-space:nowrap}
.orb-ring{position:absolute;inset:-6px;border-radius:50%;pointer-events:none;opacity:0;transition:opacity .4s}
.qnode.state-super .orb-ring{opacity:.4;border:1px dashed var(--teal);animation:spin 8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── edge SVG layer ── */
#edge-layer{position:absolute;inset:0;pointer-events:none;z-index:3}

/* ── right panel ── */
.rpanel{background:var(--surface);border-left:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}
.rp-section{padding:10px 12px;border-bottom:1px solid var(--border)}
.rp-head{font-size:.65rem;font-weight:500;color:var(--gray);text-transform:uppercase;letter-spacing:.12em;margin-bottom:7px;font-family:'Space Mono',monospace}
.prim-item{display:flex;align-items:center;gap:8px;padding:5px 7px;border-radius:6px;margin-bottom:2px;cursor:pointer;transition:background .12s;border:1px solid transparent}
.prim-item:hover{background:var(--card);border-color:var(--border)}
.prim-item.active-prim{background:var(--card);border-color:var(--border)}
.prim-sym{width:26px;height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0}
.prim-name{font-size:.82rem;font-weight:500;color:var(--white)}
.prim-desc{font-size:.7rem;color:var(--gray)}
.prim-req{font-size:.65rem;margin-top:2px}

/* ── toast / feedback ── */
#toast-wrap{position:absolute;bottom:60px;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:6px;z-index:100;pointer-events:none}
.toast{padding:8px 16px;border-radius:8px;font-size:.8rem;font-weight:500;opacity:0;transform:translateY(6px);transition:all .25s;white-space:nowrap;border:1px solid transparent}
.toast.show{opacity:1;transform:translateY(0)}
.toast.valid{background:rgba(0,212,170,.12);border-color:rgba(0,212,170,.3);color:var(--teal)}
.toast.warn{background:rgba(255,184,77,.12);border-color:rgba(255,184,77,.3);color:var(--amber)}
.toast.error{background:rgba(255,107,157,.12);border-color:rgba(255,107,157,.3);color:var(--rose)}
.toast.info{background:rgba(155,109,255,.12);border-color:rgba(155,109,255,.3);color:var(--violet)}

/* ── state log ── */
#state-log{flex:1;overflow-y:auto;padding:8px 12px;font-size:.72rem;line-height:1.7;font-family:'Space Mono',monospace;color:var(--gray)}
.log-entry{margin-bottom:2px}
.log-entry.teal{color:var(--teal)}
.log-entry.rose{color:var(--rose)}
.log-entry.amber{color:var(--amber)}
.log-entry.violet{color:var(--violet)}
.log-entry.error{color:var(--error)}

/* ── status bar ── */
.statusbar{grid-column:1/4;background:var(--surface);border-top:1px solid var(--border);display:flex;align-items:center;padding:0 14px;gap:20px;font-size:.7rem;color:var(--gray);font-family:'Space Mono',monospace}
.sb-item b{color:var(--white)}

/* ── result panel ── */
#result-panel{position:absolute;bottom:54px;left:50%;transform:translateX(-50%);background:var(--card);border:1px solid var(--border);border-radius:10px;padding:12px 18px;z-index:50;display:none;min-width:300px;text-align:center}
.result-title{font-size:.7rem;color:var(--gray);text-transform:uppercase;letter-spacing:.1em;margin-bottom:8px;font-family:'Space Mono',monospace}
.result-bars{display:flex;gap:8px;align-items:flex-end;justify-content:center;height:60px;margin-bottom:6px}
.result-bar-wrap{display:flex;flex-direction:column;align-items:center;gap:3px}
.result-bar{width:28px;border-radius:3px 3px 0 0;transition:height .6s cubic-bezier(.4,0,.2,1);min-height:2px}
.result-bar-lbl{font-size:.62rem;font-family:'Space Mono',monospace;color:var(--gray)}
.result-bar-val{font-size:.65rem;font-family:'Space Mono',monospace}
.result-close{margin-top:8px;font-size:.72rem;color:var(--gray);cursor:pointer;text-decoration:underline}
.result-note{font-size:.75rem;color:var(--gray);margin-top:4px}
.result-note b{color:var(--white)}

/* ── hint overlay ── */
#hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;opacity:.4}
#hint p{font-size:.85rem;color:var(--gray);margin-top:6px}
#hint .hint-sym{font-size:2.5rem;margin-bottom:4px}
