:root{
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  color:#18212f;background:#f4f6f9;--nav:#101827;--panel:#fff;--line:#e4e8ef;--muted:#6b778c;
  --primary:#3157d5;--primary-soft:#eef2ff;--success:#17845b;--danger:#c13c48;--warning:#a36b00;
}
*{box-sizing:border-box}body{margin:0;min-width:320px}button,input,select,textarea{font:inherit}button{cursor:pointer;border:0}.hidden{display:none!important}
.login-screen{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(145deg,#0f172a,#1e293b)}
.login-card{width:min(420px,100%);background:#fff;border-radius:18px;padding:34px;box-shadow:0 24px 70px rgba(0,0,0,.28)}
.brand-mark{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:#3157d5;color:#fff;font-weight:800;letter-spacing:.04em}.brand-mark.small{width:36px;height:36px;border-radius:10px;font-size:13px}.login-card h1{margin:18px 0 3px}.login-card p{margin:0 0 22px;color:var(--muted)}
label{display:block;font-size:12px;font-weight:700;color:#4d5a6d;margin:12px 0 6px}input,select,textarea{width:100%;border:1px solid #cfd6e2;border-radius:9px;padding:10px 11px;background:#fff;color:#172033;outline:none}input:focus,select:focus,textarea:focus{border-color:#758be4;box-shadow:0 0 0 3px #eef2ff}textarea{resize:vertical;font-family:inherit}.form-error{min-height:20px;margin-top:10px;color:var(--danger);font-size:13px}
button{border-radius:9px;padding:9px 13px;background:#e9edf4;color:#263244;font-weight:700;font-size:13px}button:hover{filter:brightness(.98)}button:disabled{opacity:.45;cursor:not-allowed}.primary{background:var(--primary);color:#fff}.secondary{background:#25344d;color:#fff}.success{background:var(--success);color:#fff}.danger{background:var(--danger);color:#fff}.ghost{background:transparent;border:1px solid #d7dde7}.wide{width:100%}.icon-btn{padding:7px 10px;background:#f2f4f8;color:#435066}
.app-shell{display:grid;grid-template-columns:230px minmax(0,1fr);min-height:100vh}.sidebar{background:var(--nav);color:#dbe4f2;padding:18px 14px;display:flex;flex-direction:column;gap:22px}.sidebar-brand{display:flex;gap:10px;align-items:center;padding:0 6px}.sidebar-brand strong{display:block;font-size:14px}.sidebar-brand span{display:block;font-size:10px;color:#8997ad;margin-top:2px;text-transform:uppercase;letter-spacing:.08em}.sidebar nav{display:grid;gap:5px}.nav-btn{background:transparent;color:#aebbd0;text-align:left;display:flex;align-items:center;gap:10px;padding:10px 12px}.nav-btn.active,.nav-btn:hover{background:#1d2a3f;color:#fff}.sidebar-footer{margin-top:auto;color:#93a0b5;font-size:11px;padding:8px}.health-dot{color:#62d69a;margin-right:5px}.health-dot.bad{color:#ff6d78}
.workspace{min-width:0}.topbar{height:82px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:16px 24px;position:sticky;top:0;z-index:20}.topbar h1{font-size:20px;margin:0}.topbar p{font-size:12px;color:var(--muted);margin:4px 0 0}.user-menu{display:flex;align-items:center;gap:12px}.user-menu div{text-align:right}.user-menu strong{display:block;font-size:13px}.user-menu span{display:block;font-size:10px;color:var(--muted);margin-top:2px}.view{display:none;padding:20px 22px 40px}.view.active{display:block}.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;box-shadow:0 3px 12px rgba(22,32,51,.035)}.panel h2{font-size:16px;margin:0}.panel h3{font-size:13px;margin:14px 0 4px}.panel-title{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}.panel-title p,.graph-toolbar p{font-size:11px;color:var(--muted);margin:4px 0 0}.policies-layout{display:grid;grid-template-columns:285px minmax(0,1fr);gap:16px}.policy-panel{align-self:start;position:sticky;top:102px;max-height:calc(100vh - 122px);overflow:auto}.policy-list{display:grid;gap:7px}.policy-item{border:1px solid #e1e6ef;border-radius:10px;padding:10px;background:#fff;text-align:left}.policy-item.active{border-color:#96a8ef;background:#f6f7ff}.policy-item strong{display:block;font-size:12px}.policy-item .meta{display:flex;justify-content:space-between;align-items:center;margin-top:5px;font-size:10px;color:var(--muted)}.stack-form{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}.stack-form h3{margin-top:0}.stack-form button{margin-top:12px}.designer-area{display:grid;gap:16px;min-width:0}.policy-heading{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.eyebrow{text-transform:uppercase;letter-spacing:.08em;color:#748096;font-size:10px;font-weight:800}.heading-row{display:flex;align-items:center;gap:9px;margin-top:3px}.heading-row h2{font-size:20px}.policy-heading p{font-size:11px;color:var(--muted);margin:4px 0 0}.toolbar{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}.status{font-size:9px;font-weight:800;padding:4px 7px;border-radius:999px;background:#eef0f4;color:#566176}.status.DRAFT{background:#eef2ff;color:#3856b7}.status.PENDING_APPROVAL{background:#fff4d8;color:#8b6100}.status.ACTIVE{background:#ddf7eb;color:#16724f}.status.ARCHIVED{background:#eceff3;color:#6c7584}.validation-bar{font-size:11px;padding:8px 10px;border-radius:8px;margin:12px 0}.validation-bar.neutral{background:#f4f6f9;color:#667286}.validation-bar.ok{background:#e4f7ee;color:#146d4b}.validation-bar.error{background:#fde9eb;color:#9d2f3b}.validation-bar.warn{background:#fff4d8;color:#896100}.policy-meta-grid{display:grid;grid-template-columns:1fr 1.4fr 1.2fr auto;gap:9px;align-items:end}.policy-meta-grid label{margin:0}.align-end{padding-bottom:1px}
.graph-panel{padding:0;overflow:hidden}.graph-toolbar{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px}.graph-toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.graph-layout-switch{flex:0 0 auto}.graph-and-inspector{display:grid;grid-template-columns:minmax(0,1fr) 320px;min-height:680px}.graph-viewport{overflow:auto;overscroll-behavior:contain;background-color:#f8fafc;background-image:radial-gradient(#dce2eb 1px,transparent 1px);background-size:20px 20px;border-right:1px solid var(--line);height:680px;scrollbar-gutter:stable}.graph-stage{position:relative;width:1600px;height:2200px;min-width:100%;min-height:100%}.graph-edges{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}.graph-edge{fill:none;stroke:#aab4c4;stroke-width:2}.graph-edge.true{stroke:#4e9f78}.graph-edge.false{stroke:#c66a73;stroke-dasharray:5 4}.edge-label{font-size:10px;font-weight:800;fill:#6f7b8f;paint-order:stroke;stroke:#f8fafc;stroke-width:4px;stroke-linejoin:round}.node{position:absolute;width:220px;min-height:88px;background:#fff;border:1px solid #d7dde8;border-radius:11px;box-shadow:0 4px 13px rgba(25,35,52,.09);overflow:hidden;user-select:none}.node.selected{outline:3px solid #cbd5ff;border-color:#7087e5}.node-header{padding:7px 9px;font-size:9px;text-transform:uppercase;letter-spacing:.08em;font-weight:800;color:#677387;background:#f6f7fa;cursor:grab}.graph-stage.vertical-layout .node-header{cursor:pointer}.graph-stage.vertical-layout .node{transition:left .18s ease,top .18s ease}.node.START .node-header{background:#eaf0ff;color:#3c56ad}.node.DECISION.APPROVE .node-header{background:#e3f6ed;color:#146e4c}.node.DECISION.REJECT .node-header{background:#fce9eb;color:#a33742}.node.DECISION.REVIEW .node-header{background:#fff3d8;color:#8a6200}.node-body{padding:9px}.node-title{font-size:12px;font-weight:800;line-height:1.2}.node-expression{font-size:10px;color:#6a7587;margin-top:6px;line-height:1.35;word-break:break-word}.node-branch-row{display:flex;justify-content:space-between;font-size:9px;font-weight:800;margin-top:7px}.node-branch-row .yes{color:#36855f}.node-branch-row .no{color:#b44d58}.node-inspector{padding:14px;overflow:auto;background:#fff}.empty-inspector{color:var(--muted);font-size:12px;margin-top:20px;text-align:center}.inspector-title{display:flex;justify-content:space-between;align-items:center}.inspector-title h3{margin:0;font-size:14px}.inspector-grid{display:grid;gap:2px}.inspector-actions{display:flex;gap:7px;margin-top:14px}.inspector-help{font-size:10px;color:var(--muted);background:#f6f8fb;border-radius:8px;padding:8px;margin-top:10px}.readonly-note{font-size:11px;color:#775b00;background:#fff7df;padding:8px;border-radius:8px;margin-bottom:10px}
.two-col{display:grid;grid-template-columns:minmax(320px,.8fr) minmax(420px,1.2fr);gap:16px}.result-panel h3{font-size:13px;margin:18px 0 8px}.decision-result{padding:18px;border-radius:12px;font-size:24px;font-weight:900;text-align:center;background:#edf0f5;color:#647084}.decision-result.APPROVE{background:#dff6eb;color:#14714e}.decision-result.REJECT{background:#fbe6e9;color:#a3323e}.decision-result.REVIEW{background:#fff1cf;color:#895f00}.result-summary{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-top:10px}.summary-card{background:#f7f8fa;border-radius:9px;padding:9px;font-size:11px}.summary-card strong{display:block;font-size:12px;margin-top:2px}.path-list{display:grid;gap:8px}.path-step{border-left:3px solid #cfd6e2;background:#f8f9fb;padding:9px 10px;border-radius:0 8px 8px 0;font-size:11px}.path-step.pass{border-color:#4f9d77}.path-step.fail{border-color:#bf5f68}.path-step strong{display:block;margin-bottom:3px}.empty-state{color:var(--muted);font-size:12px;padding:18px;text-align:center}.muted{color:var(--muted);font-weight:400}.segmented{display:flex;background:#eef1f5;border-radius:9px;padding:3px}.segmented button{background:transparent;padding:6px 10px;color:#657083}.segmented button.active{background:#fff;color:#223047;box-shadow:0 1px 4px rgba(0,0,0,.08)}.table-wrap{overflow:auto}.table-wrap table{width:100%;border-collapse:collapse;font-size:11px}.table-wrap th,.table-wrap td{text-align:left;padding:9px 7px;border-bottom:1px solid #e8ebf1;vertical-align:top;white-space:nowrap}.table-wrap th{font-size:9px;color:#748096;text-transform:uppercase;letter-spacing:.05em;background:#fafbfc;position:sticky;top:0}.table-wrap td.wrap{white-space:normal;min-width:220px}.mini-status{font-size:9px;font-weight:800;border-radius:999px;padding:3px 6px;background:#eef1f5}.mini-status.APPROVE{background:#e0f6eb;color:#13704e}.mini-status.REJECT{background:#fbe7ea;color:#a0333e}.mini-status.REVIEW{background:#fff2d3;color:#8a6100}.secret-box{margin-top:14px;padding:12px;border-radius:10px;background:#fff7df;border:1px solid #efd994}.secret-box code{display:block;word-break:break-all;margin-top:6px;font-size:12px}.endpoint-doc{margin-top:16px}.endpoint-doc pre{background:#101827;color:#dce6f4;padding:14px;border-radius:10px;overflow:auto;font-size:11px;line-height:1.5}.toast{position:fixed;right:20px;bottom:20px;z-index:100;background:#182233;color:#fff;border-radius:10px;padding:11px 14px;box-shadow:0 12px 30px rgba(0,0,0,.2);font-size:12px;max-width:360px}.toast.error{background:#a8323e}
@media(max-width:1100px){.app-shell{grid-template-columns:72px minmax(0,1fr)}.sidebar-brand>div:last-child,.nav-btn:not(.active){font-size:0}.nav-btn{justify-content:center}.nav-btn.active{font-size:0}.nav-btn span{font-size:18px}.sidebar-footer{display:none}.policies-layout{grid-template-columns:230px minmax(0,1fr)}.graph-and-inspector{grid-template-columns:minmax(0,1fr) 280px}.policy-meta-grid{grid-template-columns:1fr 1fr}.two-col{grid-template-columns:1fr}}
@media(max-width:780px){.app-shell{display:block}.sidebar{position:static;display:block;padding:10px}.sidebar-brand,.sidebar-footer{display:none}.sidebar nav{display:flex;overflow:auto}.nav-btn,.nav-btn.active,.nav-btn:not(.active){font-size:0;min-width:48px}.workspace{min-width:0}.topbar{position:static;padding:12px 14px}.topbar p{display:none}.view{padding:12px}.policies-layout{grid-template-columns:1fr}.policy-panel{position:static;max-height:none}.policy-heading,.graph-toolbar{display:block}.toolbar{justify-content:flex-start;margin-top:10px}.policy-meta-grid{grid-template-columns:1fr}.graph-and-inspector{grid-template-columns:1fr}.graph-viewport{height:560px;border-right:0;border-bottom:1px solid var(--line)}.node-inspector{max-height:none}.two-col{grid-template-columns:1fr}.user-menu div{display:none}}

/* v0.4 · Fuentes de datos configurables */
.policy-sources-box{margin-top:14px;border-top:1px solid var(--line);padding-top:12px;display:grid;grid-template-columns:minmax(180px,.8fr) minmax(280px,1.7fr) auto;gap:12px;align-items:center}.policy-sources-box>div:first-child strong{display:block;font-size:12px}.policy-sources-box>div:first-child span{display:block;font-size:10px;margin-top:3px}.source-check-list{display:flex;flex-wrap:wrap;gap:7px}.source-check{display:flex;align-items:center;gap:7px;border:1px solid #dfe4ec;border-radius:9px;padding:7px 9px;background:#fafbfc;margin:0;cursor:pointer}.source-check input{width:auto;margin:0}.source-check span{display:block}.source-check strong{font-size:10px;display:block}.source-check small{font-size:9px;color:var(--muted);display:block;margin-top:1px}.source-check.disabled{opacity:.55}
.source-intro{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:16px;padding:18px}.source-intro h2{font-size:21px;margin:3px 0}.source-intro p{margin:5px 0 0;color:var(--muted);font-size:12px;max-width:760px}.sources-layout{display:grid;grid-template-columns:330px minmax(0,1fr);gap:16px;align-items:start}.sources-catalog-panel{position:sticky;top:102px;max-height:calc(100vh - 122px);overflow:auto}.sources-list{display:grid;gap:9px}.source-card{border:1px solid #e0e5ed;border-radius:12px;padding:12px;background:#fff}.source-card.selected{border-color:#8297e8;background:#f8f9ff}.source-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.source-card-top strong{display:block;font-size:13px}.source-card-top span:not(.source-pill){display:block;color:var(--muted);font-size:9px;margin-top:2px}.source-pill{font-size:8px;font-weight:900;border-radius:999px;padding:4px 6px;letter-spacing:.04em}.source-pill.ok{background:#ddf7eb;color:#16724f}.source-pill.off{background:#eceff3;color:#687386}.source-card-meta{display:flex;gap:6px;flex-wrap:wrap;margin:9px 0}.source-card-meta span{font-size:9px;background:#f0f3f7;color:#556276;padding:4px 6px;border-radius:6px}.source-url{font-size:10px;color:#5f6b7d;word-break:break-all;line-height:1.4}.source-card-actions{display:flex;gap:7px;margin-top:10px}.source-editor-panel{min-width:0}.wizard-step{display:grid;grid-template-columns:34px minmax(0,1fr);gap:12px;padding:14px 0;border-top:1px solid var(--line)}.wizard-step:first-of-type{border-top:0;padding-top:2px}.wizard-number{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#eef2ff;color:#3755b4;font-size:12px;font-weight:900}.wizard-content h3{font-size:14px;margin:5px 0 3px}.wizard-content>p{margin:0 0 9px;font-size:11px}.form-grid{display:grid;gap:9px}.form-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.form-grid.three{grid-template-columns:.7fr 1fr .7fr}.inline-checks{display:flex;gap:18px;flex-wrap:wrap;margin-top:10px}.check-row{display:flex;align-items:center;gap:7px;margin:0;font-size:11px}.check-row input{width:auto;margin:0}.helper-callout{font-size:10px;color:#526078;background:#f5f7fa;border-radius:8px;padding:8px 10px;margin-top:8px}.helper-callout code{background:#e9edf4;padding:2px 4px;border-radius:4px}.test-row{display:grid;grid-template-columns:minmax(220px,1fr) auto;gap:8px;align-items:center}.source-test-status{margin-top:9px;padding:9px 10px;border-radius:8px;font-size:11px}.source-test-status.neutral{background:#f4f6f9;color:#687386}.source-test-status.ok{background:#e4f7ee;color:#146d4b}.source-test-status.warn{background:#fff4d8;color:#896100}.source-test-status.error{background:#fde9eb;color:#9d2f3b}.mapping-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:14px 0 8px}.mapping-heading strong,.mapping-heading span{display:block}.mapping-heading strong{font-size:12px}.mapping-heading span{font-size:10px;margin-top:2px}.mappings-table-wrap{max-height:390px;border:1px solid var(--line);border-radius:10px}.mappings-table input,.mappings-table select{min-width:115px;padding:7px;font-size:10px}.mappings-table .map-use{min-width:auto;width:auto}.sample-cell{max-width:170px;overflow:hidden;text-overflow:ellipsis}.source-form-actions{border-top:1px solid var(--line);padding-top:14px;margin-top:6px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.source-form-actions .muted{font-size:10px}
@media(max-width:1100px){.sources-layout{grid-template-columns:270px minmax(0,1fr)}.policy-sources-box{grid-template-columns:1fr}.form-grid.three{grid-template-columns:1fr 1fr}}
@media(max-width:780px){.source-intro{display:block}.source-intro button{margin-top:12px}.sources-layout{grid-template-columns:1fr}.sources-catalog-panel{position:static;max-height:none}.form-grid.two,.form-grid.three{grid-template-columns:1fr}.test-row{grid-template-columns:1fr}.wizard-step{grid-template-columns:28px minmax(0,1fr)}.policy-sources-box{grid-template-columns:1fr}}

/* v0.5 · Matriz visual RCI / riesgo */
.node.RISK_MATRIX .node-header{background:#ede9fe;color:#5b3da5}.node.RISK_MATRIX{width:220px}.node.RISK_MATRIX .node-body{background:#fbfaff}
.matrix-editor{margin-top:10px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}.matrix-scroll{overflow:auto}.risk-matrix{border-collapse:collapse;min-width:690px;width:100%;font-size:10px}.risk-matrix th,.risk-matrix td{border:1px solid #e4e8ef;padding:6px;vertical-align:middle;text-align:center}.risk-matrix thead th{background:#f7f8fb}.risk-matrix tbody th{background:#fafbfc;min-width:145px}.risk-matrix input,.risk-matrix select{font-size:9px;padding:5px 6px;margin:0;min-width:84px}.risk-matrix .matrix-row-label,.risk-matrix .matrix-col-label{font-weight:800;width:100%;min-width:100px}.matrix-range{display:flex;align-items:center;gap:3px;margin-top:4px}.matrix-range input{min-width:52px;width:64px}.matrix-range span{color:var(--muted);font-size:8px}.matrix-cell{font-weight:800}.matrix-cell option[value="APPROVE"]{color:#14714e}.matrix-cell option[value="REVIEW"]{color:#895f00}.matrix-cell option[value="REJECT"]{color:#a3323e}.matrix-legend{display:flex;gap:14px;flex-wrap:wrap;padding:8px 10px;background:#f7f8fa;color:var(--muted);font-size:9px}.matrix-legend b{color:#354158}

@media(max-width:780px){.graph-toolbar-actions{justify-content:flex-start;margin-top:10px}.graph-layout-switch{width:max-content}.graph-and-inspector{min-height:0}}
