:root {
  --ink:#20282a;
  --muted:#626d71;
  --line:#dde3e2;
  --paper:#fff;
  --wash:#f6f8f7;
  --accent:#176d5b;
  --accent-light:#eaf4f0;
  --blue:#315fa4;
  --amber:#806325;
  --error:#a23037;
  color-scheme:light;
  --on-accent:#fff;
  --accent-hover:#105745;
  --input-border:#b7c2be;
  --focus:#4484c1;
  --hover:#eef3f0;
  --track:#edf0ee;
  --earned:#338674;
  --projected:#b3cddd;
  --success-bg:#eaf4ef;
  --success-text:#216b4d;
  --info-bg:#ebf1fb;
  --warning-bg:#faf4e7;
  --error-bg:#fff1f1;
  --neutral-bg:#edf0f1;
  --withdrawn-bg:#f3eef0;
  --withdrawn-text:#765965;
  --shadow:0 8px 20px #20282a18;
  font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  color:var(--ink);
  background:var(--paper);
  font-size:14px;
  letter-spacing:0;
  font-synthesis:none;
  overflow-wrap:anywhere
}
.auth-layout { max-width:460px; margin:36px auto }
.auth-layout .field { margin-bottom:20px }
.profile-form { max-width:760px }
.compact-form { display:flex; flex-wrap:wrap; align-items:end; gap:14px; margin:16px 0 }
.compact-form .field { flex:1 1 180px; min-width:0 }
.compact-form .narrow { flex:0 1 120px }
.requirement-row { display:flex; flex-wrap:wrap; align-items:center; gap:12px; border-bottom:1px solid var(--line); padding:8px 0 }
.requirement-row>form { flex:1 1 600px }
.allocation-row { display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1fr) 36px; gap:12px; align-items:end; margin-bottom:16px }
.timeline-settings { margin:14px 0 }
.period-actions { display:flex; flex-wrap:wrap; gap:20px; align-items:start; margin:18px 0 }
.period-actions summary,.timeline-settings summary { cursor:pointer; color:var(--muted); display:flex; gap:8px; align-items:center }
.source-band { border-block:1px solid var(--line); padding:20px 0; margin-bottom:24px }
.year-nav { flex-wrap:wrap }
.section-heading,.year-heading { flex-wrap:wrap }
@media(max-width:540px) {
  .allocation-row { grid-template-columns:minmax(0,1fr) 36px }
  .allocation-row .field:first-child { grid-column:1/-1 }
  .compact-form .field { flex-basis:100% }
  .compact-form .narrow { flex-basis:130px }
  .header-inner .actions { flex-wrap:wrap; justify-content:end }
}
.table-scroll {
  position:relative
}
.metrics-band {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
  padding:24px 0;
  margin-bottom:30px;
  gap:20px
}
.metric {
  padding:0 24px;
  border-left:1px solid var(--line);
  display:flex;
  flex-direction:column;
  gap:11px;
  min-width:0
}
.metric:first-child {
  padding-left:0;
  border-left:0
}
.metric:last-child {
  padding-right:0
}
.metric-label {
  font-size:12px;
  color:var(--muted);
  min-height:18px
}
.metric>strong {
  font-size:31px;
  font-weight:600;
  line-height:1.15
}
.metric strong small {
  font-size:16px;
  font-weight:400;
  color:var(--muted)
}
.metric-note {
  font-size:11px;
  color:var(--muted)
}
.demo-tag {
  font-size:10px;
  line-height:1.6;
  color:var(--amber);
  background:var(--warning-bg);
  padding:3px 6px;
  border-radius:3px;
  display:inline-block;
  white-space:nowrap;
  font-weight:650
}
.metric .demo-tag {
  font-size:8px;
  padding:1px 3px;
  vertical-align:middle
}
.profile-meta {
  font-size:12px;
  color:var(--muted);
  margin:10px 0 0
}
.meta-divider {
  color:var(--line);
  padding:0 10px
}
.dashboard-grid {
  display:grid;
  grid-template-columns:minmax(0,1fr) 290px;
  gap:42px;
  margin:38px 0 42px
}
.section-heading {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  margin:0 0 22px
}
.section-heading h2 {
  margin:0;
  line-height:1.35
}
.section-heading .eyebrow {
  margin-bottom:10px
}
.text-link {
  display:inline-flex;
  align-items:center;
  gap:7px;
  font-size:12px;
  font-weight:550;
  white-space:nowrap
}
.progress-heading {
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:14px;
  font-size:12px;
  color:var(--muted);
  margin:28px 0 14px
}
.progress-heading strong {
  font-size:24px;
  color:var(--ink);
  font-weight:600
}
.progress-heading strong span {
  font-size:13px;
  font-weight:400
}
.progress-track {
  height:9px;
  position:relative;
  background:var(--track);
  border-radius:2px;
  overflow:hidden
}
.progress-track>span {
  position:absolute;
  left:0;
  top:0;
  height:100%
}
.earned-fill {
  background:var(--earned)
}
.projected-fill {
  background:var(--projected)
}
.progress-legend {
  display:flex;
  gap:21px;
  font-size:11px;
  color:var(--muted);
  align-items:center;
  flex-wrap:wrap;
  margin:14px 0 25px
}
.progress-legend>span {
  display:flex;
  align-items:center;
  gap:6px
}
.legend-swatch {
  width:7px;
  height:7px;
  display:inline-block;
  border-radius:1px
}
.legend-swatch.earned {
  background:var(--earned)
}
.legend-swatch.projected {
  background:var(--projected)
}
.remaining-note {
  margin-left:auto
}
.group-preview {
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:0 30px
}
.group-preview>div {
  display:flex;
  justify-content:space-between;
  gap:12px;
  border-bottom:1px solid var(--line);
  padding:14px 0;
  font-size:12px
}
.group-preview strong {
  font-weight:600;
  white-space:nowrap
}
.group-preview small {
  font-size:11px;
  font-weight:400;
  color:var(--muted)
}
.dashboard-aside {
  border-left:1px solid var(--line);
  padding-left:30px
}
.dashboard-aside .section-heading {
  margin-bottom:18px
}
.dashboard-aside .section-heading>.icon {
  color:var(--muted)
}
.plan-note {
  border-bottom:1px solid var(--line);
  padding:0 0 19px;
  margin:0 0 20px
}
.plan-note:last-child {
  border:0;
  margin:0;
  padding:0
}
.plan-note .demo-tag {
  margin-bottom:10px
}
.plan-note h3 {
  margin:0 0 7px
}
.plan-note p {
  font-size:12px;
  color:var(--muted);
  margin:0 0 11px
}
.plan-note a {
  font-size:12px;
  display:inline-flex;
  align-items:center;
  gap:8px
}
.note-heading {
  display:flex;
  align-items:center;
  gap:10px;
  margin-bottom:8px
}
.note-heading h3 {
  margin:0
}
.note-heading>.icon {
  color:var(--blue)
}
.current-term {
  border-top:1px solid var(--line);
  padding-top:26px
}
.table-scroll {
  max-width:100%;
  overflow-x:auto
}
table {
  width:100%;
  border-collapse:collapse;
  font-size:12px;
  text-align:left
}
th {
  font-size:11px;
  font-weight:550;
  color:var(--muted);
  background:var(--wash);
  white-space:nowrap;
  padding:12px 13px;
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line)
}
td {
  padding:13px;
  border-bottom:1px solid var(--line);
  line-height:1.5;
  vertical-align:middle
}
th:first-child,td:first-child {
  padding-left:16px
}
th:last-child,td:last-child {
  padding-right:16px
}
tbody tr:hover {
  background:var(--hover)
}
.num {
  text-align:right;
  white-space:nowrap;
  font-variant-numeric:tabular-nums
}
.code {
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace;
  font-size:11px;
  font-weight:550;
  white-space:nowrap
}
.code a {
  color:var(--accent)
}
.course-table {
  min-width:790px
}
.course-table .title-cell {
  min-width:175px;
  max-width:300px
}
.course-table .group-cell {
  color:var(--muted);
  font-size:11px;
  min-width:105px
}
.course-table td:last-child {
  width:80px
}
.course-table .grade {
  font-weight:600
}
.course-table .note-indicator {
  display:inline-block;
  color:var(--muted);
  margin-left:7px
}
.withdrawn-row td {
  color:var(--muted)
}
.withdrawn-row .code a {
  color:var(--muted)
}
.secondary-line {
  display:block;
  font-size:11px;
  font-weight:400;
  color:var(--muted);
  margin-top:3px
}
.course-title {
  font-weight:550
}
.exchange-table {
  min-width:1020px
}
.exchange-table td:first-child {
  min-width:180px
}
.exchange-table td:nth-child(4) {
  min-width:170px;
  max-width:220px
}
.empty-row {
  text-align:center;
  padding:28px 15px;
  color:var(--muted)
}
.term-totals {
  display:flex;
  justify-content:flex-end;
  flex-wrap:wrap;
  gap:14px 25px;
  padding:15px 16px;
  background:var(--wash);
  font-size:11px;
  color:var(--muted);
  border-bottom:1px solid var(--line)
}
.term-totals span {
  display:flex;
  align-items:baseline;
  gap:10px
}
.term-totals strong {
  color:var(--ink);
  font-size:13px;
  font-weight:600
}
.term-totals .cgpa-total {
  border-left:1px solid var(--line);
  padding-left:25px
}
.term-totals .cgpa-total strong {
  color:var(--accent)
}
.year-nav {
  display:flex;
  align-items:center;
  border-bottom:1px solid var(--line);
  margin:0 0 34px;
  gap:32px;
  padding-bottom:14px;
  overflow:auto
}
.year-nav a {
  display:flex;
  align-items:center;
  gap:9px;
  font-size:13px;
  white-space:nowrap;
  color:var(--ink);
  font-weight:600
}
.year-nav a span {
  font-size:11px;
  font-weight:400;
  color:var(--muted)
}
.year-nav a:hover {
  color:var(--accent);
  text-decoration:none
}
.study-year {
  scroll-margin-top:25px
}
.year-heading {
  display:flex;
  gap:13px;
  align-items:center;
  margin:30px 0 24px;
  padding-bottom:14px;
  border-bottom:2px solid var(--line)
}
.year-heading h2 {
  margin:0;
  font-size:20px
}
.year-heading>span {
  font-size:12px;
  color:var(--muted)
}
.term-section {
  margin:0 0 30px;
  scroll-margin-top:25px
}
.term-heading {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:18px;
  margin-bottom:12px
}
.term-name {
  display:flex;
  align-items:center;
  gap:12px;
  flex-wrap:wrap
}
.term-name h3 {
  font-size:15px;
  margin:0
}
.exchange-label {
  display:inline-flex;
  align-items:center;
  gap:6px;
  color:var(--blue);
  background:var(--info-bg);
  padding:4px 7px;
  font-size:10px;
  font-weight:600;
  border-radius:3px
}
.host-name {
  font-size:12px;
  color:var(--muted)
}
.term-settings {
  font-size:11px;
  color:var(--muted);
  margin:10px 0
}
.term-settings summary {
  display:flex;
  align-items:center;
  gap:6px;
  width:fit-content;
  cursor:pointer;
  list-style:none;
  padding:5px 0
}
.term-settings summary::-webkit-details-marker {
  display:none
}
.term-settings summary:hover {
  color:var(--accent)
}
.settings-form {
  display:grid;
  grid-template-columns:170px 1fr 1fr auto;
  align-items:end;
  gap:18px;
  background:var(--wash);
  padding:20px;
  margin-top:10px
}
.settings-form .notice {
  grid-column:1/-1
}
.settings-form .field label {
  font-size:11px
}
.settings-form input:not([type=checkbox]) {
  min-height:36px;
  font-size:12px;
  padding:8px
}
.checkbox-label {
  display:flex;
  align-items:center;
  gap:8px;
  align-self:center;
  font-size:12px!important
}
.checkbox-label input {
  accent-color:var(--accent);
  width:16px;
  height:16px
}
.main-form>.checkbox-label { margin-bottom:24px }
.exchange-note {
  font-size:11px;
  color:var(--muted);
  margin:8px 0
}
.review-notes {
  font-size:12px;
  color:var(--muted);
  margin:20px 0 26px
}
.review-notes summary {
  cursor:pointer;
  display:flex;
  align-items:center;
  gap:8px;
  width:fit-content
}
.review-notes ul {
  padding-left:24px;
  line-height:1.7
}
.back-link {
  display:inline-flex;
  align-items:center;
  gap:7px;
  font-size:12px;
  margin:0 0 24px
}
.audit-table {
  min-width:650px
}
.audit-table td {
  padding-top:18px;
  padding-bottom:18px
}
.audit-table td:first-child {
  max-width:550px
}
.audit-table td strong {
  font-size:13px;
  font-weight:600
}
.row-note {
  font-size:11px;
  line-height:1.5;
  color:var(--muted);
  margin:6px 0 0
}
.measure-label {
  font-size:10px;
  margin-left:8px;
  color:var(--muted)
}
.small-text {
  font-size:11px;
  line-height:1.5
}
.group-section {
  margin-top:40px;
  max-width:760px
}
.group-table {
  min-width:420px
}
.calculation-notes {
  border-top:1px solid var(--line);
  padding-top:24px;
  margin-top:34px
}
.calculation-notes h2 {
  font-size:15px
}
.calculation-notes ul {
  font-size:12px;
  color:var(--muted);
  padding-left:18px;
  line-height:1.8
}
.search-form {
  display:flex;
  align-items:flex-end;
  gap:10px;
  padding:24px 0 28px;
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
  margin-bottom:26px
}
.search-form .field {
  flex:1;
  max-width:580px
}
.search-form .button {
  height:42px
}
.search-input {
  position:relative
}
.search-input>.icon {
  position:absolute;
  left:12px;
  top:12px;
  color:var(--muted)
}
.search-input input {
  padding-left:40px!important
}
.results-heading h2 {
  font-size:14px;
  overflow-wrap:anywhere
}
.catalogue-table {
  min-width:700px
}
.course-title-link {
  color:var(--ink)
}
.course-details dt {
  font-size:13px
}
.course-details dd {
  max-width:65%;
  font-size:13px
}
.course-details>div {
  padding:15px 0
}
@media(max-width:1050px) {
  .metrics-band {
    gap:12px
  }
  .metric {
    padding:0 14px
  }
  .metric-label {
    font-size:11px
  }
  .metric-note {
    font-size:10px
  }
  .dashboard-grid {
    grid-template-columns:minmax(0,1fr) 250px;
    gap:28px
  }
  .dashboard-aside {
    padding-left:24px
  }
  .group-preview {
    grid-template-columns:1fr
  }
  .settings-form {
    grid-template-columns:1fr 1fr
  }
  .settings-form .checkbox-label {
    grid-column:1/-1
  }
}
@media(max-width:800px) {
  .metrics-band {
    grid-template-columns:1fr 1fr;
    gap:25px 20px
  }
  .metric:nth-child(3) {
    border-left:0;
    padding-left:0
  }
  .metric {
    padding-right:0
  }
  .metric>strong {
    font-size:28px
  }
  .dashboard-grid {
    grid-template-columns:1fr;
    gap:30px
  }
  .dashboard-aside {
    border-left:0;
    padding-left:0;
    border-top:1px solid var(--line);
    padding-top:25px;
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:20px
  }
  .dashboard-aside .section-heading {
    grid-column:1/-1;
    margin:0
  }
  .plan-note {
    border-bottom:0;
    padding:0;
    margin:0
  }
  .group-preview {
    grid-template-columns:1fr 1fr
  }
  .term-totals {
    justify-content:flex-start;
    gap:12px 20px
  }
  .term-totals .cgpa-total {
    padding-left:0;
    border:0
  }
  .year-nav {
    gap:24px
  }
  .year-nav a {
    flex-direction:column;
    align-items:flex-start;
    gap:4px
  }
  .section-heading {
    gap:12px;
    flex-wrap:wrap
  }
  .exchange-table {
    min-width:900px
  }
  .page-heading .actions {
    flex-wrap:wrap
  }
}
@media(max-width:480px) {
  .metrics-band {
    padding:21px 0
  }
  .metric-label {
    min-height:30px;
    line-height:1.5
  }
  .metric>strong {
    font-size:27px
  }
  .metric strong small {
    font-size:14px
  }
  .metric-note {
    line-height:1.5;
    min-height:30px
  }
  .group-preview {
    grid-template-columns:1fr
  }
  .dashboard-aside {
    grid-template-columns:1fr
  }
  .term-heading {
    align-items:flex-start
  }
  .term-name {
    gap:8px;
    flex:1
  }
  .term-heading>.button {
    max-width:148px;
    flex-shrink:0
  }
  .term-totals {
    font-size:10px
  }
  .term-totals strong {
    font-size:12px
  }
  .settings-form {
    grid-template-columns:1fr;
    padding:15px
  }
  .search-form {
    flex-wrap:wrap
  }
  .search-form>.field {
    flex-basis:100%;
    max-width:none
  }
  .progress-legend {
    gap:12px
  }
  .remaining-note {
    margin-left:0
  }
  .year-nav {
    justify-content:space-between;
    gap:12px
  }
  .year-nav a {
    font-size:12px
  }
  .year-nav a span {
    font-size:10px
  }
  .profile-meta {
    line-height:1.6
  }
  .progress-heading {
    align-items:flex-start
  }
}
@media print {
  .site-header,.site-footer,.button,.actions,.term-settings,.year-nav,.review-notes {
    display:none!important
  }
  .main-content {
    max-width:none;
    padding:0!important
  }
  .table-scroll {
    overflow:visible
  }
  table {
    min-width:0!important
  }
  .term-section,.metrics-band {
    break-inside:avoid
  }
  .study-year {
    break-before:page
  }
  .study-year:first-of-type {
    break-before:auto
  }
  a {
    color:inherit;
    text-decoration:none
  }
}
* {
  box-sizing:border-box
}
body {
  margin:0
}
a {
  color:var(--accent);
  text-decoration:none
}
a:hover {
  text-decoration:underline
}
button,input,select,textarea {
  font:inherit
}
button,a,input,select,textarea,summary {
  -webkit-tap-highlight-color:transparent
}
button {
  cursor:pointer
}
button:disabled {
  cursor:default;
  opacity:.5
}
button,a {
  touch-action:manipulation
}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible {
  outline:3px solid var(--focus);
  outline-offset:3px
}
h1,h2,h3,p {
  margin-top:0
}
h1 {
  font-size:29px;
  line-height:1.25;
  font-weight:650;
  margin-bottom:9px;
  overflow-wrap:anywhere
}
h2 {
  font-size:18px;
  font-weight:650;
  margin-bottom:16px
}
h3 {
  font-size:14px;
  font-weight:650
}
p {
  line-height:1.6
}
svg {
  flex-shrink:0
}
.icon {
  display:inline-block;
  vertical-align:middle;
  fill:none;
  stroke:currentColor;
  stroke-width:1.8;
  stroke-linecap:round;
  stroke-linejoin:round
}
.skip-link {
  position:fixed;
  top:-80px;
  left:12px;
  background:var(--paper);
  padding:12px;
  z-index:99
}
.skip-link:focus {
  top:10px
}
.site-header {
  border-bottom:1px solid var(--line);
  background:var(--paper)
}
.header-inner,.main-nav,.main-content,.site-footer {
  max-width:1376px;
  margin:0 auto;
  padding-left:40px;
  padding-right:40px
}
.header-inner {
  height:82px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px
}
.brand {
  display:flex;
  align-items:center;
  gap:12px;
  color:var(--ink);
  font-size:19px;
  font-weight:700;
  line-height:1.3
}
.brand:hover {
  text-decoration:none
}
.brand-mark {
  display:grid;
  place-items:center;
  color:var(--on-accent);
  background:var(--accent);
  width:40px;
  height:40px;
  border-radius:6px
}
.brand-secondary {
  font-weight:500
}
.local-label {
  font-size:12px;
  color:var(--muted);
  display:flex;
  align-items:center;
  gap:8px
}
.status-dot {
  width:6px;
  height:6px;
  border-radius:50%;
  background:var(--accent)
}
.version {
  border-left:1px solid var(--line);
  padding-left:10px;
  margin-left:5px
}
.main-nav {
  display:flex;
  gap:28px;
  overflow:auto
}
.nav-link {
  display:flex;
  align-items:center;
  gap:9px;
  white-space:nowrap;
  padding:17px 1px 16px;
  color:var(--muted);
  font-weight:500;
  border-bottom:3px solid transparent
}
.nav-link:hover {
  text-decoration:none;
  color:var(--ink)
}
.nav-link.active {
  color:var(--accent);
  border-color:var(--accent)
}
.main-content {
  min-height:calc(100vh - 270px);
  padding-top:34px;
  padding-bottom:54px
}
.page-heading {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  margin-bottom:28px
}
.eyebrow {
  font-size:11px;
  font-weight:650;
  letter-spacing:0;
  color:var(--accent);
  margin-bottom:12px
}
.subheading {
  color:var(--muted);
  margin-bottom:0;
  font-size:14px
}
.button {
  border:1px solid var(--line);
  border-radius:5px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  padding:10px 15px;
  min-height:40px;
  font-weight:550;
  font-size:13px;
  line-height:1.25;
  background:var(--paper);
  color:var(--ink);
  text-align:center
}
.button:hover {
  text-decoration:none;
  background:var(--wash)
}
.button.primary {
  background:var(--accent);
  border-color:var(--accent);
  color:var(--on-accent)
}
.button.primary:hover {
  background:var(--accent-hover)
}
.button.secondary {
  background:var(--paper)
}
.button.small {
  min-height:34px;
  padding:7px 11px;
  font-size:12px
}
.icon-button {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:32px;
  height:32px;
  flex-shrink:0;
  border:1px solid transparent;
  border-radius:4px;
  color:var(--muted);
  background:transparent
}
.icon-button:hover {
  background:var(--hover);
  color:var(--ink)
}
.icon-button.danger:hover {
  background:var(--error-bg);
  color:var(--error)
}
.actions {
  display:flex;
  align-items:center;
  gap:6px
}
.actions form {
  margin:0
}
.form-layout {
  display:grid;
  grid-template-columns:minmax(0,700px) minmax(220px,1fr);
  gap:70px;
  border-top:1px solid var(--line);
  padding-top:28px
}
.main-form {
  min-width:0
}
.main-form fieldset {
  margin:0 0 26px;
  padding:0 0 26px;
  border:0;
  border-bottom:1px solid var(--line);
  min-width:0
}
.main-form legend {
  font-size:16px;
  font-weight:650;
  padding:0 0 22px
}
.form-grid {
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:20px
}
.field {
  display:flex;
  flex-direction:column;
  gap:8px;
  min-width:0
}
.field.full {
  grid-column:1/-1
}
label {
  font-size:13px;
  font-weight:550
}
.optional {
  font-weight:400;
  color:var(--muted);
  margin-left:6px
}
input:not([type=checkbox]),select,textarea {
  border:1px solid var(--input-border);
  border-radius:4px;
  padding:10px 11px;
  min-height:42px;
  width:100%;
  background:var(--paper);
  color:var(--ink)
}
textarea {
  min-height:96px;
  resize:vertical
}
input[aria-invalid=true],select[aria-invalid=true] {
  border-color:var(--error)
}
.field-note {
  font-size:12px;
  color:var(--muted);
  margin:10px 0 0
}
.field-error {
  color:var(--error);
  font-size:12px;
  line-height:1.5
}
.form-actions {
  display:flex;
  gap:10px;
  align-items:center;
  margin-top:24px
}
.form-aside {
  border-left:1px solid var(--line);
  padding-left:30px;
  max-width:350px
}
.form-aside h2 {
  font-size:15px
}
.details-list {
  margin:0
}
.details-list>div {
  display:flex;
  justify-content:space-between;
  gap:20px;
  padding:12px 0;
  border-bottom:1px solid var(--line)
}
.details-list dt {
  color:var(--muted);
  font-size:12px
}
.details-list dd {
  margin:0;
  font-weight:500;
  font-size:13px;
  text-align:right;
  overflow-wrap:anywhere
}
.aside-note {
  margin-top:26px
}
.aside-note h3 {
  margin-bottom:7px
}
.aside-note p {
  font-size:12px;
  color:var(--muted)
}
.notice {
  border-left:3px solid var(--input-border);
  background:var(--wash);
  padding:13px 17px;
  margin:0 0 22px;
  font-size:13px;
  line-height:1.6
}
.notice p:last-child {
  margin-bottom:0
}
.notice.error {
  background:var(--error-bg);
  border-color:var(--error);
  color:var(--error)
}
.notice.success {
  border-color:var(--accent);
  background:var(--accent-light)
}
.notice ul {
  margin:7px 0 0;
  padding-left:18px
}
.notice.error a {
  color:inherit
}
.empty-state {
  padding:56px 20px;
  text-align:center
}
.empty-state p {
  color:var(--muted)
}
.site-footer {
  border-top:1px solid var(--line);
  padding-top:20px;
  padding-bottom:24px;
  color:var(--muted);
  font-size:11px;
  display:flex;
  align-items:flex-start;
  gap:35px;
  justify-content:space-between
}
.site-footer>span {
  white-space:nowrap;
  font-weight:550
}
.site-footer p {
  max-width:650px;
  margin:0
}
.footer-divider {
  padding:0 8px;
  color:var(--line)
}
.badge {
  display:inline-flex;
  align-items:center;
  gap:5px;
  padding:4px 7px;
  font-size:11px;
  font-weight:550;
  line-height:1.25;
  white-space:nowrap;
  border-radius:4px;
  background:var(--neutral-bg);
  color:var(--muted)
}
.badge:before {
  content:"";
  width:4px;
  height:4px;
  border-radius:50%;
  background:currentColor
}
.badge.completed,.badge.approved {
  background:var(--success-bg);
  color:var(--success-text)
}
.badge.in_progress {
  background:var(--info-bg);
  color:var(--blue)
}
.badge.pending_approval {
  background:var(--warning-bg);
  color:var(--amber)
}
.badge.missing {
  background:var(--neutral-bg);
  color:var(--muted)
}
.badge.withdrawn {
  background:var(--withdrawn-bg);
  color:var(--withdrawn-text)
}
.muted {
  color:var(--muted)
}
.numeric {
  font-variant-numeric:tabular-nums
}
.sr-only {
  position:absolute;
  width:1px;
  height:1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap
}
@media(max-width:800px) {
  .header-inner,.main-nav,.main-content,.site-footer {
    padding-left:20px;
    padding-right:20px
  }
  .main-nav {
    gap:22px
  }
  .nav-link {
    font-size:13px
  }
  .header-inner {
    height:74px
  }
  .brand {
    font-size:16px
  }
  .local-label {
    display:none
  }
  .main-content {
    padding-top:25px
  }
  .page-heading {
    align-items:flex-start
  }
  .form-layout {
    grid-template-columns:1fr;
    gap:35px
  }
  .form-aside {
    border-left:0;
    border-top:1px solid var(--line);
    padding:24px 0 0;
    max-width:none
  }
  .site-footer {
    flex-direction:column;
    gap:12px
  }
  h1 {
    font-size:25px
  }
}
@media(max-width:480px) {
  .header-inner,.main-nav,.main-content,.site-footer {
    padding-left:16px;
    padding-right:16px
  }
  .brand {
    font-size:15px
  }
  .brand-mark {
    width:34px;
    height:34px
  }
  .main-nav {
    gap:20px
  }
  .nav-link .icon {
    display:none
  }
  .form-grid {
    grid-template-columns:1fr
  }
  .page-heading {
    flex-direction:column;
    gap:16px
  }
  .form-actions {
    flex-wrap:wrap
  }
}

