:root{--bg:#e8efe8;--bg-accent:#d5e4d8;--ink:#163028;--muted:#4d675c;--panel:#fffbf5eb;--line:#b7c9bc;--accent:#0f6b4c;--accent-ink:#f4fff8;--danger:#9b2c2c;--ok:#146c43;--shadow:0 18px 50px #1630281f;color:var(--ink);background:var(--bg);font-family:Manrope,sans-serif;font-weight:500;line-height:1.45}*{box-sizing:border-box}html,body,#root{width:100%;min-height:100%;margin:0;overflow-x:hidden}body{background:radial-gradient(circle at 12% 10%,#f3f7e8 0,#0000 42%),radial-gradient(circle at 88% 0,#cfe3d5 0,#0000 40%),linear-gradient(160deg,#eef4ee,#d9e7dc 55%,#c9dbd0);min-height:100vh;margin:0}h1,h2,.brand-title{letter-spacing:-.02em;margin:0 0 .4rem;font-family:Fraunces,Georgia,serif;font-weight:700}button,input{font:inherit}button{background:var(--accent);color:var(--accent-ink);cursor:pointer;border:0;border-radius:10px;padding:.75rem 1.1rem;font-weight:700}button:disabled{opacity:.6;cursor:not-allowed}button.ghost{color:var(--ink);border:1px solid var(--line);background:0 0}button.linkish{color:var(--accent);background:0 0;border-radius:0;padding:0;font-weight:700}input{border:1px solid var(--line);width:100%;color:var(--ink);background:#fff;border-radius:10px;margin-top:.35rem;padding:.7rem .85rem}input.masked-password,input[type=password]{-webkit-text-security:disc;text-security:disc}label{font-size:.92rem;font-weight:600;display:block}.eyebrow{text-transform:uppercase;letter-spacing:.14em;color:var(--muted);margin:0 0 .6rem;font-size:.72rem;font-weight:700}.brand-lockup{align-items:center;gap:.5rem;display:inline-flex}.auth-brand-lockup{margin-bottom:.25rem}.brand-logo{object-fit:contain;border-radius:8px;width:32px;height:32px}.lede,.muted{color:var(--muted)}.auth-shell{place-items:center;min-height:100vh;padding:1.5rem;display:grid}.auth-panel{background:var(--panel);border:1px solid var(--line);width:min(440px,100%);box-shadow:var(--shadow);border-radius:22px;padding:2rem 1.6rem}.brand-title{font-size:clamp(2rem,6vw,2.7rem)}.stack-form{gap:.9rem;margin-top:1.4rem;display:grid}.error{color:var(--danger);margin:0}.notice-soft{color:#5a6b63;background:#7a90861f;border:1px solid #7a908647;border-radius:10px;margin:0;padding:.7rem .85rem;font-size:.92rem;line-height:1.45}.success{color:var(--ok);margin:0 0 1rem;font-weight:600}.app-shell{box-sizing:border-box;width:100%;max-width:100%;min-height:100vh;padding:1.25rem 1.5rem;overflow-x:hidden}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;min-width:0;margin-bottom:1.25rem;display:flex}.topbar>div:first-child{flex:140px;min-width:0}.topbar h1{word-break:break-word;font-size:clamp(1.35rem,5vw,2rem)}.topbar-meta{flex-wrap:wrap;align-items:center;gap:.65rem;max-width:100%;display:flex}.topbar-meta>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;overflow:hidden}.password-warning{color:#9b2c2c;box-sizing:border-box;background:#fde8e8;border:1px solid #e3a4a4;border-radius:12px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1rem;max-width:100%;margin:0 0 .85rem;padding:.75rem .95rem;font-size:.92rem;font-weight:600;display:flex}.password-warning-link{color:#9b2c2c;white-space:nowrap;font-weight:800;text-decoration:underline}.password-warning-link:hover{color:#7a1f1f}.content{gap:1rem;width:100%;min-width:0;max-width:100%;display:grid;overflow-x:hidden}.panel{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);box-sizing:border-box;border-radius:18px;min-width:0;max-width:100%;padding:1.2rem 1.15rem;overflow-x:hidden}.inline-form,.grid-form{gap:.85rem;margin:.8rem 0 1rem;display:grid}.grid-form{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.grid-form .form-span-all{grid-column:1/-1}.file-btn{background:var(--accent);color:var(--accent-ink);cursor:pointer;border-radius:10px;width:fit-content;margin-top:.75rem;padding:.75rem 1.1rem;font-weight:700;display:inline-flex}.simple-list{gap:.45rem;margin:.5rem 0 0;padding:0;list-style:none;display:grid}.table-wrap{margin-top:.75rem;overflow:auto}table{border-collapse:collapse;width:100%;font-size:.92rem}th,td{text-align:left;border-bottom:1px solid var(--line);padding:.55rem .4rem}.qr-panel{text-align:center}.qr-frame{border:1px solid var(--line);background:#fff;border-radius:16px;place-items:center;margin:.8rem 0;padding:1rem;display:inline-grid}.detail-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.85rem;margin:.8rem 0 0;display:grid}.detail-grid .full{grid-column:1/-1}.detail-grid dt{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-size:.75rem}.detail-grid dd{margin:.2rem 0 0;font-weight:600}.scanner-wrap{box-sizing:border-box;gap:.75rem;width:100%;min-width:0;max-width:min(480px,100%);margin:0 auto;display:grid;overflow:hidden}.zoom-control{gap:.35rem;width:100%;min-width:0;max-width:100%;display:grid}.zoom-control-label{color:var(--ink);font-size:.88rem;font-weight:600}.zoom-control input[type=range]{width:100%;max-width:100%;height:1.5rem;accent-color:var(--accent);box-sizing:border-box;background:0 0;border:none;border-radius:0;margin:0;padding:0}.scanner-hint{text-align:center;margin:0;font-size:.82rem}#qr-reader,#qr-reader.qr-reader-zoomable{box-sizing:border-box;border-radius:12px;min-width:0;overflow:hidden;width:100%!important;max-width:100%!important}#qr-reader video,#qr-reader canvas,#qr-reader img,#qr-reader>div,#qr-reader__scan_region,#qr-reader__dashboard_section,#qr-reader__dashboard_section_csr,#qr-reader__dashboard_section_swaplink{box-sizing:border-box;width:100%!important;max-width:100%!important}#qr-reader video,#qr-reader canvas,#qr-reader img{object-fit:cover;height:auto!important}#qr-reader.qr-reader-zoomable video,#qr-reader.qr-reader-zoomable canvas{transition:transform .12s ease-out}.mark-attendance-btn{box-sizing:border-box;width:100%;min-width:0;max-width:100%;margin-top:0;padding:.7rem 1.1rem;font-size:.95rem;display:block}.student-home-panel{width:100%;max-width:min(560px,100%);margin-left:auto;margin-right:auto;position:relative;overflow-x:hidden}.student-home-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:.75rem;min-width:0;margin-bottom:1rem;display:flex;position:relative}.student-home-head>div:first-child{flex:1;min-width:0}.student-home-name{overflow-wrap:anywhere;margin:0;font-family:Fraunces,Georgia,serif;font-size:clamp(1.1rem,4.5vw,1.35rem);font-weight:700;line-height:1.2}.student-mark-block{justify-content:center;width:100%;min-width:0;max-width:100%;margin-bottom:1.1rem;display:flex;overflow:hidden}.student-recent-block{color:#7a9086;border-top:1px solid #b7c9bc8c;min-width:0;max-width:100%;margin-top:.35rem;padding-top:.85rem;overflow:hidden}.attendance-line{color:#7a9086;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid #b7c9bc73;max-width:100%;padding:.5rem 0;font-size:.88rem;line-height:1.35;overflow:hidden}.attendance-line:last-child{border-bottom:none}.user-icon-btn{width:42px;height:42px;color:var(--ink);border:1px solid var(--line);background:#ffffffb3;border-radius:50%;flex-shrink:0;place-items:center;padding:0;display:grid}.user-icon-btn.is-open,.user-icon-btn:hover{border-color:var(--accent);color:var(--accent)}.user-icon-btn.needs-profile{position:relative}.user-icon-btn.needs-profile:after{content:"";border:1.5px solid var(--panel);background:#c45c26;border-radius:50%;width:8px;height:8px;position:absolute;top:4px;right:4px}.student-details-popover{z-index:20;border:1px solid var(--line);background:var(--panel);box-sizing:border-box;border-radius:14px;flex-basis:100%;max-width:100%;max-height:min(75vh,620px);margin-top:.15rem;padding:.85rem .95rem;position:static;overflow-y:auto;box-shadow:0 10px 28px #281c121f}.student-details-popover h3{margin:0 0 .35rem;font-size:1rem}.profile-complete-actions{border-top:1px solid var(--line);gap:.55rem;margin-top:.75rem;padding-top:.65rem;display:grid}.profile-complete-actions button{width:100%}.profile-complete-form{border-top:1px solid var(--line);gap:.55rem;margin-top:.75rem;padding-top:.65rem}.profile-complete-form .panel-actions{margin-top:.15rem}.sex-radio-fieldset{border:none;min-width:0;margin:0;padding:0}.sex-radio-fieldset legend{color:#4d675c;margin:0 0 .35rem;padding:0;font-size:.9rem}.sex-radio-row{flex-wrap:wrap;gap:.65rem 1.1rem;display:flex}.sex-radio-option{cursor:pointer;align-items:center;gap:.4rem;margin:0;font-weight:500;display:inline-flex}.sex-radio-option input{width:auto;margin:0}.student-recent-block .tight-head{align-items:baseline;margin-bottom:.35rem}.student-recent-block h2{color:#7a9086;margin:0;font-size:.95rem;font-weight:600}.student-recent-block .muted{color:#9aada4}.student-attendance-list{max-width:100%;margin:.15rem 0 0;padding:0;list-style:none;overflow:hidden}.compact-details{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.45rem .75rem;margin:.45rem 0 0}.compact-details dt{letter-spacing:.06em;font-size:.65rem}.compact-details dd{font-size:.86rem;font-weight:600;line-height:1.25}.report-filters{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.85rem;margin:.75rem 0 1rem;display:grid}.report-selected-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:.75rem;display:flex}.report-export-actions{flex-wrap:wrap;flex-shrink:0;gap:.55rem;display:flex}.report-selected-head .danger-btn{flex-shrink:0}.manage-date-row{margin:.75rem 0 .85rem}.manage-date-field{gap:.35rem;max-width:200px;display:grid}.manage-date-field input[type=date]{width:100%}.manage-actions{flex-wrap:wrap;align-items:flex-start;gap:.65rem;margin-bottom:0;display:flex}.panel-head .manage-actions{padding-top:.15rem}.manage-event-list{margin:.15rem 0 0;padding:0;list-style:none}.manage-event-option{cursor:pointer;width:100%;color:var(--ink);border-bottom:1px solid #b7c9bc73;align-items:center;gap:.65rem;padding:.5rem 0;display:flex}.manage-event-list li:last-child .manage-event-option{border-bottom:none}.manage-event-option input[type=radio]{width:auto;min-width:1rem;accent-color:var(--accent);background:0 0;border:none;flex-shrink:0;margin:0;padding:0}.manage-event-text{min-width:0;color:var(--ink);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:.92rem;line-height:1.35;overflow:hidden}.manage-event-option.is-locked{opacity:.55;cursor:not-allowed;background:#b7c9bc2e;border-radius:8px;padding-left:.35rem;padding-right:.35rem}.manage-merge-hint{margin:0 0 .65rem}.report-filters select{border:1px solid var(--line);width:100%;color:var(--ink);font:inherit;background:#fff;border-radius:10px;margin-top:.35rem;padding:.7rem .85rem}.card-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem;display:grid}.admin-home{width:100%;max-width:1100px;margin:0 auto}.admin-home-intro{margin:0 0 1.15rem}.admin-home-intro h2{letter-spacing:-.02em;margin:0 0 .25rem;font-family:Fraunces,Georgia,serif;font-size:clamp(1.55rem,2.4vw,1.9rem);font-weight:700}.admin-home-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.notice-board-layout{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:1.25rem;max-width:1180px;margin:.5rem 0 0;display:grid}.notice-compose-box{background:linear-gradient(135deg, #0f6b4c0d, transparent 55%), var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-left:3px solid #0f6b4c73;border-radius:14px;min-width:0;margin:0;padding:1.15rem 1.2rem 1.25rem}.notice-published-box{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-left:3px solid #64748b59;border-radius:14px;flex-direction:column;min-width:0;min-height:320px;max-height:min(640px,100vh - 10rem);margin:0;padding:1.15rem 1.2rem 1rem;display:flex}.notice-published-box .notice-list-heading{flex-shrink:0;margin:0 0 .75rem}.notice-list-scroll{scrollbar-width:thin;scrollbar-color:#0f6b4c59 transparent;flex:1;min-height:0;padding-right:.35rem;overflow:hidden auto}.notice-list-scroll::-webkit-scrollbar{width:8px}.notice-list-scroll::-webkit-scrollbar-thumb{background:#0f6b4c59;border-radius:999px}.notice-compose-box .notice-kind-tabs{margin-top:0}.notice-compose-box .notice-form{margin-bottom:0}.notice-form-row-stacked{grid-template-columns:1fr}.notice-kind-tabs{flex-wrap:wrap;gap:.5rem;margin:.75rem 0 1.1rem;display:flex}.notice-kind-tab{color:var(--ink);border:1px solid var(--line);background:0 0;border-radius:999px;padding:.45rem .95rem;font-weight:600}.notice-kind-tab.active{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.notice-form textarea{border:1px solid var(--line);width:100%;color:var(--ink);font:inherit;resize:vertical;background:#fff;border-radius:10px;margin-top:.35rem;padding:.7rem .85rem}.notice-form-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;display:grid}.notice-form-row-single{grid-template-columns:minmax(0,1fr);max-width:33%}.notice-switch-label{flex-direction:column;justify-content:flex-end;gap:.35rem;display:flex}.notice-switch-row{align-items:center;gap:.6rem;min-height:2.55rem;display:flex}.notice-switch{appearance:none;border:1px solid var(--line);cursor:pointer;background:#d7dde6;border-radius:999px;width:2.6rem;height:1.45rem;margin:0;transition:background .15s;position:relative}.notice-switch:after{content:"";background:#fff;border-radius:50%;width:1.1rem;height:1.1rem;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #0003}.notice-switch:checked{background:#c62828;border-color:#b71c1c}.notice-switch:checked:after{transform:translate(1.15rem)}.notice-list-item-highlight{background:#fdecea;border-color:#ef9a9a}.notice-highlight-badge{color:#fff;vertical-align:middle;background:#c62828;border-radius:999px;margin-left:.5rem;padding:.1rem .45rem;font-size:.72rem;font-weight:700;display:inline-block}@media (width<=960px){.notice-board-layout{grid-template-columns:1fr;max-width:780px}.notice-published-box{max-height:min(480px,55vh)}}@media (width<=800px){.notice-form-row{grid-template-columns:1fr}.notice-form-row-single{max-width:none}}.notice-list-heading{margin:1.4rem 0 .6rem;font-size:1.05rem}.notice-list{gap:.65rem;margin:0;padding:0;list-style:none;display:grid}.notice-published-box .notice-list-item{flex-direction:column;align-items:stretch;gap:.65rem}.notice-published-box .notice-list-actions{justify-content:flex-start}.notice-list-item{border:1px solid var(--line);background:var(--panel);border-radius:12px;justify-content:space-between;align-items:flex-start;gap:1rem;padding:.85rem 1rem;display:flex}.notice-list-actions{flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;align-items:center;gap:.35rem;display:flex}.notice-show-toggle{color:var(--muted,#667085);flex-direction:column;align-items:flex-start;gap:.2rem;margin-right:.35rem;font-size:.85rem;display:flex}.notice-show-toggle .notice-switch-row{min-height:0}.nav-card{text-align:left;background:var(--panel);color:var(--ink);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:18px;gap:.35rem;padding:1.35rem 1.2rem;transition:transform .15s,border-color .15s,box-shadow .15s;display:grid}.nav-card:hover{border-color:var(--accent);transform:translateY(-2px)}.admin-nav-card{background:linear-gradient(135deg, #0f6b4c0f, transparent 42%), var(--panel);border-left:3px solid #0f6b4c59;grid-template-rows:auto auto 1fr auto;gap:.4rem;min-height:168px;padding:1.25rem 1.25rem 1.1rem 1.35rem;position:relative;overflow:hidden}.admin-nav-card:hover{border-left-color:var(--accent);box-shadow:0 16px 36px #16302824}.admin-nav-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.nav-card-index{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:.72rem;font-weight:700}.nav-card-label{font-family:Fraunces,Georgia,serif;font-size:1.35rem;font-weight:700}.admin-nav-card .nav-card-label{margin-top:.1rem;font-size:clamp(1.35rem,2vw,1.55rem);line-height:1.15}.nav-card-desc{color:var(--muted);max-width:28ch;font-size:.92rem;line-height:1.35}.nav-card-footer{border-top:1px solid #b7c9bcb3;justify-content:space-between;align-items:baseline;gap:.75rem;margin-top:.55rem;padding-top:.75rem;display:flex}.nav-card-meta{color:var(--accent);font-weight:700}.nav-card-meta-soft{color:var(--muted);font-size:.9rem;font-weight:600}.nav-card-go{color:var(--ink);white-space:nowrap;opacity:.72;font-size:.88rem;font-weight:700;transition:opacity .15s,transform .15s}.admin-nav-card:hover .nav-card-go{opacity:1;color:var(--accent);transform:translate(2px)}@media (width<=900px){.admin-home-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=720px){.admin-home-grid{grid-template-columns:1fr}.admin-nav-card{min-height:0}}.panel-head{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.75rem;display:flex}.back-btn{margin-bottom:.55rem;padding:.4rem .75rem;font-size:.88rem}.icon-plus{border-radius:50%;flex-shrink:0;width:44px;height:44px;padding:0;font-size:1.6rem;line-height:1}.add-box{border:1px dashed var(--line);background:#ffffff8c;border-radius:14px;margin-bottom:1rem;padding:1rem}.list-row{border-bottom:1px solid var(--line);justify-content:space-between;gap:1rem;padding:.65rem 0;display:flex}.instructor-manage-list{margin:0;padding:0;list-style:none}.instructor-row{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1rem;min-width:0;padding:.55rem 0;display:flex}.instructor-row.is-suspended .instructor-display-name{color:var(--muted)}.instructor-display-name{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-size:.95rem;overflow:hidden}.instructor-display-name-btn{text-align:left;min-width:0;color:inherit;font-weight:inherit;cursor:pointer;background:0 0;border:0;border-radius:0;flex:auto;align-items:baseline;gap:.35rem;padding:0;display:flex}.instructor-display-name-btn:hover .instructor-display-name{color:var(--accent);text-decoration:underline}.instructor-sessions-panel{border:1px solid var(--line);background:#ffffff8c;border-radius:12px;flex:100%;width:100%;margin-top:.15rem;padding:.65rem .75rem}.instructor-sessions-panel h4{margin:0;font-family:Fraunces,Georgia,serif;font-size:.95rem}.instructor-sessions-list{max-height:260px;margin:.35rem 0 0;padding:0;list-style:none;overflow:auto}.instructor-session-line{border-bottom:1px solid #b7c9bc73;gap:.12rem;padding:.45rem 0;font-size:.88rem;display:grid}.instructor-session-line:last-child{border-bottom:none}.badge-session-open{color:var(--ok);font-size:.72rem;font-weight:700}.instructor-row-controls{flex-shrink:0;align-items:center;gap:.4rem;display:flex}.instructor-row-controls .ghost{padding:.3rem .6rem;font-size:.82rem}.instructor-rename-inline{flex:auto;align-items:center;gap:.4rem;min-width:0;display:flex}.instructor-rename-inline input{flex:auto;min-width:0;max-width:220px}.instructor-rename-inline button{padding:.3rem .6rem;font-size:.82rem}.active-switch{cursor:pointer;-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:.35rem;display:inline-flex;position:relative}.active-switch-text{color:var(--muted);font-size:.78rem;font-weight:700}.instructor-row.is-suspended .active-switch-text{color:var(--danger)}.active-switch input{opacity:0;width:0;height:0;position:absolute}.active-switch-slider{border:1px solid var(--line);background:#c5d3ca;border-radius:999px;flex-shrink:0;width:38px;height:22px;transition:background .15s;position:relative}.active-switch-slider:after{content:"";background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .15s;position:absolute;top:1px;left:2px;box-shadow:0 1px 3px #16302840}.active-switch input:checked+.active-switch-slider{background:var(--accent);border-color:var(--accent)}.active-switch input:checked+.active-switch-slider:after{transform:translate(16px)}@media (width<=560px){.instructor-row{flex-wrap:wrap}.instructor-display-name,.instructor-rename-inline{flex:100%}.instructor-row-controls{margin-left:auto}}.badge-default-pw{white-space:nowrap;color:#8a5a10;background:#fff4df;border:1px solid #e4c58a;border-radius:999px;padding:.2rem .45rem;font-size:.72rem;font-weight:700}.empty-hint{margin-top:.85rem}.panel-actions{flex-wrap:wrap;align-items:center;gap:.55rem;display:flex}.csv-import-box h3,.table-wrap h3{margin:0 0 .35rem;font-family:Fraunces,Georgia,serif}.csv-import-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.75rem;display:flex}.csv-example{border:1px solid var(--line);background:#ffffffb3;border-radius:10px;margin:.55rem 0;padding:.7rem .8rem;font-size:.85rem;overflow-x:auto}.csv-header-guide{gap:.35rem;margin:.55rem 0 .85rem;display:grid}.csv-header-guide code{color:var(--ink);border:1px solid var(--line);background:#ffffffbf;border-radius:6px;padding:.05rem .35rem;font-size:.84rem;font-weight:650}.csv-download-box{margin-top:.75rem}.csv-download-toolbar{gap:.5rem;margin:.35rem 0 .65rem;display:flex}.csv-download-toolbar .tight-btn{padding:.25rem .55rem;font-size:.82rem}.csv-download-fields{border:1px solid var(--line);background:#ffffffa6;border-radius:10px;grid-template-columns:repeat(auto-fill,minmax(11.5rem,1fr));gap:.45rem 1rem;margin:0 0 1rem;padding:.75rem .85rem;display:grid}.csv-download-field{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.45rem;font-size:.88rem;display:flex}.csv-download-field input{accent-color:var(--accent);margin:0}.progress-track{background:#d7e4db;border-radius:999px;height:10px;margin:.5rem 0 .35rem;overflow:hidden}.progress-fill{background:var(--accent);height:100%;transition:width .2s}.status-pill{text-transform:uppercase;letter-spacing:.04em;border-radius:999px;padding:.15rem .5rem;font-size:.78rem;font-weight:700;display:inline-block}.status-pending{color:var(--muted);background:#e8efe8}.status-inserting{color:#8a6d00;background:#fff4d6}.status-created{color:var(--ok);background:#d8f3e3}.status-skipped{color:#555;background:#e8e8e8}.status-error{color:var(--danger);background:#f8d7da}.status-updating{color:#8a6d1a;background:#fff4d6}.status-updated{color:#1b6b45;background:#d8f3e3}.row-status-inserting,.row-status-updating{background:#fff4d673}.row-status-created,.row-status-updated{background:#d8f3e359}.row-status-error{background:#f8d7da59}.list-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.85rem;margin-bottom:.65rem;display:flex}.list-toolbar h3{margin:0}.instructor-list-toolbar{margin-top:.35rem;margin-bottom:.35rem}.search-input{width:min(320px,100%);margin-top:0}.students-split{grid-template-columns:minmax(0,1.4fr) minmax(260px,.9fr);align-items:start;gap:1rem;display:grid}.students-layout{grid-template-columns:minmax(0,1fr) minmax(320px,400px);align-items:start;gap:1rem;width:100%;display:grid}.students-main-panel,.students-list-pane{width:100%;min-width:0}.student-row{cursor:pointer}.student-row:hover{background:#0f6b4c0f}.student-row.is-selected{background:#0f6b4c1f}.student-detail-card{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:18px;justify-self:stretch;width:100%;min-height:220px;padding:1.1rem 1rem;position:sticky;top:1rem}.student-detail-head{justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.85rem;display:flex}.student-detail-head h3,.student-detail-empty h3{margin:0;font-family:Fraunces,Georgia,serif}.student-detail-empty{text-align:center;place-content:center;gap:.4rem;min-height:180px;display:grid}.detail-actions{flex-wrap:wrap;gap:.55rem;margin-bottom:.9rem;display:flex}.detail-actions-bottom{border-top:1px solid var(--line);margin-top:1rem;margin-bottom:0;padding-top:.85rem}.student-detail-compact{grid-template-columns:repeat(2,minmax(0,1fr));gap:.4rem .75rem;margin:0}.student-detail-compact dt{font-size:.62rem}.student-detail-compact dd{word-break:break-word;font-size:.84rem;font-weight:600;line-height:1.25}.student-detail-compact .full{grid-column:1/-1}.student-faculty-block{border-top:1px solid var(--line);margin-top:.85rem;padding-top:.85rem}.student-attendance-panel{border-top:1px solid var(--line);margin-top:1rem;padding-top:.85rem}.student-attendance-panel h4{margin:0;font-family:Fraunces,Georgia,serif;font-size:1rem}.student-attendance-admin-list{max-height:280px;margin:.35rem 0 0;padding:0;list-style:none;overflow:auto}.attendance-admin-line{border-bottom:1px solid #b7c9bc73;gap:.15rem;padding:.55rem 0;font-size:.88rem;display:grid}.attendance-admin-line:last-child{border-bottom:none}.attendance-admin-line.is-flagged strong{color:var(--danger)}.danger-btn{color:#fff7f7;background:#9b2c2c}button.update-csv-btn{color:#fff8f8;background:#c43c3c;border:1px solid #a82f2f}button.update-csv-btn:hover:not(:disabled){background:#a82f2f}button.update-csv-btn:disabled{opacity:.55}.csv-bulk-warning{color:#8a1f1f;background:#fdecec;border:1px solid #e0a0a0;border-radius:8px;margin:0 0 .75rem;padding:.65rem .8rem;font-size:.92rem;line-height:1.4}.detail-edit-form{margin-top:.25rem}.events-home-panel,.create-event-panel,.session-screen{box-sizing:border-box;width:100%;max-width:980px;min-height:520px;margin-left:auto;margin-right:auto}.instructor-recent-list{margin:.25rem 0 0;padding:0;list-style:none}.instructor-home-tabs{border-bottom:1px solid #b7c9bca6;gap:0;margin:0 0 1rem;display:flex}.instructor-home-tab{appearance:none;font:inherit;color:#7a9086;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;margin-bottom:-1px;padding:.55rem 1rem .5rem;font-size:.92rem;font-weight:600;transition:color .15s,border-color .15s}.instructor-home-tab:hover{color:var(--ink)}.instructor-home-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.instructor-chats{margin-top:.35rem}.instructor-chat-list{flex-direction:column;gap:.35rem;margin:.5rem 0 0;padding:0;list-style:none;display:flex}.instructor-chat-row{text-align:left;cursor:pointer;background:#f7faf7;border:1px solid #b7c9bc8c;border-radius:10px;justify-content:space-between;align-items:flex-start;gap:.75rem;width:100%;padding:.7rem .85rem;display:flex}.instructor-chat-row:hover{background:#eef4ee}.instructor-chat-row-main{flex-direction:column;gap:.15rem;min-width:0;display:flex}.instructor-chat-preview{color:#4a5c52;text-overflow:ellipsis;white-space:nowrap;max-width:36rem;font-size:.86rem;overflow:hidden}.instructor-chat-row-meta{color:#6b7c72;flex-shrink:0;align-items:center;gap:.35rem;font-size:.78rem;display:flex}.instructor-chat-thread-head{align-items:flex-start;gap:.75rem;margin-bottom:.65rem;display:flex}.instructor-chat-thread-title{flex:1;min-width:0}.instructor-chat-list-head{justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.35rem;display:flex}.instructor-chat-list-head .muted{margin:0}.chat-refresh-btn{border-radius:8px;flex-shrink:0;min-width:2rem;padding:.2rem .45rem;font-size:1.15rem;line-height:1}.chat-refresh-btn:disabled{opacity:.55}.instructor-chat-messages{border-top:1px solid #b7c9bc73;border-bottom:1px solid #b7c9bc73;flex-direction:column;gap:.45rem;max-height:min(52vh,420px);padding:.5rem .15rem .75rem;display:flex;overflow-y:auto}.instructor-chat-bubble{border-radius:12px;max-width:min(85%,28rem);padding:.55rem .75rem .4rem;font-size:.92rem;line-height:1.4}.instructor-chat-bubble p{white-space:pre-wrap;word-break:break-word;margin:0}.instructor-chat-bubble span{opacity:.7;margin-top:.3rem;font-size:.72rem;display:block}.instructor-chat-bubble.theirs{background:#eef4ee;border:1px solid #b7c9bc8c;border-bottom-left-radius:4px;align-self:flex-start}.instructor-chat-bubble.mine{background:#0f6b4c1f;border:1px solid #0f6b4c47;border-bottom-right-radius:4px;align-self:flex-end}.instructor-chat-compose{gap:.5rem;margin-top:.75rem;display:flex}.instructor-chat-compose input{flex:1;min-width:0}.chat-student-id{color:#1a5fb4;font-weight:600}.instructor-schedule-meta-line{margin:0 0 .65rem}.instructor-schedule-wrap{margin-top:.15rem;overflow-x:auto}.instructor-schedule-table{border-collapse:collapse;width:100%;min-width:640px;font-size:.82rem;line-height:1.35}.instructor-schedule-table th,.instructor-schedule-table td{vertical-align:top;text-align:left;border:1px solid #b7c9bc8c;padding:.45rem .5rem}.instructor-schedule-table thead th{color:var(--ink);background:#eef4ee;font-weight:600}.instructor-schedule-day-col{white-space:nowrap;width:3.25rem;min-width:3.25rem;color:var(--ink);background:#f7faf7;font-weight:600}.instructor-schedule-period-col{min-width:5.5rem}.instructor-schedule-period-label{font-weight:600;display:block}.instructor-schedule-period-time{color:#7a9086;margin-top:.1rem;font-size:.72rem;font-weight:500;display:block}.instructor-schedule-cell.is-empty{background:#fafcfa}.instructor-schedule-cell.is-lunch{text-align:center;color:#a8bab0;background:#f3f8f3}.instructor-schedule-cell.has-class{background:#fff;padding:.35rem .4rem}.instructor-schedule-entry-btn{text-align:left;width:100%;font:inherit;cursor:pointer;background:0 0;border:none;border-radius:4px;margin:0;padding:.1rem .15rem;transition:background .15s;display:block}.instructor-schedule-entry-btn:hover:not(:disabled){background:#2e7d5214}.instructor-schedule-entry-btn:hover:not(:disabled) .instructor-schedule-subject{color:var(--accent)}.instructor-schedule-entry-btn:disabled{opacity:.65;cursor:wait}.instructor-schedule-entry+.instructor-schedule-entry{border-top:1px dashed #b7c9bc8c;margin-top:.35rem;padding-top:.35rem}.instructor-schedule-subject{color:var(--ink);font-weight:600;display:block}.instructor-schedule-meta{color:#7a9086;margin-top:.12rem;font-size:.74rem;display:block}.event-line{text-align:left;width:100%;font:inherit;color:#7a9086;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:none;border-bottom:1px solid #b7c9bc73;border-radius:0;padding:.45rem 0;font-size:.9rem;line-height:1.35;display:block;overflow:hidden}.instructor-recent-list li:last-child .event-line{border-bottom:none}.events-home-panel .event-line.is-open,.events-home-panel .folder-line.is-open{color:var(--ink);font-weight:600}.events-home-panel .session-open-label{color:#c62828;font-weight:700}.events-home-panel .folder-line.is-open .folder-chevron{color:#c62828}.events-home-panel .event-line.is-open:hover,.events-home-panel .event-line:hover .session-open-label{color:#b71c1c}.event-line.is-open{color:var(--accent);font-weight:600}.event-line:hover{color:var(--accent)}.folder-line{color:var(--ink);justify-content:space-between;align-items:center;gap:.75rem;font-weight:600;display:flex}.folder-chevron{color:var(--muted);flex-shrink:0;font-size:1.25rem;line-height:1}.folder-line.is-open .folder-chevron{color:var(--accent)}.folder-panel .take-again-btn{margin-top:.35rem}.folder-detail-tabs{margin-top:1rem}.folder-sessions-block,.attendance-register-block{margin-top:.35rem}.attendance-register-wrap{background:#fff;border:1px solid #b7c9bc8c;border-radius:10px;overflow-x:auto}.attendance-register-table{border-collapse:collapse;width:100%;min-width:420px;font-size:.84rem;line-height:1.35}.attendance-register-table th,.attendance-register-table td{text-align:center;white-space:nowrap;border:1px solid #b7c9bc73;padding:.4rem .45rem}.attendance-register-table thead th{color:var(--ink);background:#eef4ee;font-weight:650}.attendance-register-table .register-student-col{text-align:left;z-index:1;white-space:normal;background:#f7faf7;min-width:11rem;max-width:16rem;position:sticky;left:0}.attendance-register-table thead .register-student-col{z-index:2;background:#eef4ee}.attendance-register-table .register-month-col{letter-spacing:.01em;font-size:.8rem}.attendance-register-table .register-date-col{font-variant-numeric:tabular-nums;min-width:2.4rem}.attendance-register-table .register-student-id{color:#6d8278;font-weight:500}.attendance-register-table .register-student-name{display:inline}.attendance-register-table .register-attendance-summary{color:#b42318;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.8rem;font-weight:700;display:inline}.attendance-register-table .register-mark{font-variant-numeric:tabular-nums;font-weight:700}.attendance-register-table .register-mark.present{color:#1b7a45;background:#eaf7ef}.attendance-register-table .register-mark.absent{color:#b42318;background:#fdeceb}.event-list{gap:.55rem;margin:.35rem 0 0;padding:0;list-style:none;display:grid}.event-list-item{text-align:left;border:1px solid var(--line);cursor:pointer;width:100%;font:inherit;color:var(--ink);border-radius:12px;gap:.2rem;padding:.75rem .9rem;display:grid}.event-list-item.is-open{background:#d8f3e3;border-color:#9ed4b5}.event-list-item.is-closed{background:#fff}.event-list-item:hover{border-color:var(--accent)}.event-list-title{font-weight:700}.event-list-meta{color:var(--muted);font-size:.86rem}.repeat-title-value{margin:.2rem 0 0;font-size:1.05rem;font-weight:700}.take-again-btn{width:100%;max-width:320px;margin-bottom:.85rem}.related-sessions-block{color:#7a9086;border-top:1px solid #b7c9bc8c;margin-top:1.15rem;padding-top:.85rem}.related-sessions-block h3{color:#7a9086;margin:0;font-size:.95rem;font-weight:600}.related-sessions-block .tight-head{align-items:baseline;margin-bottom:.25rem}.related-sessions-list{margin-top:.1rem}.session-actions{flex-wrap:wrap;justify-content:center;gap:.65rem;margin-top:1rem;display:flex}.subhead{margin:1rem 0 .4rem;font-family:Fraunces,Georgia,serif;font-size:1rem}.status-open{color:#c62828}.status-closed{color:var(--danger)}.repeat-title-box{border:1px solid var(--line);background:#ffffff8c;border-radius:12px;padding:.7rem .85rem}.create-event-form{flex-direction:column;gap:1rem;margin-top:1rem;display:flex}.datetime-box{border:1px solid var(--line);background:#ffffff8c;border-radius:14px;padding:.9rem .95rem}.datetime-box-label{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 .65rem;font-size:.78rem;font-weight:700}.create-now-box{border:1px solid var(--line);background:#ffffff8c;border-radius:14px;margin-top:.85rem;padding:.85rem .95rem}.create-now-box .datetime-box-label{margin-bottom:.35rem}.create-now-value{letter-spacing:-.01em;color:var(--ink);margin:0;font-family:Fraunces,Georgia,serif;font-size:clamp(1.15rem,4vw,1.45rem);font-weight:700}.create-now-box .muted{margin:.35rem 0 0}.take-again-meta{gap:.35rem;margin:.65rem 0 0;padding:0;display:grid}.take-again-meta>div{grid-template-columns:7.5rem 1fr;align-items:baseline;gap:.5rem;display:grid}.take-again-meta dt{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0;font-size:.78rem;font-weight:700}.take-again-meta dd{color:var(--ink);overflow-wrap:anywhere;margin:0;font-weight:650}.create-now-meta{margin-top:.65rem}.create-now-meta .take-again-meta{margin-top:0}.create-now-meta .muted{margin:.25rem 0 0}.datetime-row{grid-template-columns:1fr 1fr auto;align-items:end;gap:.75rem;display:grid}.now-btn{white-space:nowrap;height:42px;padding:.55rem .9rem}.create-qr-btn{width:100%;margin-top:.25rem}.session-screen{padding:1rem 1.1rem 1.15rem}.session-top{align-items:flex-start;gap:.75rem;margin-bottom:.75rem;display:flex}.session-heading h2{margin:0}.tight{margin:.15rem 0 0}.session-layout{grid-template-columns:minmax(300px,380px) minmax(260px,1fr);align-items:start;gap:1.25rem;display:grid}.session-qr-col{justify-items:center;min-width:0;display:grid}.qr-frame-lg{width:fit-content;max-width:100%;padding:1.1rem}.session-side{gap:.75rem;min-width:0;display:grid}.session-stat-box{border:1px solid var(--line);background:#ffffff8c;border-radius:14px;padding:.8rem .9rem}.session-timer{margin:.15rem 0 .45rem;font-family:Fraunces,Georgia,serif;font-size:2rem;font-weight:700;line-height:1}.present-compact{max-height:180px;margin-top:.45rem;font-size:.9rem;overflow:auto}.present-flagged{color:#9b2c2c;font-weight:600}.location-review-hint{color:#9b2c2c}.session-box-btn{width:100%;margin-top:.65rem}.session-actions.stacked{justify-content:stretch;gap:.5rem;margin-top:0;display:grid}.session-actions.stacked button{width:100%}.session-closed-box{gap:.85rem;margin-top:.5rem;display:grid}.session-closed-box .report-selected-head{margin-bottom:0}.session-closed-box .table-wrap{margin-top:0}@media (width<=860px){.students-split,.students-layout,.session-layout{grid-template-columns:1fr}.student-detail-card{position:static}}@media (width<=560px){.app-shell{padding:.75rem .75rem 1rem}.topbar{flex-direction:column;align-items:stretch;gap:.5rem;margin-bottom:.75rem}.topbar>div:first-child{flex:none}.topbar h1{font-size:1.35rem}.topbar-meta{justify-content:space-between;gap:.5rem;width:100%}.topbar-meta>span{flex:auto;min-width:0}.topbar-meta .ghost{flex-shrink:0;padding:.45rem .7rem;font-size:.85rem}.panel{border-radius:14px;padding:.85rem .75rem}.student-home-panel,.student-mark-block,.scanner-wrap,.student-recent-block{max-width:100%}.mark-attendance-btn{width:100%}.compact-details,.detail-grid{grid-template-columns:1fr}.student-detail-compact{grid-template-columns:repeat(2,minmax(0,1fr))}.student-details-popover{max-width:100%;left:0;right:0}.datetime-row{grid-template-columns:1fr}.now-btn{width:100%}}
