:root{--bg:#f0efec;--surface:#fff;--surface-raised:#f8f7f5;--border:#e2e0db;--border-strong:#c8c5be;--text:#1a1917;--text-muted:#6b6860;--text-subtle:#9b9890;--primary:#1a5246;--primary-hover:#143d34;--primary-light:#eaf2ef;--primary-border:#b0cfc7;--success:#2d6a4f;--success-bg:#edf7f2;--success-border:#b8dfc9;--success-text:#1e4d37;--danger:#c0392b;--danger-bg:#fef2f2;--danger-border:#f5c6c3;--danger-text:#922b21;--warning:#b45309;--warning-bg:#fffbeb;--warning-border:#fcd34d;--warning-text:#92400e;--info:#1e6fab;--info-bg:#eff6ff;--info-border:#bfdbfe;--info-text:#1e4d8c;--nav-bg:#111b18;--nav-text:#c8d4ce;--nav-muted:#6b8070;--nav-active-bg:hsla(0,0%,100%,.08);--nav-active-text:#fff;--nav-border:hsla(0,0%,100%,.06);--nav-width:220px;--appbar-height:48px;--bottombar-height:44px;--radius-sm:4px;--radius:8px;--radius-lg:12px;--radius-xl:16px;--shadow-sm:0 1px 2px rgba(0,0,0,.06);--shadow:0 1px 3px rgba(0,0,0,.08),0 1px 2px rgba(0,0,0,.04);--shadow-md:0 4px 6px rgba(0,0,0,.07),0 2px 4px rgba(0,0,0,.05);--shadow-lg:0 10px 25px rgba(0,0,0,.12),0 4px 10px rgba(0,0,0,.06)}*,:after,:before{box-sizing:border-box;margin:0;padding:0}#__nuxt,body,html{height:100%}body{background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.app-shell{display:contents}.app-bar{background:var(--nav-bg);border-bottom:1px solid var(--nav-border);gap:0;height:var(--appbar-height);left:0;padding:0 16px 0 0;position:fixed;right:0;top:0;z-index:100}.app-bar,.app-bar-brand{align-items:center;display:flex}.app-bar-brand{border-right:1px solid var(--nav-border);flex-shrink:0;gap:8px;height:100%;padding:0 16px;width:var(--nav-width)}.app-bar-brand-name{color:var(--nav-active-text);font-size:14px;font-weight:650;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app-bar-content{align-items:center;display:flex;flex:1;justify-content:space-between;min-width:0;padding:0 20px}.app-bar-page-title{color:var(--nav-active-text);font-size:13.5px;font-weight:600;letter-spacing:-.01em}.app-bar-meta{color:var(--nav-muted);font-size:12px;white-space:nowrap}.bottom-bar{align-items:center;background:var(--nav-bg);border-top:1px solid var(--nav-border);bottom:0;display:flex;gap:28px;height:var(--bottombar-height);left:0;padding:0 24px;position:fixed;right:0;z-index:100}.bottom-bar-stat{align-items:baseline;display:flex;gap:5px}.bottom-bar-value{color:var(--nav-active-text);font-size:14px;font-weight:700;letter-spacing:-.02em}.bottom-bar-label{color:var(--nav-muted);font-size:11.5px}.bottom-bar-divider{background:var(--nav-border);flex-shrink:0;height:16px;width:1px}.sidebar{background:var(--nav-bg);bottom:var(--bottombar-height);display:flex;flex-direction:column;flex-shrink:0;left:0;overflow-y:auto;position:fixed;top:var(--appbar-height);width:var(--nav-width)}.sidebar-brand{border-bottom:1px solid var(--nav-border);padding:20px 16px 16px}.sidebar-brand-name{color:var(--nav-active-text);font-size:15px;font-weight:600;letter-spacing:-.01em}.sidebar-brand-sub{color:var(--nav-muted);font-size:11px;margin-top:2px}.sidebar-nav{flex:1;padding:8px}.nav-section-label{color:var(--nav-muted);font-size:10px;font-weight:600;letter-spacing:.08em;padding:12px 8px 4px;text-transform:uppercase}.nav-link{align-items:center;background:transparent;border:none;border-radius:var(--radius);color:var(--nav-text);cursor:pointer;display:flex;font-size:13.5px;font-weight:450;gap:9px;padding:8px 10px;text-decoration:none;transition:background .12s,color .12s;width:100%}.nav-link:hover{background:#ffffff0d;color:var(--nav-active-text)}.nav-link.active,.nav-link.router-link-active{background:var(--nav-active-bg);color:var(--nav-active-text);font-weight:500}.nav-icon{flex-shrink:0;height:16px;opacity:.7;width:16px}.nav-link.active .nav-icon,.nav-link.router-link-active .nav-icon,.nav-link:hover .nav-icon{opacity:1}.sidebar-footer{border-top:1px solid var(--nav-border);padding:12px 8px}.main-content{bottom:var(--bottombar-height);left:var(--nav-width);overflow-y:auto;position:fixed;right:0;top:var(--appbar-height)}.page{margin:0 auto;max-width:960px;padding:32px 28px 60px}.page-header{margin-bottom:28px}.page-title{color:var(--text);font-size:22px;font-weight:650;letter-spacing:-.02em}.page-subtitle{color:var(--text-muted);font-size:13.5px;margin-top:4px}.page-header-row{align-items:flex-start;display:flex;gap:16px;justify-content:space-between}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.card-header{align-items:center;border-bottom:1px solid var(--border);display:flex;gap:12px;justify-content:space-between;padding:16px 20px}.card-title{color:var(--text);font-size:14px;font-weight:600}.card-body{padding:20px}.card-footer{align-items:center;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;padding:12px 20px}.stats-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));margin-bottom:24px}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:16px 18px}.stat-label{color:var(--text-muted);font-size:11.5px;font-weight:500;letter-spacing:.05em;margin-bottom:6px;text-transform:uppercase}.stat-value{color:var(--text);font-size:26px;font-weight:700;letter-spacing:-.03em;line-height:1}.stat-sub{color:var(--text-muted);font-size:12px;margin-top:4px}.progress-track{background:var(--border);border-radius:999px;height:8px;overflow:hidden;width:100%}.progress-fill{background:var(--primary);border-radius:inherit;height:100%;transition:width .3s ease}.progress-fill.success{background:var(--success)}.progress-fill.danger{background:var(--danger)}.progress-meta{color:var(--text-muted);display:flex;font-size:12px;justify-content:space-between;margin-top:6px}.badge{align-items:center;border:1px solid transparent;border-radius:999px;display:inline-flex;flex-shrink:0;font-size:11.5px;font-weight:500;gap:5px;max-width:180px;overflow:hidden;padding:2px 8px;text-overflow:ellipsis;white-space:nowrap}.badge-dot{border-radius:50%;flex-shrink:0;height:6px;width:6px}.badge.passed{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}.badge.failed{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.badge.upcoming{background:var(--surface-raised);border-color:var(--border);color:var(--text-muted)}.badge.resit{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.badge.danger{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.badge.warning{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.badge.info{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}.badge.neutral{background:var(--surface-raised);border-color:var(--border);color:var(--text-muted)}.badge.positive{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}.badge.primary{background:var(--primary-light);border-color:var(--primary-border);color:var(--primary)}.table-wrap{overflow-x:auto}table{border-collapse:collapse;font-size:13.5px;width:100%}thead th{color:var(--text-muted);font-size:11.5px;font-weight:600;letter-spacing:.05em;padding:10px 14px;text-align:left;text-transform:uppercase;white-space:nowrap}tbody tr,thead th{border-bottom:1px solid var(--border)}tbody tr{transition:background 80ms}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:var(--surface-raised)}tbody td{padding:12px 14px;vertical-align:middle}.td-name{color:var(--text);font-weight:500}.td-meta{font-size:12px;margin-top:1px}.td-meta,.td-muted{color:var(--text-muted)}.critical-dot{background:var(--danger);border-radius:50%;display:inline-block;flex-shrink:0;height:6px;margin-right:6px;vertical-align:middle;width:6px}.btn{align-items:center;border:1px solid transparent;border-radius:var(--radius);cursor:pointer;display:inline-flex;font-size:13px;font-weight:500;gap:6px;line-height:1.4;padding:7px 14px;transition:background .12s,border-color .12s,color .12s;white-space:nowrap}.btn:disabled{cursor:not-allowed;opacity:.45}.btn-primary:hover:not(:disabled){background:var(--primary-hover);border-color:var(--primary-hover)}.btn-ghost{background:transparent;border-color:var(--border);color:var(--text-muted)}.btn-ghost:hover:not(:disabled){background:var(--surface-raised);border-color:var(--border-strong);color:var(--text)}.btn-danger{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.btn-danger:hover:not(:disabled){background:var(--danger);border-color:var(--danger);color:#fff}.btn-sm{border-radius:var(--radius-sm);font-size:12px;padding:4px 10px}.btn-icon{height:30px;justify-content:center;padding:6px;width:30px}.field{display:flex;flex-direction:column;gap:5px}.field-label{color:var(--text-muted);font-size:12px;font-weight:500;letter-spacing:.04em;text-transform:uppercase}.input,.select,.textarea{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-size:13.5px;outline:none;padding:8px 11px;transition:border-color .12s,box-shadow .12s;width:100%}.input:focus,.select:focus,.textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1a52461f}.textarea{min-height:72px;resize:vertical}.select{cursor:pointer}.modal-backdrop{align-items:center;background:#00000059;display:flex;inset:0;justify-content:center;padding:20px;position:fixed;z-index:200}.modal{border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);max-height:calc(100vh - 60px);overflow-y:auto;width:min(520px,100%)}.modal,.modal-header{background:var(--surface)}.modal-header{align-items:center;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;padding:18px 22px;position:sticky;top:0;z-index:1}.modal-title{font-size:15px;font-weight:650;letter-spacing:-.01em}.modal-close{align-items:center;background:transparent;border:1px solid var(--border);border-radius:var(--radius);color:var(--text-muted);cursor:pointer;display:flex;flex-shrink:0;font-size:15px;height:28px;justify-content:center;transition:background .1s;width:28px}.modal-close:hover{background:var(--surface-raised);color:var(--text)}.modal-body{padding:22px}.modal-footer{align-items:center;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;padding:14px 22px}.divider{border:none;border-top:1px solid var(--border);margin:18px 0}.alert{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-muted);font-size:13px;padding:12px 14px}.alert.danger{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.alert.warning{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.alert.success{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}.gate-list{display:flex;flex-direction:column;gap:1px}.gate-row{align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;gap:16px;justify-content:space-between;padding:14px 18px}.gate-row:first-child{border-radius:var(--radius) var(--radius) 0 0}.gate-row:last-child{border-radius:0 0 var(--radius) var(--radius)}.gate-row+.gate-row{border-radius:0;border-top:none}.gate-row:first-child:last-child{border-radius:var(--radius)}.gate-check{align-items:center;border:2px solid var(--border);border-radius:50%;display:flex;flex-shrink:0;font-size:11px;height:20px;justify-content:center;width:20px}.gate-check.resolved{background:var(--success);border-color:var(--success);color:#fff}.gate-check.unresolved{border-color:var(--border-strong)}.gate-label{font-size:13.5px;font-weight:500}.gate-row-with-bar{align-items:flex-start}.gate-row-with-bar .gate-check{margin-top:2px}.gate-label-col{display:flex;flex:1;flex-direction:column;gap:6px;min-width:0}.gate-progress-bar-wrap{align-items:center;display:flex;gap:8px}.gate-progress-track{background:var(--surface-raised);border-radius:3px;flex:1;height:5px;max-width:240px;overflow:hidden}.gate-progress-fill{background:var(--primary);border-radius:3px;height:100%;transition:width .3s ease}.gate-progress-fill.success{background:var(--success)}.gate-progress-label{color:var(--text-muted);font-size:11.5px;white-space:nowrap}.grade-needed-hint{border:1px solid;border-radius:var(--radius);font-size:12px;font-weight:500;margin-top:6px;padding:4px 10px}.grade-needed-hint.passing{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}.grade-needed-hint.failing{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.risk-badge{border:1px solid;border-radius:999px;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.03em;padding:2px 8px;text-transform:uppercase;white-space:nowrap}.risk-badge.risk-critical{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.risk-badge.risk-high{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.risk-badge.risk-medium{background:#fef9ec;border-color:#f0d070;color:#7a5c00}.risk-badge.risk-low{background:var(--surface-raised);border-color:var(--border);color:var(--text-muted)}.period-pressure-row{align-items:center;display:flex;gap:10px}.period-pressure-label{flex-shrink:0;font-size:12.5px;font-weight:500;width:36px}.period-pressure-track{background:var(--surface-raised);border-radius:4px;flex:1;height:8px;overflow:hidden}.period-pressure-fill{border-radius:4px;height:100%;transition:width .3s ease}.period-pressure-fill.low{background:var(--success)}.period-pressure-fill.medium{background:var(--warning)}.period-pressure-fill.high{background:var(--danger)}.period-pressure-ects{flex-shrink:0;font-size:12.5px;font-weight:600;text-align:right;width:52px}.min-path-card{background:var(--surface);border:1px solid var(--danger-border);border-radius:var(--radius);margin-bottom:20px;overflow:hidden}.min-path-header{align-items:center;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;padding:10px 16px}.min-path-title{color:var(--danger-text);font-size:13px;font-weight:600}.min-path-body{display:flex;flex-direction:column;gap:0}.min-path-row{align-items:flex-start;border-bottom:1px solid var(--border);display:flex;gap:12px;padding:10px 16px}.min-path-row:last-child{border-bottom:none}.min-path-row-label{font-size:11.5px;font-weight:600;min-width:72px;padding-top:3px;white-space:nowrap}.min-path-row-label.danger{color:var(--danger-text)}.min-path-row-label.warning{color:var(--warning-text)}.min-path-chips{display:flex;flex-wrap:wrap;gap:6px}.min-chip{border:1px solid;border-radius:20px;font-size:12px;font-weight:500;padding:3px 10px;white-space:nowrap}.min-chip-danger{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.min-chip-warning{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.worst-case-banner{align-items:center;border:1px solid;border-radius:var(--radius);display:flex;font-size:13px;gap:12px;margin-bottom:20px;padding:10px 16px}.worst-case-banner.floor-safe{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}.worst-case-banner.floor-risk{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.worst-case-icon{align-items:center;border-radius:50%;display:flex;flex-shrink:0;font-size:11px;font-weight:700;height:20px;justify-content:center;width:20px}.floor-safe .worst-case-icon{background:var(--success);color:#fff}.floor-risk .worst-case-icon{background:var(--danger);color:#fff}.worst-case-body{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:6px}.worst-case-label{font-weight:500}.worst-case-verdict{opacity:.85}.priority-list{display:flex;flex-direction:column}.priority-row{align-items:center;border-bottom:1px solid var(--border);cursor:pointer;display:flex;gap:12px;padding:10px 18px;transition:background .12s}.priority-row:last-child{border-bottom:none}.priority-rank,.priority-row:hover{background:var(--surface-raised)}.priority-rank{align-items:center;border:1px solid var(--border);border-radius:50%;color:var(--text-muted);display:flex;flex-shrink:0;font-size:11px;font-weight:600;height:22px;justify-content:center;width:22px}.urgency-critical .priority-rank{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.urgency-high .priority-rank{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.priority-info{display:flex;flex:1;flex-direction:column;gap:2px;min-width:0}.priority-name{font-size:13.5px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.priority-reason{color:var(--text-muted);font-size:11.5px}.urgency-critical .priority-reason{color:var(--danger-text);font-weight:500}.urgency-high .priority-reason{color:var(--warning-text)}.priority-right{align-items:flex-end;display:flex;flex-direction:column;flex-shrink:0;gap:2px}.priority-days{background:var(--surface-raised);border:1px solid var(--border);border-radius:4px;color:var(--text-muted);font-size:12px;font-weight:600;padding:1px 6px}.priority-days.days-soon{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.priority-days.days-urgent{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.planner-page{--planner-page-gutter:20px;margin:0;max-width:none;padding:12px var(--planner-page-gutter) 32px}.planner-toolbar{align-items:center;border-bottom:1px solid hsla(38,19%,88%,.95);display:flex;gap:16px;justify-content:space-between;margin-bottom:14px;margin-inline:calc(var(--planner-page-gutter)*-1);padding:0 var(--planner-page-gutter) 12px}.planner-title-wrap{align-items:center;display:flex;flex-wrap:wrap;gap:14px}.planner-page .page-title{font-size:18px;font-weight:700}.planner-tabs-inline{transform:none}.planner-header-actions{align-items:center;display:flex;flex-shrink:0;gap:10px}.planner-tabs{align-items:center;background:#fff;border:1px solid hsla(40,15%,84%,.95);border-radius:999px;display:inline-flex;gap:4px;padding:3px}.planner-tab{background:transparent;border:none;border-radius:999px;color:var(--text-muted);cursor:pointer;font-size:11.5px;font-weight:700;padding:6px 11px;transition:background .12s,color .12s}.planner-tab:hover{color:var(--text)}.planner-tab.active{background:var(--primary);color:#fff}.planner-toolbar-btn{background:#fff;border-radius:10px}.planner-overview-section{border-bottom:1px solid hsla(38,19%,88%,.95);margin-inline:calc(var(--planner-page-gutter)*-1);margin-bottom:14px;padding:16px var(--planner-page-gutter)}.planner-overview{display:grid;gap:14px;grid-template-columns:minmax(260px,1.1fr) minmax(260px,1.1fr) minmax(360px,1.6fr)}.planner-overview-card,.planner-overview-stats{background:#fff;border:1px solid hsla(40,13%,87%,.95);border-radius:14px;min-height:112px}.planner-overview-card{padding:16px 18px}.planner-overview-status{display:flex;flex-direction:column;justify-content:space-between}.planner-overview-status.status-positive{background:linear-gradient(180deg,#fbfefc,#fff);border-color:#d5e6dc}.planner-overview-status.status-warning{background:linear-gradient(180deg,#fffdfa,#fff);border-color:#f0dfb7}.planner-overview-status.status-neutral{background:linear-gradient(180deg,#fbfbfa,#fff);border-color:#e2dfdaf2}.planner-overview-label{color:var(--text-subtle);font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.planner-overview-value{color:var(--text);font-size:28px;font-weight:700;letter-spacing:-.03em;line-height:1.05;margin-top:8px}.planner-overview-meta{margin-top:14px}.planner-overview-pill{align-items:center;background:#ffffffeb;border:1px solid hsla(40,15%,84%,.95);border-radius:999px;color:var(--text-muted);display:inline-flex;font-size:11.5px;font-weight:700;min-height:28px;padding:0 11px}.planner-overview-stats{display:grid;gap:0;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(2,minmax(56px,1fr));overflow:hidden}.planner-overview-stats.is-actual{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(220px,1.15fr);grid-template-rows:minmax(112px,1fr)}.planner-mini-stat{border-bottom:1px solid hsla(38,19%,88%,.95);border-right:1px solid hsla(38,19%,88%,.95);display:flex;flex-direction:column;gap:8px;justify-content:center;min-height:56px;padding:16px 18px}.planner-overview-stats.is-planned .planner-mini-stat:nth-child(3n){border-right:none}.planner-overview-stats.is-planned .planner-mini-stat:nth-last-child(-n+3){border-bottom:none}.planner-overview-stats.is-actual .planner-mini-stat{border-bottom:none;min-height:112px}.planner-overview-stats.is-actual .planner-mini-stat:last-child{border-right:none}.planner-mini-stat.is-positive{background:#fbfefc}.planner-mini-stat.is-warning{background:#fffdfa}.planner-mini-stat.is-emphasis{gap:12px;grid-row:span 2;justify-content:center}.planner-overview-stats.is-actual .planner-mini-stat.is-emphasis{grid-row:auto;min-height:112px}.planner-mini-label{color:var(--text-subtle);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.planner-mini-value{color:var(--text);font-size:22px;font-weight:700;letter-spacing:-.03em;line-height:1}.planner-mini-stat.is-emphasis .planner-mini-value{font-size:46px;letter-spacing:-.05em;line-height:.9}.planner-controls{align-items:center;border-bottom:1px solid hsla(40,13%,87%,.95);display:flex;gap:16px;justify-content:space-between;margin-inline:calc(var(--planner-page-gutter)*-1);margin-bottom:12px;padding:0 var(--planner-page-gutter) 14px}.planner-search{align-items:center;background:#fff;border:1px solid hsla(40,15%,84%,.95);border-radius:12px;box-shadow:0 1px 2px #141d1a08;color:var(--text-subtle);display:flex;gap:10px;height:42px;max-width:380px;min-width:280px;padding:0 14px;width:100%}.planner-search svg{flex-shrink:0;height:15px;width:15px}.planner-search input{background:transparent;border:none;color:var(--text);font-size:13px;outline:none;width:100%}.planner-summary-row{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.planner-summary-chip{align-items:center;background:#fff;border:1px solid hsla(40,15%,84%,.95);border-radius:10px;color:var(--text-muted);display:inline-flex;font-size:11.5px;font-weight:700;height:30px;justify-content:center;padding:0 12px}.planner-summary-chip.strong{color:var(--text)}.planner-summary-chip.positive{background:#f8fdf9;border-color:#d5e6dc;color:var(--success-text)}.planner-summary-chip.warning{background:#fffdfa;border-color:#f0dfb7;color:var(--warning-text)}.planner-board{align-items:start;display:grid;gap:14px;grid-template-columns:repeat(5,minmax(248px,1fr));margin-bottom:18px;overflow-x:auto;padding:4px 0 8px}.planner-lane{background:#f6f7f9;border:1px solid hsla(38,19%,88%,.95);border-radius:16px;min-height:620px;overflow:hidden;padding:10px;transition:border-color .12s,box-shadow .12s,transform .12s}.planner-lane.lane-current{background:#f7f8f6}.planner-lane.lane-resit{background:#fbf8f2}.planner-lane.lane-none{background:#faf6f4}.planner-lane.lane-other{background:#f5f6f9}.planner-lane.drag-over{border-color:var(--primary);box-shadow:0 0 0 3px #1a524614;transform:translateY(-1px)}.planner-lane-header{align-items:flex-start;border-bottom:1px solid hsla(38,19%,88%,.9);display:flex;gap:12px;justify-content:space-between;margin:-10px -10px 14px;padding:14px 14px 12px}.planner-lane-heading{min-width:0}.planner-lane-heading-top{align-items:center;display:flex;gap:8px}.planner-lane-dot{border-radius:50%;flex-shrink:0;height:8px;width:8px}.planner-lane-dot.dot-current{background:#2d6a4f}.planner-lane-dot.dot-resit{background:#b45309}.planner-lane-dot.dot-none{background:#c0392b}.planner-lane-dot.dot-other{background:#6e7080}.planner-lane-title{color:var(--text);font-size:14px;font-weight:700}.planner-lane-count-inline{color:var(--text-muted);font-size:11px;font-weight:600}.planner-lane-subtitle{color:var(--text-muted);font-size:11.5px;line-height:1.45;margin-top:5px}.planner-lane-meta{align-items:center;display:flex;flex-shrink:0;gap:8px}.planner-lane-ects{color:var(--text-muted);font-size:11px;font-weight:700}.planner-lane-empty{background:#ffffffd6;border:1px dashed hsla(38,11%,71%,.95);border-radius:12px;color:var(--text-muted);font-size:12px;padding:18px 14px;text-align:center}.planner-card{background:#fff;border:1px solid hsla(36,19%,89%,.98);border-radius:12px;box-shadow:0 4px 12px #141d1a0a;cursor:pointer;margin-bottom:12px;overflow:hidden;padding:12px 0 0;transition:transform .12s,box-shadow .12s,border-color .12s}.planner-card[draggable=true]{cursor:grab}.planner-card:last-child{margin-bottom:0}.planner-card:hover{box-shadow:0 10px 20px #141d1a14;transform:translateY(-1px)}.planner-card.is-dragging{opacity:.62;transform:rotate(.6deg)}.planner-card.card-current{border-color:#b4d0c6f2}.planner-card.card-resit{border-color:#f1d398f2}.planner-card.card-none{border-color:#f0c5c1f2}.planner-card-top{align-items:flex-start;display:flex;gap:10px;justify-content:space-between;margin-bottom:8px;padding:0 12px}.planner-card-title{align-items:center;color:var(--text);display:flex;font-size:14px;font-weight:700;gap:6px;line-height:1.35}.planner-card-state{align-items:flex-end;display:flex;flex-direction:column;flex-shrink:0;gap:4px}.planner-card-state-pill{align-items:center;border:1px solid hsla(40,15%,84%,.95);border-radius:8px;display:inline-flex;font-size:11px;font-weight:700;line-height:1;padding:4px 8px}.planner-card-state-pill.state-current{background:#fffaf1;border-color:#f0dfb7;color:var(--warning-text)}.planner-card-state-pill.state-resit{background:#fff6eb;border-color:#f3d2a0;color:var(--warning-text)}.planner-card-state-pill.state-retired{background:#f7f5f2;border-color:#dcd8d0f2;color:var(--text-muted)}.planner-card-state-note{color:var(--text-subtle);font-size:10.5px;font-weight:600}.planner-card-facts{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-bottom:10px;padding:0 12px}.planner-card-fact{align-items:center;color:var(--text-muted);display:inline-flex;font-size:11.5px;font-weight:600;gap:5px}.planner-card-fact svg{color:var(--text-subtle);height:12px;width:12px}.planner-card-session{border-bottom:1px solid hsla(38,19%,88%,.95);border-top:1px solid hsla(38,19%,88%,.95);display:flex;flex-direction:column;gap:8px;margin-bottom:12px;padding:10px 12px}.planner-session-line{align-items:center;display:flex;gap:10px;justify-content:space-between}.planner-session-label{align-items:center;color:var(--text-subtle);display:inline-flex;font-size:11px;font-weight:700;gap:5px}.planner-session-label svg{height:12px;width:12px}.planner-session-value{color:var(--text);font-size:12.5px;font-weight:600;text-align:right}.planner-grade-row{align-items:center;display:flex;gap:10px;justify-content:space-between;margin-bottom:12px;padding:0 12px}.planner-grade-row .field-label{color:var(--text-subtle);font-size:11px;line-height:1.35}.planner-outcome-row{display:grid;gap:6px;grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:12px;padding:0 12px}.planner-outcome-btn{background:#fbfaf8;border:1px solid hsla(40,15%,84%,.95);border-radius:10px;color:var(--text-muted);cursor:pointer;flex:1;font-size:11.5px;font-weight:700;padding:9px 10px;transition:background .12s,color .12s,border-color .12s}.planner-outcome-btn:hover{background:#fff;color:var(--text)}.planner-outcome-btn.active{background:#eff6f2;border-color:var(--primary-border);color:var(--primary)}.planner-grade-label{align-items:center;display:inline-flex;gap:6px}.planner-grade-label svg{height:12px;width:12px}.planner-grade-input{border-radius:10px;height:34px;text-align:right;width:94px}.planner-card-footer{align-items:center;display:flex;gap:10px;justify-content:space-between;margin-bottom:10px;padding:0 12px}.planner-card-status{color:var(--text-muted);font-size:11px;font-weight:500;line-height:1.45}.planner-card-footer.actual-only{margin-bottom:0}.planner-card-actions{border-top:1px solid hsla(38,19%,88%,.95);display:flex;flex-wrap:wrap;gap:6px;padding:10px 12px 12px}.planner-action-btn{background:#fbfaf8;border:1px solid hsla(40,15%,84%,.95);border-radius:8px;color:var(--text-muted);cursor:pointer;font-size:11.5px;font-weight:700;padding:6px 10px;transition:background .12s,color .12s,border-color .12s}.planner-action-btn:hover{background:#fff;color:var(--text)}.planner-action-btn.active{background:#eff6f2;border-color:var(--primary-border);color:var(--primary)}@media(max-width:1080px){.planner-page{--planner-page-gutter:16px;padding:10px var(--planner-page-gutter) 24px}.planner-overview{grid-template-columns:repeat(2,minmax(0,1fr))}.planner-overview-stats{grid-column:1/-1}.planner-overview-stats.is-actual{grid-template-columns:repeat(3,minmax(0,1fr))}.planner-controls{align-items:stretch;flex-direction:column}.planner-board{grid-template-columns:repeat(5,minmax(240px,1fr))}.planner-lane{min-height:0}}@media(max-width:720px){.planner-controls,.planner-toolbar{flex-direction:column}.planner-overview{grid-template-columns:1fr}.planner-overview-stats{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto}.planner-mini-stat.is-emphasis{grid-row:auto}.planner-overview-stats.is-actual{grid-template-columns:1fr}.planner-overview-stats.is-actual .planner-mini-stat{border-bottom:1px solid hsla(38,19%,88%,.95);border-right:none;min-height:0}.planner-overview-stats.is-actual .planner-mini-stat:last-child{border-bottom:none}.planner-mini-stat:nth-child(3n){border-right:1px solid hsla(38,19%,88%,.95)}.planner-mini-stat:nth-child(2n){border-right:none}.planner-mini-stat:nth-last-child(-n+3){border-bottom:1px solid hsla(38,19%,88%,.95)}.planner-mini-stat:nth-last-child(-n+2){border-bottom:none}.planner-mini-stat.is-emphasis .planner-mini-value{font-size:34px}.planner-header-actions{align-items:flex-start}.planner-card-footer,.planner-card-top,.planner-grade-row,.planner-lane-header,.planner-session-line{align-items:flex-start;flex-direction:column}.planner-card-badges,.planner-lane-meta{justify-content:flex-start;max-width:none}.planner-session-value{text-align:left}}.timeline{display:flex;flex-direction:column;position:relative}.timeline:before{background:var(--border);bottom:8px;content:"";left:20px;position:absolute;top:8px;width:1px}.timeline-entry{display:flex;gap:16px;padding-bottom:20px;position:relative}.timeline-entry:last-child{padding-bottom:0}.timeline-dot{background:var(--border-strong);border:2px solid var(--bg);border-radius:50%;flex-shrink:0;height:10px;margin-left:16px;margin-top:5px;position:relative;width:10px;z-index:1}.timeline-dot.passed{background:var(--success)}.timeline-dot.failed{background:var(--danger)}.timeline-dot.upcoming{background:var(--border-strong)}.timeline-dot.danger{background:var(--danger)}.timeline-dot.warning{background:var(--warning)}.timeline-dot.info{background:var(--info)}.timeline-dot.neutral{background:var(--border-strong)}.timeline-content{flex:1;padding-top:1px}.timeline-date{color:var(--text-muted);font-size:11.5px;font-weight:600;letter-spacing:.05em;margin-bottom:4px;text-transform:uppercase}.timeline-title{color:var(--text);font-size:13.5px;font-weight:500}.timeline-detail{color:var(--text-muted);font-size:12.5px;margin-top:2px}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-5{gap:20px}.gap-6{gap:24px}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.mt-5{margin-top:20px}.mt-6{margin-top:24px}.text-muted{color:var(--text-muted)}.text-sm{font-size:12.5px}.font-medium{font-weight:500}.font-semibold{font-weight:600}.w-full{width:100%}.grid-2{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.section-title{color:var(--text-muted);font-size:11.5px;font-weight:600;letter-spacing:.06em;margin-bottom:10px;text-transform:uppercase}.empty-state{color:var(--text-muted);font-size:13.5px;padding:40px 20px;text-align:center}.progression-banner{align-items:center;border:1px solid;border-radius:var(--radius-lg);display:flex;gap:16px;justify-content:space-between;margin-bottom:24px;padding:18px 22px}.progression-banner.possible{background:var(--success-bg);border-color:var(--success-border)}.progression-banner.not-possible{background:var(--surface);border-color:var(--border)}.progression-banner-label{font-size:12px;font-weight:600;letter-spacing:.06em;margin-bottom:2px;text-transform:uppercase}.progression-banner.possible .progression-banner-label{color:var(--success)}.progression-banner.not-possible .progression-banner-label{color:var(--text-muted)}.progression-banner-title{font-size:17px;font-weight:700;letter-spacing:-.02em}.progression-banner.possible .progression-banner-title{color:var(--success-text)}.progression-banner.not-possible .progression-banner-title{color:var(--text)}.panel-backdrop{animation:panel-backdrop-in .16s ease;background:#00000047;inset:0;position:fixed;z-index:300}.panel{animation:panel-slide-in .22s cubic-bezier(.2,.8,.2,1);background:var(--surface);bottom:0;box-shadow:-4px 0 30px #00000024;display:flex;flex-direction:column;overflow:hidden;position:fixed;right:0;top:0;width:min(480px,100vw);z-index:301}@keyframes panel-backdrop-in{0%{opacity:0}to{opacity:1}}@keyframes panel-slide-in{0%{opacity:.72;transform:translate(24px)}to{opacity:1;transform:translate(0)}}.panel-header{align-items:flex-start;border-bottom:1px solid var(--border);display:flex;flex-shrink:0;justify-content:space-between;padding:18px 22px}.panel-title{color:var(--text);font-size:16px;font-weight:650;letter-spacing:-.015em;line-height:1.3}.panel-body{flex:1;overflow-y:auto;padding:22px}.panel-footer{align-items:center;border-top:1px solid var(--border);display:flex;flex-shrink:0;gap:8px;justify-content:flex-end;padding:14px 22px}.panel-section{margin-bottom:20px}.panel-section-title{color:var(--text-muted);font-size:11px;font-weight:600;letter-spacing:.07em;margin-bottom:10px;text-transform:uppercase}.active-attempt-card{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px}.attempt-history{display:flex;flex-direction:column}.attempt-row{align-items:flex-start;border-bottom:1px solid var(--border);display:flex;font-size:13px;gap:12px;padding:10px 0}.attempt-row:last-child{border-bottom:none}.attempt-dot{background:var(--border-strong);border-radius:50%;flex-shrink:0;height:10px;margin-top:4px;width:10px}.attempt-dot.passed{background:var(--success)}.attempt-dot.failed{background:var(--danger)}.attempt-dot.upcoming{background:var(--primary)}.attempt-dot.no-show-dot{background:var(--text-subtle)}.badge.carry-over{background:#fff7ed;border-color:#fed7aa;color:#9a3412}.badge.retired{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.course-row-clickable{cursor:pointer}tbody tr.course-row-clickable:hover{background:var(--surface-raised)}.btn-success{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}.btn-success:hover:not(:disabled){background:var(--success);border-color:var(--success);color:#fff}.btn-danger-soft{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.btn-danger-soft:hover:not(:disabled){background:var(--danger);border-color:var(--danger);color:#fff}.year-header{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:10px}.year-label{color:var(--text);font-size:15px;font-weight:650;letter-spacing:-.01em}.text-success{color:var(--success)}.text-danger{color:var(--danger)}.text-warning{color:var(--warning)}.text-subtle{color:var(--text-subtle)}.grade-pass{color:var(--success)}.grade-fail{color:var(--danger)}.status-chip{align-items:center;border-radius:999px;display:inline-flex;font-size:13px;font-weight:500;gap:5px;padding:2px 8px 2px 5px}.status-chip:before{border-radius:50%;content:"";flex-shrink:0;height:6px;width:6px}.status-chip.passed{background:var(--success-bg);color:var(--success-text)}.status-chip.passed:before{background:var(--success)}.status-chip.failed{background:var(--danger-bg);color:var(--danger-text)}.status-chip.failed:before{background:var(--danger)}.status-chip.upcoming{background:var(--surface-raised);color:var(--text-muted)}.status-chip.upcoming:before{background:var(--border-strong)}.status-chip.carry-over{background:var(--warning-bg);color:var(--warning-text)}.status-chip.carry-over:before{background:var(--warning)}.status-chip.resit{background:var(--info-bg);color:var(--info-text)}.status-chip.resit:before{background:var(--info)}.status-chip.retired{background:var(--danger-bg);color:var(--danger-text);opacity:.75}.status-chip.retired:before{background:var(--danger)}.status-chip.neutral{background:var(--surface-raised);color:var(--text-muted)}.status-chip.neutral:before{background:var(--border-strong)}.panel-meta-line{align-items:center;color:var(--text-muted);display:flex;flex-wrap:wrap;font-size:12px;gap:4px;margin-bottom:6px}.panel-meta-code{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:ui-monospace,Cascadia Code,Fira Code,monospace;font-size:11.5px;font-weight:600;padding:1px 6px}.panel-meta-sep{color:var(--border-strong);margin:0 1px}.panel-status-row{align-items:center;display:flex;gap:10px;margin-top:8px}.panel-critical-flag{align-items:center;color:var(--danger);display:inline-flex;font-size:11.5px;font-weight:600;gap:4px;letter-spacing:.01em}.panel-section-meta{color:var(--text-muted);font-size:11.5px;font-weight:400;margin-left:6px}.passed-summary{align-items:center;background:var(--success-bg);border:1px solid var(--success-border);border-radius:var(--radius);display:flex;gap:16px;padding:12px 16px}.passed-summary-grade{color:var(--success-text);flex-shrink:0;font-size:28px;font-weight:700;line-height:1}.attempt-row-main{align-items:center;display:flex;flex-wrap:wrap;gap:6px}.attempt-year{color:var(--text);font-size:13px;font-weight:600}.attempt-type-label{font-style:italic}.attempt-row-sub,.attempt-type-label{color:var(--text-muted);font-size:12px}.attempt-row-sub{margin-top:2px}.course-info-grid{display:grid;gap:10px;grid-template-columns:1fr 1fr}.toggle-field{align-items:center;display:flex;gap:12px;justify-content:space-between;padding:10px 0 0}.toggle-switch{display:inline-block;flex-shrink:0;position:relative}.toggle-switch input{height:0;opacity:0;position:absolute;width:0}.toggle-track{background:var(--border-strong);border-radius:999px;cursor:pointer;display:block;height:20px;position:relative;transition:background .15s;width:36px}.toggle-track:after{background:#fff;border-radius:50%;box-shadow:0 1px 2px #0003;content:"";height:14px;left:3px;position:absolute;top:3px;transition:transform .15s;width:14px}.toggle-switch input:checked+.toggle-track{background:var(--primary)}.toggle-switch input:checked+.toggle-track:after{transform:translate(16px)}.year-progress-track{background:var(--border);border-radius:999px;flex:1;height:6px;max-width:200px;overflow:hidden}.year-progress-fill{background:var(--primary);border-radius:999px;height:100%;transition:width .3s ease}.year-progress-fill.complete{background:var(--success)}.year-carry-tag{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-subtle);font-size:10px;font-weight:600;letter-spacing:.02em;padding:0 4px}.filter-primary{align-items:center;display:flex;flex-wrap:wrap;gap:3px;margin-bottom:8px}.filter-tab{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--radius);color:var(--text-muted);cursor:pointer;display:inline-flex;font-size:13px;font-weight:500;gap:7px;padding:6px 14px;transition:background 80ms,color 80ms,border-color 80ms;white-space:nowrap}.filter-tab:hover{background:var(--surface);border-color:var(--border);color:var(--text)}.filter-tab.active{background:var(--primary);border-color:var(--primary);color:#fff}.filter-tab-count{background:#ffffff26;border-radius:999px;font-size:11px;font-weight:700;line-height:1.6;opacity:.65;padding:0 5px}.filter-tab:not(.active) .filter-tab-count{background:var(--surface-raised);color:var(--text-muted);opacity:1}.filter-secondary{align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-wrap:wrap;gap:4px;margin-bottom:16px;padding:5px 8px}.filter-group-label{color:var(--text-subtle);flex-shrink:0;font-size:11px;font-weight:600;letter-spacing:.06em;padding:0 4px;text-transform:uppercase;white-space:nowrap}.filter-bar{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);gap:6px;margin-bottom:16px;padding:6px 8px}.filter-bar,.filter-bar-group{align-items:center;display:flex;flex-wrap:wrap}.filter-bar-group{gap:3px}.filter-bar-divider{background:var(--border);flex-shrink:0;height:18px;margin:0 4px;width:1px}.filter-pill{align-items:center;background:transparent;border:none;border-radius:var(--radius);color:var(--text-muted);cursor:pointer;display:inline-flex;font-size:12.5px;font-weight:500;gap:5px;padding:4px 10px;transition:background 80ms,color 80ms;white-space:nowrap}.filter-pill:hover{background:var(--surface-raised);color:var(--text)}.filter-pill.active{background:var(--primary);color:#fff}.filter-pill-count{font-size:11px;font-weight:600;line-height:1;opacity:.65}.filter-pill.active .filter-pill-count{opacity:.8}.filter-reset{background:transparent;border:none;border-radius:var(--radius);color:var(--text-subtle);cursor:pointer;font-size:12px;font-weight:500;margin-left:auto;padding:4px 8px;transition:color 80ms,background 80ms;white-space:nowrap}.filter-reset:hover{background:var(--danger-bg);color:var(--danger)}.th-sortable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.th-sortable:hover{color:var(--text)}.sort-icon{color:var(--text-subtle);font-size:11px;margin-left:3px}.credit-gate-track{background:var(--border);border-radius:999px;height:10px;margin-bottom:10px;overflow:visible;position:relative}.credit-gate-fill{background:var(--primary);border-radius:999px;height:100%;transition:width .4s ease}.credit-gate-fill.success{background:var(--success)}.credit-gate-marker{background:var(--warning);border-radius:1px;height:calc(100% + 10px);position:absolute;top:-5px;transform:translate(-50%);width:2px}.credit-gate-marker-label{color:var(--warning);font-size:10px;font-weight:700;left:50%;position:absolute;top:-18px;transform:translate(-50%);white-space:nowrap}.credit-gate-legend{align-items:center;color:var(--text-muted);display:flex;flex-wrap:wrap;font-size:12.5px;gap:12px}.credit-gate-legend-gate{color:var(--warning);font-weight:500}.year-summary-rows{display:flex;flex-direction:column;gap:12px;margin-top:4px}.year-summary-row{align-items:center;display:grid;gap:12px;grid-template-columns:130px 1fr 70px 70px}.year-summary-label{align-items:center;display:flex;font-size:13px;font-weight:600;gap:6px}.year-summary-bar-wrap{flex:1}.year-summary-bar-track{background:var(--border);border-radius:999px;height:7px;overflow:visible;position:relative}.year-summary-bar-fill{background:var(--primary);border-radius:999px;height:100%;transition:width .4s ease}.year-summary-bar-fill.success{background:var(--success)}.year-summary-gate-marker{background:var(--warning);border-radius:1px;height:calc(100% + 6px);position:absolute;top:-3px;transform:translate(-50%);width:2px}.year-summary-ects{font-size:12.5px;font-weight:600;text-align:right;white-space:nowrap}.year-summary-gpa{font-size:12px;text-align:right;white-space:nowrap}.period-group-header-row td{background:var(--surface-raised);padding:8px 14px}.period-group-label{color:var(--text-muted);font-size:11.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.attempt-edit-btn{align-items:center;background:transparent;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-subtle);cursor:pointer;display:flex;flex-shrink:0;height:24px;justify-content:center;opacity:.35;transition:opacity .1s,background .1s,color .1s;width:24px}.attempt-row:hover .attempt-edit-btn{opacity:1}.attempt-edit-btn:hover{background:var(--surface-raised);color:var(--text)}.attempt-edit-form{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius);margin-top:8px;padding:10px 12px}.input-sm{font-size:13px;padding:5px 10px;width:140px}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.curriculum-year{margin-bottom:36px}.curriculum-year-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.curriculum-year-title{color:var(--text);font-size:15px;font-weight:650;letter-spacing:-.01em}.curriculum-year-sub{color:var(--text-muted);font-size:12.5px;margin-top:1px}.curriculum-year-meta{align-items:center;display:flex;gap:8px}.curriculum-year-ects{color:var(--text);font-size:13px;font-weight:600}.curriculum-periods{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.period-block{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.period-block.future{opacity:.65}.period-block-header{align-items:center;background:var(--surface-raised);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;padding:7px 12px}.period-block-label{color:var(--text-muted);font-size:11.5px;font-weight:650;letter-spacing:.02em;text-transform:uppercase}.period-block-ects{color:var(--text-subtle);font-size:11px;font-weight:600}.period-block-courses{padding:6px 0}.curriculum-course-row{align-items:center;cursor:pointer;display:flex;gap:8px;justify-content:space-between;padding:5px 12px;transition:background 80ms}.curriculum-course-row:hover{background:var(--surface-raised)}.curriculum-course-row.no-store{cursor:default}.curriculum-course-row.no-store:hover{background:transparent}.curriculum-course-name{color:var(--text);flex:1;font-size:12.5px;line-height:1.35;min-width:0}.curriculum-course-name.muted{color:var(--text-muted);font-style:italic}.cal-page{max-width:1100px}.cal-toolbar{flex-wrap:wrap;gap:10px;margin-bottom:16px}.cal-nav,.cal-toolbar{align-items:center;display:flex}.cal-nav{gap:6px;margin-left:auto}.cal-nav-label{color:var(--text);font-size:13.5px;font-weight:600;min-width:220px;text-align:center}.cal-chip{border-radius:var(--radius-sm);cursor:pointer;display:block;font-size:11.5px;font-weight:500;line-height:1.5;margin-bottom:2px;overflow:hidden;padding:2px 6px;text-overflow:ellipsis;transition:opacity 80ms;white-space:nowrap}.cal-chip:hover{opacity:.75}.cal-chip.passed{background:var(--success-bg);color:var(--success-text)}.cal-chip.failed{background:var(--danger-bg);color:var(--danger-text)}.cal-chip.upcoming{background:var(--primary-light);color:var(--primary)}.cal-chip.warning{background:var(--warning-bg);color:var(--warning-text)}.cal-chip.resit{background:var(--info-bg);color:var(--info-text)}.cal-chip.neutral{background:var(--surface-raised);color:var(--text-muted)}.cal-chip.info{background:var(--info-bg);color:var(--info-text)}.cal-chip.danger{background:var(--danger-bg);color:var(--danger-text)}.today-num{align-items:center;background:var(--primary);border-radius:50%;color:#fff!important;display:inline-flex!important;font-weight:700!important;height:22px;justify-content:center;width:22px}.month-grid-header{background:var(--surface-raised);border:1px solid var(--border);border-bottom:none;border-radius:var(--radius-lg) var(--radius-lg) 0 0;display:grid;grid-template-columns:repeat(7,1fr)}.month-dow{color:var(--text-muted);font-size:11px;font-weight:700;letter-spacing:.06em;padding:8px 4px;text-align:center;text-transform:uppercase}.month-grid-body{background:var(--border);border:1px solid var(--border);border-radius:0 0 var(--radius-lg) var(--radius-lg);display:grid;gap:1px;grid-template-columns:repeat(7,1fr);margin-bottom:24px;overflow:hidden}.month-day-cell{background:var(--surface);min-height:90px;overflow:hidden;padding:6px}.month-day-cell.other-month{background:var(--surface-raised)}.month-day-cell.other-month .month-day-num{opacity:.3}.month-day-cell.is-today{background:#f0f7f4}.month-day-num{color:var(--text-muted);display:block;font-size:12px;font-weight:500;line-height:1.6;margin-bottom:3px}.week-grid{background:var(--border);border:1px solid var(--border);border-radius:var(--radius-lg);display:grid;gap:1px;grid-template-columns:repeat(7,1fr);margin-bottom:24px;min-height:420px;overflow:hidden}.week-day-col{background:var(--surface);display:flex;flex-direction:column}.week-day-col.is-today{background:#f0f7f4}.week-day-header{align-items:center;background:var(--surface-raised);border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:2px;padding:10px 6px 8px}.week-day-col.is-today .week-day-header{background:var(--primary-light)}.week-day-dow{color:var(--text-muted);font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.week-day-num{color:var(--text);font-size:17px;font-weight:600;line-height:1.2}.week-day-month{color:var(--text-muted);font-size:11px;font-weight:500;margin-left:2px}.week-day-body{display:flex;flex:1;flex-direction:column;gap:2px;padding:6px 4px}.week-empty-day{flex:1}.year-cal-grid{display:grid;gap:10px;grid-template-columns:repeat(4,1fr);margin-bottom:24px}.year-month-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-height:80px;padding:10px 12px}.year-month-card.is-current-month{background:var(--primary-light);border-color:var(--primary-border)}.year-month-label{color:var(--text-muted);font-size:11.5px;font-weight:700;letter-spacing:.05em;margin-bottom:6px;text-transform:uppercase}.year-month-card.is-current-month .year-month-label{color:var(--primary)}.year-month-empty{color:var(--text-subtle);font-size:12px}.year-chip-date{font-size:10px;font-weight:700;margin-right:2px;opacity:.65}.tl-group{margin-bottom:20px}.tl-date-label{align-items:center;color:var(--text-muted);display:flex;font-size:12px;font-weight:700;gap:8px;letter-spacing:.05em;margin-bottom:8px;text-transform:uppercase}.tl-past .tl-date-label{color:var(--text-subtle)}.tl-today .tl-date-label{color:var(--primary)}.tl-today-badge{background:var(--primary);border-radius:999px;color:#fff;display:inline-block;font-size:10px;font-weight:700;letter-spacing:.04em;padding:1px 6px}.tl-past{opacity:.6}@media(max-width:900px){.year-cal-grid{grid-template-columns:repeat(3,1fr)}.week-grid{grid-template-columns:repeat(4,1fr)}}@media(max-width:768px){.app-bar-brand,.sidebar{display:none}.main-content{left:0}.page{padding:20px 16px 48px}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-2{grid-template-columns:1fr}}
