*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
:root{
  --bg:#040810;--surf:#0A1020;--surf2:#111828;--surf3:#1A2438;
  --bdr:rgba(255,255,255,0.06);--bdr2:rgba(255,255,255,0.12);
  --text:#E8F0FF;--muted:rgba(232,240,255,0.42);--muted2:rgba(232,240,255,0.22);
  --c-in:#3B82F6;--c-in-bg:rgba(59,130,246,0.10);--c-in-bdr:rgba(59,130,246,0.30);
  --c-pr:#8B5CF6;--c-pr-bg:rgba(139,92,246,0.10);--c-pr-bdr:rgba(139,92,246,0.30);
  --c-me:#F59E0B;--c-me-bg:rgba(245,158,11,0.10);--c-me-bdr:rgba(245,158,11,0.30);
  --c-or:#06B6D4;--c-or-bg:rgba(6,182,212,0.10);--c-or-bdr:rgba(6,182,212,0.30);
  --c-out:#10B981;--c-out-bg:rgba(16,185,129,0.10);--c-out-bdr:rgba(16,185,129,0.30);
  --green:#2ECC71;--red:#FF4B6E;--gold:#FFD166;
  --radius:12px;--radius-sm:7px;
}
html,body{width:100%;min-height:100%;background:var(--bg);color:var(--text);font-family:'DM Sans',sans-serif;-webkit-font-smoothing:antialiased;overflow-x:hidden}

/* Circuit board grid bg */
body::before{content:'';position:fixed;inset:0;
  background-image:
    linear-gradient(rgba(59,130,246,.025) 1px,transparent 1px),
    linear-gradient(90deg,rgba(59,130,246,.025) 1px,transparent 1px);
  background-size:40px 40px;pointer-events:none;z-index:0}

/* Ambient glow */
.orb{position:fixed;border-radius:50%;filter:blur(100px);pointer-events:none;z-index:0;opacity:.08}
.orb1{width:400px;height:400px;background:var(--c-in);top:-100px;right:-100px}
.orb2{width:300px;height:300px;background:var(--c-pr);bottom:-80px;left:-80px}

.wrap{position:relative;z-index:1;min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:0 0 2rem}

/* ══ SCREENS ══ */
.scr{display:none;flex-direction:column;align-items:center;width:100%;max-width:460px;padding:1rem}
.scr.on{display:flex;animation:fadeUp .25s ease}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* ══ START SCREEN ══ */
.logo-chip{font-family:'Space Mono',monospace;font-size:10px;letter-spacing:.15em;text-transform:uppercase;color:var(--c-in);background:var(--c-in-bg);border:1px solid var(--c-in-bdr);padding:5px 14px;border-radius:20px;margin-bottom:1.2rem}
h1.main{font-family:'Syne',sans-serif;font-size:36px;font-weight:800;letter-spacing:-.03em;text-align:center;line-height:1.05;margin-bottom:.5rem}
h1.main .gr{background:linear-gradient(135deg,var(--c-in),var(--c-pr));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.tagline{font-size:13.5px;color:var(--muted);text-align:center;line-height:1.7;max-width:300px;margin-bottom:1.5rem}

/* Level select grid */
.lvl-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;width:100%;margin-bottom:1.5rem}
.lvl-card{background:var(--surf);border:1px solid var(--bdr);border-radius:var(--radius);padding:.9rem 1rem;cursor:pointer;transition:border-color .18s,transform .12s;position:relative;overflow:hidden}
.lvl-card:hover{border-color:var(--bdr2)}
.lvl-card:active{transform:scale(.97)}
.lvl-card.locked{opacity:.4;cursor:not-allowed}
.lvl-card.complete .lvl-badge{background:var(--c-out-bg);border-color:var(--c-out-bdr);color:var(--c-out)}
.lvl-num{font-family:'Space Mono',monospace;font-size:10px;color:var(--muted);margin-bottom:3px}
.lvl-name{font-weight:500;font-size:14px;color:var(--text);margin-bottom:4px}
.lvl-mode{font-size:11px;color:var(--muted)}
.lvl-badge{display:inline-block;font-size:10px;padding:2px 8px;border-radius:10px;background:var(--surf2);border:1px solid var(--bdr);color:var(--muted);margin-top:5px}
.lvl-star{position:absolute;top:8px;right:8px;font-size:12px;opacity:0;transition:opacity .3s}
.lvl-card.complete .lvl-star{opacity:1}
.lvl-card-5{grid-column:1/-1}

