:root{--bg: #0a0a0c;--panel: #121215;--panel-2: #16161a;--screen: #0c0c0f;--line: rgba(255, 255, 255, .09);--line-strong: rgba(255, 255, 255, .18);--text: #e7e7ea;--muted: #8c8c93;--faint: #56565d;--accent: #ffb02e;--accent-soft: rgba(255, 176, 46, .14);--accent-line: rgba(255, 176, 46, .45);--err: #ff5a4d;--radius: 4px;--mono: ui-monospace, "SF Mono", "JetBrains Mono", "Roboto Mono", Menlo, Consolas, monospace;color:var(--text);background:var(--bg);font-family:Inter,Hiragino Kaku Gothic ProN,Yu Gothic,Meiryo,system-ui,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0;overflow-x:hidden}button,input{font:inherit}button{-webkit-tap-highlight-color:transparent}button:disabled{cursor:not-allowed;opacity:.35}h1,p{margin:0}.app{width:100%;min-height:100vh;padding:20px 16px 32px;background:linear-gradient(rgba(255,255,255,.018) 1px,transparent 1px) 0 0 / 100% 30px,linear-gradient(90deg,rgba(255,255,255,.018) 1px,transparent 1px) 0 0 / 30px 100%,var(--bg)}.console{width:100%;max-width:840px;margin:0 auto;display:grid;gap:12px}.bar{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:6px 2px 14px;border-bottom:1px solid var(--line)}.brand{display:grid;gap:4px;min-width:0}.mark{font-size:clamp(1.5rem,6vw,2.1rem);font-weight:700;letter-spacing:-.02em;line-height:1}.sub{font-family:var(--mono);font-size:.66rem;letter-spacing:.22em;color:var(--muted);overflow-wrap:anywhere}.signal{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);font-family:var(--mono);font-size:.72rem;letter-spacing:.18em;color:var(--muted);flex:0 0 auto;white-space:nowrap}.led{width:8px;height:8px;border-radius:50%;background:var(--faint);flex:0 0 auto}.signal.kind-ready .signal-text,.signal.kind-run .signal-text,.signal.kind-lock .signal-text{color:var(--text)}.signal.kind-ready .led{background:var(--accent);opacity:.8}.signal.kind-lock .led{background:var(--accent);box-shadow:0 0 8px #ffb02ecc}.signal.kind-scan .led,.signal.kind-run .led{background:var(--accent);animation:blink .5s steps(1,end) infinite}.signal.kind-err .signal-text{color:var(--err)}.signal.kind-err .led{background:var(--err);animation:blink .5s steps(1,end) infinite}@keyframes blink{0%,49%{opacity:1}50%,to{opacity:.2}}.deck{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:12px;align-items:start}.panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.panel-head{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:.68rem;letter-spacing:.2em;color:var(--muted)}.panel-head>span:first-child{margin-right:auto}.panel-tag{color:var(--text)}.panel-body{display:grid;gap:10px;padding:12px}.input-panel input[type=file]{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.ctl{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;padding:0 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);color:var(--text);text-align:left;cursor:pointer;transition:border-color 80ms linear,background 80ms linear,transform 60ms linear}.ctl:hover:not(:disabled){border-color:var(--line-strong)}.ctl:active:not(:disabled){transform:translateY(1px);background:var(--panel)}.ctl-key{font-family:var(--mono);font-size:.66rem;letter-spacing:.12em;color:var(--accent);min-width:42px}.ctl.ghost .ctl-key{color:var(--muted)}.ctl-label{font-size:.98rem;font-weight:600}.camera-box{display:grid;gap:10px}.camera-view{width:100%;max-height:50vh;border:1px solid var(--line-strong);border-radius:var(--radius);object-fit:cover;background:#000}.camera-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.inline-error{font-family:var(--mono);font-size:.74rem;color:var(--err)}.readout{display:flex;align-items:center;gap:16px;min-height:148px;padding:12px 18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--screen)}.dice3d{width:112px;height:112px;flex:0 0 auto;display:grid;place-items:center;perspective:620px}.dice-cube{position:relative;width:84px;height:84px;transform-style:preserve-3d;transform:rotateX(-24deg) rotateY(22deg);will-change:transform}.dice-face{position:absolute;inset:0;display:grid;place-items:center;border:1px solid var(--line-strong);background:linear-gradient(155deg,#1c1c20,#111114);font-family:var(--mono);font-size:2rem;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums;box-shadow:inset 0 0 0 1px #0006}.f-front{transform:translateZ(42px);color:var(--text)}.f-back{transform:rotateY(180deg) translateZ(42px)}.f-right{transform:rotateY(90deg) translateZ(42px)}.f-left{transform:rotateY(-90deg) translateZ(42px)}.f-top{transform:rotateX(90deg) translateZ(42px)}.f-bottom{transform:rotateX(-90deg) translateZ(42px)}.dice3d.phase-result .dice-face{color:var(--accent);border-color:var(--accent-line);text-shadow:0 0 18px rgba(255,176,46,.35)}.dice-photo{width:100%;height:100%;display:block;object-fit:cover;filter:grayscale(1) contrast(1.05)}.dice3d.phase-result .dice-photo{filter:contrast(1.05)}.dice3d.phase-result .dice-face:has(.dice-photo){box-shadow:inset 0 0 0 2px var(--accent)}.readout-num{font-family:var(--mono);font-size:clamp(3.2rem,14vw,5rem);font-weight:600;line-height:.9;letter-spacing:.02em;color:var(--faint);font-variant-numeric:tabular-nums}.readout.kind-run .readout-num,.readout.kind-lock .readout-num{color:var(--accent)}.readout.kind-lock .readout-num{text-shadow:0 0 22px rgba(255,176,46,.4)}.readout-unit{font-family:var(--mono);font-size:.95rem;color:var(--muted)}.meters{display:grid;grid-template-columns:1fr 1fr;gap:10px}.meter{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);font-family:var(--mono)}.meter span{font-size:.64rem;letter-spacing:.16em;color:var(--muted)}.meter b{font-size:1.15rem;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}.run-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.run,.halt{min-height:60px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);color:var(--text);font-family:var(--mono);font-size:1.05rem;font-weight:600;letter-spacing:.18em;cursor:pointer;transition:border-color 80ms linear,background 80ms linear,transform 60ms linear}.run:not(:disabled){color:var(--accent);border-color:var(--accent-line)}.run:hover:not(:disabled),.halt:hover:not(:disabled){background:var(--panel);border-color:var(--line-strong)}.run:active:not(:disabled),.halt:active:not(:disabled){transform:translateY(1px)}.app.state-rolling .halt{color:var(--accent);border-color:var(--accent-line);background:var(--accent-soft)}.locked{display:flex;align-items:center;gap:14px;padding:12px;border:1px solid var(--accent-line);border-radius:var(--radius);background:var(--panel-2)}.locked-face{width:88px;height:88px;border:1px solid var(--line-strong);border-radius:var(--radius);object-fit:cover;filter:contrast(1.05)}.locked-meta{display:grid;gap:4px;font-family:var(--mono)}.locked-meta span{font-size:.66rem;letter-spacing:.2em;color:var(--muted)}.locked-meta b{font-size:1.3rem;font-weight:600;color:var(--accent)}.statusline{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);font-family:var(--mono);font-size:.8rem}.statusline-key{font-size:.64rem;letter-spacing:.18em;color:var(--accent);flex:0 0 auto}.statusline-text{color:var(--text);min-width:0;overflow-wrap:anywhere}.clear{padding:5px 10px;border:1px solid var(--line);border-radius:var(--radius);background:transparent;color:var(--muted);font-family:var(--mono);font-size:.64rem;letter-spacing:.16em;cursor:pointer;transition:border-color 80ms linear,color 80ms linear}.clear:hover{color:var(--text);border-color:var(--line-strong)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:6px;padding:12px}.tile{position:relative;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);overflow:hidden;aspect-ratio:1}.tile canvas{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(1) contrast(1.05);transition:filter 80ms linear}.tile-no{position:absolute;top:4px;left:4px;padding:1px 5px;border-radius:2px;background:#0009;font-family:var(--mono);font-size:.62rem;letter-spacing:.04em;color:var(--muted)}.tile-del{position:absolute;top:4px;right:4px;width:22px;height:22px;display:grid;place-items:center;padding:0;border:1px solid var(--line-strong);border-radius:2px;background:#0009;color:var(--muted);font-family:var(--mono);font-size:.95rem;line-height:1;cursor:pointer;transition:color 80ms linear,border-color 80ms linear,background 80ms linear}.tile-del:hover{color:var(--err);border-color:var(--err);background:#000c}.tile.is-active{border-color:var(--accent-line)}.tile.is-active .tile-no{color:var(--accent)}.tile.is-winner{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.tile.is-winner canvas{filter:grayscale(0) contrast(1.05)}.tile.is-winner .tile-no{background:var(--accent);color:#1a1206}.foot{display:flex;align-items:center;gap:8px;padding:4px 2px;font-family:var(--mono);font-size:.7rem;letter-spacing:.1em;color:var(--muted);flex-wrap:wrap;overflow-wrap:anywhere}.foot .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);opacity:.7;flex:0 0 auto}@media(max-width:720px){.deck{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){.led{animation:none!important}}
