*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:root{font-family:Inter,system-ui,sans-serif;--bg-base: #070b13;--glass-surface: rgba(17, 24, 39, .76);--glass-elevated: rgba(30, 41, 59, .62);--border: rgba(148, 163, 184, .24);--text-primary: #e5ebf5;--text-secondary: #a2aec1;--text-muted: #7b8595;--accent: #4f8ef7}html,body,#root{width:100%;height:100%;overflow:hidden;color:var(--text-primary);background:var(--bg-base)}*{scrollbar-width:thin;scrollbar-color:rgba(148,163,184,.45) rgba(15,23,42,.55)}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:#0f172a8c}*::-webkit-scrollbar-thumb{border-radius:999px;background:linear-gradient(180deg,#4f8ef7a6,#22c55e99)}.app{display:flex;height:100vh;width:100vw;background:radial-gradient(circle at top right,rgba(79,142,247,.18),transparent 45%),var(--bg-base);overflow:hidden}.sidebar-toggle{display:none;position:fixed;top:12px;left:12px;z-index:40;border:1px solid var(--border);background:var(--glass-elevated);color:var(--text-primary);border-radius:10px;padding:8px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.sidebar{width:260px;min-width:260px;background:var(--glass-surface);border-right:1px solid var(--border);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);display:flex;flex-direction:column;position:relative;transition:transform .25s ease}.sidebar:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(79,142,247,.16),rgba(34,197,94,.1),transparent 40%);pointer-events:none}.sidebar-brand,.nav-section-label,.nav-list,.sidebar-footer{position:relative;z-index:1}.sidebar-brand{padding:20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--border)}.sidebar-brand img{width:32px;height:32px;border-radius:8px}.brand-text{display:flex;flex-direction:column}.brand-name{font-size:13px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.brand-sub{font-size:11px;color:var(--text-secondary)}.nav-section-label{padding:14px 16px 8px;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted)}.nav-list{padding:0 10px;overflow-y:auto}.nav-list-overview{margin-bottom:6px}.nav-item{width:100%;display:flex;align-items:center;gap:10px;border:1px solid transparent;background:transparent;color:var(--text-secondary);border-radius:12px;padding:10px;margin-bottom:6px;cursor:pointer;transition:all .2s ease}.nav-item:hover,.nav-item.active{color:var(--text-primary);border-color:var(--border);background:#ffffff0f;transform:translate(2px)}.nav-icon{color:var(--item-color, var(--text-muted));display:inline-flex}.nav-label{flex:1;text-align:left}.nav-badge,.shortcut{border:1px solid var(--border);border-radius:999px;font-size:10px;color:var(--text-muted);padding:2px 6px}.status-dot{width:8px;height:8px;border-radius:50%;background:#6b7280;box-shadow:0 0 #6b72804d}.status-dot.loading{background:#f59e0b;animation:pulse 1.5s infinite}.status-dot.connected{background:#22c55e;box-shadow:0 0 0 4px #22c55e1f}.status-dot.error{background:#ef4444}@keyframes pulse{0%{box-shadow:0 0 #f59e0b66}to{box-shadow:0 0 0 8px #f59e0b00}}.main{flex:1;min-width:0;display:flex;flex-direction:column;animation:fade-in .3s ease}@keyframes fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.topbar{height:64px;border-bottom:1px solid var(--border);background:var(--glass-surface);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 20px}.topbar-title{font-size:16px;font-weight:600;letter-spacing:.02em}.topbar-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.topbar-chip{display:inline-flex;align-items:center;gap:6px;border-radius:999px;border:1px solid var(--border);background:var(--glass-elevated);color:var(--text-secondary);font-size:11px;padding:6px 10px}.button-chip{cursor:pointer}.iframe-area{flex:1;min-height:0;position:relative;padding:12px}.frame-wrap{width:100%;height:100%;position:relative;border-radius:16px;border:1px solid var(--border);overflow:hidden;background:#0b0f17;box-shadow:0 20px 40px #00000047}.dashboard-iframe{width:100%;height:100%;border:none;background:#fff}.frame-overlay{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:14px;background:linear-gradient(130deg,#0a0c10f2,#0e1218e6)}.frame-skeleton{padding:22px;align-items:stretch}.skeleton{height:14px;border-radius:10px;background:linear-gradient(90deg,#ffffff14,#ffffff2e,#ffffff14);background-size:220% 100%;animation:shimmer 1.2s linear infinite}.skeleton-head{height:24px;width:50%}@keyframes shimmer{to{background-position:-220% 0}}.frame-error{color:#f8fafc}.frame-actions{display:flex;gap:8px}.frame-actions button{display:inline-flex;align-items:center;gap:6px;border-radius:10px;border:1px solid var(--border);background:var(--glass-elevated);color:var(--text-primary);padding:8px 10px;cursor:pointer}.dashboard-grid{width:100%;height:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:12px}.dashboard-grid-item{min-height:280px;border-radius:14px;border:1px solid var(--border);background:var(--glass-surface);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);display:flex;flex-direction:column;overflow:hidden;transition:transform .2s ease,box-shadow .2s ease}.dashboard-grid-item:hover{transform:translateY(-2px);box-shadow:0 12px 28px #00000047}.dashboard-grid-header{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);padding:10px 12px}.dashboard-grid-title{display:inline-flex;align-items:center;gap:8px;color:var(--text-primary)}.dashboard-grid-icon{color:var(--item-color, var(--accent));display:inline-flex}.dashboard-grid-item .frame-wrap{border-radius:0;border:none;box-shadow:none}.state-screen{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}.state-skeleton{width:min(560px,85vw);height:190px;border-radius:16px}.state-msg{color:var(--text-muted)}@media(max-width:980px){.sidebar-toggle{display:inline-flex}.sidebar{position:fixed;z-index:30;height:100vh;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.topbar{padding-left:56px}}
