@import"https://fonts.googleapis.com/css2?family=Lexend:wght@300;400;500;600;700&display=swap";@import"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@200..700,0..1&display=swap";:root{--bg: #f6f7f8;--bg-dark: #edf1f6;--surface: #ffffff;--surface-soft: #f8fafc;--border: #dbe2ea;--text-main: #0f172a;--text-muted: #64748b;--primary: #137fec;--primary-strong: #0b5cb5;--danger: #dc2626;font-family:Lexend,Pretendard,Noto Sans KR,sans-serif}*{box-sizing:border-box}body{margin:0;color:var(--text-main);background:radial-gradient(circle at top right,rgba(35,125,237,.18),transparent 46%),radial-gradient(circle at top left,rgba(11,92,181,.11),transparent 42%),var(--bg)}input,select,textarea,button{font:inherit}input,select,textarea{width:100%;border:1px solid var(--border);border-radius:10px;background:#fff;color:var(--text-main);padding:10px 12px}textarea{resize:vertical}button{cursor:pointer}label{display:grid;gap:6px;font-size:12px;color:var(--text-muted)}.material-symbols-outlined{font-variation-settings:"FILL" 0,"wght" 500,"GRAD" 0,"opsz" 24;line-height:1}.eyebrow{margin:0;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--text-muted);font-weight:700}.muted{margin:0;font-size:13px;color:var(--text-muted)}.mono{font-family:SFMono-Regular,Menlo,Consolas,monospace}.error{margin:0;font-size:13px;color:#b91c1c}.login-shell{min-height:100vh;padding:24px;display:grid;place-items:center}.login-card{width:min(460px,100%);border-radius:18px;border:1px solid var(--border);background:var(--surface);padding:24px;box-shadow:0 20px 42px #0f172a1f;display:grid;gap:14px}.login-card h1{margin:0;font-size:28px;letter-spacing:-.02em}.full-width{width:100%}.primary-btn,.secondary-btn,.text-btn,.danger-text-btn,.filter-button,.icon-text-btn,.icon-danger-btn{border:0;border-radius:10px;padding:10px 14px;font-weight:600;display:inline-flex;gap:6px;align-items:center;justify-content:center}.primary-btn{background:linear-gradient(120deg,var(--primary),#0e6dd2);color:#fff}.primary-btn:hover{background:linear-gradient(120deg,#0f6dd1,var(--primary-strong))}.secondary-btn{background:#f1f5f9;color:#334155}.secondary-btn:hover{background:#e2e8f0}.text-btn{background:transparent;color:var(--primary);padding:6px 10px}.text-btn:hover{background:#137fec1f}.danger-text-btn{background:transparent;color:var(--danger);padding:6px 10px}.danger-text-btn:hover{background:#dc26261f}.icon-text-btn,.icon-danger-btn{background:transparent;color:#64748b;padding:6px;min-width:34px}.icon-text-btn:hover{background:#eff6ff;color:var(--primary)}.icon-danger-btn{color:var(--danger)}.icon-danger-btn:hover{background:#fee2e2}.filter-button{background:#f1f5f9;color:#1f2937;font-size:13px;padding:9px 12px}.filter-button:hover{background:#e2e8f0}.portal-shell{min-height:100vh;display:grid;grid-template-columns:272px minmax(0,1fr)}.sidebar{border-right:1px solid var(--border);background:#ffffffed;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:16px;display:grid;grid-template-rows:auto 1fr auto;gap:14px}.sidebar-profile-card{display:flex;gap:10px;align-items:center;border:1px solid #ebeff5;background:#fff;border-radius:12px;padding:10px}.avatar-circle{width:44px;height:44px;border-radius:999px;background:linear-gradient(120deg,#137fec,#5fa7f3);color:#fff;display:grid;place-items:center;font-weight:700}.sidebar-profile-card h3{margin:0;font-size:14px}.sidebar-profile-card p{margin:2px 0 0;color:var(--text-muted);font-size:12px}.menu-list{display:grid;gap:7px;align-content:start}.menu-item{border:0;background:transparent;border-radius:12px;padding:9px 10px;display:flex;gap:10px;align-items:center;text-align:left;color:#475569}.menu-item span strong{display:block;font-size:13px}.menu-item span small{display:block;font-size:11px;color:#94a3b8}.menu-item>.material-symbols-outlined{font-size:20px}.menu-item:hover{background:#f1f5f9}.menu-item.active{background:#137fec1f;color:var(--primary)}.logout-btn{border:1px solid var(--border);border-radius:10px;background:#fff;color:#334155;padding:10px 12px}.logout-btn:hover{background:#f8fafc}.main-area{display:grid;grid-template-rows:auto 1fr}.topbar{height:68px;border-bottom:1px solid var(--border);background:#ffffffeb;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:10px 16px;display:flex;align-items:center;gap:12px}.topbar-brand{display:flex;align-items:center;gap:8px;min-width:160px}.topbar-brand-icon{width:34px;height:34px;border-radius:10px;background:var(--primary);color:#fff;display:grid;place-items:center}.topbar-brand h2{margin:0;font-size:19px}.topbar-search{flex:1;max-width:520px;position:relative}.topbar-search .material-symbols-outlined{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:#94a3b8;font-size:20px}.topbar-search input{background:#f1f5f9;border:0;padding-left:36px}.topbar-right{margin-left:auto;display:flex;gap:6px;align-items:center}.content-area{overflow:auto;padding:16px}.notice{margin-bottom:12px;border-radius:10px;padding:10px 12px;font-size:13px}.notice.loading{border:1px solid #9ac3f1;background:#e8f2ff;color:#1e3a8a}.notice.error{border:1px solid #f2b2b2;background:#fef2f2;color:#991b1b}.notice.success{border:1px solid #a9d8b3;background:#ecfdf3;color:#166534}.page-stack{display:grid;gap:12px}.page-header{display:flex;justify-content:space-between;align-items:end;gap:10px}.page-header h2{margin:0;font-size:30px;letter-spacing:-.02em}.page-header p{margin:4px 0 0;font-size:14px;color:var(--text-muted)}.panel{border:1px solid var(--border);border-radius:14px;padding:14px;background:var(--surface);box-shadow:0 12px 28px #0f172a0f}.panel h3,.panel h4{margin:0 0 10px}.panel h3 .material-symbols-outlined{vertical-align:middle;margin-right:4px;color:var(--primary)}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px}.muted-text{margin:0;color:var(--text-muted);font-size:13px}.form-grid{display:grid;gap:10px}.split-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.split-grid.compact{align-items:start}.filter-row{display:flex;flex-wrap:wrap;align-items:end;gap:8px}.filter-row label{min-width:140px;flex:1}.inline-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.table-wrap{border:1px solid var(--border);border-radius:12px;overflow:auto}table{width:100%;min-width:720px;border-collapse:collapse;background:#fff}thead{background:#f8fafc}th,td{border-bottom:1px solid var(--border);padding:11px 12px;font-size:13px;text-align:left}th{color:#64748b;font-size:12px}tr:last-child td{border-bottom:0}.empty-cell{text-align:center;color:var(--text-muted);padding:20px}.cell-actions{text-align:right;white-space:nowrap}.dashboard-title-row{display:flex;justify-content:space-between;align-items:end;gap:12px}.dashboard-title-row h2{margin:0;font-size:24px}.dashboard-title-row p{margin:2px 0 0;color:var(--text-muted)}.device-metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.metric-section-card{border:1px solid var(--border);border-radius:14px;background:#fff;padding:14px}.metric-section-card>header{display:flex;gap:10px;align-items:center;margin-bottom:12px}.metric-section-card h3{margin:0;font-size:18px}.metric-section-card p{margin:2px 0 0;font-size:12px;color:var(--text-muted)}.metric-icon-wrap{width:38px;height:38px;border-radius:10px;display:grid;place-items:center}.metric-icon-wrap.indigo{background:#e0e7ff;color:#4338ca}.metric-icon-wrap.rose{background:#ffe4e6;color:#be123c}.metric-mini-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.metric-mini-card{border:1px solid #e8edf4;background:#f8fafc;border-radius:11px;padding:10px}.metric-mini-card p{margin:0;color:#64748b;font-size:12px}.metric-mini-card strong{display:inline-block;margin-top:8px;font-size:24px;letter-spacing:-.03em}.metric-mini-card>span{margin-left:5px;font-size:11px;color:#94a3b8}.metric-mini-card small{display:block;margin-top:8px;font-size:11px}.metric-mini-card small.trend-up{color:#15803d}.metric-mini-card small.trend-down{color:#dc2626}.class-name-cell{display:flex;gap:8px;align-items:center}.class-name-cell strong{display:block;font-size:13px}.class-name-cell span{display:block;font-size:11px;color:#94a3b8}.class-name-icon{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;background:#dbeafe;color:var(--primary)}.class-name-icon.tone-0{background:#dbeafe;color:#1d4ed8}.class-name-icon.tone-1{background:#ede9fe;color:#7e22ce}.class-name-icon.tone-2{background:#ffedd5;color:#c2410c}.student-avatar-stack{display:flex;align-items:center}.student-avatar-dot{width:24px;height:24px;border-radius:999px;border:2px solid #fff;margin-left:-7px;background:#f8c9b5;color:#334155;font-size:9px;font-weight:700;display:grid;place-items:center}.student-avatar-dot:first-child{margin-left:0}.student-avatar-dot:nth-child(2n){background:#b7d9cb}.student-avatar-dot:nth-child(3n){background:#c6d4f5}.student-avatar-more{margin-left:6px;font-size:11px;color:#64748b;font-weight:700}.last-measured-cell strong{display:block;font-size:13px}.last-measured-cell span{display:block;font-size:11px;color:#64748b}.participation-cell{display:inline-flex;align-items:center;gap:8px}.participation-track{width:94px;height:8px;border-radius:999px;background:#e2e8f0;overflow:hidden}.participation-track>div{height:100%}.participation-track.good>div{background:#10b981}.participation-track.normal>div{background:#3b82f6}.participation-track.warning>div{background:#f59e0b}.participation-cell span{font-weight:700;font-size:13px}.semester-wizard-page .page-header h2{font-size:30px}.wizard-progress-card{border:1px solid var(--border);border-radius:12px;background:#fff;padding:12px}.wizard-step-row{display:flex;justify-content:space-between;gap:10px}.wizard-step{display:flex;gap:8px;align-items:center;opacity:.6}.wizard-step.current{opacity:1}.wizard-step span{width:28px;height:28px;border-radius:999px;display:grid;place-items:center;background:#e2e8f0;color:#334155;font-weight:700;font-size:13px}.wizard-step.current span{background:var(--primary);color:#fff}.wizard-step strong{display:block;font-size:12px}.wizard-step small{display:block;color:#94a3b8;font-size:11px}.wizard-progress-bar{margin-top:12px;height:7px;border-radius:999px;background:#e2e8f0;overflow:hidden}.wizard-progress-bar>div{width:12%;height:100%;background:var(--primary)}.inline-date-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.batch-count-row{display:grid;grid-template-columns:auto 1fr 86px;gap:10px;align-items:center;border:1px solid var(--border);border-radius:10px;padding:8px;background:#f8fafc}.batch-count-row strong{display:block;font-size:13px}.batch-count-row small{display:block;color:#94a3b8;font-size:11px}.grade-chip{width:34px;height:34px;border-radius:8px;display:grid;place-items:center;background:#dbeafe;color:var(--primary);font-weight:700}.grade-chip.tone-0{background:#dbeafe;color:#2563eb}.grade-chip.tone-1{background:#f3e8ff;color:#9333ea}.grade-chip.tone-2{background:#dcfce7;color:#16a34a}.academic-breadcrumb{display:flex;align-items:center;gap:8px;color:#64748b;font-size:14px}.academic-breadcrumb strong{color:var(--primary)}.semester-header-row{align-items:end}.semester-danger-btn{color:#b91c1c}.semester-review-filter{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px}.semester-grade-filter{width:130px;padding:8px 10px}.class-preview-name{display:flex;align-items:center;gap:10px}.class-preview-code{width:30px;height:30px;border-radius:6px;display:grid;place-items:center;font-weight:700;font-size:12px}.class-preview-code.tone-0{background:#dbeafe;color:#2563eb}.class-preview-code.tone-1{background:#f3e8ff;color:#9333ea}.class-preview-code.tone-2{background:#dcfce7;color:#16a34a}.grade-pill{display:inline-flex;align-items:center;border-radius:999px;padding:4px 10px;font-size:11px;font-weight:700}.grade-pill.tone-0{background:#dbeafe;color:#2563eb}.grade-pill.tone-1{background:#f3e8ff;color:#9333ea}.grade-pill.tone-2{background:#dcfce7;color:#16a34a}.teacher-select-wrap{position:relative}.teacher-select-wrap select{padding-right:30px}.teacher-missing-dot{position:absolute;right:28px;top:50%;transform:translateY(-50%);width:8px;height:8px;border-radius:999px;background:#eab308;box-shadow:0 0 0 5px #eab3082e}.semester-footer-bar{position:relative;border:1px solid var(--border);border-radius:12px;background:#fff;box-shadow:0 8px 18px #0f172a1a;padding:12px;display:flex;justify-content:space-between;gap:10px;align-items:center}.warning-chip{display:inline-flex;align-items:center;gap:5px;border-radius:8px;padding:8px 10px;background:#fffbeb;color:#a16207;font-size:13px;font-weight:600}.tip-box{margin:0;border-radius:10px;padding:9px 10px;background:#eff6ff;color:#1d4ed8;display:flex;gap:6px;font-size:12px}.class-detail-page .panel{overflow:hidden}.student-inline-form-wrap{margin-bottom:10px;border:1px solid var(--border);border-radius:12px;background:#f8fafc;padding:12px}.breadcrumb-row{display:flex;gap:6px;align-items:center;font-size:13px;color:var(--text-muted)}.breadcrumb-row strong{color:var(--text-main)}.class-hero-card{border:1px solid var(--border);border-radius:14px;background:#fff;padding:16px;display:flex;justify-content:space-between;align-items:end;gap:12px}.class-hero-card h2{margin:0;font-size:30px}.class-hero-card p{margin:2px 0 0;color:var(--text-muted)}.class-hero-meta{margin-top:10px;display:flex;gap:12px;align-items:center;color:var(--text-muted);font-size:13px}.class-hero-meta span{display:inline-flex;gap:4px;align-items:center}.active-dot-badge{background:#ecfdf5;color:#15803d;border:1px solid #bbf7d0;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600}.class-detail-tab-head{display:flex;justify-content:space-between;align-items:center;gap:8px;border-bottom:1px solid var(--border);padding-bottom:10px;margin-bottom:10px}.tab-row{display:flex;gap:6px}.tab-btn{border:1px solid transparent;border-radius:8px;background:transparent;color:#64748b;padding:8px 11px;display:inline-flex;gap:6px;align-items:center}.tab-btn.active{background:#137fec1c;color:var(--primary);border-color:#137fec40}.student-name-cell{display:flex;align-items:center;gap:8px}.student-name-cell>span{width:30px;height:30px;border-radius:999px;background:#e2e8f0;color:#334155;display:grid;place-items:center;font-size:11px;font-weight:700}.student-name-cell strong{font-size:13px}.student-status-badge{border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600}.student-status-badge.enrolled{background:#ecfdf5;color:#15803d}.student-status-badge.transferred{background:#fffbeb;color:#b45309}.student-status-badge.expelled{background:#fef2f2;color:#b91c1c}.row-hover-actions{display:inline-flex;align-items:center;gap:4px;opacity:.28;transition:opacity .18s ease}tbody tr:hover .row-hover-actions{opacity:1}.measurement-type-cell{display:flex;align-items:center;gap:8px}.measurement-icon{width:30px;height:30px;border-radius:999px;display:grid;place-items:center}.measurement-icon.jump{background:#ffedd5;color:#c2410c}.measurement-icon.heart{background:#ffe4e6;color:#be123c}.measurement-meta-chip{margin-left:8px;border-radius:999px;padding:2px 8px;background:#f1f5f9;color:#64748b;font-size:11px}.transfer-dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:45;background:#0f172a80;display:grid;place-items:center;padding:20px}.transfer-dialog-card{width:min(420px,100%);border-radius:12px;border:1px solid var(--border);background:#fff;box-shadow:0 16px 30px #0f172a33;padding:16px;display:grid;gap:10px}.device-type-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.device-type-card,.empty-card{border:1px solid var(--border);border-radius:12px;padding:12px;text-align:left;background:#fff}.device-type-card.active{background:#137fec1a;border-color:#137fec66}.device-type-card strong{display:block}.device-type-card p,.device-type-card span,.empty-card{margin:4px 0 0;color:var(--text-muted);font-size:12px}.status-badge{border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600}.status-badge.online{background:#dcfce7;color:#166534}.status-badge.offline{background:#fee2e2;color:#991b1b}.info-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.info-grid p{margin:0;border:1px solid var(--border);border-radius:10px;background:#f8fafc;padding:10px;display:grid;gap:4px}.info-grid strong{font-size:12px;color:var(--text-muted)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:grid;place-items:center;padding:20px}.modal{width:min(420px,100%);border-radius:14px;border:1px solid var(--border);background:#fff;box-shadow:0 26px 42px #0f172a33;padding:18px;display:grid;gap:10px}.modal h2{margin:0}@media(max-width:1280px){.device-metric-grid,.device-type-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:1040px){.portal-shell{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid var(--border);grid-template-rows:auto auto auto}.menu-list{grid-template-columns:repeat(3,minmax(0,1fr))}.menu-item{display:grid;justify-items:center;text-align:center;gap:4px}.topbar{height:auto;flex-wrap:wrap}.topbar-search{order:3;flex-basis:100%;max-width:none}.topbar-right{margin-left:0;width:100%;justify-content:space-between}.split-grid,.inline-date-grid,.info-grid{grid-template-columns:1fr}.class-hero-card{flex-direction:column;align-items:start}}@media(max-width:760px){.content-area{padding:12px}.menu-list{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-title-row,.page-header,.panel-head,.class-detail-tab-head{flex-direction:column;align-items:start}.device-metric-grid,.metric-mini-grid,.device-type-grid{grid-template-columns:1fr}.semester-review-filter,.semester-footer-bar{flex-direction:column;align-items:start}}
