:root{color-scheme:dark;font-family:Inter,"Segoe UI",Arial,sans-serif;background:#0d1526;color:#f7f9ff}
*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{background:radial-gradient(circle at 50% 22%,#193054 0,#101d33 35%,#0d1526 75%);overflow-x:hidden}.shell{width:min(100%,520px);min-height:100dvh;margin:auto;padding:24px 24px 38px;display:flex;flex-direction:column}.masthead{display:flex;align-items:center;gap:12px;color:#e9efff;letter-spacing:.14em;font-size:12px}.masthead small{display:block;margin-top:3px;color:#9db0ce;font-size:9px;letter-spacing:.19em}.brand-mark{width:36px;height:36px;display:grid;place-items:center;border:1px solid #87bbef;border-radius:10px;background:#192f50;color:#b9e0ff;font-size:24px}.scan-screen,.result-screen,.error-screen{flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;justify-content:center}.eyebrow{color:#76d9e0;font-size:11px;font-weight:800;letter-spacing:.24em}.scan-screen h1,.result-screen h1,.error-screen h1{font-size:clamp(29px,7vw,38px);margin:16px 0 4px;letter-spacing:-.035em}.subtle,.footnote{color:#9baec9;font-size:14px}.scanner{position:relative;width:min(58vw,220px);aspect-ratio:1;margin:32px auto 18px;background:linear-gradient(135deg,#1a3656a0,#0d1c35b3);box-shadow:inset 0 0 42px #2b96b42a,0 0 65px #4bb9d922;border-radius:8px;overflow:hidden}.corner{position:absolute;width:24px;height:24px;border:3px solid #79e4eb;z-index:2}.tl{top:0;left:0;border-right:0;border-bottom:0}.tr{top:0;right:0;border-left:0;border-bottom:0}.bl{bottom:0;left:0;border-right:0;border-top:0}.br{bottom:0;right:0;border-left:0;border-top:0}.scan-glyph{position:absolute;inset:0;display:grid;place-items:center;color:#5dc5d966;font-size:78px;animation:pulse 1.25s ease-in-out infinite alternate}.scan-line{position:absolute;left:6px;right:6px;height:3px;background:#84eff3;box-shadow:0 0 16px #84eff3,0 0 36px #84eff3;animation:scan 1.3s ease-in-out infinite alternate;z-index:1}.scan-progress{width:min(220px,65vw);height:5px;margin-top:22px;border-radius:99px;background:#2a3a53;overflow:hidden}.scan-progress span{display:block;height:100%;width:0;background:linear-gradient(90deg,#69bdef,#8cf0d8);animation:progress 3s linear forwards}.result-screen{justify-content:flex-start;padding-top:36px}.result-screen h1{margin:9px 0 22px}.success-icon,.error-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:#1e5b64;color:#a3ffdf;font-size:30px;box-shadow:0 0 32px #4ae4d24a}.ticket{width:100%;text-align:left;padding:25px 24px 19px;background:#f6f0df;color:#1e2e43;border-radius:14px;box-shadow:0 12px 0 #c6b896,0 26px 55px #04091390;transform:translateY(34px) rotate(-2deg) scale(.94);opacity:0;animation:arrive .72s cubic-bezier(.18,.9,.28,1.1) forwards}.ticket-top,.ticket-bottom{display:flex;justify-content:space-between;align-items:center;color:#365572;font-weight:800;font-size:11px;letter-spacing:.14em}.ticket-top span:last-child{font-size:21px}.ticket-kicker{color:#597590;font-size:11px;font-weight:800;letter-spacing:.17em;margin:28px 0 7px}.ticket h2{font-size:clamp(23px,6vw,32px);letter-spacing:-.035em;margin:0 0 24px;line-height:1.12}.ticket-divider{height:1px;border-top:2px dashed #b7b19f;margin:0 -24px 17px}.ticket dl{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:15px 18px}.ticket dl div:last-child{grid-column:1/-1}.ticket dt{font-size:10px;text-transform:uppercase;letter-spacing:.13em;color:#6e7f8c;font-weight:800}.ticket dd{margin:4px 0 0;font-size:15px;font-weight:750;overflow-wrap:anywhere}.ticket-bottom{border-top:1px solid #d7cfbd;margin-top:25px;padding-top:14px;font-size:9px;color:#788995}.ticket-bottom span{font-size:16px}.footnote{margin-top:36px}.error-icon{background:#614141;color:#ffd3d3}.error-screen p{color:#aebbd0;max-width:290px;line-height:1.5}[hidden]{display:none!important}@keyframes scan{from{top:7%}to{top:92%}}@keyframes pulse{to{opacity:.45;transform:scale(.85)}}@keyframes progress{to{width:100%}}@keyframes arrive{to{opacity:1;transform:translateY(0) rotate(0) scale(1)}}@media(prefers-reduced-motion:reduce){.scan-glyph,.scan-line,.scan-progress span,.ticket{animation:none}.scan-line{top:48%}.scan-progress span{width:100%}.ticket{opacity:1;transform:none}}
