@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@600;700;800&family=Inter:wght@400;500;600;700&display=swap');

:root{
  --ink:#26252a;
  --ink-soft:#4a4852;
  --muted:#807c76;
  --ink-fixed:#26252a;
  --red:#ee202e;
  --red-dark:#c81321;
  --red-tint:#fdf1f1;
  --paper:#f2f0ec;
  --surface:#ffffff;
  --border:#dfdbd3;
  --border-soft:#ebe8e2;
  --success:#1e7a4c;
  --success-bg:#e7f3ec;
  --caution:#a5680c;
  --caution-bg:#fbf1de;
  --danger:#b3261e;
  --danger-bg:#fbeae9;
  --info:#1d6fd6;
  --info-bg:#e8f1fc;
  --candy-red:#d42a33;
  --candy-white:#ffffff;
  --candy-red-light:#ec7f87;
  --cat-1:#2a78d6;
  --cat-2:#1baf7a;
  --cat-3:#eda100;
  --cat-4:#008300;
  --font-display:'Manrope',sans-serif;
  --font-body:'Inter',sans-serif;
  --font-mono:'Inter',sans-serif;
  --radius:10px;
  --radius-sm:6px;
  --shadow-sm:0 1px 2px rgba(38,37,42,0.06);
  --shadow-md:0 6px 20px rgba(38,37,42,0.10);
}

:root[data-theme="dark"]{
  --ink:#ecebe8;
  --ink-soft:#c8c5c0;
  --muted:#948f89;
  --red:#ff525c;
  --red-dark:#ff7b83;
  --red-tint:rgba(255,82,92,0.14);
  --paper:#151417;
  --surface:#201f24;
  --border:#37353c;
  --border-soft:#2b2a2f;
  --success:#4ade9a;
  --success-bg:rgba(74,222,154,0.12);
  --caution:#f0b429;
  --caution-bg:rgba(240,180,41,0.13);
  --danger:#ff6b6b;
  --danger-bg:rgba(255,107,107,0.13);
  --info:#5b9dff;
  --info-bg:rgba(91,157,255,0.14);
  --candy-red:#e5484d;
  --candy-white:#efece7;
  --candy-red-light:#d2575e;
  --cat-1:#3987e5;
  --cat-2:#199e70;
  --cat-3:#c98500;
  --cat-4:#008300;
  --shadow-sm:0 1px 2px rgba(0,0,0,0.3);
  --shadow-md:0 6px 24px rgba(0,0,0,0.45);
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
html{color-scheme:light;}
html[data-theme="dark"]{color-scheme:dark;}
body{
  font-family:var(--font-body);
  background:var(--paper);
  color:var(--ink);
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
  transition:background 0.15s,color 0.15s;
}
a{color:inherit;text-decoration:none;}
button{font-family:inherit;}

.btn{
  display:inline-flex;align-items:center;gap:7px;
  font-size:13.5px;font-weight:600;
  padding:9px 16px;border-radius:var(--radius-sm);
  border:1px solid transparent;cursor:pointer;
  transition:all 0.12s;
}
.btn-primary{background:var(--red);color:#fff;}
.btn-primary:hover{background:var(--red-dark);}
.btn-secondary{background:var(--surface);color:var(--ink);border-color:var(--border);}
.btn-secondary:hover{border-color:var(--ink);}
.btn:disabled{opacity:0.45;cursor:not-allowed;}
.btn-sm{padding:6px 11px;font-size:12.5px;}

.card{
  background:var(--surface);border:1px solid var(--border);
  border-radius:var(--radius);overflow:hidden;
}

table{width:100%;border-collapse:collapse;}
th{
  text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:0.06em;
  color:var(--muted);font-weight:600;padding:12px 14px 10px;border-bottom:1px solid var(--border);
}
td{padding:13px 14px;border-bottom:1px solid var(--border-soft);font-size:13.5px;vertical-align:middle;}
tr:last-child td{border-bottom:none;}

.field{margin-bottom:16px;}
.field label{display:block;font-size:12.5px;font-weight:600;margin-bottom:6px;color:var(--ink-soft);}
input[type=text],input[type=date],input[type=email],input[type=password],input[type=number],select,textarea{
  width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);
  font-family:inherit;font-size:13.5px;color:var(--ink);background:var(--surface);
}
input:focus,select:focus,textarea:focus{outline:2px solid var(--ink);outline-offset:1px;}

.empty{text-align:center;padding:32px 20px;color:var(--muted);font-size:13px;}

.combobox-field{position:relative;}
.combobox-list{
  position:absolute;top:100%;left:0;right:0;margin-top:4px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);max-height:220px;overflow-y:auto;z-index:30;display:none;
}
.combobox-option{padding:9px 12px;font-size:13px;cursor:pointer;}

.rating-picker{margin-bottom:14px;}
.combobox-option:hover{background:var(--border-soft);}
.combobox-create{color:var(--red);font-weight:600;}
.combobox-error{color:var(--danger);padding:9px 12px;font-size:12.5px;}

.back-link{display:block;margin:16px 0;font-size:13px;color:var(--muted);}
.back-link:hover{color:var(--ink);}

.profile-meta{display:flex;gap:20px;flex-wrap:wrap;padding:16px 20px 0;}
.profile-meta:empty{display:none;}
.profile-meta-item{display:flex;flex-direction:column;gap:2px;}
.profile-meta-label{font-size:10.5px;text-transform:uppercase;letter-spacing:0.05em;color:var(--muted);font-weight:600;}
.profile-meta-value{font-size:13px;color:var(--ink);font-weight:600;}

.stat-row{display:flex;gap:14px;flex-wrap:wrap;padding:20px;}
.stat-card{
  flex:1;min-width:110px;background:var(--paper);border:1px solid var(--border);
  border-radius:var(--radius-sm);padding:14px 16px;text-align:center;
}
.stat-card .num{font-family:var(--font-display);font-size:22px;font-weight:700;}
.stat-card .lbl{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:0.05em;margin-top:2px;}
.stat-row .stat-card:nth-child(2){background:var(--success-bg);border-color:var(--success);}
.stat-row .stat-card:nth-child(2) .num{color:var(--success);}
.stat-row .stat-card:nth-child(3){background:var(--danger-bg);border-color:var(--danger);}
.stat-row .stat-card:nth-child(3) .num{color:var(--danger);}
.stat-row .stat-card:nth-child(4){background:var(--caution-bg);border-color:var(--caution);}
.stat-row .stat-card:nth-child(4) .num{color:var(--caution);}

.search-input{margin-bottom:16px;}
.search-group{margin-bottom:16px;}
.search-group:last-child{margin-bottom:0;}
.search-group-label{font-size:11px;text-transform:uppercase;letter-spacing:0.06em;color:var(--muted);font-weight:600;margin-bottom:6px;}
.search-result-row{display:block;padding:10px 12px;border-radius:var(--radius-sm);font-size:13.5px;font-weight:600;color:var(--ink);}
.search-result-row:hover{background:var(--border-soft);}

.examiners-toolbar{display:flex;gap:12px;align-items:center;margin-bottom:18px;}
.filter-group{margin-bottom:14px;}
.filter-group:last-child{margin-bottom:0;}
.filter-group-label{
  display:block;font-size:11px;text-transform:uppercase;letter-spacing:0.06em;
  color:var(--muted);font-weight:600;margin-bottom:6px;
}
.filter-chip-row{display:flex;gap:6px;flex-wrap:wrap;}
.filter-chip{
  padding:6px 12px;border:1px solid var(--border);border-radius:14px;
  background:var(--surface);color:var(--ink-soft);font-weight:600;font-size:12px;cursor:pointer;
  transition:background 0.12s,color 0.12s,border-color 0.12s;
}
.filter-chip:hover{border-color:var(--ink);}
.filter-chip.active{background:var(--ink-fixed);color:#fff;border-color:var(--ink-fixed);}
.tag-chip{
  display:inline-block;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:9px;
  background:var(--border-soft);color:var(--ink-soft);margin:1px 3px 1px 0;
}
.tag-chip-flight{
  display:inline-block;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:9px;
  background:var(--info-bg);color:var(--info);margin:1px 3px 1px 0;
}
.tag-chip-ground{
  display:inline-block;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:9px;
  background:var(--caution-bg);color:var(--caution);margin:1px 3px 1px 0;
}

.bar-row{display:flex;align-items:center;gap:10px;margin-bottom:9px;}
.bar-row:last-child{margin-bottom:0;}
.bar-label{width:74px;flex-shrink:0;font-size:12px;color:var(--ink-soft);font-weight:600;}
.bar-track{flex:1;background:var(--border-soft);border-radius:6px;height:16px;overflow:hidden;}
.bar-fill{background:var(--red);height:100%;border-radius:6px;}
.bar-value{width:28px;flex-shrink:0;text-align:right;font-size:12px;font-weight:700;color:var(--ink);}

.breakdown-bars .bar-label{width:110px;}
.breakdown-bars .bar-value{width:auto;min-width:80px;}
.breakdown-bars .bar-sub{color:var(--muted);font-weight:600;margin-left:4px;}

.stats-insights-row{display:flex;gap:20px;flex-wrap:wrap;margin-bottom:24px;}
.stats-insight-card{flex:1;min-width:260px;margin-bottom:0;}
@media (max-width:820px){
  .stats-insights-row{flex-direction:column;}
}

.stats-filters-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:16px 20px 14px;}
.stats-filters-row select,.stats-filters-row input[type=date]{width:auto;}
.stats-filters-row .dropdown-filter-btn{width:auto;min-width:150px;}

/* App shell: top nav bar (not a sidebar) */
.app-header{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:16px 24px;
}
.app-header .btn{height:38px;flex-shrink:0;}
.presence-banner{background:var(--danger-bg);color:var(--danger);padding:9px 24px;font-size:13px;font-weight:600;text-align:center;}
.nav-tabs{display:flex;gap:8px;flex:1;flex-wrap:wrap;justify-content:flex-end;}
.nav-tab{
  background:var(--ink-fixed);color:#fff;
  padding:10px 20px;border-radius:var(--radius-sm);
  font-weight:600;font-size:13.5px;
  transition:background 0.12s,color 0.12s;
}
.nav-tab:hover{background:var(--red-dark);}
.nav-tab.active{background:var(--border-soft);color:var(--ink);}
.nav-tab.has-badge{position:relative;}
.nav-tab.has-badge::after{
  content:attr(data-badge-count);
  position:absolute;top:-6px;right:-6px;
  min-width:16px;height:16px;border-radius:8px;padding:0 4px;
  background:#000;color:#fff;font-size:10px;font-weight:800;
  display:flex;align-items:center;justify-content:center;
  border:1.5px solid var(--surface);
}
.nav-tab.active:hover{background:var(--border-soft);}

