/* Doktor Akademi Coach — shared product foundation.
   This file is intentionally component- and shell-only. Page modules retain
   their existing markup and behaviour until their individual redesign pass. */
html,body{max-width:100%;overflow-x:clip}
:root,
html[data-theme],
html[data-theme="dark"]{
  color-scheme:light;
  --da-bg:#f4f6fa;
  --da-surface:#fff;
  --da-surface-soft:#f8fafc;
  --da-surface-muted:#f1f4f8;
  --da-text:#111827;
  --da-text-muted:#64748b;
  --da-text-subtle:#667085;
  --da-placeholder:#7a8495;
  --da-border:#e5e7eb;
  --da-border-strong:#cfd7e6;
  --da-primary:#4f6ef7;
  --da-primary-hover:#4059d8;
  --da-primary-soft:#eef1ff;
  --da-primary-border:#cbd5ff;
  --da-success:#31c48d;
  --da-success-soft:#e9f8f1;
  --da-success-ink:#17734e;
  --da-warning:#f59e0b;
  --da-warning-soft:#fff6df;
  --da-warning-ink:#945200;
  --da-danger:#ef5350;
  --da-danger-soft:#fff0f1;
  --da-danger-ink:#b42318;
  --da-ai:#8b5cf6;
  --da-ai-soft:#f2eeff;
  --da-info:#1579bd;
  --da-info-ink:#3c52aa;
  --da-surface-tint:#fafbff;
  --da-separator:#eef1f5;
  --da-radius-sm:6px;
  --da-radius-md:10px;
  --da-radius-lg:14px;
  --da-shadow-sm:0 1px 2px rgb(16 24 40 / .04);
  --da-shadow-md:0 8px 24px rgb(16 24 40 / .07);
  --da-focus:0 0 0 3px rgb(79 110 247 / .22);
  --da-sidebar-width:272px;
  --bg:var(--da-bg);
  --panel:var(--da-surface);
  --panel-2:var(--da-surface-soft);
  --line:var(--da-border);
  --text:var(--da-text);
  --muted:var(--da-text-muted);
  --brand:var(--da-primary);
  --brand2:#7187f8;
  --accent-ink:#fff;
  --shadow:var(--da-shadow-md);
}

