:root{color-scheme:dark;font-family:Inter,"Noto Sans TC",system-ui,sans-serif;background:#08130f;color:#f4fff8}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at 50% 10%,#173d2e 0,#08130f 55%)}.landing{min-height:100vh;display:grid;place-content:center;justify-items:center;text-align:center;padding:24px}.mark{display:grid;place-items:center;width:76px;height:76px;border-radius:24px;background:#caff33;color:#102017;font-size:34px;font-weight:900;transform:rotate(-6deg);box-shadow:0 20px 60px #0008}.landing p{letter-spacing:.3em;color:#9bb7a9;margin:30px 0 6px}.landing h1{font-size:clamp(38px,9vw,72px);margin:0 0 32px}.landing a{color:#102017;background:#caff33;text-decoration:none;font-weight:800;padding:14px 24px;border-radius:16px}
.game-body{background:#08130f;color:#f6fff9}.game-app{min-height:100vh}.loading,.fatal{padding:15vh 24px;text-align:center}.game-topbar{height:64px;border-bottom:1px solid #29483a;display:flex;align-items:center;justify-content:space-between;padding:0 max(18px,4vw);position:sticky;top:0;background:#08130fee;backdrop-filter:blur(12px);z-index:20}.game-brand{display:flex;align-items:center;gap:12px;font-weight:800}.game-brand b{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:#caff33;color:#112017;transform:rotate(-5deg)}.open-status{font-size:13px;color:#b8c9c0;display:flex;align-items:center;gap:7px}.open-status i{width:8px;height:8px;border-radius:50%;background:#6fffa8;box-shadow:0 0 12px #6fffa8}.join-wrap,.play-wrap,.result-wrap{width:min(920px,100%);margin:auto;padding:34px 18px 70px}.room-brand{text-align:center;min-height:145px;display:flex;flex-direction:column;align-items:center;justify-content:center}.room-brand img{max-height:100px;object-fit:contain;margin-bottom:8px}.room-brand span{color:#a7c6b5;font-weight:800;letter-spacing:.12em}.room-brand h1{font-size:clamp(28px,6vw,48px);margin:12px 0}.join-card,.rank-card,.game-stats,.score-rules{background:#13231c;border:1px solid #2b4639;border-radius:24px;padding:22px;box-shadow:0 18px 60px #0003}.join-card{max-width:680px;margin:10px auto}.join-card>label{display:block;color:#a9beb3;margin-bottom:10px}.join-row{display:flex;gap:10px}.join-row input{flex:1;min-width:0}.game-body input,.game-body button{font:inherit;border-radius:14px;border:1px solid #385346;padding:14px 16px}.game-body input{background:#0b1712;color:white}.game-body button{border:0;background:#caff33;color:#102017;font-weight:900;cursor:pointer}.game-body button:disabled{opacity:.5}.game-body button.ghost{background:transparent;color:#eafff1;border:1px solid #466153}.error{color:#ff9098;min-height:20px}.room-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}.room-meta span{background:#0b1712;border-radius:999px;padding:8px 11px;font-size:12px;color:#a9beb3}.game-stats{display:grid;grid-template-columns:repeat(5,1fr);align-items:center;gap:12px}.game-stats span{font-size:12px;color:#9fb4a9}.game-stats b{display:block;color:white;font-size:24px;margin-top:4px}.game-stats .danger{color:#ff626e}.target-pill{width:max-content;margin:16px auto;background:#20382e;border:1px solid #456453;border-radius:999px;padding:12px 18px}.target-pill strong{font-size:24px;color:#caff33;margin-left:8px}.number-board{height:min(650px,72vh);min-height:500px;position:relative;overflow:hidden;border:1px solid #28483a;border-radius:30px;background-image:radial-gradient(#29483a 1px,transparent 1px);background-size:28px 28px;touch-action:none;user-select:none}.number-tile{position:absolute;aspect-ratio:1;display:grid;place-items:center;filter:drop-shadow(0 8px 7px #0008);transition:left .28s ease,top .28s ease,transform .28s ease;pointer-events:none}.number-tile img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.number-tile b{position:relative;z-index:2;font-size:clamp(18px,5vw,32px);color:white;-webkit-text-stroke:2px #142018;text-shadow:0 2px 4px #000,0 0 8px #000;font-weight:950}.number-tile.selected{filter:drop-shadow(0 0 12px #caff33) brightness(1.25)}.lasso-layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.lasso-layer polyline,.lasso-layer line{fill:none;stroke:#caff33;stroke-width:.65;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.feedback,.score-flash{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:13px 20px;border-radius:999px;background:#09110deb;font-weight:900;z-index:5}.score-flash{color:#caff33;font-size:22px}.score-rules{display:grid;gap:5px;margin-top:16px;font-size:13px;color:#afc3b8}.score-rules strong{color:#caff33}.rank-card{max-width:680px;margin:18px auto}.rank-head{display:flex;justify-content:space-between;align-items:center}.rank-head h2{margin:0}.rank-row{display:grid;grid-template-columns:52px 1fr auto;gap:10px;padding:13px 4px;border-bottom:1px solid #2a4035}.rank-row.me{color:#caff33}.result-wrap>span{display:block;text-align:center;color:#a7c6b5;letter-spacing:.18em;margin-top:30px}.result-wrap>h1{text-align:center;font-size:clamp(28px,6vw,48px)}.result-wrap em{color:#caff33;font-style:normal}.result-actions{display:flex;justify-content:center;gap:12px;margin-top:22px}.fatal{max-width:600px;margin:auto}
@media(max-width:680px){.game-topbar{height:56px}.open-status{font-size:11px}.join-wrap,.play-wrap,.result-wrap{padding:22px 10px 50px}.room-brand{min-height:120px}.room-brand h1{font-size:28px}.game-stats{grid-template-columns:repeat(4,1fr);padding:14px 12px;border-radius:18px}.game-stats button{grid-column:1/-1;padding:10px}.number-board{height:64vh;min-height:470px;border-radius:22px}.number-tile b{-webkit-text-stroke:1.5px #142018}.join-row{flex-direction:column}.rank-card,.join-card{padding:17px;border-radius:18px}}

.admin-body{background:#eef2ef;color:#16231d;min-height:100vh}.admin-body input,.admin-body select,.admin-body button{font:inherit;border-radius:12px;padding:11px 13px}.admin-body input,.admin-body select{width:100%;border:1px solid #c7d1cb;background:white;color:#16231d}.admin-body button{border:0;background:#193e30;color:white;font-weight:800;cursor:pointer}.admin-body button:disabled{opacity:.5}.admin-body button.ghost{background:white;color:#193e30;border:1px solid #b9c7c0}.admin-body button.danger{background:#fff1f2;color:#b42331;border:1px solid #ffc5ca}.admin-login{min-height:100vh;display:grid;place-items:center;padding:20px}.login-card{width:min(430px,100%);background:white;border:1px solid #d8e0dc;border-radius:26px;padding:30px;box-shadow:0 26px 70px #193e3022}.login-card .mark{width:58px;height:58px;border-radius:18px;font-size:25px}.login-card h1{margin:24px 0 4px}.login-card p{color:#68776f}.login-card label,.field label{display:grid;gap:7px;color:#526159;font-size:13px;font-weight:700;margin-top:15px}.login-card button{width:100%;margin-top:20px;background:#caff33;color:#102017}.admin-shell{min-height:100vh}.admin-header{height:72px;padding:0 max(18px,4vw);display:flex;align-items:center;justify-content:space-between;background:#102b20;color:white;position:sticky;top:0;z-index:20}.admin-brand{display:flex;align-items:center;gap:12px;font-weight:900}.admin-brand b{width:38px;height:38px;display:grid;place-items:center;background:#caff33;color:#102017;border-radius:12px;transform:rotate(-5deg)}.admin-header-actions{display:flex;align-items:center;gap:12px}.admin-header-actions span{font-size:13px;color:#b9cec3}.admin-header button{background:#284a3d}.admin-main{width:min(1260px,100%);margin:auto;padding:28px 20px 60px}.admin-main h1{margin:0}.admin-main>p{color:#6c7b73}.admin-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}.room-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.room-card{background:white;border:1px solid #d7e0db;border-radius:18px;padding:18px;box-shadow:0 10px 26px #173d2e0b}.room-card h3{margin:8px 0}.room-card p{color:#738078;font-size:13px}.room-card .status{display:inline-flex;padding:6px 9px;border-radius:999px;background:#eaf3ee;color:#275742;font-size:12px;font-weight:800}.room-card-actions{display:flex;gap:8px;margin-top:14px}.room-card-actions button{flex:1}.admin-panel{background:white;border:1px solid #d7e0db;border-radius:22px;padding:22px;margin-top:18px}.admin-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.admin-panel-head h2{margin:0}.admin-panel-head p{color:#75827b;margin:5px 0}.admin-panel-head-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 16px;margin-top:20px}.field.wide{grid-column:span 2}.field.full{grid-column:1/-1}.field small{color:#7a8880}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px;padding-top:18px;border-top:1px solid #e1e7e4}.asset-section{margin-top:22px;padding-top:18px;border-top:1px solid #e1e7e4}.asset-section h3{margin:0 0 8px}.asset-section>p{color:#748178;font-size:13px}.asset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(105px,1fr));gap:12px}.asset-card{background:#f3f6f4;border:1px solid #dce4df;border-radius:16px;padding:10px;text-align:center}.asset-card img{width:72px;height:72px;object-fit:contain}.asset-card button{width:100%;padding:7px;margin-top:6px}.upload-label{display:inline-flex;align-items:center;gap:8px;background:#e7f5ed;color:#1d533b;font-weight:800;border-radius:12px;padding:10px 13px;cursor:pointer}.upload-label input{display:none}.leader-preview{margin-top:20px;overflow:auto}.leader-preview table{width:100%;border-collapse:collapse}.leader-preview th,.leader-preview td{text-align:left;padding:11px;border-bottom:1px solid #e1e7e4}.leader-preview th{color:#708078;font-size:12px}.empty-state{background:white;border:1px dashed #b9c8c0;border-radius:20px;padding:50px 20px;text-align:center;color:#708078}.toast{position:fixed;right:20px;bottom:20px;background:#102b20;color:white;padding:13px 18px;border-radius:12px;box-shadow:0 14px 40px #0004;z-index:50}.modal-backdrop{position:fixed;inset:0;background:#07110caa;display:grid;place-items:center;padding:18px;z-index:40}.modal{width:min(520px,100%);max-height:90vh;overflow:auto;background:white;border-radius:22px;padding:24px}.modal h2{margin-top:0}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
@media(max-width:800px){.admin-header-actions span{display:none}.admin-main{padding:20px 12px 50px}.admin-toolbar,.admin-panel-head{align-items:stretch;flex-direction:column}.admin-panel-head-actions{justify-content:flex-start}.form-grid{grid-template-columns:1fr}.field.wide{grid-column:auto}.admin-panel{padding:16px;border-radius:18px}.room-list{grid-template-columns:1fr}.form-actions{flex-wrap:wrap}.form-actions button{flex:1}.asset-grid{grid-template-columns:repeat(2,1fr)}}

.admin-body a{color:#205c42;text-decoration:none;font-weight:800}.admin-brand{color:white!important}.admin-login>section{width:min(430px,100%);background:white;border:1px solid #d8e0dc;border-radius:26px;padding:30px;box-shadow:0 26px 70px #193e3022}.admin-login>section>p,.dashboard-title p,.control-title p{color:#6c7b73;letter-spacing:.18em;font-size:12px;font-weight:800}.admin-login h1{margin:8px 0 22px}.admin-login form{display:grid;gap:14px}.admin-login label,.admin-form label{display:grid;gap:7px;font-size:13px;font-weight:800;color:#58675f}.admin-login button{width:100%;background:#caff33;color:#102017}.dashboard-title,.control-title,.rank-title{display:flex;align-items:center;justify-content:space-between;gap:16px}.dashboard-title h1,.control-title h1{margin:3px 0 0}.room-list article{background:white;border:1px solid #d7e0db;border-radius:18px;padding:18px;display:grid;gap:14px;box-shadow:0 10px 26px #173d2e0b}.room-list article small{display:inline-flex;padding:6px 9px;border-radius:999px;background:#eaf3ee;color:#275742;font-weight:800}.room-list article h2{margin:10px 0 3px}.room-list article p{margin:0;color:#718078}.room-list article>div:last-child{display:flex;align-items:center;justify-content:space-between;gap:10px}.room-summary{display:flex;gap:7px;flex-wrap:wrap}.room-summary span{background:#f0f4f2;padding:7px 9px;border-radius:999px;font-size:12px}.empty{grid-column:1/-1;text-align:center;padding:50px 20px;background:white;border:1px dashed #b9c8c0;border-radius:20px;color:#708078}.form-panel{background:white;border:1px solid #d7e0db;border-radius:22px;padding:22px;margin-top:18px}.form-panel>h1{margin-top:22px}.admin-form{display:grid;gap:15px}.admin-form h2{margin:12px 0 0}.admin-form>.two,.admin-form>.four{display:grid;gap:14px}.admin-form>.two{grid-template-columns:repeat(2,1fr)}.admin-form>.four{grid-template-columns:repeat(4,1fr)}.admin-form>button{justify-self:end;min-width:160px}.success{color:#26734d}.control-actions,.rank-title>div{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.asset-row{display:flex;align-items:center;gap:18px;flex-wrap:wrap}.asset-row figure,.icon-grid figure{margin:0;background:#f1f5f3;border:1px solid #dce4df;border-radius:16px;padding:10px;text-align:center}.asset-row img,.icon-grid img{display:block;width:90px;height:90px;object-fit:contain;margin:auto}.asset-row figure button,.icon-grid figure button{margin-top:8px;padding:7px 10px;background:#fff1f2;color:#b42331}.upload-button{display:inline-flex!important;width:max-content;align-items:center;background:#e6f5ed;color:#1d533b!important;border-radius:12px;padding:11px 14px;cursor:pointer}.upload-button input{display:none}.icon-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(115px,1fr));gap:12px;margin:13px 0}.danger-button{background:#fff1f2!important;color:#b42331!important;border:1px solid #ffc5ca!important}.danger-zone{margin-top:18px;padding:18px;border:1px solid #ffc5ca;border-radius:18px;background:#fffafa}.danger-zone h2{color:#9b1c28;margin-top:0}.rank-title{margin-bottom:12px}.room-control>.success{background:#e7f7ee;padding:12px 15px;border-radius:12px}
@media(max-width:800px){.dashboard-title,.control-title,.rank-title{align-items:stretch;flex-direction:column}.admin-form>.two,.admin-form>.four{grid-template-columns:1fr}.control-actions{align-items:stretch}.control-actions>*{text-align:center}.admin-form>button{width:100%}.admin-login>section{padding:22px}.admin-header{height:62px}.admin-brand span{font-size:14px}}