.nav-dropdown-wrap{position:relative;}
.nav-dropdown-btn{border:none;cursor:pointer;font-family:inherit;position:relative;}
.nav-dropdown-menu{
  position:absolute;top:46px;left:0;min-width:200px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-md);padding:8px;z-index:50;display:none;
}
.nav-dropdown-menu.open{display:block;}
.nav-dropdown-menu a{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 12px;border-radius:var(--radius-sm);
  font-size:13.5px;font-weight:600;color:var(--ink);
}
.nav-dropdown-menu a:hover{background:var(--border-soft);}
.nav-dropdown-menu a.active{color:var(--red);}
.nav-dropdown-badge{
  flex-shrink:0;min-width:18px;height:18px;border-radius:9px;padding:0 5px;
  background:#000;color:#fff;font-size:10.5px;font-weight:800;
  display:inline-flex;align-items:center;justify-content:center;
}

.alert-wrap{position:relative;flex-shrink:0;}
.alert-btn{
  width:38px;height:38px;border-radius:var(--radius-sm);border:none;cursor:pointer;
  background:var(--red);color:#fff;font-weight:800;font-size:16px;position:relative;
  display:flex;align-items:center;justify-content:center;
}
.alert-btn:hover{background:var(--red-dark);}
.alert-badge{
  position:absolute;top:-6px;right:-6px;
  background:#fff;color:var(--red);border:1.5px solid var(--red);
  min-width:17px;height:17px;border-radius:9px;padding:0 4px;
  font-size:10px;font-weight:800;
  display:none;align-items:center;justify-content:center;
}
.alert-menu{
  position:absolute;top:46px;left:0;width:280px;max-width:calc(100vw - 32px);
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-md);padding:10px;z-index:50;display:none;
  max-height:340px;overflow-y:auto;
}
.alert-menu.open{display:block;}
.alert-menu-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;color:var(--muted);padding:2px 6px 8px;}
.alert-menu-row{display:flex;flex-direction:column;gap:4px;padding:8px 6px;border-radius:var(--radius-sm);}
.alert-menu-row:hover{background:var(--border-soft);}
.alert-menu-row-top{display:flex;align-items:center;gap:6px;}
.alert-menu-num{flex-shrink:0;width:16px;text-align:center;font-size:11px;font-weight:700;color:var(--muted);}
.alert-menu-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;color:var(--ink);}
.alert-menu-name-urgent{color:var(--red);font-weight:800;}
.alert-menu-days{flex-shrink:0;font-size:11px;font-weight:700;color:var(--muted);}
.alert-menu-days-urgent{color:var(--red);}
.alert-menu-tags{display:flex;gap:5px;flex-wrap:wrap;}
.alert-menu-tag{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:9px;}
.alert-menu-tag.status-disapproval{background:var(--danger-bg);color:var(--danger);}
.alert-menu-tag.status-discontinue{background:var(--caution-bg);color:var(--caution);}
.alert-menu-tag.status-missing-aircraft{background:var(--info-bg);color:var(--info);}

.missing-info-student{border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:12px;}
.missing-info-student:last-child{margin-bottom:0;}
.missing-info-student-name{font-size:13px;font-weight:700;margin-bottom:10px;}
.missing-info-student-name .missing-fields{font-weight:600;color:var(--danger);}

.nav-search-wrap{position:relative;flex-shrink:0;}
.nav-search-btn{
  width:38px;height:38px;border-radius:var(--radius-sm);border:none;cursor:pointer;
  background:var(--ink-fixed);color:#fff;
  display:flex;align-items:center;justify-content:center;
}
.nav-search-btn:hover{background:var(--red-dark);}
.nav-search-panel{
  position:absolute;top:46px;right:0;width:300px;max-width:calc(100vw - 32px);
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-md);padding:12px;z-index:50;display:none;
  max-height:400px;overflow-y:auto;
}
.nav-search-panel.open{display:block;}
.nav-search-panel .search-input{margin-bottom:10px;}

.avatar-wrap{position:relative;flex-shrink:0;}
.avatar-btn{
  width:38px;height:38px;border-radius:50%;border:none;cursor:pointer;
  background:var(--ink-fixed);color:#fff;
  font-family:var(--font-mono);font-size:13px;font-weight:700;
  display:flex;align-items:center;justify-content:center;
}
.avatar-menu{
  position:absolute;top:46px;right:0;width:220px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-md);padding:10px;z-index:50;display:none;
}
.avatar-menu.open{display:block;}
.avatar-menu .who{font-size:12.5px;font-weight:600;padding:6px 8px 2px;word-break:break-all;}
.avatar-menu .role{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:0.05em;padding:0 8px 8px;}
.avatar-menu button{width:100%;text-align:left;padding:8px;border-radius:var(--radius-sm);border:none;background:transparent;cursor:pointer;font-size:13px;color:var(--ink);}
.avatar-menu button:hover{background:var(--border-soft);}
.avatar-menu-divider{height:1px;background:var(--border);margin:6px 2px;}

.content{padding:0 24px 60px;max-width:1200px;margin:0 auto;}

.panel{margin-bottom:24px;}
.panel-title{
  background:var(--ink-fixed);color:#fff;
  text-align:center;font-weight:700;font-size:14px;
  padding:12px;
}
.panel-title.profile-title-row{display:flex;align-items:center;justify-content:center;position:relative;}
.profile-edit-btn{
  position:absolute;right:16px;top:50%;transform:translateY(-50%);
  background:rgba(255,255,255,0.15);color:#fff;border:1px solid rgba(255,255,255,0.3);
  font-size:11px;font-weight:600;padding:4px 10px;border-radius:12px;cursor:pointer;
}
.profile-edit-btn:hover{background:rgba(255,255,255,0.25);}
.panel-body{padding:0;}

.organize-by{
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  padding:16px;border-bottom:1px solid var(--border);
}
.organize-by-label{font-weight:700;font-size:13.5px;white-space:nowrap;}
.segmented{display:flex;gap:10px;flex:1;flex-wrap:wrap;}
.segmented-btn{
  flex:1;min-width:110px;
  padding:10px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);
  background:var(--surface);color:var(--ink);font-weight:600;font-size:13px;cursor:pointer;
  transition:background 0.12s,color 0.12s,border-color 0.12s;
}
.segmented-btn:hover{border-color:var(--ink);}
.segmented-btn.active{background:var(--ink-fixed);color:#fff;border-color:var(--ink-fixed);}
.segmented-btn:disabled{opacity:0.5;cursor:not-allowed;}
.segmented-btn:disabled:hover{border-color:var(--border);}
.segmented-btn-count{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:19px;height:19px;border-radius:10px;padding:0 6px;margin-left:6px;
  background:var(--danger);color:#fff;font-size:11.5px;font-weight:800;
}

.group-block + .group-block{border-top:1px solid var(--border);}
.group-header{
  padding:10px 14px;font-weight:700;font-size:13px;
  background:var(--paper);border-bottom:1px solid var(--border);
}

.calendar-toolbar{
  display:flex;align-items:center;gap:10px;
  padding:16px;border-bottom:1px solid var(--border);
}
.calendar-title{
  font-family:var(--font-display);font-weight:700;font-size:16px;
  flex:1;text-align:center;
}
.calendar-compact .calendar-toolbar{padding:10px 16px;}
.calendar-compact .calendar-weekday{padding:6px;font-size:10px;}
.calendar-compact .calendar-day{min-height:38px;padding:4px 5px;}

.dashboard-top-row{display:flex;align-items:stretch;gap:20px;margin-bottom:24px;}
.dashboard-top-row .calendar-compact{flex:1;min-width:0;margin-bottom:0;display:flex;flex-direction:column;}
.dashboard-top-row .calendar-compact #calendar-grid{flex:1;grid-auto-rows:1fr;}
.dashboard-waitlist-sidebar{width:300px;flex-shrink:0;}
@media (max-width:820px){
  .dashboard-top-row{flex-direction:column;}
  .dashboard-waitlist-sidebar{width:100%;}
}
.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));}
.calendar-weekday{
  padding:10px;text-align:center;font-size:11px;text-transform:uppercase;
  letter-spacing:0.06em;color:var(--muted);font-weight:600;
  border-bottom:1px solid var(--border);background:var(--paper);
}
.calendar-day{
  min-height:52px;border-right:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft);
  padding:5px 6px;display:flex;flex-direction:column;gap:3px;min-width:0;
  cursor:pointer;transition:background 0.1s;
}
.calendar-day:hover{background:var(--border-soft);}
.calendar-day.today:hover{background:var(--red-tint);}
.calendar-day:nth-child(7n){border-right:none;}
.calendar-day.outside{background:var(--paper);}
.calendar-day.outside .calendar-day-num{color:var(--muted);}
.calendar-day.today{background:var(--red-tint);}
.calendar-day-num{font-size:11px;font-weight:700;}
.calendar-day.today .calendar-day-num{color:var(--red);}
.calendar-day-dots{display:flex;flex-wrap:wrap;gap:3px;align-items:center;}
.calendar-dot{
  width:7px;height:7px;border-radius:50%;flex-shrink:0;
  background:var(--muted);
}
.calendar-dot.status-completed{background:var(--success);}
.calendar-dot.status-cancelled{background:var(--danger);opacity:0.55;}
.calendar-dot.result-disapproval{background:var(--danger);}
.calendar-dot.result-discontinue{background:var(--caution);}
.calendar-dot-more{font-size:9px;font-weight:700;color:var(--muted);}

.modal-overlay{
  position:fixed;inset:0;background:rgba(38,37,42,0.45);
  display:flex;align-items:center;justify-content:center;z-index:200;
  padding:20px;
}
.modal{
  background:var(--surface);border-radius:var(--radius);
  width:440px;max-width:100%;max-height:80vh;overflow-y:auto;
  padding:22px;box-shadow:var(--shadow-md);
}
.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:10px;}
.modal-header h3{margin:0;font-family:var(--font-display);font-size:16px;}
.modal-close{
  background:transparent;border:none;font-size:22px;line-height:1;
  cursor:pointer;color:var(--muted);padding:2px 6px;flex-shrink:0;
}
.modal-close:hover{color:var(--ink);}

.day-modal-entry{padding:12px 0;border-bottom:1px solid var(--border-soft);}
.day-modal-entry:last-child{border-bottom:none;}
.day-modal-entry-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px;}
.day-modal-rating{font-weight:700;font-size:13px;}
.day-modal-status{
  font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;
  padding:2px 8px;border-radius:10px;flex-shrink:0;
}
.day-modal-status.status-scheduled{background:var(--border-soft);color:var(--ink-soft);}
.day-modal-status.status-completed{background:var(--success-bg);color:var(--success);}
.day-modal-status.status-cancelled{background:var(--danger-bg);color:var(--danger);}
.day-modal-status.status-pass{background:var(--success-bg);color:var(--success);}
.day-modal-status.status-disapproval{background:var(--danger-bg);color:var(--danger);}
.day-modal-status.status-discontinue{background:var(--caution-bg);color:var(--caution);}
.day-modal-status.status-other,
.day-modal-status.status-ungraded{background:var(--border-soft);color:var(--ink-soft);}
.day-modal-entry-student{font-size:14px;font-weight:600;margin-bottom:2px;}
.day-modal-entry-meta{font-size:12px;color:var(--muted);}
.day-modal-result-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;}
.result-form{margin-top:8px;display:flex;flex-direction:column;gap:8px;}
.result-error{color:var(--danger);font-size:12px;}

