:root{color-scheme:light;--bg:#f4f3ee;--paper:#fffefa;--ink:#192c30;--muted:#617073;--line:#d8dcd6;--accent:#cb4b24;--accent-hover:#ae3817;--green:#246549;--green-bg:#e9f3eb;--amber:#80541b;--amber-bg:#fff2d8;--red:#a53030;--red-bg:#fcecea;--radius:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:16px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}button,input,textarea,select{font:inherit}button,a,input,textarea,select,label.upload-button{-webkit-tap-highlight-color:transparent}button,a,label.upload-button{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,.upload-button:focus-within{outline:3px solid var(--accent);outline-offset:4px}svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.svg-defs{position:absolute;width:0;height:0;overflow:hidden}[hidden]{display:none!important}.app-shell{max-width:1080px;margin:0 auto;padding:0 40px}.topbar{height:112px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);gap:16px}.brand{display:flex;align-items:center;gap:12px;color:var(--ink);text-decoration:none;font-size:17px;font-weight:800;letter-spacing:1.5px}.brand small{display:block;font-size:9px;letter-spacing:2.8px;font-weight:600;margin-top:4px}.brand-mark{width:42px;height:42px;border:1.5px solid var(--ink);border-radius:50%;font-size:27px;display:flex;align-items:center;justify-content:center;position:relative;font-weight:500;letter-spacing:0}.brand-mark span{position:absolute;right:-3px;top:-8px;background:var(--bg);font-size:24px;line-height:24px}.text-button{background:transparent;border:0;color:var(--muted);min-height:44px;display:flex;align-items:center;gap:8px;font-size:14px;padding:8px 0}.text-button:hover{color:var(--ink)}main{min-height:calc(100dvh - 185px)}.login-view{max-width:420px;margin:0 auto;padding:50px 0 62px;text-align:center}.date-label{display:flex;justify-content:center;align-items:center;gap:10px;font-size:10px;font-weight:700;letter-spacing:1.4px}.live-dot{width:7px;height:7px;background:var(--accent);border-radius:50%}.divider{color:#85918d}.login-emblem{width:80px;height:80px;margin:34px auto 28px;background:#e7e9df;border-radius:24px;display:grid;place-items:center;transform:rotate(-5deg)}.login-emblem svg{width:38px;height:38px;transform:rotate(5deg);stroke-width:1.3}.eyebrow{font-size:10px;font-weight:700;letter-spacing:1.8px;color:var(--muted);margin:0 0 13px}.login-view h1{font-size:34px;letter-spacing:-1px;line-height:1.35;margin:0;font-weight:700}.login-view h1 span{display:block;font-size:20px;letter-spacing:.5px;font-weight:400;margin-top:8px}.intro{font-size:14px;line-height:1.8;color:var(--muted);margin:22px 0 30px}.login-form{text-align:left}label{display:block;font-size:13px;font-weight:650;margin-bottom:9px}.password-field{position:relative}.password-field input{padding-right:72px}.password-field button{position:absolute;right:6px;top:5px;height:44px;padding:0 14px;background:transparent;border:0;font-size:13px;color:var(--muted)}input,select,textarea{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:15px;color:var(--ink);width:100%;min-height:56px;line-height:1.5;font-size:16px}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#82908d}select{padding-right:24px}.primary-button,.secondary-button{min-height:56px;border-radius:12px;display:flex;align-items:center;justify-content:center;gap:12px;width:100%;font-weight:600;padding:14px 18px;line-height:1.4;transition:background .16s,border-color .16s}.primary-button{color:white;background:var(--accent);border:1px solid var(--accent)}.primary-button:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.login-form .primary-button{margin-top:18px;justify-content:space-between}.secondary-button{color:var(--ink);background:transparent;border:1px solid var(--line)}.secondary-button:hover:not(:disabled){background:#e9ebe3}.login-foot{display:flex;align-items:center;justify-content:center;gap:7px;font-size:11px;color:var(--muted);margin-top:22px}.login-foot svg{width:14px;height:14px}.error-text{font-size:14px;color:var(--red);line-height:1.6;margin:10px 0}.page-footer{min-height:73px;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:12px;color:var(--muted);font-size:9px;letter-spacing:1.5px;padding:20px 0 calc(20px + env(safe-area-inset-bottom))}.event-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.event-heading h1{font-size:38px;line-height:1.15;letter-spacing:-1px;margin:0}.heading-dot{color:var(--accent)}.event-date{font-size:35px;font-weight:300;letter-spacing:-2px}.event-date span{color:var(--accent);margin:0 3px}.event-subtitle{font-size:13px;color:var(--muted);margin:15px 0 28px;line-height:1.6}.event-subtitle span{padding:0 7px}#workspace{max-width:600px;margin:0 auto;padding:36px 0 44px}.tabs{display:flex;padding:5px;border-radius:13px;background:#e8eae3;margin-bottom:18px;gap:4px}.tabs button{flex:1;min-height:46px;font-size:14px;border:0;border-radius:9px;background:transparent;color:var(--muted);font-weight:600}.tabs button[aria-selected=true]{background:var(--paper);color:var(--ink);box-shadow:0 1px 4px #192c3010}.camera-box{position:relative;background:var(--ink);aspect-ratio:1.38;border-radius:var(--radius);overflow:hidden;color:#fff;isolation:isolate;margin-bottom:16px}.camera-box video{position:absolute;width:100%;height:100%;object-fit:cover}.camera-box:after{content:"";position:absolute;inset:auto 0 0;height:80px;background:linear-gradient(transparent,#102225ba);pointer-events:none;z-index:1}#camera-placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:13px;padding:35px 22px 55px}#camera-placeholder>svg{width:40px;height:40px;color:#b4c3b2;stroke-width:1.2;margin-bottom:5px}#camera-placeholder strong{font-size:15px;font-weight:500}#camera-placeholder>span{font-size:11px;color:#b9c6bf}.camera-frame{position:absolute;inset:18% 16% 22%;pointer-events:none}.camera-frame i{position:absolute;width:28px;height:28px;border:2px solid #cedcbd}.camera-frame i:nth-child(1){left:0;top:0;border-right:0;border-bottom:0;border-radius:10px 0 0}.camera-frame i:nth-child(2){right:0;top:0;border-left:0;border-bottom:0;border-radius:0 10px 0 0}.camera-frame i:nth-child(3){left:0;bottom:0;border-right:0;border-top:0;border-radius:0 0 0 10px}.camera-frame i:nth-child(4){right:0;bottom:0;border-left:0;border-top:0;border-radius:0 0 10px}.camera-status{position:absolute;bottom:18px;left:16px;right:16px;display:flex;align-items:center;justify-content:center;gap:7px;font-size:11px;z-index:2}.camera-status>span:first-child{width:6px;height:6px;background:#b7c0b6;border-radius:50%}.camera-box.active .camera-status>span:first-child{background:#b3e687}.secondary-actions{display:flex;gap:10px;margin-top:10px}.secondary-actions>*{flex:1;font-size:13px}.upload-button{position:relative;margin:0;overflow:hidden;cursor:pointer}.file-input{position:absolute;inset:0;opacity:0;cursor:pointer;padding:0;min-height:0}.helper{color:var(--muted);font-size:12px;line-height:1.75;margin:15px 0}.supported{border-top:1px solid var(--line);margin-top:28px;padding-top:20px;display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:10px;color:var(--muted)}.supported strong{font-size:13px;color:var(--ink);font-weight:650}.supported i{display:block;font-style:normal;font-size:9px;color:var(--muted);font-weight:400;margin-top:4px}.manual-card{background:var(--paper);padding:24px;border:1px solid var(--line);border-radius:var(--radius)}.manual-card select{margin-bottom:24px}.manual-card textarea{min-height:110px}.manual-card .helper{margin:10px 0 24px}.result-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:24px 0 16px}.result-heading h2{font-size:19px;margin:0}.result-heading>span{color:var(--muted);font-size:12px}.ticket-list{display:grid;gap:14px}.ticket-card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:22px;text-align:left;overflow-wrap:anywhere}.ticket-card.selected{border:2px solid var(--ink);padding:21px}.ticket-select{display:flex;align-items:center;gap:10px;margin:0 0 16px;min-height:44px;cursor:pointer}.ticket-select input{width:21px;height:21px;min-height:21px;accent-color:var(--ink);margin:0}.source-label{font-size:10px;letter-spacing:1.2px;text-transform:uppercase;color:var(--muted);font-weight:700}.ticket-name{font-size:24px;line-height:1.35;font-weight:650;margin:10px 0 6px}.ticket-email{color:var(--muted);font-size:13px;margin:0 0 20px;line-height:1.6}.ticket-details{display:grid;grid-template-columns:72px minmax(0,1fr);gap:13px 12px;border-top:1px dashed var(--line);padding-top:20px;font-size:13px;line-height:1.6;margin:0}.ticket-details dt{color:var(--muted)}.ticket-details dd{margin:0}.ticket-state{display:flex;align-items:center;gap:8px;font-size:13px;line-height:1.6;padding:11px 13px;border-radius:10px;margin:20px 0 0;background:var(--green-bg);color:var(--green);font-weight:600}.ticket-state.invalid{background:var(--red-bg);color:var(--red)}.ticket-state.used{background:var(--amber-bg);color:var(--amber)}.ticket-state svg{width:18px;height:18px}.notice{padding:15px 17px;border-radius:12px;background:var(--green-bg);color:var(--green);font-size:14px;line-height:1.65;margin:16px 0}.error-notice{background:var(--red-bg);color:var(--red)}.notice.duplicate{background:var(--amber-bg);color:var(--amber)}.result-actions{display:grid;gap:10px;padding:8px 0 0}.result-notice{font-size:11px}.busy-status{position:fixed;bottom:calc(24px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);z-index:5;background:var(--ink);color:white;box-shadow:0 6px 24px #192c3020;border-radius:14px;padding:16px 22px;display:flex;align-items:center;gap:10px;white-space:nowrap;font-size:14px;max-width:calc(100% - 32px)}.spinner{width:16px;height:16px;border:2px solid #ffffff60;border-top-color:white;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
@media(min-width:850px){#workspace{max-width:590px}.camera-box{aspect-ratio:1.7}.login-view{padding-top:52px}.login-emblem{margin-top:36px}.event-heading h1{font-size:42px}}
@media(max-width:600px){.app-shell{padding:0 22px}.topbar{height:85px}.brand{font-size:14px;gap:10px}.brand small{font-size:8px;letter-spacing:2.2px}.brand-mark{width:35px;height:35px;font-size:23px}.brand-mark span{font-size:20px}.text-button{font-size:12px;gap:6px}.text-button svg{width:17px;height:17px}main{min-height:calc(100dvh - 151px)}.login-view{padding:33px 0 40px;max-width:390px}.login-emblem{margin:31px auto 24px;width:72px;height:72px;border-radius:22px}.login-view h1{font-size:30px}.login-view h1 span{font-size:18px}.intro{margin:18px 0 28px}.date-label{font-size:9px;letter-spacing:1px}.page-footer{min-height:66px;font-size:8px;letter-spacing:1px}#workspace{padding:27px 0 30px}.event-heading h1{font-size:33px}.event-date{font-size:31px}.eyebrow{font-size:9px;letter-spacing:1.4px}.event-subtitle{font-size:12px;margin:12px 0 23px}.camera-box{aspect-ratio:1.2}.camera-frame{inset:15% 13% 22%}.tabs{margin-bottom:14px}.supported{margin-top:21px}.manual-card{padding:20px}.ticket-card{padding:19px}.ticket-card.selected{padding:18px}.result-actions{position:sticky;bottom:0;background:var(--bg);padding:14px 0 calc(12px + env(safe-area-inset-bottom));z-index:2}.result-actions .primary-button{min-height:58px}}
@media(max-width:360px){.app-shell{padding:0 16px}.login-view h1{font-size:27px}.date-label{font-size:8px}.event-subtitle{font-size:11px}.supported{gap:8px}.secondary-actions .secondary-button{font-size:12px;padding:12px 8px}}
@media(max-width:600px) and (max-height:700px){.topbar{height:70px}#workspace{padding-top:20px}.event-subtitle{margin:8px 0 15px}.event-heading .eyebrow{margin-bottom:7px}.camera-box{aspect-ratio:1.5}.camera-frame{inset:12% 14% 22%}#camera-placeholder{gap:8px;padding:22px 16px 44px}#camera-placeholder>svg{width:28px;height:28px;margin:0}#camera-placeholder strong{font-size:13px}.login-view{padding-top:26px}.login-emblem{margin:22px auto 20px}.intro{margin:16px 0 20px}.login-foot{margin-top:17px}}
@media(orientation:landscape) and (max-height:550px){.app-shell{padding-left:max(24px,env(safe-area-inset-left));padding-right:max(24px,env(safe-area-inset-right))}.result-actions{position:static}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
/* Reflow gracefully for browser zoom and safe areas instead of clipping the masthead. */
body{padding-top:env(safe-area-inset-top)}
.topbar{height:auto;min-height:112px;flex-wrap:wrap;padding-top:22px;padding-bottom:22px}
.brand{flex-shrink:0}.text-button{white-space:nowrap}
.event-heading{flex-wrap:wrap}.event-heading>div{min-width:min(100%,230px)}.event-heading h1{white-space:nowrap}
@media(max-width:600px){.topbar{min-height:85px;padding-top:18px;padding-bottom:18px}.event-heading>div{min-width:min(100%,190px)}}
@media(max-width:600px) and (max-height:700px){.topbar{min-height:70px;padding-top:14px;padding-bottom:14px}}

.staff-export { margin-top: 28px; padding-top: 20px; border-top: 1px solid #deded5; }
.staff-export .secondary-button { width: 100%; }
