/* CFO Pilot accounting page styles. Loaded only by accounting.html. */

/* Extracted block 1 from accounting.html */
    :root {
      --bg:#f5f7f8;
      --panel:#ffffff;
      --panel-2:#fbfcfd;
      --th:#f8faf9;
      --row-hover:#fafcfb;
      --ink:#17201d;
      --ink-soft:#33433d;
      --muted:#66736f;
      --line:#dce3e0;
      --green:#14B8A6;
      --gold:#64748B;
      --danger:#a83f3a;
      --blue:#2f5f9b;
      --danger-soft:rgba(168,63,58,.08);
      --gold-soft:rgba(100,116,139,.10);
      --shadow:0 12px 30px rgba(20,37,32,.08);
    }
    /* 黑夜模式：本頁專屬變數覆寫（全域 dark 主題沒蓋到 --panel/--bg 等） */
    :root[data-cfo-mode="dark"] {
      --bg:#0f141a;
      --panel:#1a232e;
      --panel-2:#212c38;
      --th:#212c38;
      --row-hover:#222d39;
      --ink:#e8eef5;
      --ink-soft:#c4cfda;
      --muted:#8499ab;
      --line:#2c3845;
      --green:#2DD4BF;
      --gold:#94A3B8;
      --danger:#e07a82;
      --blue:#5a9bf0;
      --danger-soft:rgba(224,122,130,.16);
      --gold-soft:rgba(148,163,184,.16);
      --shadow:0 6px 22px rgba(0,0,0,.5);
    }
    body { margin:0; background:var(--bg); color:var(--ink); font-family:Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang TC", "Microsoft JhengHei", "Noto Sans TC", "Noto Sans CJK TC", sans-serif; }
    input[type="date"], input[type="month"], input[type="datetime-local"], input[type="time"] { font-family:system-ui, -apple-system, "Segoe UI", "PingFang TC", "Microsoft JhengHei", "Noto Sans TC", "Noto Sans CJK TC", sans-serif; }
    .doc-flow { display:block; padding:6px 0; }
    .doc-flow-paths { display:flex; flex-direction:column; gap:5px; }
    .doc-flow-path { display:flex; flex-wrap:wrap; gap:5px; align-items:center; padding:5px 6px; border:1px solid var(--line); border-radius:8px; background:var(--panel); }
    .doc-flow-node { border:1px solid var(--line); border-radius:6px; padding:3px 6px; font-size:10px; line-height:1.25; background:var(--panel-2); color:var(--ink); }
    button.doc-flow-node { font-family:inherit; font-size:10px; line-height:1.25; text-align:left; cursor:pointer; }
    button.doc-flow-node:hover { border-color:var(--green); box-shadow:0 0 0 2px rgba(20,184,166,.12); }
    button.doc-flow-node[disabled] { cursor:default; opacity:.72; }
    .doc-flow-node .no { font-size:10.5px; font-weight:800; }
    .doc-flow-node .muted { font-size:9.5px; }
    .doc-flow-arr { color:var(--muted); font-size:11px; }
    .relrefs { display:flex; flex-wrap:wrap; gap:4px; min-width:160px; max-width:300px; }
    .relref { display:inline-flex; align-items:center; gap:4px; border:1px solid var(--line); border-radius:6px; background:var(--panel-2); padding:2px 6px; font-size:11px; line-height:1.35; white-space:nowrap; }
    .relref b { font-weight:850; color:var(--ink); }
    #invdoc-detail-actions { display:inline-flex; align-items:center; gap:8px; }
    .status-pill { display:inline-block; border-radius:999px; padding:2px 9px; font-size:11px; font-weight:800; border:1px solid var(--line); background:var(--panel-2); color:var(--muted); }
    .status-pill.posted, .status-pill.approved, .status-pill.closed { background:rgba(20,184,166,.12); color:var(--green); border-color:rgba(20,184,166,.28); }
    .status-pill.partial, .status-pill.pending { background:var(--gold-soft); color:var(--gold); }
    .status-pill.void, .status-pill.voided, .status-pill.rejected { background:var(--danger-soft); color:var(--danger); border-color:rgba(168,63,58,.22); }
    .acct-page { max-width:none; margin:0; padding:0; }
    .acct-head { display:flex; justify-content:space-between; align-items:flex-start; gap:18px; margin:0 0 18px; padding:0; }
    .eyebrow { color:var(--green); font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; }
    h1 { margin:5px 0 6px; font-size:30px; line-height:1.12; letter-spacing:0; }
    .sub { color:var(--muted); font-size:13px; line-height:1.6; max-width:760px; }
    .tenant-chip { border:1px solid var(--line); border-radius:12px; background:var(--panel); padding:10px 12px; min-width:220px; font-size:12px; box-shadow:var(--shadow); }
    .tenant-chip strong { display:block; font-size:13px; margin-bottom:3px; }
    .kpis { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; margin:0 0 16px; padding:0; }
    .kpi { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:16px; box-shadow:var(--shadow); min-height:96px; }
    .kpi .label { color:var(--muted); font-size:12px; font-weight:700; }
    .kpi .value { margin-top:10px; font-size:24px; font-weight:800; }
    .kpi .note { margin-top:6px; color:var(--muted); font-size:12px; }
    .kpi.nav { transition:transform .08s, box-shadow .1s, border-color .1s; }
    .kpi.nav:hover { transform:translateY(-2px); box-shadow:0 8px 20px rgba(11,37,64,.12); border-color:var(--cfo-teal,#14B8A6); }
    .kpi.nav:hover .note { color:var(--cfo-blue,#2563EB); }
    .layout { display:grid; grid-template-columns:var(--tabs-w,212px) minmax(0,1fr); gap:0; align-items:start; min-height:calc(100vh - 52px); transition:grid-template-columns .16s ease; }
    .layout.tabs-railed { --tabs-w:72px; }
    .layout > div { min-width:0; padding:18px 24px 48px; }
    /* 第二級選單：懸浮圓角卡，與第一層 rail 對齊、緊貼第一層、右側與內容留間距 */
    .tabs {
      background:var(--panel);
      border:1px solid var(--line);
      border-radius:18px;
      box-shadow:0 10px 30px rgba(15,23,42,.10), 0 2px 6px rgba(15,23,42,.05);
      padding:10px 8px 16px;
      position:sticky;
      top:62px;
      align-self:start;
      height:calc(100vh - 72px);
      margin:10px 12px 0 0;
      overflow-y:auto;
      overflow-x:hidden;
      box-sizing:border-box;
      transition:width .2s cubic-bezier(.32,.72,0,1), box-shadow .15s ease;
    }
    /* 釘選列 */
    .tabs-head { display:flex; align-items:center; justify-content:space-between; gap:6px; padding:4px 6px 8px; margin-bottom:4px; border-bottom:1px solid var(--line); }
    .tabs-title { font-size:10px; font-weight:800; letter-spacing:1.4px; text-transform:uppercase; color:var(--muted); white-space:nowrap; }
    .tabs-pin { border:0; background:transparent; color:var(--muted); width:26px; height:26px; border-radius:6px; cursor:pointer; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; }
    .tabs-pin svg { width:15px; height:15px; }
    .tabs-pin:hover { background:var(--line); color:var(--green); }
    .tabs-pin[aria-pressed="true"] { color:var(--green); }
    .tab-group { padding:1px 0; }
    /* 大項目 */
    .tab-main {
      width:100%;
      border:0;
      background:transparent;
      color:var(--ink);
      display:flex;
      align-items:center;
      gap:10px;
      padding:9px 10px;
      border-radius:8px;
      font-size:14px;
      font-weight:700;
      letter-spacing:.01em;
      cursor:pointer;
      text-align:left;
      font-family:inherit;
    }
    .tab-main .ic { width:18px; height:18px; flex-shrink:0; display:inline-flex; align-items:center; justify-content:center; color:var(--muted); }
    .tab-main .ic svg { width:18px; height:18px; display:block; }
    .tab-main .label { flex:1; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .tab-main .chev { display:none; }
    .tab-main:hover { background:var(--line); color:var(--ink); }
    .tab-main:hover .ic { color:var(--ink); }
    .tab-group.current > .tab-main { color:var(--green); background:rgba(20,184,166,.06); }
    .tab-group.current > .tab-main .ic { color:var(--green); }
    .tab-group.collapsed .chev { transform:rotate(-90deg); }
    .tab-group.collapsed .tab-sublist { display:none; }
    /* 會計總帳：左側第二層 rail — 總帳記帳 之下列出子項；子項用標準點狀樣式、隱藏子項小圖示 */
    .tab-group[data-group="ledger-entry"] .tab-sub .ic { display:none; }
    .plan-hidden { display:none !important; }
    /* 小節折疊（會計作業內） */
    .tab-subgroup > .tab-subsec { cursor:pointer; border:0; background:transparent; width:100%; text-align:left; display:flex; align-items:center; gap:6px; padding:7px 11px 7px 18px; border-radius:7px; user-select:none; }
    .tab-subgroup > .tab-subsec:hover { background:rgba(20,184,166,.06); }
    .tab-subgroup > .tab-subsec::before { content:''; flex:0 0 auto; width:4px; height:4px; border-radius:50%; background:var(--line); }
    .tab-subgroup.sub-collapsed > .tab-subitems { display:none; }
    .tab-subgroup > .tab-subitems { display:grid; gap:1px; }
    .tab-subgroup > .tab-subitems .tab-sub { padding-left:48px; font-size:12.5px; }
    .tab-subgroup > .tab-subitems .tab-sub::before { left:35px; }
    /* 小項目 */
    .tab-sublist { display:grid; gap:1px; margin:2px 0 4px; }
    .tab-subsec { font-size:13.5px; font-weight:700; letter-spacing:.01em; color:#5b6b7d; padding:8px 11px 3px 38px; }
    .tab-subgroup > .tab-subsec { padding-left:18px; }
    .subsec-ic { display:none; }   /* 2 階只留小圓點，不放圖示 */
    .tab-sub {
      width:100%;
      border:0;
      background:transparent;
      color:var(--ink-soft);
      display:flex;
      align-items:center;
      gap:10px;
      padding:7px 11px 7px 38px;
      border-radius:6px;
      font-size:13.5px;
      font-weight:500;
      cursor:pointer;
      text-align:left;
      font-family:inherit;
      position:relative;
      white-space:nowrap;
      transition:background .1s, color .1s;
    }
    .tab-sub::before {
      content:'';
      position:absolute;
      left:21px; top:50%; transform:translateY(-50%);
      width:4px; height:4px; border-radius:50%;
      background:var(--line);
    }
    .tab-sub:hover { background:var(--line); color:var(--ink); }
    .tab-sub.active { background:rgba(20,184,166,.08); color:var(--green); font-weight:700; }
    .tab-sub.active::before { background:var(--green); }
    /* ── 窄軌 rail（桌機）：未 hover 只剩圖標；hover 整個面板展開「覆蓋」內容（不推擠），離開自動收回，釘選才固定 ── */
    @media (min-width:981px) {
      .tabs.rail { width:60px; overflow-x:visible; }
      .tabs.rail:not(:hover) { padding:10px 6px 16px; overflow-y:visible; }
      .tabs.rail:not(:hover) .tabs-title { display:none; }
      .tabs.rail:not(:hover) .tabs-head { justify-content:center; padding:4px 0 8px; }
      .tabs.rail:not(:hover) .tab-main { justify-content:center; padding:10px 0; gap:0; }
      .tabs.rail:not(:hover) .tab-main .label,
      .tabs.rail:not(:hover) .tab-main .chev,
      .tabs.rail:not(:hover) .tab-sublist { display:none; }
      .tabs.rail:not(:hover) .tab-main .ic { width:20px; height:20px; }
      .tabs.rail:not(:hover) .tab-main .ic svg { width:20px; height:20px; }
      /* hover 展開：浮在內容之上 */
      .tabs.rail:hover {
        width:212px; min-width:212px;
        padding:10px 8px 16px;
        overflow-y:auto;
        box-shadow:0 18px 48px rgba(15,23,42,.18), 0 4px 12px rgba(15,23,42,.08);
        z-index:60;
      }
    }
    .dot { display:none; }
    /* ── 手機抽屜選單（桌機隱藏）── */
    .mnav-bar { display:none; }
    .nav-backdrop { display:none; }
    .panel { display:none; background:var(--panel); border:1px solid var(--line); border-radius:14px; overflow:hidden; box-shadow:var(--shadow); }
    .panel.active { display:block; }
    .panel-head { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:16px 18px; border-bottom:1px solid var(--line); }
    .panel-title { font-size:18px; font-weight:850; display:inline-flex; align-items:center; }
.itip { position:relative; display:inline-flex; align-items:center; margin-left:7px; color:var(--muted); cursor:help; font-size:14px; font-weight:400; }
.itip[hidden] { display:none; }
.itipbox { display:none; position:absolute; left:0; top:calc(100% + 8px); width:min(460px,86vw); background:#0f1d31; color:#fff; font-size:12px; font-weight:400; line-height:1.75; padding:12px 14px; border-radius:10px; z-index:80; box-shadow:0 10px 28px rgba(0,0,0,.28); }
.itip:hover .itipbox, .itip:focus .itipbox, .itip:focus-within .itipbox { display:block; }
.itipbox a { color:#7fe3d5; font-weight:700; text-decoration:none; }
    .actions { display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
    .btn { border:1px solid var(--line); border-radius:8px; background:var(--panel); color:var(--ink); min-height:36px; padding:0 14px; font-weight:800; cursor:pointer; transition:background .12s, border-color .12s; display:inline-flex; align-items:center; justify-content:center; gap:6px; text-decoration:none; box-sizing:border-box; line-height:1; }
    .btn:hover { border-color:var(--border-2,var(--line)); background:var(--panel-2); }
    .btn.primary:hover { background:var(--green); }
    /* ── SAP Fiori 風工具列（panel-head 右上角查詢/期間/按鈕）── */
    .panel-head { background:linear-gradient(180deg,var(--panel),var(--panel-2)); }
    .panel-head .actions, .sv-head .actions { gap:8px; flex-wrap:wrap; align-items:center; }
    .panel-head .actions select, .sv-head .actions select {
      width:auto; min-width:140px; height:34px; min-height:34px;
      padding:0 30px 0 12px; border:1px solid var(--border-2,var(--line)); border-radius:8px;
      background-color:var(--panel); color:var(--ink); font-size:12.5px; font-weight:600; cursor:pointer;
      -webkit-appearance:none; appearance:none;
      background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 16 16' fill='none' stroke='%235f7389' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'><path d='M4 6l4 4 4-4'/></svg>");
      background-repeat:no-repeat; background-position:right 10px center;
      transition:border-color .12s, box-shadow .12s;
    }
    .panel-head .actions select:hover, .sv-head .actions select:hover { border-color:var(--muted); }
    .panel-head .actions select:focus, .sv-head .actions select:focus { outline:none; border-color:var(--green); box-shadow:0 0 0 3px rgba(20,184,166,.12); }
    .panel-head .actions label, .sv-head .actions label { display:inline-flex; flex-direction:row; align-items:center; gap:7px; font-size:11px; font-weight:800; color:var(--muted); text-transform:none; letter-spacing:0; white-space:nowrap; }
    .panel-head .actions .btn, .sv-head .actions .btn { height:34px; min-height:34px; border-radius:8px; font-weight:700; display:inline-flex; align-items:center; justify-content:center; }
    /* icon 按鈕（刷新 / 列印）：34x34 方形，對齊下拉 */
    .icon-btn { width:34px; height:34px; min-height:34px; padding:0; border:1px solid var(--border-2,var(--line)); border-radius:8px; background:var(--panel); color:var(--muted); display:inline-flex; align-items:center; justify-content:center; cursor:pointer; transition:background .12s, border-color .12s, color .12s; }
    .icon-btn svg { width:16px; height:16px; display:block; }
    .icon-btn:hover { background:var(--panel-2); border-color:var(--muted); color:var(--green); }
    .tb-divider { width:1px; height:24px; background:var(--line); display:inline-block; }
    /* 浮動視窗 modal */
    .modal-overlay { position:fixed; inset:0; background:rgba(16,35,56,.45); backdrop-filter:blur(2px); display:flex; align-items:center; justify-content:center; z-index:10050; padding:24px; animation:mfade .15s ease; }
    .modal-overlay[hidden] { display:none !important; }
    @keyframes mfade { from{opacity:0} to{opacity:1} }
    .modal { background:var(--panel); border-radius:14px; width:min(920px,96vw); max-height:88vh; display:flex; flex-direction:column; box-shadow:0 24px 70px rgba(11,37,64,.35); overflow:hidden; animation:mrise .18s ease; }
    #voucher-detail { width:min(1180px,96vw); }
    @keyframes mrise { from{transform:translateY(10px);opacity:.6} to{transform:none;opacity:1} }
    .modal-head { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:16px 18px; border-bottom:1px solid var(--line); background:linear-gradient(180deg,var(--panel),var(--panel-2)); }
    .modal-body { padding:16px 18px 20px; overflow:auto; }
    /* 清單篩選工具列（與網站一致） */
    .toolbar { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:0 0 14px; }
    .toolbar select, .toolbar input { height:34px; min-height:34px; box-sizing:border-box; border:1px solid var(--border-2,var(--line)); border-radius:8px; background:var(--panel); padding:0 10px; font:inherit; font-size:12.5px; color:var(--ink); width:auto; }
    .toolbar select { cursor:pointer; min-width:120px; }
    .toolbar input[type="date"] { width:150px; }
    .toolbar input:not([type="date"]) { width:200px; }
    .toolbar select:focus, .toolbar input:focus { outline:none; border-color:var(--green); box-shadow:0 0 0 3px rgba(20,184,166,.12); }
    /* 精簡匯入工具列 */
    .bt-bar { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:0 0 12px; }
    .bt-bar select, .bt-bar input { height:34px; min-height:34px; box-sizing:border-box; border:1px solid var(--border-2,var(--line)); border-radius:8px; background:var(--panel); padding:0 10px; font:inherit; font-size:12.5px; color:var(--ink); width:auto; }
    .bt-bar select { padding-right:8px; cursor:pointer; }
    .bt-bar #bt-amount { width:100px; text-align:right; }
    .bt-bar #bt-party { width:120px; }
    .bt-bar #bt-memo { width:150px; }
    .bt-bar select:focus, .bt-bar input:focus { outline:none; border-color:var(--green); box-shadow:0 0 0 3px rgba(20,184,166,.12); }
    /* SAP 區段切換（資產負債表/損益表） */
    .stmt-switch { border:1px solid var(--border-2,var(--line)); border-radius:9px; padding:3px; background:var(--panel-2); display:inline-flex; gap:3px; }
    .stmt-switch button { border:0; min-height:28px; height:28px; padding:0 16px; border-radius:6px; background:transparent; color:var(--muted); font-weight:700; font-size:12.5px; cursor:pointer; font-family:inherit; transition:background .12s, color .12s; }
    .stmt-switch button:hover { color:var(--ink); }
    .stmt-switch button.active { background:var(--panel); color:var(--green); box-shadow:0 1px 3px rgba(11,37,64,.12); }
    .btn.primary { background:var(--green); border-color:var(--green); color:var(--panel); }
    .btn.warn { background:var(--gold-soft); border-color:#e0c17b; color:var(--gold); }
    .btn.danger { background:var(--danger-soft); border-color:rgba(168,63,58,.35); color:var(--danger); }
    .btn:disabled { opacity:.45; cursor:not-allowed; }
    .body { padding:16px 18px 18px; }
    .grid2 { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
    .form { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin-bottom:14px; }
    label { display:grid; gap:5px; color:var(--muted); font-size:11px; font-weight:800; }
    input, select { width:100%; box-sizing:border-box; border:1px solid var(--line); border-radius:8px; background:var(--panel); min-height:36px; padding:0 10px; color:var(--ink); font:inherit; transition:border-color .12s, box-shadow .12s; }
    input:focus, select:focus { outline:none; border-color:var(--green); box-shadow:0 0 0 3px rgba(20,184,166,.12); }
    .wide { grid-column:span 2; }
    /* 新增憑證表單：三排明確版面（第一排日期～合約、第二排摘要、第三排附件與發票資訊），欄寬一致不佔空間 */
    #panel-vouchers .vform { display:flex; flex-direction:column; gap:12px; margin-bottom:14px; max-width:1040px; }
    #panel-vouchers .vform .vrow { display:flex; flex-wrap:wrap; gap:10px 12px; align-items:end; }
    #panel-vouchers .vform .vrow > label, #panel-vouchers .vform .vrow > .v-ocr-cell { flex:0 0 156px; }
    #panel-vouchers .vform .vrow > .wide { flex:0 0 324px; }
    #panel-vouchers .vform .vrow > .vfull { flex:1 1 100%; }
    /* 附件檔案選擇：把 Windows 原生按鈕換成與系統一致的樣式 */
    #panel-vouchers .vform input[type=file] { display:inline-flex; align-items:center; min-height:36px; padding:0 8px; font-size:12px; color:var(--muted); cursor:pointer; }
    #panel-vouchers .vform input[type=file]::file-selector-button { margin-right:10px; border:1px solid var(--line); background:var(--panel-2); color:var(--ink); border-radius:7px; padding:6px 12px; font:inherit; font-size:12px; font-weight:750; cursor:pointer; transition:border-color .12s, color .12s, background .12s; }
    #panel-vouchers .vform input[type=file]::file-selector-button:hover { border-color:var(--green); color:var(--green); background:rgba(20,184,166,.06); }
    #panel-vouchers .v-ocr-cell { display:flex; flex-direction:column; justify-content:flex-end; gap:3px; }
    #panel-vouchers .v-ocr-cell .btn { width:100%; min-height:36px; font-size:12px; padding:0 8px; }
    #panel-vouchers #v-ocr-status { font-size:11px; color:var(--muted); line-height:1.3; }
    table { width:100%; border-collapse:collapse; font-size:12px; }
    th, td { border-bottom:1px solid var(--line); padding:10px 8px; text-align:left; vertical-align:top; }
    th { color:var(--muted); font-size:11px; text-transform:uppercase; letter-spacing:.04em; background:var(--th); }
    .num { text-align:right; font-variant-numeric:tabular-nums; }
    .badge { display:inline-flex; align-items:center; min-height:22px; padding:0 9px; border:1px solid var(--line); border-radius:999px; color:var(--muted); font-size:11px; font-weight:800; }
    .badge.posted { color:var(--green); border-color:rgba(20,184,166,.35); background:rgba(20,184,166,.06); }
    .badge.draft { color:var(--gold); border-color:rgba(100,116,139,.38); background:rgba(100,116,139,.08); }
    .badge.pending { color:#b45309; border-color:rgba(245,158,11,.45); background:rgba(245,158,11,.10); }
    .badge.rejected { color:#dc2626; border-color:rgba(220,38,38,.40); background:rgba(220,38,38,.08); }
/* 日記帳：憑證號 / 操作 改成文字連結（hover 底線），狀態改成純文字 */
.lnk { color:var(--green); font-weight:750; cursor:pointer; text-decoration:none; white-space:nowrap; }
.lnk:hover, .lnk:focus-visible { text-decoration:underline; outline:none; }
.lnk.danger { color:var(--danger); }
.lnk-group { display:inline-flex; gap:12px; align-items:center; }
.stat { font-weight:800; font-size:12px; white-space:nowrap; }
.stat.posted { color:var(--green); }
.stat.draft { color:var(--gold); }
.stat.pending { color:#b45309; }
.stat.rejected { color:#dc2626; }
.stat.voided { color:var(--muted); text-decoration:line-through; }
    .table-wrap { border:1px solid var(--line); border-radius:10px; overflow:auto; -webkit-overflow-scrolling:touch; }
    .table-wrap table { border-collapse:separate; border-spacing:0; }
    .table-wrap th, .table-wrap td { border-bottom:1px solid var(--line); }
    .table-wrap tr:last-child td { border-bottom:0; }
    .table-wrap tr.filter-row th { background:var(--panel-2); padding:6px 8px; text-transform:none; letter-spacing:0; }
    .table-wrap tr.filter-row input,
    .table-wrap tr.filter-row select {
      min-height:30px;
      height:30px;
      border-radius:7px;
      padding:0 8px;
      font-size:12px;
      font-weight:500;
    }
    .table-wrap tr.filter-row .actions { flex-wrap:nowrap; gap:5px; }
    .table-wrap tr.filter-row .btn { min-height:30px; height:30px; padding:0 9px; font-size:12px; }
    .empty { color:var(--muted); padding:22px; text-align:center; border:1px dashed var(--line); border-radius:10px; background:var(--panel-2); }
    .split-card { border:1px solid var(--line); padding:14px; background:var(--panel); }
    .split-card h3 { margin:0 0 10px; font-size:15px; }
    /* 現代會計風格 表單分區 */
    .fa-layout { display:grid; grid-template-columns:minmax(0,1fr) 320px; gap:18px; align-items:start; }
    .fcard { border:1px solid var(--line); border-radius:12px; background:var(--panel); margin-bottom:16px; overflow:hidden; }
    .fcard > h4 { margin:0; padding:11px 16px; font-size:12px; font-weight:850; letter-spacing:.03em; color:var(--ink); background:var(--th); border-bottom:1px solid var(--line); text-transform:uppercase; }
    .fcard .fbody { padding:14px 16px; display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; }
    .fcard .fbody.cols2 { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .fa-aside { position:sticky; top:8px; border:1px solid var(--line); border-radius:12px; background:linear-gradient(180deg,var(--panel),var(--panel-2)); overflow:hidden; }
    .fa-aside h4 { margin:0; padding:11px 16px; font-size:12px; font-weight:850; color:var(--ink); background:var(--th); border-bottom:1px solid var(--line); text-transform:uppercase; letter-spacing:.03em; }
    .fa-aside .fa-prev { padding:14px 16px; }
    .fa-prev .pv-row { display:flex; justify-content:space-between; gap:10px; font-size:12.5px; padding:6px 0; border-bottom:1px dashed var(--line); }
    .fa-prev .pv-row:last-of-type { border-bottom:0; }
    .fa-prev .pv-k { color:var(--muted); font-weight:700; }
    .fa-prev .pv-v { font-weight:800; font-variant-numeric:tabular-nums; }
    .fa-prev .pv-je { margin-top:10px; padding-top:10px; border-top:1px solid var(--line); font-size:12px; }
    .fa-prev .pv-je .jl { display:flex; justify-content:space-between; padding:3px 0; color:var(--ink); }
    .fa-prev .pv-je .jl .acc { color:var(--muted); }
    .fa-aside .fa-actions { padding:0 16px 16px; }
    .fa-aside .fa-actions .btn { width:100%; justify-content:center; }
    @media(max-width:1100px){ .fa-layout{ grid-template-columns:1fr; } .fa-aside{ position:static; } }
    /* 資產類別切換列 */
    .fa-classbar { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin:0 0 16px; }
    .fa-cls { display:flex; flex-direction:column; gap:3px; align-items:flex-start; border:1px solid var(--line); border-radius:11px; background:var(--panel); padding:11px 14px; cursor:pointer; font-weight:850; font-size:14px; color:var(--ink); font-family:inherit; transition:all .12s; }
    .fa-cls small { font-weight:700; font-size:11px; color:var(--muted); }
    .fa-cls:hover { border-color:var(--green); }
    .fa-cls.active { border-color:var(--green); background:rgba(20,184,166,.06); box-shadow:0 0 0 3px rgba(20,184,166,.1); }
    .fa-cls.active, .fa-cls.active small { color:var(--green); }
    [data-only].hide-field { display:none; }
    @media(max-width:760px){ .fa-classbar{ grid-template-columns:repeat(2,1fr); } }
    /* 付款單號可點開拋轉明細 */
    .pd-link { color:var(--green); font-weight:800; cursor:pointer; text-decoration:none; border-bottom:1px dashed transparent; }
    .pd-link:hover { border-bottom-color:var(--green); }
    /* 科目明細列可點開日記帳 */
    .drill-row.has-voucher { cursor:pointer; }
    .drill-row.has-voucher:hover { background:var(--row-hover); }
    .drill-row.has-voucher:hover .pd-link { border-bottom-color:var(--green); }
    .btn.big { min-height:42px; padding:0 22px; font-size:14px; }
    /* 子頁（一次顯示一個） */
    .subview { display:none; }
    .subview.active { display:block; animation:svFade .18s ease; }
    .v-sheet-tabs { display:flex; gap:2px; flex-wrap:wrap; width:100%; border-bottom:1px solid var(--line); }
    .v-sheet-tab { display:inline-flex; align-items:center; border:0; border-bottom:2px solid transparent; border-radius:0; background:transparent; color:var(--muted); padding:8px 16px; margin-bottom:-1px; font:inherit; font-size:14px; font-weight:800; cursor:pointer; text-decoration:none; }
    .v-sheet-tab:hover { color:var(--ink); }
    .v-sheet-tab.active { color:var(--green); border-bottom-color:var(--green); }
    @keyframes svFade { from{ opacity:0; transform:translateY(4px);} to{ opacity:1; transform:none;} }
    .sv-head { margin:0 0 16px; padding-bottom:14px; border-bottom:1px solid var(--line); }
    .sv-title { font-size:16px; font-weight:850; color:var(--ink); padding-bottom:8px; border-bottom:1px solid var(--line); margin-bottom:12px; }
    .sv-desc { margin-top:5px; font-size:12.5px; line-height:1.6; color:var(--muted); max-width:760px; }
    .info-card { border:1px solid var(--line); border-radius:10px; background:linear-gradient(180deg,var(--panel),var(--panel-2)); overflow:hidden; }
    .info-row { display:flex; gap:14px; padding:12px 16px; border-bottom:1px solid var(--line); font-size:13px; }
    .info-row:last-child { border-bottom:0; }
    .info-k { flex-shrink:0; width:120px; color:var(--muted); font-weight:800; font-size:12px; }
    .info-v { color:var(--ink); }
    .acct-code-cell { font-variant-numeric:tabular-nums; }
    .acct-child { color:var(--muted); }
    .acct-child .acct-code-cell { padding-left:28px; position:relative; }
    .acct-child .acct-code-cell::before { content:'↳'; position:absolute; left:8px; color:var(--muted); }
    .acct-parent-row { background:var(--panel-2); font-weight:850; }
    /* Excel 式分錄表 */
    .je-grid { border:1px solid var(--border-2,var(--line)); border-radius:8px; overflow-x:auto; margin:8px 0 12px; }
    .je-head, .je-row { display:grid; grid-template-columns:var(--je-cols, 1.5fr .7fr 1fr .9fr .9fr .9fr .9fr .9fr .9fr .9fr 1.1fr 30px); min-width:var(--je-min,1130px); }
    .je-head { background:var(--panel-2); border-bottom:1px solid var(--line); overflow:hidden; }
    /* 一單一幣別：改用傳票層幣別，關閉逐列幣別/匯率欄，避免一張傳票混多種幣別 */
    .je-fx { display:none !important; }
    .je-head span { padding:8px 10px; font-size:11px; font-weight:800; color:var(--muted); letter-spacing:.02em; position:relative; overflow:visible; }
    .je-head span.num { text-align:right; }
    /* 手動憑證分錄欄寬可拖拉（同日記帳體驗）；灰線固定高度，不會往下噴到分錄列 */
    .je-head span .je-resizer { position:absolute; top:0; right:0; width:9px; height:100%; cursor:col-resize; user-select:none; z-index:3; }
    .je-head span .je-resizer::after { content:''; position:absolute; top:8px; right:3px; height:16px; width:2px; background:var(--line,#d8dee8); border-radius:2px; transition:background .12s; }
    .je-head span .je-resizer:hover::after, .je-head span .je-resizer.dragging::after { background:var(--green); }
    .je-row { border-bottom:1px solid var(--line); }
    .je-row:last-child { border-bottom:0; }
    .je-cell { border-right:1px solid var(--panel-2); }
    .je-cell:last-child { border-right:0; }
    .je-cell select, .je-cell input { width:100%; box-sizing:border-box; border:1px solid transparent; background:transparent; min-height:34px; padding:0 8px; font:inherit; font-size:12.5px; color:var(--ink); }
    .je-cell select:focus, .je-cell input:focus { border-color:var(--green); background:var(--panel); outline:none; }
    .je-cell input.num { text-align:right; font-variant-numeric:tabular-nums; }
    .je-row.locked { background:var(--gold-soft); }
    .je-row.locked .je-acct { display:flex; align-items:center; padding:0 8px; font-size:12px; font-weight:800; color:var(--gold); }
    .je-del { border:0; background:transparent; color:var(--muted); cursor:pointer; font-size:15px; line-height:1; }
    .je-del:hover { color:var(--danger); }
    .je-totals { display:flex; gap:20px; justify-content:flex-end; align-items:center; padding:10px 14px; background:var(--panel-2); border-top:1px solid var(--line); font-size:13px; }
    .je-totals b { font-variant-numeric:tabular-nums; }
    .je-diff.ok { color:var(--green); font-weight:800; }
    .je-diff.bad { color:var(--danger); font-weight:800; }
    /* 分錄表左右捲動箭頭（表格較寬時可左右移動） */
    .je-scroll-shell { position:relative; }
    .je-scroll-btn { position:absolute; top:1px; bottom:1px; z-index:6; width:30px; border:0; cursor:pointer; display:flex; align-items:center; justify-content:center; font-size:24px; font-weight:800; color:var(--green); opacity:.45; transition:opacity .12s; }
    .je-scroll-btn.left { left:1px; border-radius:8px 0 0 8px; background:linear-gradient(90deg,var(--panel) 45%,rgba(255,255,255,0) 100%); }
    .je-scroll-btn.right { right:1px; border-radius:0 8px 8px 0; background:linear-gradient(270deg,var(--panel) 45%,rgba(255,255,255,0) 100%); }
    .je-scroll-shell:hover .je-scroll-btn { opacity:.9; }
    .je-scroll-btn[disabled] { opacity:0; pointer-events:none; }
    .je-scroll-shell.no-xscroll .je-scroll-btn { display:none; }
    .detail-kv { display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 22px; margin-bottom:14px; padding:9px 14px; background:var(--panel-2); border:1px solid var(--line); border-radius:10px; font-size:12.5px; color:var(--ink); }
    .detail-kv div { display:flex; align-items:baseline; gap:6px; border:0; background:none; padding:0; }
    .detail-kv span { color:var(--muted); font-size:11px; font-weight:700; }
    .voucher-meta { margin-bottom:14px; border:1px solid var(--line); border-radius:10px; background:var(--panel-2); overflow:hidden; }
    .voucher-meta-main { display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 22px; padding:10px 14px; font-size:12.5px; color:var(--ink); }
    .voucher-meta-main div, .voucher-meta-grid div { display:flex; align-items:baseline; gap:6px; }
    .voucher-meta-main span, .voucher-meta-grid span { color:var(--muted); font-size:11px; font-weight:700; }
    .voucher-meta details { border-top:1px solid var(--line); }
    .voucher-meta summary { list-style:none; display:flex; align-items:center; gap:6px; padding:8px 14px; color:var(--green); font-size:12px; font-weight:850; cursor:pointer; user-select:none; }
    .voucher-meta summary::-webkit-details-marker { display:none; }
    .voucher-meta summary::before { content:'▸'; font-size:10px; transition:transform .12s; }
    .voucher-meta details[open] summary::before { transform:rotate(90deg); }
    .voucher-meta-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px 18px; padding:0 14px 12px; font-size:12.5px; color:var(--ink); }
    .detail-subtitle { margin:16px 0 8px; color:var(--ink); font-size:12px; font-weight:850; letter-spacing:.03em; text-transform:uppercase; }
    .detail-scroll-shell { position:relative; }
    .detail-scroll-shell .table-wrap { scroll-behavior:smooth; }
    .voucher-scroll-btn { position:absolute; top:1px; bottom:1px; z-index:4; width:34px; border:0; background:rgba(16,35,56,.02); color:var(--ink); opacity:.08; display:flex; align-items:center; justify-content:center; font-size:26px; font-weight:700; cursor:pointer; transition:opacity .12s, background .12s, color .12s; }
    .voucher-scroll-btn.left { left:1px; background:linear-gradient(90deg,var(--panel) 0%,rgba(255,255,255,0) 100%); }
    .voucher-scroll-btn.right { right:1px; background:linear-gradient(270deg,var(--panel) 0%,rgba(255,255,255,0) 100%); }
    .detail-scroll-shell:hover .voucher-scroll-btn, .voucher-scroll-btn:focus-visible { opacity:.55; color:var(--green); }
    .voucher-scroll-btn[disabled] { opacity:0; pointer-events:none; }
    .voucher-lines-table { width:max-content; min-width:100%; }
    .voucher-lines-table th, .voucher-lines-table td { white-space:nowrap; }
    .voucher-lines-table th { position:relative; user-select:none; }
    .voucher-lines-table td.vdesc { min-width:190px; white-space:normal; }
    .col-resizer { position:absolute; top:0; right:-4px; width:8px; height:100%; cursor:col-resize; touch-action:none; z-index:2; }
    .col-resizer::after { content:''; position:absolute; top:8px; bottom:8px; left:3px; width:1px; background:transparent; transition:background .12s; }
    .voucher-lines-table th:hover .col-resizer::after, .col-resizer.active::after { background:var(--green); }
    .toast { position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); width:min(560px, calc(100vw - 32px)); box-sizing:border-box; background:#17201d; color:#f5f7f8; padding:12px 16px; font-size:13px; line-height:1.45; box-shadow:var(--shadow); z-index:3000; border:1px solid rgba(255,255,255,.08); text-align:left; }
    /* ── 財務報表 BS / IS ── */
    .stmt-switch { display:inline-flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; background:var(--panel); }
    .stmt-switch button { border:0; background:var(--panel); color:var(--muted); padding:0 16px; min-height:36px; font-weight:800; font-size:13px; cursor:pointer; font-family:inherit; }
    .stmt-switch button.active { background:var(--green); color:var(--panel); }
    .stmt-view { display:none; }
    .stmt-view.active { display:block; }
    .stmt-kpis { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; margin:0 0 18px; }
    .stmt-kpi { border:1px solid var(--line); border-radius:10px; padding:14px 16px; background:linear-gradient(180deg,var(--panel),var(--panel-2)); }
    .stmt-kpi .k { color:var(--muted); font-size:11px; font-weight:800; letter-spacing:.03em; }
    .stmt-kpi .v { margin-top:8px; font-size:22px; font-weight:850; font-variant-numeric:tabular-nums; }
    .stmt-kpi.accent { border-color:rgba(20,184,166,.32); background:linear-gradient(180deg,rgba(20,184,166,.06),var(--panel)); }
    .stmt-kpi.accent .v { color:var(--green); }
    .chart-wrap { border:1px solid var(--line); border-radius:12px; background:var(--panel); padding:16px; }
    #cio-chart svg, #cf-chart svg { width:100%; height:auto; display:block; }
    .cio-bar-in { fill:url(#cioGradIn); }
    .cio-bar-out { fill:url(#cioGradOut); }
    .cio-bar-in, .cio-bar-out { transform-box:fill-box; transition:filter .18s, opacity .18s; cursor:pointer; }
    .cio-bar-in { transform-origin:50% 100%; animation:cioGrow .82s cubic-bezier(.16,1,.3,1) both; }
    .cio-bar-out { transform-origin:50% 0%; animation:cioGrow .82s cubic-bezier(.16,1,.3,1) both; }
    .cio-bar-in:hover { filter:brightness(1.08) drop-shadow(0 3px 9px rgba(16,185,129,.45)); }
    .cio-bar-out:hover { filter:brightness(1.06) drop-shadow(0 3px 9px rgba(244,63,94,.4)); }
    #cio-chart svg:hover .cio-bar-in:not(:hover), #cio-chart svg:hover .cio-bar-out:not(:hover) { opacity:.7; }
    #cf-chart svg:hover .cio-bar-in:not(:hover), #cf-chart svg:hover .cio-bar-out:not(:hover) { opacity:.7; }
    /* 現金流量表：可展開運算過程的明細列 */
    .stmt-table tr.line.calc > td:first-child { position:relative; }
    .stmt-table tr.line.calc { cursor:pointer; }
    .stmt-table tr.line.calc > td:first-child::before { content:'▸'; display:inline-block; width:14px; color:var(--muted); font-size:10px; transition:transform .15s; }
    .stmt-table tr.line.calc.open > td:first-child::before { transform:rotate(90deg); }
    .stmt-table tr.line.calc:hover > td { background:var(--row-hover); }
    .stmt-table tr.calc-detail > td { padding:0 18px 0 32px; border-bottom:1px solid var(--panel-2); }
    .stmt-table tr.calc-detail .calc-box { max-height:0; overflow:hidden; transition:max-height .2s ease; }
    .stmt-table tr.calc-detail.open .calc-box { max-height:320px; }
    .calc-inner { padding:9px 12px; margin:6px 0; background:var(--panel-2); border:1px solid var(--line); border-radius:8px; font-size:12px; color:var(--ink-soft); line-height:1.85; }
    .calc-inner .calc-formula { font-variant-numeric:tabular-nums; }
    .calc-inner .calc-formula b { color:var(--ink); }
    .calc-inner .calc-pos { color:var(--green); font-weight:700; }
    .calc-inner .calc-neg { color:var(--rose,#D9808E); font-weight:700; }
    .calc-inner .calc-note { color:var(--muted); font-size:11px; margin-top:3px; }
    /* 薪資計算明細（浮動視窗） */
    @keyframes cioGrow { 0% { transform:scaleY(0); opacity:0; } 60% { opacity:1; } 100% { transform:scaleY(1); opacity:1; } }
    .cio-net-line { fill:none; stroke:url(#cioGradNet); stroke-width:2.6; stroke-linejoin:round; stroke-linecap:round;
      stroke-dasharray:1; stroke-dashoffset:1; animation:cioDraw 1.35s cubic-bezier(.4,0,.2,1) .55s forwards;
      filter:drop-shadow(0 2px 6px rgba(99,102,241,.35)); }
    @keyframes cioDraw { to { stroke-dashoffset:0; } }
    /* 淨額曲線下的柔光面積（曲線畫完後浮現） */
    .cio-net-area { fill:url(#cioGradArea); opacity:0; animation:cioFade .9s ease-out 1.5s forwards; pointer-events:none; }
    @keyframes cioFade { to { opacity:1; } }
    /* 流星頭：沿曲線飛一遍，跟著描線筆尖走 */
    .cio-comet { fill:#C7D2FE; opacity:0; offset-rotate:0deg;
      filter:drop-shadow(0 0 6px rgba(129,140,248,.9)) drop-shadow(0 0 14px rgba(165,180,252,.5));
      animation:cioComet 1.35s cubic-bezier(.4,0,.2,1) .55s forwards; pointer-events:none; }
    @keyframes cioComet { 0% { opacity:0; offset-distance:0%; } 8% { opacity:1; } 90% { opacity:1; } 100% { opacity:0; offset-distance:100%; } }
    .cio-net-dot { fill:var(--panel); stroke:#6366F1; stroke-width:2.2; transform-box:fill-box; transform-origin:center;
      opacity:0; transform:scale(0); animation:cioPop .45s cubic-bezier(.34,1.56,.64,1) forwards; cursor:pointer; transition:transform .15s, filter .15s; }
    .cio-net-dot:hover { transform:scale(1.5); filter:drop-shadow(0 0 7px rgba(99,102,241,.7)); }
    @keyframes cioPop { to { opacity:1; transform:scale(1); } }
    /* 節點漣漪 */
    .cio-net-ring { fill:none; stroke:#818CF8; stroke-width:1.6; opacity:0; transform-box:fill-box; transform-origin:center; animation:cioRing .8s ease-out forwards; pointer-events:none; }
    @keyframes cioRing { 0% { opacity:.6; transform:scale(.4); } 100% { opacity:0; transform:scale(3.4); } }
    .cio-axis { stroke:var(--line); stroke-width:1; stroke-opacity:.45; stroke-dasharray:2 5; }
    .cio-zero { stroke:var(--muted); stroke-width:1.2; stroke-opacity:.55; }
    .cio-mlabel { fill:var(--muted); font-size:11px; font-weight:600;
      font-family:'Inter','PingFang TC','Microsoft JhengHei',system-ui,sans-serif;
      font-variant-numeric:tabular-nums; letter-spacing:.2px; }
    .cio-ylabel { fill:var(--muted); font-size:10.5px; font-weight:600; font-variant-numeric:tabular-nums;
      font-family:'Inter','PingFang TC',system-ui,sans-serif; opacity:0; animation:cioFade .5s ease-out .15s forwards; }
    .cio-xmonth { fill:var(--ink-soft); font-size:12px; font-weight:750; font-family:'Inter','PingFang TC','Microsoft JhengHei',system-ui,sans-serif;
      opacity:0; animation:cioRise .5s cubic-bezier(.16,1,.3,1) both; }
    .cio-xyear { fill:var(--muted); font-size:9.5px; font-weight:700; letter-spacing:.6px; opacity:0; animation:cioFade .5s ease-out .3s forwards; }
    @keyframes cioRise { 0% { opacity:0; transform:translateY(6px); } 100% { opacity:1; transform:translateY(0); } }
    .cio-vlabel { font-size:10px; font-weight:800; font-variant-numeric:tabular-nums; opacity:0; animation:cioFade .5s ease-out both; }
    .cio-vlabel.in { fill:#0D9488; } .cio-vlabel.out { fill:#E11D48; }
    @media (prefers-reduced-motion:reduce){
      .cio-bar-in, .cio-bar-out, .cio-net-dot, .cio-xmonth, .cio-ylabel, .cio-vlabel { animation:none; transform:none; opacity:1; }
      .cio-net-line { animation:none; stroke-dasharray:none; stroke-dashoffset:0; }
      .cio-net-area { animation:none; opacity:1; }
      .cio-comet, .cio-net-ring { display:none; }
    }
    .cio-legend { display:flex; gap:22px; justify-content:center; margin-top:14px; font-size:12px; font-weight:700; color:var(--muted); }
    .cio-legend span { display:inline-flex; align-items:center; gap:7px; }
    .cio-legend i { width:14px; height:14px; border-radius:4px; display:inline-block; }
    .cio-legend i.line { width:18px; height:3px; border-radius:3px; }
    .stmt-kpi.gold { border-color:rgba(100,116,139,.34); background:linear-gradient(180deg,rgba(100,116,139,.08),var(--panel)); }
    .stmt-kpi.gold .v { color:var(--gold); }
    .is-range-bar { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin:0 0 16px; padding:10px 12px; border:1px solid var(--line); border-radius:10px; background:var(--panel-2); }
    .inv-filter { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:0 0 14px; }
    .inv-filter input, .inv-filter select, .inv-filter .btn { min-height:32px; height:32px; width:auto; font-size:12.5px; padding:4px 8px; }
    .inv-filter input[type=date] { width:138px; }
    .inv-filter input:not([type=date]) { width:120px; }
    .inv-filter .sp { flex:1 1 auto; }
    .fhint { display:block; font-size:11px; color:var(--muted); margin-top:3px; font-weight:400; }
    /* 科目表：緊湊列高、小型操作鈕 */
    .acct-table td, .acct-table th { padding-top:5px; padding-bottom:5px; }
    .acct-table .actions .btn { min-height:24px; height:24px; padding:0 8px; font-size:11px; font-weight:700; }
    .acct-table .badge { font-size:10px; padding:1px 5px; }
    /* 全會計模組清單：操作鈕一律小型、列高緊湊 */
    .table-wrap table td { padding-top:6px; padding-bottom:6px; }
    .table-wrap table td .btn, .table-wrap table td .icon-btn { min-height:26px; height:26px; padding:0 9px; font-size:11.5px; font-weight:700; }
    .table-wrap table td .actions { gap:6px; }
    /* SAP 式交易碼 chip */
    .tcode-chip { display:inline-block; font-family:ui-monospace,Menlo,Consolas,monospace; font-size:11px; font-weight:800; letter-spacing:.5px;
      color:var(--green); background:rgba(20,184,166,.10); border:1px solid rgba(20,184,166,.22); border-radius:6px; padding:1px 7px; margin-right:9px; vertical-align:middle; }
    /* 會計命令面板 */
    .cmdk { background:var(--panel); border-radius:14px; width:min(620px,96vw); max-height:74vh; display:flex; flex-direction:column; box-shadow:0 24px 70px rgba(11,37,64,.4); overflow:hidden; }
    .cmdk-head { display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid var(--line); }
    .cmdk-head input { flex:1; border:0; background:transparent; font-size:16px; color:var(--ink); outline:none; font-family:inherit; }
    .cmdk-head .kbd { font-size:11px; color:var(--muted); border:1px solid var(--line); border-radius:5px; padding:2px 6px; }
    .cmdk-list { overflow-y:auto; padding:6px; }
    .cmdk-sec { font-size:10px; font-weight:800; letter-spacing:.1em; color:var(--muted); text-transform:uppercase; padding:10px 10px 4px; }
    .cmdk-item { display:flex; align-items:center; gap:10px; width:100%; border:0; background:transparent; color:var(--ink); text-align:left;
      padding:9px 10px; border-radius:8px; cursor:pointer; font-family:inherit; font-size:13.5px; }
    .cmdk-item .code { font-family:ui-monospace,Menlo,Consolas,monospace; font-size:11.5px; font-weight:800; color:var(--green);
      background:rgba(20,184,166,.10); border:1px solid rgba(20,184,166,.22); border-radius:6px; padding:2px 8px; min-width:62px; text-align:center; flex-shrink:0; }
    .cmdk-item .nm { flex:1; }
    .cmdk-item .grp { font-size:11px; color:var(--muted); }
    .cmdk-item.active, .cmdk-item:hover { background:rgba(20,184,166,.09); }
    .cmdk-empty { padding:24px; text-align:center; color:var(--muted); font-size:13px; }
    /* 錨定模式：從頂部搜尋框下拉（位置由 JS 設），背景不變暗 */
    .modal-overlay.cmdk-anchored { background:transparent; backdrop-filter:none; animation:none; padding:0; align-items:flex-start; justify-content:flex-start; }
    .cmdk-anchored .cmdk { border:1px solid var(--line); box-shadow:0 18px 48px rgba(11,37,64,.25); animation:mfade .15s ease; }
    .is-range-bar label { flex-direction:row; align-items:center; gap:6px; font-size:11px; color:var(--muted); }
    .is-range-bar input[type=month] { min-height:32px; }
    .is-range-spacer { flex:1; }
    .is-range-label { font-size:12px; font-weight:800; color:var(--green); }
    .is-presets { display:inline-flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; background:var(--panel); }
    .is-presets button { border:0; background:var(--panel); color:var(--muted); padding:0 13px; min-height:32px; font-weight:800; font-size:12px; cursor:pointer; font-family:inherit; border-right:1px solid var(--line); transition:background .12s, color .12s; }
    .is-presets button:last-child { border-right:0; }
    .is-presets button:hover { background:var(--panel-2); color:var(--ink); }
    .is-presets button.active { background:var(--green); color:var(--panel); }
    .stmt-wrap { display:grid; grid-template-columns:1fr 1fr; gap:20px; align-items:start; }
    .stmt-wrap.single { grid-template-columns:1fr; max-width:none; }
    .stmt-col { border:1px solid var(--line); border-radius:12px; background:var(--panel); overflow:hidden; box-shadow:0 1px 3px rgba(16,35,56,.05); }
    .stmt-col-title { font-size:12px; font-weight:850; letter-spacing:.06em; text-transform:uppercase; color:var(--ink); padding:13px 18px; border-bottom:1px solid var(--line); background:var(--panel-2); }
    .stmt-table { width:100%; border-collapse:collapse; font-size:13px; }
    .stmt-table td { padding:7px 18px; vertical-align:middle; }
    .stmt-table .amt { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
    /* 區段標題：淺色、留白、綠字、底線 */
    .stmt-table tr.sec td { padding:15px 18px 6px; font-size:11px; font-weight:850; letter-spacing:.07em; text-transform:uppercase; color:var(--green); border-bottom:1.5px solid rgba(20,184,166,.16); }
    .stmt-table tr.sec:first-child td { padding-top:8px; }
    /* 明細列 */
    .stmt-table tr.line td { color:var(--ink-soft); border-bottom:1px solid var(--panel-2); }
    .stmt-table tr.line:hover td { background:var(--row-hover); }
    .stmt-table tr.line .code { display:inline-block; min-width:44px; color:var(--muted); font-variant-numeric:tabular-nums; font-size:11px; margin-right:10px; }
    .stmt-table tr.line.stmt-summary td { font-weight:800; }
    .stmt-table tr.line.stmt-child td:first-child { padding-left:48px; }
    .stmt-table tr.line.stmt-child td { color:var(--ink-soft); font-size:12.5px; }
    .stmt-table tr.line.hidden { display:none; }
    .stmt-toggle { border:0; background:transparent; color:var(--green); width:20px; height:20px; margin-right:6px; cursor:pointer; font-weight:900; font-family:inherit; font-size:11px; line-height:1; }
    .stmt-indent { display:inline-block; width:26px; }
    .stmt-table tr.line.synthetic td { font-style:italic; color:var(--gold); }
    /* 小計：上方細線、粗體 */
    .stmt-table tr.sub td { font-weight:850; color:var(--ink); border-top:1.5px solid var(--line); padding:11px 18px; }
    /* 合計：上方雙線、綠字、放大、淺綠底 */
    .stmt-table tr.total td { font-weight:850; font-size:15px; color:var(--green); border-top:2.5px double var(--green); padding:14px 18px; background:rgba(20,184,166,.045); }
    .stmt-table tr.total td.amt, .stmt-table tr.total .amt { color:var(--green); }
    .stmt-table .drill { cursor:pointer; border-bottom:1px dashed var(--green); transition:background .12s; padding:1px 2px; border-radius:3px; }
    .stmt-table .drill:hover { background:var(--green-dim,rgba(20,184,166,.1)); color:var(--green); }
    .drill-meta { font-size:12px; color:var(--muted); font-weight:700; margin:0 0 12px; }
    .wh-reminder { display:flex; flex-direction:column; gap:6px; margin:0 0 14px; }
    .wh-rem { display:flex; align-items:center; gap:8px; padding:9px 13px; border-radius:9px; font-size:12.5px; font-weight:700; border:1px solid var(--line); background:var(--panel-2); }
    .wh-rem.due { border-color:var(--gold-line,rgba(100,116,139,.4)); background:var(--gold-soft); color:var(--gold); }
    .wh-rem.urgent { border-color:rgba(192,57,43,.4); background:var(--danger-soft); color:var(--danger); }
    .wh-rem b { font-variant-numeric:tabular-nums; }
    /* 日記帳 Excel 式 排序 / 篩選 */
    .journal-table th.sortable { cursor:pointer; user-select:none; white-space:nowrap; }
    .journal-table th.sortable:hover { color:var(--green); }
    .journal-table th .sarr { display:inline-block; width:12px; margin-left:3px; font-size:9px; color:var(--green); }
    /* 可調欄寬（固定版面 + colgroup 控制寬度，欄邊可拖拉；雙擊還原） */
    .journal-table { table-layout:fixed; width:max-content; min-width:100%; }
    .journal-table th, .journal-table tbody td { overflow:hidden; text-overflow:ellipsis; }
    .journal-table tbody td { white-space:nowrap; }
    .journal-table th { position:relative; }
    .journal-table th .col-resizer {
      position:absolute; top:0; right:0; width:9px; height:100%;
      cursor:col-resize; user-select:none; touch-action:none; z-index:3;
    }
    .journal-table th .col-resizer::after {
      content:''; position:absolute; top:20%; right:3px; height:60%; width:2px;
      background:var(--line,#d8dee8); border-radius:2px; transition:background .12s;
    }
    .journal-table th .col-resizer:hover::after,
    .journal-table th .col-resizer.dragging::after { background:var(--green); width:3px; }
    body.col-resizing, body.col-resizing * { cursor:col-resize !important; user-select:none !important; }
    .journal-table tr.jfilter-row th { background:var(--panel-2); padding:5px 8px; border-bottom:1px solid var(--line); }
    .journal-table tr.jfilter-row input, .journal-table tr.jfilter-row select { min-height:28px; font-size:12px; padding:0 7px; font-weight:500; }
    /* 日記帳欄位選擇器（顯示/隱藏 + 拖拉排序） */
    .jcols-panel { position:absolute; z-index:21000; width:230px; background:var(--panel,#fff); color:var(--ink,#0f1d31); border:1px solid var(--line); border-radius:10px; box-shadow:0 14px 40px rgba(7,30,65,.22); padding:10px; font-size:13px; }
    .jcols-title { font-weight:800; margin:2px 2px 8px; font-size:12.5px; }
    .jcols-list { max-height:300px; overflow:auto; }
    .jcols-item { display:flex; align-items:center; gap:8px; padding:6px 6px; border-radius:7px; }
    .jcols-item:hover { background:var(--panel-2,#f1f4f9); }
    .jcols-item.dragging { opacity:.5; background:rgba(20,184,166,.12); }
    .jcols-item label { display:flex; align-items:center; gap:7px; cursor:pointer; flex:1; }
    .jcols-item input { width:15px; height:15px; accent-color:var(--green,#14b8a6); }
    .jcols-grip { cursor:grab; color:var(--muted); font-size:12px; letter-spacing:-2px; user-select:none; }
    .jcols-foot { display:flex; justify-content:space-between; gap:8px; margin-top:9px; }
    .jcols-foot button { cursor:pointer; border:1px solid var(--line); background:var(--panel-2,#f6f8fb); color:inherit; border-radius:7px; padding:6px 13px; font-size:12.5px; font-weight:600; }
    .jcols-foot .jcols-close { background:var(--green,#14b8a6); border-color:var(--green,#14b8a6); color:#fff; }
    .stmt-balance { margin-top:16px; display:flex; align-items:center; gap:10px; padding:13px 18px; border-radius:10px; font-weight:800; font-size:13px; }
    .stmt-balance.ok { background:rgba(20,184,166,.07); color:var(--green); border:1px solid rgba(20,184,166,.28); }
    .stmt-balance.bad { background:var(--danger-soft); color:var(--danger); border:1px solid rgba(168,63,58,.35); }
    @media (max-width:980px){ .stmt-kpis{ grid-template-columns:repeat(2,minmax(0,1fr)); } .stmt-wrap{ grid-template-columns:1fr; } }
    @media (max-width: 980px) {
      .acct-page { padding:0; }
      .acct-head { padding:0; }
      .acct-head, .layout, .grid2 { grid-template-columns:1fr; display:grid; }
      .layout { display:block; border-top:1px solid var(--line); }
      .layout.tabs-railed { --tabs-w:1fr; }
      .kpis { grid-template-columns:repeat(2,minmax(0,1fr)); padding:0; }
      .layout > div { padding:14px 12px 40px; }
      /* 頂部列：漢堡 + 標題（手機才出現）*/
      .mnav-bar { display:flex; align-items:center; gap:10px; position:sticky; top:0; z-index:1500;
        padding:9px 12px; background:var(--panel); border-bottom:1px solid var(--line); }
      .mnav-btn { display:inline-flex; align-items:center; gap:7px; border:1px solid var(--line); background:var(--panel-2);
        color:var(--ink); border-radius:9px; padding:7px 12px; font-weight:800; font-size:13px; cursor:pointer; font-family:inherit; }
      .mnav-btn svg { width:17px; height:17px; }
      .mnav-title { font-size:13px; font-weight:800; color:var(--muted); letter-spacing:.04em; }
      /* 選單變抽屜：預設滑出畫面，不再佔版面 */
      .tabs {
        position:fixed; top:0; left:0; height:100vh; width:284px; max-width:84vw;
        display:block; grid-template-columns:none; z-index:3000;
        border-right:1px solid var(--line); border-bottom:0;
        transform:translateX(-102%); transition:transform .22s cubic-bezier(.32,.72,0,1);
        box-shadow:none; overflow-y:auto; padding:10px 10px 28px;
      }
      .tabs.open { transform:none; box-shadow:10px 0 40px rgba(11,37,64,.28); }
      .tabs-head { display:flex; }
      .nav-backdrop.open { display:block; position:fixed; inset:0; background:rgba(11,30,52,.5); z-index:2900; animation:mfade .15s ease; }
      /* 抽屜內還原大項目與小項目（非窄軌）*/
      .tabs.rail { width:284px; }
      .tabs.rail .tab-main { justify-content:flex-start; padding:10px 10px; gap:10px; }
      .tabs.rail .tab-main .label, .tabs.rail .tab-sublist { display:revert; }
      .tabs.rail .tab-main .ic, .tabs.rail .tab-main .ic svg { width:18px; height:18px; }
      .tab-group { padding:1px 0; }
      .form { grid-template-columns:1fr 1fr; }
      .wide { grid-column:span 2; }
      .je-grid { overflow-x:auto; }
      .je-head, .je-row { min-width:950px; }
      .panel-head { flex-wrap:wrap; }
      .modal-overlay { padding:10px; }
      .modal { width:100vw; max-width:100vw; max-height:92vh; }
      .voucher-meta-grid { grid-template-columns:1fr; }
      .table-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; }
      /* 所有表格（含未包 wrap 的財報 stmt-table / 報表）一律可橫向捲動，不再衝出畫面 */
      .layout table { display:block; max-width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; }
      .layout table > thead, .layout table > tbody, .layout table > tfoot { display:table; width:max-content; min-width:100%; }
    }
    @media (max-width: 560px) {
      .kpis, .form { grid-template-columns:1fr; }
      .wide { grid-column:auto; }
      .inv-filter input:not([type=date]), .inv-filter input[type=date] { width:calc(50% - 4px); }
      .inv-filter .sp { display:none; }
      .inv-filter .btn.primary { width:100%; }
      .panel-title { font-size:16px; }
      .layout > div { padding:12px 10px 40px; }
      /* 按鈕觸控更好按、工具列換行不擠 */
      .btn { min-height:36px; }
      .panel-head, .inv-filter, .toolbar { gap:8px; row-gap:8px; }
    }

/* Extracted block 2 from accounting.html */
    body.embed-money .mnav-bar,
    body.embed-money #acct-tabs,
    body.embed-money .nav-backdrop { display:none !important; }
    body.embed-money .acct-page { padding:0 !important; margin:0 !important; }
    body.embed-money .layout { display:block !important; min-height:100vh !important; }
    body.embed-money .layout > div { padding:0 !important; }
    body.embed-money .panel { padding:0 !important; border:0 !important; border-radius:0 !important; box-shadow:none !important; }
    body.embed-money .panel-head { border-radius:0 !important; }
    body.embed-money #ai-fab,
    body.embed-money #ai-fab-panel,
    body.embed-money .cfo-fab-tip,
    body.embed-money .lui-mobile-trigger { display:none !important; }
    body:not(.embed-money) .tab-group[data-group="money"] { display:none !important; }

/* Extracted block 3 from accounting.html */
    #ai-fab{position:fixed;right:24px;bottom:24px;width:60px;height:60px;border-radius:50%;border:none;cursor:pointer;background:transparent;box-shadow:none;z-index:300;display:flex;align-items:center;justify-content:center;transition:transform .15s,box-shadow .15s}
    #ai-fab svg{width:58px;height:58px;filter:drop-shadow(0 5px 12px rgba(7,30,65,.30))}
    .cfo-face .ex{opacity:0;transition:opacity .28s ease}
    .cfo-face:not([data-ex]) .ex-happy,
    .cfo-face[data-ex="happy"] .ex-happy,.cfo-face[data-ex="grin"] .ex-grin,.cfo-face[data-ex="content"] .ex-content,.cfo-face[data-ex="wink"] .ex-wink,.cfo-face[data-ex="surprised"] .ex-surprised,.cfo-face[data-ex="omouth"] .ex-omouth,.cfo-face[data-ex="pout"] .ex-pout,.cfo-face[data-ex="idle"] .ex-idle,.cfo-face[data-ex="sweat"] .ex-sweat,.cfo-face[data-ex="sleep"] .ex-sleep,.cfo-face[data-ex="love"] .ex-love,.cfo-face[data-ex="tongue"] .ex-tongue,.cfo-face[data-ex="angry"] .ex-angry,.cfo-face[data-ex="blush"] .ex-blush,.cfo-face[data-ex="cool"] .ex-cool,.cfo-face[data-ex="look"] .ex-look,.cfo-face[data-ex="money"] .ex-money,.cfo-face[data-ex="dizzy"] .ex-dizzy,.cfo-face[data-ex="thinking"] .ex-thinking,.cfo-face[data-ex="party"] .ex-party,.cfo-face[data-ex="smug"] .ex-smug,.cfo-face[data-ex="shush"] .ex-shush{opacity:1}
    .cfo-face .ex-money{transform-box:fill-box;transform-origin:center;animation:cfMoney 1.3s ease-in-out infinite}
    @keyframes cfMoney{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
    .cfo-face .ex-dizzy{transform-box:fill-box;transform-origin:center;animation:cfDizzy 1.6s ease-in-out infinite}
    @keyframes cfDizzy{0%,100%{transform:rotate(-11deg)}50%{transform:rotate(11deg)}}
    .cfo-face .ex-thinking .tb{animation:cfBubble 2.4s ease-in-out infinite}
    .cfo-face .ex-thinking .tb2{animation-delay:.3s}.cfo-face .ex-thinking .tb3{animation-delay:.6s}
    @keyframes cfBubble{0%,72%,100%{opacity:.3}22%,52%{opacity:1}}
    .cfo-face .ex-cool .cool-glasses{transform-box:fill-box;transform-origin:center;animation:cfGlasses 4.2s ease-in-out infinite}
    @keyframes cfGlasses{0%,55%,100%{transform:translateY(0)}70%,86%{transform:translateY(5px)}}
    .cfo-face .ex-tongue .tongue-wag{transform-box:fill-box;transform-origin:50% 0;animation:cfWag .5s ease-in-out infinite}
    @keyframes cfWag{0%,100%{transform:rotate(-10deg)}50%{transform:rotate(10deg)}}
    .cfo-face .ex-party .cf-c{transform-box:fill-box;transform-origin:center;animation:cfConf 1.8s linear infinite}
    @keyframes cfConf{0%{transform:translateY(0) rotate(0);opacity:1}100%{transform:translateY(26px) rotate(220deg);opacity:0}}
    #ai-fab.poke{animation:cfPoke .46s ease}
    @keyframes cfPoke{0%{transform:scale(1)}30%{transform:scale(.82)}62%{transform:scale(1.12)}100%{transform:scale(1)}}
    #ai-fab.spin{animation:cfSpin360 .85s cubic-bezier(.34,1.2,.4,1)}
    @keyframes cfSpin360{from{transform:rotate(0)}to{transform:rotate(360deg)}}
    .cfo-fab-tip{position:fixed;z-index:301;max-width:212px;background:#0B1F3A;color:#fff;font-size:12.5px;line-height:1.5;padding:8px 11px;border-radius:12px;box-shadow:0 8px 22px rgba(7,30,65,.28);opacity:0;transition:opacity .2s;pointer-events:none}
    .cfo-fab-tip.show{opacity:1}
    #ai-fab{touch-action:none}
    @media (prefers-reduced-motion:reduce){.cfo-face .ex-money,.cfo-face .ex-dizzy,.cfo-face .ex-thinking .tb,.cfo-face .ex-cool .cool-glasses,.cfo-face .ex-tongue .tongue-wag,.cfo-face .ex-party .cf-c{animation:none}#ai-fab.poke,#ai-fab.spin{animation:none}}
    #ai-fab:hover{transform:translateY(-2px) scale(1.07)}
    #ai-fab:active{transform:scale(.95)}
    #ai-fab::after{content:none}
    @keyframes aiFabPulse{0%{opacity:.6;transform:scale(.85)}70%{opacity:0;transform:scale(1.25)}100%{opacity:0}}
    #ai-fab-panel{position:fixed;right:24px;bottom:94px;width:384px;max-width:calc(100vw - 32px);height:560px;max-height:78vh;background:var(--panel,#fff);border:1px solid var(--line,#e4e9f0);border-radius:22px;box-shadow:0 20px 54px rgba(16,36,58,.26);z-index:300;display:none;flex-direction:column;overflow:hidden;opacity:0;transform:translateY(14px) scale(.97);transition:opacity .18s,transform .18s}
    #ai-fab-panel.open{display:flex;opacity:1;transform:none}
    .ai-fab-head{display:flex;align-items:center;gap:9px;padding:13px 15px;background:linear-gradient(140deg,#071E41,#14B8A6);color:#fff}
    .ai-fab-head .hav{width:32px;height:32px;border-radius:10px;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;flex:0 0 auto}
    .ai-fab-head .hav svg{width:19px;height:19px}
    .ai-fab-head .ht{flex:1;font-weight:700;font-size:14px;line-height:1.15}
    .ai-fab-head .ht small{display:block;font-weight:400;font-size:10.5px;opacity:.9;margin-top:1px}
    .ai-fab-head .x{background:rgba(255,255,255,.18);border:none;width:26px;height:26px;border-radius:50%;font-size:17px;cursor:pointer;color:#fff;line-height:1;flex:0 0 auto}
    .ai-fab-head .x:hover{background:rgba(255,255,255,.32)}
    #ai-fab-panel #ai-log{flex:1;overflow:auto;display:flex;flex-direction:column;gap:11px;padding:14px;background:var(--bg,#f4f6f9)}
    .ai-row{display:flex;gap:8px;align-items:flex-end}
    .ai-row.me{flex-direction:row-reverse}
    .ai-row .av{width:27px;height:27px;border-radius:50%;flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:14px;background:var(--panel);border:1px solid var(--line)}
    .ai-row.me .av{background:#0f766e;color:#fff;border:none}
    .ai-bubble{max-width:80%;padding:9px 12px;border-radius:16px;font-size:13px;line-height:1.55;box-shadow:0 1px 2px rgba(16,36,58,.07);word-break:break-word}
    .ai-row.ai .ai-bubble{background:var(--panel,#fff);border-bottom-left-radius:5px;color:var(--ink,#1a2635)}
    .ai-row.me .ai-bubble{background:#14B8A6;color:#fff;border-bottom-right-radius:5px}
    #ai-fab-panel #ai-draft{padding:0 14px 4px;background:var(--bg,#f4f6f9)}
    .ai-fab-input{display:flex;gap:7px;align-items:center;padding:10px 12px;border-top:1px solid var(--line);background:var(--panel,#fff)}
    .ai-fab-input .iconbtn{width:36px;height:36px;border-radius:50%;border:1px solid var(--line,#e4e9f0);background:var(--panel);color:var(--ink-soft);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:15px;flex:0 0 auto;padding:0;transition:.12s}
    .ai-fab-input .iconbtn:hover{border-color:#14B8A6}
    .ai-fab-input #ai-msg{flex:1;padding:10px 14px;border:1px solid var(--line,#cdd5e0);border-radius:999px;font-size:13px;outline:none;background:var(--panel-2);color:var(--ink);transition:border-color .12s}
    .ai-fab-input #ai-msg:focus{border-color:#14B8A6}
    .ai-fab-input #ai-send{width:36px;height:36px;border-radius:50%;border:none;background:#14B8A6;color:#fff;cursor:pointer;font-size:17px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;padding:0;transition:filter .12s}
    .ai-fab-input #ai-send svg{width:18px;height:18px}
    .ai-fab-input #ai-send:hover{filter:brightness(1.07)}
    .ai-fab-hint{font-size:10.5px;color:var(--muted,#8a9fb5);line-height:1.5;padding:0 15px 10px;background:var(--panel,#fff)}
    body.embed-money #ai-fab,
    body.embed-money #ai-fab-panel,
    body.embed-money .cfo-fab-tip,
