:root{
  --shell:#2ec4c4;
  --bg1:#1a1030; --bg2:#2d1b4e;
  --ink:#f3e9ff; --dim:#b6a5d8;
  --ok:#7fe0a0; --warn:#ffd24a; --err:#ff8fb1;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;padding:0;}
body{
  font-family:'Bricolage Grotesque',sans-serif;
  min-height:100vh;color:var(--ink);
  background:
    radial-gradient(circle at 20% 10%, rgba(46,196,196,.18), transparent 45%),
    radial-gradient(circle at 85% 80%, rgba(255,143,177,.16), transparent 40%),
    linear-gradient(160deg,var(--bg1),var(--bg2));
  overflow-x:hidden;
}
#stars{position:fixed;inset:0;pointer-events:none;z-index:0;
  background-image:radial-gradient(1px 1px at 20% 30%,#fff8,transparent),
    radial-gradient(1px 1px at 60% 70%,#fff6,transparent),
    radial-gradient(1px 1px at 80% 20%,#fff5,transparent),
    radial-gradient(1px 1px at 40% 85%,#fff4,transparent);
  background-size:cover;opacity:.5;}

#app{position:relative;z-index:1;max-width:520px;margin:0 auto;padding:22px 16px 40px;
  display:flex;flex-direction:column;gap:20px;}

header{text-align:center;animation:drop .6s ease both;}
h1{margin:0;font-weight:800;font-size:clamp(2.4rem,9vw,3.4rem);letter-spacing:-.03em;
  background:linear-gradient(90deg,var(--shell),#ff8fb1);-webkit-background-clip:text;background-clip:text;color:transparent;}
.tag{margin:.3rem 0 0;color:var(--dim);font-weight:200;font-size:.95rem;}
.tag b{font-weight:800;color:var(--ink);}
.tag .egg{filter:drop-shadow(0 0 6px var(--shell));}

/* ---------- the egg device ---------- */
#device-wrap{display:flex;justify-content:center;animation:drop .7s .1s ease both;}
.egg-shell{position:relative;width:290px;padding:34px 22px 20px;
  border-radius:50% 50% 46% 46% / 60% 60% 40% 40%;
  background:radial-gradient(circle at 35% 25%, #ffffff55, transparent 40%),
    linear-gradient(160deg, var(--shell), color-mix(in srgb, var(--shell) 60%, #000));
  box-shadow:inset 0 -14px 30px #0006, inset 0 8px 20px #fff5, 0 22px 50px #0009;
  transition:transform .1s;}
.egg-shell.buzzing{animation:wobble .18s infinite;}
.speckles{position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:.35;
  background-image:radial-gradient(2px 2px at 25% 40%,#fff,transparent),
    radial-gradient(2px 2px at 70% 30%,#fff,transparent),
    radial-gradient(3px 3px at 55% 65%,#fff,transparent),
    radial-gradient(2px 2px at 80% 70%,#fff,transparent),
    radial-gradient(2px 2px at 35% 78%,#fff,transparent);}

.bezel{position:relative;background:#14160f;border-radius:14px;padding:8px 10px;
  box-shadow:inset 0 3px 8px #000a, 0 2px 0 #ffffff22;}
#canvas{display:block;width:100%;height:auto;image-rendering:pixelated;border-radius:4px;
  box-shadow:inset 0 0 0 2px #0006;}
.icon-strip{display:flex;justify-content:space-around;font-size:.85rem;padding:2px 4px;filter:grayscale(1);opacity:.28;}
.icon-strip span{transition:all .2s;}
.icon-strip span.lit{filter:none;opacity:1;transform:scale(1.2);text-shadow:0 0 6px var(--shell);}

.buttons{display:flex;justify-content:space-around;margin-top:18px;padding:0 6px;}
.hw-btn{width:56px;height:56px;border-radius:50%;border:none;cursor:pointer;
  background:radial-gradient(circle at 35% 30%, #fff6, transparent 45%), color-mix(in srgb,var(--shell) 40%,#111);
  box-shadow:0 5px 0 #0007, inset 0 2px 4px #fff4;
  color:#fff;font-family:'VT323',monospace;font-size:1.6rem;transition:all .08s;}
.hw-btn span{display:block;transform:translateY(-1px);text-shadow:0 1px 2px #000a;}
.hw-btn.pressed{transform:translateY(4px);box-shadow:0 1px 0 #0007, inset 0 2px 4px #fff4;}
.brand{text-align:center;margin-top:14px;font-family:'VT323',monospace;font-size:.95rem;
  letter-spacing:2px;color:#ffffffaa;text-shadow:0 1px 0 #0006;}

/* dust puff */
.dust{position:absolute;width:6px;height:6px;background:#fff;border-radius:2px;pointer-events:none;
  animation:puff .7s ease-out forwards;}
@keyframes puff{to{transform:translate(var(--dx),var(--dy)) rotate(180deg);opacity:0;}}

/* ---------- loader ---------- */
.drop-zone{border:2px dashed #ffffff44;border-radius:18px;padding:24px;text-align:center;cursor:pointer;
  transition:all .2s;background:#ffffff0a;}
.drop-zone:hover,.drop-zone.drag-over{border-color:var(--shell);background:color-mix(in srgb,var(--shell) 14%,transparent);}
.drop-egg{font-size:2.4rem;animation:bob 2s ease-in-out infinite;}
.drop-title{margin:.4rem 0 .2rem;font-weight:800;font-size:1.2rem;}
.drop-sub{margin:0 0 .9rem;color:var(--dim);font-weight:200;font-size:.9rem;}
.pick-btn{display:inline-block;background:var(--shell);color:#111;font-weight:800;
  padding:.5rem 1.1rem;border-radius:999px;cursor:pointer;box-shadow:0 4px 0 #0006;transition:transform .1s;}
.pick-btn:active{transform:translateY(3px);box-shadow:0 1px 0 #0006;}
.rom-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:center;}
.rom-name{font-family:'VT323',monospace;font-size:1.05rem;color:var(--shell);}

/* ---------- controls ---------- */
#controls{background:#ffffff0c;border:1px solid #ffffff18;border-radius:18px;padding:16px;
  display:flex;flex-direction:column;gap:14px;animation:drop .7s .2s ease both;}
.ctl-row{display:flex;align-items:center;gap:12px;}
.ctl-row label{font-size:.85rem;color:var(--dim);min-width:66px;font-weight:400;}
.ctl-row label b{color:var(--ink);font-family:'VT323',monospace;font-size:1rem;}
.ctl-row input[type=range]{flex:1;accent-color:var(--shell);}
.ctl-row.picker{align-items:center;}
.swatches{display:flex;gap:8px;flex-wrap:wrap;}
.swatch{width:26px;height:26px;border-radius:8px;border:2px solid transparent;cursor:pointer;
  box-shadow:0 2px 4px #0005;transition:transform .1s;}
.swatch:hover{transform:scale(1.12);}
.swatch.active{border-color:#fff;box-shadow:0 0 0 2px var(--shell);}
.ctl-row.btns{flex-wrap:wrap;gap:8px;}
.mini{background:#ffffff14;border:1px solid #ffffff22;color:var(--ink);border-radius:10px;
  padding:.45rem .8rem;cursor:pointer;font-family:'Bricolage Grotesque',sans-serif;font-weight:400;
  font-size:.85rem;transition:all .12s;}
.mini:hover{background:var(--shell);color:#111;}
.mini.danger:hover{background:var(--err);}
.status{min-height:1.2em;font-size:.85rem;color:var(--dim);font-family:'VT323',monospace;
  font-size:1rem;line-height:1.3;}
.status.ok{color:var(--ok);} .status.warn{color:var(--warn);} .status.err{color:var(--err);}

/* ---------- debug ---------- */
.debug{background:#08060fdd;border:1px solid #ffffff22;border-radius:14px;padding:14px;
  font-family:'VT323',monospace;font-size:1rem;}
.dbg-regs{display:flex;flex-wrap:wrap;gap:6px 14px;margin-bottom:8px;color:var(--dim);}
.dbg-regs b{color:var(--shell);}
.dbg-op{color:var(--warn);margin-bottom:8px;}
.dbg-op b{color:var(--ink);}
.dbg-ram{margin:0;color:#7fe0a0;font-size:.95rem;line-height:1.25;overflow-x:auto;letter-spacing:1px;}

/* ---------- footer ---------- */
footer{text-align:center;color:var(--dim);font-size:.8rem;font-weight:200;}
footer p{margin:.3rem 0;}
footer a{color:var(--shell);text-decoration:none;font-weight:800;}
footer a:hover{text-decoration:underline;}

/* ---------- utilities ---------- */
.hidden{display:none !important;}

/* ---------- animations ---------- */
@keyframes drop{from{opacity:0;transform:translateY(-16px);}to{opacity:1;transform:none;}}
@keyframes bob{0%,100%{transform:translateY(0);}50%{transform:translateY(-6px);}}
@keyframes wobble{0%{transform:rotate(-1.2deg);}50%{transform:rotate(1.2deg);}100%{transform:rotate(-1.2deg);}}

@media(max-width:400px){
  .egg-shell{width:250px;}
  .hw-btn{width:48px;height:48px;font-size:1.3rem;}
}