@font-face{font-family:Manrope;src:url('/ui/fonts/Manrope.ttf') format('truetype');font-weight:200 800;font-style:normal;font-display:swap}
@font-face{font-family:'Roboto Condensed';src:url('/ui/fonts/RobotoCondensed.ttf') format('truetype');font-weight:100 900;font-style:normal;font-display:swap}
:root{color:var(--ink);background:var(--page);line-height:1.5;font-family:'Roboto Condensed',sans-serif}
/* Choice controls are not full-width text fields. Individual widgets can still
   opt into their own geometry (e.g. visually hidden segmented radios). */
input:where([type=checkbox],[type=radio]){width:auto;min-width:0;min-height:0;padding:0;flex:0 0 auto}
button,.button{color:var(--ink);border-color:transparent;border-radius:5px;min-height:42px;background:transparent;font-weight:550}button:hover{background:var(--surface-hover);border-color:transparent}button.primary{background:var(--inverse);border-color:var(--ink);color:var(--on-inverse)}button.primary:hover{background:var(--inverse-hover);color:var(--on-inverse)}button.selected{background:var(--surface-hover);color:var(--ink);border-color:transparent}.brand,a{color:var(--ink)}small,.muted{color:var(--muted)}h1,h2,h3{letter-spacing:-.035em;color:var(--ink)}
.card{border:0;border-top:1px solid var(--line);background:transparent;border-radius:0;padding:24px 0;margin-bottom:20px}input,textarea,select{border-radius:5px;border-color:var(--line-strong);background:var(--surface)}.badge{border-radius:4px;background:var(--surface-muted);color:var(--muted);padding:4px 8px}.warning{color:var(--danger-ink);background:var(--danger-soft);box-shadow:var(--danger-surface-glow)}.good{color:var(--success-ink);background:var(--success-soft)}
.workspace #app{grid-template-columns:244px minmax(0,1fr)}.app-sidebar{overflow:auto;background:var(--surface-muted);padding:24px 16px;border:0;gap:12px}.app-sidebar .brand{font-size:44px;font-weight:900;letter-spacing:-3px;line-height:1.1;gap:14px;margin:0 12px 12px}.app-sidebar .brand:before{content:'';height:34px;width:5px;background:var(--lemon);color:var(--on-accent)}.app-sidebar>small{display:none}.app-sidebar nav{margin:12px 0 6px;gap:4px}.app-sidebar nav button{text-align:left;padding:10px 12px;font-size:14px}.app-sidebar nav button.selected{background:var(--surface-hover)}
.sidebar-account{border-color:var(--line);padding:18px 10px 0;gap:8px;font-size:14px}.sidebar-account>small{font-size:11px}.sidebar-account button{text-align:left;padding:6px 0;min-height:32px}.role-menu summary{padding:5px 0;margin:0;font-weight:500;border:0;border-radius:0}.role-options{border-color:var(--line);border-radius:5px;box-shadow:0 8px 24px #0002}.role-options button{padding:8px}
.workspace-content{padding:32px clamp(24px,3vw,56px)}.context-chooser{border:0;padding:14px 0 22px}.context-chooser h2{font-size:11px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin:0 12px 12px}.context-chooser>button.primary{background:transparent;color:var(--ink);border:0;width:100%;text-align:left;font-size:13px;padding-left:12px;margin-bottom:0}.context-chooser>.row{gap:4px;margin:8px 0 12px}.context-chooser>.row button{font-size:12px;min-height:32px;padding:5px 12px}.context-list{gap:5px}.context-list button{font-size:13px;padding:12px}.context-list button.selected{background:var(--context-selected);color:var(--on-context-selected)}
.context-heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:22px}.context-heading>div{min-width:0}.breadcrumb{font-size:13px;color:var(--muted);margin:0 0 20px}.context-heading h1{font-size:clamp(30px,3.8vw,54px);font-weight:850;line-height:1.06;max-width:680px;overflow-wrap:anywhere;margin:0 0 14px;letter-spacing:-.055em}.context-heading .muted{font-size:13px;margin:0}
button.assign-button{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:0 0 0 20px;min-width:0;white-space:nowrap;overflow:hidden;font-weight:700;flex-shrink:0}
.context-panel>.context-tabs{margin-bottom:28px;gap:20px}.assignment-editor{margin:0 0 28px}.assignment-editor:not([open]){display:none}.assignment-editor[open]{padding:24px;background:var(--surface-muted);border-radius:6px}.assignment-editor summary{margin-bottom:22px}
.context-panel .homework-list h2{font-size:24px;margin:0 0 20px;font-weight:750}.homework-filters{display:flex;flex-wrap:wrap;gap:8px 24px;border-bottom:1px solid var(--line);margin-bottom:24px}.homework-filters button{display:flex;align-items:center;gap:9px;padding:10px 0 14px;border-radius:0;border:0;border-bottom:4px solid transparent;font-size:14px;font-weight:500}.homework-filters button.selected{background:transparent;border-bottom-color:var(--ink);font-weight:700}.filter-count{font-size:12px;padding:2px 5px;background:var(--surface-muted);border-radius:4px;color:var(--muted);font-variant-numeric:tabular-nums}
.homework-columns,.homework-row{display:grid;grid-template-columns:38px minmax(170px,2fr) minmax(115px,1fr) minmax(145px,1fr) minmax(110px,.8fr);gap:16px;align-items:center}.homework-columns{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);padding:12px 12px 16px}.homework-row{padding:20px 12px;border-bottom:1px solid var(--line);min-width:0}.homework-row.needs-review{background:var(--surface-muted);border-radius:5px;border-left:3px solid var(--ink);padding-left:9px}.task-number{font-size:26px;color:var(--muted);font-weight:750;letter-spacing:-1px;font-variant-numeric:tabular-nums}
button.task-title{text-align:left;padding:0;min-height:32px;line-height:1.3;font-size:16px;font-weight:700;letter-spacing:-.025em;overflow-wrap:anywhere}.task-meta{display:grid;gap:3px;font-size:11px;color:var(--muted);margin-top:3px}.overdue-note{color:var(--danger-ink)}.task-due{font-size:12px;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.task-state{font-size:12px;display:flex;align-items:center;gap:8px;color:var(--muted)}.task-state:before{content:'';width:8px;height:8px;background:#939aa4;border-radius:50%;flex-shrink:0}.state-SUBMITTED{color:var(--info-ink)}.state-SUBMITTED:before{background:#1765db}.state-REVIEWED{color:var(--success-ink)}.state-REVIEWED:before{background:#158156}.state-CANCELLED{color:var(--muted)}.task-result{display:grid;gap:4px;justify-items:start}.task-score{font-size:19px;font-weight:750}.score-low{color:var(--danger-ink)}.score-mid{color:var(--warning-ink)}.score-high{color:var(--success-ink)}button.task-action{font-size:12px;color:var(--info-ink);min-height:36px;padding:4px 0;text-align:left;white-space:nowrap}.mobile-label{display:none}:focus-visible{outline:3px solid var(--info-line);outline-offset:3px}.score{color:var(--ink)}
@media(min-width:1500px){.homework-row{padding-top:24px;padding-bottom:24px}.task-title{font-size:18px!important}.task-due,.task-state{font-size:14px}}
@media(max-width:1150px){.workspace #app{grid-template-columns:205px minmax(0,1fr)}.workspace-content{padding:24px}.homework-columns,.homework-row{grid-template-columns:28px minmax(130px,1.5fr) 100px minmax(100px,1fr) 90px;gap:10px}.task-state{font-size:11px}.context-heading{flex-wrap:wrap}.homework-filters{gap:14px}}
@media(max-width:850px){.workspace #app{display:block}.app-sidebar{position:static;height:auto;padding:16px;gap:8px}.app-sidebar .brand{font-size:30px;margin:0}.app-sidebar .brand:before{height:24px}.app-sidebar nav{display:flex;flex-wrap:wrap;margin:0;gap:4px}.sidebar-account{margin:0;display:flex;align-items:center;flex-wrap:wrap;padding:12px 0 0;gap:12px}.sidebar-account>small{display:none}.role-options{bottom:auto;top:100%;min-width:160px}.context-chooser{padding:8px 0}.context-chooser h2{display:none}.context-list{display:flex;overflow-x:auto;padding-bottom:6px;max-height:none}.context-list button{min-width:150px;width:auto;flex-shrink:0;max-width:220px}.context-chooser>button.primary{width:auto}.context-chooser>.row{display:inline-flex;margin-left:8px}.workspace-content{padding:24px 16px}.context-heading h1{font-size:36px}.homework-columns{display:none}.homework-row{grid-template-columns:28px minmax(0,1fr) auto;gap:10px;padding:18px 8px}.homework-row.needs-review{padding-left:5px}.task-number{grid-column:1;grid-row:1;font-size:21px}.task-name{grid-column:2 / -1}.task-due{grid-column:2;grid-row:2;font-size:12px}.task-state{grid-column:2;grid-row:3;font-size:12px}.task-result{grid-column:3;grid-row:2 / 4}.mobile-label{display:block;font-size:10px}.homework-filters{gap:16px;flex-wrap:nowrap;overflow-x:auto}.homework-filters button{white-space:nowrap;font-size:13px}.context-panel .homework-list h2{font-size:22px}.context-tabs{gap:12px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}

/* Shared typography and geometry, including focus/hover states. */
body{font-family:'Roboto Condensed',sans-serif;font-size:18px}
button,input,textarea,select{font:inherit}
h1,h2,h3,.brand,.task-title,.task-number{font-family:Manrope,sans-serif}
.ui-icon{width:22px;height:22px;flex:0 0 22px;display:block}
button.icon-button{display:flex;align-items:center;gap:12px;text-align:left;line-height:1.3}
.icon-button>span:not(.notification-unread-count):not(.notification-unread-count-expanded){min-width:0;overflow-wrap:anywhere}
.workspace #app{grid-template-columns:264px minmax(0,1fr)}
.app-sidebar{padding:28px 18px}
.app-sidebar nav button{font-size:18px;padding:13px 12px}
.app-sidebar .brand{font-weight:800}
.context-chooser>button.primary,.context-list button{font-size:17px}
.context-chooser h2{font-size:12px;letter-spacing:.08em}
.context-chooser>.row button{font-size:15px}
.sidebar-account{font-size:16px}
.sidebar-account>small{font-size:13px}
.workspace-content{padding:36px clamp(24px,3.5vw,64px)}
.breadcrumb,.context-heading .muted{font-size:16px}
.context-heading{margin-bottom:28px}
.context-heading h1{font-size:clamp(36px,4.1vw,64px);font-weight:800;line-height:1.09;letter-spacing:-.055em;max-width:13ch;margin-bottom:20px}
button.assign-button{font-size:18px;min-width:0;min-height:58px;gap:24px;padding-left:22px;border:0;border-radius:6px}
.assign-button:after{content:none}
.assign-arrow{display:grid;place-items:center;align-self:stretch;min-width:58px;min-height:58px;background:var(--lemon);color:var(--on-accent)}
.assign-arrow .ui-icon{width:28px;height:28px}
.context-tabs button{font-size:16px}
.context-tabs button:hover,.homework-filters button:hover,.homework-filters button.selected:hover{background:transparent}
.context-tabs button:not(.selected):hover{border-bottom-color:var(--line-strong)}
.homework-filters{gap:28px;margin-bottom:20px}
.homework-filters button{font-size:18px;gap:10px;padding:12px 0 16px;transition:border-color .12s ease}
.homework-filters button:not(.selected):hover{border-bottom-color:var(--line-strong)}
.homework-filters button:focus-visible{outline-offset:5px;border-radius:2px}
.filter-count{font-size:14px;line-height:22px;min-width:24px;padding:0 5px;text-align:center;border-radius:3px}
.context-panel .homework-list h2{font-size:26px;font-weight:800}
.homework-columns{font-size:12px;letter-spacing:.04em}
button.task-title{font-size:18px;font-weight:800;background:transparent}
button.task-title:hover,button.task-action:hover{background:transparent;text-decoration:underline;text-underline-offset:4px}
.task-meta{font-size:14px;line-height:1.45;margin-top:7px}
.task-due,.task-state,button.task-action{font-size:16px}
.task-number{font-size:30px;font-weight:800}
.task-score{font-size:22px}
.homework-columns,.homework-row{grid-template-columns:34px minmax(150px,2fr) minmax(105px,1fr) minmax(125px,1fr) minmax(98px,.85fr);gap:16px}
.homework-row{padding-top:24px;padding-bottom:24px}








.invitation-state{flex:0 0 auto;padding:4px 7px;border-radius:999px;background:var(--surface-muted);color:var(--muted);font-size:11px;font-weight:750}.invitation-state.accepted{background:var(--success-soft);color:var(--success-ink)}.invitation-state.pending{background:var(--accent-soft);color:var(--accent-ink)}
@media(max-width:1200px) and (min-width:851px){
 .workspace #app{grid-template-columns:230px minmax(0,1fr)}
 .app-sidebar{padding:24px 12px}.workspace-content{padding:28px 24px}
 .app-sidebar nav button{font-size:16px}.context-list button{font-size:16px}
 .homework-columns,.homework-row{grid-template-columns:26px minmax(120px,1.5fr) 95px 102px 90px;gap:12px}
 .task-due,.task-state,button.task-action{font-size:14px}.task-meta{font-size:13px}
 .homework-filters{gap:20px}.homework-filters button{font-size:16px}
}
@media(max-width:850px){
 .workspace #app{display:block}.app-sidebar{padding:16px}.workspace-content{padding:24px 16px}
 .app-sidebar nav button{font-size:16px}.context-heading h1{font-size:38px;max-width:100%}
 .homework-row{grid-template-columns:28px minmax(0,1fr) auto;gap:10px;padding:20px 8px}
 .homework-filters{gap:22px}.homework-filters button{font-size:16px}
 .task-due,.task-state,button.task-action{font-size:15px}.task-meta{font-size:14px}
 .context-panel .homework-list h2{font-size:23px}.task-number{font-size:23px}


}


/* Reference details: heavy wordmark, framed yellow cap, lighter inactive tabs. */

.attachment,.file{border:1px solid var(--line);border-radius:7px;padding:12px 16px;background:var(--surface);margin:10px 0;gap:12px;min-width:0}
.attachment>span:not(.attachment-icon),.file .row>span{flex:1;min-width:0;overflow-wrap:anywhere}
.attachment-icon{display:grid;place-items:center;width:34px;height:40px;background:var(--surface-muted);color:var(--muted);font-size:26px;flex-shrink:0;border-radius:4px}
.file .row:before{content:'▤';font-size:26px;color:var(--muted)}
.save-status{display:block;margin:8px 0 14px;color:var(--muted);min-height:24px}
.app-sidebar .brand{font-family:'Roboto Condensed',sans-serif;font-size:60px;font-weight:950;letter-spacing:-2px;color:var(--ink)}
.app-sidebar .brand:before{width:6px;height:46px}
button.assign-button{font-size:28px;font-weight:600;min-width:0;min-height:72px;padding-left:30px;gap:30px;border:1px solid var(--ink);border-radius:8px}
.assign-arrow{min-width:72px;min-height:70px;border-left:1px solid var(--ink);border-radius:3px}
.assign-arrow .ui-icon{width:38px;height:38px;stroke-width:2.2}
.context-panel .homework-list h2{font-family:'Roboto Condensed',sans-serif;font-size:32px;font-weight:750;letter-spacing:-.025em;margin-bottom:12px}
.homework-filters{gap:38px;margin-bottom:18px}
.homework-filters button{font-size:23px;font-weight:400;padding:8px 10px 12px;position:relative;border-bottom:0}
.homework-filters button:after{content:'';position:absolute;bottom:-2px;left:0;right:0;height:5px;border-radius:3px;background:transparent}
.homework-filters button.selected{font-weight:700;border-bottom:0}
.homework-filters button.selected:after{background:var(--inverse);color:var(--on-inverse)}
.homework-filters button:not(.selected):hover{color:var(--ink);border-bottom:0}
.homework-filters button:not(.selected):hover:after{background:var(--line-strong);height:2px}
.filter-count{font-size:21px;font-weight:400;line-height:32px;min-width:32px;border-radius:7px;margin-left:2px}
.homework-columns{font-size:16px;font-weight:500;padding-top:20px;padding-bottom:14px}
.task-state:before{width:14px;height:14px}.task-state{gap:12px}
.task-due,.task-state,button.task-action{font-size:20px}
button.task-title{font-family:'Roboto Condensed',sans-serif;font-size:24px!important;font-weight:650;letter-spacing:-.015em}
.task-meta{font-size:19px;margin-top:2px}
.homework-row{padding-top:18px;padding-bottom:18px}
.context-chooser>.row{flex-wrap:wrap;gap:2px}.context-chooser>.row button{padding:5px 8px}
@media(max-width:1200px){button.assign-button{font-size:22px;min-width:0;min-height:60px}.assign-arrow{min-width:60px;min-height:58px}.homework-filters{gap:18px}.homework-filters button{font-size:19px;padding-left:4px;padding-right:4px}.filter-count{font-size:17px;min-width:26px;line-height:28px}.task-due,.task-state,button.task-action{font-size:16px}.task-meta{font-size:15px}button.task-title{font-size:20px!important}.homework-columns{font-size:13px}}
@media(max-width:850px){.app-sidebar .brand{font-size:38px}.app-sidebar .brand:before{height:30px}.context-panel .homework-list h2{font-size:27px}.homework-filters{gap:14px}.homework-filters button{font-size:17px}.task-state:before{width:10px;height:10px}}
.accent-action{display:flex;width:fit-content;max-width:100%;min-width:0;align-items:stretch;justify-content:space-between;gap:0!important;padding:0!important;white-space:nowrap;overflow:hidden}.accent-action-label{display:flex;align-items:center;padding:0 30px;min-width:0;white-space:normal;overflow-wrap:anywhere;text-align:left}.assign-arrow{margin-left:auto}.assign-arrow .ui-icon{stroke-width:2.65}.sidebar-account{padding:18px 2px 0;gap:12px}.account-identity{display:grid;grid-template-columns:40px minmax(0,1fr);align-items:start;gap:11px}.account-avatar{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:var(--inverse);color:var(--on-inverse);font-size:18px;font-weight:750}.account-copy{display:grid;min-width:0;gap:3px}.account-copy strong{font-size:16px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.account-copy small{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.account-role{justify-self:start;margin-top:4px;padding:2px 7px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:11px;line-height:1.3}.account-copy .role-menu{margin-top:4px}.account-copy .role-menu summary{font-size:12px}.account-preferences{padding:10px 0 2px}.account-preferences .theme-picker{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px}.account-preferences .theme-picker select{justify-self:end;max-width:130px}.account-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:8px;border-top:1px solid var(--line)}.sidebar-account .account-actions button{padding:5px 4px}.account-actions .account-logout{color:var(--muted)}.context-list .icon-button{position:relative;min-width:0}.context-list .icon-button>span:nth-child(2){flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;overflow-wrap:normal}.context-attention{display:grid!important;place-items:center;flex:0 0 22px!important;width:22px;height:22px;border-radius:50%;color:#fff;font:700 11px/1 Manrope,sans-serif}.context-attention.review{background:#1765db}.context-attention.overdue{background:#c74332;box-shadow:var(--danger-glow)}.context-attention.soon{background:#c38a00;color:var(--ink)}
@media(min-width:851px){.app-sidebar{overflow:hidden}.app-sidebar .context-chooser{display:flex;flex:1;flex-direction:column;min-height:190px;padding-bottom:0}.app-sidebar .context-list{flex:1 1 auto;min-height:0;align-content:start;grid-auto-rows:max-content;overflow-y:auto;overscroll-behavior:contain;padding-right:4px;scrollbar-gutter:stable}.app-sidebar .sidebar-account{flex:0 0 auto}}
.sidebar-account-zone{display:contents}.sidebar-account-toggle{display:none;place-items:center;width:46px;height:46px;min-height:46px;padding:0;border-radius:50%;background:var(--inverse);color:var(--on-inverse);font:750 17px/1 Manrope,sans-serif}.sidebar-account-toggle:hover{background:var(--inverse-hover);color:var(--on-inverse)}
@media(min-width:901px){.workspace #app,.workspace #app.compact-sidebar{grid-template-columns:72px minmax(0,1fr)}.workspace #app.student-sidebar{grid-template-columns:312px minmax(0,1fr)}.app-sidebar.icon-sidebar{z-index:100;align-items:center;width:72px;padding:18px 10px;overflow:visible}.app-sidebar.icon-sidebar .brand{width:44px;height:44px;margin:0;background:url('/ui/favicon.svg?v=2') center/40px 40px no-repeat;overflow:hidden;font-size:0}.app-sidebar.icon-sidebar .brand:before{display:none}.app-sidebar.icon-sidebar nav{display:grid;width:100%;margin:12px 0 0;gap:5px}.app-sidebar.icon-sidebar nav button{position:relative;z-index:1;justify-content:flex-start;width:52px;min-height:48px;padding:8px 14px;border:1px solid transparent;border-radius:8px;overflow:hidden;transition:width .32s cubic-bezier(.4,0,.2,1),background-color .22s ease .07s,border-color .22s ease .07s,box-shadow .22s ease .04s,color .22s ease .07s}.app-sidebar.icon-sidebar nav button .ui-icon{flex:0 0 22px}.app-sidebar.icon-sidebar nav button.selected{background:var(--lemon);color:var(--on-accent)}.app-sidebar.icon-sidebar nav button>span{min-width:max-content;margin-left:12px;opacity:0;transform:translateX(-7px);transition:opacity .2s ease .06s,transform .28s cubic-bezier(.4,0,.2,1);white-space:nowrap}.app-sidebar.icon-sidebar nav button.rail-open,.app-sidebar.icon-sidebar nav button:hover,.app-sidebar.icon-sidebar nav button:focus-visible{z-index:125;width:var(--rail-open-width,220px);background:var(--lemon);border-color:var(--accent-line);box-shadow:0 8px 22px #15180d26;transition-delay:0s;color:var(--on-accent)}.app-sidebar.icon-sidebar nav button.rail-closing{z-index:125}.app-sidebar.icon-sidebar nav button.rail-open>span,.app-sidebar.icon-sidebar nav button:hover>span,.app-sidebar.icon-sidebar nav button:focus-visible>span{opacity:1;transform:translateX(0);transition-delay:.06s}.app-sidebar.icon-sidebar .context-chooser{position:absolute;z-index:1;left:72px;top:0;display:flex;width:240px;height:100vh;min-height:0;padding:18px 12px 12px;background:var(--surface-muted);border-right:1px solid var(--line);flex-direction:column}.student-directory-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.student-directory-heading h2{margin:0;font-size:17px;letter-spacing:0;text-transform:none;color:var(--ink)}.student-directory-heading .directory-add{display:grid;place-items:center;width:36px;min-height:36px;padding:6px;border-radius:7px}.student-directory-heading .directory-add>span{display:none}.student-directory>.row{margin:0 0 8px}.student-directory>.row button{min-height:30px;padding:4px 9px}.student-directory .student-search{width:100%;min-height:38px;margin:0 0 9px;padding:7px 10px;font-size:14px}.student-search-empty{margin:0 0 8px;font-size:13px}.app-sidebar.icon-sidebar .context-list{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding-right:4px;scrollbar-gutter:stable}.app-sidebar.icon-sidebar .sidebar-account{display:grid;position:absolute;z-index:130;left:10px;bottom:72px;width:292px;margin:0;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(12px) scale(.97);transform-origin:left bottom;box-shadow:0 18px 44px #10141d32;transition:opacity .2s ease,transform .24s cubic-bezier(.2,.75,.25,1),visibility 0s linear .24s}.app-sidebar.icon-sidebar .sidebar-account:before{content:'';position:absolute;left:0;top:100%;width:58px;height:18px}.app-sidebar.icon-sidebar.account-open .sidebar-account,.app-sidebar.icon-sidebar:has(.sidebar-account-toggle:hover) .sidebar-account,.app-sidebar.icon-sidebar .sidebar-account:hover{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1);transition-delay:0s}.app-sidebar.icon-sidebar .sidebar-account-toggle{position:relative;z-index:131;display:grid;margin-top:auto}}
#notice:not(:empty){position:fixed;box-sizing:border-box;top:94px;right:max(16px,env(safe-area-inset-right));left:auto;z-index:1000;display:flex;align-items:flex-start;gap:12px;width:min(440px,calc(100% - 32px));max-width:calc(100% - 32px);max-height:min(40vh,280px);margin:0;padding:13px 12px 13px 16px;overflow:auto;overflow-wrap:anywhere;background:var(--warning-soft);border:1px solid var(--warning-line);border-left:4px solid var(--warning-line);border-radius:10px;box-shadow:0 14px 36px #171b2429;color:var(--warning-ink);line-height:1.45}
#notice[data-tone="error"]{background:var(--danger-soft);border-color:var(--danger-line);border-left-color:var(--danger-line);color:var(--danger-ink);box-shadow:var(--danger-glow)}
#notice .notice-copy{flex:1;min-width:0}
#notice .notice-dismiss{flex:0 0 32px;width:32px;min-height:32px;margin:-5px -4px -5px 0;padding:0;border:0;border-radius:7px;background:transparent;color:inherit;font-size:23px;line-height:1}
#notice .notice-dismiss:hover{background:#0000000a;border:0}
.workspace #notice:not(:empty){top:16px}
@media(max-width:900px){#notice:not(:empty){right:max(12px,env(safe-area-inset-right));width:min(440px,calc(100% - 24px));max-width:calc(100% - 24px);max-height:min(45vh,320px)}.workspace #notice:not(:empty){top:86px}}
@media(min-width:901px){.app-sidebar.icon-sidebar .sidebar-account-zone{position:relative;display:block;width:52px;height:48px;margin-top:auto}.app-sidebar.icon-sidebar .sidebar-account{z-index:132;left:0;bottom:0;width:292px;transform:translateY(8px) scale(.82);transform-origin:23px calc(100% - 23px);transition:opacity .2s ease,transform .28s cubic-bezier(.2,.78,.25,1),visibility 0s linear .28s}.app-sidebar.icon-sidebar .sidebar-account:before{content:none}.app-sidebar.icon-sidebar.account-open .sidebar-account,.app-sidebar.icon-sidebar .sidebar-account-zone:hover .sidebar-account,.app-sidebar.icon-sidebar .sidebar-account-zone:focus-within .sidebar-account{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1);transition-delay:0s}.app-sidebar.icon-sidebar .sidebar-account-toggle{position:absolute;z-index:131;left:3px;bottom:0;display:grid;margin:0}}

/* The original two-part brand action keeps its charcoal body and lemon arrow.
   Compact is the same component, sized for contextual headers and mobile menus. */
button.accent-action,button.assign-button{background:var(--brand-surface);border-color:var(--brand-surface-line);color:var(--on-brand)}
button.accent-action{line-height:1.2}
button.accent-action:hover,button.assign-button:hover{background:var(--brand-surface-hover);border-color:var(--brand-surface-line);color:var(--on-brand)}
.accent-action>.assign-arrow{flex-shrink:0;border-left-color:var(--on-accent)}
button.assign-button.accent-action--compact{min-height:48px;margin:0;font-size:18px;line-height:1.2;border-radius:8px}
button.assign-button.accent-action--compact>.accent-action-label{padding:0 16px}
button.assign-button.accent-action--compact>.assign-arrow{flex:0 0 48px;min-width:48px;min-height:46px}
button.assign-button.accent-action--compact>.assign-arrow .ui-icon{width:30px;height:30px}
button.assign-button.schedule-publish-compact{font-size:16px}
button.assign-button.schedule-publish-compact>.accent-action-label{padding:0 10px;overflow-wrap:normal}

/* Preserve the WHOLE reference silhouette with short labels too:122px dark
   base plus52px yellow,24px diagonal. Longer labels can grow naturally. */
/* One paint pass, one rounded outer clip: independently clipped overlays
   expose their underlay at antialiased edges. atan(24/44) gives the same cut;
   45.65px projected from the gradient end keeps top28px/bottom52px yellow.
   A1px transition centered there antialiases only the seam; equal stops make
   visible pixel stairs. Do not blur the control or add a contrasting underlay. */
button.accent-action.accent-action--header{--header-command-paint:var(--brand-command-surface);height:44px;min-height:44px;margin:0;border:0;font-size:20px;font-weight:400;line-height:1.2;border-radius:5px;background:linear-gradient(118.61deg,var(--header-command-paint) calc(100% - 46.15px),var(--brand-command-accent) calc(100% - 45.15px));color:var(--on-brand-command)}
button.accent-action.accent-action--header:hover{--header-command-paint:color-mix(in srgb,var(--brand-command-surface) 90%,var(--on-brand-command));background:linear-gradient(118.61deg,var(--header-command-paint) calc(100% - 46.15px),var(--brand-command-accent) calc(100% - 45.15px));color:var(--on-brand-command)}
button.accent-action.accent-action--header>.accent-action-label{display:flex;align-items:center;justify-content:center;min-width:122px;padding:0 7px 0 18px;white-space:nowrap;overflow-wrap:normal}
button.accent-action.accent-action--header>.assign-arrow{display:grid;flex:0 0 52px;width:52px;min-width:52px;min-height:0;height:auto;border:0;border-radius:0;background:transparent;color:var(--brand-command-surface)}
/* The cut removes the yellow zone's upper-left area: center the visible
   arrow optically, not on the uncut box. Keep the original shared SVG path. */
button.accent-action.accent-action--header>.assign-arrow .ui-icon{width:22px;height:22px;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;transform:translateX(4px)}
/* Keep the complete selected design on phones too. The public action group
   wraps when necessary; it must not squeeze the label or erase the cut end. */

/* A single, calm account module anchors the bottom of the sidebar. */
.sidebar-account{margin:4px 0 0;padding:12px;gap:0;border:1px solid var(--line);border-radius:9px;background:var(--surface-muted)}
.account-identity{align-items:center;gap:10px;padding:0 0 12px}
.account-avatar{width:42px;height:42px;font-family:Manrope,sans-serif;font-size:17px;box-shadow:0 0 0 1px #0000000d}
.account-copy{gap:2px}
.account-copy strong{font-size:15px}
.account-copy small{font-size:11px;color:var(--muted)}
.account-role{margin-top:5px;padding:2px 8px;background:var(--surface);border-color:var(--line)}
.sidebar-account>.role-menu{margin:-6px 0 0;padding-bottom:10px;border-bottom:0}
.sidebar-account>.role-menu summary{padding:5px 0}
.account-preferences{padding:10px 0;border-top:1px solid var(--line)}
.account-preferences .theme-picker{grid-template-columns:minmax(42px,auto) minmax(0,1fr);gap:10px;color:var(--muted);font-size:13px}
.account-preferences .theme-picker select{width:100%;max-width:none;min-height:36px;padding:5px 28px 5px 10px;background:var(--surface);border-color:var(--line);font-size:14px;font-weight:600;color:var(--ink)}
.account-actions{gap:4px;padding-top:10px}
.sidebar-account .account-actions button{min-height:36px;padding:6px 8px;border-radius:6px}
.sidebar-account .account-actions .icon-button{flex:1;gap:8px;min-height:36px;padding:6px 8px;border-radius:6px;font:inherit;line-height:1.3;text-align:left;justify-content:normal}
.sidebar-account .account-actions .ui-icon{width:19px;height:19px;flex-basis:19px}

/* A compact roster rail and one canonical full directory. Both layouts stay
   fixed while the outer reveal and their opacity animate; no rows reflow. */
.student-directory-count,.student-directory-preview{display:none}
.student-directory .context-list .icon-button>.ui-icon{display:none}
.student-directory-avatar{display:grid;place-items:center;order:-1;flex:0 0 24px;width:24px;height:24px;border-radius:3px;background:var(--surface-hover);color:var(--muted);font:650 12px/1 Manrope,sans-serif}
.student-directory .context-list .selected .student-directory-avatar{background:var(--context-selected-soft);color:var(--ink)}
.student-directory .context-list .icon-button>span:nth-child(2){flex:1 1 auto;min-width:0}
.student-directory-content{display:flex;flex-direction:column;min-height:0;flex:1}
.student-directory-content>.row{gap:4px;margin:8px 0 12px}
.student-directory-content>.row button{font-size:15px;min-height:32px;padding:5px 8px}
/* The whole pupil row is one link; task indicators add shared hover details. */
.student-directory .student-directory-row{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;flex:0 0 auto;width:100%;min-width:0;padding:6px 8px;border:1px solid transparent;border-radius:2px;background:transparent;color:var(--ink);font-weight:400;text-align:left;text-decoration:none;cursor:pointer}
.student-directory-row[hidden],.student-task-chips[hidden],.student-task-chip[hidden],.student-task-more[hidden]{display:none!important}
.student-directory .student-directory-row.selected{background:var(--context-selected);color:var(--on-context-selected)}
.student-directory .student-directory-row:hover{background:transparent}
.student-directory .student-directory-row.selected:hover{background:var(--context-selected);color:var(--on-context-selected)}
.student-directory .student-directory-row:focus-visible{outline:2px solid var(--line-strong);outline-offset:-2px}
.student-directory .student-directory-name{display:flex;align-items:center;gap:8px;width:100%;min-width:0;min-height:32px;padding:0;border:0;border-radius:2px;background:transparent;color:inherit;font-size:16px;font-weight:400;text-align:left;text-decoration:none}
.student-directory-name-text{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.student-directory .student-task-chips{display:flex;align-items:center;gap:4px;min-width:0;margin:2px 0 2px 32px}
.student-directory .student-task-chip,.student-directory .student-task-more{display:inline-flex;align-items:center;justify-content:center;gap:3px;box-sizing:border-box;width:auto;min-width:0;min-height:25px;padding:3px 5px;border:0;border-radius:4px;background:var(--surface);color:var(--ink);font-size:12px;font-weight:400;line-height:19px;white-space:nowrap;text-decoration:none;cursor:inherit}
.student-directory .student-task-chip{flex:0 1 auto}
.student-directory .student-task-more{flex:0 0 auto}
.student-directory .student-task-chip>span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.student-directory .student-task-chip>.student-task-chip-count{flex:0 0 auto;overflow:visible;font-variant-numeric:tabular-nums}
.student-directory .student-task-chip>.ui-icon{flex:0 0 12px;width:12px;height:12px}
.student-directory .selected :is(.student-task-chip,.student-task-more){background:color-mix(in srgb,var(--surface) 82%,transparent)}
/* These are outstanding actions, not pupil selection or completed work. */
.student-directory .student-task-chips :is(.student-task-chip,.student-task-more){border:1px solid var(--danger-line);background:var(--danger-soft);color:var(--danger-ink);font-weight:600;box-shadow:var(--danger-glow)}
.student-directory .selected .student-task-chips :is(.student-task-chip,.student-task-more){background:var(--danger-soft);color:var(--danger-ink)}
/* Only domain content here: material, shadow and screen placement are detailTip's. */
.student-task-detail{min-width:0}
.student-task-detail-heading{display:flex;align-items:center;gap:7px;font-size:13px;line-height:1.4}
.student-task-detail-heading>.ui-icon{flex:0 0 15px;width:15px;height:15px}
.student-task-detail-heading>strong{font-weight:600}
.student-task-detail-section+.student-task-detail-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
.student-task-detail-list{margin:7px 0 2px;padding:0;list-style:none}
.student-task-detail-item{display:grid;gap:3px;padding:8px 0;min-width:0;line-height:1.4}
.student-task-detail-item+.student-task-detail-item{border-top:1px solid color-mix(in srgb,var(--line) 70%,transparent)}
.student-task-detail-item-title{font-size:13px;font-weight:500;overflow-wrap:anywhere}
.student-task-detail-item>small,.student-task-detail-status{font-size:12px;line-height:1.4}
.student-task-detail-status{margin:8px 0;color:var(--muted)}
.student-task-detail-status[hidden]{display:none}
.student-directory-preview-attention.tasks{background:var(--muted)}
@media(min-width:901px){
  .workspace #app.student-sidebar{grid-template-columns:200px minmax(0,1fr)}
  .student-sidebar .app-sidebar.icon-sidebar{overflow:visible}
  .student-sidebar .app-sidebar.icon-sidebar .student-directory{display:block;left:var(--student-directory-left,72px);top:var(--student-directory-top,0px);width:var(--student-directory-rail-width,128px);height:var(--student-directory-height,100dvh);z-index:124;padding:0;overflow:hidden;border-left:1px solid var(--line);border-right:1px solid var(--line);background:var(--surface-muted);transition:width .24s cubic-bezier(.2,.7,.25,1),box-shadow .24s ease}
  .student-sidebar .student-directory-content{position:absolute;inset:0 auto 0 0;width:var(--student-directory-open-width,240px);padding:18px calc(4px + var(--student-directory-scroll-space,14px)) 12px 12px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s ease,visibility 0s linear .24s}
  .student-sidebar .student-directory-content :is(.student-directory-heading,.student-search,.student-search-empty,.row){min-width:0;flex-shrink:0}
  .student-sidebar .student-directory-content>.row{margin:0 0 8px;flex-wrap:nowrap}
  .student-sidebar .student-directory-content>.row button{min-height:30px;padding:4px 9px}
  .student-sidebar .student-directory .context-list{flex:1 1 auto;min-width:0;min-height:0;max-height:none;width:calc(100% + var(--student-directory-scroll-space,14px));margin-right:calc(-1 * var(--student-directory-scroll-space,14px));overflow-y:auto;overflow-x:hidden;padding-right:4px;gap:4px;scrollbar-width:thin;scrollbar-gutter:stable}
  .student-sidebar .student-directory-heading{min-height:36px;gap:5px;margin-bottom:12px;padding:0 3px}
  .student-sidebar .student-directory-heading h2{min-width:0;margin:0;font-size:17px;line-height:1.2;letter-spacing:-.02em}
  .student-sidebar .student-directory-count{display:inline;flex:0 0 auto;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}
  .student-sidebar .student-directory-count{margin-right:auto}
  .student-sidebar .student-directory .context-list .icon-button{width:100%;min-width:0;height:46px;min-height:46px;flex:0 0 46px;gap:8px;padding:5px 8px;border:1px solid transparent;border-radius:2px;background:transparent}
  .student-sidebar .student-directory .context-list .icon-button.selected{background:var(--context-selected);border-color:transparent;color:var(--on-context-selected)}
  .student-sidebar .student-directory .context-list .icon-button:hover{background:var(--surface-hover)}
  .student-sidebar .student-directory .context-list .icon-button.selected:hover{background:color-mix(in srgb,var(--context-selected) 94%,var(--on-context-selected))}
  .student-sidebar .student-directory .context-list .icon-button>span:nth-child(2){white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .student-sidebar .student-directory-preview{position:absolute;inset:0 auto 0 0;display:flex;flex-direction:column;width:var(--student-directory-rail-width,128px);padding:18px 8px 12px;opacity:1;visibility:visible;transition:opacity .14s ease .06s,visibility 0s}
  .student-directory-preview-heading{display:flex;align-items:center;gap:4px;flex:0 0 36px;min-width:0;margin-bottom:12px;padding:0 3px}
  .student-directory-preview-heading strong{min-width:0;font-size:14px;line-height:1.2;letter-spacing:-.02em}
  .student-directory-preview-heading small{color:var(--muted);font-size:12px}
  .student-directory-preview-chevron{margin-left:auto;color:var(--muted);font-size:21px;line-height:1}
  .student-directory-preview-list{display:flex;flex-direction:column;flex:1;min-height:0;gap:4px;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;overscroll-behavior:contain}
  .student-directory-preview-entry{position:relative;display:grid;grid-template-columns:20px minmax(0,1fr);align-items:center;gap:6px;flex:0 0 46px;height:46px;padding:5px 8px;border:1px solid transparent;border-radius:2px;color:var(--ink);font-size:13px;line-height:17px}
  .student-directory-preview-entry[hidden]{display:none}
  .student-directory-preview-name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-height:34px;overflow:hidden;overflow-wrap:anywhere}
  .student-directory-preview-avatar{display:grid;place-items:center;width:20px;height:20px;border-radius:3px;background:var(--surface-hover);color:var(--muted);font:650 12px/1 Manrope,sans-serif}
  .student-directory-preview-entry.is-selected{background:var(--context-selected);border-color:transparent;color:var(--on-context-selected)}
  .student-directory-preview-entry.is-selected .student-directory-preview-avatar{background:var(--context-selected-soft);color:var(--ink)}
  .student-directory-preview-attention{position:absolute;right:4px;top:4px;width:6px;height:6px;border-radius:50%;background:var(--warning-ink)}
  .student-directory-preview-attention.review{background:var(--info-ink)}
  .student-directory-preview-attention.overdue{background:var(--danger-ink);box-shadow:var(--danger-glow)}
  .student-sidebar .app-sidebar.icon-sidebar .student-directory:is(.is-pointer-inside,.has-keyboard-focus){width:var(--student-directory-open-width,240px);box-shadow:12px 0 28px #10141d18}
  .student-sidebar .student-directory:is(.is-pointer-inside,.has-keyboard-focus) .student-directory-content{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .16s ease .04s,visibility 0s}
  .student-sidebar .student-directory:is(.is-pointer-inside,.has-keyboard-focus) .student-directory-preview{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .1s ease,visibility 0s linear .1s}
}
@media(min-width:901px) and (prefers-reduced-motion:reduce){
  .student-sidebar .app-sidebar.icon-sidebar .student-directory,.student-sidebar .student-directory .student-directory-content,.student-sidebar .student-directory .student-directory-preview{transition:none!important}
}
.student-lessons-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.student-programs{display:grid;gap:14px;max-width:1000px}
.student-program-card{border:1px solid var(--line);border-radius:10px;padding:18px;background:var(--surface)}
.student-program-card .ui-surface__heading{align-items:start}
.student-program-footer{display:flex;flex-wrap:wrap;gap:10px;padding:8px 0}
.student-program-footer>small{flex:1 1 100%;max-width:720px}
.context-panel .ui-tabbar{margin-bottom:22px}
@media(max-width:900px){
  .context-panel .context-heading{margin-bottom:18px}
  .context-panel .context-heading>button{margin-top:0}
  .context-panel .context-tabs{display:flex;gap:20px;overflow-x:auto;scrollbar-width:thin}
  .student-program-card{padding:16px}
  .student-program-card .ui-surface__heading{flex-wrap:wrap}
  .student-lessons-actions{width:100%}
  .context-panel input[type=date]{min-width:156px;font-variant-numeric:tabular-nums}
}
.account-actions .account-logout{flex:0 0 auto}
.sidebar-account .account-actions button:hover{background:var(--surface-hover)}
@media(min-width:901px){.app-sidebar .sidebar-account{margin-top:auto}}
@media(min-width:901px) and (max-height:700px){.app-sidebar{overflow-y:auto}.app-sidebar .context-chooser{flex:0 0 auto;min-height:0}.app-sidebar .context-list{max-height:180px}.app-sidebar .sidebar-account{margin-top:12px}}
.notification-heading{margin-bottom:24px}.notification-toolbar{display:flex;justify-content:flex-end;max-width:920px;margin:-12px 0 10px}.notification-toolbar[hidden]{display:none}.notification-heading h1{margin-bottom:8px}.notification-heading p{margin:0}.notification-feed{display:grid;gap:12px;max-width:920px;min-width:0}.notification-card-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 0 12px;border-top:1px solid var(--line);min-width:0}.notification-card .notification-text{margin:4px 0 0;white-space:pre-line;overflow-wrap:anywhere;color:var(--ink)}.notification-delivery-details{color:var(--muted);font-size:12px;min-width:0}.notification-delivery-details summary{margin:0;font-weight:600}.notification-delivery-details[open] summary{margin-bottom:7px}.notification-delivery{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;color:var(--muted);font-size:12px}.notification-delivery>span{display:inline-flex;align-items:center;gap:5px}.notification-delivery .badge{padding:2px 6px}.notification-card-footer .ui-action{height:auto;min-height:34px;white-space:normal;overflow-wrap:anywhere}
.notification-unread-count,.notification-unread-count-expanded{display:grid!important;place-items:center;min-width:18px;height:18px;margin-left:auto;border-radius:999px;background:#c74332;color:#fff;font:700 10px/1 Manrope,sans-serif;box-shadow:var(--danger-glow)}.notification-unread-count[hidden],.notification-unread-count-expanded[hidden]{display:none!important}.notification-unread-count-expanded{display:none!important}.notification-card.unread .ui-list-item__meta:after{content:'Новое';display:inline-block;margin-inline-start:8px;padding:1px 5px;border-radius:3px;background:var(--info-soft);color:var(--info-ink);font-size:11px;font-weight:700}
.today-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;max-width:none!important}.today-heading h1{margin-bottom:2px}.today-date{margin:0 0 8px;font-size:18px;color:var(--ink)}.today-principle{max-width:310px;padding:14px 16px;border-left:4px solid var(--lemon);background:var(--accent-soft);font-weight:650}.today-dashboard{display:grid;gap:14px;max-width:1180px}.today-card-grid{max-width:1180px}.today-card-grid>.today-detail-card:nth-child(n),.today-card-grid>.today-card{grid-column:auto;height:auto}.today-detail-card{display:grid;align-content:start;gap:14px;min-width:0;margin:0;padding:18px;border-radius:9px}.today-detail-card .ui-surface__heading{align-items:start;margin-bottom:0;padding-bottom:12px;border-bottom:1px solid var(--line)}.today-detail-card .ui-surface__heading h2{font-size:20px}.today-detail-card .ui-surface__heading>.compact{white-space:nowrap}.today-drafts-card{border-color:var(--danger-line);background:var(--danger-soft);box-shadow:var(--danger-glow)}.today-draft-metric{display:flex;align-items:center;gap:10px}.today-draft-mark{display:grid;place-items:center;width:28px;height:28px;flex:0 0 28px;border-radius:50%;background:#d94b3d;color:#fff;font-weight:850;box-shadow:var(--danger-glow)}.today-draft-metric strong{font:800 27px/1.1 Manrope,sans-serif}.today-draft-note{margin:0}.today-nearest-list{grid-template-columns:1fr}.today-nearest-time{display:grid;width:max-content;min-width:92px;padding:12px;background:var(--accent-soft)}.today-nearest-time strong{font:800 30px/1 Manrope,sans-serif}.today-metric-list{display:grid;gap:8px}.today-metric-row,.today-campaign-row{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12px;padding:11px 12px;border-color:var(--line);background:var(--surface-muted);text-align:left}.today-metric-row.attention{border-left:4px solid var(--danger-line);background:var(--danger-soft);box-shadow:var(--danger-glow)}.today-metric-row strong{font-size:22px}.today-payment-total{display:grid;gap:3px;padding:13px;border-left:4px solid var(--lemon);background:var(--surface-muted)}.today-payments-card.attention .today-payment-total{border-left-color:var(--danger-line);background:var(--danger-soft);box-shadow:var(--danger-glow)}.today-payment-total strong{font:800 29px/1.1 Manrope,sans-serif}.today-agenda-list,.today-campaign-list{display:grid;gap:0}.today-campaign-row{border-radius:0;border-width:0 0 1px}.today-campaign-row span:first-child{display:grid;min-width:0}.today-campaign-row small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.today-reports-card .required-report-row{align-items:flex-start}.today-reports-card .required-report-row>.row{justify-content:flex-end}.today-card{display:grid;align-content:start;gap:14px;min-height:0;margin:0}
 .homework-source-lesson{display:block;width:max-content;max-width:100%;margin-top:4px;color:var(--muted);font-size:12px;overflow-wrap:anywhere}.homework-source-lesson:is(a):hover{color:var(--ink)}.today-required-homework-card{border-color:var(--warning-line);background:var(--accent-soft)}.today-homework-skip-all{white-space:nowrap}.required-homework-list{display:grid;gap:0}.required-homework-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px;padding:12px 0;border-top:1px solid var(--line)}.required-homework-row:first-child{border-top:0}.required-homework-row>div:first-child{display:grid;gap:3px;min-width:0}.required-homework-row small{overflow-wrap:anywhere}.required-homework-row>.row{justify-content:flex-end}.required-homework-more{display:block;padding-top:9px;border-top:1px solid var(--line)}
@media(max-width:720px){.today-heading{display:block}.today-principle{margin-top:14px}.today-nearest-body{grid-template-columns:1fr}.today-nearest-body>.primary{grid-column:1}.today-detail-card .ui-surface__heading{display:grid}.today-detail-card .ui-surface__heading>.compact{justify-self:start}.today-reports-card .required-report-row,.required-homework-row{display:grid}.today-reports-card .required-report-row>.row,.required-homework-row>.row{justify-content:flex-start;flex-wrap:wrap}}
@media(max-width:600px){.notification-card-footer{align-items:stretch}.notification-card-footer>.ui-action{width:100%;min-height:44px}}

/* Student card: compact profile, links, slots, quick student creation */
.student-profile{display:grid;gap:16px;max-width:1180px}
.student-profile-card{margin:0;padding:20px;border:1px solid var(--line);border-radius:8px;background:var(--surface-muted);min-width:0}
.student-profile-card h2{font-size:22px;margin:0 0 14px}
.student-profile-header{display:grid;gap:14px}
.student-profile-title,.student-profile-actions,.profile-section-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.student-profile-title h2{font-size:28px!important;margin:0!important;overflow-wrap:anywhere}
.profile-eyebrow{margin:0 0 3px;color:var(--muted);font-size:12px;font-weight:650;letter-spacing:.07em;text-transform:uppercase}
.student-profile-actions{justify-content:flex-end}
.profile-name-form{display:grid;grid-template-columns:minmax(180px,1fr) auto;gap:10px;align-items:end;max-width:620px}
.profile-name-form button{white-space:nowrap}
.student-profile-header>.save-status{margin:0;min-height:0}
.profile-settings{container-type:inline-size}
.profile-settings form{grid-template-columns:minmax(0,1fr) auto;align-items:end;margin-bottom:14px}
.profile-settings form button{white-space:nowrap}
@container(max-width:460px){.profile-settings form{grid-template-columns:minmax(0,1fr)}.profile-settings form button{width:100%;white-space:normal}}
.profile-setting-divider{margin:20px 0;border-top:1px solid var(--line)}
.profile-slots{container-type:inline-size}.regular-slots{gap:0;margin:4px 0 14px}
.regular-slot{display:grid;grid-template-columns:34px 64px 72px minmax(120px,1fr) minmax(88px,auto) auto;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}
.regular-slot:last-child{border-bottom:0}
.regular-slot strong{text-transform:uppercase;font-size:13px;letter-spacing:.04em}
.regular-slot-time{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums}
.regular-slot-price{font-weight:800;white-space:nowrap}
.regular-slot-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.regular-slot-actions{display:flex;align-items:center;gap:6px}
@container(max-width:620px){.regular-slot{grid-template-columns:34px 64px minmax(0,1fr) auto;gap:7px 9px}.regular-slot-name{grid-column:2/-1;grid-row:2}.regular-slot-actions{grid-column:2/-1;grid-row:3;justify-content:flex-end;flex-wrap:wrap}.regular-slot-price{grid-column:4;grid-row:1}}
@container(max-width:420px){.profile-slots .regular-slot{grid-template-columns:32px 64px minmax(0,1fr)}.profile-slots .regular-slot-name{grid-column:1/-1;grid-row:2}.profile-slots .regular-slot-price{grid-column:1/3;grid-row:3;min-width:0;white-space:normal;overflow-wrap:anywhere}.profile-slots .regular-slot-actions{grid-column:3;grid-row:3;min-width:0;justify-content:flex-end}}
.regular-slot button{min-height:34px;padding:4px 8px;font-size:13px}
.profile-slots>.muted{font-size:14px;line-height:1.45;margin:-5px 0 12px}
.profile-slots>.primary{width:100%;margin-top:2px}
.profile-compact-editor{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.profile-compact-editor summary{margin:0;font-size:15px}
.profile-compact-editor[open] summary{margin-bottom:14px}
.student-card-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.student-card-heading h2{margin:0!important}.profile-card-copy{margin:10px 0 0;line-height:1.5}.profile-access-section{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}.profile-access-section h3{margin:0 0 9px;font-size:16px}.profile-access-section>.muted{margin:0 0 12px;font-size:13px;line-height:1.5}.student-card-action-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.student-card-action-bar button{min-height:36px;padding:6px 10px;font-size:13px}.profile-status-list{display:grid;gap:0}.profile-status-row{display:grid;grid-template-columns:minmax(120px,1fr) auto;align-items:center;gap:10px;padding:10px 0;border-top:1px solid var(--line)}.profile-status-row:first-child{border-top:0}.profile-status-label{min-width:0;overflow-wrap:anywhere;font-size:14px;font-weight:600}.profile-status-row .badge{justify-self:end;white-space:nowrap}.profile-status-row button{grid-column:1/-1;justify-self:start;min-height:34px;padding:5px 8px;font-size:12px}.profile-invitation-links{margin-top:12px}.profile-access-channels{display:grid;gap:0}
.profile-notes textarea{min-height:88px}
.profile-notes .profile-section-heading h2{margin-bottom:8px}
.profile-notes .save-status{margin:6px 0 0;min-height:0}
.student-study-body{display:grid;gap:14px;min-width:0}
.student-study-body>p,.student-study-status{margin:0}
.student-study-body>.muted{font-size:13px;line-height:1.5}
.student-study-facts{display:flex;flex-wrap:wrap;gap:20px 48px;margin:0}
.student-study-facts>div{display:grid;gap:6px;min-width:0}
.student-study-facts dt{color:var(--muted);font-size:13px}
.student-study-facts dd{margin:0;font-size:20px;font-weight:650;overflow-wrap:anywhere}
.student-study-periods{display:grid;gap:0;min-width:0}
.student-study-period{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 0;border-top:1px solid var(--line)}
.student-study-period-copy{display:grid;gap:5px;min-width:0;line-height:1.5}
.student-study-period-copy strong{font-size:14px;overflow-wrap:anywhere}
.student-study-period-copy small{font-size:13px}
.student-study-period>button{flex-shrink:0}
.student-study-dialog{width:min(520px,calc(100vw - 24px))}
.student-study-form .muted{margin:0;font-size:13px;line-height:1.5}
.student-study-dialog-feedback{margin:0;color:var(--danger-ink);font-size:14px;line-height:1.5}
.student-study-dialog .schedule-dialog-footer{justify-content:flex-end}
.profile-links-summary .links-list{margin-top:8px}
.profile-links-summary .call-access-view{border-left:0;padding:0;background:transparent}
.profile-links-summary .ui-surface__heading{align-items:start}
@media(max-width:480px){
 .student-profile-header .student-profile-title{gap:12px}
 .student-profile-header .student-profile-actions{justify-content:flex-start;gap:10px}
 .student-study-period{align-items:flex-start;flex-wrap:wrap}
 .student-study-facts{gap:16px 30px}
 .profile-links-summary .ui-surface__heading{grid-template-columns:minmax(0,1fr)}
 .profile-links-summary .ui-surface__heading-actions{justify-self:start}
 .student-study-dialog .schedule-dialog-footer>.ui-action{min-width:0}
}
.profile-danger{border-color:var(--line-strong)!important;background:var(--surface)!important}
.profile-danger p{font-size:14px;margin:0 0 12px}
.link-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}
.link-row:last-child{border-bottom:0}
.link-favicon{position:relative;display:grid;place-items:center;width:24px;height:24px;flex:0 0 24px;border-radius:5px;background:var(--surface-hover);color:var(--muted);overflow:hidden}
.link-favicon>.ui-icon{width:14px;height:14px}
.link-favicon.loaded>.ui-icon{display:none}
.link-favicon img{display:block;width:100%;height:100%;object-fit:contain;background:var(--surface)}
.link-favicon img[hidden]{display:none}
.link-info{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}
.link-title{overflow-wrap:anywhere;font-weight:600}
.links-list{gap:0}.links-list .row{gap:4px}.links-list .row button{min-height:34px;padding:4px 7px;font-size:13px}
.links-list--editable>.link-row{display:grid;grid-template-columns:24px 24px minmax(0,1fr) auto;gap:6px}
.links-list--editable .useful-link-actions{flex-wrap:nowrap;gap:4px}
.links-list--editable .useful-link-grip{width:24px;min-width:24px;min-height:44px;padding:0;color:var(--muted);cursor:grab;touch-action:none;user-select:none}
.links-list--editable .useful-link-grip>svg{width:18px;height:20px;pointer-events:none}
.links-list--editable .useful-link-grip:active{cursor:grabbing}
.links-list--editable .useful-link-grip:disabled{cursor:default;touch-action:auto}
.links-list--editable .sw-order-dragging{position:absolute;visibility:hidden;pointer-events:none}
.links-list--editable .sw-order-placeholder{pointer-events:none;opacity:.65;background:var(--surface-hover);outline:1px dashed var(--line);outline-offset:-1px}
.links-list--editable .sw-order-ghost{display:none}
.links-list--editable.sw-order-sorting{user-select:none;cursor:grabbing}
@media(max-width:520px){
 .links-list--editable .useful-link-grip{grid-column:1;grid-row:1 / span 2}
 .links-list--editable .link-favicon{grid-column:2;grid-row:1;align-self:start;margin-top:4px}
 .links-list--editable .link-info{display:contents}
 .links-list--editable .link-info>.link-title{grid-column:3 / -1;grid-row:1}
 .links-list--editable .link-info>.badge{grid-column:3;grid-row:2;align-self:center}
 .links-list--editable .useful-link-actions{grid-column:4;grid-row:2;justify-self:end}
}
.profile-links>.empty,.profile-slots .empty{padding:18px 0;margin:0;text-align:left;font-size:14px}
.schedule-quick-student{display:flex;gap:8px;align-items:center;margin:10px 0 16px;flex-wrap:wrap}
.schedule-quick-student input{width:auto;flex:1;min-width:160px}

/* Keep native controls tall enough for the current typeface. This global
   guard prevents compact layouts from cropping select and input labels. */
:root{--compact-control-height:40px}
input:not([type="checkbox"]):not([type="radio"]),select{min-height:var(--compact-control-height);padding-block:6px;line-height:1.25}

.student-create-next{display:flex;align-items:flex-start;gap:10px;margin:14px 0;padding:14px;border:1px solid var(--line);background:var(--surface-muted)}
.student-create-next input{flex:0 0 auto;width:18px;height:18px;margin-top:2px}
.student-create-next span,.student-create-next strong,.student-create-next small{display:block}
.student-create-next small{margin-top:4px;color:var(--muted);font-weight:400;line-height:1.4}

/* Role home, report and campaign modules reuse the shared surface/grid system. */
.today-heading{max-width:920px;margin-bottom:22px}.today-heading h1{margin:2px 0 7px}.today-grid{max-width:1180px}.today-card{display:grid;align-content:start;gap:15px;min-height:205px}.today-card .ui-surface__heading{margin:0}.today-card-count{display:block;font:750 clamp(34px,5vw,58px)/1 Manrope,sans-serif;letter-spacing:-.05em}.today-card button{justify-self:start;margin-top:auto}.required-reports{max-width:1180px;margin-top:24px}.required-report-list{display:grid;gap:0}.required-report-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding:14px 0;border-top:1px solid var(--line)}.required-report-row:first-child{border-top:0}.required-report-row>div:first-child{display:grid;gap:3px;min-width:0}.required-report-row small{color:var(--muted)}
.latest-reports{max-width:1180px;margin-top:24px}.latest-report-list{display:grid}.latest-report{padding:12px 0;border-top:1px solid var(--line)}.latest-report:first-child{border-top:0}.latest-report summary{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0;font-weight:700}.latest-report summary small{color:var(--muted);font-weight:500}.latest-report p{margin:12px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}
.notification-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.campaign-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;flex-wrap:wrap;max-width:1180px;margin:0 0 18px}.campaign-heading h2{margin:0 0 5px}.campaign-heading p{margin:0}.campaign-grid{max-width:1180px}.campaign-card{display:grid;align-content:start;gap:12px;min-height:190px}.campaign-card button{justify-self:start;margin-top:auto}.campaign-form{display:grid;gap:14px}.campaign-form>label{display:grid;gap:6px}.campaign-form textarea{min-height:170px}.campaign-context-list{display:grid;gap:0;max-height:260px;overflow:auto;overscroll-behavior:contain}.campaign-context-choice{display:flex!important;align-items:center;gap:10px;padding:10px 6px;border-top:1px solid var(--line)}.campaign-context-choice:first-child{border-top:0}.campaign-recipient-list{display:grid;gap:12px}.campaign-recipient{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;padding:14px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.campaign-recipient>div{display:grid;gap:3px}.campaign-recipient pre{grid-column:1/-1;margin:0;padding:12px;max-height:220px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;background:var(--surface-muted);border-radius:6px;font:inherit}.report-recipient-choices{display:flex;gap:16px;flex-wrap:wrap}.report-recipient-choices label{display:flex;align-items:center;gap:7px}.lesson-report-dialog textarea{min-height:230px}.schedule-report-summary{display:grid;gap:8px;padding:12px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.schedule-report-state{color:var(--muted)}
.schedule-dialog.week-template-dialog{width:min(1040px,calc(100vw - 32px))}.week-template-intro{margin:0}.week-template-toolbar{display:grid;grid-template-columns:minmax(220px,360px) auto;align-items:end;gap:10px;padding:14px;border:1px solid var(--line);border-radius:8px;background:var(--surface-muted)}.week-template-toolbar>label{display:grid;gap:5px}.week-template-summary{margin:14px 0 10px}.week-template-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:10px}.week-template-day{display:grid;align-content:start;gap:9px;min-width:0;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--surface-muted)}.week-template-day-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.week-template-day h3{margin:0;font-size:16px}.week-template-slots{display:grid;gap:7px}.week-template-slot{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding:9px;background:var(--surface);border-left:4px solid var(--lemon);border-radius:5px}.week-template-slot-copy{display:grid;gap:1px;min-width:0}.week-template-slot strong{font-size:17px}.week-template-slot span,.week-template-slot small{overflow-wrap:anywhere}.week-template-slot small{color:var(--muted);font-size:11px}.week-template-empty{margin:0;padding:10px 4px;color:var(--muted);font-size:13px}.week-template-add{justify-self:start;min-height:30px;padding:4px 8px;border:0;background:transparent}.regular-slot-dialog-form{display:grid;gap:14px}.admin-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.admin-heading h1{margin:0 0 4px}.admin-heading .ui-eyebrow{margin-bottom:4px}.admin-updated{margin:8px 0 20px}.admin-metric{display:grid;align-content:start;gap:8px;min-height:150px}.admin-metric small{overflow-wrap:anywhere}.admin-breakdown-card{display:grid;align-content:start;min-width:0}.admin-breakdown{display:grid}.admin-breakdown-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid var(--line)}.admin-breakdown-row:last-child{border-bottom:0}.admin-users{margin-top:20px}.admin-users-card{min-width:0}.admin-user-filters{display:grid;grid-template-columns:minmax(180px,1fr) minmax(150px,.45fr) minmax(190px,.65fr) auto;gap:10px;align-items:end}.admin-user-filters label{display:grid;gap:4px}.admin-user-filters label>span{font-size:12px;font-weight:700;color:var(--muted)}.admin-user-filters input,.admin-user-filters select{width:100%;min-width:0}.admin-users-note{margin:12px 0}.admin-user-table-scroll{overflow:auto;border:1px solid var(--line);border-radius:7px}.admin-user-table{width:100%;min-width:900px;border-collapse:collapse}.admin-user-table th,.admin-user-table td{padding:12px;border-bottom:1px solid var(--line);vertical-align:top;text-align:left}.admin-user-table th{background:var(--surface-muted);color:var(--muted);font-size:12px}.admin-user-table tbody tr:last-child td{border-bottom:0}.admin-user-identity{display:grid;gap:2px;min-width:190px}.admin-user-identity small{color:var(--muted);overflow-wrap:anywhere}.admin-role-list{display:flex;flex-wrap:wrap;gap:5px;min-width:150px}.admin-empty{text-align:center!important;color:var(--muted)}.admin-pagination{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:12px}@media(max-width:760px){.admin-heading{align-items:stretch;flex-direction:column}.admin-heading button{align-self:flex-start}.admin-user-filters{grid-template-columns:1fr}.admin-pagination{justify-content:space-between}.admin-pagination span{text-align:center}}.profile-report-policy .timezone-toggle{align-items:flex-start}
@media(max-width:700px){.required-report-row{grid-template-columns:1fr}.required-report-row .row{justify-content:stretch}.required-report-row button{flex:1}.campaign-recipient{grid-template-columns:1fr}.campaign-recipient button{justify-self:start}.week-template-toolbar{grid-template-columns:1fr}.week-template-toolbar .button{width:100%}.week-template-grid{grid-template-columns:1fr}.week-template-slot{grid-template-columns:minmax(0,1fr) auto}.today-card{min-height:0}}

/* The campaign composer uses the canonical roster picker and payment ledger.
   Inputs keep their own width instead of inheriting the global full-width rule. */
.campaign-create-dialog{width:min(760px,calc(100vw - 24px))}.campaign-context-choice{display:grid!important;grid-template-columns:20px minmax(0,1fr);align-items:center;gap:10px;min-width:0}.campaign-context-choice input{width:18px!important;height:18px;margin:0}.campaign-context-choice span{min-width:0;overflow-wrap:anywhere}.campaign-payment-period{padding:14px;border-left:4px solid var(--line-strong);background:var(--surface-muted)}.campaign-payment-period>div{display:grid;grid-template-columns:minmax(180px,1fr) minmax(180px,1fr);align-items:end;gap:14px}.campaign-payment-period>div>div{display:grid;gap:5px}.campaign-payment-period p{margin:10px 0 0}.campaign-payment-preview{display:grid;gap:12px}.campaign-preview-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding-bottom:10px;border-bottom:1px solid var(--line)}.campaign-preview-heading>*{display:block}.campaign-calculation-card{display:grid;gap:9px;padding:14px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.campaign-calculation-card>div{display:flex;align-items:center;justify-content:space-between;gap:12px}.campaign-calculation-actions{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.campaign-calculation-actions small{flex:1;min-width:220px}.campaign-calculation-text{min-height:260px!important;resize:vertical;white-space:pre-wrap;font:14px/1.5 Manrope,sans-serif}@media(max-width:600px){.campaign-payment-period>div{grid-template-columns:1fr}.campaign-preview-heading,.campaign-calculation-card>div{display:grid}.campaign-calculation-text{min-height:320px!important}}
.call-access-view{display:grid;gap:10px;padding:14px;border-left:4px solid var(--lemon);background:var(--surface-muted)}.call-access-view h3,.call-access-view p{margin:0}.call-access-view .profile-compact-editor{margin-top:2px}.call-access-view form{display:grid;gap:12px;padding-top:12px}.call-access-view textarea{min-height:100px}.call-access-instructions{white-space:pre-wrap;overflow-wrap:anywhere}.today-nearest-list{display:grid;grid-template-columns:1fr;align-items:start;gap:14px}.today-nearest-lessons{display:grid;gap:0}.campaign-delivery-ok{color:var(--success-ink)}.campaign-delivery-warning{color:var(--warning-ink);font-weight:650}.button{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}

/* Prepared campaigns stay readable as a compact delivery ledger on both a
   desktop dialog and the narrow mobile sheet. */
.campaign-create-dialog{width:min(680px,calc(100vw - 24px))}.campaign-period{padding:14px;border-left:4px solid var(--line-strong);background:var(--surface-muted)}.campaign-period>div{display:grid;grid-template-columns:1fr 1fr;gap:12px}.campaign-period label{display:grid;gap:5px}.campaign-period p{margin:10px 0 0}.campaign-additional-settings{padding-top:2px}.campaign-additional-settings summary{cursor:pointer;font-weight:700}.campaign-additional-settings label{display:grid;gap:6px;margin-top:12px}.campaign-detail-dialog[open]{display:flex;flex-direction:column;width:min(960px,calc(100vw - 24px));height:min(820px,calc(100vh - 28px));max-height:calc(100vh - 28px);overflow:hidden}.campaign-detail-dialog .schedule-dialog-body{min-height:0;overflow:auto;padding-right:4px}.campaign-summary{display:grid;gap:3px;margin:0 0 12px;padding:12px;border-left:4px solid var(--context-selected-line);background:var(--surface-muted)}.campaign-summary small{color:var(--muted)}.campaign-channel-states{display:grid;gap:2px}.campaign-channel-states small{overflow-wrap:anywhere}.campaign-recipient-history{grid-column:1/-1;margin-top:4px}.campaign-recipient-history summary{cursor:pointer;color:var(--muted);font-size:13px}.campaign-recipient-history>div{display:grid;gap:3px;margin-top:8px;padding:9px 10px;border-left:3px solid var(--line-strong);background:var(--surface-muted)}.campaign-recipient-history small{overflow-wrap:anywhere}.campaign-footer-summary{align-self:center;margin-right:auto;color:var(--muted);font-size:12px;line-height:1.35}.campaign-repeat-targets{display:grid;gap:7px;margin:0;padding:0 0 0 20px}.campaign-repeat-targets li{overflow-wrap:anywhere}.campaign-history-more{display:block;margin:18px auto 0}.campaign-delivery-ledger{display:grid;gap:10px}.campaign-detail-filters{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.campaign-recipient-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:13px}.campaign-recipient-table th,.campaign-recipient-table td{padding:9px 7px;border-bottom:1px solid var(--line);vertical-align:middle;text-align:center}.campaign-recipient-table th:first-child,.campaign-recipient-table td:first-child{width:31%;text-align:left}.campaign-recipient-table th:nth-child(5),.campaign-recipient-table td:nth-child(5){width:92px}.campaign-recipient-table th:nth-child(6),.campaign-recipient-table td:nth-child(6),.campaign-recipient-table th:nth-child(7),.campaign-recipient-table td:nth-child(7){width:100px}.campaign-recipient-table th:nth-child(8),.campaign-recipient-table td:nth-child(8){width:80px}.campaign-recipient-table td:first-child strong,.campaign-recipient-table td:first-child small{display:block;overflow-wrap:anywhere}.campaign-recipient-table td:first-child small{margin-top:2px;color:var(--muted)}.campaign-recipient-table tr.manual-sent{background:var(--success-soft)}.campaign-channel-mark{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;font-size:17px;font-weight:800;line-height:1;cursor:help}.campaign-channel-mark.sent{color:var(--success-ink);background:var(--success-soft)}.campaign-channel-mark.ready{color:var(--muted);border:1px solid var(--line-strong);background:transparent}.campaign-channel-mark.pending{color:var(--muted);background:var(--surface-muted);animation:campaign-channel-pulse 1.25s ease-in-out infinite}.campaign-channel-mark.warning{color:var(--warning-ink);background:var(--warning-soft);box-shadow:var(--danger-surface-glow)}.campaign-channel-mark.unavailable{color:var(--danger-ink);background:var(--danger-soft);box-shadow:var(--danger-surface-glow)}.campaign-recipient-table input[type="checkbox"]{width:18px;height:18px;accent-color:#13704e;cursor:pointer}.campaign-table-empty td{padding:18px;text-align:center;color:var(--muted)}.campaign-message-text{margin:0;padding:12px;max-height:42dvh;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;background:var(--surface-muted);border-radius:6px;font:inherit}.campaign-text-dialog[open]{width:min(680px,calc(100vw - 24px));max-height:calc(100vh - 28px)}@keyframes campaign-channel-pulse{50%{opacity:.45}}
.campaign-channel-mark.ready{border:0}
.campaign-icon-button{display:inline-grid;place-items:center;width:36px;min-width:36px;height:34px;padding:0;border-color:var(--line);background:var(--surface-muted)}.campaign-icon-button .ui-icon{width:18px;height:18px}.campaign-copy-button.copied{color:var(--success-ink);border-color:var(--success-line);background:var(--success-soft)}
@media(max-width:800px){.campaign-period>div{grid-template-columns:1fr}.schedule-dialog.campaign-detail-dialog[open],.schedule-dialog.campaign-create-dialog[open]{box-sizing:border-box;width:calc(100vw - 16px)!important;max-width:calc(100vw - 16px)!important;margin:auto!important}.schedule-dialog.campaign-detail-dialog[open]{height:calc(100dvh - 12px);max-height:calc(100dvh - 12px);}.campaign-detail-dialog .schedule-dialog-footer{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch;gap:6px;padding:10px var(--schedule-dialog-pad)}.campaign-detail-dialog .schedule-dialog-footer>*{width:100%;min-width:0}.campaign-detail-dialog .campaign-footer-summary,.campaign-detail-dialog .schedule-dialog-footer .primary{grid-column:1/-1}.campaign-footer-summary{margin:0}.campaign-recipient-history>div{padding:8px}.campaign-create-dialog .schedule-dialog-footer button{width:100%}.campaign-recipient-table,.campaign-recipient-table tbody,.campaign-recipient-table tr,.campaign-recipient-table td{display:block;width:100%}.campaign-recipient-table thead{display:none}.campaign-recipient-table tr{margin:0 0 10px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.campaign-recipient-table td{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--line);text-align:right}.campaign-recipient-table td:first-child{display:grid;width:100%;padding-top:2px;text-align:left}.campaign-recipient-table td:last-child{border-bottom:0}.campaign-recipient-table td::before{content:attr(data-label);color:var(--muted);font-size:12px;text-align:left}.campaign-recipient-table td:first-child::before{display:none}.campaign-recipient-table th:nth-child(n),.campaign-recipient-table td:nth-child(n){width:100%}.campaign-recipient-table .button{min-width:132px}.campaign-table-empty td{display:block;text-align:center}.campaign-table-empty td::before{display:none}.campaign-text-dialog[open]{box-sizing:border-box;width:calc(100vw - 16px)!important;max-width:calc(100vw - 16px)!important;margin:auto!important}}
.campaign-recipient-table .campaign-icon-button{min-width:36px}
@media(max-width:700px){.today-nearest-list{grid-template-columns:1fr}.today-nearest-time{width:max-content}}
.button{box-sizing:border-box;color:var(--ink);border:1px solid transparent;border-radius:5px;min-height:42px;padding:8px 14px;background:transparent;font-weight:550;cursor:pointer}.button:hover{background:var(--surface-hover);color:var(--ink)}.button.primary{background:var(--inverse);border-color:var(--ink);color:var(--on-inverse)}.button.primary:hover{background:var(--inverse-hover);color:var(--on-inverse)}.button.selected{background:var(--surface-hover);color:var(--ink)}.button.compact{min-height:34px;padding:5px 10px}


@media(min-width:901px){.app-sidebar.icon-sidebar nav .icon-button{position:relative;z-index:1;justify-content:flex-start;width:52px;min-height:48px;padding:8px 14px;border:1px solid transparent;border-radius:8px;overflow:hidden;transition:width .32s cubic-bezier(.4,0,.2,1),background-color .22s ease .07s,border-color .22s ease .07s,box-shadow .22s ease .04s,color .22s ease .07s}.app-sidebar.icon-sidebar nav .icon-button .ui-icon{flex:0 0 22px}.app-sidebar.icon-sidebar nav .icon-button.selected{background:var(--lemon);color:var(--on-accent)}.app-sidebar.icon-sidebar nav .icon-button span:not(.notification-unread-count):not(.notification-unread-count-expanded){min-width:max-content;margin-left:12px;opacity:0;transform:translateX(-7px);transition:opacity .2s ease .06s,transform .28s cubic-bezier(.4,0,.2,1);white-space:nowrap}.app-sidebar.icon-sidebar nav .icon-button.rail-open,.app-sidebar.icon-sidebar nav .icon-button:hover,.app-sidebar.icon-sidebar nav .icon-button:focus-visible{z-index:125;width:var(--rail-open-width,220px);background:var(--lemon);border-color:var(--accent-line);box-shadow:0 8px 22px #15180d26;transition-delay:0s;color:var(--on-accent)}.app-sidebar.icon-sidebar nav .icon-button.rail-closing{z-index:125}.app-sidebar.icon-sidebar nav .icon-button.rail-open span:not(.notification-unread-count):not(.notification-unread-count-expanded),.app-sidebar.icon-sidebar nav .icon-button:hover span:not(.notification-unread-count):not(.notification-unread-count-expanded),.app-sidebar.icon-sidebar nav .icon-button:focus-visible span:not(.notification-unread-count):not(.notification-unread-count-expanded){opacity:1;transform:translateX(0);transition-delay:.06s}.app-sidebar.icon-sidebar nav .icon-button.has-unread-count>.notification-unread-count,.app-sidebar.icon-sidebar nav .icon-button.has-unread-count>.notification-unread-count-expanded{position:absolute;z-index:2;width:auto;min-width:18px;max-width:34px;height:18px;margin:0;padding:0 4px;overflow:hidden;white-space:nowrap;pointer-events:none}.app-sidebar.icon-sidebar nav .icon-button.has-unread-count>.notification-unread-count{right:5px;top:5px;visibility:visible;opacity:1!important;transform:none!important}.app-sidebar.icon-sidebar nav .icon-button.has-unread-count.rail-open>.notification-unread-count,.app-sidebar.icon-sidebar nav .icon-button.has-unread-count:hover>.notification-unread-count,.app-sidebar.icon-sidebar nav .icon-button.has-unread-count:focus-visible>.notification-unread-count{visibility:visible;opacity:0!important;transition:opacity .16s ease}.app-sidebar.icon-sidebar nav .icon-button.has-unread-count.rail-closing>.notification-unread-count{visibility:visible;opacity:1!important;transition:opacity .16s ease .3s}.app-sidebar.icon-sidebar nav .icon-button.has-unread-count>.notification-unread-count-expanded:not([hidden]){right:12px;top:50%;display:grid!important;visibility:hidden;opacity:0!important;transform:translateY(-50%)!important;transition:visibility 0s linear .12s,opacity .12s ease}.app-sidebar.icon-sidebar nav .icon-button.has-unread-count.rail-open>.notification-unread-count-expanded,.app-sidebar.icon-sidebar nav .icon-button.has-unread-count:hover>.notification-unread-count-expanded,.app-sidebar.icon-sidebar nav .icon-button.has-unread-count:focus-visible>.notification-unread-count-expanded{visibility:visible;opacity:1!important;transition:visibility 0s linear .3s,opacity .12s ease .3s}}

/* Clip the moving caption, not the unread badge's glow. The icon and badges
   retain their original boxes; the caption retains its intrinsic width. */
.rail-caption-clip{display:contents}
@media(min-width:901px){
  .app-sidebar.icon-sidebar nav .icon-button.has-unread-count{overflow:visible}
  .app-sidebar.icon-sidebar nav .icon-button>.rail-caption-clip{position:absolute;inset:0 0 0 36px;display:flex;align-items:center;overflow:hidden}
}
/* One 12px icon/caption gap for both real links and buttons; no duplicate flex
   gap. The expanded unread badge keeps the same 14px outer padding. */
@media(min-width:901px){
  .app-sidebar.icon-sidebar nav .icon-button{gap:0}
  .app-sidebar.icon-sidebar nav .icon-button.has-unread-count>.notification-unread-count-expanded:not([hidden]){right:14px}
}
/* Messenger channel connection (Telegram, MAX): one link at a time, two ways to open it. */
.channel-connect-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.channel-connect-heading h2{margin:0}
.channel-connect{display:grid;gap:14px;max-width:760px}
.channel-connect>p{margin:0}
.channel-connect-note{padding:10px 12px;border-left:4px solid var(--warning-line);background:var(--warning-soft);color:var(--warning-ink)}
.channel-connect-success{padding:10px 12px;border-left:4px solid var(--success-line);background:var(--success-soft);color:var(--success-ink);font-weight:650}
.channel-connect-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:12px;margin:0;padding:0;list-style:none;counter-reset:channel-step}
.channel-connect-steps>li{display:grid;align-content:start;gap:8px;padding:16px;border:1px solid var(--line);border-radius:8px;background:var(--surface-muted);counter-increment:channel-step}
.channel-connect-steps>li>strong:before{content:counter(channel-step) '. ';color:var(--muted)}
.channel-connect-steps>li>p{margin:0}
.channel-connect-open{justify-self:start;margin-top:4px}
.channel-connect-copy{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}
.channel-connect-copy .channel-connect-url{flex:1 1 200px;min-width:0;font-size:13px}
.channel-connect-wait{margin:0;color:var(--muted)}
.channel-connect-wait:before{content:'';display:inline-block;width:8px;height:8px;margin-right:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--accent-line);vertical-align:1px;animation:channel-wait 1.4s ease-in-out infinite}
@keyframes channel-wait{50%{opacity:.35}}
@media(prefers-reduced-motion:reduce){.channel-connect-wait:before{animation:none}}
.channel-connect-private{font-size:13px}
.channel-connect-other summary{cursor:pointer;color:var(--muted)}
/* Lesson rows in «Актуальное» cards. The card width, not the window width, decides the
   layout (container query): in a narrow card the actions and call instructions go below
   the lesson so the name is never squeezed; a wide card keeps them on the right. */
.today-detail-card{container-type:inline-size}






.change-policy-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap;margin-top:12px}
.change-policy-editor textarea{min-height:140px}
/* Compact «today» lesson row (todayLessonRow). Actions keep their intrinsic
   column instead of wrapping because of the text track's former 90px minimum.
   Call instructions stay in the existing «?» hint, never inside the card body. */
.today-lesson-list{display:grid;container:today-lessons/inline-size}
.today-lesson{display:grid;grid-template-columns:minmax(0,1fr) max-content;grid-template-areas:"title call" "meta actions";align-items:center;gap:2px 10px;padding:8px 0;border-bottom:1px solid var(--line)}
.today-lesson:last-child{border-bottom:0;padding-bottom:0}
.today-lesson--timed{grid-template-columns:44px minmax(0,1fr) max-content;grid-template-areas:"time title call" "time meta actions"}
.today-lesson--no-call{grid-template-areas:"title title" "meta actions"}
.today-lesson--timed.today-lesson--no-call{grid-template-areas:"time title title" "time meta actions"}
.today-lesson-time{grid-area:time;align-self:start;padding-top:1px;font-weight:750}
.today-lesson-title{grid-area:title;display:flex;align-items:center;gap:6px;min-width:0}
.today-lesson-title strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.today-lesson-title .ui-badge{flex:0 0 auto}
.today-lesson-meta{grid-area:meta;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}
.today-lesson-actions{grid-area:actions;justify-self:end;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:4px}
.today-lesson-actions .button{min-height:28px;padding:3px 8px;white-space:nowrap;border-color:var(--line);background:var(--surface-muted)}
.today-lesson-actions .button:hover{border-color:var(--line-strong);background:var(--surface-hover)}
/* The call control spans the width of the buttons below it; the «?» sits inside it on the right. */
.today-lesson-call{grid-area:call;justify-self:stretch;display:flex;align-items:center;min-height:28px;border:1px solid var(--accent-line);border-radius:6px;background:var(--accent-soft);color:var(--ink);white-space:nowrap}
.today-lesson-call:hover{border-color:var(--line-strong)}
.today-call-button{flex:1 1 auto;display:flex;align-items:center;justify-content:center;align-self:stretch;min-width:0;padding:3px 8px;color:inherit;font-weight:700;text-decoration:none}
.today-lesson-call .today-call-help{flex:0 0 18px;margin-right:6px}
.today-lesson-call--hint-only{justify-self:end;border-color:transparent;background:transparent}
.today-lesson-call--hint-only .today-call-help{margin:0}
/* A very narrow timed preview cannot fit a second copy of the time alongside
   both actions. Give metadata its own full line, preserving the original time,
   title, call and action controls and their sizes. Untimed nearest rows retain
   their existing mobile composition below. */
@container today-lessons (max-width:280px){
 .today-lesson--timed{grid-template-areas:"time title title" "time . call" "time . actions" "meta meta meta"}
 .today-lesson--timed.today-lesson--no-call{grid-template-areas:"time title title" "time actions actions" "meta meta meta"}
 .today-lesson--timed>.today-lesson-meta{white-space:normal;overflow-wrap:anywhere}
}

/* Student card → «Приглашения»: one section for the student, one for parents. */
.student-invitation-grid{margin-bottom:14px}
.invitation-connected{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0}
.invitation-links{display:grid;gap:10px;min-width:0}
.invitation-link{display:grid;gap:8px;min-width:0;padding:12px;border:1px solid var(--line);border-left:4px solid var(--lemon);border-radius:7px;background:var(--surface)}
.invitation-link-copy{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.invitation-link input{width:100%;min-width:0;font-size:14px}
.invitation-link-actions{display:flex;gap:6px;flex-wrap:wrap}
.invitation-limit-note{margin:0;font-size:13px}
.invitation-history{max-width:920px}
.invitation-history summary{cursor:pointer;font-weight:700}
.invitation-history-list{display:grid;margin-top:8px}
.invitation-history-row{display:grid;grid-template-columns:90px minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}
/* Student card → «Каналы уведомлений»: participants × Telegram / MAX in one compact table. */
.channel-matrix{width:100%;border-collapse:collapse;font-size:14px}
.channel-matrix th,.channel-matrix td{padding:7px 6px;border-bottom:1px solid var(--line);text-align:center;vertical-align:middle}
.channel-matrix thead th{padding-top:0;color:var(--muted);font-size:12px;font-weight:700}
.channel-matrix tbody th{padding-left:0;text-align:left;font-weight:600}
.channel-matrix tbody th small{display:block;color:var(--muted);font-size:11px;font-weight:600}
.channel-matrix tbody th span{display:block;overflow-wrap:anywhere}
.channel-matrix tr:last-child th,.channel-matrix tr:last-child td{border-bottom:0}
.channel-matrix td{width:84px}
.channel-status{display:inline-block;min-width:42px;padding:2px 8px;border-radius:999px;background:var(--surface-muted);color:var(--muted);font-size:12px;font-weight:700}
.channel-status.good{background:var(--success-soft);color:var(--success-ink)}
.channel-status.warning{background:var(--warning-soft);color:var(--warning-ink);box-shadow:var(--danger-surface-glow)}
/* «Актуальное»: slim reminder to connect a messenger (only when none is connected). */
.today-channels-card{display:flex;align-items:center;justify-content:space-between;gap:8px 12px;flex-wrap:wrap;max-width:1180px;margin:14px 0 0;padding:10px 14px;border:1px solid var(--line);border-left:4px solid var(--lemon);border-radius:9px;background:var(--surface)}
.today-channels-card p{margin:0;min-width:0;flex:1 1 160px;font-size:14px;line-height:1.35}
.today-channels-card .button,.today-channels-card button{flex:0 0 auto;min-height:32px}

/* Student card · «Настройки занятий»: default price row next to the default duration. */
.default-price-setting{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}.default-price-copy{display:grid;gap:2px;min-width:0}.default-price-copy small{margin:0}

/* Invitation link screen: the refusal reason sits above the actions. */
.invitation-screen{max-width:640px}.invitation-screen h1{margin-bottom:8px}.invitation-screen-status{margin:0 0 12px;color:var(--danger-ink);font-weight:600}

/* Signed-in account without a role: one calm explanation instead of the dashboard. */
.no-role-page{max-width:640px;padding:8px 0 24px}.no-role-page h1{margin-bottom:16px}.no-role-page p{margin:0 0 12px;font-size:17px;line-height:1.5}.no-role-page p.muted{font-size:15px}

/* «Актуальное» · student/parent: homework deadlines as compact rows (same rhythm as lesson rows). */
.today-homework-list{display:grid;gap:8px}.today-homework-list>small{padding-top:8px}
.today-report-content{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}
.today-homework-row{display:grid;gap:2px;width:100%;min-height:0;padding:8px 0;border:0;border-bottom:1px solid var(--line);border-radius:0;background:none;color:var(--ink);text-align:left;font:inherit;cursor:pointer}
.today-homework-row:hover strong{text-decoration:underline}
.today-homework-row strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.today-homework-row small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}
.today-overdue-card .today-homework-row small{color:var(--danger-ink)}
/* Week / month schedule: a date column and the day's lessons; nothing wraps into a clump. */
.today-period{display:grid}
.today-day{display:grid;grid-template-columns:64px minmax(0,1fr);gap:10px;align-items:start;padding:7px 0;border-bottom:1px solid var(--line)}
.today-day.is-today .today-day-label strong{color:var(--accent-ink,var(--ink));text-decoration:underline;text-decoration-color:var(--lemon);text-decoration-thickness:3px;text-underline-offset:3px}
.today-day.is-empty{padding:4px 0}
.today-day-label{display:flex;align-items:baseline;gap:6px;white-space:nowrap}
.today-day-label small{color:var(--muted)}
.today-day-lessons{display:grid;gap:3px;min-width:0}
.today-day-lesson{display:flex;gap:8px;min-width:0}
.today-day-lesson time{flex:0 0 auto;font-weight:700;font-variant-numeric:tabular-nums}
.today-day-lesson>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.today-period-card .today-day-label{flex-direction:row}
.today-period--month .today-day{grid-template-columns:104px minmax(0,1fr)}
/* Tutor «Актуальное»: draft vs published lessons in the schedule colours (legend in the card «?»). */
.today-lesson--draft,.today-lesson--published{padding-left:10px;padding-right:6px;border-left:4px solid;border-radius:3px;margin-bottom:4px}
.today-lesson--draft{border-left-color:var(--line-strong);background:var(--surface-hover)}
.today-lesson--published{border-left-color:var(--info-line);background:linear-gradient(90deg,color-mix(in srgb,#5b7cfa 12%,var(--surface)),color-mix(in srgb,#3fa7c0 10%,var(--surface)))}

.setting-toggle{display:grid;gap:4px;margin:10px 0}.setting-toggle .timezone-toggle{margin:0}.setting-toggle-note{margin:0}
.homework-after-lesson-delay{max-width:280px;margin:12px 0 8px;min-width:0}.homework-after-lesson-delay>input{width:100%;min-width:0}
.student-payments-setting{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.homework-notify-later{display:grid;gap:6px;margin:4px 0 8px}.homework-notify-later .timezone-toggle{margin:0}.homework-notify-at{display:grid;gap:4px;max-width:260px}.homework-notify-at[hidden]{display:none}
.digest-time{display:grid;gap:4px;max-width:180px;margin:6px 0}

/* File inputs (homework, answers): only the button. The browser's «Файл не выбран»
   is noise — files attach on choice and the list/counter below shows what is attached. */
/* A file input is a drop zone: the whole dashed area accepts dragged files, the button opens the picker. */
input[type=file]{width:100%;max-width:100%;min-height:60px;padding:9px;border:1px dashed var(--line-strong);border-radius:8px;background:var(--surface-muted);color:transparent;box-shadow:none;cursor:pointer}
input[type=file].is-dragover{border-color:var(--accent-line);background:var(--accent-soft)}
input[type=file]::file-selector-button{min-height:40px;margin:0;padding:8px 14px;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface);color:var(--ink);font:600 14px/1.2 inherit;cursor:pointer}
input[type=file]:hover::file-selector-button{background:var(--surface-hover)}
input[type=file]:focus-visible{outline:2px solid var(--accent-line);outline-offset:3px}
.homework-edit-files{display:grid;gap:6px;margin:4px 0 10px}

/* Cabinet composition: compact working-page titles, calm surfaces and aligned
   section actions. These rules deliberately do not touch the calendar period,
   curriculum timeline, graph canvas or the original arrow action. */
.context-panel>.context-heading h1,.today-heading h1,.notification-heading h1{font-size:clamp(28px,2.5vw,38px);line-height:1.2;max-width:none;margin-bottom:8px}
.context-panel>.context-heading{align-items:center;gap:16px;margin-bottom:22px}
.student-profile-card{background:var(--surface)}
.student-card-heading,.profile-section-heading{align-items:center;gap:10px 16px}
.profile-section-heading h2{margin-bottom:0}
.profile-section-heading+.muted{margin-top:8px}
.student-profile-card>.ui-surface__heading{margin-bottom:14px}
.today-detail-card{background:var(--surface);border:1px solid var(--line)}
.today-card-grid>.today-detail-card.ui-surface--stable:nth-child(n){height:var(--ui-surface-block-size,560px)}
.today-required-homework-card{background:var(--surface);border-color:var(--line)}
.today-drafts-card{background:var(--danger-soft);border-color:var(--danger-line);box-shadow:var(--danger-glow)}
.today-drafts-card .today-draft-mark{background:var(--danger-ink);color:var(--on-inverse);border:1px solid var(--danger-ink);box-shadow:var(--danger-glow)}
.today-payment-total{border-left-color:var(--line-strong)}
.today-channels-card{border-left-color:var(--context-selected-line)}
.today-detail-card .ui-surface__heading{align-items:center}
.notification-card-footer{gap:8px 12px}
.notification-record .ui-list-item__meta{white-space:normal;overflow-wrap:anywhere}
.notification-card-footer>.row{gap:8px}
.notification-tabs.ui-tabbar{flex-wrap:nowrap;gap:24px;margin:12px 0 22px;max-width:1180px}
/* The tabs already divide the page. Keep the first plain section's geometry,
   but do not draw a second separator; later channel sections retain theirs. */
.notification-tabs.ui-tabbar + .card{border-top-color:transparent}
.notification-feed>.notification-empty{margin:0}
.channel-connect-heading{align-items:center}
.channel-connect-heading>h2{font-size:24px;line-height:1.25}
/* Settings are a reading-and-adjusting workspace, not a wide data table.
   Keep its short fields beside their save action and long policy text bounded. */
.workspace-section-profile>.card{max-width:900px;padding-block:24px;margin-bottom:8px}
.workspace-section-profile>.card:first-child{border-top:0;padding-top:0}
.workspace-section-profile>.card>p{max-width:820px;line-height:1.5}
.workspace-section-profile>.card>.muted{font-size:16px}
.workspace-section-profile>.card>hr{margin:18px 0;border:0;border-top:1px solid var(--line)}
.workspace-section-profile>.card>.ui-form{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:12px;max-width:620px}
.workspace-section-profile>.card>.ui-form>button[type=submit]{justify-self:end;white-space:nowrap}
.workspace-section-profile>.card:has(input[name=minutes])>.ui-form{max-width:380px}
.workspace-section-profile .homework-deadline-settings>.schedule-form-grid{max-width:620px;grid-template-columns:minmax(0,1fr) minmax(130px,180px)}
.workspace-section-profile .schedule-auto-placement-settings{display:grid;gap:10px;max-width:760px}
.workspace-section-profile .schedule-auto-placement-settings>.timezone-toggle{margin:0}
.workspace-section-profile .schedule-auto-placement-settings>p{margin:0;max-width:640px;font-size:14px;line-height:1.5}
.workspace-section-profile .schedule-auto-placement-timing{max-width:620px;grid-template-columns:minmax(0,1fr) minmax(100px,140px);align-items:end}
.workspace-section-profile .schedule-auto-placement-timing[hidden],.workspace-section-profile .schedule-auto-placement-timing>[hidden]{display:none}
.workspace-section-profile .change-policy-editor{max-width:760px}
.workspace-section-profile .change-policy-actions{justify-content:flex-start}
/* Escape must win over the pointer/focus that intentionally stays on the
   account trigger. The next deliberate hover/click clears this one-shot state. */
@media(min-width:901px){
 .app-sidebar.icon-sidebar.account-dismissed .sidebar-account-zone>.sidebar-account{opacity:0;visibility:hidden;pointer-events:none;transform:translateY(8px) scale(.82)}
}
@media(max-width:900px){
 .context-panel>.context-heading h1,.today-heading h1,.notification-heading h1{font-size:28px;line-height:1.2;margin-bottom:6px}
 .context-panel>.context-heading{gap:12px;margin-bottom:18px}
 .student-profile-card h2{font-size:20px}
 .student-profile-title h2{font-size:24px!important}
 .notification-tabs.ui-tabbar{gap:18px;margin-bottom:18px}
}
@media(max-width:540px){
 .workspace-section-profile>.card{padding-block:20px}
 .workspace-section-profile>.card>.ui-form{grid-template-columns:minmax(0,1fr);gap:10px}
 .workspace-section-profile>.card>.ui-form>button[type=submit]{justify-self:start;white-space:normal}
 .workspace-section-profile .homework-deadline-settings>.schedule-form-grid{grid-template-columns:minmax(0,1fr)}
 .workspace-section-profile .schedule-auto-placement-timing{grid-template-columns:minmax(0,1fr)}
 .workspace-section-profile .schedule-auto-placement-timing>.ui-field:has(input[type=number]){max-width:140px}
}
/* Separate work, learning and management without changing rail controls. */
.sidebar-icon-nav>.icon-button[data-nav-group-start]{margin-block-start:8px}
.family-scope-toolbar{margin-block:0 16px}
.family-scope-toolbar .ui-field{max-width:300px;min-width:min(220px,100%)}
.family-context-links{margin-bottom:16px}
.family-context-links:empty{display:none}
.family-context-links .call-access-view>.button{justify-self:start;max-width:100%;white-space:normal;text-align:start}
.family-report-content{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.6}
.today-progress-card{margin-bottom:18px}
.today-progress-preview{position:relative;min-width:0;overflow:hidden}
.today-progress-preview:has(.knowledge-map){height:280px}
.today-progress-preview .ui-region,.today-progress-preview .ui-region__content{height:100%}
.today-homework-row.ui-action{display:grid;justify-content:stretch;text-decoration:none}
.today-reviews-card .today-homework-row small{white-space:normal}
.today-payments-card .today-metric-row{min-width:0;gap:12px;align-items:start}
.today-payments-card .today-metric-row>.ui-action{min-width:0;flex:1;white-space:normal;text-align:left;overflow-wrap:anywhere}
.today-payments-card .today-metric-row>strong{flex:0 0 auto;white-space:nowrap}
.knowledge-workspace:has(>.family-scope-toolbar){display:flex;flex-direction:column}
.knowledge-workspace>.family-scope-toolbar{flex:0 0 auto;padding:8px 16px;margin:0;background:var(--surface)}
.knowledge-workspace:has(>.family-scope-toolbar)>.ui-region{flex:1;min-height:0;height:auto}
@media(max-width:480px){.family-scope-toolbar .ui-field{max-width:none;width:100%}.today-progress-preview:has(.knowledge-map){height:240px}}
@media(min-width:901px) and (max-height:720px){.sidebar-icon-nav>.icon-button[data-nav-group-start]{margin-block-start:0}}
/* A phone card keeps its title and section link on one header row. The time
   and lesson description get a full line rather than competing with actions. */
@media(max-width:720px){
 .today-detail-card .ui-surface__heading{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding-bottom:10px}
 .today-detail-card .ui-surface__heading h2{font-size:18px;line-height:1.25;margin:0}
 .today-detail-card .ui-surface__heading-actions{justify-self:end;max-width:94px}
 .today-detail-card .ui-surface__heading-actions .ui-action{min-height:44px;padding:6px 4px;font-size:12px;line-height:1.2;text-align:right}
 .today-detail-card .ui-surface__heading>.ui-surface__description{grid-column:1/-1;font-size:14px;line-height:1.45}
 /* A bulk action is secondary and needs a complete row, not the narrow
    section-link column. Keep the title/link pair aligned above it. */
 .today-detail-card .ui-surface__heading-actions:has(.today-skip-all),.today-detail-card .ui-surface__heading-actions:has(.today-skip-all)>.ui-row{display:contents}
 .today-detail-card .ui-surface__heading-actions:has(.today-skip-all) a.ui-action{grid-column:2;grid-row:1;justify-self:end;max-width:94px}
 .today-detail-card .ui-surface__heading-actions .today-skip-all{grid-column:1/-1;grid-row:2;justify-self:start;text-align:left}
 .today-detail-card .ui-surface__heading:has(.today-skip-all)>.ui-surface__description{grid-row:3}
 .today-nearest-list .today-lesson--no-call{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"title actions" "meta meta"}
 .today-nearest-list .today-lesson-title strong{white-space:normal;overflow-wrap:anywhere}
 .today-nearest-list .today-lesson-actions .button{min-height:44px;padding:6px;font-size:12px}
 .today-nearest-list .today-lesson-meta{white-space:normal;overflow-wrap:anywhere}
}

/* Today is a compact preview; complete lists live in their own workspaces. */
.today-report-content{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
