*{margin:0;padding:0;box-sizing:border-box}:root{--bg: #ffffff;--surface: #f9fafb;--surface2: #f3f4f6;--border: #e5e7eb;--text: #1f2937;--text-muted: #6b7280;--text-dim: #9ca3af;--accent: #6366f1;--accent-hover: #818cf8;--green: #059669;--red: #dc2626;--amber: #d97706;--success-bg: #f0fdf4;--warning-bg: #fffbeb;--danger-bg: #fef2f2}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}.app-shell{min-height:100vh}.app-header{background:var(--surface);border-bottom:1px solid var(--border);padding:12px 24px;position:sticky;top:0;z-index:100}.header-inner{max-width:1200px;margin:0 auto;display:flex;align-items:center}.logo-link{display:flex;align-items:center;gap:10px}.logo-icon{width:34px;height:34px;background:var(--accent);border-radius:8px;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:16px;color:#fff}.logo-img{width:34px;height:34px;border-radius:8px;object-fit:contain}.logo-title{font-weight:700;font-size:15px}.logo-sub{font-size:11px;color:var(--text-dim)}.app-main{max-width:1200px;margin:0 auto;padding:24px 16px}.sidebar-layout{display:flex;min-height:100vh}.sidebar-layout .app-header{display:none}.mobile-header{display:none;position:sticky;top:0;z-index:100;background:var(--surface);border-bottom:1px solid var(--border);padding:12px 16px;align-items:center;gap:12px}.hamburger-btn{background:none;border:none;cursor:pointer;padding:4px;color:var(--text);display:flex;align-items:center}.mobile-header-title{font-weight:700;font-size:16px;color:var(--text)}.sidebar{width:230px;min-width:230px;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto;z-index:50}.sidebar-brand{display:flex;align-items:center;gap:10px;padding:20px 16px 16px;cursor:pointer;border-bottom:1px solid var(--border)}.sidebar-logo-icon{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;color:#fff;flex-shrink:0}.sidebar-logo-img{width:32px;height:32px;border-radius:8px;object-fit:contain;flex-shrink:0}.sidebar-brand-text{overflow:hidden}.sidebar-brand-name{font-weight:700;font-size:14px;color:var(--text);line-height:1.2}.sidebar-brand-sub{font-size:11px;color:var(--text-dim);line-height:1.3}.sidebar-nav{flex:1;padding:12px 8px;overflow-y:auto}.sidebar-group{margin-bottom:16px}.sidebar-group-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);padding:0 10px;margin-bottom:4px}.sidebar-link{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:none;background:none;border-radius:8px;cursor:pointer;font-size:13px;font-weight:500;color:var(--text-muted);transition:background .15s,color .15s;text-align:left}.sidebar-link:hover{background:#6366f114;color:var(--text)}.sidebar-link.active{background:#6366f11f;color:var(--accent, #6366f1);font-weight:600}.sidebar-link-icon{display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex-shrink:0}.sidebar-link-label{flex:1}.sidebar-footer{padding:12px;border-top:1px solid var(--border)}.sidebar-user{display:flex;align-items:center;gap:8px;margin-bottom:8px}.sidebar-user-avatar{width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;color:#fff;flex-shrink:0}.sidebar-user-info{overflow:hidden}.sidebar-user-name{font-size:12px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-user-email{font-size:10px;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-signout{width:100%;padding:6px 8px;background:none;border:1px solid var(--border);border-radius:6px;cursor:pointer;font-size:12px;font-weight:500;color:var(--text-muted);transition:background .15s,color .15s}.sidebar-signout:hover{background:#fef2f2;color:#dc2626;border-color:#fecaca}.sidebar-main{flex:1;max-width:1200px;padding:24px;overflow-x:hidden}.sidebar-overlay{display:none}@media(max-width:768px){.sidebar-layout{flex-direction:column}.mobile-header{display:flex}.sidebar{position:fixed;left:-260px;top:0;height:100vh;width:250px;min-width:250px;transition:left .25s ease;z-index:200;box-shadow:none}.sidebar.open{left:0;box-shadow:4px 0 24px #00000026}.sidebar-overlay{display:block;position:fixed;inset:0;background:#0000004d;z-index:199}.sidebar-main{padding:16px 10px;max-width:100%}}.contact-input-row{display:flex;gap:8px;align-items:center}.contact-input-row .lookup-input{flex:1}.quo-search-btn{white-space:nowrap;flex-shrink:0}.quo-search-overlay{position:fixed;inset:0;background:#0006;z-index:300;display:flex;align-items:center;justify-content:center;padding:20px}.quo-search-panel{background:#fff;border-radius:12px;width:100%;max-width:480px;max-height:70vh;display:flex;flex-direction:column;box-shadow:0 20px 60px #0003}.quo-search-header{padding:16px 20px 12px;border-bottom:1px solid #e5e7eb;position:relative}.quo-search-header h4{margin:0 0 2px;font-size:16px;font-weight:700}.quo-search-close{position:absolute;right:16px;top:14px;background:none;border:none;font-size:22px;cursor:pointer;color:#6b7280;line-height:1;padding:4px}.quo-search-close:hover{color:#1f2937}.quo-search-input{margin:12px 16px;padding:10px 14px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;outline:none;transition:border-color .15s}.quo-search-input:focus{border-color:var(--accent, #6366f1);box-shadow:0 0 0 3px #6366f126}.quo-search-results{flex:1;overflow-y:auto;padding:0 8px 12px}.quo-search-loading,.quo-search-empty{text-align:center;padding:24px 16px;color:#6b7280;font-size:13px;display:flex;align-items:center;justify-content:center;gap:8px}.quo-contact-item{display:block;width:100%;text-align:left;padding:10px 12px;border:none;background:none;border-radius:8px;cursor:pointer;transition:background .1s}.quo-contact-item:hover{background:#f3f4f6}.quo-contact-name{font-size:14px;font-weight:600;color:#1f2937;margin-bottom:2px}.quo-contact-company{font-weight:400;color:#6b7280}.quo-contact-details{display:flex;flex-wrap:wrap;gap:8px}.quo-contact-phone{font-size:12px;color:var(--accent, #6366f1);font-weight:500}.quo-contact-email{font-size:12px;color:#6b7280}.loading-screen,.error-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:50vh;gap:16px;color:var(--text-muted)}.spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error-icon{width:48px;height:48px;background:var(--red);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:24px;color:#fff}.btn{border:none;border-radius:8px;padding:8px 18px;font-size:13px;font-weight:600;cursor:pointer;transition:opacity .15s}.btn:hover{opacity:.85}.btn-primary{background:var(--accent);color:#fff}.period-bar{display:flex;align-items:center;gap:12px;margin-bottom:20px}.period-label{font-size:13px;color:var(--text-dim);font-weight:600}.period-pills{display:flex;gap:4px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:3px}.pill{background:transparent;border:none;border-radius:7px;padding:5px 14px;font-size:12px;font-weight:600;color:var(--text-muted);cursor:pointer;transition:all .15s}.pill.active{background:var(--accent);color:#fff}.pill:hover:not(.active){background:var(--surface2)}.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}.summary-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;text-align:center}.summary-value{font-size:28px;font-weight:800;letter-spacing:-.5px}.summary-label{font-size:12px;color:var(--text-dim);margin-top:4px}.summary-card.accent-green .summary-value{color:var(--green)}.summary-card.accent-blue .summary-value{color:#3b82f6}.summary-card.accent-purple .summary-value{color:var(--accent)}.charts-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:24px}.chart-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px}.chart-card h3{font-size:14px;font-weight:600;margin-bottom:16px;color:var(--text-muted)}.chart-card-sm{max-width:100%}.chart-card.full-width{grid-column:1 / -1}.table-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:20px}.table-card h3{font-size:14px;font-weight:600;margin-bottom:16px;color:var(--text-muted)}.table-wrapper{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:13px}thead th{text-align:left;padding:10px 12px;border-bottom:1px solid var(--border);color:var(--text-dim);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.5px}tbody tr{border-bottom:1px solid var(--surface2);transition:background .1s}.clickable-row{cursor:pointer}.clickable-row:hover{background:var(--surface2)}tbody td{padding:12px}.student-cell{display:flex;align-items:center;gap:10px}.avatar{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;color:#fff;flex-shrink:0}.avatar-lg{width:48px;height:48px;font-size:20px}.student-name{font-weight:600;font-size:13px}.student-email{font-size:11px;color:var(--text-dim)}.accuracy-cell{display:flex;align-items:center;gap:8px}.accuracy-bar-bg{width:60px;height:6px;background:var(--surface2);border-radius:3px;overflow:hidden}.accuracy-bar-fill{height:100%;border-radius:3px;transition:width .3s}.status-badge{font-size:11px;padding:3px 10px;border-radius:6px;font-weight:600}.status-badge.active{background:#dcfce7;color:#16a34a}.status-badge.inactive{background:var(--surface2);color:var(--text-dim)}.text-muted{color:var(--text-dim)}.inactive-callout{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px 20px;font-size:13px;color:var(--text-muted)}.detail-header{margin-bottom:24px}.back-btn{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:6px 14px;font-size:12px;color:var(--text-muted);cursor:pointer;margin-bottom:16px;transition:background .15s}.back-btn:hover{background:var(--border)}.detail-title-row{display:flex;align-items:center;gap:14px;margin-bottom:16px}.detail-title-row h1{font-size:22px;font-weight:700}.stat-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}.stat-tile{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;text-align:center}.stat-tile-value{font-size:26px;font-weight:800}.stat-tile-label{font-size:12px;color:var(--text-dim);margin-top:4px}.exam-cards{margin-bottom:24px}.exam-cards h3{font-size:14px;font-weight:600;color:var(--text-muted);margin-bottom:12px}.exam-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 20px;margin-bottom:12px}.exam-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.exam-card-header strong{font-size:14px}.exam-level{font-size:11px;color:var(--text-dim);margin-left:8px}.exam-score{font-size:20px;font-weight:800;color:var(--accent)}.progress-bar{height:6px;background:var(--surface2);border-radius:3px;overflow:hidden;margin-bottom:8px}.progress-fill{height:100%;background:var(--accent);border-radius:3px;transition:width .3s}.exam-meta{font-size:12px;color:var(--text-dim);margin-bottom:10px}.category-list{border-left:2px solid var(--border);padding-left:12px;margin-top:10px}.category-item{display:flex;justify-content:space-between;font-size:12px;padding:3px 0;color:var(--text)}.challenge-badges{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.challenge-badge{font-size:11px;background:#e0e7ff;padding:2px 10px;border-radius:4px;color:#4338ca}.games-section{margin-bottom:24px}.games-section h3{font-size:14px;font-weight:600;color:var(--text-muted);margin-bottom:12px}.games-list{display:grid;gap:6px}.game-item{display:flex;justify-content:space-between;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 14px;font-size:13px}.game-name{font-weight:500}.game-stats{color:var(--text-muted)}.game-date{color:var(--text-dim)}.empty-state{text-align:center;padding:60px 20px;color:var(--text-dim)}.empty-state h2{margin-bottom:8px;color:var(--text-muted)}.dashboard-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.week-picker{display:flex;flex-direction:column;gap:8px}.week-picker-nav-row{display:flex;align-items:center;gap:8px}.week-picker-nav{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:5px 12px;font-size:14px;color:var(--text-muted);cursor:pointer;transition:background .15s}.week-picker-nav:hover{background:var(--border)}.week-picker-label{font-size:14px;font-weight:600;color:var(--text);min-width:180px;text-align:center}.week-picker-presets{display:flex;gap:4px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:3px}.educator-filter{display:flex;align-items:center;gap:8px}.filter-label{font-size:13px;color:var(--text-dim);font-weight:600}.filter-select{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:7px 12px;font-size:13px;color:var(--text);cursor:pointer}.filter-select:focus{outline:none;border-color:var(--accent)}.portal-theme .portal-icon{background:var(--green)}.lookup-page{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:50vh;max-width:440px;margin:0 auto;padding:40px 20px;text-align:center;gap:16px}.lookup-page h1{font-size:24px;font-weight:700}.lookup-form{display:flex;flex-direction:column;gap:12px;width:100%}.lookup-input{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px 16px;font-size:15px;color:var(--text);width:100%;transition:border-color .15s}.lookup-input::placeholder{color:var(--text-dim)}.lookup-input:focus{outline:none;border-color:var(--accent)}.lookup-btn{padding:12px 18px;font-size:15px}.lookup-error{color:var(--red);font-size:13px;font-weight:500}.weak-areas-card{background:#fef2f2;border:1px solid #fca5a5;border-radius:12px;padding:20px;margin-bottom:24px}.weak-areas-card h3{font-size:15px;font-weight:700;color:#dc2626;margin-bottom:4px}.weak-areas-desc{font-size:12px;color:var(--text-dim);margin-bottom:16px}.weak-areas-list{display:grid;gap:12px}.weak-area-item{display:flex;flex-direction:column;gap:6px}.weak-area-top{display:flex;justify-content:space-between;font-size:13px}.weak-area-name{font-weight:600;color:var(--text)}.weak-area-pct{color:var(--text-muted)}.header-nav{margin-left:auto;display:flex;align-items:center;gap:16px}.nav-link{font-size:13px;font-weight:600;color:var(--text-muted);text-decoration:none;padding:6px 12px;border-radius:6px;transition:color .15s,background .15s}.nav-link:hover{color:var(--text);background:#6366f11a}.leaderboard-page{max-width:800px;margin:0 auto}.leaderboard-header{text-align:center;margin-bottom:32px}.leaderboard-header h1{font-size:28px;font-weight:800;margin-bottom:4px;background:linear-gradient(135deg,#fbbf24,#f59e0b);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.leaderboard-sub{color:var(--text-dim);font-size:14px;margin-bottom:20px}.podium{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;align-items:end;margin-bottom:32px;min-height:260px}.podium-slot{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px 12px;border-radius:16px;background:var(--surface);border:1px solid var(--border);text-align:center;transition:transform .2s}.podium-slot:hover{transform:translateY(-4px)}.podium-empty{opacity:0;pointer-events:none}.podium-slot.gold{padding-top:28px;padding-bottom:28px;border-color:#fbbf24;background:linear-gradient(180deg,#fffbeb,#f9fafb);box-shadow:0 0 30px #fbbf2426}.podium-slot.silver{border-color:#94a3b8;background:linear-gradient(180deg,#f1f5f9,#f9fafb)}.podium-slot.bronze{border-color:#d97706;background:linear-gradient(180deg,#fffbeb,#f9fafb)}.podium-crown{font-size:32px;line-height:1}.podium-avatar{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:22px;color:#000}.podium-slot.gold .podium-avatar{width:64px;height:64px;font-size:26px;background:#fbbf24;box-shadow:0 0 20px #fbbf2466}.podium-slot.silver .podium-avatar{background:#94a3b8}.podium-slot.bronze .podium-avatar{background:#d97706}.podium-name{font-weight:700;font-size:15px;color:var(--text)}.podium-score{font-size:28px;font-weight:900;letter-spacing:-1px}.podium-slot.gold .podium-score{color:#fbbf24}.podium-slot.silver .podium-score{color:#94a3b8}.podium-slot.bronze .podium-score{color:#d97706}.podium-breakdown{font-size:11px;color:var(--text-dim)}.podium-time-badge{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-muted);padding:2px 8px;border-radius:20px;background:#0000000d}.leaderboard-list{display:flex;flex-direction:column;gap:4px;margin-bottom:24px}.leaderboard-row{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--surface);border:1px solid var(--border);border-radius:10px;transition:background .15s}.leaderboard-row:hover{background:var(--surface2)}.lb-rank{font-size:14px;font-weight:700;color:var(--text-dim);min-width:36px;text-align:center}.lb-avatar{width:36px;height:36px;border-radius:50%;background:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#fff;flex-shrink:0}.lb-info{flex:1;min-width:0}.lb-name{font-weight:600;font-size:14px;color:var(--text)}.lb-breakdown{font-size:11px;color:var(--text-dim);display:flex;gap:8px;align-items:center}.lb-score{font-size:22px;font-weight:900;color:var(--accent);min-width:60px;text-align:right}.time-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}.time-dot.ideal{background:#059669}.time-dot.rushing{background:#dc2626}.time-dot.slow{background:#d97706}.time-dot.none{background:#52525b}.score-explainer{text-align:center;padding:20px;border-radius:12px;background:#6366f10f;border:1px solid rgba(99,102,241,.15);margin-top:8px}.score-explainer h4{font-size:13px;font-weight:700;color:var(--text-muted);margin-bottom:4px}.score-explainer p{font-size:12px;color:var(--text-dim);line-height:1.5}.leaderboard-widget{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.widget-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.widget-header h3{font-size:14px;font-weight:600;color:var(--text-muted);margin:0}.widget-link{font-size:12px;color:var(--accent);font-weight:600;background:none;border:none;cursor:pointer;padding:0}.widget-link:hover{color:var(--accent-hover)}.widget-list{display:flex;flex-direction:column;gap:2px}.widget-row{display:flex;align-items:center;gap:10px;padding:8px 4px;border-bottom:1px solid var(--border)}.widget-row:last-child{border-bottom:none}.widget-rank{font-size:16px;font-weight:700;min-width:28px;text-align:center;color:var(--text-dim)}.widget-rank[data-rank="1"]{color:#fbbf24}.widget-rank[data-rank="2"]{color:#94a3b8}.widget-rank[data-rank="3"]{color:#d97706}.widget-avatar{width:28px;height:28px;border-radius:50%;background:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:11px;color:#fff;flex-shrink:0}.widget-name{flex:1;font-size:13px;font-weight:500;color:var(--text)}.widget-days{font-size:11px;color:var(--text-dim);font-weight:500}.widget-score{font-size:16px;font-weight:800;color:var(--accent);min-width:48px;text-align:right}.rank-badge-card{display:flex;align-items:center;gap:16px;background:linear-gradient(135deg,#eef2ff,#f9fafb);border:1px solid #6366f1;border-radius:12px;padding:16px 20px;margin-bottom:24px;transition:border-color .15s,box-shadow .15s;cursor:pointer;text-decoration:none;color:inherit}.rank-badge-card:hover{border-color:#818cf8;box-shadow:0 0 20px #6366f133}.rank-badge-number{font-size:36px;font-weight:900;color:var(--accent);min-width:60px}.rank-badge-info{flex:1}.rank-badge-label{font-size:15px;font-weight:700;color:var(--text)}.rank-badge-detail{font-size:12px;color:var(--text-dim);margin-top:2px}.rank-badge-arrow{font-size:12px;color:var(--accent);font-weight:600;white-space:nowrap}@media(max-width:768px){.summary-grid,.stat-tiles{grid-template-columns:repeat(2,1fr)}.charts-row{grid-template-columns:1fr}.app-main{padding:16px 10px}.dashboard-toolbar{flex-direction:column}.week-picker-label{font-size:12px;min-width:140px}.podium{grid-template-columns:1fr;min-height:auto;gap:8px}.podium-slot.gold,.podium-slot.silver,.podium-slot.bronze{flex-direction:row;padding:14px 16px;gap:12px}.podium-avatar{width:40px;height:40px;font-size:16px}.podium-slot.gold .podium-avatar{width:44px;height:44px}.podium-crown{font-size:24px}.podium-score{font-size:22px;margin-left:auto}.rank-badge-card{flex-wrap:wrap;gap:10px;padding:12px 16px}.rank-badge-number{font-size:28px;min-width:48px}.header-inner{flex-wrap:wrap;gap:8px}.header-nav{gap:4px;width:100%;justify-content:flex-end}.nav-link{font-size:12px;padding:4px 8px}}.classes-page{max-width:960px;margin:0 auto}.classes-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;flex-wrap:wrap;gap:12px}.classes-header h1{margin:0;font-size:24px;color:var(--text)}.classes-header-actions{display:flex;align-items:center;gap:16px}.archive-toggle{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-muted);cursor:pointer}.archive-toggle input{cursor:pointer}.classes-grid{display:grid;gap:16px}.class-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 20px;transition:box-shadow .15s}.class-card:hover{box-shadow:0 2px 12px #0000000f}.class-card.archived{opacity:.6}.class-card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px}.class-card-header strong{font-size:16px;color:var(--text)}.class-card-actions{display:flex;gap:4px}.btn-icon{background:none;border:1px solid var(--border);border-radius:6px;padding:4px 8px;cursor:pointer;font-size:14px;transition:background .15s}.btn-icon:hover{background:var(--surface2)}.class-card-meta{display:flex;flex-direction:column;gap:8px}.class-days{display:flex;gap:4px;flex-wrap:wrap}.class-badge{display:inline-block;background:var(--surface2);color:var(--text-muted);border:1px solid var(--border);border-radius:6px;padding:2px 8px;font-size:12px;font-weight:500}.archived-badge{background:#fef3c7;color:#92400e;border-color:#fcd34d}.class-info-row{font-size:13px;color:var(--text-muted);display:flex;gap:4px;flex-wrap:wrap}.class-form-wrapper{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:20px}.class-form{display:flex;flex-direction:column;gap:16px}.form-group{display:flex;flex-direction:column;gap:6px}.form-label{font-size:13px;font-weight:600;color:var(--text-muted)}.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}.day-toggles{display:flex;gap:6px;flex-wrap:wrap}.form-actions{display:flex;gap:10px;align-items:center}.assigner-wrapper{display:flex;flex-direction:column;gap:12px}.assigner-header-row{display:flex;justify-content:space-between;align-items:center}.assigner-header-row h3{margin:0;font-size:16px;color:var(--text)}.student-assigner{display:flex;flex-direction:column;gap:8px}.assigner-header{font-size:13px;color:var(--text-muted)}.assigner-search{width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);font-size:13px;outline:none}.assigner-search:focus{border-color:#6366f1}.assigner-list{max-height:300px;overflow-y:auto;border:1px solid var(--border);border-radius:8px;background:var(--bg)}.assigner-item{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--border);transition:background .1s}.assigner-item:last-child{border-bottom:none}.assigner-item:hover{background:var(--surface2)}.assigner-name{font-size:13px;color:var(--text);font-weight:500}.assigner-email{font-size:12px;color:var(--text-dim);margin-left:auto}.students-page{max-width:960px;margin:0 auto}.students-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:20px}.students-header h1{margin:0;font-size:24px;color:var(--text)}.students-count{font-size:14px;color:var(--text-muted)}.students-toolbar{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap}.students-search{flex:1;min-width:200px;padding:10px 14px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font-size:14px;outline:none}.students-search:focus{border-color:#6366f1}.students-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}.student-card{display:flex;align-items:center;gap:14px;padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-radius:10px;cursor:pointer;transition:box-shadow .15s,border-color .15s}.student-card:hover{border-color:#6366f1;box-shadow:0 2px 12px #6366f11a}.student-card-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:16px;flex-shrink:0}.student-card-info{min-width:0}.student-card-name{font-weight:600;color:var(--text);font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.student-card-email{font-size:12px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.student-card-educator{font-size:11px;color:var(--text-dim);margin-top:2px}.students-api-note{margin-top:24px;padding:12px 16px;background:var(--surface2);border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--text-muted);text-align:center}.students-api-note a{color:#6366f1;text-decoration:none}.students-api-note a:hover{text-decoration:underline}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--surface);padding:24px}.login-card{background:var(--bg);border:1px solid var(--border);border-radius:16px;padding:40px 32px;max-width:400px;width:100%;text-align:center;box-shadow:0 4px 24px #0000000f}.login-logo{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:24px}.login-desc{color:var(--text-muted);font-size:14px;margin-bottom:28px;line-height:1.5}.google-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px 20px;background:var(--bg);border:1px solid var(--border);border-radius:8px;font-size:15px;font-weight:600;color:var(--text);cursor:pointer;transition:border-color .15s,box-shadow .15s}.google-btn:hover{border-color:#6366f1;box-shadow:0 2px 8px #6366f11f}.login-error{color:var(--red);font-size:13px;margin-top:16px}.login-note{margin-top:24px;font-size:12px;color:var(--text-dim);line-height:1.5}.login-note a{color:#6366f1;text-decoration:none}.login-note a:hover{text-decoration:underline}.sign-out-btn{background:none;border:1px solid var(--border);cursor:pointer;font-family:inherit}.subject-strengths{margin-bottom:24px}.subject-strengths h3{font-size:15px;font-weight:700;color:var(--text);margin-bottom:14px}.subject-group{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px 20px;margin-bottom:12px}.subject-group-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.subject-group-title{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim, #9ca3af)}.subject-focus-count{font-size:11px;font-weight:600;color:#dc2626;background:#fef2f2;padding:2px 8px;border-radius:4px}.strength-bar-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}.strength-bar-row:last-child{margin-bottom:0}.strength-bar-label{font-size:12px;font-weight:500;color:var(--text);min-width:140px;flex-shrink:0;display:flex;align-items:center;gap:6px}.focus-flag{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:#dc2626;background:#fef2f2;padding:1px 5px;border-radius:3px}.strength-bar-row.needs-focus{background:#fffbeb;margin-left:-8px;margin-right:-8px;padding:6px 8px;border-radius:6px}.strength-bar-track{flex:1;height:8px;background:#f3f4f6;border-radius:4px;overflow:hidden}.strength-bar-fill{height:100%;border-radius:4px;transition:width .4s ease}.strength-bar-detail{display:flex;flex-direction:column;align-items:flex-end;min-width:52px}.strength-bar-pct{font-size:12px;font-weight:700}.strength-bar-count{font-size:10px;color:#9ca3af;font-weight:500}.focus-areas-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.focus-areas-card h3{font-size:15px;font-weight:700;color:var(--text);margin-bottom:2px}.focus-desc{font-size:12px;color:var(--text-dim, #9ca3af);margin-bottom:0}.focus-empty{font-size:13px;color:#059669;font-weight:600;padding:12px 0 4px}.focus-tabs{display:flex;gap:4px;background:#f3f4f6;border-radius:8px;padding:3px;margin:12px 0 16px}.focus-tab{background:transparent;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;color:#6b7280;cursor:pointer;transition:all .15s;font-family:inherit}.focus-tab.active{background:#6366f1;color:#fff}.focus-tab:hover:not(.active){background:#e5e7eb}.focus-list{display:flex;flex-direction:column;gap:10px}.focus-item{display:flex;align-items:flex-start;gap:10px}.focus-item-rank{font-size:12px;font-weight:700;color:#9ca3af;min-width:24px;padding-top:2px}.focus-item-body{flex:1}.focus-item-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.focus-item-name{font-size:13px;font-weight:600;color:var(--text)}.focus-item-pct{font-size:13px;font-weight:700;color:#d97706}.focus-item-count{font-size:11px;color:#9ca3af;margin-top:3px;display:block}.practice-calendar{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.practice-calendar h3{font-size:15px;font-weight:700;color:var(--text);margin-bottom:14px}.practice-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-bottom:14px}.practice-day-header{text-align:center;font-size:10px;font-weight:700;color:#9ca3af;text-transform:uppercase;padding-bottom:4px}.practice-day{aspect-ratio:1;border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;font-weight:600;border:1px solid transparent;position:relative;cursor:default}.practice-day.empty{background:transparent}.practice-day.no-practice{background:#f3f4f6;color:#9ca3af}.practice-day.some-practice{background:#fef3c7;color:#92400e;border-color:#fcd34d}.practice-day.met-target{background:#dcfce7;color:#16a34a;border-color:#86efac}.practice-day.future{background:transparent;color:#d1d5db}.practice-day-num{font-size:12px;line-height:1}.practice-day-mins{font-size:9px;line-height:1;margin-top:1px;font-weight:700}.practice-summary{font-size:13px;color:var(--text);display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}.practice-summary strong{color:var(--text)}.practice-legend{display:flex;gap:14px;margin-top:10px}.legend-item{display:flex;align-items:center;gap:5px;font-size:11px;color:#6b7280}.legend-dot{width:10px;height:10px;border-radius:3px;display:inline-block}.legend-dot.no-practice{background:#f3f4f6;border:1px solid #d1d5db}.legend-dot.some-practice{background:#fef3c7;border:1px solid #fcd34d}.legend-dot.met-target{background:#dcfce7;border:1px solid #86efac}.practice-note{font-size:11px;color:#9ca3af;font-style:italic;margin-top:8px}.score-filter-pills{display:flex;gap:4px}.btn-sm{font-size:11px;padding:4px 10px;border-radius:6px}.btn-secondary{background:var(--border);color:var(--text);border:1px solid var(--border);cursor:pointer;font-weight:500;transition:background .2s}.btn-secondary:hover{background:#d1d5db}.btn-secondary:disabled{opacity:.6;cursor:not-allowed}.exam-time-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.exam-time-card h3{font-size:15px;font-weight:700;color:var(--text);margin-bottom:12px}.exam-time-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid #f3f4f6}.exam-time-row:last-of-type{border-bottom:none}.exam-time-name{font-size:13px;font-weight:500;color:var(--text)}.exam-time-quality{display:flex;align-items:center;gap:8px}.exam-time-value{font-size:15px;font-weight:700;color:var(--text)}.exam-time-badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:4px}.exam-time-badge.time-ideal{background:#dcfce7;color:#16a34a}.exam-time-badge.time-rushing{background:#fef2f2;color:#dc2626}.exam-time-badge.time-slow{background:#fef3c7;color:#92400e}.time-subject-summary{margin-bottom:12px}.time-subject-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 0;border-bottom:1px solid #f3f4f6}.time-subject-row:last-child{border-bottom:none}.time-subject-label{font-size:14px;font-weight:600;color:var(--text);min-width:160px}.time-subject-note{font-size:11px;color:#9ca3af;width:100%;padding-left:160px;margin-top:-4px}.time-detail-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#9ca3af;padding-top:8px;padding-bottom:4px;border-top:1px solid #e5e7eb;margin-top:4px}.contact-editor{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.contact-editor h4{font-size:14px;font-weight:700;color:var(--text);margin:0 0 4px}.contact-desc{font-size:12px;color:var(--text-muted);margin:0 0 12px}.contact-form{display:flex;flex-direction:column;gap:10px}.contact-row{display:flex;gap:10px}.contact-row .form-group{flex:1}.contact-actions{display:flex;align-items:center;gap:10px}.contact-saved{font-size:12px;color:#059669;font-weight:600}.contact-error{font-size:12px;color:#dc2626}.detail-actions{display:flex;gap:6px;margin-left:auto}.btn-message{background:var(--accent);color:#fff;border:none;cursor:pointer;font-weight:600;border-radius:6px;padding:6px 12px;font-size:12px;transition:opacity .2s}.btn-message:hover:not(:disabled){opacity:.85}.btn-message:disabled{opacity:.4;cursor:not-allowed}.composer-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}.composer-modal{background:var(--surface);border-radius:16px;width:100%;max-width:520px;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px #0000004d}.composer-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.composer-header h3{font-size:16px;font-weight:700;color:var(--text);margin:0}.composer-close{background:none;border:none;font-size:22px;color:var(--text-muted);cursor:pointer;padding:0 4px;line-height:1}.composer-context{padding:8px 20px;font-size:12px;color:var(--text-muted);background:#f9fafb}.composer-recipients{padding:12px 20px;border-bottom:1px solid var(--border)}.composer-recipients-label{font-size:12px;font-weight:600;color:var(--text-muted);margin-bottom:6px}.composer-recipient-list{display:flex;flex-wrap:wrap;gap:4px}.composer-recipient-chip{display:inline-flex;align-items:center;gap:4px;background:#ede9fe;color:#6d28d9;font-size:11px;font-weight:600;padding:3px 8px;border-radius:12px}.chip-type{font-size:9px;opacity:.7;text-transform:uppercase}.composer-warning{margin-top:8px;font-size:11px;color:#d97706;background:#fef3c7;padding:6px 10px;border-radius:6px}.composer-body{padding:16px 20px}.composer-textarea{width:100%;border:1px solid var(--border);border-radius:8px;padding:12px;font-size:14px;font-family:inherit;resize:vertical;min-height:100px;color:var(--text);background:var(--surface)}.composer-textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #6366f11a}.composer-char-count{text-align:right;font-size:11px;color:var(--text-muted);margin-top:4px}.composer-error{padding:0 20px 8px;font-size:12px;color:#dc2626}.composer-progress{padding:0 20px 12px}.composer-progress-bar{height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden;margin-bottom:4px}.composer-progress-fill{height:100%;background:var(--accent);border-radius:3px;transition:width .3s ease}.composer-progress-text{font-size:11px;color:var(--text-muted)}.composer-footer{display:flex;align-items:center;gap:8px;padding:12px 20px 16px}.composer-results{padding:20px;text-align:center}.composer-results-summary{display:flex;justify-content:center;gap:16px;margin-bottom:16px;font-size:14px;font-weight:600}.result-sent{color:#059669}.result-failed{color:#dc2626}.result-skipped{color:#d97706}.composer-fail-list{margin-bottom:16px;text-align:left}.fail-item{font-size:12px;color:#dc2626;padding:4px 0}.messaging-page{max-width:960px;margin:0 auto}.messaging-header{margin-bottom:20px}.messaging-header h1{font-size:22px;font-weight:800;color:var(--text);margin-bottom:4px}.messaging-controls{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-end;margin-bottom:20px}.messaging-controls .form-group{min-width:200px}.messaging-preview{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.messaging-preview-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.messaging-preview-header h3{font-size:15px;font-weight:700;color:var(--text);margin:0}.messaging-preview-stats{display:flex;gap:10px;font-size:12px;font-weight:600}.preview-ready{color:#059669}.preview-missing{color:#d97706}.messaging-recipient-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;margin-bottom:16px}.messaging-recipient-card{background:#f9fafb;border-radius:8px;padding:10px 12px}.recipient-name{font-size:13px;font-weight:600;color:var(--text);margin-bottom:4px}.recipient-phones{display:flex;flex-direction:column;gap:2px}.recipient-phone{font-size:11px;color:var(--text-muted)}.recipient-phone.missing{color:#d97706;font-style:italic}.messaging-send-btn{width:100%;padding:12px;font-size:14px}.messaging-log{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.messaging-log h3{font-size:15px;font-weight:700;color:var(--text);margin-bottom:12px}.messaging-log-list{display:flex;flex-direction:column;gap:8px}.messaging-log-item{padding:10px 12px;background:#f9fafb;border-radius:8px}.log-item-header{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:4px;font-size:12px}.log-sender{font-weight:600;color:var(--text)}.log-arrow{color:var(--text-muted)}.log-recipient{font-weight:600;color:var(--accent)}.log-type-badge{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:1px 6px;border-radius:4px;background:#e5e7eb;color:#6b7280}.log-type-badge.class{background:#dbeafe;color:#2563eb}.log-type-badge.platform{background:#fce7f3;color:#db2777}.log-time{margin-left:auto;font-size:11px;color:var(--text-muted)}.log-content{font-size:13px;color:var(--text);line-height:1.4;white-space:pre-wrap}.tutor-from-badge{display:inline-block;font-size:13px;font-weight:600;color:#059669;background:#ecfdf5;border:1px solid #a7f3d0;border-radius:8px;padding:4px 12px;margin-top:8px}.phone-assignments{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.phone-assignments h3{font-size:15px;font-weight:700;color:var(--text);margin-bottom:4px}.assignment-list{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.assignment-item{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:#fff;border:1px solid var(--border);border-radius:8px}.assignment-info{display:flex;flex-direction:column;gap:2px}.assignment-email{font-size:13px;font-weight:600;color:var(--text)}.assignment-phone{font-size:12px;color:var(--text-muted)}.assignment-remove{background:none;border:none;font-size:18px;color:var(--text-dim);cursor:pointer;padding:4px 8px;border-radius:4px;line-height:1}.assignment-remove:hover{background:#fee2e2;color:#dc2626}.assignment-form{display:flex;gap:8px;align-items:center}.assignment-input{flex:1;padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--text);background:#fff}.assignment-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #6366f11a}.assignment-select{flex:1;padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--text);background:#fff}.assignment-select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #6366f11a}.admin-page{padding:24px 0}.admin-header{margin-bottom:24px}.admin-header h1{font-size:22px;font-weight:800;color:var(--text);margin-bottom:4px}.admin-section{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.admin-section h2{font-size:16px;font-weight:700;color:var(--text);margin-bottom:4px}.branding-form{display:flex;flex-direction:column;gap:16px}.branding-field{display:flex;flex-direction:column;gap:4px}.branding-input{padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--text);background:#fff;width:100%;max-width:400px}.branding-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #6366f11a}.branding-with-preview{display:flex;align-items:center;gap:12px}.branding-with-preview .branding-input{flex:1}.logo-preview{width:40px;height:40px;border-radius:8px;border:1px solid var(--border);overflow:hidden;flex-shrink:0}.logo-preview img{width:100%;height:100%;object-fit:contain}.color-picker-row{display:flex;align-items:center;gap:8px}.color-picker{width:36px;height:36px;border:none;border-radius:6px;cursor:pointer;padding:0}.color-hex-input{max-width:120px!important;font-family:monospace}.color-swatch{width:36px;height:36px;border-radius:6px;border:1px solid var(--border);flex-shrink:0}.branding-actions{display:flex;align-items:center;gap:12px;margin-top:8px}.save-success{font-size:13px;font-weight:600;color:#059669}.chat-fab{position:fixed;bottom:24px;right:24px;width:52px;height:52px;border-radius:50%;background:var(--accent);color:#fff;border:none;font-size:22px;cursor:pointer;box-shadow:0 4px 16px #0003;z-index:900;display:flex;align-items:center;justify-content:center;transition:transform .2s ease,background .2s ease}.chat-fab:hover{transform:scale(1.08)}.chat-fab.active{background:var(--text-muted);font-size:18px}.chat-panel{position:fixed;bottom:88px;right:24px;width:380px;max-height:520px;background:#fff;border:1px solid var(--border);border-radius:16px;box-shadow:0 8px 32px #00000026;z-index:901;display:flex;flex-direction:column;overflow:hidden}.chat-panel-header{padding:12px 16px 8px;border-bottom:1px solid var(--border);background:var(--surface)}.chat-panel-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.chat-panel-name{font-size:15px;font-weight:700;color:var(--text)}.chat-panel-close{background:none;border:none;font-size:20px;color:var(--text-muted);cursor:pointer;padding:0 4px;line-height:1}.chat-panel-close:hover{color:var(--text)}.chat-tabs{display:flex;gap:4px;margin-bottom:6px}.chat-tab{padding:4px 12px;border-radius:6px;font-size:12px;font-weight:600;border:1px solid var(--border);background:#fff;color:var(--text-muted);cursor:pointer;transition:all .15s ease}.chat-tab.active{background:var(--accent);color:#fff;border-color:var(--accent)}.chat-phone-select{width:100%;padding:4px 8px;border:1px solid var(--border);border-radius:6px;font-size:11px;color:var(--text-muted);background:#fff;margin-top:4px}.chat-recipient-bar{padding:6px 16px;background:#f3f4f6;font-size:11px;color:var(--text-muted);display:flex;align-items:center;gap:6px;border-bottom:1px solid var(--border)}.chat-recipient-label{font-weight:600;color:var(--text)}.chat-recipient-name{font-weight:600;color:var(--accent)}.chat-recipient-phone{margin-left:auto;font-family:monospace;font-size:10px}.chat-messages{flex:1;overflow-y:auto;padding:12px 16px;display:flex;flex-direction:column;gap:8px;min-height:180px;max-height:300px}.chat-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:120px;color:var(--text-dim);font-size:13px;text-align:center;gap:8px;padding:16px}.chat-bubble{max-width:80%;padding:8px 12px;border-radius:12px;font-size:13px;line-height:1.4;word-break:break-word}.chat-bubble.outgoing{align-self:flex-end;background:var(--accent);color:#fff;border-bottom-right-radius:4px}.chat-bubble.incoming{align-self:flex-start;background:#f3f4f6;color:var(--text);border-bottom-left-radius:4px}.chat-bubble-text{white-space:pre-wrap}.chat-bubble-time{font-size:10px;margin-top:4px;opacity:.7}.chat-compose{border-top:1px solid var(--border);padding:8px 12px;background:var(--surface)}.chat-error{font-size:11px;color:#dc2626;margin-bottom:4px;padding:4px 8px;background:#fef2f2;border-radius:4px}.chat-input-row{display:flex;gap:6px;align-items:flex-end}.chat-input{flex:1;border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:13px;resize:none;font-family:inherit;line-height:1.4;max-height:80px;color:var(--text)}.chat-input:focus{outline:none;border-color:var(--accent)}.chat-send-btn{width:34px;height:34px;border-radius:50%;background:var(--accent);color:#fff;border:none;font-size:16px;font-weight:700;cursor:pointer;flex-shrink:0;display:flex;align-items:center;justify-content:center}.chat-send-btn:disabled{background:var(--border);cursor:not-allowed}.chat-char-count{font-size:10px;color:var(--text-dim);text-align:right;margin-top:2px}.archive-panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.archive-panel h3{font-size:15px;font-weight:700;color:var(--text);margin-bottom:16px}.archive-section{padding:16px 0;border-bottom:1px solid var(--border)}.archive-section:last-child{border-bottom:none;padding-bottom:0}.archive-section:first-of-type{padding-top:0}.archive-section-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.archive-section-header h4{font-size:14px;font-weight:600;color:var(--text);margin:0 0 4px}.archive-desc{font-size:12px;color:var(--text-muted);margin:0}.archive-history{display:flex;align-items:center;gap:12px;margin-bottom:10px;font-size:12px}.archive-count{color:var(--accent);font-weight:600}.archive-latest{color:var(--text-muted)}.archive-action-row{display:flex;gap:8px;align-items:center}.archive-notes-input{flex:1}.archive-success{margin-top:8px;font-size:12px;color:#059669;font-weight:600}.score-form{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}.score-form-row{display:flex;gap:10px}.score-form-row .form-group{flex:1}.score-form-actions{display:flex;gap:8px;align-items:center}.actual-scores-list{display:flex;flex-direction:column;gap:8px;margin-top:12px}.actual-score-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 12px;background:#f9fafb;border-radius:8px;font-size:13px}.actual-score-type{display:flex;align-items:center;gap:8px}.score-type-badge{display:inline-block;background:var(--accent);color:#fff;font-size:10px;font-weight:700;padding:2px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.5px}.score-date{font-size:12px;color:var(--text-muted)}.actual-score-numbers{display:flex;align-items:center;gap:14px}.score-total{font-size:14px}.score-section{font-size:13px;color:var(--text-muted)}.score-notes{width:100%;font-size:12px;color:var(--text-muted);font-style:italic}.archives-page{max-width:960px;margin:0 auto}.archives-header{margin-bottom:20px}.archives-header h1{font-size:22px;font-weight:800;color:var(--text);margin-bottom:4px}.archives-toolbar{margin-bottom:16px}.archives-list{display:flex;flex-direction:column;gap:12px}.archive-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden}.archive-card-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 20px;cursor:pointer;transition:background .15s}.archive-card-header:hover{background:#f9fafb}.archive-card-left{display:flex;align-items:center;gap:12px}.archive-student-name{font-size:14px;font-weight:600;color:var(--text)}.archive-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-muted);margin-top:2px}.archive-card-right{display:flex;align-items:center;gap:20px}.archive-stat{text-align:center}.archive-stat.accent .archive-stat-value{color:var(--accent)}.archive-stat-value{font-size:16px;font-weight:700;color:var(--text)}.archive-stat-label{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.3px}.archive-expand{font-size:12px;color:var(--text-muted);margin-left:8px}.archive-card-body{padding:0 20px 20px;border-top:1px solid var(--border)}.archive-detail-row{display:flex;gap:8px;padding:8px 0;border-bottom:1px solid #f3f4f6;font-size:13px}.archive-detail-label{font-weight:600;color:var(--text);min-width:140px}.archive-exams,.archive-actual-scores,.archive-comparison{margin-top:16px}.archive-exams h4,.archive-actual-scores h4,.archive-comparison h4{font-size:13px;font-weight:700;color:var(--text);margin-bottom:8px}.archive-exam-row{display:flex;align-items:center;gap:16px;padding:6px 0;border-bottom:1px solid #f3f4f6;font-size:13px}.archive-exam-name{font-weight:600;min-width:140px}.archive-exam-level{color:var(--accent);font-weight:500;min-width:100px}.archive-exam-acc{color:var(--text-muted)}.comparison-row{display:flex;align-items:center;gap:16px;padding:8px 0;border-bottom:1px solid #f3f4f6;font-size:13px}.comparison-exam{font-weight:600;min-width:120px}.comparison-predicted,.comparison-actual{min-width:100px;color:var(--text-muted)}.comparison-diff{font-weight:700;padding:2px 8px;border-radius:4px;font-size:12px}.comparison-diff.positive{background:#dcfce7;color:#16a34a}.comparison-diff.negative{background:#fef2f2;color:#dc2626}@media(max-width:640px){.strength-bar-label{min-width:90px;font-size:11px}.strength-bar-row.needs-focus{margin-left:-4px;margin-right:-4px;padding:4px}.time-subject-label{min-width:auto;font-size:13px}.time-subject-note{padding-left:0}.practice-grid{gap:3px}.practice-day{border-radius:6px}.practice-day-num{font-size:10px}.practice-legend{flex-wrap:wrap;gap:8px}.exam-time-name{font-size:12px}.exam-time-value{font-size:13px}.archive-action-row{flex-direction:column}.archive-card-header{flex-direction:column;align-items:flex-start;gap:12px}.archive-card-right{gap:12px;flex-wrap:wrap}.score-form-row{flex-direction:column;gap:8px}.archive-exam-row,.comparison-row{flex-direction:column;gap:4px;align-items:flex-start}.contact-row{flex-direction:column;gap:8px}.detail-actions{margin-left:0;margin-top:8px}.messaging-controls{flex-direction:column}.messaging-recipient-grid{grid-template-columns:1fr}.log-time{margin-left:0;width:100%}.composer-modal{max-width:100%;margin:10px}.assignment-form{flex-direction:column}.assignment-input,.assignment-select{width:100%}.chat-panel{width:calc(100vw - 32px);right:16px;bottom:80px;max-height:60vh}.chat-fab{right:16px;bottom:16px}.branding-with-preview{flex-direction:column;align-items:flex-start}.branding-input{max-width:100%}.color-picker-row{flex-wrap:wrap}}.homework-goals{background:#fff;border:1px solid var(--border);border-radius:12px;padding:20px 24px;margin-bottom:20px}.homework-goals-title{font-size:15px;font-weight:600;color:var(--text);margin:0 0 16px}.goal-cards{display:flex;gap:16px}.goal-card{flex:1;background:var(--surface);border:1px solid var(--border);border-left:4px solid transparent;border-radius:10px;padding:14px 16px;transition:border-color .2s,background .2s}.goal-card--complete{border-left-color:var(--green);background:var(--success-bg)}.goal-card--on-track{border-left-color:var(--amber);background:var(--warning-bg)}.goal-card--behind{border-left-color:var(--red);background:var(--danger-bg)}.goal-card-header{display:flex;align-items:center;gap:8px;margin-bottom:10px}.goal-icon{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.goal-icon--questions{background:#eef2ff;color:#6366f1}.goal-icon--time{background:#f0fdf4;color:#059669}.goal-icon--streak{background:#fff7ed;color:#d97706}.goal-card-label{font-size:13px;font-weight:600;color:var(--text-muted)}.goal-progress-bar{width:100%;height:8px;background:#e5e7eb;border-radius:4px;overflow:hidden;margin-bottom:8px}.goal-progress-fill{height:100%;border-radius:4px;transition:width .4s ease}.goal-card-value{font-size:18px;font-weight:700}.goal-card-target{font-size:13px;font-weight:400;color:var(--text-dim)}.goal-subtitle{font-size:12px;color:var(--text-muted);margin-top:4px}.goal-inline-flag{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--red);background:#fef2f2;padding:3px 8px;border-radius:4px;margin-top:8px;font-weight:600}.goal-flag-icon{width:14px;height:14px;border-radius:50%;background:var(--red);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;flex-shrink:0}.score-tracker{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:20px 24px;margin-bottom:20px}.score-tracker-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:12px}.score-tracker-header h3{font-size:15px;font-weight:600;color:var(--text);margin:0}.score-tracker-controls{display:flex;align-items:center;gap:12px}.blended-score-tiles{display:flex;gap:16px;margin-bottom:20px}.blended-score-tile{flex:1;text-align:center;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:16px 12px}.blended-score-value{font-size:32px;font-weight:800;color:var(--accent);line-height:1.1}.blended-score-label{font-size:12px;font-weight:600;color:var(--text-muted);margin-top:4px;text-transform:uppercase;letter-spacing:.5px}.blended-score-source{font-size:10px;color:var(--text-dim);margin-top:4px}.score-tracker-chart{margin-bottom:16px}.score-tracker-no-history{text-align:center;padding:20px;color:var(--text-muted);font-size:13px}.score-tracker-tests{border-top:1px solid var(--border);padding-top:16px;margin-top:4px}.score-tracker-tests-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.score-tracker-tests-header h4{font-size:14px;font-weight:600;color:var(--text);margin:0}.import-trigger-btn{font-size:12px!important}.score-tracker-test-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:10px}.score-tracker-test-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.score-tracker-test-header strong{font-size:14px}.score-tracker-test-date{font-size:11px;color:var(--text-dim);margin-left:8px}.score-tracker-test-total{font-size:24px;font-weight:800;color:var(--accent);line-height:1}.score-tracker-test-scores{display:flex;gap:20px;margin:6px 0}.score-tracker-test-section{display:flex;align-items:baseline;gap:6px;font-size:15px}.score-tracker-test-section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim)}.score-tracker-test-section strong{font-size:16px;color:var(--text)}.score-tracker-test-meta{font-size:12px;color:var(--text-dim);display:flex;align-items:center;gap:8px}.score-tracker-test-remove{background:none;border:none;color:var(--red);font-size:11px;cursor:pointer;padding:2px 6px;border-radius:4px;margin-left:auto}.score-tracker-test-remove:hover{background:#fef2f2}.score-tracker-empty-tests{font-size:13px;color:var(--text-muted);text-align:center;padding:12px}.exam-stats-collapsible{margin-bottom:24px}.exam-stats-summary{font-size:14px;font-weight:600;color:var(--text-muted);cursor:pointer;padding:12px 16px;background:var(--surface);border:1px solid var(--border);border-radius:10px;list-style:none;display:flex;align-items:center;gap:8px}.exam-stats-summary::-webkit-details-marker{display:none}.exam-stats-summary:before{content:"▶";font-size:10px;transition:transform .2s}details[open]>.exam-stats-summary:before{transform:rotate(90deg)}details[open]>.exam-stats-summary{border-radius:10px 10px 0 0;margin-bottom:0}.practice-calendar-subtitle{font-size:12px;color:var(--text-muted);margin:-8px 0 12px}.perf-section{margin-top:8px}.perf-header{margin-bottom:16px}.perf-header h2{margin:0 0 4px;font-size:20px;font-weight:700;color:#1f2937}.perf-header .text-muted{margin:0;font-size:13px}.perf-grid{border:1px solid #e5e7eb;border-radius:12px;background:#fff;overflow-x:auto;-webkit-overflow-scrolling:touch}.perf-col-headers{display:flex;position:sticky;top:0;z-index:5;background:#f9fafb;border-bottom:2px solid #d1d5db;min-width:fit-content}.perf-corner{font-weight:600;color:#6b7280;font-size:11px;text-transform:uppercase;letter-spacing:.03em}.perf-col-name{flex:1;min-width:90px;max-width:140px;padding:10px 6px;font-size:12px;font-weight:700;color:var(--accent, #6366f1);text-align:center;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-left:1px solid #e5e7eb}.perf-col-name:hover{background:#ede9fe;text-decoration:underline}.perf-row-label{min-width:150px;max-width:150px;padding:8px 12px;flex-shrink:0;text-align:left;font-size:12px}.perf-week-group{border-bottom:1px solid #e5e7eb}.perf-week-group:last-child{border-bottom:none}.perf-current{background:#faf5ff}.perf-week-row{display:flex;min-width:fit-content}.perf-week-title{cursor:pointer;background:#f9fafb;border-bottom:1px solid #f3f4f6}.perf-week-title:hover{background:#f3f4f6}.perf-current .perf-week-title{background:#ede9fe}.perf-current .perf-week-title:hover{background:#e0d9fd}.perf-week-name{display:flex;align-items:center;gap:6px;font-weight:700;color:#1f2937;font-size:13px}.perf-expand-icon{font-size:11px;color:#9ca3af;width:12px}.perf-week-date{font-size:11px;font-weight:400;color:#9ca3af}.perf-current-badge{font-size:10px;font-weight:600;color:#7c3aed;background:#ede9fe;padding:1px 6px;border-radius:8px;margin-left:4px}.perf-summary-cell{flex:1;min-width:90px;max-width:140px;padding:8px 6px;text-align:center;font-size:12px;color:#374151;border-left:1px solid #f3f4f6;display:flex;align-items:center;justify-content:center}.perf-summary-val{font-weight:600}.perf-flag{background:#fef2f2}.perf-flag .perf-summary-val{color:#dc2626}.perf-no-data{color:#d1d5db}.perf-metric-row{background:#fff;border-bottom:1px solid #f3f4f6}.perf-current .perf-metric-row{background:#faf5ff}.perf-metric-label{font-weight:500;color:#6b7280;font-size:12px;padding-left:30px}.perf-manual-row{background:#fffbeb;border-bottom:1px solid #fef3c7}.perf-manual-label{color:#92400e;font-weight:600;font-size:11px}.perf-data-cell{flex:1;min-width:90px;max-width:140px;padding:6px;text-align:center;font-size:12px;color:#374151;border-left:1px solid #f3f4f6;display:flex;align-items:center;justify-content:center}.perf-flag-cell{background:#fef2f2!important;color:#dc2626!important;font-weight:600}.perf-edit-cell{cursor:pointer}.perf-edit-target{display:block;min-height:18px;padding:1px 4px;border-radius:3px;cursor:pointer;width:100%;text-align:center}.perf-edit-target:hover{background:#fef3c7}.perf-placeholder{color:#d1d5db}.perf-inline-input{width:80px;padding:2px 4px;border:1px solid var(--accent, #6366f1);border-radius:3px;font-size:11px;outline:none;background:#fff;text-align:center}.attendance-btn{display:block;width:100%;padding:3px 6px;border:1px solid #e5e7eb;border-radius:4px;font-size:10px;font-weight:600;cursor:pointer;background:#f9fafb;color:#9ca3af;text-align:center;transition:all .15s;line-height:1.3}.attendance-btn:hover{border-color:#a5b4fc;background:#f0f0ff}.attendance-btn.attendance-on-time{background:#dcfce7;color:#166534;border-color:#86efac}.attendance-btn.attendance-late{background:#fef3c7;color:#92400e;border-color:#fcd34d}.attendance-btn.attendance-missed{background:#fee2e2;color:#991b1b;border-color:#fca5a5}.perf-attendance-row .perf-manual-label{font-style:italic;color:#6366f1}.portal-attendance{margin-bottom:20px}.portal-attendance h3{margin:0 0 12px;font-size:16px;font-weight:700}.portal-attendance-list{display:flex;flex-direction:column;gap:8px}.portal-attendance-week{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid #f3f4f6}.portal-attendance-week:last-child{border-bottom:none}.portal-attendance-week-label{font-weight:600;font-size:13px;min-width:60px;color:#4b5563}.portal-attendance-dates{display:flex;flex-wrap:wrap;gap:6px}.attendance-badge{display:inline-block;padding:3px 8px;border-radius:12px;font-size:11px;font-weight:600}.attendance-badge.attendance-on-time{background:#dcfce7;color:#166534}.attendance-badge.attendance-late{background:#fef3c7;color:#92400e}.attendance-badge.attendance-missed{background:#fee2e2;color:#991b1b}.practice-test-importer{margin-bottom:20px}.btn-outline{background:transparent;color:var(--accent, #6366f1);border:1px solid var(--accent, #6366f1)}.btn-outline:hover{background:var(--accent, #6366f1);color:#fff}@media(max-width:768px){.goal-cards{flex-direction:column;gap:10px}.homework-goals{padding:16px}.blended-score-tiles{flex-direction:column;gap:10px}.blended-score-value{font-size:26px}.score-tracker{padding:16px}.score-tracker-header{flex-direction:column;align-items:flex-start}.perf-grid{border-radius:8px}.perf-row-label{min-width:120px;max-width:120px}.perf-col-name,.perf-summary-cell,.perf-data-cell{min-width:70px}}