@media(max-width:720px){
  .calendar-day{min-height:44px;}
  .content{padding:0 14px 40px;}
  .app-header{padding:14px;}
  .organize-by{flex-direction:column;align-items:stretch;}
}

/* ---------- Builder ---------- */
.builder-layout{display:flex;align-items:flex-start;gap:20px;max-width:none;}
.builder-main{flex:1;min-width:0;}
.builder-sidebar{width:330px;flex-shrink:0;position:sticky;top:16px;}

.builder-toolbar{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin-bottom:16px;
}
.builder-filter{width:auto;min-width:150px;}

.overdue-wrap{position:relative;flex-shrink:0;}
.overdue-btn{
  width:38px;height:38px;border-radius:var(--radius-sm);cursor:pointer;
  background:var(--surface);color:var(--ink-soft);border:1px solid var(--border);position:relative;
  display:flex;align-items:center;justify-content:center;
}
.overdue-btn:hover{border-color:var(--ink);color:var(--ink);}
.overdue-badge{
  position:absolute;top:-6px;right:-6px;
  background:#fff;color:var(--red);border:1.5px solid var(--red);
  min-width:17px;height:17px;border-radius:9px;padding:0 4px;
  font-size:10px;font-weight:800;
  display:none;align-items:center;justify-content:center;
}
.overdue-menu{
  position:absolute;top:46px;right:0;width:280px;max-width:calc(100vw - 32px);
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-md);padding:10px;z-index:50;display:none;
  max-height:340px;overflow-y:auto;
}
.overdue-menu.open{display:block;}

.drag-chip{
  display:inline-flex;align-items:center;gap:6px;flex-shrink:0;
  padding:6px 11px;border-radius:var(--radius-sm);border:1px dashed var(--border);
  background:var(--paper);color:var(--ink-soft);font-size:11.5px;font-weight:600;
  cursor:grab;user-select:none;
}
.drag-chip:active{cursor:grabbing;}
.drag-chip.chip-dayoff{border-color:var(--caution);color:var(--caution);}
.drag-chip.chip-retest{border-color:var(--ink-soft);}
.drag-chip.chip-lostslot{border-color:var(--danger);color:var(--danger);}

.block-card{margin-bottom:12px;}
.block-card.block-card-past{opacity:0.85;}
.past-blocks-divider{
  font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;
  color:var(--muted);padding:16px 2px 8px;
}
.block-card-header{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:9px 14px;border-bottom:1px solid var(--border);
}
.block-card-title-row{display:flex;align-items:center;gap:6px;}
.block-card-title{font-family:var(--font-display);font-weight:700;font-size:13.5px;}
.block-email-btn{
  flex-shrink:0;width:22px;height:22px;border-radius:50%;
  border:none;background:transparent;color:var(--muted);cursor:pointer;
  display:flex;align-items:center;justify-content:center;padding:0;
}
.block-email-btn:hover{background:var(--border-soft);color:var(--ink);}
.block-email-btn.status-unsent{color:var(--danger);}
.block-email-btn.status-unsent:hover{background:var(--danger-bg);}
.block-email-btn.status-stale{color:var(--caution);}
.block-email-btn.status-stale:hover{background:var(--caution-bg);}
.block-email-btn.status-sent{color:var(--success);}
.block-email-btn.status-sent:hover{background:var(--success-bg);}
.schedule-email-dates{display:flex;gap:10px;}
.schedule-email-dates > div{flex:1;min-width:0;}
.schedule-email-summary{font-size:13px;font-weight:600;color:var(--ink-soft);margin:0 0 16px;}
:root[data-theme="dark"] #schedule-email-range .segmented-btn.active{background:var(--ink);color:var(--surface);border-color:var(--ink);}
.block-card-sub{font-size:11px;color:var(--muted);margin-top:1px;}
.block-card-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex-shrink:0;}
.block-toggle-btn{
  flex-shrink:0;width:30px;height:30px;border-radius:var(--radius-sm);
  border:1px solid var(--border);background:var(--surface);color:var(--ink-soft);
  font-size:13px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;padding:0;
}
.block-toggle-btn:hover{border-color:var(--ink);color:var(--ink);}

.block-dates{padding:0 14px;}
.block-date-row{
  display:flex;align-items:flex-start;gap:8px;padding:9px 0;
  border-bottom:2px solid var(--border);
}
.block-date-row:last-child{border-bottom:none;}
.block-date-row.block-labels-row{
  padding:7px 0;border-bottom:1px solid var(--border);background:var(--paper);
}
.block-date-label-col{width:100px;flex:0 0 100px;display:flex;flex-direction:column;gap:6px;}
.block-date-label{font-weight:700;font-size:11.5px;padding-top:4px;}
.block-date-weekday{font-size:10px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:0.03em;margin-top:-4px;}
.block-labels-row .block-date-label{
  padding-top:0;font-size:10px;text-transform:uppercase;letter-spacing:0.05em;color:var(--muted);
}
.block-slots{display:flex;flex-direction:column;gap:5px;flex:1;min-width:0;}
.slot-add-btn{
  align-self:flex-start;white-space:nowrap;
  padding:4px 8px;border-radius:var(--radius-sm);
  border:1.5px dashed var(--border);background:transparent;color:var(--muted);
  font-size:11px;font-weight:600;cursor:pointer;
}
.slot-add-btn:hover{border-color:var(--ink);color:var(--ink);}

