@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@500;600;700;800&display=swap');
:root{font-family:'DM Sans',system-ui,sans-serif;color:#14243a;background:#f4f7fb;font-synthesis:none;text-rendering:optimizeLegibility;--navy:#123b72;--blue:#1768b3;--blue-2:#eaf3ff;--green:#18845d;--line:#e2e9f2;--muted:#687990;--surface:#fff;--shadow:0 14px 38px #173c7010}
*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.52;cursor:not-allowed}.boot{min-height:100vh;display:flex;align-items:center;justify-content:center;gap:12px;color:var(--muted)}.spinner{width:19px;height:19px;border:2px solid #c9d8e9;border-top-color:var(--blue);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.login-wrap{min-height:100vh;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(360px,.9fr);background:#fff}.login-brand{padding:clamp(32px,7vw,88px);display:flex;flex-direction:column;justify-content:space-between;color:white;background:radial-gradient(ellipse at 15% 90%,#2787c4 0,transparent 50%),linear-gradient(145deg,#0d2e5d,#1768b3 68%,#2c8aaf)}.brand-lockup{display:flex;align-items:center;gap:13px;font-weight:800;letter-spacing:.02em}.brand-logo{width:48px;height:48px;border-radius:15px;display:grid;place-items:center;background:#ffffff20;font-size:26px}.brand-copy{max-width:580px;margin:auto 0}.eyebrow{text-transform:uppercase;letter-spacing:.16em;font-size:12px;font-weight:700;opacity:.8}.brand-copy h1{font:800 clamp(38px,5vw,64px)/1.08 Manrope,sans-serif;letter-spacing:-.05em;margin:18px 0}.brand-copy p{max-width:490px;color:#e1efff;font-size:18px;line-height:1.7}.brand-footer{font-size:13px;color:#d2e4fb}.login-side{padding:32px;display:grid;place-items:center}.login-card{width:min(100%,430px)}.login-card h2{font:800 30px Manrope,sans-serif;letter-spacing:-.04em;margin:0 0 8px}.login-card>p{color:var(--muted);margin:0 0 30px;line-height:1.6}.field{display:grid;gap:7px;margin:17px 0}.field label{font-size:13px;font-weight:700;color:#334861}.field input,.field select,.field textarea,.search-input{width:100%;border:1px solid #d7e1ed;border-radius:12px;padding:12px 14px;background:white;color:#15263c;outline:none;transition:border .16s,box-shadow .16s}.field input:focus,.field select:focus,.field textarea:focus,.search-input:focus{border-color:#4a95d0;box-shadow:0 0 0 3px #1768b31b}.field textarea{min-height:88px;resize:vertical}.primary,.secondary,.quiet{border:0;border-radius:11px;padding:11px 16px;font-weight:700;transition:transform .15s,background .15s}.primary{background:var(--blue);color:white}.primary:hover{background:#0e5798}.secondary{background:var(--blue-2);color:var(--navy)}.quiet{background:transparent;color:var(--blue)}.primary:active,.secondary:active{transform:translateY(1px)}.wide{width:100%;margin-top:10px;padding:13px}.feedback{min-height:22px;margin-top:10px;color:#b23b36;font-size:13px}.feedback.success{color:var(--green)}.hint{font-size:12px;color:var(--muted);line-height:1.5}.input-row{display:flex;gap:10px;align-items:center}.input-row .search-input{flex:1;min-width:0}
.app-layout{min-height:100vh;display:grid;grid-template-columns:258px minmax(0,1fr)}.sidebar{position:sticky;top:0;height:100vh;background:#102f59;color:white;padding:22px 15px;display:flex;flex-direction:column}.sidebar .brand-lockup{padding:5px 10px 28px}.sidebar .brand-logo{width:40px;height:40px;border-radius:13px}.side-label{padding:14px 11px 7px;color:#9fb5d2;font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase}.nav-list{display:grid;gap:5px}.nav-button{display:flex;align-items:center;gap:12px;width:100%;padding:11px 12px;border:0;border-radius:10px;background:transparent;color:#cfdbec;text-align:left;font-weight:600}.nav-button:hover,.nav-button.active{background:#ffffff18;color:#fff}.nav-icon{width:22px;text-align:center;font-size:17px}.sidebar-bottom{margin-top:auto;border-top:1px solid #ffffff20;padding:15px 8px 0}.user-mini{display:flex;align-items:center;gap:10px;padding:0 5px 12px}.avatar{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:#d9ebff;color:#174c83;font-weight:800}.user-meta{min-width:0;flex:1}.user-meta strong,.user-meta small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-meta small{color:#acc0d9;margin-top:3px}.sidebar .quiet{color:#e1eaf6;padding:8px 5px}.workspace{min-width:0}.topbar{height:72px;padding:0 clamp(18px,4vw,48px);display:flex;align-items:center;justify-content:space-between;background:#ffffffd9;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:2;backdrop-filter:blur(12px)}.topbar-title{font:700 17px Manrope,sans-serif}.topbar-school{font-size:12px;color:var(--muted);margin-top:3px}.content{max-width:1200px;margin:auto;padding:clamp(22px,4vw,46px)}.page-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:24px}.page-heading h1{font:800 clamp(25px,3vw,34px) Manrope,sans-serif;letter-spacing:-.04em;margin:0 0 7px}.page-heading p{margin:0;color:var(--muted);line-height:1.55}.welcome{padding:26px 28px;border-radius:20px;color:#fff;background:linear-gradient(115deg,#123b72,#1768b3);box-shadow:var(--shadow);display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:22px}.welcome h1{font:800 clamp(24px,3vw,32px) Manrope,sans-serif;margin:7px 0}.welcome p{margin:0;color:#deecfb}.welcome .welcome-icon{width:62px;height:62px;display:grid;place-items:center;border-radius:19px;background:#ffffff18;font-size:28px}.card{background:var(--surface);border:1px solid var(--line);border-radius:17px;box-shadow:var(--shadow)}.quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.quick-card{padding:20px;min-height:148px;color:inherit;text-decoration:none;display:flex;flex-direction:column;align-items:flex-start;gap:10px;transition:transform .16s,border .16s}.quick-card:hover{transform:translateY(-2px);border-color:#9bbfe3}.quick-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:#edf5ff;color:#1768b3;font-size:19px}.quick-card strong{font:700 15px Manrope,sans-serif}.quick-card span:last-child{font-size:12px;color:var(--muted);line-height:1.45}.panel{padding:20px}.toolbar{display:grid;grid-template-columns:minmax(180px,1fr) 150px 160px auto;gap:10px;margin-bottom:16px}.toolbar select{border:1px solid #d7e1ed;border-radius:11px;padding:10px;background:white;color:#334861}.list{display:grid;gap:9px}.list-row{border:1px solid var(--line);border-radius:13px;padding:15px 16px;display:flex;justify-content:space-between;align-items:center;gap:14px}.list-main{min-width:0}.list-main strong{display:block;overflow-wrap:anywhere}.list-main small{display:block;color:var(--muted);margin-top:5px;line-height:1.5}.status{flex:none;border-radius:999px;padding:6px 10px;background:#eaf6f1;color:#18714f;font-size:11px;font-weight:700}.status.inactive{background:#f2f3f5;color:#697586}.empty{border:1px dashed #d5e0ed;border-radius:14px;padding:34px 18px;text-align:center;color:var(--muted);line-height:1.6}.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}.pager-info{font-size:12px;color:var(--muted);text-align:center}.profile-form{max-width:760px}.profile-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}.profile-grid .span2{grid-column:1/-1}.notice{padding:12px 14px;border-radius:11px;background:#f0f6fd;color:#4b6380;font-size:13px;line-height:1.55;margin-bottom:18px}.form-actions{display:flex;justify-content:flex-end;gap:9px;padding-top:12px}.mobile-nav{display:none}.toast{position:fixed;right:22px;bottom:22px;z-index:5;max-width:min(420px,calc(100vw - 32px));padding:13px 16px;border-radius:12px;background:#173d68;color:white;box-shadow:0 12px 28px #173c7030}.toast.error{background:#9f302a}.hidden{display:none!important}
@media(max-width:860px){.app-layout{grid-template-columns:1fr}.sidebar{display:none}.topbar{padding:0 18px}.content{padding:22px 16px 94px}.quick-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.mobile-nav{position:fixed;inset:auto 0 0;z-index:3;display:grid;grid-template-columns:repeat(4,1fr);gap:2px;padding:8px 8px max(8px,env(safe-area-inset-bottom));background:#fff;border-top:1px solid var(--line);box-shadow:0 -8px 24px #173c7010}.mobile-nav .nav-button{display:grid;justify-items:center;gap:3px;padding:7px 2px;color:#718198;font-size:10px}.mobile-nav .nav-icon{font-size:18px}.mobile-nav .nav-button.active{background:#edf5ff;color:var(--blue)}.toolbar{grid-template-columns:1fr 120px}.toolbar .status-filter{grid-column:1}.toolbar button{grid-column:2;grid-row:1}.toolbar .query{grid-column:1/-1;grid-row:2}.login-wrap{grid-template-columns:1fr}.login-brand{min-height:245px;padding:24px 25px}.brand-copy{margin:38px 0 12px}.brand-copy h1{font-size:34px;margin:9px 0}.brand-copy p{font-size:14px;margin:0}.brand-footer{display:none}.login-side{padding:28px 22px;align-items:start}.login-card h2{font-size:26px}.welcome{padding:20px}.welcome .welcome-icon{width:48px;height:48px}.list-row{align-items:flex-start}}
@media(max-width:520px){.quick-grid{grid-template-columns:1fr 1fr;gap:9px}.quick-card{padding:14px;min-height:135px}.toolbar{grid-template-columns:1fr 108px;gap:8px}.toolbar .size-filter{font-size:12px}.list-row{padding:13px;gap:8px}.status{font-size:10px;padding:5px 7px}.profile-grid{grid-template-columns:1fr}.profile-grid .span2{grid-column:auto}.page-heading{align-items:center}.panel{padding:14px}.pager{flex-wrap:wrap}.pager-info{order:-1;width:100%}}
.row-actions{display:flex;align-items:center;gap:7px;flex:none}.row-actions button{padding:7px 10px;font-size:11px}.notice-line{margin:-10px 0 16px}.form-dialog{border:0;padding:0;background:transparent;width:min(620px,calc(100% - 28px));max-width:620px;max-height:min(90vh,850px);overflow:visible}.form-dialog::backdrop{background:#0b1c32a8;backdrop-filter:blur(3px)}.dialog-card{position:relative;max-height:min(90vh,850px);overflow:auto;padding:28px;border:1px solid var(--line);border-radius:20px;background:#fff;box-shadow:0 24px 80px #07172b40}.dialog-close{position:absolute;top:16px;right:17px;width:36px;height:36px;border:0;border-radius:50%;background:#f0f4f8;color:#53667d;font-size:23px;line-height:1}.dialog-card h2{font:800 24px Manrope,sans-serif;letter-spacing:-.04em;margin:9px 40px 8px 0}.dialog-intro{color:var(--muted);font-size:13px;line-height:1.55;margin:0 0 17px}.dialog-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}.dialog-grid .field{margin:9px 0}.dialog-input-wrap{display:flex;position:relative}.dialog-input-wrap input{padding-right:44px}.password-toggle{position:absolute;right:5px;top:5px;height:36px;width:36px;border:0;border-radius:9px;background:transparent;color:#53667d}.field-hint{color:var(--muted);font-size:11px;line-height:1.45}.check-field{display:flex;align-items:center;gap:9px;padding:12px 0;font-weight:600;font-size:13px}.check-field input{accent-color:var(--blue);width:17px;height:17px}.confirm-summary{display:grid;gap:0;border:1px solid var(--line);border-radius:13px;padding:0 14px;margin:16px 0}.confirm-summary>div{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;padding:11px 0;border-bottom:1px solid var(--line);font-size:13px}.confirm-summary>div:last-child{border-bottom:0}.confirm-summary span{color:var(--muted)}.confirm-summary strong{text-align:right;overflow-wrap:anywhere}.dialog-card .form-actions{position:sticky;bottom:-28px;margin:16px -28px -28px;padding:14px 28px max(14px,env(safe-area-inset-bottom));background:#ffffffed;border-top:1px solid var(--line)}
@media(max-width:520px){.row-actions{flex-wrap:wrap;justify-content:flex-end}.row-actions .status{width:100%;text-align:center}.row-actions button{font-size:10px;padding:7px}.dialog-card{padding:22px 18px;border-radius:18px}.dialog-grid{grid-template-columns:1fr}.dialog-card .form-actions{bottom:-22px;margin:15px -18px -22px;padding:12px 18px max(12px,env(safe-area-inset-bottom))}.form-dialog{width:calc(100% - 18px)}}
.student-journal-form{margin-bottom:28px}.student-journal-form h2,.journal-history h2{margin:0 0 6px;font:800 21px Manrope,sans-serif;letter-spacing:-.03em}.journal-history .page-heading{align-items:center;margin-bottom:14px}.journal-card{padding:18px 20px}.journal-card-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.journal-card-top strong{font:700 15px Manrope,sans-serif}.journal-copy{margin-top:15px}.journal-copy small{font-size:11px;color:var(--muted);font-weight:700}.journal-copy p{margin:4px 0 12px;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere}.teacher-note{margin-top:10px;padding:12px 14px;border-radius:11px;background:#edf5ff;color:#234a73;font-size:13px;line-height:1.5}.teacher-note.stars{background:#fff7e5;color:#946100;font-weight:700;letter-spacing:.08em}.journal-actions{display:flex;justify-content:flex-end;margin-top:13px}.status.needs-revision{background:#fff1e9;color:#a54e13}.status.waiting{background:#fff7e5;color:#8b6410}.confirm-dialog{width:min(560px,calc(100vw - 28px));border:1px solid var(--line);border-radius:18px;padding:25px;box-shadow:0 24px 80px #172d4b38}.confirm-dialog::backdrop{background:#10243b66;backdrop-filter:blur(3px)}.confirm-dialog h2{margin:8px 0;font:800 25px Manrope,sans-serif}.confirm-dialog p{color:var(--muted);line-height:1.6}.confirm-dialog .confirm-summary{display:grid;gap:8px;margin:16px 0;border:0;padding:0}.confirm-dialog .confirm-summary div{display:grid;grid-template-columns:90px 1fr;gap:12px;padding:10px;background:#f5f8fc;border-radius:10px;font-size:12px}.confirm-dialog .confirm-summary span{color:var(--muted)}.confirm-dialog .confirm-summary strong{text-align:left;overflow-wrap:anywhere}.student-layout .sidebar{position:fixed;width:258px}.student-layout .workspace{grid-column:2}.student-layout .sidebar .nav-list{flex:1}.student-layout .sidebar-bottom{margin-top:auto}.journal-feedback{min-height:22px}
@media(max-width:860px){.student-layout .sidebar{display:none}.student-layout .workspace{grid-column:1}.student-layout .mobile-nav{grid-template-columns:repeat(2,1fr)}.student-layout .topbar .logout{display:none}}
@media(max-width:520px){.journal-card{padding:15px}.confirm-dialog{padding:19px}.confirm-dialog .form-actions{flex-wrap:wrap}.journal-history .page-heading{align-items:flex-start}}
.attendance-card{padding:22px;margin-bottom:28px}.attendance-date{display:flex;align-items:center;gap:13px}.attendance-date>div{display:grid;gap:5px;flex:1}.attendance-date strong{font:700 17px Manrope,sans-serif}.attendance-date small{color:var(--muted)}.attendance-symbol{width:48px;height:48px;display:grid;place-items:center;border-radius:15px;background:linear-gradient(145deg,#e3f1ff,#d9f4e8);color:#1768b3;font-size:27px}.attendance-status{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:22px 0 14px}.attendance-status>div{display:grid;gap:7px;padding:15px;border:1px solid var(--line);border-radius:13px;background:#fbfdff}.attendance-status small,.attendance-row small{color:var(--muted);font-size:12px}.attendance-status strong{font-size:15px}.attendance-guidance{padding:12px 14px;border-radius:11px;background:#eff6ff;color:#315577;font-size:13px;line-height:1.55}.attendance-actions{display:flex;gap:10px;margin-top:16px}.attendance-row{display:grid;grid-template-columns:1.2fr auto 1fr 1fr;align-items:center;gap:16px;padding:16px;margin-bottom:10px}.attendance-row>div{display:grid;gap:5px}.attendance-row .status{justify-self:start}.attendance-progress{width:min(360px,calc(100vw - 32px));border:0;border-radius:22px;padding:28px;text-align:center;box-shadow:0 24px 80px #11274440}.attendance-progress::backdrop{background:#0e244066;backdrop-filter:blur(4px)}.attendance-progress-body h2{font:800 20px Manrope,sans-serif;margin:18px 0 6px}.attendance-progress-body p{color:var(--muted);line-height:1.6;font-size:13px}.attendance-loader{height:48px;display:flex;align-items:center;justify-content:center;gap:7px}.attendance-loader i{width:10px;height:10px;border-radius:50%;background:#237fc0;animation:attendance-bounce .8s ease-in-out infinite alternate}.attendance-loader i:nth-child(2){background:#25a578;animation-delay:.16s}.attendance-loader i:nth-child(3){background:#f1b83a;animation-delay:.32s}@keyframes attendance-bounce{to{transform:translateY(-11px);opacity:.55}}.attendance-result{text-align:center}.result-icon{width:58px;height:58px;margin:0 auto 10px;display:grid;place-items:center;border-radius:50%;font-size:30px;font-weight:800}.result-icon.ok{background:#e5f6ee;color:#18845d}.result-icon.warn{background:#fff1e8;color:#b45b21}.attendance-result .result-copy{line-height:1.6}.attendance-result .result-close{min-width:120px}.student-content .pager{margin-top:12px}
@media(max-width:860px){.student-layout .mobile-nav{grid-template-columns:repeat(3,1fr)}}@media(max-width:560px){.attendance-card{padding:16px}.attendance-status{gap:8px}.attendance-status>div{padding:11px}.attendance-actions{flex-direction:column}.attendance-actions button{width:100%}.attendance-row{grid-template-columns:1fr auto;gap:9px 12px}.attendance-row>div{grid-column:1/-1;display:flex;justify-content:space-between;border-top:1px solid var(--line);padding-top:8px}.attendance-row .status{grid-column:2;grid-row:1}.attendance-row strong{grid-column:1;grid-row:1}}
.teacher-toolbar{grid-template-columns:minmax(180px,1fr) 170px auto}.teacher-student-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px}.teacher-student-info{min-width:0;display:grid;gap:7px}.teacher-student-info small{color:var(--muted);line-height:1.5}.teacher-student-title{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.teacher-student-title strong{font:700 16px Manrope,sans-serif}.pending-badge{padding:6px 10px;border-radius:999px;background:#fff2e5;color:#9a4c00;font-size:11px;font-weight:700}.star-picker{display:flex;gap:7px}.star-choice{border:0;background:#f1f4f8;color:#a8b1bd;border-radius:10px;width:44px;height:42px;font-size:25px}.star-choice.selected{background:#fff5d9;color:#e7a800}.teacher-layout .sidebar{position:fixed;width:258px}.teacher-layout .workspace{grid-column:2}.teacher-layout .sidebar .nav-list{flex:1}.teacher-layout .sidebar-bottom{margin-top:auto}
@media(max-width:860px){.teacher-layout .sidebar{display:none}.teacher-layout .workspace{grid-column:1}.teacher-layout .mobile-nav{grid-template-columns:repeat(2,1fr)}.teacher-layout .topbar .logout{display:none}.teacher-toolbar{grid-template-columns:1fr 130px}.teacher-toolbar .search-students{grid-column:2;grid-row:1}.teacher-toolbar .student-search{grid-column:1/-1;grid-row:2}}
@media(max-width:560px){.teacher-student-row{align-items:flex-start;flex-direction:column}.teacher-student-row .view-journals{width:100%}.teacher-student-title{align-items:flex-start;flex-direction:column;gap:6px}.star-choice{width:40px;height:40px}}
.drive-settings{max-width:850px}.drive-state{display:flex;align-items:center;gap:14px;padding:18px;border:1px solid var(--line);border-radius:15px;background:#f8fbff}.drive-state.connected{border-color:#b8e2ce;background:#f3fbf7}.drive-state-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:14px;background:#e8f2ff;color:var(--blue);font-size:22px;font-weight:800}.drive-state.connected .drive-state-icon{background:#ddf3e8;color:#18714f}.drive-state-copy{margin:4px 0 0;color:var(--muted);font-size:13px;overflow-wrap:anywhere}.drive-folder{display:flex;align-items:center;gap:13px;margin-top:14px;padding:15px;border-radius:14px;background:#f5f8fc}.drive-folder-icon{font-size:25px}.drive-folder div{display:grid;gap:4px;min-width:0}.drive-folder small{color:var(--muted)}.drive-folder strong,.drive-folder code{overflow-wrap:anywhere}.drive-folder code{font-size:11px;color:var(--muted)}.drive-actions{display:flex;flex-wrap:wrap;align-items:center;gap:9px;margin-top:18px}.drive-config-hint{display:block;margin-top:12px}
@media(max-width:560px){.drive-actions{display:grid;grid-template-columns:1fr}.drive-actions button{width:100%}}
