@font-face{font-family:Noto Sans SC;src:url(/fonts/NotoSansSC-Regular.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:Noto Sans SC;src:url(/fonts/NotoSansSC-Medium.woff2) format("woff2");font-weight:500;font-display:swap}@font-face{font-family:Noto Sans SC;src:url(/fonts/NotoSansSC-SemiBold.woff2) format("woff2");font-weight:600;font-display:swap}@font-face{font-family:"Source Sans 3";src:url(/fonts/SourceSans3-Regular.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:"Source Sans 3";src:url(/fonts/SourceSans3-Medium.woff2) format("woff2");font-weight:500;font-display:swap}@font-face{font-family:"Source Sans 3";src:url(/fonts/SourceSans3-SemiBold.woff2) format("woff2");font-weight:600;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/fonts/IBMPlexMono-Regular.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/fonts/IBMPlexMono-Medium.woff2) format("woff2");font-weight:500;font-display:swap}:root{--bg: #F4F7FA;--surface: #FFFFFF;--fg: #16243A;--muted: #56647A;--accent: #184870;--border: #D3DEEA;--font-display: "Source Sans 3", "Noto Sans SC", "Source Han Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;--font-body: "Source Sans 3", "Noto Sans SC", "Source Han Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;--surface-warm: #EEF2F5;--fg-2: #2E3948;--meta: #7A8494;--border-soft: #E8EEF3;--accent-hover: #123A5C;--accent-active: #0D2C47;--nav-bg: #01507C;--nav-fg: #E8F1F7;--nav-active: #8FC4E4;--accent-on: #FFFFFF;--success: #157A3A;--warn: #B45309;--danger: #C2410C;--info: #1C6188;--font-mono: "IBM Plex Mono", "Noto Sans SC", ui-monospace, monospace;--status-pending-bg: #FEF3C7;--status-pending-fg: #92400E;--status-pending-border: #F5D38A;--status-approved-bg: #D1FAE5;--status-approved-fg: #065F46;--status-approved-border: #86EFAC;--status-conflict-bg: #FFEDD5;--status-conflict-fg: #9A3412;--status-conflict-border: #FDBA74;--status-rejected-bg: #FDE8DC;--status-rejected-fg: #9A3412;--status-rejected-border: #FDBA74;--status-cancelled-bg: #EEF2F5;--status-cancelled-fg: #2E3948;--status-cancelled-border: #CBD5E1;--status-expired-bg: #EEF2F5;--status-expired-fg: #5B6573;--status-expired-border: #D7DEE7;--status-waitlisted-bg: #E0EEF9;--status-waitlisted-fg: #1D4E89;--status-waitlisted-border: #93B8D9;--status-done-bg: #E8EEF3;--status-done-fg: #334155;--status-done-border: #CBD5E1;--text-xs: .75rem;--text-sm: .8125rem;--text-md: .875rem;--text-lg: 1rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--text-3xl: 2rem;--text-kiosk: 1.375rem;--weight-read: 400;--weight-emphasize: 510;--weight-announce: 590;--leading-body: 1.5;--leading-title: 1.25;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-pill: 9999px;--elev-flat: none;--elev-ring: 0 0 0 1px var(--border);--elev-raised: 0 8px 24px rgba(26, 35, 50, .12);--motion-fast: .15s;--motion-base: .2s;--ease-standard: cubic-bezier(.2, 0, 0, 1);--focus-ring: 0 0 0 3px rgba(15, 110, 107, .35);--container-max: 1280px;--sidebar-width: 220px;--touch-min: 44px;--kiosk-touch-min: 72px;--kiosk-touch-secondary-min: 56px;--kiosk-touch-gap: 16px}@media(prefers-reduced-motion:reduce){:root{--motion-fast: 0ms;--motion-base: 0ms}}html,body,#root{margin:0;min-height:100%;background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:var(--text-md);line-height:var(--leading-body)}*{box-sizing:border-box}.mono{font-family:var(--font-mono);letter-spacing:0}.page-title{margin:0 0 var(--space-4);font-size:var(--text-xl);font-weight:590;letter-spacing:-.01em;line-height:var(--leading-title)}.muted{color:var(--muted)}.meta{color:var(--meta);font-size:var(--text-sm)}.surface{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm)}.touch{min-height:var(--touch-min);min-width:var(--touch-min)}.kiosk-primary{min-height:var(--kiosk-touch-min);min-width:var(--kiosk-touch-min)}.kiosk-secondary{min-height:var(--kiosk-touch-secondary-min);min-width:var(--kiosk-touch-secondary-min)}.stack{display:flex;flex-direction:column;gap:var(--space-4)}.row{display:flex;align-items:center;gap:var(--space-3)}.counts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-4)}.count-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-4)}.count-card strong{display:block;font-size:var(--text-2xl);font-weight:590;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.app-sider .ant-menu-item{min-height:var(--touch-min);display:flex!important;align-items:center}.app-sider .ant-menu-item-selected{border-left:3px solid var(--nav-active)}.app-footer{text-align:center;color:var(--meta);font-size:var(--text-xs);padding:var(--space-3) var(--space-4)}.login-wrap{min-height:100dvh;display:flex;align-items:center;justify-content:center;background:var(--bg);padding:var(--space-6)}.login-card{width:400px;max-width:100%;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-8) var(--space-6)}.login-card h1{margin:0 0 var(--space-6);font-size:var(--text-xl);font-weight:590}.auth-page{min-height:100dvh;display:flex;flex-direction:column;background:var(--bg)}.auth-header{min-height:76px;padding:var(--space-3) var(--space-6);display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);background:linear-gradient(180deg,#01507c,#1c6188 52%,#6b92a8);color:var(--nav-fg);border-bottom:1px solid rgba(255,255,255,.18)}.auth-brand{display:flex;align-items:center;gap:var(--space-3);color:var(--nav-fg);text-decoration:none;min-width:0}.auth-logo{display:block;height:38px;width:auto;flex:none}.auth-brand-divider{width:1px;height:26px;background:#ffffff52;flex:none}.auth-brand-name{font-size:var(--text-md);font-weight:var(--weight-announce);white-space:nowrap}.auth-back{color:var(--nav-fg);font-size:var(--text-sm);text-decoration:none;padding:var(--space-2)}.auth-header-actions{display:flex;align-items:center;gap:var(--space-2)}.auth-header-btn{color:var(--nav-fg)!important;font-size:var(--text-sm)}.auth-header-btn:hover{color:var(--nav-fg)!important;background:var(--accent-active)!important}.app-header{gap:var(--space-3)}.app-header-title{min-width:0;text-decoration:none;white-space:nowrap}.app-header-actions{flex:none}.app-menu-btn{display:none}.ant-table-wrapper{max-width:100%}.ant-table-content,.ant-table-body{overflow-x:auto}.app-sider .ant-layout-sider-zero-width-trigger{display:none!important}.auth-main{flex:1;width:100%;max-width:1080px;margin:0 auto;padding:var(--space-12) var(--space-6);display:grid;grid-template-columns:minmax(0,1fr) 440px;gap:var(--space-12);align-items:center}.auth-intro{position:relative;max-width:52ch;padding-bottom:clamp(90px,16vw,180px)}.auth-intro:after{content:"";position:absolute;left:0;bottom:0;width:min(460px,100%);aspect-ratio:1200 / 523;background:url(/brand/gate-sketch.webp) no-repeat left bottom / contain;opacity:.5;pointer-events:none}.auth-kicker{margin:0 0 var(--space-3);color:var(--accent);font-size:var(--text-sm);font-weight:var(--weight-emphasize);letter-spacing:.04em;white-space:nowrap}.auth-intro h1{margin:0 0 var(--space-4);font-size:var(--text-3xl);font-weight:var(--weight-announce);line-height:var(--leading-title)}.auth-intro>p{margin:0 0 var(--space-5);color:var(--muted);font-size:var(--text-lg);line-height:1.75}.auth-points{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-3)}.auth-points li{display:flex;align-items:flex-start;gap:var(--space-2);color:var(--fg-2);font-size:var(--text-md)}.auth-points li svg{color:var(--accent);margin-top:3px;flex:none}.auth-card{width:100%;max-width:100%;padding:var(--space-8)}.auth-card h1{margin-bottom:var(--space-2)}.auth-subtitle{margin:0 0 var(--space-6);color:var(--muted);font-size:var(--text-sm)}.auth-divider{margin:var(--space-5) 0;display:flex;align-items:center;gap:var(--space-3);color:var(--meta);font-size:var(--text-xs)}.auth-divider:before,.auth-divider:after{content:"";flex:1;height:1px;background:var(--border)}.auth-links{margin-top:var(--space-5);display:flex;justify-content:space-between;gap:var(--space-3);font-size:var(--text-sm)}.auth-links a{color:var(--accent);text-decoration:none}.auth-links a:hover{text-decoration:underline}.auth-footnote{margin:var(--space-6) 0 0;color:var(--meta);font-size:var(--text-xs);text-align:center}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.kiosk-shell{min-height:100dvh;display:flex;flex-direction:column;background:var(--bg)}.kiosk-header{height:64px;display:flex;align-items:center;justify-content:space-between;padding:0 var(--space-6);background:var(--nav-bg);color:var(--nav-fg)}.kiosk-main{flex:1;padding:var(--space-6)}.kiosk-nav{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--kiosk-touch-gap);padding:var(--space-4) var(--space-6);background:var(--nav-bg)}.kiosk-nav a,.kiosk-nav button{min-height:var(--kiosk-touch-min);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2);color:var(--nav-fg);background:transparent;border:0;text-decoration:none;font-size:var(--text-lg)}.kiosk-nav a.active{color:var(--nav-active)}.course-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-6)}.slot-grid{display:grid;gap:var(--space-2)}.slot-cell{min-height:var(--touch-min);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);text-align:left;padding:var(--space-2)}.slot-cell[disabled]{background:var(--surface-warm);color:var(--muted)}.pub{min-height:100dvh;display:flex;flex-direction:column;background:var(--bg)}.pub-header{position:sticky;top:0;z-index:20;min-height:76px;padding:var(--space-3) var(--space-6);display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);background:linear-gradient(180deg,#01507c,#1c6188 52%,#6b92a8);color:var(--nav-fg);box-shadow:0 1px #0000000f;border-bottom:1px solid rgba(255,255,255,.18)}.pub-brand{display:flex;align-items:center;gap:var(--space-4);min-width:0}.pub-logo{display:block;height:42px;width:auto;flex:none}.pub-brand-divider{width:1px;height:30px;background:#ffffff52;flex:none}.pub-brand-name{font-size:var(--text-lg);font-weight:var(--weight-announce);line-height:1.3;letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pub-brand strong{font-size:var(--text-lg);font-weight:var(--weight-announce);line-height:1.25}.pub-brand span{font-size:var(--text-xs);color:var(--border-soft);opacity:.85}.pub-actions{display:flex;align-items:center;gap:var(--space-3)}.pub-user{font-size:var(--text-sm);color:var(--border-soft);white-space:nowrap}.pub-main{flex:1;width:100%;max-width:var(--container-max);margin:0 auto;padding:var(--space-8) var(--space-6) var(--space-12);display:flex;flex-direction:column;gap:var(--space-10)}.pub-intro{position:relative}.pub-intro:before{content:"";position:absolute;right:calc(var(--space-6) * -1);bottom:calc(var(--space-8) * -1);width:min(560px,52vw);aspect-ratio:1200 / 523;background:url(/brand/gate-faint.webp) no-repeat right bottom / contain;opacity:.3;pointer-events:none;z-index:0}.pub-intro>*{position:relative;z-index:1}.pub-intro h1{margin:0 0 var(--space-3);font-size:var(--text-3xl);font-weight:var(--weight-announce);line-height:var(--leading-title)}.pub-eyebrow{margin:0 0 var(--space-2)!important;color:var(--accent)!important;font-size:var(--text-sm)!important;font-weight:var(--weight-emphasize);letter-spacing:.04em}.pub-intro p{margin:0 0 var(--space-2);max-width:62ch;color:var(--muted);font-size:var(--text-lg);line-height:1.7}.pub-intro-line{color:var(--fg)!important;font-weight:var(--weight-emphasize)}.pub-intro-actions{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-4)}.pub-guide{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.pub-guide-item{display:flex;gap:var(--space-3);padding:var(--space-5);border-right:1px solid var(--border)}.pub-guide-item:last-child{border-right:0}.pub-guide-icon{flex:none;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);background:var(--surface-warm);color:var(--accent);font-size:var(--text-lg)}.pub-guide-item h2{margin:0 0 var(--space-1);font-size:var(--text-md);font-weight:var(--weight-emphasize)}.pub-guide-item p{margin:0;color:var(--muted);font-size:var(--text-sm);line-height:1.6}.pub-alert{padding:var(--space-3) var(--space-4);border:1px solid var(--status-pending-border);background:var(--status-pending-bg);color:var(--status-pending-fg);border-radius:var(--radius-sm);font-size:var(--text-sm)}.pub-section{display:flex;flex-direction:column;gap:var(--space-4);scroll-margin-top:80px}.pub-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3);padding-bottom:var(--space-2);border-bottom:1px solid var(--border)}.pub-section-head h2{margin:0;font-size:var(--text-xl);font-weight:var(--weight-announce)}.pub-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-4)}.pub-labs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-4)}.pub-card{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm)}.pub-card h3{margin:0;font-size:var(--text-lg);font-weight:var(--weight-emphasize);line-height:var(--leading-title)}.pub-card-sub{margin:0;color:var(--muted);font-size:var(--text-sm)}.pub-card-meta{margin:0;display:flex;align-items:center;gap:var(--space-1);color:var(--meta);font-size:var(--text-sm)}.pub-card-foot{margin-top:auto;padding-top:var(--space-2);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.pub-room{font-size:var(--text-sm);color:var(--meta)}.pub-remaining{color:var(--success);font-size:var(--text-sm);font-weight:var(--weight-emphasize)}.pub-remaining.low{color:var(--warn)}.pub-badge{align-self:flex-start;margin-top:auto;padding:2px var(--space-2);border:1px solid var(--status-approved-border);background:var(--status-approved-bg);color:var(--status-approved-fg);border-radius:var(--radius-pill);font-size:var(--text-xs)}.pub-showcase{border-left:3px solid var(--accent)}.pub-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-4);padding:var(--space-6);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm)}.pub-stats strong{display:block;font-size:var(--text-3xl);font-weight:var(--weight-announce);font-variant-numeric:tabular-nums}.pub-stats span{display:inline-flex;align-items:center;gap:var(--space-1);color:var(--muted);font-size:var(--text-sm)}.pub-empty{margin:0;padding:var(--space-8) var(--space-6);border:1px dashed var(--border);border-radius:var(--radius-sm);color:var(--meta);text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--space-2);background:var(--surface)}.pub-empty>svg{color:var(--accent);font-size:var(--text-2xl);opacity:.75}.pub-empty p{margin:0;color:var(--fg-2);font-size:var(--text-md);font-weight:var(--weight-emphasize)}.pub-empty span{max-width:48ch;font-size:var(--text-sm);line-height:1.6}.pub-steps{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-4)}.pub-steps li{position:relative;padding:var(--space-5);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm)}.pub-step-no{display:block;margin-bottom:var(--space-3);color:var(--accent);font-size:var(--text-sm);letter-spacing:.08em}.pub-steps h3{margin:0 0 var(--space-2);font-size:var(--text-md);font-weight:var(--weight-emphasize)}.pub-steps p{margin:0;color:var(--muted);font-size:var(--text-sm);line-height:1.6}.pub-footer{padding:var(--space-8) var(--space-6);background:var(--surface-warm);border-top:1px solid var(--border);color:var(--meta);font-size:var(--text-sm);text-align:center}.pub-footer p{margin:0 0 var(--space-2)}.pub-footer a{color:var(--accent)}.pub-footer-addr{margin-top:var(--space-1)}.pub-footer-license{margin-top:var(--space-3);font-size:var(--text-xs);letter-spacing:.2px}.pub-footer-license a{color:var(--meta);text-decoration:none}.pub-footer-license a:hover{color:var(--accent);text-decoration:underline}.pub-footer-copy{font-size:var(--text-xs);color:var(--meta)}.mobile-tab{display:none}@media(max-width:1024px){.pub-cards,.pub-labs,.pub-steps{grid-template-columns:repeat(2,minmax(0,1fr))}.auth-main{grid-template-columns:1fr;max-width:560px;padding:var(--space-8) var(--space-4)}.auth-intro{display:none}.auth-card{max-width:100%}}@media(max-width:767px){.counts,.course-grid{grid-template-columns:1fr}.pub-header{padding:var(--space-2) var(--space-4);min-height:60px}.pub-logo{height:30px}.pub-brand{gap:var(--space-2)}.pub-brand-divider,.pub-brand-name{display:none}.auth-header{padding:var(--space-2) var(--space-4);min-height:60px}.auth-logo{height:28px}.auth-brand-name{display:none}.pub-intro:before{display:none}.pub-user{display:none}.pub-main{padding:var(--space-6) var(--space-4) var(--space-10);gap:var(--space-8)}.pub-intro h1{font-size:var(--text-2xl)}.pub-intro p{font-size:var(--text-md)}.pub-cards,.pub-labs,.pub-stats,.pub-steps,.pub-guide{grid-template-columns:1fr}.pub-guide-item{border-right:0;border-bottom:1px solid var(--border);padding:var(--space-4)}.pub-guide-item:last-child{border-bottom:0}.auth-header{padding:var(--space-3) var(--space-4)}.auth-brand strong{font-size:var(--text-md)}.auth-brand span{display:none}.auth-main{padding:var(--space-5) var(--space-4);align-items:start}.auth-card{padding:var(--space-6) var(--space-4)}.auth-links{flex-direction:column;gap:var(--space-2)}.app-header{height:auto!important;min-height:64px;padding:var(--space-2) var(--space-4)!important;flex-wrap:wrap;line-height:normal}.app-header-title{flex:1 1 100%;font-size:var(--text-md);overflow:hidden;text-overflow:ellipsis}.app-header-user{display:none}.app-header-actions{width:100%;justify-content:space-between;gap:var(--space-1)}.app-header-actions .ant-btn{padding-inline:var(--space-2);font-size:var(--text-sm)}.app-menu-btn{display:inline-flex}.mobile-tab{display:grid;grid-template-columns:repeat(5,1fr);position:sticky;bottom:0;background:var(--surface);border-top:1px solid var(--border);z-index:10}.mobile-tab a{min-height:var(--touch-min);display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--fg);text-decoration:none;font-size:var(--text-xs)}.mobile-tab a.active{color:var(--accent)}}.status-pending{color:var(--status-pending-fg);background:var(--status-pending-bg);border-color:var(--status-pending-border)}.status-approved{color:var(--status-approved-fg);background:var(--status-approved-bg);border-color:var(--status-approved-border)}.status-conflict{color:var(--status-conflict-fg);background:var(--status-conflict-bg);border-color:var(--status-conflict-border)}.status-rejected{color:var(--status-rejected-fg);background:var(--status-rejected-bg);border-color:var(--status-rejected-border)}.status-cancelled{color:var(--status-cancelled-fg);background:var(--status-cancelled-bg);border-color:var(--status-cancelled-border)}.status-expired{color:var(--status-expired-fg);background:var(--status-expired-bg);border-color:var(--status-expired-border)}.status-waitlisted{color:var(--status-waitlisted-fg);background:var(--status-waitlisted-bg);border-color:var(--status-waitlisted-border)}.status-done{color:var(--status-done-fg);background:var(--status-done-bg);border-color:var(--status-done-border)}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.scroll-tabs .ant-tabs-nav-wrap{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none}.scroll-tabs .ant-tabs-nav-wrap::-webkit-scrollbar{display:none}.scroll-tabs .ant-tabs-nav-list{flex-wrap:nowrap}.scroll-tabs .ant-tabs-tab{flex:0 0 auto;white-space:nowrap}.scroll-tabs .ant-tabs-nav-operations{display:none!important}