.slot-cell{
  border-radius:var(--radius-sm);
  padding:5px 9px;font-size:11.5px;text-align:left;
  border:1.5px dashed var(--border);background:var(--paper);color:var(--muted);
  transition:border-color 0.12s,background 0.12s;
  display:flex;align-items:center;gap:8px;line-height:1.3;
}
.slot-cell.slot-header{
  border-color:transparent;background:transparent;color:var(--muted);cursor:default;
  padding-top:0;padding-bottom:0;
  font-size:10px;text-transform:uppercase;letter-spacing:0.05em;font-weight:700;
}
.slot-cell .slot-time-col{width:62px;flex:0 0 62px;display:flex;flex-direction:column;gap:1px;min-width:0;}
.slot-cell .slot-time{font-weight:700;font-size:11px;color:var(--ink-soft);cursor:pointer;}
.slot-cell .slot-time:hover{text-decoration:underline;}
.slot-cell.slot-header .slot-time{cursor:default;font-size:10px;color:var(--muted);}
.slot-cell.slot-header .slot-time:hover{text-decoration:none;}
.slot-aircraft-row{display:flex;align-items:center;gap:3px;min-width:0;}
.slot-aircraft{
  font-size:9px;color:var(--muted);cursor:pointer;flex:0 1 auto;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;
}
.slot-aircraft:hover{text-decoration:underline;color:var(--ink);}
.slot-aircraft.unset{opacity:0.5;font-style:italic;}
.slot-cell.slot-header .slot-aircraft{display:none;}
.slot-aircraft-link{
  flex-shrink:0;font-size:9px;line-height:1;color:var(--info);text-decoration:none;
}
.slot-aircraft-link:hover{text-decoration:underline;}
.slot-far-part{
  flex-shrink:0;font-size:9px;font-weight:700;padding:1px 5px;border-radius:8px;
  background:var(--border-soft);color:var(--ink-soft);cursor:pointer;white-space:nowrap;
}
.slot-far-part:hover{background:var(--border);color:var(--ink);}
.slot-far-part.unset{opacity:0.6;font-style:italic;font-weight:600;background:transparent;border:1px dashed var(--border);}
.slot-cell.slot-header .slot-far-part{display:none;}
.slot-cell .slot-label-wide{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;}
.slot-cell .slot-col-instructor,.slot-cell .slot-col-student{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 0;min-width:0;
}
.slot-cell.slot-filled .slot-col-instructor{cursor:pointer;}
.slot-cell.slot-filled .slot-col-instructor:hover{text-decoration:underline;color:var(--ink);}
.slot-cell .slot-col-student-wrap{display:flex;align-items:center;gap:3px;flex:1 1 0;min-width:0;}
.slot-cell .slot-col-student-wrap .slot-col-student{flex:0 1 auto;min-width:0;}
.slot-cell .slot-col-rating{width:52px;flex:0 0 52px;}
.slot-cell .slot-col-grade{width:118px;flex:0 0 118px;display:flex;align-items:center;gap:5px;overflow:hidden;}
.slot-cell .slot-col-note{width:24px;flex:0 0 24px;display:flex;align-items:center;justify-content:center;}
.slot-mail-btn{
  flex-shrink:0;width:16px;height:16px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:10px;cursor:pointer;
  border:1px solid transparent;
}
.slot-mail-btn:hover{background:var(--border-soft);}
.slot-mail-btn.status-none{color:var(--muted);opacity:0.35;cursor:default;}
.slot-mail-btn.status-unsent{color:var(--danger);}
.slot-mail-btn.status-unsent:hover{background:var(--danger-bg);}
.slot-mail-btn.status-stale{color:var(--caution);}
.slot-mail-btn.status-stale:hover{background:var(--caution-bg);}
.slot-mail-btn.status-sent{color:var(--success);}
.slot-mail-btn.status-sent:hover{background:var(--success-bg);}
.slot-chat-btn{
  position:relative;flex-shrink:0;width:18px;height:18px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  border:1px solid transparent;color:var(--info);
}
.slot-chat-btn:hover{background:var(--info-bg);}
.slot-chat-btn.status-none{color:var(--muted);opacity:0.45;}
.slot-chat-btn.status-none:hover{opacity:1;background:var(--border-soft);}
.slot-chat-btn.status-unread{color:#fff;background:var(--red);}
.slot-chat-btn.status-unread:hover{background:var(--red-dark);}
.slot-chat-btn.busy{opacity:0.4;pointer-events:none;}
.chat-btn-badge{
  position:absolute;top:-6px;right:-7px;min-width:13px;height:13px;border-radius:7px;padding:0 3px;
  background:var(--ink-fixed);color:#fff;font-size:8.5px;font-weight:800;line-height:13px;text-align:center;
  border:1px solid var(--surface);
}
.waitlist-row .slot-chat-btn{margin-left:auto;}
.waitlist-row .slot-chat-btn + .waitlist-row-delete{margin-left:0;}
.slot-note-btn{
  flex-shrink:0;width:18px;height:18px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:11px;color:var(--info);cursor:pointer;
  border:1px solid transparent;
}
.slot-note-btn:hover{background:var(--info-bg);}
.slot-note-btn.has-notes{color:var(--info);border-color:var(--info);background:var(--info-bg);}
.slot-cell.slot-open{cursor:default;}
.slot-cell.slot-open.drag-over{border-color:var(--red);background:var(--red-tint);color:var(--ink);}
.slot-cell.slot-filled{border-style:solid;background:var(--surface);border-color:var(--border);color:var(--ink);}
.slot-cell.slot-filled .slot-col-student{font-weight:600;}
.slot-cell.slot-filled[draggable="true"]{cursor:grab;}
.slot-cell.slot-filled[draggable="true"]:active{cursor:grabbing;}
.slot-cell.slot-filled.dragging{opacity:0.4;}
.slot-cell.slot-blocked{border-style:solid;background:var(--caution-bg);border-color:var(--caution);color:var(--caution);}
.slot-cell.slot-blocked.slot-retest{background:var(--border-soft);border-color:var(--ink-soft);color:var(--ink-soft);}
.slot-cell.slot-blocked.slot-lost{background:var(--danger-bg);border-color:var(--danger);color:var(--danger);}
.slot-cell.slot-blocked.drag-over{border-color:var(--red);box-shadow:0 0 0 2px var(--red-tint) inset;}
.slot-cell.slot-blocked.slot-lost-charged{
  border-color:var(--candy-red);color:var(--danger);cursor:pointer;
  background:repeating-linear-gradient(135deg,var(--candy-red) 0 8px,var(--candy-white) 8px 16px);
}
.slot-cell.slot-lost-charged .slot-time,
.slot-cell.slot-lost-charged .slot-lost-text{background:var(--surface);color:var(--danger);border-radius:5px;padding:1px 6px;font-weight:700;}
.slot-cell.slot-lost-charged .slot-lost-text{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;}
.slot-cell.slot-lost-charged .slot-delete-btn,.slot-cell.slot-lost-charged .slot-remove-btn{background:var(--surface);}
.slot-cell.slot-lost-charged .slot-lost-unsent{display:inline-block;margin-left:6px;vertical-align:middle;background:var(--surface);color:var(--caution);border:1px solid var(--caution);border-radius:5px;padding:0 6px;font-weight:700;cursor:pointer;}
.slot-cell.slot-lost-charged .slot-lost-unsent:hover{background:var(--caution-bg);}
.slot-cell.slot-filled.drag-over-lost{
  border-color:var(--candy-red);box-shadow:0 0 0 2px var(--candy-red) inset;
  background:repeating-linear-gradient(135deg,var(--danger-bg) 0 8px,var(--surface) 8px 16px);
}
.slot-actions{margin-left:auto;flex-shrink:0;display:flex;gap:4px;opacity:0;transition:opacity 0.12s;}
.slot-cell:hover .slot-actions{opacity:1;}
.slot-delete-btn,.slot-remove-btn{
  flex-shrink:0;width:16px;height:16px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:10px;font-weight:700;cursor:pointer;transition:background 0.12s;
}
.slot-delete-btn{color:var(--danger);}
.slot-delete-btn:hover{background:var(--danger-bg);}
.slot-remove-btn{color:var(--muted);}
.slot-remove-btn:hover{background:var(--border-soft);color:var(--ink);}
.slot-result-tag{
  display:inline-block;flex-shrink:1;min-width:0;font-size:9.5px;font-weight:700;
  text-transform:uppercase;letter-spacing:0.03em;padding:1px 6px;border-radius:8px;
  cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.slot-result-tag:hover{filter:brightness(0.92);}
.slot-result-tag.status-pass{background:var(--success-bg);color:var(--success);}
.slot-result-tag.status-disapproval{background:var(--danger-bg);color:var(--danger);}
.slot-result-tag.status-discontinue{background:var(--caution-bg);color:var(--caution);}
.slot-result-tag.status-other{background:var(--border-soft);color:var(--ink-soft);}
.slot-result-tag.status-ungraded{background:var(--info-bg);color:var(--info);}
.slot-result-tag.status-overdue{background:var(--border-soft);color:var(--muted);}
.slot-result-tag.status-retest{background:var(--danger-bg);color:var(--danger);}
.slot-result-tag.status-continuation{background:var(--caution-bg);color:var(--caution);}

.waitlist-toolbar{display:flex;gap:8px;padding:14px 14px 10px;flex-wrap:wrap;}
.waitlist-toolbar select{width:auto;flex:1 1 auto;min-width:0;}
.waitlist-toolbar #reorder-toggle{flex:1 1 100%;}
.waitlist-toolbar .dropdown-filter-btn{flex:1 1 auto;min-width:0;}

.dropdown-filter-btn{
  padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);
  background:var(--surface);color:var(--ink);font-family:inherit;font-size:13.5px;
  text-align:left;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.dropdown-filter-btn::after{content:" ▾";color:var(--muted);}
.dropdown-filter-btn:hover{border-color:var(--ink);}
.dropdown-filter-panel{
  position:absolute;z-index:200;min-width:160px;max-height:280px;overflow-y:auto;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-md);padding:8px;
}
.dropdown-filter-option{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:var(--radius-sm);font-size:13px;color:var(--ink);cursor:pointer;}
.dropdown-filter-option:hover{background:var(--border-soft);}
.dropdown-filter-option input{width:auto;flex-shrink:0;}
.dropdown-filter-clear{
  width:100%;text-align:center;padding:7px 8px;margin-top:4px;
  border:none;border-top:1px solid var(--border-soft);background:transparent;
  color:var(--muted);font-size:12px;font-weight:600;cursor:pointer;
}
.dropdown-filter-clear:hover{color:var(--ink);}
.waitlist-rows{max-height:420px;overflow-y:auto;padding:0 14px;}
.waitlist-row{
  display:flex;align-items:center;gap:8px;
  padding:10px 4px;border-bottom:1px solid var(--border-soft);
}
.waitlist-row:last-child{border-bottom:none;}
.waitlist-row[draggable="true"]{cursor:grab;}
.waitlist-row.dragging{opacity:0.4;}
.waitlist-row.drag-over{background:var(--border-soft);}
.waitlist-row-num{
  flex-shrink:0;width:16px;text-align:center;
  font-size:11px;font-weight:700;color:var(--muted);
}
.waitlist-row-name{
  flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:13px;font-weight:600;padding:3px 8px;border-radius:6px;
}
.waitlist-row-name.tier-disapproval{background:var(--danger-bg);color:var(--danger);--tier-bg:var(--danger-bg);}
.waitlist-row-name.tier-discontinue{background:var(--caution-bg);color:var(--caution);--tier-bg:var(--caution-bg);}
.waitlist-row-name.tier-normal{background:var(--success-bg);color:var(--success);--tier-bg:var(--success-bg);}
.waitlist-row-name.lost-slot-marker,.slot-col-student.lost-slot-marker{
  border:3px solid transparent;
  background:
    linear-gradient(var(--tier-bg,var(--surface)),var(--tier-bg,var(--surface))) padding-box,
    linear-gradient(var(--surface),var(--surface)) padding-box,
    repeating-linear-gradient(135deg,var(--candy-red-light) 0 4px,var(--candy-white) 4px 8px) border-box;
}
.slot-col-student.lost-slot-marker{padding:0 5px;border-radius:5px;}
.waitlist-row-rating{
  font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:9px;
  background:var(--border-soft);color:var(--ink-soft);flex-shrink:0;
}
.waitlist-row-location{
  font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:9px;
  background:var(--border-soft);color:var(--muted);flex-shrink:0;
}
.waitlist-row-delete{
  flex-shrink:0;margin-left:auto;width:20px;height:20px;border-radius:50%;
  border:none;background:transparent;color:var(--muted);cursor:pointer;
  font-size:15px;line-height:1;display:flex;align-items:center;justify-content:center;
}
.waitlist-row-delete:hover{background:var(--danger-bg);color:var(--danger);}
.waitlist-footer{padding:12px 14px 14px;border-top:1px solid var(--border);}

.builder-sidebar.drag-over-panel{outline:2px dashed var(--red);outline-offset:5px;border-radius:var(--radius);}
.builder-sidebar > .card + .card{margin-top:16px;}
.sidebar-drop-target.drag-over-panel{outline:2px dashed var(--red);outline-offset:5px;border-radius:var(--radius);}

.result-popover{
  position:absolute;z-index:150;width:260px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);padding:10px;
}
.result-popover select{width:100%;font-size:12.5px;}
.result-popover textarea{width:100%;font-size:12.5px;margin-top:6px;min-height:56px;resize:vertical;}
.result-popover .segmented-btn{min-width:0;padding:7px 10px;font-size:12.5px;}
.result-popover-error{color:var(--danger);font-size:11.5px;margin-top:6px;}

.note-popover{
  position:absolute;z-index:150;width:240px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);padding:10px;
}
.note-popover textarea{width:100%;font-size:12.5px;min-height:80px;resize:vertical;}

.aircraft-popover{
  position:absolute;z-index:150;width:150px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);padding:10px;
}
.aircraft-popover-input-row{display:flex;align-items:center;gap:6px;}
.aircraft-popover-prefix{flex-shrink:0;font-weight:700;font-size:14px;color:var(--ink-soft);}
.aircraft-popover-input-row input{flex:1;min-width:0;}

.far-part-popover{
  position:absolute;z-index:150;width:190px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);padding:10px;
}
.far-part-popover .segmented-btn{min-width:0;padding:7px 8px;font-size:12px;}

.instructor-popover{
  position:absolute;z-index:150;width:240px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);padding:10px;
}

.time-popover{
  position:absolute;z-index:150;width:150px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);padding:10px;
}
.time-popover input{width:100%;}

.combobox-create-popover{
  position:absolute;z-index:250;width:260px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);padding:10px;
}
.combobox-create-name{font-size:12.5px;font-weight:700;margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.combobox-create-popover input,.combobox-create-popover select{width:100%;font-size:12.5px;margin-bottom:6px;}
.combobox-crm-search-btn{margin-bottom:6px;}
.combobox-crm-results{
  max-height:180px;overflow-y:auto;margin-bottom:6px;
  border:1px solid var(--border-soft);border-radius:var(--radius-sm);
}
.combobox-crm-status{padding:8px;font-size:12px;color:var(--muted);}
.combobox-crm-option{padding:6px 8px;cursor:pointer;border-bottom:1px solid var(--border-soft);}
.combobox-crm-option:last-child{border-bottom:none;}
.combobox-crm-option:hover{background:var(--border-soft);}
.combobox-crm-option-name{font-size:12.5px;font-weight:600;color:var(--ink);}
.combobox-crm-option-email{font-size:11px;color:var(--muted);}

.signature-canvas{
  width:100%;max-width:380px;height:120px;
  border:1px solid var(--border);border-radius:var(--radius-sm);
  background:#fff;touch-action:none;cursor:crosshair;display:block;
}
.signature-thumb{
  width:70px;height:26px;object-fit:contain;
  background:#fff;border:1px solid var(--border);border-radius:4px;cursor:pointer;
}
.combobox-create-error{color:var(--danger);font-size:11.5px;margin-top:6px;}

.history-entry{padding:11px 0;border-bottom:1px solid var(--border-soft);}
.history-entry:last-child{border-bottom:none;}
.history-entry-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px;}
.history-tag{
  font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.04em;
  padding:2px 8px;border-radius:10px;flex-shrink:0;
}
.history-tag.history-waitlisted{background:var(--border-soft);color:var(--ink-soft);}
.history-tag.history-scheduled{background:var(--success-bg);color:var(--success);}
.history-tag.history-moved{background:var(--caution-bg);color:var(--caution);}
.history-tag.history-unscheduled{background:var(--danger-bg);color:var(--danger);}
.history-tag.history-held{background:var(--border-soft);color:var(--ink-soft);}
.history-tag.history-unheld{background:var(--border-soft);color:var(--ink-soft);}
.history-tag.history-lost_slot{background:var(--danger-bg);color:var(--danger);}
.history-tag.history-removed{background:var(--border-soft);color:var(--ink-soft);}
.history-time{font-size:11px;color:var(--muted);flex-shrink:0;}
.history-detail{font-size:13px;color:var(--ink);margin-bottom:2px;}
.history-actor{font-size:11.5px;color:var(--muted);}

