@import"https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.css";:root{--bg-app: #fafafa;--bg-canvas: #ffffff;--bg-surface: #ffffff;--bg-surface-2: #f5f5f7;--bg-surface-3: #efeff2;--bg-hover: #f5f5f7;--bg-active: #ebebef;--line: rgba(15, 17, 21, .06);--line-2: rgba(15, 17, 21, .1);--line-3: rgba(15, 17, 21, .16);--line-strong: rgba(15, 17, 21, .22);--ink-1: #0f1115;--ink-2: #1f2230;--ink-3: #3a3f50;--ink-4: #5c6275;--ink-5: #8b91a2;--ink-6: #b0b4c0;--ink-7: #d3d6dd;--ink-8: #e5e7ec;--ink-9: #f1f2f5;--bg-base: var(--bg-app);--bg-primary: var(--bg-app);--bg-secondary: var(--bg-surface);--bg-card: var(--bg-surface);--text-primary: var(--ink-1);--text-secondary: var(--ink-3);--text-muted: var(--ink-4);--border-color: var(--line);--glass-border: var(--line);--glass-border-strong: var(--line-2);--glass-bg: rgba(255, 255, 255, .92);--glass-bg-strong: rgba(255, 255, 255, .96);--accent-h: 222;--accent-s: 84%;--accent-l: 50%;--accent: hsl(var(--accent-h) var(--accent-s) var(--accent-l));--accent-hover: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) - 6%));--accent-soft: hsla(var(--accent-h), var(--accent-s), var(--accent-l), .1);--accent-soft-2: hsla(var(--accent-h), var(--accent-s), var(--accent-l), .16);--accent-text: hsl(var(--accent-h) calc(var(--accent-s) - 10%) calc(var(--accent-l) - 8%));--accent-glow: hsla(var(--accent-h), var(--accent-s), var(--accent-l), .18);--accent-ring: hsla(var(--accent-h), var(--accent-s), var(--accent-l), .22);--accent-primary: var(--accent);--accent-secondary: var(--accent-hover);--accent-tint: var(--accent-soft);--accent-tint-2: var(--accent-soft-2);--accent-strong: var(--accent-hover);--border-glow: var(--accent-soft-2);--accent-gradient: var(--accent);--success: #058953;--success-soft: rgba(5, 137, 83, .1);--success-tint: var(--success-soft);--warning: #b76800;--warning-soft: rgba(183, 104, 0, .1);--warning-tint: var(--warning-soft);--danger: #c42a2a;--danger-soft: rgba(196, 42, 42, .1);--danger-tint: var(--danger-soft);--tag-red: #FF3B30;--tag-red-soft: rgba(255, 59, 48, .12);--tag-orange: #FF9500;--tag-orange-soft: rgba(255, 149, 0, .13);--tag-yellow: #E5B400;--tag-yellow-soft: rgba(229, 180, 0, .14);--tag-green: #34C759;--tag-green-soft: rgba(52, 199, 89, .13);--tag-teal: #30B0C7;--tag-teal-soft: rgba(48, 176, 199, .13);--tag-blue: #007AFF;--tag-blue-soft: rgba(0, 122, 255, .13);--tag-purple: #AF52DE;--tag-purple-soft: rgba(175, 82, 222, .13);--tag-pink: #FF2D55;--tag-pink-soft: rgba(255, 45, 85, .13);--tag-gray: #8E8E93;--tag-gray-soft: rgba(142, 142, 147, .16);--hl-strength: rgba(5, 137, 83, .16);--hl-strength-edge: rgba(5, 137, 83, .55);--hl-weakness: rgba(196, 42, 42, .14);--hl-weakness-edge: rgba(196, 42, 42, .55);--hl-suggest: hsla(var(--accent-h), var(--accent-s), var(--accent-l), .13);--hl-suggest-edge: hsla(var(--accent-h), var(--accent-s), var(--accent-l), .55);--r-2: 2px;--r-4: 4px;--r-6: 6px;--r-8: 8px;--r-10: 10px;--r-12: 12px;--r-16: 16px;--r-pill: 999px;--radius-xs: var(--r-2);--radius-sm: var(--r-6);--radius-md: var(--r-8);--radius-lg: var(--r-10);--radius-xl: var(--r-12);--radius-2xl: var(--r-16);--shadow-xs: 0 1px 0 rgba(15, 17, 21, .04);--shadow-sm: 0 1px 2px rgba(15, 17, 21, .04), 0 0 0 1px var(--line);--shadow-md: 0 4px 14px rgba(15, 17, 21, .06), 0 0 0 1px var(--line);--shadow-lg: 0 12px 36px rgba(15, 17, 21, .1), 0 0 0 1px var(--line-2);--shadow-xl: 0 24px 64px rgba(15, 17, 21, .16);--shadow-glow: 0 0 0 1px var(--accent-soft-2), 0 6px 20px var(--accent-glow);--shadow-ring: 0 0 0 3px var(--accent-ring);--shadow-focus: 0 0 0 2px var(--bg-canvas), 0 0 0 4px var(--accent);--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--dur-1: .1s;--dur-2: .16s;--dur-3: .24s;--dur-4: .32s;--font-sans: "Pretendard Variable", "Pretendard", "Inter", -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", sans-serif;--font-serif: "Source Serif Pro", "Noto Serif KR", Georgia, serif;--font-mono: "JetBrains Mono", "SF Mono", "Menlo", "Consolas", monospace;--font-num: "SF Pro Display", "Inter", system-ui, sans-serif}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{-webkit-text-size-adjust:100%;text-rendering:optimizeLegibility}html,body{height:100%}body{font-family:var(--font-sans);font-size:14px;line-height:1.5;color:var(--ink-1);background:var(--bg-app);letter-spacing:-.005em;font-feature-settings:"ss01","cv11","tnum" 0}#root{min-height:100%;isolation:isolate}a{color:inherit;text-decoration:none}button,input,textarea,select{font-family:inherit;color:inherit}::selection{background:var(--accent);color:#fff}::-webkit-scrollbar{width:12px;height:12px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--ink-7);border:3px solid var(--bg-app);border-radius:999px;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:var(--ink-6);background-clip:padding-box;border:3px solid var(--bg-app)}.num,.stat-value,.exam-timer,[data-tabular]{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.app-container{display:flex;min-height:100vh;background:var(--bg-app)}.sidebar{width:240px;height:100vh;position:fixed;top:0;left:0;background:var(--bg-canvas);border-right:1px solid var(--line);padding:14px 12px;display:flex;flex-direction:column;z-index:100;transition:width var(--dur-3) var(--ease-out)}.sidebar.collapsed{width:64px}.sidebar-toggle{position:absolute;top:0;right:0;bottom:0;width:14px;background:transparent;color:var(--ink-5);border:none;cursor:ew-resize;display:flex;align-items:center;justify-content:center;z-index:101;padding:0;transition:color var(--dur-1) var(--ease-out),background var(--dur-1) var(--ease-out);border-right:1px solid transparent}.sidebar-toggle:before{content:"";width:1px;height:32px;background:transparent;border-radius:1px;transition:background var(--dur-1) var(--ease-out),height var(--dur-1) var(--ease-out);position:absolute;right:0}.sidebar-toggle:after{content:"";width:7px;height:7px;border-top:1.5px solid currentColor;border-right:1.5px solid currentColor;transform:rotate(-135deg);margin-right:2px;opacity:0;transition:opacity var(--dur-1) var(--ease-out),transform var(--dur-1) var(--ease-out)}.sidebar.collapsed .sidebar-toggle:after{transform:rotate(45deg)}.sidebar:hover .sidebar-toggle:before{background:var(--line-3);height:64px}.sidebar:hover .sidebar-toggle:after{opacity:1}.sidebar-toggle:hover{color:var(--ink-1)}.sidebar-toggle:hover:before{background:var(--ink-1)!important;height:80px!important}.sidebar-logo{display:flex;align-items:center;gap:10px;padding:10px 8px;margin-bottom:14px}.sidebar.collapsed .sidebar-logo{justify-content:center;padding:10px 0}.logo-mark{width:28px;height:28px;border-radius:7px;background:hsl(var(--accent-h),var(--accent-s),var(--accent-l));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;letter-spacing:-.02em;flex-shrink:0;transition:background .22s ease}.sidebar-logo h1{font-size:14px;font-weight:600;color:var(--ink-1);letter-spacing:-.015em}.sidebar-nav{flex:1;overflow-y:auto;margin:0 -2px;padding:4px 2px;display:flex;flex-direction:column}.nav-section-label{font-size:10px;font-weight:600;color:var(--ink-5);text-transform:uppercase;letter-spacing:.08em;padding:14px 12px 4px}.sidebar.collapsed .nav-section-label{display:none}.nav-item{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:var(--r-6);color:var(--ink-3);font-weight:500;font-size:13.5px;transition:background var(--dur-1) var(--ease-out),color var(--dur-1) var(--ease-out);cursor:pointer;white-space:nowrap;overflow:hidden;margin:1px 0}.nav-item .nav-icon{width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--ink-5);transition:color var(--dur-1) var(--ease-out)}.nav-item .nav-icon svg{width:16px;height:16px;stroke-width:1.6}.nav-item>span:not(.nav-icon){flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.sidebar.collapsed .nav-item{justify-content:center;padding:8px}.nav-item:hover{background:var(--bg-hover);color:var(--ink-1)}.nav-item:hover .nav-icon{color:var(--ink-2)}.nav-item.active{background:var(--ink-1);color:#fff}.nav-item.active .nav-icon{color:#fff}.sidebar-footer{padding-top:10px;margin-top:8px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:6px}.user-card{display:flex;align-items:center;gap:10px;padding:8px;border-radius:var(--r-6)}.user-card .avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(180deg,#2a2e3b,#1a1d26);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:12px;flex-shrink:0}.user-card .meta{min-width:0;flex:1}.user-card .meta .name{font-weight:600;font-size:13px;color:var(--ink-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.user-card .meta .role{font-size:11px;color:var(--ink-5);margin-top:2px;line-height:1}.role-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:var(--r-4);font-size:11px;font-weight:500;background:var(--bg-surface-2);color:var(--ink-3)}.role-badge.admin{background:var(--ink-1);color:#fff}.role-badge.ta{background:var(--accent-soft);color:var(--accent-text)}.role-badge.student{background:var(--success-soft);color:var(--success)}.role-badge.parent{background:var(--warning-soft);color:var(--warning)}.main-content{flex:1;margin-left:240px;padding:32px 40px 80px;max-width:1480px;transition:margin-left var(--dur-3) var(--ease-out)}.main-content.expanded{margin-left:64px}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:28px;flex-wrap:wrap}.page-eyebrow{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-5);margin-bottom:6px}.page-title{font-size:26px;font-weight:700;letter-spacing:-.025em;color:var(--ink-1);line-height:1.2}.page-subtitle{font-size:13.5px;color:var(--ink-4);margin-top:4px}.card{background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);padding:20px;transition:border-color var(--dur-2) var(--ease-out),box-shadow var(--dur-2) var(--ease-out)}.card:hover{border-color:var(--line-2)}.card.elevated{box-shadow:var(--shadow-md)}.card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px;gap:14px}.card-title{font-size:14px;font-weight:600;color:var(--ink-1);letter-spacing:-.005em;line-height:1.3}.card-sub{font-size:12.5px;color:var(--ink-5);margin-top:2px}.glass{background:var(--glass-bg-strong);backdrop-filter:saturate(140%) blur(14px);-webkit-backdrop-filter:saturate(140%) blur(14px);border:1px solid var(--line);border-radius:var(--r-10)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 14px;border:1px solid transparent;border-radius:var(--r-6);font-size:13px;font-weight:500;cursor:pointer;transition:background var(--dur-1) var(--ease-out),border-color var(--dur-1) var(--ease-out),color var(--dur-1) var(--ease-out),box-shadow var(--dur-1) var(--ease-out),transform var(--dur-1) var(--ease-out);line-height:1.2;white-space:nowrap;-webkit-user-select:none;user-select:none;letter-spacing:-.005em}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--ink-1);color:#fff;border-color:var(--ink-1);box-shadow:inset 0 1px #ffffff0f}.btn-primary:hover:not(:disabled){background:var(--ink-2);border-color:var(--ink-2)}.btn-primary:active:not(:disabled){transform:translateY(.5px)}.btn-accent{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-accent:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn-secondary{background:var(--bg-canvas);color:var(--ink-2);border-color:var(--line-2)}.btn-secondary:hover:not(:disabled){background:var(--bg-hover);border-color:var(--line-3)}.btn-ghost{background:transparent;color:var(--ink-3);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--bg-hover);color:var(--ink-1)}.btn-danger{background:var(--bg-canvas);color:var(--danger);border-color:var(--line-2)}.btn-danger:hover:not(:disabled){background:var(--danger);color:#fff;border-color:var(--danger)}.btn-success{background:var(--success);color:#fff;border-color:var(--success)}.btn-sm{padding:5px 10px;font-size:12px;border-radius:var(--r-4)}.btn-lg,.btn-large{padding:10px 18px;font-size:14px}.btn-icon-only{padding:6px;width:30px;height:30px}.pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:var(--r-4);font-size:11.5px;font-weight:500;background:var(--bg-surface-2);color:var(--ink-3);border:1px solid var(--line);line-height:1.4}.pill.accent{background:var(--accent-soft);color:var(--accent-text);border-color:var(--accent-soft-2)}.pill.success{background:var(--success-soft);color:var(--success);border-color:#0589532e}.pill.danger{background:var(--danger-soft);color:var(--danger);border-color:#c42a2a2e}.pill.warning{background:var(--warning-soft);color:var(--warning);border-color:#b768002e}.pill .dot{width:5px;height:5px;border-radius:50%;background:currentColor}.status-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:var(--r-4);font-size:11.5px;font-weight:500;line-height:1.4;white-space:nowrap;border:1px solid transparent}.status-pill.draft{background:var(--bg-surface-2);color:var(--ink-4);border-color:var(--line)}.status-pill.scheduled{background:var(--accent-soft);color:var(--accent-text);border-color:var(--accent-soft-2)}.status-pill.live{background:var(--success-soft);color:var(--success);border-color:#0589532e}.status-pill.live .dot{width:6px;height:6px;border-radius:50%;background:currentColor;animation:pulse 1.6s ease-in-out infinite}.status-pill.closed{background:var(--ink-1);color:#fff;border-color:var(--ink-1)}.status-pill.in_progress{background:var(--warning-soft);color:var(--warning);border-color:#b768002e}.status-pill.submitted,.status-pill.graded{background:var(--success-soft);color:var(--success);border-color:#0589532e}.status-pill.auto_submitted{background:var(--warning-soft);color:var(--warning);border-color:#b768002e}.status-pill.not_started{background:var(--bg-surface-2);color:var(--ink-5);border-color:var(--line)}.form-group{margin-bottom:16px}.form-label{display:block;margin-bottom:6px;font-weight:500;color:var(--ink-2);font-size:12.5px;letter-spacing:-.005em}.form-help{font-size:12px;color:var(--ink-5);margin-top:5px;line-height:1.5}.form-input,.form-textarea,.form-select{width:100%;padding:8px 12px;background:var(--bg-canvas);border:1px solid var(--line-2);border-radius:var(--r-6);color:var(--ink-1);font-size:13.5px;line-height:1.4;transition:border-color var(--dur-1) var(--ease-out),box-shadow var(--dur-1) var(--ease-out),background var(--dur-1) var(--ease-out);-webkit-appearance:none}.form-input:hover,.form-textarea:hover,.form-select:hover{border-color:var(--line-3)}.form-input:focus,.form-textarea:focus,.form-select:focus{outline:none;border-color:var(--accent);box-shadow:var(--shadow-ring)}.form-input::placeholder,.form-textarea::placeholder{color:var(--ink-6)}.form-textarea{resize:vertical;min-height:96px;line-height:1.65;padding:10px 12px}.table-container{overflow-x:auto;border-radius:var(--r-10);background:var(--bg-canvas);border:1px solid var(--line)}table{width:100%;border-collapse:collapse}th,td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--line);font-size:13px;line-height:1.5}th{font-weight:500;color:var(--ink-5);font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;background:var(--bg-canvas);white-space:nowrap;border-bottom:1px solid var(--line-2)}tbody tr{transition:background var(--dur-1) var(--ease-out)}tbody tr:hover td{background:var(--bg-hover)}tr:last-child td{border-bottom:0}.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--bg-app);position:relative}.login-container:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:32px 32px;background-position:-1px -1px;mask-image:radial-gradient(circle at center,black,transparent 70%);-webkit-mask-image:radial-gradient(circle at center,black,transparent 70%);pointer-events:none;opacity:.6}.login-card{width:100%;max-width:400px;padding:36px 32px;background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-12);box-shadow:var(--shadow-lg);position:relative}.login-brand{text-align:center;margin-bottom:18px}.login-brand .mark{width:36px;height:36px;margin:0 auto;border-radius:9px;background:hsl(var(--accent-h, 220),var(--accent-s, 6%),var(--accent-l, 20%));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;letter-spacing:-.02em}.login-title{font-size:22px;font-weight:700;text-align:center;margin-bottom:6px;color:var(--ink-1);letter-spacing:-.025em}.login-subtitle{text-align:center;color:var(--ink-4);margin-bottom:28px;font-size:13px}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:24px}.stat-card{background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);padding:16px 18px;text-align:left;transition:border-color var(--dur-2) var(--ease-out);position:relative}.stat-card:hover{border-color:var(--line-2)}.stat-card.highlight{background:var(--ink-1);border-color:var(--ink-1);color:#fff}.stat-card.accent{background:var(--accent);border-color:var(--accent);color:#fff}.stat-label{font-size:11px;color:var(--ink-5);margin-bottom:8px;text-transform:uppercase;letter-spacing:.06em;font-weight:600}.stat-card.highlight .stat-label,.stat-card.accent .stat-label{color:#ffffffb3}.stat-value{font-size:26px;font-weight:700;color:var(--ink-1);letter-spacing:-.025em;line-height:1.05;font-feature-settings:"tnum"}.stat-card.highlight .stat-value,.stat-card.accent .stat-value{color:#fff}.stat-sub{font-size:12px;font-weight:500;color:var(--ink-5);margin-left:4px;letter-spacing:0}.stat-card.highlight .stat-sub,.stat-card.accent .stat-sub{color:#fff9}.stat-trend{margin-top:8px;font-size:11.5px;font-weight:600;color:var(--success)}.stat-trend.down{color:var(--danger)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f11155c;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .16s var(--ease-out);padding:24px}.modal{background:var(--bg-canvas);border:1px solid var(--line-2);border-radius:var(--r-12);padding:28px;width:100%;max-width:480px;box-shadow:var(--shadow-xl);animation:scaleIn .2s var(--ease-out);max-height:calc(100vh - 48px);overflow-y:auto}.modal.lg{max-width:720px}.modal.xl{max-width:960px}.modal-title{font-size:17px;font-weight:600;margin-bottom:4px;color:var(--ink-1);letter-spacing:-.015em}.modal-sub{font-size:13px;color:var(--ink-4);margin-bottom:20px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}.empty-state{text-align:center;padding:56px 24px;color:var(--ink-5)}.empty-state-icon{width:36px;height:36px;margin:0 auto 14px;border-radius:var(--r-8);background:var(--bg-surface-2);display:flex;align-items:center;justify-content:center;color:var(--ink-5)}.empty-state-title{font-size:14px;font-weight:600;color:var(--ink-2);margin-bottom:6px}.empty-state-text{font-size:13px;color:var(--ink-5)}.spinner{width:22px;height:22px;border:2px solid var(--line-3);border-top-color:var(--ink-1);border-radius:50%;animation:spin .7s linear infinite}.loading-container{display:flex;justify-content:center;align-items:center;padding:60px;min-height:200px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.97) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:translate(0)}}@keyframes slideInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.55}}@keyframes underlineSweep{0%{background-size:0% 100%}to{background-size:100% 100%}}.fade-in{animation:fadeIn .2s var(--ease-out)}.slide-in{animation:slideInRight .24s var(--ease-out)}.theme-picker{padding:10px;border-radius:var(--r-8);background:var(--bg-surface-2);border:1px solid var(--line);margin-bottom:6px}.theme-picker-label{font-size:10px;color:var(--ink-5);text-transform:uppercase;letter-spacing:.08em;font-weight:600;margin-bottom:8px}.theme-swatches{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}.swatch{aspect-ratio:1;border-radius:50%;cursor:pointer;border:2px solid transparent;transition:transform var(--dur-1) var(--ease-out),border-color var(--dur-1) var(--ease-out);position:relative}.swatch:hover{transform:scale(1.1)}.swatch.active{border-color:var(--ink-1);box-shadow:0 0 0 2px var(--bg-canvas)}.theme-toggle{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;background:var(--bg-canvas);border:1px solid var(--line-2);border-radius:var(--r-6);cursor:pointer;color:var(--ink-3);font-size:12.5px;font-weight:500;transition:all var(--dur-1) var(--ease-out)}.theme-toggle:hover{background:var(--bg-hover)}.markdown-content{color:var(--ink-2);line-height:1.72;font-size:14px;letter-spacing:-.005em}.markdown-content h1{font-size:18px;font-weight:700;margin:28px 0 10px;color:var(--ink-1);letter-spacing:-.02em}.markdown-content h1:first-child{margin-top:0}.markdown-content h2{font-size:15px;font-weight:700;margin:22px 0 8px;color:var(--ink-1);letter-spacing:-.015em}.markdown-content h3{font-size:13.5px;font-weight:600;margin:16px 0 6px;color:var(--ink-2);text-transform:uppercase;letter-spacing:.06em}.markdown-content p{margin:8px 0}.markdown-content ul,.markdown-content ol{margin:8px 0 12px 22px}.markdown-content li{margin:4px 0}.markdown-content blockquote{border-left:2px solid var(--accent);background:var(--accent-soft);padding:10px 16px;margin:14px 0;border-radius:0 var(--r-6) var(--r-6) 0;font-size:13.5px;color:var(--ink-2)}.markdown-content code{background:var(--bg-surface-2);padding:1px 6px;border-radius:4px;font-size:.88em;font-family:var(--font-mono)}.markdown-content table{margin:14px 0;border-radius:var(--r-8);overflow:hidden;border:1px solid var(--line)}.markdown-content hr{border:none;border-top:1px solid var(--line);margin:24px 0}.markdown-content strong{color:var(--ink-1);font-weight:700}.callout{display:flex;align-items:flex-start;gap:10px;padding:11px 14px;background:var(--accent-soft);border:1px solid var(--accent-soft-2);border-radius:var(--r-8);color:var(--accent-text);font-size:13px;line-height:1.55}.callout.success{background:var(--success-soft);border-color:#0589532e;color:var(--success)}.callout.warning{background:var(--warning-soft);border-color:#b768002e;color:var(--warning)}.callout.danger{background:var(--danger-soft);border-color:#c42a2a2e;color:var(--danger)}.callout-icon{font-size:14px;line-height:1.4;flex-shrink:0}.preview-note,.help-note,.editor-help{display:flex;align-items:center;gap:8px;padding:10px 12px;background:var(--bg-surface-2);border:1px solid var(--line);border-radius:var(--r-6);color:var(--ink-3);font-size:12.5px}.rubric-builder,.rubric-editor{max-width:1240px;margin:0 auto}.rubric-header,.editor-header{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:18px;padding:16px 20px;background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10)}.rubric-title-row,.editor-title-section{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.rubric-main-title,.editor-title-input{font-size:16px;font-weight:700;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--ink-1);padding:4px 0;min-width:280px;transition:border-color var(--dur-1) var(--ease-out);letter-spacing:-.015em}.rubric-main-title:focus,.editor-title-input:focus{outline:none;border-color:var(--accent)}.rubric-main-title::placeholder,.editor-title-input::placeholder{color:var(--ink-6)}.rubric-year,.editor-year{color:var(--ink-4);font-size:13px;font-weight:500}.rubric-actions,.editor-actions{display:flex;gap:8px;align-items:center}.total-score-badge,.total-badge{background:var(--ink-1);color:#fff;padding:4px 12px;border-radius:var(--r-pill);font-weight:600;font-size:12px;font-feature-settings:"tnum"}.editor-table-wrap,.grading-table-wrap{background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);overflow:hidden;margin-bottom:14px}.editor-table,.grading-table,.rubric-table,.rubric-edit-table{width:100%;border-collapse:collapse;font-size:13px}.editor-table th,.grading-table th,.rubric-table th,.rubric-edit-table th{background:var(--bg-surface-2);padding:8px 12px;font-size:10.5px;font-weight:600;text-transform:uppercase;text-align:center;border:1px solid var(--line);color:var(--ink-5);letter-spacing:.05em}.editor-table td,.grading-table td,.rubric-table td,.rubric-edit-table td{border:1px solid var(--line);vertical-align:middle}.empty-table-cell{text-align:center;padding:28px!important;color:var(--ink-5)}.cell-domain,.domain-cell,.td-domain{background:var(--bg-surface-2);text-align:center;padding:10px 8px!important;width:130px}.domain-content{display:flex;flex-direction:column;gap:6px;align-items:center}.input-domain,.domain-input,.domain-name-input{width:100%;background:transparent;border:1px solid transparent;color:var(--ink-1);font-weight:600;text-align:center;padding:4px 6px;font-size:13px;border-radius:var(--r-4);transition:all var(--dur-1) var(--ease-out)}.input-domain:focus,.domain-input:focus,.domain-name-input:focus{outline:none;border-color:var(--accent);background:var(--bg-canvas)}.domain-name-display,.domain-name{font-weight:600;color:var(--ink-1);font-size:12.5px}.cell-criteria,.criteria-cell{padding:8px 12px!important;background:var(--bg-canvas)}.criteria-content,.criteria-header{display:flex;align-items:center;gap:6px}.criteria-num,.criteria-number{font-weight:700;color:var(--accent-text);min-width:18px;font-size:12px}.input-criteria,.criteria-title-input,.criteria-input{flex:1;background:transparent;border:1px solid transparent;color:var(--ink-1);font-weight:500;padding:4px 6px;font-size:13px;border-radius:var(--r-4);transition:all var(--dur-1) var(--ease-out)}.input-criteria:focus,.criteria-title-input:focus,.criteria-input:focus{outline:none;background:var(--bg-surface-2);border-color:var(--line-2)}.cell-grade,.grade-cell{text-align:center;padding:6px 4px!important;background:var(--bg-canvas)}.input-grade,.grade-input,.grade-score-input,.scale-input{width:50px;background:var(--bg-surface-2);border:1px solid var(--line);border-radius:var(--r-4);color:var(--ink-1);text-align:center;padding:4px;font-weight:600;font-size:12px;font-feature-settings:"tnum";transition:border-color var(--dur-1) var(--ease-out)}.input-grade:focus,.grade-input:focus,.scale-input:focus{outline:none;border-color:var(--accent)}.grade-unit,.score-unit{font-size:10px;color:var(--ink-5);margin-left:2px}.row-item td,.item-row td{background:var(--bg-app)}.cell-item,.item-cell{padding:6px 12px 6px 18px!important}.item-content{display:flex;align-items:center;gap:6px}.item-indent,.item-bullet{color:var(--ink-5);font-size:11px;margin-right:4px}.input-item,.item-input{flex:1;background:transparent;border:1px solid transparent;color:var(--ink-3);font-size:12.5px;padding:3px 6px;border-radius:var(--r-4)}.input-item:focus,.item-input:focus{outline:none;background:var(--bg-surface-2);border-color:var(--line-2)}.btn-del-item,.btn-item-delete{width:18px;height:18px;padding:0;font-size:10px;border:1px solid transparent;border-radius:var(--r-4);background:transparent;color:var(--ink-5);cursor:pointer;transition:all var(--dur-1) var(--ease-out)}.btn-del-item:hover,.btn-item-delete:hover{background:var(--danger);color:#fff}.cell-check,.checkbox-cell{text-align:center;color:var(--ink-5);font-size:12px;background:var(--bg-app)}.btn-mini,.btn-add-sm,.btn-del-sm,.btn-domain-action,.btn-criteria-action,.btn-add-item,.btn-del-criteria,.btn-del-domain,.btn-table-action,.btn-add-sub{padding:3px 8px;font-size:11px;font-weight:500;border:1px solid var(--line-2);border-radius:var(--r-4);cursor:pointer;transition:all var(--dur-1) var(--ease-out);background:var(--bg-canvas);color:var(--ink-3);line-height:1.3}.btn-mini:hover{background:var(--bg-hover)}.btn-mini.add,.btn-add-sm,.btn-add-item,.btn-table-action.btn-add,.btn-domain-action.add,.btn-criteria-action.add,.btn-add-sub{background:transparent;border-color:#05895366;color:var(--success)}.btn-mini.add:hover,.btn-add-sm:hover,.btn-add-item:hover,.btn-table-action.btn-add:hover,.btn-domain-action.add:hover,.btn-criteria-action.add:hover,.btn-add-sub:hover{background:var(--success);color:#fff;border-color:var(--success)}.btn-mini.delete,.btn-del-sm,.btn-del-criteria:hover,.btn-table-action.btn-del,.btn-domain-action.delete:hover,.btn-criteria-action.delete:hover,.btn-del-domain{background:transparent;border-color:#c42a2a66;color:var(--danger)}.btn-mini.delete:hover,.btn-del-sm:hover,.btn-table-action.btn-del:hover,.btn-del-domain:hover{background:var(--danger);color:#fff;border-color:var(--danger)}.btn-table-action.btn-del-small{width:22px;height:22px;padding:0;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--line-2);color:var(--ink-5);font-size:12px}.btn-table-action.btn-del-small:hover{background:var(--danger);border-color:var(--danger);color:#fff}.btn-icon{width:30px;height:30px;border:1px solid var(--line-2);border-radius:var(--r-4);background:var(--bg-canvas);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--dur-1) var(--ease-out);font-size:13px;color:var(--ink-3)}.btn-icon.delete:hover{background:var(--danger);border-color:var(--danger);color:#fff}.add-problem-btn,.btn-add-problem,.btn-add-question,.btn-add-domain{width:100%;padding:14px;border:1px dashed var(--line-3);border-radius:var(--r-10);background:transparent;color:var(--ink-5);cursor:pointer;font-size:13px;font-weight:500;transition:all var(--dur-2) var(--ease-out);margin-bottom:14px}.add-problem-btn:hover,.btn-add-problem:hover,.btn-add-question:hover,.btn-add-domain:hover{border-color:var(--accent);color:var(--accent-text);background:var(--accent-soft);border-style:solid}.btn-add-criteria,.btn-add-inline,.btn-add-domain-inner,.btn-expand{padding:7px 12px;background:transparent;border:1px dashed var(--line-3);border-radius:var(--r-6);color:var(--ink-4);cursor:pointer;font-size:12px;font-weight:500;transition:all var(--dur-1) var(--ease-out)}.btn-add-criteria:hover,.btn-add-inline:hover,.btn-add-domain-inner:hover,.btn-expand:hover{background:var(--accent);color:#fff;border-color:var(--accent);border-style:solid}.question-label-row,.question-label-row th{background:var(--ink-1)!important;color:#fff!important;font-weight:600}.question-label-cell{text-align:left!important;padding:10px 14px!important;font-size:13px}.question-input{background:#ffffff1f;border:1px solid rgba(255,255,255,.18);color:#fff;padding:4px 10px;border-radius:var(--r-4);font-size:12.5px}.question-input::placeholder{color:#ffffff80}.question-input:focus{outline:none;border-color:#fff6;background:#ffffff2e}.question-input.question-desc-input{flex:1}.question-card{border:1px solid var(--line)}.problem-section{background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);margin-bottom:14px;overflow:hidden}.problem-header{background:var(--bg-surface-2);padding:10px 14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-bottom:1px solid var(--line)}.problem-number{font-weight:600;color:var(--accent-text);font-size:12.5px;white-space:nowrap;text-transform:uppercase;letter-spacing:.05em}.problem-title-input{flex:1;min-width:250px;background:var(--bg-canvas);border:1px solid var(--line-2);border-radius:var(--r-4);padding:6px 10px;color:var(--ink-1);font-size:12.5px}.problem-title-input:focus{outline:none;border-color:var(--accent)}.problem-meta{display:flex;align-items:center;gap:6px;color:var(--ink-4);font-size:12px}.char-limit-input,.score-input{width:50px;background:var(--bg-canvas);border:1px solid var(--line-2);border-radius:var(--r-4);padding:4px 6px;color:var(--ink-1);text-align:center;font-feature-settings:"tnum"}.problem-actions,.problem-footer{display:flex;gap:8px;padding:12px 14px;background:var(--bg-app);border-top:1px solid var(--line)}.grading-page{max-width:1480px;margin:0 auto}.grading-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.grading-title-section h1{font-size:22px;font-weight:700;margin-bottom:4px;color:var(--ink-1);letter-spacing:-.022em}.year-badge{color:var(--ink-4);font-size:13px}.grading-layout{display:grid;grid-template-columns:280px 1fr;gap:16px;height:calc(100vh - 180px)}.student-panel{background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);display:flex;flex-direction:column;overflow:hidden}.student-panel-header{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line);background:var(--bg-surface-2)}.student-panel-header h3{font-size:13px;font-weight:600;color:var(--ink-1);letter-spacing:-.005em}.student-count{background:var(--ink-1);color:#fff;padding:2px 8px;border-radius:var(--r-pill);font-size:11px;font-weight:600}.student-list-scroll{flex:1;overflow-y:auto;padding:6px}.student-card{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r-6);cursor:pointer;transition:background var(--dur-1) var(--ease-out);margin-bottom:2px;border:1px solid transparent}.student-card:hover{background:var(--bg-hover)}.student-card.selected{background:var(--accent-soft);border-color:var(--accent-soft-2)}.student-avatar{width:32px;height:32px;border-radius:var(--r-6);background:linear-gradient(180deg,#2a2e3b,#1a1d26);display:flex;align-items:center;justify-content:center;font-weight:600;color:#fff;font-size:12px;flex-shrink:0}.student-card.selected .student-avatar{background:var(--accent)}.student-details{flex:1;min-width:0}.student-name{font-weight:600;font-size:13px;color:var(--ink-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.25}.student-username{font-size:11px;color:var(--ink-5);line-height:1;margin-top:1px}.student-score{font-size:11px;padding:2px 7px;border-radius:var(--r-pill);background:var(--bg-surface-2);color:var(--ink-5);white-space:nowrap;font-weight:600;font-feature-settings:"tnum"}.student-score.scored{background:var(--success-soft);color:var(--success)}.grading-main{overflow-y:auto;padding-right:4px}.score-summary-bar{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);margin-bottom:14px;gap:16px;flex-wrap:wrap}.selected-student-info{display:flex;align-items:center;gap:8px}.student-label{color:var(--ink-5);font-size:12px}.student-name-display{font-weight:700;color:var(--ink-1);font-size:14px}.score-display{display:flex;align-items:baseline;gap:4px;font-feature-settings:"tnum"}.current-score{font-size:26px;font-weight:700;color:var(--ink-1);letter-spacing:-.025em;line-height:1}.max-score{color:var(--ink-5);font-size:14px;font-weight:500}.grading-progress{display:flex;align-items:center;gap:10px;flex:1;max-width:280px}.progress-bar-container{flex:1;height:4px;background:var(--bg-surface-3);border-radius:var(--r-pill);overflow:hidden}.progress-bar-fill{height:100%;background:var(--ink-1);border-radius:var(--r-pill);transition:width .4s var(--ease-out)}.progress-text{font-size:11.5px;color:var(--ink-4);white-space:nowrap;font-weight:600;font-feature-settings:"tnum"}.cell-grade-score,.td-grade{text-align:center;padding:8px 4px!important;background:var(--bg-canvas);cursor:pointer;transition:background var(--dur-1) var(--ease-out)}.cell-grade-score:hover,.td-grade:hover{background:var(--accent-soft)}.cell-grade-score.selected,.td-grade.selected{background:var(--accent-soft-2)}.cell-score-label{text-align:center;padding:6px 4px!important;background:var(--bg-surface-2)}.score-label,.score-value{font-weight:600;font-size:12px;color:var(--ink-2);font-feature-settings:"tnum"}.cell-item-text{padding:8px 14px!important;color:var(--ink-3);font-size:12.5px;line-height:1.5}.cell-item-checkbox{text-align:center;padding:6px!important;cursor:pointer}.cell-item-checkbox:hover{background:var(--accent-soft)}.radio-box,.grade-checkbox{width:18px;height:18px;border:1.5px solid var(--line-3);border-radius:var(--r-4);display:flex;align-items:center;justify-content:center;margin:0 auto;transition:all var(--dur-1) var(--ease-out);background:var(--bg-canvas);font-size:11px;color:#fff}.radio-box.checked,.grade-checkbox.checked{background:var(--accent);border-color:var(--accent)}.cell-item-checkbox:hover .radio-box{border-color:var(--accent)}.criteria-score-badge,.item-score-badge{display:inline-block;margin-left:8px;padding:1px 7px;background:var(--ink-1);color:#fff;font-size:11px;font-weight:600;border-radius:var(--r-pill);font-feature-settings:"tnum"}.item-score-badge{background:var(--success)}.tr-comment td{padding:0!important;background:var(--bg-app)}.criteria-comment-input{width:100%;padding:6px 14px;background:transparent;border:none;border-top:1px dashed var(--line-2);color:var(--ink-3);font-size:12.5px;font-family:inherit}.criteria-comment-input:focus{outline:none;background:var(--bg-surface-2)}.criteria-comment-input::placeholder{color:var(--ink-6)}.grading-actions{display:flex;gap:10px;margin-top:14px;margin-bottom:14px;flex-wrap:wrap}.no-student-selected{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--ink-5);gap:12px}.empty-icon{font-size:28px;opacity:.4}.problem-info-header{padding:12px 16px;background:var(--bg-surface-2);border-bottom:1px solid var(--line)}.problem-tag{font-weight:700;color:var(--accent-text);margin-right:8px}.problem-desc{color:var(--ink-1)}.problem-limits{color:var(--ink-5);font-size:12px;margin-left:8px}.grading-problem-section{background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);margin-bottom:14px;overflow:hidden}.stats-layout{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.distribution-chart{display:flex;flex-direction:column;gap:8px}.dist-row{display:flex;align-items:center;gap:12px}.dist-label{width:60px;font-size:12px;color:var(--ink-4);text-align:right;font-weight:600;font-feature-settings:"tnum"}.dist-bar-wrap{flex:1;height:16px;background:var(--bg-surface-2);border-radius:var(--r-pill);overflow:hidden}.dist-bar{height:100%;background:var(--ink-1);border-radius:var(--r-pill);min-width:4px;transition:width .4s var(--ease-out)}.dist-count{width:36px;font-size:12px;color:var(--ink-5);font-weight:500;font-feature-settings:"tnum"}.rankings-table-wrap{max-height:380px;overflow-y:auto}.rankings-table{width:100%;border-collapse:collapse}.rankings-table th,.rankings-table td{padding:9px 14px;text-align:left;border-bottom:1px solid var(--line);font-size:13px}.rankings-table th{font-size:11px;text-transform:uppercase;color:var(--ink-5);font-weight:600;position:sticky;top:0;background:var(--bg-canvas);letter-spacing:.05em}.rankings-table tbody tr:hover{background:var(--bg-hover)}.rankings-table .top-1,.rankings-table .top-2,.rankings-table .top-3{background:transparent}.rank-cell{font-weight:700;width:50px;color:var(--ink-1);font-feature-settings:"tnum"}.score-cell{font-weight:700;color:var(--ink-1);font-feature-settings:"tnum"}.percentile-cell{color:var(--ink-5);font-size:12px;font-feature-settings:"tnum"}.histogram{display:flex;align-items:flex-end;height:160px;gap:3px;padding:14px 0;border-bottom:1px solid var(--line)}.histogram-bar{flex:1;min-width:8px;border-radius:var(--r-4) var(--r-4) 0 0;transition:all var(--dur-2) var(--ease-out);cursor:pointer;background:var(--ink-1)}.histogram-bar:hover{background:var(--accent)}.histogram-legend{display:flex;justify-content:space-between;padding-top:8px;font-size:11.5px;color:var(--ink-5);font-feature-settings:"tnum"}.exam-shell{min-height:100vh;background:var(--bg-app);display:flex;flex-direction:column}.exam-topbar{position:sticky;top:0;z-index:50;background:var(--glass-bg-strong);backdrop-filter:saturate(160%) blur(14px);-webkit-backdrop-filter:saturate(160%) blur(14px);border-bottom:1px solid var(--line);padding:10px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px;height:52px}.exam-topbar-title{font-weight:600;color:var(--ink-1);font-size:13.5px;letter-spacing:-.005em;line-height:1.2}.exam-topbar-meta{font-size:11.5px;color:var(--ink-5);margin-top:2px;font-feature-settings:"tnum"}.exam-timer{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:var(--r-6);background:var(--ink-1);color:#fff;font-weight:600;font-size:13px;font-variant-numeric:tabular-nums;font-feature-settings:"tnum";line-height:1.4;border:1px solid var(--ink-1)}.exam-timer.warning{background:var(--warning);border-color:var(--warning);animation:pulse 1.5s ease-in-out infinite}.exam-timer.danger{background:var(--danger);border-color:var(--danger);animation:pulse .8s ease-in-out infinite}.exam-saving-indicator{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink-5);font-weight:500}.exam-saving-indicator .dot{width:6px;height:6px;border-radius:50%;background:var(--success)}.exam-saving-indicator.saving .dot{background:var(--warning);animation:pulse 1s ease-in-out infinite}.exam-body{flex:1;display:grid;grid-template-columns:minmax(380px,1fr) minmax(560px,2.1fr);gap:0;max-width:1640px;width:100%;margin:0 auto}.exam-prompt-pane{padding:24px;border-right:1px solid var(--line);overflow-y:auto;max-height:calc(100vh - 52px);background:var(--bg-canvas)}.exam-write-pane{padding:24px;display:flex;flex-direction:column;gap:18px;background:var(--bg-app)}.exam-question-card{background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);padding:16px 18px;margin-bottom:12px;transition:border-color var(--dur-2) var(--ease-out)}.exam-question-card:hover{border-color:var(--line-2)}.exam-question-card .q-num{display:inline-block;padding:2px 8px;background:var(--ink-1);color:#fff;border-radius:var(--r-4);font-size:10.5px;font-weight:600;margin-bottom:8px;letter-spacing:.04em;text-transform:uppercase}.exam-question-card .q-title{font-size:13px;font-weight:600;color:var(--ink-2);margin-bottom:6px;letter-spacing:-.005em}.exam-question-card .q-prompt{color:var(--ink-2);font-size:13.5px;line-height:1.7;white-space:pre-wrap}.exam-question-card .q-meta{display:flex;gap:14px;margin-top:10px;color:var(--ink-5);font-size:11.5px;font-feature-settings:"tnum";padding-top:10px;border-top:1px solid var(--line)}.exam-context-block{background:var(--bg-surface-2);border:1px solid var(--line);border-radius:var(--r-8);padding:12px 14px;margin-bottom:14px;color:var(--ink-3);font-size:12.5px;line-height:1.6}.exam-context-block .label{font-weight:600;text-transform:uppercase;letter-spacing:.06em;font-size:10.5px;margin-bottom:6px;display:block;color:var(--ink-5)}.exam-answer-block{background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);overflow:hidden;transition:border-color var(--dur-2) var(--ease-out)}.exam-answer-block:focus-within{border-color:var(--accent);box-shadow:var(--shadow-ring)}.exam-answer-header{padding:10px 16px;background:var(--bg-surface-2);border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.exam-answer-header .label{font-weight:600;font-size:12.5px;color:var(--ink-2)}.exam-answer-header .count{font-size:11.5px;color:var(--ink-5);font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.exam-answer-header .count.over{color:var(--danger);font-weight:600}.exam-textarea{width:100%;min-height:320px;padding:22px 26px;border:none;background:transparent;color:var(--ink-1);font-family:Pretendard Variable,Pretendard,"Noto Serif KR",serif;font-size:16px;line-height:1.95;letter-spacing:-.01em;word-spacing:.02em;resize:vertical;caret-color:var(--accent);font-feature-settings:"ss01","ss02","kern"}.exam-textarea:focus{outline:none}.exam-textarea::placeholder{color:var(--ink-6);font-style:italic}.exam-submit-bar{display:flex;justify-content:space-between;align-items:center;padding:12px 18px;background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);gap:14px;position:sticky;bottom:14px;box-shadow:var(--shadow-md)}.exam-summary-meta{font-size:12.5px;color:var(--ink-4);display:flex;gap:18px;font-feature-settings:"tnum"}.exam-summary-meta strong{color:var(--ink-1)}.exam-card{display:flex;flex-direction:column;gap:10px;padding:18px 20px;background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);transition:border-color var(--dur-2) var(--ease-out),transform var(--dur-2) var(--ease-out)}.exam-card:hover{border-color:var(--line-2)}.exam-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.exam-card-title{font-weight:600;font-size:14.5px;color:var(--ink-1);letter-spacing:-.01em;line-height:1.35}.exam-card-sub{font-size:12px;color:var(--ink-5);margin-top:3px;font-feature-settings:"tnum"}.exam-card-meta{display:flex;gap:14px;font-size:12px;color:var(--ink-4);font-feature-settings:"tnum";flex-wrap:wrap}.exam-card-meta b{color:var(--ink-1);font-weight:600}.exam-card-actions{display:flex;gap:6px;margin-top:6px}.annotated-answer{position:relative;background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-10);overflow:hidden}.annotated-answer-header{padding:10px 16px;background:var(--bg-surface-2);border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.annotated-answer-header .label{font-size:12.5px;font-weight:600;color:var(--ink-2)}.annotated-answer-header .meta{font-size:11.5px;color:var(--ink-5);font-feature-settings:"tnum"}.annotated-answer-body{padding:22px 26px;font-family:Pretendard Variable,Pretendard,"Noto Serif KR",serif;font-size:15.5px;line-height:2.1;color:var(--ink-1);white-space:pre-wrap;letter-spacing:-.005em}.annotated-answer-body .empty{color:var(--ink-5);font-style:italic}.anno{position:relative;cursor:pointer;border-radius:2px;padding:0 2px;margin:0 -2px;background-image:linear-gradient(transparent 50%,var(--anno-bg, var(--hl-suggest)) 50%);background-size:100% 100%;transition:background-color var(--dur-1) var(--ease-out);font-weight:500}.anno-strength{--anno-bg: var(--hl-strength);--anno-edge: var(--hl-strength-edge)}.anno-weakness{--anno-bg: var(--hl-weakness);--anno-edge: var(--hl-weakness-edge)}.anno-suggest{--anno-bg: var(--hl-suggest);--anno-edge: var(--hl-suggest-edge)}.anno:after{content:counter(anno);counter-increment:anno;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:var(--anno-edge);color:#fff;font-size:9.5px;font-weight:700;font-family:var(--font-num);margin-left:4px;margin-right:2px;vertical-align:super;font-feature-settings:"tnum";line-height:1;transform:translateY(-2px)}.anno:hover{--anno-bg: rgba(15, 17, 21, .1)}.anno.active{background-image:linear-gradient(var(--anno-edge),var(--anno-edge));color:#fff;padding:1px 4px;margin:-1px 0;border-radius:3px}.anno.active:after{background:#fff;color:var(--anno-edge)}.anno-comment-rail,.annotated-answer-body{counter-reset:anno}.anno-comment-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;counter-reset:anno-c}.anno-comment{background:var(--bg-canvas);border:1px solid var(--line);border-left:2px solid var(--anno-edge, var(--hl-suggest-edge));border-radius:var(--r-6);padding:12px 14px;cursor:pointer;transition:border-color var(--dur-1) var(--ease-out),transform var(--dur-1) var(--ease-out),box-shadow var(--dur-1) var(--ease-out);position:relative;animation:slideInUp .3s var(--ease-out) both;animation-delay:var(--delay, 0s)}.anno-comment.strength{--anno-edge: var(--hl-strength-edge)}.anno-comment.weakness{--anno-edge: var(--hl-weakness-edge)}.anno-comment.suggest{--anno-edge: var(--hl-suggest-edge)}.anno-comment:hover,.anno-comment.active{box-shadow:var(--shadow-md);transform:translate(-2px)}.anno-comment .header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.anno-comment .num{width:18px;height:18px;border-radius:50%;background:var(--anno-edge);color:#fff;display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:700;font-feature-settings:"tnum";flex-shrink:0}.anno-comment .type-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;color:var(--anno-edge)}.anno-comment .quote{font-size:12px;color:var(--ink-4);font-style:italic;margin-bottom:6px;line-height:1.5;border-left:2px dotted var(--line-3);margin-left:8px;padding:2px 0 2px 10px}.anno-comment .body{font-size:13px;color:var(--ink-1);line-height:1.6;padding-left:26px}.anno-legend{display:flex;gap:14px;padding:10px 14px;background:var(--bg-surface-2);border:1px solid var(--line);border-radius:var(--r-8);font-size:11.5px;color:var(--ink-4);margin-bottom:12px;align-items:center;flex-wrap:wrap}.anno-legend-item{display:inline-flex;align-items:center;gap:6px}.anno-legend-swatch{display:inline-block;width:22px;height:8px;border-radius:2px;background:var(--swatch-bg)}.class-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 8px 2px 7px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:-.005em;background:var(--tag-color-soft, var(--bg-surface-2));color:var(--tag-color, var(--ink-2));border:1px solid transparent;line-height:1.5;white-space:nowrap}.class-chip .dot{width:7px;height:7px;border-radius:50%;background:var(--tag-color, var(--ink-3));flex-shrink:0}.class-chip.large{padding:4px 12px 4px 10px;font-size:12px}.class-chip.outline{background:var(--bg-canvas);border:1px solid var(--tag-color, var(--line-2));color:var(--tag-color, var(--ink-2))}.class-chip.solid{background:var(--tag-color, var(--ink-1));color:#fff;border-color:transparent}.class-chip.solid .dot{background:#fffc}.color-swatch{width:22px;height:22px;border-radius:50%;cursor:pointer;border:2px solid transparent;transition:transform .12s ease,border-color .12s ease;background:var(--tag-color, var(--ink-3))}.color-swatch:hover{transform:scale(1.1)}.color-swatch.active{border-color:var(--ink-1);box-shadow:0 0 0 2px var(--bg-canvas)}.flex{display:flex}.flex-1{flex:1}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.gap-sm{gap:6px}.gap-md{gap:12px}.gap-lg{gap:20px}.mb-0{margin-bottom:0}.mb-sm{margin-bottom:8px}.mb-md{margin-bottom:16px}.mb-lg{margin-bottom:24px}.mt-md{margin-top:16px}.mt-lg{margin-top:24px}.text-muted{color:var(--ink-5)}.text-accent{color:var(--accent-text)}.text-success{color:var(--success)}.text-danger{color:var(--danger)}.text-sm{font-size:12.5px}.text-xs{font-size:11.5px}.text-bold{font-weight:600}.divider{height:1px;background:var(--line);margin:16px 0}.section-title{font-size:14px;font-weight:600;color:var(--ink-1);margin-bottom:12px;letter-spacing:-.005em}.kbd,code{font-family:var(--font-mono);font-size:11.5px;background:var(--bg-surface-2);color:var(--ink-2);padding:1px 6px;border-radius:var(--r-4);border:1px solid var(--line)}.mobile-topbar,.mobile-nav-backdrop{display:none}@media (max-width: 1024px){.stats-layout,.exam-body{grid-template-columns:1fr}.exam-prompt-pane{max-height:none;border-right:0;border-bottom:1px solid var(--line)}.grading-layout{grid-template-columns:1fr;height:auto}}@media (max-width: 768px){.mobile-topbar{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:50;height:52px;padding:0 12px;background:var(--bg-canvas);border-bottom:1px solid var(--line);backdrop-filter:saturate(180%) blur(8px);-webkit-backdrop-filter:saturate(180%) blur(8px)}.mobile-brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px;letter-spacing:-.01em;color:var(--ink-1)}.mobile-brand .logo-mark{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;background:var(--ink-1);color:#fff;border-radius:6px;font-size:11px;font-weight:700}.mobile-hamburger{width:36px;height:36px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:4px;background:transparent;border:none;cursor:pointer;padding:0;border-radius:6px}.mobile-hamburger:hover{background:var(--bg-surface-2)}.mobile-hamburger span{display:block;width:18px;height:2px;background:var(--ink-1);border-radius:1px;transition:transform .2s ease,opacity .2s ease}.mobile-nav-open .mobile-hamburger span:nth-child(1){transform:translateY(6px) rotate(45deg)}.mobile-nav-open .mobile-hamburger span:nth-child(2){opacity:0}.mobile-nav-open .mobile-hamburger span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}.mobile-nav-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:90;animation:fade-in .2s ease}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.sidebar{position:fixed;top:0;left:0;height:100dvh;width:280px!important;max-width:85vw;margin:0;border-radius:0;border-right:1px solid var(--line);z-index:100;flex-direction:column;padding:16px 14px;transform:translate(-100%);transition:transform .25s ease;overflow-y:auto}.sidebar.open{transform:translate(0)}.sidebar.collapsed{transform:translate(-100%)}.sidebar-toggle{display:none}.sidebar-logo h1{display:block!important}.sidebar-nav{flex-direction:column!important}.app-container{display:block}.main-content{margin-left:0!important;padding:14px}.main-content.expanded{margin-left:0!important}.page-header{flex-direction:column;align-items:stretch!important;gap:10px}.page-title{font-size:20px}.page-subtitle{font-size:12.5px}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px!important}.stat-value{font-size:22px!important}.stat-label{font-size:11px!important}.card{padding:14px!important}.card-header{gap:8px;flex-wrap:wrap}.fade-in [style*=gridTemplateColumns][style*="1.4fr"],.fade-in [style*=gridTemplateColumns][style*="1.5fr"],.fade-in [style*=gridTemplateColumns][style*="1.6fr"],.fade-in [style*=gridTemplateColumns][style*="1fr 1fr"],.fade-in [style*=gridTemplateColumns][style*="1fr 1.4fr"],.fade-in [style*=gridTemplateColumns][style*="1fr 2fr"],.fade-in [style*=gridTemplateColumns][style*="2fr 1fr"],.fade-in [style*=gridTemplateColumns][style*="repeat(2"],.fade-in [style*=gridTemplateColumns][style*="repeat(3"],.fade-in [style*=gridTemplateColumns][style*="repeat(4"],.fade-in [style*="minmax(420px"],.fade-in [style*="minmax(400px"],.fade-in [style*="minmax(380px"],.fade-in [style*="minmax(360px"],.fade-in [style*="minmax(340px"],.fade-in [style*="minmax(320px"],.fade-in [style*="minmax(280px"],.fade-in [style*="minmax(240px"],.fade-in [style*="minmax(200px"]{grid-template-columns:1fr!important}.modal-overlay{padding:12px!important}.modal,.modal.lg{max-width:100%!important;width:100%;padding:18px!important;max-height:90dvh;overflow-y:auto}.modal-title{font-size:18px}.modal-actions{flex-wrap:wrap;gap:6px}.modal-actions .btn{flex:1;min-width:90px}.card{overflow-x:auto;-webkit-overflow-scrolling:touch}table{min-width:520px}table th,table td{padding:8px 10px!important;font-size:12px!important;white-space:nowrap}table td span,table td div{max-width:160px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.login-card{padding:28px 22px!important}.form-input,.form-select,.form-textarea{font-size:16px!important}.btn{min-height:36px}.page-header>div:last-child{display:flex;flex-wrap:wrap;gap:6px}.page-header>div:last-child .btn{flex:0 0 auto}}@media (max-width: 480px){.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}.stat-value{font-size:20px!important}.main-content{padding:12px}.page-title{font-size:18px}.card{padding:12px!important}}.announce-body strong{font-weight:700;color:var(--ink-1)}.announce-body a{color:var(--accent);text-decoration:underline;text-underline-offset:2px;word-break:break-all}.announce-body a:hover{color:var(--accent-text)}@media (max-width: 768px){.domain-bar-row{flex-wrap:wrap;row-gap:4px!important;gap:8px!important}.db-name{min-width:70px!important;font-size:12px!important}.db-level{min-width:28px!important;font-size:10px!important}.db-pct{min-width:36px!important;font-size:12px!important}.db-trend{min-width:auto!important;font-size:10.5px!important}.db-note{display:none!important}}@media (max-width: 768px){.fade-in table th[style*=width],.fade-in table td[style*=width]{width:auto!important}}@media (max-width: 480px){.login-container{padding:0!important}.login-card{border-radius:0!important;border-left:0!important;border-right:0!important;min-height:100dvh;padding:32px 18px!important}}body{background:hsl(var(--tint-h, 220),var(--tint-s, 8%),97.5%)!important;transition:background .22s ease}.card,.modal,.stat-card{background:hsl(var(--tint-h, 220),var(--tint-s, 8%),99.5%);border-color:hsl(var(--tint-h, 220),var(--tint-s, 8%),90%);transition:background .22s ease,border-color .22s ease}.sidebar{background:hsl(var(--tint-h, 220),var(--tint-s, 8%),99%)!important;border-right-color:hsl(var(--tint-h, 220),var(--tint-s, 8%),90%)!important;transition:background .22s ease,border-right-color .22s ease}.sidebar-logo,.sidebar-footer{background:hsl(var(--tint-h, 220),var(--tint-s, 8%),98%);border-color:hsl(var(--tint-h, 220),var(--tint-s, 8%),92%)}.nav-item.active{background:hsla(var(--accent-h),var(--accent-s),var(--accent-l),.12)!important;color:hsl(var(--accent-h),var(--accent-s),var(--accent-l))!important;border-left:3px solid hsl(var(--accent-h),var(--accent-s),var(--accent-l));padding-left:9px}.nav-item.active .nav-icon{color:hsl(var(--accent-h),var(--accent-s),var(--accent-l))}.nav-item:hover{background:hsla(var(--accent-h),var(--accent-s),var(--accent-l),.05)}.nav-section-label{color:hsla(var(--accent-h),var(--accent-s),var(--accent-l),.7)}.sidebar-logo .logo-mark{box-shadow:0 0 0 2px hsla(var(--accent-h),var(--accent-s),var(--accent-l),.2)}.btn-primary{background:hsl(var(--accent-h),var(--accent-s),var(--accent-l))!important;border-color:hsl(var(--accent-h),var(--accent-s),var(--accent-l))!important;color:#fff!important}.btn-primary:hover:not(:disabled){background:hsl(var(--accent-h),var(--accent-s),calc(var(--accent-l) - 8%))!important;border-color:hsl(var(--accent-h),var(--accent-s),calc(var(--accent-l) - 8%))!important}.btn-primary:focus-visible{box-shadow:0 0 0 3px hsla(var(--accent-h),var(--accent-s),var(--accent-l),.25)!important}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:hsl(var(--accent-h),var(--accent-s),var(--accent-l))!important;box-shadow:0 0 0 3px hsla(var(--accent-h),var(--accent-s),var(--accent-l),.15)!important}.page-eyebrow{color:hsl(var(--accent-h),var(--accent-s),var(--accent-l))!important}.pill{transition:background .22s ease,color .22s ease}.role-badge.admin{background:hsla(var(--accent-h),var(--accent-s),var(--accent-l),.12);color:hsl(var(--accent-h),var(--accent-s),var(--accent-l));border:1px solid hsla(var(--accent-h),var(--accent-s),var(--accent-l),.25)}.stat-card.highlight{background:linear-gradient(135deg,hsla(var(--accent-h),var(--accent-s),var(--accent-l),.05),hsla(var(--accent-h),var(--accent-s),var(--accent-l),.1))!important;border-color:hsla(var(--accent-h),var(--accent-s),var(--accent-l),.25)!important}.stat-card.highlight .stat-value{color:var(--ink-1)!important}.stat-card.highlight .stat-label{color:hsl(var(--accent-h),var(--accent-s),calc(var(--accent-l) - 6%))!important}.theme-popover{max-width:calc(100vw - 24px)}.form-input.has-error{border-color:var(--danger)!important;box-shadow:0 0 0 3px #e425251a}
