:root{font-family:Avenir Next,Avenir,Segoe UI,sans-serif;color:#172334;background:#eef2f5;font-synthesis:none;text-rendering:optimizeLegibility;--ink: #172334;--muted: #617083;--faint: #8996a6;--navy: #0b1728;--panel: #ffffff;--line: #dce3e9;--line-strong: #c8d2dc;--cyan: #0789ad;--cyan-bright: #18bde0;--cyan-soft: #e7f8fc;--allow: #177a52;--allow-soft: #e5f5ed;--deny: #b43b43;--deny-soft: #fae9eb;--warning: #a35b16;--warning-soft: #fff2df;--shadow: 0 12px 34px rgba(21, 38, 56, .08)}*{box-sizing:border-box}html{min-width:320px;min-height:100%;background:#eef2f5}body{min-width:320px;min-height:100vh;margin:0;background:#eef2f5}button,select,input{font:inherit}button{color:inherit}button:focus-visible,[tabindex="0"]:focus-visible{outline:3px solid rgba(7,137,173,.28);outline-offset:2px}.app-shell{min-height:100vh}.topbar{height:48px;padding:0 clamp(20px,3vw,52px);display:flex;align-items:center;color:#fff;background:var(--navy);border-bottom:1px solid #25344a}.brand-mark,.user-selector button,.summary-strip,.panel-heading,.panel-state,.user-card__header,.user-identity__badge,.effective-heading,.user-card__footer,.decision-panel__topline,.icon-text-button,.effective-result,.candidate-heading,.explanation-steps button,.graph-controls,.graph-hint,.node-inspector dl>div{display:flex;align-items:center}.brand-mark{line-height:1}.brand-mark strong{font-family:Avenir Next,Segoe UI,sans-serif;font-size:14px;letter-spacing:0}main{width:min(1880px,100%);margin:0 auto;padding:12px clamp(18px,2.5vw,42px) 32px}.workspace-controls{display:flex;align-items:stretch;gap:8px;margin-bottom:8px}.section-kicker{color:var(--cyan);font-family:SFMono-Regular,Consolas,monospace;font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.user-selector{display:grid;grid-template-columns:repeat(2,minmax(160px,1fr));padding:4px;background:#e4e9ed;border:1px solid #d1d9e0;border-radius:8px}.user-selector button{min-width:170px;gap:9px;padding:6px 8px;text-align:left;background:transparent;border:0;border-radius:8px;cursor:pointer;transition:background .16s ease,box-shadow .16s ease}.user-selector button.active{background:#fff}.selector-avatar{width:30px;height:30px;display:grid;flex:0 0 auto;place-items:center;color:#fff;background:#324c66;border-radius:8px;font-size:11px;font-weight:750}.user-selector button>span:nth-child(2){display:flex;min-width:0;flex:1;flex-direction:column}.user-selector strong{font-size:12px}.user-selector small{margin-top:1px;color:var(--muted);font-size:10px}.user-selector svg{width:15px;color:var(--allow)}.summary-strip{flex:1;min-height:58px;margin:0;padding:8px 12px;gap:0;background:#fff;border:1px solid var(--line);border-radius:8px}.summary-strip>div{min-width:155px;padding:2px 18px;border-right:1px solid var(--line)}.summary-strip>div:first-child{padding-left:8px}.summary-strip>div>span,.summary-strip>div>strong{display:block}.summary-strip>div>span{color:var(--faint);font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.summary-strip>div>strong{margin-top:3px;font-size:12px}.exit-trace{display:flex;align-items:center;gap:6px;margin-left:auto;padding:8px 10px;color:#425269;background:#fff;border:1px solid var(--line-strong);border-radius:8px;font-size:11px;font-weight:650;cursor:pointer}.exit-trace svg{width:14px}.workbench{display:grid;grid-template-columns:minmax(680px,1fr) 390px;align-items:start;gap:12px}.graph-panel,.user-card,.decision-panel,.explain-prompt{background:var(--panel);border:1px solid var(--line);box-shadow:none}.graph-panel{position:sticky;top:12px;overflow:hidden;min-width:0;border-radius:8px}.panel-heading{min-height:68px;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line)}.panel-heading h2{margin:4px 0 0;font-size:16px;letter-spacing:-.01em}.panel-state{gap:7px;color:var(--muted);font-size:10px;font-weight:650;letter-spacing:.04em;text-transform:uppercase}.panel-state>span{width:8px;height:8px;background:#9aa7b5;border-radius:50%}.panel-state>span.trace-live{background:var(--cyan-bright)}.graph-shell{position:relative;min-height:680px;overflow:hidden;background:linear-gradient(90deg,transparent 67.9%,rgba(142,157,170,.13) 68%,transparent 68.1%),linear-gradient(90deg,transparent 84.9%,rgba(142,157,170,.13) 85%,transparent 85.1%),#f9fbfc}.graph-stage-labels{position:absolute;top:12px;left:18px;right:18px;z-index:2;display:grid;grid-template-columns:68% 17% 15%;color:#8d99a7;font-family:SFMono-Regular,Consolas,monospace;font-size:8px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;pointer-events:none}.graph-stage-labels span:not(:first-child){padding-left:10px}.rule-graph{position:absolute;inset:0;z-index:1;width:100%;height:100%;cursor:grab}.rule-graph:active{cursor:grabbing}.graph-link{fill:none;stroke:#9dabb8;stroke-width:1.2;opacity:.68;transition:opacity .18s ease,stroke .18s ease,stroke-width .18s ease}.graph-link.link-inherits{stroke:#6f8192;stroke-dasharray:5 5}.graph-link.link-membership{stroke:#748698;stroke-dasharray:2 4}.graph-link.link-condition{stroke:#9c722e;stroke-dasharray:3 3}#arrow-direct path{fill:#8393a1}.graph-node{opacity:1;cursor:pointer;transition:opacity .18s ease,filter .18s ease}.graph-node>rect:first-child{fill:#fff;stroke:#bcc7d1;stroke-width:1.35;filter:none;transition:fill .18s ease,stroke .18s ease,stroke-width .18s ease}.graph-node.node-group>rect:first-child{fill:#f6f9fb;stroke:#36536d;stroke-width:1.7}.group-header-divider{stroke:#d7e0e7;stroke-width:1}.group-policy-count{fill:#718091;font-family:SFMono-Regular,Consolas,monospace;font-size:6.8px;font-weight:700;text-anchor:end;text-transform:uppercase}.empty-policy-label{fill:#8794a2;font-size:8px;font-style:italic}.policy-row{cursor:pointer}.policy-row>.policy-row-bg{fill:#fff;stroke:#d5dde4;stroke-width:1;transition:fill .15s ease,stroke .15s ease,stroke-width .15s ease}.policy-row:hover>.policy-row-bg,.policy-row:focus-visible>.policy-row-bg{fill:#eef8fa;stroke:#79bdcc}.policy-name{fill:#273648;font-size:8.2px;font-weight:700}.policy-meta{fill:#81909f;font-family:SFMono-Regular,Consolas,monospace;font-size:5.8px;font-weight:650;letter-spacing:.025em;text-transform:uppercase}.policy-effect circle{stroke-width:1}.policy-effect text{font-size:10px;font-weight:800;text-anchor:middle}.policy-effect.effect-allow circle{fill:var(--allow-soft);stroke:#9acdb6}.policy-effect.effect-allow text{fill:var(--allow)}.policy-effect.effect-deny circle{fill:var(--deny-soft);stroke:#dfa6aa}.policy-effect.effect-deny text{fill:var(--deny)}.graph-node.node-rule>rect:first-child{fill:#fff;stroke:#c5cfd8}.graph-node.node-device>rect:first-child{fill:#f3f8fb;stroke:#4e7996}.graph-node.node-condition>rect:first-child{fill:#fffbf4;stroke:#b98b48;stroke-dasharray:3 2}.graph-node.node-user>rect:first-child{fill:#10273b;stroke:#21bad5;stroke-width:2.2;filter:none}.node-icon-bg{fill:#e8edf2;stroke:none}.node-group .node-icon-bg{fill:#dbe6ee}.node-device .node-icon-bg{fill:#d9eaf3}.node-condition .node-icon-bg{fill:#f7e8ce}.node-user .node-icon-bg{fill:#18405a}.node-icon-glyph{fill:#3f5a71;font-family:SFMono-Regular,Consolas,monospace;font-size:8px;font-weight:800;text-anchor:middle}.node-user .node-icon-glyph{fill:#65d9ea}.node-eyebrow{fill:#7d8a98;font-family:SFMono-Regular,Consolas,monospace;font-size:6.7px;font-weight:700;letter-spacing:.075em}.node-label{fill:#1d2a39;font-size:9.6px;font-weight:700}.node-user .node-eyebrow{fill:#7bcddd}.node-user .node-label{fill:#fff}.node-effect circle{stroke-width:1}.node-effect text{font-size:10px;font-weight:800;text-anchor:middle}.node-effect.effect-allow circle{fill:var(--allow-soft);stroke:#9acdb6}.node-effect.effect-allow text{fill:var(--allow)}.node-effect.effect-deny circle{fill:var(--deny-soft);stroke:#dfa6aa}.node-effect.effect-deny text{fill:var(--deny)}.graph-node.hover-dim,.graph-link.hover-dim{opacity:.12!important}.graph-node.hover-related>rect:first-child{stroke:var(--cyan);stroke-width:2.2}.graph-link.hover-related{stroke:var(--cyan);stroke-width:2;opacity:.9}.graph-node.trace-muted,.graph-link.trace-muted{opacity:.12!important}.graph-node.trace-candidate{opacity:.92}.graph-node.trace-candidate>rect:first-child{stroke:#54aabe}.graph-link.trace-candidate{stroke:#2c9ab5;stroke-width:2;opacity:.7}.graph-link.trace-winner{stroke:var(--cyan-bright);stroke-width:3.4;opacity:1;filter:drop-shadow(0 0 3px rgba(24,189,224,.55))}.graph-node.trace-winner>rect:first-child,.graph-node.trace-active>rect:first-child{stroke:var(--cyan-bright);stroke-width:2.7;filter:drop-shadow(0 0 7px rgba(24,189,224,.38))}.graph-node.trace-active>rect:first-child{animation:nodeTracePulse .7s ease-out}.graph-node.trace-loser{opacity:.44}.graph-link.trace-loser{opacity:.32;stroke-width:1.5}.graph-node.step-muted{opacity:.16!important}.graph-node.step-highlight{opacity:1!important;filter:drop-shadow(0 0 7px rgba(24,189,224,.55))}.trace-particle{fill:#fff;stroke:var(--cyan-bright);stroke-width:2.5;filter:drop-shadow(0 0 4px rgba(24,189,224,.8))}.graph-controls{position:absolute;top:38px;right:14px;z-index:3;overflow:hidden;gap:0;background:#ffffffeb;border:1px solid var(--line-strong);border-radius:9px;box-shadow:none}.graph-controls button{width:35px;height:34px;padding:9px;background:transparent;border:0;cursor:pointer}.graph-controls button:hover{color:var(--cyan);background:#edf7fa}.graph-controls span{width:1px;height:20px;background:var(--line)}.graph-controls svg{width:16px}.graph-hint{position:absolute;right:14px;bottom:12px;z-index:2;gap:7px;padding:6px 8px;color:#687789;background:#f9fbfce6;border:1px solid #e0e6eb;border-radius:7px;font-size:9px;pointer-events:none}.drag-symbol{color:var(--cyan);font-size:14px}.graph-legend{min-height:48px;display:flex;align-items:center;gap:20px;padding:8px 18px;background:#fff;border-top:1px solid var(--line)}.legend-title{color:#6c7987;font-family:SFMono-Regular,Consolas,monospace;font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.legend-items{display:flex;flex-wrap:wrap;gap:18px}.legend-items span{display:flex;align-items:center;gap:6px;color:#637183;font-size:9px}.legend-node{width:18px;height:11px;display:inline-block;background:#fff;border:1.5px solid #aab6c1;border-radius:3px}.legend-node.group{background:#f3f7fa;border-color:#36536d;border-radius:5px}.legend-node.device{background:#f3f8fb;border-color:#4e7996;border-radius:5px}.legend-line{width:22px;height:0;display:inline-block;border-top:1.5px solid #718292}.legend-line.inherited{border-top-style:dashed}.node-inspector{position:absolute;left:14px;bottom:14px;z-index:5;width:250px;padding:14px;background:#0a1827f2;color:#fff;border:1px solid #28445d;border-radius:10px;box-shadow:0 12px 26px #09192740;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.node-inspector>button{position:absolute;top:8px;right:8px;width:25px;height:25px;padding:5px;color:#8fa4b7;background:transparent;border:0;cursor:pointer}.node-inspector>span{display:block;color:#67cade;font-family:SFMono-Regular,Consolas,monospace;font-size:8px;font-weight:700;letter-spacing:.1em}.node-inspector>strong{display:block;margin-top:5px;padding-right:22px;font-size:14px}.node-inspector p{margin:8px 0 0;color:#b2c0ce;font-size:10px;line-height:1.45}.node-inspector dl{margin:12px 0 0;padding-top:8px;border-top:1px solid #294156}.node-inspector dl>div{justify-content:space-between;margin-top:5px;font-size:9px}.node-inspector dt{color:#8296aa}.node-inspector dd{margin:0;font-weight:700}.node-inspector dd.allow,.candidate-card strong.allow{color:#66d3a1}.node-inspector dd.deny,.candidate-card strong.deny{color:#ff8a91}.result-rail{display:grid;gap:12px}.user-card,.decision-panel,.explain-prompt{overflow:hidden;border-radius:8px}.user-card__header{gap:13px;padding:18px;color:#fff;background:#10273b;border-bottom:1px solid #244157}.avatar{position:relative;width:50px;height:50px;display:grid;flex:0 0 auto;place-items:center;color:#bff5ff;background:#1c4961;border:1px solid #34708a;border-radius:14px;font-size:15px;font-weight:750}.user-identity{min-width:0}.user-identity__badge{gap:4px;color:#67d3e5;font-family:SFMono-Regular,Consolas,monospace;font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.user-identity__badge svg{width:11px}.user-identity h2{margin:4px 0 1px;font-family:Avenir Next Condensed,Segoe UI,sans-serif;font-size:20px;letter-spacing:-.015em}.user-identity p{overflow:hidden;margin:0;color:#bac8d5;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.user-identity>span:last-child{display:block;margin-top:4px;color:#7f95a8;font-size:9px}.effective-heading{justify-content:space-between;padding:15px 17px 11px}.effective-heading h3{margin:4px 0 0;font-size:15px}.capability-score{min-width:58px;padding-left:12px;text-align:right;border-left:1px solid var(--line)}.capability-score strong,.capability-score span{display:block}.capability-score strong{color:var(--allow);font-family:Avenir Next Condensed,sans-serif;font-size:20px;line-height:1}.capability-score span{color:var(--faint);font-size:8px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.capability-list{padding:0 10px 10px}.capability-row{position:relative;width:100%;min-height:43px;display:grid;grid-template-columns:28px minmax(0,1fr) auto 45px;align-items:center;gap:7px;padding:5px 7px;text-align:left;background:transparent;border:1px solid transparent;border-top-color:#e7ebef;cursor:pointer;transition:background .14s ease,border .14s ease,transform .14s ease}.capability-row:first-child{border-top-color:transparent}.capability-row:hover:not(:disabled){z-index:1;background:#f3f9fb;border-color:#d3e8ed;border-radius:8px;transform:translate(-2px)}.capability-row.is-selected{z-index:2;background:var(--cyan-soft);border-color:#9fd9e5;border-radius:8px;box-shadow:inset 3px 0 0 var(--cyan)}.capability-row.is-related:not(.is-selected){background:#f1f9fb;border-color:#bce2ea;border-radius:8px}.capability-row:disabled{cursor:wait}.decision-icon{width:23px;height:23px;display:grid;place-items:center;border-radius:7px}.decision-icon svg{width:14px}.decision-icon.allow,.effective-result.allow .decision-icon{color:var(--allow);background:var(--allow-soft);border:1px solid #b7dfcb}.decision-icon.deny,.effective-result.deny .decision-icon{color:var(--deny);background:var(--deny-soft);border:1px solid #efbec2}.decision-icon.none,.effective-result.none .decision-icon{color:#708091;background:#edf1f4;border:1px solid #d9e0e6}.decision-icon.loading{background:#eef2f5;border:1px solid #dde4e9}.resolve-spinner{width:11px;height:11px;border:1.5px solid #bec8d1;border-top-color:var(--cyan);border-radius:50%;animation:spin .7s linear infinite}.capability-name{overflow:hidden;color:#243244;font-size:11px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.capability-result{font-family:SFMono-Regular,Consolas,monospace;font-size:8px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.capability-result.allow{color:var(--allow)}.capability-result.deny{color:var(--deny)}.capability-result.none,.capability-result.loading{color:#7b8896}.why-affordance{display:flex;align-items:center;justify-content:flex-end;gap:2px;color:#7c8997;font-size:9px;font-weight:700;opacity:.65}.why-affordance svg{width:11px}.capability-row:hover .why-affordance,.capability-row.is-selected .why-affordance{color:var(--cyan);opacity:1}.user-card__footer{min-height:35px;gap:7px;padding:8px 16px;color:#768493;background:#f7f9fa;border-top:1px solid var(--line);font-size:9px}.live-dot{width:7px;height:7px;background:#55c996;border-radius:50%}.explain-prompt{padding:14px 16px}.explain-prompt h3{margin:0 0 3px;font-size:12px}.explain-prompt p{margin:0;color:var(--muted);font-size:10px;line-height:1.5}.decision-panel__topline{justify-content:space-between;gap:12px;padding:15px 16px;border-bottom:1px solid var(--line)}.decision-panel__topline h3{margin:4px 0 0;font-size:13px;line-height:1.3}.icon-text-button{flex:0 0 auto;gap:5px;padding:7px 8px;color:#3e5c73;background:#fff;border:1px solid var(--line-strong);border-radius:7px;font-size:9px;font-weight:700;cursor:pointer}.icon-text-button:hover{color:var(--cyan);border-color:#9ccfda}.icon-text-button svg{width:13px}.effective-result{align-items:flex-start;gap:9px;margin:12px;padding:12px;border-radius:9px}.effective-result.allow{background:#f1faf6;border:1px solid #cbe8da}.effective-result.deny{background:#fff5f5;border:1px solid #f1d1d3}.effective-result.none{background:#f5f7f8;border:1px solid #dee4e8}.effective-result .decision-icon{flex:0 0 auto}.effective-result>div>span,.effective-result>div>strong{display:block}.effective-result>div>span{color:#73808d;font-size:8px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.effective-result>div>strong{margin-top:2px;font-size:13px}.effective-result p{flex:1;margin:0 0 0 5px;color:#596878;font-size:9px;line-height:1.45}.candidate-section{padding:2px 12px 12px}.candidate-heading{justify-content:space-between;margin-bottom:7px;color:#6f7c89;font-size:8px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.candidate-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.candidate-card{position:relative;min-width:0;padding:9px;text-align:left;background:#fafbfc;border:1px solid #dfe5ea;border-radius:8px;cursor:pointer}.candidate-card:hover,.candidate-card:focus-visible{border-color:#94cbd7}.candidate-card.winner{background:#eef9fb;border-color:#91d4e0;box-shadow:inset 2px 0 0 var(--cyan)}.candidate-card.loser{opacity:.67}.candidate-card>span,.candidate-card>strong,.candidate-card>em{display:block}.candidate-source{overflow:hidden;min-height:28px;color:#455466;font-size:9px;font-weight:650;line-height:1.35}.candidate-card>strong{margin-top:5px;font-family:SFMono-Regular,Consolas,monospace;font-size:10px;letter-spacing:.06em;text-transform:uppercase}.candidate-card>span:nth-of-type(2){margin-top:3px;color:#758291;font-size:8px}.candidate-card em{position:absolute;right:7px;bottom:7px;color:var(--cyan);font-size:7px;font-style:normal;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.candidate-card em svg{width:9px;vertical-align:-2px}.explanation-steps{margin:0;padding:0 12px 12px;list-style:none}.explanation-steps li{position:relative}.explanation-steps li:not(:last-child):before{position:absolute;top:34px;bottom:-6px;left:17px;width:1px;background:#dbe4e9;content:""}.explanation-steps button{position:relative;z-index:1;width:100%;min-height:52px;gap:10px;padding:7px 5px;text-align:left;background:transparent;border:0;border-radius:8px;cursor:crosshair}.explanation-steps button:hover,.explanation-steps button:focus-visible{background:#f2f8fa}.step-number{width:25px;height:25px;display:grid;flex:0 0 auto;place-items:center;color:#477286;background:#edf5f7;border:1px solid #c8dde3;border-radius:7px;font-family:SFMono-Regular,Consolas,monospace;font-size:8px;font-weight:700}.explanation-steps button>span:nth-child(2){min-width:0;flex:1}.explanation-steps strong,.explanation-steps small{display:block}.explanation-steps strong{color:#344456;font-size:9px;line-height:1.35}.explanation-steps small{margin-top:2px;color:#7a8794;font-size:8px;line-height:1.4}.explanation-steps button>svg{width:13px;color:#9aa6b1;opacity:0}.explanation-steps button:hover>svg,.explanation-steps button:focus-visible>svg{color:var(--cyan);opacity:1}@keyframes nodeTracePulse{0%{stroke-width:2}35%{stroke-width:4}to{stroke-width:2.7}}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:1250px){.workbench{grid-template-columns:minmax(580px,1fr) 360px}.graph-shell{min-height:620px}.summary-strip>div{min-width:135px;padding-inline:12px}}@media(max-width:980px){.workspace-controls{flex-wrap:wrap}.user-selector{align-self:flex-start}.summary-strip{min-width:100%}.workbench{grid-template-columns:1fr}.graph-panel{position:static}.result-rail{grid-template-columns:minmax(320px,.8fr) minmax(360px,1.2fr)}.graph-shell{min-height:580px}}@media(max-width:720px){.topbar{height:48px;padding-inline:16px}main{padding:8px 12px 24px}.workspace-controls{flex-direction:column}.user-selector{width:100%;grid-template-columns:1fr}.user-selector button{min-width:0}.summary-strip{overflow-x:auto}.summary-strip>div{min-width:145px}.exit-trace{min-width:max-content}.graph-shell{min-height:500px}.graph-stage-labels,.graph-hint{display:none}.graph-legend{align-items:flex-start;flex-direction:column;gap:7px}.result-rail,.candidate-grid{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