.modal-wide{width:560px;}
.override-modal-warning{border:2px solid var(--danger);}
.lost-slot-modal{border-top:6px solid transparent;border-image:repeating-linear-gradient(135deg,var(--candy-red) 0 8px,var(--candy-white) 8px 16px) 6;}
.lost-slot-student{background:var(--paper);border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:14px;}
.lost-slot-student-name{font-weight:700;font-size:15px;color:var(--ink);}
.lost-slot-student-meta{font-size:12.5px;color:var(--ink-soft);margin-top:2px;}
.lost-slot-student-type{font-size:11.5px;color:var(--muted);margin-top:6px;}
.lost-slot-student-type.is-club{color:var(--info);font-weight:600;}
.lost-slot-charge{background:var(--danger-bg);color:var(--danger);border-radius:var(--radius-sm);padding:9px 12px;font-size:13px;margin:-4px 0 14px;}
.override-modal-warning .modal-header h3{color:var(--danger);}
.override-modal-warning::before{
  content:"⚠";
  display:block;font-size:26px;color:var(--danger);
  margin-bottom:4px;
}
.hint{font-size:11.5px;color:var(--muted);margin-top:8px;}
.hint-matched{color:var(--success);font-weight:600;}
.hint-warning{color:var(--caution);font-weight:600;}

.checklist-cards{display:flex;flex-direction:column;gap:10px;}
.checklist-card{
  border:1px solid var(--border);border-radius:var(--radius-sm);
  padding:14px 16px;background:var(--surface);
}
.checklist-card-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;}
.checklist-card-header-clickable{cursor:pointer;}
.checklist-card-student{font-weight:700;font-size:14px;}
.checklist-card-instructor{font-size:13px;font-weight:700;color:var(--ink-soft);}
.checklist-card-meta{font-size:11.5px;color:var(--muted);}
.checklist-toggle-btn{
  margin-left:auto;background:none;border:none;color:var(--muted);
  font-size:12px;cursor:pointer;padding:2px 6px;transition:transform 0.12s;
}
.checklist-card-expanded .checklist-toggle-btn{transform:rotate(180deg);}
.checklist-items{display:flex;flex-direction:row;flex-wrap:wrap;gap:14px 20px;}
.checklist-card-collapsed .checklist-items{display:none;}
.checklist-card-collapsed.checklist-card-expanded .checklist-items{display:flex;margin-top:10px;}
.checklist-card-collapsed .checklist-card-header{margin-bottom:0;}
.checklist-item{flex:1 1 200px;min-width:180px;}
.checklist-item-label{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;}
.checklist-item-label input{flex-shrink:0;width:15px;height:15px;cursor:pointer;}
.checklist-item-by{font-size:11px;color:var(--muted);margin-left:23px;margin-top:2px;}

.request-card{
  border:1px solid var(--border);border-radius:var(--radius-sm);
  padding:16px 18px;margin-bottom:12px;background:var(--surface);
}
.request-card:last-child{margin-bottom:0;}
.request-card-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px;}
.request-card-names{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.request-card-student{font-weight:700;font-size:14.5px;}
.request-card-meta{font-size:11.5px;color:var(--muted);flex-shrink:0;}
.request-status{font-size:10.5px;font-weight:700;padding:3px 9px;border-radius:9px;text-transform:uppercase;letter-spacing:0.04em;}
.request-status.status-pending{background:var(--caution-bg);color:var(--caution);}
.request-status.status-approved{background:var(--success-bg);color:var(--success);}
.request-status.status-denied{background:var(--danger-bg);color:var(--danger);}
.request-status.status-awaiting_payment{background:var(--info-bg);color:var(--info);}
.tag-chip.tag-chip-club{background:var(--info-bg);color:var(--info);}
.tag-chip.tag-chip-untyped{background:var(--caution-bg);color:var(--caution);}

.user-status{font-size:10.5px;font-weight:700;padding:3px 9px;border-radius:9px;text-transform:uppercase;letter-spacing:0.04em;}
.user-status.status-active{background:var(--success-bg);color:var(--success);}
.user-status.status-pending{background:var(--caution-bg);color:var(--caution);}
.user-status.status-deactivated{background:var(--danger-bg);color:var(--danger);}
.user-row-actions{display:flex;gap:6px;flex-wrap:wrap;}
.request-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px 20px;margin-bottom:6px;}
.request-field-label{font-size:10.5px;text-transform:uppercase;letter-spacing:0.05em;color:var(--muted);font-weight:600;margin-bottom:2px;}
.request-field-value{font-size:13px;color:var(--ink);}
.request-folder-link{font-weight:600;color:var(--red);}
.request-folder-link:hover{color:var(--red-dark);}
.request-denial-note{font-size:12.5px;color:var(--danger);background:var(--danger-bg);padding:8px 10px;border-radius:var(--radius-sm);margin-top:6px;}
.request-late-payment-note{font-size:12.5px;color:var(--caution);background:var(--caution-bg);padding:8px 10px;border-radius:var(--radius-sm);margin-top:6px;}
.request-card-actions{display:flex;gap:8px;align-items:center;margin-top:12px;}
.request-approve-btn,.request-deny-btn{
  width:34px;height:34px;border-radius:50%;border:1.5px solid var(--border);background:var(--surface);
  display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:800;cursor:pointer;
  transition:background 0.12s,border-color 0.12s;
}
.request-approve-btn{color:var(--success);}
.request-approve-btn:hover{background:var(--success-bg);border-color:var(--success);}
.request-deny-btn{color:var(--danger);}
.request-deny-btn:hover{background:var(--danger-bg);border-color:var(--danger);}

.block-cal-toolbar{
  display:flex;align-items:center;justify-content:space-between;
  padding:6px 2px;font-weight:700;font-size:13px;
}
.mini-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;}
.mini-cal-day{
  aspect-ratio:1;display:flex;align-items:center;justify-content:center;
  font-size:12px;border-radius:6px;cursor:pointer;background:var(--paper);
  border:1px solid transparent;color:var(--ink);
}
.mini-cal-day:hover{border-color:var(--ink);}
.mini-cal-day.outside{color:var(--muted);opacity:0.5;pointer-events:none;}
.mini-cal-day.past{color:var(--muted);}
.mini-cal-day.selected{background:var(--red);color:#fff;}
.mini-cal-day.booked{background:var(--ink-fixed);color:#fff;cursor:not-allowed;pointer-events:none;}

@media(max-width:900px){
  .builder-layout{flex-direction:column;}
  .builder-sidebar{width:100%;position:static;}
}

/* ---- Student portal (portal.html) ------------------------------------ */
.portal-error,.chat-error{font-size:12.5px;color:var(--danger);margin:0 0 12px;display:none;line-height:1.45;}

.portal-body{
  --pt-ground:#f4f3f1;
  --pt-glass:rgba(244,243,241,0.92);
  --pt-glass-dock:rgba(244,243,241,0.92);
  --pt-card:#ffffff;
  --pt-fill:#f4f3f1;
  --pt-fill-2:#e7e5e1;
  --pt-bubble:#e7e5e1;
  --pt-bubble-card:#eeedea;
  --pt-ink:#1d1c20;
  --pt-ink-2:#4a4852;
  --pt-muted:#6b6870;
  --pt-faint:#8b8890;
  --pt-hair:rgba(29,28,32,0.08);
  --pt-line:rgba(29,28,32,0.14);
  --pt-red:#d6131f;
  --pt-red-hover:#bd0f1a;
  --pt-red-ring:rgba(214,19,31,0.12);
  --pt-on-red:#ffffff;
  --pt-green:#1b6e45;
  --pt-green-bg:#e4f2ea;
  --pt-amber:#7a4a00;
  --pt-amber-bg:#fbefd6;
  --pt-danger:#b3261e;
  --pt-danger-bg:#fbeae9;
  --pt-neutral-bg:#eeedea;
  --pt-strong:#1d1c20;
  --pt-strong-hover:#000000;
  --pt-on-strong:#ffffff;
  --pt-shadow:0 1px 2px rgba(29,28,32,0.04),0 8px 24px rgba(29,28,32,0.06);
  --pt-shadow-sm:0 1px 2px rgba(29,28,32,0.05);
  --pt-header-h:56px;
  --pt-font:-apple-system,BlinkMacSystemFont,'SF Pro Text',system-ui,'Segoe UI',sans-serif;
  --pt-mono:ui-monospace,'SF Mono',Menlo,monospace;
  min-height:100vh;background:var(--pt-ground);color:var(--pt-ink);font-family:var(--pt-font);
  -webkit-text-size-adjust:100%;text-size-adjust:100%;
}
:root[data-theme="dark"] .portal-body{
  --pt-ground:#131215;
  --pt-glass:rgba(19,18,21,0.92);
  --pt-glass-dock:rgba(19,18,21,0.92);
  --pt-card:#1f1e23;
  --pt-fill:#2a2930;
  --pt-fill-2:#34333a;
  --pt-bubble:#2a2930;
  --pt-bubble-card:#2c2b31;
  --pt-ink:#f2f1ee;
  --pt-ink-2:#d0cdd5;
  --pt-muted:#a9a6ae;
  --pt-faint:#77747d;
  --pt-hair:rgba(255,255,255,0.08);
  --pt-line:rgba(255,255,255,0.16);
  --pt-red-hover:#e5242f;
  --pt-red-ring:rgba(255,92,102,0.3);
  --pt-green:#5fd39c;
  --pt-green-bg:rgba(95,211,156,0.14);
  --pt-amber:#f3c46a;
  --pt-amber-bg:rgba(243,196,106,0.14);
  --pt-danger:#ff8a80;
  --pt-danger-bg:rgba(255,138,128,0.14);
  --pt-neutral-bg:#2a2930;
  --pt-strong:#f2f1ee;
  --pt-strong-hover:#ffffff;
  --pt-on-strong:#1d1c20;
  --pt-shadow:0 1px 2px rgba(0,0,0,0.4),0 8px 24px rgba(0,0,0,0.32);
  --pt-shadow-sm:0 1px 2px rgba(0,0,0,0.4);
}

.portal-body .portal-header{
  position:sticky;top:0;z-index:20;background:var(--pt-glass);
  -webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  border-bottom:1px solid var(--pt-hair);transition:border-color .2s ease;
}
.portal-body .portal-header-inner{
  max-width:1040px;margin:0 auto;height:var(--pt-header-h);display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:0 max(20px,env(safe-area-inset-right)) 0 max(20px,env(safe-area-inset-left));
}
.portal-body .portal-brand{font-size:15px;font-weight:600;letter-spacing:-0.01em;}
.portal-body .portal-header-title{font-size:13px;font-weight:500;color:var(--pt-ink-2);}
.portal-body .portal-main{max-width:640px;margin:0 auto;padding:24px max(16px,env(safe-area-inset-right)) 0 max(16px,env(safe-area-inset-left));}

.portal-body .pt-h1{margin:0;font-size:30px;line-height:1.1;font-weight:700;letter-spacing:-0.022em;}
.portal-body .pt-h1:focus{outline:none;}
.portal-body .pt-sub{margin:0;font-size:16px;line-height:1.45;color:var(--pt-muted);}
.portal-body .pt-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;}
.portal-body .pt-eyebrow{margin:0;font-size:12px;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;color:var(--pt-muted);}
.portal-body .pt-eyebrow-ok{color:var(--pt-green);}
.portal-body .pt-foot,.portal-body .pt-note,.portal-body .pt-fine{margin:0;padding:0 4px;font-size:13px;line-height:1.45;color:var(--pt-muted);}
.portal-body .portal-error{margin:0;padding:0 4px;font-size:13px;line-height:1.45;color:var(--pt-danger);}
.portal-body a:focus-visible,.portal-body button:focus-visible{outline:2px solid var(--pt-ink);outline-offset:2px;}

.portal-body .pt-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 16px;
  border:0;border-radius:14px;font:inherit;font-size:16px;font-weight:600;letter-spacing:-0.01em;line-height:1.2;
  text-decoration:none;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .1s ease,background-color .15s ease;
}
.portal-body .pt-btn:active{transform:scale(0.97);}
.portal-body .pt-btn:disabled{opacity:0.55;cursor:default;transform:none;}
.portal-body .pt-btn svg{flex:none;}
.portal-body .pt-btn-primary{min-height:54px;border-radius:16px;background:var(--pt-red);color:var(--pt-on-red);font-size:17px;}
.portal-body .pt-btn-soft{background:var(--pt-fill);color:var(--pt-ink);}
.portal-body .pt-btn-strong{background:var(--pt-strong);color:var(--pt-on-strong);}
@media (hover:hover){
  .portal-body .pt-btn-primary:hover:not(:disabled),.portal-body .pt-send:hover:not(:disabled){background:var(--pt-red-hover);}
  .portal-body .pt-btn-soft:hover{background:var(--pt-fill-2);}
  .portal-body .pt-btn-strong:hover{background:var(--pt-strong-hover);}
}

