:root{--ink: #1f2430;--muted: #6b7280;--border: #e3e5ea;--bg: #fafafa;--card: #ffffff;--lead: #4338ca;--lead-bg: #eef0ff;--builder: #0f766e;--builder-bg: #e8f6f4;--adv: #b45309;--adv-bg: #fdf3e3;--warn: #b42318;--warn-bg: #fdeeec;--off: #9aa0ad;--off-bg: #f2f3f5;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink);background:var(--bg);font-size:15px}code{font-family:var(--mono);font-size:.86em}button{font:inherit;cursor:pointer}a{color:var(--lead)}.app{max-width:1240px;margin:0 auto;padding:22px 16px 36px}header h1{margin:0;font-size:1.65rem;letter-spacing:-.02em}.subtitle{margin:6px 0 0;max-width:76ch;color:var(--muted);font-size:.95rem;line-height:1.5}.links{margin:8px 0 0;font-size:.86rem}main{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;margin-top:18px;align-items:start}@media(max-width:900px){main{grid-template-columns:minmax(0,1fr)}}.col{min-width:0;display:flex;flex-direction:column;gap:14px}.card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px}.card h2,.out-title{margin:0;font-size:1rem;letter-spacing:-.01em}.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.card-hint{margin:6px 0 12px;color:var(--muted);font-size:.84rem;line-height:1.5}.out-title+.card-hint{margin-bottom:4px}label{display:flex;flex-direction:column;gap:3px;font-size:.74rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}input[type=text],input:not([type]),select{font:inherit;font-size:.88rem;padding:5px 7px;border:1px solid var(--border);border-radius:6px;background:#fff;color:var(--ink);min-width:0;width:100%}input[aria-invalid=true]{border-color:var(--warn);background:var(--warn-bg)}input:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--lead);outline-offset:1px}.lead-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) minmax(0,1fr);gap:10px}@media(max-width:420px){.lead-grid{grid-template-columns:minmax(0,1fr)}}button.add,button.remove{padding:5px 10px;border:1px solid var(--border);border-radius:6px;background:#fff;font-size:.82rem;color:var(--ink);white-space:nowrap}button.add:hover,button.remove:hover{border-color:#c6c9d0;background:#f4f5f7}button.remove{color:var(--warn);align-self:end}.rows{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.row{border:1px solid var(--border);border-left:3px solid var(--builder);border-radius:8px;padding:10px;background:#fcfdfd}.row.adversary{border-left-color:var(--adv);background:#fffdf8}.row-grid{display:flex;flex-wrap:wrap;gap:8px;align-items:end}.row-grid>label{flex:1 1 auto;min-width:0}.f-name{flex-basis:120px;min-width:120px}.f-model{flex:0 1 104px;min-width:104px}.f-folder{flex-grow:2;flex-basis:150px;min-width:140px}.f-role{flex:0 1 116px;min-width:116px}.f-ro{flex:0 0 auto;flex-direction:row;align-items:center;gap:5px;text-transform:none;letter-spacing:0;font-size:.78rem;padding-bottom:5px;white-space:nowrap}.f-ro input{width:auto;margin:0}.f-ro input:disabled{cursor:not-allowed}.f-ro:has(input:disabled){color:var(--off)}.row-grid>button.remove{flex:0 0 auto;margin-left:auto}.row-meta{margin:8px 0 0;font-size:.76rem;color:var(--muted)}.warn{margin:8px 0 0;padding:6px 8px;border-radius:6px;background:var(--warn-bg);border:1px solid #f3c9c3;color:var(--warn);font-size:.8rem;line-height:1.45}.warn.summary{margin-top:12px}.empty{margin:0 0 10px;font-size:.85rem;color:var(--muted)}.checkpoints{display:flex;flex-direction:column;gap:7px}.cp{display:flex;flex-direction:row;align-items:center;gap:8px;padding:7px 9px;border:1px solid var(--border);border-radius:7px;background:var(--off-bg);color:var(--off);text-transform:none;letter-spacing:0;font-size:.86rem;cursor:pointer}.cp.on{background:var(--adv-bg);border-color:#eccfa0;color:var(--ink)}.cp input{width:auto;margin:0}.cp-n{display:inline-grid;place-items:center;width:19px;height:19px;border-radius:50%;background:var(--off);color:#fff;font-size:.72rem;font-weight:600;font-variant-numeric:tabular-nums}.cp.on .cp-n{background:var(--adv)}.diagram{margin-top:14px;border:1px solid var(--border);border-radius:8px;padding:6px;background:#fcfcfd}.diagram svg{display:block;height:auto}.diagram text{font-family:system-ui,-apple-system,sans-serif}.n-title{font-size:13px;font-weight:600}.n-meta{font-size:10px;fill:var(--muted)}.n-folder{font-family:var(--mono);font-size:10.5px}.e-label{font-size:9.5px;fill:var(--muted)}.node rect,.node circle{stroke-width:1.2}.node.lead rect{fill:var(--lead-bg);stroke:var(--lead)}.node.lead .n-title{fill:var(--lead)}.node.builder rect{fill:var(--builder-bg);stroke:var(--builder)}.node.builder .n-title,.node.builder .n-folder{fill:var(--builder)}.node.builder.ro rect{stroke-dasharray:4 3}.node.adversary rect{fill:var(--adv-bg);stroke:var(--adv);stroke-dasharray:5 3}.node.adversary .n-title{fill:var(--adv)}.node.cp rect{fill:#fff;stroke:var(--adv)}.node.cp .cp-badge{fill:var(--adv);stroke:none}.node.cp .cp-num{font-size:11px;font-weight:700;fill:#fff}.node.cp .cp-text{font-size:11.5px;fill:var(--ink)}.node.cp.off rect{fill:var(--off-bg);stroke:var(--off);stroke-dasharray:4 3}.node.cp.off .cp-badge,.node.cp.off .cp-text{fill:var(--off)}.edge{fill:none;stroke:#8b90a0;stroke-width:1.2}.edge.dashed{stroke-dasharray:4 3}.diagram-legend{margin:6px 2px 2px;font-size:.74rem;color:var(--muted)}.overrides{margin:0;padding-left:18px;font-size:.83rem;line-height:1.6;color:var(--ink)}.overrides li+li{margin-top:5px}.output{gap:12px}.file{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:12px 12px 4px}.file-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.file-head h3{margin:0;font-size:.9rem;font-weight:600;min-width:0;overflow-wrap:anywhere}.file-head h3 code{font-size:.86rem}.lang{margin-left:7px;padding:1px 6px;border-radius:99px;background:var(--off-bg);color:var(--muted);font-size:.68rem;text-transform:uppercase;letter-spacing:.05em;vertical-align:1px}button.copy{padding:4px 11px;border:1px solid var(--border);border-radius:6px;background:#fff;font-size:.8rem;color:var(--ink);min-width:68px}button.copy:hover{border-color:#c6c9d0;background:#f4f5f7}button.copy.copied{border-color:var(--builder);color:var(--builder);background:var(--builder-bg)}.file-note{margin:7px 0 0;color:var(--muted);font-size:.78rem;line-height:1.5}.file pre{margin:9px 0 10px;padding:10px 11px;background:#f7f8fa;border:1px solid var(--border);border-radius:7px;overflow-x:auto;max-height:460px;overflow-y:auto}.file pre code{font-family:var(--mono);font-size:12px;line-height:1.5;white-space:pre;-moz-tab-size:2;tab-size:2}footer{margin-top:22px;padding-top:12px;border-top:1px solid var(--border);color:var(--muted);font-size:.8rem}
