:root{--ecv-red:#e30613;--ecv-red-dark:#b8050f;--ecv-black:#0b0b0b;--ecv-gray:#2a2a2a;--ecv-gray-light:#3d3d3d;--ecv-white:#f5f5f5;--ecv-muted:#a3a3a3;--ecv-gold:#c9a227;--sidebar-width:300px;--sidebar-width-staff:240px;--topbar-height:56px;--surface-main:#141414;--surface-card:var(--ecv-gray);--border-subtle:#404040;--accent:var(--ecv-red);--text-primary:var(--ecv-white);--text-muted:var(--ecv-muted);color:var(--text-primary);background-color:var(--surface-main);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:system-ui,Segoe UI,sans-serif;line-height:1.5}*{box-sizing:border-box}body{min-height:100vh;margin:0}#root,.app-shell{min-height:100vh}.app-shell--desktop{grid-template-columns:var(--sidebar-width) 1fr;display:grid}.app-shell--desktop.app-shell--staff{grid-template-columns:var(--sidebar-width-staff,240px) 1fr}.app-main{background:var(--surface-main);min-height:100vh}.app-shell:not(.app-shell--desktop) .app-main{padding-top:var(--topbar-height)}.page-content{max-width:960px;margin:0 auto;padding:1.25rem 1rem 2.5rem}@media (width>=1024px){.page-content{padding:2rem 1.5rem 3rem}}.sidebar{background:var(--ecv-black);border-right:3px solid var(--ecv-red);flex-direction:column;gap:1.25rem;height:100%;min-height:100vh;padding:1.25rem 1rem;display:flex;overflow-y:auto}.sidebar-brand{align-items:center;gap:.75rem;display:flex}.sidebar-brand__logo{flex-shrink:0}.sidebar-brand__text{flex-direction:column;line-height:1.25;display:flex}.sidebar-brand__club{color:var(--ecv-red);text-transform:uppercase;letter-spacing:.02em;font-size:.78rem;font-weight:700}.sidebar-brand__app{color:var(--text-primary);font-size:1rem;font-weight:600}.observer-filter__label{color:var(--text-muted);flex-direction:column;gap:.35rem;font-size:.85rem;display:flex}.observer-filter select{width:100%}.sidebar-nav{flex-direction:column;gap:.35rem;display:flex}.sidebar-nav__hint{margin:.35rem 0 0;padding-left:.75rem;font-size:.78rem}.drawer .sidebar{border-right:none;min-height:100%}.sidebar-footer{margin-top:auto;padding-top:.5rem}.sidebar-footer__logout{width:100%}.sidebar-nav__link{color:var(--text-muted);border-left:3px solid #0000;border-radius:8px;padding:.65rem .75rem;font-size:.95rem;text-decoration:none;transition:background .15s,color .15s,border-color .15s;display:block}.sidebar-nav__link:hover{background:var(--ecv-gray);color:var(--text-primary);border-left-color:#dc262673}.sidebar-nav__link:focus-visible{background:var(--ecv-gray);color:var(--text-primary);border-left-color:var(--ecv-red);outline:2px solid var(--ecv-gold);outline-offset:2px}.sidebar-nav__link.active{background:var(--ecv-gray);border-left-color:var(--ecv-red);color:var(--text-primary);font-weight:600}.user-card{align-items:center;gap:.75rem;display:flex}.user-card__avatar{background:var(--ecv-red);color:#fff;border-radius:50%;flex-shrink:0;place-items:center;width:44px;height:44px;font-size:.95rem;font-weight:700;display:grid}.user-card__role{color:var(--ecv-gold);margin:.15rem 0 0;font-size:.8rem;font-weight:600}.user-card__name{color:var(--text-primary);margin:0;font-size:.95rem;font-weight:600;line-height:1.3}.user-card__email{text-overflow:ellipsis;white-space:nowrap;max-width:200px;margin:.15rem 0 0;font-size:.8rem;overflow:hidden}.month-calendar{flex-direction:column;gap:.5rem;width:100%;min-width:0;display:flex}.month-calendar__header{justify-content:space-between;align-items:center;gap:.25rem;display:flex}.month-calendar__title{text-align:center;color:var(--text-primary);text-transform:capitalize;flex:1;font-size:.9rem;font-weight:600}.month-calendar__nav{background:var(--ecv-gray-light);min-width:2rem;min-height:2.25rem;padding:0;font-size:1.25rem;line-height:1}.month-calendar__today{color:#cbd5e1;background:0 0;border:1px solid #475569;padding:.45rem .75rem;font-size:.85rem}.month-calendar button{padding:0}.month-calendar__weekdays{text-align:center;color:#94a3b8;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px;margin-top:.25rem;font-size:.7rem;display:grid}.month-calendar__grid{grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;display:grid}.month-calendar__day{aspect-ratio:1;box-sizing:border-box;color:#e2e8f0;background:#0f172a;border:1px solid #0000;flex-direction:column;justify-content:center;align-items:center;gap:2px;width:100%;min-width:0;max-width:100%;padding:0;font-size:clamp(.65rem,2.5vw,.8rem);display:flex;position:relative}.month-calendar__day--fill-partial:not(.month-calendar__day--selected){background:#422006;border-color:#fbbf24}.month-calendar__day--fill-full:not(.month-calendar__day--selected){background:#14532d;border-color:#4ade80}.month-calendar__day--outside{opacity:.35}.month-calendar__day--today{border-color:#64748b}.month-calendar__day--selected{background:var(--ecv-red);border-color:var(--ecv-red);color:#fff}.month-calendar__day--editable:not(.month-calendar__day--selected){outline:1px solid var(--ecv-gold);outline-offset:-1px}.month-calendar__summary{margin:0 0 .35rem;font-size:.78rem;line-height:1.35}.month-calendar__dot{background:#fbbf24;border-radius:50%;width:6px;height:6px}.month-calendar__dot--partial{background:#fbbf24}.month-calendar__dot--full{background:#4ade80}.month-calendar__dot--pending{background:#fb923c}.month-calendar__day--selected .month-calendar__dot{box-shadow:0 0 0 1px #ffffff80}.month-calendar__legend{color:#94a3b8;flex-direction:column;gap:.35rem;margin:.75rem 0 0;padding:0;font-size:.72rem;list-style:none;display:flex}.month-calendar__legend li{align-items:center;gap:.4rem;display:flex}.month-calendar__swatch{border:1px solid #0000;border-radius:3px;flex-shrink:0;width:.75rem;height:.75rem}.month-calendar__swatch--partial{background:#422006;border-color:#fbbf24}.month-calendar__swatch--full,.month-calendar__day--checkin-done:not(.month-calendar__day--selected){background:#14532d;border-color:#4ade80}.month-calendar__day--checkin-pending:not(.month-calendar__day--selected){background:#422006;border-color:#fb923c}.month-calendar__day--checkin-future:not(.month-calendar__day--selected){background:#1e293b;border-color:#64748b}.month-calendar__swatch--checkin-done{background:#14532d;border-color:#4ade80}.month-calendar__swatch--checkin-pending{background:#422006;border-color:#fb923c}.month-calendar__swatch--checkin-future{background:#1e293b;border-color:#64748b}.month-calendar__footer{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-top:.75rem;display:flex}.month-calendar__footer .month-calendar__legend{flex:1;min-width:9rem;margin:0}.staff-checkin-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;color:#e2e8f0;flex-shrink:0;align-items:center;gap:.5rem;margin:0;font-size:.72rem;display:flex}.staff-checkin-toggle input{opacity:0;width:0;height:0;position:absolute}.staff-checkin-toggle__track{background:#334155;border:1px solid #475569;border-radius:999px;flex-shrink:0;width:2.5rem;height:1.35rem;transition:background .15s,border-color .15s;position:relative}.staff-checkin-toggle__track:after{content:"";background:#f1f5f9;border-radius:50%;width:1rem;height:1rem;transition:transform .15s;position:absolute;top:2px;left:2px}.staff-checkin-toggle input:checked+.staff-checkin-toggle__track{background:var(--ecv-red);border-color:#b91c1c}.staff-checkin-toggle input:checked+.staff-checkin-toggle__track:after{transform:translate(1.1rem)}.staff-checkin-toggle input:focus-visible+.staff-checkin-toggle__track{outline:2px solid var(--ecv-gold);outline-offset:2px}.staff-checkin-focus-hint{margin:0 0 .75rem;font-size:.85rem}.badge--locked{color:#d6d3d1;background:#44403c}.checkin-env-banner{border:1px solid #f87171;border-radius:8px;padding:.75rem;font-size:.9rem}.checkin-step{border-bottom:1px solid #334155;flex-direction:column;gap:.75rem;padding:1rem 0;display:flex}.checkin-step:last-of-type{border-bottom:none}.checkin-step__head{align-items:center;gap:.5rem;display:flex}.checkin-step__num{background:var(--ecv-red);color:#fff;border-radius:50%;flex-shrink:0;place-items:center;width:1.65rem;height:1.65rem;font-size:.85rem;font-weight:700;display:grid}.checkin-step__title{flex:1;margin:0;font-size:1rem}.checkin-step__action{width:100%;min-height:48px;font-size:1rem}.checkin-step__prompt{background:var(--ecv-gray);color:var(--text-primary);border-radius:8px;margin:0;padding:.75rem;font-size:.95rem;line-height:1.45;animation:1.5s ease-in-out infinite checkin-pulse}@keyframes checkin-pulse{0%,to{opacity:1}50%{opacity:.75}}.checkin-step__note{margin:0;font-size:.85rem}.camera-capture__video--hidden{display:none}.camera-capture{flex-direction:column;gap:.75rem;display:flex}.camera-capture__file-input{opacity:0;clip:rect(0, 0, 0, 0);width:1px;height:1px;position:absolute;overflow:hidden}.camera-capture__alt{width:100%}.camera-capture__video{object-fit:cover;background:#000;border-radius:8px;width:100%;max-height:280px}.camera-capture__shutter{width:100%;min-height:44px;margin-top:.5rem}.day-grid__actions{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.topbar{z-index:40;height:var(--topbar-height);background:var(--ecv-black);border-bottom:2px solid var(--ecv-red);align-items:center;gap:.5rem;padding:0 .75rem;display:flex;position:fixed;top:0;left:0;right:0}.topbar__logo{flex-shrink:0}.topbar__menu{background:0 0;place-items:center;min-width:44px;min-height:44px;padding:0;display:grid}.topbar__menu-icon{background:#f8fafc;width:22px;height:2px;display:block;box-shadow:0 -7px #f8fafc,0 7px #f8fafc}.topbar__title{color:#f8fafc;flex:1;margin:0;font-size:1rem;font-weight:600}.topbar__user{text-align:right;max-width:40%}.topbar__user-name{color:#e2e8f0;font-size:.9rem;font-weight:600}.drawer-backdrop{z-index:50;background:#0f172aa6;position:fixed;inset:0}.drawer{z-index:60;width:min(var(--sidebar-width), 88vw);height:100%;transition:transform .22s;position:fixed;top:0;left:0;transform:translate(-105%);box-shadow:4px 0 24px #00000059}.drawer--open{transform:translate(0)}.staff-agenda-page{align-items:start;gap:1.25rem;display:grid}@media (width>=900px){.staff-agenda-page{grid-template-columns:minmax(280px,300px) 1fr;gap:1.5rem}.staff-agenda-page__context{position:sticky;top:1rem}}.staff-agenda-page__subtitle{margin:0;font-size:.95rem}.staff-agenda-context__title{color:var(--ecv-red);margin:0 0 .75rem;font-size:1.1rem}.staff-agenda-context{min-width:0;overflow:hidden}.staff-agenda-context .month-calendar{margin-top:.75rem}.staff-agenda-context .month-calendar__title{text-wrap:balance;font-size:.85rem}.staff-agenda-context .month-calendar__summary{font-size:.75rem}.agenda-layout{flex-direction:column;gap:1.25rem;display:flex}@media (width>=900px){.agenda-layout{flex-direction:row;align-items:flex-start}.agenda-layout>*{flex:1}}.day-grid__list{flex-direction:column;gap:1rem;margin:0;padding:0;list-style:none;display:flex}.day-grid__row{border-bottom:1px solid #334155;padding-bottom:1rem}.day-grid__row:last-child{border-bottom:none;padding-bottom:0}.day-grid__shift{color:#e2e8f0;margin:0 0 .5rem;font-size:1rem}.day-grid__empty{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.day-grid__add{min-height:44px}.form-actions{flex-wrap:wrap;gap:.5rem;display:flex}.form-actions button{flex:1;min-width:120px}.form-date-label{text-transform:capitalize}.agenda-header .page-title{margin:0 0 1rem;font-size:1.35rem}.entity-linker{flex-direction:column;gap:.65rem;display:flex}.entity-results{border:1px solid #334155;border-radius:8px;max-height:200px;margin:0;padding:0;list-style:none;overflow-y:auto}.entity-results button{text-align:left;background:#0f172a;border-radius:0;width:100%;min-height:44px;padding:.5rem .75rem}.entity-results li+li button{border-top:1px solid #334155}.entity-chip{background:#0f172a;border:1px solid #475569;border-radius:8px;justify-content:space-between;align-items:center;gap:.5rem;padding:.5rem .75rem;display:flex}.entity-locality-hint{color:#cbd5e1;margin:0;font-size:.85rem}button.linkish{color:#60a5fa;background:0 0;min-height:auto;padding:0;text-decoration:underline}.day-grid__actions{margin-top:.5rem}.badge{border-radius:6px;padding:.25rem .5rem;font-size:.8rem;display:inline-block}.badge--ok{color:#86efac;background:#14532d}.badge--pending{color:#fdba74;background:#422006}.checkin-link{background:var(--ecv-red);color:#fff;border-radius:8px;align-items:center;min-height:44px;padding:.5rem .75rem;font-size:.9rem;text-decoration:none;display:inline-flex}.checkin-detail__locked{background:var(--ecv-gray);border-radius:8px;padding:.65rem .75rem;font-size:.9rem}.checkin-detail__photo{object-fit:contain;width:100%;max-height:420px}.checkin-preview{object-fit:contain;border:1px solid #334155;border-radius:8px;width:100%;max-height:280px}.checkin-filter{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.checkin-filter__btn{min-height:44px}.checkin-filter__btn.active{background:var(--ecv-red);color:#fff}.pending-list{flex-direction:column;gap:1rem;margin:1rem 0 0;padding:0;list-style:none;display:flex}.pending-item{flex-direction:column;gap:.35rem;display:flex}.loading-shell{min-height:100vh;color:var(--text-muted);place-items:center;display:grid}.page-content--wide{max-width:1200px}.login-page{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:100vh;padding:2rem 1.25rem 3rem;display:flex}.login-brand{text-align:center}.login-brand__title{color:var(--text-primary);margin:.75rem 0 .25rem;font-size:1.5rem}.login-brand__subtitle{margin:0}.login-form{width:100%;max-width:420px}.page-title{color:var(--text-primary);margin:0 0 .5rem;font-size:1.75rem}.agenda-window-banner{color:var(--ecv-gold);margin:0 0 1rem;font-size:.9rem}.agenda-window-banner--closed{color:#fca5a5}.entity-create{margin-top:.35rem;padding:.85rem}.field-required{color:var(--ecv-red)}.ecv-logo{object-fit:contain;flex-shrink:0;width:auto;display:block}.ecv-logo--sidebar{max-width:56px;max-height:48px}.ecv-logo--login{max-width:100px;max-height:88px;margin:0 auto}.ecv-logo--topbar{max-width:40px;max-height:32px}.city-field{flex-direction:column;gap:.35rem;display:flex}.city-field label{color:var(--text-muted);font-size:.9rem}.city-field__suggestions button.active{background:var(--ecv-gray-light)}.settings-form,.user-admin-form{max-width:420px}.settings-success{color:#86efac}.page-header{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1.5rem;display:flex}.layout-grid{gap:1.25rem;display:grid}@media (width>=768px){.layout-grid{grid-template-columns:1fr 1fr;align-items:start}}.card{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:12px;padding:1.25rem}.card h2{color:var(--text-primary);margin:0 0 1rem;font-size:1.1rem}.form-stack{flex-direction:column;gap:.85rem;display:flex}label{color:var(--text-muted);flex-direction:column;gap:.35rem;font-size:.9rem;display:flex}input,select,textarea,button{font:inherit}input,select,textarea{border:1px solid var(--border-subtle);background:var(--ecv-black);color:var(--text-primary);border-radius:8px;padding:.55rem .65rem}button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:8px;padding:.6rem 1rem}button:disabled{opacity:.6;cursor:not-allowed}button.secondary{background:var(--ecv-gray-light)}.error{color:#fca5a5;margin:0;font-size:.9rem}.muted{color:var(--text-muted);margin:0;font-size:.9rem}.event-list{flex-direction:column;gap:.85rem;margin:0;padding:0;list-style:none;display:flex}.event-list li{border-bottom:1px solid var(--border-subtle);flex-direction:column;gap:.15rem;padding-bottom:.85rem;display:flex}.event-list li:last-child{border-bottom:none;padding-bottom:0}
