:root{--ink: #1a1c22;--ink2: #4a4e59;--paper: #f6f5f1;--card: #fffefb;--line: #e2ded4;--line2: #d2cdc0;--pos: #1f7a4d;--neg: #b13c2b;--ip: #2f6f8f;--pers: #9a6b1f;--accent: #2f6f8f;--hl: #eef3f5;--danger: #b13c2b;--mono: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.45}.wrap{max-width:1180px;margin:0 auto;padding:20px 18px 80px}h1{font-size:20px;font-weight:650;margin:0 0 2px;letter-spacing:-.01em}.sub{color:var(--ink2);font-size:12.5px;margin-bottom:16px}.topbar{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.logout-btn{font-size:12.5px}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-card{background:var(--card);border:1px solid var(--line2);border-radius:12px;padding:28px 26px;width:100%;max-width:360px;box-shadow:0 8px 30px #00000014}.login-card h1{font-size:24px}.login-card .sub{margin-bottom:18px}.login-field{display:block;margin-bottom:12px}.login-field span{display:block;font-size:12px;color:var(--ink2);margin-bottom:4px}.login-field input{width:100%;font:inherit;padding:9px 11px;border:1px solid var(--line2);border-radius:8px;background:var(--card);color:var(--ink)}.login-submit{width:100%;padding:9px;margin-top:4px}.num{font-family:var(--mono);font-variant-numeric:tabular-nums}.pos{color:var(--pos)}.neg{color:var(--neg)}.muted{color:var(--ink2);font-size:12px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.chip{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:8px 11px;min-width:120px}.chip .k{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink2)}.chip .v{font-family:var(--mono);font-size:16px;font-weight:600;margin-top:2px}.tabs{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1.5px solid var(--line2);margin-bottom:0}.tab{padding:9px 15px;cursor:pointer;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;font-weight:550;color:var(--ink2);font-size:13.5px;margin-bottom:-1.5px;background:transparent;font-family:inherit}.tab.on{background:var(--card);border-color:var(--line2);color:var(--ink)}.panel{background:var(--card);border:1px solid var(--line2);border-top:none;border-radius:0 0 10px 10px;padding:18px}.bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}.period-bar{margin:0 0 14px}.period-label{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink2)}.period-label input[type=date]{font:inherit;padding:6px 9px;border:1px solid var(--line2);border-radius:7px;background:var(--card);color:var(--ink)}.note{font-size:12px;color:var(--ink2);background:var(--hl);border:1px solid var(--line);border-radius:7px;padding:8px 11px;margin-bottom:14px}.error-note{background:#fbeeec;border-color:#e6c4bd;color:var(--neg)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:6px 8px}th{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink2);border-bottom:1.5px solid var(--line2);font-weight:600}.r{text-align:right}.amt{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}.src-th-wide{width:150px}tr.sec td{background:#f0ede5;font-weight:650;border-top:1px solid var(--line2)}tr.art{cursor:pointer;border-bottom:1px solid var(--line)}tr.art:hover{background:var(--hl)}tr.art:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}tr.art td:first-child{padding-left:22px;position:relative}.caret{position:absolute;left:6px;color:var(--ink2);transition:transform .12s;display:inline-block}tr.art.open .caret{transform:rotate(90deg)}.art-n{color:var(--ink2);font-size:11.5px}tr.op td{font-size:12.5px;color:var(--ink2);border-bottom:1px dotted var(--line)}tr.op td:first-child{padding-left:40px}tr.op-excluded td{opacity:.55}.op-date{color:var(--ink2)}.op-cp{color:var(--ink)}.op-purpose{color:var(--ink2)}.op-note{color:var(--pers);font-style:italic}tr.total td{font-weight:700;border-top:2px solid var(--ink);border-bottom:none;padding-top:9px}.tag{font-size:10px;padding:1px 6px;border-radius:5px;font-weight:600;vertical-align:1px}.tag.ip{background:#e3eef3;color:var(--ip)}.tag.pers{background:#f3ebda;color:var(--pers)}input[type=search],input[type=text]{font:inherit;padding:7px 10px;border:1px solid var(--line2);border-radius:7px;background:var(--card);width:240px;color:var(--ink)}button.btn{font:inherit;font-size:12.5px;padding:6px 11px;border:1px solid var(--line2);background:var(--card);border-radius:7px;cursor:pointer;color:var(--ink)}button.btn:hover{background:var(--hl)}button.btn:disabled{opacity:.5;cursor:not-allowed}button.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.btn.primary:hover{filter:brightness(1.05)}button.btn.danger{color:var(--danger);border-color:#e6c4bd}button:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.rec-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:10px}.rec-stat{font-size:12.5px;color:var(--ink2);margin-bottom:10px}.rec-stat b{color:var(--accent);font-family:var(--mono)}.rlist{max-height:560px;overflow:auto;border:1px solid var(--line);border-radius:8px}.rrow{display:grid;grid-template-columns:30px 1fr 92px 92px;gap:6px;align-items:center;padding:6px 10px;border-bottom:1px solid var(--line);font-size:13px;cursor:pointer}.rrow:hover{background:var(--hl)}.rrow.chk{background:#eef5ef}.rrow .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rrow .meta{font-size:11px;color:var(--ink2)}.rrow .amt{font-size:12px;text-align:right;font-family:var(--mono)}.seg{display:inline-flex;border:1px solid var(--line2);border-radius:7px;overflow:hidden}.seg button{font:inherit;font-size:12px;padding:5px 10px;border:none;background:var(--card);cursor:pointer;border-right:1px solid var(--line2);color:var(--ink)}.seg button:last-child{border-right:none}.seg button.on{background:var(--accent);color:#fff}.legend{font-size:11.5px;color:var(--ink2);margin-top:6px}.dropzone{border:1.5px dashed var(--line2);border-radius:10px;padding:26px 18px;text-align:center;cursor:pointer;background:var(--card);margin-bottom:14px;transition:border-color .12s,background .12s}.dropzone:hover,.dropzone.over{border-color:var(--accent);background:var(--hl)}.dropzone p{margin:4px 0}.file-input{display:none}.rules-table th,.rules-table td{font-size:12.5px;vertical-align:middle}.rules-table .rule-pattern{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono)}.rule-edit input[type=number],.rule-edit input[type=text],.rule-edit select{font:inherit;font-size:12px;padding:4px 6px;border:1px solid var(--line2);border-radius:6px;background:var(--card);color:var(--ink);width:100%}.rule-edit .rule-num{width:64px}.rule-edit .rule-text{min-width:110px}.rule-actions{display:flex;gap:6px;white-space:nowrap}.rule-actions .btn{padding:4px 8px;font-size:12px}.pf-h3{margin:22px 0 10px;font-size:14px;font-weight:650}tr.pf-art td:first-child{padding-left:22px}tr.pf-art td{border-bottom:1px solid var(--line)}@media (max-width: 640px){.rrow{grid-template-columns:26px 1fr 80px}.rrow .amt.in{display:none}.src-th-wide{width:auto}}.toast{position:fixed;right:16px;bottom:16px;max-width:440px;display:flex;align-items:flex-start;gap:10px;padding:11px 12px 11px 14px;border-radius:9px;border:1px solid var(--line2);background:var(--card);color:var(--ink);font-size:13px;box-shadow:0 6px 24px #00000024;z-index:100;animation:toast-in .16s ease-out}.toast-error{background:#fbeeec;border-color:#e6c4bd;color:var(--neg)}.toast-success{background:#eef5ef;border-color:#bcd9c5;color:var(--pos)}.toast-text{flex:1}.toast-close{font:inherit;font-size:16px;line-height:1;cursor:pointer;border:none;background:transparent;color:inherit;padding:0 2px;opacity:.7}.toast-close:hover{opacity:1}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}
