:root{--navy:#14223f;--deep:#0b1425;--gold:#c8ae86;--cream:#faf7f2;--muted:#b7beca;--line:rgba(214,194,159,.24);font-family:'IBM Plex Sans Thai',sans-serif;color:var(--cream);background:#eae7e2;font-synthesis:none}*{box-sizing:border-box}body{margin:0;display:flex;min-height:100dvh}button,input,select{font:inherit}button{cursor:pointer;touch-action:manipulation}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:3px solid #e7c58a;outline-offset:4px}button:disabled{cursor:wait;opacity:.55}#review{width:310px;padding:38px 28px;flex-shrink:0;color:var(--navy);background:#f6f3ee;border-right:1px solid #d8d3ca;overflow-y:auto;height:100dvh}#review .studio{font-size:11px;letter-spacing:.25em;color:#7e6444}#review h1{font-family:'Cormorant Garamond',serif;font-weight:500;font-size:40px;line-height:1;margin:35px 0 14px}#review p{font-size:13px;line-height:1.8;color:#616572}#review .tabs{display:flex;gap:5px;margin:27px 0 20px}#review .tabs button{flex:1;border:1px solid #d5cec2;background:transparent;padding:10px 3px;font-size:12px;border-radius:5px;color:var(--navy)}#review .tabs button.active{background:var(--navy);color:white}#review nav{display:grid;gap:2px}#review nav button{display:flex;align-items:center;gap:13px;text-align:left;border:0;background:transparent;padding:9px 10px;font-size:12px;color:#696b70;border-radius:4px}#review nav button.active{background:#e8e1d6;color:var(--navy)}#review nav span{font-family:serif;color:#9d805b;font-size:15px}#review .note{font-size:11px;border-top:1px solid #d8d0c4;padding-top:18px;margin-top:25px}#review a{color:var(--navy)}#review .review-tools{display:flex;gap:7px;margin-top:18px}#review .review-tools button{border:1px solid #d8d0c4;background:white;color:var(--navy);padding:8px;font-size:11px}#stage{flex:1;display:flex;align-items:center;justify-content:center;min-width:0;height:100dvh;background:radial-gradient(ellipse at 55% 40%,#f7f5f1,#ddd8d0);overflow:hidden}#device{width:540px;height:960px;position:relative;flex-shrink:0;box-shadow:0 22px 90px #14223f30}#app{position:relative;width:540px;height:960px;background:var(--navy);overflow:hidden;font-size:18px;line-height:1.6}#app::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 80% 5%,#34466b55,transparent 60%);pointer-events:none}.screen{position:absolute;inset:0;display:flex;flex-direction:column;padding:30px 38px 24px;animation:enter .35s ease-out}.screen.photo{background:linear-gradient(180deg,#0b1425a8 0%,#0b142528 36%,#0b1425 77%),url('assets/tower.jpg') 48% 46%/cover}.screen.ivory{background:radial-gradient(ellipse at top,#fff,#eee6d9);color:var(--navy)}.topbar{height:62px;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.logo{width:143px;height:auto}.home{width:48px;height:48px;background:transparent;border:1px solid var(--line);border-radius:50%;color:inherit;font-size:21px}.ivory .home{border-color:#c7b89f}.edition{font-size:10px;letter-spacing:.2em;color:var(--gold);text-align:right}.ivory .edition{color:#7e6444}.eyebrow{font-size:12px;letter-spacing:.22em;color:var(--gold);text-transform:uppercase;margin-bottom:12px}.ivory .eyebrow{color:#7e6444}h1,h2,h3,p{margin:0}h1,h2.display,.display{font-family:'Cormorant Garamond',serif;font-weight:500}h1{font-size:64px;line-height:.95;letter-spacing:-.025em}h1 em{color:var(--gold);font-weight:500}h2{font-size:32px;font-weight:400;line-height:1.4}.intro{margin:30px 0 25px}.sub{font-size:17px;color:var(--muted);line-height:1.8;margin-top:14px}.ivory .sub{color:#62636a}.push{flex:1;min-height:10px}.btn{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:64px;padding:15px 24px;border-radius:7px;border:1px solid var(--line);color:var(--cream);background:transparent;font-size:18px;font-weight:500;gap:10px}.btn.primary{background:linear-gradient(110deg,#f7e8ce,#d7bb8d);color:#17223b;border-color:#e3ca9f;box-shadow:0 5px 23px #c2a77a12}.btn.light{background:#faf7f2;color:var(--navy);border-color:#faf7f2}.btn + .btn{margin-top:12px}.btn small{font-weight:400;font-size:13px;display:block;color:inherit;opacity:.7}.arrow{font-size:26px;font-weight:300;line-height:1}.foot{display:flex;align-items:center;justify-content:space-between;margin-top:22px;font-size:10px;letter-spacing:.14em;color:#c5c9cf}.ivory .foot{color:#776c60}.demo-tag{border:1px solid var(--line);border-radius:3px;padding:3px 6px;letter-spacing:.1em;font-size:9px}.divider{height:1px;background:var(--line);margin:22px 0}.menu-title{margin-top:50px}.menu-title h1{font-size:65px}.menu-title .sub{max-width:360px}.experience{padding:23px 0;display:flex;align-items:center;gap:20px;border-top:1px solid var(--line)}.experience:last-child{border-bottom:1px solid var(--line)}.experience .number{color:var(--gold);font:24px 'Cormorant Garamond',serif}.experience .desc{flex:1}.experience h3{font-size:29px;line-height:1.2;font-family:'Cormorant Garamond',serif;font-weight:500}.experience p{font-size:13px;color:var(--muted);margin-top:8px}.round{width:53px;height:53px;border-radius:50%;background:var(--gold);border:0;color:var(--navy);font-size:25px}.arch{height:366px;width:294px;border-radius:160px 160px 0 0;align-self:center;position:relative;margin:12px auto 20px;border:1px solid #d5bd8d88;padding:9px;box-shadow:0 0 65px #d8b77c18}.arch:after{content:'';position:absolute;inset:0;border-radius:inherit;background:linear-gradient(125deg,transparent 47%,#e6d8c344 47.2%,transparent 47.6%,transparent 68%,#e6d8c333 68.2%,transparent 68.6%);pointer-events:none}.arch img{width:100%;height:100%;object-fit:cover;object-position:32% 65%;border-radius:inherit;filter:brightness(.8)}.attract{text-align:center}.attract .intro{margin-top:22px}.attract h1{font-size:60px;line-height:.94}.attract .sub{font-size:14px}.attract .eyebrow{margin-top:8px}.time-pill{display:inline-flex;gap:10px;border:1px solid var(--line);padding:7px 18px;font-size:12px;letter-spacing:.12em;align-self:center;margin-bottom:20px}.field{display:block;margin-bottom:18px;font-size:15px}.field>span{display:block;margin-bottom:7px;color:#e3d9c8}input,select{width:100%;height:64px;border:1px solid #677080;background:#ffffff07;border-radius:6px;color:var(--cream);padding:0 18px;font-size:21px;outline-offset:3px}input::placeholder{color:#929bad;font-size:18px}select option{background:var(--navy)}input[type=checkbox],input[type=radio]{accent-color:#dfc69c;width:23px;height:23px;flex-shrink:0}.check{display:flex;gap:13px;align-items:flex-start;padding:12px 0;font-size:14px;color:#d5d8df;line-height:1.65}.check a,.text-button{color:var(--gold);background:transparent;border:0;text-decoration:underline;cursor:pointer}.check input{margin:3px 0}.hint-text{font-size:12px;color:#a7afbd;margin-top:5px}.error{font-size:14px;color:#ffd1bb;min-height:23px;margin:6px 0}.demo-info{background:#d1b17e12;border:1px dashed #b494653d;padding:12px 15px;color:#d3bf9f;font-size:13px;border-radius:5px}.ivory .demo-info{color:#7e6444;border-color:#ad9265}.step-list{display:grid;gap:17px;margin-top:10px}.step{display:flex;gap:20px;align-items:center;padding:20px 0;border-top:1px solid var(--line)}.step .step-icon{width:70px;height:70px;border:1px solid var(--line);display:grid;place-items:center;font-size:34px;color:var(--gold);flex-shrink:0}.step h3{font-size:19px;font-weight:500}.step p{font-size:14px;color:var(--muted);margin-top:5px}.scorebar{display:flex;justify-content:space-between;align-items:end;margin-top:25px}.scorebar small{font-size:11px;letter-spacing:.16em;color:var(--muted);display:block}.scorebar strong{font-size:40px;font-weight:400;line-height:1.2;font-variant-numeric:tabular-nums}.scorebar .right{text-align:right}.timer-track{height:5px;background:#ffffff20;margin-top:14px;overflow:hidden}.timer-track i{display:block;height:100%;background:var(--gold);transition:width .25s}.stats-line{display:flex;justify-content:space-between;font-size:12px;letter-spacing:.04em;margin:14px 0;color:var(--muted)}.board{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;padding:3px;background:#d2bd96;aspect-ratio:1;position:relative}.tile{position:relative;aspect-ratio:1;border:0;overflow:hidden;padding:0;background:var(--deep);min-width:0}.tile .tile-image{position:absolute;inset:0;background-image:url('assets/tower.jpg');background-size:300% 300%;transition:transform .18s}.tile.correct:after{content:'';width:6px;height:6px;background:#f8e7bf;border-radius:50%;position:absolute;right:6px;bottom:6px;box-shadow:0 0 0 2px #14223f}.board .peek-image{position:absolute;inset:0;background:url('assets/tower.jpg') center/cover;z-index:4;pointer-events:none}.game-tools{display:flex;justify-content:space-between;gap:15px;margin-top:22px}.game-tools button{border:1px solid var(--line);background:transparent;color:var(--cream);padding:14px 18px;font-size:15px;flex:1;min-height:60px}.game-tools button span{font-size:23px;margin-right:8px;color:var(--gold)}.game-note{font-size:13px;text-align:center;color:var(--muted);margin-top:18px}.urgent{color:#ffc69e}.complete-arch{width:335px;height:515px;margin-top:32px}.complete-title{position:absolute;inset:auto 0 90px;text-align:center;text-shadow:0 2px 20px #000}.complete-title h1{font-size:72px}.result{text-align:center}.result .intro{margin:30px 0 14px}.result .points{font-size:98px;font-family:'Cormorant Garamond',serif;color:#efdbb5;line-height:1.05;font-variant-numeric:lining-nums}.result-metrics{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--line);margin:23px 0}.result-metrics>div{padding:17px 0;border-right:1px solid var(--line)}.result-metrics>div:last-child{border-right:0}.result-metrics small{font-size:10px;letter-spacing:.08em;color:var(--muted);display:block}.result-metrics strong{font-size:25px;font-weight:400}.result-pic{width:100%;height:165px;object-fit:cover;opacity:.8;margin-bottom:20px}.board-tabs{display:flex;border:1px solid var(--line);border-radius:30px;padding:4px;margin:20px 0}.board-tabs button{flex:1;padding:10px 8px;min-height:48px;color:var(--muted);border:0;border-radius:25px;background:transparent;font-size:13px}.board-tabs button.active{background:#edd8b2;color:var(--navy)}.leader-table{width:100%;border-collapse:collapse;font-size:16px}.leader-table th{text-align:left;font-weight:400;font-size:10px;letter-spacing:.12em;color:var(--muted);padding:10px}.leader-table td{padding:14px 10px;border-top:1px solid var(--line)}.leader-table td:last-child,.leader-table th:last-child{text-align:right}.leader-table .you{background:#ddc29a17;color:#efdbb5}.choice{display:flex;align-items:center;text-align:left;gap:15px;padding:20px;margin-bottom:13px;min-height:100px}.choice .choice-icon{font-size:29px;font-weight:400}.choice>div{flex:1}.choice h3{font-size:18px;font-weight:500}.choice p{font-size:13px;opacity:.75;margin-top:5px}.choice.light p{color:#4a5163}.radio-group{display:flex;flex-wrap:wrap;gap:10px;margin-top:9px;margin-bottom:20px}.option{display:flex;align-items:center;gap:9px;padding:10px 12px;border:1px solid var(--line);border-radius:5px;font-size:15px;min-height:52px}.option:has(input:checked){border-color:#e1c89d;background:#c5a77418}.option input{width:20px;height:20px;margin:0}.legend{font-size:16px;color:#e3d9c8}.form-scroll{overflow:auto;scrollbar-width:thin;margin-right:-12px;padding-right:12px}.interest-form .intro{margin:20px 0}.interest-form .sub{font-size:14px}.interest-form input,.interest-form select{height:56px;font-size:17px}.interest-form .check{font-size:13px}.interest-form .option{font-size:14px;padding:9px;min-height:46px}.interest-form .radio-group{margin-bottom:15px}.success-icon{width:95px;height:95px;border-radius:50%;border:1px solid var(--gold);display:grid;place-items:center;font-size:40px;color:var(--gold);margin:65px auto 30px}.thankyou{text-align:center}.thankyou .display{font-size:59px;line-height:1}.thankyou .sub{margin-top:25px}.receipt{border:1px solid var(--line);padding:22px;margin:25px 0;text-align:center}.receipt .display{font-size:30px;color:var(--gold)}.receipt p{font-size:13px;color:var(--muted);margin-top:8px}.box-title{text-align:center;margin:30px 0 0}.box-title h1{font-size:69px}.box-title h1 em{color:#907043;font-style:normal}.box-title .sub{font-size:16px}.gift-scene{height:305px;position:relative;display:grid;place-items:center;margin:10px 0}.gift-scene:before{content:'';position:absolute;bottom:20px;width:300px;height:50px;background:#9c80552b;filter:blur(15px);border-radius:50%}.gift{width:170px;height:155px;background:linear-gradient(100deg,#d3bd97,#f4ead7 45%,#d5c1a0);position:relative;box-shadow:15px 18px 27px #1b243f24;transform:rotate(-7deg);border:1px solid #a48b6240}.gift:before{content:'';position:absolute;top:0;bottom:0;width:31px;left:69px;background:linear-gradient(90deg,#94713d,#e7cd93,#ad854a)}.gift .lid{position:absolute;left:-9px;right:-9px;top:-10px;height:35px;background:linear-gradient(100deg,#e9d9ba,#fff7e7,#c4ad84);border:1px solid #ad97734d;box-shadow:0 6px 8px #6b4b3b20}.gift .lid:after{content:'';position:absolute;inset:0 auto 0 77px;width:31px;background:linear-gradient(90deg,#94713d,#e7cd93,#ad854a)}.gift .bow{position:absolute;width:80px;height:42px;top:-49px;left:14px;border:12px solid #b7975e;border-radius:70% 90% 10% 90%;transform:rotate(20deg);box-shadow:inset 0 2px 6px #8d693b}.gift .bow.right{left:82px;transform:scaleX(-1) rotate(20deg)}.gift .seal{position:absolute;right:20px;top:55px;font-size:9px;letter-spacing:.09em;color:#7e6444;writing-mode:vertical-rl}.gift.dark{background:linear-gradient(100deg,#111a2d,#344158,#111a2d)}.gift.dark .lid{background:linear-gradient(100deg,#172137,#36455c,#10192c)}.gift.dark .seal{color:#e3c68e}.reward-strip{display:flex;border-top:1px solid #c8b9a2;border-bottom:1px solid #c8b9a2;margin:5px 0 24px;padding:17px 0;gap:6px}.reward-strip>div{flex:1;text-align:center;border-right:1px solid #c8b9a2;font-size:12px;color:#5d574e}.reward-strip>div:last-child{border:0}.reward-strip strong{display:block;font-size:14px;font-weight:500;color:#14223f}.reward-strip .reward-icon{margin:0 auto 12px;transform:scale(.8);height:45px}.reward-icon{height:55px;width:80px;position:relative;display:grid;place-items:center;font:18px 'Cormorant Garamond',serif;color:#f3e1bb;margin:20px auto}.reward-icon.gold:before{content:'';width:63px;height:33px;background:linear-gradient(135deg,#b88c34,#f9e2a0,#bd9339);transform:skew(-16deg) rotate(-12deg);border:1px solid #e8d194;box-shadow:4px 7px 0 #b68a2d,8px 13px 0 #ddb953}.reward-icon.phone:before{content:'';width:29px;height:53px;border:3px solid #bca47c;border-radius:7px;background:linear-gradient(135deg,#111722,#42464b 50%,#0e1626 52%);box-shadow:15px 3px 0 -2px #a79984}.reward-icon.voucher{background:linear-gradient(120deg,#212637,#4b463b);border:1px solid #b29b72;width:86px;height:47px;transform:rotate(-7deg);font-size:18px}.boxes{display:flex;flex-wrap:wrap;justify-content:center;gap:30px 20px;margin:55px 0 25px}.box-option{width:43%;height:200px;border:1px solid var(--line);border-radius:7px;background:#ffffff05;display:flex;align-items:center;justify-content:center;flex-direction:column;position:relative;transition:background .2s}.box-option .gift{transform:scale(.63);margin-top:26px;flex-shrink:0}.box-option .box-label{position:absolute;bottom:12px;color:var(--cream);font-size:14px;letter-spacing:.08em}.box-option.selected{border:2px solid #e7c58a;background:#d3b68620}.box-option.selected:after{content:'✓';position:absolute;top:8px;right:12px;color:var(--gold)}.box-result .reward-icon{transform:scale(2.4);margin:75px auto}.box-result{text-align:center}.box-result h2{font-size:34px}.box-result .display{font-size:50px;color:#edd5ac;line-height:1.1}.reveal-glow{position:absolute;width:360px;height:360px;background:radial-gradient(circle,#dbb77033,transparent 65%);top:210px;left:90px;pointer-events:none}.modal-shade{position:absolute;inset:0;background:#050b18cc;z-index:30;display:flex;align-items:center;justify-content:center;padding:30px;backdrop-filter:blur(8px)}.modal{padding:30px;background:#1a2945;border:1px solid var(--line);border-radius:10px;width:100%;box-shadow:0 20px 60px #0004}.modal h2{font-size:25px}.modal p{font-size:16px;color:#d1d5de;margin:18px 0 25px;line-height:1.8}.modal .body-copy{max-height:450px;overflow:auto}.modal .body-copy p{font-size:15px}.status-banner{font-size:11px;color:#dbc39b;letter-spacing:.04em;padding:7px 12px;border:1px solid var(--line);margin:12px 0;text-align:center}.busy .gift{animation:float .8s ease-in-out infinite alternate}.numpad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}.numpad button{height:55px;background:#ffffff09;border:1px solid var(--line);color:var(--cream);border-radius:4px;font-size:22px}.numpad button:last-child{font-size:14px}.numpad .wide{grid-column:span 3;font-size:14px;height:40px}.hidden{display:none!important}.revealing .lid{animation:open-lid 1s ease-in forwards}.revealing .bow{opacity:0}.revealing .gift{transform:rotate(0);transition:transform .3s}.kiosk-mode #review{display:none}.kiosk-mode #stage{background:var(--deep)}@keyframes enter{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}@keyframes float{to{transform:translateY(-10px) rotate(-4deg)}}@keyframes open-lid{to{transform:translateY(-130px) rotate(-15deg);opacity:0}}@media(max-width:800px),(orientation:portrait){#review{display:none}#stage{background:var(--deep)}#device{box-shadow:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
#register-form{min-height:0;overflow:auto;padding:4px 5px;margin:0 -5px;scrollbar-width:thin}#register-form+.push{flex:0;min-height:15px}.screen:has(#register-form)>.demo-info{flex-shrink:0;font-size:12px}.screen:has(#register-form) .intro{margin:25px 0 20px}
.screen h1:focus,.screen h2:focus{outline:none}.screen.photo{background-image:linear-gradient(180deg,#0b1425d9 0%,#0b142594 36%,#0b1425 77%),url('assets/tower.jpg')}.complete-arch{width:290px;height:430px;margin:22px auto 18px}.complete-title{position:static;text-align:center;inset:auto;pointer-events:none}.complete-title h1{font-size:59px}.complete-title .sub{font-size:16px;margin-top:8px}
.result .intro{margin:22px 0 8px}.result h2{font-size:28px}.result .points{font-size:84px}.result .eyebrow{margin-bottom:8px}.result .result-metrics{margin:16px 0}.result-metrics>div{padding:12px 0}.result .result-pic{height:110px;margin-bottom:14px}.result .btn{min-height:58px;padding:12px 24px}.result .hint-text{font-size:11px}.tile .tile-image{background-size:450% 450%}.board .peek-image{background-size:150% 150%;background-position:25% 100%}
.timer-track{min-height:5px;flex-shrink:0}
/* Artlist generated product imagery, v1 — exact logos and copy remain live UI. */
.gift-scene:has(>.gift-art)::before,.gift-scene.artlist-hero::before{display:none}.gift-scene>.gift-art{width:100%;height:100%;object-fit:cover;border-radius:8px}.gift-scene.artlist-hero{width:calc(100% + 76px);margin:10px -38px 15px;overflow:hidden}.artlist-hero>img{display:block;width:100%;height:100%;object-fit:cover;object-position:center 52%}.box-option{overflow:hidden}.box-option>.gift-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.box-option .box-label{bottom:0;left:0;right:0;padding:30px 8px 12px;background:linear-gradient(transparent,#0b1425e8);z-index:1}.box-option.selected::after{z-index:2;background:var(--navy);width:27px;height:27px;border-radius:50%;text-align:center;line-height:27px;box-shadow:0 0 0 1px var(--gold)}.revealing>.gift-art{animation:gift-sheen .8s ease-in-out infinite alternate}@keyframes gift-sheen{to{transform:scale(1.025);filter:brightness(1.12)}}@media(prefers-reduced-motion:reduce){.revealing>.gift-art{animation:none}}
/* Keep the entire gift arrangement visible in the portrait screen. */
.screen.ivory .box-title{margin-top:20px}.screen.ivory .box-title h1{font-size:64px}.gift-scene.artlist-hero{height:265px;min-height:265px;flex-shrink:0}.artlist-hero>img{object-position:center 76%}.screen.ivory .reward-strip{margin-bottom:16px}
/* Generic gift icon for rewards added in the staff console */
.reward-icon.gift{background:url('assets/gift-ivory-artlist-v1.webp') center/cover;border:1px solid #c8ae8666;border-radius:6px;color:#14223f;font-weight:600;text-shadow:0 0 6px #fff}
/* Puzzle level picker */
.levels{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:0 0 14px}.levels .level{display:flex;flex-direction:column;align-items:center;gap:2px;padding:12px 4px;min-height:84px;border:1px solid var(--line);border-radius:7px;background:transparent;color:var(--cream)}.levels .level b{font:500 26px/1 'Cormorant Garamond',serif}.levels .level span{font-size:13px}.levels .level small{font-size:11px;color:var(--muted)}.levels .level.active{background:linear-gradient(110deg,#f7e8ce,#d7bb8d);color:var(--navy);border-color:#e3ca9f}.levels .level.active small{color:#4a5163}
.screen:has(.levels) .step-list{gap:8px;margin-top:4px}.screen:has(.levels) .step{padding:12px 0}.screen:has(.levels) .step .step-icon{width:56px;height:56px;font-size:27px}.screen:has(.levels) .intro{margin:22px 0 14px}.screen:has(.levels) .demo-info{margin-top:12px!important}
/* ---- Game feel (fx.js). Global prefers-reduced-motion rule above disables these animations. ---- */
.fx-confetti{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:40}
.fx-float{position:absolute;transform:translate(-50%,-50%);font:600 26px 'Cormorant Garamond',serif;color:#f7e8ce;text-shadow:0 2px 10px #000a;pointer-events:none;z-index:35;animation:fx-rise 1s ease-out forwards}
.fx-float.minus{color:#ffc69e;font-size:18px}
@keyframes fx-rise{0%{opacity:0;transform:translate(-50%,-30%) scale(.7)}15%{opacity:1;transform:translate(-50%,-60%) scale(1.15)}100%{opacity:0;transform:translate(-50%,-190%) scale(1)}}
.fx-countdown{position:absolute;inset:0;z-index:45;display:grid;place-items:center;background:#050b18b8;backdrop-filter:blur(3px)}
.fx-countdown span{font:500 170px/1 'Cormorant Garamond',serif;color:#f1dcb3;text-shadow:0 0 50px #e7c58a88;animation:fx-count .62s cubic-bezier(.2,1.6,.4,1) both}
@keyframes fx-count{0%{opacity:0;transform:scale(2.2)}40%{opacity:1;transform:scale(.92)}100%{opacity:.9;transform:scale(1)}}
.tile .tile-image{transition:transform .26s cubic-bezier(.34,1.56,.64,1)}
.tile:active{filter:brightness(1.25)}
.tile.pop{animation:fx-pop .45s ease-out}
.tile.pop::before{content:'';position:absolute;inset:0;z-index:2;box-shadow:inset 0 0 0 3px #f7e8ce,0 0 22px #e7c58a;animation:fx-glow .6s ease-out forwards;pointer-events:none}
@keyframes fx-pop{0%{transform:scale(1)}35%{transform:scale(1.08)}100%{transform:scale(1)}}
@keyframes fx-glow{from{opacity:1}to{opacity:0}}
.board.solved{animation:fx-solved .8s ease-out}
@keyframes fx-solved{0%{box-shadow:0 0 0 0 #e7c58a}50%{box-shadow:0 0 0 10px #e7c58a55,0 0 60px #e7c58a}100%{box-shadow:0 0 0 0 transparent}}
#time.urgent{animation:fx-pulse .5s ease-in-out infinite alternate}
@keyframes fx-pulse{to{transform:scale(1.12);color:#ff9b6a}}
.revealing .gift-art,.revealing>.gift-art{animation:fx-shake .5s ease-in-out infinite!important}
@keyframes fx-shake{0%,100%{transform:rotate(0) scale(1)}20%{transform:rotate(-3deg) scale(1.02)}40%{transform:rotate(3deg) scale(1.04)}60%{transform:rotate(-2deg) scale(1.05)}80%{transform:rotate(2deg) scale(1.06)}}
.box-result .reward-icon{animation:fx-reveal .9s cubic-bezier(.2,1.5,.4,1) both}
.box-result .display{animation:fx-up .7s .25s ease-out both}
@keyframes fx-reveal{0%{opacity:0;transform:scale(.2) rotate(-25deg)}100%{opacity:1;transform:scale(2.4) rotate(0)}}
@keyframes fx-up{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}
.reveal-glow{animation:fx-glow-spin 6s linear infinite}
@keyframes fx-glow-spin{from{transform:rotate(0) scale(1)}50%{transform:rotate(180deg) scale(1.15)}to{transform:rotate(360deg) scale(1)}}
.leader-table tbody tr{animation:fx-up .4s ease-out both}
.leader-table tbody tr:nth-child(2){animation-delay:.05s}.leader-table tbody tr:nth-child(3){animation-delay:.1s}.leader-table tbody tr:nth-child(4){animation-delay:.15s}.leader-table tbody tr:nth-child(5){animation-delay:.2s}.leader-table tbody tr:nth-child(n+6){animation-delay:.25s}
.leader-table .you td{animation:fx-you 1.6s ease-in-out 2}
@keyframes fx-you{50%{background:#e7c58a33}}
.btn{transition:transform .12s ease,filter .12s}.btn:active{transform:scale(.97);filter:brightness(1.08)}
.levels .level{transition:transform .15s}.levels .level.active{transform:translateY(-3px)}
.result .points{text-shadow:0 0 40px #e7c58a55}
/* Prize artwork (assets/rewards, Artlist) */
.reward-art{position:relative;margin:0 auto;border-radius:12px;overflow:hidden;box-shadow:0 18px 50px #0006;flex-shrink:0}
.reward-art img{display:block;width:100%;height:100%;object-fit:cover}
.reward-art.small{width:72px;height:72px;margin-bottom:8px;border-radius:8px;box-shadow:0 8px 20px #14223f33}
.reward-art.big{width:300px;height:190px;margin:14px auto 18px;border:1px solid #e7c58a66}
.reward-badge{position:absolute;left:50%;bottom:10px;transform:translateX(-50%);padding:3px 12px;border-radius:20px;background:#14223fd9;color:#f1dcb3;font:600 15px 'Cormorant Garamond',serif;letter-spacing:.04em;white-space:nowrap;border:1px solid #e7c58a88}
.reward-art.small .reward-badge{font-size:11px;padding:1px 7px;bottom:5px}
.box-result .reward-art.big{animation:fx-art 1s cubic-bezier(.2,1.4,.4,1) both}
@keyframes fx-art{0%{opacity:0;transform:scale(.3) rotate(-10deg)}100%{opacity:1;transform:none}}

/* ======================================================================
   Depth screens (registration → game → result, Mystery Box after verify)
   Parallax scene + liquid glass. Variables --px/--py/--lx/--ly come from
   fx.js startParallax(); defaults keep everything static.
   ====================================================================== */
#app{--px:0;--py:0;--lx:.5;--ly:.2}
.screen.depth{background:#0b1425;isolation:isolate}
.screen.depth>:not(.scene){position:relative;z-index:1}
.scene{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.scene .layer{position:absolute;inset:-48px;will-change:transform}
/* far layer: the photo, blurred and dimmed, moves least */
.scene .bg{background-size:cover;background-position:center;filter:blur(10px) saturate(1.35) brightness(.72);
  transform:translate3d(calc(var(--px)*-16px),calc(var(--py)*-16px),0) scale(1.12)}
/* mid layer: soft gold/ivory light orbs, move more */
.scene .orbs{transform:translate3d(calc(var(--px)*34px),calc(var(--py)*26px),0)}
.scene .orbs i{position:absolute;border-radius:50%;filter:blur(26px);mix-blend-mode:screen;animation:orb-float 14s ease-in-out infinite alternate}
.scene .orbs i:nth-child(1){width:320px;height:320px;left:-70px;top:80px;background:radial-gradient(circle,#e7c58acc,transparent 66%)}
.scene .orbs i:nth-child(2){width:240px;height:240px;right:-50px;top:340px;background:radial-gradient(circle,#f7e8ce99,transparent 68%);animation-duration:18s}
.scene .orbs i:nth-child(3){width:360px;height:360px;left:110px;bottom:-70px;background:radial-gradient(circle,#6f8fd699,transparent 68%);animation-duration:22s}
.scene .orbs i:nth-child(4){width:140px;height:140px;left:300px;top:180px;background:radial-gradient(circle,#ffffff40,transparent 70%);animation-duration:11s}
@keyframes orb-float{to{transform:translate3d(30px,-40px,0) scale(1.15)}}
/* near layer: vignette + fine grain, moves opposite for parallax contrast */
.scene .veil{transform:translate3d(calc(var(--px)*8px),calc(var(--py)*8px),0);
  background:radial-gradient(130% 85% at 50% 10%,transparent 0%,#0b142573 75%),linear-gradient(180deg,#0b142599 0%,#14223f14 36%,#0b1425c7 100%),
  url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .05 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>")}

/* ---- liquid glass: white-gold cards ------------------------------------
   Pearl-white frosted cards with a champagne-gold rim, navy text inside.
   The scene behind stays dark, so headings outside the cards keep cream text. */
.depth{--card-ink:#14223f;--card-sub:#454c5e;--card-gold:#7d5a24;
  /* translucent pearl: the blurred scene shows through, warmed toward champagne at the bottom edge */
  --glass:linear-gradient(155deg,rgba(255,255,255,.66) 0%,rgba(255,252,246,.5) 45%,rgba(244,226,190,.46) 100%);
  --sheen:radial-gradient(120% 85% at calc(var(--lx)*100%) calc(var(--ly)*100%),rgba(255,255,255,.75) 0%,rgba(255,255,255,0) 48%);
  /* bright specular top lip, gold refraction along the bottom, soft inner glow */
  --glass-edge:inset 0 1.5px 0 rgba(255,255,255,.95),inset 0 -2px 3px -1px rgba(214,170,92,.55),inset 0 0 18px rgba(255,255,255,.35),inset 1px 0 0 rgba(255,255,255,.5);
  --glass-drop:0 16px 36px -14px rgba(2,8,20,.7),0 0 22px -6px rgba(231,197,138,.35)}
.depth :is(input,select,.check,.step,.option,.demo-info,.game-tools button,.result-metrics,.leader-table,.board-tabs,.receipt,.levels .level,.numpad button,.box-option,.status-banner,.btn:not(.primary),.time-pill){
  background:var(--sheen),var(--glass);border:1px solid rgba(236,206,150,.85);color:var(--card-ink);
  -webkit-backdrop-filter:blur(22px) saturate(180%) brightness(1.15);backdrop-filter:blur(22px) saturate(180%) brightness(1.15);
  box-shadow:var(--glass-edge),var(--glass-drop);transition:transform .35s cubic-bezier(.34,1.56,.64,1),box-shadow .3s,border-color .3s}
.depth :is(input,select){border-radius:12px;border-color:#d9bb84;color:var(--card-ink);
  background:radial-gradient(120% 90% at calc(var(--lx)*100%) 0%,rgba(255,255,255,.8),transparent 55%),linear-gradient(160deg,rgba(255,255,255,.7),rgba(248,236,212,.55))}
.depth input::placeholder{color:#6f685b}
.depth :is(input,select):focus{border-color:#c9a25e;box-shadow:var(--glass-edge),0 0 0 4px #e7c58a59,var(--glass-drop)}
.depth select option{background:#fff;color:var(--card-ink)}
/* the shared card rule above is (0,3,0) via .btn:not(.primary); this selector must outrank it */
.depth :is(.option,.check) input:is([type=checkbox],[type=radio]){height:auto;accent-color:#b08742;box-shadow:none;background:none;border:0;border-radius:0;-webkit-backdrop-filter:none;backdrop-filter:none}
.depth :is(.sub,.hint-text){color:#d3d9e4}
.depth :is(.step p,.check .hint-text,.choice p,.choice.light p){color:var(--card-sub);opacity:1}
.depth .step h3{color:var(--card-ink)}
.depth .check{border-radius:14px;padding:10px 14px;margin:6px 0;color:#2e374d}
.depth .check a,.depth .check .text-button{color:var(--card-gold)}
.depth .step{border-radius:16px;padding:14px 16px;border-top:1px solid #d9bb84}
.depth .step-list{gap:12px}
.depth .step .step-icon{border-radius:14px;color:var(--card-gold);background:radial-gradient(circle at 30% 25%,#fff,transparent 60%),linear-gradient(140deg,#f7e8ce,#e6d0a6);border-color:#d9bb84}
.depth .option{border-radius:12px}
.depth .option:has(input:checked){background:var(--sheen),linear-gradient(140deg,#f7e8ce,#e3c995);border-color:#b08742}
.depth .demo-info{border-radius:12px;border-style:solid;color:#7e6444}
.depth .btn:not(.primary){border-radius:14px}
.depth .btn:active,.depth .levels .level:active,.depth .game-tools button:active,.depth .option:active,.depth .box-option:active{transform:scale(.97)}
/* primary buttons keep the champagne gradient, plus a moving liquid highlight */
.depth .btn.primary{border-radius:14px;position:relative;overflow:hidden;background:linear-gradient(110deg,#f5e3bf,#cfa962);border-color:#b08742;box-shadow:inset 0 1px 0 #fffbe9,0 16px 34px -12px #c8ae8699}
.depth .btn.primary::after{content:'';position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(90% 140% at calc(var(--lx)*100%) 0%,rgba(255,255,255,.55),transparent 55%);mix-blend-mode:soft-light}
.depth .choice{color:var(--card-ink)}
.depth .game-tools button span{color:var(--card-gold)}
.depth .levels .level{border-radius:14px}
.depth .levels .level small{color:var(--card-sub)}
.depth .levels .level.active{background:var(--sheen),linear-gradient(110deg,#f2dcae,#cfa962);color:var(--navy);border-color:#b08742}
.depth .levels .level.active small{color:#4a3d22}
.depth .result-metrics{border-radius:16px;overflow:hidden}
.depth .result-metrics>div{border-color:#e3cfa6}
.depth .result-metrics small{color:var(--card-sub)}
.depth .leader-table{border-collapse:separate;border-spacing:0;border-radius:16px;overflow:hidden}
.depth .leader-table th{color:var(--card-sub)}
.depth .leader-table td{border-top-color:#eadcc0}
.depth .leader-table .you td{background:#f2dcae;color:var(--card-ink);font-weight:500}
.depth .board-tabs{border-radius:30px}
.depth .board-tabs button{color:var(--card-sub)}
.depth .board-tabs button.active{background:linear-gradient(110deg,#f2dcae,#cfa962);color:var(--navy)}
.depth .receipt{border-radius:18px}
.depth .receipt .display{color:var(--card-gold)}
.depth .receipt p{color:var(--card-sub)}
.depth .status-banner{border-radius:10px;color:#7e6444}
.depth .numpad button{border-radius:10px;color:var(--card-ink)}
.depth .box-option{border-radius:16px}
.depth .box-option .box-label{color:#fff}
.depth .time-pill{border-radius:30px}
/* the puzzle board floats: glass frame + slight 3D tilt following the light */
.depth .board{border-radius:14px;background:var(--sheen),linear-gradient(140deg,#e7c58a55,#ffffff14);border:1px solid #f7e8ce66;
  box-shadow:var(--glass-edge),0 24px 50px -14px rgba(0,0,0,.7);
  transform:perspective(1100px) rotateX(calc(var(--py)*-2.2deg)) rotateY(calc(var(--px)*2.2deg));transition:transform .2s linear}
.depth .tile{border-radius:4px}
.depth .scorebar strong{text-shadow:0 2px 18px #0009}
.depth .timer-track{border-radius:4px;background:#ffffff1f;box-shadow:inset 0 1px 2px #0006}
.depth .timer-track i{background:linear-gradient(90deg,#d7bb8d,#f7e8ce);box-shadow:0 0 12px #e7c58a99}
/* floating hero pieces get a little depth too */
.depth :is(.reward-art.big,.result-pic,.complete-arch){transform:translate3d(calc(var(--px)*-6px),calc(var(--py)*-6px),0)}
.depth .result-pic{border-radius:16px;box-shadow:var(--glass-drop)}
.depth .points{transform:translate3d(calc(var(--px)*5px),calc(var(--py)*4px),0)}
/* modal on top of depth screens */
.modal{background:radial-gradient(130% 90% at calc(var(--lx,.5)*100%) 0%,rgba(255,255,255,.85),transparent 55%),linear-gradient(155deg,rgba(255,255,255,.78),rgba(244,226,190,.66));color:#14223f;
  -webkit-backdrop-filter:blur(20px) saturate(160%);backdrop-filter:blur(20px) saturate(160%);border:1px solid #d9bb84;
  box-shadow:inset 0 1.5px 0 #fff,inset 0 -2px 3px -1px rgba(214,170,92,.55),inset 0 0 24px rgba(255,255,255,.4),0 30px 70px -20px #000c;border-radius:20px}
.modal p,.modal .body-copy p{color:#4a5163}.modal .hint-text{color:#7a7f8c}
.modal .btn:not(.primary){color:#14223f;border-color:#d9bb84;background:#ffffffa6}
.modal .btn.primary{border-color:#b08742}
@media(prefers-reduced-motion:reduce){.scene .orbs i{animation:none}.depth .board{transform:none}}
/* ---- Standby ambience (menu + attract screens). Global prefers-reduced-motion rule stops all of it. ---- */
.standby-fx{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.screen:has(>.standby-fx)>:not(.standby-fx){position:relative;z-index:1}
.standby-fx .kb{position:absolute;inset:-7%;background-size:cover;background-position:48% 46%;transform-origin:62% 38%;
  translate:calc(var(--px)*-14px) calc(var(--py)*-10px);animation:sb-kenburns 28s ease-in-out infinite alternate;will-change:transform}
@keyframes sb-kenburns{from{transform:scale(1.02)}to{transform:scale(1.16) translate(-2.5%,-1.5%)}}
.standby-fx .shade{position:absolute;inset:0;background:linear-gradient(180deg,#0b1425d9 0%,#0b142594 36%,#0b1425 77%)}
.standby-fx .sweep{position:absolute;top:-25%;bottom:-25%;left:0;width:38%;transform:translateX(-120%) skewX(-18deg);
  background:linear-gradient(100deg,transparent,rgba(255,236,200,.13) 45%,rgba(255,248,230,.2) 50%,rgba(255,236,200,.13) 55%,transparent);
  mix-blend-mode:screen;animation:sb-sweep 9s cubic-bezier(.45,0,.25,1) 1.5s infinite}
@keyframes sb-sweep{0%{transform:translateX(-120%) skewX(-18deg)}42%,100%{transform:translateX(360%) skewX(-18deg)}}
.standby-fx .motes span{position:absolute;bottom:-14px;left:var(--x);width:var(--s);height:var(--s);border-radius:50%;opacity:0;
  background:radial-gradient(circle,#fff8e4 0%,#e7c58a 45%,transparent 72%);box-shadow:0 0 10px 1px #e7c58a99;
  animation:sb-mote var(--t) linear var(--d) infinite;will-change:transform,opacity}
@keyframes sb-mote{0%{transform:translate3d(0,0,0);opacity:0}12%{opacity:.85}50%{transform:translate3d(var(--w),-480px,0)}88%{opacity:.5}100%{transform:translate3d(calc(var(--w)*-1),-990px,0);opacity:0}}
.ivory .standby-fx .motes span{background:radial-gradient(circle,#fff 0%,#cfa55c 45%,transparent 72%);box-shadow:0 0 8px 1px #c8a25e88}
.ivory .standby-fx .sweep{background:linear-gradient(100deg,transparent,rgba(255,255,255,.45) 50%,transparent);mix-blend-mode:soft-light}
/* gold words shimmer */
.screen:has(>.standby-fx) h1 em{background:linear-gradient(100deg,#c8ae86 0%,#c8ae86 38%,#fff3d6 50%,#c8ae86 62%,#c8ae86 100%);background-size:260% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;animation:sb-shimmer 5.5s ease-in-out infinite}
.ivory:has(>.standby-fx) h1 em{background-image:linear-gradient(100deg,#907043 0%,#907043 38%,#e9cf98 50%,#907043 62%,#907043 100%)}
@keyframes sb-shimmer{0%,30%{background-position:100% 0}70%,100%{background-position:0 0}}
/* menu: rows ease in, the two game buttons breathe a gold ring in turn */
.screen:has(>.standby-fx) .experience{animation:fx-up .7s .2s ease-out both}
.screen:has(>.standby-fx) .experience+.experience{animation-delay:.35s}
.screen:has(>.standby-fx) .round{animation:sb-ring 2.8s ease-out infinite}
.screen:has(>.standby-fx) .experience+.experience .round{animation-delay:1.4s}
@keyframes sb-ring{0%{box-shadow:0 0 0 0 #e7c58ab3}70%,100%{box-shadow:0 0 0 18px #e7c58a00}}
.screen:has(>.standby-fx) .hint-text{animation:sb-breathe 3s ease-in-out infinite}
@keyframes sb-breathe{50%{opacity:.45}}
/* attract: the arch photo drifts and glows, the call to action pulses */
.screen:has(>.standby-fx) .arch{animation:sb-arch-glow 4s ease-in-out infinite}
.screen:has(>.standby-fx) .arch img{animation:sb-zoom 16s ease-in-out infinite alternate}
.screen:has(>.standby-fx) .artlist-hero>img{animation:sb-zoom 18s ease-in-out infinite alternate}
@keyframes sb-zoom{from{transform:scale(1)}to{transform:scale(1.1)}}
@keyframes sb-arch-glow{50%{box-shadow:0 0 90px #e7c58a40;border-color:#e7c58acc}}
.screen:has(>.standby-fx) .btn.primary{animation:sb-cta 2.4s ease-in-out infinite}
@keyframes sb-cta{50%{box-shadow:0 0 0 1px #f7e8ce,0 0 34px #e7c58a8c}}
.screen:has(>.standby-fx) .time-pill{animation:sb-breathe 3.4s ease-in-out infinite}
.pairing{margin:40px auto 14px;padding:18px 34px;border:1px solid #e7c58a99;border-radius:18px;font:600 64px/1 ui-monospace,Menlo,monospace;letter-spacing:.24em;color:#f1dcb3;background:linear-gradient(150deg,#ffffff14,#e7c58a14);box-shadow:0 0 40px #e7c58a26;text-align:center}

/* ======================================================================
   Bright theme: white / champagne-gold across every kiosk screen
   (standby, registration, game, results, Mystery Box). Overrides the
   original navy palette above; cards keep their white-gold liquid glass.
   ====================================================================== */
#app{--cream:#14223f;--muted:#5b6172;--gold:#a5824a;--line:rgba(176,135,66,.32);color:#14223f;
  background:radial-gradient(120% 70% at 85% 0%,#fff7e6 0%,transparent 60%),radial-gradient(90% 60% at 0% 100%,#f3e3c3 0%,transparent 65%),linear-gradient(180deg,#fffdf8,#f6ecda)}
#app::before{background:radial-gradient(ellipse at 80% 5%,#ffe9bf66,transparent 60%)}
.kiosk-mode #stage,#stage{background:radial-gradient(ellipse at 55% 40%,#fbf7f0,#e9e1d3)}
@media(max-width:800px),(orientation:portrait){#stage{background:#f6ecda}}
/* photo screens (menu, booting): bright veil over the tower */
.screen.photo{background-image:linear-gradient(180deg,#fffdf8f0 0%,#fffdf8a6 34%,#fbf3e4f2 74%,#f6ecda 100%),url('assets/tower.jpg')}
.standby-fx .shade{background:linear-gradient(180deg,#fffdf8eb 0%,#fffdf899 34%,#fbf3e4ee 72%,#f6ecda 100%)}
.standby-fx .kb{filter:saturate(1.05) brightness(1.06)}
.standby-fx .sweep{background:linear-gradient(100deg,transparent,rgba(255,255,255,.55) 50%,transparent);mix-blend-mode:soft-light}
.standby-fx .motes span{background:radial-gradient(circle,#fff 0%,#d4ad66 45%,transparent 72%);box-shadow:0 0 8px 1px #c8a25e99}
.screen:has(>.standby-fx) h1 em{background-image:linear-gradient(100deg,#9a7740 0%,#9a7740 38%,#e9cf98 50%,#9a7740 62%,#9a7740 100%)}
h1 em{color:#9a7740}
.arch img{filter:none}.arch{border-color:#c9a25e88;box-shadow:0 18px 50px -20px #8a6a3466}
/* text on the bright background */
.eyebrow,.edition{color:#9a7740}
.sub,.depth .sub,.depth .hint-text,.hint-text{color:#4f5668}
.field>span,.legend{color:#3a4257}
.foot{color:#8a7d68}.demo-tag{border-color:rgba(176,135,66,.4)}
.error{color:#a3402c}.urgent,#time.urgent{color:#c2410c}
.home{border-color:rgba(176,135,66,.45);color:#14223f;background:#ffffffa6}
.experience p,.step p{color:#5b6172}
.experience{border-color:rgba(176,135,66,.3)}
.round{background:linear-gradient(135deg,#f2dcae,#c9a25e);color:#14223f;box-shadow:0 8px 20px -8px #8a6a3499}
.time-pill{color:#3a4257}
/* buttons: champagne gold primary, white glass secondary */
.btn{color:#14223f}
.btn.primary,.depth .btn.primary{background:linear-gradient(110deg,#f3dfb4,#c9a25e);color:#14223f;border-color:#b08742;box-shadow:inset 0 1px 0 #fff8e6,0 14px 30px -12px #8a6a3488}
/* depth scene: bright blurred photo with gold light instead of the night veil */
.screen.depth{background:#fbf5ea}
.scene .bg{filter:blur(12px) saturate(1.1) brightness(1.18);opacity:.75}
.scene .orbs i{mix-blend-mode:normal;opacity:.55}
.scene .orbs i:nth-child(3){background:radial-gradient(circle,#f1d9a8aa,transparent 68%)}
.scene .veil{background:radial-gradient(130% 85% at 50% 10%,#fffdf833 0%,#f6ecda99 75%),linear-gradient(180deg,#fffdf8cc 0%,#fffdf855 36%,#f6ecdadd 100%)}
.depth{--glass-drop:0 16px 34px -16px rgba(120,90,40,.45),0 0 0 1px rgba(214,178,112,.18)}
/* game HUD */
.scorebar small,.stats-line,.game-note{color:#5b6172}
.depth .scorebar strong,.scorebar strong{text-shadow:none;color:#14223f}
.depth .timer-track,.timer-track{background:#14223f14;box-shadow:inset 0 1px 2px #8a6a3433}
.depth .timer-track i,.timer-track i{background:linear-gradient(90deg,#c9a25e,#e9cf98);box-shadow:0 0 10px #e7c58a99}
.depth .board{background:var(--sheen),linear-gradient(140deg,#e7c58a88,#ffffffb3);border-color:#c9a25e99;box-shadow:var(--glass-edge),0 24px 50px -18px rgba(120,90,40,.55)}
.tile.correct:after{background:#fff;box-shadow:0 0 0 2px #b08742}
.fx-float{color:#a5824a;text-shadow:0 1px 0 #fff,0 0 14px #fff}
.fx-countdown{background:#fffaf0c7}
.fx-countdown span{color:#b08742;text-shadow:0 0 40px #e7c58a,0 2px 0 #fff}
/* results */
.result .points{color:#9a7740;text-shadow:0 0 30px #f3dfb4}
.complete-title{text-shadow:0 2px 24px #fff,0 0 2px #fff}.complete-title h1{color:#14223f}
.box-result .display{color:#9a7740}
.depth .result-pic{opacity:1}
.pairing{color:#8a6a34;background:linear-gradient(150deg,#fff,#f6ecd8);border-color:#c9a25e;box-shadow:0 14px 34px -16px #8a6a3488}
/* overlays */
.modal-shade{background:#f6eedfb8}
.box-option .box-label{color:#fff}
input,select{color:#14223f}select option{background:#fff;color:#14223f}
.numpad button{color:#14223f}
.status-banner{color:#7e6444}
/* UAT fix: real prize names/details are longer than the prototype copy, keep the Mystery Box intro inside 960px */
.gift-scene.artlist-hero{height:222px;min-height:222px}
.screen.ivory .reward-strip{margin:4px 0 14px;padding:12px 0}
.reward-strip strong{font-size:13px;line-height:1.35}
.reward-strip>div{font-size:11px;line-height:1.45}
/* UAT fix: Cormorant's old-style figures made "1" look like "ɪ" in prize names and codes */
h1,h2,.display,.points,.receipt .display,.box-result .display{font-variant-numeric:lining-nums}
/* UAT fix: two-line prize names pushed the reward screen past 960px */
.box-result .display{font-size:42px}
.box-result .reward-art.big{width:280px;height:170px;margin:10px auto 14px}
/* Tile locks in place: faint zoom-out ghost over the board + a short shake (fx.js lockFx). Replaces the old .pop bounce. */
.tile.lock{animation:fx-lock-shake .42s cubic-bezier(.36,.07,.19,.97);z-index:3}
.tile.lock::before{content:'';position:absolute;inset:0;z-index:2;box-shadow:inset 0 0 0 3px #fff6dc,0 0 24px #e7c58a;animation:fx-glow .65s ease-out forwards;pointer-events:none}
@keyframes fx-lock-shake{
  0%{transform:scale(1)}
  15%{transform:scale(1.07) translate(-2px,0) rotate(-1.4deg)}
  30%{transform:scale(1.05) translate(2px,1px) rotate(1.2deg)}
  45%{transform:scale(1.03) translate(-1.5px,-1px) rotate(-.8deg)}
  60%{transform:scale(1.02) translate(1px,0) rotate(.5deg)}
  80%{transform:scale(1.01) translate(-.5px,0) rotate(-.2deg)}
  100%{transform:none}}
.lock-ghost{position:absolute;z-index:5;pointer-events:none;border-radius:4px;scale:1;opacity:.55;filter:brightness(1.15);
  box-shadow:0 0 0 2px #fff8e6,0 0 30px #e7c58aaa;animation:fx-lock-ghost .65s cubic-bezier(.2,.7,.3,1) forwards}
@keyframes fx-lock-ghost{0%{scale:1;opacity:.72;filter:brightness(1.2) blur(0)}100%{scale:1.55;opacity:0;filter:brightness(1.3) blur(2px)}}
/* Lock glow: a soft gold bloom spreading from the locked tile, plus a brighter rim on the tile itself */
.lock-glow{position:absolute;z-index:4;pointer-events:none;border-radius:50%;
  background:radial-gradient(circle,rgba(255,250,232,.95) 0%,rgba(255,226,160,.75) 22%,rgba(231,197,138,.35) 48%,rgba(231,197,138,0) 70%);
  mix-blend-mode:screen;opacity:0;scale:.35;animation:fx-lock-bloom .85s cubic-bezier(.2,.7,.3,1) forwards}
@keyframes fx-lock-bloom{0%{opacity:0;scale:.35}18%{opacity:1;scale:.8}100%{opacity:0;scale:1.25}}
.tile.lock::before{box-shadow:inset 0 0 0 3px #fff6dc,inset 0 0 22px #ffe3a3,0 0 34px 8px #f2cf86}
/* stronger bloom: on bright photos a screen blend disappears, so paint warm gold light directly */
.lock-glow{mix-blend-mode:normal;filter:blur(3px);
  background:radial-gradient(circle,rgba(255,252,240,.95) 0%,rgba(255,232,178,.85) 20%,rgba(240,200,120,.55) 42%,rgba(231,190,110,.18) 60%,rgba(231,197,138,0) 72%)}
@keyframes fx-lock-bloom{0%{opacity:0;scale:.3}16%{opacity:.95;scale:.75}45%{opacity:.6}100%{opacity:0;scale:1.3}}
/* ---- Standby menu v2: centred hero title, featured tower, 3D game icons ---- */
.screen.menu{text-align:center}
.screen.menu .menu-title{margin-top:18px}
.screen.menu .menu-title h1{font-size:58px;line-height:.98}
.screen.menu .menu-title .sub{max-width:none;margin:12px auto 0;font-size:16px}
.tower-hero{position:relative;width:244px;height:272px;margin:18px auto 0;flex-shrink:0}
.tower-hero .halo{position:absolute;inset:-40px -70px -30px;border-radius:50%;
  background:radial-gradient(closest-side,#f6dca4cc,#f3dfb455 55%,transparent 100%);filter:blur(6px);animation:sb-halo 6s ease-in-out infinite}
@keyframes sb-halo{50%{transform:scale(1.08);opacity:.75}}
.tower-frame{position:relative;height:100%;border-radius:125px 125px 18px 18px;padding:7px;overflow:hidden;
  background:linear-gradient(160deg,#fff7e4,#d9b878 45%,#f7e8c8 70%,#c9a25e);
  box-shadow:0 28px 50px -24px #6b4f2188,0 0 0 1px #fffaf0 inset;
  transform:translate3d(calc(var(--px)*-6px),calc(var(--py)*-5px),0)}
.tower-frame img{width:100%;height:100%;object-fit:cover;object-position:30% 58%;border-radius:119px 119px 13px 13px;display:block;
  animation:sb-zoom 16s ease-in-out infinite alternate;transform-origin:35% 40%}
.tower-frame::after{content:'';position:absolute;inset:7px;border-radius:119px 119px 13px 13px;pointer-events:none;
  background:linear-gradient(115deg,transparent 40%,#ffffff55 47%,transparent 54%);background-size:250% 100%;animation:sb-glint 7s ease-in-out infinite}
@keyframes sb-glint{0%,55%{background-position:120% 0}100%{background-position:-60% 0}}
.games-label{margin:20px 0 10px}
.games{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.game-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 12px 16px;border-radius:22px;cursor:pointer;color:#14223f;font:inherit;
  background:radial-gradient(120% 80% at 50% 0%,#fff,transparent 60%),linear-gradient(160deg,rgba(255,255,255,.92),rgba(246,232,204,.82));
  border:1px solid #e3c995;box-shadow:inset 0 1.5px 0 #fff,inset 0 -2px 3px -1px #d6aa5c66,0 18px 34px -18px #6b4f2188;
  transition:transform .25s cubic-bezier(.34,1.56,.64,1);animation:fx-up .7s .2s ease-out backwards}
.game-card+.game-card{animation-delay:.35s}
.game-card:active{transform:scale(.96)}
.game-icon{width:118px;height:118px;margin:-4px 0 0;filter:drop-shadow(0 12px 14px #6b4f2133);
  -webkit-mask-image:radial-gradient(circle,#000 58%,transparent 71%);mask-image:radial-gradient(circle,#000 58%,transparent 71%);
  animation:sb-bob 4.2s ease-in-out infinite}
.game-card+.game-card .game-icon{animation-delay:-2.1s}
@keyframes sb-bob{50%{transform:translateY(-6px) rotate(-2deg)}}
.game-card .num{font:20px 'Cormorant Garamond',serif;color:#a5824a;line-height:1}
.game-card b{font:500 23px/1.15 'Cormorant Garamond',serif}
.game-card small{font-size:12px;color:#5b6172;line-height:1.5;margin-top:4px}
.game-card .go{position:absolute;top:12px;right:12px;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:16px;
  background:linear-gradient(135deg,#f2dcae,#c9a25e);color:#14223f;animation:sb-ring 2.8s ease-out infinite}
.game-card+.game-card .go{animation-delay:1.4s}
.menu-hint{text-align:center;margin-top:14px}

/* ======================================================================
   Less gold (client feedback 28 Oct): mostly white/ivory surfaces, gold kept
   for accents (eyebrows, thin rims, icons, small highlights).
   ====================================================================== */
#app{background:radial-gradient(120% 70% at 85% 0%,#ffffff 0%,transparent 60%),radial-gradient(90% 60% at 0% 100%,#f4efe6 0%,transparent 65%),linear-gradient(180deg,#fdfcfa,#f5f2ec)}
#app::before{background:radial-gradient(ellipse at 80% 5%,#fff4dd55,transparent 60%)}
.screen.depth{background:#faf8f4}
.scene .bg{opacity:.6;filter:blur(12px) saturate(.9) brightness(1.2)}
.scene .orbs i{opacity:.28}
.scene .veil{background:radial-gradient(130% 85% at 50% 10%,#ffffff33 0%,#f5f2ecaa 75%),linear-gradient(180deg,#fdfcfadd 0%,#fdfcfa66 36%,#f5f2ecee 100%)}
.screen.photo{background-image:linear-gradient(180deg,#fdfcfaf2 0%,#fdfcfab0 34%,#f8f5eff5 74%,#f5f2ec 100%),url('assets/tower.jpg')}
/* glass cards: whiter body, thin soft rim */
.depth{--glass:linear-gradient(155deg,rgba(255,255,255,.78) 0%,rgba(255,255,255,.62) 50%,rgba(247,242,233,.58) 100%);
  --glass-edge:inset 0 1.5px 0 rgba(255,255,255,.95),inset 0 -2px 3px -1px rgba(200,170,120,.25),inset 0 0 18px rgba(255,255,255,.35);
  --glass-drop:0 16px 34px -18px rgba(40,40,60,.28),0 0 0 1px rgba(214,190,150,.12)}
.depth :is(input,select,.check,.step,.option,.demo-info,.game-tools button,.result-metrics,.leader-table,.board-tabs,.receipt,.levels .level,.numpad button,.box-option,.status-banner,.btn:not(.primary),.time-pill){border-color:rgba(214,190,150,.55)}
.depth :is(input,select){border-color:rgba(200,175,130,.6);background:linear-gradient(160deg,#fff,#faf8f4)}
.depth .step .step-icon{background:linear-gradient(140deg,#fff,#f4ede0);border-color:rgba(214,190,150,.6)}
/* primary buttons: pale champagne instead of saturated gold */
.btn.primary,.depth .btn.primary{background:linear-gradient(110deg,#fbf6ec,#ecdcbc);border-color:#d8c29a;box-shadow:inset 0 1px 0 #fff,0 12px 26px -14px #6b5a3a55}
.depth .levels .level.active,.levels .level.active,.depth .board-tabs button.active{background:linear-gradient(110deg,#fbf6ec,#ead8b5);border-color:#cdb488}
.depth .option:has(input:checked){background:linear-gradient(140deg,#fff,#f3e8d2);border-color:#c9ad7c}
.depth .leader-table .you td{background:#f5ecda}
.round,.game-card .go{background:linear-gradient(135deg,#faf3e4,#e3cfa6)}
/* standby */
.tower-hero .halo{background:radial-gradient(closest-side,#f3e7cf99,#f4ecdc44 55%,transparent 100%)}
.tower-frame{background:linear-gradient(160deg,#ffffff,#e6d5b4 45%,#fbf7ee 70%,#d9c49c)}
.game-card{background:radial-gradient(120% 80% at 50% 0%,#fff,transparent 60%),linear-gradient(160deg,rgba(255,255,255,.95),rgba(248,244,236,.9));border-color:#e6d6b8}
.standby-fx .motes span{opacity:.6}
.lock-glow{opacity:.85}
.pairing{background:linear-gradient(150deg,#fff,#f8f3ea)}
.depth .board{background:var(--sheen),linear-gradient(140deg,#efe2c855,#ffffffcc);border-color:#d8c29a88}
.depth .timer-track i,.timer-track i{background:linear-gradient(90deg,#cbb07c,#efe2c8)}
/* SVG line icons replacing text glyphs */
.arrow svg{width:30px;height:30px;display:block}
.home svg{width:21px;height:21px;display:block;margin:auto}
.success-icon svg{width:42px;height:42px}
.game-card .go svg{width:16px;height:16px}
/* steps and interest choices without glyph tiles: keep breathing room inside the cards */
.step{gap:16px}
.depth .step,.screen:has(.levels) .step{padding:14px 20px}
.depth .step .step-icon{margin-left:2px}
.depth .choice{padding:20px 22px}
.choice{min-height:88px}
/* SVG icon tiles (replace emoji-prone glyphs) */
.step .step-icon svg{width:30px;height:30px}
.screen:has(.levels) .step .step-icon svg{width:24px;height:24px}
.depth .step .step-icon{color:#a5824a}
.choice .choice-icon{display:grid;place-items:center;width:44px;height:44px;flex-shrink:0;border-radius:12px;color:#a5824a;
  background:linear-gradient(140deg,#fff,#f4ede0);border:1px solid rgba(214,190,150,.6)}
.choice .choice-icon svg{width:24px;height:24px}
.game-tools .tool-icon{display:inline-grid;vertical-align:middle;margin-right:8px;color:#a5824a}
.game-tools .tool-icon svg{width:22px;height:22px}
.time-pill{align-items:center}
.time-pill .pill-icon svg{width:16px;height:16px;display:block;color:#a5824a}
.numpad button svg{width:26px;height:26px;vertical-align:middle}
/* selected Mystery Box check: SVG mask instead of the ✓ glyph */
.box-option.selected::after{content:'';background:#14223f;
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M5 12.5 9.5 17 19 7.5' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/16px no-repeat;
  mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M5 12.5 9.5 17 19 7.5' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/16px no-repeat}
.box-option.selected::before{content:'';position:absolute;top:8px;right:8px;width:28px;height:28px;border-radius:50%;z-index:2;background:linear-gradient(135deg,#faf3e4,#e3cfa6);box-shadow:0 0 0 1px #c9ad7c}
.box-option.selected::after{top:8px;right:8px;width:28px;height:28px;z-index:3;box-shadow:none;border-radius:0;line-height:normal}
.tick svg{color:var(--ok);vertical-align:middle}

/* ======================================================================
   Frosted glass v2 (client reference 28 Oct): clear, airy panels — very
   transparent white fill, strong blur, crisp 1px white rim, soft cool shadow,
   a top-left light sheen. No gold inner glow.
   ====================================================================== */
#app{--frost-fill:linear-gradient(145deg,rgba(255,255,255,.62) 0%,rgba(255,255,255,.34) 55%,rgba(255,255,255,.22) 100%);
  --frost-sheen:linear-gradient(160deg,rgba(255,255,255,.75) 0%,rgba(255,255,255,0) 38%);
  --frost-rim:inset 0 0 0 1px rgba(255,255,255,.85),inset 0 1px 0 #fff,inset 0 -1px 0 rgba(255,255,255,.35);
  --frost-shadow:0 22px 44px -22px rgba(30,38,64,.28),0 2px 6px -2px rgba(30,38,64,.06),0 0 0 1px rgba(160,150,135,.14)}
/* soft colour behind the glass so the frost has something to blur */
#app::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:0;
  background:radial-gradient(38% 26% at 12% 30%,rgba(214,226,240,.55),transparent 70%),radial-gradient(34% 24% at 92% 62%,rgba(236,224,204,.55),transparent 70%),radial-gradient(40% 22% at 40% 96%,rgba(222,230,242,.5),transparent 70%)}
#app>.screen{z-index:1}
.depth :is(input,select,.check,.step,.option,.demo-info,.game-tools button,.result-metrics,.leader-table,.board-tabs,.receipt,.levels .level,.numpad button,.box-option,.status-banner,.btn:not(.primary),.time-pill),
.game-card,.modal{
  background:var(--frost-sheen),var(--frost-fill);border:0;
  -webkit-backdrop-filter:blur(26px) saturate(160%) brightness(1.06);backdrop-filter:blur(26px) saturate(160%) brightness(1.06);
  box-shadow:var(--frost-rim),var(--frost-shadow)}
.depth :is(.step,.check,.receipt,.result-metrics,.leader-table){border-radius:20px}
.depth :is(input,select){background:linear-gradient(160deg,rgba(255,255,255,.8),rgba(255,255,255,.55));box-shadow:var(--frost-rim),0 8px 20px -14px rgba(30,38,64,.25)}
.depth :is(input,select):focus{box-shadow:inset 0 0 0 1.5px rgba(176,140,80,.7),0 0 0 4px rgba(231,197,138,.22)}
.depth .step .step-icon,.choice .choice-icon{background:linear-gradient(150deg,rgba(255,255,255,.9),rgba(255,255,255,.5));border:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.9),0 6px 14px -8px rgba(30,38,64,.25)}
.game-card{border-radius:24px}
.modal{background:var(--frost-sheen),linear-gradient(145deg,rgba(255,255,255,.82),rgba(255,255,255,.6))}
/* primary button: glass with a faint champagne tint */
.btn.primary,.depth .btn.primary{background:linear-gradient(160deg,rgba(255,255,255,.7) 0%,rgba(255,255,255,0) 45%),linear-gradient(110deg,rgba(250,243,228,.95),rgba(232,214,178,.9));
  border:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.9),0 16px 30px -16px rgba(120,95,50,.45)}
.depth .option:has(input:checked),.depth .levels .level.active,.levels .level.active,.depth .board-tabs button.active{
  background:linear-gradient(160deg,rgba(255,255,255,.75),rgba(255,255,255,.2)),linear-gradient(110deg,#fbf3e2,#ecdbb9);box-shadow:inset 0 0 0 1px rgba(255,255,255,.9),0 10px 22px -14px rgba(120,95,50,.4)}
.tower-frame{box-shadow:inset 0 0 0 1px rgba(255,255,255,.9),0 28px 50px -26px rgba(30,38,64,.35)}
/* "แตะเพื่อเริ่มเล่น": blue glass call-to-action with depth (gloss, inner rim, layered shadow) */
.btn.primary.cta-blue{position:relative;overflow:hidden;color:#fff;border:0;border-radius:18px;min-height:70px;letter-spacing:.01em;
  background:linear-gradient(180deg,rgba(255,255,255,.38) 0%,rgba(255,255,255,.08) 48%,rgba(255,255,255,0) 52%),
    radial-gradient(120% 140% at 85% 120%,rgba(120,190,255,.55),transparent 60%),
    linear-gradient(135deg,#6f9bff 0%,#3d6fe6 45%,#1f45b8 100%);
  -webkit-backdrop-filter:blur(14px) saturate(160%);backdrop-filter:blur(14px) saturate(160%);
  box-shadow:inset 0 1.5px 0 rgba(255,255,255,.75),inset 0 0 0 1px rgba(255,255,255,.35),inset 0 -6px 14px -6px rgba(10,30,90,.55),
    0 18px 34px -14px rgba(31,69,184,.65),0 6px 12px -6px rgba(31,69,184,.4);
  text-shadow:0 1px 2px rgba(10,30,90,.35)}
.btn.primary.cta-blue .arrow{color:#fff;filter:drop-shadow(0 1px 1px rgba(10,30,90,.35))}
/* moving light across the glass */
.btn.primary.cta-blue::after{content:'';position:absolute;inset:0;pointer-events:none;mix-blend-mode:normal;
  background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.45) 45%,transparent 60%);background-size:250% 100%;
  animation:cta-shine 3.6s ease-in-out infinite}
@keyframes cta-shine{0%,40%{background-position:130% 0}100%{background-position:-60% 0}}
.screen:has(>.standby-fx) .btn.primary.cta-blue{animation:cta-glow 2.4s ease-in-out infinite}
@keyframes cta-glow{50%{box-shadow:inset 0 1.5px 0 rgba(255,255,255,.75),inset 0 0 0 1px rgba(255,255,255,.35),inset 0 -6px 14px -6px rgba(10,30,90,.55),0 22px 44px -12px rgba(61,111,230,.8),0 0 30px rgba(111,155,255,.45)}}
.btn.primary.cta-blue:active{transform:translateY(2px) scale(.985);box-shadow:inset 0 1px 0 rgba(255,255,255,.6),inset 0 0 0 1px rgba(255,255,255,.3),0 10px 20px -12px rgba(31,69,184,.7)}
/* brand navy (#14223f) version of the start button glass */
.btn.primary.cta-blue{
  background:linear-gradient(180deg,rgba(255,255,255,.30) 0%,rgba(255,255,255,.06) 48%,rgba(255,255,255,0) 52%),
    radial-gradient(120% 140% at 85% 120%,rgba(120,150,210,.35),transparent 60%),
    linear-gradient(135deg,#3b4f7d 0%,#1d2f55 45%,#0f1a33 100%);
  box-shadow:inset 0 1.5px 0 rgba(255,255,255,.6),inset 0 0 0 1px rgba(255,255,255,.22),inset 0 -6px 14px -6px rgba(5,10,25,.6),
    0 18px 34px -14px rgba(20,34,63,.7),0 6px 12px -6px rgba(20,34,63,.45)}
.btn.primary.cta-blue .arrow{color:#f1dcb3}
@keyframes cta-glow{50%{box-shadow:inset 0 1.5px 0 rgba(255,255,255,.6),inset 0 0 0 1px rgba(255,255,255,.22),inset 0 -6px 14px -6px rgba(5,10,25,.6),0 22px 44px -12px rgba(20,34,63,.75),0 0 28px rgba(59,79,125,.45)}}
/* Every call-to-action (.btn.primary) on the kiosk uses the brand-navy glass of the start button.
   #app raises specificity above the older .depth/.screen primary rules. */
#app .btn.primary{position:relative;overflow:hidden;color:#fff;border:0;border-radius:18px;
  background:linear-gradient(180deg,rgba(255,255,255,.30) 0%,rgba(255,255,255,.06) 48%,rgba(255,255,255,0) 52%),
    radial-gradient(120% 140% at 85% 120%,rgba(120,150,210,.35),transparent 60%),
    linear-gradient(135deg,#3b4f7d 0%,#1d2f55 45%,#0f1a33 100%);
  -webkit-backdrop-filter:blur(14px) saturate(160%);backdrop-filter:blur(14px) saturate(160%);
  box-shadow:inset 0 1.5px 0 rgba(255,255,255,.6),inset 0 0 0 1px rgba(255,255,255,.22),inset 0 -6px 14px -6px rgba(5,10,25,.6),
    0 18px 34px -14px rgba(20,34,63,.7),0 6px 12px -6px rgba(20,34,63,.45);
  text-shadow:0 1px 2px rgba(5,10,25,.35)}
#app .btn.primary small{color:#dfe5f2;opacity:1}
#app .btn.primary .arrow{color:#f1dcb3;filter:drop-shadow(0 1px 1px rgba(5,10,25,.35))}
#app .btn.primary::after{content:'';position:absolute;inset:0;pointer-events:none;mix-blend-mode:normal;
  background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.32) 45%,transparent 60%);background-size:250% 100%;
  animation:cta-shine 3.6s ease-in-out infinite}
#app .btn.primary:active{transform:translateY(2px) scale(.985)}
#app .btn.primary:disabled{opacity:.6}
#app .screen:has(>.standby-fx) .btn.primary{animation:cta-glow 2.4s ease-in-out infinite}
/* Public-mode QR on the standby screen */
.screen.menu .tower-hero{height:228px}
.menu-qr{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:14px;padding:10px 12px 10px 18px;border-radius:18px;text-align:left;
  background:linear-gradient(160deg,rgba(255,255,255,.75),rgba(255,255,255,0) 40%),linear-gradient(145deg,rgba(255,255,255,.6),rgba(255,255,255,.25));
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.85),0 16px 30px -20px rgba(30,38,64,.3);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}
.menu-qr-text{display:flex;flex-direction:column;gap:2px;flex:1}
.menu-qr-text b{font-size:15px;color:#14223f}.menu-qr-text span{font-size:12px;color:#5b6172;line-height:1.5}
.qr-box{width:84px;height:84px;padding:6px;background:#fff;border-radius:10px;box-shadow:0 0 0 1px #e6dccb;flex-shrink:0}
.qr-box svg{width:100%;height:100%;display:block}
.menu-hint.phone-only{display:none}
@media (max-width:700px){.menu-qr{display:none}.menu-hint.phone-only{display:block}}
/* QR row fit: keep the Public-mode standby inside 960px with a little headroom */
.screen.menu .tower-hero{height:196px;width:220px;margin-top:14px}
.screen.menu .games-label{margin:14px 0 8px}
.menu-qr{margin-top:10px;padding:8px 10px 8px 16px}
.qr-box{width:76px;height:76px;padding:5px}
