:root{--background:#f8fafc;--surface:#ffffff;--foreground:#0f172a;--muted:#64748b;--border:#e2e8f0;--accent:#2563eb;--accent-hover:#1d4ed8;--danger:#b91c1c;--focus:#3b82f6;--dorm-rating-excellent-color:#6f927e;--dorm-rating-excellent-soft:#e7eee9;--dorm-rating-excellent-border:#b8cbbd;--dorm-rating-excellent-text:#4e6b59;--dorm-rating-normal-color:#6f879f;--dorm-rating-normal-soft:#e7edf2;--dorm-rating-normal-border:#b7c6d3;--dorm-rating-normal-text:#4f667c;--dorm-rating-needs-rectification-color:#a9786f;--dorm-rating-needs-rectification-soft:#f2e6e3;--dorm-rating-needs-rectification-border:#d8b9b2;--dorm-rating-needs-rectification-text:#7c534c;--settings-success-surface:#ecfdf5;--settings-danger-surface:#fef2f2}*{box-sizing:border-box;margin:0;padding:0}body,html{min-height:100%}body{background:var(--background);color:var(--foreground);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:15px;line-height:1.5;letter-spacing:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,select,textarea{font:inherit;letter-spacing:0;line-height:1.35}button{cursor:pointer}button:disabled{cursor:wait;opacity:.65}.auth-page{align-items:center;display:flex;min-height:100vh;padding:32px 20px}.login-panel{background:var(--surface);border:1px solid var(--border);border-radius:8px;margin:0 auto;max-width:420px;padding:32px;width:100%}.brand-mark{align-items:center;background:var(--accent);border-radius:12px;color:#ffffff;display:flex;font-size:14px;font-weight:700;height:36px;justify-content:center;margin-bottom:16px;width:36px}.product-name,.section-label{color:var(--muted);font-size:13px;font-weight:600;line-height:1.35}.login-panel h1{font-size:24px;line-height:1.25;margin:6px 0 28px}.field-group,.login-form{display:flex;flex-direction:column}.login-form{gap:18px}.field-group{gap:7px}.field-group label{font-size:14px;font-weight:600;line-height:1.4}.field-group input{background:#ffffff;border:1px solid #cbd5e1;border-radius:10px;color:var(--foreground);height:42px;line-height:1.35;padding:0 12px;width:100%}.field-group input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgb(37 99 235/14%);outline:none}.login-remember-row{align-items:center;display:flex;gap:10px;min-height:44px}.login-remember-row input[type=checkbox]{accent-color:var(--accent);flex:0 0 auto;height:18px;margin:0;width:18px}.login-remember-row label{color:var(--muted);cursor:pointer;font-size:14px;line-height:1.4}.form-error{color:var(--danger);font-size:13px;min-height:20px}.primary-button,.secondary-button{align-items:center;border-radius:10px;display:inline-flex;gap:8px;font-size:14px;font-weight:600;line-height:1.35;min-height:40px;padding:8px 16px}.primary-button{background:var(--accent);border:1px solid var(--accent);color:#ffffff;width:100%}.primary-button:hover:not(:disabled){background:var(--accent-hover)}.danger-button{align-items:center;background:#fff5f3;border:1px solid #fecaca;border-radius:10px;color:var(--danger);display:inline-flex;font-size:14px;font-weight:600;gap:8px;line-height:1.35;min-height:40px;padding:8px 16px}.danger-button:hover:not(:disabled){background:#fee9e6}.secondary-button{background:#ffffff;border:1px solid #cbd5e1;color:var(--foreground)}.secondary-button:hover{background:#f8fafc}.primary-button:focus-visible,.secondary-button:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.app-shell{display:flex;min-height:100vh;min-width:0;width:100%}.app-main-shell{display:flex;flex:1 1;flex-direction:column;min-width:0}.app-sidebar{background:var(--surface);border-right:1px solid var(--border);display:flex;flex:0 0 288px;flex-direction:column;min-height:100vh;min-width:0;padding:24px 16px;position:sticky;top:0}.app-sidebar-brand{align-items:center;display:flex;gap:12px;padding:0 8px}.app-sidebar-logo{align-items:center;background:#eff6ff;border:1px solid #dbeafe;border-radius:999px;color:var(--accent);display:flex;flex:0 0 auto;height:40px;justify-content:center;width:40px}.app-sidebar-logo-icon{height:20px;width:20px}.app-sidebar-system-name{color:var(--foreground);font-size:14px;font-weight:700;line-height:1.25}.app-sidebar-system-subtitle{color:var(--muted);font-size:12px;margin-top:3px}.app-sidebar-account{border-bottom:1px solid var(--border);margin:24px 8px 0;padding:0 0 20px}.app-sidebar-account-label{color:var(--muted);display:block;font-size:12px}.app-sidebar-account-name{color:var(--foreground);display:block;font-size:14px;font-weight:600;margin-top:4px}.app-sidebar-nav{display:grid;gap:4px;margin-top:24px}.app-sidebar-link{align-items:center;border-radius:10px;color:var(--muted);display:flex;font-size:14px;font-weight:600;gap:12px;min-height:44px;padding:10px 12px;text-decoration:none;transition:background-color .15s ease,color .15s ease}.app-sidebar-link.is-active,.app-sidebar-link:focus-visible,.app-sidebar-link:hover{background:#eff6ff;color:#1d4ed8}.app-sidebar-link:focus-visible{outline:3px solid rgb(59 130 246/28%);outline-offset:2px}.app-sidebar-icon{flex:0 0 auto;height:18px;width:18px}.app-header{align-items:center;background:var(--surface);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;min-height:72px;padding:14px 32px}.app-nav{display:none;min-width:0;width:100%}.app-nav-inner{align-items:center;display:flex;gap:6px;overflow-x:auto;min-width:0;padding:8px max(16px,env(safe-area-inset-left)) 8px max(16px,env(safe-area-inset-right))}.app-nav-link{align-items:center;border-radius:8px;color:var(--muted);display:inline-flex;flex:0 0 auto;font-size:14px;font-weight:600;gap:8px;min-height:44px;padding:10px 12px;white-space:nowrap;text-decoration:none}.app-nav-label{line-height:1.25}.app-nav-icon{flex:0 0 auto;height:18px;width:18px}.app-content{flex:1 1;min-width:0}.app-nav-link:focus-visible,.app-nav-link:hover,.table-primary-link:focus-visible,.table-primary-link:hover,.text-link:focus-visible,.text-link:hover{color:var(--accent)}.app-nav-link:focus-visible,.app-nav-link:hover{text-decoration:none}.signed-in-user{font-size:14px;font-weight:600;margin-top:2px}.dashboard-page{margin:0 auto;max-width:1120px;padding:40px 24px}.workspace-page{margin:0 auto;max-width:1280px;padding:32px 32px 56px}.workspace-heading{align-items:flex-start;display:flex;justify-content:space-between;gap:24px}.workspace-heading h1{font-size:28px;line-height:1.25;margin-top:4px}.heading-actions,.pagination-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.workspace-panel{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 1px 2px rgb(15 23 42/4%);margin-top:24px;padding:24px}.growth-analytics-dashboard{display:grid;gap:18px;margin-top:24px}.growth-analytics-heading{align-items:end;display:flex;justify-content:space-between;gap:18px}.growth-analytics-heading h2{font-size:20px;line-height:1.3;margin-top:4px}.growth-analytics-grid{align-items:stretch;display:grid;gap:18px;grid-template-columns:minmax(0,1.25fr) minmax(280px,.75fr)}.growth-analytics-panel{margin-top:0}.growth-radar{display:grid;gap:8px}.growth-radar-heading{align-items:center;display:flex;justify-content:space-between;gap:16px}.growth-radar-heading h3{font-size:18px;line-height:1.3;margin-top:4px}.growth-stat-grid{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.growth-stat-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;display:grid;gap:8px;min-height:144px;padding:18px}.growth-stat-card strong{color:var(--foreground);font-size:32px;line-height:1}.growth-stat-card small{color:var(--muted);font-size:12px}.panel-heading{align-items:center;display:flex;gap:16px;justify-content:space-between}.panel-heading h2{font-size:18px;line-height:1.3}.compact-heading{justify-content:flex-start;margin-bottom:20px}.inline-button{display:inline-flex;justify-content:center;text-decoration:none;width:auto}.student-filter-form{grid-template-columns:minmax(180px,2fr) repeat(3,minmax(120px,1fr)) auto}.student-filter-form,.talk-filter-form{align-items:end;border-bottom:1px solid var(--border);display:grid;gap:14px;margin-top:22px;padding-bottom:22px}.talk-filter-form{grid-template-columns:minmax(220px,1fr) auto auto}.talk-detail-sections{display:grid;gap:20px}.talk-detail-section{border-top:1px solid var(--border);padding-top:18px}.talk-detail-section:first-child{border-top:0;padding-top:0}.talk-detail-section h3{font-size:16px;line-height:1.4}.talk-detail-section p{margin-top:8px;overflow-wrap:anywhere;white-space:pre-wrap}.field-group select,.field-group textarea{background:#ffffff;border:1px solid #cbd5e1;border-radius:10px;color:var(--foreground);line-height:1.35;min-height:42px;padding:8px 12px;width:100%}.field-group textarea{line-height:1.6}.field-group select:focus,.field-group textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgb(37 99 235/14%);outline:none}.filter-submit{min-height:42px;white-space:nowrap}.filter-clear{grid-column:1/-1}.table-primary-link,.text-link{color:var(--accent);text-decoration:none}.table-wrap{overflow-x:auto}.student-table{border-collapse:collapse;min-width:720px;width:100%}.student-table td,.student-table th{border-bottom:1px solid var(--border);padding:14px 10px;text-align:left;vertical-align:top}.student-table th{color:var(--muted);font-size:13px;font-weight:600}.student-table tr:last-child td{border-bottom:0}.table-primary-link,.table-secondary-text{display:block}.table-primary-link{font-weight:700}.empty-inline,.empty-state p,.muted-text,.section-footnote,.table-secondary-text{color:var(--muted);font-size:13px}.table-secondary-text{margin-top:3px}.empty-state{border:1px dashed var(--border);margin-top:22px;padding:38px 20px;text-align:center}.empty-state h3{font-size:16px}.empty-state p{margin-top:6px}.pagination{align-items:center;display:flex;justify-content:space-between;gap:16px;margin-top:18px}.metrics-grid{display:grid;gap:16px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:24px}.metric-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;display:flex;flex-direction:column;gap:6px;padding:20px;text-decoration:none}.metric-card:focus-visible,.metric-card:hover{border-color:var(--accent)}.metric-card strong{color:var(--foreground);font-size:30px;line-height:1.1}.student-detail-grid{display:grid;gap:24px;grid-template-columns:repeat(2,minmax(0,1fr))}.student-form{margin-top:24px}.form-section{margin-top:18px}.talk-student-summary{align-items:baseline;background:#f4f6f5;border:1px solid var(--border);border-radius:6px;display:flex;flex-wrap:wrap;gap:10px;margin-bottom:20px;padding:12px 14px}.talk-student-summary span:first-child{color:var(--muted);font-size:13px}.talk-student-summary span:last-child{color:var(--muted);font-size:14px}.form-notice{background:#fffaf0;border:1px solid #ead7a6;border-radius:6px;color:#6b5520;margin-bottom:20px;padding:10px 12px}.form-grid,.talk-body-fields{display:grid;gap:18px}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.field-wide{grid-column:1/-1}.field-label,.readonly-field{font-size:14px;font-weight:600}.readonly-field{background:#f4f6f5;border:1px solid var(--border);border-radius:6px;min-height:42px;padding:9px 12px}.form-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}.growth-workspace{margin-top:24px}.growth-tab-panel{min-width:0}.growth-record-form{margin-top:0}.growth-selector{display:grid;gap:14px;margin-top:18px}.growth-selector-results{display:flex;flex-wrap:wrap;gap:8px}.growth-selector-option{background:#f4f6f5;border:1px solid var(--border);border-radius:6px;color:var(--foreground);padding:7px 10px}.growth-selector-option:focus-visible,.growth-selector-option:hover:not(:disabled){border-color:var(--accent)}.growth-chip-list,.growth-historical-students{display:flex;flex-wrap:wrap;gap:8px}.growth-chip{align-items:center;background:#edf6f1;border:1px solid #b7d7c7;border-radius:999px;color:var(--foreground);display:inline-flex;gap:6px;padding:5px 9px}.growth-chip button{background:transparent;border:0;color:var(--muted);font-size:17px;line-height:1;padding:0 2px}.growth-chip-muted{background:#f4f6f5;border-color:var(--border);color:var(--muted)}.growth-historical-students{align-items:center;border-top:1px solid var(--border);padding-top:14px}.growth-mode-field{max-width:420px}.growth-save-status{color:var(--accent);font-size:13px;font-weight:600}.growth-attachment-state.is-enabled{border-color:#b7d7c7}.growth-attachment-state.is-disabled{background:#fbfcfb}.growth-coming-soon{display:grid;gap:10px}.growth-empty-list,.growth-timeline{display:grid;gap:18px}.growth-timeline-filters{align-items:end;background:#fbfcfb;border:1px solid var(--border);border-radius:8px;display:flex;flex-wrap:wrap;gap:12px 16px;padding:14px}.growth-timeline-filter{display:grid;gap:6px;min-width:220px}.growth-timeline-filter select{background:var(--surface);border:1px solid var(--border);border-radius:6px;color:var(--ink);min-height:38px;padding:8px 10px}.growth-timeline-nodes{display:grid;gap:18px}.growth-project-timeline,.growth-standalone-timeline{background:#fbfcfb;border:1px solid var(--border);border-radius:8px;padding:20px}.growth-project-timeline-heading{align-items:flex-start;display:flex;justify-content:space-between;gap:16px}.growth-project-timeline-heading h3{font-size:18px;line-height:1.3;margin-top:4px}.growth-project-status{background:#edf6f1;border:1px solid #b7d7c7;border-radius:999px;color:var(--accent);font-size:13px;padding:5px 9px;white-space:nowrap}.growth-project-stages{border-left:2px solid var(--border);display:grid;gap:0;margin:18px 0 0 8px;padding-left:18px}.growth-timeline-record{align-items:flex-start;display:grid;gap:12px;grid-template-columns:10px minmax(0,1fr) auto;padding:8px 0 18px;position:relative}.growth-timeline-record:last-child{padding-bottom:0}.growth-timeline-record-marker{background:var(--accent);border:2px solid var(--surface);border-radius:50%;box-shadow:0 0 0 1px var(--accent);height:8px;margin-top:7px;width:8px}.growth-timeline-record-main{min-width:0}.growth-timeline-record-heading{align-items:baseline;display:flex;justify-content:space-between;gap:14px}.growth-timeline-record-heading h3{font-size:16px;line-height:1.3;margin-top:3px;overflow-wrap:anywhere}.growth-timeline-record-heading time{color:var(--muted);flex-shrink:0;font-size:13px}.growth-timeline-record-meta{align-items:center;color:var(--muted);display:flex;flex-wrap:wrap;font-size:13px;gap:8px 14px;margin-top:7px}.growth-timeline-record-hint{color:var(--accent);font-size:13px;margin-top:8px}.growth-timeline-record-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.growth-empty-list,.growth-record-list{display:grid;gap:18px}.growth-record-rows{border-top:1px solid var(--border)}.growth-record-row{align-items:center;border-bottom:1px solid var(--border);display:flex;gap:18px;justify-content:space-between;padding:16px 0}.growth-record-row:last-child{border-bottom:0;padding-bottom:0}.growth-record-row-main{min-width:0}.growth-record-row-main h3{font-size:16px;overflow-wrap:anywhere}.growth-record-row-meta{align-items:center;color:var(--muted);display:flex;flex-wrap:wrap;font-size:13px;gap:8px 14px;margin-top:6px}.growth-attachment-actions,.growth-record-row-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.growth-record-row-actions{flex-shrink:0}.growth-delete-control{align-items:center;display:inline-flex;flex-wrap:wrap;gap:8px}.growth-attachment-panel{display:grid;gap:14px}.growth-file-picker{align-items:center;cursor:pointer;justify-self:start}.growth-file-picker input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.growth-file-picker:focus-within{outline:3px solid var(--focus);outline-offset:2px}.growth-attachment-list{border-top:1px solid var(--border);list-style:none}.growth-attachment-item{align-items:center;border-bottom:1px solid var(--border);display:flex;gap:16px;justify-content:space-between;padding:12px 0}.growth-attachment-item>span:first-child{display:grid;gap:2px;min-width:0}.growth-attachment-item strong{overflow-wrap:anywhere}.growth-attachment-item small{color:var(--muted);font-size:12px}.growth-project-controls{background:#fbfcfb;border:1px solid var(--border);border-radius:8px;margin-top:18px;padding:20px 24px}.growth-project-control-grid{display:grid;gap:18px;grid-template-columns:repeat(2,minmax(0,1fr))}.restore-panel{background:#fffaf0;border:1px solid #ead7a6;border-radius:8px;margin-top:24px;padding:20px}.restore-panel h3{font-size:16px}.restore-panel>p{margin:6px 0 14px}.restore-summary{border-top:1px solid #ead7a6;margin-top:16px;padding-top:16px}.restore-summary form{margin-top:14px}.inline-error{display:block;margin-top:6px}.detail-grid{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.detail-field dt,.detail-notes dt{color:var(--muted);font-size:13px}.detail-field dd,.detail-notes dd{margin-top:3px;overflow-wrap:anywhere}.detail-notes{border-top:1px solid var(--border);margin-top:20px;padding-top:16px}.gpa-summary-row{border-bottom:1px solid var(--border);display:flex;flex-wrap:wrap;gap:24px;padding-bottom:16px}.empty-inline{padding:22px 0 4px}.section-footnote{margin-top:18px}.gpa-panel{display:grid;gap:20px;padding-top:20px}.gpa-form{display:grid;gap:14px}.gpa-form-grid{margin:0}.gpa-record-list{display:grid;gap:16px}.gpa-record-card{border:1px solid var(--border);border-radius:8px;display:grid;gap:12px;padding:16px}.gpa-record-card>form:last-child{align-items:center;display:flex;flex-wrap:wrap;gap:12px}.placeholder-panel{background:transparent;border-style:dashed}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);white-space:nowrap}.page-heading h1{font-size:28px;line-height:1.25;margin-top:4px}.status-panel{align-items:center;border-top:1px solid var(--border);display:flex;gap:14px;margin-top:32px;padding:24px 0}.status-panel h2{font-size:16px}.status-panel p{color:var(--muted);font-size:14px;margin-top:2px}.status-indicator{background:#23855f;border:3px solid #d9f0e7;border-radius:50%;height:14px;width:14px}.talk-ai-job-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;bottom:24px;box-shadow:0 10px 28px rgb(23 33 29/14%);max-width:340px;padding:16px;position:fixed;right:24px;width:calc(100vw - 48px);z-index:30}.talk-ai-job-heading{align-items:flex-start;display:flex;gap:12px;justify-content:space-between}.talk-ai-job-heading strong{display:block;margin-top:4px}.talk-ai-job-spinner{animation:talk-ai-job-spin .9s linear infinite;border-radius:50%;border:3px solid #d9f0e7;border-top:3px solid var(--accent);flex:0 0 auto;height:18px;width:18px}.talk-ai-job-note{color:var(--muted);font-size:13px;margin-top:10px}.student-growth-panel{display:grid;gap:18px;margin-top:24px}.student-growth-heading{color:var(--foreground);font-size:20px;margin:0}.student-growth-groups{display:grid;gap:20px}.student-growth-group{border-top:1px solid var(--border);padding-top:16px}.student-growth-group-heading{align-items:center;display:flex;gap:16px;justify-content:space-between}.student-growth-group-heading h3{color:var(--foreground);font-size:16px;margin:0}.student-growth-toggle{background:transparent;border:0;color:var(--accent);cursor:pointer;font:inherit;font-size:13px;padding:4px 0}.student-growth-toggle:hover{color:var(--accent-hover)}.student-growth-list{display:grid;gap:10px;list-style:none;margin:12px 0 0;padding:0}.student-growth-item{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px 16px;transition:border-color .15s ease,box-shadow .15s ease}.student-growth-item:hover{border-color:var(--accent);box-shadow:0 4px 12px rgb(35 93 68/8%)}.student-growth-item-heading{align-items:baseline;display:flex;gap:16px;justify-content:space-between}.student-growth-title{color:var(--foreground);font-weight:700;min-width:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.student-growth-title:hover{color:var(--accent-hover)}.student-growth-date{color:var(--muted);flex:0 0 auto;font-size:13px;white-space:nowrap}.student-growth-meta{align-items:center;display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.student-growth-badge{background:color-mix(in srgb,var(--accent) 10%,var(--surface));border:1px solid color-mix(in srgb,var(--accent) 30%,var(--border));border-radius:999px;color:var(--accent);font-size:12px;line-height:1.4;padding:2px 8px}.student-growth-parent,.student-growth-project,.student-growth-summary{color:var(--muted);font-size:13px}.student-growth-summary{margin:8px 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.student-growth-empty{border:1px dashed var(--border);color:var(--muted);margin:24px 0 0;padding:32px 20px;text-align:center}.talk-ai-launch-controls{display:grid;gap:14px;max-width:540px}@keyframes talk-ai-job-spin{to{transform:rotate(1turn)}}@media (max-width:560px){.auth-page{align-items:flex-start;padding:20px 14px}.login-panel{padding:24px 20px}.app-header{gap:16px;padding:12px 16px}.app-header .product-name{max-width:210px}.app-nav-inner{gap:4px;padding:4px max(16px,env(safe-area-inset-left)) 8px max(16px,env(safe-area-inset-right))}.dashboard-page{padding:28px 16px}.workspace-page{padding:28px 16px 44px}.pagination,.workspace-heading{align-items:stretch;flex-direction:column}.metrics-grid,.student-detail-grid,.student-filter-form,.talk-filter-form{grid-template-columns:1fr}.workspace-panel{padding:18px}.growth-attachment-item,.growth-record-row,.growth-timeline-record{align-items:flex-start;flex-direction:column}.growth-attachment-actions,.growth-record-row-actions{width:100%}.growth-project-control-grid{grid-template-columns:1fr}.student-growth-item-heading{align-items:flex-start;flex-direction:column;gap:4px}.detail-grid,.form-grid{grid-template-columns:1fr}.talk-ai-job-card{bottom:16px;right:16px;width:calc(100vw - 32px)}}.data-workspace{display:grid;gap:20px}.data-workspace>.page-heading{margin-bottom:0}.data-tab-panel{min-width:0}.data-panel{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 1px 2px rgb(15 23 42/4%);padding:24px}.data-panel-heading,.data-preview-heading{align-items:flex-start;display:flex;gap:16px;justify-content:space-between}.data-mapping-panel h3,.data-panel-heading h2,.data-preview-heading h3{color:var(--foreground);font-size:17px;font-weight:650;line-height:1.4}.data-mapping-panel>p,.data-panel-heading p,.data-preview-heading p{color:var(--muted);font-size:13px;line-height:1.6;margin-top:5px}.data-import-grid{display:grid;gap:24px;grid-template-columns:minmax(240px,320px) minmax(0,1fr);margin-top:24px}.data-import-controls,.data-preview-panel{min-width:0}.data-import-controls{display:grid;gap:20px;align-content:start}.data-import-controls .field-group>input[type=file]{background:#f8fafc;border:1px dashed #cbd5e1;border-radius:12px;color:var(--muted);display:block;font-size:13px;margin-top:8px;padding:14px;width:100%}.data-import-controls .field-group>input[type=file]::file-selector-button{background:#eff6ff;border:0;border-radius:999px;color:#1d4ed8;cursor:pointer;font-size:12px;font-weight:600;margin-right:10px;padding:8px 12px}.field-hint{color:var(--muted);font-size:12px;line-height:1.5;margin-top:8px}.data-mapping-panel,.data-preview-panel{background:#f8fafc;border:1px solid #e2e8f0;border-radius:14px;padding:16px}.data-mapping-list{display:grid;gap:12px;margin-top:16px;max-height:620px;overflow-y:auto;padding-right:2px}.data-mapping-field{color:#475569;display:grid;font-size:12px;font-weight:600;gap:5px}.data-mapping-field select{background:#fff;border:1px solid #cbd5e1;border-radius:9px;color:#334155;font-size:13px;min-height:36px;padding:7px 9px;width:100%}.data-preview-panel{min-height:260px}.data-preview-table-wrap{background:#fff;border:1px solid #e2e8f0;border-radius:10px;margin-top:16px;overflow-x:auto}.data-preview-table{border-collapse:collapse;min-width:620px;width:100%}.data-preview-table td,.data-preview-table th{border-bottom:1px solid #f1f5f9;font-size:13px;padding:11px 12px;text-align:left;white-space:nowrap}.data-preview-table th{background:#f8fafc;color:#475569;font-size:12px;font-weight:650}.data-preview-table td{color:#334155}.data-empty-preview{align-items:center;background:#fff;border:1px dashed #cbd5e1;border-radius:10px;color:var(--muted);display:flex;font-size:13px;justify-content:center;margin-top:16px;min-height:164px;padding:24px}.data-error-report,.data-success-report,.data-warning{border-radius:10px;font-size:13px;line-height:1.6;margin-top:16px;padding:11px 13px}.data-export-options{display:grid;gap:12px;margin-top:24px}.data-export-option{align-items:flex-start;border:1px solid #e2e8f0;border-radius:12px;cursor:pointer;display:flex;gap:12px;padding:15px;transition:border-color .15s ease,background .15s ease}.data-export-option.is-selected,.data-export-option:hover{background:#eff6ff;border-color:#93c5fd}.data-export-option input{accent-color:#2563eb;margin-top:3px}.data-export-option span{display:grid;gap:3px}.data-export-option strong{color:var(--foreground);font-size:14px;font-weight:650}.data-export-option small{color:var(--muted);font-size:12px;line-height:1.5}.data-export-button{align-items:center;display:inline-flex;gap:8px;margin-top:20px}.data-secondary-link{border-top:1px solid var(--border);margin-top:20px;padding-top:16px}.data-secondary-link a{color:#2563eb;font-size:13px;font-weight:600;text-decoration:none}.data-secondary-link a:hover{text-decoration:underline}.legacy-migration-form{display:grid;gap:20px;margin-top:24px}.legacy-migration-controls{display:grid;gap:20px;grid-template-columns:minmax(0,1fr) minmax(260px,.8fr)}.legacy-migration-controls input[type=file],.legacy-migration-controls select{background:#f8fafc;border:1px solid #cbd5e1;border-radius:10px;color:#334155;font-size:13px;margin-top:8px;min-height:40px;padding:8px 10px;width:100%}.legacy-report{margin-top:24px}.legacy-report-summary{display:grid;gap:12px;grid-template-columns:repeat(4,minmax(0,1fr))}.legacy-report-summary>div{background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;display:grid;gap:5px;padding:14px}.legacy-report-summary span{color:var(--muted);font-size:12px}.legacy-report-summary strong{color:var(--foreground);font-size:20px}.legacy-report-counts{color:#475569;display:flex;flex-wrap:wrap;font-size:13px;gap:8px 18px;margin-top:16px}.legacy-formal-import-form{border-top:1px solid var(--border);display:grid;gap:10px;margin-top:24px;padding-top:20px}.legacy-confirmation{align-items:center;color:var(--foreground);display:flex;font-size:13px;font-weight:600;gap:9px}.legacy-confirmation input{accent-color:#2563eb;height:16px;width:16px}.legacy-import-result{background:#ecfdf5;border:1px solid #a7f3d0;border-radius:10px;color:#047857;font-size:13px;line-height:1.6;margin-top:16px;padding:11px 13px}.legacy-import-result .legacy-report-counts{color:#047857;margin-top:8px}.import-batch-history{margin-top:20px}.import-batch-history-table-wrap{margin-top:20px;overflow-x:auto}.import-batch-history-table{border-collapse:collapse;min-width:760px;width:100%}.import-batch-history-table td,.import-batch-history-table th{border-bottom:1px solid #e2e8f0;color:#475569;font-size:12px;padding:12px 10px;text-align:left;vertical-align:middle;white-space:nowrap}.import-batch-history-table th{background:#f8fafc;color:#64748b;font-weight:650}.import-batch-history-table td:first-child{display:grid;gap:3px}.import-batch-history-table td:first-child strong{color:var(--foreground);font-size:13px;font-weight:650}.import-batch-history-table td:first-child small{color:#94a3b8;font-size:10px}.import-batch-actions{display:flex;flex-wrap:wrap;gap:8px}.import-batch-verification-summary{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:6px}.import-batch-verification-summary+small{display:block;margin-top:6px}.import-batch-status{border-radius:999px;display:inline-flex;font-size:11px;font-weight:650;padding:4px 8px}.import-batch-status.is-completed,.import-batch-status.is-rolled_back{background:#ecfdf5;color:#047857}.import-batch-status.is-completed_needs_reconciliation,.import-batch-status.is-completed_with_errors,.import-batch-status.is-rollback_failed{background:#fffbeb;color:#92400e}.import-batch-status.is-rolling_back,.import-batch-status.is-running{background:#eff6ff;color:#1d4ed8}.import-batch-status.is-failed{background:#fef2f2;color:#b91c1c}@media (max-width:680px){.legacy-migration-controls,.legacy-report-summary{grid-template-columns:1fr}}.data-warning{background:#fffbeb;border:1px solid #fde68a;color:#92400e}.data-error-report{background:#fef2f2;border:1px solid #fecaca;color:#b91c1c}.data-error-report ul{margin:5px 0 0 17px}.data-success-report{background:#ecfdf5;border:1px solid #a7f3d0;color:#047857}@media (max-width:840px){.data-import-grid{grid-template-columns:1fr}.data-mapping-list{max-height:none}}@media (max-width:560px){.data-panel{padding:18px}.data-panel-heading,.data-preview-heading{flex-direction:column}.data-panel-heading .inline-button,.data-preview-heading .inline-button{width:100%}}.visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.dorm-workspace{margin-top:24px}.dorm-tab-panel{min-width:0}.dorm-statistics{display:grid;gap:18px;margin-top:24px}.dorm-statistics-top{display:grid;gap:18px;grid-template-columns:minmax(0,1.15fr) minmax(280px,.85fr)}.dorm-stat-card-grid{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.dorm-list-filter-card,.dorm-rating-card,.dorm-stat-card,.dorm-trend-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 1px 2px rgb(15 23 42/4%)}.dorm-stat-card{align-items:center;display:flex;gap:16px;min-height:112px;padding:20px}.dorm-stat-icon{align-items:center;border-radius:12px;display:flex;flex:0 0 auto;height:48px;justify-content:center;width:48px}.dorm-stat-card p{color:var(--muted);font-size:12px;font-weight:500;letter-spacing:.04em}.dorm-stat-card strong{color:var(--foreground);display:block;font-size:28px;line-height:1.2;margin-top:4px}.dorm-stat-card small{color:var(--muted);display:block;font-size:12px;margin-top:4px}.dorm-rating-card,.dorm-trend-card{padding:20px}.dorm-stat-heading{align-items:center;color:#4f46e5;display:flex;gap:8px;margin-bottom:16px}.dorm-stat-heading h3{color:var(--foreground);font-size:14px;font-weight:600}.dorm-rating-content{align-items:center;display:flex;gap:24px;min-height:150px}.dorm-rating-donut{align-items:center;border-radius:50%;display:flex;flex:0 0 auto;height:132px;justify-content:center;position:relative;width:132px}.dorm-rating-donut:after{background:var(--surface);border-radius:50%;content:"";height:82px;position:absolute;width:82px}.dorm-rating-donut span{color:var(--foreground);font-size:20px;font-weight:700;position:relative;z-index:1}.dorm-rating-legend{display:grid;gap:9px}.dorm-rating-legend div{align-items:center;color:var(--muted);display:flex;font-size:12px;gap:6px}.dorm-rating-legend strong{color:var(--foreground);font-weight:600}.dorm-rating-dot{border-radius:50%;display:inline-block;height:10px;width:10px}.dorm-rating-dot-excellent{background:var(--dorm-rating-excellent-color)}.dorm-rating-dot-normal{background:var(--dorm-rating-normal-color)}.dorm-rating-dot-needs_rectification{background:var(--dorm-rating-needs-rectification-color)}.dorm-rating-empty{align-items:center;color:#cbd5e1;display:flex;flex-direction:column;justify-content:center;min-height:150px}.dorm-rating-empty p{color:var(--muted);font-size:13px;margin-top:8px}.dorm-trend-card{min-height:220px}.dorm-trend-svg{display:block;height:150px;overflow:visible;width:100%}.dorm-trend-grid-line{fill:none;stroke:var(--border);stroke-width:.6}.dorm-trend-line{fill:none;stroke:var(--dorm-rating-normal-color);stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8;vector-effect:non-scaling-stroke}.dorm-trend-point{fill:var(--dorm-rating-normal-color);stroke:var(--surface);stroke-width:.8;vector-effect:non-scaling-stroke}.dorm-trend-point-excellent{fill:var(--dorm-rating-excellent-color)}.dorm-trend-point-needs_rectification{fill:var(--dorm-rating-needs-rectification-color)}.dorm-trend-empty{color:var(--muted);font-size:13px;text-align:center}.dorm-list-panel{margin-top:24px}.dorm-list-filter-card{padding:24px}.dorm-list-heading{align-items:flex-start}.dorm-list-heading h2{margin-top:4px}.dorm-list-heading .muted-text{margin-top:5px}.dorm-filter-form{align-items:end;display:grid;gap:14px;grid-template-columns:minmax(240px,1fr) minmax(160px,220px) auto auto;margin-top:20px}.dorm-input-with-icon{position:relative}.dorm-input-with-icon input{padding-left:40px}.dorm-input-icon{color:#94a3b8;left:13px;pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.dorm-filter-form .filter-clear{white-space:nowrap}.dorm-timeline{margin-top:24px;position:relative}.dorm-timeline-line{background:var(--border);bottom:0;left:20px;position:absolute;top:0;width:2px}.dorm-timeline-items{display:grid;gap:16px}.dorm-record-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 1px 2px rgb(15 23 42/4%);margin-left:56px;padding:20px;position:relative;transition:border-color .15s ease,box-shadow .15s ease}.dorm-record-card:hover{border-color:#cbd5e1;box-shadow:0 8px 20px rgb(15 23 42/7%)}.dorm-timeline-node{background:#94a3b8;border:3px solid var(--surface);border-radius:50%;box-shadow:0 0 0 4px #f1f5f9;height:16px;left:-44px;position:absolute;top:21px;width:16px}.dorm-record-header{align-items:flex-start;display:flex;gap:14px;justify-content:space-between}.dorm-record-location{align-items:center;color:#94a3b8;display:flex;gap:10px;min-width:0}.dorm-record-location h3{color:var(--foreground);font-size:17px;line-height:1.35;overflow-wrap:anywhere}.dorm-record-date{color:var(--muted);font-size:13px;margin-top:10px}.dorm-record-notes{background:#f8fafc;border-radius:12px;color:#475569;font-size:14px;margin-top:14px;overflow:hidden;padding:12px;text-overflow:ellipsis;white-space:pre-wrap}.dorm-rating-badge{border:1px solid transparent;border-radius:999px;flex:0 0 auto;font-size:12px;font-weight:600;line-height:1.4;padding:4px 9px}.dorm-rating-excellent{background:var(--dorm-rating-excellent-soft);border-color:var(--dorm-rating-excellent-border);color:var(--dorm-rating-excellent-text)}.dorm-rating-normal{background:var(--dorm-rating-normal-soft);border-color:var(--dorm-rating-normal-border);color:var(--dorm-rating-normal-text)}.dorm-rating-needs_rectification{background:var(--dorm-rating-needs-rectification-soft);border-color:var(--dorm-rating-needs-rectification-border);color:var(--dorm-rating-needs-rectification-text)}.dorm-record-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.dorm-record-actions .danger-button,.dorm-record-actions .secondary-button{min-height:38px;padding:7px 12px}.dorm-delete-control{align-items:flex-start;display:inline-flex;flex-direction:column;gap:4px}.dorm-empty-state{background:var(--surface);border-radius:16px;margin-top:24px}.dorm-form{display:grid;gap:20px;margin-top:24px}.dorm-form-panel{margin-top:0}.dorm-form-fields{display:grid;gap:18px;grid-template-columns:repeat(2,minmax(0,1fr))}.dorm-rating-field{border:0;grid-column:1/-1;min-width:0;padding:0}.dorm-rating-field legend{font-size:14px;font-weight:600;margin-bottom:7px}.dorm-rating-options{display:grid;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}.dorm-rating-option{background:var(--surface);border:1px solid var(--border);border-radius:12px;color:#475569;min-height:88px;padding:14px;text-align:left;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.dorm-rating-option>span{display:block;font-size:14px;font-weight:600}.dorm-rating-option small{color:var(--muted);display:block;font-size:12px;line-height:1.5;margin-top:5px}.dorm-rating-option:focus-visible,.dorm-rating-option:hover{border-color:#94a3b8}.dorm-rating-option:focus-visible{outline:3px solid rgb(59 130 246/24%);outline-offset:2px}.dorm-rating-option.is-selected{box-shadow:0 0 0 1px currentColor}.dorm-rating-option-excellent{border-color:var(--dorm-rating-excellent-border)}.dorm-rating-option-excellent,.dorm-rating-option-excellent.is-selected{background:var(--dorm-rating-excellent-soft);color:var(--dorm-rating-excellent-text)}.dorm-rating-option-excellent.is-selected{border-color:var(--dorm-rating-excellent-color)}.dorm-rating-option-normal{border-color:var(--dorm-rating-normal-border)}.dorm-rating-option-normal,.dorm-rating-option-normal.is-selected{background:var(--dorm-rating-normal-soft);color:var(--dorm-rating-normal-text)}.dorm-rating-option-normal.is-selected{border-color:var(--dorm-rating-normal-color)}.dorm-rating-option-needs_rectification{border-color:var(--dorm-rating-needs-rectification-border)}.dorm-rating-option-needs_rectification,.dorm-rating-option-needs_rectification.is-selected{background:var(--dorm-rating-needs-rectification-soft);color:var(--dorm-rating-needs-rectification-text)}.dorm-rating-option-needs_rectification.is-selected{border-color:var(--dorm-rating-needs-rectification-color)}.dorm-field-wide{grid-column:1/-1}.dorm-form-actions{margin-top:0}.dorm-action-error,.dorm-query-error{margin-top:16px}.dorm-detail-panel{margin-top:24px}.dorm-detail-back{gap:8px}.dorm-detail-location{align-items:center;background:#f8fafc;border:1px solid var(--border);border-radius:12px;display:flex;gap:12px;margin-top:24px;padding:14px 16px}.dorm-detail-location-icon{align-items:center;background:#e0e7ff;border-radius:999px;color:#4f46e5;display:flex;flex:0 0 auto;height:48px;justify-content:center;width:48px}.dorm-detail-location h3{color:var(--foreground);font-size:18px}.dorm-detail-location p{color:var(--muted);font-size:13px;margin-top:2px}.dorm-detail-notes{background:#fffbeb;border:1px solid #fde68a;border-radius:12px;margin-top:20px;padding:14px 16px}.dorm-detail-label{color:var(--muted);font-size:13px;margin-bottom:6px}.dorm-detail-notes>p:last-child{color:#475569;overflow-wrap:anywhere;white-space:pre-wrap}.dorm-detail-meta{border-top:1px solid var(--border);color:#94a3b8;font-size:12px;margin-top:20px;padding-top:14px}@media (max-width:760px){.dorm-form-fields,.dorm-rating-options,.dorm-stat-card-grid,.dorm-statistics-top{grid-template-columns:1fr}.dorm-field-wide,.dorm-rating-field{grid-column:auto}.dorm-filter-form{grid-template-columns:1fr}.dorm-filter-form .filter-clear{justify-self:start}.dorm-record-header{flex-direction:column}.dorm-record-card{margin-left:42px;padding:17px}.dorm-timeline-line{left:14px}.dorm-timeline-node{left:-36px}}@media (max-width:560px){.dorm-list-filter-card{padding:18px}.dorm-rating-content{align-items:flex-start;flex-direction:column}.dorm-rating-legend{grid-template-columns:repeat(3,minmax(0,1fr));width:100%}.dorm-record-actions{align-items:stretch;flex-direction:column}.dorm-record-actions .dorm-delete-control,.dorm-record-actions .dorm-delete-control button,.dorm-record-actions>a{width:100%}.dorm-record-actions .dorm-delete-control button,.dorm-record-actions>a{justify-content:center}}@media (min-width:561px) and (max-width:900px){.student-filter-form{grid-template-columns:repeat(2,minmax(0,1fr))}.filter-submit{width:max-content}}.attendance-workspace{margin-top:24px}.attendance-tab-panel{min-width:0}.attendance-detail-panel,.attendance-form-panel,.attendance-list-panel{margin-top:24px}.attendance-form-grid{display:grid;gap:18px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:20px}.attendance-field-wide{grid-column:1/-1}.attendance-student-selector{display:grid;gap:8px;width:100%}.attendance-locked-student,.attendance-selected-student{align-items:center;background:#f4f6f5;border:1px solid var(--border);border-radius:6px;display:flex;flex-wrap:wrap;gap:8px;min-height:42px;padding:9px 12px}.attendance-student-results{display:flex;flex-wrap:wrap;gap:8px}.attendance-student-option{background:#f4f6f5;border:1px solid var(--border);border-radius:6px;color:var(--foreground);padding:7px 10px}.attendance-student-option:focus-visible,.attendance-student-option:hover{border-color:var(--accent)}.attendance-filter-form{align-items:end;border-bottom:1px solid var(--border);display:grid;gap:14px;grid-template-columns:minmax(220px,1fr) minmax(140px,auto) auto;margin-top:22px;padding-bottom:22px}.attendance-filter-form .filter-clear{grid-column:1/-1}.attendance-table{min-width:860px}.attendance-row-actions{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.attendance-delete-control{align-items:flex-start;display:inline-flex;flex-direction:column;gap:4px}.attendance-status-badge{background:#edf6f1;border:1px solid #b7d7c7;color:var(--accent);font-size:13px;padding:5px 9px}.attendance-status-absent{background:#fef2f2;border-color:#fecaca;color:#b91c1c}.attendance-status-late{background:#fef3c7;border-color:#f59e0b;color:#92400e}.attendance-status-early_leave{background:#ffedd5;border-color:#f97316;color:#9a3412}.attendance-status-leave{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}.attendance-status-legacy_unknown{background:#f3f4f6;border-color:#d1d5db;color:#4b5563}.attendance-detail-grid{display:grid;gap:18px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:24px}.attendance-detail-grid>div{border-top:1px solid var(--border);padding-top:12px}.attendance-detail-grid dt{color:var(--muted);font-size:13px}.attendance-detail-grid dd{margin-top:4px;overflow-wrap:anywhere;white-space:pre-wrap}.attendance-detail-wide{grid-column:1/-1}.attendance-action-error,.attendance-query-error{margin-top:16px}@media (max-width:560px){.attendance-detail-grid,.attendance-filter-form,.attendance-form-grid{grid-template-columns:1fr}.attendance-detail-wide,.attendance-field-wide{grid-column:auto}}.attendance-form{display:grid;gap:20px}.attendance-form .attendance-form-panel{margin-top:0}.attendance-form-section .panel-heading{margin-bottom:20px}.attendance-form-section .attendance-form-grid{margin-top:0}.attendance-situation-grid{align-items:start}.attendance-status-field{border:0;grid-column:1/-1;min-width:0;padding:0}.attendance-status-field legend{font-size:14px;font-weight:600;margin-bottom:7px}.attendance-status-options{display:grid;gap:10px;grid-template-columns:repeat(4,minmax(0,1fr))}.attendance-status-option{background:#ffffff;border:1px solid var(--border);border-radius:12px;color:#475569;font-size:14px;font-weight:600;min-height:46px;padding:10px 14px;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.attendance-status-option:focus-visible,.attendance-status-option:hover{background:#f8fafc;border-color:#94a3b8}.attendance-status-option:focus-visible{outline:3px solid rgb(59 130 246/24%);outline-offset:2px}.attendance-status-option.is-selected{border-color:#1d4ed8;box-shadow:0 0 0 1px #1d4ed8}.attendance-status-option-absent.is-selected{background:#fef2f2;color:#b91c1c}.attendance-status-option-late.is-selected{background:#fef3c7;border-color:#f59e0b;color:#92400e}.attendance-status-option-early_leave.is-selected{background:#ffedd5;border-color:#f97316;color:#9a3412}.attendance-status-option-leave.is-selected{background:#eff6ff;color:#1d4ed8}.attendance-input-with-icon{position:relative}.attendance-input-with-icon input{padding-left:40px}.attendance-input-icon{color:#94a3b8;left:13px;pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.attendance-locked-student,.attendance-selected-student{background:#eff6ff;border:1px solid #bfdbfe;border-radius:12px;min-height:46px;padding:11px 14px}.attendance-selected-student{background:#f8fafc;border-color:var(--border)}.attendance-student-option{background:#f8fafc;border-radius:10px;padding:9px 12px}.attendance-list-panel{padding:24px}.attendance-filter-form{border-bottom:0;grid-template-columns:minmax(240px,1fr) minmax(160px,220px) auto auto;margin-top:20px;padding-bottom:0}.attendance-filter-form .filter-clear{grid-column:auto;white-space:nowrap}.attendance-record-list{display:grid;gap:16px;margin-top:24px}.attendance-record-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 1px 2px rgb(15 23 42/4%);padding:20px;transition:border-color .15s ease,box-shadow .15s ease}.attendance-record-card:hover{border-color:#cbd5e1;box-shadow:0 8px 20px rgb(15 23 42/7%)}.attendance-record-header{align-items:flex-start;display:flex;gap:20px;justify-content:space-between}.attendance-record-title-row{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.attendance-record-title-row h3{color:var(--foreground);font-size:18px;line-height:1.35}.attendance-student-id{background:#f8fafc;border:1px solid var(--border);border-radius:999px;color:var(--muted);font-size:12px;line-height:1.4;padding:3px 9px}.attendance-record-actions{align-items:center;display:flex;flex:0 0 auto;flex-wrap:wrap;gap:8px}.attendance-record-action,.attendance-record-actions .danger-button{min-height:38px;padding:7px 12px}.attendance-record-actions .attendance-delete-control{display:inline-flex}.attendance-record-meta{border-top:1px solid var(--border);display:grid;gap:16px;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:20px;padding-top:16px}.attendance-record-meta dt{color:var(--muted);font-size:12px;font-weight:600}.attendance-record-meta dd{color:var(--foreground);font-size:14px;margin-top:4px;overflow-wrap:anywhere}.attendance-record-meta-wide{grid-column:1/-1}.attendance-detail-back{gap:8px}.attendance-detail-student{align-items:center;background:#f8fafc;border:1px solid var(--border);border-radius:12px;display:flex;gap:12px;margin-top:24px;padding:14px 16px}.attendance-detail-student-icon{align-items:center;background:#dbeafe;border-radius:999px;color:#2563eb;display:flex;flex:0 0 auto;height:48px;justify-content:center;width:48px}.attendance-detail-student h3{color:var(--foreground);font-size:18px}.attendance-detail-student p{color:var(--muted);font-size:13px;margin-top:2px}.attendance-detail-reason{background:#fffbeb;border:1px solid #fde68a!important;border-radius:12px;padding:14px 16px!important}.attendance-status-badge{border-radius:999px;font-size:12px;font-weight:600;line-height:1.4;padding:4px 9px}@media (max-width:1023px){.app-sidebar{display:none}.app-nav{background:var(--surface);border-bottom:1px solid var(--border);display:block;padding-bottom:env(safe-area-inset-bottom);position:sticky;top:0;z-index:20}}@media (max-width:760px){.attendance-record-header{flex-direction:column}.attendance-record-actions{width:100%}.attendance-record-meta{grid-template-columns:repeat(2,minmax(0,1fr))}.attendance-filter-form{grid-template-columns:1fr}.attendance-filter-form .filter-clear{justify-self:start}.attendance-status-options{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.app-header{padding:12px 16px}.workspace-page{padding:28px 16px 44px}.attendance-list-panel{padding:18px}.attendance-record-meta{grid-template-columns:1fr}.attendance-record-meta-wide{grid-column:auto}}.dashboard-overview-page{max-width:1120px}.dashboard-banner{background:linear-gradient(105deg,#004098,#2563eb);border-radius:24px;box-shadow:0 18px 34px rgb(30 64 175/18%);color:#ffffff;overflow:hidden}.dashboard-banner-content{padding:40px 32px}.dashboard-banner-date{color:#bfdbfe;font-size:14px;font-weight:600}.dashboard-banner h1{color:#ffffff;font-size:30px;line-height:1.25;margin-top:8px}.dashboard-banner p:last-child{color:#dbeafe;font-size:15px;margin-top:12px}.dashboard-degraded-banner{background:#fff7ed;border:1px solid #fed7aa;border-radius:16px;color:#9a3412;font-size:14px;margin-top:18px;padding:14px 18px}.dashboard-metrics-grid{display:grid;gap:16px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:24px}.dashboard-metric-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;color:inherit;display:block;min-height:124px;padding:20px;text-decoration:none;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.dashboard-metric-card:hover{border-color:#bfdbfe;box-shadow:0 8px 18px rgb(15 23 42/8%);transform:translateY(-1px)}.dashboard-metric-card:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px rgb(59 130 246/24%);outline:none}.dashboard-metric-card-inner,.dashboard-metric-card-leading{align-items:flex-start;display:flex}.dashboard-metric-card-inner{gap:12px;justify-content:space-between}.dashboard-metric-card-leading{gap:12px;min-width:0}.dashboard-metric-icon{align-items:center;border-radius:12px;display:inline-flex;flex:0 0 40px;height:40px;justify-content:center;width:40px}.dashboard-metric-icon--blue{background:#eff6ff;color:#2563eb}.dashboard-metric-icon--indigo{background:#eef2ff;color:#4f46e5}.dashboard-metric-icon--red{background:#fef2f2;color:#dc2626}.dashboard-metric-icon--amber{background:#fffbeb;color:#d97706}.dashboard-metric-icon--emerald{background:#ecfdf5;color:#059669}.dashboard-metric-icon--purple{background:#f5f3ff;color:#7c3aed}.dashboard-metric-icon-svg{height:20px;width:20px}.dashboard-metric-copy{display:grid;gap:4px;min-width:0}.dashboard-metric-label{color:var(--muted);font-size:14px}.dashboard-metric-value-row{align-items:baseline;display:flex;gap:4px}.dashboard-metric-value{color:var(--foreground);font-size:28px;line-height:1}.dashboard-metric-suffix{color:#94a3b8;font-size:13px}.dashboard-metric-subtext{color:#94a3b8;font-size:12px;line-height:1.4}.dashboard-metric-badge{border-radius:999px;flex:0 0 auto;font-size:12px;font-weight:600;line-height:1.4;padding:3px 8px}.dashboard-metric-badge--warning{background:#fee2e2;color:#b91c1c}.dashboard-metric-badge--info{background:#dbeafe;color:#1d4ed8}.dashboard-loading{min-height:440px}.dashboard-loading-banner{background:linear-gradient(105deg,#004098,#2563eb);border-radius:24px;display:grid;gap:12px;min-height:176px;padding:40px 32px}.dashboard-loading-grid{display:grid;gap:16px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:24px}.dashboard-loading-card{align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:16px;display:flex;gap:12px;min-height:124px;padding:20px}.dashboard-loading-icon{background:#e2e8f0;border-radius:12px;flex:0 0 40px;height:40px;width:40px}.dashboard-loading-card-copy{display:grid;gap:10px;width:100%}.dashboard-loading-line{animation:dashboard-loading-pulse 1.6s ease-in-out infinite;background:rgb(219 234 254/64%);border-radius:999px;display:block;height:10px}.dashboard-loading-line--date{background:rgb(191 219 254/72%);width:180px}.dashboard-loading-line--title{background:rgb(219 234 254/86%);height:28px;width:220px}.dashboard-loading-line--copy{background:rgb(219 234 254/64%);width:320px}.dashboard-loading-line--label{width:84px}.dashboard-loading-line--value{height:22px;width:56px}@keyframes dashboard-loading-pulse{50%{opacity:.55}}@media (max-width:900px){.dashboard-loading-grid,.dashboard-metrics-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.dashboard-banner-content,.dashboard-loading-banner{padding:28px 22px}.dashboard-banner h1{font-size:26px}.dashboard-loading-grid,.dashboard-metrics-grid{grid-template-columns:1fr}.dashboard-loading-card,.dashboard-metric-card{min-height:112px}.dashboard-loading-line--copy{max-width:100%}}@media (prefers-reduced-motion:reduce){.app-nav-link,.app-sidebar-link,.dashboard-loading-line,.dashboard-metric-card{animation:none;transition:none}}.data-task-progress{display:grid;gap:8px;margin-top:16px}.data-task-progress-label{align-items:center;color:#475569;display:flex;font-size:12px;font-weight:600;justify-content:space-between;gap:12px}.data-progress-track{background:#e2e8f0;border-radius:999px;height:8px;overflow:hidden;width:100%}.data-progress-fill{background:#2563eb;border-radius:inherit;height:100%;transition:width .25s ease}.data-progress-fill.is-indeterminate{animation:data-progress-indeterminate 1.2s ease-in-out infinite;width:38%}@keyframes data-progress-indeterminate{0%{transform:translateX(-120%)}to{transform:translateX(280%)}}