.lang-switch{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--bg)}.lang-switch-btn{padding:.35rem .65rem;font-size:.8125rem;font-family:inherit;border:none;background:transparent;color:var(--muted);cursor:pointer}.lang-switch-btn:hover{color:var(--text);background:var(--switch-hover)}.lang-switch-btn.active{color:var(--accent);font-weight:600;background:var(--accent-soft)}.theme-switch{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--bg)}.theme-switch-btn{padding:.35rem .65rem;font-size:.8125rem;font-family:inherit;border:none;background:transparent;color:var(--muted);cursor:pointer}.theme-switch-btn:hover{color:var(--text);background:var(--switch-hover)}.theme-switch-btn.active{color:var(--accent);font-weight:600;background:var(--accent-soft)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem 1.25rem;background:radial-gradient(900px 500px at 80% -10%,var(--login-glow-1),transparent 60%),radial-gradient(900px 500px at -10% 110%,var(--login-glow-2),transparent 60%)}.login-card{position:relative;width:100%;max-width:24rem;background:linear-gradient(160deg,var(--surface),var(--bg-elevated));border:1px solid var(--border);border-radius:var(--radius-xl);padding:2rem 1.75rem 1.85rem;box-shadow:var(--shadow-lg);overflow:hidden;isolation:isolate}.login-card:before{content:"";position:absolute;top:-1px;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.7;z-index:1}.login-card-top{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;margin-bottom:1.25rem}.login-brand{display:flex;align-items:center;gap:.7rem;margin-bottom:1.5rem}.login-brand-text{display:flex;flex-direction:column;line-height:1.1}.login-brand-name{font-size:1.05rem;font-weight:700;letter-spacing:.04em;color:var(--text-strong)}.login-brand-sub{font-size:.7rem;color:var(--muted);letter-spacing:.05em;text-transform:uppercase}.login-card h1{font-size:1.6rem;margin:0 0 .4rem;color:var(--text-strong);letter-spacing:-.015em;font-weight:700}.login-tagline{color:var(--muted-strong);font-size:.9rem;margin:0 0 1.6rem;line-height:1.5}.login-form .label{display:block;font-size:.78rem;font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-bottom:.4rem}.login-form .input{width:100%;padding:.7rem .85rem;margin-bottom:1rem;font-size:.9375rem;font-family:inherit;color:var(--text);background:var(--bg-elevated);border:1px solid var(--border);border-radius:10px;transition:border-color .15s ease,box-shadow .15s ease}.login-form .input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.login-form .select{cursor:pointer}.btn-block{width:100%;margin-top:.5rem;padding:.8rem}.login-google{display:flex;flex-direction:column;align-items:center;gap:.75rem;margin-bottom:.5rem}.google-btn-host{min-height:44px;display:flex;justify-content:center;align-items:center}.login-google-hint{margin:0;font-size:.85rem;text-align:center}.login-divider{display:flex;align-items:center;gap:.75rem;margin:1.5rem 0 1.1rem;color:var(--muted);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase}.login-divider:before,.login-divider:after{content:"";flex:1;height:1px;background:var(--border)}.login-error{margin-top:1rem}.portal-header{position:sticky;top:0;z-index:50;background:var(--header-backdrop);backdrop-filter:saturate(140%) blur(14px);-webkit-backdrop-filter:saturate(140%) blur(14px);border-bottom:1px solid var(--border)}.portal-header-inner{max-width:120rem;margin:0 auto;padding:.75rem 1.5rem;display:flex;align-items:center;justify-content:space-between;gap:1rem}.portal-brand-group{display:flex;align-items:center;gap:1.25rem;min-width:0}.portal-brand{display:inline-flex;align-items:center;gap:.65rem;text-decoration:none;color:inherit;padding:.25rem .4rem;border-radius:var(--radius-sm);transition:background .15s ease}.portal-brand:hover{background:var(--surface);text-decoration:none}.portal-brand-text{display:flex;flex-direction:column;line-height:1.1}.portal-brand-name{font-size:1rem;font-weight:700;color:var(--text-strong);letter-spacing:.04em}.portal-brand-sub{font-size:.7rem;color:var(--muted);letter-spacing:.04em;text-transform:uppercase}.portal-breadcrumb{display:inline-flex;align-items:center;gap:.45rem;font-size:.85rem;color:var(--muted);flex-wrap:wrap;min-width:0}.portal-breadcrumb-link{display:inline-flex;align-items:center;gap:.3rem;color:var(--muted);text-decoration:none;padding:.25rem .55rem;border-radius:999px;transition:color .15s ease,background .15s ease}.portal-breadcrumb-link:hover{color:var(--text);background:var(--surface);text-decoration:none}.portal-breadcrumb-sep{display:inline-flex;color:var(--muted);opacity:.7}.portal-breadcrumb-current{display:inline-flex;align-items:center;font-weight:600;color:var(--text-strong);padding:.25rem .65rem;border-radius:999px;background:var(--surface);border:1px solid var(--border);white-space:nowrap}.portal-breadcrumb-current.tone-cpd{color:var(--tone-cpd);background:var(--tone-cpd-soft);border-color:transparent}.portal-breadcrumb-current.tone-time{color:var(--tone-time);background:var(--tone-time-soft);border-color:transparent}.portal-breadcrumb-current.tone-student{color:var(--tone-student);background:var(--tone-student-soft);border-color:transparent}.portal-breadcrumb-current.tone-subject{color:var(--tone-subject);background:var(--tone-subject-soft);border-color:transparent}.portal-breadcrumb-current.tone-admin{color:var(--tone-admin);background:var(--tone-admin-soft);border-color:transparent}.portal-breadcrumb-current.tone-venue{color:var(--tone-venue);background:var(--tone-venue-soft);border-color:transparent}.portal-header-actions{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;justify-content:flex-end}.portal-user{display:inline-flex;align-items:center;gap:.6rem;padding:.25rem .4rem .25rem .45rem;border-radius:999px;background:var(--surface);border:1px solid var(--border)}.portal-avatar{width:1.85rem;height:1.85rem;border-radius:50%;background:var(--avatar-gradient);color:var(--avatar-fg);font-weight:700;font-size:.78rem;display:inline-flex;align-items:center;justify-content:center;letter-spacing:.02em;flex-shrink:0}.portal-user-meta{display:flex;flex-direction:column;line-height:1.15;max-width:12rem;min-width:0}.portal-user-name{font-size:.82rem;font-weight:600;color:var(--text-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.portal-user-email{font-size:.7rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.portal-logout{display:inline-flex;align-items:center;gap:.3rem;padding:.35rem .65rem;font-size:.78rem;font-weight:500;font-family:inherit;color:var(--muted-strong);background:transparent;border:1px solid var(--border);border-radius:999px;cursor:pointer;transition:color .15s ease,border-color .15s ease,background .15s ease}.portal-logout:hover{color:var(--error);border-color:var(--error-hover-border);background:var(--error-hover-bg)}@media (max-width: 720px){.portal-header-inner{padding:.6rem 1rem;gap:.6rem}.portal-brand-sub,.portal-user-email{display:none}.portal-user-name{max-width:8rem}.portal-logout span{display:none}.portal-logout{padding:.4rem}}.portal-shell{min-height:100vh;display:flex;flex-direction:column}.portal-main{flex:1;width:100%;max-width:80rem;margin:0 auto;padding:3rem 1.5rem 4rem;display:flex;flex-direction:column;gap:2.5rem}.portal-hero{display:flex;flex-direction:column;gap:.5rem}.portal-hero-eyebrow{margin:0;font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.portal-hero-title{margin:0;font-size:clamp(1.75rem,1.4rem + 1.6vw,2.6rem);line-height:1.15;letter-spacing:-.02em;font-weight:700;color:var(--text-strong)}.portal-hero-name{background:var(--brand-gradient);-webkit-background-clip:text;background-clip:text;color:transparent}.portal-hero-sub{margin:.4rem 0 0;color:var(--muted-strong);font-size:1rem;max-width:42rem}.portal-tools{display:flex;flex-direction:column;gap:1.1rem}.portal-tools-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap}.portal-tools-head h2{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.portal-tools-count{font-size:.78rem;color:var(--muted);padding:.2rem .55rem;border-radius:999px;background:var(--surface);border:1px solid var(--border)}.portal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(17.5rem,1fr));gap:1.1rem}.tool-card-link{text-decoration:none;color:inherit;display:block;border-radius:var(--radius-lg);outline:none}.tool-card-link:hover{text-decoration:none}.tool-card-link:focus-visible .tool-card{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--accent)}.tool-card{--tone-color: var(--accent);--tone-soft: var(--accent-soft);position:relative;display:flex;flex-direction:column;gap:1.1rem;padding:1.4rem 1.4rem 1.25rem;height:100%;background:linear-gradient(160deg,var(--surface) 0%,var(--bg-elevated) 100%);border:1px solid var(--border);border-radius:var(--radius-lg);transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease,background .18s ease;overflow:hidden;isolation:isolate}.tool-card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(120% 100% at 0% 0%,var(--tone-soft),transparent 55%);opacity:.7;pointer-events:none;z-index:-1;transition:opacity .18s ease}.tool-card-link:hover .tool-card{transform:translateY(-2px);border-color:var(--tone-color);box-shadow:var(--shadow-md),0 0 0 1px var(--tone-soft)}.tool-card-link:hover .tool-card:before{opacity:1}.tool-card--cpd{--tone-color: var(--tone-cpd);--tone-soft: var(--tone-cpd-soft)}.tool-card--time{--tone-color: var(--tone-time);--tone-soft: var(--tone-time-soft)}.tool-card--student{--tone-color: var(--tone-student);--tone-soft: var(--tone-student-soft)}.tool-card--subject{--tone-color: var(--tone-subject);--tone-soft: var(--tone-subject-soft)}.tool-card--admin{--tone-color: var(--tone-admin);--tone-soft: var(--tone-admin-soft)}.tool-card--venue{--tone-color: var(--tone-venue);--tone-soft: var(--tone-venue-soft)}.tool-card-icon{width:3rem;height:3rem;display:inline-flex;align-items:center;justify-content:center;border-radius:14px;color:var(--tone-color);background:var(--tone-soft);border:1px solid var(--tone-soft)}.tool-card-body{display:flex;flex-direction:column;gap:.55rem}.tool-card-title-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.tool-card-title{margin:0;font-size:1.05rem;font-weight:600;color:var(--text-strong);letter-spacing:-.005em}.tool-card-status{font-size:.68rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:.18rem .5rem;border-radius:999px;white-space:nowrap}.tool-card-status--ok{background:var(--success-badge-bg);color:var(--success-badge-fg)}.tool-card-status--soon{background:var(--surface-2);color:var(--muted-strong);border:1px dashed var(--border-strong)}.tool-card-desc{margin:0;color:var(--muted-strong);font-size:.88rem;line-height:1.5}.tool-card-cta{margin-top:.4rem;display:inline-flex;align-items:center;gap:.4rem;font-size:.85rem;font-weight:600;color:var(--tone-color);transition:gap .18s ease}.tool-card-link:hover .tool-card-cta{gap:.6rem}.tool-card--disabled .tool-card-cta{color:var(--muted)}.tool-card--disabled{filter:saturate(.85)}.portal-footnote{margin-top:1rem;text-align:center;font-size:.75rem;color:var(--muted);letter-spacing:.04em}@media (max-width: 640px){.portal-main{padding:1.75rem 1rem 3rem;gap:1.75rem}.portal-grid{grid-template-columns:1fr}}.hours-view{display:flex;flex-direction:column;gap:1.5rem}.hours-user{color:var(--muted);font-size:.9rem;margin:0 0 .5rem}.hours-group h3{font-size:.9375rem;font-weight:600;color:var(--text);margin:0 0 .5rem}.hours-table{width:100%;max-width:24rem;border-collapse:collapse;font-size:.875rem}.hours-table th,.hours-table td{padding:.4rem .6rem;border:1px solid var(--border);text-align:left}.hours-table th{background:var(--overlay);color:var(--muted)}.hours-table td:last-child{text-align:right;font-variant-numeric:tabular-nums}.course-calendar{margin-top:.5rem}.cal-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:.75rem}.cal-month-title{margin:0;font-size:1.05rem;font-weight:600;flex:1;text-align:center;min-width:10rem}.cal-legend{display:flex;flex-wrap:wrap;gap:.75rem 1.25rem;margin-bottom:.75rem;font-size:.8rem;color:var(--muted)}.cal-legend-item{display:inline-flex;align-items:center;gap:.35rem}.cal-dot{display:inline-block;width:.65rem;height:.65rem;border-radius:2px}.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;background:var(--border);border:1px solid var(--border);border-radius:8px;overflow:hidden}.cal-weekday{background:var(--overlay-strong);padding:.35rem .25rem;text-align:center;font-size:.72rem;font-weight:600;color:var(--muted)}.cal-day{background:var(--surface);min-height:5.5rem;padding:.25rem;display:flex;flex-direction:column;gap:.2rem}.cal-day--pad{background:var(--overlay);min-height:2rem}.cal-day--today .cal-day-num{background:var(--accent-soft);color:var(--text-strong);border-radius:4px}.cal-day-num{font-size:.75rem;font-weight:600;padding:.1rem .25rem;align-self:flex-start}.cal-day-events{list-style:none;margin:0;padding:0;flex:1;overflow:hidden}.cal-event{display:block;width:100%;text-align:left;border:none;border-radius:4px;padding:.15rem .25rem;margin-bottom:.15rem;font-size:.65rem;line-height:1.25;cursor:pointer;font-family:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cal-event-user{font-weight:600}.cal-ev-pending{background:var(--warning-soft);color:var(--text)}.cal-ev-approved{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--text)}.cal-ev-rejected{background:var(--error-soft);color:var(--text)}.cal-more{font-size:.65rem;padding:0 .2rem}.cal-detail{margin-top:1rem;padding:1rem;border:1px solid var(--border);border-radius:8px;background:var(--surface);font-size:.875rem}.cal-detail-head{display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem;margin-bottom:.5rem}.cal-detail-head h4{margin:0;font-size:1rem}.cal-detail-close{border:none;background:transparent;font-size:1.25rem;line-height:1;cursor:pointer;color:var(--muted);padding:0 .25rem}.cal-detail p{margin:.35rem 0}.cal-detail a{color:var(--accent)}@media (max-width: 720px){.cal-day{min-height:4rem}.cal-event{font-size:.6rem}}.dashboard-shell{min-height:100vh;display:flex;flex-direction:column}.dashboard{max-width:min(120rem,calc(100vw - 1.5rem));width:100%;margin:0 auto;padding:1.5rem 1.5rem 2.5rem;box-sizing:border-box}.btn-sm{padding:.4rem .75rem;font-size:.8125rem}.dashboard-tabs{display:flex;gap:.35rem;margin-bottom:1.5rem;padding:.3rem;background:var(--surface);border:1px solid var(--border);border-radius:999px;width:fit-content;max-width:100%;flex-wrap:wrap}.dashboard-tabs .tab{padding:.45rem 1.05rem;font-size:.85rem;font-weight:500;font-family:inherit;background:transparent;border:none;color:var(--muted-strong);cursor:pointer;border-radius:999px;transition:background .15s ease,color .15s ease;white-space:nowrap}.dashboard-tabs .tab:hover{color:var(--text-strong);background:var(--surface-hover)}.dashboard-tabs .tab.active{color:var(--text-strong);background:var(--surface-hover);box-shadow:inset 0 0 0 1px var(--accent-soft)}.dashboard-tabs .tab.tab-link{text-decoration:none;display:inline-block}.dashboard-tabs .tab-divider{width:1px;align-self:stretch;background:var(--border);margin:.35rem .5rem;flex-shrink:0}.dashboard-content{min-height:12rem}.dashboard-content h2{font-size:1.125rem;margin:0 0 .75rem;color:var(--text)}.result-head.admin-result-head{align-items:flex-start}.hours-admin-toolbar{margin-bottom:1rem}.badge-inperson{display:inline-block;margin-top:.25rem;padding:.2rem .5rem;font-size:.72rem;font-weight:600;line-height:1.2;border-radius:6px;background:var(--warning-soft);color:var(--text);border:1px solid var(--warning-border);white-space:normal;max-width:14rem}.status-rejected{color:var(--status-rejected);font-weight:600}.admin-decision-select{min-width:7.5rem;max-width:10rem;padding:.35rem .5rem;font-size:.8125rem}.hours-admin-toolbar .label{display:block;font-size:.875rem;color:var(--muted);margin-bottom:.35rem}.hours-admin-toolbar .select{padding:.5rem .75rem;font-size:.9rem;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;min-width:12rem}.preview-group{margin-bottom:1.5rem}.preview-group:last-child{margin-bottom:0}.preview-group-title{font-size:.9375rem;font-weight:600;color:var(--muted);margin:0 0 .5rem;padding-bottom:.25rem}.admin-filters{display:flex;flex-wrap:wrap;align-items:center;gap:1rem;margin-bottom:1rem}.admin-filters .label{margin-bottom:0;margin-right:.25rem}.admin-filters .select{padding:.5rem .75rem;font-size:.9rem;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;min-width:10rem}.admin-csv-row{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem 1rem}.admin-csv-include{display:flex;align-items:center;gap:.45rem;margin:0;font-size:.8125rem;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;max-width:min(22rem,100%);line-height:1.35}.admin-csv-include input{flex-shrink:0}.course-code-link{color:var(--accent);text-decoration:underline;text-underline-offset:2px;word-break:break-all}.course-code-link:hover{color:var(--accent-hover, var(--accent));text-decoration-thickness:2px}.preview-code-cell{display:flex;flex-direction:column;gap:.35rem;min-width:0}.preview-code-cell .course-code-link{font-size:.8125rem;font-weight:500}.cpd-field-editor{display:flex;flex-direction:column;gap:.5rem;min-width:10rem}.cpd-field-legend{font-size:.72rem;font-weight:600;color:var(--muted);margin:0 0 .25rem;padding:0}.cpd-check-group{border:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.cpd-check{display:flex;align-items:flex-start;gap:.4rem;font-size:.78rem;line-height:1.35;cursor:pointer}.cpd-check input{margin-top:.15rem;flex-shrink:0}.cpd-field{display:flex;flex-direction:column;gap:.2rem}.cpd-field-label{font-size:.72rem;font-weight:600;color:var(--muted)}.cpd-other-list{margin:0;padding:0;list-style:none;font-size:.75rem}.cpd-other-list li{display:flex;align-items:flex-start;gap:.35rem;margin-bottom:.25rem}.cpd-remove-btn{flex-shrink:0;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:1rem;line-height:1;padding:0 .2rem}.cpd-remove-btn:hover{color:var(--error)}.cpd-other-add{display:flex;flex-direction:column;gap:.35rem}.hours-input-wrap{display:flex;align-items:center;gap:.35rem;min-width:0}.hours-input-wrap input[type=number]{width:4.5rem;min-width:0;flex:0 1 auto}.hours-input-unit{font-size:.8125rem;color:var(--muted);white-space:nowrap}.my-courses-toolbar{display:flex;justify-content:flex-end;margin-bottom:.5rem}.my-courses-wrap{width:100%;overflow-x:visible}.my-courses-table{table-layout:fixed;width:100%;font-size:clamp(.6875rem,.62rem + .28vw,.8125rem)}.my-courses-table th,.my-courses-table td{padding:.35rem .4rem;vertical-align:top;word-wrap:break-word;overflow-wrap:anywhere}.my-courses-table .th-filter-cell{vertical-align:bottom}.my-courses-table .th-filter-label{font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin:0 0 .3rem;line-height:1.2}.my-courses-table .th-filter-input,.my-courses-table .th-filter-select{width:100%;min-width:0;box-sizing:border-box;font-size:.7rem;padding:.2rem .3rem;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:6px}.my-courses-table .th-filter-spacer{min-height:1.45rem}.my-courses-table .mc-col-code{width:8%}.my-courses-table .mc-col-title{width:22%}.my-courses-table .mc-col-date{width:11%}.my-courses-table .mc-col-time{width:7%}.my-courses-table .mc-col-venue{width:12%}.my-courses-table .mc-col-note{width:9%}.my-courses-table .mc-col-school{width:10%}.my-courses-table .mc-col-enroll{width:13%}.my-courses-table .mc-col-submitted{width:8%}.my-courses-table.admin-apps-table .ac-col-select{width:4%}.my-courses-table.admin-apps-table .ac-col-applicant{width:12%}.my-courses-table.admin-apps-table .ac-col-code{width:7%}.my-courses-table.admin-apps-table .ac-col-title{width:18%}.my-courses-table.admin-apps-table .ac-col-date{width:10%}.my-courses-table.admin-apps-table .ac-col-note{width:7%}.my-courses-table.admin-apps-table .ac-col-school{width:14%}.my-courses-table.admin-apps-table .ac-col-enroll{width:12%}.my-courses-table.admin-apps-table .ac-col-submitted{width:16%}.my-courses-table.admin-apps-table .admin-decision-select{width:100%;max-width:100%;min-width:0;box-sizing:border-box;font-size:inherit;padding:.25rem .3rem}.my-courses-table .my-courses-enroll-select{width:100%;max-width:100%;min-width:0;font-size:inherit;padding:.25rem .3rem}.my-courses-table .mc-td-submitted{font-variant-numeric:tabular-nums;line-height:1.35}.my-courses-table .my-courses-empty-row{text-align:center;color:var(--muted);padding:1rem!important}.badge-inperson--compact{max-width:100%;font-size:.65rem;padding:.15rem .35rem;margin-top:0;line-height:1.25}@media (max-width: 520px){.my-courses-wrap{overflow-x:auto}.my-courses-table{font-size:.65rem}.my-courses-table .th-filter-input,.my-courses-table .th-filter-select{font-size:.62rem}}.supporting-doc-field{margin-top:.5rem;display:flex;flex-direction:column;gap:.35rem;min-width:0}.supporting-doc-field--compact{margin-top:.45rem}.supporting-doc-field--compact .supporting-doc-hint{display:none}.supporting-doc-upload{display:flex;flex-direction:column;gap:.2rem;min-width:0}.supporting-doc-label{font-size:.72rem;color:var(--muted-strong)}.supporting-doc-input{font-size:.72rem;max-width:100%}.supporting-doc-filename{font-size:.72rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.supporting-doc-hint{margin:0;font-size:.68rem;line-height:1.35}.preview-actions-cell{min-width:9.5rem}.my-courses-table .mc-col-doc,.admin-apps-table .ac-col-doc{width:8.5rem}.my-courses-table .mc-td-doc,.admin-apps-table .ac-td-doc{vertical-align:top}.placeholder-shell{--tone-color: var(--accent);--tone-soft: var(--accent-soft);min-height:100vh;display:flex;flex-direction:column}.placeholder-shell.tone-cpd{--tone-color: var(--tone-cpd);--tone-soft: var(--tone-cpd-soft)}.placeholder-shell.tone-time{--tone-color: var(--tone-time);--tone-soft: var(--tone-time-soft)}.placeholder-shell.tone-student{--tone-color: var(--tone-student);--tone-soft: var(--tone-student-soft)}.placeholder-shell.tone-subject{--tone-color: var(--tone-subject);--tone-soft: var(--tone-subject-soft)}.placeholder-shell.tone-admin{--tone-color: var(--tone-admin);--tone-soft: var(--tone-admin-soft)}.placeholder-shell.tone-venue{--tone-color: var(--tone-venue);--tone-soft: var(--tone-venue-soft)}.placeholder-main{flex:1;display:flex;align-items:center;justify-content:center;padding:3rem 1.25rem 4rem}.placeholder-card{position:relative;width:100%;max-width:36rem;text-align:center;padding:2.5rem 1.75rem 2.25rem;background:linear-gradient(160deg,var(--surface),var(--bg-elevated));border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-md);overflow:hidden;isolation:isolate}.placeholder-card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(100% 80% at 50% 0%,var(--tone-soft),transparent 70%);z-index:-1}.placeholder-icon{width:4rem;height:4rem;margin:0 auto 1.25rem;display:inline-flex;align-items:center;justify-content:center;border-radius:18px;color:var(--tone-color);background:var(--tone-soft)}.placeholder-icon svg{width:36px;height:36px}.placeholder-pill{display:inline-flex;align-items:center;gap:.4rem;font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--tone-color);background:var(--tone-soft);padding:.3rem .75rem;border-radius:999px;margin-bottom:1.1rem}.placeholder-pill svg{width:14px;height:14px}.placeholder-title{margin:0 0 .45rem;font-size:clamp(1.5rem,1.2rem + .9vw,2rem);font-weight:700;letter-spacing:-.015em;color:var(--text-strong)}.placeholder-desc{margin:0 auto 1rem;max-width:28rem;color:var(--muted-strong);font-size:.95rem;line-height:1.55}.placeholder-note{margin:0 auto 1.6rem;max-width:26rem;color:var(--muted);font-size:.85rem;line-height:1.55}.placeholder-actions{display:flex;justify-content:center}.placeholder-back{display:inline-flex;align-items:center;gap:.45rem;padding:.6rem 1.1rem;border-radius:999px;background:var(--surface-2);border:1px solid var(--border);color:var(--text);font-weight:500;font-size:.88rem;transition:background .15s ease,border-color .15s ease,color .15s ease}.placeholder-back:hover{background:var(--surface-hover);border-color:var(--tone-color);color:var(--text-strong);text-decoration:none}.venue-combobox{position:relative;display:flex;flex-direction:column;gap:.35rem;min-width:14rem}.venue-combobox-calendar{flex:1 1 18rem}.venue-combobox-form{width:100%}.venue-combobox-label{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:var(--muted-strong)}.venue-combobox-control{display:flex;align-items:stretch;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);overflow:hidden;transition:border-color .15s,box-shadow .15s}.venue-combobox-control:focus-within{border-color:var(--tone-venue);box-shadow:0 0 0 2px var(--tone-venue-soft)}.venue-combobox-input{flex:1;min-width:0;border:none;background:transparent;font:inherit;font-size:.95rem;padding:.55rem .65rem;color:var(--text)}.venue-combobox-input:focus{outline:none}.venue-combobox-input::placeholder{color:var(--muted)}.venue-combobox-toggle{flex:0 0 auto;border:none;border-left:1px solid var(--border);background:transparent;color:var(--muted-strong);font:inherit;font-size:.85rem;padding:0 .65rem;cursor:pointer}.venue-combobox-toggle:hover{color:var(--tone-venue);background:var(--tone-venue-soft)}.venue-combobox-panel{position:absolute;z-index:30;top:calc(100% + .35rem);left:0;right:0;max-height:min(22rem,60vh);overflow:auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);box-shadow:var(--shadow-md, 0 8px 24px rgba(0, 0, 0, .12))}.venue-combobox-empty{margin:0;padding:.85rem .75rem;font-size:.9rem;color:var(--muted-strong)}.venue-combobox-category+.venue-combobox-category{border-top:1px solid var(--border)}.venue-combobox-layer{font-size:.78rem;font-weight:600;letter-spacing:.02em;padding:.45rem .75rem}.venue-combobox-layer-category{color:var(--text-strong);background:var(--bg-subtle, rgba(0, 0, 0, .03));border-bottom:1px solid var(--border)}.venue-combobox-layer-floor{color:var(--tone-venue);padding-top:.55rem;padding-bottom:.2rem}.venue-combobox-venues{list-style:none;margin:0;padding:0 .35rem .45rem}.venue-combobox-option{display:flex;align-items:baseline;gap:.35rem;width:100%;border:none;border-radius:var(--radius-sm);background:transparent;font:inherit;font-size:.92rem;padding:.45rem .55rem;text-align:left;color:var(--text);cursor:pointer}.venue-combobox-option:hover,.venue-combobox-option:focus-visible{outline:none;background:var(--tone-venue-soft)}.venue-combobox-option.is-selected{background:var(--tone-venue-soft);color:var(--tone-venue);font-weight:600}.venue-combobox-option-name{min-width:0}.venue-combobox-option-capacity{flex-shrink:0;font-size:.82rem;color:var(--muted-strong)}.venue-combobox-option.is-selected .venue-combobox-option-capacity{color:inherit;opacity:.85}.venue-week-cal{display:flex;flex-direction:column;gap:.85rem}.venue-week-toolbar{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.venue-week-title{margin:0;font-size:1rem;font-weight:600;color:var(--text-strong);min-width:10rem;text-align:center}.venue-week-legend{display:flex;flex-wrap:wrap;gap:.75rem 1.25rem;font-size:.82rem;color:var(--muted-strong)}.venue-legend-item{display:inline-flex;align-items:center;gap:.4rem}.venue-legend-swatch{width:.85rem;height:.85rem;border-radius:3px;border:1px solid var(--border);flex-shrink:0}.venue-week-hint{margin:0;font-size:.82rem;color:var(--muted)}.venue-week-grid-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--radius-sm);max-height:min(70vh,42rem)}.venue-week-grid{display:grid;grid-template-columns:3.25rem repeat(7,minmax(4.5rem,1fr));grid-template-rows:auto repeat(var(--venue-slot-rows, 20),2rem);min-width:40rem}.venue-week-corner{position:sticky;top:0;left:0;z-index:3;background:var(--surface-2);border-bottom:1px solid var(--border);border-right:1px solid var(--border)}.venue-week-dayhead{position:sticky;top:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.1rem;padding:.35rem .25rem;background:var(--surface-2);border-bottom:1px solid var(--border);border-right:1px solid var(--border);font-size:.78rem}.venue-week-dayhead.is-today{background:var(--tone-venue-soft);color:var(--tone-venue)}.venue-week-dow{font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.venue-week-dayhead.is-today .venue-week-dow{color:var(--tone-venue)}.venue-week-dom{font-size:.95rem;font-weight:700;color:var(--text-strong)}.venue-week-time{position:sticky;left:0;z-index:1;display:flex;align-items:center;justify-content:flex-end;padding:0 .4rem;font-size:.72rem;color:var(--muted);background:var(--surface);border-right:1px solid var(--border);border-bottom:1px solid var(--border);white-space:nowrap}.venue-week-cell{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;padding:.15rem .25rem;border:none;border-right:1px solid var(--border);border-bottom:1px solid var(--border);font:inherit;font-size:.68rem;line-height:1.2;cursor:pointer;text-align:left;overflow:hidden;transition:filter .12s,outline .12s}.venue-week-cell:disabled{cursor:not-allowed}.venue-week-cell-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.venue-week-cell-booker{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700;font-size:.72rem;letter-spacing:.02em}.venue-cal-top{display:flex;flex-wrap:wrap;align-items:flex-end;gap:1rem;margin-bottom:.85rem}.venue-cal-venue-select{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:var(--muted-strong);min-width:12rem}.venue-cal-venue-select select{font:inherit;font-size:.95rem;padding:.55rem .65rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--text)}.venue-venue-meta-inline{margin:0;flex:1;min-width:10rem;font-size:.85rem;color:var(--muted-strong);padding-bottom:.55rem}.venue-slot-available{background:var(--success-badge-bg);color:var(--success-badge-fg)}.venue-slot-available:hover:not(:disabled){filter:brightness(1.06);outline:2px solid var(--tone-venue);outline-offset:-2px;z-index:1}.venue-slot-blocked{background:var(--error-soft);color:var(--error);cursor:pointer}.venue-slot-blocked:hover{filter:brightness(.97);outline:2px solid var(--error-border);outline-offset:-2px}.venue-slot-past{background:var(--surface-2);color:var(--muted);opacity:.55}.venue-slot-selected{background:var(--tone-venue-soft);color:var(--tone-venue);outline:2px solid var(--tone-venue);outline-offset:-2px;z-index:1}.venue-legend-swatch.venue-slot-available{background:var(--success-badge-bg)}.venue-legend-swatch.venue-slot-blocked{background:var(--error-soft)}.venue-legend-swatch.venue-slot-past{background:var(--surface-2)}.venue-legend-swatch.venue-slot-selected{background:var(--tone-venue-soft);outline:1px solid var(--tone-venue)}.venue-week-selection{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;padding:.75rem 1rem;background:var(--tone-venue-soft);border:1px solid var(--tone-venue);border-radius:var(--radius-sm);font-size:.88rem}@media (max-width: 640px){.venue-week-grid{min-width:36rem}}.venue-date-picker{position:relative;display:flex;flex-direction:column;gap:.4rem;width:100%}.venue-date-picker-label{font-size:.85rem;color:var(--muted-strong)}.venue-date-picker-trigger{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;font:inherit;font-size:.95rem;padding:.55rem .65rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--text);cursor:pointer;text-align:left;transition:border-color .15s,box-shadow .15s}.venue-date-picker-trigger:hover{border-color:var(--tone-venue)}.venue-date-picker-trigger[aria-expanded=true]{border-color:var(--tone-venue);box-shadow:0 0 0 2px var(--tone-venue-soft)}.venue-date-picker-main{display:flex;align-items:baseline;flex-wrap:wrap;gap:.45rem;flex:1;min-width:0}.venue-date-picker-value{min-width:0}.venue-date-picker-weekday{font-size:.88rem;font-weight:500;color:var(--tone-venue);white-space:nowrap}.venue-date-picker-icon{display:flex;align-items:center;color:var(--muted-strong);flex-shrink:0}.venue-date-picker-popover{position:absolute;top:calc(100% + .35rem);left:0;z-index:40;width:min(18rem,100vw - 2rem);padding:.75rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-md)}.venue-date-picker-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.65rem}.venue-date-picker-month{font-size:.9rem;font-weight:600;color:var(--text-strong);text-align:center;flex:1}.venue-date-picker-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.2rem}.venue-date-picker-dow{font-size:.68rem;font-weight:600;text-align:center;color:var(--muted);padding:.2rem 0}.venue-date-picker-cell{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:transparent;font:inherit;font-size:.82rem;padding:.4rem 0;border-radius:var(--radius-sm);cursor:pointer;color:var(--text);transition:background .12s,color .12s}.venue-date-picker-cell.empty{cursor:default}.venue-date-picker-cell:not(.empty):not(:disabled):hover{background:var(--surface-hover)}.venue-date-picker-cell.today{font-weight:700;color:var(--tone-venue)}.venue-date-picker-cell.selected{background:var(--tone-venue);color:var(--btn-on-accent);font-weight:600}.venue-date-picker-cell:disabled{opacity:.35;cursor:not-allowed}.venue-form-recur{display:flex;flex-direction:column;gap:.65rem;padding:.75rem;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm)}.venue-form-recur-toggle{display:flex;align-items:center;gap:.5rem;font-size:.88rem;color:var(--text);cursor:pointer}.venue-form-recur-toggle input{width:1rem;height:1rem;accent-color:var(--tone-venue)}.venue-form-recur-until{display:flex;flex-direction:column;gap:.4rem}.venue-form-recur-summary{margin:0;font-size:.82rem;color:var(--muted-strong)}.venue-dashboard{flex:1;padding:1.5rem 1.5rem 3rem}.venue-dashboard-inner{max-width:56rem;margin:0 auto;display:flex;flex-direction:column;gap:1.25rem}.venue-dashboard-wide{max-width:90rem}.venue-book-layout{display:grid;grid-template-columns:minmax(0,1fr) min(22rem,100%);gap:1.25rem;align-items:start}.venue-book-calendar{min-width:0}.venue-book-form-panel{position:sticky;top:5rem;align-self:start;overflow:visible}.venue-form-heading{margin:0 0 1.1rem;font-size:1.05rem;font-weight:600;color:var(--text-strong)}.venue-venue-meta-top{margin:0 0 1rem;font-size:.85rem;color:var(--muted-strong)}.venue-page-head h1{margin:0;font-size:1.5rem;font-weight:700;color:var(--text-strong)}.venue-page-head p{margin:.35rem 0 0;color:var(--muted-strong);font-size:.95rem}.venue-tabs{display:flex;gap:.35rem;flex-wrap:wrap;border-bottom:1px solid var(--border);padding-bottom:0}.venue-tabs button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:transparent;color:var(--muted);font:inherit;font-size:.92rem;font-weight:500;padding:.65rem 1rem;border-radius:var(--radius-sm) var(--radius-sm) 0 0;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s,background .15s,border-color .15s}.venue-tabs button:hover{color:var(--text);background:var(--surface)}.venue-tabs button.active{color:var(--tone-venue);border-bottom-color:var(--tone-venue);background:var(--tone-venue-soft)}.venue-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:1.25rem}.venue-panel-form{max-width:32rem}.venue-filters{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:1rem}.venue-filters-calendar{align-items:flex-end}.venue-venue-meta{margin:0;flex:1;min-width:12rem;font-size:.85rem;color:var(--muted-strong);padding-bottom:.55rem}.venue-filters label{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:var(--muted-strong);flex:1;min-width:10rem}.venue-form label,.venue-form-field{display:flex;flex-direction:column;gap:.4rem;font-size:.85rem;color:var(--muted-strong);width:100%}.venue-form-row label{flex:1;min-width:0}.venue-form-weekday{font-size:.88rem;font-weight:500;color:var(--tone-venue)}.venue-form-time-group{display:flex;flex-direction:column;gap:.4rem}.venue-filters input,.venue-filters select,.venue-form input,.venue-form select{font:inherit;font-size:.95rem;padding:.55rem .65rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--text)}.venue-form{display:flex;flex-direction:column;gap:1.1rem}.venue-form-row{display:flex;gap:1rem}.venue-form-hint{margin:0;font-size:.82rem;color:var(--muted)}.venue-form-slot-note{margin:0;font-size:.82rem;color:var(--muted-strong)}.venue-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;font:inherit;font-size:.9rem;font-weight:600;padding:.55rem 1.1rem;border-radius:var(--radius-sm);border:1px solid var(--border);cursor:pointer;transition:background .15s,border-color .15s,opacity .15s}.venue-btn:disabled{opacity:.6;cursor:not-allowed}.venue-btn-primary{align-self:flex-start;background:var(--tone-venue);border-color:var(--tone-venue);color:var(--btn-on-accent)}.venue-btn-primary:hover:not(:disabled){filter:brightness(1.08)}.venue-btn-danger{background:var(--error-soft);border-color:var(--error-border);color:var(--error)}.venue-btn-danger:hover:not(:disabled){background:var(--error-hover-bg);border-color:var(--error-hover-border)}.venue-btn-sm{padding:.35rem .65rem;font-size:.8rem}.venue-table-wrap{overflow-x:auto}.venue-table{width:100%;border-collapse:collapse;font-size:.88rem}.venue-table th,.venue-table td{text-align:left;padding:.65rem .75rem;border-bottom:1px solid var(--border);vertical-align:top}.venue-table th{font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:600}.venue-table tbody tr:hover{background:var(--surface-hover)}.venue-row-cancelled td{opacity:.55}.venue-time-cell{white-space:nowrap}.venue-badge{display:inline-block;font-size:.75rem;font-weight:600;padding:.2rem .5rem;border-radius:999px}.venue-badge-active{background:var(--success-badge-bg);color:var(--success-badge-fg)}.venue-badge-cancelled{background:var(--surface-2);color:var(--muted)}.venue-alert{padding:.75rem 1rem;border-radius:var(--radius-sm);font-size:.9rem}.venue-alert-error{background:var(--error-soft);border:1px solid var(--error-border);color:var(--error)}.venue-alert-success{background:var(--success-badge-bg);border:1px solid var(--success-badge-fg);color:var(--success-badge-fg)}.venue-empty,.venue-muted{margin:0;color:var(--muted);font-size:.92rem}.venue-blocked-detail{margin-top:.75rem;padding:1rem;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);display:flex;flex-direction:column;gap:.5rem}.venue-blocked-detail h4{margin:0;font-size:.95rem;color:var(--text-strong)}.venue-blocked-detail dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:.25rem 1rem;font-size:.88rem}.venue-blocked-detail dt{color:var(--muted);font-weight:500}.venue-blocked-detail dd{margin:0;color:var(--text)}.venue-blocked-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.25rem}@media (max-width: 960px){.venue-book-layout{grid-template-columns:1fr}.venue-book-form-panel{position:static}}@media (max-width: 640px){.venue-form-row{flex-direction:column}}.app{max-width:52rem;margin:0 auto;padding:2rem 1.5rem 4rem}.header{margin-bottom:2rem}.header h1{font-size:1.75rem;font-weight:700;letter-spacing:-.02em;margin:0 0 .5rem;color:var(--text-strong)}.tagline{margin:0 0 1rem;color:var(--muted-strong);font-size:.95rem;line-height:1.5}.form{margin-bottom:1.5rem}.label{display:block;font-size:.875rem;font-weight:500;color:var(--muted);margin-bottom:.5rem}.input-row{display:flex;gap:.75rem;flex-wrap:wrap}.input{flex:1;min-width:12rem;padding:.75rem 1rem;font-size:.9375rem;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;outline:none;transition:border-color .15s}.input::placeholder{color:var(--muted);opacity:.8}.input:focus{border-color:var(--accent)}.input:disabled{opacity:.7;cursor:not-allowed}.btn{padding:.65rem 1.35rem;font-size:.9rem;font-weight:500;font-family:inherit;color:var(--btn-on-accent);background:var(--accent);border:none;border-radius:var(--radius-sm);cursor:pointer;transition:background .15s ease,transform .15s ease,box-shadow .15s ease;white-space:nowrap;box-shadow:0 1px 0 var(--btn-inset) inset}.btn:hover:not(:disabled){background:var(--accent-hover);box-shadow:0 4px 14px var(--accent-glow)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.7;cursor:not-allowed}.message{padding:1rem 1.25rem;border-radius:8px;margin-bottom:1.5rem;font-size:.9375rem}.message.error{background:var(--error-soft);color:var(--error);border:1px solid var(--error-border)}.result{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.5rem 1.75rem}.result-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.25rem;padding-bottom:.75rem;border-bottom:1px solid var(--border)}.result-head h2{font-size:1.25rem;font-weight:600;margin:0;color:var(--text)}.result-head-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.btn-secondary{background:transparent;color:var(--accent);border:1px solid var(--accent)}.btn-secondary:hover:not(:disabled){background:var(--accent-soft)}.block{margin-bottom:1.5rem}.block:last-child{margin-bottom:0}.block h3{font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 0 .5rem}.block .value{margin:0;font-size:.9375rem;color:var(--text);line-height:1.5}.table-wrap{overflow-x:auto;border-radius:8px;border:1px solid var(--border)}.data-table{width:100%;border-collapse:collapse;font-size:.875rem}.data-table th,.data-table td{padding:.6rem .75rem;text-align:left;border-bottom:1px solid var(--border)}.data-table th{font-weight:600;color:var(--muted);background:var(--overlay)}.data-table tr:last-child td{border-bottom:none}.data-table td{color:var(--text);vertical-align:top}.list{margin:0;padding-left:1.25rem;font-size:.9375rem;color:var(--text);line-height:1.6}.list li{margin-bottom:.25rem}.key-value{margin:0;display:grid;gap:.5rem}.key-value div{display:grid;grid-template-columns:12rem 1fr;gap:1rem;align-items:baseline;font-size:.9375rem}.key-value dt{margin:0;font-weight:500;color:var(--muted)}.key-value dd{margin:0;color:var(--text)}@media (max-width: 480px){.key-value div{grid-template-columns:1fr}}.preview-section{margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid var(--border)}.preview-section .result-head{border-bottom:1px solid var(--border);margin-bottom:1rem;padding-bottom:.75rem}.preview-section .result-head h2{font-size:1.125rem}.preview-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.preview-edit-hint{font-size:.8125rem;margin:0 0 .75rem;line-height:1.45}.excel-table .preview-cell-input{width:100%;min-width:0;max-width:100%;box-sizing:border-box;font:inherit;font-size:.8125rem}.excel-table .preview-cell-textarea{min-height:4.5rem;resize:vertical;line-height:1.35;font-family:ui-monospace,Cascadia Code,Consolas,monospace}.preview-cell-formatted{margin-top:.4rem;padding-top:.4rem;border-top:1px solid var(--border);font-size:.72rem;line-height:1.35;white-space:pre-line;max-height:8rem;overflow:auto}.preview-cell-text{display:block;line-height:1.4;white-space:pre-wrap;word-break:break-word}.preview-cell-multiline{font-size:.78rem}.preview-cell-link{color:var(--accent);word-break:break-all}.preview-cell-link:hover{text-decoration:underline}.preview-actions-cell{min-width:7rem}.preview-row-actions{display:flex;flex-direction:column;gap:.35rem;align-items:stretch}.muted{color:var(--muted);font-size:.9375rem;margin:0}.btn-danger{background:transparent;color:var(--error);border:1px solid var(--error)}.btn-danger:hover:not(:disabled){background:var(--error-soft)}.excel-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:8px;background:var(--surface)}.excel-table{width:100%;border-collapse:collapse;font-size:.8125rem;table-layout:auto;min-width:1100px}.excel-table th,.excel-table td{padding:.5rem .6rem;border:1px solid var(--border);text-align:left;vertical-align:top;word-break:break-word}.excel-table th{background:var(--overlay-strong);color:var(--muted);font-weight:600;white-space:nowrap;min-width:6rem}.excel-table th:nth-child(9){min-width:14rem}.excel-table th:nth-child(10){min-width:12rem}.excel-table td{color:var(--text)}.cell-url{max-width:12rem}.cell-url a{color:var(--accent);text-decoration:none}.cell-url a:hover{text-decoration:underline}.cell-tidy{max-width:18rem;font-size:.8125rem;line-height:1.4}.cell-multiline{white-space:pre-line;display:block}td.cell-multiline{display:table-cell}:root{--font-sans: "Inter", "Noto Sans HK", "PingFang TC", "Segoe UI", system-ui, -apple-system, sans-serif;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 18px;--radius-xl: 24px}:root,[data-theme=dark]{--bg: #0b1018;--bg-elevated: #111826;--surface: #161f30;--surface-2: #1c283d;--surface-hover: #22304a;--border: #243349;--border-strong: #2d4060;--text: #e9eef6;--text-strong: #f7faff;--muted: #8d9bb3;--muted-strong: #aab7cc;--accent: #58a6ff;--accent-hover: #79b8ff;--accent-soft: rgba(88, 166, 255, .14);--accent-glow: rgba(88, 166, 255, .35);--btn-on-accent: #0b1018;--switch-hover: rgba(128, 128, 128, .08);--success: #3fb950;--warning: #f0b429;--error: #f85149;--tone-cpd: #58a6ff;--tone-cpd-soft: rgba(88, 166, 255, .18);--tone-time: #f0b429;--tone-time-soft: rgba(240, 180, 41, .18);--tone-student: #4ade80;--tone-student-soft: rgba(74, 222, 128, .18);--tone-subject: #c084fc;--tone-subject-soft: rgba(192, 132, 252, .18);--tone-admin: #f87171;--tone-admin-soft: rgba(248, 113, 113, .18);--tone-venue: #2dd4bf;--tone-venue-soft: rgba(45, 212, 191, .18);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .25);--shadow-md: 0 8px 24px rgba(0, 0, 0, .32);--shadow-lg: 0 24px 60px rgba(0, 0, 0, .45);--header-backdrop: rgba(11, 16, 24, .72);--bg-glow-1: rgba(88, 166, 255, .08);--bg-glow-2: rgba(192, 132, 252, .06);--login-glow-1: rgba(192, 132, 252, .14);--login-glow-2: rgba(88, 166, 255, .14);--brand-gradient: linear-gradient(120deg, #58a6ff 10%, #c084fc 80%);--avatar-gradient: linear-gradient(135deg, #58a6ff, #c084fc);--avatar-fg: #0b1018;--scrollbar-thumb-hover: #36486a;--overlay: rgba(0, 0, 0, .2);--overlay-strong: rgba(0, 0, 0, .25);--error-soft: rgba(248, 81, 73, .12);--error-border: rgba(248, 81, 73, .3);--error-hover-border: rgba(248, 81, 73, .45);--error-hover-bg: rgba(248, 81, 73, .08);--btn-inset: rgba(255, 255, 255, .06);--success-badge-bg: rgba(63, 185, 80, .16);--success-badge-fg: #4ade80;--warning-soft: rgba(234, 179, 8, .18);--warning-border: rgba(234, 179, 8, .45);--status-rejected: #f97316}[data-theme=light]{--bg: #f4f7fc;--bg-elevated: #ffffff;--surface: #ffffff;--surface-2: #eef2f9;--surface-hover: #e4eaf5;--border: #d4dce8;--border-strong: #bcc8da;--text: #1a2332;--text-strong: #0d1520;--muted: #5c6b82;--muted-strong: #475569;--accent: #2563eb;--accent-hover: #1d4ed8;--accent-soft: rgba(37, 99, 235, .1);--accent-glow: rgba(37, 99, 235, .22);--btn-on-accent: #ffffff;--switch-hover: rgba(0, 0, 0, .05);--success: #16a34a;--warning: #ca8a04;--error: #dc2626;--tone-cpd: #2563eb;--tone-cpd-soft: rgba(37, 99, 235, .12);--tone-time: #b45309;--tone-time-soft: rgba(180, 83, 9, .12);--tone-student: #15803d;--tone-student-soft: rgba(21, 128, 61, .12);--tone-subject: #7c3aed;--tone-subject-soft: rgba(124, 58, 237, .12);--tone-admin: #dc2626;--tone-admin-soft: rgba(220, 38, 38, .12);--tone-venue: #0d9488;--tone-venue-soft: rgba(13, 148, 136, .12);--shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);--shadow-md: 0 8px 24px rgba(15, 23, 42, .08);--shadow-lg: 0 24px 60px rgba(15, 23, 42, .1);--header-backdrop: rgba(244, 247, 252, .85);--bg-glow-1: rgba(37, 99, 235, .07);--bg-glow-2: rgba(124, 58, 237, .06);--login-glow-1: rgba(124, 58, 237, .1);--login-glow-2: rgba(37, 99, 235, .1);--brand-gradient: linear-gradient(120deg, #2563eb 10%, #7c3aed 80%);--avatar-gradient: linear-gradient(135deg, #2563eb, #7c3aed);--avatar-fg: #ffffff;--scrollbar-thumb-hover: #a8b8d0;--overlay: rgba(15, 23, 42, .06);--overlay-strong: rgba(15, 23, 42, .08);--error-soft: rgba(220, 38, 38, .08);--error-border: rgba(220, 38, 38, .25);--error-hover-border: rgba(220, 38, 38, .4);--error-hover-bg: rgba(220, 38, 38, .06);--btn-inset: rgba(255, 255, 255, .2);--success-badge-bg: rgba(22, 163, 74, .12);--success-badge-fg: #15803d;--warning-soft: rgba(202, 138, 4, .12);--warning-border: rgba(202, 138, 4, .35);--status-rejected: #c2410c}*{box-sizing:border-box}html,body{margin:0;min-height:100vh;background:var(--bg);color:var(--text);font-family:var(--font-sans);font-feature-settings:"cv11","ss01";line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background:radial-gradient(1200px 600px at 90% -10%,var(--bg-glow-1),transparent 60%),radial-gradient(900px 500px at -10% 20%,var(--bg-glow-2),transparent 60%),var(--bg);background-attachment:fixed}#root{min-height:100vh}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}::selection{background:var(--accent-soft);color:var(--text-strong)}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:999px}*::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}*::-webkit-scrollbar-track{background:transparent}.app-loading{min-height:100vh;display:flex;align-items:center;justify-content:center;color:var(--muted);letter-spacing:.02em}
