:root{--paper: #f6f8f7;--surface: #ffffff;--ink: #1a2321;--ink-soft: #52605c;--ink-faint: #8a9691;--line: #dfe5e2;--line-strong: #c3ccc8;--mask: #0f6b57;--mask-soft: #e2efeb;--mask-deep: #0a4a3c;--copper: #b4642a;--copper-soft: #f6ebe1;--danger: #b3372e;--danger-soft: #f7e7e5;--warn: #92660a;--warn-soft: #f7efdc;--mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--sans: "IBM Plex Sans", "PingFang TC", "Microsoft JhengHei", system-ui, sans-serif;--radius: 6px;--shadow: 0 1px 2px rgba(26, 35, 33, .06)}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--sans);font-size:13.5px;line-height:1.55;color:var(--ink);background:radial-gradient(circle at 1px 1px,rgba(15,107,87,.05) 1px,transparent 0) 0 0 / 22px 22px,var(--paper);-webkit-font-smoothing:antialiased}.shell{display:flex;height:100%}.sidebar{width:218px;flex-shrink:0;display:flex;flex-direction:column;background:var(--mask-deep);color:#e8f1ee;padding:20px 14px 14px}.brand{padding:0 8px 18px;border-bottom:1px solid rgba(232,241,238,.15)}.brand h1{font-size:16px;font-weight:700;letter-spacing:.02em}.brand .sub{font-size:11px;color:#9dbcb3;margin-top:3px;line-height:1.4}.brand .demo-tag{display:inline-block;margin-top:8px;padding:1px 8px;border-radius:999px;font-size:10.5px;font-weight:600;letter-spacing:.08em;background:#e8f1ee24;color:#cfe3dd}.nav{margin-top:14px;display:flex;flex-direction:column;gap:2px}.nav button{all:unset;cursor:pointer;padding:8px 10px;border-radius:var(--radius);font-size:13px;color:#cfe3dd;display:flex;align-items:center;gap:9px}.nav button .n{font-family:var(--mono);font-size:10.5px;color:#86a89f;width:14px}.nav button:hover{background:#e8f1ee14}.nav button:focus-visible{outline:2px solid #cfe3dd;outline-offset:-2px}.nav button.active{background:#e8f1ee29;color:#fff;font-weight:600}.nav button.active .n{color:#d8a87c}.sidebar .foot{margin-top:auto;padding:10px 8px 0;font-size:11px;color:#86a89f;line-height:1.5}.sidebar .foot .ai-mode{font-family:var(--mono);font-size:10.5px}.sidebar .foot button{all:unset;cursor:pointer;margin-top:8px;font-size:11.5px;color:#cfe3dd;text-decoration:underline;text-underline-offset:2px}.sidebar .foot button:focus-visible{outline:2px solid #cfe3dd}.main{flex:1;overflow-y:auto;padding:26px 30px 60px}.main-inner{max-width:1160px;margin:0 auto}.page-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap}.page-head h2{font-size:20px;font-weight:700;letter-spacing:.01em}.page-head .crumb{font-size:12px;color:var(--ink-faint)}.page-head .crumb button{all:unset;cursor:pointer;color:var(--mask);text-decoration:underline;text-underline-offset:2px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:16px}.card>.card-head{padding:11px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.card>.card-head h3{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:8px}.card>.card-head h3 .step-no{font-family:var(--mono);font-size:10.5px;color:var(--mask);border:1px solid var(--mask);border-radius:3px;padding:0 5px}.card>.card-body{padding:14px 16px}.card>.card-body.flush{padding:0}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}.kpi .v{font-family:var(--mono);font-size:24px;font-weight:600;line-height:1.15}.kpi .v .unit{font-size:12px;color:var(--ink-faint);font-weight:400;margin-left:3px}.kpi .k{font-size:11.5px;color:var(--ink-soft);margin-top:3px}.kpi.alert .v{color:var(--danger)}table{width:100%;border-collapse:collapse;font-size:12.8px}thead th{text-align:left;font-size:11px;font-weight:600;color:var(--ink-soft);letter-spacing:.04em;padding:8px 12px;border-bottom:1px solid var(--line-strong);background:#fbfcfb;white-space:nowrap}tbody td{padding:8px 12px;border-bottom:1px solid var(--line);vertical-align:top}tbody tr:last-child td{border-bottom:none}tbody tr.clickable{cursor:pointer}tbody tr.clickable:hover{background:var(--mask-soft)}td.num,th.num{text-align:right;font-family:var(--mono);font-size:12.3px;white-space:nowrap}.mono{font-family:var(--mono);font-size:12.3px}.dim{color:var(--ink-faint)}.small{font-size:11.5px}.chip{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;font-weight:600;white-space:nowrap;border:1px solid transparent}.chip.green{background:var(--mask-soft);color:var(--mask-deep)}.chip.copper{background:var(--copper-soft);color:#8a4a1c}.chip.red{background:var(--danger-soft);color:var(--danger)}.chip.amber{background:var(--warn-soft);color:var(--warn)}.chip.gray{background:#eef1f0;color:var(--ink-soft)}.chip.outline{background:transparent;border-color:var(--line-strong);color:var(--ink-soft);font-weight:500}.btn{font-family:var(--sans);font-size:12.5px;font-weight:600;cursor:pointer;border-radius:var(--radius);padding:6px 14px;border:1px solid transparent;transition:background .12s ease}.btn:focus-visible{outline:2px solid var(--mask);outline-offset:2px}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--mask);color:#fff}.btn.primary:hover:not(:disabled){background:var(--mask-deep)}.btn.ghost{background:transparent;border-color:var(--line-strong);color:var(--ink)}.btn.ghost:hover:not(:disabled){background:var(--mask-soft);border-color:var(--mask)}.btn.copper{background:var(--copper);color:#fff}.btn.copper:hover:not(:disabled){background:#935120}.btn.danger{background:transparent;border-color:var(--danger);color:var(--danger)}.btn.danger:hover:not(:disabled){background:var(--danger-soft)}.btn.sm{padding:3px 10px;font-size:11.5px}input[type=text],input[type=number],select,textarea{font-family:var(--sans);font-size:12.8px;color:var(--ink);border:1px solid var(--line-strong);border-radius:var(--radius);padding:6px 9px;background:var(--surface)}input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--mask);outline-offset:1px;border-color:var(--mask)}textarea{width:100%;font-family:var(--mono);font-size:12px;line-height:1.5}label.f{display:flex;flex-direction:column;gap:4px;font-size:11.5px;color:var(--ink-soft);font-weight:600}.form-row{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap}.trace{display:flex;align-items:flex-start;padding:18px 8px 6px;overflow-x:auto}.trace .node{display:flex;flex-direction:column;align-items:center;min-width:96px;position:relative}.trace .node .via{width:18px;height:18px;border-radius:50%;border:2.5px solid var(--copper);background:var(--surface);box-shadow:0 0 0 3px var(--surface);z-index:1;position:relative}.trace .node .via:after{content:"";position:absolute;top:4px;right:4px;bottom:4px;left:4px;border-radius:50%;background:transparent}.trace .node.done .via{border-color:var(--mask)}.trace .node.done .via:after{background:var(--mask)}.trace .node.now .via{border-color:var(--mask);animation:via-pulse 2.4s ease-in-out infinite}.trace .node.now .via:after{background:var(--copper)}.trace .node .lbl{margin-top:8px;font-size:11.5px;color:var(--ink-soft);text-align:center;line-height:1.35}.trace .node .lbl .no{font-family:var(--mono);font-size:10px;color:var(--ink-faint);display:block}.trace .node.now .lbl{color:var(--ink);font-weight:700}.trace .link{flex:1;height:2px;background:var(--copper);opacity:.45;margin-top:8px;min-width:22px;position:relative}.trace .link.done{background:var(--mask);opacity:1}@keyframes via-pulse{0%,to{box-shadow:0 0 0 3px var(--surface)}50%{box-shadow:0 0 0 3px var(--surface),0 0 0 7px #0f6b5729}}@media(prefers-reduced-motion:reduce){.trace .node.now .via{animation:none}}.avl-list{display:flex;flex-direction:column;gap:3px}.avl-row{display:flex;align-items:center;gap:7px;font-size:12px}.avl-row .mono{font-size:11.8px}.avl-row input[type=checkbox]{accent-color:var(--copper);width:14px;height:14px}.audit-row .actor{font-weight:600;white-space:nowrap}.audit-row .actor.ai{color:#8a4a1c}.audit-row .actor.system{color:var(--mask-deep)}.diff{font-family:var(--mono);font-size:11.5px}.diff .b{color:var(--danger);text-decoration:line-through}.diff .a{color:var(--mask-deep)}.reason-quote{border-left:3px solid var(--copper);padding:2px 8px;margin-top:3px;font-size:12px;color:var(--ink-soft);background:var(--copper-soft);border-radius:0 4px 4px 0}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#1a232166;display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.modal{background:var(--surface);border-radius:8px;box-shadow:0 12px 40px #1a232140;width:min(560px,100%);max-height:86vh;overflow-y:auto;padding:20px}.modal h4{font-size:15px;margin-bottom:4px}.modal .modal-sub{font-size:12px;color:var(--ink-soft);margin-bottom:14px}.modal .actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.note{border:1px solid var(--line);border-left:3px solid var(--mask);border-radius:0 var(--radius) var(--radius) 0;background:var(--mask-soft);padding:8px 12px;font-size:12.3px;margin:10px 0;color:var(--mask-deep)}.note.warn{border-left-color:var(--warn);background:var(--warn-soft);color:var(--warn)}.note.danger{border-left-color:var(--danger);background:var(--danger-soft);color:var(--danger)}.note.copper{border-left-color:var(--copper);background:var(--copper-soft);color:#8a4a1c}.toast{position:fixed;bottom:22px;right:22px;z-index:60;background:var(--ink);color:#fff;padding:10px 16px;border-radius:var(--radius);font-size:12.8px;box-shadow:0 6px 20px #1a23214d;max-width:420px}.toast.err{background:var(--danger)}.empty{padding:34px 20px;text-align:center;color:var(--ink-faint);font-size:12.8px}.upload-zone{border:1.5px dashed var(--line-strong);border-radius:var(--radius);padding:22px;text-align:center;color:var(--ink-soft);background:#fbfcfb}.upload-zone .or{font-size:11px;color:var(--ink-faint);margin:8px 0}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:900px){.grid-2{grid-template-columns:1fr}.sidebar{width:64px;padding:14px 6px}.brand h1,.brand .sub,.brand .demo-tag,.nav button span.t,.sidebar .foot{display:none}.main{padding:16px}}.scroll-x{overflow-x:auto}
