@font-face{font-family:PlaySans;src:local("Pretendard"),local("Noto Sans KR"),local("Malgun Gothic");font-display:swap}:root{font-family:PlaySans,Segoe UI,sans-serif;color:#233c32;background:#f4f4eb;font-synthesis:none;--green:#203e31;--lime:#d8ee95;--coral:#ee9a7d;--muted:#8a9b8b;--line:#daddcf;--mono:"Consolas","SFMono-Regular",monospace}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:default;opacity:.4}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #d79a60;outline-offset:3px}[hidden]{display:none!important}.header{height:83px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 3.2vw}.brand{display:flex;gap:12px;align-items:center;font-size:19px;font-weight:850;letter-spacing:1.1px}.brand-flower{font-size:48px;line-height:1;display:block}.brand-sub{display:block;font:8px var(--mono);letter-spacing:3px;margin-top:5px}.top-nav{display:flex;align-items:center;gap:22px}.local-pill{font:10px var(--mono);letter-spacing:1px;display:flex;align-items:center;gap:7px}.local-pill i,.session-live i,.phase-pill i,.demo-controls>span i{width:6px;height:6px;border-radius:50%;background:currentColor}.icon-button{background:none;border:none;color:var(--green);display:flex;align-items:center;gap:6px;font-size:12px;padding:8px 0}.icon-button>span{font-size:18px}.icon-button.square{font-size:28px;border-left:1px solid var(--line);padding-left:22px}main{max-width:1920px;margin:auto;padding:0 3.2vw}.intro{display:flex;justify-content:space-between;align-items:center;padding:26px 0 23px}.eyebrow{font:9px var(--mono);letter-spacing:1.9px;color:#78816f}.intro h1{font-size:clamp(23px,2vw,34px);letter-spacing:-1.6px;margin:9px 0 0;font-weight:800}.title-dot{color:#d27857;padding-left:3px}.session-meta{display:flex;gap:24px;align-items:center;font-size:11px;color:#71816c}.session-meta>b,.session-meta b{font-size:14px;color:var(--green);margin:0 3px}.mode-label{font:9px var(--mono);letter-spacing:1px;border:1px solid #bac6b2;border-radius:20px;padding:7px 11px}.playground{border-radius:16px;overflow:hidden;background:#10231d;color:#d8e3cb;box-shadow:0 16px 40px #18382913}.game-topbar{height:42px;display:flex;align-items:center;justify-content:space-between;padding:0 23px;border-bottom:1px solid #8ba48226;background:#10221d;font:9px var(--mono);letter-spacing:1.1px}.session-live{display:flex;gap:8px;align-items:center;color:#9fb69b}.session-live i{background:#c6e597;box-shadow:0 0 8px #c6e59755}.game-id{color:#728d74}.game-id>span{margin-left:20px;color:#ccdfa8}.game-grid{display:grid;grid-template-columns:23% 54% 23%;height:clamp(450px,53vw,580px)}.player-column{display:grid;grid-template-rows:1fr 1fr;min-height:0;padding:15px;gap:13px}.player-panel{border:1px solid #8ba4822e;border-radius:9px;position:relative;min-height:0;overflow:hidden;background:#15291f;transition:border-color .25s,background .25s}.player-panel[data-status=alive],.player-panel[data-status=registering]{border-color:#aec97b70}.player-panel[data-status=out]{border-color:#e9957488;background:#332820}.player-panel[data-status=winner]{border-color:#dbea9d;background:#34402b}.player-panel canvas{position:absolute;inset:0;width:100%;height:100%}.player-head{position:absolute;left:15px;right:15px;top:13px;display:flex;align-items:center;justify-content:space-between;z-index:1}.lane-tag{font:10px var(--mono);letter-spacing:1.2px;display:flex;align-items:center;gap:7px}.lane-tag b{font-size:13px;color:var(--slot)}.lane-tag:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--slot)}.player-panel[data-lane="1"],#track-1{--slot:#f5c84c}.player-panel[data-lane="2"],#track-2{--slot:#6cc4ef}.player-panel[data-lane="3"],#track-3{--slot:#c29cf2}.player-panel[data-lane="4"],#track-4{--slot:#7de3c0}.player-status{font-size:9px;color:#82977a;display:flex;align-items:center;gap:5px}.player-status:before{content:"";width:4px;height:4px;border-radius:50%;background:currentColor}.player-panel[data-status=alive] .player-status{color:#d8ee95}.player-panel[data-status=out] .player-status{color:#eda58c}.player-panel[data-status=winner] .player-status{color:#e8eda5}.player-foot{position:absolute;bottom:12px;left:15px;right:15px;display:flex;align-items:flex-end;justify-content:space-between;gap:5px}.player-foot strong{font-size:25px;letter-spacing:-1px;color:#b1c29a;font-weight:500}.player-foot strong small{font:10px var(--mono);letter-spacing:0;margin-left:4px;color:#7f9578}.player-foot p{margin:0;max-width:65%;font-size:9px;color:#82977a;line-height:1.6;text-align:right}.player-panel[data-status=empty] .player-foot strong{opacity:.5}.registration-bar{position:absolute;bottom:0;left:0;height:3px;background:var(--lime);width:0;transition:width .15s}.out-stamp{position:absolute;top:44%;width:100%;text-align:center;color:#e9a184;font:800 32px var(--mono);letter-spacing:4px;transform:rotate(-8deg);text-shadow:0 1px 8px #201710;pointer-events:none}.stage{position:relative;isolation:isolate;overflow:hidden;border-left:1px solid #8ba48218;border-right:1px solid #8ba48218}#scene{position:absolute;inset:0;z-index:-2}#scene canvas{width:100%;height:100%;display:block}.stage:after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,#12261c9c 0%,transparent 34%,transparent 70%,#12261caa 100%);pointer-events:none}.stage-top{display:flex;justify-content:space-between;align-items:center;padding:20px 23px}.stage-kicker{font:8px var(--mono);letter-spacing:1.4px;color:#a2b793}.round-pills{display:flex;gap:5px}.round-pills i{display:block;width:17px;height:3px;border-radius:2px;background:#62735b55}.round-pills i.done{background:#7c9661}.round-pills i.current{background:#d9ec9e;box-shadow:0 0 5px #d9ec9e44}.stage-heading{text-align:center;margin-top:8px;pointer-events:none;transition:opacity .35s,visibility .35s}.stage:is([data-phase=countdown],[data-phase=green],[data-phase=fake],[data-phase=turn],[data-phase=red],[data-phase=return],[data-phase=caught]) .stage-heading{opacity:0;visibility:hidden}.phase-pill{display:inline-flex;align-items:center;gap:7px;border:1px solid #b7cfa245;border-radius:20px;padding:6px 11px;color:#c3d9a5;background:#1a302b80;font-size:10px}.phase-pill i{width:5px;height:5px}.stage-heading h2{font-size:clamp(27px,2.7vw,43px);letter-spacing:-1.7px;font-weight:650;line-height:1.32;margin:12px 0 9px;color:#f0f0d4}.stage-heading h2 em{font-style:normal;color:#d8ee95}.stage-heading p{font-size:10px;color:#a1b096;margin:0}.stage-bottom{position:absolute;bottom:18px;left:23px;right:23px;text-align:center;font-size:10px;color:#c5d4b7;letter-spacing:.3px}.phase-timer{height:3px;max-width:160px;margin:12px auto 0;background:#a7c28b29;border-radius:9px;overflow:hidden}.phase-timer i{display:block;height:100%;width:35%;background:#c5df9e;border-radius:9px;transition:width .09s linear}.stage[data-phase=attract] .phase-timer i{animation:waiting 3s ease-in-out infinite}.stage[data-phase=red] .phase-pill,.stage[data-phase=red] .stage-heading h2 em{color:#f4b09a}.stage[data-phase=red] .phase-timer i{background:#f4b09a}.stage[data-phase=red] .phase-pill{border-color:#f4b09a55}.countdown{position:absolute;top:45%;width:100%;text-align:center;font:bold 96px var(--mono);color:#e5edbb;text-shadow:0 8px 28px #10241c80;pointer-events:none}.sensor-hold{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#132a21da;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);font-size:13px;z-index:4}.sensor-hold>span:last-child{font-size:11px;color:#96a88d}.spinner{width:26px;height:26px;border:2px solid #d4e69a33;border-top-color:#d4e69a;border-radius:50%;animation:spin 1s linear infinite}.track-section{display:flex;align-items:center;gap:25px;border-top:1px solid #8ba48226;padding:18px 25px;background:#11251c}.track-label{width:100px;flex-shrink:0}.track-label>span{font:8px var(--mono);letter-spacing:1.5px;color:#758d70}.track-label strong{display:block;margin-top:9px;font-size:11px;font-weight:400;white-space:nowrap}.track-label strong span{color:#748b68;margin:0 12px}.race-tracks{display:grid;grid-template-columns:repeat(4,1fr);gap:25px;flex:1}.race-track{min-width:0}.race-track-top{display:flex;justify-content:space-between;font:8px var(--mono);letter-spacing:.5px;color:#96aa87}.race-track-top strong{font:10px var(--mono);color:#d7e6b4}.race-line{height:3px;background:#415238;margin-top:10px;position:relative}.race-line i{height:3px;background:var(--slot,#c4df97);display:block;position:relative;min-width:0;transition:width .1s linear}.race-line i:after{content:"";width:7px;height:7px;background:var(--slot,#d0e5a6);border:2px solid #1a3021;border-radius:50%;position:absolute;right:-4px;top:-2px}.race-track.out .race-line i,.race-track.out .race-line i:after{background:#ce8c6e}.race-track.out .race-track-top strong{color:#ce8c6e}.finish-mark{text-align:center;color:#c7d5a9;font-size:24px;line-height:1}.finish-mark small{display:block;font:8px var(--mono);margin-top:4px;color:#758d70}.control-bar{display:flex;justify-content:space-between;align-items:center;padding:21px 0;border-bottom:1px solid var(--line);gap:18px}.hardware-status{display:flex;align-items:center;gap:12px}.hardware-icon{height:37px;width:40px;display:grid;place-items:center;background:#e5e9d9;border:1px solid #d9dfca;border-radius:8px;font-size:23px}.hardware-status strong{font-size:11px;font-weight:650}.hardware-status p{font:9px var(--mono);color:#819074;margin:5px 0 0;max-width:450px;line-height:1.5}.status-dot{width:6px;height:6px;border-radius:50%;background:#d8a96c;margin-left:15px}.status-dot.ready{background:#6f9a57}.controls{display:flex;gap:10px;align-items:center}.button{border:1px solid transparent;border-radius:7px;min-height:41px;display:inline-flex;align-items:center;justify-content:center;gap:21px;padding:0 18px;font-size:11px;font-weight:600;white-space:nowrap}.button.primary{background:#284d39;color:#f0f2df;border-color:#284d39;box-shadow:0 3px 8px #163b2010}.button.primary>span{font:8px var(--mono);color:#b7c69a}.button.secondary{background:#f5f6ed;border-color:#cdd5be;color:#3e5535}.button.ghost{background:transparent;color:#7d8970;padding:0 10px}.button:hover{filter:brightness(1.07)}.demo-controls{display:flex;gap:9px;align-items:center;padding:12px 16px;margin-top:12px;background:#e7ebd8;border-radius:7px;color:#607446}.demo-controls>span{font:9px var(--mono);display:flex;align-items:center;gap:7px;flex:1;letter-spacing:1px}.demo-controls small{font:10px PlaySans,sans-serif;letter-spacing:0;margin-left:5px;color:#82936d}.demo-controls button{border:1px solid #c6d0af;color:#4f673b;background:#f1f4e8;border-radius:5px;padding:6px 10px;font-size:10px}.demo-controls kbd{margin-left:10px;font:10px var(--mono)}.how-to{display:grid;grid-template-columns:1fr 1fr 1.3fr 1fr;align-items:center;padding:25px 0 28px;gap:20px}.how-to>div{display:flex;align-items:center;gap:13px}.how-to>div>span{font:10px var(--mono);color:#91a17f;width:31px;height:31px;border:1px solid #d8ddcc;border-radius:50%;display:grid;place-items:center;flex-shrink:0}.how-to p{font-size:11px;font-weight:600;margin:0}.how-to small{display:block;font-size:9px;font-weight:400;color:#8a967d;margin-top:5px}.how-to .flower-caption{font:9px/1.5 var(--mono);letter-spacing:1px;justify-content:flex-end;color:#819077}.how-to .flower-caption>span{border:0;color:#819077;font-size:35px;width:auto;height:auto;margin-left:8px}footer{border-top:1px solid var(--line);padding:19px 3.2vw;display:flex;justify-content:space-between;font:8px var(--mono);letter-spacing:.7px;color:#99a18e}footer>span:last-child{font:9px PlaySans,sans-serif;letter-spacing:0}footer i{font-style:normal;margin:0 9px;color:#b4bca8}footer a{text-decoration:underline;text-underline-offset:3px}.toast{position:fixed;bottom:25px;left:50%;transform:translate(-50%);z-index:12;padding:13px 23px;border:1px solid #6c8060;border-radius:9px;background:#203c2e;color:#e8eccf;box-shadow:0 5px 20px #0003;font-size:12px;text-align:center;max-width:90vw}.toast.error{background:#623d30;border-color:#a3755b}dialog{border:1px solid #cdd4c0;background:#f4f4eb;color:var(--green);border-radius:17px;padding:0;width:min(1060px,94vw);max-height:90vh;box-shadow:0 30px 100px #081b2290}dialog::backdrop{background:#0c211ab8;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px)}.dialog-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding:24px 29px}.dialog-header h2{font-size:22px;letter-spacing:-.6px;margin:6px 0 0}.close-dialog{font-size:27px;border:1px solid var(--line);background:none;color:#7b8c6e;width:36px;height:36px;border-radius:50%;line-height:1}.settings-layout{display:grid;grid-template-columns:1.1fr 1fr}.diagnostic{padding:25px;border-right:1px solid var(--line);min-width:0}.diagnostic-title{display:flex;justify-content:space-between;font:9px var(--mono);margin-bottom:12px;color:#7c8c72;letter-spacing:1px}.diagnostic-title b{font-weight:400;color:#3e6046}#diagnostic-canvas{width:100%;aspect-ratio:848/480;background:#172a21;border-radius:8px;display:block}#diagnostic-text{font:10px/1.7 var(--mono);color:#738568;word-break:break-word}.calibration-hint{padding:15px;background:#e8eddd;border-radius:8px;margin-top:18px}.calibration-hint strong{font-size:11px}.calibration-hint p{font-size:10px;line-height:1.8;color:#7a8c6a;margin-bottom:0}#observations-list{font:10px/1.8 var(--mono);color:#6c8060;margin-top:15px}.form-scroll{overflow:auto;max-height:55vh;padding:22px 25px}.select-field{font-size:11px;display:flex;flex-direction:column;gap:8px}select,input[type=number]{background:#fbfcf6;border:1px solid #ccd6be;border-radius:5px;color:#3f5737;padding:9px;font-size:11px}select{width:100%}.field-group-title{font-size:11px;font-weight:700;border-bottom:1px solid var(--line);padding-bottom:8px;margin-top:24px;margin-bottom:13px}.form-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}.number-field>span{font-size:10px;display:block;color:#7b8d6d;margin-bottom:6px}.input-wrap{position:relative}.input-wrap input{width:100%;padding-right:40px}.input-wrap small{position:absolute;right:9px;top:10px;color:#9ba78d;font:10px var(--mono);pointer-events:none}.form-note{font-size:10px;color:#8d977f;line-height:1.8;margin:20px 0 0}.form-actions{display:flex;justify-content:space-between;align-items:center;gap:10px;border-top:1px solid var(--line);padding:18px 25px}#settings-result{font-size:11px;color:#8e684f;line-height:1.5}.stats-body{padding:25px 30px}.stats-toolbar{display:flex;align-items:center;justify-content:space-between;gap:15px;font-size:11px;color:#839273}.stats-toolbar select{width:140px}.stats-numbers{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin:20px 0 25px}.stat-number{padding:20px;background:#e7eddd;border-radius:9px}.stat-number>span{font-size:11px;color:#7c9069}.stat-number strong{display:block;font-size:32px;font-weight:500;margin-top:10px}.stat-number small{font-size:11px;color:#879975;margin-left:4px}.table-scroll{max-height:36vh;overflow:auto;margin-bottom:22px}table{width:100%;border-collapse:collapse;text-align:left;font-size:11px}th{font-weight:500;color:#8b9a7d;padding:12px;border-bottom:1px solid var(--line)}td{padding:13px 12px;border-bottom:1px solid #e2e6d8;color:#5c7450}.empty-row{text-align:center;padding:35px;color:#94a484}.scene-error{padding:250px 20px 0;color:#d5d9b6;text-align:center;font-size:11px}body.offline .session-live i{background:#df9b71;box-shadow:none}body.offline #connection-label{color:#ddad8e}@keyframes waiting{0%,to{transform:translate(-110%)}50%{transform:translate(280%)}}@keyframes spin{to{transform:rotate(360deg)}}@media(min-width:1700px){.game-grid{height:650px}.stage-heading{margin-top:10px}.stage-heading h2{font-size:48px}.player-foot strong{font-size:32px}.player-panel{border-radius:12px}.player-column{padding:20px;gap:18px}.header{height:90px}.intro,.how-to{padding:30px 0}}@media(max-width:1100px){.top-nav{gap:15px}.session-meta{gap:12px}.game-grid{height:480px;grid-template-columns:24% 52% 24%}.player-column{padding:10px;gap:10px}.player-head,.player-foot{left:10px;right:10px}.stage-top{padding:18px 15px}.stage-kicker{font-size:7px;letter-spacing:.7px}.round-pills i{width:12px}.stage-heading h2{font-size:31px}.hardware-status p{max-width:270px}.button{padding:0 13px;gap:12px}.track-section{gap:18px;padding:17px}.race-tracks{gap:16px}.track-label{width:90px}.how-to{gap:12px}.how-to>div{gap:9px}.how-to .flower-caption{font-size:7px}.hardware-status .status-dot{display:none}}@media(max-width:760px){.header{height:69px;padding:0 5vw}.brand{font-size:14px;gap:7px}.brand-flower{font-size:36px}.brand-sub{font-size:6px;letter-spacing:1.8px}.top-nav{gap:14px}.top-nav .local-pill{display:none}.icon-button{font-size:0}.icon-button>span{font-size:21px}.icon-button.square{padding-left:13px;font-size:25px}main{padding:0 4vw}.intro{padding:23px 0 19px;gap:10px}.intro .eyebrow{font-size:7px;letter-spacing:1px}.intro h1{font-size:23px;letter-spacing:-1.1px}.session-meta{gap:0}.session-meta>span:not(.mode-label){display:none}.mode-label{font-size:7px;padding:6px 8px;white-space:nowrap}.playground{border-radius:11px}.game-topbar{height:36px;padding:0 13px;font-size:7px;letter-spacing:.5px}.game-id{display:none}.game-grid{height:auto;grid-template-columns:1fr 1fr;grid-template-rows:430px 200px}.stage{grid-row:1;grid-column:1/-1;border:0}.player-column{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:10px 5px 10px 10px;gap:8px}.player-column:last-child{padding:10px 10px 10px 5px}.stage-heading h2{font-size:32px;margin-top:10px}.stage-top{padding:18px}.stage-heading{margin-top:0}.stage-bottom{bottom:14px}.stage-heading p{font-size:10px}.player-head{top:10px;left:8px;right:8px;align-items:flex-start;flex-direction:column;gap:7px}.lane-tag{font-size:8px}.lane-tag b{font-size:10px}.player-status{font-size:8px}.player-foot{left:8px;right:8px;bottom:9px;display:block}.player-foot strong{font-size:18px}.player-foot p{text-align:left;font-size:7px;max-width:100%;margin-top:4px}.player-foot strong small{font-size:8px}.out-stamp{font-size:21px;letter-spacing:1px}.track-section{padding:15px 12px;gap:12px}.track-label{display:none}.race-tracks{gap:13px}.race-track-top{font-size:7px;flex-direction:column;gap:5px}.race-track-top strong{font-size:10px}.finish-mark{font-size:22px}.finish-mark small{font-size:7px}.control-bar{flex-wrap:wrap;padding:16px 0;gap:15px}.hardware-status{gap:10px}.hardware-icon{width:33px;height:33px}.hardware-status strong{font-size:10px}.hardware-status p{font-size:8px;max-width:70vw}.controls{width:100%;gap:9px}.controls .button{flex:1;min-height:41px;font-size:10px;padding:0 12px;gap:6px}.controls .button.ghost{flex:0;padding:0 8px}.button.primary>span{font-size:7px}.how-to{grid-template-columns:1fr;padding:22px 0;gap:17px}.how-to>div{gap:13px}.how-to .flower-caption{display:none}.how-to p{font-size:11px}.how-to small{display:inline;font-size:9px;margin-left:12px}.how-to>div>span{width:27px;height:27px}.demo-controls{padding:11px;flex-wrap:wrap;gap:8px}.demo-controls>span{width:100%;flex:auto;font-size:8px}.demo-controls small{font-size:8px}.demo-controls button{flex:1;font-size:9px}footer{padding:17px 5vw;flex-direction:column;gap:12px;font-size:6px;letter-spacing:.6px}footer>span:last-child{font-size:8px}.settings-layout{grid-template-columns:1fr}.diagnostic{border-right:0;border-bottom:1px solid var(--line);padding:18px}.dialog-header{padding:20px}.dialog-header h2{font-size:20px}.form-scroll{max-height:none;padding:20px}.form-actions{padding:15px 20px}.stats-body{padding:18px}.stats-toolbar p{font-size:9px}.stats-toolbar select{width:110px;font-size:10px}.stats-numbers{grid-template-columns:1fr 1fr;gap:10px}.stat-number{padding:15px}.stat-number strong{font-size:25px}th,td{font-size:9px;padding:10px 6px}dialog{max-height:92vh}.calibration-hint{margin-top:13px}#observations-list{font-size:9px}}html,body{height:100%}body{background:#10231d;overflow:hidden}#app{height:100vh;height:100dvh}main{max-width:none;margin:0;padding:0;height:100%}.playground{height:100%;border-radius:0;box-shadow:none;display:flex;flex-direction:column}.game-topbar{flex:none}.game-id{letter-spacing:.4px;color:#7d9372}.stage{flex:1 1 auto;min-height:0;border:0}.stage-heading h2{font-size:clamp(28px,4.4vw,64px)}.stage-heading p,.stage-bottom{font-size:clamp(10px,1.5vw,18px)}.stage-kicker{font-size:clamp(8px,1vw,12px)}.countdown{font-size:clamp(80px,15vw,200px)}.player-grid{flex:none;height:20%;display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:1fr;gap:10px;padding:10px;background:#10231d}.lane-tag{font-size:clamp(10px,1.3vw,16px)}.lane-tag b{font-size:clamp(13px,1.7vw,22px)}.player-status{font-size:clamp(9px,1.2vw,15px)}.player-foot strong{font-size:clamp(18px,2.6vw,40px)}.player-foot p{font-size:clamp(9px,1.2vw,15px)}.out-stamp{font-size:clamp(24px,5vw,64px)}@media(max-width:760px){.player-grid{gap:6px;padding:6px}.player-panel .player-foot p,.game-id{display:none}}.tagger{position:absolute;inset:0;transform-origin:50% 100%;transition:scale .6s ease-out}.tagger img{width:100%;height:100%;object-fit:contain;object-position:50% 100%;display:block}.tagger.breathe{animation:tagger-breathe 2.4s ease-in-out infinite}.tagger-scene.stare .tagger{scale:1.04}.tagger-danger{position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 #ff4a2a00;transition:box-shadow .25s}.tagger-scene.danger .tagger-danger{box-shadow:inset 0 0 14vmin 3vmin #ff4a2a66}@keyframes tagger-breathe{0%,to{transform:scaleY(1)}50%{transform:scaleY(1.01)}}.chant{position:absolute;top:6%;left:3%;right:3%;z-index:2;text-align:center;pointer-events:none;white-space:nowrap;font-weight:900;letter-spacing:-.02em;line-height:1.15;font-size:clamp(30px,9vw,120px);color:#fffbe8;text-shadow:0 .05em .18em #000c,0 0 .5em #000a;transition:opacity .4s,color .2s}.chant .tilde{font-size:.62em;color:#d8ee95;margin:0 -.02em}.chant .syllable+.syllable,.chant .tilde+.syllable{margin-left:.04em}.chant .pop{display:inline-block;animation:chant-pop .28s ease-out}.chant.caught{color:#ffb3a1}.chant.caught .tilde{color:#ff9a82}.chant.fade,.chant.idle{opacity:0}@keyframes chant-pop{0%{transform:translateY(.25em) scale(.6);opacity:0}to{transform:none;opacity:1}}@media(max-width:760px){.chant{font-size:clamp(22px,7.6vw,60px)}}.tagger-scene{overflow:hidden;background:#0b1220}.tagger-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 100%;filter:saturate(.85) brightness(.82)}.tagger-moon{position:absolute;left:50%;top:31%;width:112%;aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;animation:moon-glow 6s ease-in-out infinite}.tagger-fog{position:absolute;left:-30%;right:-30%;bottom:0;height:42%;pointer-events:none;opacity:.55;background:radial-gradient(40% 55% at 20% 85%,#c9d3e366,transparent 70%),radial-gradient(45% 50% at 70% 90%,#b4c0d455,transparent 70%),radial-gradient(35% 40% at 45% 100%,#dfe6f044,transparent 70%);animation:fog-drift 18s linear infinite alternate}.tagger-fog.front{height:22%;opacity:.35;animation-duration:11s;animation-direction:alternate-reverse}@keyframes moon-glow{0%,to{filter:brightness(.96) drop-shadow(0 0 3vmin #fff6d566)}50%{filter:brightness(1.06) drop-shadow(0 0 6vmin #fff6d599)}}@keyframes fog-drift{0%{transform:translate(-8%)}to{transform:translate(8%)}}.fx-canvas{position:fixed;inset:0;width:100vw;height:100vh;pointer-events:none;z-index:20}.fx-bang{position:fixed;z-index:21;transform:translate(-50%,-120%) rotate(-12deg);pointer-events:none;font:900 clamp(34px,7vw,92px)/1 PlaySans,"Segoe UI",sans-serif;color:#e5383b;-webkit-text-stroke:.06em #0a0a0a;paint-order:stroke fill;text-shadow:0 .08em 0 #0a0a0a;animation:bang-pop .9s ease-out forwards}@keyframes bang-pop{0%{opacity:0;scale:.3}15%{opacity:1;scale:1.25}30%{scale:1}80%{opacity:1}to{opacity:0;translate:0 -20%}}@property --burn{syntax:"<percentage>";inherits:true;initial-value:0%}.player-panel.burning,.player-panel.burnt{--hx:50%;--hy:42%;background:#0b0605;border-color:#6b1d12}.player-panel.burning{animation:panel-burn 2.2s cubic-bezier(.35,0,.75,1) forwards}.player-panel.burnt{--burn:110%;box-shadow:inset 0 0 6vmin #000}.player-panel.burning>canvas,.player-panel.burnt>canvas,.player-panel.burning .player-foot,.player-panel.burnt .player-foot{-webkit-mask-image:radial-gradient(circle farthest-corner at var(--hx) var(--hy),transparent var(--burn),#000 calc(var(--burn) + 5%));mask-image:radial-gradient(circle farthest-corner at var(--hx) var(--hy),transparent var(--burn),#000 calc(var(--burn) + 5%))}.burn-ring{position:absolute;inset:0;pointer-events:none;z-index:2;background:radial-gradient(circle farthest-corner at var(--hx) var(--hy),transparent calc(var(--burn) - 1%),#ffd166f2 var(--burn),#ff7b00e6 calc(var(--burn) + 2%),#c1121fd9 calc(var(--burn) + 4.5%),#1a0806cc calc(var(--burn) + 7.5%),transparent calc(var(--burn) + 11%));animation:fire-flicker .11s steps(2) infinite}.player-panel.burnt .burn-ring{display:none}.bullet-hole{position:absolute;left:var(--hx,50%);top:var(--hy,42%);width:26%;aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;z-index:3;border-radius:50%;background:radial-gradient(circle,#000 0 38%,#1a0504 46%,#8d0c13 54%,#e5383b66 62%,transparent 72%);clip-path:polygon(50% 0,58% 22%,79% 9%,72% 32%,98% 34%,77% 50%,95% 70%,70% 66%,74% 92%,55% 76%,40% 98%,36% 74%,10% 86%,24% 62%,2% 48%,25% 38%,12% 14%,37% 25%);animation:hole-in .18s ease-out}.player-panel.burnt .bullet-hole{opacity:.55}.player-panel.burnt:after{content:"";position:absolute;left:30%;right:30%;bottom:20%;height:50%;pointer-events:none;border-radius:50%;background:radial-gradient(closest-side,#5a5a5a55,transparent);filter:blur(8px);animation:smoulder 3.2s ease-in-out infinite}.player-panel.burnt .player-status{color:#ff8a72}@keyframes panel-burn{0%{--burn:2%}to{--burn:110%}}@keyframes fire-flicker{0%{filter:brightness(1) hue-rotate(0deg)}to{filter:brightness(1.25) hue-rotate(-12deg)}}@keyframes hole-in{0%{scale:2.2;opacity:0}to{scale:1;opacity:1}}@keyframes smoulder{0%{transform:translateY(20%) scale(.8);opacity:0}40%{opacity:1}to{transform:translateY(-60%) scale(1.3);opacity:0}}.caught-callout{position:absolute;top:5%;left:0;right:0;z-index:4;text-align:center;pointer-events:none;color:#ff3b30;line-height:1.05;animation:callout-in .35s cubic-bezier(.2,1.6,.4,1) both,callout-shake .09s linear .35s infinite}.caught-callout small{display:block;font:800 clamp(16px,3.2vw,40px) Consolas,monospace;letter-spacing:.2em;color:#ffe2dc;text-shadow:0 2px 8px #000}.caught-callout strong{display:block;font:900 clamp(48px,13vw,170px)/1.05 PlaySans,"Segoe UI",sans-serif;letter-spacing:-.04em;-webkit-text-stroke:.05em #0a0a0a;paint-order:stroke fill;text-shadow:0 .06em 0 #0a0a0a,0 0 .4em #ff000088}.caught-callout.out{animation:callout-out .5s ease-in forwards}.tagger-scene.aiming .tagger{scale:1.1;transition:scale 2s cubic-bezier(.3,0,.2,1)}.tagger-scene.aiming .tagger-danger{animation:danger-pulse .5s ease-in-out infinite}.tagger-scene.recoil{animation:recoil .26s ease-out}.player-panel.targeted{border-color:#ff3b30;animation:target-blink .35s steps(2) infinite}.player-panel.targeted:before{content:"";position:absolute;left:50%;top:42%;width:46%;aspect-ratio:1;transform:translate(-50%,-50%);z-index:4;pointer-events:none;border:3px solid #ff3b30;border-radius:50%;background:linear-gradient(#ff3b30,#ff3b30) center/3px 130% no-repeat,linear-gradient(#ff3b30,#ff3b30) center/130% 3px no-repeat;box-shadow:0 0 18px #ff3b30aa;animation:reticle 2s cubic-bezier(.3,0,.2,1) forwards}@keyframes callout-in{0%{opacity:0;scale:2.4}to{opacity:1;scale:1}}@keyframes callout-shake{0%{translate:-3px 1px}50%{translate:3px -2px}to{translate:-2px 2px}}@keyframes callout-out{to{opacity:0;scale:.8;translate:0 -30%}}@keyframes danger-pulse{0%,to{box-shadow:inset 0 0 14vmin 3vmin #ff4a2a55}50%{box-shadow:inset 0 0 22vmin 6vmin #ff1a1a99}}@keyframes recoil{0%{translate:0 0}20%{translate:-14px 10px}45%{translate:12px -8px}70%{translate:-6px 4px}to{translate:0 0}}@keyframes target-blink{0%{box-shadow:0 0 0 3px #ff3b30,0 0 24px #ff3b30}to{box-shadow:0 0 0 1px #ff3b3066,0 0 6px #ff3b3044}}@keyframes reticle{0%{scale:2.2;rotate:-90deg;opacity:.3}to{scale:1;rotate:0deg;opacity:1}}.agent-help{position:fixed;inset:0;z-index:30;display:grid;place-items:center;padding:5vmin;background:radial-gradient(circle at 50% 40%,#10231dee,#050b09f5);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.agent-help[hidden]{display:none}.agent-card{width:min(860px,100%);color:#e8eedb;text-align:left;font-size:clamp(15px,2.2vw,24px);line-height:1.6}.agent-card .eyebrow{color:#9fb58f;font-size:clamp(10px,1.3vw,14px)}.agent-card h2{font-size:clamp(34px,6vw,72px);line-height:1.15;letter-spacing:-.03em;margin:.3em 0 .5em}.agent-card h2 em{font-style:normal;color:#d8ee95}.agent-card ol{padding-left:1.3em;margin:0 0 1.2em}.agent-card li{margin:.45em 0}.agent-card code,.agent-card kbd{font:600 .9em Consolas,monospace;background:#ffffff14;border:1px solid #ffffff22;border-radius:6px;padding:.05em .4em}.agent-card b{color:#fff}.agent-download{display:inline-flex;font-size:clamp(17px,2.4vw,26px);padding:.75em 1.3em;margin:.2em 1em .6em 0}.agent-guide{color:#b7d39a;text-decoration:underline;text-underline-offset:4px}.agent-detail{font:clamp(12px,1.6vw,17px)/1.5 Consolas,monospace;color:#9fb58f;margin:.6em 0}.agent-detail:empty{display:none}.agent-wait{display:flex;align-items:center;gap:.7em;color:#b9c9a9;margin-top:1.2em}.agent-wait .spinner{flex:none}.source-link{display:block;margin-top:12px;color:#7d9372;font-size:12px}
