:root{--bg: #0f172a;--surface: #1e293b;--surface2: #334155;--text: #f8fafc;--muted: #94a3b8;--accent: #f97316;--ok: #22c55e;--danger: #ef4444;--line: rgba(148, 163, 184, .22);--radius: 14px;font-family:DM Sans,system-ui,sans-serif;color:var(--text);background:var(--bg)}*{box-sizing:border-box}html,body,#app{min-height:100%}body{margin:0;background:radial-gradient(900px 420px at 80% -10%,rgba(249,115,22,.18),transparent 55%),var(--bg)}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}.shell{min-height:100dvh}.topbar{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:1rem;flex-wrap:wrap;padding:.8rem 1.2rem;background:#0f172af0;border-bottom:1px solid var(--line)}.brand{font-weight:700;letter-spacing:-.03em;font-size:1.1rem}.brand span{color:var(--accent)}.topnav{display:flex;gap:.3rem;flex:1}.topnav a{padding:.45rem .75rem;border-radius:10px;color:var(--muted)}.topnav a.router-link-exact-active,.topnav a.router-link-active:not([href="/admin"]){background:#f9731629;color:var(--text)}.who{display:flex;align-items:center;gap:.7rem;margin-left:auto}.content{max-width:1100px;margin:0 auto;padding:1.4rem 1.2rem 3rem;display:grid;gap:1rem}.panel{background:#1e293be6;border:1px solid var(--line);border-radius:var(--radius);padding:1.1rem}.stack{display:grid;gap:.8rem}.row{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center}.muted{color:var(--muted)}.page-title{margin:0;font-size:1.45rem;letter-spacing:-.02em}h2{margin:0;font-size:1.1rem}label{display:grid;gap:.35rem;font-size:.92rem;color:var(--muted)}input,select,textarea{width:100%;padding:.7rem .8rem;border-radius:10px;border:1px solid var(--line);background:#0f172ab3;color:var(--text)}input:focus,select:focus{outline:2px solid rgba(249,115,22,.55);outline-offset:1px}input[type=checkbox]{width:auto}.check{display:flex;align-items:center;gap:.55rem;color:var(--text)}.btn,.btn-ghost,.btn-danger{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.65rem 1rem;border-radius:10px;border:1px solid transparent;font-weight:600}.btn{background:var(--accent);color:#0f172a}.btn:disabled{opacity:.6;cursor:wait}.btn-ghost{background:transparent;border-color:var(--line);color:var(--text)}.btn-danger{background:#ef444426;border-color:#ef444473;color:#fecaca}.banner{margin:0;padding:.7rem .9rem;border-radius:10px;background:#94a3b81f}.banner.error{background:#ef444424;color:#fecaca}.banner.ok{background:#22c55e24;color:#bbf7d0}.banner.warn{background:#f9731624;color:#fed7aa}.tag{display:inline-block;padding:.15rem .5rem;border-radius:999px;font-size:.78rem;background:#94a3b829;margin:.1rem .15rem .1rem 0}.tag.accent{background:#f9731633;color:#fed7aa}.tag.off{background:#ef444429;color:#fecaca}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.65rem .6rem;border-bottom:1px solid var(--line);vertical-align:top}th{color:var(--muted);font-weight:500;font-size:.85rem}tr.clickable{cursor:pointer}tr.clickable:hover td{background:#f973160f}.auth-wrap{min-height:100dvh;display:grid;place-items:center;padding:1.2rem}.auth-card{width:min(420px,100%);display:grid;gap:.9rem}.auth-card .brand{font-size:1.4rem}.modules{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.9rem}.module-card{display:grid;gap:.35rem;padding:1.1rem;border-radius:var(--radius);border:1px solid var(--line);background:#1e293be6;transition:border-color .15s,transform .15s}.module-card:hover{border-color:#f9731699;transform:translateY(-1px)}.module-card strong{font-size:1.05rem}.module-card.disabled{opacity:.55;pointer-events:none}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:.9rem}.access-list{display:grid;gap:.5rem}.access-item{display:flex;align-items:center;justify-content:space-between;gap:.7rem;padding:.6rem .7rem;border-radius:10px;border:1px solid var(--line)}.access-item select{width:11rem}@media(max-width:700px){.topnav{order:3;width:100%;overflow-x:auto}td{display:block;border:0;padding:.25rem .4rem}td:before{content:attr(data-label) " · ";color:var(--muted);font-size:.8rem}tr{display:block;border-bottom:1px solid var(--line);padding:.5rem 0}thead{display:none}}