.portal-body .pt-hero{max-width:440px;margin:0 auto;padding:48px 8px 40px;display:flex;flex-direction:column;gap:28px;}
.portal-body .pt-hero-head{display:flex;flex-direction:column;gap:16px;}
.portal-body .pt-hero-text{display:flex;flex-direction:column;gap:8px;}
.portal-body .pt-hero-icon{width:52px;height:52px;border-radius:16px;background:var(--pt-card);box-shadow:var(--pt-shadow);display:flex;align-items:center;justify-content:center;color:var(--pt-red);}
.portal-body .pt-form{display:flex;flex-direction:column;gap:12px;}
.portal-body .pt-label{padding:0 4px;font-size:13px;font-weight:600;color:var(--pt-muted);}
.portal-body .pt-code{
  display:block;width:100%;height:64px;margin:0;border:2px solid var(--pt-line);border-radius:18px;padding:0 16px;
  background:var(--pt-card);color:var(--pt-ink);font-family:var(--pt-mono);font-size:28px;font-weight:600;letter-spacing:0.14em;
  text-align:center;text-transform:uppercase;transition:border-color .15s ease,box-shadow .15s ease;
}
.portal-body .pt-code::placeholder{color:var(--pt-muted);font-weight:500;}
.portal-body .pt-code:focus{outline:none;border-color:var(--pt-red);box-shadow:0 0 0 4px var(--pt-red-ring);}

.portal-body .pt-app{display:flex;flex-direction:column;gap:16px;padding-bottom:calc(var(--pt-dock-h,104px) + 24px);}
.portal-body .pt-title{padding:0 4px;display:flex;flex-direction:column;gap:4px;}
.portal-body .pt-greeting{margin:0;font-size:15px;color:var(--pt-muted);}
.portal-body .pt-greeting:empty{display:none;}
.portal-body .pt-columns,.portal-body .pt-col,.portal-body .pt-status{display:flex;flex-direction:column;gap:16px;}
.portal-body .pt-card{background:var(--pt-card);border-radius:22px;box-shadow:var(--pt-shadow);}

.portal-body .pt-sched{overflow:hidden;}
.portal-body .pt-sched-body{padding:22px;display:flex;flex-direction:column;gap:18px;}
.portal-body .pt-sched-changed .pt-sched-body{padding-top:20px;}
.portal-body .pt-strip{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px 12px;padding:12px 22px;background:var(--pt-amber-bg);color:var(--pt-amber);}
.portal-body .pt-strip-label{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;}
.portal-body .pt-strip-time{font-size:13px;font-variant-numeric:tabular-nums;}
.portal-body .pt-when{display:flex;align-items:center;gap:14px;}
.portal-body .pt-tile{flex:none;width:60px;border-radius:14px;overflow:hidden;background:var(--pt-fill);text-align:center;}
.portal-body .pt-tile-month{display:block;padding:4px 0;background:var(--pt-red);color:var(--pt-on-red);font-size:11px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;}
.portal-body .pt-tile-day{display:block;padding:8px 0 10px;font-size:28px;font-weight:700;letter-spacing:-0.03em;line-height:1;font-variant-numeric:tabular-nums;}
.portal-body .pt-when-text{display:flex;flex-direction:column;gap:3px;min-width:0;}
.portal-body .pt-when-date{margin:0;font-size:22px;line-height:1.15;font-weight:700;letter-spacing:-0.018em;}
.portal-body .pt-when-time{margin:0;font-size:17px;font-weight:500;color:var(--pt-ink-2);font-variant-numeric:tabular-nums;}
.portal-body .pt-was{display:flex;flex-direction:column;gap:2px;padding:12px 14px;border-radius:14px;background:var(--pt-fill);}
.portal-body .pt-was-value{margin:0;font-size:15px;color:var(--pt-muted);}
.portal-body .pt-actions{display:flex;flex-wrap:wrap-reverse;gap:10px;}
.portal-body .pt-actions > .pt-btn{flex:1 1 0;white-space:nowrap;}
.portal-body .pt-sched-changed .pt-actions .pt-btn{font-size:15px;}
.portal-body .pt-cal-hint{margin:-8px 0 0;padding:0 4px;font-size:13px;line-height:1.45;color:var(--pt-muted);}
.portal-body .pt-nowrap{white-space:nowrap;}
.portal-body .pt-ack-error{margin:-8px 0 0;padding:0 4px;font-size:13px;font-weight:600;line-height:1.45;color:var(--pt-danger);}

.portal-body .pt-list{margin:0;padding:0 16px;border-radius:16px;background:var(--pt-card);}
.portal-body .pt-row{min-height:48px;display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid var(--pt-hair);}
.portal-body .pt-row:last-child{border-bottom:0;}
.portal-body .pt-row dt{display:flex;align-items:center;gap:8px;font-size:15px;color:var(--pt-muted);}
.portal-body .pt-row dd{margin:0;min-width:0;font-size:15px;font-weight:600;text-align:right;overflow-wrap:anywhere;}
.portal-body .pt-row-changed{padding:10px 0;}
.portal-body .pt-row-changed dd{display:flex;flex-direction:column;align-items:flex-end;gap:1px;}
.portal-body .pt-row-was{font-size:13px;font-weight:400;color:var(--pt-muted);}
.portal-body .pt-tag{padding:3px 6px;border-radius:6px;background:var(--pt-amber-bg);color:var(--pt-amber);font-size:11px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;}

.portal-body .pt-wait{padding:22px;display:flex;flex-direction:column;gap:16px;}
.portal-body .pt-wait-head{display:flex;flex-direction:column;gap:6px;}
.portal-body .pt-rank{margin:0;display:flex;align-items:baseline;gap:8px;}
.portal-body .pt-rank-num{font-size:76px;line-height:1;font-weight:700;letter-spacing:-0.04em;font-variant-numeric:tabular-nums;}
.portal-body .pt-rank-of{font-size:20px;font-weight:600;letter-spacing:-0.01em;color:var(--pt-muted);font-variant-numeric:tabular-nums;}
.portal-body .pt-meter{display:flex;flex-direction:column;gap:8px;}
.portal-body .pt-segs{display:grid;grid-template-columns:repeat(var(--pt-segs,12),minmax(0,1fr));gap:4px;}
.portal-body .pt-seg{height:8px;border-radius:4px;background:var(--pt-fill-2);}
.portal-body .pt-seg-ahead{background:var(--pt-faint);}
.portal-body .pt-seg-you{background:var(--pt-red);}
.portal-body .pt-track{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--pt-fill-2);}
.portal-body .pt-track-ahead{background:var(--pt-faint);}
.portal-body .pt-track-you{flex:none;width:8px;border-radius:4px;background:var(--pt-red);}
.portal-body .pt-meter-labels{display:flex;justify-content:space-between;gap:12px;font-size:12px;color:var(--pt-muted);font-variant-numeric:tabular-nums;}
.portal-body .pt-divider{height:1px;background:var(--pt-hair);}
.portal-body .pt-loc{display:flex;align-items:center;justify-content:space-between;gap:16px;}
.portal-body .pt-loc-text{display:flex;flex-direction:column;gap:2px;min-width:0;}
.portal-body .pt-loc-title{font-size:15px;font-weight:600;}
.portal-body .pt-loc-sub{font-size:13px;line-height:1.35;color:var(--pt-muted);}
.portal-body .pt-loc-rank{margin:0;flex:none;display:flex;align-items:baseline;gap:5px;}
.portal-body .pt-loc-num{font-size:28px;font-weight:700;letter-spacing:-0.03em;font-variant-numeric:tabular-nums;}
.portal-body .pt-loc-of{font-size:14px;font-weight:600;color:var(--pt-muted);font-variant-numeric:tabular-nums;}

