:root{--bg:#f4f6f9;--panel:#ffffff;--ink:#1a2230;--ink-2:#4a5568;--ink-3:#8592a6;--line:#dde3ec;--sidebar:#161d2b;--sidebar-ink:#c7d0de;--sidebar-active:#232f45;--accent:#2f6fed;--accent-ink:#ffffff;--ok:#157a43;--ok-bg:#e3f5ea;--warn:#9a6b00;--warn-bg:#fdf1d7;--bad:#b3261e;--bad-bg:#fde7e5;--info-bg:#e8effd;--radius:8px;--shadow:0 1px 2px rgba(16,24,40,0.06);font-size:15px}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:var(--bg);color:var(--ink);line-height:1.45}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1{font-size:1.35rem;margin:0 0 .25rem}h2{font-size:1.05rem;margin:0 0 .75rem}h3{font-size:.95rem;margin:1rem 0 .4rem}p{margin:.3rem 0}code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85em}.shell{display:flex;min-height:100vh}.sidebar{width:224px;flex:0 0 224px;background:var(--sidebar);color:var(--sidebar-ink);display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow-y:auto}.brand{padding:1rem 1.1rem .75rem;font-weight:700;color:#fff;letter-spacing:.02em}.brand small{display:block;font-weight:400;color:var(--ink-3);font-size:.72rem;margin-top:2px}.nav{flex:1 1;padding:.35rem .5rem}.nav a{display:block;color:var(--sidebar-ink);padding:.42rem .65rem;border-radius:6px;font-size:.9rem;margin-bottom:1px}.nav a:hover{text-decoration:none}.nav a.active,.nav a:hover{background:var(--sidebar-active);color:#fff}.nav a.active{font-weight:600}.nav .nav-section{margin:.7rem .65rem .25rem;font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:#5c6b84}.sidebar-foot{padding:.75rem 1.1rem;border-top:1px solid #232c3d;font-size:.8rem}.sidebar-foot .who{color:#fff;font-weight:600;overflow-wrap:anywhere}.sidebar-foot .role{color:#8fa0ba;text-transform:capitalize}.logout-btn{margin-top:.5rem}.main{flex:1 1;min-width:0;padding:1.25rem 1.5rem 3rem}.page-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:.6rem 1rem;margin-bottom:1rem}.page-head .sub{color:var(--ink-2);font-size:.88rem}.page-head .spacer{flex:1 1}.actions-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}@media (max-width:900px){.shell{flex-direction:column}.sidebar{width:100%;flex:none;height:auto;position:static}.nav{display:flex;flex-wrap:wrap;gap:2px;padding:.4rem .5rem}.nav a{padding:.32rem .55rem}.nav .nav-section{display:none}.sidebar-foot{border-top:none;padding-top:0}.main{padding:1rem}}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem 1.1rem;margin-bottom:1rem}.grid{display:grid;grid-gap:.9rem;gap:.9rem}.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width:1200px){.grid.cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:720px){.grid.cols-2,.grid.cols-3,.grid.cols-4{grid-template-columns:1fr}}.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:.85rem 1rem;box-shadow:var(--shadow)}.stat .label{color:var(--ink-2);font-size:.78rem;text-transform:uppercase;letter-spacing:.05em}.stat .value{font-size:1.55rem;font-weight:700;margin-top:.15rem}.stat .hint{color:var(--ink-3);font-size:.8rem;margin-top:.1rem}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:.88rem}table.data th{text-align:left;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-2);border-bottom:2px solid var(--line);padding:.45rem .6rem;white-space:nowrap}table.data td{border-bottom:1px solid var(--line);padding:.5rem .6rem;vertical-align:top}table.data tbody tr:hover{background:#f8fafc}table.data tr.clickable{cursor:pointer}tr.row-jump{position:relative}a.row-link{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.above-link{position:relative;z-index:1}.action-button{align-items:center;gap:.3rem}.action-button,.confirm-input{display:inline-flex;flex-wrap:wrap}.confirm-input{gap:.5rem;align-items:flex-end}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82em;overflow-wrap:anywhere}td .cell-sub{color:var(--ink-3);font-size:.78rem}.pager{display:flex;align-items:center;gap:.5rem;margin-top:.75rem;font-size:.85rem;color:var(--ink-2);flex-wrap:wrap}.pager a,.pager span.cur{padding:.2rem .55rem;border:1px solid var(--line);border-radius:5px}.pager span.cur{background:var(--accent);color:#fff;border-color:var(--accent)}.pager .disabled{color:var(--ink-3);border-color:var(--line);pointer-events:none}.pill{display:inline-block;padding:.1rem .55rem;border-radius:999px;font-size:.75rem;font-weight:600;white-space:nowrap}.pill.ok{background:var(--ok-bg);color:var(--ok)}.pill.warn{background:var(--warn-bg);color:var(--warn)}.pill.bad{background:var(--bad-bg);color:var(--bad)}.pill.info{background:var(--info-bg);color:var(--accent)}.pill.mute{background:#eceff4;color:var(--ink-2)}.badge-sandbox{background:var(--warn-bg);color:var(--warn);border:1px solid #ecd9a8;font-size:.72rem;letter-spacing:.04em}.badge-chain,.badge-sandbox{padding:.12rem .5rem;border-radius:5px;font-weight:700}.badge-chain{background:var(--ok-bg);color:var(--ok);font-size:.75rem}.badge-chain.broken{background:var(--bad-bg);color:var(--bad)}label.field{display:block;margin:.55rem 0;font-size:.85rem;color:var(--ink-2)}label.field>span{display:block;margin-bottom:.2rem;font-weight:600;color:var(--ink)}input[type=date],input[type=datetime-local],input[type=email],input[type=number],input[type=password],input[type=text],select,textarea{width:100%;padding:.45rem .6rem;border:1px solid var(--line);border-radius:6px;font:inherit;background:#fff;color:var(--ink)}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:var(--accent)}textarea{min-height:90px}.form-row{display:flex;gap:.75rem;flex-wrap:wrap}.form-row>*{flex:1 1 180px}.form-actions{display:flex;gap:.6rem;align-items:center;margin-top:.8rem;flex-wrap:wrap}.hint{color:var(--ink-3);font-size:.8rem}.error-text{color:var(--bad);font-size:.85rem}.success-text{color:var(--ok);font-size:.85rem}.btn{display:inline-block;border:1px solid var(--line);background:#fff;color:var(--ink);padding:.4rem .85rem;border-radius:6px;font:inherit;font-size:.88rem;cursor:pointer}.btn:hover{background:#f0f3f8;text-decoration:none}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn.primary:hover{background:#265fce}.btn.danger{background:var(--bad);border-color:var(--bad);color:#fff}.btn.danger:hover{background:#93201a}.btn.ghost{border-color:transparent;background:transparent;color:var(--accent)}.btn.small{padding:.18rem .55rem;font-size:.8rem}.empty{padding:1.6rem 1rem;text-align:center;color:var(--ink-2);background:var(--panel);border:1px dashed var(--line);border-radius:var(--radius)}.empty .title{font-weight:600;color:var(--ink);margin-bottom:.2rem}.loading{padding:1.4rem 1rem;color:var(--ink-2)}.alert{border-radius:var(--radius);padding:.7rem .9rem;margin-bottom:1rem;font-size:.9rem;border:1px solid transparent}.alert.error{background:var(--bad-bg);color:var(--bad);border-color:#f3c6c2}.alert.success{background:var(--ok-bg);color:var(--ok);border-color:#bfe6cd}.alert.info{background:var(--info-bg);color:#1e4fa8;border-color:#c4d7f8}.alert.warn{background:var(--warn-bg);color:var(--warn);border-color:#eed9a4}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#10151f;padding:1rem}.login-card{background:var(--panel);border-radius:12px;padding:2rem;width:100%;max-width:400px;box-shadow:0 12px 40px rgba(0,0,0,.35)}.login-card h1{margin-bottom:.2rem}.login-card .sub{color:var(--ink-2);font-size:.88rem;margin-bottom:1.2rem}.modal-backdrop{position:fixed;inset:0;background:rgba(10,15,25,.55);display:flex;align-items:flex-start;justify-content:center;padding:8vh 1rem 1rem;z-index:50}.modal{background:#fff;border-radius:10px;padding:1.25rem 1.4rem;width:100%;max-width:460px;box-shadow:0 18px 50px rgba(0,0,0,.3)}.modal h2{margin-bottom:.4rem}.modal .modal-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1rem}.banner{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem 1rem;border-radius:var(--radius);padding:.8rem 1rem;margin-bottom:1rem;font-size:.92rem}.banner.policy-free{background:var(--info-bg);border:1px solid #c4d7f8;color:#1e4fa8}.banner.policy-ann{background:var(--warn-bg);border:1px solid #eed9a4;color:var(--warn)}.banner.policy-grace{background:#fdeee0;border:1px solid #f2cfae;color:#8a4b00}.banner.policy-enforced{background:var(--bad-bg);border:1px solid #f3c6c2;color:var(--bad)}.kv{display:grid;grid-template-columns:minmax(140px,220px) 1fr;grid-gap:.3rem .9rem;gap:.3rem .9rem;font-size:.88rem}.kv dt{color:var(--ink-2);margin:0}.kv dd{margin:0;overflow-wrap:anywhere}pre.json{background:#0f1520;color:#d7e1f0;padding:.75rem;border-radius:6px;overflow-x:auto;max-height:320px}.diff-pair{display:grid;grid-template-columns:1fr 1fr;grid-gap:.75rem;gap:.75rem}@media (max-width:720px){.diff-pair{grid-template-columns:1fr}}.diff-pair h4{margin:0 0 .3rem;font-size:.78rem;text-transform:uppercase;color:var(--ink-2)}.timeline{list-style:none;margin:0;padding:0}.timeline li{border-left:2px solid var(--line);padding:.15rem 0 .6rem .85rem;position:relative;font-size:.87rem}.timeline li:before{content:"";position:absolute;left:-5px;top:6px;width:8px;height:8px;border-radius:50%;background:var(--accent)}.timeline .t{color:var(--ink-3);font-size:.76rem}.section-title{font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-2);margin:1.2rem 0 .4rem;font-weight:700}.tabs{display:flex;gap:.25rem;flex-wrap:wrap;margin-bottom:.9rem}.tabs a{padding:.28rem .7rem;border-radius:999px;font-size:.84rem;border:1px solid var(--line);color:var(--ink-2)}.tabs a.active{background:var(--accent);color:#fff;border-color:var(--accent)}.skip-note{color:var(--ink-3);font-size:.8rem}@media (max-width:1100px){.col-hide-narrow{display:none}}.history-badge{display:inline-block;padding:.1rem .55rem;border-radius:999px;font-size:.75rem;font-weight:700;white-space:nowrap;background:var(--info-bg);color:var(--accent);border:1px solid #c4d7f8}