:root{--bg: #0f1115;--panel: #181b22;--panel2: #1f232c;--border: #2a2f3a;--text: #e8eaef;--muted: #8b93a3;--accent: #f5c518;--accent-text: #14161b;--green: #34c07a;--amber: #e8a13c;--red: #e05c5c;--t-class: #5b8dd9;--t-teaching: #38b6c4;--t-research: #a678e8;--t-special: #e8843c;--t-student: #34c07a;--radius: 10px;font-size:15px}body.light{--bg: #f4f5f8;--panel: #ffffff;--panel2: #eef0f4;--border: #d8dce4;--text: #1c2028;--muted: #5f6675;--accent: #b8860b;--accent-text: #ffffff}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;min-height:100vh;transition:background .2s,color .2s}header{display:flex;align-items:center;justify-content:space-between;padding:14px 28px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg);z-index:20;gap:12px;flex-wrap:wrap}header h1{font-size:1.05rem;letter-spacing:.5px}header h1 span{color:var(--accent)}header .h-sub{font-size:.7rem;color:var(--muted);margin-top:2px}.header-controls{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.role-toggle,.view-toggle{display:flex;gap:4px;background:var(--panel);border:1px solid var(--border);border-radius:999px;padding:3px}.role-toggle button,.view-toggle button{border:0;background:transparent;color:var(--muted);padding:6px 14px;border-radius:999px;cursor:pointer;font-size:.85rem}.role-toggle button.active,.view-toggle button.active{background:var(--accent);color:var(--accent-text);font-weight:600}.theme-btn{background:var(--panel);border:1px solid var(--border);color:var(--text);border-radius:999px;width:36px;height:36px;cursor:pointer;font-size:1rem}.theme-btn:hover{border-color:var(--accent)}.user-chip{font-size:.75rem;color:var(--muted);background:var(--panel);border:1px solid var(--border);border-radius:999px;padding:6px 12px}main{max-width:1180px;margin:0 auto;padding:24px 28px 60px}.auth-gate{position:fixed;inset:0;background:var(--bg);z-index:100;display:flex;align-items:center;justify-content:center;padding:20px}.auth-card{background:var(--panel);border:1px solid var(--border);border-radius:14px;width:100%;max-width:400px;padding:28px;text-align:center}.auth-card h1{font-size:1.2rem;letter-spacing:.5px}.auth-card h1 span{color:var(--accent)}.auth-card .auth-sub{font-size:.72rem;color:var(--muted);margin:4px 0 22px}.auth-card .field{text-align:left}.auth-card p{font-size:.88rem;margin-bottom:10px}.auth-btn{width:100%;margin-top:4px;padding:10px}.auth-hint{font-size:.72rem;color:var(--muted);margin-top:10px;line-height:1.5}.auth-sent-icon{font-size:2rem;margin-bottom:8px}.auth-err{font-size:.78rem;color:var(--red);margin-top:12px;min-height:1em}.induction-card{display:flex;align-items:center;justify-content:space-between;gap:14px;border-radius:var(--radius);padding:14px 18px;margin-bottom:20px;border:1px solid var(--border);background:var(--panel);flex-wrap:wrap}.induction-card.ok{border-color:#34c07a80}.induction-card.warn{border-color:#e8a13c8c}.induction-card .ic-info{font-size:.85rem;line-height:1.55}.induction-card .ic-info b{font-size:.92rem}.induction-card .ic-info .muted{color:var(--muted)}.lvl-chip{display:inline-block;font-size:.68rem;font-weight:700;padding:2px 9px;border-radius:999px;vertical-align:1px;margin-left:6px}.lvl-2{background:#34c07a29;color:var(--green)}.lvl-3{background:#a678e829;color:var(--t-research)}.lvl-0{background:#e8a13c29;color:var(--amber)}.lvl-x{background:#e05c5c29;color:var(--red)}.reset-link{font-size:.7rem;color:var(--muted);cursor:pointer;text-decoration:underline;margin-left:10px}.spaces{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:26px}.space-card{background:var(--panel);border:1px solid var(--border);border-top:4px solid var(--sc);border-radius:var(--radius);padding:16px;cursor:pointer;transition:border-color .15s,background .15s}.space-card.wide{grid-column:span 2}.space-card:hover{border-color:var(--sc)}.space-card.selected{border-color:var(--sc);background:color-mix(in srgb,var(--sc) 8%,var(--panel2))}.space-card .emoji{font-size:1.6rem}.space-card h3{margin:8px 0 4px;font-size:1rem}.space-card h3 .sc-dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--sc);margin-right:7px}.space-card .meta{color:var(--muted);font-size:.8rem;line-height:1.5}.spaces.mgr-mode{grid-template-columns:repeat(3,1fr)}.space-card.mgr{display:flex;align-items:center;padding:10px 14px;border-top:1px solid var(--border);border-left:4px solid var(--sc)}.space-card.mgr h3{margin:0;font-size:.88rem}.email-row{display:flex;gap:6px;margin-bottom:6px}.email-row input{flex:1}.plus-btn{padding:6px 12px;font-size:1rem;line-height:1}.hint{font-size:.7rem;color:var(--muted);margin-top:2px}.info-banner{background:#5b8dd91f;border:1px solid rgba(91,141,217,.45);color:var(--t-class);border-radius:8px;padding:10px 13px;font-size:.8rem}@media(max-width:900px){.spaces{grid-template-columns:1fr;gap:8px;margin-bottom:16px}.space-card,.space-card.wide{grid-column:span 1;display:flex;align-items:center;gap:10px;padding:8px 12px;border-top:1px solid var(--border);border-left:4px solid var(--sc)}.space-card.selected{border-color:var(--sc)}.space-card .emoji{font-size:1.1rem}.space-card h3{margin:0;font-size:.85rem;flex:1}.space-card .meta,.space-card .badge.induction,.space-card .badge.notice{display:none}.space-card .badge{margin:0}}.badge{display:inline-block;font-size:.7rem;padding:2px 8px;border-radius:999px;margin-top:8px;font-weight:600;margin-right:5px}.badge.instant{background:#34c07a26;color:var(--green)}.badge.approval{background:#e8a13c26;color:var(--amber)}.badge.induction{background:#5b8dd926;color:var(--t-class)}.badge.notice{background:#e05c5c21;color:var(--red)}.grid-wrap{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.grid-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border);flex-wrap:wrap;gap:10px}.grid-head h2{font-size:.95rem}.grid-head .sub{color:var(--muted);font-size:.8rem;margin-top:2px}.week-nav{display:flex;gap:8px;align-items:center}.week-nav button{background:var(--panel2);border:1px solid var(--border);color:var(--text);border-radius:6px;padding:5px 12px;cursor:pointer}.week-nav button:hover{border-color:var(--accent)}.week-label{font-size:.85rem;color:var(--muted);min-width:150px;text-align:center}table.grid{width:100%;border-collapse:collapse;table-layout:fixed}table.grid th,table.grid td{border-top:1px solid var(--border);border-left:1px solid var(--border)}table.grid th{padding:8px 4px;font-size:.75rem;color:var(--muted);font-weight:600;background:var(--panel2)}table.grid th:first-child,table.grid td:first-child{width:64px;border-left:0}td.time{font-size:.7rem;color:var(--muted);text-align:center;padding:0 4px;background:var(--panel2)}td.slot{height:34px;cursor:pointer;position:relative}td.slot.free:hover{background:#f5c51826;box-shadow:inset 0 0 0 1px var(--accent)}td.slot.past{background:repeating-linear-gradient(45deg,transparent,transparent 6px,rgba(128,128,128,.07) 6px,rgba(128,128,128,.07) 12px);cursor:not-allowed}td.slot.booked{cursor:default}.booking-chip{position:absolute;inset:2px;border-radius:5px;font-size:.65rem;padding:3px 6px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:600;border:1px solid}.booking-chip.mine{box-shadow:0 0 0 1.5px var(--accent)}.booking-chip.pending{border-style:dashed;opacity:.75}.tc-class{background:color-mix(in srgb,var(--t-class) 22%,transparent);color:var(--t-class);border-color:color-mix(in srgb,var(--t-class) 55%,transparent)}.tc-teaching{background:color-mix(in srgb,var(--t-teaching) 22%,transparent);color:var(--t-teaching);border-color:color-mix(in srgb,var(--t-teaching) 55%,transparent)}.tc-research{background:color-mix(in srgb,var(--t-research) 22%,transparent);color:var(--t-research);border-color:color-mix(in srgb,var(--t-research) 55%,transparent)}.tc-special{background:color-mix(in srgb,var(--t-special) 22%,transparent);color:var(--t-special);border-color:color-mix(in srgb,var(--t-special) 55%,transparent)}.tc-student{background:color-mix(in srgb,var(--t-student) 22%,transparent);color:var(--t-student);border-color:color-mix(in srgb,var(--t-student) 55%,transparent)}body.light .tc-class{color:#2d5ea8}body.light .tc-teaching{color:#177d89}body.light .tc-research{color:#6f3fbd}body.light .tc-special{color:#b35a14}body.light .tc-student{color:#1a7a4c}.legend{display:flex;gap:16px;padding:10px 18px;border-top:1px solid var(--border);font-size:.75rem;color:var(--muted);flex-wrap:wrap}.legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-1px}.month-wrap{display:none}.month-wrap.active{display:block}.week-wrap.hidden{display:none}table.month{width:100%;border-collapse:collapse;table-layout:fixed}table.month th{padding:8px;font-size:.75rem;color:var(--muted);background:var(--panel2);border:1px solid var(--border)}table.month td{border:1px solid var(--border);height:86px;vertical-align:top;padding:6px;cursor:pointer}table.month td:hover{box-shadow:inset 0 0 0 1px var(--accent)}table.month td.out{opacity:.3;cursor:default}table.month td.out:hover{box-shadow:none}.day-num{font-size:.78rem;font-weight:600}.avail-dot{display:block;margin-top:8px;border-radius:6px;font-size:.68rem;font-weight:700;text-align:center;padding:4px 2px}.av-green{background:#34c07a33;color:var(--green)}.av-amber{background:#e8a13c38;color:var(--amber)}.av-red{background:#e05c5c38;color:var(--red)}.av-past{background:#8080801f;color:var(--muted)}body.light .av-green{color:#1a7a4c}body.light .av-amber{color:#a06514}body.light .av-red{color:#b03030}section.list-sec{margin-top:26px}section.list-sec h2{font-size:.95rem;margin-bottom:10px}.sec-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;flex-wrap:wrap;gap:8px}.sec-head h2{margin-bottom:0}.booking-row{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:12px 16px;margin-bottom:8px;flex-wrap:wrap}.booking-row .info{font-size:.85rem;line-height:1.6}.booking-row .info b{font-size:.9rem}.booking-row .info .muted{color:var(--muted)}.type-tag{display:inline-block;font-size:.65rem;font-weight:700;padding:2px 8px;border-radius:999px;margin-left:6px;vertical-align:1px}.flag-chip{display:inline-block;font-size:.65rem;font-weight:700;padding:2px 8px;border-radius:999px;margin:3px 4px 0 0;background:#e05c5c24;color:var(--red)}.ft-chip{display:inline-block;font-size:.65rem;font-weight:700;padding:2px 8px;border-radius:999px;margin:3px 4px 0 0;background:#34c07a29;color:var(--green)}.status-pill{font-size:.7rem;padding:3px 10px;border-radius:999px;font-weight:700}.status-pill.confirmed{background:#34c07a26;color:var(--green)}.status-pill.pending{background:#e8a13c26;color:var(--amber)}.status-pill.declined{background:#e05c5c26;color:var(--red)}.row-actions{display:flex;gap:8px;align-items:center}.btn{border:0;border-radius:7px;padding:7px 14px;cursor:pointer;font-size:.8rem;font-weight:600}.btn.primary{background:var(--accent);color:var(--accent-text)}.btn.ghost{background:var(--panel2);color:var(--text);border:1px solid var(--border)}.btn.ghost:hover{border-color:var(--accent)}.btn.approve{background:#34c07a2e;color:var(--green)}.btn.decline{background:#e05c5c26;color:var(--red)}.empty{color:var(--muted);font-size:.85rem;padding:8px 2px}table.register{width:100%;border-collapse:collapse;font-size:.82rem;background:var(--panel);border-radius:var(--radius);overflow:hidden}table.register th,table.register td{border:1px solid var(--border);padding:8px 12px;text-align:left}table.register th{background:var(--panel2);color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.4px}.modal-bg{position:fixed;inset:0;background:#0009;display:none;align-items:center;justify-content:center;z-index:50;padding:20px}.modal-bg.open{display:flex}.modal{background:var(--panel);border:1px solid var(--border);border-radius:14px;width:100%;max-width:540px;padding:22px;max-height:92vh;overflow-y:auto}.modal h3{margin-bottom:4px}.modal .sub{color:var(--muted);font-size:.82rem;margin-bottom:16px}.field{margin-bottom:13px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:0 10px}.field label{display:block;font-size:.72rem;color:var(--muted);margin-bottom:5px;font-weight:600;text-transform:uppercase;letter-spacing:.4px}.field input[type=text],.field input[type=email],.field input[type=date],.field select,.field textarea{width:100%;background:var(--panel2);border:1px solid var(--border);color:var(--text);border-radius:7px;padding:9px 11px;font-size:.88rem;font-family:inherit}.field input.invalid,.field select.invalid{border-color:var(--red)}.field input[readonly]{opacity:.75;cursor:not-allowed}.field textarea{resize:vertical;min-height:52px}.reqs label.req,.checkline{display:flex;align-items:center;gap:9px;font-size:.85rem;color:var(--text);text-transform:none;letter-spacing:0;font-weight:400;background:var(--panel2);border:1px solid var(--border);border-radius:7px;padding:8px 11px;margin-bottom:6px;cursor:pointer}.reqs label.req:hover,.checkline:hover{border-color:var(--accent)}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:10px;flex-wrap:wrap}.note{font-size:.75rem;color:var(--amber);margin-top:8px}.err{font-size:.78rem;color:var(--red);margin-top:8px;display:none}.clr-banner{border-radius:8px;padding:10px 13px;font-size:.8rem;margin-bottom:14px;line-height:1.5}.clr-banner.ok{background:#34c07a1f;border:1px solid rgba(52,192,122,.4);color:var(--green)}.clr-banner.warn{background:#e8a13c1f;border:1px solid rgba(232,161,60,.45);color:var(--amber)}.clr-banner .btn{margin-top:8px}.steps{display:flex;gap:6px;margin-bottom:16px}.steps span{flex:1;text-align:center;font-size:.68rem;font-weight:700;padding:6px 4px;border-radius:6px;background:var(--panel2);color:var(--muted);border:1px solid var(--border)}.steps span.on{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.steps span.done{color:var(--green);border-color:#34c07a66}.quiz-q{border-top:1px solid var(--border);padding:13px 0 6px}.quiz-q .qsec{color:var(--t-class);font-size:.62rem;font-weight:700;letter-spacing:.5px;text-transform:uppercase}.quiz-q h4{font-size:.85rem;margin:4px 0 8px}.quiz-q.unanswered{outline:2px solid var(--red);border-radius:6px;padding-left:8px;padding-right:8px}.qopt{display:flex;gap:9px;align-items:flex-start;font-size:.82rem;padding:6px 8px;border-radius:6px;cursor:pointer}.qopt:hover{background:var(--panel2)}.qopt input{margin-top:3px}.quiz-banner{border-radius:8px;padding:12px 15px;font-size:.9rem;font-weight:700;margin-bottom:12px}.quiz-banner.pass{background:#34c07a24;border:1px solid rgba(52,192,122,.5);color:var(--green)}.quiz-banner.fail{background:#e8a13c24;border:1px solid rgba(232,161,60,.5);color:var(--amber)}.compact-cols{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:12px 0}@media(max-width:560px){.compact-cols,.two-col{grid-template-columns:1fr}}.compact-col{background:var(--panel2);border:1px solid var(--border);border-radius:8px;padding:12px 14px}.compact-col h4{font-size:.78rem;margin-bottom:8px;color:var(--accent)}.compact-col ul{list-style:none}.compact-col li{font-size:.75rem;color:var(--text);padding:3px 0 3px 16px;position:relative;line-height:1.45}.compact-col li:before{content:"•";position:absolute;left:2px;color:var(--accent)}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%) translateY(20px);background:var(--panel2);border:1px solid var(--accent);color:var(--text);padding:12px 20px;border-radius:10px;font-size:.85rem;opacity:0;transition:all .25s;z-index:60;pointer-events:none}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}
