:root{--bg:#f5f6f8;--panel:#ffffff;--border:#e0e3e8;--border-strong:#c9cdd4;--text:#191c21;--muted:#667085;--placeholder:#767f8c;--chip:#eef0f3;--chip-text:#5b6472;--surface-raised:#fafbfc;--surface-dim:#fafafa;--input-disabled:#f1f2f5;--primary:#2563eb;--primary-hover:#1d4ed8;--primary-contrast:#ffffff;--accent:#2563eb;--primary-soft:#e8effd;--primary-soft-text:#1d4ed8;--danger:#dc2626;--danger-hover:#b91c1c;--danger-soft:#fef2f2;--danger-border:#fecaca;--danger-text:#991b1b;--green-soft:#e7f6ec;--green-text:#157347;--amber-soft:#fef3c7;--amber-text:#92400e;--purple-soft:#f3e8ff;--purple-text:#7e22ce;--warn-bg:#fff7ed;--warn-border:#fdba74;--warn-text:#9a3412;--overlay:rgba(16,20,28,0.45);--shadow:0 8px 30px rgba(16,24,40,0.08);--toast-bg:#1f2430;--toast-text:#f4f6fa;--token-bg:#ffffff;--radius:8px;--font:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#101318;--panel:#181c23;--border:#2a303b;--border-strong:#3c4451;--text:#e6e9ee;--muted:#98a2b3;--placeholder:#8791a0;--chip:#242a35;--chip-text:#aab2bf;--surface-raised:#1d222b;--surface-dim:#151920;--input-disabled:#20252e;--primary:#3b82f6;--primary-hover:#60a5fa;--primary-contrast:#0b1220;--accent:#8ab4ff;--primary-soft:#1c2f55;--primary-soft-text:#a5c4ff;--danger:#dc2626;--danger-hover:#b91c1c;--danger-soft:#351a1d;--danger-border:#7a2e35;--danger-text:#ffa2ab;--green-soft:#12301f;--green-text:#57d992;--amber-soft:#362a10;--amber-text:#fbbf24;--purple-soft:#32204d;--purple-text:#cfa9ff;--warn-bg:#33230f;--warn-border:#8a5a1f;--warn-text:#f8c078;--overlay:rgba(0,0,0,0.6);--shadow:0 8px 30px rgba(0,0,0,0.5);--toast-bg:#262c38;--toast-text:#f4f6fa;--token-bg:#101318;color-scheme:dark}}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:var(--font);font-size:14px;line-height:1.5;color:var(--text);background:var(--bg)}code{font-size:.92em;background:var(--chip);border-radius:4px;padding:1px 4px}.mono,code{font-family:var(--mono)}.muted{color:var(--muted)}.app{max-width:1100px;margin:0 auto;padding:0 20px 64px}.main{padding-top:20px}.page-head{display:flex;align-items:baseline;gap:12px;margin:8px 0 16px}.page-title{font-size:22px;font-weight:700;margin:0}.back-link{color:var(--muted);text-decoration:none;font-size:13px}.back-link:hover{color:var(--text);text-decoration:underline}.topbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 20px;padding:14px 0;border-bottom:1px solid var(--border)}.brand{font-weight:800;font-size:17px;letter-spacing:-.01em;color:var(--text);text-decoration:none}.nav{display:flex;flex-wrap:wrap;gap:4px;margin-right:auto}.nav-link{padding:5px 12px;border-radius:6px;color:var(--muted);text-decoration:none;font-weight:500}.nav-link:hover{color:var(--text);background:var(--chip)}.nav-link-active{color:var(--primary-soft-text);background:var(--primary-soft)}.topbar-auth{display:flex;align-items:center;gap:10px}.key-prefix{font-family:var(--mono);font-size:12px;color:var(--muted);background:var(--chip);border-radius:6px;padding:3px 8px}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:16px}.table-card{padding:0;overflow-x:auto}.empty-state{text-align:center;padding:40px 16px}.empty-state p{margin:4px 0}.empty{color:var(--muted);padding:24px 0}.form-row{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end}.field{display:flex;flex-direction:column;gap:4px}.field>span{font-size:12px;font-weight:600;color:var(--muted)}.field>span em{font-weight:400;font-style:normal;color:var(--muted)}.field-grow{flex:1 1 220px}.field-inline-label{max-width:420px}input,select{font:inherit;color:inherit;padding:7px 10px;border:1px solid var(--border-strong);border-radius:6px;background:var(--panel)}input::placeholder{color:var(--placeholder)}input[aria-invalid=true]{border-color:var(--danger)}input:disabled,select:disabled{background:var(--input-disabled);color:var(--muted);cursor:not-allowed}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.hint{margin:10px 0 0;font-size:12px;color:var(--muted)}.hint-bad{margin:10px 0 0;font-size:13px;color:var(--danger-text);background:var(--danger-soft);border:1px solid var(--danger-border);border-radius:6px;padding:6px 10px}.btn{font:inherit;padding:7px 14px;border:1px solid var(--border-strong);border-radius:6px;background:var(--panel);color:var(--text);cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}.btn:hover{background:var(--chip)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:disabled:hover{background:var(--panel)}.btn-primary{background:var(--primary);border-color:var(--primary);color:var(--primary-contrast)}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:disabled:hover{background:var(--primary)}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-danger:hover{background:var(--danger-hover)}.btn-danger-outline{color:var(--danger-text);border-color:var(--danger-border)}.btn-danger-outline:hover{background:var(--danger-soft)}.btn-danger-outline:disabled:hover{background:var(--panel)}.btn-ghost{border-color:transparent;background:transparent;color:var(--muted)}.btn-ghost:hover{background:var(--chip);color:var(--text)}.btn-sm{padding:4px 10px;font-size:13px}.btn-block{width:100%;margin-top:8px}.link{background:none;border:none;font:inherit;color:var(--accent);cursor:pointer;padding:0;text-decoration:underline}.badge{display:inline-block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;border-radius:999px;padding:2px 9px;vertical-align:middle}.badge-off{background:var(--chip);color:var(--chip-text)}.badge-on{background:var(--green-soft);color:var(--green-text)}.badge-targeted{background:var(--primary-soft);color:var(--primary-soft-text)}.badge-rollout{background:var(--purple-soft);color:var(--purple-text)}.badge-archived{background:transparent;color:var(--muted);border:1px solid var(--border-strong)}.badge-dirty{background:var(--amber-soft);color:var(--amber-text)}.badge-config{background:var(--purple-soft);color:var(--purple-text)}.badge-status-active{background:var(--green-soft);color:var(--green-text)}.badge-status-expired{background:var(--amber-soft);color:var(--amber-text)}.badge-status-revoked{background:var(--chip);color:var(--chip-text)}.table{width:100%;min-width:620px;border-collapse:collapse}.table-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:10px;font-size:13px}.toggle{display:inline-flex;align-items:center;gap:6px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.toggle input{margin:0;accent-color:var(--primary)}.table td,.table th{text-align:left;padding:10px 14px;border-bottom:1px solid var(--border);vertical-align:top}.table th{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);background:var(--surface-raised);white-space:nowrap}.table tr:last-child td{border-bottom:none}.row-archived td{background:var(--surface-dim)}.row-archived .cell-desc,.row-archived .cell-name{color:var(--muted)}.cell-flag{min-width:200px}.cell-flag-head{display:flex;align-items:center;gap:8px}.flag-link{font-weight:600;font-family:var(--mono);font-size:13px;color:var(--text);text-decoration:none}.flag-link:hover{color:var(--accent);text-decoration:underline}.cell-desc{color:var(--muted);font-size:13px;margin-top:2px;max-width:340px}.stale-chip{display:inline-block;margin-top:4px;font-size:11px;color:var(--chip-text);background:var(--chip);border-radius:999px;padding:1px 8px;cursor:default}.filter-field{display:flex;align-items:center;gap:8px}.filter-input{padding:5px 8px;font-size:13px;min-width:220px}.env-cell{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.state-select{padding:4px 6px;font-size:13px}.rule-count{font-size:12px;color:var(--accent);text-decoration:none;white-space:nowrap}.rule-count:hover{text-decoration:underline}.config-preview{font-family:var(--mono);font-size:12.5px;background:var(--surface-raised);border:1px solid var(--border);border-radius:6px;padding:2px 7px;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.config-value-field{gap:6px}.config-value-input{width:100%;min-height:120px;resize:vertical;padding:8px 10px;border:1px solid var(--border-strong);border-radius:6px;background:var(--panel);color:inherit;font-size:13px;line-height:1.5}.config-value-input:disabled{background:var(--input-disabled);color:var(--muted);cursor:not-allowed}.config-value-input[aria-invalid=true]{border-color:var(--danger)}.eval-value{font-family:var(--mono);font-size:12.5px;background:var(--surface-raised);border:1px solid var(--border);border-radius:6px;padding:1px 6px}.env-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}.env-toolbar-field{display:flex;align-items:center;gap:8px}.env-toolbar-label{font-size:12px;font-weight:600;color:var(--muted)}.env-select{padding:5px 8px;min-width:160px}.env-select,.env-toolbar-version{font-family:var(--mono);font-size:13px}.env-toolbar-version{color:var(--text)}.env-version{font-weight:600;color:var(--muted)}.cell-actions,.th-actions{width:1%;white-space:nowrap}.actions{display:flex;gap:6px}.actions-cell{display:flex;flex-direction:column;gap:4px}.action-hint{font-size:11px;color:var(--muted)}.cell-when{white-space:nowrap}.confirm{display:flex;flex-direction:column;gap:6px;max-width:320px;white-space:normal}.confirm-warn{background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:6px;padding:6px 9px;font-size:13px;color:var(--warn-text)}.confirm-actions{display:flex;gap:6px}.confirm-input{padding:5px 8px;font-size:13px}.error-banner{background:var(--danger-soft);border:1px solid var(--danger-border);color:var(--danger-text);padding:10px 14px;border-radius:var(--radius);margin-bottom:16px}.gate{position:fixed;inset:0;z-index:100;background:var(--overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:24px;overflow-y:auto}.gate-card{background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);padding:32px;width:100%;max-width:420px}.gate-brand{font-weight:800;font-size:15px;color:var(--accent);margin-bottom:4px}.gate-title{margin:0 0 12px;font-size:20px}.gate-notice{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-text);border-radius:6px;padding:8px 10px;font-size:13px}.gate-card .field{margin-top:12px}.flag-editor-head{display:flex;align-items:center;gap:10px;margin-bottom:4px}.flag-editor-desc{margin:0 0 8px}.explainer{color:var(--muted);font-size:13px;background:var(--panel);border:1px dashed var(--border-strong);border-radius:var(--radius);padding:8px 12px;margin:0 0 16px}.env-editor{padding:16px 18px}.env-editor-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.env-name{font-size:15px;font-weight:700;margin:0;font-family:var(--mono)}.env-updated{margin-left:auto;font-size:12px}.env-editor-controls{margin-bottom:14px}.env-editor-controls select{min-width:300px}.env-editor-footer{display:flex;justify-content:flex-end;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}.copy-from{display:flex;flex-direction:column;gap:4px;margin-right:auto}.copy-from-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.copy-from-select{padding:4px 8px;font-size:13px;font-family:var(--mono)}.copy-from-hint{margin:0}.rollout-panel{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius);padding:12px;margin-bottom:14px}.rollout-percentage{width:130px}.rule-editor{display:flex;flex-direction:column;gap:8px;align-items:flex-start}.rule-empty{margin:0;font-size:13px}.rule-editor>div{width:100%}.rule-divider{text-align:center;font-size:11px;font-weight:700;color:var(--muted);letter-spacing:.1em;margin:2px 0 8px}.rule-card{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius);padding:12px}.rule-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.rule-title{font-weight:700;font-size:13px}.rule-note{font-size:12px;margin-right:auto}.clause-row{display:flex;gap:8px;margin-bottom:8px;align-items:center;flex-wrap:wrap}.clause-attribute{flex:1 1 160px;min-width:140px}.clause-operator{flex:0 0 auto}.clause-values{flex:2 1 220px;min-width:180px}.rule-values-hint{margin:0}.eval-tester-head{display:flex;align-items:center;gap:10px}.eval-tester-title{font-size:15px;font-weight:700;margin:0}.eval-tester-teaser{font-size:12px;margin-right:auto}.eval-tester-head .btn:last-child{margin-left:auto}.eval-tester-body{margin-top:12px}.eval-context-row{display:flex;gap:8px;align-items:center;margin-bottom:8px;flex-wrap:wrap}.eval-context-row input{flex:1 1 160px;min-width:140px}.eval-actions{display:flex;gap:8px;align-items:center;margin-top:10px}.eval-error{margin:12px 0 0}.eval-result{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}.eval-result-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.eval-result-key{font-size:13px;font-weight:600}.eval-result-meta{font-family:var(--mono);font-size:12px}.eval-all{margin-top:10px}.eval-all summary{cursor:pointer;font-size:13px;color:var(--muted)}.eval-all-list{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}.cell-actor{white-space:nowrap}.cell-actor code{font-size:12px;color:var(--muted)}.audit-action{font-size:12.5px}.audit-detail{font-size:13px;max-width:380px;overflow-wrap:anywhere}.audit-footer{display:flex;justify-content:center;margin:4px 0 16px}.audit-footer p{margin:0;font-size:13px}.modal-overlay{position:fixed;inset:0;background:var(--overlay);display:flex;align-items:flex-start;justify-content:center;padding:48px 16px;overflow-y:auto;z-index:50}.modal{background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);width:100%;max-width:720px;padding:18px 20px 20px}.modal-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}.modal-title{font-size:16px;font-weight:700;margin:0 auto 0 0}.modal-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:14px 0 6px}.modal-section-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.code-block{margin:0;background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius);padding:12px;font-family:var(--mono);font-size:12.5px;line-height:1.55;white-space:pre;overflow-x:auto}.code-block-scroll{max-height:340px;overflow-y:auto}.code-block code{background:none;border-radius:0;padding:0;font-size:inherit}.callout{border-radius:var(--radius);padding:14px 16px;margin-bottom:16px}.callout-archived,.callout-token{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-text)}.callout-archived{font-size:13px}.callout-head{margin:0 0 10px}.token-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.token{background:var(--token-bg);border:1px solid var(--warn-border);border-radius:6px;padding:6px 10px;font-size:13px;-webkit-user-select:all;-moz-user-select:all;user-select:all;overflow-wrap:anywhere}.toaster{position:fixed;bottom:20px;right:20px;display:flex;flex-direction:column;gap:8px;z-index:100;max-width:360px}.toast{background:var(--toast-bg);color:var(--toast-text);border-radius:8px;padding:10px 14px;font-size:13px;box-shadow:0 6px 20px rgba(0,0,0,.25);border-left:3px solid var(--muted)}.toast-success{border-left-color:#22c55e}.toast-error{border-left-color:#ef4444}.toast-info{border-left-color:var(--accent)}