/* ══ GAME SCREEN ══ */
/* HUD */
.hud{display:flex;justify-content:space-between;align-items:center;width:100%;padding:.5rem 0 .75rem}
.hud-chip{background:var(--surf);border:1px solid var(--bdr);border-radius:var(--radius-sm);padding:5px 11px;text-align:center}
.hud-chip .hl{font-size:9px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:1px}
.hud-chip .hv{font-family:'Space Mono',monospace;font-size:15px;color:var(--text)}
.hud-back{background:var(--surf);border:1px solid var(--bdr);border-radius:var(--radius-sm);padding:6px 12px;cursor:pointer;font-size:13px;color:var(--muted);transition:color .15s}
.hud-back:hover{color:var(--text)}

/* Goal card */
.goal-card{background:var(--surf);border:1px solid var(--bdr);border-radius:var(--radius);padding:.9rem 1rem;width:100%;margin-bottom:.9rem;position:relative;overflow:hidden}
.goal-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,var(--c-in),var(--c-pr))}
.goal-mode{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:4px;font-family:'Space Mono',monospace}
.goal-title{font-family:'Syne',sans-serif;font-size:17px;font-weight:700;margin-bottom:4px}
.goal-desc{font-size:13px;color:var(--muted);line-height:1.6}
.goal-hint{font-size:12px;color:var(--c-or);margin-top:5px;display:none}

/* ══ PIPELINE ══ */
.pipeline{display:flex;flex-direction:column;align-items:center;width:100%;gap:0;margin-bottom:.75rem}

.slot-wrap{width:100%;display:flex;flex-direction:column;align-items:center}

.slot{
  width:100%;border-radius:var(--radius);border:1px dashed var(--bdr2);background:var(--surf);
  padding:.65rem .8rem;cursor:pointer;transition:border-color .18s,background .18s,transform .1s;
  display:flex;align-items:center;gap:.65rem;min-height:64px;position:relative;overflow:hidden
}
.slot:hover{border-color:var(--bdr2);background:var(--surf2)}
.slot.drag-over{border-color:var(--c-in);background:var(--c-in-bg)}
.slot.filled{border-style:solid}
.slot.filled:hover{transform:scale(1.01)}
.slot.checking{animation:slotCheck .5s ease}
.slot.success{border-color:var(--green) !important;background:rgba(46,204,113,0.08) !important}
.slot.error{border-color:var(--red) !important;background:rgba(255,75,110,0.08) !important;animation:slotErr .35s ease}
.slot.warn-prefill{border-color:rgba(245,158,11,.4);border-style:solid}

@keyframes slotCheck{0%,100%{transform:scale(1)}50%{transform:scale(1.02)}}
@keyframes slotErr{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}

/* Layer accent bar */
.slot::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;border-radius:3px 0 0 3px}
.slot[data-layer=input]::before{background:var(--c-in)}
.slot[data-layer=processing]::before{background:var(--c-pr)}
.slot[data-layer=memory]::before{background:var(--c-me)}
.slot[data-layer=orchestration]::before{background:var(--c-or)}
.slot[data-layer=output]::before{background:var(--c-out)}

.slot-lbl{position:absolute;top:4px;right:8px;font-size:9px;font-family:'Space Mono',monospace;letter-spacing:.06em;text-transform:uppercase;opacity:.5}
.slot[data-layer=input] .slot-lbl{color:var(--c-in)}
.slot[data-layer=processing] .slot-lbl{color:var(--c-pr)}
.slot[data-layer=memory] .slot-lbl{color:var(--c-me)}
.slot[data-layer=orchestration] .slot-lbl{color:var(--c-or)}
.slot[data-layer=output] .slot-lbl{color:var(--c-out)}

/* Slot empty state */
.slot-empty{display:flex;flex-direction:column;padding-left:4px}
.slot-empty-icon{font-size:20px;margin-bottom:2px;opacity:.25}
.slot-empty-text{font-size:12px;color:var(--muted2)}
.slot-hint{font-size:11px;color:var(--c-or);margin-top:3px;display:none}

