.page-heading{margin:12px 0 24px;display:flex;justify-content:space-between;gap:16px;align-items:center}.page-heading h1{font-size:clamp(24px,4vw,32px);margin:0}.eyebrow{font-size:11px;letter-spacing:.12em;color:#527c65}.panel{background:#fff;border:1px solid #dce8df;border-radius:16px;padding:22px;margin:0 0 22px}.panel h2{font-size:19px;margin:0 0 14px}.form-panel{max-width:1000px}.fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin-bottom:18px}.fields label{display:flex;flex-direction:column;gap:7px;font-size:13px}.fields input,.fields select,.search-input,textarea{font:inherit;min-width:0;width:100%;padding:10px 12px;border:1px solid #ccdcd0;border-radius:9px;background:#fff;box-sizing:border-box}.wide{grid-column:1/-1}.table-scroll{width:100%;overflow:auto}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:14px 12px;border-bottom:1px solid #e6eee8;text-align:left;vertical-align:top}th{background:#f3f8f4;white-space:nowrap}td a{color:#176342}.cell-name{min-width:200px}.actions{display:flex;flex-wrap:wrap;gap:8px;min-width:140px}.button{display:inline-flex;justify-content:center;align-items:center;text-decoration:none;cursor:pointer;gap:6px}.button-small{padding:7px 10px;font-size:12px}.button-danger{background:#fff3f0;border:1px solid #f0bdb3;color:#a33325}.badge{display:inline-block;border-radius:20px;background:#e9f5ed;color:#24633b;padding:4px 9px;font-size:11px;white-space:nowrap}.badge-closed{background:#fff2dc;color:#8e5c19}.muted{color:#697c70;font-size:12px}.kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px;margin:20px 0}.metric{background:#fff;border:1px solid #dce8df;border-radius:14px;padding:18px}.metric strong{display:block;font-size:30px;color:#175b3c}.metric span{font-size:12px;color:#5b7162}.bar-row{display:grid;grid-template-columns:minmax(120px,1fr) 2fr 60px;gap:12px;align-items:center;margin:14px 0;font-size:12px}.bar-track{background:#edf4ef;border-radius:8px;height:12px;overflow:hidden}.bar-fill{background:#39895a;height:100%;border-radius:8px}.avatar img{object-fit:cover;border-radius:50%}.notice{background:#fff6df;color:#6b551d;border-radius:10px;padding:14px 18px;margin-bottom:16px}.source-switch{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:18px}dialog{border:1px solid #d4e2d8;border-radius:18px;max-width:720px;width:calc(100% - 48px);max-height:85vh;padding:24px;overflow:auto}dialog::backdrop{background:#142b2466}dialog h2{margin-top:0}.dialog-close{float:right}.app-message{padding:14px;background:#fff0ed;color:#943c2f;margin-bottom:16px;border-radius:8px}.filter-form .button{align-self:end}details summary{cursor:pointer;padding:6px 0;color:#1b6640;font-weight:500}details form{margin-top:16px}.search-input{max-width:420px;margin-bottom:18px}button:disabled{opacity:.55;cursor:wait}.empty{padding:32px;text-align:center}.toolbar{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:16px}code{overflow-wrap:anywhere}.sidebar-inner{overflow-y:auto}.main{min-width:0}body{overflow-wrap:break-word}@media(max-width:1000px){.kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:620px){.kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.panel{padding:16px}.fields{grid-template-columns:1fr}.bar-row{grid-template-columns:100px 1fr 40px}.page-heading{align-items:start;flex-direction:column}.metric{padding:14px}.metric strong{font-size:26px}dialog{padding:16px}}

/* FacultyPortal visual alignment. Existing routes, forms and interactions are unchanged. */
:root{--portal-navy:#183153;--portal-blue:#2563a6;--portal-mint:#0f9f8f;--portal-gold:#d99b2b;--portal-ink:#172033;--portal-muted:#667085;--portal-bg:#f5f7fb;--portal-border:#d9e1ec;--ink:var(--portal-ink);--muted:var(--portal-muted);--line:var(--portal-border);--green:var(--portal-blue);--green-dark:var(--portal-navy);--soft:#edf4fb;--page:var(--portal-bg)}
body{font-family:Sarabun,"Segoe UI",Tahoma,sans-serif;font-size:14px;color:var(--portal-ink);background:var(--portal-bg)}
.topbar{background:#fff;border-bottom:1px solid var(--portal-border);box-shadow:0 2px 10px #18315306}
.brand strong,.brand-light{color:var(--portal-navy)}.brand small{color:var(--portal-muted);font-size:12px;line-height:1.5}
.local-badge{background:#edf4fb;border-color:#d5e2f1;color:var(--portal-blue)}
.sidebar{background:var(--portal-navy);border-right:0;color:#fff}.profile{border-color:#ffffff24}.profile strong{color:#fff}.profile small{color:#c6d5e7}.avatar{background:#ffffff12;color:#e5edf8;border-color:#ffffff24}
.menu-label{color:#b5c9e2;letter-spacing:.05em}.side-nav .nav-link{color:#dce7f5;border-radius:8px;font-weight:500}.side-nav .nav-link:hover{background:#ffffff12;color:#fff}.side-nav .nav-link.active{background:var(--portal-blue);color:#fff;border-color:transparent;box-shadow:inset 3px 0 var(--portal-mint)}
.sidebar-note{background:#ffffff09;border-color:#ffffff20;color:#d1deed}.sidebar-note p,.sidebar-note strong{color:#d1deed}.sidebar-foot,.sidebar-foot small{color:#c3d3e6;border-color:#ffffff24}.sidebar .button-secondary{background:transparent;border:1px solid #6c85a5;color:#fff}.sidebar .button-secondary:hover{background:#ffffff12}.connection-dot{background:#49c2ab}
.main{background:var(--portal-bg)}.page-heading{margin:8px 0 24px}.page-heading h1{color:var(--portal-navy);font-weight:700;letter-spacing:0}.eyebrow{color:var(--portal-mint);font-weight:700;font-size:11px;letter-spacing:.08em}
.panel,.filter-panel,.records-panel{border:1px solid var(--portal-border);border-radius:12px;box-shadow:0 3px 14px #18315304;background:#fff}.panel h2{color:var(--portal-navy);font-weight:600}.metric{border-color:var(--portal-border);border-radius:12px;box-shadow:0 3px 14px #18315304}.metric strong{color:var(--portal-navy)}.metric span{color:var(--portal-muted)}
.button,.button-primary{border-radius:8px}.button-primary{background:var(--portal-blue);border-color:var(--portal-blue);color:#fff}.button-primary:hover{background:var(--portal-navy);border-color:var(--portal-navy);color:#fff}.button-secondary{color:var(--portal-blue);border-color:#c8d7e9;background:#fff}.button-secondary:hover{background:#edf4fb;color:var(--portal-navy)}.button-danger{color:#a33325;background:#fff3f0;border-color:#f0bdb3}
.fields input,.fields select,.search-input,textarea,.field select{border-color:#cbd5e1;border-radius:8px;color:var(--portal-ink)}.fields label,.field label{color:#344054}.fields input:focus,.fields select:focus,.search-input:focus,.field select:focus{border-color:var(--portal-blue);outline:2px solid #2563a620;outline-offset:1px}
:focus-visible{outline:3px solid #2563a680;outline-offset:3px}table{font-size:13px}th{background:#f0f4fa;color:var(--portal-navy);font-weight:600}th,td{border-bottom-color:#e5eaf1}td a{color:var(--portal-blue)}td a:hover{text-decoration:underline;color:var(--portal-navy)}tbody tr:hover{background:#fafcff}.muted,.footer{color:var(--portal-muted)}
.badge{background:#e8f7f3;color:#08796d}.badge-closed{background:#fff2dc;color:#8e5c19}.bar-track{background:#eaf0f7}.bar-fill{background:linear-gradient(90deg,var(--portal-blue),var(--portal-mint))}details summary{color:var(--portal-blue)}dialog{border-color:var(--portal-border);border-radius:12px;box-shadow:0 24px 80px #18315326}dialog h2{color:var(--portal-navy)}dialog::backdrop{background:#172b4666}.footer{border-top:1px solid var(--portal-border);padding-top:18px}
@media(max-width:620px){body{font-size:14px}.brand strong{font-size:21px}.brand small{font-size:10px}.main{padding:22px 16px}.page-heading h1{font-size:25px}.panel{padding:16px}.side-nav .nav-link{font-size:13px}.profile strong{font-size:14px}.sidebar-foot{font-size:12px}.fields label{font-size:13px}dialog{padding:20px;width:calc(100% - 32px)}}

/* Read-only subject viewer; editor and upload forms retain their existing styles. */
#subject-viewer{box-sizing:border-box;width:min(880px,calc(100% - 24px));max-width:880px;max-height:88vh;max-height:88dvh;padding:0;overflow:hidden}
#subject-viewer[open]{display:flex;flex-direction:column}
#subject-viewer .subject-detail-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 22px;border-bottom:1px solid var(--portal-border);flex-shrink:0;background:#fff}
#subject-viewer h2{margin:0;font-size:21px}
#subject-viewer .dialog-close{float:none;min-width:44px;min-height:44px;flex-shrink:0}
#subject-viewer .subject-detail-body{overflow-y:auto;overscroll-behavior:contain;min-height:0;padding:0 22px 22px}
#subject-viewer .subject-detail-section{padding:20px 0;border-bottom:1px solid var(--portal-border)}
#subject-viewer .subject-detail-section:last-child{border-bottom:0}
#subject-viewer h3{color:var(--portal-navy);font-size:16px;margin:0 0 12px}
#subject-viewer .subject-detail-grid{display:grid;grid-template-columns:1fr;gap:16px;margin:20px 0 0}
#subject-viewer .subject-detail-grid>div{min-width:0}
#subject-viewer dt{font-size:12px;color:var(--portal-muted);margin-bottom:5px}
#subject-viewer dd{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65;color:var(--portal-ink)}
@media(max-width:620px){#subject-viewer .subject-detail-header{padding:14px 16px}#subject-viewer h2{font-size:19px}#subject-viewer .subject-detail-body{padding:0 16px 16px}#subject-viewer .subject-detail-grid{grid-template-columns:1fr;gap:14px}}

/* Browsing tables use their own column sizes; the prototype's fixed six-column
   widths and 735px minimum must not push navigation outside the page. */
.table-scroll table.browse-table{min-width:0;table-layout:auto;width:100%}
.browse-table th:nth-child(n){width:auto;white-space:normal}
.browse-table th,.browse-table td{overflow-wrap:anywhere}
.browse-table .cell-name{min-width:0;max-width:32rem}
.browse-table td:last-child{min-width:9rem}
.browse-table .actions{min-width:0;flex-wrap:wrap}
.browse-table .button{white-space:normal;max-width:100%;text-align:center}
@media(max-width:760px){
  .table-scroll:has(>.browse-table){overflow:visible;border-top:0}
  .table-scroll table.browse-table{display:block;width:100%}
  .browse-table thead{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
  .browse-table tbody{display:block}
  .browse-table tbody>tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0 0 16px;padding:14px;border:1px solid var(--portal-border);border-radius:10px;background:#fff}
  .browse-table tbody>tr[hidden]{display:none}
  .browse-table tbody>tr>td{display:block;min-width:0;max-width:none;padding:0;border:0;white-space:normal}
  .browse-table tbody>tr>td::before{content:attr(data-label);display:block;margin-bottom:4px;color:var(--portal-muted);font-size:11px;font-weight:600}
  .browse-table tbody>tr>td.cell-name,.browse-table tbody>tr>td:last-child,.browse-table tbody>tr>td[colspan]{grid-column:1/-1}
  .browse-table .actions{display:flex;align-items:center;gap:8px}
  .browse-table td:last-child>.button{width:100%}
}

.record-context{margin:10px 0;font-size:12px;line-height:1.7}.record-context p{margin:4px 0}.context-note{padding:8px 10px;border-left:3px solid var(--portal-gold);background:#fff8e9;color:#664e22}.legacy-year{padding:16px 0;border-bottom:1px solid var(--portal-border)}
