:root{--bg:#fbf7ef;--ink:#2b2b2b;--sub:#8a8a8a;--accent:#3b8fd9;--muted:#e2e2e2;--done:#5cbf7a;color:var(--ink);background:var(--bg);font-family:system-ui,Hiragino Sans,Noto Sans JP,sans-serif}*{box-sizing:border-box}body{background:var(--bg);margin:0}.button{background:var(--accent);color:#fff;font:inherit;cursor:pointer;border:none;border-radius:999px;padding:12px 24px;font-weight:700;text-decoration:none;display:inline-block}.button:disabled{opacity:.4;cursor:default}.button-sub{background:var(--muted);color:var(--ink)}.home{gap:20px;max-width:440px;margin:0 auto;padding:48px 16px;display:grid}.home-header{text-align:center}.home-header h1{margin:0 0 8px;font-size:32px}.home-header p{color:var(--sub);margin:0}.home-card{background:#fff;border-radius:16px;gap:12px;padding:20px;display:grid}.home-card h2{margin:0;font-size:18px}.home-note{color:var(--sub);margin:0;font-size:14px}.button-large{text-align:center;padding:16px 24px;font-size:18px}.home-links{justify-content:center;gap:16px;font-size:14px;display:flex}.home-links a{color:var(--sub)}.home-code{border:2px solid var(--muted);font:inherit;letter-spacing:.2em;text-align:center;border-radius:12px;padding:12px;font-size:20px}.home-teams{grid-template-columns:1fr 1fr;gap:8px;display:grid}.screen{flex-direction:column;justify-content:center;align-items:center;gap:2vh;height:100vh;display:flex;position:relative;overflow:hidden}.screen-title{margin:0;font-size:5vh}.join-card{background:#fff;border-radius:2vh;justify-items:center;gap:1vh;padding:2vh;display:grid;position:absolute;bottom:3vh;box-shadow:0 .5vh 2vh #0000001f}.join-qr{width:26vh;height:26vh;display:block}.join-card-A{left:3vh}.join-card-B{right:3vh}.join-card-active{outline:.6vh solid var(--accent)}.join-card p{margin:0}.join-team{font-size:2.8vh;font-weight:700}.join-room{color:var(--sub);letter-spacing:.1em;font-size:2vh}.dish{aspect-ratio:1;width:min(78vh,90vw);position:relative}.dish canvas{width:100%;height:100%;position:absolute;inset:0}.dish-mouse{cursor:none}.sponge{aspect-ratio:1;opacity:.85;pointer-events:none;border:3px solid #00000040;border-radius:50%;position:absolute;transform:translate(-50%,-50%)}.sponge-chip{border-radius:50%;width:20px;height:20px}.hud{font-variant-numeric:tabular-nums;letter-spacing:.1em;font-size:4vh;position:absolute;top:3vh}.hud-left{left:3vw}.hud-right{right:3vw}.result{text-align:center;font-size:4vh}.result p{margin:0}.result-time{font-variant-numeric:tabular-nums;font-size:14vh;font-weight:700}.result-winner{font-size:8vh;font-weight:700}.scoreboard{gap:2vh;margin:4vh 0 0;padding:0;list-style:none;display:grid}.score{background:#fff;border-radius:2vh;justify-content:space-between;align-items:baseline;gap:4vh;padding:2vh 4vh;display:flex}.score-won{outline:.6vh solid var(--accent)}.score-team{font-weight:700}.score-time{font-variant-numeric:tabular-nums;font-size:8vh;font-weight:700}.result-actions{justify-content:center;gap:16px;margin-top:4vh;display:flex}.director-team{background:var(--ink);color:#fff;border-radius:999px;align-self:flex-start;margin:0;padding:4px 12px;font-size:14px;font-weight:700}.director-results{font-variant-numeric:tabular-nums;gap:8px;margin:0;padding:0;font-size:20px;list-style:none;display:grid}.team-picker{gap:12px;width:100%;display:grid}.director{flex-direction:column;align-items:center;gap:16px;max-width:480px;min-height:100vh;margin:0 auto;padding:24px 16px;display:flex}.director-title{align-self:flex-start;margin:0;font-size:18px}.director-wait{color:var(--sub);margin-top:40vh}.director-timer{color:var(--sub);font-variant-numeric:tabular-nums;letter-spacing:.2em;margin:24px 0 0;font-size:22px}.director-dish{align-items:center;gap:8px;width:100%;display:flex}.dish-preview{aspect-ratio:1;flex:1;min-width:0}.arrow{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:8px;font-size:32px}.director-number{align-items:center;gap:8px;margin:0;font-size:32px;display:flex}.badge{background:var(--accent);color:#fff;border-radius:999px;padding:2px 8px;font-size:12px}.badge-done{background:var(--done)}.dots{gap:12px;margin:8px 0 0;padding:0;list-style:none;display:flex}.dot{border:2px solid var(--muted);cursor:pointer;background:0 0;border-radius:50%;width:16px;height:16px;padding:0}.dot-done{border-color:var(--done);background:var(--done)}.dot-view{outline:2px solid var(--accent);outline-offset:2px}.button-small{padding:6px 12px;font-size:13px}.camera-status{background:var(--ink);color:#fff;border-radius:8px;margin:0;padding:8px 16px;position:absolute;bottom:10vh}.calibrate{grid-template-columns:1fr 380px;gap:24px;min-height:100vh;padding:24px;display:grid}.calibrate-view{min-width:0}.stage{aspect-ratio:16/9;background:#222;border-radius:12px;position:relative;overflow:hidden}.stage video,.stage-overlay{object-fit:fill;width:100%;height:100%;position:absolute;inset:0}.stage-overlay{image-rendering:pixelated}.stage-mirror video,.stage-mirror .stage-overlay{transform:scaleX(-1)}.stage-picking{cursor:crosshair;outline:4px solid var(--accent)}.stage-status{color:#fff;place-items:center;margin:0;display:grid;position:absolute;inset:0}.calibrate-hint{color:var(--sub)}.calibrate-panel{flex-direction:column;gap:12px;display:flex}.calibrate-panel h1{margin:0;font-size:20px}.calibrate-actions{gap:8px;display:flex}.field{gap:4px;font-size:14px;display:grid}.field select{font:inherit;padding:8px}.check{align-items:center;gap:8px;font-size:14px;display:flex}.ranges{gap:12px;margin:0;padding:0;list-style:none;display:grid}.range{background:#fff;border-radius:12px;gap:4px;padding:12px;display:grid}.range-head{align-items:center;gap:8px;font-size:14px;display:flex}.range-head .button{margin-left:auto}.range-found{color:var(--done);font-size:12px}.range-lost{color:var(--sub);font-size:12px}.slider{grid-template-columns:6em 1fr 3em;align-items:center;gap:8px;font-size:12px;display:grid}.slider output{text-align:right;font-variant-numeric:tabular-nums}@media (width<=900px){.calibrate{grid-template-columns:1fr;padding:16px}}.setup-wait{text-align:center;font-size:4vh}.setup-wait p{margin:0}.setup-count{font-variant-numeric:tabular-nums;font-size:20vh;font-weight:700}.director-countdown{font-variant-numeric:tabular-nums;margin:0;font-size:40px;font-weight:700}.setup-list{gap:8px;width:100%;margin:0;padding:0;list-style:none;display:grid}.setup-item{background:#fff;border-radius:12px;grid-template-columns:auto 84px 1fr auto;align-items:center;gap:10px;padding:8px 10px;transition:background .1s;display:grid}.setup-number{text-align:center;min-width:1em;font-size:20px;font-weight:700}.setup-preview{aspect-ratio:1;width:84px}.rotate-buttons{gap:6px;display:flex}.rotate{background:var(--muted);width:46px;height:46px;color:var(--ink);cursor:pointer;border:none;border-radius:10px;font-size:24px}.rotate:active{background:var(--accent);color:#fff}.director-hint{color:var(--sub);margin:0;font-size:14px}.range-solo{outline:3px solid var(--accent)}.range p{margin:0}.range-actions{flex-wrap:wrap;gap:6px;display:flex}.hover-readout{flex-wrap:wrap;align-items:center;gap:8px;min-height:2em;margin:0;font-size:14px;display:flex}.hover-empty{color:var(--sub)}.hover-values{font-variant-numeric:tabular-nums}.calibrate-fps{color:var(--sub);font-size:12px}.setup-item-target{background:#dbeaf8}.part-block{color:#fff;width:100%;min-height:46px;font:inherit;text-shadow:0 1px 2px #0009;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border:3px solid #00000026;border-radius:10px;padding:6px 8px;font-size:18px;font-weight:700}.part-block-static{text-align:center;cursor:default;width:auto;min-width:160px;margin:0}.part-block-selected{border-color:var(--ink);box-shadow:0 0 0 3px #fff, 0 0 0 6px var(--ink)}.part-block-dragging{z-index:10;cursor:grabbing;position:relative;box-shadow:0 8px 20px #0000004d}.screen-part{align-items:center;gap:1.5vh;margin:0;font-size:5vh;font-weight:700;display:flex;position:absolute;top:3vh;left:50%;transform:translate(-50%)}.screen-part-chip{border-radius:50%;width:4.5vh;height:4.5vh}.dwell-button{background:linear-gradient(to right, var(--done) calc(var(--progress,0) * 100%), var(--accent) 0);padding:3vh 6vh;font-size:4vh}.dwell-cursor{z-index:20;pointer-events:none;background:#2b2b2b80;border:.6vh solid #fff;border-radius:50%;width:5vh;height:5vh;position:fixed;transform:translate(-50%,-50%)}.dish-slide-in{animation:.6s cubic-bezier(.2,.8,.3,1) dish-slide-in}@keyframes dish-slide-in{0%{transform:translate(-90vw)rotate(-40deg)}to{transform:none}}.dish-leaving{aspect-ratio:1;pointer-events:none;width:min(78vh,90vw);animation:.7s ease-in forwards dish-leave;position:absolute;top:50%;left:50%}@keyframes dish-leave{0%{transform:translate(-50%,-50%)}to{opacity:0;transform:translate(calc(42vw - 50%),-40%)scale(.3,.35)}}.rack{justify-items:center;display:grid;position:absolute;top:50%;right:3vh;transform:translateY(-50%)}.rack-slots{align-items:center;gap:1vh;height:36vh;margin:0;padding:0 3vh;list-style:none;display:flex}.rack-slot{place-items:center;width:7vh;height:100%;display:grid}.rack-dish{filter:drop-shadow(0 .4vh .4vh #0003);flex:none;width:34vh;height:34vh;transform:scaleX(.27)}.rack-dish-new{animation:.4s ease-out .5s backwards rack-drop}@keyframes rack-drop{0%{opacity:0;transform:translateY(-8vh)scaleX(.27)}to{opacity:1;transform:scaleX(.27)}}
