:root{--ink:#16222e;--ink-2:#1e3040;--steel:#23547b;--steel-l:#3d74a0;--bg:#f2f4f6;--card:#fff;--line:#dce3e9;--line-soft:#edf1f4;--line-dash:#e6ebef;--amber:#e8862e;--amber-l:#fbeedf;--amber-line:#f0d3b2;--amber-ink:#8a4e10;--green:#2e9e5b;--green-l:#f1faf4;--green-line:#cfe3d8;--green-ink:#1e6b3e;--red:#ce4438;--red-l:#fbecea;--red-line:#ebc0ba;--red-ink:#9b2c22;--txt:#243342;--mut:#6b7b8d;--steel-tint:#e6eef5;--focus-ring:#bfd4e4;--input-readonly:#f4f6f8;--row-hover:#f6f9fb;--side-txt:#c9d5e0;--side-mut:#7e93a6;--side-dim:#5f7488;--font-sans:var(--font-noto-sans-tc), "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", sans-serif;--mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--fs-2xs:11.5px;--fs-xs:12.1px;--fs-sm:12.6px;--fs-note:13.2px;--fs-label:13.8px;--fs-meta:14.4px;--fs-small:14.9px;--fs-body-sm:15.5px;--fs-body:16.1px;--fs-input-lg:16.7px;--fs-button-lg:17.2px;--fs-title:18.4px;--fs-h2:21.8px;--fs-h1:24.1px;--fs-doc-title:25.3px;--fs-kpi:27.6px;--fs-total:36.8px;--radius-sm:6px;--radius:8px;--radius-card:10px;--radius-lg:16px;--shadow-doc:0 2px 10px #16222e0f;--shadow-login:0 24px 60px #00000073}
*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{font-family:var(--font-sans);background:var(--bg);color:var(--txt);font-size:var(--fs-body);line-height:1.55}button{cursor:pointer;font-family:inherit}button:disabled{cursor:not-allowed}input,select,textarea{font-family:inherit;font-size:var(--fs-body);color:var(--txt)}.num{font-family:var(--mono);font-variant-numeric:tabular-nums}:focus-visible{outline:2px solid var(--steel-l);outline-offset:2px}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.skip-link{z-index:200;background:var(--steel);color:#fff;border-radius:var(--radius-sm);padding:6px 12px;position:absolute;top:-40px;left:8px}.skip-link:focus{top:8px}.login-screen{z-index:100;background:var(--ink);background-image:linear-gradient(#ffffff09 1px,#0000 1px),linear-gradient(90deg,#ffffff09 1px,#0000 1px);background-size:26px 26px;justify-content:center;align-items:center;display:flex;position:fixed;inset:0;overflow-y:auto}.login-wrap{background:var(--ink-2);border-radius:var(--radius-lg);width:92%;max-width:880px;box-shadow:var(--shadow-login);border:1px solid #ffffff17;grid-template-columns:1fr 1fr;display:grid;overflow:hidden}.login-art{background:linear-gradient(160deg,#1b3247 0%,#16222e 70%);flex-direction:column;justify-content:space-between;padding:38px 34px;display:flex}.login-art h1{color:#fff;font-size:var(--fs-h1);letter-spacing:.06em;margin-top:22px}.login-art .en{color:var(--side-mut);font-size:var(--fs-sm);letter-spacing:.22em;margin-top:4px}.login-art p.desc{color:#9fb2c2;font-size:var(--fs-small);margin-top:14px;line-height:1.8}.login-art .foot{color:var(--side-dim);font-size:var(--fs-sm)}.login-form{background:#fff;flex-direction:column;justify-content:center;padding:44px 40px;display:flex}.login-form h2{font-size:var(--fs-h2);font-weight:700}.login-form .sub{font-size:var(--fs-meta);color:var(--mut);margin:4px 0 22px}.login-form label{font-size:var(--fs-label);color:var(--mut);margin:12px 0 5px;display:block}.login-form input{border:1px solid var(--line);border-radius:var(--radius);width:100%;font-size:var(--fs-input-lg);padding:10px 12px}.login-form input:focus{outline:2px solid var(--focus-ring);border-color:var(--steel-l)}.login-form input[aria-invalid=true]{border-color:var(--red)}.login-btn{border-radius:var(--radius);background:var(--steel);color:#fff;width:100%;font-size:var(--fs-button-lg);letter-spacing:.2em;border:0;margin-top:22px;padding:11px 0;font-weight:700;transition:background .15s}.login-btn:hover:not(:disabled){background:var(--steel-l)}.login-btn:disabled{opacity:.7}.login-err{color:var(--red);font-size:var(--fs-meta);min-height:18px;margin-top:10px}.login-info{font-size:var(--fs-meta);color:var(--steel);background:var(--steel-tint);border-radius:var(--radius);margin-bottom:6px;padding:8px 12px}.app{min-height:100vh;display:flex}.sidebar{background:var(--ink);width:244px;color:var(--side-txt);flex-direction:column;flex-shrink:0;height:100vh;display:flex;position:sticky;top:0}.brand{border-bottom:1px solid #ffffff14;padding:20px 18px 16px}.brand h1{font-size:var(--fs-title);color:#fff;letter-spacing:.03em;font-weight:700}.brand p{font-size:var(--fs-sm);color:var(--side-mut);letter-spacing:.08em;margin-top:3px}.nav{flex:1;padding:12px 10px;overflow-y:auto}.nav-label{font-size:var(--fs-sm);color:var(--side-dim);letter-spacing:.14em;padding:12px 10px 6px}.nav-item{text-align:left;width:100%;color:var(--side-txt);font-size:var(--fs-body);background:0 0;border:0;border-radius:7px;align-items:center;gap:9px;margin-bottom:2px;padding:9px 10px;text-decoration:none;transition:background .15s;display:flex}.nav-item:hover{background:#ffffff12}.nav-item.active{background:var(--steel);color:#fff;font-weight:600}.nav-ico{text-align:center;width:17px;font-size:var(--fs-body);opacity:.9}.side-foot{font-size:var(--fs-sm);color:var(--side-dim);border-top:1px solid #ffffff14;padding:14px 18px}.main{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{background:var(--card);border-bottom:1px solid var(--line);z-index:20;align-items:center;gap:14px;height:56px;padding:0 26px;display:flex;position:sticky;top:0}.topbar h2{font-size:var(--fs-title);font-weight:700}.env-badge{font-size:var(--fs-sm);color:var(--amber);background:var(--amber-l);border:1px solid var(--amber-line);border-radius:5px;padding:1px 8px;font-weight:600}.topbar .date{font-size:var(--fs-meta);color:var(--mut);margin-left:auto}.user-chip{font-size:var(--fs-meta);color:var(--txt);border:1px solid var(--line);background:#fff;border-radius:20px;align-items:center;gap:8px;padding:4px 6px 4px 12px;display:flex}.user-chip button{color:var(--mut);font-size:var(--fs-label);border:0;border-left:1px solid var(--line);background:0 0;padding:2px 8px}.user-chip button:hover{color:var(--red)}.content{width:100%;max-width:1380px;padding:24px 26px 60px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-card)}.card-h{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:10px;padding:13px 18px;display:flex}.card-h h3{font-size:var(--fs-input-lg);font-weight:700}.card-h .sub{font-size:var(--fs-label);color:var(--mut)}.card-b{padding:18px}.btn{border:1px solid var(--line);font-size:var(--fs-body-sm);color:var(--txt);background:#fff;border-radius:7px;align-items:center;gap:6px;padding:7px 14px;font-weight:600;transition:all .15s;display:inline-flex}.btn:hover:not(:disabled){border-color:var(--steel-l);color:var(--steel)}.btn.primary{background:var(--steel);border-color:var(--steel);color:#fff}.btn.primary:hover:not(:disabled){background:var(--steel-l);color:#fff}.btn.amber{background:var(--amber);border-color:var(--amber);color:#fff}.btn.amber:hover:not(:disabled){filter:brightness(1.06);color:#fff}.btn.danger:hover:not(:disabled){border-color:var(--red);color:var(--red)}.btn.danger-solid{background:var(--red);border-color:var(--red);color:#fff}.btn.sm{font-size:var(--fs-meta);padding:4px 10px}.btn:disabled{opacity:.55}.f{flex-direction:column;gap:4px;display:flex}.f label{font-size:var(--fs-label);color:var(--mut)}.f input,.f select,.f textarea{border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;width:100%;padding:7px 9px}.f input:focus,.f select:focus,.f textarea:focus{outline:2px solid var(--focus-ring);border-color:var(--steel-l)}.f input[readonly]{background:var(--input-readonly);color:var(--mut)}.f input[aria-invalid=true],.f select[aria-invalid=true],.f textarea[aria-invalid=true]{border-color:var(--red)}.f .field-error{font-size:var(--fs-label);color:var(--red)}.f .field-hint{font-size:var(--fs-label);color:var(--mut)}.f .req{color:var(--red);margin-left:2px}.warn-box{border:1px solid var(--amber-line);background:var(--amber-l);color:var(--amber-ink);border-radius:var(--radius);font-size:var(--fs-meta);padding:9px 12px;line-height:1.7}.warn-box.red{border-color:var(--red-line);background:var(--red-l);color:var(--red-ink)}.ok-box{border:1px solid var(--green-line);background:var(--green-l);color:var(--green-ink);border-radius:var(--radius);font-size:var(--fs-meta);padding:9px 12px;line-height:1.7}.info-box{border:1px solid var(--focus-ring);background:var(--steel-tint);color:var(--steel);border-radius:var(--radius);font-size:var(--fs-meta);padding:9px 12px;line-height:1.7}.note{font-size:var(--fs-label);color:var(--mut);margin-top:12px;line-height:1.7}.state{text-align:center;color:var(--mut);font-size:var(--fs-small);flex-direction:column;align-items:center;gap:10px;padding:32px 16px;display:flex}.state .state-title{color:var(--txt);font-size:var(--fs-body);font-weight:700}.state.error .state-title{color:var(--red-ink)}.state .state-ref{font-size:var(--fs-sm);color:var(--mut)}.spinner{border:3px solid var(--line);border-top-color:var(--steel);border-radius:50%;width:22px;height:22px;animation:.8s linear infinite spin}.spinner.sm{border-width:2px;width:14px;height:14px}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:2.4s}}dialog.confirm{border:1px solid var(--line);border-radius:var(--radius-card);width:calc(100% - 32px);max-width:440px;color:var(--txt);margin:auto;padding:0}dialog.confirm::backdrop{background:#16222e73}dialog.confirm .confirm-body{padding:20px 22px 8px}dialog.confirm h3{font-size:var(--fs-title);margin-bottom:8px}dialog.confirm p{font-size:var(--fs-body-sm);line-height:1.7}dialog.confirm .confirm-actions{justify-content:flex-end;gap:10px;padding:14px 22px 18px;display:flex}.toast-region{z-index:120;pointer-events:none;flex-direction:column;gap:8px;max-width:86%;display:flex;position:fixed;bottom:26px;left:50%;transform:translate(-50%)}.toast{background:var(--ink);color:#fff;border-radius:var(--radius);font-size:var(--fs-body-sm);pointer-events:auto;padding:10px 20px;box-shadow:0 6px 20px #0003}.toast.error{background:var(--red-ink)}.toast.success{background:var(--green-ink)}@media (max-width:1080px){.login-wrap{grid-template-columns:1fr}.login-art{display:none}}@media (max-width:760px){.sidebar{display:none}.topbar{padding:0 14px}.content{padding:16px 14px 48px}.login-form{padding:32px 24px}}@media print{.sidebar,.topbar,.toast-region{display:none!important}body{background:#fff}.content{max-width:none;padding:0}}