html[data-theme="dark"] {
  color-scheme:dark;
  --ink:#e9eeeb;
  --muted:#b4beb9;
  --line:#3d4642;
  --paper:#191d1c;
  --wash:#222927;
  --accent:#8cdbbd;
  --accent-light:#243e33;
  --accent-hover:#b0ecd4;
  --on-accent:#14271f;
  --blue:#a1c7fa;
  --amber:#efd297;
  --error:#ffabae;
  --input-border:#65776f;
  --focus:#9fcbff;
  --hover:#2d3833;
  --track:#37413c;
  --earned:#70c9aa;
  --projected:#517d9b;
  --success-bg:#263e31;
  --success-text:#a4e0b8;
  --info-bg:#283b50;
  --warning-bg:#433c29;
  --error-bg:#452c30;
  --neutral-bg:#303a36;
  --withdrawn-bg:#3f3038;
  --withdrawn-text:#dec3cf;
  --shadow:0 8px 20px #0005;
}
[hidden] { display:none!important }
input:read-only,select:disabled { background:var(--wash); color:var(--muted) }
input::placeholder,textarea::placeholder { color:var(--muted); opacity:.9 }
.theme-control { display:flex; align-items:center; gap:6px; color:var(--muted) }
.theme-control select { min-height:34px; width:90px; padding:5px 7px; font-size:12px }
.account-controls { flex-wrap:wrap; justify-content:flex-end }
[data-theme-error] { color:var(--error); font-size:11px; flex-basis:100%; text-align:right }
.pagination { display:flex; align-items:center; justify-content:center; gap:8px; margin:24px 0; flex-wrap:wrap }
.pagination>a { min-width:32px; height:32px; display:inline-flex; align-items:center; justify-content:center; border-radius:4px }
.pagination [aria-current=page] { background:var(--accent); color:var(--on-accent) }
.catalogue-combobox { position:relative }
.catalogue-combobox ul { list-style:none; margin:0; padding:4px; max-height:330px; overflow:auto; border:1px solid var(--input-border); border-radius:4px; background:var(--paper); box-shadow:var(--shadow) }
.catalogue-combobox li { display:grid; grid-template-columns:90px minmax(0,1fr); gap:5px 12px; padding:10px; cursor:pointer; border-bottom:1px solid var(--line) }
.catalogue-combobox li:last-child { border-bottom:0 }
.catalogue-combobox li small { grid-column:2; color:var(--muted) }
.catalogue-combobox li:hover,.catalogue-combobox li[aria-selected=true] { background:var(--accent-light) }
.catalogue-combobox [role=status] { font-size:12px }
.root-drop { height:46px; padding:12px; font-size:12px; color:var(--muted); border:1px dashed transparent; border-bottom-color:var(--line) }
.root-drop.active { border-color:var(--accent) }
.target-line { display:grid; grid-template-columns:32px minmax(0,1fr) 125px 115px 32px; gap:12px; align-items:center; min-height:64px; padding:10px 0; margin-left:calc(var(--depth) * 20px); border-bottom:1px solid var(--line); position:relative }
.target-line .drag-handle { cursor:grab }
.target-label { display:flex; align-items:center; gap:4px; min-width:0; overflow-wrap:anywhere }
.target-label strong { font-size:14px; font-weight:550 }
.container-node .target-label strong { font-weight:700 }
.target-kind { font-size:12px; color:var(--muted) }
.target-units { font-size:13px; text-align:right; font-variant-numeric:tabular-nums }
.target-units small { display:block; color:var(--muted); font-size:11px; margin-top:3px }
.target-menu { position:relative }

