:root{--bg:#f5f7fb;--panel:#fff;--ink:#20283b;--muted:#6f7890;--line:#e6eaf2;--primary:#5b5bd6;--primary2:#7468eb;--soft:#f0efff;--green:#16a085;--red:#dc4c64;--amber:#e59b31;--shadow:0 16px 50px rgba(40,52,91,.09);--radius:20px;--topbar:68px}
*{box-sizing:border-box}html{font-size:15px}body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}button,input,select,textarea{font:inherit}a{color:inherit;text-decoration:none}.app-shell{min-height:100vh}.topbar{height:var(--topbar);display:flex;align-items:center;padding:0 28px;background:rgba(255,255,255,.92);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:40;backdrop-filter:blur(16px)}.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:18px}.brand-mark{width:34px;height:34px;border-radius:11px;background:linear-gradient(135deg,var(--primary),#8a70f6);display:inline-grid;place-items:center;color:white;font-weight:850;box-shadow:0 8px 20px rgba(91,91,214,.25)}.brand-mark.big{width:54px;height:54px;border-radius:16px;font-size:19px}.topbar nav{display:flex;gap:24px;margin-left:auto;align-items:center}.topbar nav a{font-weight:650;color:#586176}.topbar nav a:hover{color:var(--primary)}.impersonation-pill{margin-left:20px;background:#fff5e6;color:#a15d00;border:1px solid #f3d39b;padding:8px 12px;border-radius:999px;font-size:12px;font-weight:700}.page{width:min(1240px,calc(100% - 40px));margin:30px auto 70px}.hero-panel{min-height:220px;border-radius:28px;background:linear-gradient(125deg,#292b5f,#5956c8 60%,#7771e6);color:#fff;padding:38px 42px;display:flex;align-items:center;justify-content:space-between;box-shadow:0 22px 70px rgba(57,56,132,.22);overflow:hidden;position:relative}.hero-panel:after{content:"";position:absolute;width:380px;height:380px;border:1px solid rgba(255,255,255,.13);border-radius:50%;right:-120px;top:-160px;box-shadow:0 0 0 80px rgba(255,255,255,.035),0 0 0 150px rgba(255,255,255,.025)}.hero-panel h1{font-size:38px;line-height:1.1;margin:10px 0}.hero-panel p{max-width:680px;color:#e4e6ff;font-size:16px}.eyebrow{font-size:12px;text-transform:uppercase;letter-spacing:.12em;font-weight:800;color:#8884f2}.hero-panel .eyebrow{color:#c9c8ff}.hero-orb{width:130px;height:130px;border-radius:50%;border:1px solid rgba(255,255,255,.25);display:flex;flex-direction:column;align-items:center;justify-content:center;background:rgba(255,255,255,.09);z-index:1}.hero-orb span{font-size:12px;letter-spacing:.15em}.hero-orb b{font-size:21px}.institution-section{margin-top:36px}.section-title,.page-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:18px}.section-title h2,.page-heading h1{margin:0 0 6px}.page-heading h1{font-size:32px}.page-heading p,.section-title p{color:var(--muted);margin:0}.meta-row{display:flex;gap:12px;align-items:center;color:var(--muted);font-size:13px;flex-wrap:wrap}.project-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.project-card,.panel,.empty-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 6px 22px rgba(48,58,88,.05)}.project-card{padding:22px;transition:.2s ease}.project-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}.project-top{display:flex;justify-content:space-between;align-items:center}.project-icon{width:42px;height:42px;border-radius:13px;background:var(--soft);color:var(--primary);display:grid;place-items:center;font-size:20px}.project-card h3{font-size:18px;margin:18px 0 5px}.project-card p{color:var(--muted);font-size:13px}.project-stats{display:flex;gap:16px;padding:15px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:17px 0}.project-stats span{font-size:12px;color:var(--muted)}.project-stats b{display:block;color:var(--ink);font-size:17px}.card-actions,.action-row,.toolbar-group{display:flex;align-items:center;gap:9px}.card-actions .btn{flex:1}.empty-card{padding:35px;color:var(--muted);grid-column:1/-1;text-align:center}.empty-state{margin:50px 0;text-align:center}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:5px 9px;font-size:11px;font-weight:750}.badge.success{background:#e7f8f3;color:#087b63}.badge.danger{background:#fff0f2;color:#b82542}.badge.warning{background:#fff6e7;color:#a45f00}.badge.neutral{background:#f1f3f7;color:#5f687c}.btn{border:0;border-radius:12px;padding:10px 15px;font-weight:750;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:7px;transition:.15s ease}.btn:hover{transform:translateY(-1px)}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.btn.primary{background:linear-gradient(135deg,var(--primary),var(--primary2));color:white;box-shadow:0 8px 20px rgba(91,91,214,.2)}.btn.dark{background:#293148;color:white}.btn.soft{background:#f1f3f8;color:#424c63}.btn.google{background:#fff;border:1px solid var(--line);color:#384156}.btn.text{background:transparent;color:var(--primary);padding:6px}.btn.text.danger,.danger{color:var(--red)}.btn.small{padding:8px 11px;font-size:12px}.btn.full,.full{width:100%}.icon-btn{border:0;background:#f3f4f7;border-radius:10px;width:38px;height:38px;font-size:20px;cursor:pointer}.file-btn{cursor:pointer}.flash{max-width:1100px;margin:14px auto;padding:12px 15px;border-radius:12px;font-weight:650}.flash-error{background:#fff0f2;color:#a81d3a;border:1px solid #ffd1d9}.flash-success{background:#e9faf5;color:#08725d;border:1px solid #c5f1e4}.flash-warning{background:#fff8e8;color:#9c6208}.auth-page{background:radial-gradient(circle at 10% 10%,#eeeeff 0,transparent 35%),var(--bg)}.auth-page .app-shell{display:flex;align-items:center}.auth-wrap{width:min(1100px,calc(100% - 36px));margin:35px auto;display:grid;grid-template-columns:460px 1fr;background:white;border-radius:28px;min-height:650px;overflow:hidden;box-shadow:0 28px 90px rgba(36,43,86,.15);border:1px solid var(--line)}.auth-wrap.single{display:block;min-height:auto;max-width:720px}.auth-card{padding:48px}.auth-card.wide{max-width:720px;margin:auto}.auth-card.center{text-align:center}.auth-brand{display:flex;gap:16px;align-items:flex-start;margin-bottom:35px}.auth-card h1{font-size:30px;line-height:1.2;margin:0 0 8px}.auth-card p{color:var(--muted);line-height:1.6}.stack{display:grid;gap:17px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.span-2{grid-column:1/-1}label{display:grid;gap:7px;font-weight:680;color:#3a4357}input,select,textarea{border:1px solid #dfe3ec;border-radius:12px;padding:11px 12px;background:white;color:var(--ink);outline:none}input:focus,select:focus,textarea:focus{border-color:#8b85eb;box-shadow:0 0 0 4px rgba(91,91,214,.1)}.separator{display:flex;align-items:center;gap:10px;color:var(--muted);margin:20px 0}.separator:before,.separator:after{content:"";height:1px;background:var(--line);flex:1}.auth-foot{text-align:center;margin-top:22px}.auth-foot a{color:var(--primary);font-weight:750}.g-dot{color:#4285f4;font-weight:850}.auth-visual{background:linear-gradient(150deg,#2d2f66,#5d59cd);padding:55px;display:flex;align-items:center;justify-content:center}.mini-schedule{width:100%;max-width:500px;background:rgba(255,255,255,.94);border-radius:22px;padding:20px;box-shadow:0 22px 65px rgba(21,23,67,.3);transform:rotate(1deg)}.mini-head{display:flex;justify-content:space-between;margin-bottom:16px}.mini-head b{font-size:12px;color:var(--green)}.mini-day{display:grid;grid-template-columns:110px repeat(3,1fr);gap:8px;padding:9px 0;border-top:1px solid var(--line);align-items:center}.mini-day strong{font-size:12px}.mini-day span{font-size:10px;background:var(--soft);color:var(--primary);padding:7px;border-radius:8px}.expired-icon{font-size:54px}.soft-note{background:#f4f3ff;color:#4e4c9d;padding:16px;border-radius:14px;margin:20px 0}.modal{border:0;border-radius:22px;padding:0;max-width:500px;width:calc(100% - 30px);box-shadow:0 30px 90px rgba(30,35,70,.3)}.modal::backdrop{background:rgba(23,28,49,.58);backdrop-filter:blur(3px)}.modal form{padding:28px;display:grid;gap:15px}.modal h2{margin:0}.modal p{margin:0;color:var(--muted)}.modal-close{position:absolute;right:15px;top:14px;border:0;background:#f1f2f6;width:34px;height:34px;border-radius:10px;cursor:pointer}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin:25px 0}.kpi{background:white;border:1px solid var(--line);border-radius:18px;padding:20px}.kpi span{color:var(--muted);font-size:13px}.kpi b{display:block;font-size:30px;margin-top:8px}.panel{padding:22px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;padding:14px 12px;border-bottom:1px solid var(--line);vertical-align:middle}th{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}td small.block{display:block;color:var(--muted);margin-top:4px}.person{display:flex;align-items:center;gap:10px}.person small{display:block;color:var(--muted)}.avatar{width:38px;height:38px;border-radius:12px;background:var(--soft);color:var(--primary);display:grid;place-items:center;font-weight:800}.tabs{display:flex;gap:8px;overflow:auto;margin-bottom:15px}.tab{padding:9px 13px;border-radius:10px;background:#eceff5;color:#5a6377;white-space:nowrap}.tab.active{background:var(--primary);color:white}
/* Workspace */
.workspace-page{overflow:hidden}.workspace-page .topbar{display:none}.workspace{height:100vh;display:grid;grid-template-columns:270px minmax(0,1fr);background:#f3f5f9}.workspace-sidebar{background:#222945;color:#fff;padding:22px 18px;display:flex;flex-direction:column;overflow:auto}.back-link{font-size:12px;color:#b9c0db}.project-name{padding:25px 4px 18px;border-bottom:1px solid rgba(255,255,255,.09)}.project-name small{color:#aeb6d4}.project-name h2{font-size:18px;margin:6px 0}.save-state{font-size:11px;color:#83d8c4}.workspace-nav{display:grid;gap:6px;padding-top:18px}.workspace-nav button{border:0;background:transparent;color:#bfc6de;border-radius:12px;padding:12px 13px;text-align:left;font-weight:650;cursor:pointer}.workspace-nav button span{display:inline-block;width:23px}.workspace-nav button.active,.workspace-nav button:hover{background:rgba(255,255,255,.09);color:#fff}.sidebar-foot{margin-top:auto}.cpu-card{background:linear-gradient(145deg,rgba(116,104,235,.35),rgba(70,78,132,.35));border:1px solid rgba(255,255,255,.1);border-radius:15px;padding:15px}.cpu-card b,.cpu-card span{display:block}.cpu-card span{font-size:11px;color:#bfc6de;margin-top:5px}.workspace-main{min-width:0;height:100vh;overflow:auto}.workspace-toolbar{height:72px;background:rgba(255,255,255,.95);border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;padding:0 24px;position:sticky;top:0;z-index:30;backdrop-filter:blur(14px)}.mobile-project{display:none}.workspace-content{padding:24px;max-width:1600px;margin:auto}.workspace-title{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:20px;gap:18px}.workspace-title h1{margin:0;font-size:28px}.workspace-title p{margin:5px 0 0;color:var(--muted)}.overview-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:20px}.welcome-card{background:linear-gradient(135deg,#fff,#f4f3ff);border:1px solid #e2e0ff;border-radius:24px;padding:30px}.welcome-card h2{font-size:27px}.step-list{display:grid;gap:13px;margin-top:25px}.step{display:flex;gap:13px;align-items:flex-start;background:rgba(255,255,255,.8);border:1px solid var(--line);border-radius:14px;padding:14px}.step-num{width:30px;height:30px;border-radius:10px;background:var(--primary);color:#fff;display:grid;place-items:center;font-weight:800}.quick-stats{display:grid;grid-template-columns:1fr 1fr;gap:14px}.stat-card{background:white;border:1px solid var(--line);border-radius:18px;padding:19px}.stat-card b{display:block;font-size:29px}.stat-card span{color:var(--muted);font-size:12px}.data-tabs,.view-tabs{display:flex;gap:8px;flex-wrap:wrap}.data-tabs button,.view-tabs button{border:1px solid var(--line);background:#fff;padding:9px 12px;border-radius:10px;cursor:pointer;font-weight:650;color:#5d667a}.data-tabs button.active,.view-tabs button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.data-toolbar{display:flex;justify-content:space-between;align-items:center;margin:14px 0;gap:12px}.data-table{background:white;border:1px solid var(--line);border-radius:18px;overflow:hidden}.data-table table{min-width:780px}.color-dot{width:11px;height:11px;border-radius:50%;display:inline-block;margin-right:7px}.empty-inline{text-align:center;padding:38px;color:var(--muted)}.constraint-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:18px}.entity-list{background:#fff;border:1px solid var(--line);border-radius:18px;padding:12px;max-height:calc(100vh - 190px);overflow:auto}.entity-list button{width:100%;border:0;background:transparent;text-align:left;padding:12px;border-radius:10px;cursor:pointer}.entity-list button.active{background:var(--soft);color:var(--primary)}.availability-panel{background:#fff;border:1px solid var(--line);border-radius:18px;padding:20px;overflow:auto}.availability-grid{display:grid;grid-template-columns:90px repeat(var(--period-count,8),minmax(50px,1fr));gap:5px;min-width:650px}.availability-grid .head,.availability-grid .day-label{font-size:11px;font-weight:750;color:var(--muted);display:grid;place-items:center}.availability-cell{border:1px solid #dfe3ec;background:#eff8f4;border-radius:8px;min-height:42px;cursor:pointer;color:#0d7c64}.availability-cell.blocked{background:#fff0f2;color:#b72d49;border-color:#f4c6d0}.schedule-shell{background:#fff;border:1px solid var(--line);border-radius:20px;overflow:hidden}.schedule-controls{padding:14px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:15px;align-items:center;flex-wrap:wrap}.schedule-board-wrap{overflow:auto;padding:14px}.schedule-board{display:grid;grid-template-columns:72px repeat(var(--day-count,5),minmax(170px,1fr));grid-template-rows:44px repeat(var(--period-count,8),72px);min-width:980px;border-left:1px solid var(--line);border-top:1px solid var(--line);position:relative}.schedule-head,.period-head,.schedule-cell{border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.schedule-head{display:grid;place-items:center;font-size:12px;font-weight:800;background:#f6f7fb;position:sticky;top:0;z-index:4}.period-head{display:flex;flex-direction:column;align-items:center;justify-content:center;background:#f9fafc;font-weight:800;font-size:12px}.period-head small{font-weight:500;color:var(--muted);font-size:9px}.schedule-cell{position:relative;background:#fff;transition:.1s}.schedule-cell:hover,.schedule-cell.drag-over{background:#f2f1ff}.lesson-card{position:absolute;inset:4px;z-index:3;border-radius:10px;padding:8px 9px;color:#263047;box-shadow:0 4px 12px rgba(47,56,92,.12);cursor:grab;overflow:hidden;border-left:4px solid var(--lesson-color,#5b5bd6);background:color-mix(in srgb,var(--lesson-color,#5b5bd6) 14%,white)}.lesson-card:active{cursor:grabbing}.lesson-card b{font-size:11px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-card span{font-size:9px;color:#586176;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-card .lock{position:absolute;right:5px;top:4px;font-size:10px}.lesson-card.conflict{outline:2px solid var(--red)}.unscheduled{border-top:1px solid var(--line);padding:14px}.unscheduled-list{display:flex;gap:8px;flex-wrap:wrap;max-height:150px;overflow:auto}.unscheduled-card{border:1px solid var(--line);background:#fff;border-radius:10px;padding:9px;cursor:grab;min-width:140px}.unscheduled-card b{display:block;font-size:11px}.unscheduled-card span{font-size:10px;color:var(--muted)}.progress-overlay{position:fixed;inset:0;background:rgba(27,31,50,.55);z-index:100;display:grid;place-items:center;backdrop-filter:blur(4px)}.progress-card{width:min(420px,calc(100% - 30px));background:#fff;border-radius:22px;padding:28px;box-shadow:var(--shadow)}.progress-bar{height:10px;background:#eceef4;border-radius:999px;overflow:hidden}.progress-bar span{display:block;height:100%;background:linear-gradient(90deg,var(--primary),#9279f4);width:0}.report-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}.report-panel{background:#fff;border:1px solid var(--line);border-radius:18px;padding:20px}.report-panel h3{margin-top:0}.conflict-list{display:grid;gap:8px}.conflict-item{background:#fff3f4;border:1px solid #f5ced6;border-radius:10px;padding:10px;color:#9d2640}.toast-host{position:fixed;right:20px;bottom:20px;z-index:200;display:grid;gap:10px}.toast{background:#263047;color:#fff;padding:12px 15px;border-radius:12px;box-shadow:var(--shadow);animation:toastin .2s ease}.toast.success{background:#087b63}.toast.error{background:#ac2945}@keyframes toastin{from{transform:translateY(10px);opacity:0}}.modal-workspace{max-width:620px}.modal-workspace .form-grid{grid-template-columns:1fr 1fr}.solver-note{font-size:12px;color:var(--muted)}
@media(max-width:1000px){.project-grid{grid-template-columns:repeat(2,1fr)}.overview-grid{grid-template-columns:1fr}.workspace{grid-template-columns:220px 1fr}.report-grid{grid-template-columns:1fr 1fr}.auth-wrap{grid-template-columns:1fr}.auth-visual{display:none}.constraint-layout{grid-template-columns:1fr}.entity-list{max-height:220px}}
@media(max-width:720px){.topbar{padding:0 15px}.topbar nav{gap:10px}.topbar nav a:not(:last-child){display:none}.page{width:min(100% - 24px,1240px);margin-top:18px}.hero-panel{padding:28px 24px}.hero-panel h1{font-size:30px}.hero-orb{display:none}.project-grid{grid-template-columns:1fr}.page-heading{align-items:flex-start;flex-direction:column}.kpi-grid{grid-template-columns:1fr 1fr}.form-grid{grid-template-columns:1fr}.span-2{grid-column:auto}.auth-card{padding:30px 22px}.workspace{display:block}.workspace-sidebar{height:auto;padding:10px;position:sticky;top:0;z-index:50;display:block}.workspace-sidebar .back-link,.project-name,.sidebar-foot{display:none}.workspace-nav{display:flex;overflow:auto;padding:0}.workspace-nav button{white-space:nowrap;padding:9px}.workspace-main{height:calc(100vh - 54px)}.workspace-toolbar{height:auto;min-height:64px;padding:10px;flex-wrap:wrap}.toolbar-group{flex-wrap:wrap}.workspace-content{padding:14px}.report-grid{grid-template-columns:1fr 1fr}.modal-workspace .form-grid{grid-template-columns:1fr}}
@media print{body{background:#fff}.workspace-sidebar,.workspace-toolbar,.schedule-controls,.unscheduled,.toast-host,.topbar{display:none!important}.workspace,.workspace-main{display:block;height:auto;overflow:visible}.workspace-content{padding:0}.schedule-shell{border:0}.schedule-board-wrap{overflow:visible;padding:0}.schedule-board{min-width:0;grid-template-columns:55px repeat(var(--day-count,5),1fr);grid-template-rows:34px repeat(var(--period-count,8),55px)}.lesson-card{box-shadow:none}.workspace-title button{display:none}}
