:root{--brand:#2f6f62;--brand-50:#eef6f4;--ink:#0f172a;--muted:#64748b;--line:#e2e8f0;--bg:#f8fafc;--danger:#b42318;color:var(--ink);font-family:Inter,system-ui,sans-serif}*{box-sizing:border-box}body{background:var(--bg);margin:0;font-size:14px}a{color:var(--brand)}.shell{grid-template-columns:220px 1fr;min-height:100vh;display:grid}.side{border-right:1px solid var(--line);background:#fff;flex-direction:column;gap:4px;padding:20px 14px;display:flex}.side .brand{align-items:center;gap:8px;padding:4px 10px 16px;font-size:17px;font-weight:700;display:flex}.side .brand .badge{margin-left:auto}.side a.nav{color:var(--ink);border-radius:8px;padding:8px 10px;text-decoration:none}.side a.nav.active,.side a.nav:hover{background:var(--brand-50);color:var(--brand)}.side .foot{color:var(--muted);gap:8px;margin-top:auto;padding:10px;font-size:12px;display:grid}main{max-width:1100px;padding:28px 36px}h1{margin:0 0 4px;font-size:22px}.sub{color:var(--muted);margin:0 0 22px}.card{border:1px solid var(--line);background:#fff;border-radius:12px;margin-bottom:18px;padding:18px}.card h2{margin:0 0 12px;font-size:15px}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:9px 8px}th{color:var(--muted);font-size:12px;font-weight:600}button,.btn{font:inherit;border:1px solid var(--line);cursor:pointer;color:var(--ink);background:#fff;border-radius:8px;padding:7px 12px;text-decoration:none;display:inline-block}button.primary,.btn.primary{background:var(--brand);color:#fff;border-color:var(--brand)}button.danger{color:var(--danger)}button:disabled{opacity:.5;cursor:default}input,select,textarea{font:inherit;border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 10px}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.grow{flex:1}.badge{background:var(--brand-50);color:var(--brand);white-space:nowrap;border-radius:99px;padding:2px 8px;font-size:11px}.badge.warn{color:#92400e;background:#fef3c7}.badge.gray{color:var(--muted);background:#f1f5f9}.err{color:var(--danger);margin:8px 0}.ok{background:var(--brand-50);word-break:break-all;border:1px solid #cfe5df;border-radius:8px;margin:10px 0;padding:12px}.center{place-items:center;min-height:100vh;padding:20px;display:grid}.center .card{width:100%;max-width:440px}.perm-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 18px;margin:10px 0;display:grid}.perm-grid label{align-items:flex-start;gap:8px;display:flex}code{background:#f1f5f9;border-radius:4px;padding:1px 5px}
