:root{--blue:#2673c5;--deep:#15549d;--cream:#fff8e9;--paper:#fffdf6;--ink:#17202a;--coral:#f06460;--yellow:#ffda62;--cyan:#56c9de;--green:#55c89a;--line:3px solid var(--ink);--shadow:6px 7px 0 var(--ink)}
*{box-sizing:border-box} [hidden]{display:none!important} html{scroll-behavior:smooth} body{margin:0;min-height:100vh;overflow-x:hidden;color:var(--ink);font-family:"Kanit",sans-serif;background:var(--blue);background-image:radial-gradient(rgba(255,255,255,.18) 1.2px,transparent 1.2px);background-size:22px 22px} button,input{font:inherit}button{cursor:pointer}.sky-doodles{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:0}.doodle{position:absolute;text-shadow:2px 3px var(--ink);opacity:.9}.star{font-size:58px;color:var(--yellow)}.star-a{top:14%;left:3%;transform:rotate(-12deg)}.star-b{right:4%;top:48%;color:var(--coral);font-size:78px}.cloud{font-size:120px;color:var(--cream);-webkit-text-stroke:2px var(--ink)}.cloud-a{top:2%;right:-14px}.cloud-b{bottom:9%;left:-35px}.bolt{font-size:100px;color:var(--coral);-webkit-text-stroke:2px var(--ink)}.bolt-a{top:39%;left:-18px;transform:rotate(15deg)}.bolt-b{right:-20px;bottom:15%;transform:rotate(-10deg)}
.page-shell{width:min(1240px,calc(100% - 42px));margin:0 auto;position:relative;z-index:1;padding:22px 0 28px}.topbar{display:flex;justify-content:space-between;align-items:center;color:white;padding:5px 4px 24px}.brand{display:flex;align-items:center;gap:11px;color:white;text-decoration:none;font-weight:900;font-size:19px;line-height:.95;letter-spacing:.3px}.brand-stamp{display:grid;place-items:center;width:43px;height:43px;background:var(--yellow);color:var(--ink);border:2.5px solid var(--ink);border-radius:50%;box-shadow:3px 3px 0 var(--ink);font:21px "Luckiest Guy",cursive;transform:rotate(-9deg)}.brand-sub{display:block;font-size:10px;font-weight:600;letter-spacing:2px;margin-top:4px;color:#d9edff}.seat-map-link{color:var(--ink);text-decoration:none;background:var(--cream);border:2.5px solid var(--ink);padding:9px 14px;border-radius:999px;font-size:12px;font-weight:800;letter-spacing:.8px;box-shadow:3px 3px 0 var(--ink)}.seat-map-link span{color:var(--coral);font-size:16px;margin-left:5px}
.intro{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:2px 0 25px;color:var(--cream)}.eyebrow{margin:0 0 5px;font-size:11px;letter-spacing:2.2px;font-weight:700;color:#e4f3ff}.eyebrow-dot{display:inline-block;width:8px;height:8px;margin-right:7px;border-radius:50%;background:var(--yellow);border:1.5px solid var(--ink)}h1{margin:0;font:clamp(48px,7.2vw,88px)/.84 "Luckiest Guy","Kanit",sans-serif;letter-spacing:1px;color:var(--coral);-webkit-text-stroke:1.4px var(--ink);text-shadow:4px 5px 0 var(--ink);transform:rotate(-1.2deg)}h1 span{color:var(--yellow)}.intro-line{font-size:18px;margin:14px 0 0;font-weight:600;color:#fff}.sticker{width:116px;height:116px;flex:0 0 116px;border:3px solid var(--ink);border-radius:50%;background:var(--yellow);color:var(--ink);box-shadow:6px 6px 0 var(--ink);display:flex;flex-direction:column;align-items:center;justify-content:center;transform:rotate(10deg);position:relative}.sticker-small{font-size:10px;font-weight:900;letter-spacing:2px}.sticker strong{font:43px/.95 "Luckiest Guy",cursive;color:var(--coral);-webkit-text-stroke:1px var(--ink);text-shadow:2px 2px var(--ink)}.sticker-spark{position:absolute;top:-14px;right:0;font-size:30px;color:var(--coral);text-shadow:2px 2px var(--ink)}
.section-kicker{display:inline-block;font-size:10px;font-weight:800;letter-spacing:1.7px;color:var(--deep)}.mode-section{margin-bottom:24px}.mode-heading{display:flex;justify-content:space-between;align-items:center;color:white;margin:0 0 10px}.mode-heading .section-kicker{color:#e8f4ff}.mode-note{font-size:12px;font-weight:600}.mode-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}.mode-card{text-align:left;display:grid;gap:2px;position:relative;padding:16px 19px;border:3px solid var(--ink);border-radius:17px;background:var(--cream);color:var(--ink);box-shadow:5px 6px 0 var(--ink);transition:transform .15s,box-shadow .15s;min-height:132px}.mode-card:hover{transform:translate(2px,2px);box-shadow:3px 4px 0 var(--ink)}.mode-card.is-selected{background:var(--yellow);box-shadow:5px 6px 0 var(--ink),inset 0 0 0 3px rgba(255,255,255,.55)}.mode-card:focus-visible,.primary-button:focus-visible,.share-button:focus-visible,.again-button:focus-visible{outline:4px solid white;outline-offset:3px}.mode-index{font-size:10px;letter-spacing:1.5px;font-weight:900;color:var(--deep)}.mode-title{font:26px/1 "Luckiest Guy","Kanit",sans-serif;letter-spacing:.4px;color:var(--coral);-webkit-text-stroke:.5px var(--ink);text-shadow:1.5px 1.5px var(--ink)}.mode-desc{font-size:13px;font-weight:600;margin-top:3px}.mode-count{font-size:10px;letter-spacing:1.5px;font-weight:900;margin-top:4px;color:var(--deep)}
.game-layout{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(340px,.88fr);gap:24px;align-items:start}.poster-column,.side-column{min-width:0}.poster-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 11px;color:white}.poster-heading>div{display:grid;gap:3px}.poster-heading .section-kicker{color:#e8f4ff}.poster-heading strong{font-size:18px;line-height:1}.poster-tip{font-size:12px;color:#fff;font-weight:600;text-align:right}.poster-frame{width:min(100%,590px);margin:0 auto;position:relative;border:4px solid var(--ink);background:var(--cream);box-shadow:8px 9px 0 var(--ink);overflow:hidden;line-height:0;isolation:isolate}.poster-frame img{width:100%;height:auto;display:block;user-select:none;-webkit-user-drag:none}.hotspot-layer{position:absolute;inset:0;z-index:2;pointer-events:none}.hotspot{position:absolute;display:block;pointer-events:auto;transform:translate(-50%,-50%);border:2px dashed transparent;background:transparent;border-radius:12px;padding:0;transition:background .12s,border-color .12s,box-shadow .12s;touch-action:manipulation}.hotspot:focus-visible{outline:4px solid var(--yellow);outline-offset:2px}.hotspot:not(:disabled):hover{background:rgba(255,218,98,.17);border-color:rgba(255,255,255,.9)}.hotspot:disabled{cursor:default;pointer-events:none}.hotspot.is-done{border:2px solid var(--cyan);background:rgba(86,201,222,.23);box-shadow:inset 0 0 0 2px rgba(23,32,42,.38)}.hotspot.is-done:after{content:"✓";position:absolute;top:-9px;right:-8px;width:21px;height:21px;border:2px solid var(--ink);border-radius:50%;display:grid;place-items:center;background:var(--yellow);color:var(--ink);font:900 13px/1 "Kanit",sans-serif;box-shadow:2px 2px 0 var(--ink)}.hotspot.is-wrong{animation:wrong .25s linear 2}@keyframes wrong{25%{transform:translate(-53%,-50%)}75%{transform:translate(-47%,-50%)}}.poster-bottom-row{width:min(100%,590px);margin:14px auto 0;display:flex;justify-content:space-between;gap:10px;color:#fff;font-size:12px;font-weight:700}.answer-counter{padding:4px 9px;background:var(--yellow);border:2px solid var(--ink);border-radius:99px;color:var(--ink);font-size:10px;font-weight:900;letter-spacing:.7px;white-space:nowrap}
.panel{background:var(--paper);border:3px solid var(--ink);border-radius:17px;box-shadow:6px 7px 0 var(--ink);padding:17px 18px}.play-card{margin-bottom:19px}.card-topline{display:flex;justify-content:space-between;align-items:center;gap:8px}.live-pill{display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:99px;background:#e5f8ef;color:#23764d;font-size:9px;font-weight:900;letter-spacing:1px}.live-pill i{width:7px;height:7px;background:#43b979;border-radius:50%;box-shadow:0 0 0 3px rgba(67,185,121,.16)}.timer-wrap{text-align:center;margin:17px 0 12px;padding:12px 8px 10px;background:#eaf4ff;border:2px dashed #8bbbe8;border-radius:12px}.timer-label{display:block;color:var(--deep);font-size:10px;font-weight:900;letter-spacing:2px}.timer{font:clamp(35px,5vw,48px)/1 "Luckiest Guy",monospace;color:var(--ink);letter-spacing:1px;margin:7px 0 5px}.timer-sub{font-size:11px;font-weight:600;color:#586575}.progress-wrap{margin:12px 0 13px}.progress-label{display:flex;justify-content:space-between;font-size:10px;font-weight:900;letter-spacing:.8px;color:var(--deep);margin-bottom:5px}.progress-track{height:11px;border:2px solid var(--ink);border-radius:99px;background:#f2eee1;overflow:hidden}.progress-track span{display:block;width:0;height:100%;background:var(--green);transition:width .18s}.target-prompt{min-height:39px;margin:0 0 12px;padding:9px 11px;border-left:4px solid var(--coral);background:#fff1e7;border-radius:5px;font-size:13px;font-weight:700;line-height:1.35}.player-fields{display:grid;gap:6px;margin:12px 0}.player-fields label{font-size:12px;font-weight:800}.player-fields label em{color:var(--coral);font-style:normal}.player-fields label span{font-size:10px;color:#77808a;font-weight:500}.player-fields input:not([type=checkbox]){width:100%;border:2px solid #b5bfca;border-radius:8px;padding:9px 11px;background:white;color:var(--ink);outline:none}.player-fields input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(38,115,197,.15)}.handle-input{display:flex;align-items:center;border:2px solid #b5bfca;border-radius:8px;background:white;padding-left:10px}.handle-input span{color:var(--deep);font-weight:800}.handle-input input{border:0!important;box-shadow:none!important}.consent{display:flex;gap:8px;align-items:flex-start;margin-top:5px;font-size:10px!important;line-height:1.35}.consent input{margin:3px 0 0;accent-color:var(--blue)}.primary-button,.share-button,.again-button{border:2.5px solid var(--ink);border-radius:9px;padding:11px 14px;font-weight:900;box-shadow:3px 4px 0 var(--ink);transition:transform .12s,box-shadow .12s}.primary-button{width:100%;background:var(--coral);color:white;font-size:15px;text-shadow:1px 1px var(--ink)}.primary-button span{margin-left:6px}.primary-button:hover,.share-button:hover,.again-button:hover{transform:translate(2px,2px);box-shadow:1px 2px 0 var(--ink)}.form-hint{margin:8px 0 0;text-align:center;font-size:10px;color:#65717e;font-weight:600}.wrong-note{min-height:17px;margin-top:8px;text-align:center;font-size:11px;font-weight:800;color:#b34742}.result-box{margin-top:12px;padding:13px 10px 10px;text-align:center;border:2px solid var(--ink);border-radius:11px;background:#fff0c6}.result-confetti{font:18px "Luckiest Guy",cursive;color:var(--coral);text-shadow:1px 1px var(--ink);letter-spacing:1px}.result-time{font:35px/1.2 "Luckiest Guy",monospace;margin:6px 0}.result-box p{margin:4px 0 10px;font-size:12px;font-weight:700}.result-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.share-button,.again-button{font-size:11px;padding:8px 6px}.share-button{background:#17202a;color:#fff}.again-button{background:#fff;color:var(--ink)}
.leader-title-row{display:flex;justify-content:space-between;align-items:center;gap:8px}.leader-title-row .section-kicker{color:var(--deep)}.leader-title-row h2{font:25px/1 "Luckiest Guy",cursive;margin:5px 0 0;color:var(--coral);-webkit-text-stroke:.5px var(--ink);text-shadow:1px 1px var(--ink)}.rank-count{padding:5px 8px;border:2px solid var(--ink);border-radius:99px;background:var(--yellow);font-size:9px;font-weight:900;white-space:nowrap}.leader-mode{margin-top:11px;padding:6px 9px;border-radius:6px;background:#eaf4ff;color:var(--deep);font-size:10px;font-weight:900;letter-spacing:1px}.leader-desc{margin:7px 0;font-size:11px;color:#69727c;font-weight:600}.leader-status{font-size:10px;font-weight:700;color:#9a6a17;margin:7px 0}.leader-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.leader-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;background:#f3f2ed;border:1px solid #e4e0d5}.leader-row.top-1{background:#fff0bd;border-color:#d8b94b}.leader-row.top-2{background:#eaf0f8;border-color:#b9c8dc}.leader-row.top-3{background:#f9e7db;border-color:#dfb69d}.rank-number{font-weight:900;text-align:center}.rank-name{display:grid;min-width:0;font-size:11px;font-weight:800;line-height:1.2}.rank-handle{font-size:9px;color:var(--blue);text-decoration:none;font-weight:700;overflow:hidden;text-overflow:ellipsis}.rank-time{font:14px "Luckiest Guy",monospace;white-space:nowrap}.leader-empty{padding:16px 7px;text-align:center;background:#f5f2e9;border-radius:8px;font-size:12px;font-weight:600;color:#76808c}.leader-foot{display:flex;justify-content:space-between;margin-top:12px;padding-top:9px;border-top:1px dashed #c9c2b1;color:var(--deep);font-size:9px;font-weight:900;letter-spacing:1px}.footer{display:flex;align-items:center;gap:15px;margin-top:33px;padding:15px 4px 0;color:white;border-top:1px solid rgba(255,255,255,.35)}.footer-equation{font:24px "Luckiest Guy",cursive;color:var(--yellow);text-shadow:2px 2px var(--ink)}.footer-equation span{color:var(--coral)}.footer>div:nth-child(2){display:grid;gap:2px}.footer strong{font-size:11px;letter-spacing:1px}.footer small{font-size:10px;color:#d9edff}.footer>a{margin-left:auto;color:white;font-size:10px;font-weight:800;text-decoration:none}
@media(max-width:880px){.game-layout{grid-template-columns:minmax(0,1fr) minmax(300px,.88fr);gap:18px}.page-shell{width:min(100% - 30px,760px)}.poster-frame{width:100%}.panel{padding:14px}.mode-card{min-height:125px}}
@media(max-width:700px){.page-shell{width:calc(100% - 24px);padding-top:14px}.topbar{padding-bottom:20px}.brand{font-size:16px}.seat-map-link{font-size:10px;padding:8px 10px}.intro{margin-bottom:20px}.intro-line{font-size:15px}.sticker{width:88px;height:88px;flex-basis:88px}.sticker strong{font-size:34px}.mode-grid{gap:9px}.mode-card{padding:12px 12px;min-height:125px}.mode-title{font-size:21px}.mode-desc{font-size:11px}.mode-count{font-size:9px}.game-layout{grid-template-columns:1fr;gap:21px}.poster-frame{width:min(100%,520px)}.side-column{display:grid;grid-template-columns:1fr;gap:17px}.play-card{margin-bottom:0}.panel{padding:16px}.timer{font-size:42px}.poster-heading strong{font-size:16px}.poster-tip{max-width:46%;font-size:10px}.poster-bottom-row{width:100%;font-size:10px}.footer{margin-top:25px}.footer-equation{font-size:21px}}
@media(max-width:390px){.mode-title{font-size:18px}.mode-card{min-height:132px}.mode-desc{font-size:10px}.mode-count{letter-spacing:1px}.result-actions{grid-template-columns:1fr}.footer small{font-size:9px}}
.poster-frame.wrong-shake{animation:frameWrong .28s linear}@keyframes frameWrong{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
