:root{--color-brand-primary: #3b82f6;--color-brand-primary-light: #60a5fa;--color-semantic-success: #22c55e;--color-semantic-warning: #f97316;--color-semantic-danger: #ef4444;--color-semantic-info: #38bdf8;--color-surface-bg: #0e1116;--color-surface-panel: #161b22;--color-surface-panel2: #1f262f;--color-surface-line: #2a313b;--color-text-primary: #e6edf3;--color-text-secondary: #8b949e;--color-text-inverse: #0e1116;--color-text-on-brand: #ffffff;--color-live-live: var(--color-semantic-danger);--color-live-recording: #ef4444;--color-live-offline: var(--color-text-secondary);--color-live-motion: var(--color-semantic-warning);--color-gradient-brand-hero: linear-gradient(135deg, var(--color-brand-primary) 0%, var(--color-brand-primary-light) 100%);--spacing-0: 0;--spacing-1: 2px;--spacing-2: 4px;--spacing-3: 6px;--spacing-4: 8px;--spacing-5: 10px;--spacing-6: 12px;--spacing-7: 14px;--spacing-8: 16px;--spacing-10: 20px;--spacing-12: 24px;--spacing-14: 28px;--spacing-16: 32px;--spacing-20: 40px;--spacing-24: 48px;--radius-xs: 4px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 14px;--radius-xl: 16px;--radius-2xl: 18px;--radius-3xl: 32px;--radius-full: 9999px;--font-family-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang TC", "Microsoft JhengHei", Roboto, sans-serif;--font-family-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--font-size-xs: 10px;--font-size-sm: 11px;--font-size-base: 12px;--font-size-md: 13px;--font-size-lg: 14px;--font-size-xl: 15px;--font-size-2xl: 17px;--font-size-3xl: 18px;--font-size-4xl: 22px;--font-size-5xl: 32px;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.3;--line-height-normal: 1.5;--line-height-relaxed: 1.6;--letter-spacing-tight: -.01em;--letter-spacing-normal: 0;--letter-spacing-wide: .04em;--letter-spacing-wider: .05em;--letter-spacing-widest: .08em;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-md: 0 6px 20px 0 rgba(0, 0, 0, .35);--shadow-lg: 0 30px 80px 0 rgba(0, 0, 0, .5);--shadow-card: 0 8px 24px 0 rgba(0, 0, 0, .25);--motion-duration-fast: .15s;--motion-duration-normal: .2s;--motion-duration-slow: .3s;--motion-duration-slower: .5s;--motion-easing-linear: linear;--motion-easing-ease: cubic-bezier(.4, 0, .2, 1);--motion-easing-ease-in: cubic-bezier(.4, 0, 1, 1);--motion-easing-ease-out: cubic-bezier(0, 0, .2, 1);--motion-easing-spring: cubic-bezier(.34, 1.56, .64, 1);--size-icon-xs: 12px;--size-icon-sm: 16px;--size-icon-md: 20px;--size-icon-lg: 24px;--size-icon-xl: 32px;--size-avatar-sm: 32px;--size-avatar-md: 40px;--size-avatar-lg: 56px;--size-avatar-xl: 80px;--size-control-tile: 84px;--size-control-tabbar: 84px;--size-control-field: 46px;--size-control-player-bar: 44px;--size-control-shutter: 64px;--size-control-ptz-pad: 140px;--size-breakpoint-phone: 390px;--size-breakpoint-tablet: 768px;--size-breakpoint-desktop: 1100px;--size-breakpoint-wide: 1280px;--opacity-disabled: .4;--opacity-hover: .85;--opacity-scrim: .6;--z-base: 0;--z-elevated: 1;--z-sticky: 10;--z-header: 20;--z-player-control: 30;--z-tabbar: 40;--z-modal: 50;--z-toast: 60;--component-card-padding: var(--spacing-7);--component-card-radius: var(--radius-xl);--component-card-background: var(--color-surface-panel);--component-card-border: 1px solid var(--color-surface-line);--component-button-primary-background: var(--color-brand-primary);--component-button-primary-text: var(--color-text-on-brand);--component-button-primary-radius: var(--radius-full);--component-button-ghost-border: 1px solid var(--color-surface-line);--component-button-danger-background: rgba(239, 68, 68, .15);--component-button-danger-text: var(--color-semantic-danger);--component-button-danger-border: 1px solid rgba(239, 68, 68, .4);--component-pill-live-background: rgba(239, 68, 68, .15);--component-pill-live-text: var(--color-live-live);--component-pill-good-background: rgba(34, 197, 94, .15);--component-pill-good-text: var(--color-semantic-success);--component-pill-warn-background: rgba(249, 115, 22, .15);--component-pill-warn-text: var(--color-semantic-warning);--component-pill-offline-background: rgba(139, 148, 158, .15);--component-pill-offline-text: var(--color-live-offline);--component-input-background: var(--color-surface-panel);--component-input-border: 1px solid var(--color-surface-line);--component-input-border-focus: 1px solid var(--color-brand-primary);--component-input-border-error: 1px solid var(--color-semantic-danger);--component-input-radius: var(--radius-md);--component-input-min-height: var(--size-control-field);--component-input-font-size: var(--font-size-lg);--component-player-control-bar-height: var(--size-control-player-bar);--component-player-control-scrim: rgba(0, 0, 0, .6);--component-player-control-icon-color: var(--color-text-on-brand);--component-player-control-radius: var(--radius-md);--role-owner-color: var(--color-brand-primary);--role-shared-color: var(--color-semantic-info)}@media (prefers-color-scheme: light){:root{--color-surface-bg: #fafafa;--color-surface-panel: #ffffff;--color-surface-panel2: #f3f4f6;--color-surface-line: #e5e7eb;--color-text-primary: #0e1116;--color-text-secondary: #5b6371;--color-text-inverse: #ffffff;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .06);--shadow-card: 0 4px 12px 0 rgba(0, 0, 0, .08)}}:root{--color-text-tertiary: var(--color-text-secondary);--color-surface-panel3: var(--color-surface-panel2);--color-surface-line-strong: var(--color-surface-line);--size-nav-width: 216px;--size-topbar-height: 52px;--pill-good-bg: var(--component-pill-good-background);--pill-good-text: var(--component-pill-good-text);--pill-warn-bg: var(--component-pill-warn-background);--pill-warn-text: var(--component-pill-warn-text);--pill-danger-bg: rgba(239, 68, 68, .15);--pill-danger-text: var(--color-semantic-danger);--pill-neutral-bg: var(--component-pill-offline-background);--pill-neutral-text: var(--component-pill-offline-text);--pill-info-bg: rgba(56, 189, 248, .14);--pill-info-text: var(--color-semantic-info)}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--color-surface-bg);color:var(--color-text-primary);font-family:var(--font-family-sans);font-size:var(--font-size-lg);line-height:var(--line-height-normal);-webkit-font-smoothing:antialiased}a{color:var(--color-brand-primary);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:var(--component-input-font-size);min-height:var(--component-input-min-height);color:var(--color-text-primary);background:var(--component-input-background);border:var(--component-input-border);border-radius:var(--component-input-radius);padding:0 var(--spacing-6);outline:none}textarea{padding:var(--spacing-4) var(--spacing-6)}input:focus,select:focus,textarea:focus{border:var(--component-input-border-focus)}input[aria-invalid=true]{border:var(--component-input-border-error)}code,.mono{font-family:var(--font-family-mono);font-size:var(--font-size-base)}.card{background:var(--component-card-background);border:var(--component-card-border);border-radius:var(--component-card-radius);padding:var(--component-card-padding);box-shadow:var(--shadow-card)}.btn-primary{background:var(--component-button-primary-background);color:var(--component-button-primary-text);border:none;border-radius:var(--component-button-primary-radius);padding:var(--spacing-4) var(--spacing-8);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);transition:opacity var(--motion-duration-fast) var(--motion-easing-ease)}.btn-primary:hover{opacity:var(--opacity-hover)}.btn-primary:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.btn-ghost{background:transparent;color:var(--color-text-primary);border:var(--component-button-ghost-border);border-radius:var(--radius-full);padding:var(--spacing-4) var(--spacing-8);font-size:var(--font-size-lg)}.btn-ghost:hover{background:var(--color-surface-panel2)}.btn-ghost:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.btn-danger{background:var(--component-button-danger-background);color:var(--component-button-danger-text);border:var(--component-button-danger-border);border-radius:var(--radius-full);padding:var(--spacing-4) var(--spacing-8);font-size:var(--font-size-lg)}.btn-sm{padding:var(--spacing-2) var(--spacing-6);min-height:30px;font-size:var(--font-size-md);font-weight:var(--font-weight-medium)}.text-secondary{color:var(--color-text-secondary)}.text-tertiary{color:var(--color-text-tertiary)}.error-text{color:var(--color-semantic-danger);font-size:var(--font-size-md)}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--spacing-8);margin-bottom:var(--spacing-12);flex-wrap:wrap}.page-title{margin:0;font-size:var(--font-size-4xl);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-tight)}.page-subtitle{margin:var(--spacing-2) 0 0;color:var(--color-text-secondary);font-size:var(--font-size-md)}.table-wrap{border:1px solid var(--color-surface-line);border-radius:var(--radius-lg);overflow-x:auto;background:var(--color-surface-panel)}table.data-table{width:100%;border-collapse:collapse;font-size:var(--font-size-md)}.data-table thead th{text-align:left;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-wide);text-transform:uppercase;color:var(--color-text-tertiary);background:var(--color-surface-panel2);padding:var(--spacing-5) var(--spacing-8);border-bottom:1px solid var(--color-surface-line);white-space:nowrap}.data-table tbody td{padding:var(--spacing-5) var(--spacing-8);border-bottom:1px solid var(--color-surface-line);vertical-align:middle}.data-table tbody tr:last-child td{border-bottom:none}.data-table tbody tr.clickable{cursor:pointer;transition:background var(--motion-duration-fast) var(--motion-easing-ease)}.data-table tbody tr.clickable:hover{background:var(--color-surface-panel2)}.pill{display:inline-flex;align-items:center;gap:var(--spacing-2);padding:var(--spacing-1) var(--spacing-5);border-radius:var(--radius-full);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);white-space:nowrap}.pill-good{background:var(--pill-good-bg);color:var(--pill-good-text)}.pill-warn{background:var(--pill-warn-bg);color:var(--pill-warn-text)}.pill-danger{background:var(--pill-danger-bg);color:var(--pill-danger-text)}.pill-neutral{background:var(--pill-neutral-bg);color:var(--pill-neutral-text)}.pill-info{background:var(--pill-info-bg);color:var(--pill-info-text)}.state-block{display:grid;place-items:center;gap:var(--spacing-6);padding:var(--spacing-24) var(--spacing-12);text-align:center;color:var(--color-text-secondary)}.state-block .state-title{font-size:var(--font-size-lg);color:var(--color-text-primary)}.state-block .state-detail{font-size:var(--font-size-md);color:var(--color-text-secondary);max-width:460px}.spinner{width:22px;height:22px;border:2px solid var(--color-surface-line-strong);border-top-color:var(--color-brand-primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.soon-badge{display:inline-block;padding:var(--spacing-1) var(--spacing-4);border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-wide);background:var(--pill-info-bg);color:var(--pill-info-text)}.devportal-shell{display:flex;min-height:100%}.devportal-nav{display:flex;flex-direction:column;gap:var(--spacing-1);width:var(--size-nav-width);flex-shrink:0;padding:var(--spacing-6) var(--spacing-6) var(--spacing-8);border-right:1px solid var(--color-surface-line);background:var(--color-surface-panel);position:sticky;top:0;height:100vh;overflow-y:auto}.devportal-nav-brand{display:flex;align-items:center;gap:var(--spacing-4);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);letter-spacing:var(--letter-spacing-wide);padding:var(--spacing-5) var(--spacing-5) var(--spacing-8);color:var(--color-text-primary)}.devportal-nav-brand .brand-mark{width:26px;height:26px;border-radius:var(--radius-md);background:var(--color-brand-primary);color:var(--color-text-on-brand);display:grid;place-items:center;font-size:var(--font-size-base);font-weight:var(--font-weight-bold)}.devportal-nav-section{font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-widest);text-transform:uppercase;color:var(--color-text-tertiary);padding:var(--spacing-6) var(--spacing-5) var(--spacing-3)}.devportal-nav a{display:flex;align-items:center;gap:var(--spacing-5);color:var(--color-text-secondary);border-radius:var(--radius-md);padding:var(--spacing-4) var(--spacing-5);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);text-decoration:none;transition:background var(--motion-duration-fast) var(--motion-easing-ease),color var(--motion-duration-fast) var(--motion-easing-ease)}.devportal-nav a:hover{background:var(--color-surface-panel2);color:var(--color-text-primary);text-decoration:none}.devportal-nav a.active{color:var(--color-text-primary);background:var(--color-surface-panel3)}.devportal-nav a .nav-icon{width:var(--size-icon-md);text-align:center;font-size:var(--font-size-lg);flex-shrink:0}.devportal-nav a.disabled{opacity:.5;cursor:default;pointer-events:none;justify-content:space-between}.devportal-body{flex:1;min-width:0;display:flex;flex-direction:column}.devportal-topbar{height:var(--size-topbar-height);flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-8);padding:0 var(--spacing-12);border-bottom:1px solid var(--color-surface-line);background:var(--color-surface-panel);position:sticky;top:0;z-index:var(--z-header)}.devportal-topbar .topbar-meta{display:flex;align-items:center;gap:var(--spacing-6);font-size:var(--font-size-sm);color:var(--color-text-secondary)}.devportal-topbar .topbar-user{display:flex;flex-direction:column;align-items:flex-end;line-height:1.25}.devportal-topbar .topbar-user .email{color:var(--color-text-primary);font-size:var(--font-size-md);font-weight:var(--font-weight-medium)}.devportal-main{flex:1;min-width:0;padding:var(--spacing-16) var(--spacing-16);max-width:1320px;width:100%}.workspace-switcher{display:flex;align-items:center;gap:var(--spacing-4)}.workspace-switcher select{min-height:32px;font-size:var(--font-size-md);padding:0 var(--spacing-5);max-width:260px}.chip-row{display:flex;flex-wrap:wrap;gap:var(--spacing-3)}.chip{display:inline-flex;align-items:center;padding:var(--spacing-1) var(--spacing-5);border-radius:var(--radius-full);border:1px solid var(--color-surface-line);background:var(--color-surface-panel2);font-size:var(--font-size-sm);color:var(--color-text-primary);white-space:nowrap}.detail-grid{display:grid;grid-template-columns:160px 1fr;gap:var(--spacing-5) var(--spacing-10);align-items:baseline}.detail-grid dt{color:var(--color-text-secondary);font-size:var(--font-size-md)}.detail-grid dd{margin:0;min-width:0;overflow-wrap:anywhere}@media (max-width: 720px){.devportal-nav{display:none}.devportal-main{padding:var(--spacing-10)}.detail-grid{grid-template-columns:1fr;gap:var(--spacing-2)}}
