@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/public-sans-vietnamese-400-normal-TxZB8OSn.woff2) format("woff2"),url(/assets/public-sans-vietnamese-400-normal-BO1meqcx.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/public-sans-latin-ext-400-normal-mk90oQqJ.woff2) format("woff2"),url(/assets/public-sans-latin-ext-400-normal-B02wwOdZ.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/public-sans-latin-400-normal-8Rpg0ruU.woff2) format("woff2"),url(/assets/public-sans-latin-400-normal-SBbinRkI.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/public-sans-vietnamese-500-normal-DjztbcKe.woff2) format("woff2"),url(/assets/public-sans-vietnamese-500-normal-CXYe29CY.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/public-sans-latin-ext-500-normal-DC-z7ASZ.woff2) format("woff2"),url(/assets/public-sans-latin-ext-500-normal-BHCCp-na.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/public-sans-latin-500-normal-NlrCPXnF.woff2) format("woff2"),url(/assets/public-sans-latin-500-normal-vCxiVFAq.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/public-sans-vietnamese-600-normal-P4BtCUdw.woff2) format("woff2"),url(/assets/public-sans-vietnamese-600-normal-CcnAzmUX.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/public-sans-latin-ext-600-normal-DchWdWJ_.woff2) format("woff2"),url(/assets/public-sans-latin-ext-600-normal-DfkbVac2.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/public-sans-latin-600-normal-Fru-LXNs.woff2) format("woff2"),url(/assets/public-sans-latin-600-normal-BR59oU-I.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/public-sans-vietnamese-700-normal-D97ShjGS.woff2) format("woff2"),url(/assets/public-sans-vietnamese-700-normal-Dq5VrXjD.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/public-sans-latin-ext-700-normal-CgolUQuG.woff2) format("woff2"),url(/assets/public-sans-latin-ext-700-normal-jWHjnMgZ.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/public-sans-latin-700-normal-BqJmxWdE.woff2) format("woff2"),url(/assets/public-sans-latin-700-normal-Dm-oTPSL.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/public-sans-vietnamese-800-normal-BUvYaYg7.woff2) format("woff2"),url(/assets/public-sans-vietnamese-800-normal-BFk1Z7Fw.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/public-sans-latin-ext-800-normal-BFRSyk9K.woff2) format("woff2"),url(/assets/public-sans-latin-ext-800-normal-COj-CKlZ.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/public-sans-latin-800-normal-Cymo4W0O.woff2) format("woff2"),url(/assets/public-sans-latin-800-normal-qgH1Oyzx.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%;margin:0}body{font-family:Public Sans,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:#0e0f1c;-webkit-font-smoothing:antialiased}body[data-portal=auth],body[data-portal=student]{background:#0e0f1c}body[data-portal=admin]{background:#eceef5}body[data-portal=instructor]{background:#f4f5f9}body[data-portal=coordinator]{background:#eceef5}body[data-portal=branchcoordinator]{background:#eef0fb}.pwa-install{position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));z-index:4000;display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:16px;background:#1b1d2e;color:#f4f5fb;border:1px solid rgba(255,255,255,.1);box-shadow:0 12px 34px #00000061;animation:pwa-rise .28s ease-out}@keyframes pwa-rise{0%{transform:translateY(120%);opacity:0}to{transform:translateY(0);opacity:1}}.pwa-install-icon{flex:none;border-radius:9px}.pwa-install-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.pwa-install-text strong{font-size:14px;font-weight:700}.pwa-install-text span{font-size:12.5px;line-height:1.35;color:#b9bcd0}.pwa-install-actions{display:flex;align-items:center;gap:6px;flex:none}.pwa-install-btn{background:#6366f1;color:#fff;border:none;border-radius:10px;padding:9px 16px;font-size:13.5px;font-weight:700;cursor:pointer}.pwa-install-btn:active{background:#4f52d6}.pwa-install-close{background:transparent;color:#9a9db4;border:none;font-size:15px;line-height:1;padding:8px;cursor:pointer}@media (prefers-reduced-motion: reduce){.pwa-install{animation:none}}.portal-auth{--bg: #0e0f1c;--surface: #17182a;--surface-2: #1e2036;--border-strong: #3a3c5c;--ink: #ecedf6;--muted: #a4a6c2;--faint: #74769a;--accent: #6366f1;--accent-strong: #4f46e5;--accent-soft: rgba(99, 102, 241, .15);--warn: #f4b568;--danger: #ff9a8f;--danger-bg: #2a1215;--danger-border: #5c2b2e;--font-sans: "Public Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;min-height:100vh;background:var(--bg);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased}.portal-auth .auth-screen{max-width:400px;margin:0 auto;padding:28px 20px calc(28px + env(safe-area-inset-bottom));display:flex;flex-direction:column;min-height:100vh}.portal-auth h1{font-size:26px;font-weight:800;letter-spacing:-.02em;margin:0 0 4px;text-wrap:balance}.portal-auth .brand{display:flex;flex-direction:column;align-items:center;gap:10px;margin:8vh 0 6px;color:var(--ink)}.portal-auth .brand h1{text-align:center}.portal-auth .tagline{color:var(--muted);text-align:center;margin:0 0 8px}.portal-auth .eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin:0 0 10px}.portal-auth .eyebrow.warn{color:var(--warn)}.portal-auth label{display:block;font-size:13px;color:var(--muted);margin-bottom:14px}.portal-auth input{width:100%;margin-top:7px;padding:14px;font-size:16px;font-family:var(--font-sans);border:1px solid var(--border-strong);border-radius:10px;background:var(--surface-2);color:var(--ink);transition:border-color .15s,box-shadow .15s}.portal-auth input::placeholder{color:var(--faint)}.portal-auth input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.portal-auth button{width:100%;padding:15px;font-size:16px;font-weight:700;font-family:var(--font-sans);border:none;border-radius:10px;background:var(--accent);color:#fff;cursor:pointer;transition:background .15s,opacity .15s}.portal-auth button:hover:not(:disabled){background:var(--accent-strong)}.portal-auth button:disabled{opacity:.5;cursor:default}.portal-auth .btn-ghost{background:var(--surface-2);color:var(--ink);border:1px solid var(--border-strong)}.portal-auth .error-box{background:var(--danger-bg);border:1px solid var(--danger-border);color:var(--danger);border-radius:10px;padding:10px 12px;font-size:14px;margin-bottom:8px}.portal-student{min-height:100vh;background:var(--bg);color:var(--ink);font-family:var(--font-sans)}.portal-student{--bg: #0e0f1c;--surface: #17182a;--surface-2: #1e2036;--surface-3: #23243c;--border: #2a2c45;--border-strong: #3a3c5c;--ink: #ecedf6;--muted: #a4a6c2;--faint: #74769a;--accent: #6366f1;--accent-strong: #4f46e5;--accent-soft: rgba(99, 102, 241, .15);--ok: #57d98a;--ok-bg: rgba(34, 197, 94, .12);--ok-border: rgba(74, 222, 128, .35);--warn: #f4b568;--warn-bg: rgba(244, 181, 104, .12);--warn-border: rgba(244, 181, 104, .35);--danger: #ff9a8f;--danger-bg: #2a1215;--danger-border: #5c2b2e;--font-sans: "Public Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--radius: 14px;--radius-sm: 10px;font-family:var(--font-sans);color-scheme:dark}.portal-student .app{max-width:480px;min-height:100%;margin:0 auto;padding:28px 20px calc(28px + env(safe-area-inset-bottom));display:flex;flex-direction:column}.portal-student h1{font-size:26px;font-weight:800;letter-spacing:-.02em;margin:0 0 4px;text-wrap:balance}.portal-student h2{font-size:19px;font-weight:700;letter-spacing:-.01em;margin:0}.portal-student .muted{color:var(--muted)}.portal-student .eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin:0 0 10px}.portal-student .eyebrow.accent{color:var(--accent)}.portal-student .eyebrow.warn{color:var(--warn)}.portal-student .topline{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}.portal-student .brand{display:flex;flex-direction:column;align-items:center;gap:10px;color:var(--ink);margin:8vh 0 6px}.portal-student .brand h1{text-align:center}.portal-student .brand .tagline{color:var(--muted);text-align:center;margin:0 0 8px}.portal-student .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:16px}.portal-student label{display:block;font-size:13px;color:var(--muted);margin-bottom:14px}.portal-student input,.portal-student select,.portal-student textarea{width:100%;margin-top:7px;padding:14px;font-size:16px;font-family:var(--font-sans);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--ink);transition:border-color .15s,box-shadow .15s}.portal-student input::placeholder{color:var(--faint)}.portal-student input:focus,.portal-student select:focus,.portal-student textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.portal-student button{width:100%;padding:15px;font-size:16px;font-weight:700;font-family:var(--font-sans);border:none;border-radius:var(--radius-sm);background:var(--accent);color:#fff;cursor:pointer;transition:background .15s,opacity .15s}.portal-student button:hover:not(:disabled){background:var(--accent-strong)}.portal-student button:disabled{opacity:.5;cursor:default}.portal-student .btn-ghost{background:var(--surface-2);color:var(--ink);border:1px solid var(--border)}.portal-student .btn-ghost:hover:not(:disabled){background:var(--surface-3)}.portal-student .btn-auto{width:auto;padding:9px 16px;font-size:14px}.portal-student .level-badge,.portal-student .pill{display:inline-block;font-family:var(--font-mono);font-size:11px;letter-spacing:.02em;background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:3px 9px}.portal-student .pill.neutral{background:var(--surface-2);color:var(--muted)}.portal-student .scenario,.portal-student .course-card{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:12px;cursor:pointer;transition:border-color .15s,transform .05s}.portal-student .scenario:hover,.portal-student .course-card:hover{border-color:var(--border-strong)}.portal-student .scenario:active,.portal-student .course-card:active{transform:scale(.995)}.portal-student .row-title{font-weight:700;letter-spacing:-.01em}.portal-student .row-sub{color:var(--muted);font-size:13px;margin-top:3px}.portal-student .code{font-family:var(--font-mono);font-size:11px;color:var(--faint);letter-spacing:.04em}.portal-student .course-card{flex-direction:column;align-items:stretch}.portal-student .course-card .cc-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.portal-student .progress{height:6px;border-radius:999px;background:var(--surface-3);overflow:hidden;margin-top:4px}.portal-student .progress>span{display:block;height:100%;background:var(--accent);border-radius:999px}.portal-student .progress-meta{display:flex;justify-content:flex-end}.portal-student .progress-meta .code{margin-top:6px}.portal-student .stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:4px}.portal-student .stat-tile{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 8px;text-align:center}.portal-student .stat-tile .n{font-size:22px;font-weight:800;line-height:1}.portal-student .stat-tile .l{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-top:6px}.portal-student .stat-tile.present .n{color:var(--ok)}.portal-student .stat-tile.absent .n{color:var(--danger)}.portal-student .stat-tile.late .n{color:var(--warn)}.portal-student .stat-tile.excused .n{color:var(--muted)}.portal-student .lecture-row{display:flex;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--border)}.portal-student .lecture-row:first-of-type{border-top:none}.portal-student .date-chip{flex:none;width:44px;text-align:center;font-family:var(--font-mono)}.portal-student .date-chip .m{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}.portal-student .date-chip .d{font-size:20px;font-weight:700;color:var(--ink);line-height:1}.portal-student .practice-cta{background:linear-gradient(135deg,var(--accent-soft),rgba(99,102,241,.04));border:1px solid var(--border-strong);border-radius:var(--radius);padding:18px;margin-bottom:16px}.portal-student .practice-cta button{width:auto;margin-top:14px;padding:12px 20px}.portal-student .step{display:flex;gap:14px;align-items:center;padding:14px 0;border-top:1px solid var(--border)}.portal-student .step:first-of-type{border-top:none}.portal-student .step.locked{opacity:.5;cursor:not-allowed}.portal-student .step-dot{flex:none;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-mono);font-size:13px;font-weight:600;border:1px solid var(--border-strong);color:var(--muted)}.portal-student .step-dot.done{background:var(--ok-bg);border-color:var(--ok-border);color:var(--ok)}.portal-student .step-dot.current{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.portal-student .step-body{flex:1}.portal-student .step .best{font-family:var(--font-mono);font-size:11px}.portal-student .step .best.ok{color:var(--ok)}.portal-student .step .start{font-family:var(--font-mono);font-size:12px;color:var(--accent);flex:none}.portal-student .bubble-label{font-family:var(--font-mono);font-size:10px;color:var(--faint);text-transform:uppercase;letter-spacing:.1em;margin-bottom:6px}.portal-student .bubble{border-radius:14px;padding:13px 15px;margin-bottom:14px;line-height:1.5}.portal-student .bubble.you{background:var(--accent-soft);border:1px solid rgba(99,102,241,.25)}.portal-student .bubble.ai{background:var(--surface);border:1px solid var(--border)}.portal-student .bubble .placeholder{color:var(--faint)}.portal-student .status{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:12px;color:var(--muted)}.portal-student .status .dot{width:8px;height:8px;border-radius:50%;background:var(--faint)}.portal-student .status.live .dot{background:var(--ok);box-shadow:0 0 0 3px var(--ok-bg)}.portal-student .status.busy .dot{background:var(--warn);box-shadow:0 0 0 3px var(--warn-bg)}.portal-student .grade{border-radius:var(--radius);padding:16px;margin-bottom:14px;border:1px solid var(--border);background:var(--surface)}.portal-student .grade.pass{background:var(--ok-bg);border-color:var(--ok-border)}.portal-student .grade.retry{background:var(--warn-bg);border-color:var(--warn-border)}.portal-student .grade-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.portal-student .grade .score{font-size:34px;font-weight:800;line-height:1}.portal-student .grade.pass .score{color:var(--ok)}.portal-student .grade.retry .score{color:var(--warn)}.portal-student .grade .score small{font-family:var(--font-mono);font-size:13px;font-weight:400;color:var(--muted);margin-left:4px}.portal-student .grade .verdict{font-family:var(--font-mono);font-size:11px;padding:3px 9px;border-radius:999px;text-transform:lowercase}.portal-student .grade.pass .verdict{background:var(--ok-border);color:#eafff1}.portal-student .grade.retry .verdict{background:var(--warn-border);color:#fff4e3}.portal-student .grade .fb{margin-top:10px;line-height:1.5}.portal-student .grade-foot{display:flex;align-items:center;justify-content:space-between;margin-top:10px;gap:8px;flex-wrap:wrap}.portal-student .tag{display:inline-block;font-family:var(--font-mono);font-size:11px;background:#ffffff0f;border:1px solid var(--border);border-radius:6px;padding:3px 8px;margin:0 6px 0 0;color:var(--muted)}.portal-student .latency{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-student .error{color:var(--danger);font-size:14px}.portal-student .error-box{background:var(--danger-bg);border:1px solid var(--danger-border);color:var(--danger);border-radius:var(--radius-sm);padding:10px 12px;font-size:14px}.portal-student .talk-wrap{margin-top:auto;padding-top:20px;display:flex;flex-direction:column;align-items:center;gap:10px}.portal-student .talk{width:96px;height:96px;border-radius:50%;font-size:16px;font-weight:700;-webkit-user-select:none;user-select:none;touch-action:none;background:var(--accent);box-shadow:0 0 0 8px var(--accent-soft);transition:transform .08s,background .15s,box-shadow .15s}.portal-student .talk:active{transform:scale(.96)}.portal-student .talk.recording{background:#ef4444;box-shadow:0 0 0 10px #ef44442e}.portal-student .talk:disabled{background:var(--surface-3);box-shadow:none;color:var(--faint)}.portal-student .talk-hint{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-student .grid-cards{display:flex;flex-direction:column;gap:12px}@media (min-width: 720px){.portal-student{background:radial-gradient(1400px 700px at 50% -10%,rgba(99,102,241,.08),transparent 60%),var(--bg);padding:36px 32px calc(36px + env(safe-area-inset-bottom))}.portal-student .app{max-width:1080px;padding:0}.portal-student .grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;align-items:start}.portal-student .grid-cards>.card,.portal-student .grid-cards>.course-card{margin-bottom:0}.portal-student .app.readable{max-width:760px;margin-inline:auto}}.portal-admin{min-height:100vh;background:var(--bg);color:var(--ink);font-family:var(--font-sans)}.portal-admin{--bg: #eceef5;--surface: #ffffff;--surface-2: #f3f4fa;--surface-3: #e9eaf2;--ink: #17182a;--ink-2: #2d2d44;--muted: #5c5e78;--faint: #8a8ca6;--border: #e4e5ee;--border-strong: #d5d7e3;--accent: #0f766e;--accent-strong: #0c5f58;--accent-soft: #e0f0ed;--accent-ink: #0b5f58;--ok: #15803d;--ok-soft: #e4f4ea;--warn: #b45309;--warn-soft: #f8efe1;--danger: #b91c1c;--danger-soft: #fbe9e9;--font-sans: "Public Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;font-family:var(--font-sans);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}.portal-admin .layout{display:flex;min-height:100vh}.portal-admin .sidebar{width:240px;flex:none;background:var(--surface);border-right:1px solid var(--border);color:var(--ink);padding:22px 14px;display:flex;flex-direction:column}.portal-admin .sidebar .brand{display:flex;align-items:center;gap:9px;padding:4px 10px 20px;color:var(--accent);font-weight:700;font-size:15px}.portal-admin .sidebar .brand .who{color:var(--ink)}.portal-admin .sidebar h1{font-size:15px;margin:0 0 20px}.portal-admin .sidebar a{display:flex;align-items:center;gap:10px;color:var(--muted);text-decoration:none;padding:9px 10px;border-radius:8px;margin-bottom:2px;font-size:14px;font-weight:500}.portal-admin .sidebar a .nav-num{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-admin .sidebar a .nav-count{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-admin .sidebar a:hover{background:var(--surface-2);color:var(--ink)}.portal-admin .sidebar a.active{background:var(--accent-soft);color:var(--accent-ink);font-weight:600}.portal-admin .sidebar a.active .nav-num,.portal-admin .sidebar a.active .nav-count{color:var(--accent)}.portal-admin .sidebar .foot{margin-top:auto;padding:16px 10px 0;font-size:13px;color:var(--muted)}.portal-admin .sidebar .foot .role{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-admin .content{flex:1;padding:32px 36px;max-width:1180px}.portal-admin .content>h2:first-child,.portal-admin .page-title{font-size:26px;font-weight:800;letter-spacing:-.02em;margin:0 0 4px}.portal-admin .page-sub{color:var(--muted);margin:0 0 24px}.portal-admin .eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin:0 0 10px}.portal-admin .eyebrow.accent{color:var(--accent)}.portal-admin .card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:22px;box-shadow:0 1px 2px #14162d0a;margin-bottom:22px}.portal-admin .card h3{margin:0 0 14px;font-size:16px;font-weight:700}.portal-admin table{width:100%;border-collapse:collapse}.portal-admin thead th{text-align:left;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:500;padding:8px 12px;border-bottom:1px solid var(--border)}.portal-admin td{text-align:left;padding:12px;border-bottom:1px solid var(--border);vertical-align:top}.portal-admin tbody tr:last-child td{border-bottom:none}.portal-admin .mono{font-family:var(--font-mono);font-size:12.5px}.portal-admin .code{font-family:var(--font-mono);font-size:12px;color:var(--faint);letter-spacing:.03em}.portal-admin input,.portal-admin select,.portal-admin textarea{padding:9px 11px;border:1px solid var(--border-strong);border-radius:8px;font-size:14px;font-family:var(--font-sans);background:var(--surface);color:var(--ink);transition:border-color .15s,box-shadow .15s}.portal-admin input::placeholder,.portal-admin textarea::placeholder{color:var(--faint)}.portal-admin input:focus,.portal-admin select:focus,.portal-admin textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.portal-admin label{font-size:13px;color:var(--muted)}.portal-admin button{padding:9px 16px;border:none;border-radius:8px;background:var(--accent);color:#fff;cursor:pointer;font-size:14px;font-weight:600;font-family:var(--font-sans);transition:background .15s,opacity .15s}.portal-admin button:hover:not(:disabled){background:var(--accent-strong)}.portal-admin button:disabled{opacity:.5;cursor:default}.portal-admin .btn-ghost{background:var(--surface-3);color:var(--ink);border:1px solid var(--border)}.portal-admin .btn-ghost:hover:not(:disabled){background:var(--border)}.portal-admin .btn-danger{background:transparent;color:var(--danger);padding-left:8px;padding-right:8px}.portal-admin .btn-danger:hover:not(:disabled){background:var(--danger-soft)}.portal-admin .btn-link{background:transparent;color:var(--accent);padding-left:8px;padding-right:8px}.portal-admin .btn-link:hover:not(:disabled){background:var(--accent-soft)}.portal-admin .pill{display:inline-block;font-family:var(--font-mono);font-size:11px;padding:2px 9px;border-radius:999px;background:var(--surface-3);color:var(--muted)}.portal-admin .pill.ok,.portal-admin .badge-ok{color:var(--ok);background:var(--ok-soft);border-radius:999px;padding:2px 9px;font-family:var(--font-mono);font-size:11px}.portal-admin .pill.bad,.portal-admin .badge-bad{color:var(--danger);background:var(--danger-soft);border-radius:999px;padding:2px 9px;font-family:var(--font-mono);font-size:11px}.portal-admin .badge-warn{color:var(--warn)}.portal-admin .pill.level{color:var(--accent-ink);background:var(--accent-soft)}.portal-admin .error{color:var(--danger)}.portal-admin .admin-cols{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:20px;align-items:start}.portal-admin .admin-main{min-width:0}.portal-admin .aside-panel{position:sticky;top:24px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;box-shadow:0 1px 2px #14162d0a}.portal-admin .aside-panel h3{margin:0 0 4px;font-size:16px;font-weight:700}.portal-admin .aside-panel .hint{color:var(--muted);font-size:13px;margin:0 0 14px}.portal-admin .aside-panel label{display:block;margin-bottom:12px}.portal-admin .aside-panel label>input,.portal-admin .aside-panel label>select,.portal-admin .aside-panel label>textarea{width:100%;margin-top:5px}.portal-admin .field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.portal-admin .toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}.portal-admin .search{max-width:260px}@media (max-width: 1000px){.portal-admin .admin-cols{grid-template-columns:1fr}.portal-admin .aside-panel{position:static}}.portal-admin .courses-cols{display:grid;grid-template-columns:300px minmax(0,1fr);gap:20px;align-items:start}.portal-admin .course-list{display:flex;flex-direction:column;gap:10px}.portal-admin .course-card-btn{text-align:left;background:var(--surface);color:var(--ink);border:1px solid var(--border);border-left:3px solid transparent;border-radius:12px;padding:14px;cursor:pointer}.portal-admin .course-card-btn:hover{border-color:var(--border-strong)}.portal-admin .course-card-btn.active{border-left-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.portal-admin .course-card-btn .cc-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.portal-admin .course-card-btn .cc-title{font-weight:700;letter-spacing:-.01em;margin-bottom:6px}.portal-admin .course-detail-panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;box-shadow:0 1px 2px #14162d0a;min-height:200px}.portal-admin .course-detail-panel .empty{color:var(--muted);padding:40px 0;text-align:center}.portal-admin .course-tabs{display:flex;flex-wrap:wrap;gap:2px 4px;border-bottom:1px solid var(--border);margin:14px 0 18px}.portal-admin .course-tab{background:transparent;color:var(--muted);border:none;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;font-size:13px;font-weight:600;white-space:nowrap}.portal-admin .course-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.portal-admin .course-tab:hover:not(:disabled){background:transparent;color:var(--ink)}@media (max-width: 1000px){.portal-admin .courses-cols{grid-template-columns:1fr}}.portal-admin .path-pick{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;background:var(--surface-2);color:var(--ink);border:1px solid var(--border);border-radius:8px;padding:9px 11px;margin-bottom:6px;font-size:13px;font-weight:500}.portal-admin .path-pick:hover{background:var(--accent-soft);border-color:var(--accent)}.portal-admin .review-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media (max-width: 900px){.portal-admin .review-grid{grid-template-columns:1fr}}.portal-admin .m-shell{min-height:100vh;display:flex;flex-direction:column;background:var(--bg)}.portal-admin .m-appbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;background:var(--surface);border-bottom:1px solid var(--border)}.portal-admin .m-brand{display:flex;align-items:center;gap:9px;color:var(--accent)}.portal-admin .m-brand-name{font-weight:700;font-size:15px;color:var(--ink)}.portal-admin .m-brand-sub{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-admin .m-signout{padding:8px 14px;font-size:13px}.portal-admin .m-main{flex:1;overflow-y:auto;padding-bottom:76px}.portal-admin .m-page{padding:18px 16px 8px}.portal-admin .m-title{font-size:26px;font-weight:800;letter-spacing:-.02em;margin:0 0 12px}.portal-admin .m-sub{margin:-6px 0 16px}.portal-admin .m-page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.portal-admin .m-page-head .m-title{margin:0}.portal-admin .m-page-head button{padding:8px 14px;font-size:13px}.portal-admin .m-form label{display:block;margin-bottom:12px;font-size:13px;color:var(--muted)}.portal-admin .m-form label>input,.portal-admin .m-form label>select{width:100%;margin-top:5px;font-size:16px;padding:11px;border:1px solid var(--border-strong);border-radius:9px;background:var(--surface);color:var(--ink)}.portal-admin .m-2col{display:grid;grid-template-columns:1fr 1fr;gap:10px}.portal-admin .m-search{width:100%;padding:12px 14px;margin-bottom:14px;border:1px solid var(--border-strong);border-radius:10px;font-size:16px;background:var(--surface)}.portal-admin .m-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:15px 16px;margin-bottom:12px;box-shadow:0 1px 2px #14162d0a}.portal-admin .m-card.course{border-left:3px solid var(--accent)}.portal-admin .m-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.portal-admin .m-card-title{font-weight:700;letter-spacing:-.01em}.portal-admin .m-meta{margin-top:6px}.portal-admin .m-card-actions{display:flex;gap:8px;margin-top:12px}.portal-admin .m-card-actions button{flex:1;padding:9px}.portal-admin .m-btn-danger{background:transparent;color:var(--danger);border:1px solid var(--danger)}.portal-admin .m-btn-danger:hover:not(:disabled){background:var(--danger-soft)}.portal-admin .m-banner{background:var(--accent-soft);border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:12px;font-size:14px}.portal-admin .m-banner button{margin-left:10px;padding:5px 10px;font-size:12px}.portal-admin .m-stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}.portal-admin .m-stat{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px}.portal-admin .m-stat .n{font-size:30px;font-weight:800;letter-spacing:-.02em;line-height:1}.portal-admin .m-stat .n.accent{color:var(--accent)}.portal-admin .m-stat .l{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-top:8px}.portal-admin .m-bar-row{margin-bottom:12px}.portal-admin .m-bar-head{display:flex;justify-content:space-between;margin-bottom:5px}.portal-admin .m-bar{height:6px;border-radius:999px;background:var(--surface-3);overflow:hidden}.portal-admin .m-bar>span{display:block;height:100%;background:var(--accent);border-radius:999px}.portal-admin .m-rate{text-align:right;flex:none}.portal-admin .m-rate .pct{font-family:var(--font-mono);font-weight:700;font-size:15px}.portal-admin .m-rate .pct.ok{color:var(--ok)}.portal-admin .m-rate .pct.low{color:var(--warn)}.portal-admin .m-row{width:100%;display:flex;align-items:center;justify-content:space-between;text-align:left;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:15px 16px;margin-bottom:10px;color:var(--ink);cursor:pointer}.portal-admin .m-row:hover{background:var(--surface-2)}.portal-admin .m-chevron{color:var(--faint);font-size:20px}.portal-admin .m-back{background:transparent;color:var(--accent);padding:0;font-size:14px;margin-bottom:12px}.portal-admin .m-tabbar{position:fixed;bottom:0;left:0;right:0;display:flex;background:var(--surface);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);z-index:20}.portal-admin .m-tab{flex:1;background:transparent;color:var(--muted);border-radius:0;padding:12px 4px;font-size:12px;font-weight:600;border-top:2px solid transparent}.portal-admin .m-tab.active{color:var(--accent);border-top-color:var(--accent)}.portal-admin .m-tab:hover:not(:disabled){background:transparent}@media (max-width: 760px){.portal-admin .card{overflow-x:auto}.portal-admin .page-title{font-size:22px}}.portal-admin .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#17182a73;display:flex;align-items:flex-start;justify-content:center;padding:48px 16px;overflow-y:auto}.portal-admin .modal{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 24px 60px #17182a40;width:100%;max-width:560px;padding:28px 30px 30px}.portal-admin .modal-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:20px}.portal-admin .modal form{display:flex;flex-direction:column;gap:16px}.portal-admin .modal form .field-row{gap:14px}.portal-admin .modal form input,.portal-admin .modal form select{padding:11px 12px}.portal-admin form label,.portal-admin .field-row>label{display:flex;flex-direction:column;gap:6px;align-items:stretch}.portal-admin form input:not([type=checkbox]):not([type=radio]),.portal-admin form select,.portal-admin form textarea,.portal-admin .field-row>label input:not([type=checkbox]),.portal-admin .field-row>label select{width:100%}.portal-admin .modal-head h3{margin:0}.portal-admin .modal-close{display:inline-flex;align-items:center;justify-content:center;background:var(--surface-3);color:var(--ink-2);border:none;width:32px;height:32px;border-radius:8px;padding:0;font-size:20px;line-height:1;cursor:pointer;flex:none}.portal-admin .modal-close:hover{background:var(--border-strong)}.portal-admin .modal-head{align-items:center}.portal-admin .modal-head>div{min-width:0}.portal-admin .icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--ink-2);cursor:pointer;transition:background .12s,border-color .12s,color .12s}.portal-admin .icon-btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--border-strong)}.portal-admin .icon-btn.danger{color:var(--danger)}.portal-admin .icon-btn.danger:hover:not(:disabled){background:var(--danger-soft);border-color:var(--danger)}.portal-admin .icon-btn:disabled{opacity:.5;cursor:default}.portal-admin .row-actions{display:flex;gap:6px;align-items:center}.portal-instructor{min-height:100vh;background:var(--bg);color:var(--ink);font-family:var(--font-sans)}.portal-instructor{--bg: #f4f5f9;--surface: #ffffff;--surface-2: #f2f3f8;--surface-3: #e9eaf2;--ink: #17182a;--muted: #5c5e78;--faint: #8a8ca6;--border: #e4e5ee;--border-strong: #d5d7e3;--accent: #b45309;--accent-strong: #92400e;--accent-soft: #f8efe1;--accent-ink: #92400e;--ok: #15803d;--ok-soft: #e4f4ea;--danger: #b91c1c;--danger-soft: #fbe9e9;--font-sans: "Public Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;font-family:var(--font-sans);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}.portal-instructor .wrap{max-width:820px;margin:0 auto;padding:26px 22px 60px}.portal-instructor h1{font-size:26px;font-weight:800;letter-spacing:-.02em;margin:0}.portal-instructor h2{font-size:18px;font-weight:700;letter-spacing:-.01em}.portal-instructor .muted{color:var(--muted)}.portal-instructor .code{font-family:var(--font-mono);font-size:12px;color:var(--faint);letter-spacing:.03em}.portal-instructor .topbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:22px}.portal-instructor .appbar{display:flex;align-items:center;justify-content:space-between;padding:14px 22px;margin:0 auto 22px;border-bottom:1px solid var(--border);background:var(--surface)}.portal-instructor .appbar .brand{display:flex;align-items:center;gap:9px;color:var(--accent);font-weight:700}.portal-instructor .appbar .brand .who{color:var(--ink)}.portal-instructor .appbar .end{display:flex;align-items:center;gap:14px;color:var(--muted);font-size:14px}.portal-instructor .eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin:0 0 10px}.portal-instructor .card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px;margin-bottom:16px;box-shadow:0 1px 2px #14162d0a}.portal-instructor .card.click{cursor:pointer;transition:border-color .15s,box-shadow .15s}.portal-instructor .card.click:hover{border-color:var(--border-strong);box-shadow:0 2px 8px #14162d0f}.portal-instructor .card.accent,.portal-instructor .course-card{border-left:4px solid var(--accent)}.portal-instructor .course-card .cc-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.portal-instructor .course-card .cc-title{font-weight:700;font-size:17px;letter-spacing:-.01em;margin-bottom:12px}.portal-instructor .stat-row{display:flex;gap:26px}.portal-instructor .stat-row .n{font-size:20px;font-weight:800;line-height:1}.portal-instructor .stat-row .l{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-top:5px}.portal-instructor label{display:block;font-size:13px;color:var(--muted);margin-bottom:12px}.portal-instructor input,.portal-instructor select{width:100%;margin-top:6px;padding:11px;font-size:15px;font-family:var(--font-sans);border:1px solid var(--border-strong);border-radius:9px;background:var(--surface);color:var(--ink);transition:border-color .15s,box-shadow .15s}.portal-instructor input::placeholder{color:var(--faint)}.portal-instructor input:focus,.portal-instructor select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.portal-instructor select{width:auto;min-width:130px}.portal-instructor button{padding:10px 18px;font-size:15px;font-weight:600;font-family:var(--font-sans);border:none;border-radius:9px;background:var(--accent);color:#fff;cursor:pointer;transition:background .15s,opacity .15s}.portal-instructor button:hover:not(:disabled){background:var(--accent-strong)}.portal-instructor button:disabled{opacity:.5;cursor:default}.portal-instructor .ghost{background:var(--surface-3);color:var(--ink);border:1px solid var(--border)}.portal-instructor .ghost:hover:not(:disabled){background:var(--border)}.portal-instructor .seg{display:inline-flex;background:var(--surface-3);border-radius:9px;padding:3px;gap:2px}.portal-instructor .seg button{background:transparent;color:var(--muted);padding:6px 14px;font-size:13px;border-radius:7px}.portal-instructor .seg button.active{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #14162d14}.portal-instructor table{width:100%;border-collapse:collapse}.portal-instructor thead th{text-align:left;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:500;padding:8px 10px;border-bottom:1px solid var(--border)}.portal-instructor td{text-align:left;padding:11px 10px;border-bottom:1px solid var(--border)}.portal-instructor tbody tr:last-child td{border-bottom:none}.portal-instructor .badge,.portal-instructor .pill{display:inline-block;font-family:var(--font-mono);font-size:11px;border-radius:999px;padding:2px 9px;background:var(--accent-soft);color:var(--accent-ink)}.portal-instructor .pill.neutral{background:var(--surface-3);color:var(--muted)}.portal-instructor .pill.ok{background:var(--ok-soft);color:var(--ok)}.portal-instructor .pill.bad{background:var(--danger-soft);color:var(--danger)}.portal-instructor .rate{font-family:var(--font-mono);font-weight:600}.portal-instructor .rate.ok{color:var(--ok)}.portal-instructor .rate.low{color:var(--danger)}.portal-instructor .rate.none{color:var(--faint)}.portal-instructor .error{color:var(--danger)}.portal-instructor .error-box{background:var(--danger-soft);color:var(--danger);border-radius:9px;padding:9px 12px;font-size:14px}.portal-instructor .att-row{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--border)}.portal-instructor .att-row:last-child{border-bottom:none}.portal-instructor .att-row span{flex:1}.portal-instructor .lecture-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--border)}.portal-instructor .lecture-row:first-of-type{border-top:none}.portal-instructor .seg{display:flex;gap:4px;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:4px;margin-bottom:16px}.portal-instructor .seg-btn{flex:1;background:transparent;color:var(--muted);border:none;border-radius:7px;padding:9px;font-size:14px;font-weight:600;cursor:pointer}.portal-instructor .seg-btn.active{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #14162d14}.portal-instructor .i-row,.portal-instructor .i-lecture{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-top:1px solid var(--border)}.portal-instructor .i-row:first-child,.portal-instructor .i-lecture:first-child{border-top:none}.portal-instructor .i-lecture{width:100%;text-align:left;background:transparent;color:var(--ink);border-left:none;border-right:none;border-bottom:none;cursor:pointer}.portal-instructor .i-name{font-weight:700;letter-spacing:-.01em}.portal-instructor .i-sub{font-size:13px;color:var(--muted);margin-top:2px}.portal-instructor .i-mark{color:var(--accent);font-weight:600;font-size:13px;white-space:nowrap}.portal-instructor .i-tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}.portal-instructor .i-tile{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px}.portal-instructor .i-tile .n{font-size:24px;font-weight:800;letter-spacing:-.02em;line-height:1}.portal-instructor .i-tile .n.accent{color:var(--accent)}.portal-instructor .i-tile .l{font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--faint);margin-top:8px}.portal-instructor .i-bar-row{padding:11px 0;border-top:1px solid var(--border)}.portal-instructor .i-bar-row:first-child{border-top:none}.portal-instructor .i-bar-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}.portal-instructor .i-bar{height:8px;border-radius:999px;background:var(--surface-2);overflow:hidden}.portal-instructor .i-bar>span{display:block;height:100%;border-radius:999px}.portal-instructor .i-bar>span.ok{background:#16a34a}.portal-instructor .i-bar>span.low{background:#dc2626}@media (max-width: 760px){.portal-instructor .appbar{padding:12px 16px}.portal-instructor .appbar .end{gap:10px;font-size:13px}.portal-instructor .wrap{padding:20px 16px 48px}.portal-instructor .card{overflow-x:auto}.portal-instructor h1{font-size:22px}}.portal-coordinator{min-height:100vh;background:var(--bg);color:var(--ink);font-family:var(--font-sans)}.portal-coordinator{--bg: #eceef5;--surface: #ffffff;--surface-2: #f3f4fa;--surface-3: #e9eaf2;--ink: #17182a;--ink-2: #2d2d44;--muted: #5c5e78;--faint: #8a8ca6;--border: #e4e5ee;--border-strong: #d5d7e3;--accent: #0f766e;--accent-strong: #0c5f58;--accent-soft: #e0f0ed;--accent-ink: #0b5f58;--ok: #15803d;--ok-soft: #e4f4ea;--danger: #b91c1c;--danger-soft: #fbe9e9;--font-sans: "Public Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;font-family:var(--font-sans);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}.portal-coordinator .wrap{max-width:980px;margin:0 auto;padding:26px 22px 60px}.portal-coordinator h1{font-size:26px;font-weight:800;letter-spacing:-.02em;margin:0}.portal-coordinator h2{font-size:18px;font-weight:700;letter-spacing:-.01em}.portal-coordinator h3{margin:0 0 12px;font-size:16px;font-weight:700}.portal-coordinator .muted{color:var(--muted)}.portal-coordinator .code{font-family:var(--font-mono);font-size:12px;color:var(--faint);letter-spacing:.03em}.portal-coordinator .hint{color:var(--faint);font-size:13px}.portal-coordinator .layout{display:flex;min-height:100vh}.portal-coordinator .sidebar{width:240px;flex:none;background:var(--surface);border-right:1px solid var(--border);color:var(--ink);padding:22px 14px;display:flex;flex-direction:column}.portal-coordinator .sidebar .brand{display:flex;align-items:center;gap:9px;padding:4px 10px 20px;color:var(--accent);font-weight:700;font-size:15px}.portal-coordinator .sidebar .brand .who{color:var(--ink)}.portal-coordinator .sidebar .nav-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:transparent;color:var(--muted);border:none;padding:9px 10px;border-radius:8px;margin-bottom:2px;font-size:14px;font-weight:500;cursor:pointer}.portal-coordinator .sidebar .nav-item:hover{background:var(--surface-2);color:var(--ink)}.portal-coordinator .sidebar .nav-item.active{background:var(--accent-soft);color:var(--accent-ink);font-weight:600}.portal-coordinator .sidebar .nav-num{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-coordinator .sidebar .nav-item.active .nav-num,.portal-coordinator .sidebar .nav-item.active .nav-count{color:var(--accent)}.portal-coordinator .sidebar .nav-count{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-coordinator .sidebar .foot{margin-top:auto;padding:16px 10px 0;font-size:13px;color:var(--muted)}.portal-coordinator .sidebar .foot .role{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-coordinator .content{flex:1;padding:32px 36px;max-width:1180px}.portal-coordinator .page-title{font-size:26px}.portal-coordinator .toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px}.portal-coordinator .page-title{font-size:24px;font-weight:800;letter-spacing:-.02em;margin:0 0 4px}.portal-coordinator .page-sub{color:var(--muted);margin:0}.portal-coordinator .eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin:0 0 10px}.portal-coordinator .card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px;margin-bottom:16px;box-shadow:0 1px 2px #14162d0a}.portal-coordinator .card.click{cursor:pointer;transition:border-color .15s,box-shadow .15s}.portal-coordinator .card.click:hover{border-color:var(--border-strong);box-shadow:0 2px 8px #14162d0f}.portal-coordinator .course-card{border-left:4px solid var(--accent)}.portal-coordinator .course-card .cc-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.portal-coordinator .course-card .cc-title{font-weight:700;font-size:17px;letter-spacing:-.01em;margin-bottom:12px}.portal-coordinator .grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;align-items:start}.portal-coordinator .grid-cards>.card{margin-bottom:0}.portal-coordinator .stat-row{display:flex;gap:26px}.portal-coordinator .stat-row .n{font-size:20px;font-weight:800;line-height:1}.portal-coordinator .stat-row .l{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-top:5px}.portal-coordinator label{display:block;font-size:13px;color:var(--muted)}.portal-coordinator input,.portal-coordinator select,.portal-coordinator textarea{width:100%;padding:10px 11px;font-size:14px;font-family:var(--font-sans);border:1px solid var(--border-strong);border-radius:9px;background:var(--surface);color:var(--ink);transition:border-color .15s,box-shadow .15s}.portal-coordinator input::placeholder,.portal-coordinator textarea::placeholder{color:var(--faint)}.portal-coordinator input:focus,.portal-coordinator select:focus,.portal-coordinator textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.portal-coordinator button{padding:10px 18px;font-size:14px;font-weight:600;font-family:var(--font-sans);border:none;border-radius:9px;background:var(--accent);color:#fff;cursor:pointer;transition:background .15s,opacity .15s}.portal-coordinator button:hover:not(:disabled){background:var(--accent-strong)}.portal-coordinator button:disabled{opacity:.5;cursor:default}.portal-coordinator .ghost{background:var(--surface-3);color:var(--ink);border:1px solid var(--border)}.portal-coordinator .ghost:hover:not(:disabled){background:var(--border)}.portal-coordinator .seg{display:flex;gap:4px;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:4px;margin-bottom:16px}.portal-coordinator .seg-btn{flex:1;background:transparent;color:var(--muted);border:none;border-radius:7px;padding:9px;font-size:14px;font-weight:600;cursor:pointer}.portal-coordinator .seg-btn.active{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #14162d14}.portal-coordinator table{width:100%;border-collapse:collapse}.portal-coordinator thead th{text-align:left;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:500;padding:8px 10px;border-bottom:1px solid var(--border)}.portal-coordinator td{text-align:left;padding:11px 10px;border-bottom:1px solid var(--border)}.portal-coordinator tbody tr:last-child td{border-bottom:none}.portal-coordinator .pill{display:inline-block;font-family:var(--font-mono);font-size:11px;border-radius:999px;padding:2px 9px;background:var(--surface-3);color:var(--muted)}.portal-coordinator .pill.level{background:var(--accent-soft);color:var(--accent-ink)}.portal-coordinator .pill.ok{background:var(--ok-soft);color:var(--ok)}.portal-coordinator .pill.bad{background:var(--danger-soft);color:var(--danger)}.portal-coordinator .row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 0;border-top:1px solid var(--border)}.portal-coordinator .row:first-child{border-top:none}.portal-coordinator .name{font-weight:700;letter-spacing:-.01em}.portal-coordinator .sub{font-size:13px;color:var(--muted);margin-top:2px}.portal-coordinator .error{color:var(--danger)}.portal-coordinator .error-box{background:var(--danger-soft);color:var(--danger);border-radius:9px;padding:9px 12px;font-size:14px}.portal-coordinator .row-actions{display:flex;gap:6px;align-items:center}.portal-coordinator .icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--ink-2);cursor:pointer;transition:background .12s,border-color .12s,color .12s}.portal-coordinator .icon-btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--border-strong)}.portal-coordinator .icon-btn.danger{color:var(--danger)}.portal-coordinator .icon-btn.danger:hover:not(:disabled){background:var(--danger-soft);border-color:var(--danger)}.portal-coordinator .icon-btn:disabled{opacity:.5;cursor:default}.portal-coordinator .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#17182a73;display:flex;align-items:flex-start;justify-content:center;padding:48px 16px;overflow-y:auto}.portal-coordinator .modal{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 24px 60px #17182a40;width:100%;max-width:560px;padding:28px 30px 30px}.portal-coordinator .modal-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px}.portal-coordinator .modal-head h3{margin:0}.portal-coordinator .modal-close{display:inline-flex;align-items:center;justify-content:center;background:var(--surface-3);color:var(--ink-2);border:none;width:32px;height:32px;border-radius:8px;padding:0;font-size:20px;line-height:1;cursor:pointer;flex:none}.portal-coordinator .modal-close:hover{background:var(--border-strong)}.portal-coordinator .modal form{display:flex;flex-direction:column;gap:16px}.portal-coordinator .modal form .field-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}.portal-coordinator form label{display:flex;flex-direction:column;gap:6px;align-items:stretch}.portal-coordinator form input:not([type=checkbox]),.portal-coordinator form select,.portal-coordinator form textarea{width:100%}.portal-coordinator .pick-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid var(--border);cursor:pointer}.portal-coordinator .pick-row:last-child{border-bottom:none}.portal-coordinator .pick-row:hover{background:var(--surface-2)}.portal-coordinator .pick-row input[type=checkbox]{width:auto}@media (max-width: 760px){.portal-coordinator .layout{flex-direction:column}.portal-coordinator .sidebar{width:auto;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px;padding:12px 16px}.portal-coordinator .sidebar .brand{padding:0 8px 0 0;width:100%}.portal-coordinator .sidebar .nav-item{width:auto;margin-bottom:0}.portal-coordinator .sidebar .foot{margin:0 0 0 auto;padding:0}.portal-coordinator .content,.portal-coordinator .wrap{padding:20px 16px 48px}.portal-coordinator h1{font-size:22px}.portal-coordinator .card{overflow-x:auto}}.portal-branchcoordinator{min-height:100vh;background:var(--bg);color:var(--ink);font-family:var(--font-sans)}.portal-branchcoordinator{--bg: #eef0fb;--surface: #ffffff;--surface-2: #f3f4fa;--surface-3: #e9eaf2;--ink: #17182a;--ink-2: #2d2d44;--muted: #5c5e78;--faint: #8a8ca6;--border: #e4e5ee;--border-strong: #d5d7e3;--accent: #4f46e5;--accent-strong: #4338ca;--accent-soft: #e7e7fb;--accent-ink: #3730a3;--ok: #15803d;--ok-soft: #e4f4ea;--danger: #b91c1c;--danger-soft: #fbe9e9;--font-sans: "Public Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;font-family:var(--font-sans);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}.portal-branchcoordinator .wrap{max-width:980px;margin:0 auto;padding:26px 22px 60px}.portal-branchcoordinator h1{font-size:26px;font-weight:800;letter-spacing:-.02em;margin:0}.portal-branchcoordinator h2{font-size:18px;font-weight:700;letter-spacing:-.01em}.portal-branchcoordinator h3{margin:0 0 12px;font-size:16px;font-weight:700}.portal-branchcoordinator .muted{color:var(--muted)}.portal-branchcoordinator .code{font-family:var(--font-mono);font-size:12px;color:var(--faint);letter-spacing:.03em}.portal-branchcoordinator .hint{color:var(--faint);font-size:13px}.portal-branchcoordinator .layout{display:flex;min-height:100vh}.portal-branchcoordinator .sidebar{width:240px;flex:none;background:var(--surface);border-right:1px solid var(--border);color:var(--ink);padding:22px 14px;display:flex;flex-direction:column}.portal-branchcoordinator .sidebar .brand{display:flex;align-items:center;gap:9px;padding:4px 10px 20px;color:var(--accent);font-weight:700;font-size:15px}.portal-branchcoordinator .sidebar .brand .who{color:var(--ink)}.portal-branchcoordinator .sidebar .nav-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:transparent;color:var(--muted);border:none;padding:9px 10px;border-radius:8px;margin-bottom:2px;font-size:14px;font-weight:500;cursor:pointer}.portal-branchcoordinator .sidebar .nav-item:hover{background:var(--surface-2);color:var(--ink)}.portal-branchcoordinator .sidebar .nav-item.active{background:var(--accent-soft);color:var(--accent-ink);font-weight:600}.portal-branchcoordinator .sidebar .nav-num{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-branchcoordinator .sidebar .nav-item.active .nav-num,.portal-branchcoordinator .sidebar .nav-item.active .nav-count{color:var(--accent)}.portal-branchcoordinator .sidebar .nav-count{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-branchcoordinator .sidebar .foot{margin-top:auto;padding:16px 10px 0;font-size:13px;color:var(--muted)}.portal-branchcoordinator .sidebar .foot .role{font-family:var(--font-mono);font-size:11px;color:var(--faint)}.portal-branchcoordinator .content{flex:1;padding:32px 36px;max-width:1180px}.portal-branchcoordinator .page-title{font-size:26px}.portal-branchcoordinator .toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px}.portal-branchcoordinator .page-title{font-size:24px;font-weight:800;letter-spacing:-.02em;margin:0 0 4px}.portal-branchcoordinator .page-sub{color:var(--muted);margin:0}.portal-branchcoordinator .eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin:0 0 10px}.portal-branchcoordinator .card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px;margin-bottom:16px;box-shadow:0 1px 2px #14162d0a}.portal-branchcoordinator .card.click{cursor:pointer;transition:border-color .15s,box-shadow .15s}.portal-branchcoordinator .card.click:hover{border-color:var(--border-strong);box-shadow:0 2px 8px #14162d0f}.portal-branchcoordinator .course-card{border-left:4px solid var(--accent)}.portal-branchcoordinator .course-card .cc-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.portal-branchcoordinator .course-card .cc-title{font-weight:700;font-size:17px;letter-spacing:-.01em;margin-bottom:12px}.portal-branchcoordinator .grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;align-items:start}.portal-branchcoordinator .grid-cards>.card{margin-bottom:0}.portal-branchcoordinator .stat-row{display:flex;gap:26px}.portal-branchcoordinator .stat-row .n{font-size:20px;font-weight:800;line-height:1}.portal-branchcoordinator .stat-row .l{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-top:5px}.portal-branchcoordinator label{display:block;font-size:13px;color:var(--muted)}.portal-branchcoordinator input,.portal-branchcoordinator select,.portal-branchcoordinator textarea{width:100%;padding:10px 11px;font-size:14px;font-family:var(--font-sans);border:1px solid var(--border-strong);border-radius:9px;background:var(--surface);color:var(--ink);transition:border-color .15s,box-shadow .15s}.portal-branchcoordinator input::placeholder,.portal-branchcoordinator textarea::placeholder{color:var(--faint)}.portal-branchcoordinator input:focus,.portal-branchcoordinator select:focus,.portal-branchcoordinator textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.portal-branchcoordinator button{padding:10px 18px;font-size:14px;font-weight:600;font-family:var(--font-sans);border:none;border-radius:9px;background:var(--accent);color:#fff;cursor:pointer;transition:background .15s,opacity .15s}.portal-branchcoordinator button:hover:not(:disabled){background:var(--accent-strong)}.portal-branchcoordinator button:disabled{opacity:.5;cursor:default}.portal-branchcoordinator .ghost{background:var(--surface-3);color:var(--ink);border:1px solid var(--border)}.portal-branchcoordinator .ghost:hover:not(:disabled){background:var(--border)}.portal-branchcoordinator .seg{display:flex;gap:4px;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:4px;margin-bottom:16px}.portal-branchcoordinator .seg-btn{flex:1;background:transparent;color:var(--muted);border:none;border-radius:7px;padding:9px;font-size:14px;font-weight:600;cursor:pointer}.portal-branchcoordinator .seg-btn.active{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #14162d14}.portal-branchcoordinator table{width:100%;border-collapse:collapse}.portal-branchcoordinator thead th{text-align:left;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:500;padding:8px 10px;border-bottom:1px solid var(--border)}.portal-branchcoordinator td{text-align:left;padding:11px 10px;border-bottom:1px solid var(--border)}.portal-branchcoordinator tbody tr:last-child td{border-bottom:none}.portal-branchcoordinator .pill{display:inline-block;font-family:var(--font-mono);font-size:11px;border-radius:999px;padding:2px 9px;background:var(--surface-3);color:var(--muted)}.portal-branchcoordinator .pill.level{background:var(--accent-soft);color:var(--accent-ink)}.portal-branchcoordinator .pill.ok{background:var(--ok-soft);color:var(--ok)}.portal-branchcoordinator .pill.bad{background:var(--danger-soft);color:var(--danger)}.portal-branchcoordinator .row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 0;border-top:1px solid var(--border)}.portal-branchcoordinator .row:first-child{border-top:none}.portal-branchcoordinator .name{font-weight:700;letter-spacing:-.01em}.portal-branchcoordinator .sub{font-size:13px;color:var(--muted);margin-top:2px}.portal-branchcoordinator .error{color:var(--danger)}.portal-branchcoordinator .error-box{background:var(--danger-soft);color:var(--danger);border-radius:9px;padding:9px 12px;font-size:14px}.portal-branchcoordinator .row-actions{display:flex;gap:6px;align-items:center}.portal-branchcoordinator .icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--ink-2);cursor:pointer;transition:background .12s,border-color .12s,color .12s}.portal-branchcoordinator .icon-btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--border-strong)}.portal-branchcoordinator .icon-btn.danger{color:var(--danger)}.portal-branchcoordinator .icon-btn.danger:hover:not(:disabled){background:var(--danger-soft);border-color:var(--danger)}.portal-branchcoordinator .icon-btn:disabled{opacity:.5;cursor:default}.portal-branchcoordinator .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#17182a73;display:flex;align-items:flex-start;justify-content:center;padding:48px 16px;overflow-y:auto}.portal-branchcoordinator .modal{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 24px 60px #17182a40;width:100%;max-width:560px;padding:28px 30px 30px}.portal-branchcoordinator .modal-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px}.portal-branchcoordinator .modal-head h3{margin:0}.portal-branchcoordinator .modal-close{display:inline-flex;align-items:center;justify-content:center;background:var(--surface-3);color:var(--ink-2);border:none;width:32px;height:32px;border-radius:8px;padding:0;font-size:20px;line-height:1;cursor:pointer;flex:none}.portal-branchcoordinator .modal-close:hover{background:var(--border-strong)}.portal-branchcoordinator .modal form{display:flex;flex-direction:column;gap:16px}.portal-branchcoordinator .modal form .field-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}.portal-branchcoordinator form label{display:flex;flex-direction:column;gap:6px;align-items:stretch}.portal-branchcoordinator form input:not([type=checkbox]),.portal-branchcoordinator form select,.portal-branchcoordinator form textarea{width:100%}.portal-branchcoordinator .pick-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid var(--border);cursor:pointer}.portal-branchcoordinator .pick-row:last-child{border-bottom:none}.portal-branchcoordinator .pick-row:hover{background:var(--surface-2)}.portal-branchcoordinator .pick-row input[type=checkbox]{width:auto}@media (max-width: 760px){.portal-branchcoordinator .layout{flex-direction:column}.portal-branchcoordinator .sidebar{width:auto;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px;padding:12px 16px}.portal-branchcoordinator .sidebar .brand{padding:0 8px 0 0;width:100%}.portal-branchcoordinator .sidebar .nav-item{width:auto;margin-bottom:0}.portal-branchcoordinator .sidebar .foot{margin:0 0 0 auto;padding:0}.portal-branchcoordinator .content,.portal-branchcoordinator .wrap{padding:20px 16px 48px}.portal-branchcoordinator h1{font-size:22px}.portal-branchcoordinator .card{overflow-x:auto}}.reader-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;flex-direction:column;background:#1c1b22;color:#e9e7ef;user-select:none;-webkit-user-select:none}.reader-bar{display:flex;align-items:center;gap:16px;padding:10px 16px;background:#24232c;border-bottom:1px solid #34333f;flex:none}.reader-title{flex:1;min-width:0;font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reader-nav,.reader-tools{display:flex;align-items:center;gap:8px;flex:none}.reader-page,.reader-zoom{font-family:IBM Plex Mono,ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12px;color:#b7b4c6;min-width:44px;text-align:center}.reader-btn,.reader-close{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:1px solid #3c3b48;border-radius:8px;background:#2e2d38;color:#e9e7ef;font-size:18px;line-height:1;cursor:pointer;transition:background .12s,border-color .12s}.reader-btn:hover:not(:disabled),.reader-close:hover{background:#3a3947;border-color:#4a495a}.reader-btn:disabled{opacity:.4;cursor:default}.reader-close{margin-left:8px;font-size:15px}.reader-stage{flex:1;overflow:auto;display:flex;align-items:flex-start;justify-content:center;padding:24px;background:radial-gradient(1200px 500px at 50% -10%,#2a2933,#1c1b22 60%)}.reader-canvas{display:block;background:#fff;border-radius:4px;box-shadow:0 12px 40px #00000080;max-width:100%}.reader-msg{color:#b7b4c6;margin:48px 0;font-size:15px}@media (max-width: 640px){.reader-bar{flex-wrap:wrap;gap:10px;padding:8px 12px}.reader-title{flex-basis:100%}.reader-stage{padding:12px}}
