:root{--green:#17b077;--green-deep:#0e7a55;--green-ink:#0a5c40;--green-900:#083322;--teal:#17b077;--teal-soft:#e2f6ec;--amber:#fabe2a;--amber-soft:#fef4dc;--danger:#e03263;--danger-soft:#fce7ed;--blue:#4fa6dc;--paper:#f2f6f2;--card:#ffffff;--ink:#0f3a2b;--ink-2:#0a5c40;--text:#1b3428;--muted:#5f7367;--muted-2:#8fa599;--line:#d9e4dd;--line-2:#e9f0eb;--hairline:rgba(15,58,43,.12);--fs-hero:38px;--fs-title:20px;--fs-h3:15px;--fs-body:14px;--fs-small:12px;--fs-mini:11px;--r:12px;--r-sm:8px;--sh:0 1px 2px rgba(8,51,34,.05), 0 8px 24px -16px rgba(8,51,34,.22);--sh-lg:0 24px 48px -24px rgba(8,51,34,.34);--ease:cubic-bezier(.16,1,.3,1);--dur-f:.16s;--dur:.34s;--dur-s:.64s;--nav-w:236px}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:Noto Sans SC,Sora,system-ui,sans-serif;background:var(--paper);color:var(--text);font-size:var(--fs-body);-webkit-font-smoothing:antialiased;line-height:1.55}body:before{content:"";position:fixed;inset:0;z-index:0;pointer-events:none;background-image:radial-gradient(circle,rgba(15,58,43,.055) 1px,transparent 1.4px);background-size:22px 22px}h1,h2,h3,.bn,.tb-title .tt,.fh-title,.mc-v,.cv,.st-t,.ch-t,.tp-t{font-family:Sora,Noto Sans SC,system-ui,sans-serif}.fh-title{font-family:"Noto Serif SC",Sora,serif}.num{font-family:JetBrains Mono,Noto Sans Mono,monospace;font-variant-numeric:tabular-nums;letter-spacing:-.02em}::selection{background:var(--teal);color:#fff}button{font-family:inherit}:focus-visible{outline:2px solid var(--teal);outline-offset:2px;border-radius:4px}.r{text-align:right}.b{font-weight:700}.mini{font-size:var(--fs-mini);color:var(--muted)}.teal{color:var(--teal)}.danger{color:var(--danger)}.amber{color:#8a6307}.mt4{margin-top:4px}.mt6{margin-top:6px}.mt8{margin-top:8px}.mt16{margin-top:16px}.mb16{margin-bottom:16px}.btns{display:flex;gap:9px;align-items:center;flex-wrap:wrap;max-width:100%}.tbl-scroll{overflow-x:auto}.emp{font-weight:600;color:var(--ink)}.emp.link{cursor:pointer;border-bottom:1px dashed var(--muted-2);transition:color var(--dur-f)}.emp.link:hover{color:var(--teal);border-color:var(--teal)}@keyframes rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:no-preference){.content>*{animation:rise var(--dur) var(--ease) both}.content>*:nth-child(1){animation-delay:60ms}.content>*:nth-child(2){animation-delay:.14s}.content>*:nth-child(3){animation-delay:.22s}.content>*:nth-child(4){animation-delay:.3s}.content>*:nth-child(5){animation-delay:.38s}.content>*:nth-child(n+6){animation-delay:.44s}}.app{display:flex;min-height:100vh}.sidebar{width:var(--nav-w);flex:0 0 var(--nav-w);background:radial-gradient(28rem 18rem at 120% -10%,rgba(250,190,42,.16),transparent 55%),linear-gradient(180deg,#15a96f,#0a5c40);color:#d9efe5;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;z-index:40;box-shadow:inset -1px 0 #ffffff14}.brand{padding:22px 20px 18px;border-bottom:1px solid rgba(255,255,255,.12);display:flex;align-items:center;gap:11px}.brand .mark{width:38px;height:38px;border-radius:11px;background:#ffffff29;display:grid;place-items:center;font-family:Sora;font-weight:800;color:#fff;font-size:17px;box-shadow:inset 0 0 0 1px #ffffff38}.brand-logo{height:34px;max-width:112px;object-fit:contain;background:#fff;border-radius:11px;padding:5px 10px;box-shadow:0 8px 18px -8px #062a1d80}.brand .bn{font-weight:700;color:#fff;font-size:15px;letter-spacing:.02em}.brand .bs{font-size:11px;color:#ffffff9e;margin-top:1px}.nav-sec{padding:8px 0;overflow-y:auto;flex:1}.nav-label{font-size:10.5px;letter-spacing:.16em;color:#ffffff73;padding:14px 20px 7px;font-weight:700;text-transform:uppercase}.nav-item{display:flex;align-items:center;gap:11px;padding:10px 16px;margin:2px 10px;border-radius:8px;cursor:pointer;font-size:13.5px;color:#ffffffbd;transition:background var(--dur-f),color var(--dur-f),transform var(--dur-f);position:relative}.nav-item:hover{background:#ffffff1a;color:#fff}.nav-item:active{transform:scale(.985)}.nav-item.active{background:#ffffff29;color:#fff;font-weight:600;box-shadow:inset 0 0 0 1px #ffffff24}.nav-item.active:before{content:"";position:absolute;left:-10px;top:50%;transform:translateY(-50%);width:3px;height:20px;background:var(--amber);border-radius:0 3px 3px 0}.nav-item .ic{width:19px;height:19px;flex:0 0 19px;opacity:.9}.side-foot{padding:14px 18px;border-top:1px solid rgba(255,255,255,.12);font-size:11px;color:#ffffff8c}.side-foot .dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#5be3a6;margin-right:6px;box-shadow:0 0 0 3px #5be3a62e}.main{flex:1;min-width:0;display:flex;flex-direction:column;position:relative;z-index:1}.topbar{background:#ffffffdb;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);padding:12px 24px;display:flex;align-items:center;gap:14px;position:sticky;top:0;z-index:30}.tb-title{font-family:Sora;font-weight:700;font-size:16px;color:var(--ink);white-space:nowrap;letter-spacing:.01em}.tb-title small{display:block;font-family:Noto Sans SC;font-weight:400;font-size:11.5px;color:var(--muted);margin-top:1px}.tb-spacer{flex:1}.campus-wrap{position:relative}.campus-card{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:6px 8px 6px 12px;cursor:pointer;transition:border-color var(--dur-f),box-shadow var(--dur-f);min-height:44px}.campus-card:hover{border-color:var(--teal);box-shadow:0 0 0 3px #17b0771a}.campus-card .cc-ico{width:30px;height:30px;border-radius:8px;background:var(--teal-soft);color:var(--teal);display:grid;place-items:center;flex:0 0 30px}.campus-card .cc-l{font-size:10.5px;color:var(--muted);letter-spacing:.06em;font-weight:600}.campus-card .cc-v{font-family:Sora;font-weight:700;font-size:13.5px;color:var(--ink);display:flex;align-items:center;gap:5px}.campus-card .cc-v svg{width:12px;height:12px;color:var(--muted)}.campus-menu{position:absolute;top:calc(100% + 6px);right:0;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh-lg);z-index:60;overflow:hidden;min-width:190px;animation:rise .16s var(--ease)}.menu-backdrop{position:fixed;inset:0;z-index:55}.cm-i{padding:9px 15px;font-size:13px;cursor:pointer;color:var(--text);border-bottom:1px solid var(--line-2);min-height:44px;display:flex;align-items:center}.cm-i:last-child{border-bottom:none}.cm-i:hover{background:var(--teal-soft);color:var(--teal)}.cm-i.on{color:var(--teal);font-weight:700}.month-pick{display:flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 12px;border-left:3px solid var(--amber)}.month-pick .mp-l{font-size:11px;color:var(--muted);font-weight:600}.month-pick .mp-v{font-family:JetBrains Mono;font-weight:700;font-size:13px;color:var(--ink)}.avatar{width:36px;height:36px;border-radius:10px;background:linear-gradient(135deg,var(--ink),var(--ink-2));color:#fff;display:grid;place-items:center;font-family:Sora;font-weight:700;font-size:13px;cursor:pointer}.content{padding:22px 24px 60px;flex:1;max-width:1500px;width:100%;position:relative;z-index:1}@keyframes fade{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);position:relative}.card:before{content:"";position:absolute;left:16px;right:16px;top:0;height:2px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.pad{padding:18px}.ch-head{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:14px;gap:10px;padding-top:4px;flex-wrap:wrap}.ch-t{font-family:Sora;font-weight:700;font-size:var(--fs-h3);color:var(--ink);letter-spacing:.01em}.ch-s{font-size:11.5px;color:var(--muted);margin-top:2px}.btn{font-size:13px;font-weight:600;padding:9px 15px;border-radius:9px;border:1px solid var(--line);background:#fff;color:var(--ink);cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:border-color var(--dur-f),background var(--dur-f),transform var(--dur-f);min-height:36px;letter-spacing:.02em}.btn:hover{border-color:var(--muted-2);background:var(--paper)}.btn:active{transform:scale(.97)}.btn.primary{background:var(--teal);border-color:var(--teal);color:#fff;box-shadow:0 8px 16px -10px #17b077cc}.btn.primary:hover{background:#12966a}.btn.dark{background:var(--ink);border-color:var(--ink);color:#fff}.btn.dark:hover{background:var(--ink-2)}.btn svg{width:15px;height:15px}.pill{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}.pill.teal{background:var(--teal-soft);color:var(--teal)}.pill.amber{background:var(--amber-soft);color:#8a6307}.pill.danger{background:var(--danger-soft);color:var(--danger)}.pill.ink{background:var(--paper);color:var(--muted);border:1px solid var(--line)}.stamp{display:inline-flex;align-items:center;gap:6px;border:2px dashed currentColor;border-radius:6px;padding:5px 12px;font-family:JetBrains Mono;font-weight:700;font-size:11.5px;letter-spacing:.12em;transform:rotate(-4deg);color:#0e7a55;background:#e2f6ece6}table{width:100%;border-collapse:collapse;font-size:13px}thead th{text-align:left;font-size:11px;font-weight:700;color:var(--muted);letter-spacing:.06em;padding:11px 14px;border-bottom:1px solid var(--line);background:var(--paper);white-space:nowrap;font-family:JetBrains Mono,Noto Sans SC,monospace}tbody td{padding:12px 14px;border-bottom:1px solid var(--line-2);vertical-align:middle}tbody tr{transition:background var(--dur-f)}tbody tr:hover{background:#f7fbf8}tbody tr:last-child td{border-bottom:none}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px}.select,.input{font-family:inherit;font-size:13px;padding:9px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);cursor:pointer;outline:none;min-height:36px}.select:hover,.input:hover{border-color:var(--muted-2)}.input.big{width:100%;font-size:16px;padding:11px;font-family:JetBrains Mono}.input:focus,.select:focus{border-color:var(--teal);box-shadow:0 0 0 3px #17b0771f}.filterbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.filter-lbl{font-size:11.5px;color:var(--muted);font-weight:600}.kpi-row{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-bottom:16px}.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px 16px 14px;box-shadow:var(--sh);position:relative;overflow:hidden;transition:transform var(--dur-f),box-shadow var(--dur-f)}.kpi:hover{transform:translateY(-2px);box-shadow:var(--sh-lg)}.kpi:after{content:"";position:absolute;right:-30px;top:-30px;width:90px;height:90px;border-radius:50%;background:var(--teal-soft);opacity:.55}.kpi.k-amber:after{background:var(--amber-soft)}.kpi.k-ink:after{background:#eef2ee}.kpi.k-danger:after{background:var(--danger-soft)}.kpi-in{position:relative;z-index:1}.kpi .kl{font-size:11.5px;color:var(--muted);font-weight:600;margin-bottom:8px;letter-spacing:.04em}.kpi .kv{font-family:JetBrains Mono;font-weight:700;font-size:29px;color:var(--ink);line-height:1;border-bottom:1px dashed var(--line);padding-bottom:8px;display:inline-block}.kpi .kv small{font-size:14px;font-weight:500;color:var(--muted-2);margin-left:2px}.kpi .kd{margin-top:9px;font-size:11.5px;display:flex;align-items:center;gap:4px;font-weight:600}.kpi .kd.up{color:var(--teal)}.kpi .kd.down{color:var(--danger)}.kd-ref{color:var(--muted-2);font-weight:500}.alert-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;margin-bottom:9px;background:#fff}.alert-item:last-child{margin-bottom:0}.alert-item .ai-ico{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;flex:0 0 34px;font-weight:800}.ai-ico.ai-amber{background:var(--amber-soft);color:#8a6307}.ai-ico.ai-danger{background:var(--danger-soft);color:var(--danger)}.ai-ico.ai-ink{background:#eef2ee;color:var(--muted)}.ai-ico.ai-teal{background:var(--teal-soft);color:var(--teal)}.alert-item .ai-t{font-weight:600;font-size:13px;color:var(--ink)}.alert-item .ai-s{font-size:11.5px;color:var(--muted);margin-top:1px}.alert-item .ai-sp{flex:1}.bar-cell{display:flex;align-items:center;gap:9px;min-width:120px}.bar-track{flex:1;height:6px;background:var(--line-2);border-radius:4px;overflow:hidden}.bar-fill{height:100%;border-radius:4px;background:var(--teal);transition:width var(--dur-s) var(--ease)}.rank-n{width:24px;height:24px;border-radius:7px;display:grid;place-items:center;font-family:JetBrains Mono;font-weight:700;font-size:12px;background:var(--paper);color:var(--muted)}.rank-n.gold{background:linear-gradient(135deg,#ffd777,#fabe2a);color:#5c4305}.rank-n.silver{background:linear-gradient(135deg,#dfe8e3,#b7c9bf);color:#33463c}.rank-n.bronze{background:linear-gradient(135deg,#e8b98d,#c99060);color:#5a3a18}#qw-toast{position:fixed;bottom:26px;left:50%;transform:translate(-50%) translateY(20px);background:var(--ink);color:#fff;padding:12px 22px;border-radius:10px;font-size:13px;font-weight:500;box-shadow:var(--sh-lg);opacity:0;transition:.28s var(--ease);z-index:200;pointer-events:none}#qw-toast.show{opacity:1;transform:translate(-50%) translateY(0)}@media(max-width:1200px){.kpi-row{grid-template-columns:repeat(3,1fr)}}@media(max-width:900px){.grid-2,.grid-3{grid-template-columns:1fr}.sidebar{position:fixed;left:-260px}.content{padding:16px}}.stepper{display:flex;margin-bottom:18px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);overflow:hidden}.st{flex:1;padding:15px 18px;display:flex;align-items:center;gap:12px;cursor:pointer;position:relative;transition:background var(--dur-f);min-height:56px}.st:not(:last-child):after{content:"";position:absolute;right:-1px;top:14px;bottom:14px;border-left:1px dashed var(--line)}.st .st-n{width:30px;height:30px;border-radius:8px;background:var(--paper);color:var(--muted);display:grid;place-items:center;font-family:JetBrains Mono;font-weight:700;font-size:13px;flex:0 0 30px;border:1px solid var(--line);transition:.18s}.st .st-t{font-weight:600;font-size:13.5px;color:var(--muted)}.st .st-s{font-size:11px;color:var(--muted-2);margin-top:1px}.st.active{background:linear-gradient(90deg,var(--teal-soft),transparent)}.st.active .st-n{background:var(--teal);border-color:var(--teal);color:#fff;box-shadow:0 0 0 4px #17b07729}.st.active .st-t{color:var(--ink)}.st.done .st-n{background:var(--ink);border-color:var(--ink);color:#fff}.st.done .st-t{color:var(--text)}.step-panel{display:none}.step-panel.active{display:block;animation:fade var(--dur) var(--ease)}.step-nav{display:flex;justify-content:space-between;align-items:center;margin-top:6px}.grid-import{display:grid;grid-template-columns:1.1fr 1fr;gap:16px;margin-bottom:16px}.imp-zone{border:1.5px dashed var(--line);border-radius:10px;padding:15px;margin-bottom:11px;display:flex;align-items:center;gap:13px;cursor:pointer;transition:border-color var(--dur-f),background var(--dur-f);background:#fbfcfb;min-height:56px}.imp-zone:hover{border-color:var(--teal);background:var(--teal-soft)}.imp-zone.loaded{border-style:solid;border-color:var(--teal);background:var(--teal-soft)}.imp-zone.loaded.warn{border-color:var(--amber);background:var(--amber-soft)}.imp-zone.dashed{border-style:dashed;background:#fbfcfb}.imp-zone .iz-ico{width:38px;height:38px;border-radius:9px;background:#fff;border:1px solid var(--line);display:grid;place-items:center;flex:0 0 38px;font-size:18px}.imp-zone .iz-t{font-weight:600;font-size:13.5px;color:var(--ink)}.imp-zone .iz-s{font-size:11.5px;color:var(--muted);margin-top:1px}.imp-zone .iz-r{margin-left:auto;text-align:right;flex:0 0 auto}.src-label{display:flex;align-items:center;gap:8px;font-size:11.5px;font-weight:700;color:var(--ink);margin-bottom:10px;letter-spacing:.05em}.src-ico{width:8px;height:8px;border-radius:50%}.src-ico.auto{background:var(--teal);box-shadow:0 0 0 3px #17b07724}.src-ico.manual{background:var(--amber);box-shadow:0 0 0 3px #fabe2a2e}.api-chip{font-family:JetBrains Mono;font-size:9.5px;background:var(--ink);color:#cfe6da;padding:1px 6px;border-radius:5px;margin-left:6px;font-weight:600;vertical-align:middle}.drop-hint{border:1.5px dashed var(--line);border-radius:10px;padding:14px;text-align:center;font-size:12px;color:var(--muted);background:#fbfcfb;transition:border-color var(--dur-f),background var(--dur-f);cursor:pointer;min-height:44px}.drop-hint:hover{border-color:var(--amber);background:var(--amber-soft);color:#8a6307}.drop-hint span{color:var(--teal);font-weight:600;text-decoration:underline}.snapshot-note{display:flex;gap:12px;align-items:flex-start;background:#fef7e6;border:1px dashed #e3c87f;border-radius:10px;padding:13px 16px;margin-bottom:16px;font-size:12.5px;color:#6b5a3a;line-height:1.65}.snapshot-note b{color:#8a6307}.sn-ico{font-size:19px;line-height:1}.mono-log{background:var(--green-900);border-radius:10px;padding:14px;height:298px;overflow-y:auto;font-family:JetBrains Mono,monospace;font-size:11.5px;line-height:1.9;color:#93b3a5}.mono-log.tall{height:330px}.mono-log .ok{color:#3ed598}.mono-log .warn{color:#fabe2a}.mono-log .hl{color:#4fa6dc}.mono-log .dim{color:#587d6c}.mono-log .log-hr{display:block;height:1px;background:#1d5240;margin:5px 0}.engine-bar{display:flex;align-items:center;gap:14px;background:linear-gradient(90deg,var(--teal-soft),#f2f9f5);border:1px solid #cde8da;border-radius:10px;padding:12px 16px;margin-bottom:16px;flex-wrap:wrap}.engine-bar .eb-i{display:flex;align-items:baseline;gap:6px;font-size:12px;color:var(--muted)}.engine-bar .eb-v{font-family:JetBrains Mono;font-weight:700;font-size:17px;color:var(--ink)}.engine-bar .eb-sep{width:1px;height:24px;background:#cde8da}.engine-bar .eb-ok{color:var(--teal);font-weight:600;font-size:12px}tr.bd-row{background:#f8fbf9}tr.bd-row td{padding:0;border-bottom:1px solid var(--line)}.bd-box{padding:12px 16px 14px 54px}.bd-title{font-size:11px;color:var(--teal);font-weight:700;letter-spacing:.06em;margin-bottom:9px}.bd-steps{display:flex;flex-direction:column;gap:7px}.bd-step{display:flex;align-items:center;gap:10px;font-size:12.5px;padding:8px 12px;background:#fff;border:1px solid var(--line);border-radius:8px;border-left:3px solid var(--line)}.bd-step .bs-op{color:var(--muted);font-size:11px;min-width:150px}.bd-step .bs-v{font-family:JetBrains Mono;font-weight:700;color:var(--ink);margin-left:auto}.bd-step .bs-v.lg{font-size:15px}.bd-step.hit{border-color:#cde8da;border-left-color:var(--teal);background:var(--teal-soft)}.bd-step.total{border-color:var(--ink);border-left-color:var(--ink);background:#f4f8f5}.bd-step.total .bs-op{font-weight:700;color:var(--ink);font-size:12.5px}.final-hero{background:linear-gradient(120deg,#17b077,#0a5c40);border-radius:var(--r);padding:26px 28px;color:#fff;margin-bottom:16px;position:relative;overflow:hidden;box-shadow:var(--sh-lg)}.final-hero:after{content:"";position:absolute;right:-60px;bottom:-70px;width:280px;height:280px;border-radius:50%;background:radial-gradient(circle,rgba(250,190,42,.4),transparent 70%)}.fh-badge{display:inline-flex;align-items:center;gap:6px;background:#ffffff29;padding:5px 12px;border-radius:6px;font-size:11.5px;font-weight:600;margin-bottom:14px}.fh-title{font-family:"Noto Serif SC",Sora,serif;font-size:22px;font-weight:700;position:relative;z-index:1;letter-spacing:.02em}.fh-sub{font-size:13px;color:#ffffffb8;margin-top:5px;position:relative;z-index:1}.fh-stats{display:flex;gap:34px;margin-top:20px;position:relative;z-index:1;flex-wrap:wrap}.fh-stat .fv{font-family:JetBrains Mono;font-size:26px;font-weight:700}.fh-stat .fv .w{font-size:15px}.fh-stat .fl{font-size:11.5px;color:#ffffffa8;margin-top:2px}.mini-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:18px;box-shadow:var(--sh)}.mini-card .mc-t{font-size:12px;color:var(--muted);font-weight:600;margin-bottom:10px}.mini-card .mc-v{font-family:JetBrains Mono;font-size:23px;font-weight:700;color:var(--ink)}.mini-card .mc-v.sm{font-size:15px}.eff-tabs{display:flex;gap:8px;margin-bottom:16px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:6px;box-shadow:var(--sh);width:fit-content}.eff-tab{padding:10px 20px;border-radius:8px;font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;transition:background var(--dur-f),color var(--dur-f);min-height:40px;display:flex;align-items:center}.eff-tab:hover{color:var(--ink)}.eff-tab.active{background:var(--teal);color:#fff;box-shadow:0 6px 14px -8px #17b077cc}.eff-panel{display:none}.eff-panel.active{display:block;animation:fade var(--dur) var(--ease)}.conn-hero{background:linear-gradient(120deg,#0e7a55,#17b077 70%,#2ec98f);border-radius:var(--r);padding:26px 28px;color:#fff;margin-bottom:16px;position:relative;overflow:hidden;box-shadow:var(--sh-lg);display:flex;justify-content:space-between;align-items:center;gap:24px;flex-wrap:wrap}.conn-hero:after{content:"";position:absolute;right:-70px;top:-80px;width:300px;height:300px;border-radius:50%;background:radial-gradient(circle,rgba(79,166,220,.3),transparent 70%)}.conn-hero .fh-title{font-size:22px}.conn-stats{display:flex;gap:30px;position:relative;z-index:1}.conn-stat{text-align:center}.conn-stat .cv{font-family:JetBrains Mono;font-size:26px;font-weight:700}.conn-stat .cl{font-size:11px;color:#ffffffa8;margin-top:2px}.conn-card{display:flex;align-items:center;gap:14px;padding:15px;border:1px solid var(--line);border-radius:10px;margin-bottom:11px;transition:border-color var(--dur-f),box-shadow var(--dur-f);background:#fff}.conn-card:hover{border-color:var(--teal);box-shadow:var(--sh)}.conn-card:last-child{margin-bottom:0}.conn-ico{width:44px;height:44px;border-radius:10px;display:grid;place-items:center;font-size:21px;flex:0 0 44px;background:var(--teal-soft)}.conn-main{flex:1;min-width:0}.conn-name{font-weight:700;font-size:14px;color:var(--ink);display:flex;align-items:center;gap:8px;flex-wrap:wrap}.conn-desc{font-size:11.5px;color:var(--muted);margin-top:2px}.conn-meta{display:flex;gap:20px;margin-top:8px;flex-wrap:wrap}.conn-meta span{font-size:11px;color:var(--muted-2)}.conn-meta b{color:var(--ink);font-family:JetBrains Mono;font-weight:700}.conn-right{text-align:right;flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:8px}.conn-status{display:flex;align-items:center;gap:7px}.conn-status .stx{font-size:12.5px;font-weight:600}.stx.okc{color:var(--teal)}.stx.warnc{color:#8a6307}.stx.offc{color:var(--muted)}.status-dot{width:7px;height:7px;border-radius:50%;flex:0 0 7px}.status-dot.live{background:#17b077;box-shadow:0 0 0 3px #17b0772e;animation:pulse 2s infinite}.status-dot.warn{background:var(--amber);box-shadow:0 0 0 3px #fabe2a2e}.status-dot.off{background:var(--muted-2)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.map-badge{font-family:JetBrains Mono;font-size:10px;padding:2px 7px;border-radius:5px;font-weight:600;background:var(--ink);color:#cfe6da}.map-badge.auto{background:var(--teal);color:#fff}.map-badge.manual{background:var(--amber);color:#5c4305}.eng-layout{grid-template-columns:300px 1fr}.eng-layout>.card{align-self:start}.eng-layout>div{min-width:0}.tpl{padding:12px 14px;border:1px solid var(--line);border-radius:10px;margin-bottom:9px;cursor:pointer;transition:border-color var(--dur-f),background var(--dur-f);background:#fff}.tpl:hover{border-color:var(--muted-2)}.tpl.active{border-color:var(--teal);background:var(--teal-soft);box-shadow:0 0 0 3px #17b0771a}.tpl .tp-t{font-weight:700;font-size:13px;color:var(--ink);display:flex;align-items:center;gap:6px}.tpl .tp-s{font-size:11px;color:var(--muted);margin-top:3px}.tpl .tp-dot{width:7px;height:7px;border-radius:50%;background:var(--teal);flex:0 0 7px}.rule-box{border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-bottom:14px}.rule-head{display:flex;align-items:center;gap:9px;padding:11px 14px;background:var(--paper);border-bottom:1px solid var(--line);font-size:12.5px;font-weight:700;color:var(--ink)}.rule-head .rh-badge{font-size:10px;font-family:JetBrains Mono;background:var(--ink);color:#fff;padding:2px 8px;border-radius:20px;font-weight:600;letter-spacing:.08em}.rule-note{margin-left:auto;font-size:11px;color:var(--muted);font-weight:500}.rule-row{display:flex;align-items:center;gap:11px;padding:11px 14px;border-bottom:1px solid var(--line-2);font-size:13px;flex-wrap:wrap}.rule-row:last-child{border-bottom:none}.rule-row .cond{color:var(--muted)}.rule-inp{font-family:JetBrains Mono;font-weight:700;font-size:13.5px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;width:96px;text-align:right;color:var(--ink)}.rule-inp:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 3px #17b0771f}.rule-inp.rate{width:74px;color:var(--teal)}.add-tier{padding:9px 14px;font-size:12.5px;color:var(--teal);font-weight:600;cursor:pointer;background:#fbfcfb}.add-tier:hover{background:var(--teal-soft)}.sim-wrap{display:grid;grid-template-columns:1fr 200px;gap:20px;align-items:center}.sim-lbl{font-size:11.5px;color:var(--muted);font-weight:600;display:block;margin-bottom:7px}.sim-presets{display:flex;gap:7px;margin-top:12px;flex-wrap:wrap}.sim-presets span{font-size:11.5px;font-family:JetBrains Mono;padding:5px 11px;border:1px solid var(--line);border-radius:20px;cursor:pointer;color:var(--muted);transition:border-color var(--dur-f),color var(--dur-f)}.sim-presets span:hover{border-color:var(--teal);color:var(--teal);background:var(--teal-soft)}.sim-out{background:linear-gradient(120deg,#17b077,#0a5c40);border-radius:10px;padding:18px;color:#fff;text-align:center;position:relative;overflow:hidden}.sim-out:after{content:"";position:absolute;right:-40px;bottom:-50px;width:160px;height:160px;border-radius:50%;background:radial-gradient(circle,rgba(250,190,42,.35),transparent 70%)}.sim-out-l{font-size:11.5px;color:#ffffffb8}.sim-out-v{font-family:JetBrains Mono;font-size:30px;font-weight:700;margin:6px 0;color:#fff;position:relative;z-index:1}.sim-out-s{font-size:11px;color:#ffffffb8;line-height:1.6}@media(max-width:900px){.sim-wrap,.eng-layout,.grid-import{grid-template-columns:1fr}.conn-hero{flex-direction:column;align-items:flex-start}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.content>*{animation:none!important}}.login-wrap{display:flex;min-height:100vh;position:relative;z-index:1}.login-side{flex:0 0 44%;background:radial-gradient(28rem 18rem at 110% -10%,rgba(250,190,42,.2),transparent 55%),linear-gradient(160deg,#15a96f,#0a5c40);color:#fff;display:flex;flex-direction:column;justify-content:center;padding:56px 52px;gap:14px}.login-logo{height:64px;object-fit:contain;background:#fff;border-radius:14px;padding:10px 16px;align-self:flex-start;box-shadow:0 12px 28px -12px #062a1d8c}.login-bn{font-family:"Noto Serif SC",Sora,serif;font-size:30px;font-weight:700;letter-spacing:.03em;margin-top:18px}.login-bs{font-size:14px;color:#ffffffb8}.login-flow{display:flex;flex-direction:column;gap:10px;margin-top:28px}.lf-step{display:flex;align-items:center;gap:10px;background:#ffffff1f;border:1px solid rgba(255,255,255,.18);border-radius:10px;padding:11px 16px;font-size:13.5px;font-weight:600;width:fit-content}.lf-step .lf-n{width:22px;height:22px;border-radius:6px;background:var(--amber);color:#5c4305;display:grid;place-items:center;font-family:JetBrains Mono;font-weight:700;font-size:12px}.lf-arrow{color:#ffffff80;padding-left:34px;font-size:12px}.login-main{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;background:var(--paper)}.login-card{width:400px;max-width:92vw;background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh-lg);padding:28px;position:relative}.login-card:before{content:"";position:absolute;left:24px;right:24px;top:0;height:2px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.lc-t{font-family:Sora;font-weight:800;font-size:22px;color:var(--ink)}.lc-s{font-size:12px;color:var(--muted);margin:4px 0 16px}.lc-roles{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.lc-role{text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 14px;background:#fff;cursor:pointer;transition:border-color var(--dur-f),background var(--dur-f);min-height:52px}.lc-role:hover{border-color:var(--teal)}.lc-role.on{border-color:var(--teal);background:var(--teal-soft);box-shadow:0 0 0 3px #17b0771f}.lr-name{font-weight:700;font-size:13.5px;color:var(--ink)}.lr-duty{font-size:11px;color:var(--muted);margin-top:2px}.lc-lbl{display:block;font-size:12px;font-weight:600;color:var(--muted);margin:10px 0 6px}.lc-err{margin-top:10px;font-size:12px;color:var(--danger);background:var(--danger-soft);border-radius:8px;padding:8px 12px}.lc-btn{width:100%;justify-content:center;margin-top:18px;min-height:44px;font-size:14px}.login-foot{margin-top:18px;font-size:11px;color:var(--muted-2)}.period-menu{min-width:300px;padding:14px;animation:rise .16s var(--ease)}.pp-tabs{display:flex;gap:6px;background:var(--paper);border-radius:8px;padding:4px;margin-bottom:12px}.pp-tab{flex:1;border:none;background:transparent;font-size:12.5px;font-weight:600;color:var(--muted);padding:7px 0;border-radius:6px;cursor:pointer;transition:background var(--dur-f),color var(--dur-f);min-height:32px}.pp-tab.on{background:#fff;color:var(--teal);box-shadow:var(--sh)}.pp-years{display:flex;gap:8px;margin-bottom:12px}.pp-y{font-family:JetBrains Mono;font-weight:700;font-size:13px;padding:4px 12px;border:1px solid var(--line);border-radius:16px;cursor:pointer;color:var(--muted);min-height:32px;display:inline-flex;align-items:center}.pp-y.on{border-color:var(--teal);color:var(--teal);background:var(--teal-soft)}.pp-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.pp-grid.q{grid-template-columns:repeat(4,1fr)}.pp-m{border:1px solid var(--line);background:#fff;border-radius:8px;font-size:12.5px;font-weight:600;color:var(--ink);padding:9px 0;cursor:pointer;transition:border-color var(--dur-f),background var(--dur-f);min-height:38px}.pp-m:hover{border-color:var(--teal)}.pp-m.on{border-color:var(--teal);background:var(--teal);color:#fff}.pp-foot{display:flex;justify-content:space-between;align-items:center;margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}.pp-year-confirm{display:flex;justify-content:space-between;align-items:center;padding:6px 0 2px}.pp-year-confirm .btn{min-height:36px}.wf-bar{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.wf-flow{display:flex;align-items:center;gap:8px}.wf-node{font-size:12.5px;font-weight:600;color:var(--muted);border:1px solid var(--line);border-radius:18px;padding:6px 14px;white-space:nowrap}.wf-node.on{border-color:var(--amber);background:var(--amber-soft);color:#8a6307}.wf-node.done{border-color:var(--teal);background:var(--teal-soft);color:var(--teal)}.wf-link{width:22px;border-top:2px dashed var(--line)}.wf-acts{margin-left:auto;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.user-menu{min-width:230px;animation:rise .16s var(--ease)}.um-head{padding:12px 15px;border-bottom:1px solid var(--line);background:var(--paper)}.um-name{font-weight:700;font-size:14px;color:var(--ink)}.um-role{font-size:11px;color:var(--muted);margin-top:3px}.scope-bar{display:flex;align-items:center;gap:12px;padding:12px 0 4px;border-top:1px dashed var(--line);margin-top:6px;flex-wrap:wrap}.sb-lbl{font-size:11.5px;font-weight:700;color:var(--muted);letter-spacing:.12em}.scope-chips{display:flex;gap:8px;flex-wrap:wrap}.scope-chip{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--muted);border:1px solid var(--line);border-radius:16px;padding:6px 13px;cursor:pointer;background:#fff;transition:border-color var(--dur-f),color var(--dur-f),background var(--dur-f);min-height:32px}.scope-chip:hover{border-color:var(--teal)}.scope-chip.active{border-color:var(--teal);background:var(--teal-soft);color:var(--teal)}.sc-dot{width:7px;height:7px;border-radius:50%;background:var(--teal);display:inline-block}.sc-dot.custom{background:var(--amber)}.sc-dot.hq{background:var(--teal)}.ovr-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;background:var(--paper);border:1px solid var(--line);border-left:3px solid var(--teal);border-radius:10px;padding:11px 14px;margin:10px 0 14px;font-size:12.5px;color:var(--muted);line-height:1.7}.ovr-bar b{color:var(--ink)}.rule-lock{margin-left:auto;font-size:11px;color:var(--muted-2);font-weight:600}.diff-tag{font-size:10.5px;font-weight:700;color:#8a6307;background:var(--amber-soft);border:1px dashed var(--amber);border-radius:10px;padding:2px 8px;white-space:nowrap}.diff-tag.inline{display:inline-block}.rule-inp.diff{border-color:var(--amber);background:#fffdf5;color:#8a6307}.rule-inp:disabled{background:var(--paper);color:var(--muted-2);cursor:not-allowed}.tp-scope{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px}.ovr-chip{color:#8a6307;background:var(--amber-soft);border-radius:9px;padding:1px 7px}.dt-wrap{display:grid;grid-template-columns:1fr 1fr;gap:18px}.dt-conf .input{width:100%;margin-top:2px}.dt-conf .sim-lbl{display:block;margin-top:12px}.dt-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px;box-shadow:var(--sh);max-width:360px}.dt-card-t{font-weight:800;font-size:13.5px;color:var(--ink);padding-bottom:10px;border-bottom:1px dashed var(--line);margin-bottom:10px}.dt-card-r{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;color:var(--muted);padding:5px 0}.dt-card-r b{color:var(--ink);font-size:13.5px}.dt-card-s{font-size:11px;color:var(--muted-2);line-height:1.8;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}@media(max-width:960px){.dt-wrap{grid-template-columns:1fr}}.hkpi-strip{display:grid;grid-template-columns:repeat(5,1fr);gap:14px}.hkpi{background:var(--card);border:1px solid var(--line);border-top:3px solid var(--ink);border-radius:var(--r);padding:16px 18px;box-shadow:var(--sh)}.hkpi-v{font-family:JetBrains Mono;font-size:31px;font-weight:700;color:var(--ink);letter-spacing:-.02em}.hkpi-v.teal{color:var(--teal)}.hkpi-v.amber{color:#b9860b}.hkpi-v.danger{color:var(--danger)}.hkpi-u{font-size:13px;font-weight:600;color:var(--muted-2);margin-left:5px}.hkpi-l{font-size:12.5px;font-weight:700;color:var(--text);margin-top:7px}.hkpi-d{font-size:11px;color:var(--muted-2);margin-top:3px;line-height:1.6}@media(max-width:1100px){.hkpi-strip{grid-template-columns:repeat(2,1fr)}}.param-row{padding:13px 0;border-bottom:1px dashed var(--line-2)}.param-row:last-child{border-bottom:none}.pr-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.pr-name{font-size:12.5px;font-weight:700;color:var(--text)}.pr-val{font-family:JetBrains Mono;font-size:17px;font-weight:700;color:var(--teal)}.param-row input[type=range]{width:100%;margin:10px 0 6px;accent-color:var(--teal);height:22px}.pr-foot{display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap}.pr-foot .mini{color:var(--muted-2)}.algo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}@media(max-width:1100px){.algo-grid{grid-template-columns:1fr 1fr}}.algo-card{background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:14px 16px}.ac-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}.ac-role{font-size:14px;font-weight:800;color:var(--ink)}.ac-formula{font-family:JetBrains Mono;font-size:11.5px;font-weight:700;color:var(--teal);background:var(--teal-soft);border-radius:7px;padding:8px 10px;line-height:1.7}.ac-line{display:flex;justify-content:space-between;gap:10px;font-size:11.5px;color:var(--muted);padding:5px 0;border-bottom:1px dashed var(--line-2)}.ac-line b{color:var(--ink);font-weight:700;text-align:right}.ac-note{font-size:11px;color:var(--muted);line-height:1.8;margin-top:8px}.ac-trigger{font-size:11px;color:#8a6307;background:var(--amber-soft);border-radius:7px;padding:7px 10px;margin-top:8px;line-height:1.7}.bar-fill.warn{background:var(--amber)}.detail-tbl th{padding:8px 6px;vertical-align:top}.th-f{position:relative;display:inline-flex}.th-fbtn{display:inline-flex;align-items:center;gap:5px;background:transparent;border:1px solid transparent;border-radius:7px;font:inherit;font-size:12.5px;font-weight:700;color:var(--muted);cursor:pointer;padding:5px 8px;min-height:32px;transition:border-color var(--dur-f),color var(--dur-f),background var(--dur-f)}.th-fbtn:hover{border-color:var(--teal);color:var(--teal)}.th-fbtn.on{border-color:var(--amber);background:var(--amber-soft);color:#8a6307}.th-ic{width:12px;height:12px;opacity:.65}.th-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:60;min-width:190px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 32px -12px #08332247;padding:12px;animation:rise .16s var(--ease)}.th-menu .input{width:100%}.th-opts{max-height:210px;overflow:auto;display:flex;flex-direction:column;gap:2px;margin-bottom:10px}.th-item{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--text);padding:6px;border-radius:6px;cursor:pointer;min-height:32px}.th-item:hover{background:var(--paper)}.th-lbl{display:block;font-size:11px;font-weight:700;color:var(--muted);margin:8px 0 4px}.th-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:12px;padding-top:10px;border-top:1px dashed var(--line-2)}.th-actions .btn{min-height:32px;padding:6px 12px}.empty-note{text-align:center;color:var(--muted-2);font-size:13px;padding:34px 0}.detail-tbl tfoot td{border-top:2px solid var(--ink);font-weight:700;background:var(--paper)}.src-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-left:3px solid var(--teal);border-radius:var(--r);padding:12px 16px;margin-bottom:14px;box-shadow:var(--sh)}.hkpi-click{cursor:pointer;text-align:left;font:inherit;color:inherit;transition:transform var(--dur-f),box-shadow var(--dur-f),border-color var(--dur-f)}.hkpi-click:hover{transform:translateY(-2px);border-color:var(--teal);box-shadow:0 8px 24px -12px #08332247}.hkpi-click:focus-visible{outline:2px solid var(--teal);outline-offset:2px}.modal-ov{position:fixed;inset:0;background:#0833226b;z-index:100;display:flex;align-items:center;justify-content:center;padding:24px;animation:fade .16s var(--ease)}.modal{background:#fff;border-radius:14px;max-width:780px;width:100%;max-height:86vh;overflow:auto;padding:22px 24px;box-shadow:0 24px 64px -24px #08332273;animation:rise .2s var(--ease)}.modal:focus{outline:none}.modal-sum{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--paper);border:1px solid var(--line);border-left:3px solid var(--teal);border-radius:10px;padding:11px 14px;margin:12px 0 14px;font-size:12.5px;color:var(--muted)}.modal-sum b{color:var(--ink)}@keyframes fade{0%{opacity:0}to{opacity:1}}.bt-tabs{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap}.bt-tab{flex:1;min-width:210px;text-align:left;border:1px solid var(--line);background:var(--card);border-radius:10px;padding:10px 13px;cursor:pointer;transition:border-color var(--dur-f),background var(--dur-f);font-family:inherit}.bt-tab:hover{border-color:var(--muted-2)}.bt-tab.on{border-color:var(--teal);background:#17b07712;box-shadow:0 6px 16px -12px #17b07799}.bt-h{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink)}.bt-h b{font-weight:600}.bt-id{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:6px;background:var(--teal);color:#fff;font-size:11.5px;font-weight:700;flex:0 0 20px}.bt-id.amber{background:var(--amber);color:#5b4304}.bt-day{margin-left:auto;font-size:11px;color:var(--muted);white-space:nowrap}.bt-s{margin-top:4px;font-size:11px;color:var(--muted);line-height:1.55}.cell-in{width:76px;padding:4px 7px;border:1px solid var(--line);border-radius:7px;font-size:12px;text-align:right;background:var(--card);color:var(--ink);transition:border-color var(--dur-f)}.cell-in:focus{outline:none;border-color:var(--teal);box-shadow:0 0 0 3px #17b07724}.cell-in:disabled{background:var(--paper);color:var(--muted);cursor:not-allowed}button.mini.link{background:none;border:none;padding:0 0 0 6px;color:var(--teal);cursor:pointer;font-size:11px;border-bottom:1px dashed var(--teal)}.gsum-row td{background:var(--paper);font-weight:600;color:var(--ink);border-top:2px solid var(--line);font-size:12.5px;padding:11px 10px;vertical-align:middle}.gsum-row .pill{margin-left:2px}.scope-wrap{display:flex;gap:12px;flex-wrap:wrap}.scope-opt{flex:1;min-width:280px;text-align:left;border:1.5px solid var(--line);background:var(--card);border-radius:12px;padding:15px 17px;cursor:pointer;transition:border-color var(--dur-f),box-shadow var(--dur-f),background var(--dur-f);font-family:inherit}.scope-opt:hover{border-color:var(--muted-2)}.scope-opt.on{border-color:var(--teal);background:#17b07712;box-shadow:0 10px 26px -16px #17b0778c}.scope-h{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink)}.scope-h b{font-size:15px;font-weight:700}.scope-s{margin-top:7px;font-size:11.5px;color:var(--muted);line-height:1.7}.cell-in.diff{border-color:var(--amber);background:#f5a62314}tr.derived td{background:var(--paper);color:var(--muted)}tr.derived .emp{color:var(--muted)}.fbar{padding:4px 0 2px}.fbar-top{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.fbar-row{display:flex;align-items:flex-start;gap:12px;padding:7px 0;border-top:1px dashed var(--line-2)}.fbar-lbl{flex:0 0 76px;font-size:12px;font-weight:700;color:var(--muted);padding-top:8px}.kw-in{flex:1;min-width:240px;font-size:13px;padding:9px 13px;border:1px solid var(--line);border-radius:9px;color:var(--ink);background:#fff}.kw-in:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 3px #17b0771f}.scope-chip .mini.num{margin-left:5px;font-family:JetBrains Mono;color:var(--muted-2)}.scope-chip.active .mini.num{color:var(--teal)}.rule-body{padding:13px 14px}.src-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:11px}.src-tag{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:#8a6307;background:var(--amber-soft);border:1px dashed var(--amber);border-radius:11px;padding:3px 10px;max-width:520px;line-height:1.5}.src-tag.manual{color:var(--muted);background:var(--paper);border-color:var(--line)}.src-tag b{font-family:JetBrains Mono}.manual-add{margin-bottom:11px}.ma-cand{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}.rm-btn{font-size:11.5px;font-weight:700;color:var(--danger);cursor:pointer;border:1px solid rgba(224,50,99,.3);border-radius:9px;padding:3px 11px;transition:background var(--dur-f)}.rm-btn:hover{background:#e0326314}.roster-detail{display:flex;gap:28px;flex-wrap:wrap;padding:6px 2px}.roster-detail>div{display:flex;flex-direction:column;gap:3px}.roster-detail b{font-size:12px;color:var(--ink);font-weight:600}.pg-tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:14px}.pg-tab{position:relative;text-align:left;font-family:inherit;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px 15px 13px;cursor:pointer;overflow:hidden;transition:border-color var(--dur-f),box-shadow var(--dur-f),transform var(--dur-f)}.pg-tab:hover{border-color:var(--muted-2);transform:translateY(-2px);box-shadow:var(--sh)}.pg-tab.on{border-color:var(--gc);box-shadow:0 12px 28px -18px var(--gc)}.pgt-bar{position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--gc);opacity:.32;transition:opacity var(--dur-f)}.pg-tab.on .pgt-bar{opacity:1}.pgt-t{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:700;color:var(--ink);font-family:Sora,Noto Sans SC,sans-serif}.pgt-t b{margin-left:auto;font-size:19px;line-height:1;color:var(--gc)}.pgt-s{display:block;margin-top:6px;font-size:11.5px;color:var(--muted);line-height:1.6;min-height:32px}.pgt-tag{position:absolute;right:12px;bottom:11px;font-size:10px;font-weight:700;color:#8a6307;background:var(--amber-soft);border:1px dashed var(--amber);border-radius:9px;padding:1px 7px}.pg-hero{display:flex;gap:20px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-left:4px solid var(--gc);border-radius:var(--r);padding:16px 18px;margin-bottom:14px}.pg-hero-l{min-width:280px;flex:1}.pg-hero-t{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:19px;font-weight:700;color:var(--ink);font-family:Sora,Noto Sans SC,sans-serif}.pg-hero-s{margin-top:7px;font-size:12.5px;color:var(--muted);line-height:1.7}.pg-hero-k{display:flex;gap:26px;flex-wrap:wrap;margin-top:12px}.pg-hero-k>span{display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--muted);max-width:420px}.pg-hero-k b{font-size:12.5px;color:var(--ink);font-weight:600;line-height:1.6}.pg-hero-k .warn b{color:var(--danger)}.pg-hero-r{display:flex;flex-direction:column;align-items:flex-end;gap:10px}.pg-reset{font-family:inherit;font-size:12px;font-weight:700;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:9px;padding:7px 13px;cursor:pointer;transition:border-color var(--dur-f),background var(--dur-f)}.pg-reset:hover{border-color:var(--gc);background:#fff}.pg-dept{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;max-width:420px}.pg-dept-i{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);background:var(--paper);border:1px solid var(--line-2);border-radius:10px;padding:3px 9px}.pg-dept-i b{font-family:JetBrains Mono,monospace;color:var(--ink)}@media(max-width:1440px){.pg-tabs{grid-template-columns:repeat(4,1fr)}}@media(max-width:1100px){.pg-tabs{grid-template-columns:repeat(2,1fr)}.pg-hero-r{align-items:flex-start}.pg-dept{justify-content:flex-start}}@media(max-width:768px){.pg-tabs{grid-template-columns:1fr}.pg-hero-k{gap:16px}}.imp-ta{width:100%;min-height:96px;font-family:JetBrains Mono,Noto Sans Mono,monospace;font-size:12px;line-height:1.7;padding:11px 13px;border:1px dashed var(--line);border-radius:10px;color:var(--text);background:#fbfdfc;resize:vertical}.imp-ta:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 3px #17b0771f}label.btn{cursor:pointer}.pay-tbl-wrap{max-height:520px;overflow:auto;border:1px solid var(--line);border-radius:10px}.pay-tbl{font-size:12px;min-width:max-content}.pay-tbl thead th{position:sticky;top:0;z-index:3;padding:8px 10px;font-size:10.5px;line-height:1.4;white-space:normal;min-width:88px;vertical-align:bottom;background:var(--card);border-bottom:2px solid var(--line);border-right:1px solid var(--line-2)}.pay-tbl thead th .th-main{font-weight:700;color:var(--ink-2)}.pay-tbl thead th .th-sub{margin-top:4px;padding-top:4px;border-top:1px dashed var(--line);font-size:9.5px;font-weight:500;line-height:1.35;color:var(--muted-2)}.pay-tbl th.fcode{display:inline-block;font-size:9.5px;font-weight:700;color:var(--muted-2);border:1px solid var(--line);border-radius:5px;padding:0 5px;margin-right:5px;vertical-align:1px}.pay-tbl th.fml{background:#eef2ee;color:var(--ink-2)}.pay-tbl td{padding:0;white-space:nowrap;border-bottom:1px solid var(--line-2);border-right:1px solid var(--line-2)}.pay-tbl tr>:last-child{border-right:none}.pay-tbl tbody td{padding:0}.pay-tbl tbody td>*{display:block;padding:9px 11px}.pay-tbl tbody tr:hover{background:#f7fbf8}.pay-tbl tbody tr.on{background:#17b0770f}.pay-tbl tbody tr.on td.sticky-l{box-shadow:inset 3px 0 0 var(--teal)}.pay-tbl td.fml{background:var(--paper);color:var(--ink);font-weight:600}.pay-tbl td.sticky-l,.pay-tbl th.sticky-l{position:sticky;left:0;z-index:2;background:var(--card);box-shadow:1px 0 0 var(--line)}.pay-tbl th.sticky-l{z-index:4;background:var(--paper)}.pay-tbl th.sticky-l,.pay-tbl td.sticky-l{width:44px;min-width:44px;max-width:44px;padding-left:6px;padding-right:6px}.pay-tbl td.sticky-name,.pay-tbl th.sticky-name{position:sticky;left:44px;z-index:2;background:var(--card);box-shadow:1px 0 0 var(--line);white-space:nowrap}.pay-tbl th.sticky-name{z-index:4;background:var(--paper)}.pay-tbl tbody tr:hover td.sticky-name{background:#f7fbf8}.pay-tbl tbody tr.on td.sticky-name{background:#ebf9f3}.pay-tbl tfoot td{position:sticky;bottom:0;background:var(--paper);border-top:2px solid var(--line);font-weight:700;color:var(--ink);padding:11px;font-size:12px;z-index:2}.pay-tbl tfoot td.sticky-l{z-index:3}.cell-in{width:100%;min-width:76px;border:1px solid transparent;background:transparent;font-family:JetBrains Mono,Noto Sans Mono,monospace;font-size:12px;font-variant-numeric:tabular-nums;color:var(--text);text-align:right;padding:8px 10px!important;border-radius:0}.cell-in:hover{border-color:var(--line);background:#fff}.cell-in:focus{outline:none;border-color:var(--teal);background:#fff;box-shadow:0 0 0 2px #17b07729}.cell-in.diff{border-color:var(--amber);background:#fabe2a24;color:#7a5a06;font-weight:700}.cell-edited{display:inline-block;padding:8px 10px;background:#fabe2a2e;color:#7a5a06;font-weight:700;border-left:1px solid var(--amber);border-right:1px solid var(--amber)}.pay-tbl th.r,.pay-tbl td.r{text-align:right}.pay-tbl tbody td.r>*{text-align:right}.ovr-bar .btns{margin-left:auto;flex-wrap:nowrap}.colpick{position:relative;z-index:50}.colpick-panel{position:absolute;right:0;top:calc(100% + 6px);z-index:30;width:300px;max-height:320px;overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 32px #0002;padding:10px 12px}.cp-head{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--muted);margin-bottom:6px}.cp-link{border:none;background:none;color:var(--teal);cursor:pointer;font-size:12px;padding:0}.cp-link:hover{text-decoration:underline}.cp-list{display:grid;grid-template-columns:1fr 1fr;gap:2px 12px}.cp-item{display:flex;gap:6px;align-items:center;font-size:12px;padding:4px 2px;cursor:pointer;white-space:nowrap;color:var(--ink)}.cp-item input{accent-color:var(--teal)}.cp-sec{margin-bottom:8px}.cp-sec-t{font-size:11.5px;font-weight:700;color:var(--ink-2);padding:5px 0 3px;border-bottom:1px dashed var(--line);margin-bottom:4px}@media(max-width:768px){.pay-tbl thead th .th-sub{display:none}.pay-tbl thead th{top:0}}.modal-backdrop{position:fixed;inset:0;z-index:60;background:#08332257;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal-lg{position:fixed;z-index:61;left:50%;top:50%;transform:translate(-50%,-50%);width:min(920px,calc(100vw - 48px));max-height:min(84vh,860px);display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh-lg);overflow:hidden}.modal-hd{display:flex;align-items:flex-start;gap:14px;justify-content:space-between;padding:17px 20px;border-bottom:1px solid var(--line);background:var(--paper)}.modal-hd .mh-t{font-family:Sora,Noto Sans SC,sans-serif;font-size:17px;font-weight:700;color:var(--ink)}.modal-hd .mh-s{margin-top:5px;font-size:12px;color:var(--muted);line-height:1.6}.modal-bd{padding:16px 20px;overflow:auto;flex:1}.modal-ft{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:13px 20px;border-top:1px solid var(--line);background:var(--paper);font-size:12.5px;color:var(--muted);line-height:1.7}.modal-ft b{color:var(--ink)}@media(max-width:768px){.modal-lg{width:calc(100vw - 24px);max-height:88vh}}.nav-burger{display:none;width:34px;height:34px;place-items:center;border:1px solid var(--line);border-radius:9px;background:var(--card);color:var(--ink);cursor:pointer;flex:0 0 34px}.nav-burger svg{width:19px;height:19px}.nav-close{display:none;margin-left:auto;font-size:15px;color:var(--muted-2);cursor:pointer;padding:2px 6px}.nav-backdrop{display:none}.sidebar.open{left:0;box-shadow:var(--sh-lg)}.sidebar.open .nav-close{display:inline}@media(max-width:900px){.nav-burger{display:grid}.nav-backdrop{display:block;position:fixed;inset:0;z-index:19;background:#08332257}.sidebar{z-index:20}.tb-title{font-size:16px}.tb-title small{display:none}.kpi-row{grid-template-columns:repeat(2,1fr)}.pay-tbl thead th .th-sub{display:none}.pay-tbl thead th{top:0}.stepper{flex-direction:column}.st:not(:last-child):after{display:none}.st{border-bottom:1px dashed var(--line)}.pg-tabs{grid-template-columns:1fr}.modal-lg{width:calc(100vw - 24px);max-height:88vh}.modal-ft{flex-direction:column;align-items:stretch}.modal-ft .btns{justify-content:flex-end}.main,.content,.card{min-width:0}.tbl-scroll{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.pg-hero-l,.pg-hero-r{min-width:0}.fbar-lbl{flex:0 0 60px}.kw-in{min-width:0}.rule-head{flex-wrap:wrap}.rule-note{margin-left:0;flex-basis:100%}.topbar{padding:10px 12px;gap:9px;overflow-x:auto}.tb-spacer{min-width:4px}.campus-card .cc-l{display:none}.campus-card{padding:8px 10px}.month-pick .mp-l{display:none}}@media(max-width:520px){.kpi-row{grid-template-columns:1fr 1fr}.kpi .kv{font-size:23px}.content{padding:12px}.pg-hero-k{gap:14px}.cc-v{max-width:74px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media(max-width:520px){.kpi-row{grid-template-columns:1fr 1fr}.kpi .kv{font-size:23px}.content{padding:12px}.pg-hero-k{gap:14px}}.fx-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}.fx-lbl{flex:0 0 150px;display:flex;flex-direction:column;gap:2px}.fx-lbl b{font-size:13px;color:var(--ink);letter-spacing:.02em}.fx-lbl .mini{font-weight:400}.fx-period{display:inline-flex;align-items:center;gap:6px}.fx-sep{height:1px;background:var(--line);margin:14px 0}.fx-missing{display:grid;grid-template-columns:repeat(2,1fr);gap:9px;max-height:340px;overflow-y:auto;padding-right:2px}.fx-missing .alert-item{margin-bottom:0}@media(max-width:900px){.fx-missing{grid-template-columns:1fr}}@media(max-width:560px){.fx-lbl{flex-basis:100%}.fx-row .input[type=date]{min-width:0}}.tpl-job-badge{display:inline-flex;align-items:center;font-size:12px;font-weight:700;color:#fff;background:#4472c4;border-radius:6px;padding:3px 10px;letter-spacing:.5px;box-shadow:0 1px 2px #4472c459}.row-active .tpl-job-badge{background:#2f5597}.tpl-alias-badge{display:inline-flex;align-items:center;font-size:11px;font-weight:600;color:#44568c;background:#eef2fb;border:1px solid #c4d2f0;border-radius:5px;padding:1px 8px;margin:0 4px 3px 0}.detail-tbl-wrap{max-height:620px;overflow:auto;border:1px solid var(--line);border-radius:10px}.detail-tbl thead th{position:sticky;top:0;z-index:3;background:var(--card);box-shadow:inset 0 -2px 0 var(--line)}.detail-tbl tfoot td{position:sticky;bottom:0;z-index:3;box-shadow:inset 0 2px 0 var(--ink)}.detail-tbl td.sticky-name,.detail-tbl th.sticky-name{position:sticky;left:0;z-index:2;background:var(--card);box-shadow:1px 0 0 var(--line);white-space:nowrap;min-width:64px;text-align:left}.detail-tbl th.sticky-name{z-index:5;background:var(--paper)}.detail-tbl tfoot td.sticky-name{z-index:4}.detail-tbl tbody tr:hover td.sticky-name{background:#f7fbf8}.cloud-toast{position:fixed;right:24px;bottom:24px;z-index:9999;max-width:420px;padding:12px 18px;border-radius:10px;background:#1f3b2e;color:#fff;font-size:13px;line-height:1.6;box-shadow:0 8px 28px #0f281c47}
