:root{--navy:#082b4c;--navy2:#0b3b66;--blue:#11a7ee;--orange:#ff8a1f;--bg:#f4f7fb;--panel:#fff;--text:#233244;--muted:#718094;--line:#d9e3ec;--good:#2fbd70;--danger:#ef4358;--warn:#f4b423;--aqua:#2bb8be;--shadow:0 10px 30px rgba(16,45,75,.08);--radius:14px}*{box-sizing:border-box}body{margin:0;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:var(--bg);color:var(--text)}button,input,select,textarea{font:inherit}button{cursor:pointer}.hidden{display:none!important}.muted{color:var(--muted)}.tiny{font-size:12px}.eyebrow{font-size:11px;font-weight:800;letter-spacing:1.2px;color:var(--blue)}h1,h2,h3,h4,p{margin-top:0}.app-shell{min-height:100vh}.app-header{height:68px;background:var(--navy);color:#fff;display:flex;align-items:center;padding:0 22px;gap:28px;position:sticky;top:0;z-index:40;box-shadow:0 3px 12px rgba(0,0,0,.12)}.brand{display:flex;align-items:center;gap:10px;min-width:185px}.brand-mark{width:42px;height:42px;border-radius:12px;background:linear-gradient(135deg,var(--orange),#ffb150);display:grid;place-items:center;color:#17222e;font-weight:950}.brand strong,.brand span{display:block}.brand span{font-size:10px;letter-spacing:1px;opacity:.75}.top-nav{display:flex;height:100%;align-items:stretch}.nav{border:0;background:transparent;color:#dce8f4;padding:0 18px;font-weight:700;position:relative}.nav:hover{background:rgba(255,255,255,.05)}.nav.active{color:#fff}.nav.active:after{content:"";position:absolute;height:4px;background:var(--blue);left:12px;right:12px;bottom:0}.header-user{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:13px}.text-btn{background:transparent;border:0;color:#dce8f4}.icon-btn{border:1px solid var(--line);background:#fff;color:var(--navy);border-radius:10px;min-width:38px;height:38px}.icon-btn.big{font-size:24px;font-weight:700}.main{padding:26px 22px 60px;max-width:1720px;margin:0 auto}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:20px}.page-head h1{font-size:32px;letter-spacing:-.8px;margin:3px 0 0}.actions{display:flex;gap:8px;flex-wrap:wrap}.primary,.secondary,.danger{border-radius:9px;padding:10px 14px;font-weight:800;border:1px solid transparent}.primary{background:var(--orange);color:#1d2730}.primary:hover{filter:brightness(.97)}.secondary{background:#fff;border-color:#cad7e2;color:#314254}.danger{background:#fff1f3;border-color:#ffc4cb;color:#c92539}.small{padding:7px 10px;font-size:12px}.full{width:100%;margin-top:8px}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-bottom:22px}.kpi-grid.three{grid-template-columns:repeat(3,1fr)}.kpi{background:#fff;border:1px solid var(--line);border-radius:10px;min-height:108px;padding:18px 20px;display:flex;align-items:center;gap:16px;box-shadow:0 4px 14px rgba(10,44,75,.03)}.kpi-icon{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;font-size:24px;font-weight:800}.kpi-icon.aqua{color:var(--aqua);background:#ebfbfc}.kpi-icon.amber{color:#d99a00;background:#fff8df}.kpi-icon.red{color:var(--danger);background:#fff0f2}.kpi-icon.blue{color:#5576f7;background:#eef1ff}.kpi-icon.green{color:var(--good);background:#ecfbf3}.kpi b,.kpi span{display:block}.kpi b{font-size:28px;letter-spacing:-.8px}.kpi div span{font-size:13px;color:var(--muted);margin-top:3px}.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:18px}.dashboard-grid>.span2{grid-column:auto}.panel,.metric-card,.profile-card{background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 3px 12px rgba(10,44,75,.03)}.panel{padding:20px}.panel-title{display:flex;justify-content:space-between;gap:15px;align-items:center;margin-bottom:12px}.panel-title h2{font-size:18px;margin:0}.panel-title p{font-size:12px;color:var(--muted);margin:3px 0 0}.lesson-row{display:grid;grid-template-columns:90px 1fr auto auto;gap:12px;align-items:center;padding:13px 0;border-bottom:1px solid #edf2f6}.lesson-row:last-child{border-bottom:0}.lesson-time b,.lesson-time span,.lesson-main strong,.lesson-main small{display:block}.lesson-time b{font-size:15px}.lesson-time span,.lesson-main small{font-size:12px;color:var(--muted);margin-top:2px}.badge{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:4px 8px;font-size:10px;font-weight:850;letter-spacing:.35px;background:#eef3f7;color:#607084}.badge.good{background:#e9f8ef;color:#26995b}.badge.bad{background:#fff0f2;color:#d52d42}.badge.warn{background:#fff5d9;color:#ae7a00}.badge.test{background:#fff0df;color:#c96b0b}.attention-row,.money-row.clickable{border:0;background:transparent;width:100%;text-align:left}.attention-row{display:grid;grid-template-columns:10px 1fr auto;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid #edf2f6}.attention-row span strong,.attention-row span small{display:block}.attention-row small{color:var(--muted);margin-top:2px}.attention-dot{width:8px;height:8px;border-radius:50%}.attention-dot.danger{background:var(--danger)}.attention-dot.warn{background:var(--warn)}.attention-dot.info{background:var(--blue)}.metric-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-bottom:18px}.metric-card{padding:18px 20px}.metric-head{display:flex;justify-content:space-between;gap:10px;align-items:center}.metric-head h3{font-size:15px;margin:0}.metric-head span{font-size:11px;color:var(--muted);background:#f4f6f8;border-radius:99px;padding:4px 8px}.metric-value{font-size:28px;margin:36px 0 20px;letter-spacing:-1px}.metric-value small{font-size:12px;color:var(--muted);float:right;margin-top:12px}.meter{height:8px;background:#edf1f4;border-radius:99px;overflow:hidden}.meter i{display:block;height:100%;background:var(--aqua);border-radius:99px}.meter.danger i{background:var(--danger)}.empty{padding:36px 10px;text-align:center;color:var(--muted)}.empty.compact{padding:20px 10px}.calendar-panel{background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden}.calendar-toolbar{min-height:60px;display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line)}.calendar-left{display:flex;align-items:center;gap:8px}.calendar-left strong{margin-left:8px}.toggle-label{font-size:12px;color:var(--muted);display:flex;gap:7px;align-items:center}.calendar-scroll{overflow:auto}.week-head{display:grid;grid-template-columns:62px repeat(7,minmax(160px,1fr));min-width:1180px;position:sticky;top:0;background:#fff;z-index:12}.time-head,.day-head{height:52px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.day-head{display:flex;align-items:center;justify-content:center;gap:5px;background:var(--navy);color:#fff;font-size:12px}.day-head.today{box-shadow:inset 0 -4px 0 var(--blue);background:var(--navy2)}.week-body{min-width:1180px;position:relative;margin-left:0}.time-axis{position:absolute;left:0;top:0;width:62px;height:100%;border-right:1px solid var(--line);z-index:3;background:#fff}.time-axis span{position:absolute;right:8px;font-size:11px;color:#596979}.day-grid{position:absolute;left:62px;right:0;top:0;height:100%;display:grid;grid-template-columns:repeat(7,1fr)}.day-col{position:relative;border-right:1px solid var(--line);background:#fff}.day-col.today{background:#f1f9ff}.day-col i{position:absolute;left:0;right:0;border-top:1px solid #edf1f4}.cal-event{position:absolute;left:calc(62px + (100% - 62px)/7 * var(--day) + 4px);width:calc((100% - 62px)/7 - 8px);border-radius:5px;border:0;color:#fff;text-align:left;padding:5px 7px;overflow:hidden;z-index:6;box-shadow:0 1px 2px rgba(0,0,0,.12)}.cal-event b,.cal-event strong,.cal-event span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cal-event b{font-size:10px}.cal-event strong{font-size:12px;margin-top:2px}.cal-event span{font-size:10px;margin-top:4px;opacity:.9}.cal-event.lesson{background:#09883c}.cal-event.test{background:#f58a17}.cal-event.cancelled{background:#555;text-decoration:line-through}.cal-event.block{background:#60758a}.now-line{position:absolute;left:calc(62px + (100% - 62px)/7 * var(--day));width:calc((100% - 62px)/7);height:2px;background:#f23b45;z-index:8}.now-line:before{content:"";position:absolute;left:-2px;top:-3px;width:8px;height:8px;background:#f23b45;border-radius:50%}.search{min-width:230px;border:1px solid #cbd7e1;border-radius:8px;padding:9px 10px}.pupil-row{display:grid;grid-template-columns:52px 1.4fr .7fr .7fr auto 25px;gap:12px;align-items:center;width:100%;border:0;background:#fff;text-align:left;padding:13px 5px;border-bottom:1px solid #edf2f6;color:var(--text)}.pupil-row:hover{background:#f8fbfd}.avatar{width:42px;height:42px;border-radius:11px;background:#eaf2f8;color:var(--navy);font-weight:900;display:grid;place-items:center}.avatar.large{width:64px;height:64px;font-size:20px;background:#fff1df;color:#bb6208}.pupil-main strong,.pupil-main small,.pupil-row>span>small,.pupil-row>span>b{display:block}.pupil-main small,.pupil-row>span>small{font-size:11px;color:var(--muted);margin-top:2px}.progress{height:6px;background:#edf2f5;border-radius:99px;overflow:hidden;display:block;margin-top:7px;max-width:210px}.progress.wide{width:140px;margin:0}.progress i{height:100%;display:block;background:var(--aqua)}.negative{color:var(--danger)!important}.positive{color:var(--good)!important}.chev{font-size:24px;color:#9aa7b4}.profile-card{padding:18px 20px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;margin-bottom:14px}.profile-card h2{margin:0 0 4px}.profile-card p{margin:0;color:var(--muted);font-size:13px}.mini-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:18px}.mini-grid>div{background:#fff;border:1px solid var(--line);border-radius:9px;padding:14px}.mini-grid span,.mini-grid b{display:block}.mini-grid span{font-size:11px;color:var(--muted)}.mini-grid b{font-size:20px;margin-top:4px}.skill-group h3{font-size:11px;text-transform:uppercase;letter-spacing:.9px;color:#788798;margin:18px 0 6px}.skill{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:9px 0;border-bottom:1px solid #edf2f6}.skill span strong,.skill span small{display:block}.skill span small{font-size:11px;color:var(--muted)}.score{display:flex;gap:4px}.score button{width:28px;height:28px;border:1px solid #c8d6e1;background:#fff;color:#768699;border-radius:6px}.score button.on{background:var(--orange);border-color:var(--orange);color:#202833;font-weight:800}.timeline-item{border-left:2px solid #d9e4ec;padding:0 0 20px 18px;position:relative}.timeline-item:before{content:"";position:absolute;left:-6px;top:2px;width:10px;height:10px;border-radius:50%;background:var(--orange)}.timeline-item h4{font-size:13px;margin-bottom:5px}.timeline-item p{font-size:13px;line-height:1.5;color:#526275}.money-row{display:flex;justify-content:space-between;gap:15px;align-items:center;padding:11px 0;border-bottom:1px solid #edf2f6}.money-row span strong,.money-row span small{display:block}.money-row small{font-size:11px;color:var(--muted);margin-top:2px}.report-note p{color:var(--muted);margin-bottom:0}.field{display:grid;gap:6px;margin:12px 0}.field label{font-size:11px;color:#627284;font-weight:700}.field input,.field textarea,.field select{width:100%;border:1px solid #cbd7e1;border-radius:8px;padding:10px 11px;background:#fff;color:var(--text);outline:none}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(17,167,238,.1)}.columns{display:grid;grid-template-columns:1fr 1fr;gap:12px}.modal-backdrop{position:fixed;inset:0;background:rgba(6,27,45,.5);display:grid;place-items:center;padding:20px;z-index:80}.modal{background:#fff;border-radius:14px;width:min(720px,100%);max-height:92vh;overflow:auto;padding:26px;position:relative;box-shadow:0 20px 60px rgba(0,0,0,.24)}.close{position:absolute;right:14px;top:9px;border:0;background:transparent;font-size:28px;color:#506173}.toast{position:fixed;right:20px;bottom:20px;background:#17293c;color:#fff;padding:12px 16px;border-radius:9px;font-weight:750;z-index:100}.login-page{min-height:100vh;display:grid;grid-template-columns:1.15fr .85fr}.login-art{background:linear-gradient(145deg,var(--navy),#0b416f);color:#fff;padding:50px;display:flex;flex-direction:column;justify-content:space-between}.login-art h1{font-size:clamp(48px,6vw,78px);letter-spacing:-3px;line-height:.98;margin:20px 0}.login-art p{font-size:18px;max-width:540px;color:#d7e6f3}.login-panel{display:grid;place-items:center;padding:30px}.login-card{width:min(430px,100%);background:#fff;border:1px solid var(--line);border-radius:16px;padding:30px;box-shadow:var(--shadow)}.login-card h2{font-size:28px;margin:5px 0 18px}.demo-box{margin-top:18px;padding:12px;background:#f3f6f9;border-radius:9px;font-size:12px;color:#647487}.error-text{color:var(--danger);font-size:12px;margin-top:8px}.pupil-home{max-width:1250px;margin:0 auto;padding:24px 18px 60px}.pupil-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.pupil-welcome{background:linear-gradient(135deg,var(--navy),#0b4a7c);color:#fff;padding:28px;border-radius:12px;margin-bottom:18px}.pupil-welcome h1{font-size:40px;margin:6px 0}.pupil-welcome p{margin-bottom:0;color:#d9e7f2}.mobile-nav{display:none}.fab{display:none}
@media(max-width:1000px){.top-nav{display:none}.header-user span{display:none}.main{padding:18px 12px 88px}.kpi-grid{grid-template-columns:1fr 1fr}.dashboard-grid{grid-template-columns:1fr}.metric-grid{grid-template-columns:1fr 1fr}.mobile-nav{display:grid;grid-template-columns:repeat(4,1fr);position:fixed;bottom:0;left:0;right:0;height:66px;background:var(--navy);z-index:50}.mobile-nav button{border:0;background:transparent;color:#dce8f4;font-size:11px}.fab{display:block;position:fixed;right:18px;bottom:82px;width:52px;height:52px;border-radius:50%;padding:0;z-index:45}.profile-card{grid-template-columns:auto 1fr}.profile-card>.actions{grid-column:1/-1}.mini-grid{grid-template-columns:1fr 1fr}.pupil-row{grid-template-columns:46px 1fr 90px 24px}.pupil-row .hide-mobile,.pupil-row>.badge{display:none}.page-head{align-items:center}.page-head .actions{display:none}}
@media(max-width:680px){.app-header{height:60px;padding:0 12px}.brand{min-width:0}.brand>div:last-child{display:none}.kpi-grid,.kpi-grid.three{grid-template-columns:1fr 1fr;gap:10px}.kpi{padding:13px;min-height:88px}.kpi-icon{width:38px;height:38px;font-size:18px}.kpi b{font-size:21px}.metric-grid{grid-template-columns:1fr}.lesson-row{grid-template-columns:70px 1fr auto}.lesson-row>.actions{grid-column:2/-1}.lesson-row>.badge{display:none}.columns{grid-template-columns:1fr}.mini-grid{grid-template-columns:1fr 1fr}.search{min-width:0;width:100%}.panel-title{align-items:flex-start;flex-direction:column}.calendar-toolbar{align-items:flex-start;gap:10px;flex-direction:column}.calendar-left{flex-wrap:wrap}.profile-card{padding:14px}.score button{width:25px;height:25px}.pupil-welcome h1{font-size:32px}.login-page{grid-template-columns:1fr}.login-art{display:none}.login-panel{min-height:100vh}}

/* v0.5 pupil record form */
.pupil-form-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding-right:38px;margin-bottom:14px}.pupil-form-head h2{margin:3px 0 0}.show-all,.check-row{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:700;color:#526275}.show-all input,.check-row input,.check-grid input{width:18px;height:18px;accent-color:var(--blue)}.pupil-form{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form-section{border:1px solid #dfe8ef;border-radius:10px;padding:14px 16px;background:#fbfcfd}.form-section h3{font-size:12px;text-transform:uppercase;letter-spacing:.8px;color:#728294;margin:0 0 8px}.form-actions{grid-column:1/-1;display:flex;justify-content:flex-end;padding-top:4px}.optional-fields{display:none}.show-all-pupil-fields .optional-fields{display:block}.rate-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.check-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}.check-grid label{font-size:13px;color:#526275;display:flex;align-items:center;gap:8px}.check-row{margin:10px 0}.check-row.disabled{opacity:.55}.check-row small{font-weight:500;color:var(--muted);margin-left:4px}.modal:has(.pupil-form){width:min(980px,100%)}
@media(max-width:760px){.pupil-form{grid-template-columns:1fr}.rate-grid,.check-grid{grid-template-columns:1fr}.pupil-form-head{align-items:flex-start;flex-direction:column;padding-right:30px}.form-actions{grid-column:1}}

/* v0.6 settings + pupil onboarding */
.settings-layout{display:grid;grid-template-columns:230px minmax(0,1fr);gap:18px;align-items:start}.settings-menu{background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden;position:sticky;top:82px}.settings-menu button{width:100%;border:0;border-bottom:1px solid #edf2f6;background:#fff;text-align:left;padding:13px 15px;color:#4b5b6a;font-weight:750}.settings-menu button:last-child{border-bottom:0}.settings-menu button.active{background:#eef8ff;color:var(--navy);box-shadow:inset 4px 0 0 var(--blue)}.settings-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px}.onboarding-row{width:100%;display:grid;grid-template-columns:44px minmax(160px,1fr) auto;gap:12px;align-items:center;border:0;border-bottom:1px solid #edf2f6;background:#fff;padding:12px 2px;text-align:left;color:var(--text)}.onboarding-row:hover{background:#f8fbfd}.onboarding-row strong,.onboarding-row small{display:block}.onboarding-row small{color:var(--muted);font-size:11px;margin-top:3px}.status-stack{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.terms-warning{display:flex;flex-direction:column;gap:3px;background:#fff7e7;border:1px solid #f2d69d;color:#76520c;border-radius:8px;padding:12px 14px;margin-bottom:14px}.terms-warning span{font-size:12px}.setting-placeholder p{color:var(--muted);max-width:680px}.settings-placeholder-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:18px}.settings-placeholder-grid>div{padding:14px;background:#f6f9fb;border:1px solid #e4ebf0;border-radius:8px;color:#617181}.onboarding-page{max-width:980px;margin:0 auto;padding:24px 18px 70px}.onboarding-hero{background:linear-gradient(135deg,var(--navy),#0b4a7c);color:#fff;border-radius:14px;padding:30px;margin:18px 0}.onboarding-hero h1{font-size:42px;margin:7px 0}.onboarding-hero p{color:#dbe8f3;max-width:650px}.onboarding-steps{display:flex;gap:8px;flex-wrap:wrap;margin-top:22px}.onboarding-steps span{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);padding:7px 10px;border-radius:99px;font-size:12px;font-weight:800;color:#dbe8f3}.onboarding-steps span.current{background:#fff;color:var(--navy)}.onboarding-steps span.done{background:#44bd72;color:#fff;border-color:#44bd72}.onboarding-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:24px;box-shadow:var(--shadow)}.onboarding-card h2{font-size:26px;margin:6px 0}.terms-document{border:1px solid #dfe7ed;background:#fbfcfd;border-radius:9px;padding:18px;line-height:1.65;max-height:430px;overflow:auto;margin:18px 0;color:#3e4c59}.terms-accept{display:flex;align-items:flex-start;gap:10px;padding:14px;background:#f5f8fa;border-radius:8px;margin-bottom:14px;font-weight:750}.terms-accept input{width:20px;height:20px;accent-color:var(--blue);flex:0 0 auto}.primary:disabled{opacity:.45;cursor:not-allowed}.onboarding-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}.onboarding-form-grid .span2{grid-column:1/-1}.onboarding-card .full{margin-top:12px}
@media(max-width:850px){.settings-layout{grid-template-columns:1fr}.settings-menu{position:static;display:flex;overflow:auto}.settings-menu button{min-width:max-content;border-bottom:0;border-right:1px solid #edf2f6}.settings-menu button.active{box-shadow:inset 0 -4px 0 var(--blue)}.settings-kpis{grid-template-columns:1fr}.onboarding-row{grid-template-columns:44px 1fr}.status-stack{grid-column:2;justify-content:flex-start}.onboarding-form-grid{grid-template-columns:1fr}.onboarding-form-grid .span2{grid-column:auto}.settings-placeholder-grid{grid-template-columns:1fr}}

/* v0.7 in-app messaging */
.nav-with-badge{display:flex;align-items:center;gap:7px}.nav-badge,.mobile-badge,.unread-pill{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--danger);color:#fff;font-size:10px;font-weight:900}.mobile-badge{margin-left:4px;min-width:18px;height:18px}.badge.info{background:#eaf6ff;color:#1479ad}.messages-shell{display:grid;grid-template-columns:340px minmax(0,1fr);min-height:660px;background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}.message-inbox{border-right:1px solid var(--line);min-width:0;background:#fbfcfd}.message-inbox-head{padding:18px;border-bottom:1px solid var(--line)}.message-inbox-head h2{margin:0;font-size:18px}.message-inbox-head p{margin:3px 0 0;font-size:12px;color:var(--muted)}.message-thread-list{max-height:720px;overflow:auto}.message-thread{width:100%;display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:10px;align-items:center;padding:12px;border:0;border-bottom:1px solid #edf2f6;background:transparent;text-align:left;color:var(--text)}.message-thread:hover,.message-thread.active{background:#eef8ff}.thread-copy,.thread-copy strong,.thread-copy small,.thread-side,.thread-side small{display:block;min-width:0}.thread-copy small{color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:3px}.thread-side{text-align:right}.thread-side small{font-size:10px;color:var(--muted);margin-top:6px}.message-conversation{display:flex;flex-direction:column;min-width:0;background:#f7f9fb}.conversation-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:13px 16px;background:#fff;border-bottom:1px solid var(--line)}.conversation-head>div{display:flex;align-items:center;gap:10px}.conversation-head span strong,.conversation-head span small{display:block}.conversation-head span small{font-size:11px;color:var(--muted);margin-top:2px}.message-list{flex:1;min-height:480px;max-height:620px;overflow:auto;padding:20px;display:flex;flex-direction:column;gap:12px}.message-wrap{display:flex;justify-content:flex-start}.message-wrap.mine{justify-content:flex-end}.message-wrap.system{justify-content:center}.message-bubble{max-width:min(620px,80%);background:#fff;border:1px solid #dce5ec;border-radius:14px 14px 14px 4px;padding:10px 12px;box-shadow:0 2px 6px rgba(10,44,75,.04)}.message-wrap.mine .message-bubble{background:#eaf7ff;border-color:#c8eaff;border-radius:14px 14px 4px 14px}.message-wrap.system .message-bubble{max-width:88%;background:#fff8e8;border-color:#f2dca8;border-radius:10px}.message-meta{display:flex;justify-content:space-between;gap:18px;align-items:center;margin-bottom:5px}.message-meta strong{font-size:11px}.message-meta span{font-size:10px;color:var(--muted)}.message-bubble p{margin:0;font-size:13px;line-height:1.5;color:#3f4e5d;word-break:break-word}.message-bubble .badge{margin-top:8px}.message-compose{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end;padding:14px 16px;background:#fff;border-top:1px solid var(--line)}.message-compose textarea{resize:none;width:100%;border:1px solid #cbd7e1;border-radius:9px;padding:11px 12px;outline:none;min-height:46px}.message-compose textarea:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(17,167,238,.1)}.message-empty{margin:auto;text-align:center;color:var(--muted);display:grid;gap:4px}.message-empty strong{color:var(--text)}.pupil-header-actions{display:flex;gap:8px;align-items:center}.message-button{display:flex;align-items:center;gap:7px}.pupil-message-page{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:var(--shadow)}.pupil-message-page>.panel-title{padding:22px 22px 10px;margin:0}.pupil-message-page h1{margin:4px 0 2px;font-size:28px}.pupil-message-page p{margin:0;color:var(--muted)}.pupil-thread{min-height:460px;max-height:620px;background:#f7f9fb}.pupil-compose{border-radius:0}
@media(max-width:1000px){.mobile-nav{grid-template-columns:repeat(5,1fr)}.messages-shell{grid-template-columns:290px minmax(0,1fr)}}
@media(max-width:760px){.messages-shell{grid-template-columns:1fr;min-height:0}.message-inbox{border-right:0;border-bottom:1px solid var(--line)}.message-thread-list{max-height:280px}.message-list{min-height:400px;max-height:none}.message-bubble{max-width:90%}.conversation-head{align-items:flex-start}.message-compose{grid-template-columns:1fr}.message-compose .primary{width:100%}.pupil-header{align-items:flex-start;gap:12px}.pupil-header-actions{flex-wrap:wrap;justify-content:flex-end}.pupil-message-page h1{font-size:24px}}

/* v0.8 cancellations + credit ledger */
.metric-action{margin-top:14px}.charge-choice{display:grid;gap:9px;margin-top:8px}.charge-choice label{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:9px;padding:12px;background:#fbfcfd}.charge-choice label:has(input:checked){border-color:#9ed7f4;background:#eef9ff}.charge-choice input{margin-top:3px;width:18px;height:18px;accent-color:var(--blue)}.charge-choice strong,.charge-choice small{display:block}.charge-choice small{font-size:11px;color:var(--muted);margin-top:3px}.cancellation-row{width:100%;display:grid;grid-template-columns:44px minmax(0,1fr) auto 80px;gap:12px;align-items:center;border:0;border-bottom:1px solid #edf2f6;background:#fff;padding:12px 2px;text-align:left;color:var(--text)}.cancellation-row:hover{background:#f8fbfd}.cancellation-row strong,.cancellation-row small{display:block}.cancellation-row small{font-size:11px;color:var(--muted);margin-top:3px}.cancellation-row>b{text-align:right}.pupil-cancellations{grid-column:1/-1}.credit-ledger-row{display:grid;grid-template-columns:1fr auto;gap:12px;padding:10px 0;border-bottom:1px solid #edf2f6}.credit-ledger-row:last-child{border-bottom:0}.credit-ledger-row small{display:block;color:var(--muted);margin-top:2px}.credit-change{font-weight:900}.credit-change.plus{color:var(--good)}.credit-change.minus{color:var(--danger)}
@media(max-width:760px){.cancellation-row{grid-template-columns:42px 1fr auto}.cancellation-row>b{grid-column:2;text-align:left}.top-nav .nav[data-view="cancellations"]{display:none}}

/* v0.9 payment credit preview */
.payment-credit-preview{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:14px 0}.payment-credit-preview>div{border:1px solid var(--line);border-radius:9px;background:#f8fafc;padding:12px}.payment-credit-preview span,.payment-credit-preview strong{display:block}.payment-credit-preview span{font-size:11px;color:var(--muted);margin-bottom:4px}.payment-credit-preview strong{font-size:18px}.payment-credit-preview .highlight{background:#eef9ff;border-color:#a8daf3}.payment-credit-preview .highlight strong{color:var(--navy);font-size:22px}.payment-credit-note{font-size:11px;color:var(--muted);margin:-2px 0 14px;padding-left:2px}@media(max-width:620px){.payment-credit-preview{grid-template-columns:1fr}}

.account-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0 0 14px}.account-summary>div{padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--card-soft,#f8fafc);display:flex;flex-direction:column;gap:4px}.account-summary span{font-size:.78rem;color:var(--muted)}.account-summary strong{font-size:1.05rem}@media(max-width:700px){.account-summary{grid-template-columns:1fr}.panel-title .actions{width:100%}}


/* v0.13 email + waiting list */
.section-rule{border:0;border-top:1px solid var(--line);margin:22px 0}.compact-title{margin-bottom:8px}.three-actions{flex-wrap:wrap}.waiting-row{width:100%;display:grid;grid-template-columns:44px minmax(0,1fr) 150px auto;gap:12px;align-items:center;border:0;border-bottom:1px solid #edf2f6;background:#fff;padding:13px 4px;text-align:left;color:var(--text)}.waiting-row:hover{background:#f8fbfd}.waiting-row strong,.waiting-row small,.waiting-row b{display:block}.waiting-row small{font-size:11px;color:var(--muted);margin-top:3px}.priority{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-weight:950;background:#eef3f7;color:#607084}.priority-1{background:#fff0f2;color:#c92539}.priority-2{background:#fff5d9;color:#ae7a00}.priority-3{background:#eaf6ff;color:#1479ad}.priority-4,.priority-5{background:#eef3f7;color:#607084}.secondary:disabled{opacity:.45;cursor:not-allowed}
@media(max-width:900px){.top-nav .nav[data-view="waiting"]{display:none}.waiting-row{grid-template-columns:42px minmax(0,1fr) auto}.waiting-row>span:nth-child(3){grid-column:2}.three-actions>*{flex:1 1 160px}}


/* v0.18 Enquiry Manager */
.enquiry-settings-panel{padding:0;overflow:hidden}
.enquiry-settings-tabs{display:flex;background:#082b4d;border-bottom:1px solid rgba(255,255,255,.12)}
.enquiry-settings-tabs button{appearance:none;border:0;background:transparent;color:#fff;padding:18px 24px;font:inherit;font-weight:700;cursor:pointer;border-bottom:4px solid transparent}
.enquiry-settings-tabs button.active{border-bottom-color:#20b6ff;background:rgba(255,255,255,.035)}
.enquiry-settings-content{padding:24px}
.enquiry-settings-content h2{margin:0 0 8px}
.choice-card{display:flex;gap:12px;padding:18px;border:1px solid var(--line,#dce4eb);border-radius:14px;cursor:pointer;background:#fff}
.choice-card.selected{border-color:#1da9ed;box-shadow:0 0 0 2px rgba(29,169,237,.12)}
.choice-card input{margin-top:3px}
.choice-card span{display:flex;flex-direction:column;gap:4px}.choice-card small{color:#677786;line-height:1.4}
.enquiry-field-group{padding:8px 0 24px}
.enquiry-field-group h3{font-size:18px;margin:0 0 16px;color:#34414d}
.enquiry-check-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 44px}
.enquiry-check{display:flex;gap:10px;align-items:flex-start;font-size:16px;color:#394957}
.enquiry-check input{width:19px;height:19px;accent-color:#148df2;margin-top:1px}
.info-strip{margin:16px 0;padding:13px 15px;border-radius:10px;background:#eef7fd;color:#31566d;font-size:13px}
.installation-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.install-card{display:grid;gap:9px;padding:16px;border:1px solid var(--line,#dce4eb);border-radius:12px;background:#f9fbfc}
.install-card code{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:#eef2f5;border-radius:7px;padding:8px;font-size:12px}
.public-enquiry-page .onboarding-card{max-width:900px}
.public-form-step{padding:4px 0 22px;margin-bottom:18px;border-bottom:1px solid #e6edf2}
.public-form-step:last-of-type{border-bottom:0}
.public-form-step h2{font-size:20px;margin:0 0 16px;color:#18394f}
.public-form-step h2 span{font-weight:500;color:#536776}
.enquiry-sms-toggle{align-self:end;padding-bottom:10px}
@media(max-width:760px){
  .enquiry-check-grid,.installation-grid{grid-template-columns:1fr}
  .enquiry-settings-tabs button{padding:15px 14px;font-size:14px}
  .enquiry-settings-content{padding:16px}
}


/* v0.19 Lesson debrief + progress */
.lesson-debrief-meta{display:flex;gap:8px;flex-wrap:wrap;margin:-4px 0 18px}
.lesson-debrief-meta span{background:#eef4f7;border:1px solid #d9e4ea;border-radius:999px;padding:6px 10px;font-size:12px;color:#49606f}
.debrief-progress-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin:22px 0 10px}
.debrief-progress-head h3{margin:0 0 4px;font-size:18px}.debrief-progress-head p{margin:0;color:#6b7d89;font-size:13px}
.debrief-skill-groups{display:grid;gap:12px;max-height:46vh;overflow:auto;padding-right:4px}
.debrief-skill-group{border:1px solid #dfe8ed;border-radius:12px;padding:12px;background:#fbfcfd}
.debrief-skill-group h4{margin:0 0 10px;color:#29465a;font-size:13px;text-transform:uppercase;letter-spacing:.04em}
.debrief-skill{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:9px 0;border-top:1px solid #edf1f4}
.debrief-skill:first-of-type{border-top:0}.debrief-skill span{display:flex;flex-direction:column;gap:2px;min-width:0}.debrief-skill small{color:#7b8c98}
.debrief-score{display:flex;gap:4px;flex-shrink:0}.debrief-score button{min-width:31px;height:31px;border-radius:8px}
.debrief-score button.zero{background:#667784;color:white;border-color:#667784}
.debrief-summary{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;margin:16px 0;padding:12px;border-radius:10px;background:#f0f8f3;color:#3f5d4b;font-size:13px}
@media(max-width:640px){
  .debrief-skill{align-items:flex-start;flex-direction:column}
  .debrief-score{width:100%;justify-content:space-between}
  .debrief-score button{flex:1}
}


/* v0.20 Diary improvements */
.calendar-right{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.view-switch{display:flex;border:1px solid #d9e3e9;border-radius:10px;overflow:hidden;background:#fff}
.view-switch button{border:0;background:transparent;padding:8px 12px;font:inherit;font-size:13px;cursor:pointer;color:#536775}
.view-switch button.active{background:#0c90d4;color:#fff}
.agenda-list{display:grid;gap:12px;padding:14px}
.agenda-day{border:1px solid #dce5ea;border-radius:14px;overflow:hidden;background:#fff}
.agenda-day.today{border-color:#2aafea;box-shadow:0 0 0 2px rgba(42,175,234,.08)}
.agenda-day-head{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:12px 14px;background:#f6f9fb;border-bottom:1px solid #e5edf1}
.agenda-day-head>div{display:flex;align-items:center;gap:8px}.agenda-day-head span{font-size:11px;font-weight:800;color:#6b7f8c;letter-spacing:.08em}.agenda-day-head strong{font-size:22px;color:#183d55}.agenda-day-head>b{font-size:13px;color:#506876}
.agenda-item{width:100%;display:grid;grid-template-columns:72px 1fr 20px;align-items:center;gap:12px;text-align:left;border:0;border-top:1px solid #edf2f5;background:#fff;padding:13px 14px;cursor:pointer}
.agenda-item:hover{background:#f8fbfc}.agenda-item.lesson{border-left:4px solid #20a9e0}.agenda-item.test{border-left:4px solid #8f63d7}.agenda-item.block{border-left:4px solid #d49a35}.agenda-item.cancelled{opacity:.55;text-decoration:line-through}
.agenda-time{display:flex;flex-direction:column}.agenda-time strong{font-size:15px}.agenda-time small{color:#82919a}.agenda-main{display:flex;flex-direction:column;min-width:0}.agenda-main strong,.agenda-main small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agenda-main small{color:#71838e}.agenda-chevron{font-size:22px;color:#94a2ab}
.agenda-empty{width:100%;padding:18px;border:0;border-top:1px solid #edf2f5;background:#fff;color:#80909a;text-align:center;cursor:pointer}
.quick-diary-actions{display:flex;gap:8px;margin:8px 0 16px}.conflict-list{display:grid;gap:8px;margin:16px 0}.conflict-row{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:center;padding:10px 12px;border:1px solid #e3e9ed;border-radius:10px;background:#fbfcfd}.conflict-row span:last-child{display:flex;flex-direction:column;gap:2px}.conflict-row small{color:#7b8d98}.field-help{display:block;margin-top:6px;color:#7c8c96;font-size:12px}
@media(max-width:760px){
  .calendar-toolbar{align-items:flex-start}.calendar-left{gap:6px}.calendar-left strong{width:100%;font-size:13px}.calendar-right{width:100%;justify-content:space-between}
  .view-switch{flex:1}.view-switch button{flex:1}.agenda-list{padding:8px}.agenda-item{grid-template-columns:62px 1fr 16px;padding:12px 10px}
}


/* v0.21 Drag-to-reschedule */
.cal-event.draggable{cursor:grab;touch-action:auto}
.cal-event.draggable:active{cursor:grabbing}
.drag-grip{position:absolute;right:5px;top:4px;font-style:normal;font-size:12px;letter-spacing:-3px;opacity:.45;pointer-events:none}
.cal-event.drag-origin{opacity:.25;outline:2px dashed currentColor}
.diary-drag-ghost{position:fixed;z-index:99999;pointer-events:none;margin:0!important;transform:none!important;box-shadow:0 14px 35px rgba(0,0,0,.24);opacity:.94;overflow:hidden}
.diary-drag-ghost .drag-grip{display:none}
.day-col.drag-target{background:rgba(31,174,230,.11)!important;box-shadow:inset 0 0 0 2px rgba(31,174,230,.48)}
body.diary-dragging{user-select:none}
body.diary-dragging .calendar-scroll{overscroll-behavior:none}
@media(pointer:coarse){
  .cal-event.draggable{cursor:default}
  .drag-grip{font-size:14px;opacity:.7}
}


/* v0.23 Student availability */
.profile-main{min-width:0;flex:1}
.profile-main small{display:block;margin-top:5px;color:#71838f}
.availability-strip{display:grid;grid-template-columns:repeat(7,1fr);gap:7px;margin:12px 0 18px}
.availability-strip>div{padding:9px 6px;text-align:center;border-radius:10px;border:1px solid #e1e8ec;background:#f6f8f9;display:flex;flex-direction:column;gap:3px}
.availability-strip .available{background:#eef9f3;border-color:#ccebd9}
.availability-strip b{font-size:12px}
.availability-strip span{font-size:11px;color:#71838d}
.availability-editor{display:grid;gap:8px;margin:16px 0}
.availability-edit-row{display:grid;grid-template-columns:1fr 110px auto 110px;gap:8px;align-items:center;padding:10px 12px;border:1px solid #e1e8ec;border-radius:10px}
.availability-day{display:flex;align-items:center;gap:8px}
.availability-day input{width:18px;height:18px;accent-color:#169fda}
.pupil-welcome-with-action{display:flex;align-items:center;gap:16px}
.pupil-welcome-with-action>div{flex:1}
@media(max-width:720px){
  .availability-strip{grid-template-columns:repeat(4,1fr)}
  .availability-edit-row{grid-template-columns:1fr 1fr 1fr}
  .availability-edit-row .availability-day{grid-column:1/-1}
  .availability-edit-row span{text-align:center}
  .pupil-welcome-with-action{align-items:flex-start;flex-wrap:wrap}
}


/* v0.23.1 fixed availability slots */
.availability-editor{overflow-x:auto}
.availability-slot-head,.availability-slot-row{
  display:grid;
  grid-template-columns:minmax(105px,1.25fr) repeat(6,minmax(72px,1fr));
  gap:7px;
  align-items:center;
  min-width:650px;
}
.availability-slot-head{padding:0 10px 6px;color:#71838f;font-size:11px;font-weight:700;text-align:center}
.availability-slot-head span:first-child{text-align:left}
.availability-slot-row{padding:9px 10px;border:1px solid #e1e8ec;border-radius:11px;background:#fff;margin-bottom:8px}
.slot-check{position:relative;display:flex;align-items:center;justify-content:center;cursor:pointer}
.slot-check input{position:absolute;opacity:0;pointer-events:none}
.slot-check span{display:flex;align-items:center;justify-content:center;width:100%;min-height:38px;padding:7px 5px;border:1px solid #d8e2e8;border-radius:9px;background:#f7f9fa;color:#526773;font-size:12px;font-weight:700;transition:.12s ease}
.slot-check.selected span{background:#e7f7ef;border-color:#79c99b;color:#235f3d;box-shadow:inset 0 0 0 1px rgba(68,171,111,.18)}
.slot-check.selected span:before{content:'✓';margin-right:5px}
.availability-strip>div span{line-height:1.35}
@media(max-width:720px){
  .availability-editor{margin-left:-4px;margin-right:-4px;padding-bottom:4px}
  .availability-slot-row,.availability-slot-head{min-width:620px}
}


/* v0.24 Book from availability */
.availability-strip.bookable .available{padding-bottom:8px}
.slot-link-list{display:flex!important;flex-wrap:wrap;gap:4px;justify-content:center}
.slot-link-list button{border:1px solid #8ecdae;background:#fff;color:#235f3d;border-radius:7px;padding:4px 6px;font:inherit;font-size:10px;font-weight:700;cursor:pointer}
.slot-link-list button:hover{background:#e5f7ee}
.availability-options{display:grid;gap:8px;margin:16px 0}
.availability-option{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #dde6eb;border-radius:11px;background:#fff;text-align:left}
.availability-option.free{cursor:pointer}
.availability-option.free:hover{border-color:#75c99a;background:#f2fbf6}
.availability-option.busy{opacity:.55;cursor:not-allowed}
.availability-option>span:first-child{display:flex;flex-direction:column;gap:2px}
.availability-option small{color:#738590}
.availability-quick-grid{display:grid;gap:10px;margin:16px 0}
.availability-quick-grid section{padding:12px;border:1px solid #e0e7eb;border-radius:11px}
.availability-quick-grid section>div{display:flex;flex-wrap:wrap;gap:7px;margin-top:8px}


/* v0.24.1 touch calendar scroll fix */
.calendar-scroll{
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  touch-action:pan-x pan-y;
}
.week-body,.day-grid,.day-col{
  touch-action:pan-x pan-y;
}
@media(pointer:coarse){
  .cal-event.draggable{
    touch-action:pan-x pan-y;
  }
  .drag-grip{
    pointer-events:auto;
    touch-action:none;
    width:28px;
    height:28px;
    display:flex;
    align-items:center;
    justify-content:center;
    right:2px;
    top:2px;
    border-radius:7px;
    background:rgba(255,255,255,.72);
    opacity:.9;
    letter-spacing:-3px;
    z-index:4;
  }
}


/* v0.24.2 genuine vertical + horizontal Week diary scrolling */
.calendar-panel{
  min-height:0;
}
.calendar-scroll{
  height:calc(100dvh - 245px);
  min-height:420px;
  max-height:760px;
  overflow:auto!important;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  touch-action:pan-x pan-y;
  position:relative;
}
.calendar-scroll .week-head{
  position:sticky;
  top:0;
  z-index:20;
}
.calendar-scroll .time-axis{
  position:absolute;
}
.week-body,.day-grid,.day-col{
  touch-action:pan-x pan-y;
}
@media(max-width:760px){
  .calendar-scroll{
    height:calc(100dvh - 215px);
    min-height:360px;
    max-height:none;
    overflow:auto!important;
    overscroll-behavior:auto;
  }
}


/* v0.25 Mobile Day Diary */
.mobile-day-panel{overflow:visible}
.mobile-date-strip{
  display:grid;
  grid-template-columns:repeat(7,minmax(48px,1fr));
  gap:6px;
  padding:10px 10px 4px;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
}
.mobile-date-pill{
  border:1px solid #dce5ea;
  background:#fff;
  border-radius:12px;
  padding:8px 4px;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:2px;
  color:#536876;
  font:inherit;
}
.mobile-date-pill span{font-size:10px;font-weight:800;letter-spacing:.05em}
.mobile-date-pill strong{font-size:18px}
.mobile-date-pill.today{border-color:#7fc9e8}
.mobile-date-pill.active{background:#0c90d4;color:#fff;border-color:#0c90d4;box-shadow:0 4px 12px rgba(12,144,212,.18)}
.mobile-day-heading{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:14px 12px 10px;
}
.mobile-day-heading span{font-size:10px;font-weight:800;letter-spacing:.08em;color:#728590}
.mobile-day-heading h2{margin:2px 0 0;font-size:20px}
.mobile-day-list{
  display:grid;
  gap:8px;
  padding:4px 10px 18px;
  touch-action:pan-y;
}
.mobile-diary-card{
  width:100%;
  display:grid;
  grid-template-columns:64px 1fr 16px;
  gap:10px;
  align-items:center;
  border:1px solid #e0e7eb;
  border-left-width:4px;
  border-radius:13px;
  background:#fff;
  padding:13px 11px;
  text-align:left;
}
.mobile-diary-card.lesson{border-left-color:#20a9e0}
.mobile-diary-card.test{border-left-color:#8f63d7}
.mobile-diary-card.block{border-left-color:#d49a35}
.mobile-diary-card.cancelled{opacity:.55;text-decoration:line-through}
.mobile-diary-time,.mobile-diary-info{display:flex;flex-direction:column;gap:2px;min-width:0}
.mobile-diary-time small,.mobile-diary-info small{color:#768995}
.mobile-diary-info strong,.mobile-diary-info small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mobile-diary-gap{
  width:100%;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  border:1px dashed #b8c8d1;
  border-radius:12px;
  background:#f8fbfc;
  padding:11px 13px;
  color:#516875;
  text-align:left;
}
.mobile-diary-gap>span{display:flex;flex-direction:column;gap:2px}
.mobile-diary-gap small{color:#81919b}
.mobile-diary-gap>b{color:#0c90d4;font-size:12px}
@media(max-width:760px){
  .calendar-panel .calendar-toolbar{padding-bottom:6px}
  .mobile-day-panel .calendar-left strong{display:none}
  .mobile-day-panel .toggle-label{display:none}
  .mobile-day-panel .view-switch{min-width:150px}
  .mobile-day-panel .calendar-scroll{display:none!important}
}


/* v0.26 Smart Day Diary */
.gap-main{display:flex;flex-direction:column;gap:2px;min-width:0}
.gap-match{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:5px;font-size:10px;color:#5e7481}
.gap-match strong{color:#2c6750}
.gap-match button{border:1px solid #b9dcca;background:#fff;color:#2b644d;border-radius:999px;padding:3px 6px;font:inherit;font-size:10px;font-weight:700}
.gap-match.empty{color:#94a1a9}
.mobile-quick-actions{display:flex;gap:6px;margin-top:7px}
.mobile-quick-actions button{width:30px;height:28px;border-radius:8px;border:1px solid #d8e2e7;background:#f8fafb;font:inherit;font-weight:800;color:#536875}
.mobile-quick-actions button:first-child{color:#2d7c4e;border-color:#b9ddc8;background:#f1faf5}
.mobile-quick-actions button:last-child{color:#a44545;border-color:#e3bcbc;background:#fff5f5}


/* v0.27 Profile pictures */
.avatar.photo{overflow:hidden;padding:0;background:#e8eef2}
.avatar.photo img{width:100%;height:100%;object-fit:cover;display:block}
.avatar.tiny{width:28px;height:28px;min-width:28px;font-size:10px}
.profile-photo-wrap,.pupil-own-photo{position:relative;flex:0 0 auto}
.photo-edit-button{position:absolute;right:-4px;bottom:-4px;width:30px;height:30px;border-radius:50%;border:2px solid #fff;background:#0b3558;color:#fff;cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.2);display:flex;align-items:center;justify-content:center;padding:0}
.mobile-diary-person{display:flex;align-items:center;gap:7px;min-width:0}
.mobile-diary-person strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pupil-own-photo .avatar.large{width:64px;height:64px}


/* v0.28 School identity foundation */
.school-code-card{
  margin:16px 0 22px;
  padding:24px;
  border-radius:18px;
  background:linear-gradient(135deg,#082e4e,#0d496d);
  color:#fff;
  text-align:center;
}
.school-code-card>span{
  display:block;
  font-size:11px;
  font-weight:800;
  letter-spacing:.14em;
  opacity:.72;
}
.school-code-card>strong{
  display:block;
  font-size:34px;
  letter-spacing:.09em;
  margin:8px 0 12px;
}
.school-code-card p{
  margin:10px 0 0;
  font-size:13px;
  opacity:.76;
}
.tenant-foundation-card{
  margin-top:24px;
  padding:16px;
  border:1px solid #dfe7eb;
  border-radius:13px;
  background:#f8fafb;
}
.tenant-foundation-card>div{
  display:flex;
  align-items:center;
  gap:10px;
}
.tenant-foundation-card p{
  color:#60727e;
  line-height:1.5;
}
.join-card{max-width:560px}
.school-found{
  display:grid;
  grid-template-columns:auto 1fr auto;
  align-items:center;
  gap:12px;
  margin-top:18px;
  padding:14px;
  border:1px solid #dce5ea;
  border-radius:12px;
}
.school-found>div{
  display:flex;
  flex-direction:column;
  min-width:0;
}
.school-found small{color:#71838f}
.school-colour{
  width:40px;
  height:40px;
  border-radius:11px;
}


/* v0.29 tenant isolation audit */
.tenant-audit-summary{margin-top:14px;padding:12px 14px;border-radius:10px;display:flex;flex-direction:column;gap:3px}
.tenant-audit-summary.good{background:#eef9f3;color:#2d6848}
.tenant-audit-summary.warn{background:#fff7e8;color:#805d1f}
.tenant-audit-summary span{font-size:12px}
.tenant-audit-table{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-top:10px}
.tenant-audit-table>div{display:grid;grid-template-columns:1fr auto;gap:2px 8px;padding:9px 10px;border:1px solid #e0e7eb;border-radius:9px;background:#fff}
.tenant-audit-table small{grid-column:1/-1;color:#7b8d98}
@media(max-width:720px){.tenant-audit-table{grid-template-columns:1fr}}

/* v0.30.1 recovery: restored known-good v0.29 application behaviour */

/* v0.30.2 school schema migration hotfix */


/* v0.30.3 startup failure fallback */
.startup-error{
  max-width:680px;
  margin:60px auto;
  padding:24px;
  font-family:system-ui,-apple-system,sans-serif;
}
.startup-error h1{margin:0 0 10px}
.startup-error p{color:#667783;word-break:break-word}
.startup-error button{border:0;border-radius:10px;background:#0b3558;color:#fff;padding:11px 16px;font-weight:700}

/* v0.30.4 dashboard completeness + performance indexes */


/* v0.31 Pupil Home v2 */
.pupil-home-v2{padding-bottom:88px}
.pupil-welcome-v2{display:flex;align-items:center;gap:14px;padding:18px 16px 8px}
.pupil-welcome-v2 h1{margin:2px 0 4px;font-size:28px}
.pupil-welcome-v2 p{margin:0;color:#71838f}
.pupil-next-card{margin:12px 14px;padding:18px;border-radius:18px;background:linear-gradient(135deg,#0b3558,#0f567d);color:#fff;box-shadow:0 8px 24px rgba(11,53,88,.18)}
.pupil-next-card.empty-state{background:#f8fafb;color:#243746;border:1px solid #dfe7eb;box-shadow:none}
.pupil-next-top{display:flex;justify-content:space-between;gap:12px}
.pupil-next-top h2{margin:4px 0;font-size:24px}
.pupil-next-top small{display:block;margin-top:5px;opacity:.8}
.pupil-next-badge{align-self:flex-start;font-size:10px;font-weight:800;letter-spacing:.08em;padding:5px 8px;border-radius:999px;background:rgba(255,255,255,.16)}
.pupil-next-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}
.pupil-next-card:not(.empty-state) .pupil-next-actions .secondary{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.25);color:#fff}
.pupil-next-actions button:disabled{opacity:.45;cursor:not-allowed}
.pupil-cancel-pending{margin-top:14px;padding:10px 12px;border-radius:11px;background:rgba(255,196,72,.16);border:1px solid rgba(255,210,120,.22);display:flex;flex-direction:column;gap:2px}
.pupil-cancel-pending span{font-size:12px;opacity:.86}
.pupil-home-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:2px 14px 14px}
.pupil-home-tile{border:1px solid #dfe7eb;background:#fff;border-radius:14px;padding:15px;text-align:left;display:flex;flex-direction:column;gap:4px;min-height:112px}
.pupil-home-tile span{font-size:11px;font-weight:800;letter-spacing:.05em;color:#6f808b;text-transform:uppercase}
.pupil-home-tile strong{font-size:22px;color:#183a52}
.pupil-home-tile small{color:#82919a}
.pupil-home-tile.danger strong{color:#a94545}
.pupil-home-v2>.panel{margin:0 14px 12px}
.pupil-feedback-card{border:1px solid #e0e7eb;background:#fff;border-radius:13px;padding:14px;margin-bottom:9px}
.pupil-feedback-card>div:first-child{display:flex;justify-content:space-between;color:#60727e}
.pupil-feedback-card p{margin:10px 0;line-height:1.5}
.next-plan{padding-top:9px;border-top:1px solid #edf1f3;display:flex;flex-direction:column;gap:2px}
.next-plan span{font-size:10px;font-weight:800;letter-spacing:.06em;color:#7c8d97;text-transform:uppercase}
.pupil-bottom-nav{position:fixed;left:0;right:0;bottom:0;z-index:50;background:rgba(255,255,255,.96);backdrop-filter:blur(14px);border-top:1px solid #dfe7eb;display:grid;grid-template-columns:repeat(4,1fr);padding:7px max(8px,env(safe-area-inset-right)) calc(7px + env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left))}
.pupil-bottom-nav button{border:0;background:transparent;padding:9px 3px;font:inherit;font-size:11px;font-weight:700;color:#788994}
.nav-badge{display:inline-flex;align-items:center;justify-content:center;min-width:17px;height:17px;padding:0 4px;border-radius:999px;background:#d94c4c;color:#fff;font-size:9px}
@media(max-width:430px){.pupil-next-actions{display:grid;grid-template-columns:1fr 1fr}}


/* v0.31.4 actionable cancellation alerts */
.alert-card{border:1px solid #dde6eb;border-radius:14px;background:#fff;padding:15px;margin:9px 0}
.alert-card.unread{border-color:#9acfe7;box-shadow:0 0 0 2px rgba(20,145,204,.08)}
.alert-card-head{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center}
.alert-card-head>div{display:flex;flex-direction:column;gap:2px}
.alert-card-head small{color:#7d8e98}
.alert-card>p{margin:12px 0;color:#536875;line-height:1.45}
.cancel-request-detail{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;background:#f7fafb;border-radius:10px;padding:11px}
.cancel-request-detail span{display:flex;flex-direction:column;gap:2px;font-size:12px;color:#5e727f}
.cancel-request-detail b{font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:#82919a}
.cancel-request-detail .wide{grid-column:1/-1}
.cancel-request-detail .late-warning{background:#fff2f2;border:1px solid #efcccc;color:#8c4141;padding:8px;border-radius:8px}
.alert-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.danger-button{border:1px solid #e6b3b8;background:#fff0f1;color:#ba303d;border-radius:9px;padding:9px 12px;font:inherit;font-weight:800}
.resolved-note{margin-top:11px;padding:9px 11px;border-radius:9px;background:#eef8f2;color:#35704e;font-weight:700;font-size:12px}
.alert-highlight{animation:alertPulse 1.2s ease 2}
@keyframes alertPulse{50%{box-shadow:0 0 0 5px rgba(20,145,204,.18)}}
@media(max-width:620px){
  .alert-card-head{grid-template-columns:auto 1fr}
  .alert-card-head>.badge{grid-column:2}
  .cancel-request-detail{grid-template-columns:1fr}
  .cancel-request-detail .wide{grid-column:auto}
  .alert-actions{display:grid;grid-template-columns:1fr}
}


/* v0.32.0 passed pupil portal */
.pupil-passed-home{max-width:920px;margin:0 auto;padding-bottom:40px}
.passed-celebration{margin-top:24px}
.passed-celebration h1{margin:.35rem 0 .7rem}
.passed-review-button{display:inline-block;margin-top:14px;text-decoration:none}
.passed-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:640px){.passed-grid{grid-template-columns:1fr}}


/* v0.39.5 — custom hand-drawn dashboard KPI artwork */
.kpi-icon.illustrated {
  width: 72px;
  height: 72px;
  padding: 4px;
  overflow: hidden;
  display: grid;
  place-items: center;
}

.kpi-icon.illustrated img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}

@media (max-width: 720px) {
  .kpi-icon.illustrated {
    width: 62px;
    height: 62px;
    padding: 3px;
  }
}


/* v0.46.1 dashboard shortcut cards */
.kpi-button{position:relative;width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer;border:1px solid var(--line,#d7e0e8);background:var(--panel,#fff);appearance:none}
.kpi-button:hover{transform:translateY(-1px);box-shadow:0 8px 22px rgba(11,53,88,.08)}
.kpi-button:active{transform:translateY(0)}
.kpi-chevron{margin-left:auto;font-size:30px;line-height:1;color:#9aa8b6;font-weight:400}
@media (max-width:900px){.kpi-button{min-height:118px}.kpi-chevron{font-size:34px}}


/* Discenda Desktop Sandstone Theme v0.47.3 — instructor shell styling only.
   CSS-only refinements intentionally preserve diary grid, route behaviour and application logic. */
:root{--navy:#1F2C46;--navy2:#2B4760;--blue:#2EAEB0;--orange:#2EAEB0;--bg:#F3ECE2;--panel:#FCF8F2;--text:#1F2C46;--muted:#6F7682;--line:#E5D9CA;--aqua:#2EB4B6;--shadow:0 8px 26px rgba(50,40,30,.055);--radius:16px}
body{background:var(--bg);color:var(--text)}
.app-header{background:#FCF8F2;color:#1F2C46;border-bottom:1px solid #E5D9CA;box-shadow:0 2px 12px rgba(70,50,30,.06);height:78px}
.app-header .brand{min-width:190px;flex-direction:column;align-items:flex-start;gap:0}
.discenda-wordmark{max-width:184px;width:100%;height:45px;object-fit:contain;object-position:left center;mix-blend-mode:multiply}
.discenda-desktop-brand-sub{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px!important;letter-spacing:.06em!important;color:#248F91!important;opacity:1!important;margin-left:4px}
.app-header .discenda-desktop-brand{max-width:220px;min-width:0}
.app-header .nav{color:#46546A;border-radius:10px 10px 0 0;padding:0 13px}
.app-header .nav:hover{background:#F3ECE2}
.app-header .nav.active{color:#116F77;background:#F3ECE2}
.app-header .nav.active:after{background:#2EB4B6}
.app-header .text-btn{color:#36536B}
.app-header .icon-btn{background:#F8F3EC}
.main{padding-top:30px}
.page-head h1{font-weight:800;color:#1F2C46}
.eyebrow{color:#288F92}
.panel,.kpi,.metric-card,.profile-card,.calendar-panel,.pupil-message-page{background:var(--panel);border-color:var(--line);border-radius:16px;box-shadow:var(--shadow)}
.kpi-button{background:var(--panel);border-color:var(--line);border-radius:16px}
.kpi-button:hover,.pupil-row:hover,.waiting-row:hover{background:#F8F0E6}
.primary{background:#2EAEB0;color:#FFFFFF;border-color:#2EAEB0}
.primary:hover{background:#218F94}
.secondary,.icon-btn,.search{background:#FFFCF8;border-color:#DCCEBF;color:#1F2C46}
input,textarea,select{accent-color:#2EAEB0}
.kpi-icon.aqua{background:#E1F3EF;color:#218F94}
.kpi-icon.blue{background:#E7F0FA;color:#357AAF}
.kpi-icon.green{background:#E4F4E8;color:#338D54}
.lesson-row,.attention-row,.pupil-row,.waiting-row,.cancellation-row{border-bottom-color:#E9DED1}
.pupil-row,.waiting-row,.cancellation-row{background:#FCF8F2}
.avatar{background:#E0F1EE;color:#167E85;border-radius:50%}
/* Preserve genuine Mon-Sun columns and original duration-based event placement. */
.week-head,.time-axis{background:#FBF6EE}
.time-head,.day-head{border-color:#E5D9CA}
.day-head{background:#EAE0D3;color:#1F2C46}
.day-head.today{background:#D6EDE9;color:#175A65;box-shadow:inset 0 -4px 0 #2EAEB0}
.day-col{background:#FCF8F2;border-color:#E5D9CA}
.day-col.today{background:#F1F9F5}
.day-col i{border-color:#EAE1D5}
.cal-event.lesson{background:#16854A}
.cal-event.test{background:#E88B28}
.meter{background:#E8DED1}
@media(max-width:1100px){.app-header{height:auto;min-height:78px;flex-wrap:wrap;gap:8px}.top-nav{overflow-x:auto;max-width:100%;min-height:48px}.app-header .nav{white-space:nowrap}}
@media(max-width:760px){.discenda-wordmark{max-width:160px}.main{padding:18px 12px 90px}.mobile-nav{background:#FCF8F2;border-top:1px solid #E5D9CA}}


/* v0.47.4 – hand-drawn onboarding summary artwork; isolated to Settings overview */
.settings-kpis .kpi { display:flex; align-items:center; gap:20px; }
.settings-kpis .kpi-icon.onboarding-illustration {
  display:flex; align-items:center; justify-content:center; flex:0 0 76px;
  width:76px; height:76px; padding:0; border:0; border-radius:18px;
  background:transparent; line-height:1; overflow:visible;
}
.settings-kpis .kpi-icon.onboarding-illustration img {
  width:100%; height:100%; display:block; object-fit:contain;
}
.settings-kpis .kpi > div {min-width:0;}

/* v0.48.2 Discenda mark on the login panel and pupil headers */
.login-art{background:linear-gradient(160deg,#1F2C46,#163044)}
.login-lockup{display:flex;align-items:center;gap:18px;background:#FCF8F2;border-radius:22px;padding:16px 20px;width:fit-content;max-width:min(560px,100%)}
.login-lockup .discenda-mark{width:84px;height:84px;border-radius:20px}
.login-lockup .discenda-wordmark{height:72px;max-width:320px;width:auto}
.login-version{color:#d7e6f3}
.login-card-brand,.login-card-version{display:none}
.discenda-mark{width:44px;height:44px;border-radius:12px;object-fit:cover;background:#F4FBFC;display:block}
.discenda-brand-copy{min-width:0}
.discenda-brand .discenda-wordmark{height:32px;max-width:168px;width:auto}
.discenda-brand .discenda-school-name{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#248F91;letter-spacing:.04em;opacity:1;font-weight:700;text-transform:none}
@media(max-width:680px){
  .pupil-header .discenda-brand{min-width:0;flex:1 1 auto;overflow:hidden}
  .pupil-header .discenda-brand > .discenda-brand-copy{display:block;min-width:0;flex:1 1 auto;overflow:hidden}
  .pupil-header .discenda-brand .discenda-wordmark{max-width:min(148px,42vw);height:28px}
  .pupil-header .discenda-school-name{font-size:13px;line-height:1.2}
  .login-card-brand{display:flex;align-items:center;gap:12px;margin:0 0 16px}
  .login-card-brand .discenda-mark{width:56px;height:56px;border-radius:14px}
  .login-card-brand .discenda-wordmark{height:40px;max-width:200px}
  .login-card-version{display:block;margin-top:18px;text-align:center}
}
@media(max-width:720px){
  .settings-kpis .kpi {gap:14px;}
  .settings-kpis .kpi-icon.onboarding-illustration {flex-basis:62px;width:62px;height:62px;}
}
