/* Browser presentation only. The desktop renderer remains unchanged. */
.web-toolbar { display:flex; align-items:center; justify-content:space-between; gap:12px; margin:-8px 0 14px; flex:none; }
.web-server-badge { display:inline-block; color:var(--muted); font-size:10px; letter-spacing:.3px; border:1px solid var(--line); border-radius:6px; padding:5px 9px; }
#webLogout { min-height:36px; padding:4px 10px; }
.preferences label:has(#cfgMin),.preferences label:has(#cfgSounds) { display:none; }
.login-page { min-height:100dvh; height:auto; overflow:auto; display:grid; place-items:center; padding:28px 18px; background:radial-gradient(ellipse at 20% 5%,#15352d55,transparent 50%),var(--bg); }
.login-card { width:min(100%,440px); padding:32px; }
.login-brand { display:flex; align-items:center; justify-content:space-between; margin-bottom:27px; }
.login-card h1 { font-size:34px; line-height:1.15; margin-bottom:16px; }
.login-intro { color:var(--muted); font-size:13px; margin-bottom:28px; }
.login-password-note { margin-top:10px; font-size:11px; }
.login-submit { width:100%; margin-top:22px; min-height:44px; }
.login-error { min-height:23px; margin-top:12px; color:var(--amber); font-size:12px; }
.login-footnote { margin-top:18px; padding-top:17px; border-top:1px solid var(--line); font-size:11px; }
@media(max-width:850px), (max-width:1024px) and (pointer:coarse) {
  /* On phones the document owns vertical scrolling. A fixed-height desktop
     shell can otherwise squeeze .page to zero beneath login/status content. */
  html,body { width:100%; max-width:100%; height:auto; min-height:100%; overflow-x:clip; }
  html { scroll-padding-bottom:calc(90px + env(safe-area-inset-bottom)); }
  body { overflow-y:auto; }
  .app-shell { height:auto; min-height:100dvh; display:flex; flex-direction:column; }
  .workspace { padding:16px max(14px,env(safe-area-inset-right)) calc(90px + env(safe-area-inset-bottom)) max(14px,env(safe-area-inset-left)); flex:none; width:100%; overflow:visible; }
  .web-toolbar { margin:0 0 13px; }
  .web-server-badge { max-width:calc(100% - 65px); font-size:9px; }
  #webLogout { min-height:36px; white-space:nowrap; }
  .page-header { display:block; margin-bottom:15px; }
  h1 { font-size:28px; }
  .page-header p { font-size:11px; margin-top:5px; }
  .header-status { max-width:none; width:100%; margin-top:13px; padding:9px 11px; gap:10px; }
  .header-status>div { min-width:0; flex:1; }
  .header-status b { font-size:11px; }
  .header-status span:not(.live-indicator) { font-size:9px; }
  #pauseBtn { width:40px; height:36px; }
  .sidebar { position:fixed; z-index:20; left:0; right:0; bottom:0; height:calc(74px + env(safe-area-inset-bottom)); padding:7px 10px calc(7px + env(safe-area-inset-bottom)); border:0; border-top:1px solid var(--line); display:block; box-shadow:0 -8px 25px #00000015; }
  .sidebar>.brand,.sidebar>.semester-card,.sidebar>.sidebar-bottom { display:none; }
  .sidebar nav { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:4px; }
  .nav-item { position:relative; display:flex; flex-direction:column; justify-content:center; gap:4px; min-height:58px; padding:5px 2px; text-align:center; border-radius:9px; }
  .nav-item .nav-icon { font-size:20px; width:23px; }
  .nav-item>span:nth-child(2) { font-size:10px; }
  .nav-item small { display:none; }
  .nav-count { position:absolute; right:4px; top:2px; font-size:8px; padding:0 4px; }
  .site-notice { display:grid; grid-template-columns:19px minmax(0,1fr); gap:9px; padding:12px; margin-bottom:14px; }
  .site-notice-copy,.site-notice-actions { min-width:0; }
  .site-notice-actions { grid-column:2; align-items:flex-start; flex-wrap:wrap; gap:6px; }
  .site-notice-copy p { font-size:10px; }
  .site-notice-copy strong { font-size:11px; }
  .site-notice-actions .text-btn { font-size:10px; white-space:normal; text-align:left; }
  .page { flex:none; min-height:0; overflow:visible; padding-right:0; }
  .card { padding:15px; border-radius:12px; }
  .card-head { gap:12px; flex-wrap:wrap; }
  .card-head h2 { font-size:15px; }
  .overview { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; margin-bottom:15px; }
  .metric { padding:11px 12px; }
  .metric>span { font-size:10px; }
  .metric strong { font-size:23px; }
  .metric i { font-size:8px; }
  .sched-bar { flex-wrap:wrap; align-items:flex-start; gap:9px; }
  .sched-bar .row { width:100%; }
  .sched-bar .soft-tag { margin-right:auto; font-size:8px; }
  .sched-card { flex:none; min-height:0; }
  .sched-grid { flex:none; -webkit-overflow-scrolling:touch; }
  .sched-grid .sg { min-width:690px; }
  .sched-foot { padding:10px; flex-wrap:wrap; }
  .chip-course { padding:5px 7px; }
  .chip-course b,.chip-course span { font-size:8px; }
  .sched-foot .total { display:none; }
  .section-intro { gap:10px; padding-bottom:15px; align-items:flex-start; }
  .section-intro h2 { font-size:16px; }
  .section-intro p { font-size:11px; }
  .feature-icon { width:34px; height:34px; font-size:22px; }
  .toolbar { flex-direction:column; align-items:stretch; gap:10px; }
  .toolbar>.row { display:flex; flex-wrap:wrap; gap:8px; }
  .toolbar>.row .btn { flex:1; min-height:39px; }
  .toolbar>.btn { min-height:41px; }
  .toolbar .text-btn { min-height:32px; }
  .hint { font-size:11px; }
  .radar-card,.sniper-list { padding-bottom:0; }
  .radar-grid.grid-labels,.choice-grid.grid-labels { display:none; }
  .radar-row { grid-template-columns:minmax(0,1fr) 68px 64px; gap:8px; padding:14px 0; }
  .radar-row input[data-field=label] { grid-column:1/3; }
  .radar-row .remove-btn { grid-column:3; grid-row:1; justify-self:end; width:36px; height:36px; }
  .radar-row input[data-field=course] { grid-column:1; }
  .radar-row input[data-field=crn] { grid-column:2/4; }
  .radar-row [data-seat] { grid-column:1; }
  .radar-row [data-seat]:before { content:'Free seats: '; color:var(--muted); font-size:10px; }
  .radar-row .row-state { grid-column:2/4; }
  .save-bar,.discovery-save,.list-footer { flex-wrap:wrap; gap:10px; }
  .save-bar>.hint { max-width:100%; }
  .save-bar>.btn,.discovery-save>.btn { margin-left:auto; min-height:39px; }
  .list-heading { flex-direction:column; align-items:flex-start; gap:12px; }
  .list-heading h2 { font-size:17px; overflow-wrap:anywhere; }
  .arm-control { align-self:stretch; justify-content:space-between; }
  .list-context { grid-template-columns:minmax(0,1fr); gap:12px; padding:12px; }
  .polling-column { border-left:0; border-top:1px solid var(--line); padding:12px 0 0; }
  .choice-row { grid-template-columns:30px minmax(0,1fr) 64px; gap:8px; }
  .choice-row>.rank-badge { grid-row:1/3; }
  .choice-row>div { grid-column:2/4; min-width:0; overflow-wrap:anywhere; }
  .choice-row>code { grid-column:2; }
  .choice-row>[data-seat] { grid-column:3; }
  .choice-row>[data-seat]:before { content:'Seats '; font-size:9px; color:var(--muted); }
  .choice-row>.row-state { grid-column:2/4; }
  .rank-explainer { gap:7px; padding:11px; font-size:10px; }
  .rank-explainer .hint { width:100%; margin:0; }
  .discovery-card .card-head { flex-wrap:nowrap; }
  .discovery-card h2 { font-size:14px; }
  #discoveryCourseOptions { gap:9px 14px; }
  .discovery-course-row,.discovery-course-labels { grid-template-columns:66px minmax(0,1fr); gap:5px 10px; }
  .discovery-course-row time,.discovery-course-labels>span:last-child { grid-column:2; text-align:left; }
  .discovery-course-row b { grid-row:1/3; }
  .discovery-course-labels>span:nth-child(2) { display:none; }
  .discovery-added-row { grid-template-columns:minmax(0,1fr); gap:4px; }
  .discovery-added-meta { text-align:left; }
  .discovery-added-row code { display:inline-block; }
  .info-grid,.diagnostic-grid { grid-template-columns:minmax(0,1fr); }
  .info-grid { gap:13px; }
  .input-action { min-width:0; }
  input:not([type=checkbox]):not([type=radio]),select,textarea { font-size:16px!important; min-height:44px; }
  .preferences { gap:10px; }
  .diagnostic-overview { flex-wrap:wrap; gap:9px; }
  .diagnostic-overview>div { min-width:0; flex:1; }
  .diagnostic-overview>.soft-tag { margin-left:15px; }
  .report-actions { flex-wrap:wrap; }
  .report-preview { max-width:100%; overflow:auto; }
  .activity-toolbar { flex-wrap:wrap; gap:8px; }
  /* Visual viewport dimensions also account for the phone's software keyboard.
     A long editor scrolls itself; it never relies on the obscured background. */
  dialog { position:fixed; top:calc(12px + var(--phone-visible-top,0px)); bottom:auto; margin:0 auto; width:calc(100% - 24px); max-width:calc(100% - 24px); max-height:calc(var(--phone-visible-height,100dvh) - 24px); padding:16px; overflow-y:auto; overscroll-behavior-y:contain; -webkit-overflow-scrolling:touch; }
  .editor-fields { grid-template-columns:minmax(0,1fr); }
  .editor-fields .wide { grid-column:auto; }
  .choice-edit-row { grid-template-columns:27px minmax(0,1fr); }
  .choice-edit-row>.rank-badge { grid-row:1/4; }
  .choice-edit-row>input,.choice-edit-row>.reorder { grid-column:2; }
  .reorder { justify-content:flex-end; }
  .reorder button { min-height:44px; min-width:44px; }
  .dialog-actions { flex-wrap:wrap; }
  .dialog-actions .hint { width:100%; }
  .preview-row { grid-template-columns:minmax(0,1fr) 70px; gap:8px; }
  .preview-row>div { min-width:0; overflow-wrap:anywhere; }
  .toast { max-width:calc(100vw - 28px); right:14px; bottom:calc(88px + env(safe-area-inset-bottom)); left:14px; width:auto; }
  .login-card { padding:25px 21px; }
  .login-card h1 { font-size:30px; }
}
@media print {
  @page { size:landscape; margin:8mm; }
  html,body,.app-shell,.workspace { height:auto!important; overflow:visible!important; display:block!important; padding:0!important; }
  .sidebar,.web-toolbar,.header-status,.site-notice,.overview,.sched-bar .row,.page:not(.schedule-view) { display:none!important; }
  .schedule-view,.sched-card,.sched-grid { display:block!important; height:auto!important; overflow:visible!important; }
  .sched-grid .sg { min-width:0; }
  .sg-block { print-color-adjust:exact; -webkit-print-color-adjust:exact; }
  .sched-foot { break-inside:avoid; }
}
.account-manager{max-width:760px;width:min(92vw,760px)}.account-list{margin-top:24px}.account-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding:18px 0;border-top:1px solid var(--line)}.account-row .btn{margin-left:auto}#invitation{margin:24px 0;padding:16px;border:1px solid var(--line);border-radius:12px}.field select{width:100%;padding:12px;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:8px}
.quick-banner{padding:16px 20px;margin-bottom:20px}.quick-banner>summary{display:flex;align-items:center;gap:14px;flex-wrap:wrap;cursor:pointer}.quick-banner form{margin-top:16px}.quick-banner-fields{display:grid;grid-template-columns:1fr 1fr auto;gap:14px;align-items:end}.quick-banner-fields .field{margin-bottom:0}.quick-banner-fields .btn{margin-bottom:2px}.phone-setup{margin-top:16px}.phone-steps{padding-left:20px;color:var(--muted);font-size:12px;line-height:1.7}.phone-setup #phoneSetupDetails{margin-top:14px}@media(max-width:760px){.quick-banner-fields{grid-template-columns:1fr}.quick-banner>summary{align-items:flex-start;flex-direction:column;gap:5px}}
/* Per-list pacing lives beside Auto-register, including on narrow phones. */
.list-actions { display:flex; align-items:center; gap:22px; flex-wrap:wrap; }
.list-timing-control { display:flex; flex-direction:column; gap:5px; color:var(--muted); font-size:11px; }
.list-timing-control select { min-width:125px; padding:7px 10px; color:var(--text); background:var(--bg); border:1px solid var(--line); border-radius:7px; }
.list-timing-control small { font-size:9px; max-width:195px; }
.list-timing-last { margin-top:12px; font-size:10px; }
@media(max-width:600px) { .list-heading { flex-wrap:wrap; } .list-actions { width:100%; justify-content:space-between; gap:12px; } }
.login-brand { gap:12px; flex-wrap:wrap; }
.login-brand .brand-name { font-size:14px; margin-right:auto; letter-spacing:.1px; }
#createAccount .field { margin:16px 0; }
#loginDetails { border:1px solid var(--line); border-radius:10px; padding:18px; margin:20px 0; }
#loginDetails .field { margin:12px 0; }
.account-row { flex-wrap:wrap; }