*,*::before,*::after{box-sizing:border-box}
html{background:var(--da-bg)}
body{min-width:320px;background:var(--da-bg);color:var(--da-text);font-family:Inter,"Segoe UI Variable Text","Segoe UI",system-ui,sans-serif;font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
/* Authentication bootstrap failure is distinct from an invalid session. The
   server-rendered loading shell remains in place; no client-side logout occurs. */
/* Server-confirmed sessions get a deliberately neutral boot state. It is
   removed by showApp() only after the authenticated asset sequence settles. */
body.has-server-session:not(.app-ready)::before{content:"";position:fixed;z-index:9999;inset:0;background:var(--da-bg)}
body.has-server-session:not(.app-ready)::after{content:"Doktor Akademi Coach\AÇalışma alanın hazırlanıyor";position:fixed;z-index:10000;top:50%;left:50%;translate:-50% -50%;display:grid;place-items:center;min-width:268px;padding:17px 22px 17px 62px;border:1px solid var(--da-border);border-radius:14px;background:var(--da-surface) url('brand-mark.svg') 18px 50%/30px 30px no-repeat;color:var(--da-text);font:700 13px/1.55 Inter,"Segoe UI",system-ui,sans-serif;white-space:pre;text-align:left;box-shadow:var(--da-shadow-md)}
body.has-server-session.app-bootstrap-failed:not(.app-ready)::after{content:"Uygulama kaynakları yüklenemedi.\ALütfen sayfayı yenileyip tekrar dene.";border-color:#f5c7c9;color:var(--da-danger)}
button,input,select,textarea{font:inherit}
button{min-height:40px;border:1px solid transparent;border-radius:var(--da-radius-md);background:var(--da-primary);color:#fff;font-weight:700;box-shadow:none;transition:background-color 180ms ease,border-color 180ms ease,box-shadow 180ms ease,transform 180ms ease}
button:hover{background:var(--da-primary-hover);filter:none;transform:none}
button:disabled{cursor:not-allowed;opacity:.56}
button.light,.light{background:var(--da-surface);border-color:var(--da-border);color:var(--da-text)}
button.light:hover,.light:hover{background:var(--da-surface-soft);border-color:var(--da-border-strong)}
button.danger,.danger{background:var(--da-danger-soft);border-color:#f5c7c9;color:var(--da-danger-ink)}
button.danger:hover,.danger:hover{background:#ffe2e4}
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible{outline:none;box-shadow:var(--da-focus)}

input,select,textarea{min-height:42px;border:1px solid var(--da-border);border-radius:var(--da-radius-md);background:var(--da-surface);color:var(--da-text);box-shadow:var(--da-shadow-sm)}
input::placeholder,textarea::placeholder{color:var(--da-placeholder);opacity:1}
input:focus,select:focus,textarea:focus{border-color:var(--da-primary);box-shadow:var(--da-focus)}
textarea{min-height:104px}

/* Authenticated application shell */
#app{display:block;min-height:100dvh;background:var(--da-bg)}
/* Desktop shell is deliberately explicit: no main surface can sit behind the
   navigation column, and only the navigation region itself is scrollable. */
#app>aside{position:fixed;z-index:20;inset:0 auto 0 0;display:flex;flex-direction:column;width:272px;height:100dvh;background:var(--da-surface);border-right:1px solid var(--da-border);box-shadow:8px 0 28px rgb(31 47 82 / .025)}
#app>aside .brand{display:flex;align-items:center;gap:11px;min-height:88px;margin:0 16px;padding:16px 2px;border-bottom:1px solid var(--da-border)}
#app>aside .brand>img{display:block;width:38px;height:38px;flex:0 0 38px;border-radius:12px;box-shadow:0 7px 16px rgb(79 110 247 / .2)}
#app>aside .brand h2{margin:0;color:var(--da-text);font-size:15px;letter-spacing:-.025em;line-height:1.2}
#app>aside .brand small{display:block;margin-top:4px;color:var(--da-text-muted);font-size:11px}
#app>aside nav{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;gap:2px;padding:12px;overflow-y:auto;overscroll-behavior:contain}
#app>aside nav button{position:relative;display:flex;align-items:center;gap:11px;min-width:0;min-height:42px;padding:0 11px;border:0;border-radius:10px;background:transparent;color:var(--da-text-muted);font-size:12px;font-weight:700;letter-spacing:-.01em;text-align:left;box-shadow:none}
#app>aside .nav-icon{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;min-width:20px;flex:0 0 20px;overflow:hidden}
#app>aside .nav-icon svg{display:block;width:20px;height:20px;max-width:20px;max-height:20px;flex:0 0 20px}
#app>aside .nav-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#app>aside nav button:hover{background:#f1f4ff;color:var(--da-primary-hover);border-color:transparent}
#app>aside nav button.active{background:var(--da-primary-soft);color:var(--da-primary);border-color:transparent;box-shadow:none}
#app>aside nav button.active::before{content:"";position:absolute;left:0;width:3px;height:20px;border-radius:0 4px 4px 0;background:var(--da-primary)}
#app>aside>#logout{background:transparent;border-color:transparent;color:var(--da-text-muted)}
#app>aside>#logout:hover{background:var(--da-surface-muted);color:var(--da-text)}
#app>aside .nav-group{margin:14px 10px 4px;padding:0 2px;color:var(--da-text-muted);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}#app>aside .nav-group:first-child{margin-top:2px}.sidebar-footer{flex:0 0 auto;padding:12px;border-top:1px solid var(--da-border);background:var(--da-surface)}.sidebar-footer>#logout{width:100%;margin:0;min-height:40px;font-size:12px}#app>aside>#mobileMenuToggle{display:none}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.app-feedback-button{display:none}
#app>main{width:calc(100% - 272px);min-width:0;max-width:none;margin-left:272px;padding:18px clamp(22px,3.5vw,48px) 42px;background:var(--da-bg)}
.app-topbar{display:flex;align-items:center;justify-content:space-between;gap:18px;width:min(100%,1280px);min-height:54px;margin:0 auto 18px;padding:8px 0 12px;border-bottom:1px solid var(--da-border)}.app-topbar__context{display:grid;gap:1px;min-width:0}.app-topbar__eyebrow{display:flex;align-items:center;gap:7px;color:var(--da-primary);font-size:10px;font-weight:850;letter-spacing:.1em}.app-topbar__eyebrow::before{content:"";display:block;width:20px;height:20px;flex:0 0 20px;border-radius:6px;background:url('brand-mark.svg') center/contain no-repeat;box-shadow:0 3px 8px rgb(79 110 247 / .16)}.app-topbar__context>span:last-child{overflow:hidden;color:var(--da-text-muted);font-size:12px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.app-topbar__actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;min-width:0}.app-topbar__account{min-height:36px;padding-inline:11px;font-size:12px}
#app>main>header{width:min(100%,1280px);margin:0 auto 22px;padding-bottom:16px;border-bottom:1px solid var(--da-border)}
#app>main>header[hidden]{display:none}
#app>main>header h1{color:var(--da-text);font-size:clamp(28px,3vw,40px);letter-spacing:-.035em}
#app>main>header small{color:var(--da-text-muted)}
.view{display:none;width:min(100%,1280px);margin-inline:auto}.view.active{display:block}

/* Shared visual primitives */
.card,.metrics article,.role-metrics article{border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface);box-shadow:var(--da-shadow-sm)}
.card{padding:20px}
.card>.head{padding-bottom:14px;border-bottom:1px solid var(--da-border)}
.card h1,.card h2,.card h3,.card h4{color:var(--da-text)}
.card p,.card small,.task small,.repeat small{color:var(--da-text-muted)}
.eyebrow{color:var(--da-primary);font-size:11px;font-weight:800;letter-spacing:.1em}
.badge,.status{border:1px solid var(--da-primary-border);background:var(--da-primary-soft);color:var(--da-primary-hover);border-radius:999px}
.metrics article,.role-metrics article{min-height:120px;padding:18px}
.metrics article span,.role-metrics article span{color:var(--da-text-muted);font-size:13px}
.metrics article b,.role-metrics article b{color:var(--da-text)}
.task,.repeat{border-color:var(--da-border)}
.task p{color:var(--da-text-muted)}
.done-chip{background:var(--da-success-soft);color:var(--da-success)}
.priority.high{background:var(--da-danger-soft);color:var(--da-danger)}
.priority.medium{background:var(--da-warning-soft);color:var(--da-warning)}
.priority.low{background:var(--da-success-soft);color:var(--da-success)}
.empty-state,.empty{border-color:var(--da-border);background:var(--da-surface-soft);color:var(--da-text-muted)}
dialog{border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface);color:var(--da-text);box-shadow:0 24px 80px rgb(16 24 40 / .2)}
dialog::backdrop{background:rgb(16 24 40 / .38)}
.avatar-crop-dialog{width:min(500px,calc(100vw - 28px));max-width:500px;max-height:calc(100dvh - 28px);padding:20px;overflow:auto;overscroll-behavior:contain}.avatar-crop-dialog .head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:8px}.avatar-crop-dialog .head h2{margin:3px 0 0}.avatar-crop-dialog>p{margin-bottom:14px}.avatar-crop-dialog canvas{display:block;width:min(100%,420px);height:auto;aspect-ratio:1;margin:0 auto;border-radius:12px;background:var(--da-surface-muted);touch-action:none}.avatar-crop-dialog>label{display:grid;gap:7px;margin-top:14px;color:var(--da-text);font-size:12px;font-weight:700}.avatar-crop-dialog input[type="range"]{width:100%;min-height:28px;box-shadow:none}.avatar-crop-dialog .actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.avatar-crop-dialog .actions button{min-width:0}
#toast{border:1px solid var(--da-border);border-radius:var(--da-radius-md);background:#1f2937;color:#fff;box-shadow:var(--da-shadow-md)}

/* Named product primitives. New and migrated screens use these classes rather
   than adding page-global overrides. Legacy markup can migrate incrementally. */
.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;width:min(100%,1280px);margin:0 auto 24px;padding:4px 0 18px;border-bottom:1px solid var(--da-border)}
.page-header__copy{min-width:0}.page-header__eyebrow{margin:0 0 5px;color:var(--da-primary);font-size:11px;font-weight:800;letter-spacing:.1em}.page-header__title{margin:0;color:var(--da-text);font-size:clamp(22px,2.4vw,32px);letter-spacing:-.04em}.page-header__description{margin:5px 0 0;color:var(--da-text-muted);font-size:14px}.page-header__actions{display:flex;flex-wrap:wrap;gap:8px}
.ui-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:0 14px;border:1px solid transparent;border-radius:var(--da-radius-md);font-size:13px;font-weight:750;line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer}.ui-button--primary{border-color:var(--da-primary);background:var(--da-primary);color:#fff}.ui-button--primary:hover{background:var(--da-primary-hover)}.ui-button--secondary{border-color:var(--da-border);background:var(--da-surface);color:var(--da-text)}.ui-button--secondary:hover{border-color:var(--da-border-strong);background:var(--da-surface-soft)}.ui-button--ghost{background:transparent;color:var(--da-primary)}.ui-button--danger{border-color:#fecaca;background:var(--da-danger-soft);color:var(--da-danger-ink)}
.ui-card{border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface);box-shadow:var(--da-shadow-sm)}.ui-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 20px 14px;border-bottom:1px solid var(--da-border)}.ui-card__body{padding:20px}.ui-card__title{margin:0;color:var(--da-text);font-size:18px;letter-spacing:-.025em}.ui-card__description{margin:4px 0 0;color:var(--da-text-muted);font-size:13px}
.ui-field{display:grid;gap:6px;min-width:0}.ui-field__label{color:var(--da-text);font-size:12px;font-weight:700}.ui-field__help,.ui-field__error{font-size:12px}.ui-field__help{color:var(--da-text-muted)}.ui-field__error{color:var(--da-danger-ink)}.ui-input,.ui-select,.ui-textarea{width:100%;min-height:42px;padding:10px 12px;border:1px solid var(--da-border);border-radius:var(--da-radius-md);background:var(--da-surface);color:var(--da-text);outline:0}.ui-textarea{min-height:112px;resize:vertical}.ui-input:focus,.ui-select:focus,.ui-textarea:focus{border-color:var(--da-primary);box-shadow:var(--da-focus)}.ui-input:disabled,.ui-select:disabled,.ui-textarea:disabled{background:var(--da-surface-muted);color:var(--da-text-muted);cursor:not-allowed}
.ui-status{display:inline-flex;align-items:center;gap:6px;min-height:24px;padding:4px 8px;border-radius:999px;font-size:11px;font-weight:750;line-height:1}.ui-status--info{background:var(--da-primary-soft);color:var(--da-primary-hover)}.ui-status--success{background:var(--da-success-soft);color:var(--da-success-ink)}.ui-status--warning{background:var(--da-warning-soft);color:var(--da-warning-ink)}.ui-status--danger{background:var(--da-danger-soft);color:var(--da-danger-ink)}.ui-status--ai{background:var(--da-ai-soft);color:var(--da-ai)}
.ui-tabs{display:flex;gap:4px;overflow-x:auto;padding:4px;border:1px solid var(--da-border);border-radius:var(--da-radius-md);background:var(--da-surface-soft)}.ui-tabs__tab{min-height:36px;padding:0 12px;border:0;border-radius:7px;background:transparent;color:var(--da-text-muted);font-size:12px;font-weight:700;white-space:nowrap}.ui-tabs__tab[aria-selected="true"]{background:var(--da-surface);color:var(--da-primary);box-shadow:var(--da-shadow-sm)}
.ui-empty{display:grid;justify-items:center;gap:6px;padding:32px 20px;border:1px dashed var(--da-border-strong);border-radius:var(--da-radius-md);background:var(--da-surface-soft);color:var(--da-text-muted);text-align:center}.ui-empty strong{color:var(--da-text)}.ui-upload{display:grid;justify-items:center;gap:8px;padding:24px;border:1px dashed #b8c4dd;border-radius:var(--da-radius-md);background:#fafbff;color:var(--da-text-muted);text-align:center}.ui-upload:focus-within{border-color:var(--da-primary);box-shadow:var(--da-focus)}.ui-table-wrap{overflow-x:auto;border:1px solid var(--da-border);border-radius:var(--da-radius-md);background:var(--da-surface)}.ui-table{width:100%;min-width:640px;border-collapse:collapse;font-size:13px}.ui-table th,.ui-table td{padding:12px 14px;border-bottom:1px solid var(--da-border);text-align:left}.ui-table th{background:var(--da-surface-soft);color:var(--da-text-muted);font-size:11px;letter-spacing:.05em;text-transform:uppercase}.ui-table tr:last-child td{border-bottom:0}
.ui-dialog{width:min(640px,calc(100vw - 32px));max-height:calc(100dvh - 32px);padding:0;overflow:auto}.ui-dialog__header,.ui-dialog__body,.ui-dialog__footer{padding:20px}.ui-dialog__header{border-bottom:1px solid var(--da-border)}.ui-dialog__footer{display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--da-border)}

