:root{--bg:#f6f7f9;--surface:#fff;--surface-sunken:#eef1f5;--border:#dee3ea;--border-strong:#c5ccd6;--text:#16202e;--text-secondary:#58636f;--text-tertiary:#5a6570;--accent:#072e5a;--accent-strong:#052141;--accent-tint:#e4ebf7;--accent-tint-strong:#c7d6ef;--warn:#b5650c;--warn-tint:#fbf0df;--danger:#c23b32;--danger-tint:#fbe9e7;--success:#2f6b22;--success-tint:#e7f4e2;--brand-blue:#1fa2f9;--brand-orange:#feba30;--brand-green:#59b044;--radius-sm:8px;--radius-md:12px;--radius-lg:18px;--shadow-sm:0 1px 2px rgba(15,26,20,.06);--shadow-md:0 6px 20px rgba(15,26,20,.08);--shadow-lg:0 20px 48px rgba(15,26,20,.14);--font:-apple-system,"Segoe UI",Inter,system-ui,"Helvetica Neue",Arial,sans-serif}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:hidden}h1,h2,h3,p{margin:0}button{cursor:pointer}button,input{font-family:inherit}.icon{width:18px;height:18px;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.app-shell{display:flex;min-height:100vh}.sidebar{width:232px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:20px 14px;position:-webkit-sticky;position:sticky;top:0;height:100vh}.mobile-topbar,.sidebar-scrim{display:none}.brand{display:flex;align-items:center;gap:10px;padding:6px 10px 22px}.brand-logo{height:32px;width:auto;display:block}.brand-logo-mobile{height:34px}.brand-logo-login{height:42px}.nav-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:var(--radius-sm);color:var(--text-secondary);font-size:14px;font-weight:500;text-decoration:none;border:none;background:none;width:100%;text-align:left}.nav-item .icon{color:var(--text-tertiary)}.nav-item:hover{background:var(--surface-sunken);color:var(--text)}.nav-item:hover .icon{color:var(--text-secondary)}.nav-item.current{background:var(--accent-tint);font-weight:600}.nav-item.current,.nav-item.current .icon{color:var(--accent-strong)}.sidebar-footer{margin-top:auto;display:flex;flex-direction:column;gap:8px}.user-chip{gap:9px;padding:8px 9px;border-radius:var(--radius-sm);border:1px solid var(--border)}.avatar,.user-chip{display:flex;align-items:center}.avatar{width:30px;height:30px;border-radius:50%;flex-shrink:0;background:var(--accent-strong);color:#fff;justify-content:center;font-size:12px;font-weight:700}.user-chip-name{font-size:13px;font-weight:600;line-height:1.25}.user-chip-role{font-size:11px;color:var(--text-tertiary)}.main{flex:1 1;min-width:0;padding:30px 40px 60px}.page-header{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:26px;gap:20px;flex-wrap:wrap}.page-title{font-size:24px;font-weight:700;letter-spacing:-.015em}.page-meta{font-size:14px;color:var(--text-secondary);margin-top:4px}.btn{display:inline-flex;align-items:center;gap:7px;border-radius:var(--radius-sm);font-size:14px;font-weight:600;padding:9px 15px;border:1px solid transparent;text-decoration:none}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-strong)}.btn-secondary{background:var(--surface);color:var(--text);border-color:var(--border-strong)}.btn-secondary:hover{background:var(--surface-sunken)}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:hover{background:var(--surface-sunken);color:var(--text)}.btn-danger{background:var(--danger-tint);color:var(--danger);border-color:transparent}.btn-danger:hover{background:var(--danger);color:#fff}.btn:disabled{opacity:.7;cursor:default}.spinner{stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:1.8s}}.slide-panel{position:fixed;top:0;right:-420px;width:380px;max-width:92vw;height:100vh;background:var(--surface);box-shadow:var(--shadow-lg);z-index:40;transition:right .22s ease;padding:24px;overflow-y:auto}.slide-panel.open{right:0}.slide-panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.slide-panel-head h2{font-size:17px;font-weight:700}.slide-panel-scrim{position:fixed;inset:0;z-index:39;background:rgba(15,26,20,.35)}@media (max-width:880px){.app-shell{flex-direction:column}.sidebar{position:fixed;top:0;left:-260px;height:100vh;z-index:30;transition:left .2s ease;box-shadow:var(--shadow-lg)}.sidebar.open{left:0}.main{padding:20px 18px 50px}.mobile-topbar{justify-content:space-between;position:-webkit-sticky;position:sticky;top:0;z-index:31;border-bottom:1px solid var(--border);padding:12px 16px}.menu-toggle,.mobile-topbar{display:flex;align-items:center;background:var(--surface)}.menu-toggle{justify-content:center;width:38px;height:38px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);color:var(--text)}.menu-toggle:hover{background:var(--surface-sunken)}.sidebar-scrim.open{display:block;position:fixed;inset:0;z-index:29;background:rgba(15,26,20,.4)}}.login-screen{min-height:100vh;display:flex}.login-brand-panel{width:42%;min-width:380px;background:var(--accent-strong);background-image:linear-gradient(180deg,rgba(30,62,122,.86),rgba(30,62,122,.86)),radial-gradient(circle at 18% 22%,hsla(0,0%,100%,.07),transparent 40%),radial-gradient(circle at 82% 78%,hsla(0,0%,100%,.06),transparent 45%),url(/images/login-team.jpg);background-size:cover,auto,auto,cover;background-position:50%,50%,50%,center 20%;background-repeat:no-repeat;color:#fff;display:flex;flex-direction:column;justify-content:space-between;padding:46px 48px}.login-brand-top{display:flex;align-items:center;gap:11px}.login-quote{max-width:360px}.login-quote p{font-size:22px;font-weight:600;line-height:1.4;letter-spacing:-.01em}.login-quote-attr{margin-top:14px;font-size:13px;color:hsla(0,0%,100%,.72)}.login-form-panel{flex:1 1;display:flex;align-items:center;justify-content:center;padding:40px;background:var(--surface)}.login-card{width:100%;max-width:360px}.login-card-accent{display:flex;gap:6px;margin-bottom:22px}.login-card-accent span{height:4px;width:28px;border-radius:2px}.login-card-accent span:first-child{background:var(--brand-blue)}.login-card-accent span:nth-child(2){background:var(--brand-orange)}.login-card-accent span:nth-child(3){background:var(--brand-green)}.login-card h1{font-size:22px;font-weight:700;letter-spacing:-.015em}.login-card .login-sub{margin-top:6px;color:var(--text-secondary);font-size:14px}.field{margin-top:20px}.field label{display:block;font-size:13px;font-weight:600;color:var(--text-secondary);margin-bottom:6px}.field input,.field select,.field textarea{width:100%;padding:10px 12px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);font-size:14px;color:var(--text);background:var(--surface)}.field input,.field select,.field textarea{font-family:inherit}.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-tint)}.field-hint{margin-top:5px;font-size:12px;color:var(--text-tertiary)}.login-error{margin-top:14px;font-size:13px;color:var(--danger);background:var(--danger-tint);border-radius:var(--radius-sm);padding:9px 11px}.link-quiet{font-size:13px;color:var(--accent-strong);font-weight:600;text-decoration:none}.link-quiet:hover{text-decoration:underline}.login-submit{width:100%;margin-top:22px;justify-content:center;padding:11px;font-size:14px}@media (max-width:880px){.login-brand-panel{display:none}}.form-grid{display:flex;flex-direction:column;gap:18px}.form-grid>.field{margin-top:0}.form-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}.form-row .field{margin-top:0;flex:1 1;min-width:130px}.form-row .field.grow-2{flex:2 1}.form-row .btn{flex-shrink:0}.planning-grid-wrap,.table-wrap{overflow-x:auto;background:linear-gradient(to right,var(--surface) 30%,hsla(0,0%,100%,0)),linear-gradient(to right,hsla(0,0%,100%,0),var(--surface) 70%) 100% 0,linear-gradient(to right,rgba(15,26,20,.08),rgba(15,26,20,0)),linear-gradient(to left,rgba(15,26,20,.08),rgba(15,26,20,0)) 100% 0;background-repeat:no-repeat;background-color:var(--surface);background-size:40px 100%,40px 100%,14px 100%,14px 100%;background-attachment:local,local,scroll,scroll}.table{width:100%;border-collapse:collapse;font-size:14px}.table th{text-align:left;font-size:11px;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.04em;padding:0 10px 8px;white-space:nowrap}.table td{padding:11px 10px;border-top:1px solid var(--border);vertical-align:middle}.table tbody tr:hover{background:var(--surface-sunken)}.table td.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.section-gap{margin-bottom:20px}.text-muted{color:var(--text-secondary);font-size:13px}.inline-actions{gap:6px;justify-content:flex-end}.inline-actions,.month-nav{display:flex;align-items:center}.month-nav{gap:8px}.month-nav-btn{width:30px;height:30px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;text-decoration:none;font-size:17px;line-height:1}.month-nav-btn:hover{background:var(--surface-sunken);color:var(--text)}.month-nav-label{font-size:15px;font-weight:700;min-width:150px;text-align:center}.month-nav-weeks{display:block;font-size:11.5px;font-weight:600;color:var(--text-tertiary);margin-top:1px}.planning-grid{border-collapse:collapse;width:100%;min-width:820px}.planning-grid th{text-align:left;font-size:12px;font-weight:700;color:var(--text-secondary);padding:0 8px 10px;border-bottom:1px solid var(--border)}.planning-grid .time-col{width:64px}.planning-grid td{border:1px solid var(--border);vertical-align:top;padding:6px;min-width:128px;background:var(--surface)}.planning-grid td.time-cell{border:none;background:transparent;font-size:12px;font-weight:700;color:var(--text-tertiary);padding:10px 8px 0 0;white-space:nowrap;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.slot-pill{background:var(--accent-tint);border-radius:var(--radius-sm);padding:7px 9px;margin-bottom:5px;display:block;text-decoration:none}.slot-pill:last-child{margin-bottom:0}a.slot-pill{cursor:pointer;transition:background .12s ease}a.slot-pill:hover{background:var(--accent-tint-strong)}.slot-pill-head{display:flex;align-items:center;justify-content:space-between;gap:6px}.slot-pill-cat{font-size:12.5px;font-weight:700;color:var(--accent-strong)}.slot-pill-sub{font-size:11px;color:var(--text-secondary);margin-top:2px}.slot-pill-cap{font-size:10.5px;font-weight:700;padding:1px 6px;border-radius:20px;flex-shrink:0}.slot-pill-cap.open{background:var(--accent-tint-strong);color:var(--accent-strong)}.slot-pill-cap.full{background:var(--danger-tint);color:var(--danger)}.empty-slot-btn{width:100%;height:100%;min-height:52px;border:1.5px dashed var(--border-strong);border-radius:var(--radius-sm);background:transparent;color:var(--text-tertiary);font-size:16px;display:flex;align-items:center;justify-content:center;text-decoration:none;transition:border-color .12s ease,background .12s ease,color .12s ease}.empty-slot-btn:hover{border-color:var(--accent);color:var(--accent-strong);background:var(--accent-tint)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);min-width:0}.dash-grid{display:grid;grid-template-columns:1.35fr 1fr;grid-gap:20px;gap:20px;align-items:start}@media (max-width:880px){.dash-grid{grid-template-columns:1fr}}.panel{padding:20px 22px}.panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.panel-head h2{font-size:17px;font-weight:700;letter-spacing:-.01em}.session-row{display:flex;align-items:center;gap:14px;padding:13px 0;border-top:1px solid var(--border)}.session-row:first-of-type{border-top:none;padding-top:4px}.session-time{width:54px;flex-shrink:0;font-weight:700;font-size:14px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.session-time span{display:block;font-size:11px;font-weight:500;color:var(--text-tertiary)}.session-info{flex:1 1;min-width:0}.session-cat{font-size:14px;font-weight:600}.session-coach{margin-top:1px}.session-coach,.session-count{font-size:13px;color:var(--text-secondary)}.session-count{font-weight:600;display:flex;align-items:center;gap:5px;flex-shrink:0}.session-count .icon{width:14px;height:14px;color:var(--text-tertiary)}.badge{font-size:11px;font-weight:700;padding:3px 8px;border-radius:20px;flex-shrink:0}.badge-full{background:var(--danger-tint);color:var(--danger)}.badge-open{background:var(--warn-tint);color:var(--warn)}.money-summary{display:flex;gap:22px;padding:2px 0 18px}.money-stat .money-label{font-size:12px;color:var(--text-secondary);font-weight:500}.money-stat .money-value{font-size:22px;font-weight:700;letter-spacing:-.02em;margin-top:3px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.money-stat.warn .money-value{color:var(--warn)}.unpaid-list{display:flex;flex-direction:column;gap:1px}.unpaid-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-top:1px solid var(--border)}.unpaid-row:first-child{border-top:none}.unpaid-name{font-size:14px;font-weight:600}.unpaid-sub{font-size:12px;color:var(--text-tertiary);margin-top:1px}.unpaid-amount{font-size:14px;font-weight:700;color:var(--warn);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.announce-row{padding:13px 0;border-top:1px solid var(--border)}.announce-row:first-child{border-top:none;padding-top:2px}.announce-text{font-size:14px;font-weight:600;line-height:1.4}.announce-meta{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:12px;color:var(--text-tertiary)}.alert-banner{display:flex;align-items:flex-start;gap:12px;background:var(--warn-tint);border:1px solid #efd9b0;border-radius:var(--radius-md);padding:13px 16px;margin-bottom:20px}.alert-banner .icon{color:var(--warn);margin-top:1px}.alert-title{font-size:14px;font-weight:700;color:#7a4508}.alert-body{font-size:13px;color:#7a4508;margin-top:2px;opacity:.9}.roster-status{font-size:11px;font-weight:700;padding:2px 7px;border-radius:20px}.roster-status.paid{background:var(--success-tint);color:var(--success)}.roster-status.unpaid{background:var(--warn-tint);color:var(--warn)}.roster-status.pending{background:var(--surface-sunken);color:var(--text-secondary)}.empty-state{padding:32px 22px;text-align:center;color:var(--text-tertiary);font-size:14px}