.portal-body .pt-info{padding:22px;display:flex;align-items:flex-start;gap:14px;}
.portal-body .pt-info-icon{flex:none;width:44px;height:44px;border-radius:14px;display:flex;align-items:center;justify-content:center;background:var(--pt-fill);color:var(--pt-ink-2);}
.portal-body .pt-info-text{display:flex;flex-direction:column;gap:6px;min-width:0;padding-top:2px;}
.portal-body .pt-info-body{margin:0;font-size:16px;line-height:1.45;}

.portal-body .pt-result{padding:28px 22px;display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;}
.portal-body .pt-result-icon{width:64px;height:64px;border-radius:32px;display:flex;align-items:center;justify-content:center;background:var(--pt-neutral-bg);color:var(--pt-ink-2);}
.portal-body .pt-result-text{display:flex;flex-direction:column;gap:4px;}
.portal-body .pt-result-title{margin:0;font-size:26px;line-height:1.15;font-weight:700;letter-spacing:-0.02em;}
.portal-body .pt-result-date{margin:0;font-size:16px;color:var(--pt-muted);}
.portal-body .pt-result-pass .pt-result-icon{background:var(--pt-green-bg);color:var(--pt-green);}
.portal-body .pt-result-pass .pt-eyebrow{color:var(--pt-green);}
.portal-body .pt-result-disapproval .pt-result-icon,.portal-body .pt-result-fail .pt-result-icon{background:var(--pt-danger-bg);color:var(--pt-danger);}
.portal-body .pt-result-disapproval .pt-eyebrow,.portal-body .pt-result-fail .pt-eyebrow{color:var(--pt-danger);}
.portal-body .pt-result-discontinue .pt-result-icon{background:var(--pt-amber-bg);color:var(--pt-amber);}
.portal-body .pt-result-discontinue .pt-eyebrow{color:var(--pt-amber);}

.portal-body .pt-chat{display:flex;flex-direction:column;gap:12px;margin-top:12px;}
.portal-body .pt-chat-head{padding:0 4px;display:flex;align-items:baseline;justify-content:space-between;gap:12px;}
.portal-body .pt-chat-head h2{margin:0;font-size:20px;font-weight:700;letter-spacing:-0.015em;}
.portal-body .pt-chat-head span{font-size:13px;color:var(--pt-muted);}
.portal-body .pt-thread{display:flex;flex-direction:column;gap:14px;}
.portal-body .pt-chat-empty{padding:20px 16px;text-align:center;font-size:14px;line-height:1.45;color:var(--pt-muted);}
.portal-body .pt-day{align-self:center;margin:4px 0 0;font-size:12px;font-weight:600;color:var(--pt-muted);}
.portal-body .pt-msg{display:flex;flex-direction:column;gap:4px;max-width:min(81%,480px);}
.portal-body .pt-msg-mine{align-self:flex-end;align-items:flex-end;}
.portal-body .pt-msg-theirs{align-self:flex-start;align-items:flex-start;}
.portal-body .pt-bubble{padding:10px 14px;font-size:16px;line-height:1.35;white-space:pre-wrap;overflow-wrap:anywhere;}
.portal-body .pt-msg-mine .pt-bubble{border-radius:20px 20px 6px 20px;background:var(--pt-red);color:var(--pt-on-red);}
.portal-body .pt-msg-theirs .pt-bubble{border-radius:20px 20px 20px 6px;background:var(--pt-bubble);color:var(--pt-ink);}
.portal-body .pt-meta{padding:0 6px;font-size:12px;color:var(--pt-muted);font-variant-numeric:tabular-nums;}
.portal-body .pt-eta{align-self:center;max-width:300px;margin:0;text-align:center;font-size:12px;line-height:1.4;color:var(--pt-muted);}

.portal-body .pt-compose{display:flex;flex-direction:column;gap:8px;}
.portal-body .pt-compose-row{display:flex;align-items:flex-end;gap:8px;}
.portal-body .pt-input{
  flex:1;min-width:0;width:auto;height:44px;min-height:44px;max-height:140px;margin:0;padding:11px 16px;
  border:1px solid var(--pt-line);border-radius:22px;background:var(--pt-card);color:var(--pt-ink);
  font-family:inherit;font-size:16px;line-height:20px;resize:none;overflow-y:auto;
}
.portal-body .pt-input::placeholder{color:var(--pt-muted);}
.portal-body .pt-input:focus{outline:none;border-color:var(--pt-ink-2);box-shadow:0 0 0 3px var(--pt-hair);}
.portal-body .pt-send{
  flex:none;width:44px;height:44px;padding:0;border:0;border-radius:22px;background:var(--pt-red);color:var(--pt-on-red);
  display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-tap-highlight-color:transparent;
  transition:transform .1s ease,background-color .15s ease;
}
.portal-body .pt-send:active{transform:scale(0.97);}
.portal-body .pt-send:disabled{opacity:0.55;cursor:default;transform:none;}
.portal-body .pt-compose-hint{display:none;padding:0 6px;font-size:12px;color:var(--pt-muted);}
.portal-body .pt-closed{padding:12px 4px;text-align:center;font-size:14px;line-height:1.45;color:var(--pt-muted);}
.portal-body .pt-signout{margin:0;padding:0 4px;font-size:13px;color:var(--pt-muted);}
.portal-body .pt-signout a{display:inline-flex;align-items:center;min-height:44px;color:var(--pt-ink);text-decoration:underline;text-underline-offset:2px;}
.portal-body .pt-signout-side{display:none;}
.portal-body .pt-signout-dock{text-align:center;font-size:12px;color:var(--pt-ink-2);}
.portal-body .pt-signout-dock a{color:var(--pt-ink-2);}

.portal-body .pt-mini-wrap{
  position:fixed;left:0;right:0;top:calc(var(--pt-header-h) + 1px);z-index:19;
  padding:0 max(16px,env(safe-area-inset-right)) 10px max(16px,env(safe-area-inset-left));
  background:var(--pt-glass);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  border-bottom:1px solid var(--pt-hair);
  opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .2s ease,transform .2s ease,visibility 0s linear .2s;
}
.portal-body .pt-mini-wrap.is-on{opacity:1;visibility:visible;transform:none;transition:opacity .2s ease,transform .2s ease,visibility 0s;}
.portal-body .pt-mini{
  width:100%;max-width:608px;height:44px;margin:0 auto;padding:0 14px;display:flex;align-items:center;justify-content:space-between;gap:12px;
  border:0;border-radius:14px;background:var(--pt-card);color:var(--pt-ink);box-shadow:var(--pt-shadow-sm);
  font:inherit;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .1s ease;
}
.portal-body .pt-mini:active{transform:scale(0.97);}
.portal-body .pt-mini svg{flex:none;color:var(--pt-muted);}
.portal-body .pt-mini-main{display:flex;align-items:center;gap:8px;min-width:0;}
.portal-body .pt-mini-dot{flex:none;width:8px;height:8px;border-radius:4px;background:var(--pt-faint);}
.portal-body .pt-tone-scheduled,.portal-body .pt-tone-result-pass{background:var(--pt-green);}
.portal-body .pt-tone-changed,.portal-body .pt-tone-result-discontinue{background:var(--pt-amber);}
.portal-body .pt-tone-waiting{background:var(--pt-red);}
.portal-body .pt-tone-result-disapproval,.portal-body .pt-tone-result-fail{background:var(--pt-danger);}
.portal-body .pt-mini-label{flex:none;font-size:14px;font-weight:600;white-space:nowrap;}
.portal-body .pt-mini-detail{min-width:0;font-size:14px;color:var(--pt-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums;}

@keyframes pt-fade{from{opacity:0;}to{opacity:1;}}
@keyframes pt-rise{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:none;}}
.portal-body .pt-fade{animation:pt-fade .24s ease-out;}
.portal-body .pt-msg-new{animation:pt-rise .24s ease-out;}

.portal-body a,.portal-body button,.portal-body input,.portal-body textarea{scroll-margin-top:calc(var(--pt-header-h) + 64px);}
.portal-body .pt-dock a,.portal-body .pt-dock button,.portal-body .pt-dock textarea,.portal-body .pt-mini{scroll-margin:0;}

@media (max-width:899px){
  .portal-body .pt-dock{
    position:fixed;left:0;right:0;bottom:0;z-index:20;
    padding:10px max(12px,env(safe-area-inset-right)) env(safe-area-inset-bottom) max(12px,env(safe-area-inset-left));
    background:var(--pt-glass-dock);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
    border-top:1px solid var(--pt-hair);
  }
  .portal-body .pt-dock-inner{max-width:616px;margin:0 auto;}
  .portal-body .pt-dock .pt-closed{color:var(--pt-ink-2);}
  .portal-body a,.portal-body button,.portal-body input,.portal-body textarea{scroll-margin-bottom:calc(var(--pt-dock-h,104px) + 8px);}
}
@media (max-width:899px) and (min-height:501px){
  .portal-body.pt-mini-on .portal-header{border-bottom-color:transparent;}
}
@media (max-width:899px) and (max-height:500px){
  .portal-body .pt-signout-dock,.portal-body .pt-mini-wrap{display:none;}
  .portal-body .pt-signout-side{display:block;}
  .portal-body a,.portal-body button,.portal-body input,.portal-body textarea{scroll-margin-top:calc(var(--pt-header-h) + 16px);}
}
@media (min-width:900px){
  .portal-body .portal-header-inner{padding:0 max(24px,env(safe-area-inset-right)) 0 max(24px,env(safe-area-inset-left));}
  .portal-body .portal-main{max-width:1040px;padding:40px max(24px,env(safe-area-inset-right)) 48px max(24px,env(safe-area-inset-left));}
  .portal-body .pt-hero{padding-top:56px;}
  .portal-body .pt-app{gap:28px;padding-bottom:0;}
  .portal-body .pt-title{padding:0;gap:6px;}
  .portal-body .pt-greeting{font-size:17px;}
  .portal-body .pt-title .pt-h1{font-size:40px;line-height:1.05;letter-spacing:-0.028em;}
  .portal-body .pt-columns{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:24px;}
  .portal-body .pt-signout-side{display:block;}
  .portal-body .pt-signout-dock,.portal-body .pt-mini-wrap{display:none;}
  .portal-body .pt-sched-body{padding:24px;gap:20px;}
  .portal-body .pt-sched-changed .pt-sched-body{padding-top:22px;}
  .portal-body .pt-strip{padding:12px 24px;}
  .portal-body .pt-when{gap:16px;}
  .portal-body .pt-tile{width:64px;}
  .portal-body .pt-tile-day{font-size:30px;}
  .portal-body .pt-when-date{font-size:24px;letter-spacing:-0.02em;}
  .portal-body .pt-chat{
    position:sticky;top:calc(var(--pt-header-h) + 25px);max-height:calc(100vh - var(--pt-header-h) - 49px);
    margin-top:0;gap:0;overflow:hidden;border-radius:22px;background:var(--pt-card);box-shadow:var(--pt-shadow);
  }
  .portal-body .pt-chat-head{padding:20px 22px 14px;border-bottom:1px solid var(--pt-hair);}
  .portal-body .pt-thread{flex:1 1 clamp(200px,calc(100vh - 380px),400px);min-height:120px;overflow-y:auto;padding:18px 18px 8px;}
  .portal-body .pt-chat-empty{margin:auto 0;}
  .portal-body .pt-msg{max-width:78%;}
  .portal-body .pt-msg-theirs .pt-bubble{background:var(--pt-bubble-card);}
  .portal-body .pt-dock{flex:none;padding:12px 14px 14px;border-top:1px solid var(--pt-hair);}
  .portal-body .pt-input{background:var(--pt-fill);}
  .portal-body .pt-compose-hint{display:block;}
  .portal-body a,.portal-body button,.portal-body input,.portal-body textarea{scroll-margin-top:calc(var(--pt-header-h) + 16px);}
}
@media (min-width:900px) and (max-height:540px){
  .portal-body .pt-chat{position:static;max-height:none;}
}
@media (prefers-reduced-transparency:reduce){
  .portal-body .portal-header,.portal-body .pt-mini-wrap{background:var(--pt-ground);-webkit-backdrop-filter:none;backdrop-filter:none;}
}
@media (prefers-reduced-transparency:reduce) and (max-width:899px){
  .portal-body .pt-dock{background:var(--pt-ground);-webkit-backdrop-filter:none;backdrop-filter:none;}
}
@media (prefers-reduced-motion:reduce){
  .portal-body .pt-btn,.portal-body .pt-send,.portal-body .pt-mini{transition:background-color .15s ease;}
  .portal-body .pt-btn:active,.portal-body .pt-send:active,.portal-body .pt-mini:active{transform:none;}
  .portal-body .pt-mini-wrap,.portal-body .pt-mini-wrap.is-on{transform:none;}
  .portal-body .pt-mini-wrap{transition:opacity .15s linear,visibility 0s linear .15s;}
  .portal-body .pt-mini-wrap.is-on{transition:opacity .15s linear,visibility 0s;}
  .portal-body .pt-fade,.portal-body .pt-msg-new{animation:pt-fade .15s linear;}
}