/* Slot filled state */
.slot-card-ico{font-size:24px;flex-shrink:0;width:36px;text-align:center}
.slot-card-info{display:flex;flex-direction:column;min-width:0}
.slot-card-name{font-weight:500;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.slot-card-desc{font-size:11px;color:var(--muted);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.slot-remove{margin-left:auto;font-size:16px;color:var(--muted2);flex-shrink:0;padding:2px 4px;transition:color .15s}
.slot-remove:hover{color:var(--red)}

/* Slot result overlay */
.slot-result{position:absolute;right:8px;bottom:5px;font-size:12px;font-weight:500;opacity:0;transition:opacity .25s}
.slot.success .slot-result{opacity:1;color:var(--green)}
.slot.error .slot-result{opacity:1;color:var(--red)}

/* Connector arrow */
.connector{display:flex;flex-direction:column;align-items:center;padding:2px 0;gap:1px}
.conn-line{width:2px;height:14px;background:var(--bdr2);position:relative;overflow:hidden}
.conn-line.flowing::after{content:'';position:absolute;top:-100%;left:0;width:100%;height:100%;background:linear-gradient(180deg,transparent,var(--c-in),transparent);animation:flow .6s linear infinite}
.conn-arrow{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid var(--bdr2);transition:border-top-color .3s}
.conn-arrow.flowing{border-top-color:var(--c-in)}
@keyframes flow{to{top:200%}}

/* Packet dot */
.packet{position:absolute;width:8px;height:8px;border-radius:50%;background:var(--c-in);box-shadow:0 0 8px var(--c-in),0 0 16px var(--c-in);pointer-events:none;z-index:10;transition:top .35s ease;left:50%;transform:translateX(-50%)}

/* ══ RUN BUTTON ══ */
.run-btn{width:100%;background:linear-gradient(135deg,var(--c-in),var(--c-pr));border:none;border-radius:var(--radius);padding:14px;font-family:'DM Sans',sans-serif;font-size:15px;font-weight:500;color:#fff;cursor:pointer;letter-spacing:.02em;transition:opacity .15s,transform .1s;box-shadow:0 0 24px rgba(59,130,246,.25);margin-bottom:.75rem}
.run-btn:hover{opacity:.88}
.run-btn:active{transform:scale(.98)}
.run-btn:disabled{opacity:.4;cursor:not-allowed}
.run-btn.running{animation:btnPulse 1s ease-in-out infinite}
@keyframes btnPulse{0%,100%{box-shadow:0 0 24px rgba(59,130,246,.25)}50%{box-shadow:0 0 40px rgba(59,130,246,.5)}}

/* ══ FEEDBACK LOG ══ */
.log{width:100%;background:var(--surf);border:1px solid var(--bdr);border-radius:var(--radius);padding:.75rem;margin-bottom:.75rem;display:none;font-family:'Space Mono',monospace;font-size:12px;line-height:1.8;max-height:130px;overflow-y:auto}
.log-line{display:flex;gap:6px;align-items:flex-start}
.log-line.ok .tag{color:var(--green)}.log-line.err .tag{color:var(--red)}.log-line.info .tag{color:var(--c-or)}
.log-line.ok .txt{color:rgba(46,204,113,.8)}.log-line.err .txt{color:rgba(255,75,110,.85)}.log-line.info .txt{color:var(--muted)}
.tag{flex-shrink:0}

/* ══ CARD HAND ══ */
.hand-header{width:100%;display:flex;align-items:center;justify-content:space-between;margin-bottom:.45rem}
.hand-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-family:'Space Mono',monospace}
.sel-label{font-size:11px;color:var(--c-in)}
.hand-scroll{
  width:100%;overflow-x:auto;padding-bottom:8px;
  -webkit-overflow-scrolling:touch;
  touch-action:pan-x;
  cursor:grab;
}
.hand-scroll:active{cursor:grabbing}
.hand-scroll::-webkit-scrollbar{height:4px}
.hand-scroll::-webkit-scrollbar-track{background:var(--surf);border-radius:2px}
.hand-scroll::-webkit-scrollbar-thumb{background:var(--bdr2);border-radius:2px}
.hand-inner{display:flex;gap:8px;width:max-content;padding:2px 4px 2px 0}

/* Mini cards in hand */
.card{
  width:100px;flex-shrink:0;background:var(--surf);border:1px solid var(--bdr);
  border-radius:var(--radius);padding:.55rem .6rem;cursor:pointer;
  transition:border-color .15s,transform .12s,opacity .2s;
  position:relative;overflow:hidden;user-select:none;
  touch-action:manipulation;
}
.card:hover{border-color:var(--bdr2);transform:translateY(-2px)}
.card:active{transform:scale(.93)}
.card.selected{border-color:var(--c-in);box-shadow:0 0 14px rgba(59,130,246,.3)}
.card.used{opacity:.32;pointer-events:none}
.card.drag-src{opacity:.4}

/* Layer left strip on card */
.card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;border-radius:2px 0 0 2px}
.card[data-layer=input]::before{background:var(--c-in)}
.card[data-layer=processing]::before{background:var(--c-pr)}
.card[data-layer=memory]::before{background:var(--c-me)}
.card[data-layer=orchestration]::before{background:var(--c-or)}
.card[data-layer=output]::before{background:var(--c-out)}

.card-ico{font-size:20px;margin-bottom:3px;padding-left:2px}
.card-name{font-size:11px;font-weight:500;color:var(--text);line-height:1.3;padding-left:2px}
.card-tag{font-size:9px;font-family:'Space Mono',monospace;margin-top:3px;padding:1px 5px;border-radius:4px;display:inline-block;padding-left:2px}
.card[data-layer=input] .card-tag{color:var(--c-in)}
.card[data-layer=processing] .card-tag{color:var(--c-pr)}
.card[data-layer=memory] .card-tag{color:var(--c-me)}
.card[data-layer=orchestration] .card-tag{color:var(--c-or)}
.card[data-layer=output] .card-tag{color:var(--c-out)}

/* Drag ghost */
.drag-ghost{position:fixed;width:100px;pointer-events:none;z-index:1000;opacity:.92;transform:rotate(3deg) scale(1.05);border-radius:var(--radius);border:1px solid var(--c-in);background:var(--surf2);padding:.55rem .6rem;box-shadow:0 8px 24px rgba(0,0,0,.5)}
.drag-ghost .card-ico{font-size:20px;margin-bottom:3px}
.drag-ghost .card-name{font-size:11px;font-weight:500}

/* ══ EXPLANATION PANEL ══ */
.explain{width:100%;background:var(--surf);border:1px solid var(--c-or-bdr);border-radius:var(--radius);padding:.75rem;margin-bottom:.75rem;display:none}
.explain-title{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--c-or);font-family:'Space Mono',monospace;margin-bottom:.5rem}
.explain-item{font-size:12.5px;color:var(--muted);line-height:1.7;margin-bottom:4px;display:flex;gap:7px}
.explain-ico{flex-shrink:0;width:18px;text-align:center}

