|
|
| @import url("https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500&display=swap");
|
|
|
| :root {
|
| --bg: #09090b;
|
| --bg-2: #0c0c0f;
|
| --panel: #0f0f12;
|
| --panel-2: #131318;
|
| --elevated: #18181b;
|
| --line: rgba(255, 255, 255, 0.08);
|
| --line-2: rgba(255, 255, 255, 0.12);
|
| --text: #fafafa;
|
| --text-2: #a1a1aa;
|
| --muted: #71717a;
|
| --brand: #22d3ee;
|
| --brand-2: #a78bfa;
|
| --brand-soft: rgba(34, 211, 238, 0.12);
|
| --ok: #4ade80;
|
| --ok-soft: rgba(74, 222, 128, 0.12);
|
| --warn: #fbbf24;
|
| --warn-soft: rgba(251, 191, 36, 0.12);
|
| --bad: #f87171;
|
| --bad-soft: rgba(248, 113, 113, 0.12);
|
| --shadow: 0 0 0 1px rgba(255,255,255,0.04), 0 16px 40px rgba(0,0,0,.45);
|
| --r: 12px;
|
| --r-sm: 8px;
|
| --side: 248px;
|
| --font: "Geist", "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;
|
| --mono: "Geist Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
|
| --ease: cubic-bezier(.2,.8,.2,1);
|
| }
|
|
|
| * { box-sizing: border-box; }
|
| html, body { height: 100%; }
|
| body {
|
| margin: 0;
|
| font-family: var(--font);
|
| color: var(--text);
|
| background: var(--bg);
|
| min-height: 100vh;
|
| -webkit-font-smoothing: antialiased;
|
| font-feature-settings: "ss01" on, "cv11" on;
|
| }
|
| button, input, select, textarea { font: inherit; color: inherit; }
|
| a { color: var(--brand); text-decoration: none; }
|
| a:hover { color: #67e8f9; }
|
| .mono { font-family: var(--mono); font-size: .86em; letter-spacing: -.01em; }
|
| .muted { color: var(--muted); }
|
| .hidden { display: none !important; }
|
|
|
|
|
| .shell {
|
| display: grid;
|
| grid-template-columns: var(--side) minmax(0, 1fr);
|
| min-height: 100vh;
|
| background:
|
| radial-gradient(900px 500px at 0% 0%, rgba(34,211,238,.08), transparent 55%),
|
| radial-gradient(800px 480px at 100% 0%, rgba(167,139,250,.07), transparent 50%),
|
| var(--bg);
|
| }
|
|
|
| .sidebar {
|
| position: sticky;
|
| top: 0;
|
| height: 100vh;
|
| display: flex;
|
| flex-direction: column;
|
| gap: 8px;
|
| padding: 18px 12px 14px;
|
| background: rgba(12,12,15,.85);
|
| border-right: 1px solid var(--line);
|
| backdrop-filter: blur(16px);
|
| z-index: 30;
|
| }
|
| .brand {
|
| display: flex;
|
| align-items: center;
|
| gap: 12px;
|
| padding: 8px 10px 16px;
|
| }
|
| .logo {
|
| width: 36px;
|
| height: 36px;
|
| border-radius: 10px;
|
| display: grid;
|
| place-items: center;
|
| font-weight: 700;
|
| font-size: .95rem;
|
| color: #041016;
|
| background: linear-gradient(135deg, #22d3ee, #818cf8);
|
| box-shadow: 0 8px 24px rgba(34,211,238,.2);
|
| flex: 0 0 auto;
|
| }
|
| .brand h1 {
|
| margin: 0;
|
| font-size: .95rem;
|
| font-weight: 600;
|
| letter-spacing: -.02em;
|
| }
|
| .brand p {
|
| margin: 2px 0 0;
|
| color: var(--muted);
|
| font-size: .72rem;
|
| display: flex;
|
| align-items: center;
|
| gap: 6px;
|
| }
|
| .ver-chip {
|
| font-family: var(--mono);
|
| font-size: .68rem;
|
| color: var(--text-2);
|
| background: var(--elevated);
|
| border: 1px solid var(--line);
|
| border-radius: 999px;
|
| padding: 1px 7px;
|
| }
|
|
|
| .nav {
|
| display: flex;
|
| flex-direction: column;
|
| gap: 2px;
|
| flex: 1;
|
| padding: 0 2px;
|
| }
|
| .nav-btn {
|
| appearance: none;
|
| border: 0;
|
| background: transparent;
|
| color: var(--text-2);
|
| text-align: left;
|
| padding: 9px 10px;
|
| border-radius: 9px;
|
| cursor: pointer;
|
| display: flex;
|
| align-items: center;
|
| gap: 10px;
|
| transition: background .15s var(--ease), color .15s var(--ease);
|
| font-size: .875rem;
|
| font-weight: 500;
|
| text-decoration: none !important;
|
| position: relative;
|
| }
|
| a.nav-btn { color: var(--text-2); }
|
| .nav-btn:hover {
|
| background: rgba(255,255,255,.04);
|
| color: var(--text);
|
| }
|
| .nav-btn.active {
|
| background: rgba(255,255,255,.06);
|
| color: var(--text);
|
| }
|
| .nav-btn.active::before {
|
| content: "";
|
| position: absolute;
|
| left: 0; top: 8px; bottom: 8px;
|
| width: 2px;
|
| border-radius: 2px;
|
| background: var(--brand);
|
| }
|
| .nav-ico {
|
| width: 22px;
|
| height: 22px;
|
| border-radius: 6px;
|
| display: grid;
|
| place-items: center;
|
| background: transparent;
|
| border: 0;
|
| font-size: .95rem;
|
| opacity: .9;
|
| flex: 0 0 auto;
|
| }
|
| .nav-btn.active .nav-ico { color: var(--brand); }
|
|
|
| .sidebar-foot {
|
| margin-top: auto;
|
| padding: 12px 8px 2px;
|
| border-top: 1px solid var(--line);
|
| display: flex;
|
| flex-direction: column;
|
| gap: 6px;
|
| }
|
| .side-link {
|
| color: var(--muted);
|
| font-size: .75rem;
|
| padding: 4px 6px;
|
| border-radius: 6px;
|
| text-decoration: none !important;
|
| transition: color .15s ease, background .15s ease;
|
| }
|
| .side-link:hover {
|
| color: var(--text-2);
|
| background: rgba(255,255,255,.03);
|
| }
|
|
|
| .main {
|
| min-width: 0;
|
| padding: 28px 32px 56px;
|
| max-width: 1280px;
|
| }
|
|
|
|
|
| .topbar {
|
| display: flex;
|
| align-items: flex-start;
|
| justify-content: space-between;
|
| gap: 16px;
|
| margin-bottom: 24px;
|
| flex-wrap: wrap;
|
| }
|
| .topbar h2 {
|
| margin: 0;
|
| font-size: 1.5rem;
|
| font-weight: 650;
|
| letter-spacing: -.035em;
|
| line-height: 1.2;
|
| }
|
| .topbar .sub {
|
| margin: 6px 0 0;
|
| color: var(--muted);
|
| font-size: .875rem;
|
| line-height: 1.45;
|
| max-width: 52ch;
|
| }
|
| .top-actions, .topbar-actions {
|
| display: flex;
|
| align-items: center;
|
| gap: 8px;
|
| flex-wrap: wrap;
|
| padding-top: 2px;
|
| }
|
|
|
|
|
| .card {
|
| background: var(--panel);
|
| border: 1px solid var(--line);
|
| border-radius: 14px;
|
| box-shadow: var(--shadow);
|
| padding: 18px 18px 16px;
|
| margin-bottom: 14px;
|
| }
|
| .card-head {
|
| display: flex;
|
| align-items: flex-start;
|
| justify-content: space-between;
|
| gap: 12px;
|
| margin-bottom: 14px;
|
| flex-wrap: wrap;
|
| }
|
| .card-head h3 {
|
| margin: 0;
|
| font-size: .95rem;
|
| font-weight: 600;
|
| letter-spacing: -.02em;
|
| }
|
| .card-head p {
|
| margin: 4px 0 0;
|
| color: var(--muted);
|
| font-size: .8rem;
|
| line-height: 1.5;
|
| max-width: 64ch;
|
| }
|
|
|
| .grid {
|
| display: grid;
|
| gap: 10px;
|
| grid-template-columns: repeat(auto-fit, minmax(168px, 1fr));
|
| }
|
| .grid-2 {
|
| display: grid;
|
| gap: 12px;
|
| grid-template-columns: repeat(2, minmax(0, 1fr));
|
| }
|
| .stat {
|
| position: relative;
|
| overflow: hidden;
|
| background: var(--panel-2);
|
| border: 1px solid var(--line);
|
| border-radius: 12px;
|
| padding: 14px;
|
| min-height: 88px;
|
| transition: border-color .15s ease;
|
| }
|
| .stat:hover { border-color: var(--line-2); }
|
| .stat .k {
|
| color: var(--muted);
|
| font-size: .72rem;
|
| font-weight: 500;
|
| letter-spacing: .03em;
|
| text-transform: uppercase;
|
| }
|
| .stat .v {
|
| margin-top: 10px;
|
| font-size: 1.15rem;
|
| font-weight: 650;
|
| letter-spacing: -.03em;
|
| word-break: break-word;
|
| line-height: 1.25;
|
| }
|
| .stat .v.ok { color: var(--ok); }
|
| .stat .v.warn { color: var(--warn); }
|
| .stat .v.bad { color: var(--bad); }
|
|
|
|
|
| label {
|
| display: block;
|
| margin: 0 0 6px;
|
| color: var(--text-2);
|
| font-size: .8rem;
|
| font-weight: 500;
|
| }
|
| input, select, textarea {
|
| width: 100%;
|
| background: #09090b;
|
| border: 1px solid var(--line-2);
|
| border-radius: 9px;
|
| padding: 9px 11px;
|
| outline: none;
|
| transition: border-color .15s ease, box-shadow .15s ease;
|
| color: var(--text);
|
| }
|
| input::placeholder, textarea::placeholder { color: #52525b; }
|
| input:focus, select:focus, textarea:focus {
|
| border-color: rgba(34,211,238,.5);
|
| box-shadow: 0 0 0 3px rgba(34,211,238,.12);
|
| }
|
| textarea {
|
| min-height: 96px;
|
| resize: vertical;
|
| font-family: var(--mono);
|
| font-size: .82rem;
|
| line-height: 1.5;
|
| }
|
| .row {
|
| display: flex;
|
| gap: 10px;
|
| flex-wrap: wrap;
|
| align-items: flex-end;
|
| }
|
| .row > * { min-width: 0; }
|
| .field { flex: 1 1 180px; }
|
| .field.sm { flex: 0 1 140px; }
|
| .actions {
|
| display: flex;
|
| gap: 8px;
|
| flex-wrap: wrap;
|
| align-items: center;
|
| }
|
|
|
|
|
| .btn {
|
| appearance: none;
|
| border: 1px solid var(--line-2);
|
| background: var(--elevated);
|
| color: var(--text);
|
| border-radius: 9px;
|
| padding: 8px 12px;
|
| cursor: pointer;
|
| font-weight: 550;
|
| font-size: .84rem;
|
| transition: background .15s var(--ease), border-color .15s var(--ease), transform .1s ease;
|
| display: inline-flex;
|
| align-items: center;
|
| justify-content: center;
|
| gap: 6px;
|
| white-space: nowrap;
|
| line-height: 1.2;
|
| }
|
| .btn:hover {
|
| background: #1f1f24;
|
| border-color: rgba(255,255,255,.18);
|
| }
|
| .btn:active { transform: translateY(1px); }
|
| .btn.primary {
|
| background: linear-gradient(180deg, #2dd4bf, #14b8a6);
|
| border-color: transparent;
|
| color: #042f2e;
|
| font-weight: 650;
|
| box-shadow: 0 1px 0 rgba(255,255,255,.2) inset, 0 8px 20px rgba(20,184,166,.18);
|
| }
|
| .btn.primary:hover {
|
| filter: brightness(1.05);
|
| color: #042f2e;
|
| }
|
| .btn.danger {
|
| border-color: rgba(248,113,113,.35);
|
| color: #fecaca;
|
| background: rgba(248,113,113,.06);
|
| }
|
| .btn.danger:hover { background: rgba(248,113,113,.12); }
|
| .btn.ghost {
|
| background: transparent;
|
| border-color: var(--line);
|
| color: var(--text-2);
|
| }
|
| .btn.ghost:hover {
|
| color: var(--text);
|
| background: rgba(255,255,255,.04);
|
| }
|
| .btn.sm { padding: 6px 9px; font-size: .78rem; border-radius: 8px; }
|
| .btn:disabled, .btn.busy {
|
| opacity: .5;
|
| cursor: not-allowed;
|
| pointer-events: none;
|
| }
|
|
|
|
|
| .table-wrap {
|
| overflow-x: auto;
|
| -webkit-overflow-scrolling: touch;
|
| border: 1px solid var(--line);
|
| border-radius: 12px;
|
| background: #0a0a0c;
|
| }
|
| table {
|
| width: 100%;
|
| border-collapse: collapse;
|
| font-size: .84rem;
|
| }
|
| th, td {
|
| text-align: left;
|
| padding: 11px 12px;
|
| border-bottom: 1px solid var(--line);
|
| vertical-align: middle;
|
| }
|
| th {
|
| color: var(--muted);
|
| font-weight: 550;
|
| font-size: .72rem;
|
| text-transform: uppercase;
|
| letter-spacing: .05em;
|
| background: rgba(255,255,255,.02);
|
| position: sticky;
|
| top: 0;
|
| }
|
| tr:last-child td { border-bottom: 0; }
|
| tr:hover td { background: rgba(255,255,255,.015); }
|
| td .btn { margin: 1px; }
|
|
|
|
|
| .pill {
|
| display: inline-flex;
|
| align-items: center;
|
| gap: 6px;
|
| border-radius: 999px;
|
| padding: 4px 9px;
|
| font-size: .72rem;
|
| font-weight: 600;
|
| border: 1px solid var(--line);
|
| background: rgba(255,255,255,.03);
|
| color: var(--text-2);
|
| white-space: nowrap;
|
| }
|
| .pill.ok, .pill.live {
|
| color: #bbf7d0;
|
| border-color: rgba(74,222,128,.25);
|
| background: var(--ok-soft);
|
| }
|
| .pill.warn {
|
| color: #fde68a;
|
| border-color: rgba(251,191,36,.25);
|
| background: var(--warn-soft);
|
| }
|
| .pill.bad {
|
| color: #fecaca;
|
| border-color: rgba(248,113,113,.28);
|
| background: var(--bad-soft);
|
| }
|
| .pill.live::before {
|
| content: "";
|
| width: 6px; height: 6px; border-radius: 50%;
|
| background: var(--ok);
|
| box-shadow: 0 0 0 3px rgba(74,222,128,.15);
|
| }
|
|
|
|
|
| .codebox, pre.code, .guide-code {
|
| background: #050507;
|
| border: 1px solid var(--line);
|
| border-radius: 10px;
|
| padding: 12px 14px;
|
| overflow-x: auto;
|
| font-family: var(--mono);
|
| font-size: .78rem;
|
| line-height: 1.6;
|
| color: #e4e4e7;
|
| }
|
| .lead {
|
| color: var(--text-2);
|
| line-height: 1.55;
|
| font-size: .9rem;
|
| }
|
|
|
|
|
| .center-wrap {
|
| min-height: 100vh;
|
| display: grid;
|
| place-items: center;
|
| padding: 24px;
|
| background:
|
| radial-gradient(700px 400px at 50% 0%, rgba(34,211,238,.1), transparent 60%),
|
| var(--bg);
|
| }
|
| .auth-card {
|
| width: min(400px, 100%);
|
| padding: 28px 26px !important;
|
| background: var(--panel) !important;
|
| }
|
| .auth-card .brand { padding: 0 0 18px; }
|
| .auth-card h1 { font-size: 1.05rem; }
|
| .auth-card h2 {
|
| margin: 0 0 6px;
|
| font-size: 1.25rem;
|
| letter-spacing: -.025em;
|
| font-weight: 650;
|
| }
|
| .auth-card .lead { margin: 0 0 18px; }
|
| .auth-card label { margin-top: 12px; }
|
| .auth-card input { margin-bottom: 2px; }
|
| .auth-card .row { margin-top: 16px; }
|
| .auth-card .btn.primary { width: 100%; padding: 11px 14px; }
|
|
|
|
|
| .toast {
|
| position: fixed;
|
| right: 16px;
|
| bottom: 16px;
|
| z-index: 1000;
|
| max-width: min(380px, calc(100vw - 28px));
|
| padding: 11px 13px;
|
| border-radius: 10px;
|
| border: 1px solid var(--line-2);
|
| background: rgba(15,15,18,.96);
|
| box-shadow: var(--shadow);
|
| color: var(--text);
|
| font-size: .86rem;
|
| opacity: 0;
|
| transform: translateY(8px) scale(.98);
|
| pointer-events: none;
|
| transition: .18s var(--ease);
|
| backdrop-filter: blur(12px);
|
| }
|
| .toast.show {
|
| opacity: 1;
|
| transform: none;
|
| pointer-events: auto;
|
| }
|
| .toast.ok { border-color: rgba(74,222,128,.35); }
|
| .toast.err {
|
| border-color: rgba(248,113,113,.4);
|
| color: #fecaca;
|
| }
|
|
|
|
|
| .empty-state {
|
| text-align: center;
|
| padding: 36px 16px;
|
| color: var(--muted);
|
| font-size: .9rem;
|
| }
|
| .table-toolbar, .accounts-toolbar {
|
| display: flex;
|
| flex-wrap: wrap;
|
| gap: 8px;
|
| align-items: center;
|
| margin-bottom: 12px;
|
| }
|
| .mobile-nav {
|
| display: none;
|
| gap: 6px;
|
| overflow-x: auto;
|
| padding: 0 0 12px;
|
| margin: -4px 0 8px;
|
| scrollbar-width: none;
|
| }
|
| .mobile-nav::-webkit-scrollbar { display: none; }
|
| .mobile-nav .nav-btn {
|
| flex: 0 0 auto;
|
| padding: 8px 12px;
|
| font-size: .8rem;
|
| border: 1px solid var(--line);
|
| background: var(--elevated);
|
| border-radius: 999px;
|
| }
|
| .mobile-nav .nav-btn.active {
|
| border-color: rgba(34,211,238,.35);
|
| background: var(--brand-soft);
|
| color: var(--text);
|
| }
|
| .mobile-nav .nav-btn.active::before { display: none; }
|
| .log, .device-log, #device-log, #reg-log, #probe-result {
|
| font-family: var(--mono);
|
| font-size: .76rem;
|
| background: #050507;
|
| border: 1px solid var(--line);
|
| border-radius: 10px;
|
| padding: 10px 12px;
|
| max-height: 220px;
|
| overflow: auto;
|
| white-space: pre-wrap;
|
| color: var(--text-2);
|
| line-height: 1.5;
|
| }
|
| hr.sep {
|
| border: 0;
|
| border-top: 1px solid var(--line);
|
| margin: 16px 0;
|
| }
|
| .page-section-title {
|
| margin: 8px 0 12px;
|
| font-size: .75rem;
|
| font-weight: 600;
|
| letter-spacing: .06em;
|
| text-transform: uppercase;
|
| color: var(--muted);
|
| }
|
|
|
|
|
| a.btn, a.btn:hover { text-decoration: none; }
|
|
|
|
|
| @media (max-width: 960px) {
|
| .shell { grid-template-columns: 1fr; }
|
| .sidebar { display: none; }
|
| .mobile-nav { display: flex; }
|
| .main { padding: 16px 14px 48px; }
|
| .grid-2 { grid-template-columns: 1fr; }
|
| .topbar h2 { font-size: 1.25rem; }
|
| .btn { min-height: 36px; }
|
| .toast { bottom: 76px; right: 12px; }
|
| }
|
|
|
| @media (prefers-reduced-motion: reduce) {
|
| * { transition: none !important; animation: none !important; }
|
| }
|
|
|