.portal-state-tag{
  display:inline-block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;
  padding:4px 10px;border-radius:12px;background:var(--border-soft);color:var(--ink-soft);margin-bottom:14px;
}
.portal-state-tag.state-waiting{background:var(--info-bg);color:var(--info);}
.portal-state-tag.state-scheduled,.portal-state-tag.state-pass{background:var(--success-bg);color:var(--success);}
.portal-state-tag.state-disapproval,.portal-state-tag.state-fail{background:var(--danger-bg);color:var(--danger);}
.portal-state-tag.state-discontinue{background:var(--caution-bg);color:var(--caution);}

.portal-ranks{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:14px;}
.portal-rank{border:1px solid var(--border);border-radius:var(--radius);padding:16px;background:var(--paper);}
.portal-rank-num{font-family:var(--font-display);font-size:34px;font-weight:800;line-height:1;color:var(--ink);}
.portal-rank-num span{font-size:15px;font-weight:700;color:var(--muted);margin-left:2px;}
.portal-rank-label{font-size:12px;font-weight:600;color:var(--ink-soft);margin-top:8px;line-height:1.4;}

.portal-when{font-family:var(--font-display);font-size:22px;font-weight:800;line-height:1.2;}
.portal-when-time{font-size:15px;font-weight:600;color:var(--ink-soft);margin:4px 0 14px;}
.portal-details{border:1px solid var(--border-soft);border-radius:var(--radius-sm);margin:4px 0 14px;}
.portal-detail{display:flex;justify-content:space-between;gap:16px;padding:10px 14px;border-bottom:1px solid var(--border-soft);font-size:13.5px;}
.portal-detail:last-child{border-bottom:none;}
.portal-detail-label{color:var(--muted);font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;padding-top:1px;}
.portal-detail-value{font-weight:600;text-align:right;}
.portal-note{font-size:12.5px;color:var(--muted);line-height:1.55;margin:0 0 10px;}
.portal-note:last-child{margin-bottom:0;}
.portal-actions{margin:0 0 12px;}
.portal-note.portal-staff-change{color:#8a5500;font-weight:600;}
:root[data-theme="dark"] .portal-note.portal-staff-change{color:var(--caution);}

/* ---- Chat (messages.html) ---------------------------------------------- */
.chat-thread{height:380px;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px;background:var(--surface);}
.chat-empty{margin:auto;color:var(--muted);font-size:13px;text-align:center;padding:0 20px;}
.chat-msg{display:flex;flex-direction:column;max-width:78%;}
.chat-mine{align-self:flex-end;align-items:flex-end;}
.chat-theirs{align-self:flex-start;align-items:flex-start;}
.chat-bubble{padding:9px 13px;border-radius:14px;font-size:14px;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere;}
.chat-mine .chat-bubble{background:var(--red);color:#fff;border-bottom-right-radius:4px;}
.chat-theirs .chat-bubble{background:var(--border-soft);color:var(--ink);border-bottom-left-radius:4px;}
.chat-meta{font-size:10.5px;color:var(--muted);margin-top:3px;padding:0 4px;}
.chat-reply-eta{font-size:10.5px;color:var(--muted);font-style:italic;margin-top:4px;padding:0 4px;}
.chat-compose{border-top:1px solid var(--border);padding:12px 16px 14px;}
.chat-compose textarea{resize:vertical;min-height:64px;font-family:inherit;font-size:14px;}
.chat-compose-row{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:8px;}
.chat-compose-row .hint{margin-top:0;margin-right:auto;}
.chat-closed{border-top:1px solid var(--border);padding:14px 16px;font-size:13px;color:var(--muted);text-align:center;}

/* ---- Messages page (messages.html) ------------------------------------- */
.messages-layout{display:flex;gap:20px;align-items:flex-start;}
.messages-inbox{width:340px;flex-shrink:0;position:sticky;top:16px;}
.messages-inbox-tools{padding:14px 14px 10px;border-bottom:1px solid var(--border-soft);display:flex;flex-direction:column;gap:10px;}
.messages-inbox-tools .search-input{margin-bottom:0;}
.messages-inbox-tools .segmented-btn{flex:1;padding:6px 10px;}
.inbox-list{max-height:calc(100vh - 260px);overflow-y:auto;}
.inbox-row{
  display:block;width:100%;text-align:left;background:transparent;border:none;border-bottom:1px solid var(--border-soft);
  padding:12px 14px;cursor:pointer;color:var(--ink);font-family:inherit;
}
.inbox-row:hover{background:var(--border-soft);}
.inbox-row.active{background:var(--red-tint);box-shadow:inset 3px 0 0 var(--red);}
.inbox-row-top{display:flex;justify-content:space-between;gap:8px;align-items:baseline;}
.inbox-name{font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.inbox-row.unread .inbox-name{font-weight:800;}
.inbox-time{font-size:11px;color:var(--muted);flex-shrink:0;}
.inbox-row-bottom{display:flex;align-items:center;gap:6px;margin-top:4px;}
.inbox-rating{font-size:10.5px;font-weight:700;padding:1px 6px;border-radius:8px;background:var(--border-soft);color:var(--ink-soft);flex-shrink:0;}
.inbox-row.active .inbox-rating{background:var(--surface);}
.inbox-preview{flex:1;min-width:0;font-size:12.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.inbox-row.unread .inbox-preview{color:var(--ink);font-weight:600;}
.inbox-unread{flex-shrink:0;min-width:18px;height:18px;border-radius:9px;padding:0 5px;background:var(--red);color:#fff;font-size:10.5px;font-weight:800;display:flex;align-items:center;justify-content:center;}

.messages-thread{flex:1;min-width:0;}
.thread-placeholder{padding:80px 20px;}
.thread-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;padding:16px 18px;border-bottom:1px solid var(--border-soft);}
.thread-student{font-family:var(--font-display);font-size:18px;font-weight:800;}
.thread-sub{font-size:12px;color:var(--muted);margin-top:3px;}
.thread-actions{display:flex;gap:8px;flex-wrap:wrap;}
.thread-status{padding:16px 18px;border-bottom:1px solid var(--border-soft);background:var(--paper);}
.thread-status .portal-ranks{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));}
.thread-status .portal-rank{background:var(--surface);padding:12px;}
.thread-status .portal-rank-num{font-size:26px;}
.thread-status .portal-details{background:var(--surface);}
.messages-thread .chat-thread{height:420px;}

.new-portal-list{max-height:420px;overflow-y:auto;margin-bottom:8px;}
.new-portal-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 2px;border-bottom:1px solid var(--border-soft);}
.new-portal-row:last-child{border-bottom:none;}
.new-portal-name{font-size:13.5px;font-weight:700;}

@media(max-width:900px){
  .messages-layout{flex-direction:column;}
  .messages-inbox{width:100%;position:static;}
  .inbox-list{max-height:320px;}
}
@media(max-width:520px){
  .chat-thread{height:320px;}
  .chat-msg{max-width:88%;}
  .chat-compose-row .hint{display:none;}
}

/* ---- Hub login era (Checkrides on the Hub's AWS) ---- */

/* "Test copy": every page while the Hub's Checkrides sandbox is on (GET /checkrides/meta → sandbox). */
.test-copy-banner{background:var(--caution-bg);color:var(--caution);padding:9px 24px;font-size:13px;font-weight:700;text-align:center;border-bottom:1px solid var(--caution);}

/* No Checkrides capability (or the Hub couldn't be reached): one card in place of the page. */
.no-access-card{max-width:520px;margin:48px auto 0;}
.no-access-card .hint{padding:16px 20px 0;font-size:13px;line-height:1.55;margin-top:0;}
.no-access-card .btn{margin:16px 20px 20px;}

/* Settings (avatar menu → Settings; Dev only). */
.settings-body{padding:20px;}
.settings-intro{margin:0 0 16px;font-size:12.5px;line-height:1.55;}
.settings-field .hint{margin-top:6px;}
.settings-key{font-size:11px;font-weight:600;color:var(--muted);letter-spacing:0.02em;margin-left:6px;}
td.settings-key{margin-left:0;}
.settings-actions{display:flex;align-items:center;justify-content:flex-end;gap:14px;margin-top:6px;}
.settings-saved{font-size:12.5px;color:var(--success);font-weight:600;}
.settings-error{background:var(--danger-bg);color:var(--danger);border-radius:var(--radius-sm);padding:10px 12px;font-size:12.5px;margin-bottom:14px;}
.settings-chips{display:flex;flex-wrap:wrap;gap:8px;}
.settings-chip{font-size:12px;font-weight:600;padding:5px 10px;border-radius:12px;border:1px solid var(--border);}
.settings-chip.is-set{background:var(--success-bg);color:var(--success);border-color:transparent;}
.settings-chip.is-missing{background:var(--caution-bg);color:var(--caution);border-color:transparent;}
.settings-switch-value{font-weight:600;text-align:right;}
