:root{color-scheme:light;--text: #203128;--page: #fafbf9;--surface: #fff;--border: #dce2d9;--separator: #e8ece2;--muted: #63715d;--hover: #eef2e9;--focus: #84a661;--primary: #435b43;--primary-hover: #263e28;--tint: #f5f7f1;--track: #dce5d3;--accent: #6c8751;--selected: #eef3e7;--selected-text: #4a6438;--selected-border: #adbf99;--warning-bg: #fcf6e9;--warning-border: #ead9b4;--warning-text: #816022;--danger: #a34638;--danger-text: #a34638;--danger-hover: #89362c;--success: #548144;--error-text: #8e382d;--error-bg: #fff0ed;--input-accent: #4f6e39;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:var(--text);background:var(--page);font-synthesis:none;font-weight:400;line-height:1.5}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer;border:1px solid var(--border);background:var(--surface);border-radius:6px;padding:6px 10px;color:inherit;font-size:.8rem;font-weight:500;min-height:32px}button:hover{background:var(--hover)}button:disabled{opacity:.5;cursor:wait}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--focus);outline-offset:3px}.app-shell{max-width:820px;margin:auto;padding:0 24px 24px}header{height:60px;display:flex;align-items:center;border-bottom:1px solid var(--border);gap:28px}.brand{font-weight:650;font-size:1.125rem;letter-spacing:-.5px;display:inline-flex;align-items:center;gap:4px}.brand-icon{display:inline-block;width:28px;height:28px;flex-shrink:0;background-color:currentColor;-webkit-mask:url(/gym-tracker-icon.svg) center / contain no-repeat;mask:url(/gym-tracker-icon.svg) center / contain no-repeat}nav{position:relative;display:flex;gap:20px;font-size:.8rem}nav:before{content:"";position:absolute;left:-14px;top:50%;width:1px;height:18px;background:var(--border);transform:translateY(-50%)}nav a{color:var(--muted);padding:12px 0}nav a[aria-current]{color:var(--text);font-weight:650}.logout{margin-left:auto}.text-button{border:none;background:transparent;color:var(--muted)}main{padding:22px 0 0}.page-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}h1{font-size:1.125rem;letter-spacing:-.3px;line-height:1.2;font-weight:550;margin:0}h2{font-size:1rem;letter-spacing:-.2px;font-weight:550;margin:0}p{margin:0 0 12px}.muted{color:var(--muted);font-size:.875rem}.primary{background:var(--primary);color:#fff;border-color:var(--primary);padding:7px 12px}.primary:hover{background:var(--primary-hover)}.check-in{white-space:nowrap}.stats{display:grid;grid-template-columns:1.4fr 1fr 1fr;border:1px solid var(--border);background:var(--surface);border-radius:8px;overflow:hidden;margin-bottom:14px}.stats>div{padding:12px 16px;display:flex;flex-direction:column;align-items:flex-start;gap:4px;border-left:1px solid var(--border)}.stats>div:first-child{border-left:0}.stats span{font-size:.75rem;color:var(--muted)}.stats strong{font-size:1.625rem;font-weight:550;letter-spacing:-.8px;line-height:1.2}.stats strong small{font-size:.9rem;color:var(--muted);letter-spacing:-.5px;margin-left:3px}.stats .feri-stat{background:var(--tint)}.progress{display:flex;gap:3px;width:100%;margin-bottom:2px;max-width:132px}.progress i{display:block;height:3px;flex:1;border-radius:2px;background:var(--track)}.progress .filled{background:var(--accent)}.stats .hint,.hint{font-size:.72rem;color:var(--muted)}.content-panel{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px;margin-top:14px}.month-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.month-heading h2:first-letter{text-transform:uppercase}.month-controls{display:flex;align-items:center;gap:6px}.icon{font-size:1.25rem;line-height:1;width:32px;height:32px;padding:0}.month-controls input{width:145px;font-size:.75rem;padding:5px 7px;border-color:var(--border)}.calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}.weekday{text-align:center;font-size:.75rem;color:var(--muted);padding:5px}.day{position:relative;aspect-ratio:auto;display:flex;align-items:center;justify-content:center;color:var(--muted);border-radius:5px;font-size:.8rem;height:40px}.day>span,.day>button{display:flex;align-items:center;justify-content:center;width:100%;height:100%;position:relative;border-radius:5px}.day>button{border:0;background:var(--selected);border-radius:5px;color:var(--selected-text);font-weight:650}.day.today>span,.day.today>button{outline:1px solid var(--selected-border);outline-offset:-2px}.attendance-dot{width:5px;height:5px;display:inline-block;background:var(--accent);border-radius:50%}.day .attendance-dot{position:absolute;bottom:12%}.calendar-note{display:flex;align-items:center;gap:6px;font-size:.72rem;color:var(--muted);border-top:1px solid var(--separator);padding-top:10px;margin:12px 0 0}.hover-details{display:none;position:absolute;bottom:90%;left:50%;transform:translate(-50%);background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 18px #21302014;padding:12px;width:290px;z-index:5;max-height:300px;overflow:auto}.day:nth-child(7n+1) .hover-details,.day:nth-child(7n+2) .hover-details{left:0;transform:none}.day:nth-child(7n) .hover-details,.day:nth-child(7n-1) .hover-details{left:auto;right:0;transform:none}@media(hover:hover){.day:hover .hover-details,.day:focus-within .hover-details{display:block}}.session-detail{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:6px 0;font-size:.85rem}.session-detail>span{color:var(--muted);font-size:.78rem}.session-detail .badge{color:var(--selected-text);background:var(--selected);border-radius:5px;padding:3px 7px;font-weight:650;font-size:.73rem}.payment-alert{display:flex;gap:10px;align-items:center;background:var(--warning-bg);border:1px solid var(--warning-border);border-radius:6px;padding:10px 12px;font-size:.8rem;color:var(--warning-text)}.payment-alert a{margin-left:auto;font-weight:600}.history-row{display:grid;grid-template-columns:125px 1fr auto;gap:12px;align-items:center;border-top:1px solid var(--separator);padding:8px 0}.history-row time{font-size:.8rem;color:var(--muted)}.row-actions{display:flex;gap:6px}.danger-text{color:var(--danger-text)}.danger{background:var(--danger);color:#fff;border-color:var(--danger)}.danger:hover{background:var(--danger-hover)}.payments{font-size:.85rem}.payment-row{display:flex;align-items:center;gap:12px;border-top:1px solid var(--separator);padding:10px 0}.payment-row button{margin-left:auto}.pending{color:var(--warning-text)}.paid{color:var(--success)}footer{display:flex;justify-content:flex-end;color:var(--muted);font-size:.7rem;padding:14px 0 0}footer div{display:flex;gap:18px}.empty{text-align:center;padding:24px 0;color:var(--muted);font-size:.8rem}.error{color:var(--error-text);background:var(--error-bg);border-radius:8px;padding:12px;margin:12px 0;font-size:.85rem}.error button{margin-left:12px}dialog{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:20px;width:min(420px,calc(100% - 24px));max-height:90dvh;color:inherit;box-shadow:0 12px 48px #1a2c2726}dialog::backdrop{background:#17291e40;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.dialog-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:10px}form{display:flex;flex-direction:column;gap:12px}label{display:flex;flex-direction:column;gap:5px;font-size:.8rem;font-weight:550}input,select{width:100%;border:1px solid var(--border);border-radius:6px;padding:7px 10px;font-size:.875rem;background:var(--surface);color:inherit;min-width:0}input[type=checkbox],input[type=radio]{width:15px;height:15px;margin:0;accent-color:var(--input-accent)}fieldset{border:0;padding:0;margin:0;min-width:0}legend{font-size:.8rem;font-weight:550;margin-bottom:8px}.choices{display:flex;gap:8px;flex-wrap:wrap}.choices label{flex-direction:row;align-items:center;gap:8px;border:1px solid var(--border);padding:7px 10px;border-radius:6px;font-weight:400}.choices .selected{background:var(--selected);border-color:var(--selected-border)}.inline{flex-direction:row;align-items:center}.two-columns{display:grid;grid-template-columns:1fr 1fr;gap:12px}.feri-form{background:var(--tint);border-radius:6px;padding:10px;display:flex;flex-direction:column;gap:8px;font-size:.8rem}.feri-form p{margin:0}.actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.login{width:min(320px,calc(100% - 40px));margin:8vh auto;padding:20px 0}.login .brand{margin-bottom:24px}.login form{margin-top:18px}.loading{padding:20vh 20px;text-align:center;color:var(--muted)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.stat-label:first-letter{text-transform:uppercase}.stats .feri-stat strong{font-size:1.875rem}@media(max-width:700px){.app-shell{padding:0 12px 20px}header{height:56px;gap:12px}nav{gap:14px}nav:before{left:-6px}.logout{padding:6px}main{padding-top:16px}button{min-height:40px}.page-heading{gap:8px;margin-bottom:12px}.check-in{padding:8px 10px}.stats>div{padding:10px}.stats span{font-size:.72rem}.stats .hint{font-size:.7rem}.stats strong{font-size:1.5rem}.stats .feri-stat strong{font-size:1.75rem}.content-panel{padding:12px 10px}.month-heading{gap:8px;flex-wrap:wrap}.month-heading h2{font-size:.95rem}.month-controls{gap:4px;margin-left:auto}.month-controls input{width:136px;min-height:40px;font-size:.8rem;padding:5px}.month-controls .icon{width:36px;height:40px}.day{height:44px}.calendar-note{font-size:.7rem;flex-wrap:wrap;gap:4px}.calendar-note .muted{font-size:inherit}.payment-alert{flex-wrap:wrap;gap:4px 10px}.payment-alert a{margin-left:0;width:100%}.history-row{grid-template-columns:1fr auto;gap:0 10px;padding:10px 0}.history-row time{grid-column:1 / -1}.history-row .session-detail{min-width:0}.row-actions{flex-direction:column;gap:4px}.payments>.month-heading{align-items:flex-start}.payment-row{gap:8px;flex-wrap:wrap}.payment-row button{font-size:.75rem}.hover-details{display:none!important}dialog{padding:16px}input,select{font-size:1rem;min-height:44px}input[type=checkbox],input[type=radio]{min-height:0}.choices label{min-height:44px}}.access-row{padding:16px;margin-bottom:12px}.access-row form{max-width:420px}.access-row h2{margin:0}.access-pending{margin-top:12px}@media(max-width:520px){header{flex-wrap:wrap;height:auto;min-height:56px;padding-top:8px;padding-bottom:8px}header nav{gap:8px}}.audit-filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:end;gap:8px;margin-bottom:16px}.audit-filters label{min-width:0;font-size:.72rem;color:var(--muted)}.audit-filters input,.audit-filters select{font-size:.8rem;padding:6px}.audit-filter-actions{display:flex;gap:6px;grid-column:span 2;justify-content:flex-end}.audit-filters .error{grid-column:1 / -1;margin:0}.audit-filter-toggle{display:none}.audit-summary{display:flex;flex-wrap:wrap;gap:4px 16px;color:var(--muted);font-size:.75rem;margin-bottom:10px}.audit-summary strong{font-weight:500}.audit-list{list-style:none;margin:0;padding:0}.audit-list li{border-top:1px solid var(--border)}.audit-event{width:100%;border:0;border-radius:4px;background:transparent;text-align:left;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1.35fr) minmax(0,.6fr);gap:3px 14px;padding:10px 4px;font-weight:400;align-items:start}.audit-event>*{min-width:0;overflow-wrap:anywhere}.audit-action{font-size:.78rem;font-weight:600}.audit-event time,.audit-device,.audit-client,.audit-ip{font-size:.72rem;color:var(--muted)}.audit-client{grid-column:1}.audit-ip{grid-column:2 / -1;font-family:ui-monospace,monospace}.audit-pagination{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px}.audit-pagination span{font-size:.78rem;color:var(--muted)}.audit-pagination button:disabled{cursor:default}.audit-details{margin:0;font-size:.8rem}.audit-details>div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:10px;padding:6px 0;border-top:1px solid var(--separator)}.audit-details dt{color:var(--muted)}.audit-details dd{margin:0;overflow-wrap:anywhere}@media(max-width:700px){.audit-filters-desktop{display:none}.audit-filter-toggle{display:inline-block}.audit-filters{grid-template-columns:repeat(2,minmax(0,1fr))}.audit-filters input,.audit-filters select{font-size:1rem}.audit-event{grid-template-columns:minmax(0,1fr) auto;gap:4px 10px;padding:12px 2px}.audit-action{grid-column:1 / -1;font-size:.8rem}.audit-event time{grid-column:1}.audit-client,.audit-ip{grid-column:1 / -1}.audit-event time,.audit-device,.audit-client,.audit-ip{font-size:.75rem}}@media(max-width:520px){header nav{order:3;flex-basis:100%;gap:20px}header nav:before{display:none}header nav a{padding:5px 0}}.login-split-wrap{position:relative;margin-top:20px}.login-split{position:relative;isolation:isolate;height:52px;width:100%;border:1px solid #dce2d9;border-radius:13px;background:#f8f9fa}.login-split button{position:absolute;top:0;height:50px;width:calc(50% + 7px);border:0;white-space:nowrap;font-size:.8rem;font-weight:600}.login-split button:disabled{opacity:1;cursor:default}.login-split button:disabled .login-label{opacity:.65}.login-local{left:0;border-radius:12px 0 0 12px;padding-right:18px;clip-path:polygon(0 0,100% 0,calc(100% - 14px) 100%,0 100%);background:#f8f9fa;color:#202124;transition:background-color .15s ease}.login-local:hover:not(:disabled){background:#edf0f2}.login-google{right:0;border-radius:0 12px 12px 0;padding-left:18px;clip-path:polygon(14px 0,100% 0,100% 100%,0 100%);overflow:hidden;background:#8ba38f;color:#fff}.login-google:hover{background:#8ba38f}.login-bands{position:absolute;inset:0;display:flex;transform:skew(-15.64deg);transform-origin:0 100%;pointer-events:none}.login-bands i{flex:1}.login-bands i:nth-child(1){background:#8294ad}.login-bands i:nth-child(2){background:#b58c87}.login-bands i:nth-child(3){background:#c1ad7b}.login-bands i:nth-child(4){background:#8ba38f}.login-label{position:relative}.login-google .login-label{background:#202124;color:#fff;padding:3px 5px;border-radius:2px}.login-split button:focus-visible{outline:2px solid #202124;outline-offset:-4px}.login-google:focus-visible .login-label{outline:2px solid #fff;outline-offset:2px}.login-tooltip{position:absolute;bottom:calc(100% + 10px);right:0;z-index:2;width:max-content;max-width:100%;padding:5px 8px;border-radius:5px;background:#202124;color:#fff;font-size:.72rem;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .15s ease}.login-tooltip:after{content:"";position:absolute;top:100%;right:65px;border:5px solid transparent;border-top-color:#202124}.login-split-wrap:has(.login-google:focus-visible) .login-tooltip{opacity:1;visibility:visible}@media(hover:hover){.login-split-wrap:has(.login-google:hover:not(:disabled)) .login-tooltip{opacity:1;visibility:visible}}@media(hover:none){.login-split-wrap .login-tooltip{display:none}}.login-spinner{position:absolute;bottom:4px;left:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:login-spin .7s linear infinite}.login-google .login-spinner{background:#202124}@keyframes login-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.login-spinner{animation:none}}.login-message{font-size:.8rem;margin-top:12px}@media(prefers-color-scheme:dark){:root{color-scheme:dark;--text: #f5f5f5;--page: #15191c;--surface: #1f2328;--border: #465049;--separator: #343d38;--muted: #a9b2a7;--hover: #2b3138;--focus: #b3ce92;--primary: #435b43;--primary-hover: #506b50;--tint: #252e28;--track: #465049;--accent: #a0ba85;--selected: #303e31;--selected-text: #d5e4c6;--selected-border: #82996e;--warning-bg: #342d20;--warning-border: #6a5938;--warning-text: #e1c184;--danger: #a34638;--danger-text: #efada3;--danger-hover: #b65041;--success: #abc895;--error-text: #f0b3a8;--error-bg: #3b2827;--input-accent: #a0ba85}.login-split{background:#1f2328;border-color:#465049}.login-local{background:#1f2328;color:#f5f5f5}.login-local:hover:not(:disabled){background:#2b3138}.login-split button:focus-visible{outline-color:#fff}.login-tooltip{background:#f5f5f5;color:#202124}.login-tooltip:after{border-top-color:#f5f5f5}}.login dialog{width:min(360px,calc(100vw - 32px));box-shadow:none}.login dialog::backdrop{-webkit-backdrop-filter:none;backdrop-filter:none}.local-login-form>button[type=submit]{width:100%}