/* The update notice is a shell component. It is anchored to the content canvas
   rather than a page end, so short viewports and the sidebar cannot clip it. */
.app-update-notice{position:fixed;z-index:1200;inset-block-start:max(16px,env(safe-area-inset-top));inset-inline-start:calc(var(--da-sidebar-width) + clamp(20px,4vw,56px));inset-inline-end:clamp(20px,4vw,56px);display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;width:min(100%,640px);margin-inline:auto;padding:13px 14px;border:1px solid var(--da-border);border-radius:var(--da-radius-md);background:var(--da-surface);box-shadow:var(--da-shadow-md);color:var(--da-text)}
.app-update-notice__message{min-width:0;color:var(--da-text-muted);font-size:12px;line-height:1.45}.app-update-notice__action{min-width:max-content;min-height:38px;padding-inline:12px;font-size:12px}

/* Responsive navigation controller. The control and backdrop are injected by
   app.js to preserve legacy route markup while providing a real drawer. */
.app-nav-backdrop,.app-nav-toggle{display:none}

/* Visual QA pass: evidence, messaging and account are migrated to the shared
   light primitives without changing their data, events or API contracts. */
#app>aside nav button.active,#app>aside nav button[aria-current="page"]{background:var(--da-primary-soft);color:var(--da-primary);box-shadow:inset 3px 0 0 var(--da-primary)}
#evidence .evidence-back{display:inline-flex;align-items:center;min-height:36px;margin:0 0 12px;padding:0;border:0;background:transparent;color:var(--da-primary);font-size:13px;font-weight:750;box-shadow:none}
#evidence .evidence-back:hover{background:transparent;color:var(--da-primary-hover)}
#evidenceList{display:grid;gap:0;min-width:0}#evidence .evidence-day-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;width:100%;min-width:0;min-height:62px;margin:0;padding:11px 2px;border:0;border-bottom:1px solid var(--da-border);border-radius:0;background:transparent;color:var(--da-text);text-align:left;box-shadow:none}#evidence .evidence-day-row:hover{background:transparent;color:var(--da-text)}#evidence .evidence-day-row:first-child{border-top:1px solid var(--da-border)}#evidence .evidence-day-row>div{min-width:0}#evidence .evidence-day-row b,#evidence .evidence-day-row small{display:block}#evidence .evidence-day-row b{font-size:13px;line-height:1.35}#evidence .evidence-day-row small{overflow:hidden;margin-top:3px;color:var(--da-text-muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}#evidence .evidence-day-row>span{color:var(--da-primary);font-size:11px;font-weight:750;white-space:nowrap}
#evidence .evidence-subject{margin:0 0 10px;padding:13px 15px;border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface);box-shadow:var(--da-shadow-sm)}
#evidence .evidence-subject-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:9px;border-bottom:1px solid var(--da-border)}
#evidence .evidence-subject-head span{color:var(--da-text-muted);font-size:10px;font-weight:800;letter-spacing:.1em}.evidence-subject-head h3{margin:3px 0 0;color:var(--da-text);font-size:16px}.evidence-subject-head>b{padding:5px 8px;border-radius:999px;background:var(--da-primary-soft);color:var(--da-primary);font-size:11px;white-space:nowrap}
#evidence .evidence-summary-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;min-height:60px;padding:10px 0;border:0;border-bottom:1px solid #eef1f5;border-radius:0;background:transparent;color:var(--da-text);text-align:left;box-shadow:none}
#evidence .evidence-summary-row:last-child{border-bottom:0}.evidence-summary-row:hover{background:transparent;color:var(--da-text)}.evidence-summary-row b{display:block;font-size:13px}.evidence-summary-row small{display:block;overflow:hidden;margin-top:3px;color:var(--da-text-muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}
.review-badge{display:inline-flex;align-items:center;justify-content:center;min-height:26px;max-width:100%;padding:5px 8px;border:0;border-radius:999px;font-size:10px;font-weight:750;line-height:1.1;white-space:nowrap}.review-badge.green{background:var(--da-success-soft);color:#18845d}.review-badge.yellow{background:var(--da-warning-soft);color:#a85f00}.review-badge.red{background:var(--da-danger-soft);color:var(--da-danger)}.review-badge.blue{background:var(--da-primary-soft);color:var(--da-primary)}
#evidence .evidence-card{display:grid;grid-template-columns:minmax(0,2.2fr) minmax(260px,.9fr);gap:14px;padding:0;border:0;background:transparent;box-shadow:none}.evidence-heading,.submission-stats,.student-note{grid-column:1/-1}.evidence-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:2px 0}.evidence-heading h3{margin:4px 0 0;color:var(--da-text);font-size:18px;line-height:1.35;overflow-wrap:anywhere}.evidence-heading small{color:var(--da-text-muted);font-size:11px}.submission-stats{display:flex;flex-wrap:wrap;gap:6px}.submission-stats span{padding:5px 8px;border-radius:7px;background:var(--da-surface-soft);color:var(--da-text-muted);font-size:11px}.student-note{margin:0;padding:10px 12px;border-left:3px solid #cbd5ff;background:#fafbff;color:var(--da-text-muted);font-size:12px;line-height:1.5}.evidence-photos{min-width:0}.single-photo-viewer{display:grid;gap:9px;padding:10px;border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface)}.single-evidence-image{display:block;width:100%;max-height:64dvh;object-fit:contain;border-radius:9px;background:var(--da-surface-soft)}.photo-controls{display:flex;align-items:center;justify-content:space-between;gap:8px}.photo-controls button{min-height:34px;padding:0 9px;font-size:11px}.photo-position{color:var(--da-text-muted);font-size:11px}.photo-original{color:var(--da-primary);font-size:12px;font-weight:700}.ai-note{align-self:start;padding:14px;border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface)}.ai-note b{color:var(--da-ai);font-size:12px}.ai-note p{margin:7px 0;color:var(--da-text);font-size:12px;line-height:1.5}.ai-note small{color:var(--da-text-muted)}.review-actions{display:flex;flex-wrap:wrap;gap:8px;grid-column:2}.review-actions button{min-height:38px;font-size:12px}

/* Student-owned exam records deliberately share the evidence surface without
   ever reading plan tasks.  The form stays a compact dialog on touch devices. */
#exams .head-actions{display:flex;flex-wrap:wrap;gap:8px}#exams .exam-record{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"heading actions" "stats actions" "media actions";align-items:start;gap:10px 18px;padding:15px 16px;border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface);box-shadow:var(--da-shadow-sm)}#exams .exam-record .evidence-heading{grid-area:heading;padding:0}#exams .exam-record .submission-stats{grid-area:stats}#exams .exam-record .exam-media-gallery{grid-area:media}#exams .exam-record__actions{grid-area:actions;align-self:end;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}#exams .exam-record__actions button{min-height:36px;padding-inline:11px;font-size:12px}.exam-entry-dialog{width:min(680px,calc(100vw - 32px))}.exam-entry-dialog h2,.exam-delete-dialog h2{margin:4px 0 0;font-size:22px;letter-spacing:-.035em}.exam-entry-dialog p,.exam-delete-dialog p{margin:6px 0 0;color:var(--da-text-muted);font-size:13px}.exam-entry-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.exam-entry-grid__wide{grid-column:1/-1}.ui-field__label em{color:var(--da-text-muted);font-style:normal;font-weight:500}.exam-net-fields{display:grid;grid-column:1/-1;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0;padding:14px;border:1px solid var(--da-border);border-radius:var(--da-radius-md)}.exam-net-fields legend{padding:0 5px;color:var(--da-text-muted);font-size:11px;font-weight:800;letter-spacing:.08em}.exam-image-upload{display:grid;gap:7px;padding:13px;border:1px dashed var(--da-border-strong);border-radius:var(--da-radius-md);background:var(--da-surface-muted)}.exam-image-upload small{color:var(--da-text-muted);font-size:12px}.exam-media-gallery{display:flex;flex-wrap:wrap;gap:8px;min-width:0}.exam-media-gallery a{display:block;width:74px;height:74px;overflow:hidden;border:1px solid var(--da-border);border-radius:10px;background:var(--da-surface-muted)}.exam-media-gallery img{display:block;width:100%;height:100%;object-fit:cover}.exam-entry-dialog .ui-dialog__footer,.exam-delete-dialog .ui-dialog__footer{position:sticky;bottom:0;background:var(--da-surface)}
#messages .message-center{overflow:hidden;padding:0;border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface);box-shadow:var(--da-shadow-sm)}#messages .message-center>.head{padding:18px 20px;border-bottom:1px solid var(--da-border)}#messages .chat-center{display:grid;grid-template-columns:minmax(230px,290px) minmax(0,1fr);min-height:540px;margin:0;gap:0}#messages .message-contacts{padding:10px;border-right:1px solid var(--da-border);background:var(--da-surface-soft)}#messages .message-contact,#messages .message-contacts button{position:relative;display:grid;grid-template-columns:36px minmax(0,1fr) auto;grid-template-rows:auto auto;column-gap:10px;align-items:center;width:100%;min-width:0;margin:0 0 5px;padding:9px 10px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--da-text);text-align:left}#messages .message-contact::before{content:attr(data-initial);grid-column:1;grid-row:1/3;display:grid;place-items:center;width:36px;height:36px;border-radius:12px;background:#e6eaff;color:var(--da-primary);font-size:12px;font-weight:850}#messages .message-contact>span{grid-column:2;grid-row:1;overflow:hidden;font-size:12px;font-weight:780;text-overflow:ellipsis;white-space:nowrap}#messages .message-contact>small{grid-column:2;grid-row:2;overflow:hidden;color:var(--da-text-muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}#messages .message-contact>b{grid-column:3;grid-row:1/3;align-self:center;min-width:22px;padding:3px 6px;border-radius:999px;background:var(--da-primary);color:#fff;font-size:10px;text-align:center}#messages .message-contact.active,#messages .message-contacts button.active{border-color:#cfd7ff;background:var(--da-primary-soft);color:var(--da-primary)}#messages .message-contact.active::before{background:var(--da-primary);color:#fff}#messages .message-thread{display:grid;grid-template-rows:auto minmax(260px,1fr) auto;padding:0;background:var(--da-surface)}#messages .message-thread-title{padding:14px 18px;border-bottom:1px solid var(--da-border);color:var(--da-text);font-size:13px;font-weight:800}#messages .message-list{padding:16px;max-height:52vh;overflow:auto;background:#fbfcff;overscroll-behavior:contain}#messages .chat-message{display:flex;margin:8px 0}#messages .chat-message>div{max-width:min(76%,620px);min-width:0;padding:10px 12px;border:1px solid var(--da-border);border-radius:14px 14px 14px 5px;background:#f1f3f6;color:var(--da-text);box-shadow:none}#messages .chat-message.mine{justify-content:flex-end}#messages .chat-message.mine>div{border-color:#d3dcff;background:var(--da-primary-soft);color:#243a9b}#messages .chat-message b{display:block;font-size:12px;line-height:1.35;overflow-wrap:anywhere}#messages .chat-message p{margin:4px 0 5px;line-height:1.45;overflow-wrap:anywhere}#messages .chat-message small{color:var(--da-text-muted);font-size:10px}#messages .direct-message-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:12px 16px 16px;border-top:1px solid var(--da-border);background:var(--da-surface)}#messages .direct-message-form input{grid-column:1/-1}#messages .direct-message-form textarea{min-height:64px;max-height:132px;resize:vertical}#messages .direct-message-form button{min-width:96px}
#account .account-layout{gap:18px;align-items:start}#account .account-avatar{padding:20px;border:1px solid var(--da-border);border-radius:var(--da-radius-lg);background:var(--da-surface);box-shadow:var(--da-shadow-sm)}#account .account-tabs{gap:4px;padding:4px;border:1px solid var(--da-border);border-radius:var(--da-radius-md);background:var(--da-surface-soft)}#account .account-tabs button{min-height:38px;border:0;background:transparent;color:var(--da-text-muted)}#account .account-tabs button.active{background:var(--da-surface);color:var(--da-primary);box-shadow:var(--da-shadow-sm)}
footer{margin-top:32px;padding:16px 0;color:var(--da-text-muted);font-size:11px;text-align:center}

/* The persistent desktop sidebar already owns product identity. Keep the
   compact brand cue only where the sidebar is collapsed into a drawer. */
@media (min-width:961px){.app-topbar__eyebrow{display:none}}

@media (max-width:960px){
  :root{--da-sidebar-width:0px}
  .app-topbar{min-height:48px;margin-bottom:16px;padding:8px 0 10px 54px}.app-topbar__eyebrow{font-size:9px}.app-topbar__context>span:last-child{font-size:11px}
  /* Exception: v14.css still ships a fixed bottom navigation with !important.
     These declarations are limited to the shared drawer geometry until that
     legacy module can be retired after its own screen migration. */
  #app>aside{position:fixed!important;inset:0 auto 0 0!important;width:min(320px,86vw)!important;height:100dvh!important;max-width:320px!important;right:auto!important;bottom:auto!important;transform:translateX(-105%)!important}
  #app>aside.mobile-nav-open{transform:translateX(0)!important}
  #app>aside .brand{display:flex!important}
  #app>aside>#logout{display:block!important}
  #app>aside nav{position:static!important;right:auto!important;bottom:auto!important;left:auto!important;display:grid!important;grid-template-columns:1fr!important;max-height:none!important;border:0!important;background:transparent!important;box-shadow:none!important;backdrop-filter:none!important}
  #app>aside .mobile-nav-bar{display:none!important}
  body.app-drawer-open{overflow:hidden}
  #app{display:block}
  #app>aside{position:fixed;z-index:1001;inset:0 auto 0 0;width:min(320px,86vw);height:100dvh;max-width:320px;padding:18px 14px 14px;overflow-y:auto;transform:translateX(-105%);transition:transform 180ms ease;box-shadow:12px 0 32px rgb(16 24 40 / .16)}
  #app>aside.mobile-nav-open{transform:translateX(0)}
  #app>aside nav{border:0;background:transparent;box-shadow:none}
  #app>main{width:100%;margin-left:0;padding:20px 14px 32px}
  #app>main>header{margin-bottom:20px;padding-bottom:16px}
  .app-nav-backdrop{position:fixed;z-index:1000;inset:0;border:0;background:rgb(15 23 42 / .38);opacity:0;pointer-events:none;transition:opacity 180ms ease}.app-nav-backdrop.is-visible{opacity:1;pointer-events:auto}
  .app-nav-toggle{position:fixed;z-index:1002;top:max(12px,env(safe-area-inset-top));left:12px;display:grid;place-items:center;width:42px;height:42px;min-height:42px;padding:0;border:1px solid var(--da-border);border-radius:10px;background:var(--da-surface);color:var(--da-text);box-shadow:var(--da-shadow-md);font-size:0}.app-nav-toggle .nav-icon,.app-nav-toggle svg{display:block;width:20px;height:20px}.app-nav-toggle:hover{background:var(--da-surface-soft)}
  #app>main>header{padding-left:54px}
  .card{padding:16px}
  .app-update-notice{inset-inline:12px;width:auto}
}
@media (min-width:961px) and (max-width:1120px){
  :root{--da-sidebar-width:224px}
  #app>aside{width:224px}
  #app>main{width:calc(100% - 224px);margin-left:224px;padding-inline:28px}
}
@media (max-width:720px){
  .page-header{align-items:stretch;flex-direction:column;gap:12px}.page-header__actions{width:100%}.page-header__actions .ui-button{flex:1}
  #evidence .evidence-card{grid-template-columns:1fr;gap:12px}.evidence-heading,.submission-stats,.student-note,.review-actions{grid-column:1}.evidence-heading{align-items:flex-start;flex-direction:column}.single-evidence-image{max-height:54dvh}.review-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.review-actions button{width:100%}
  #messages .chat-center{grid-template-columns:1fr;min-height:0}#messages .message-contacts{display:flex;gap:7px;overflow-x:auto;padding:9px;border-right:0;border-bottom:1px solid var(--da-border)}#messages .message-contact,#messages .message-contacts button{width:auto;min-width:150px;margin:0;white-space:nowrap}#messages .message-thread{min-height:450px}#messages .message-list{max-height:48dvh;padding:12px}#messages .chat-message>div{max-width:88%}#messages .direct-message-form{padding:10px 12px 12px}
  #account .account-layout{grid-template-columns:1fr}#exams .head-actions{width:100%}#exams .head-actions button{flex:1}#exams .exam-record{grid-template-columns:1fr;grid-template-areas:"heading" "stats" "media" "actions"}#exams .exam-record__actions{align-self:auto;justify-content:flex-start}#exams .exam-record__actions button{flex:1}.exam-entry-grid{grid-template-columns:1fr}.exam-net-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.exam-entry-dialog .ui-dialog__body{padding:16px}.exam-entry-dialog .ui-dialog__header,.exam-entry-dialog .ui-dialog__footer{padding:16px}
  #evidence .evidence-day-row{grid-template-columns:1fr auto;gap:9px;padding:11px 0}#evidence .evidence-subject{padding:12px}#evidence .evidence-summary-row{grid-template-columns:1fr;gap:7px}#evidence .evidence-summary-row .review-badge{justify-self:start}.photo-controls{gap:5px}.photo-controls button{padding-inline:8px}.extra-study-evidence__list article{min-width:0}
}
@media (max-width:480px){
  .app-topbar{margin-bottom:12px}.app-topbar__actions .badge{display:none}.app-topbar__account{min-height:34px;padding-inline:9px}
  #app>main{padding-inline:10px}
  .card{padding:14px}
  .metrics,.role-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .metrics article,.role-metrics article{min-height:104px;padding:14px}
  .app-update-notice{grid-template-columns:1fr;align-items:stretch}.app-update-notice__action{width:100%}
  .avatar-crop-dialog{width:calc(100vw - 20px);max-height:calc(100dvh - 20px);padding:15px}.avatar-crop-dialog .head{align-items:center}.avatar-crop-dialog .head button{min-height:36px;padding-inline:10px}.avatar-crop-dialog .actions{display:grid;grid-template-columns:1fr 1fr}.avatar-crop-dialog .actions button{width:100%;padding-inline:8px}
}

/* Admin and coach workspaces: existing controls and data contracts, rebuilt as
   compact light SaaS surfaces. */
#admin{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px;align-items:start}#admin>[hidden]{display:none}#admin>.metrics{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:0}#admin>.metrics article{min-height:116px;display:flex;flex-direction:column;justify-content:space-between}#admin>.metrics article b{font-size:28px;letter-spacing:-.04em}#admin>.metrics article button{width:max-content;min-height:38px;padding:0 12px;font-size:12px}#admin>.card{grid-column:1/-1;min-width:0;margin:0;padding:20px}#admin h2{margin:0 0 14px;font-size:18px}#admin h3{margin:18px 0 10px;font-size:15px}#admin hr{margin:18px 0;border:0;border-top:1px solid var(--da-border)}#admin .grid{gap:10px}#admin #adminUsers,#admin #adminTopics{display:grid;gap:0;overflow:auto;max-height:440px;border:1px solid var(--da-border);border-radius:10px;background:var(--da-surface)}#admin .task{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;margin:0;padding:12px 14px;border:0;border-bottom:1px solid var(--da-border);border-radius:0;background:var(--da-surface);box-shadow:none}#admin .task:last-child{border-bottom:0}#admin .task b{font-size:13px}#admin .task small{font-size:11px}#admin .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}#admin .actions button{min-height:34px;padding:0 10px;font-size:11px}#admin #adminBookSelect{width:100%;margin-bottom:10px}
.role-hub{display:grid;gap:16px}.role-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:0 0 18px;border-bottom:1px solid var(--da-border)}.role-hero h2{margin:5px 0;color:var(--da-text);font-size:26px;letter-spacing:-.035em}.role-hero p{margin:0;color:var(--da-text-muted);font-size:13px}.role-controls{display:flex;flex-wrap:wrap;align-items:end;justify-content:flex-end;gap:8px}.role-controls label{display:grid;gap:5px;color:var(--da-text-muted);font-size:11px;font-weight:700}.role-controls select{min-width:130px}.role-week-navigator{display:flex;align-items:center;gap:7px;min-height:42px;padding:5px 7px;border:1px solid var(--da-border);border-radius:10px;background:var(--da-surface)}.role-week-navigator button{min-width:32px;min-height:32px;padding:0}.role-week-navigator span{display:block;color:var(--da-text-muted);font-size:10px}.role-week-navigator strong{display:block;font-size:11px}.role-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0}.role-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:16px}.role-grid>.card,.role-stack>.card{margin:0}.role-task-list,.activity-timeline,#roleSubmissions,#roleNotes{overflow:hidden;border:1px solid var(--da-border);border-radius:10px;background:var(--da-surface)}.role-task-list .task,.activity-timeline .task{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;margin:0;padding:13px 14px;border:0;border-bottom:1px solid var(--da-border);border-radius:0;background:var(--da-surface);box-shadow:none}.role-task-list .task:last-child,.activity-timeline .task:last-child{border-bottom:0}.role-alerts{display:grid;gap:8px}.role-alerts>*{margin:0;border-color:#d7ddff;background:var(--da-primary-soft);color:var(--da-text)}
/* Removed smart-repeat interface. The old API can remain until its own backend retirement. */
#repeats,[data-open-view="repeats"],#dashboardRepeatList,.summary-repeats{display:none}
/* Compact source-program stepper; scoped to the existing planner markup. */
#resources .program-stepper,.study-planner .program-stepper,.planner-stepper{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0 0 16px}.program-stepper>*{min-height:72px;padding:12px;border:1px solid var(--da-border);border-radius:10px;background:var(--da-surface);color:var(--da-text)}.program-stepper .active{border-color:#cbd5ff;background:var(--da-primary-soft);color:var(--da-primary)}
@media (max-width:900px){#admin>.card:nth-of-type(1),#admin>.card:nth-of-type(2),#admin>.card:nth-of-type(3){grid-column:1/-1}.role-hero{flex-direction:column}.role-controls{justify-content:flex-start}.role-grid{grid-template-columns:1fr}.role-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){#admin>.metrics{grid-template-columns:1fr}#admin .task,.role-task-list .task,.activity-timeline .task{grid-template-columns:1fr;align-items:start}#admin .actions{justify-content:flex-start}.role-controls>*{width:100%}.role-controls select,.role-controls button{width:100%}.program-stepper{grid-template-columns:1fr}.role-metrics{grid-template-columns:1fr}}
/* Direct admin routes set [hidden]; legacy display declarations require this explicit boundary. */
#admin>[hidden]{display:none!important}
#adminSecurityCenter [hidden]{display:none!important}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition-duration:0.01ms!important;animation-duration:0.01ms!important;animation-iteration-count:1!important}}
.exam-media-item{display:grid;gap:5px;width:74px}.exam-media-item .exam-media-delete{min-height:30px;padding:4px 7px;font-size:11px}
