:root{
  --bg:#000; --chrome:#0a0a0a; --line:#242424; --ink:#f2f2f2; --dim:#8e8e8e;
  --mono:"SFMono-Regular",ui-monospace,Menlo,Consolas,monospace;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);
  font:14px/1.4 system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;overscroll-behavior:none}
button{font-family:inherit;color:inherit;background:none;border:0;cursor:pointer}
.hidden{display:none !important}

#app{display:flex;flex-direction:column;height:100%;max-width:560px;margin:0 auto;background:var(--bg)}

/* ---- top bar ---- */
.top{display:grid;grid-template-columns:1fr auto 1fr;align-items:stretch;border-bottom:1px solid var(--line)}
.top-btn{padding:14px 8px;font-size:17px;letter-spacing:.08em}
.top-btn:disabled{color:#4a4a4a;cursor:default}
.brand{padding:14px 18px;border-left:1px solid var(--line);border-right:1px solid var(--line);
  font-family:var(--mono);font-size:19px;font-weight:700;letter-spacing:.16em;
  text-shadow:1px 0 0 rgba(255,255,255,.35), 0 1px 0 rgba(255,255,255,.2)}

/* ---- stage ---- */
#stage{flex:1;min-height:130px;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}
.drop{margin:18px;padding:34px 20px;border:1px dashed #3a3a3a;border-radius:2px;text-align:center;color:var(--dim);width:calc(100% - 36px)}
.drop.hot{border-color:#fff;color:#fff}
.drop-mark{font-size:34px;color:#5c5c5c;margin-bottom:6px}
.drop-t{font-size:16px;color:#dcdcdc;letter-spacing:.06em}
.drop-s{margin-top:8px;font-size:12px;line-height:1.7}
.drop-s b{color:#e8c46a;font-weight:600}
.viewport{position:absolute;inset:0;touch-action:none;overflow:hidden}
#cv{position:absolute;left:0;top:0;transform-origin:0 0;box-shadow:0 0 0 1px rgba(255,255,255,.08)}
.stagehint{position:absolute;bottom:6px;left:0;right:0;text-align:center;font-size:11px;color:#5f5f5f;pointer-events:none}
.err-inline{position:absolute;left:10px;right:10px;bottom:10px;background:#3a1010;border:1px solid #8a3a3a;
  color:#ffd9d9;padding:8px 10px;font-size:12px;white-space:pre-wrap;z-index:5}

/* ---- tools ---- */
.tools{border-top:1px solid var(--line);background:var(--chrome)}
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-bottom:1px solid var(--line)}
.layouts{display:flex;gap:8px}
.lay{width:46px;height:34px;border:1px solid #3a3a3a;border-radius:2px;display:flex;align-items:center;justify-content:center;background:#151515}
.lay.on{border-color:#fff;background:#1d1d1d}
.lay svg{display:block}
.tb-right{display:flex;align-items:center;gap:8px}
.tb{padding:7px 10px;border:1px solid #3a3a3a;border-radius:2px;font-size:12px;color:#d8d8d8;background:#151515}
.tb.sq{width:34px;height:32px;padding:0;font-size:16px;line-height:1}
.tb:disabled{color:#4a4a4a;border-color:#242424}

.panel{padding:10px 12px 12px;display:flex;flex-direction:column;gap:10px;max-height:46vh;overflow:auto}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px 16px}
.sl{display:flex;align-items:center;gap:8px;font-size:12px;color:#cfcfcf}
.sl label{width:34px;flex:0 0 auto;color:#bdbdbd;letter-spacing:.08em}
.sl input[type=range]{flex:1;min-width:0}
.sl .val{width:46px;text-align:right;font-family:var(--mono);font-size:11px;color:#8f8f8f}
input[type=range]{-webkit-appearance:none;appearance:none;height:18px;background:transparent}
input[type=range]::-webkit-slider-runnable-track{height:2px;background:#5a5a5a}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;background:#fff;margin-top:-6px;border-radius:1px}
input[type=range]::-moz-range-track{height:2px;background:#5a5a5a}
input[type=range]::-moz-range-thumb{width:14px;height:14px;background:#fff;border:0;border-radius:1px}

.strip{display:flex;gap:10px;overflow-x:auto;padding:4px 0 6px}
.shape{flex:0 0 auto;width:40px;height:40px;border-radius:2px;display:flex;align-items:center;justify-content:center;
  border:1px solid transparent;background:#111}
.shape.on{border-color:#fff}
.shape svg{width:26px;height:26px;display:block}
.shape svg polygon{fill:#9a9a9a}
.shape.on svg polygon{fill:#fff}

.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.row.tight{gap:6px}
.chip{padding:6px 10px;border:1px solid #3a3a3a;border-radius:2px;font-size:12px;color:#cacaca;background:#151515;white-space:nowrap}
.chip.on{border-color:#fff;color:#fff;background:#1e1e1e}
.chip:disabled{color:#555;border-color:#222}
.seedrow{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--dim)}
.seedrow input{width:96px;background:#111;border:1px solid #3a3a3a;color:#fff;font-family:var(--mono);padding:5px 6px;border-radius:2px}
.note{font-size:11px;color:#6f6f6f;line-height:1.6}

.sw{width:40px;height:34px;border:2px solid #333;border-radius:2px;flex:0 0 auto;position:relative;overflow:hidden}
.sw.on{border-color:#fff}
.sw .lbl{position:absolute;left:0;right:0;bottom:0;font-size:8px;text-align:center;background:rgba(0,0,0,.45);color:#fff}
.sw.trans{background:
  linear-gradient(45deg,#666 25%,transparent 25%,transparent 75%,#666 75%),
  linear-gradient(45deg,#666 25%,transparent 25%,transparent 75%,#666 75%) #ddd;
  background-size:10px 10px;background-position:0 0,5px 5px}
.textarea{width:100%;min-height:52px;background:#1c1c1c;border:1px solid #333;color:#fff;padding:10px 12px;font-size:15px;border-radius:3px;resize:vertical}
.count{font-size:12px;color:var(--dim);text-align:right}

.tabs{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line)}
.tab{padding:14px 0 18px;font-size:15px;color:#7c7c7c;letter-spacing:.1em;border-right:1px solid var(--line)}
.tab:last-child{border-right:0}
.tab.on{color:#fff}
.tab.on::after{content:"";display:block;width:22px;height:2px;background:#fff;margin:6px auto -6px}

/* ---- modal ---- */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.72);display:flex;align-items:flex-end;justify-content:center;z-index:50}
.sheet{position:relative;width:100%;max-width:560px;max-height:88vh;overflow:auto;background:#101010;border-top:1px solid #333;padding:14px 14px 24px}
.sheet h3{margin:0 0 10px;font-size:15px;letter-spacing:.08em;font-weight:600}
.vrow{display:flex;gap:8px;padding:7px 0;border-bottom:1px solid #1e1e1e;font-size:12px;align-items:baseline}
.vrow .k{flex:0 0 92px;color:#bdbdbd}
.vrow .v{flex:1;font-family:var(--mono);font-size:11.5px;color:#e2e2e2;word-break:break-word}
.vrow .st{flex:0 0 auto;font-size:11px}
.ok{color:#7fdc8f}.bad{color:#ff8a8a}
.exp-img{width:100%;height:auto;border:1px solid #2a2a2a;margin:8px 0;background:#222}
.msg{font-size:12px;padding:6px 8px;border-radius:2px;margin:6px 0;line-height:1.6}
.msg.g{background:#0f2413;color:#9fe0ab}
.msg.b{background:#2a1010;color:#ffb3b3}
.msg.n{background:#161616;color:#a8a8a8}
