:root{--c-cyan-300:#67e8f9;--c-cyan-400:#22d3ee;--c-cyan-500:#06b6d4;--c-cyan-600:#0891b2;--c-cyan-700:#0e7490;--c-violet-300:#c4b5fd;--c-violet-400:#a78bfa;--c-violet-500:#8b5cf6;--c-violet-600:#7c3aed;--c-emerald-400:#34d399;--c-emerald-500:#10b981;--c-emerald-600:#059669;--c-amber-400:#fbbf24;--c-amber-500:#f59e0b;--c-amber-600:#d97706;--c-red-400:#f87171;--c-red-500:#ef4444;--c-red-600:#dc2626;--c-slate-50:#f8fafc;--c-slate-100:#f1f5f9;--c-slate-200:#e2e8f0;--c-slate-300:#cbd5e1;--c-slate-400:#94a3b8;--c-slate-500:#64748b;--c-slate-600:#475569;--c-slate-700:#334155;--c-slate-800:#1e293b;--c-slate-900:#0f172a;--c-slate-950:#020617;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;--sp-10:40px;--sp-12:48px;--sp-16:64px;--r-sm:6px;--r-md:8px;--r-lg:10px;--r-xl:14px;--r-2xl:18px;--r-full:999px;--fs-2xs:10px;--fs-xs:11px;--fs-sm:12px;--fs-base:13px;--fs-md:14px;--fs-lg:16px;--fs-xl:20px;--fs-2xl:24px;--fs-3xl:30px;--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;--font-mono:"JetBrains Mono", "SF Mono", "Cascadia Code", Consolas, monospace;--nav-w:244px;--nav-w-collapsed:64px;--topbar-h:56px;--ease:cubic-bezier(.16, 1, .3, 1);--dur-fast:.12s;--dur:.18s}:root,[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-app:#080c16;--bg-surface:#0d1320;--bg-surface-2:#131b2b;--bg-surface-3:#1a2438;--bg-inset:#0a0f1a;--bg-hover:#ffffff0b;--bg-active:#ffffff13;--bg-scrim:#03060cb8;--fg-primary:#e8edf7;--fg-secondary:#97a3b8;--fg-muted:#64748b;--fg-inverted:#0a0f1a;--fg-on-accent:#04121a;--border:#94a3b824;--border-strong:#94a3b83d;--border-subtle:#94a3b814;--accent:var(--c-cyan-400);--accent-hover:var(--c-cyan-300);--accent-soft:#22d3ee21;--accent-ring:#22d3ee66;--violet:var(--c-violet-400);--violet-soft:#a78bfa24;--success:var(--c-emerald-400);--success-soft:#34d39921;--warning:var(--c-amber-400);--warning-soft:#fbbf2421;--danger:var(--c-red-400);--danger-soft:#f8717121;--info:#60a5fa;--info-soft:#60a5fa21;--shadow-sm:0 1px 2px #0006;--shadow-md:0 4px 12px #00000059;--shadow-lg:0 16px 40px #00000080;--chart-grid:#94a3b81a;--chart-axis:#64748b}[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-app:#f6f8fc;--bg-surface:#fff;--bg-surface-2:#f8fafc;--bg-surface-3:#f1f5f9;--bg-inset:#f1f5f9;--bg-hover:#0f172a0a;--bg-active:#0f172a12;--bg-scrim:#0f172a6b;--fg-primary:#0f172a;--fg-secondary:#475569;--fg-muted:#94a3b8;--fg-inverted:#fff;--fg-on-accent:#fff;--border:#0f172a1a;--border-strong:#0f172a2e;--border-subtle:#0f172a0f;--accent:var(--c-cyan-600);--accent-hover:var(--c-cyan-700);--accent-soft:#0891b21a;--accent-ring:#0891b259;--violet:var(--c-violet-600);--violet-soft:#7c3aed1a;--success:var(--c-emerald-600);--success-soft:#0596691a;--warning:var(--c-amber-600);--warning-soft:#d977061f;--danger:var(--c-red-600);--danger-soft:#dc26261a;--info:#2563eb;--info-soft:#2563eb1a;--shadow-sm:0 1px 2px #0f172a0f;--shadow-md:0 4px 12px #0f172a14;--shadow-lg:0 16px 40px #0f172a24;--chart-grid:#0f172a12;--chart-axis:#64748b}*,:before,:after{box-sizing:border-box}*{margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font-sans);font-size:var(--fs-base);background:var(--bg-app);color:var(--fg-primary);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;line-height:1.5}button,input,textarea,select,option{font:inherit}.ant-app,.ant-layout,.ant-modal-root,.ant-dropdown,.ant-message,.ant-notification{font-family:var(--font-sans)}body,.panel,.card,.btn,.input,.badge{transition:background-color var(--dur) var(--ease), border-color var(--dur) var(--ease), color var(--dur) var(--ease)}h1,h2,h3,h4{letter-spacing:-.015em;color:var(--fg-primary);font-weight:700}h1{font-size:var(--fs-2xl)}h2{font-size:var(--fs-lg)}h3{font-size:var(--fs-md)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}code,kbd,.mono{font-family:var(--font-mono);font-size:.92em}:focus-visible{outline:2px solid var(--accent-ring);outline-offset:2px;border-radius:var(--r-sm)}:focus:not(:focus-visible){outline:none}::selection{background:var(--accent-soft);color:var(--fg-primary)}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--r-full);background-clip:content-box;border:3px solid #0000}::-webkit-scrollbar-thumb:hover{background:var(--fg-muted);background-clip:content-box}.row{align-items:center;gap:var(--sp-2);display:flex}.row-between{justify-content:space-between;align-items:center;gap:var(--sp-3);display:flex}.col{flex-direction:column;display:flex}.grow{flex:1;min-width:0}.wrap{flex-wrap:wrap}.text-secondary{color:var(--fg-secondary)}.text-muted{color:var(--fg-muted)}.text-danger{color:var(--danger)}.text-success{color:var(--success)}.text-sm{font-size:var(--fs-sm)}.text-xs{font-size:var(--fs-xs)}.text-mono{font-family:var(--font-mono)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.panel{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--r-xl)}.panel-header{justify-content:space-between;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--border-subtle);display:flex}.panel-title svg{color:var(--accent)}.panel-subtitle{font-size:var(--fs-sm);color:var(--fg-secondary);font-weight:400}.panel-body{padding:var(--sp-5)}.panel-body-flush{padding:0}.card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-4)}.card-interactive{cursor:pointer;transition:border-color var(--dur) var(--ease), transform var(--dur) var(--ease)}.card-interactive:hover{border-color:var(--border-strong);transform:translateY(-1px)}.btn{justify-content:center;align-items:center;gap:var(--sp-2);height:34px;padding:0 var(--sp-4);border-radius:var(--r-md);font-size:var(--fs-base);white-space:nowrap;-webkit-user-select:none;user-select:none;border:1px solid #0000;font-weight:600;display:inline-flex}.btn:disabled{opacity:.45;cursor:not-allowed}.btn svg{flex-shrink:0}.btn-primary{background:var(--accent);color:var(--fg-on-accent)}.btn-primary:not(:disabled):hover{background:var(--accent-hover)}.btn-secondary{background:var(--bg-surface-2);border-color:var(--border);color:var(--fg-primary)}.btn-secondary:not(:disabled):hover{background:var(--bg-surface-3);border-color:var(--border-strong)}.btn-ghost{color:var(--fg-secondary);background:0 0}.btn-ghost:not(:disabled):hover{background:var(--bg-hover);color:var(--fg-primary)}.btn-danger{background:var(--danger-soft);color:var(--danger);border-color:#0000}.btn-danger:not(:disabled):hover{background:var(--danger);color:var(--fg-inverted)}.btn-sm{height:28px;padding:0 var(--sp-3);font-size:var(--fs-sm)}.btn-lg{height:42px;padding:0 var(--sp-5);font-size:var(--fs-md)}.btn-icon{width:34px;padding:0}.btn-icon.btn-sm{width:28px}.btn-icon.btn-lg{width:42px}.btn-block{width:100%}.field{gap:var(--sp-2);flex-direction:column;display:flex}.label{font-size:var(--fs-sm);color:var(--fg-secondary);font-weight:600}.input,.select,.textarea{width:100%;min-height:34px;padding:var(--sp-2) var(--sp-3);background:var(--bg-inset);border:1px solid var(--border);border-radius:var(--r-md);font-size:var(--fs-base);color:var(--fg-primary)}.input::placeholder,.textarea::placeholder{color:var(--fg-muted)}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.input:disabled,.select:disabled,.textarea:disabled{opacity:.55;cursor:not-allowed}.textarea{resize:vertical;min-height:76px;font-family:inherit}.select{appearance:none;padding-right:var(--sp-8);cursor:pointer;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 16px) calc(50% + 1px),calc(100% - 11px) calc(50% + 1px);background-repeat:no-repeat;background-size:5px 5px,5px 5px}.input-group{align-items:center;display:flex;position:relative}.input-group svg{left:var(--sp-3);color:var(--fg-muted);pointer-events:none;position:absolute}.input-group .input{padding-left:var(--sp-8)}.hint{font-size:var(--fs-xs);color:var(--fg-muted)}.hint-error{color:var(--danger)}.badge{align-items:center;gap:var(--sp-1);height:20px;padding:0 var(--sp-2);border-radius:var(--r-sm);font-size:var(--fs-2xs);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;font-weight:700;display:inline-flex}.badge-neutral{background:var(--bg-surface-3);color:var(--fg-secondary)}.badge-accent{background:var(--accent-soft);color:var(--accent)}.badge-violet{background:var(--violet-soft);color:var(--violet)}.badge-success{background:var(--success-soft);color:var(--success)}.badge-warning{background:var(--warning-soft);color:var(--warning)}.badge-danger{background:var(--danger-soft);color:var(--danger)}.badge-info{background:var(--info-soft);color:var(--info)}.segmented{background:var(--bg-inset);border:1px solid var(--border);border-radius:var(--r-md);gap:2px;padding:3px;display:inline-flex}.segmented button{height:26px;padding:0 var(--sp-3);border-radius:var(--r-sm);font-size:var(--fs-sm);color:var(--fg-secondary);white-space:nowrap;font-weight:600}.segmented button:hover{color:var(--fg-primary)}.segmented button[aria-pressed=true]{background:var(--bg-surface);color:var(--fg-primary);box-shadow:var(--shadow-sm)}.dot{border-radius:var(--r-full);background:var(--fg-muted);flex-shrink:0;width:7px;height:7px}.dot-online{background:var(--success);box-shadow:0 0 0 3px var(--success-soft)}.dot-offline{background:var(--fg-muted)}.dot-error{background:var(--danger);box-shadow:0 0 0 3px var(--danger-soft)}.dot-live{background:var(--danger);animation:pulse 2s var(--ease) infinite}@keyframes pulse{0%,to{box-shadow:0 0 0 0 var(--danger-soft)}50%{box-shadow:0 0 0 5px #0000}}.state{justify-content:center;align-items:center;gap:var(--sp-3);padding:var(--sp-12) var(--sp-6);text-align:center;color:var(--fg-muted);flex-direction:column;display:flex}.state svg{opacity:.5}.state-title{font-size:var(--fs-md);color:var(--fg-secondary);font-weight:600}.state-desc{font-size:var(--fs-base);max-width:380px}.state-error .state-title{color:var(--danger)}.state-error svg{color:var(--danger);opacity:.7}.spinner{border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:var(--r-full);width:18px;height:18px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg, var(--bg-surface-2) 25%, var(--bg-surface-3) 50%, var(--bg-surface-2) 75%);border-radius:var(--r-md);background-size:200% 100%;animation:1.4s infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.modal-scrim{z-index:200;padding:var(--sp-6);background:var(--bg-scrim);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:fade var(--dur) var(--ease);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{width:100%;max-width:560px;max-height:calc(100vh - var(--sp-12));background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--r-2xl);box-shadow:var(--shadow-lg);animation:rise var(--dur) var(--ease);flex-direction:column;display:flex;overflow:hidden}.modal-lg{max-width:880px}.modal-xl{max-width:1120px}.modal-body{padding:var(--sp-5);overflow-y:auto}.modal-footer{justify-content:flex-end;gap:var(--sp-2);padding:var(--sp-4) var(--sp-5);border-top:1px solid var(--border-subtle);background:var(--bg-surface-2);display:flex}@keyframes fade{0%{opacity:0}}@keyframes rise{0%{opacity:0;transform:translateY(10px)scale(.98)}}.table-wrap{overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:var(--fs-base)}.table th{padding:var(--sp-3) var(--sp-4);text-align:left;font-size:var(--fs-xs);letter-spacing:.05em;text-transform:uppercase;color:var(--fg-muted);border-bottom:1px solid var(--border);white-space:nowrap;font-weight:700}.table td{padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border-subtle);vertical-align:middle}.table tbody tr:hover{background:var(--bg-hover)}.table tbody tr:last-child td{border-bottom:none}.meta-row{align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);color:var(--fg-secondary);display:flex}.meta-row svg{color:var(--fg-muted);flex-shrink:0}.menu{z-index:100;min-width:168px;padding:var(--sp-1);background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);animation:rise var(--dur-fast) var(--ease);position:absolute}.menu-item{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);font-size:var(--fs-base);color:var(--fg-secondary);text-align:left;display:flex}.menu-item:hover{background:var(--bg-hover);color:var(--fg-primary)}.menu-item[aria-current=true]{color:var(--accent);background:var(--accent-soft)}.menu-sep{height:1px;margin:var(--sp-1) 0;background:var(--border-subtle)}.tabs{gap:var(--sp-1);border-bottom:1px solid var(--border);display:flex}.tab{padding:var(--sp-3) var(--sp-4);font-size:var(--fs-base);color:var(--fg-secondary);font-weight:600;position:relative}.tab:hover{color:var(--fg-primary)}.tab[aria-selected=true]{color:var(--accent)}.tab[aria-selected=true]:after{content:"";left:var(--sp-3);right:var(--sp-3);border-radius:var(--r-full);background:var(--accent);height:2px;position:absolute;bottom:-1px}.dropzone{justify-content:center;align-items:center;gap:var(--sp-2);padding:var(--sp-8) var(--sp-5);border:1.5px dashed var(--border-strong);border-radius:var(--r-lg);background:var(--bg-inset);text-align:center;cursor:pointer;transition:border-color var(--dur) var(--ease), background-color var(--dur) var(--ease);flex-direction:column;display:flex}.dropzone:hover,.dropzone[data-active=true]{border-color:var(--accent);background:var(--accent-soft)}.dropzone svg{color:var(--fg-muted)}.dropzone[data-active=true] svg{color:var(--accent)}.dropzone-title{font-size:var(--fs-base);color:var(--fg-primary);font-weight:600}.progress{border-radius:var(--r-full);background:var(--bg-inset);height:6px;overflow:hidden}.progress-bar{border-radius:var(--r-full);background:var(--accent);height:100%;transition:width .3s var(--ease)}.checkbox{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;flex-shrink:0}.camera-grid{gap:var(--sp-4);width:100%;display:grid}.camera-grid-1{grid-template-columns:minmax(0,1fr)}.camera-grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.camera-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.camera-grid-size-control .ant-segmented-item-label{padding-inline:0}.camera-grid-size-option{justify-content:center;align-items:center;width:38px;height:30px;display:inline-flex}@media (width<=760px){.camera-grid-2,.camera-grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=520px){.camera-grid-2,.camera-grid-3{grid-template-columns:1fr}}.camera-grid-loading{opacity:.55;pointer-events:none}.camera-card{border-radius:var(--r-lg);border:1px solid var(--border);background:var(--bg-surface);cursor:pointer;transition:border-color var(--dur) var(--ease), transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);flex-direction:column;display:flex;position:relative;overflow:hidden}.camera-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-1px)}.camera-card:focus-visible{box-shadow:0 0 0 3px var(--accent-ring);outline:none}.camera-card-thumb{aspect-ratio:16/9;background:var(--bg-inset);position:relative}.camera-card-thumb img{object-fit:cover;width:100%;height:100%;display:block}.camera-card-live video{object-fit:cover;width:100%;height:100%;display:none;position:absolute;inset:0}.camera-card-live-on img{opacity:0}.camera-card-live-on video{display:block}.camera-live-badge{bottom:var(--sp-2);left:var(--sp-2);height:18px;padding:0 var(--sp-2);border-radius:var(--r-full);font-size:var(--fs-2xs);letter-spacing:.04em;text-transform:uppercase;background:var(--bg-scrim);color:var(--fg-primary);pointer-events:none;z-index:1;align-items:center;gap:5px;font-weight:700;display:inline-flex;position:absolute}.camera-live-spinner{border:2px solid var(--fg-secondary);border-top-color:var(--accent);border-radius:var(--r-full);width:9px;height:9px;animation:.7s linear infinite spin}.camera-live-dot{border-radius:var(--r-full);background:var(--danger);width:7px;height:7px;box-shadow:0 0 0 3px var(--danger-soft);animation:pulse 2s var(--ease) infinite}.camera-live-live{color:#fff}.camera-live-failed{color:var(--danger)}.camera-card-overlay{justify-content:center;align-items:center;gap:var(--sp-2);color:#fff;font-size:var(--fs-sm);text-shadow:0 1px 2px #000000bf;opacity:0;pointer-events:none;transition:opacity var(--dur) var(--ease);background:#00000094;font-weight:600;display:flex;position:absolute;inset:0}.camera-card-thumb:hover .camera-card-overlay,.camera-card-thumb:focus-within .camera-card-overlay{opacity:1}.camera-card-body{padding:var(--sp-3);flex-direction:column;gap:2px;display:flex}.camera-card-title{font-size:var(--fs-md);letter-spacing:-.01em;font-weight:700}.camera-card-meta{font-size:var(--fs-sm);color:var(--fg-secondary);flex-direction:column;gap:2px;display:flex}.camera-status{border-radius:var(--r-full);width:fit-content;font-size:var(--fs-2xs);align-items:center;padding:2px 7px;font-weight:700;line-height:1.4;display:inline-flex}.camera-status-waiting{color:var(--warning-fg,#9a6700);background:var(--warning-soft,#fff4ce)}.camera-status-online{color:var(--success-fg,#087443);background:var(--success-soft,#d9fbe8)}.camera-status-offline{color:var(--danger-fg,#b42318);background:var(--danger-soft,#fee4e2)}.camera-card-actions{top:var(--sp-2);right:var(--sp-2);gap:var(--sp-1);z-index:2;opacity:0;transition:opacity var(--dur) var(--ease);display:flex;position:absolute}.camera-card-actions .ant-btn{color:#dbe5f2;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#00000094;border-color:#ffffff24}.camera-card-actions .ant-btn:not(:disabled):hover,.camera-card-actions .ant-btn:not(:disabled):focus-visible{color:#fff;background:#000000d1;border-color:#ffffff47}.camera-card-actions .ant-btn-dangerous,.camera-card-actions .ant-btn-color-dangerous{color:#fca5a5;background:#7f1d1d9e;border-color:#f8717140}.camera-card-actions .ant-btn-dangerous:not(:disabled):hover,.camera-card-actions .ant-btn-dangerous:not(:disabled):focus-visible,.camera-card-actions .ant-btn-color-dangerous:not(:disabled):hover,.camera-card-actions .ant-btn-color-dangerous:not(:disabled):focus-visible{color:#fecaca;background:#991b1bd6;border-color:#f8717173}.camera-card:hover .camera-card-actions,.camera-card:focus-visible .camera-card-actions{opacity:1}.camera-card-connection-action{right:var(--sp-2);bottom:var(--sp-2);z-index:2;position:absolute}.push-setup-panel{gap:var(--sp-3);flex-direction:column;display:flex}.camera-mode-options{width:100%;display:flex}.camera-mode-options .ant-radio-button-wrapper{text-align:center;white-space:normal;flex:1;justify-content:center;align-items:center;height:auto;min-height:42px;display:inline-flex}.camera-mode-picker{gap:var(--sp-4);padding:var(--sp-5) 0;flex-direction:column;display:flex}.camera-mode-picker-title{font-size:var(--fs-md);text-align:center;font-weight:700}.camera-mode-picker-options{gap:var(--sp-3);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.camera-mode-picker-options button{white-space:normal;min-height:72px}@media (width<=560px){.camera-mode-picker-options{grid-template-columns:1fr}}.push-setup-label{font-size:var(--fs-sm);color:var(--fg-primary);font-weight:700}.push-setup-url-row{align-items:center;gap:var(--sp-2);display:flex}.push-setup-url-row .ant-input{min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.push-setup-actions{justify-content:flex-end;gap:var(--sp-2);margin-top:var(--sp-2);display:flex}.push-connection-modal,.camera-status-history{gap:var(--sp-3);flex-direction:column;display:flex}.camera-status-history{height:min(560px,100dvh - 240px);min-height:0;overflow:hidden}.push-connection-camera-name{font-size:var(--fs-lg);font-weight:700}.camera-status-history-filters{align-items:center;gap:var(--sp-2);flex-wrap:wrap;display:flex}.camera-status-history-list{scrollbar-gutter:stable;border:1px solid var(--border-subtle);border-radius:var(--r-md);flex:1;min-height:0;overflow:auto}.camera-status-history-results{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.camera-status-history-row{gap:var(--sp-3);min-width:620px;padding:var(--sp-3);border-bottom:1px solid var(--border-subtle);font-size:var(--fs-sm);grid-template-columns:1.2fr 1.2fr .8fr;display:grid}.camera-status-history-row:last-child{border-bottom:0}.camera-status-history-head{z-index:1;color:var(--fg-secondary);background:var(--bg-inset);font-weight:700;position:sticky;top:0}.camera-status-history-empty,.camera-status-history-loading{min-height:0;color:var(--fg-secondary);flex:1;justify-content:center;align-items:center;display:flex}.camera-status-history>.ant-pagination{flex:none;align-self:center}@media (width<=560px){.push-setup-url-row,.push-setup-actions{flex-direction:column;align-items:stretch}}.grid-pagination{justify-content:center;align-items:center;gap:var(--sp-3);padding:var(--sp-2) 0;display:flex}.grid-pagination-info{font-size:var(--fs-sm);color:var(--fg-muted);font-variant-numeric:tabular-nums}.probe-panel{gap:var(--sp-3);margin-top:var(--sp-3);padding-top:var(--sp-4);border-top:1px solid var(--border-subtle);flex-direction:column;display:flex}.probe-note{font-size:var(--fs-sm)}.probe-note-muted{color:var(--fg-muted)}.probe-note-error{color:var(--danger)}.probe-note-warning{color:var(--warning)}.probe-result{gap:var(--sp-2);flex-direction:column;display:flex}.probe-preview{object-fit:cover;border-radius:var(--r-md);border:1px solid var(--border);width:100%;max-height:220px}.probe-meta{font-size:var(--fs-sm);flex-direction:column;gap:2px;display:flex}.camera-group-drawer .ant-modal-body,.camera-access-drawer .ant-modal-body{max-height:min(72vh,760px);padding:0;overflow:hidden}.camera-group-drawer-header{flex-direction:column;gap:2px;min-width:0;display:flex}.camera-group-drawer-title{align-items:center;gap:var(--sp-2);font-size:var(--fs-lg);letter-spacing:-.01em;font-weight:700;display:flex}.camera-group-drawer-sub{font-size:var(--fs-sm);color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.camera-group-drawer-body{gap:var(--sp-3);padding:var(--sp-4);flex-direction:column;display:flex;overflow:hidden}.camera-group-drawer-toolbar{align-items:center;gap:var(--sp-2);flex-shrink:0;display:flex}.camera-group-drawer-count{font-size:var(--fs-sm);color:var(--fg-secondary);font-variant-numeric:tabular-nums;flex-shrink:0}.camera-group-drawer-content{flex:1;min-height:0;overflow-y:auto}.camera-group-camera-grid{gap:var(--sp-4);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}@media (width<=1100px){.camera-group-camera-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=900px){.camera-group-camera-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=520px){.camera-group-camera-grid{grid-template-columns:1fr}}.camera-group-camera-card{border-radius:var(--r-lg);border:1px solid var(--border);background:var(--bg-surface);transition:border-color var(--dur) var(--ease), transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);flex-direction:column;display:flex;overflow:hidden}.camera-group-camera-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-1px)}.camera-group-camera-card>.assignment-camera-thumb{aspect-ratio:16/9;border-radius:0;width:100%;height:auto}.camera-group-camera-card-actions{padding:var(--sp-2) var(--sp-3);border-top:1px solid var(--border-subtle);background:var(--bg-surface-2);justify-content:flex-end;display:flex}.camera-group-picker-toolbar{align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-4);flex-wrap:wrap;display:flex}.camera-group-picker-body{max-height:60vh;overflow-y:auto}.camera-group-picker-grid{gap:var(--sp-3);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));display:grid}.camera-group-picker-card{border-radius:var(--r-lg);border:1px solid var(--border);background:var(--bg-surface);cursor:pointer;transition:border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);flex-direction:column;display:flex;position:relative;overflow:hidden}.camera-group-picker-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md)}.camera-group-picker-card-selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.camera-group-picker-thumb{aspect-ratio:16/9;background:var(--bg-inset);position:relative}.camera-group-picker-thumb img{object-fit:cover;width:100%;height:100%;display:block}.camera-group-picker-check{top:var(--sp-2);right:var(--sp-2);border-radius:var(--r-full);background:var(--bg-scrim);color:#0000;border:1px solid var(--border-strong);justify-content:center;align-items:center;width:20px;height:20px;display:flex;position:absolute}.camera-group-picker-card-selected .camera-group-picker-check{background:var(--accent);border-color:var(--accent);color:var(--fg-on-accent)}.camera-group-picker-info{padding:var(--sp-3);flex-direction:column;gap:2px;display:flex}.camera-group-picker-name{font-size:var(--fs-md);letter-spacing:-.01em;font-weight:700}.camera-group-picker-selected-mark{top:var(--sp-2);right:var(--sp-2);border-radius:var(--r-full);background:var(--bg-scrim);color:#0000;border:1px solid var(--border-strong);justify-content:center;align-items:center;width:20px;height:20px;display:flex;position:absolute}.camera-group-picker-card-selected .camera-group-picker-selected-mark{background:var(--accent);border-color:var(--accent);color:var(--fg-on-accent)}.camera-group-picker-pagination{margin-top:var(--sp-4);justify-content:center;display:flex}.camera-group-picker-card:focus-visible{box-shadow:0 0 0 3px var(--accent-ring);outline:none}.live-player{aspect-ratio:16/9;background:var(--bg-inset);border-radius:var(--r-lg);border:1px solid var(--border);position:relative;overflow:hidden}.live-video{object-fit:contain;background:#000;width:100%;height:100%;display:block}.live-overlay{justify-content:center;align-items:center;gap:var(--sp-3);color:var(--fg-secondary);font-size:var(--fs-base);background:var(--bg-scrim);flex-direction:column;display:flex;position:absolute;inset:0}.live-overlay-error{background:0 0}.live-controls{bottom:var(--sp-3);right:var(--sp-3);gap:var(--sp-2);display:flex;position:absolute}.camera-access-drawer-header{flex-direction:column;gap:2px;min-width:0;display:flex}.camera-access-modal-title-row{justify-content:space-between;align-items:flex-start;gap:var(--sp-4);width:100%;display:flex}.camera-access-modal-actions{align-items:center;gap:var(--sp-2);flex-shrink:0;margin-right:40px;display:flex}.assignment-modal-title-row{justify-content:space-between;align-items:flex-start;gap:var(--sp-4);width:100%;padding-right:36px;display:flex}.assignment-modal-actions{align-items:center;gap:var(--sp-2);flex-shrink:0;display:flex}.assignment-panel{height:540px;padding:var(--sp-3);border:1px solid var(--border);border-radius:var(--r-lg);background:var(--bg-surface);flex-direction:column;display:flex;overflow:hidden}.assignment-panel-header,.assignment-panel-toolbar,.assignment-row,.assignment-card-head,.assignment-camera-card{align-items:center;display:flex}.assignment-panel-header{justify-content:space-between;gap:var(--sp-2);margin-bottom:var(--sp-2);flex-shrink:0}.assignment-panel-title{font-weight:700}.assignment-panel-toolbar{gap:var(--sp-2);margin-bottom:var(--sp-3);flex-shrink:0}.assignment-panel-toolbar .ant-input-affix-wrapper{flex:1;min-width:0}.assignment-panel-content{flex:1;min-height:0;padding-right:4px;overflow-y:auto}.assignment-panel-content::-webkit-scrollbar{width:6px}.assignment-panel-content::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--r-full)}.assignment-panel .ant-pagination{padding-top:var(--sp-2);border-top:1px solid var(--border-subtle);flex-shrink:0;margin-top:auto}.assignment-panel-list{gap:var(--sp-2);flex-direction:column;display:flex}.assignment-row{gap:var(--sp-3);padding:var(--sp-3);border:1px solid var(--border-subtle);border-radius:var(--r-md);background:var(--bg-surface)}.assignment-row-main,.assignment-camera-body{flex:1;min-width:0}.assignment-row-title{align-items:center;gap:var(--sp-2);flex-wrap:wrap;display:flex}.assignment-row-description,.assignment-camera-meta{color:var(--fg-secondary);font-size:var(--fs-sm)}.assignment-card{align-items:stretch;gap:var(--sp-2);padding:var(--sp-3);border:1px solid var(--border-subtle);border-radius:var(--r-md);flex-direction:column;display:flex}.assignment-card-head{justify-content:space-between;gap:var(--sp-2)}.assignment-card-name,.assignment-camera-name{font-weight:700}.assignment-card-description{min-height:2.5em;color:var(--fg-secondary)}.assignment-card-meta,.assignment-card-warning{gap:var(--sp-3);color:var(--fg-secondary);font-size:var(--fs-sm);flex-wrap:wrap;display:flex}.assignment-card-meta span,.assignment-card-warning{align-items:center;gap:4px;display:inline-flex}.assignment-card-warning{color:var(--warning-fg,#9a6700)}.assignment-camera-card{align-items:stretch;gap:var(--sp-3);padding:var(--sp-2);border:1px solid var(--border-subtle);border-radius:var(--r-md)}.assignment-camera-card img{object-fit:cover;border-radius:var(--r-sm);flex:none;width:112px;height:72px}.assignment-camera-thumb{border-radius:var(--r-sm);background:var(--bg-inset);flex:none;width:112px;height:72px;position:relative;overflow:hidden}.assignment-camera-thumb>img{object-fit:cover;width:100%;height:100%;display:block}.assignment-camera-thumb .camera-card-thumb{aspect-ratio:auto;border-radius:0;position:absolute;inset:0}.assignment-camera-thumb .camera-live-badge{height:15px;padding:0 6px;font-size:9px}@media (width<=700px){.assignment-modal-title-row{padding-right:28px}.assignment-modal-title-row,.assignment-camera-card{flex-direction:column;align-items:stretch}.assignment-camera-card img{width:100%;height:140px}}.camera-access-drawer-title{align-items:center;gap:var(--sp-2);font-size:var(--fs-lg);letter-spacing:-.01em;font-weight:700;display:flex}.camera-access-drawer-meta{align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);color:var(--fg-secondary);flex-wrap:wrap;display:flex}.camera-access-drawer-sub{font-size:var(--fs-sm);color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.camera-access-drawer-body{gap:var(--sp-3);padding:var(--sp-4);flex-direction:column;display:flex;overflow:hidden}.camera-access-drawer-content{flex:1;min-height:0;overflow-y:auto}.camera-access-grant-grid{gap:var(--sp-4);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}@media (width<=700px){.camera-access-grant-grid{grid-template-columns:1fr}}.camera-access-grant-card{gap:var(--sp-3);border-radius:var(--r-lg);border:1px solid var(--border);background:var(--bg-surface);padding:var(--sp-4);flex-direction:column;display:flex}.camera-access-card-head{justify-content:space-between;align-items:flex-start;gap:var(--sp-2);display:flex}.camera-access-card-name{font-size:var(--fs-md);letter-spacing:-.01em;font-weight:700}.camera-access-card-desc{font-size:var(--fs-sm);color:var(--fg-secondary)}.camera-access-card-meta{font-size:var(--fs-sm);color:var(--fg-secondary);flex-direction:column;gap:4px;display:flex}.camera-access-inactive-warning{font-size:var(--fs-sm);color:var(--warning);background:var(--warning-soft);border-radius:var(--r-md);padding:var(--sp-2) var(--sp-3)}.camera-access-card-actions{padding-top:var(--sp-3);border-top:1px solid var(--border-subtle);justify-content:flex-end;margin-top:auto;display:flex}.camera-card-viewer-action{right:var(--sp-2);bottom:var(--sp-2);z-index:4;position:absolute}.camera-card-viewer-action .ant-btn{color:#fff;border-radius:var(--r-md);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#0009;border:1px solid #ffffff26;padding:6px;transition:background .15s,transform .15s}.camera-card-viewer-action .ant-btn:hover,.camera-card-viewer-action .ant-btn:focus-visible{color:#fff;background:#000000d9;border-color:#ffffff4d;transform:scale(1.05)}.camera-viewer-modal-wrap{overflow:hidden!important}.camera-viewer-modal-wrap .ant-modal{height:100dvh;width:100vw!important;max-width:none!important;margin:0!important;padding:0!important;top:0!important}.camera-viewer-modal-wrap .ant-modal-container,.camera-viewer-modal-wrap .ant-modal-content{height:100%;max-height:100dvh;overflow:hidden;color:#f0f2f5!important;background:#0f1115!important;border-radius:0!important;flex-direction:column!important;padding:0!important;display:flex!important}.camera-viewer-modal-wrap .ant-modal-body{height:100%;min-height:0;display:flex;overflow:hidden;padding:0!important}.camera-viewer{background:#090a0d;flex-direction:column;flex:1;width:100%;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.camera-viewer-overlay-actions{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:7;background:#000000ad;border:1px solid #ffffff1f;border-radius:7px;align-items:center;gap:4px;padding:3px 5px;display:flex;position:absolute;top:14px;right:16px}.camera-viewer-btn{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:6px;transition:all .15s;display:inline-flex}.camera-viewer-btn:hover{color:#fff;background:#ffffff1a}.camera-viewer-video-viewport{touch-action:none;background:#000;flex:1 1 0;justify-content:center;align-items:center;min-height:0;display:flex;position:relative;overflow:hidden}.camera-viewer-video{object-fit:contain;transform-origin:50%;will-change:transform;width:100%;height:100%}.camera-viewer-no-data{z-index:4;color:#94a3b8;background:#000;place-items:center;font-size:14px;display:grid;position:absolute;inset:0}.camera-viewer-hud-status{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;z-index:5;pointer-events:none;white-space:nowrap;text-overflow:ellipsis;background:#000000a6;border:1px solid #ffffff1a;border-radius:6px;max-width:calc(100% - 150px);padding:6px 12px;font-family:monospace;font-size:13px;position:absolute;top:14px;left:16px;overflow:hidden}.camera-viewer-hud-status:before{content:"";vertical-align:1px;background:#818cf8;border-radius:50%;width:7px;height:7px;margin-right:8px;display:inline-block}.camera-viewer-hud-status.is-live:before{background:#4ade80}.camera-viewer-hud-status.is-playback:before{background:#a78bfa}.camera-viewer-mode{font-weight:700}.camera-viewer-hud-status.is-live .camera-viewer-mode{color:#4ade80}.camera-viewer-hud-status.is-playback .camera-viewer-mode{color:#a78bfa}.camera-viewer-zoom-controls{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:5;background:#000000a6;border:1px solid #ffffff1a;border-radius:6px;align-items:center;gap:4px;padding:4px 6px;display:flex;position:absolute;top:58px;right:16px}.camera-viewer-zoom-btn{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:4px;transition:all .15s;display:inline-flex}.camera-viewer-zoom-btn:hover:not(:disabled){color:#fff;background:#ffffff26}.camera-viewer-zoom-btn:disabled{opacity:.3;cursor:not-allowed}.camera-viewer-zoom-level{color:#e2e8f0;text-align:center;min-width:38px;padding:0 4px;font-family:monospace;font-size:11px;font-weight:600}.camera-viewer-playback-toggle{z-index:12;color:#e2e8f0;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#000000b3;border:1px solid #ffffff29;border-radius:999px;justify-content:center;align-items:center;width:48px;height:26px;padding:0;transition:background .15s,color .15s,transform .15s;display:inline-flex;position:absolute;left:50%}.camera-viewer-playback-toggle.is-expanded{top:0;transform:translate(-50%,-50%)}.camera-viewer-playback-toggle.is-collapsed{bottom:14px;transform:translate(-50%)}.camera-viewer-playback-toggle:hover,.camera-viewer-playback-toggle:focus-visible{color:#fff;background:#2563ebd9;outline:none}.camera-viewer-playback-toggle.is-expanded:hover,.camera-viewer-playback-toggle.is-expanded:focus-visible{transform:translate(-50%,-50%)scale(1.06)}.camera-viewer-playback-toggle.is-collapsed:hover,.camera-viewer-playback-toggle.is-collapsed:focus-visible{transform:translate(-50%)scale(1.06)}.camera-viewer-footer{background:#0f1115;border-top:1px solid #ffffff14;flex-direction:column;flex-shrink:0;gap:12px;padding:20px 20px 16px;display:flex;position:relative}.camera-viewer-controls-row{justify-content:space-between;align-items:center;gap:16px;display:flex}.controls-left,.controls-right{align-items:center;gap:12px;display:flex}.speed-selector-group{align-items:center;gap:8px;display:flex}.control-label{color:#94a3b8;align-items:center;gap:6px;font-size:12px;font-weight:500;display:flex}.camera-viewer-timeline-row{align-items:center;gap:16px;width:100%;display:flex}.timeline-date-picker{flex-direction:column;flex-shrink:0;gap:4px;display:flex}.timeline-wrapper{box-sizing:border-box;background:#181b22;border:1px solid #ffffff0f;border-radius:8px;flex:1;min-width:0;min-height:68px;padding:8px 14px 10px}.timeline-loading-state,.timeline-error-state,.timeline-empty-state{color:#64748b;justify-content:center;align-items:center;gap:8px;height:48px;font-size:12px;display:flex}.timeline-error-state{color:#ef4444}.recording-timeline-container{-webkit-user-select:none;user-select:none;flex-direction:column;gap:4px;width:100%;display:flex}.recording-timeline-header-row{justify-content:space-between;align-items:center;width:100%;height:16px;display:flex;position:relative}.recording-timeline-ticks{flex:1;min-width:0;height:100%;position:relative;overflow:hidden}.recording-timeline-tick-label{color:#64748b;pointer-events:none;white-space:nowrap;font-family:monospace;font-size:10px;position:absolute;top:0;transform:translate(-50%)}.recording-timeline-zoom-badge{color:#94a3b8;z-index:2;background:#0006;border:1px solid #ffffff14;border-radius:4px;flex-shrink:0;align-items:center;gap:4px;margin-left:8px;padding:1px 6px;font-family:monospace;font-size:10px;display:flex}.recording-timeline-zoom-badge .zoom-text{color:#cbd5e1;text-align:center;min-width:24px;font-weight:600}.timeline-zoom-btn{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:3px;justify-content:center;align-items:center;padding:1px;transition:all .1s;display:inline-flex}.timeline-zoom-btn:hover:not(:disabled){color:#fff;background:#ffffff26}.timeline-zoom-btn:disabled{opacity:.25;cursor:not-allowed}.recording-timeline{cursor:grab;touch-action:none;background:#0f1117;border-radius:6px;width:100%;height:28px;position:relative;overflow:hidden}.recording-timeline.is-dragging{cursor:grabbing}.recording-timeline-track{background:#ffffff08;position:absolute;inset:0}.recording-timeline-segment{pointer-events:none;background:#2563eb;border-radius:3px;transition:background .15s;position:absolute;top:4px;bottom:4px}.recording-timeline:hover .recording-timeline-segment{background:#3b82f6}.recording-timeline-segment.is-selected{background:#60a5fa;box-shadow:0 0 8px #60a5fa99}.recording-timeline-cursor{pointer-events:none;z-index:3;background:#ef4444;width:2px;position:absolute;top:0;bottom:0;transform:translate(-50%);box-shadow:0 0 6px #ef4444cc}@media (height<=700px){.camera-viewer-footer{gap:8px;padding:18px 12px 10px}.timeline-loading-state,.timeline-error-state,.timeline-empty-state{height:38px}}@media (width<=768px){.camera-viewer-footer{gap:10px;max-height:45dvh;padding:18px 12px 14px;overflow-y:auto}.camera-viewer-controls-row{flex-wrap:wrap;gap:10px}.controls-left,.controls-right{gap:8px}.camera-viewer-timeline-row{flex-direction:column;align-items:stretch;gap:8px}.timeline-date-picker{flex-direction:row;justify-content:space-between;align-items:center}.camera-viewer-hud-status{max-width:calc(100% - 110px);padding:4px 8px;font-size:11px;top:8px;left:8px}.camera-viewer-overlay-actions{top:8px;right:8px}.camera-viewer-zoom-controls{top:50px;right:8px}.camera-viewer-playback-toggle.is-collapsed{bottom:8px}}.storage-config-modal .ant-modal-container,.storage-config-modal .ant-modal-content{flex-direction:column;max-height:calc(100dvh - 48px);display:flex;overflow:hidden}.storage-config-modal .ant-modal-header,.storage-config-modal .ant-modal-footer{flex:none}.storage-config-modal .ant-modal-body{overscroll-behavior:contain;flex:auto;min-height:0;padding-right:8px;overflow-y:auto}@media (width<=640px){.storage-config-modal .ant-modal-container,.storage-config-modal .ant-modal-content{max-height:calc(100dvh - 24px)}}.storage-validation-result{border:1px solid var(--border);border-radius:var(--r-md);background:var(--bg-surface-2);flex-direction:column;gap:12px;padding:14px 16px;display:flex}.storage-validation-title{color:var(--fg);font-size:13px;font-weight:600}.storage-validation-list{flex-direction:column;gap:10px;display:flex}.storage-check{border-radius:var(--r-sm);background:var(--bg-surface);border:1px solid var(--border-subtle);align-items:flex-start;gap:10px;padding:8px 12px;display:flex}.storage-check.is-passed{border-color:#22c55e40}.storage-check.is-failed{background:#ef44440a;border-color:#ef444440}.storage-check.is-skipped{border-color:#94a3b840}.storage-check-icon{flex-shrink:0;margin-top:2px}.storage-check-icon.is-passed{color:#22c55e}.storage-check-icon.is-failed{color:#ef4444}.storage-check-icon.is-skipped{color:#94a3b8}.storage-check-content{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.storage-check-header{justify-content:space-between;align-items:center;gap:8px;font-size:13px;display:flex}.storage-check-badge{border-radius:4px;padding:1px 6px;font-size:11px;font-weight:600}.storage-check-badge.is-passed{color:#16a34a;background:#22c55e26}.storage-check-badge.is-failed{color:#dc2626;background:#ef444426}.storage-check-badge.is-skipped{color:#64748b;background:#94a3b826}.storage-check-message{font-size:12px;line-height:1.4}.storage-cors-instructions{border:1px solid var(--border);border-radius:var(--r-md);background:var(--bg-surface-2);flex-direction:column;gap:12px;padding:14px 16px;display:flex}.storage-cors-header{flex-direction:column;gap:4px;display:flex}.storage-cors-title{color:var(--fg);margin:0;font-size:13px;font-weight:600}.storage-cors-desc{margin:0;font-size:12px}.storage-cors-portal-hint,.storage-cors-no-permission{border-radius:var(--r-sm);border:1px solid var(--border-subtle);background:var(--bg-surface);color:var(--fg-secondary);padding:10px 12px;font-size:12px;line-height:1.5}.storage-cors-config-grid{border:1px solid var(--border-subtle);border-radius:var(--r-sm);background:var(--bg-surface);overflow:hidden}.storage-cors-config-row{grid-template-columns:minmax(180px,.9fr) minmax(0,1.5fr);align-items:start;gap:12px;padding:10px 12px;font-size:12px;display:grid}.storage-cors-config-row+.storage-cors-config-row{border-top:1px solid var(--border-subtle)}.storage-cors-config-row>span:first-child{color:var(--fg-secondary);font-weight:600}.storage-cors-origins{flex-direction:column;gap:6px;display:flex}.storage-cors-label{color:var(--fg-muted);font-size:12px;font-weight:500}.storage-cors-tags{flex-wrap:wrap;gap:6px;display:flex}.storage-cors-tag{background:var(--bg-surface);border:1px solid var(--border);border-radius:4px;padding:2px 8px;font-size:12px}.storage-cors-code-wrap{flex-direction:column;gap:8px;display:flex;position:relative}.storage-cors-code{border-radius:var(--r-sm);color:#e2e8f0;background:#0f1117;border:1px solid #ffffff1a;max-height:220px;margin:0;padding:12px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:11px;overflow-x:auto}.storage-cors-actions{justify-content:flex-end;display:flex}.storage-cors-no-permission{flex-direction:column;gap:2px;display:flex}.storage-cors-advanced{border-top:1px solid var(--border-subtle);padding-top:10px}.storage-cors-advanced>summary{cursor:pointer;color:var(--fg-secondary);font-size:12px;font-weight:600}.storage-cors-advanced>p{margin:8px 0;font-size:12px}@media (width<=640px){.storage-cors-config-row{grid-template-columns:1fr;gap:4px}}.storage-switch-title{align-items:center;gap:8px;display:flex}.storage-switch-warning-icon{color:#f59e0b}.storage-switch-body{flex-direction:column;gap:16px;display:flex}.storage-switch-descriptions{flex-direction:column;gap:8px;margin-top:6px;display:flex}.storage-switch-descriptions p{margin:0;font-size:12.5px;line-height:1.5}.storage-switch-checkbox-wrap{border-radius:var(--r-md);background:var(--bg-surface-2);border:1px solid var(--border);padding:12px 14px}.storage-switch-checkbox-label{font-size:13px;font-weight:500;line-height:1.4}.shell{background:var(--bg-app);height:100%}.main{flex:1;min-width:0}.nav{gap:var(--sp-1);padding:var(--sp-3);background:var(--bg-surface);border-right:1px solid var(--border);flex-direction:column;display:flex;overflow:hidden}.nav-brand{align-items:center;gap:var(--sp-3);height:var(--topbar-h);padding:0 var(--sp-2);margin-bottom:var(--sp-3);flex-shrink:0;display:flex}.nav-brand-mark{border-radius:var(--r-md);background:var(--accent-soft);width:30px;height:30px;color:var(--accent);flex-shrink:0;place-items:center;display:grid}.nav-brand-text{min-width:0;overflow:hidden}.nav-brand-name{font-size:var(--fs-md);letter-spacing:-.02em;white-space:nowrap;text-overflow:ellipsis;font-weight:800;overflow:hidden}.nav-brand-tag{font-size:var(--fs-2xs);color:var(--fg-muted);letter-spacing:.03em;text-transform:uppercase;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.nav-item{align-items:center;gap:var(--sp-3);height:38px;padding:0 var(--sp-3);border-radius:var(--r-md);font-size:var(--fs-base);color:var(--fg-secondary);white-space:nowrap;transition:background-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);font-weight:600;display:flex;position:relative}.nav-item svg{flex-shrink:0}.nav-item:hover{background:var(--bg-hover);color:var(--fg-primary)}.nav-item[aria-current=page]{background:var(--accent-soft);color:var(--accent)}.nav-item[aria-current=page]:before{content:"";border-radius:var(--r-full);background:var(--accent);width:2.5px;position:absolute;top:9px;bottom:9px;left:0}.nav-count{border-radius:var(--r-full);background:var(--danger);height:17px;color:var(--fg-inverted);font-size:var(--fs-2xs);align-items:center;margin-left:auto;padding:0 6px;font-weight:800;display:inline-flex}.nav-spacer{flex:1}.main{flex-direction:column;min-width:0;display:flex;overflow:hidden}.topbar{align-items:center;gap:var(--sp-3);height:var(--topbar-h);padding:0 var(--sp-5);border-bottom:1px solid var(--border);background:var(--bg-surface);flex-shrink:0;display:flex}.topbar-title{font-size:var(--fs-md);letter-spacing:-.01em;font-weight:700}.topbar-clock{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-muted);font-variant-numeric:tabular-nums}.user-avatar{border-radius:var(--r-full);background:var(--accent);width:22px;height:22px;color:var(--fg-on-accent);font-size:var(--fs-2xs);place-items:center;font-weight:800;display:grid}.content{min-height:0;padding:var(--sp-6);flex:1;overflow-y:auto}.page-header{justify-content:space-between;align-items:flex-start;gap:var(--sp-4);margin-bottom:var(--sp-5);flex-wrap:wrap;display:flex}.page-title{font-size:var(--fs-2xl);letter-spacing:-.025em;font-weight:800}.page-subtitle{font-size:var(--fs-base);color:var(--fg-secondary);margin-top:2px}.alerts-list{gap:var(--sp-2);flex-direction:column;display:flex}.alert-card{padding:var(--sp-3);padding-left:var(--sp-4);border-radius:var(--r-lg);border:1px solid var(--border-subtle);background:var(--bg-surface-2);transition:border-color var(--dur) var(--ease);position:relative}.alert-card:hover{border-color:var(--border-strong)}.alert-card:before{content:"";left:0;top:var(--sp-2);bottom:var(--sp-2);border-radius:var(--r-full);background:var(--fg-muted);width:3px;position:absolute}.alert-card[data-level=critical]:before{background:var(--danger)}.alert-card[data-level=warning]:before{background:var(--warning)}.alert-card[data-level=info]:before{background:var(--info)}.alert-time{font-family:var(--font-mono);font-size:var(--fs-2xs);color:var(--fg-muted);font-variant-numeric:tabular-nums}.alert-banner{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-md);background:var(--warning-soft);color:var(--warning);font-size:var(--fs-sm);font-weight:600;display:flex}.kpi-grid{gap:var(--sp-4);grid-template-columns:repeat(auto-fit,minmax(210px,1fr));display:grid}.kpi{padding:var(--sp-4);border-radius:var(--r-xl);border:1px solid var(--border);background:var(--bg-surface)}.kpi-head{justify-content:space-between;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-3);display:flex}.kpi-label{font-size:var(--fs-xs);letter-spacing:.05em;text-transform:uppercase;color:var(--fg-muted);font-weight:700}.kpi-icon{border-radius:var(--r-md);background:var(--bg-surface-3);place-items:center;width:28px;height:28px;display:grid}.kpi-value{font-size:var(--fs-3xl);letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-weight:800;line-height:1.1}.kpi-value-sub{font-size:var(--fs-lg);color:var(--fg-muted);font-weight:600}.kpi-foot{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--fg-muted)}.toolbar{align-items:center;gap:var(--sp-4);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-lg);border:1px solid var(--border);background:var(--bg-surface);flex-wrap:wrap;display:flex}.toolbar-group{align-items:center;gap:var(--sp-2);display:flex}.toolbar-label{font-size:var(--fs-sm);color:var(--fg-secondary);white-space:nowrap;font-weight:600}.chart-grid{gap:var(--sp-4);grid-template-columns:minmax(0,3fr) minmax(0,2fr);display:grid}.chart-panel{min-height:400px;position:relative}.chart-host{width:100%;height:340px}.chart-overlay{justify-content:center;align-items:center;gap:var(--sp-2);border-radius:var(--r-xl);background:color-mix(in srgb, var(--bg-surface) 72%, transparent);color:var(--fg-muted);font-size:var(--fs-base);pointer-events:none;display:flex;position:absolute;inset:0}.card-grid{gap:var(--sp-4);grid-template-columns:repeat(auto-fill,minmax(280px,1fr));display:grid}.stack{gap:var(--sp-4);flex-direction:column;display:flex}.stack-sm{gap:var(--sp-3);flex-direction:column;display:flex}@media (width<=1280px){.chart-grid{grid-template-columns:1fr}}@media (width<=1100px){.shell,.shell[data-alerts=closed],.shell[data-nav=collapsed],.shell[data-nav=collapsed][data-alerts=closed]{grid-template-columns:var(--nav-w-collapsed) minmax(0, 1fr)}.shell .alerts,.nav-label,.nav-brand-text,.nav-count{display:none}.nav-item{justify-content:center;padding:0}}@media (width<=720px){.content{padding:var(--sp-4)}.page-title{font-size:var(--fs-xl)}}.page{gap:var(--sp-4);flex-direction:column;display:flex}.page-header-text{min-width:0}.page-header-title{font-size:var(--fs-2xl);letter-spacing:-.025em;font-weight:800}.page-header-desc{font-size:var(--fs-base);color:var(--fg-secondary);margin-top:2px}.page-header-actions{align-items:center;gap:var(--sp-2);flex-shrink:0;display:flex}.breadcrumb{margin-bottom:var(--sp-4)}.row-actions{align-items:center;gap:var(--sp-1);display:flex}.member-picker{gap:var(--sp-2);margin-bottom:var(--sp-4);display:flex}.member-row{align-items:center;gap:var(--sp-2);display:flex}.boot-splash{background:var(--bg-app);place-items:center;height:100%;display:grid}.login-shell{background:var(--bg-app);grid-template-columns:minmax(0,1fr) minmax(0,1fr);height:100%;display:grid;position:relative}.login-controls{top:var(--sp-4);right:var(--sp-5);z-index:2;align-items:center;gap:var(--sp-1);display:flex;position:absolute}.login-aside{justify-content:center;gap:var(--sp-10);padding:var(--sp-12);background:var(--bg-surface);border-right:1px solid var(--border);flex-direction:column;display:flex;position:relative;overflow:hidden}.login-brand{align-items:center;gap:var(--sp-3);z-index:1;display:flex;position:relative}.login-features{gap:var(--sp-6);z-index:1;flex-direction:column;max-width:400px;list-style:none;display:flex;position:relative}.login-features li{align-items:flex-start;gap:var(--sp-3);display:flex}.login-feature-icon{border-radius:var(--r-md);border:1px solid var(--border);background:var(--bg-surface-2);width:34px;height:34px;color:var(--accent);flex-shrink:0;place-items:center;display:grid}.login-feature-title{font-size:var(--fs-md);letter-spacing:-.01em;font-weight:700}.login-feature-desc{font-size:var(--fs-base);color:var(--fg-secondary);margin-top:2px;line-height:1.55}.login-glow{background:radial-gradient(circle, color-mix(in srgb, var(--accent) 16%, transparent) 0%, transparent 66%);pointer-events:none;border-radius:50%;width:620px;height:620px;position:absolute;bottom:-260px;right:-220px}.login-main{padding:var(--sp-8);place-items:center;display:grid;overflow-y:auto}.login-card{gap:var(--sp-4);flex-direction:column;width:100%;max-width:372px;display:flex}.login-card-head{margin-bottom:var(--sp-1)}.login-card-title{font-size:var(--fs-2xl);letter-spacing:-.03em;font-weight:800}.login-card-sub{margin-top:var(--sp-2);font-size:var(--fs-base);color:var(--fg-secondary)}.login-error{align-items:center;gap:var(--sp-2);padding:var(--sp-3);border-radius:var(--r-md);border:1px solid color-mix(in srgb, var(--danger) 28%, transparent);background:var(--danger-soft);color:var(--danger);font-size:var(--fs-base);font-weight:600;display:flex}.input-affix{right:var(--sp-2);border-radius:var(--r-sm);width:26px;height:26px;color:var(--fg-muted);place-items:center;display:grid;position:absolute}.input-affix:hover{background:var(--bg-hover);color:var(--fg-primary)}@media (width<=900px){.login-shell{grid-template-columns:1fr}.login-aside{display:none}}.shell.ant-layout{background:var(--bg-app);height:100%;font-family:var(--font-sans)}.nav.ant-layout-sider{background:var(--bg-surface);border-right:1px solid var(--border);flex-direction:column;display:flex}.nav.ant-layout-sider .ant-menu{padding:0 var(--sp-2);background:0 0;border-inline-end:none}.nav.ant-layout-sider .ant-menu-item{width:100%;margin-inline:0;font-weight:600}.nav .ant-menu-item-selected{background:var(--accent-soft)!important;color:var(--accent)!important}.nav .ant-menu-item-selected:after{content:"";border-radius:var(--r-full);background:var(--accent);opacity:1;border:none;width:2.5px;position:absolute;top:9px;bottom:9px;left:0;transform:none}.menu-label-row{align-items:center;gap:var(--sp-2);display:flex}.nav.ant-layout-sider .ant-menu{padding-bottom:var(--sp-3)}.user-chip{align-items:center;gap:var(--sp-2);height:32px;padding:0 var(--sp-2) 0 var(--sp-1);border-radius:var(--r-full);border:1px solid var(--border);background:var(--bg-surface-2);font-size:var(--fs-sm);color:var(--fg-primary);cursor:pointer;transition:background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);font-weight:600;display:flex}.user-chip:hover,.user-chip[aria-expanded=true]{background:var(--bg-surface-3);border-color:var(--border-strong)}.user-chip-caret{color:var(--fg-muted);flex-shrink:0}.account-group{padding:var(--sp-1) 0;flex-direction:column;gap:1px;max-width:200px;display:flex}.account-group .truncate{font-size:var(--fs-base);color:var(--fg-primary);font-weight:600}.ant-dropdown-menu-item-group-title{opacity:1;padding-inline:var(--sp-3)}.topbar.ant-layout-header{align-items:center;gap:var(--sp-3);height:var(--topbar-h);padding:0 var(--sp-5);background:var(--bg-surface);border-bottom:1px solid var(--border);line-height:normal;display:flex}.main.ant-layout{background:var(--bg-app);min-width:0}.content.ant-layout-content{padding:var(--sp-6);overflow-y:auto}.panel.ant-card{border-radius:var(--r-xl);border-color:var(--border)}.panel.ant-card>.ant-card-head{min-height:unset;padding:var(--sp-4) var(--sp-5);border-bottom-color:var(--border-subtle)}.panel.ant-card>.ant-card-head .ant-card-head-title{padding:0}.panel-title{align-items:center;gap:var(--sp-2);font-size:var(--fs-md);letter-spacing:-.01em;font-weight:700;display:flex}.panel-title svg{color:var(--accent);flex-shrink:0}.panel-subtitle-inline{margin-top:-4px;margin-bottom:var(--sp-3)}.chart-panel.ant-card{position:relative}.chart-panel.ant-card>.ant-card-body{height:372px;padding:var(--sp-4)}.chart-panel .chart-host{width:100%;height:100%}.ant-btn.btn-square{width:34px;padding-inline:0}.ant-btn-sm.btn-square{width:28px}.ant-btn-lg.btn-square{width:42px}.ant-btn>svg{flex-shrink:0}.ant-tag.badge{padding-inline:var(--sp-2);border-radius:var(--r-sm);font-size:var(--fs-2xs);letter-spacing:.04em;text-transform:uppercase;margin-inline-end:0;font-weight:700;line-height:20px}.ant-tag.badge-violet{background:var(--violet-soft);color:var(--violet)}.state.ant-empty{padding:var(--sp-10) var(--sp-6);color:var(--fg-muted)}.state.ant-empty .state-title{font-size:var(--fs-md);color:var(--fg-secondary);font-weight:600}.state.ant-empty .state-desc{margin-top:var(--sp-1);font-size:var(--fs-base);color:var(--fg-muted)}.state-result.ant-result{padding:var(--sp-8) var(--sp-6)}.state-result .ant-result-title{font-size:var(--fs-md);color:var(--danger)}.alert-bell[data-status=disconnected]{color:var(--warning)}.alert-bell-flash{animation:bell-flash 1s var(--ease) 6}@keyframes bell-flash{0%,to{color:inherit;box-shadow:0 0 #0000}40%{box-shadow:0 0 0 5px var(--danger-soft);color:var(--danger)}}.alert-drawer .ant-drawer-header{padding:var(--sp-3) var(--sp-4)}.alert-drawer .ant-drawer-body{scrollbar-gutter:stable}.ant-notification-topRight{margin-inline-end:var(--sp-4)}.ant-notification-notice{border-radius:var(--r-lg);border:1px solid var(--border)}.ant-notification-notice-message{font-size:var(--fs-base);padding-inline-end:var(--sp-6);font-weight:600;margin-bottom:0!important}.ant-select-single{height:34px}.ant-picker{width:100%}.ant-segmented{background:var(--bg-inset);border:1px solid var(--border);padding:3px}.ant-segmented .ant-segmented-item-selected,.ant-segmented .ant-segmented-thumb{background:var(--bg-surface);box-shadow:var(--shadow-sm);border-radius:var(--r-sm)}.ant-segmented .ant-segmented-item-selected .ant-segmented-item-label{color:var(--fg-primary);font-weight:600}.ant-table-thead>tr>th{font-size:var(--fs-xs);letter-spacing:.05em;text-transform:uppercase;color:var(--fg-muted);font-weight:700}.ant-modal-content{border-radius:var(--r-2xl)}.ant-modal-header{margin-bottom:var(--sp-4)}
