:root{--bg: #f3f1ec;--bg-elevated: #fffdf8;--ink: #1a2332;--muted: #5d6b7c;--line: #d7dde6;--accent: #0f766e;--accent-soft: #d9f3ef;--warn: #b45309;--danger: #b91c1c;--ok: #15803d;--shadow: 0 18px 40px rgba(26, 35, 50, .08);--radius: 14px;--font: "IBM Plex Sans", "Segoe UI", sans-serif;--mono: "IBM Plex Mono", ui-monospace, monospace}*{box-sizing:border-box}html,body,#app{min-height:100%}body{margin:0;color:var(--ink);font-family:var(--font);background:radial-gradient(circle at top left,rgba(15,118,110,.12),transparent 28%),linear-gradient(180deg,#ebe7df 0%,var(--bg) 42%,#e7edf3 100%)}a{color:inherit;text-decoration:none}button,input,select{font:inherit}.shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.sidebar{padding:28px 20px;border-right:1px solid rgba(26,35,50,.08);background:#fffdf8b8;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.brand{display:grid;gap:4px;margin-bottom:28px}.brand strong{font-size:1.15rem;letter-spacing:-.02em}.brand span{color:var(--muted);font-size:.85rem}.nav{display:grid;gap:6px}.nav a{padding:10px 12px;border-radius:10px;color:var(--muted);transition:background .16s ease,color .16s ease,transform .16s ease}.nav a:hover{color:var(--ink);background:#0f766e14;transform:translate(2px)}.nav a.active{color:var(--accent);background:var(--accent-soft);font-weight:600}.content{padding:28px}.page-head{display:flex;justify-content:space-between;gap:16px;align-items:end;margin-bottom:20px}.page-head h1{margin:0;font-size:1.7rem;letter-spacing:-.03em}.page-head p{margin:6px 0 0;color:var(--muted)}.panel{background:var(--bg-elevated);border:1px solid rgba(26,35,50,.08);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.toolbar{display:flex;gap:10px;flex-wrap:wrap;padding:14px 16px;border-bottom:1px solid var(--line);background:#f3f1ec8c}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse}th,td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:#f3f1eca6}td.mono,.mono{font-family:var(--mono);font-size:.86rem}.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;border-radius:999px;font-size:.78rem;font-weight:600}.badge:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}.badge.ok{color:var(--ok);background:#15803d1a}.badge.warn{color:var(--warn);background:#b453091f}.badge.danger{color:var(--danger);background:#b91c1c1a}.badge.muted{color:var(--muted);background:#5d6b7c1f}.btn{border:0;border-radius:10px;padding:10px 14px;background:var(--accent);color:#fff;cursor:pointer;font-weight:600;transition:transform .14s ease,opacity .14s ease}.btn:hover{transform:translateY(-1px)}.btn.secondary{background:transparent;color:var(--ink);border:1px solid var(--line)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.field{display:grid;gap:6px}.field label{font-size:.82rem;color:var(--muted)}.field input,.field select{min-width:160px;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:#fff}.error{color:var(--danger);margin:0}.empty{padding:28px 16px;color:var(--muted)}.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:18px}.stat{padding:16px 18px;border-radius:var(--radius);background:#fffdf8e6;border:1px solid rgba(26,35,50,.08);box-shadow:var(--shadow)}.stat strong{display:block;font-size:1.55rem;letter-spacing:-.03em;margin-top:6px}.stat span{color:var(--muted);font-size:.86rem}.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:min(420px,100%);padding:28px;border-radius:18px;background:var(--bg-elevated);border:1px solid rgba(26,35,50,.08);box-shadow:var(--shadow)}.login-card h1{margin:0 0 8px;font-size:1.6rem;letter-spacing:-.03em}.login-card p{margin:0 0 22px;color:var(--muted)}.login-card form{display:grid;gap:14px}@media(max-width:900px){.shell{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid rgba(26,35,50,.08)}.stats{grid-template-columns:1fr}.content{padding:18px}}
