:root{--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:24px;--s-6:32px;--s-7:48px;--r-sm:8px;--r:12px;--r-lg:16px;--r-pill:24px;--fs-xs:12px;--fs-sm:14px;--fs-base:16px;--fs-md:18px;--fs-lg:22px;--fs-xl:28px;--fs-2xl:36px;--tap-min:44px;--tap-md:48px;--tap-lg:56px;--dur-fast:.12s;--dur:.18s;--dur-slow:.28s;--ease-out:cubic-bezier(.2,0,0,1);--ease-spring:cubic-bezier(.34,1.56,.64,1);--page-pad:var(--s-4);--bg:#0a0b0e;--surface:#13151a;--surface-2:#1b1e25;--surface-3:#252932;--border:#2a2e37;--border-strong:#3c4250;--text:#ededf2;--text-muted:#a8acb5;--text-dim:#72767f;--brand:#60a5fa;--brand-tint:#60a5fa24;--danger:#f87171;--info:color-mix(in srgb,var(--brand)90%,black);--pass:#fbbf24;--shadow:0 4px 12px #0006;--shadow-lg:0 12px 36px #0000008c;--shadow-sm:0 1px 2px #00000059;--ring:0 0 0 3px var(--brand-tint);--primary:var(--brand);--primary-hover:color-mix(in srgb,var(--brand)85%,black);--primary-fg:#fff;--danger-hover:color-mix(in srgb,var(--danger)85%,black);--danger-soft:color-mix(in srgb,var(--danger)20%,var(--surface));--danger-fg:var(--danger);--warn-soft:color-mix(in srgb,var(--danger)18%,var(--surface));--warn-border:color-mix(in srgb,var(--danger)45%,var(--surface));--warn-fg:var(--danger);--success-soft:color-mix(in srgb,var(--brand)18%,var(--surface));--success-border:color-mix(in srgb,var(--brand)40%,var(--surface));--success-fg:var(--brand);--info-soft:color-mix(in srgb,var(--info)22%,var(--surface));--info-border:color-mix(in srgb,var(--info)50%,var(--surface));--info-soft-fg:var(--info);--info-hover:color-mix(in srgb,var(--info)85%,black);--info-fg:#fff;--pass-hover:color-mix(in srgb,var(--pass)85%,black);--pass-fg:#1a1306;--radius-sm:var(--r-sm);--radius:var(--r);--radius-lg:var(--r-lg);--surface-alt:var(--surface-2);--surface-inset:var(--surface-2);--ease:var(--ease-out)}@media (prefers-color-scheme:light){:root{--bg:#f6f7f9;--surface:#fff;--surface-2:#f1f3f7;--surface-3:#e5e8ef;--border:#dfe2ea;--border-strong:#c1c6d2;--text:#14161b;--text-muted:#545a67;--text-dim:#8a8f9b;--brand:#2563eb;--brand-tint:#2563eb1a;--danger:#dc2626;--info:color-mix(in srgb,var(--brand)90%,black);--pass:#d97706;--shadow:0 2px 8px #0d142d12;--shadow-lg:0 16px 48px #0d142d1f;--shadow-sm:0 1px 2px #0d142d0d}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif;line-height:1.5;font-size:var(--fs-base);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;accent-color:var(--brand);height:100%}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}::selection{background:var(--brand-tint);color:var(--text)}:focus-visible{box-shadow:var(--ring);border-radius:var(--r-sm);outline:none}.app-shell{flex-direction:column;min-height:100vh;display:flex}.page{padding:var(--s-5)var(--page-pad);flex:1;width:100%;max-width:960px;margin:0 auto}.page-title{font-size:var(--fs-xl);margin-bottom:var(--s-5);letter-spacing:-.01em;font-weight:700}.navbar{background:var(--surface);border-bottom:1px solid var(--border);padding:var(--s-3)var(--s-4);justify-content:space-between;align-items:center;gap:var(--s-3);z-index:100;box-shadow:var(--shadow-sm);display:flex;position:sticky;top:0}.navbar-brand{font-size:var(--fs-lg);color:var(--brand);letter-spacing:-.01em;font-weight:700;text-decoration:none}.navbar-brand:hover{opacity:.9;text-decoration:none}.navbar-links{gap:var(--s-1);flex-wrap:wrap;align-items:center;display:flex}.navbar-links a,.navbar-links button{color:var(--text-muted);padding:var(--s-2)var(--s-3);border-radius:var(--r);font-size:var(--fs-sm);cursor:pointer;transition:background var(--dur-fast)var(--ease-out),color var(--dur-fast)var(--ease-out),border-color var(--dur-fast)var(--ease-out);background:0 0;border:1px solid #0000;font-family:inherit;font-weight:500;text-decoration:none}.navbar-links a:hover,.navbar-links button:hover{background:var(--surface-2);color:var(--text)}.navbar-links a.active{color:var(--brand);background:var(--brand-tint);border-color:color-mix(in srgb,var(--brand)25%,transparent)}.navbar-user{font-size:var(--fs-xs);color:var(--text-dim);margin-right:var(--s-2);font-weight:500}.lang-toggle{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text-muted);padding:var(--s-1)var(--s-2);border-radius:var(--r-sm);font-size:var(--fs-xs);letter-spacing:.05em;text-transform:uppercase;cursor:pointer;transition:color var(--dur-fast)var(--ease-out),border-color var(--dur-fast)var(--ease-out);font-family:inherit;font-weight:600}.lang-toggle:hover{color:var(--text);border-color:var(--brand)}.btn{justify-content:center;align-items:center;gap:var(--s-2);min-height:var(--tap-min);padding:0 var(--s-4);font-size:var(--fs-sm);border-radius:var(--r);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text);cursor:pointer;white-space:nowrap;transition:background var(--dur-fast)var(--ease-out),border-color var(--dur-fast)var(--ease-out),color var(--dur-fast)var(--ease-out),transform 50ms var(--ease-out);font-family:inherit;font-weight:500;line-height:1;text-decoration:none;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-3);border-color:var(--border-strong)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--hero{min-height:var(--tap-lg);padding:0 var(--s-5);font-size:var(--fs-md);border-radius:var(--r-lg)}.btn--compact{padding:0 var(--s-3);font-size:var(--fs-xs);border-radius:var(--r-sm);min-height:36px}.btn--block{width:100%}.btn--primary{background:var(--brand);border-color:var(--brand);color:#0a1f10;font-weight:600}.btn--primary:hover:not(:disabled){background:#1fb357;border-color:#1fb357}.btn--pass{background:var(--pass);border-color:var(--pass);color:#1a2906;font-weight:600}.btn--pass:hover:not(:disabled){color:#0e1804;background:#6aa414;border-color:#6aa414}.btn--danger{border-color:var(--danger);color:var(--danger);background:0 0}.btn--danger:hover:not(:disabled){background:var(--danger);color:#fff}.btn--ghost{border-color:var(--border);color:var(--text-muted);background:0 0}.btn--ghost:hover:not(:disabled){background:var(--surface-2);color:var(--text)}.btn--info{background:var(--info);border-color:var(--info);color:var(--info-fg);font-weight:600}.btn--info:hover:not(:disabled){background:var(--info-hover);border-color:var(--info-hover)}.btn--primary-soft{background:var(--success-soft);border-color:var(--success-border);color:var(--success-fg);font-weight:600}.btn--primary-soft:hover:not(:disabled){background:color-mix(in srgb,var(--brand)28%,var(--surface));border-color:color-mix(in srgb,var(--brand)55%,var(--surface))}.btn--info-soft{background:var(--info-soft);border-color:var(--info-border);color:var(--info-soft-fg);font-weight:600}.btn--info-soft:hover:not(:disabled){background:color-mix(in srgb,var(--info)26%,var(--surface));border-color:color-mix(in srgb,var(--info)60%,var(--surface))}.form-group{margin-bottom:var(--s-4)}.form-group label{margin-bottom:var(--s-1);font-size:var(--fs-xs);letter-spacing:.04em;text-transform:uppercase;color:var(--text-dim);font-weight:600;display:block}.form-control{min-height:var(--tap-min);padding:var(--s-3);background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--r);color:var(--text);font-size:var(--fs-base);transition:border-color var(--dur-fast)var(--ease-out),box-shadow var(--dur-fast)var(--ease-out);width:100%;font-family:inherit}.form-control::placeholder{color:var(--text-dim)}.form-control:focus{border-color:var(--brand);box-shadow:var(--ring);outline:none}.form-control:disabled{opacity:.55;cursor:not-allowed}select.form-control{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23a8acb5' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--s-3)center;padding-right:var(--s-6)}.inline-form{gap:var(--s-2);flex-wrap:wrap;align-items:flex-end;display:flex}.inline-form .form-group{flex:1;min-width:140px;margin-bottom:0}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--s-4);margin-bottom:var(--s-3);box-shadow:var(--shadow-sm)}.card-header{margin-bottom:var(--s-3);padding-bottom:var(--s-3);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;display:flex}.card-title{align-items:baseline;gap:var(--s-2);flex-wrap:wrap;display:flex}.card-title__name{font-size:var(--fs-xl);letter-spacing:-.01em;font-weight:700;line-height:1.15}.card-title__barcode{font-size:var(--fs-base);color:var(--text-muted);font-family:ui-monospace,monospace;font-weight:500}.card-title__last-visit{color:var(--text-muted);margin-top:.125rem;font-size:.875rem}.card-balance{margin:var(--s-2)0 var(--s-4);align-items:baseline;gap:4px;display:flex}.card-balance__num{font-size:var(--fs-2xl);letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-weight:700}.card-balance__unit{font-size:var(--fs-lg);color:var(--text-muted)}.card-balance--negative .card-balance__num{color:var(--danger)}.action-row{gap:var(--s-3);display:flex}.action-row>*{flex:1}.day-picker{gap:var(--s-1);margin-bottom:var(--s-4);padding-bottom:var(--s-1);scrollbar-width:thin;display:flex;overflow-x:auto}.day-btn{padding:var(--s-2);border-radius:var(--r);background:var(--surface);border:1px solid var(--border);color:var(--text-muted);text-align:center;cursor:pointer;transition:background var(--dur-fast)var(--ease-out),color var(--dur-fast)var(--ease-out),border-color var(--dur-fast)var(--ease-out);font-family:inherit;font-size:var(--fs-sm);flex:1;min-width:64px;min-height:72px}.day-btn:hover{background:var(--surface-2);color:var(--text)}.day-btn.active{background:var(--brand-tint);color:var(--brand);border-color:color-mix(in srgb,var(--brand)40%,transparent);font-weight:600}.day-btn .day-name{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.05em;opacity:.85;display:block}.day-btn .day-num{font-size:var(--fs-lg);margin-top:2px;font-weight:700;display:block}.seg{background:var(--surface-2);border-radius:var(--r);gap:2px;padding:4px;display:flex}.seg__item{color:var(--text-muted);border-radius:calc(var(--r) - 4px);font-family:inherit;font-size:var(--fs-sm);cursor:pointer;transition:background var(--dur-fast)var(--ease-out),color var(--dur-fast)var(--ease-out);background:0 0;border:0;flex:1;min-height:40px;font-weight:500}.seg__item:hover{color:var(--text)}.seg__item[aria-selected=true]{background:var(--surface);color:var(--text);box-shadow:var(--shadow)}.seg-body{padding-top:var(--s-3)}.badge{padding:2px var(--s-2);border-radius:var(--r-pill);font-size:var(--fs-xs);letter-spacing:.02em;background:var(--surface-3);color:var(--text-muted);white-space:nowrap;border:1px solid #0000;align-items:center;min-height:22px;font-weight:600;display:inline-flex}.badge--pass{background:color-mix(in srgb,var(--pass)16%,var(--surface));color:var(--pass)}.badge--booked{background:color-mix(in srgb,var(--info)14%,var(--surface));color:var(--info)}.badge--full{color:var(--danger);background:#f8717124}.badge--cancelled{background:var(--surface-3);color:var(--text-dim)}.badge--voided{color:var(--danger);background:#f8717124}.alert{padding:var(--s-3)var(--s-4);border-radius:var(--r);margin-bottom:var(--s-4);font-size:var(--fs-sm);align-items:center;gap:var(--s-2);border:1px solid #0000;display:flex}.alert-error{background:var(--danger-soft);border-color:var(--warn-border);color:var(--danger)}.alert-success{background:var(--success-soft);border-color:var(--success-border);color:var(--brand)}.alert-info{background:var(--info-soft);border-color:var(--info-border);color:var(--info)}.table-wrap{overflow-x:auto}table,.data-table{border-collapse:collapse;font-size:var(--fs-sm);width:100%}table th,.data-table th{text-align:left;padding:var(--s-2)var(--s-3);background:var(--surface-2);color:var(--text-dim);border-bottom:1px solid var(--border);font-weight:600;font-size:var(--fs-xs);letter-spacing:.05em;text-transform:uppercase}table td,.data-table td{padding:var(--s-2)var(--s-3);border-bottom:1px solid var(--border)}table tbody tr:hover,.data-table tr:hover{background:var(--surface-2)}table tbody tr:last-child td,.data-table tr:last-child td{border-bottom:none}.sheet-backdrop{backdrop-filter:blur(4px);z-index:200;animation:sheet-backdrop-in var(--dur)var(--ease-out);background:#00000073;position:fixed;inset:0}.sheet{background:var(--surface);border-top-left-radius:var(--r-lg);border-top-right-radius:var(--r-lg);padding:var(--s-3)var(--s-4)var(--s-5);z-index:210;box-shadow:var(--shadow-lg);animation:sheet-in var(--dur-slow)var(--ease-spring);max-height:90vh;position:fixed;bottom:0;left:0;right:0;overflow-y:auto}.sheet__grab{background:var(--border-strong);margin:0 auto var(--s-3);border-radius:2px;width:44px;height:4px}.sheet__title{font-size:var(--fs-md);margin-bottom:var(--s-4);letter-spacing:-.005em;font-weight:600}.sheet__body>*+*{margin-top:var(--s-3)}.sheet__actions{gap:var(--s-2);padding-top:var(--s-4);margin-top:var(--s-4);border-top:1px solid var(--border);display:flex}.sheet__actions .btn{flex:1}.more-sheet__user{font-size:var(--fs-md);color:var(--text);padding:var(--s-2)0;border-bottom:1px solid var(--border);margin-bottom:var(--s-3);font-weight:600}@keyframes sheet-in{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes modal-in{0%{opacity:0;transform:translate(-50%,-45%)}to{opacity:1;transform:translate(-50%,-50%)}}@keyframes sheet-backdrop-in{0%{opacity:0}to{opacity:1}}.group{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);margin-bottom:var(--s-4);overflow:hidden}.group__head{padding:var(--s-2)var(--s-4);font-size:var(--fs-xs);color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border);background:var(--surface-2);font-weight:600}.list-row{align-items:center;gap:var(--s-3);padding:var(--s-3)var(--s-4);border-top:1px solid var(--border);min-height:56px;display:flex}.list-row:first-child{border-top:none}.list-row--interactive{cursor:pointer;transition:background var(--dur-fast)var(--ease-out)}.list-row--interactive:hover{background:var(--surface-2)}.list-row__main{flex:1;min-width:0}.list-row__title{color:var(--text);font-weight:500}.list-row__sub{font-size:var(--fs-sm);color:var(--text-muted);margin-top:2px}.list-row__amount{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}.list-row__amount--pos{color:var(--brand)}.list-row__amount--neg{color:var(--danger)}.list-row__end{align-items:center;gap:var(--s-2);flex-shrink:0;display:flex}.list-row__accent{margin:-12px 0 -12px calc(-1*var(--s-4));background:var(--border-strong);align-self:stretch;width:3px}.list-row__accent--available{background:var(--brand)}.list-row__accent--booked{background:var(--info)}.list-row__accent--full{background:var(--danger)}.list-row__accent--cancelled{background:var(--border-strong);opacity:.5}.list-row--past{opacity:.5}.list-row--cancelled{opacity:.55}.pass-banner{padding:var(--s-4);border-radius:var(--r);margin-bottom:var(--s-4);border:1px solid #0000}.pass-banner-ok{background:var(--success-soft);color:var(--brand);border-color:var(--success-border)}.pass-banner-expired{background:var(--warn-soft);color:var(--danger);border-color:var(--warn-border)}.pass-banner__line{justify-content:space-between;align-items:center;gap:var(--s-2);font-size:var(--fs-md);letter-spacing:-.005em;font-weight:600;display:flex}.pass-banner__line-text{flex:1;min-width:0}.pass-banner__edit-btn{cursor:pointer;font-size:var(--fs-md);padding:var(--s-1);color:inherit;opacity:.7;background:0 0;border:0;line-height:1}.pass-banner__edit-btn:hover{opacity:1}.search-result{padding:var(--s-2)var(--s-3);border-bottom:1px solid var(--border);cursor:pointer;transition:background var(--dur-fast)var(--ease-out)}.search-result:hover{background:var(--surface-2)}.search-result-active{background:var(--surface-2);border-left:2px solid var(--brand);padding-left:calc(var(--s-3) - 2px)}.credit-negative{color:var(--danger);font-weight:700}.txn-row-visit{color:var(--info)}.txn-row-visit td{font-style:italic}.txn-row--voided{color:var(--text-dim);opacity:.75}.txn-row--voided .txn-amount,.txn-row--voided .amount{text-decoration:line-through}.txn-voided-tag{font-size:var(--fs-xs);color:var(--danger);text-transform:uppercase;letter-spacing:.04em;margin-left:6px}.participants-list{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);padding:var(--s-2)var(--s-3);font-size:var(--fs-sm);color:var(--text-muted)}.walkin-results{margin:var(--s-2)0 0 0;gap:var(--s-1);flex-direction:column;padding:0;list-style:none;display:flex}.walkin-row .btn{text-align:left;width:100%}.empty-state{text-align:center;padding:var(--s-6)var(--s-4);color:var(--text-dim);font-size:var(--fs-sm)}.spinner{border:2px solid var(--border);border-top-color:var(--brand);border-radius:50%;width:18px;height:18px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.text-center{text-align:center}.text-muted{color:var(--text-muted)}.mt-1{margin-top:var(--s-2)}.mt-2{margin-top:var(--s-4)}.mt-3{margin-top:var(--s-5)}.mb-1{margin-bottom:var(--s-2)}.mb-2{margin-bottom:var(--s-4)}.flex{display:flex}.gap-1{gap:var(--s-2)}.gap-2{gap:var(--s-4)}.items-center{align-items:center}.justify-between{justify-content:space-between}.flex-1{flex:1}.hidden{display:none}.text-success{color:var(--brand)}.text-danger{color:var(--danger)}@media (width<=540px){.page{padding:var(--s-4)var(--s-3)}.navbar{gap:var(--s-2);flex-wrap:wrap}.navbar-links{justify-content:center;width:100%}.inline-form{flex-direction:column;align-items:stretch}.inline-form .form-group{min-width:0}.page-title{font-size:var(--fs-lg)}}@media (width>=768px){:root{--page-pad:var(--s-5)}.sheet{border-radius:var(--r-lg);animation:modal-in var(--dur-slow)var(--ease-spring);width:min(480px,90vw);position:fixed;inset:50% auto auto 50%;transform:translate(-50%,-50%)}.sheet__grab{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.page-form{max-width:420px;margin:0 auto}.page-form .form-group{margin-bottom:var(--s-4)}.stack-12{margin-top:var(--s-3)}.stack-16{margin-top:var(--s-4)}.stack-24{margin-top:var(--s-5)}.chip-row{gap:var(--s-2);flex-wrap:wrap;display:flex}.chip-row--spaced{margin-bottom:var(--s-2)}.chip-row--readable .btn{font-size:var(--fs-md);padding:var(--s-2)var(--s-4);font-weight:700}.inline-row{gap:var(--s-2);display:inline-flex}.input--narrow{width:8em}.section-label{font-size:var(--fs-sm);color:var(--text-muted);margin-bottom:var(--s-2)}.card-header__main{flex:1;min-width:0}.pass-banner--in-group{border:none;border-radius:0;margin-bottom:0}.search-input--lg{font-size:var(--fs-md);padding:var(--s-3)}.search-results-list{margin-top:var(--s-2);border-top:1px solid var(--border)}.search-result-row{padding:var(--s-3);border-bottom:1px solid var(--border);cursor:pointer;justify-content:space-between;align-items:center;gap:var(--s-2);display:flex}.search-result--negative{border-left:3px solid var(--danger);background:var(--danger-soft)}.search-result-name{font-weight:600}.search-result-meta{font-size:var(--fs-sm);color:var(--text-muted)}.search-result-credit{white-space:nowrap;font-weight:600}.search-hint{font-size:var(--fs-sm);color:var(--text-muted)}.badge--inline{margin-left:var(--s-2)}.badge--lock{opacity:.85;margin-left:.35rem;font-size:.9rem}.negative-balance-list__heading{color:var(--text-muted);margin:0 0 .5rem;font-size:.95rem}.negative-balance-row{justify-content:space-between;align-items:center;gap:var(--s-3);padding:var(--s-2)var(--s-1);cursor:pointer;border-bottom:1px solid var(--border);display:flex}.negative-balance-row:last-child{border-bottom:none}.negative-balance-row:hover{background:var(--surface-2)}.negative-balance-row__label{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-weight:600;overflow:hidden}.negative-balance-row__meta-inline{font-weight:400;font-size:var(--fs-sm);color:var(--text-muted)}.negative-balance-row__credit{font-variant-numeric:tabular-nums;font-weight:600}.app-shell{padding-bottom:calc(56px + env(safe-area-inset-bottom))}body:has(.adaptive-nav) .navbar-links{display:none}.adaptive-nav{background:var(--surface);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);z-index:100;justify-content:space-around;align-items:stretch;display:flex;position:fixed;bottom:0;left:0;right:0}.adaptive-nav__item{cursor:pointer;color:var(--text-muted);font-family:inherit;font-size:var(--fs-xs);background:0 0;border:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;min-height:56px;padding:6px 4px;font-weight:500;text-decoration:none;display:flex}.adaptive-nav__item[aria-current=page]{color:var(--brand);background:var(--brand-tint)}.adaptive-nav__icon{color:currentColor;width:22px;height:22px;display:inline-flex}.adaptive-nav__icon svg{width:100%;height:100%}.adaptive-nav__label{letter-spacing:.02em}@media (width>=768px){.app-shell{padding-bottom:0;padding-left:72px}.adaptive-nav{padding:var(--s-3)0;border-top:none;border-right:1px solid var(--border);flex-direction:column;justify-content:flex-start;width:72px;top:0;bottom:0;right:auto}.adaptive-nav__item{flex:none;min-height:64px;padding:10px 4px}.adaptive-nav__item[aria-current=page]{border-radius:var(--r-sm);margin:2px var(--s-2)}}.date-input{align-items:stretch;gap:var(--s-2);flex-wrap:wrap;display:flex}.date-input__field{font-variant-numeric:tabular-nums;text-align:center;flex:12ch;min-width:12ch}.date-input .btn--compact{flex:none}.visually-hidden{clip:rect(0,0,0,0);border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.reports-page{padding:var(--s-4);max-width:960px;margin:0 auto}.reports-date-strip{gap:var(--s-2);margin-bottom:var(--s-4);flex-direction:column;display:flex}.reports-date-strip__sub{font-size:var(--fs-sm);color:var(--text-muted);text-align:center;padding:var(--s-2)0}.reports-range-buttons{gap:var(--s-2);display:flex}.reports-range-buttons .btn--compact{flex:1}.kpi-grid{gap:var(--s-3);margin-bottom:var(--s-4);grid-template-columns:1fr 1fr;display:grid}@media (width>=768px){.kpi-grid{grid-template-columns:repeat(4,1fr)}}.kpi-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--s-4);justify-content:space-between;gap:var(--s-2);flex-direction:column;min-height:96px;display:flex}.kpi-card__label{font-size:var(--fs-xs);color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em}.kpi-card__value{font-size:var(--fs-2xl);color:var(--text);font-variant-numeric:tabular-nums;font-weight:700}.feed-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.feed-dot--charge{background:var(--danger)}.feed-dot--topup{background:var(--brand)}.feed-dot--pass{background:var(--info)}.feed-dot--visit{background:var(--info-soft)}.feed-dot--voided{background:var(--text-dim)}.list-row__note{color:var(--text-muted,#888);margin-top:2px;font-size:.85em;font-style:italic}.list-row__note-edit{align-items:center;gap:4px;margin-top:4px;display:flex}.list-row__note-edit .form-control--inline{flex:1;min-width:0}.list-row__end--icons{align-items:center;gap:var(--s-1);flex-direction:row;flex-shrink:0;display:flex}.btn--icon{line-height:1;font-size:var(--fs-sm);justify-content:center;align-items:center;width:28px;height:28px;padding:0;display:inline-flex}.app-version{right:var(--s-3,8px);bottom:calc(56px + env(safe-area-inset-bottom) + 4px);font-size:var(--fs-xs,11px);color:var(--text-dim,#888);background:var(--surface-faint,#00000059);pointer-events:none;z-index:50;user-select:none;border-radius:4px;padding:2px 6px;position:fixed}@media (width>=768px){.app-version{bottom:var(--s-3,8px)}}.stats-kpi{border-collapse:collapse;width:100%;margin-bottom:1rem}.stats-kpi th,.stats-kpi td{text-align:right;font-variant-numeric:tabular-nums;padding:.4rem .6rem}.stats-kpi th:first-child,.stats-kpi td:first-child{text-align:left;font-weight:500}.stats-kpi th{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted,#888);font-size:.8rem}.stats-chart-title{color:var(--text-muted,#555);margin:1rem 0 .4rem;font-size:.95rem}.stats-chart{flex-direction:column;gap:.3rem;display:flex}.stats-row{font-variant-numeric:tabular-nums;grid-template-columns:4.5rem 1fr 5rem;align-items:center;gap:.5rem;font-size:.9rem;display:grid}.stats-row__label{color:var(--text-muted,#666)}.stats-row__bar-wrap{background:var(--surface-2,#f0f0f0);border-radius:3px;height:.85rem;overflow:hidden}.stats-row__bar{background:var(--brand);border-radius:3px;min-width:0;height:100%;transition:width .2s}.stats-row__value{text-align:right}.door-btn{background:var(--color-primary,#2563eb);color:#fff;touch-action:none;user-select:none;cursor:pointer;border:none;border-radius:12px;width:100%;min-height:64px;margin:1rem 0;font-size:1.1rem;font-weight:600;position:relative;overflow:hidden}.door-btn[disabled]{cursor:not-allowed;opacity:.7}.door-btn__label{z-index:1;position:relative}.door-btn__icon{z-index:1;margin-right:.5rem;position:relative}.door-btn__progress{pointer-events:none;z-index:0;background:#ffffff40;position:absolute;inset:0}.door-btn--idle,.door-btn--holding,.door-btn--firing{background:#2563eb}.door-btn--success{background:#16a34a}.door-btn--errorunavailable{background:#dc2626}.door-btn--errorratelimited{background:#6b7280}.door-btn--notallowed{background:#9ca3af}.banner{text-align:center;border-radius:8px;margin:.75rem 0;padding:.75rem;font-weight:500}.banner--success{color:#166534;background:#dcfce7}.banner--error{color:#991b1b;background:#fee2e2}.banner--warn{color:#475569;background:#f1f5f9}.install-prompt{margin:1rem 0}.install-prompt--ios{background:var(--surface,#fff);border-radius:10px;padding:1rem;box-shadow:0 1px 2px #0000000f}.install-prompt__title{margin:0 0 .5rem;font-weight:600}.install-prompt__steps{flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.install-prompt__steps li{align-items:center;gap:.5rem;display:flex}.install-prompt__icon{flex-shrink:0;font-size:1.1rem}.card-credit,.card-pass{background:var(--surface,#fff);border-radius:10px;margin-bottom:.75rem;padding:1rem;box-shadow:0 1px 2px #0000000f}.card-credit__label,.card-pass__label{color:#6b7280;font-size:.85rem}.card-credit__value{font-size:1.6rem;font-weight:700}.card-pass__value{font-size:1.1rem}.recent-visits__heading{color:var(--text,#111827);margin:1.25rem 0 .5rem;font-size:1rem;font-weight:600}.recent-visits{padding:0;list-style:none}