:root{font-family:"Noto Sans TC",Inter,system-ui,sans-serif;color:#17233a;background:#edf3f9;line-height:1.5}*{box-sizing:border-box}body{margin:0}.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(135deg,#e5f0ff,#f8fbff)}.login-card{width:min(460px,100%);background:#fff;padding:34px;border-radius:18px;box-shadow:0 15px 55px rgba(16,47,85,.15)}.eyebrow{margin:0;color:#2862a1;font-size:.78rem;letter-spacing:.08em;font-weight:800}.shell{min-height:100vh}.topbar{display:flex;justify-content:space-between;align-items:center;gap:18px;background:#0b2a57;color:#fff;padding:16px max(24px,calc((100vw - 1360px)/2))}.topbar strong{display:block;font-size:1.15rem}.topbar span{font-size:.84rem;color:#d6e4f8}.userbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.content{max-width:1360px;margin:auto;padding:28px 24px}.intro{padding:22px;border-radius:16px;background:linear-gradient(130deg,#12335e,#1b6895);color:#fff;margin-bottom:18px}.intro h1{margin:4px 0}.intro p{margin:6px 0 0;color:#d9ecff}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0}.tabs button{color:#14426d;background:#e8f1fc;border:1px solid #c6d9ef}.tabs button.active{background:#165fa4;color:#fff;border-color:#165fa4}.panel{background:#fff;border:1px solid #d9e4ef;border-radius:14px;padding:22px;box-shadow:0 4px 18px rgba(13,38,76,.05)}.panel h2{margin-top:0}.grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}form{display:grid;gap:13px}label{display:grid;gap:5px;font-size:.88rem;font-weight:700;color:#334861}input,select,textarea{font:inherit;padding:9px 10px;border:1px solid #b9c8da;border-radius:8px;background:#fff;color:#17233a}textarea{min-height:84px;resize:vertical}.wide{grid-column:1/-1}button{font:inherit;font-weight:750;padding:9px 14px;border:0;border-radius:8px;background:#155ab6;color:#fff;cursor:pointer}button:hover{background:#104a99}button:disabled{opacity:.55;cursor:not-allowed}.outline{color:#155ab6;background:#fff;border:1px solid #155ab6}.danger{background:#a51d3d}.notice{padding:11px 13px;border-radius:8px;margin:0 0 16px}.notice.error{color:#8d1832;background:#fff0f3;border:1px solid #f1c1cd}.notice.success{color:#075f42;background:#e9fbf3;border:1px solid #b8ead5}.muted{color:#66788e;font-size:.9rem}.calendar-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}.calendar-toolbar h2{margin:0}.legend{margin-left:auto;display:flex;gap:7px;flex-wrap:wrap;font-size:.78rem}.legend span{border-radius:999px;color:#fff;padding:4px 8px}.blue{background:#2563eb}.green{background:#0f766e}.purple{background:#7c3aed}.orange{background:#a16207}.calendar{display:grid;grid-template-columns:repeat(7,minmax(100px,1fr));border-top:1px solid #d5e1ef;border-left:1px solid #d5e1ef;overflow:auto}.weekday{padding:8px;text-align:center;background:#f2f7fc;border-right:1px solid #d5e1ef;border-bottom:1px solid #d5e1ef;font-size:.86rem}.day{min-height:132px;padding:7px;border-right:1px solid #d5e1ef;border-bottom:1px solid #d5e1ef;display:flex;gap:5px;flex-direction:column}.day.off{background:#f8fafc;color:#94a3b8}.event{display:grid;gap:2px;text-align:left;padding:6px;border:0;border-radius:7px;color:#fff;font-size:.78rem;line-height:1.25}.event b,.event small{font-size:.7rem}.event small{opacity:.85}.event.internal_meeting{background:#2563eb}.event.off_campus{background:#0f766e}.event.other{background:#7c3aed}.event.draft{background:#a16207;border:1px dashed #fff3c4}.activity-list{display:grid;gap:9px}.activity-row{display:flex;gap:8px;align-items:stretch;border:1px solid #dbe5f0;border-radius:10px;padding:5px}.activity-row button:first-child{background:transparent;color:#173d66;text-align:left;display:grid;gap:3px;flex:1}.activity-row small,.assignment small{color:#64748b}.assignments{display:grid;gap:8px}.assignment{display:grid;gap:3px;border-left:4px solid #2877b0;background:#f5f9fd;padding:10px}.assignment button{width:max-content;margin-top:4px}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.metric{background:#f5f8fd;padding:14px;border-radius:10px}.metric span{display:block;font-size:.85rem;color:#49627e}.metric strong{font-size:1.7rem}table{width:100%;border-collapse:collapse;font-size:.88rem}th,td{padding:9px;border-bottom:1px solid #e5ebf3;text-align:left;white-space:nowrap}.table-wrap{overflow:auto}.modal{position:fixed;inset:0;z-index:10;background:rgba(10,26,52,.42);display:grid;place-items:center;padding:18px}.modal-card{width:min(620px,100%);max-height:88vh;overflow:auto}.modal-card h2{margin-top:0}.row{display:flex;align-items:center;gap:8px}.row select{flex:1}@media(max-width:850px){.topbar{align-items:flex-start;flex-direction:column}.grid{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(2,1fr)}.calendar{grid-template-columns:repeat(7,minmax(84px,1fr))}.day{min-height:110px}}@media(max-width:600px){.content{padding:18px}.form-grid{grid-template-columns:1fr}.wide{grid-column:auto}.tabs{overflow:auto;flex-wrap:nowrap}.tabs button{white-space:nowrap}.calendar{grid-template-columns:repeat(7,minmax(74px,1fr))}.day{min-height:90px;padding:4px}.event{font-size:.67rem;padding:4px}.metrics{grid-template-columns:1fr}.activity-row{flex-direction:column}}