/* ══ SCORE POPUP ══ */
.score-pop{position:fixed;font-family:'Space Mono',monospace;font-size:18px;font-weight:700;pointer-events:none;z-index:500;color:var(--green);animation:scorePop .9s ease forwards}
@keyframes scorePop{0%{opacity:1;transform:translateY(0) scale(.8)}60%{transform:translateY(-28px) scale(1.1)}100%{opacity:0;transform:translateY(-55px) scale(.9)}}

/* ══ WIN / COMPLETE SCREENS ══ */
.win-card{background:var(--surf);border:1px solid var(--bdr);border-radius:20px;padding:1.75rem;width:100%;text-align:center;position:relative;overflow:hidden}
.win-card::before{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:60%;height:1px;background:linear-gradient(90deg,transparent,var(--green),transparent)}
.win-icon{font-size:46px;margin-bottom:.6rem}
.win-title{font-family:'Syne',sans-serif;font-size:26px;font-weight:800;letter-spacing:-.025em;margin-bottom:.35rem}
.win-sub{font-size:13.5px;color:var(--muted);line-height:1.65;margin-bottom:1rem;max-width:280px;margin-left:auto;margin-right:auto}
.stars{display:flex;gap:6px;justify-content:center;margin-bottom:.9rem;font-size:22px}
.score-box{background:var(--surf2);border:1px solid var(--bdr);border-radius:var(--radius-sm);padding:.65rem 1.2rem;display:inline-block;margin-bottom:1rem}
.score-num{font-family:'Space Mono',monospace;font-size:28px;color:var(--green)}
.score-lbl{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.07em;margin-top:2px}
.arch-rank{font-size:12px;color:var(--c-or);margin-bottom:1rem;font-family:'Space Mono',monospace}

/* Buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:'DM Sans',sans-serif;font-size:15px;font-weight:500;border:none;border-radius:var(--radius);padding:13px 22px;cursor:pointer;transition:transform .12s,opacity .12s;letter-spacing:.01em;-webkit-tap-highlight-color:transparent;width:100%}
.btn:active{transform:scale(.97)}
.btn-primary{background:linear-gradient(135deg,var(--c-in),var(--c-pr));color:#fff;box-shadow:0 0 24px rgba(59,130,246,.25)}
.btn-primary:hover{opacity:.88}
.btn-ghost{background:var(--surf2);color:var(--text);border:1px solid var(--bdr);margin-top:.6rem}
.btn-ghost:hover{background:var(--surf3)}
.btn-row{display:flex;gap:8px;width:100%}

/* Complete screen */
.complete-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;width:100%;margin-bottom:1rem}
.c-cell{background:var(--surf2);border:1px solid var(--bdr);border-radius:var(--radius-sm);padding:.65rem;text-align:center}
.c-ico{font-size:20px;margin-bottom:3px}
.c-lbl{font-size:11px;color:var(--muted)}
.c-val{font-family:'Space Mono',monospace;font-size:14px;font-weight:700;color:var(--text)}

/* Confetti canvas */
#cv{position:fixed;inset:0;pointer-events:none;z-index:999;display:none}

@media(max-width:380px){
  .card{width:88px}
  h1.main{font-size:30px}
  .lvl-grid{grid-template-columns:1fr}
  .lvl-card-5{grid-column:1/-1}
}
