@font-face{font-family:"Funnel Sans";src:url('/funnel-sans.woff2') format('woff2');font-style:normal;font-weight:400 600;font-display:swap}
@font-face{font-family:"Source Serif 4";src:url('/source-serif.woff2') format('woff2');font-style:normal;font-weight:500;font-display:swap}
:root{color-scheme:light;--paper:#f8f4ee;--ink:#191919;--muted:#67635e;--line:#d9d4cc;--blue:#006d8a;--pale-blue:#e5f0f2;font:400 16px/1.5 "Funnel Sans",Arial,sans-serif;background:var(--paper);color:var(--ink)}
*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;min-width:320px}button,input{font:inherit}a{color:var(--blue);text-underline-offset:4px}button,a,input,summary{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled,button[aria-disabled=true]{opacity:.5;cursor:wait}:focus-visible{outline:3px solid #148fb4;outline-offset:4px}
.mast{max-width:1000px;margin:auto;padding:24px 24px 20px;display:flex;align-items:center;justify-content:space-between;gap:24px}.wordmark{display:block;width:139px;height:auto}.test-badge{font-size:10px;letter-spacing:.13em;font-weight:600;line-height:1;border:1px solid #b5cdd2;background:var(--pale-blue);color:#265564;padding:9px 11px;white-space:nowrap}
.shell{width:min(100% - 48px,560px);margin:0 auto;padding:12px 0 40px}.samples-shell{width:min(100% - 48px,952px)}h1,h2,p{margin:0}h1,h2{font-family:"Source Serif 4",Georgia,serif;font-weight:500}h1{font-size:clamp(36px,7vw,46px);line-height:1.1;letter-spacing:-.045em}h1 span{border-bottom:3px solid #148fb4}h2{font-size:26px;line-height:1.2;letter-spacing:-.025em}.intro{font-size:15px;color:var(--muted);margin-top:13px}.tabs{display:flex;gap:4px;padding:4px;margin:24px 0 20px;border:1px solid var(--line);border-radius:5px}.tabs a{flex:1;min-height:43px;display:flex;align-items:center;justify-content:center;text-decoration:none;color:var(--muted);font-size:14px;font-weight:600;border-radius:3px}.tabs a[aria-current=page]{background:var(--ink);color:var(--paper)}.tabs a:not([aria-current]):hover{background:#ebe5dc}
.test-note{font-size:13px;color:var(--muted);line-height:1.5;margin:0 0 18px}.test-note strong{color:var(--ink);font-weight:600}.steps{list-style:none;margin:0 0 17px;padding:0;display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;color:var(--muted)}.steps li{display:flex;align-items:center;gap:7px}.steps b{width:22px;height:22px;display:grid;place-items:center;border:1px solid #cfc9c0;border-radius:50%;font-size:10px}.steps li:first-child{color:var(--blue)}.steps li:first-child b{background:var(--blue);color:white;border-color:var(--blue)}
.scan-panel{background:var(--ink);color:var(--paper);padding:22px;border-radius:6px}.scan-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.scan-top h2{font:600 14px/1.4 "Funnel Sans",Arial,sans-serif;letter-spacing:0}.connection{font-size:11px;color:#c8c9c5;line-height:1.3}.connection::before{content:"";display:inline-block;width:6px;height:6px;background:#a6a49f;border-radius:50%;margin-right:6px}.connection[data-state=online]::before{background:#9fd9b4}.connection[data-state=offline]::before{background:#ffc18f}
.viewfinder{position:relative;aspect-ratio:1.7;background:#242728;border-radius:3px;overflow:hidden}.viewfinder::after{content:"";position:absolute;inset:20px;border:1px solid #727778;border-radius:16px;pointer-events:none}.viewfinder::before{content:"";position:absolute;z-index:1;inset:20px;background:linear-gradient(#9bc9d6,#9bc9d6) left top/28px 3px no-repeat,linear-gradient(#9bc9d6,#9bc9d6) left top/3px 28px no-repeat,linear-gradient(#9bc9d6,#9bc9d6) right top/28px 3px no-repeat,linear-gradient(#9bc9d6,#9bc9d6) right top/3px 28px no-repeat,linear-gradient(#9bc9d6,#9bc9d6) left bottom/28px 3px no-repeat,linear-gradient(#9bc9d6,#9bc9d6) left bottom/3px 28px no-repeat,linear-gradient(#9bc9d6,#9bc9d6) right bottom/28px 3px no-repeat,linear-gradient(#9bc9d6,#9bc9d6) right bottom/3px 28px no-repeat;pointer-events:none}.camera-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;color:#bfc9cb;font-size:12px}.camera-placeholder svg{width:38px;height:38px;opacity:.85}video{width:100%;height:100%;object-fit:cover;display:block}body[data-scanning=true] .camera-placeholder{display:none}
.button{min-height:50px;display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:12px 18px;border:1px solid transparent;border-radius:3px;background:var(--blue);color:white;font-weight:600;font-size:15px;text-decoration:none}.button svg{width:19px;height:19px}.button:hover:not(:disabled){background:#00566d}.button.secondary{background:transparent;border-color:var(--line);color:var(--ink)}.button.secondary:hover{background:#ece6dd}.camera-actions{display:grid;gap:10px;margin-top:18px}.camera-actions .button{width:100%}#stop{background:transparent;border-color:#777;color:var(--paper)}.camera-hint{text-align:center;font-size:11px;color:#b5b5b0;margin-top:12px}body[data-scanning=true] #start{display:none}
.result{border:1px solid #bccfd3;border-top:4px solid var(--blue);padding:25px 22px;background:#fffdf9;border-radius:5px}.result h2{font-size:31px;line-height:1.15;margin:14px 0}.result-symbol{width:42px;height:42px;border:1px solid currentColor;border-radius:50%;display:grid;place-items:center;font:500 25px/1 "Funnel Sans",sans-serif;color:var(--blue)}.result-symbol::before{content:"…"}.result[data-state=valid] .result-symbol::before{content:"✓"}.result[data-state=admitted]{border-color:#a9c9b6;border-top-color:#276548;background:#f0f6f0}.result[data-state=admitted] .result-symbol{background:#276548;border-color:#276548;color:white}.result[data-state=admitted] .result-symbol::before{content:"✓"}.result[data-state=already_used],.result[data-state=invalid],.result[data-state=error]{border-color:#d8bdb4;border-top-color:#963b29;background:#fcf1ec}.result[data-state=already_used] .result-symbol,.result[data-state=invalid] .result-symbol,.result[data-state=error] .result-symbol{color:#963b29}.result[data-state=already_used] .result-symbol::before,.result[data-state=invalid] .result-symbol::before,.result[data-state=error] .result-symbol::before{content:"!"}#details{font-size:15px;line-height:1.7;overflow-wrap:anywhere}#result-help{font-size:14px;color:var(--muted);margin-top:12px}.result-actions{display:grid;gap:9px;margin-top:22px}.text-button{padding:10px 0;border:0;background:none;color:var(--muted);font-size:13px;text-decoration:underline;text-underline-offset:4px;min-height:44px}.result-actions .text-button{color:var(--blue)}
body[data-ticket-state=checking] .scan-panel,body[data-ticket-state=valid] .scan-panel,body[data-ticket-state=admitted] .scan-panel,body[data-ticket-state=already_used] .scan-panel,body[data-ticket-state=invalid] .scan-panel{display:none}body[data-ticket-state=lookup] #result{display:none}body[data-ticket-state=valid] .steps li:first-child,body[data-ticket-state=admitted] .steps li:first-child{color:var(--muted)}body[data-ticket-state=valid] .steps li:first-child b,body[data-ticket-state=admitted] .steps li:first-child b{background:transparent;color:var(--muted);border-color:#cfc9c0}body[data-ticket-state=valid] .steps li:nth-child(2),body[data-ticket-state=admitted] .steps li:nth-child(3){color:var(--blue)}body[data-ticket-state=valid] .steps li:nth-child(2) b,body[data-ticket-state=admitted] .steps li:nth-child(3) b{background:var(--blue);color:white;border-color:var(--blue)}body:not([data-ticket-state=valid]) #scan-again{display:none}
.help-panel{border-bottom:1px solid var(--line);margin-top:8px}.help-panel summary{min-height:54px;display:flex;align-items:center;justify-content:space-between;gap:16px;cursor:pointer;font-size:14px;font-weight:600;list-style:none}.help-panel summary::-webkit-details-marker{display:none}.help-panel summary::after{content:"+";font-size:22px;font-weight:400;color:var(--muted)}.help-panel[open] summary::after{content:"−"}.help-content{padding:0 0 20px;color:var(--muted);font-size:14px}.help-content ol{padding-left:21px;margin:0}.help-content li+li{margin-top:9px}.help-content p{margin-top:12px}#lookup label{display:block;font-size:13px;margin:2px 0 8px;color:var(--ink)}.lookup-fields{display:flex;gap:8px}input{min-width:0;flex:1;min-height:48px;border:1px solid #aaa59d;border-radius:3px;background:#fffdf9;padding:10px 12px;color:var(--ink);font-size:16px}.lookup-fields .button{min-height:48px;padding:10px 15px}.match{border-top:1px solid var(--line);padding:15px 0 0;margin-top:16px}.match p{margin:0 0 8px;font-weight:600;color:var(--ink)}.match button{display:block;width:100%;text-align:left;min-height:48px;padding:10px 12px;border:1px solid var(--line);background:#fffdf9;border-radius:3px;color:var(--ink);margin-top:8px}.match button:hover{border-color:var(--blue)}
.test-footer{padding-top:20px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.test-footer p{font-size:11px;color:var(--muted)}#test-status,#sample-status{font-size:13px;color:var(--muted);margin:10px 0}#test-status:empty,#sample-status:empty{display:none}.sample-controls{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:24px 0 8px}.sample-controls p{font-size:14px;color:var(--muted)}.sample-controls .button{font-size:13px;white-space:nowrap;min-height:42px;padding:9px 15px}#sample-tickets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin-top:22px}.sample-ticket{min-width:0;border:1px solid var(--line);border-top:4px solid var(--blue);background:#fffdf9;border-radius:4px;break-inside:avoid}.sample-ticket-top{padding:20px 20px 0}.sample-ticket h2{font-size:24px}.sample-ticket .ordinal{font-size:13px;color:var(--muted);margin-top:6px}.sample-ticket img{display:block;width:calc(100% - 36px);height:auto;margin:14px 18px;background:white}.sample-ticket-foot{border-top:1px dashed var(--line);padding:13px 20px;display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:10px;letter-spacing:.07em;color:var(--muted)}.sample-ticket-foot strong{color:var(--blue);font-weight:600}.unlock-panel{margin-top:28px;border-top:3px solid var(--blue);background:#fffdf9;padding:26px;border-radius:3px}.unlock-panel p+p{margin-top:14px}.unlock-panel .muted{font-size:14px;color:var(--muted)}
@media(max-width:700px){.mast{padding:22px 24px 16px}.wordmark{width:124px}.shell{padding-top:10px}.scan-panel{padding:18px}.scan-top{gap:8px}.scan-top h2{font-size:13px}.connection{font-size:10px}.viewfinder{aspect-ratio:1.85}#sample-tickets{grid-template-columns:1fr}.sample-ticket{max-width:380px;width:100%;margin:auto}.samples-shell h1{max-width:330px}.sample-controls{align-items:flex-start}.sample-ticket img{max-width:270px;margin:14px auto}.sample-controls p{font-size:13px}.sample-controls .button{font-size:12px}.test-footer{gap:2px}.result{padding:22px}.intro{font-size:14px}}
@media(max-width:350px){.mast{padding-left:18px;padding-right:18px}.shell{width:calc(100% - 36px)}.scan-top{align-items:flex-start;flex-direction:column;gap:4px}.steps{font-size:11px}.viewfinder{aspect-ratio:1.6}.lookup-fields{flex-direction:column}}
@media print{.mast{padding:0 0 20px}.shell{width:100%;padding:0}.tabs,.sample-controls,.test-footer,.help-panel,#test-status{display:none}.test-badge{border-color:#aaa}#sample-tickets{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.sample-ticket{max-width:none}.sample-ticket-top{padding:12px 12px 0}.sample-ticket h2{font-size:20px}.sample-ticket-foot{padding:10px}.sample-ticket img{width:calc(100% - 20px);margin:10px}.intro{margin-bottom:20px}body{background:white}}

.guest-list-jump{display:block;width:fit-content;margin:-8px 0 18px auto;font-size:13px;min-height:30px;padding:5px 0}.guest-list{margin-top:30px;padding-top:25px;border-top:1px solid var(--line);scroll-margin-top:22px}.guest-list-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.guest-list-heading h2{font-size:30px}.guest-list-top{font-size:11px;white-space:nowrap;min-height:36px;display:inline-flex;align-items:center}.guest-list-note{font-size:12px;color:var(--muted);margin-top:8px}.attendance-totals{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin:18px 0 12px;font-size:12px;color:var(--muted)}.attendance-count{color:#276548;font-size:14px;font-weight:600}.attendance-list{list-style:none;padding:0;margin:0;display:grid;gap:9px}.guest-row{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:15px 14px;border:1px solid var(--line);border-left:3px solid #c7c1b8;border-radius:4px;background:#fffdf9}.guest-info{min-width:0}.guest-name{font-size:15px;font-weight:600;overflow-wrap:anywhere}.guest-ticket{font-size:11px;color:var(--muted);margin-top:5px;overflow-wrap:anywhere}.guest-progress{flex-shrink:0;text-align:right}.guest-status{display:block;font-size:11px;color:var(--muted);white-space:nowrap}.guest-progress time{display:block;font-size:10px;color:#466b53;margin-top:4px}.guest-row[data-checked-in=true]{background:#eaf4ed;border-color:#b8d1c0;border-left-color:#276548}.guest-row[data-checked-in=true] .guest-name,.guest-row[data-checked-in=true] .guest-status{color:#225c3e}.guest-row[data-checked-in=true] .guest-status{font-weight:600}.attendance-sync{margin:12px 0 20px;color:var(--muted);font-size:11px}.attendance-sync[data-state=stale]{color:#963b29;background:#fcf1ec;padding:10px;border-radius:3px}#scan-top{scroll-margin-top:20px}@media(max-width:350px){.guest-row{padding:12px 10px;gap:8px}.guest-name{font-size:14px}.guest-ticket{font-size:10px}.guest-list-heading h2{font-size:27px}.guest-status{font-size:10px}}

.login-error{color:#a12727;font-size:14px;line-height:1.5}.login-error:empty{display:none}
.guest-filter,.staff-form label{display:grid;gap:8px;font-size:13px;margin:18px 0}.guest-filter input,.staff-form input{width:100%}.staff-form{display:grid;gap:8px}.staff-list{list-style:none;padding:0;display:grid;gap:18px;margin-top:24px}.staff-card{padding:20px;border:1px solid var(--line);border-radius:5px;background:#fffdf9}.staff-card h2{font-size:25px}.staff-card input{width:100%;margin-top:15px;font-size:12px}.staff-status{font-size:12px;color:var(--muted);margin-top:8px}.staff-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}.staff-actions .button{font-size:13px}.welcome-note{border-top:3px solid var(--blue);padding:24px;margin-top:28px;background:#fffdf9}.welcome-note p+p{margin-top:18px}.test-badge{color:#225c3e;background:#eaf4ed;border-color:#b8d1c0}
.manual-search-jump{display:flex;width:100%;margin:0 0 8px}.manual-search-hint{font-size:12px;color:var(--muted);margin:0 0 20px}.manual-checkin{display:block;margin:9px 0 0 auto;min-height:44px;padding:9px 13px;background:var(--blue);color:white;border:0;border-radius:3px;font-size:12px;font-weight:600}.manual-checkin:hover:not(:disabled){background:#00566d}.guest-search-status{font-size:12px;color:var(--muted);margin:0 0 12px}.guest-search-status:empty{display:none}
.team-card{border-top:3px solid var(--blue);margin-top:24px}.team-help,.team-footnote{font-size:14px;line-height:1.6;margin:14px 0}.team-label{display:block;font-size:12px;margin-top:20px}.team-card input{margin-top:8px}.team-card .button{width:100%;margin-top:12px}.team-footnote{font-size:12px;color:var(--muted);margin-bottom:0}.individual-access{margin-top:24px}.individual-access summary{font-size:13px;cursor:pointer}