:root{--bg: #f5f7fa;--canvas: #ffffff;--panel: #ffffff;--line: #e2e8f0;--text: #1b2632;--muted: #5b6b7c;--accent: #2662d9;--accent-soft: rgba(38, 98, 217, .1);--accent-ink: #ffffff;--brand-violet: #6d28d9;--brand-amber: #eab308;--ok: #15803d;--warn: #b45309;--bad: #dc2626;--ok-soft: rgba(21, 128, 61, .1);--warn-soft: rgba(180, 83, 9, .1);--bad-soft: rgba(220, 38, 38, .08);--series-1: #2662d9;--series-2: #b02a8f;--hue-devices: #2662d9;--hue-links: #0f9d58;--hue-vlans: #7c3aed;--hue-events: #c2410c;--graph-select: #2662d9;--vlan-1: #0284c7;--vlan-2: #ca8a04;--vlan-3: #0f766e;--vlan-4: #be185d;--vlan-5: #4f46e5;--vlan-6: #0891b2;--shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 8px 20px -12px rgba(16, 24, 40, .18);--radius: 12px;--radius-sm: 8px;--mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--sans: "Noto Sans TC", Inter, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;color-scheme:light}@media(prefers-color-scheme:dark){:root[data-theme=dark],:root:not([data-theme=light]){--bg: #0b1220;--canvas: #0f172a;--panel: #111c30;--line: #1e293b;--text: #e2e8f0;--muted: #94a3b8;--accent: #7fb2ff;--accent-soft: rgba(127, 178, 255, .14);--accent-ink: #0b1220;--ok: #22c55e;--warn: #fbbf24;--bad: #f87171;--ok-soft: rgba(34, 197, 94, .12);--warn-soft: rgba(251, 191, 36, .12);--bad-soft: rgba(248, 113, 113, .1);--series-1: #4285eb;--series-2: #d061b0;--hue-devices: #60a5fa;--hue-links: #34d399;--hue-vlans: #a78bfa;--hue-events: #fb923c;--graph-select: #7fb2ff;--vlan-1: #38bdf8;--vlan-2: #fbbf24;--vlan-3: #2dd4bf;--vlan-4: #f472b6;--vlan-5: #818cf8;--vlan-6: #22d3ee;--shadow: none;color-scheme:dark}}:root[data-theme=dark]{--bg: #0b1220;--canvas: #0f172a;--panel: #111c30;--line: #1e293b;--text: #e2e8f0;--muted: #94a3b8;--accent: #7fb2ff;--accent-soft: rgba(127, 178, 255, .14);--accent-ink: #0b1220;--ok: #22c55e;--warn: #fbbf24;--bad: #f87171;--ok-soft: rgba(34, 197, 94, .12);--warn-soft: rgba(251, 191, 36, .12);--bad-soft: rgba(248, 113, 113, .1);--series-1: #4285eb;--series-2: #d061b0;--hue-devices: #60a5fa;--hue-links: #34d399;--hue-vlans: #a78bfa;--hue-events: #fb923c;--graph-select: #7fb2ff;--vlan-1: #38bdf8;--vlan-2: #fbbf24;--vlan-3: #2dd4bf;--vlan-4: #f472b6;--vlan-5: #818cf8;--vlan-6: #22d3ee;--shadow: none;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:15px;-webkit-font-smoothing:antialiased}:root.theme-switching,:root.theme-switching body{transition:background-color .18s ease,color .18s ease}a{color:var(--accent)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--muted) 35%,transparent);border-radius:5px}::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--muted) 55%,transparent)}.page-head{margin:0 0 .25rem}.page-head h1{margin:0;font-size:1.8rem;font-weight:700;letter-spacing:-.02em;line-height:1.25}.page-head h1 em{font-style:normal;color:var(--accent)}.page-head p{margin:.35rem 0 0;font-size:.9rem;color:var(--muted)}.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.22rem .7rem;border-radius:999px;border:1px solid color-mix(in srgb,var(--hue, var(--accent)) 22%,transparent);background:color-mix(in srgb,var(--hue, var(--accent)) 10%,transparent);color:var(--hue, var(--accent));font-size:.72rem;font-weight:600;letter-spacing:.02em;text-transform:none}.dashboard .tile .glyph svg{overflow:visible}.dashboard .tile .glyph .scan{opacity:0}.dashboard .tile:hover .glyph .scan,.tile:focus-visible .glyph .scan{animation:screen-scan 1.5s ease-in-out infinite}.dashboard .tile:hover .glyph .half-a,.dashboard .tile:hover .glyph .half-b,.tile:focus-visible .glyph .half-a,.tile:focus-visible .glyph .half-b{stroke-dasharray:9 3;animation:link-travel .9s linear infinite}.dashboard .tile:hover .glyph .half-b,.tile:focus-visible .glyph .half-b{animation-delay:-.45s}.dashboard .tile:hover .glyph .cell,.tile:focus-visible .glyph .cell{animation:cell-wake 1.3s ease-in-out infinite}.dashboard .tile:hover .glyph .cell:nth-of-type(1),.tile:focus-visible .glyph .cell:nth-of-type(1){animation-delay:0s}.dashboard .tile:hover .glyph .cell:nth-of-type(2),.tile:focus-visible .glyph .cell:nth-of-type(2){animation-delay:.1s}.dashboard .tile:hover .glyph .cell:nth-of-type(4),.tile:focus-visible .glyph .cell:nth-of-type(4){animation-delay:.2s}.dashboard .tile:hover .glyph .cell:nth-of-type(3),.tile:focus-visible .glyph .cell:nth-of-type(3){animation-delay:.3s}.dashboard .tile:hover .glyph .dome,.dashboard .tile:hover .glyph .clapper,.tile:focus-visible .glyph .dome,.tile:focus-visible .glyph .clapper{transform-origin:12px 3px;animation:bell-ring 1.4s ease-in-out infinite}@keyframes screen-scan{0%{opacity:0;transform:translateY(0)}12%{opacity:.9}70%{opacity:.9;transform:translateY(6.5px)}85%,to{opacity:0;transform:translateY(6.5px)}}@keyframes link-travel{to{stroke-dashoffset:-12}}@keyframes cell-wake{0%,60%,to{opacity:.4}20%{opacity:1}}@keyframes bell-ring{0%,60%,to{transform:rotate(0)}10%{transform:rotate(11deg)}25%{transform:rotate(-9deg)}38%{transform:rotate(5deg)}50%{transform:rotate(-2deg)}}@media(prefers-reduced-motion:reduce){.dashboard .tile:hover .glyph .scan,.dashboard .tile:hover .glyph .half-a,.dashboard .tile:hover .glyph .half-b,.dashboard .tile:hover .glyph .cell,.dashboard .tile:hover .glyph .dome,.dashboard .tile:hover .glyph .clapper,.tile:focus-visible .glyph .scan,.tile:focus-visible .glyph .half-a,.tile:focus-visible .glyph .half-b,.tile:focus-visible .glyph .cell,.tile:focus-visible .glyph .dome,.tile:focus-visible .glyph .clapper{animation:none}}
