:root{--bg: #0f1720;--surface: #17222e;--surface-2: #1e2c3a;--text: #e8eef4;--muted: #9fb0c0;--primary: #873bff;--open: #27ae60;--block: #e2b93b;--close: #eb5757;--danger: #c0392b;--radius: 12px;--border: #2a3a4a}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.4}.muted{color:var(--muted)}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.85em}.ellipsis{max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.center{min-height:100%;display:flex;align-items:center;justify-content:center;padding:1rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem}.login-card{width:100%;max-width:360px;text-align:center}.login-card h1{margin:0 0 .25rem}.brand-logo{width:64px;max-width:30%;height:auto;margin:0 auto .6rem;display:block}.brand-dinova{width:130px;max-width:55%;height:auto;margin:0 auto .75rem;display:block;opacity:.95}.topbar-dinova{height:15px;width:auto;display:block;opacity:.9}.btn-google{display:inline-flex;align-items:center;justify-content:center;gap:.6rem}.btn-google .gicon{width:18px;height:18px;background:#fff;border-radius:50%;padding:2px;box-sizing:content-box;flex:0 0 auto}.topbar-logo{height:30px;width:auto;display:block}.topbar-brand{display:flex;align-items:center;gap:.5rem}.clickable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.clickable:hover{text-decoration:underline}.nowrap{white-space:nowrap}.stack{display:flex;flex-direction:column;gap:.85rem}.row{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}label{display:flex;flex-direction:column;gap:.3rem;text-align:left;font-size:.9rem}label.checkbox{flex-direction:row;align-items:center;gap:.5rem}input,select,textarea{background:var(--surface-2);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:.6rem .7rem;font-size:1rem;width:100%}textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85rem;resize:vertical}input[readonly]{opacity:.75;cursor:default}input:focus,select:focus,textarea:focus{outline:2px solid var(--primary);border-color:transparent}input[type=color]{padding:.3rem;height:2.75rem;cursor:pointer}.badge{font-size:.8rem;padding:.2rem .55rem;border-radius:999px;border:1px solid var(--border)}.badge.ok{color:var(--open);border-color:var(--open)}.badge.warn{color:#e0b341;border-color:#e0b341}.btn{border:none;border-radius:999px;padding:.6rem 1.05rem;font-size:.92rem;font-weight:650;cursor:pointer;color:#fff;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;transition:filter .15s ease,background .15s ease,border-color .15s ease,transform .14s ease,box-shadow .14s ease}.btn:hover:not(:disabled){filter:brightness(1.15)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-block{width:100%}.btn-primary{background:color-mix(in srgb,var(--primary) 16%,transparent);color:color-mix(in srgb,var(--primary) 55%,white)}.btn-ghost{background:var(--surface-2);color:var(--muted)}.btn-danger{background:color-mix(in srgb,var(--danger) 18%,transparent);color:#ff9a8d}.btn-open{background:color-mix(in srgb,var(--open) 18%,transparent);color:color-mix(in srgb,var(--open) 60%,white);font-size:1.05rem;padding:.75rem 1rem;width:100%}.btn-gate-block{background:color-mix(in srgb,var(--block) 20%,transparent);color:var(--block)}.btn-gate-close{background:color-mix(in srgb,var(--close) 18%,transparent);color:#ff9a8d}[data-btn-style=soft] .btn{border-radius:12px;padding:.68rem 1.15rem;font-size:.95rem;color:#fff;box-shadow:0 1px 2px #00000059,0 6px 16px -6px var(--btn-sh, transparent)}[data-btn-style=soft] .btn:hover:not(:disabled){filter:brightness(1.08);transform:translateY(-1px)}[data-btn-style=soft] .btn:active:not(:disabled){transform:translateY(0) scale(.98)}[data-btn-style=soft] .btn-primary{background:linear-gradient(180deg,color-mix(in srgb,var(--primary) 65%,white),var(--primary));color:#fff;--btn-sh: color-mix(in srgb, var(--primary) 45%, transparent)}[data-btn-style=soft] .btn-ghost{background:var(--surface-2);color:var(--text);box-shadow:none;border:1px solid var(--border)}[data-btn-style=soft] .btn-danger{background:var(--danger);color:#fff;--btn-sh: color-mix(in srgb, var(--danger) 40%, transparent)}[data-btn-style=soft] .btn-open{background:linear-gradient(180deg,color-mix(in srgb,var(--open) 60%,white),var(--open));color:#fff;--btn-sh: color-mix(in srgb, var(--open) 45%, transparent);font-size:1.05rem;padding:.8rem 1rem;width:100%}[data-btn-style=soft] .btn-gate-block{background:linear-gradient(180deg,color-mix(in srgb,var(--block) 60%,white),var(--block));color:#1a1a1a;--btn-sh: color-mix(in srgb, var(--block) 40%, transparent)}[data-btn-style=soft] .btn-gate-close{background:linear-gradient(180deg,color-mix(in srgb,var(--close) 60%,white),var(--close));color:#fff;--btn-sh: color-mix(in srgb, var(--close) 40%, transparent)}[data-btn-style=soft] .tabs{background:none;padding:0;border-radius:0;margin:.85rem 1rem 0;width:auto}[data-btn-style=soft] .tab{border-radius:9px;padding:.5rem .85rem}[data-btn-style=soft] .tab.active{color:#fff;background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--border)}[data-btn-style=line_fill] .btn{border:1.5px solid transparent;border-radius:9px;padding:.62rem 1.1rem;font-size:.95rem;background:transparent;color:var(--text)}[data-btn-style=line_fill] .btn:hover:not(:disabled){filter:none}[data-btn-style=line_fill] .btn-primary{background:var(--primary);color:#fff}[data-btn-style=line_fill] .btn-primary:hover:not(:disabled){background:color-mix(in srgb,var(--primary) 85%,white)}[data-btn-style=line_fill] .btn-ghost{border-color:var(--border);color:var(--text)}[data-btn-style=line_fill] .btn-ghost:hover:not(:disabled){border-color:var(--muted)}[data-btn-style=line_fill] .btn-danger{border-color:var(--danger);color:#ff9a8d}[data-btn-style=line_fill] .btn-danger:hover:not(:disabled){background:color-mix(in srgb,var(--danger) 15%,transparent)}[data-btn-style=line_fill] .btn-open{background:var(--open);color:#fff;font-size:1.05rem;padding:.75rem 1rem;width:100%}[data-btn-style=line_fill] .btn-gate-block{border-color:var(--block);color:var(--block)}[data-btn-style=line_fill] .btn-gate-close{border-color:var(--close);color:#ff9a8d}[data-btn-style=line_fill] .tabs{background:none;padding:0;border-radius:0;margin:0;width:auto;border-bottom:1px solid var(--border)}[data-btn-style=line_fill] .tab{border-radius:0;padding:.75rem 1rem;border-bottom:2px solid transparent;margin-bottom:-1px}[data-btn-style=line_fill] .tab.active{color:var(--primary);border-bottom-color:var(--primary);background:none}[data-btn-style=iconic] .btn{border-radius:10px;padding:.62rem 1.1rem .62rem .9rem;font-size:.93rem;color:#fff;border-bottom:2.5px solid rgba(0,0,0,.25)}[data-btn-style=iconic] .btn:hover:not(:disabled){filter:brightness(1.1);border-bottom-color:#ffffff80}[data-btn-style=iconic] .btn-primary{background:var(--primary)}[data-btn-style=iconic] .btn-ghost{background:var(--surface-2);color:var(--text);border-bottom-color:var(--border)}[data-btn-style=iconic] .btn-danger{background:var(--danger)}[data-btn-style=iconic] .btn-open{background:var(--open);font-size:1.05rem;padding:.75rem 1rem;width:100%}[data-btn-style=iconic] .btn-gate-block{background:var(--block);color:#1a1a1a;border-bottom-color:#00000026}[data-btn-style=iconic] .btn-gate-close{background:var(--close)}[data-btn-style=iconic] .tabs{background:none;padding:0;border-radius:0;margin:.85rem 1rem 0;width:auto;gap:.2rem}[data-btn-style=iconic] .tab{border-radius:8px 8px 0 0;padding:.55rem .8rem}[data-btn-style=iconic] .tab.active{color:var(--text);background:var(--bg)}.linklike{background:none;border:none;color:var(--muted);cursor:pointer;text-decoration:underline;margin-top:.6rem;font-size:.9rem}.error{background:#3a1d1d;border:1px solid var(--close);color:#ffd9d9;padding:.6rem .75rem;border-radius:8px;font-size:.9rem}.small{font-size:.8rem}.qr-wrap{display:flex;justify-content:center;margin:.75rem 0}.qr{width:200px;height:200px;background:#fff;padding:8px;border-radius:8px}.totp-secret{display:block;margin:.25rem 0 .75rem;padding:.5rem;background:var(--surface);border:1px solid var(--border);border-radius:6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.08em;word-break:break-all;-webkit-user-select:all;user-select:all}.page{min-height:100%;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1rem;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.topbar-right{display:flex;align-items:center;gap:.6rem}.content{padding:1rem;max-width:1100px;width:100%;margin:0 auto}.gate-grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.gate-card{display:flex;flex-direction:column;gap:.75rem}.gate-head{display:flex;align-items:center;gap:.6rem}.gate-head h2{font-size:1.1rem;margin:0}.gate-pos{flex:0 0 auto;width:2rem;height:2rem;border-radius:50%;background:var(--surface-2);display:grid;place-items:center;font-weight:700}.gate-actions{display:flex;gap:.5rem}.gate-actions .btn{flex:1}.gate-ok{color:var(--open);font-weight:600}.gate-err{color:var(--close);font-weight:600;font-size:.9rem}.tabs{display:flex;gap:.3rem;flex-wrap:wrap;margin:.85rem 1rem 0;padding:.3rem;background:var(--surface-2);border-radius:999px;width:fit-content}.tab{background:none;border:none;color:var(--muted);padding:.5rem .95rem;cursor:pointer;border-radius:999px;font-size:.9rem}.tab.active{color:#fff;background:var(--primary)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:.85rem;margin-bottom:1rem}.form-grid .wide{grid-column:1 / -1}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.6rem .5rem;border-bottom:1px solid var(--border);font-size:.92rem}th{color:var(--muted);font-weight:600}.role-block{border-top:1px solid var(--border);padding-top:.75rem;margin-top:.75rem}.role-block ul{margin:.3rem 0 0;padding-left:1.1rem}@media(max-width:640px){.form-grid{grid-template-columns:1fr}.hide-sm{display:none}.topbar strong{font-size:.95rem}.content{padding:.75rem}}