.admin-nav { display:flex; gap:24px; border-bottom:1px solid var(--line); margin-bottom:28px }
.admin-nav a { padding:12px 0; color:var(--muted); font-weight:600 }
.admin-nav [aria-current=page] { color:var(--accent); border-bottom:2px solid var(--accent) }
.admin-counts { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:0; margin:24px 0; border-block:1px solid var(--line) }
.admin-counts>div { padding:22px 18px 22px 0; min-width:0 }
.admin-counts dt { color:var(--muted); font-size:12px; min-height:32px }
.admin-counts dd { margin:8px 0 0; font-size:26px; font-weight:650; font-variant-numeric:tabular-nums }
.admin-section { padding:24px 0; border-bottom:1px solid var(--line) }
.account-facts { display:grid; grid-template-columns:180px minmax(0,1fr); gap:16px 24px; max-width:760px; margin:24px 0 }
.account-facts dt { color:var(--muted) }
.account-facts dd { margin:0; overflow-wrap:anywhere }
.admin-actions { flex-wrap:wrap; margin:20px 0 0 }
.admin-table { width:100%; min-width:850px }
.admin-table td { vertical-align:top; max-width:260px; overflow-wrap:anywhere }
.admin-table td .badge { margin:2px }
.admin-search { max-width:850px; margin-bottom:24px }
.admin-confirm { max-width:640px }
.admin-confirm .field { margin:24px 0 }
.admin-confirm h2 { font-size:20px }
.danger-button { background:var(--error); color:var(--paper); border:1px solid var(--error) }
.danger-button:hover { opacity:.9 }
[data-theme=dark] .danger-button { color:#181e1c }
@media(max-width:620px) {
  .admin-counts { grid-template-columns:repeat(2,minmax(0,1fr)) }
  .account-facts { grid-template-columns:minmax(0,1fr); gap:6px }
  .account-facts dd { margin-bottom:16px }
  .admin-actions { align-items:stretch; flex-direction:column }
  .admin-actions .button { justify-content:flex-start; white-space:normal }
  .auth-layout .danger-button { white-space:normal; min-height:44px; height:auto }
}
.requirement-row>.target-menu { margin-left:auto }
.target-menu summary { list-style:none; cursor:pointer }
.target-menu summary::-webkit-details-marker { display:none }
.target-menu-panel { position:absolute; z-index:10; right:0; top:36px; width:190px; padding:6px; background:var(--paper); border:1px solid var(--input-border); border-radius:6px; box-shadow:var(--shadow) }
.target-menu-panel button { display:flex; gap:10px; align-items:center; width:100%; border:0; background:transparent; color:var(--ink); padding:10px; font:inherit; font-size:13px; text-align:left; cursor:pointer }
.target-menu-panel button:hover { background:var(--wash) }
.target-menu-panel .danger { color:var(--error) }
.target-dialog { width:480px; max-width:calc(100% - 24px); max-height:calc(100% - 32px); padding:24px; color:var(--ink); background:var(--paper); border:1px solid var(--input-border); border-radius:6px; overflow:auto }
.target-dialog::backdrop { background:#0007 }
.target-dialog h2 { font-size:20px; overflow-wrap:anywhere }
.target-dialog .main-form { max-width:100% }
.target-dialog output { display:block; padding:12px 0; font-size:14px }
.target-line[data-drop=before] { box-shadow:inset 0 3px var(--accent) }
.target-line[data-drop=after] { box-shadow:inset 0 -3px var(--accent) }
[data-drop=inside] { background:var(--accent-light); outline:2px solid var(--accent); outline-offset:-2px }
.tree-label { display:flex; align-items:center; gap:4px; padding-left:calc(var(--depth) * 20px) }
.container-progress { background:var(--wash) }
.container-progress td strong { font-weight:700 }
[data-collapse][aria-expanded=false] .icon { transform:rotate(-90deg) }
[data-tree-status] { font-size:12px; max-width:500px; color:var(--muted) }
:root { --credit-earned:#348356; --credit-active:#387fb1; --credit-planned:#bbc5cd; --credit-remaining:#edf0f2 }
[data-theme=dark] { --credit-earned:#6fbc88; --credit-active:#6fa9db; --credit-planned:#727d86; --credit-remaining:#303839 }
.degree-progress { display:flex; height:12px; overflow:hidden; background:var(--credit-remaining); border-radius:3px; margin:18px 0 14px }
.degree-progress>span { flex-shrink:0 }
.segment-earned { background:var(--credit-earned) }
.segment-active { background:var(--credit-active) }
.segment-planned { background:var(--credit-planned) }
.segment-remaining { background:var(--credit-remaining) }
.progress-legend { flex-wrap:wrap }
.legend-swatch { display:inline-block; width:10px; height:10px; flex-shrink:0; border:1px solid var(--muted); border-radius:1px }
@media(max-width:620px) {
  .header-inner { height:auto; min-height:82px; padding-top:14px; padding-bottom:14px; flex-wrap:wrap; gap:12px }
  .account-controls { margin-left:auto }
  .target-line { grid-template-columns:28px minmax(0,1fr) 70px 28px; gap:4px; margin-left:calc(var(--depth) * 10px); padding:12px 0 }
  .target-label { grid-column:2; grid-row:1 }
  .target-kind { grid-column:2; grid-row:2; font-size:11px }
  .target-units { grid-column:3; grid-row:1 / span 2; font-size:12px }
  .target-menu { grid-column:4; grid-row:1 / span 2 }
  .target-line>.drag-handle { grid-row:1 / span 2; width:28px }
  .target-label strong { font-size:13px }
  .target-label>.icon { width:12px; height:12px }
  .target-label .icon-button { width:24px; height:28px; flex-shrink:0 }
  .target-dialog { padding:18px }
  .catalogue-combobox li { grid-template-columns:minmax(0,1fr) }
  .catalogue-combobox li small { grid-column:1 }
}
