:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bg-primary: #f5f5f5;--bg-secondary: #ffffff;--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: #e5e5e5;--header-bg: #ffffff;--surface: #f9f9f9;--primary: #3b82f6;--primary-hover: #2563eb}[data-theme=dark]{--bg-primary: #111827;--bg-secondary: #1f2937;--text-primary: #f9fafb;--text-secondary: #9ca3af;--border-color: #374151;--header-bg: #1f2937;--surface: #374151;--primary: #3b82f6;--primary-hover: #2563eb}*{margin:0;padding:0;box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background-color:var(--bg-primary);color:var(--text-primary);transition:background-color .3s,color .3s}#root{min-height:100vh}a{font-weight:500;color:var(--primary);text-decoration:inherit}a:hover{color:var(--primary-hover)}h1,h2,h3,h4,h5,h6{color:var(--text-primary)}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:var(--surface);color:var(--text-primary);cursor:pointer;transition:all .2s}button:hover{background-color:var(--border-color)}button:focus,button:focus-visible{outline:2px solid var(--primary);outline-offset:2px}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace;background-color:var(--surface);padding:.2em .4em;border-radius:4px;color:var(--primary)}[data-theme=dark] [style*="background: white"],[data-theme=dark] [style*="background-color: white"],[data-theme=dark] [style*="background: #fff"],[data-theme=dark] [style*="background-color: #fff"],[data-theme=dark] [style*="background: #ffffff"],[data-theme=dark] [style*="background-color: #ffffff"]{background-color:var(--bg-secondary)!important;color:var(--text-primary)!important}[data-theme=dark] [style*="color: #666"],[data-theme=dark] [style*="color: #333"],[data-theme=dark] [style*="color: #999"]{color:var(--text-secondary)!important}[data-theme=dark] [style*="background: #f5f5f5"],[data-theme=dark] [style*="background-color: #f5f5f5"],[data-theme=dark] [style*="background: #f9fafb"],[data-theme=dark] [style*="background-color: #f9fafb"]{background-color:var(--surface)!important}[data-theme=dark] h1,[data-theme=dark] h2,[data-theme=dark] h3,[data-theme=dark] h4,[data-theme=dark] h5,[data-theme=dark] h6{color:var(--text-primary)!important}[data-theme=dark] pre{background-color:var(--surface)!important;color:var(--text-primary)!important}[data-theme=dark] code{background-color:var(--surface)!important;color:var(--primary)!important}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{display:none}.ds-studio-page{max-width:860px}.ds-studio-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:2rem;flex-wrap:wrap}.ds-studio-header-left{display:flex;align-items:center;gap:1rem}.ds-studio-header-icon{width:52px;height:52px;border-radius:14px;background:linear-gradient(135deg,#3b82f6 0%,#2563eb 100%);display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.ds-studio-title{font-size:1.5rem;font-weight:700;margin:0}.ds-studio-subtitle{margin:0;font-size:.9375rem;color:var(--text-secondary, #64748b)}.ds-studio-list{overflow:hidden}.ds-studio-list-header{padding:1rem 1.25rem .75rem;border-bottom:1px solid var(--border-color, #e5e5e5)}.ds-studio-row{display:flex;align-items:center;gap:1rem;padding:.875rem 1.25rem;border-bottom:1px solid var(--border-color, #e5e5e5);transition:background .15s}.ds-studio-row:last-child{border-bottom:none}.ds-studio-row:hover{background:var(--surface, #f9fafb)}.ds-studio-row-icon{width:36px;height:36px;border-radius:10px;background:var(--surface, #f1f5f9);display:flex;align-items:center;justify-content:center;color:var(--primary, #3b82f6);flex-shrink:0}.ds-studio-row-info{flex:1;display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;min-width:0}.ds-studio-row-name{font-weight:600;color:var(--text-primary, #1f2937);font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-studio-row-actions{display:flex;gap:.375rem;flex-shrink:0}.ds-btn-icon-danger{color:#ef4444!important}.ds-btn-icon-danger:hover{background:#fef2f2!important}.ds-catalog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.45);z-index:10050;display:flex;align-items:center;justify-content:center;padding:1.5rem}.ds-catalog-panel{background:var(--bg-secondary, #fff);border-radius:20px;box-shadow:0 24px 64px #0003;width:100%;max-width:680px;max-height:80vh;overflow-y:auto;display:flex;flex-direction:column}.ds-catalog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.75rem 1.75rem 1.25rem;border-bottom:1px solid var(--border-color, #e5e5e5)}.ds-catalog-title{font-size:1.25rem;font-weight:700;margin:0 0 .25rem}.ds-catalog-subtitle{margin:0;font-size:.9rem;color:var(--text-secondary, #64748b)}.ds-catalog-grid{padding:1.25rem 1.75rem 1.75rem;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}@media (max-width: 860px){.ds-catalog-grid{grid-template-columns:1fr}}.ds-catalog-card{display:flex;align-items:flex-start;gap:1.25rem;padding:1.125rem 1.25rem;border:1.5px solid var(--border-color, #e5e5e5);border-radius:14px;background:var(--bg-secondary, #fff);cursor:pointer;text-align:left;transition:all .2s;width:100%}.ds-catalog-card:hover{border-color:var(--primary, #3b82f6);box-shadow:0 4px 16px #3b82f61f;transform:translateY(-1px)}.ds-catalog-card-icon{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ds-catalog-card-body{flex:1;min-width:0}.ds-catalog-card-title{font-size:1rem;font-weight:700;color:var(--text-primary, #1f2937);margin:0 0 .25rem}.ds-catalog-card-desc{font-size:.875rem;color:var(--text-secondary, #64748b);margin:0 0 .5rem;line-height:1.45;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.ds-catalog-card-tags{display:flex;gap:.375rem;flex-wrap:wrap}.ds-catalog-card-arrow{color:var(--text-secondary, #64748b);flex-shrink:0;transition:transform .2s}.ds-catalog-card:hover .ds-catalog-card-arrow{transform:translate(4px)}.ds-dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.45);z-index:10060;display:flex;align-items:center;justify-content:center;padding:1.5rem}.ds-dialog{background:var(--bg-secondary, #fff);border-radius:16px;padding:1.75rem;width:100%;max-width:420px;box-shadow:0 16px 48px #0003}.ds-dialog h3{margin:0 0 .75rem;font-size:1.125rem}.ds-dialog p{margin:0;color:var(--text-secondary, #64748b);font-size:.9375rem}.ds-dialog-actions{display:flex;justify-content:flex-end;gap:.625rem;margin-top:1.5rem}.ds-editor-page{max-width:100%;padding-top:0}.ds-editor-toolbar{position:sticky;top:0;z-index:100;display:flex;align-items:center;gap:1rem;padding:.875rem 1.5rem;background:var(--bg-secondary, #fff);border-bottom:1px solid var(--border-color, #e5e5e5);box-shadow:0 2px 8px #0000000d;flex-wrap:wrap}.ds-editor-toolbar-center{flex:1;display:flex;align-items:center;gap:.5rem;min-width:0}.ds-editor-name-input{flex:1;min-width:0;padding:.5rem .875rem;border:1.5px solid var(--border-color, #e5e5e5);border-radius:8px;font-size:1rem;font-weight:600;background:var(--bg-primary, #f5f5f5);color:var(--text-primary, #1f2937);transition:border-color .18s}.ds-editor-name-input:focus{outline:none;border-color:var(--primary, #3b82f6);background:var(--bg-secondary, #fff)}.ds-editor-dirty-dot{width:8px;height:8px;border-radius:50%;background:#f59e0b;flex-shrink:0}.ds-editor-toolbar-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.ds-root{--ds-radius-sm: 8px;--ds-radius-md: 12px;--ds-radius-lg: 18px;--ds-radius-xl: 24px;--ds-shadow-sm: 0 1px 4px rgba(0,0,0,.06);--ds-shadow-md: 0 4px 16px rgba(0,0,0,.08);--ds-shadow-lg: 0 8px 32px rgba(0,0,0,.12);--ds-gap-xs: .375rem;--ds-gap-sm: .75rem;--ds-gap-md: 1.25rem;--ds-gap-lg: 2rem;--ds-gap-xl: 3rem;--ds-well: #0ea5e9;--ds-well-dk: #0284c7;--ds-well-lt: #e0f2fe;--ds-ok: #10b981;--ds-warn: #f59e0b;--ds-danger: #ef4444;--ds-neutral: #64748b}.ds-page{padding:var(--ds-gap-lg);min-height:100%}@media (max-width: 768px){.ds-page{padding:var(--ds-gap-md)}}.ds-section-title{font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--text-secondary, #64748b);margin-bottom:var(--ds-gap-sm)}.ds-card{background:var(--bg-secondary, #fff);border:1px solid var(--border-color, #e5e5e5);border-radius:var(--ds-radius-lg);box-shadow:var(--ds-shadow-sm);transition:box-shadow .2s,transform .2s}.ds-card:hover{box-shadow:var(--ds-shadow-md)}.ds-btn{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem 1.25rem;border-radius:var(--ds-radius-sm);font-size:.9375rem;font-weight:600;cursor:pointer;border:none;transition:all .18s;white-space:nowrap}.ds-btn:disabled{opacity:.5;cursor:not-allowed}.ds-btn-primary{background:var(--primary, #3b82f6);color:#fff}.ds-btn-primary:hover:not(:disabled){background:var(--primary-hover, #2563eb);transform:translateY(-1px);box-shadow:0 4px 12px #3b82f659}.ds-btn-ghost{background:transparent;color:var(--text-secondary, #64748b);border:1px solid var(--border-color, #e5e5e5)}.ds-btn-ghost:hover:not(:disabled){background:var(--surface, #f9fafb);color:var(--text-primary, #1f2937)}.ds-btn-danger{background:transparent;color:var(--ds-danger, #ef4444);border:1px solid var(--ds-danger, #ef4444)}.ds-btn-danger:hover:not(:disabled){background:#fef2f2}.ds-btn-icon{padding:.5rem;border-radius:var(--ds-radius-sm);background:transparent;border:1px solid var(--border-color, #e5e5e5);color:var(--text-secondary, #64748b);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:all .18s}.ds-btn-icon:hover{background:var(--surface, #f9fafb);color:var(--text-primary, #1f2937)}.ds-badge{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border-radius:999px;font-size:.75rem;font-weight:600}.ds-badge-ok{background:#d1fae5;color:#065f46}.ds-badge-warn{background:#fef3c7;color:#92400e}.ds-badge-danger{background:#fee2e2;color:#991b1b}.ds-badge-neutral{background:var(--surface, #f1f5f9);color:var(--text-secondary, #64748b)}.ds-badge-blue{background:#dbeafe;color:#1e40af}.ds-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.ds-dot-ok{background:var(--ds-ok)}.ds-dot-warn{background:var(--ds-warn)}.ds-dot-danger{background:var(--ds-danger)}.ds-dot-neutral{background:var(--ds-neutral)}.ds-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--ds-gap-md);padding:var(--ds-gap-xl) var(--ds-gap-lg);text-align:center;color:var(--text-secondary, #64748b)}.ds-empty svg{opacity:.35}.ds-empty h3{font-size:1.125rem;font-weight:600;color:var(--text-primary, #1f2937);margin:0}.ds-empty p{margin:0;font-size:.9375rem}.ds-loading{display:flex;align-items:center;justify-content:center;gap:.75rem;padding:var(--ds-gap-xl);color:var(--text-secondary, #64748b);font-size:.9375rem}.ds-spinner{width:22px;height:22px;border:3px solid var(--border-color, #e5e5e5);border-top-color:var(--primary, #3b82f6);border-radius:50%;animation:ds-spin .7s linear infinite}@keyframes ds-spin{to{transform:rotate(360deg)}}.ds-form-group{display:flex;flex-direction:column;gap:.375rem}.ds-label{font-size:.8125rem;font-weight:600;color:var(--text-secondary, #64748b)}.ds-input,.ds-select{padding:.625rem .875rem;border:1px solid var(--border-color, #e5e5e5);border-radius:var(--ds-radius-sm);background:var(--bg-secondary, #fff);color:var(--text-primary, #1f2937);font-size:.9375rem;transition:border-color .18s,box-shadow .18s;width:100%}.ds-input:focus,.ds-select:focus{outline:none;border-color:var(--primary, #3b82f6);box-shadow:0 0 0 3px #3b82f626}.ds-divider{height:1px;background:var(--border-color, #e5e5e5);margin:var(--ds-gap-md) 0}.ds-toast{position:fixed;bottom:1.5rem;right:1.5rem;z-index:9999;display:flex;align-items:center;gap:.75rem;padding:.875rem 1.25rem;border-radius:var(--ds-radius-md);font-size:.9375rem;font-weight:500;box-shadow:var(--ds-shadow-lg);animation:ds-toast-in .25s ease}.ds-toast-success{background:#065f46;color:#d1fae5}.ds-toast-error{background:#991b1b;color:#fee2e2}.ds-toast-info{background:#1e40af;color:#dbeafe}@keyframes ds-toast-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.well-editor{max-width:860px}.well-editor-grid{display:flex;flex-direction:column;gap:1.5rem}.well-editor-section{padding:1.5rem}.well-editor-section-header{display:flex;align-items:center;gap:.625rem;margin-bottom:1.25rem;color:var(--primary, #3b82f6)}.well-editor-section-header h2{font-size:1rem;font-weight:700;margin:0;color:var(--text-primary, #1f2937)}.well-editor-section-hint{font-size:.875rem;color:var(--text-secondary, #64748b);margin:-.5rem 0 1.25rem;line-height:1.5}.well-editor-section-info{border-left:4px solid #f59e0b}.well-editor-fields{display:flex;flex-direction:column;gap:1rem}.well-editor-fields-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}.well-editor-dp-list{display:flex;flex-direction:column;gap:.5rem}.well-editor-dp-item{display:flex;align-items:center;gap:.625rem;padding:.5rem .75rem;border-radius:8px;background:var(--surface, #f9fafb);font-size:.875rem}.well-editor-dp-label{flex:1;font-weight:500;color:var(--text-primary, #1f2937)}.well-view{min-height:100%;background:var(--bg-primary, #f5f5f5)}.well-hero{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.5rem 2rem;background:var(--bg-secondary, #fff);border-bottom:1px solid var(--border-color, #e5e5e5);flex-wrap:wrap}.well-hero-left{display:flex;align-items:center;gap:1rem}.well-hero-icon{width:56px;height:56px;border-radius:16px;background:linear-gradient(135deg,#0ea5e9 0%,#0284c7 100%);display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0;box-shadow:0 4px 16px #0ea5e94d}.well-hero-title{font-size:1.375rem;font-weight:700;margin:0 0 .2rem}.well-hero-location{display:flex;align-items:center;gap:.3rem;font-size:.875rem;color:var(--text-secondary, #64748b);margin:0}.well-hero-right{display:flex;align-items:center;gap:.625rem;flex-wrap:wrap}.well-view-body{padding:1.75rem 2rem;display:flex;flex-direction:column;gap:1.5rem}@media (max-width: 768px){.well-hero,.well-view-body{padding:1.25rem}}.well-main-grid{display:grid;grid-template-columns:140px 1fr;gap:1.5rem;align-items:start}@media (max-width: 640px){.well-main-grid{grid-template-columns:1fr}}.well-level-card{padding:1.25rem;display:flex;flex-direction:column;gap:.75rem;align-items:center}.well-level-bar-wrap{display:flex;flex-direction:column;align-items:center;gap:.5rem;width:100%}.well-level-bar-track{position:relative;width:52px;height:160px;background:var(--surface, #f1f5f9);border-radius:26px;overflow:hidden;border:2px solid var(--border-color, #e5e5e5)}.well-level-bar-fill{position:absolute;bottom:0;left:0;right:0;border-radius:0 0 24px 24px;transition:height .6s ease,background .4s}.well-level-bar-threshold{position:absolute;left:0;right:0;height:2px;background:rgba(239,68,68,.6)}.well-level-bar-labels{display:flex;flex-direction:column;align-items:center;gap:.15rem}.well-level-bar-pct{font-size:1.375rem;font-weight:700;line-height:1}.well-level-bar-sub{font-size:.75rem;color:var(--text-secondary, #64748b);text-transform:uppercase;letter-spacing:.04em}.well-kpi-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem}@media (max-width: 480px){.well-kpi-grid{grid-template-columns:1fr}}.well-kpi-card{background:var(--bg-secondary, #fff);border:1px solid var(--border-color, #e5e5e5);border-radius:14px;padding:1.125rem 1.25rem;display:flex;align-items:center;gap:1rem;transition:box-shadow .2s}.well-kpi-card:hover{box-shadow:0 4px 16px #00000012}.well-kpi-card-large{padding:1.25rem 1.375rem}.well-kpi-icon{width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.well-kpi-ok .well-kpi-icon{background:#d1fae5;color:#065f46}.well-kpi-warn .well-kpi-icon{background:#fef3c7;color:#92400e}.well-kpi-danger .well-kpi-icon{background:#fee2e2;color:#991b1b}.well-kpi-neutral .well-kpi-icon{background:var(--surface, #f1f5f9);color:var(--text-secondary, #64748b)}.well-kpi-ok{border-left:3px solid #10b981}.well-kpi-warn{border-left:3px solid #f59e0b}.well-kpi-danger{border-left:3px solid #ef4444}.well-kpi-neutral{border-left:3px solid var(--border-color, #e5e5e5)}.well-kpi-body{display:flex;flex-direction:column;gap:.2rem;min-width:0}.well-kpi-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary, #64748b)}.well-kpi-value-row{display:flex;align-items:baseline;gap:.3rem}.well-kpi-value{font-size:1.625rem;font-weight:700;line-height:1;color:var(--text-primary, #1f2937)}.well-kpi-unit{font-size:.8125rem;color:var(--text-secondary, #64748b);font-weight:500}.well-pump-btn{-moz-appearance:none;appearance:none;-webkit-appearance:none;border:none;font:inherit;text-align:left;cursor:pointer;transition:transform .1s ease,box-shadow .15s ease,opacity .15s ease;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;width:100%}.well-pump-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 20px #0003}.well-pump-btn:active:not(:disabled){transform:translateY(0)}.well-pump-btn:disabled{opacity:.5;cursor:not-allowed}.well-pump-btn-sending{opacity:.7;pointer-events:none}.well-last-update{font-size:.8125rem;color:var(--text-secondary, #64748b);text-align:right;margin:0}.machine-editor{max-width:900px}.machine-editor-grid{display:flex;flex-direction:column;gap:1.5rem}.machine-editor-section{padding:1.5rem}.machine-editor-section-header{display:flex;align-items:center;gap:.625rem;margin-bottom:1.25rem;color:#f97316}.machine-editor-section-header h2{font-size:1rem;font-weight:700;margin:0;color:var(--text-primary, #1f2937)}.machine-editor-section-hint{font-size:.875rem;color:var(--text-secondary, #64748b);margin:-.5rem 0 1.25rem;line-height:1.5}.machine-editor-section-info{border-left:4px solid #f59e0b}.machine-editor-fields{display:flex;flex-direction:column;gap:1rem}.machine-editor-fields-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:1rem}.machine-editor-dp-list{display:flex;flex-direction:column;gap:.5rem}.machine-editor-dp-item{display:flex;align-items:center;gap:.625rem;padding:.5rem .75rem;border-radius:8px;background:var(--surface, #f9fafb);font-size:.875rem}.machine-editor-dp-label{flex:1;font-weight:500;color:var(--text-primary, #1f2937)}.mach-view{min-height:100%;background:var(--bg-primary, #f0f2f5)}.mach-hero{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.375rem 2rem;background:var(--bg-secondary, #fff);border-bottom:1px solid var(--border-color, #e5e5e5);flex-wrap:wrap;box-shadow:0 1px 4px #0000000f}.mach-hero-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;width:100%;max-width:1400px;margin:0 auto}.mach-hero-left{display:flex;align-items:center;gap:1rem}.mach-hero-icon{width:54px;height:54px;border-radius:16px;background:linear-gradient(135deg,#f97316 0%,#ea580c 100%);display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0;box-shadow:0 4px 16px #f9731659;transition:background .4s}.mach-hero-icon-alarm{background:linear-gradient(135deg,#ef4444 0%,#b91c1c 100%);box-shadow:0 4px 16px #ef444466;animation:mach-pulse-alarm 1.4s ease-in-out infinite}.mach-hero-icon-warn{background:linear-gradient(135deg,#f59e0b 0%,#d97706 100%);box-shadow:0 4px 16px #f59e0b66}@keyframes mach-pulse-alarm{0%,to{box-shadow:0 4px 16px #ef444466}50%{box-shadow:0 4px 28px #ef4444cc}}.mach-hero-title{font-size:1.3rem;font-weight:700;margin:0 0 .2rem}.mach-hero-sub{display:flex;align-items:center;gap:.3rem;font-size:.8125rem;color:var(--text-secondary, #64748b);margin:0}.mach-hero-badges{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.mach-badge{display:inline-flex;align-items:center;gap:.3rem;padding:.3rem .7rem;border-radius:999px;font-size:.75rem;font-weight:600;white-space:nowrap}.mach-badge-blue{background:#dbeafe;color:#1d4ed8}.mach-badge-pulse{animation:mach-badge-pulse 1.2s ease-in-out infinite}@keyframes mach-badge-pulse{0%,to{opacity:1}50%{opacity:.65}}.mach-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.mach-dot-ok{background:#10b981}.mach-dot-warn{background:#f59e0b}.mach-dot-danger{background:#ef4444}.mach-body{padding:1.75rem 2rem;display:flex;flex-direction:column;gap:2rem;max-width:1400px;width:100%;margin:0 auto;box-sizing:border-box}@media (max-width: 768px){.mach-hero{padding:1.125rem 1.25rem}.mach-body{padding:1.25rem;gap:1.5rem}}.mach-section{display:flex;flex-direction:column;gap:.875rem}.mach-section-title{display:flex;align-items:center;gap:.4rem;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--text-secondary, #64748b)}.mach-temp-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem}@media (max-width: 600px){.mach-temp-grid{grid-template-columns:1fr}}.mach-thermo-card{background:var(--bg-secondary, #fff);border:1px solid var(--border-color, #e5e5e5);border-radius:16px;padding:1.375rem 1.5rem;display:flex;flex-direction:column;gap:1rem;transition:box-shadow .2s,border-color .3s}.mach-thermo-card:hover{box-shadow:0 4px 20px #00000014}.mach-thermo-ok{border-left:4px solid #10b981}.mach-thermo-warn{border-left:4px solid #f59e0b}.mach-thermo-danger{border-left:4px solid #ef4444}.mach-thermo-neutral{border-left:4px solid var(--border-color,#e5e5e5)}.mach-thermo-header{display:flex;align-items:center;gap:.875rem}.mach-thermo-icon-wrap{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mach-thermo-meta{flex:1;display:flex;flex-direction:column;gap:.2rem}.mach-thermo-label{font-size:.875rem;font-weight:600;color:var(--text-primary,#1f2937)}.mach-thermo-value-wrap{display:flex;align-items:baseline;gap:.2rem;flex-shrink:0}.mach-thermo-value{font-size:2rem;font-weight:800;line-height:1}.mach-thermo-unit{font-size:.9rem;font-weight:600;color:var(--text-secondary,#64748b)}.mach-thermo-badge{display:inline-flex;align-items:center;padding:.15rem .5rem;border-radius:999px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.mach-badge-ok{background:#d1fae5;color:#065f46}.mach-badge-warn{background:#fef3c7;color:#92400e}.mach-badge-danger{background:#fee2e2;color:#991b1b}.mach-badge-neutral{background:var(--surface,#f1f5f9);color:var(--text-secondary,#64748b)}.mach-thermo-bar-wrap{display:flex;flex-direction:column;gap:.4rem}.mach-thermo-bar-track{position:relative;height:10px;background:var(--surface, #f1f5f9);border-radius:5px;overflow:visible;border:1px solid var(--border-color, #e5e5e5)}.mach-thermo-bar-fill{position:absolute;left:0;top:0;bottom:0;border-radius:5px;transition:width .7s cubic-bezier(.4,0,.2,1),background .4s}.mach-thermo-bar-warn-marker{position:absolute;top:-4px;bottom:-4px;width:2px;background:#f59e0b;border-radius:2px;opacity:.9}.mach-thermo-bar-labels{position:relative;display:flex;justify-content:space-between;font-size:.7rem;color:var(--text-secondary,#64748b);height:1rem}.mach-thermo-thresholds{display:flex;gap:1rem;flex-wrap:wrap;font-size:.75rem;color:var(--text-secondary,#64748b)}.mach-thermo-thresholds span{display:flex;align-items:center;gap:.3rem}.mach-trend-up{color:#ef4444}.mach-trend-down{color:#10b981}.mach-trend-stable{color:var(--text-secondary,#64748b)}.mach-electric-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem;align-items:stretch}@media (max-width: 600px){.mach-electric-grid{grid-template-columns:1fr}}.mach-current-card{background:var(--bg-secondary, #fff);border:1px solid var(--border-color, #e5e5e5);border-radius:16px;padding:1.375rem 1.5rem;display:flex;flex-direction:column;align-items:center;gap:.75rem;transition:box-shadow .2s}.mach-current-card:hover{box-shadow:0 4px 20px #00000014}.mach-current-ok{border-left:4px solid #10b981}.mach-current-warn{border-left:4px solid #f59e0b}.mach-current-danger{border-left:4px solid #ef4444}.mach-current-neutral{border-left:4px solid var(--border-color,#e5e5e5)}.mach-current-header{display:flex;align-items:center;gap:.75rem;width:100%}.mach-current-icon-wrap{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mach-current-label{font-size:.875rem;font-weight:600;color:var(--text-primary,#1f2937)}.mach-current-gauge-wrap{display:flex;justify-content:center;flex:1;align-items:center}.mach-current-svg{width:150px;height:150px}.mach-gauge-val{font-size:24px;font-weight:800}.mach-gauge-unit{font-size:12px;font-weight:600}.mach-gauge-max{font-size:10px}.mach-power-card{background:var(--bg-secondary, #fff);border:1px solid var(--border-color, #e5e5e5);border-radius:16px;padding:1.375rem 1.5rem;display:flex;flex-direction:column;justify-content:center;gap:0;transition:box-shadow .2s}.mach-power-card:hover{box-shadow:0 4px 20px #00000014}.mach-power-row{display:flex;align-items:center;gap:1rem;padding:.875rem 0}.mach-power-divider{height:1px;background:var(--border-color,#e5e5e5);margin:0}.mach-power-icon-wrap{width:40px;height:40px;border-radius:12px;flex-shrink:0;background:rgba(99,102,241,.1);color:#6366f1;display:flex;align-items:center;justify-content:center}.mach-power-icon-energy{background:rgba(249,115,22,.1);color:#f97316}.mach-power-body{display:flex;flex-direction:column;gap:.15rem}.mach-power-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary,#64748b)}.mach-power-value-row{display:flex;align-items:baseline;gap:.3rem}.mach-power-value{font-size:1.75rem;font-weight:800;line-height:1;color:var(--text-primary,#1f2937)}.mach-power-unit{font-size:.875rem;font-weight:500;color:var(--text-secondary,#64748b)}.mach-relay-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem}@media (max-width: 700px){.mach-relay-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 380px){.mach-relay-grid{grid-template-columns:1fr}}.mach-relay-btn{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1.5rem 1rem 1.25rem;border-radius:18px;border:2px solid transparent;cursor:pointer;font:inherit;transition:transform .12s ease,box-shadow .15s ease,opacity .15s ease,background .25s;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;overflow:hidden}.mach-relay-btn:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle at 50% 0%,rgba(255,255,255,.15),transparent 70%);pointer-events:none}.mach-relay-btn:hover:not(:disabled){transform:translateY(-3px);box-shadow:0 8px 24px #0000002e}.mach-relay-btn:active:not(:disabled){transform:translateY(-1px)}.mach-relay-btn:disabled{opacity:.4;cursor:not-allowed}.mach-relay-sending{opacity:.65;pointer-events:none}.mach-relay-on{background:linear-gradient(160deg,#059669 0%,#047857 100%);border-color:#065f46;color:#fff;box-shadow:0 4px 18px #05966959}.mach-relay-off{background:var(--bg-secondary, #fff);border-color:var(--border-color, #e5e5e5);color:var(--text-secondary, #64748b)}.mach-relay-led{position:absolute;top:.75rem;right:.75rem;width:10px;height:10px;border-radius:50%}.mach-led-on{background:#4ade80;box-shadow:0 0 8px #4ade80;animation:mach-led-blink 2s ease-in-out infinite}.mach-led-off{background:#6b7280}@keyframes mach-led-blink{0%,to{opacity:1}50%{opacity:.5}}.mach-relay-icon-wrap{width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.15);transition:background .25s}.mach-relay-off .mach-relay-icon-wrap{background:var(--surface,#f1f5f9)}.mach-relay-label{font-size:.9rem;font-weight:700;text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mach-relay-state{font-size:.75rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;opacity:.85}.mach-input-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem}@media (max-width: 700px){.mach-input-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 380px){.mach-input-grid{grid-template-columns:1fr}}.mach-input-card{display:flex;align-items:center;gap:.75rem;padding:1rem 1.125rem;border-radius:14px;border:1px solid var(--border-color, #e5e5e5);background:var(--bg-secondary, #fff);transition:border-color .25s,background .25s,box-shadow .2s}.mach-input-on{background:#eff6ff;border-color:#93c5fd;box-shadow:0 2px 10px #3b82f61f}.mach-input-off{color:var(--text-secondary,#64748b)}.mach-input-led{width:10px;height:10px;border-radius:50%;flex-shrink:0}.mach-input-on .mach-input-led{background:#3b82f6;box-shadow:0 0 6px #3b82f6}.mach-input-off .mach-input-led{background:#d1d5db}.mach-input-icon{flex-shrink:0;color:inherit}.mach-input-label{flex:1;font-size:.875rem;font-weight:600;color:var(--text-primary,#1f2937);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mach-input-state{font-size:.75rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}.mach-input-on .mach-input-state{color:#1d4ed8}.mach-input-off .mach-input-state{color:var(--text-secondary,#64748b)}[data-theme=dark] .mach-input-card{background:#182235;border-color:#2a3753;box-shadow:0 8px 22px #0000002e}[data-theme=dark] .mach-input-on{background:linear-gradient(180deg,rgba(37,99,235,.22) 0%,rgba(30,64,175,.16) 100%);border-color:#60a5fa8c;color:#dbeafe;box-shadow:0 8px 24px #2563eb38}[data-theme=dark] .mach-input-off{background:#111827;border-color:#263247;color:#94a3b8;box-shadow:none}[data-theme=dark] .mach-input-off .mach-input-led{background:#475569}[data-theme=dark] .mach-input-on .mach-input-led{background:#60a5fa;box-shadow:0 0 10px #60a5fae6}[data-theme=dark] .mach-input-on .mach-input-label,[data-theme=dark] .mach-input-on .mach-input-state,[data-theme=dark] .mach-input-on .mach-input-icon{color:#dbeafe}[data-theme=dark] .mach-input-off .mach-input-label{color:#e5e7eb}[data-theme=dark] .mach-input-off .mach-input-state,[data-theme=dark] .mach-input-off .mach-input-icon{color:#94a3b8}.mach-list-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(15,23,42,.55);display:flex;align-items:center;justify-content:center;padding:1.5rem;z-index:1200}.mach-list-modal{width:min(960px,100%);max-height:90vh;overflow:hidden;border-radius:16px;background:var(--bg-secondary, #fff);border:1px solid var(--border-color, #e5e7eb);box-shadow:0 20px 50px #0f172a40;display:flex;flex-direction:column}.mach-list-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.25rem;border-bottom:1px solid var(--border-color, #e5e7eb);background:var(--surface, #f8fafc);border-radius:16px 16px 0 0;flex-shrink:0}.mach-list-header-info{display:flex;align-items:center;gap:.75rem;min-width:0}.mach-list-header-icon{width:38px;height:38px;border-radius:10px;background:rgba(99,102,241,.12);display:flex;align-items:center;justify-content:center;color:#6366f1;flex-shrink:0}.mach-list-header-text{min-width:0}.mach-list-header-title{font-weight:700;font-size:1rem;color:var(--text-primary, #1f2937);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mach-list-header-sub{font-size:.82rem;color:var(--text-secondary, #6b7280);margin-top:.15rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mach-list-close-btn{border:none;background:rgba(99,102,241,.1);color:#6366f1;border-radius:8px;padding:.45rem .9rem;cursor:pointer;font-weight:700;font-size:.85rem;flex-shrink:0;white-space:nowrap}.mach-list-range{padding:.75rem 1.25rem;border-bottom:1px solid var(--border-color, #e5e7eb);display:flex;gap:.4rem;flex-wrap:wrap;align-items:center;flex-shrink:0}.mach-list-range-label{font-size:.78rem;color:var(--text-secondary, #6b7280);margin-right:.25rem;font-weight:600;white-space:nowrap}.mach-list-body{overflow:auto;flex:1;padding:0 1.25rem;-webkit-overflow-scrolling:touch}.mach-list-empty{padding:2.5rem 0;text-align:center;color:var(--text-secondary, #6b7280)}.mach-list-error{padding:2.5rem 0;text-align:center;color:#ef4444}.mach-list-table{width:100%;border-collapse:collapse;min-width:400px}.mach-list-footer{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.25rem;border-top:1px solid var(--border-color, #e5e7eb);background:var(--surface, #f8fafc);border-radius:0 0 16px 16px;gap:.75rem;flex-shrink:0;flex-wrap:wrap}.mach-list-footer-info{font-size:.82rem;color:var(--text-secondary, #6b7280);white-space:nowrap}.mach-list-pagination{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap;justify-content:flex-end}@media (max-width: 600px){.mach-list-overlay{padding:0;align-items:flex-end}.mach-list-modal{width:100%;max-height:92vh;border-radius:20px 20px 0 0}.mach-list-header{border-radius:20px 20px 0 0;padding:.9rem 1rem}.mach-list-header-title{font-size:.92rem}.mach-list-header-sub{display:none}.mach-list-range{padding:.6rem 1rem}.mach-list-body{padding:0 .75rem}.mach-list-footer{flex-direction:column;align-items:flex-start;gap:.5rem;padding:.75rem 1rem;border-radius:0}.mach-list-pagination{width:100%;justify-content:center}}@media (max-width: 380px){.mach-list-header-icon,.mach-list-close-btn span{display:none}}.mach-footer{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;padding:.75rem 0;border-top:1px solid var(--border-color,#e5e5e5);margin-top:.5rem}.mach-footer-item{display:flex;align-items:center;gap:.3rem;font-size:.75rem;color:var(--text-secondary,#64748b)}.mach-footer-offline{color:#ef4444}.filters-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;z-index:1000}[data-theme=dark] .filters-overlay{background:rgba(0,0,0,.7)}.filters-panel-page{width:100%}.filters-panel{background:var(--bg-secondary);border-radius:12px;max-height:90vh;overflow-y:auto;box-shadow:0 20px 25px -5px #0000001a;color:var(--text-primary)}[data-theme=dark] .filters-panel{box-shadow:0 20px 25px -5px #00000080}.filters-header{display:flex;justify-content:space-between;align-items:center;padding:1.5rem;border-bottom:1px solid var(--border-color);background:var(--bg-secondary)}.filters-header h3{margin:0;color:var(--text-primary)}.close-btn{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--text-secondary);padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}.close-btn:hover{background:var(--surface);color:var(--text-primary)}.filters-body{padding:1.5rem;background:var(--bg-primary);color:var(--text-primary)}.filters-tab-button{flex:1;padding:1rem;border:none;cursor:pointer;font-weight:400;transition:all .2s;background:transparent;color:var(--text-secondary);border-bottom:3px solid transparent}.filters-tab-button.active{background:var(--surface);font-weight:600;color:var(--primary);border-bottom-color:var(--primary)}[data-theme=dark] .filters-tab-button.active{background:var(--bg-secondary)}.filters-card{padding:1.5rem;background:var(--bg-secondary);border-radius:8px;border:2px solid var(--border-color);box-shadow:0 2px 4px #0000001a;color:var(--text-primary)}[data-theme=dark] .filters-card{border-color:var(--border-color);box-shadow:0 2px 4px #0000004d}.filters-info-box{padding:.75rem;background:var(--surface);border-radius:6px;color:var(--text-primary);margin-bottom:1rem}.filters-info-box strong{color:var(--text-primary)}.filters-info-box p{margin:.5rem 0 0;font-size:.9rem;color:var(--text-secondary)}.filters-btn{padding:.5rem 1rem;border:none;border-radius:6px;cursor:pointer;font-weight:500;transition:all .2s;font-size:.9rem}.filters-btn-primary{background:var(--primary);color:#fff}.filters-btn-primary:hover{background:var(--primary-hover)}.filters-btn-success{background:#10b981;color:#fff}.filters-btn-success:hover{background:#059669}.filters-btn-danger{background:#ef4444;color:#fff}.filters-btn-danger:hover{background:#dc2626}.filters-btn-secondary{background:var(--surface);color:var(--text-primary);border:1px solid var(--border-color)}.filters-btn-secondary:hover{background:var(--border-color)}.filters-btn:disabled{opacity:.6;cursor:not-allowed}.filters-input,.filters-select,.filters-textarea{width:100%;padding:.5rem;border-radius:4px;border:1px solid var(--border-color);background:var(--bg-secondary);color:var(--text-primary);font-family:inherit}.filters-input:focus,.filters-select:focus,.filters-textarea:focus{outline:2px solid var(--primary);outline-offset:2px;border-color:var(--primary)}.filters-label{display:block;margin-bottom:.5rem;font-weight:500;color:var(--text-primary)}.filters-list-item{padding:1rem;margin-bottom:.5rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;color:var(--text-primary)}.filters-list-item strong{color:var(--text-primary)}.filters-list-item span{color:var(--text-secondary)}.filters-empty-state{padding:2rem;text-align:center;color:var(--text-secondary)}.filters-empty-state-icon{font-size:3rem;margin-bottom:1rem}.filters-editor{padding:1.5rem;background:var(--surface);border-radius:8px;border:2px solid var(--primary);color:var(--text-primary)}[data-theme=dark] .filters-editor{background:var(--bg-secondary)}.filters-editor h3{margin-top:0;color:var(--text-primary)}.filters-field-list{max-height:150px;overflow-y:auto;border:1px solid var(--border-color);padding:.5rem;border-radius:4px;background:var(--bg-secondary)}.filters-field-list label{display:block;margin:.25rem 0;color:var(--text-primary);cursor:pointer}.filters-field-list input[type=checkbox]{margin-right:.5rem;cursor:pointer}.filters-status-disabled{padding:.5rem;background:#fef2f2;color:#dc2626;border-radius:4px;font-size:.85rem;text-align:center}[data-theme=dark] .filters-status-disabled{background:#7f1d1d;color:#fca5a5}.filters-status-info{padding:.5rem;background:var(--surface);border-radius:4px;font-size:.85rem;color:var(--text-secondary)}.filters-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.filters-loading{text-align:center;padding:2rem;color:var(--text-secondary)}.camera-list-container{padding:2rem;max-width:1400px;margin:0 auto;color:var(--text-primary)}.camera-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem}.camera-list-header h1{color:var(--text-primary)}.header-actions{display:flex;gap:1rem}.btn-discover,.btn-add-camera{padding:.75rem 1.5rem;border:none;border-radius:8px;font-size:1rem;cursor:pointer;transition:all .2s}.btn-discover{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff}.btn-discover:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 4px 12px #667eea66}.btn-discover:disabled{opacity:.6;cursor:not-allowed}.btn-add-camera{background:linear-gradient(135deg,#f093fb 0%,#f5576c 100%);color:#fff}.btn-add-camera:hover{transform:translateY(-2px);box-shadow:0 4px 12px #f5576c66}.discovery-results{background:var(--bg-secondary);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:0 2px 8px #0000004d;border:1px solid var(--border-color)}.discovery-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.discovery-header h2{color:var(--text-primary);margin:0}.discovery-header button{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--text-secondary)}.no-devices{color:var(--text-secondary);text-align:center;padding:2rem}.discovered-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.discovered-device{background:var(--surface);padding:1rem;border-radius:8px;text-align:center;border:1px solid var(--border-color)}.discovered-device h3{margin:0 0 .5rem;color:var(--text-primary)}.discovered-device p{margin:.25rem 0;color:var(--text-secondary);font-size:.9rem}.btn-provision{margin-top:1rem;padding:.5rem 1.5rem;background:#667eea;color:#fff;border:none;border-radius:6px;cursor:pointer;transition:all .2s}.btn-provision:hover:not(:disabled){background:#764ba2;transform:scale(1.05)}.btn-provision:disabled{opacity:.6;cursor:not-allowed}.add-camera-form{background:var(--bg-secondary);border-radius:12px;padding:2rem;margin-bottom:2rem;box-shadow:0 2px 8px #0000004d;border:1px solid var(--border-color)}.add-camera-form h2{color:var(--text-primary);margin-top:0}.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem;margin-bottom:1rem}.form-group label{display:block;margin-bottom:.5rem;font-weight:500;color:var(--text-primary)}.form-group input{width:100%;padding:.75rem;border:2px solid var(--border-color);border-radius:6px;font-size:1rem;transition:border-color .2s;background:var(--bg-primary);color:var(--text-primary)}.form-group input:focus{outline:none;border-color:#667eea}.form-group input::placeholder{color:var(--text-secondary);opacity:.6}.form-actions{display:flex;gap:1rem;margin-top:2rem}.btn-submit{flex:1;padding:.75rem;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:1rem}.btn-cancel{padding:.75rem 2rem;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border-color);border-radius:6px;cursor:pointer}.btn-cancel:hover{background:var(--bg-primary)}.camera-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1.5rem}.camera-card{background:var(--bg-secondary);border-radius:12px;overflow:hidden;box-shadow:0 2px 8px #0000004d;transition:transform .2s,box-shadow .2s;border:1px solid var(--border-color)}.camera-card:hover{transform:translateY(-4px);box-shadow:0 8px 24px #0006}.camera-card-header{display:flex;justify-content:space-between;align-items:center;padding:1rem;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff}.camera-card-header h3{margin:0;font-size:1.1rem}.status-indicator{font-size:.85rem;padding:.25rem .75rem;border-radius:12px;background:rgba(255,255,255,.2)}.status-indicator.online{background:rgba(76,175,80,.3)}.status-indicator.offline{background:rgba(244,67,54,.3)}.camera-card-body{padding:1rem}.camera-info{display:flex;justify-content:space-between;margin-bottom:.75rem;font-size:.9rem}.info-label{font-weight:500;color:var(--text-secondary)}.info-value{color:var(--text-primary)}.camera-card-actions{display:flex;gap:.5rem;padding:1rem;border-top:1px solid var(--border-color)}.btn-view{flex:1;padding:.75rem;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;text-decoration:none;text-align:center;border-radius:6px;transition:all .2s}.btn-view:hover{transform:scale(1.05)}.btn-delete{padding:.75rem 1.5rem;background:#f44336;color:#fff;border:none;border-radius:6px;cursor:pointer;transition:all .2s}.btn-delete:hover{background:#d32f2f}.empty-state{text-align:center;padding:4rem 2rem;grid-column:1 / -1}.empty-icon{font-size:4rem;margin-bottom:1rem;opacity:.5}.empty-state h3{color:var(--text-primary);margin-bottom:.5rem}.empty-state p{color:var(--text-secondary)}.loading,.error{text-align:center;padding:4rem;font-size:1.2rem;color:var(--text-primary)}.error{color:#f44336}.vjs-svg-icon{display:inline-block;background-repeat:no-repeat;background-position:center;fill:currentColor;height:1.8em;width:1.8em}.vjs-svg-icon:before{content:none!important}.vjs-svg-icon:hover,.vjs-control:focus .vjs-svg-icon{filter:drop-shadow(0 0 .25em #fff)}.vjs-modal-dialog .vjs-modal-dialog-content,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,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) format("woff");font-weight:400;font-style:normal}.vjs-icon-play,.video-js .vjs-play-control .vjs-icon-placeholder,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{content:""}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:""}.vjs-icon-pause,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pause:before,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-mute,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mute:before,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-low,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-low:before,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-mid,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mid:before,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-high,.video-js .vjs-mute-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-high:before,.video-js .vjs-mute-control .vjs-icon-placeholder:before{content:""}.vjs-icon-fullscreen-enter,.video-js .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-enter:before,.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before{content:""}.vjs-icon-fullscreen-exit,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-exit:before,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before{content:""}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:""}.vjs-icon-subtitles,.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-subtitles:before,.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before{content:""}.vjs-icon-captions,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-captions-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-captions:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-captions-button .vjs-icon-placeholder:before{content:""}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:""}.vjs-icon-chapters,.video-js .vjs-chapters-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-chapters:before,.video-js .vjs-chapters-button .vjs-icon-placeholder:before{content:""}.vjs-icon-downloading{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-downloading:before{content:""}.vjs-icon-file-download{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-file-download:before{content:""}.vjs-icon-file-download-done{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-file-download-done:before{content:""}.vjs-icon-file-download-off{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-file-download-off:before{content:""}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:""}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:""}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:""}.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder,.video-js .vjs-volume-level,.video-js .vjs-play-progress{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before,.video-js .vjs-volume-level:before,.video-js .vjs-play-progress:before{content:""}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:""}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:""}.vjs-icon-cancel,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cancel:before,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before{content:""}.vjs-icon-repeat{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-repeat:before{content:""}.vjs-icon-replay,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay:before,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-5,.video-js .vjs-skip-backward-5 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay-5:before,.video-js .vjs-skip-backward-5 .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-10,.video-js .vjs-skip-backward-10 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay-10:before,.video-js .vjs-skip-backward-10 .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-30,.video-js .vjs-skip-backward-30 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay-30:before,.video-js .vjs-skip-backward-30 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-5,.video-js .vjs-skip-forward-5 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-forward-5:before,.video-js .vjs-skip-forward-5 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-10,.video-js .vjs-skip-forward-10 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-forward-10:before,.video-js .vjs-skip-forward-10 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-30,.video-js .vjs-skip-forward-30 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-forward-30:before,.video-js .vjs-skip-forward-30 .vjs-icon-placeholder:before{content:""}.vjs-icon-audio,.video-js .vjs-audio-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio:before,.video-js .vjs-audio-button .vjs-icon-placeholder:before{content:""}.vjs-icon-next-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-next-item:before{content:""}.vjs-icon-previous-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-previous-item:before{content:""}.vjs-icon-shuffle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-shuffle:before{content:""}.vjs-icon-cast{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cast:before{content:""}.vjs-icon-picture-in-picture-enter,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-picture-in-picture-enter:before,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:""}.vjs-icon-picture-in-picture-exit,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-picture-in-picture-exit:before,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:""}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:""}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:""}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:""}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:""}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:""}.vjs-icon-audio-description,.video-js .vjs-descriptions-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio-description:before,.video-js .vjs-descriptions-button .vjs-icon-placeholder:before{content:""}.video-js{display:inline-block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;word-break:initial}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js[tabindex="-1"]{outline:none}.video-js *,.video-js *:before,.video-js *:after{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin:0}.video-js.vjs-fluid,.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-9-16,.video-js.vjs-1-1{width:100%;max-width:100%}.video-js.vjs-fluid:not(.vjs-audio-only-mode),.video-js.vjs-16-9:not(.vjs-audio-only-mode),.video-js.vjs-4-3:not(.vjs-audio-only-mode),.video-js.vjs-9-16:not(.vjs-audio-only-mode),.video-js.vjs-1-1:not(.vjs-audio-only-mode){height:0}.video-js.vjs-16-9:not(.vjs-audio-only-mode){padding-top:56.25%}.video-js.vjs-4-3:not(.vjs-audio-only-mode){padding-top:75%}.video-js.vjs-9-16:not(.vjs-audio-only-mode){padding-top:177.7777777778%}.video-js.vjs-1-1:not(.vjs-audio-only-mode){padding-top:100%}.video-js.vjs-fill:not(.vjs-audio-only-mode){width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js.vjs-audio-only-mode .vjs-tech{display:none}body.vjs-full-window,body.vjs-pip-window{padding:0;margin:0;height:100%}.vjs-full-window .video-js.vjs-fullscreen,body.vjs-pip-window .video-js{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen:not(.vjs-ios-native-fs),body.vjs-pip-window .video-js{width:100%!important;height:100%!important;padding-top:0!important;display:block}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-pip-container .vjs-pip-text{position:absolute;bottom:10%;font-size:2em;background-color:#000000b3;padding:.5em;text-align:center;width:100%}.vjs-layout-tiny.vjs-pip-container .vjs-pip-text,.vjs-layout-x-small.vjs-pip-container .vjs-pip-text,.vjs-layout-small.vjs-pip-container .vjs-pip-text{bottom:0;font-size:1.4em}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1!important;visibility:visible!important}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.63332em;width:3em;display:block;position:absolute;top:50%;left:50%;padding:0;margin-top:-.81666em;margin-left:-1.5em;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2b333f;background-color:#2b333fb3;border-radius:.3em;transition:all .4s}.vjs-big-play-button .vjs-svg-icon{width:1em;height:1em;position:absolute;top:50%;left:50%;line-height:1;transform:translate(-50%,-50%)}.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus{border-color:#fff;background-color:#73859f;background-color:#73859f80;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button,.vjs-error .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause:not(.vjs-seeking,.vjs-scrubbing,.vjs-error) .vjs-big-play-button{display:block}.video-js button{background:none;border:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.video-js.vjs-spatial-navigation-enabled .vjs-button:focus{outline:.0625em solid white;box-shadow:none}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0));overflow:auto}.video-js .vjs-modal-dialog>*{box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;font-family:Arial,Helvetica,sans-serif;overflow:auto}.vjs-menu .vjs-menu-content>*{box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{display:flex;justify-content:center;list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover,.js-focus-visible .vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:#73859f80}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover,.js-focus-visible .vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.vjs-menu li.vjs-selected .vjs-svg-icon,.vjs-menu li.vjs-selected:focus .vjs-svg-icon,.vjs-menu li.vjs-selected:hover .vjs-svg-icon,.js-focus-visible .vjs-menu li.vjs-selected:hover .vjs-svg-icon{fill:#000}.video-js .vjs-menu *:not(.vjs-selected):focus:not(:focus-visible),.js-focus-visible .vjs-menu *:not(.vjs-selected):focus:not(.focus-visible){background:none}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0em;margin-bottom:1.5em;border-top-color:#2b333fb3}.vjs-pip-window .vjs-menu-button-popup .vjs-menu{left:unset;right:1em}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:#2b333fb3;position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu,.vjs-menu-button-popup .vjs-menu.vjs-lock-showing{display:block}.video-js .vjs-menu-button-inline{transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline:hover,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline.vjs-slider-active{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;transition:all .4s}.vjs-menu-button-inline:hover .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline.vjs-slider-active .vjs-menu{display:block;opacity:1}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2b333f;background-color:#2b333fb3}.video-js.vjs-spatial-navigation-enabled .vjs-control-bar{gap:1px}.video-js:not(.vjs-controls-disabled,.vjs-using-native-controls,.vjs-error) .vjs-control-bar.vjs-lock-showing{display:flex!important}.vjs-has-started .vjs-control-bar,.vjs-audio-only-mode .vjs-control-bar{display:flex;visibility:visible;opacity:1;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;pointer-events:none;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar,.vjs-error .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,.vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible;pointer-events:auto}.video-js .vjs-control{position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;flex:none}.video-js .vjs-control.vjs-visible-text{width:auto;padding-left:1em;padding-right:1em}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.vjs-button>.vjs-icon-placeholder{display:block}.vjs-button>.vjs-svg-icon{display:inline-block}.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before,.video-js .vjs-control:focus{text-shadow:0em 0em 1em white}.video-js *:not(.vjs-visible-text)>.vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{cursor:pointer;flex:auto;display:flex;align-items:center;min-width:4em;touch-action:none}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{display:flex;align-items:center}.video-js .vjs-progress-holder{flex:auto;transition:all .2s;height:.3em}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder,.video-js.vjs-scrubbing.vjs-touch-enabled .vjs-progress-control .vjs-progress-holder{font-size:1.6666666667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:100%;margin:0;padding:0;width:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-.5em;line-height:.35em;z-index:1}.vjs-svg-icons-enabled .vjs-play-progress:before{content:none!important}.vjs-play-progress .vjs-svg-icon{position:absolute;top:-.35em;right:-.4em;width:.9em;height:.9em;pointer-events:none;line-height:.15em;z-index:1}.video-js .vjs-load-progress{background:rgba(114.9141509434,132.7028301887,159.3858490566,.5)}.video-js .vjs-load-progress div{background:rgba(114.9141509434,132.7028301887,159.3858490566,.75)}.video-js .vjs-time-tooltip{background-color:#fff;background-color:#fffc;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip,.video-js.vjs-scrubbing.vjs-touch-enabled .vjs-progress-control .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.video-js .vjs-progress-control:hover .vjs-mouse-display,.video-js.vjs-scrubbing.vjs-touch-enabled .vjs-progress-control .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,.video-js.vjs-touch-enabled:not(.vjs-scrubbing) .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:#000c}.video-js .vjs-slider{position:relative;cursor:pointer;padding:0;margin:0 .45em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:#73859f;background-color:#73859f80}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{text-shadow:0em 0em 1em white;box-shadow:0 0 1em #fff}.video-js.vjs-spatial-navigation-enabled .vjs-slider:focus{outline:.0625em solid white}.video-js .vjs-mute-control{cursor:pointer;flex:none}.video-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel{transition:width 1s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active{visibility:visible;opacity:1;position:relative;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{width:5em;height:3em;margin-right:0}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical{left:-3.5em;transition:left 0s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:10em;transition:width .1s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;width:3em;left:-3000em;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel{display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em;z-index:1}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em;z-index:1}.vjs-svg-icons-enabled .vjs-volume-level:before{content:none}.vjs-volume-level .vjs-svg-icon{position:absolute;width:.9em;height:.9em;pointer-events:none;z-index:1}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{line-height:.35em;right:-.5em}.vjs-slider-horizontal .vjs-volume-level .vjs-svg-icon{right:-.3em;transform:translateY(-50%)}.vjs-slider-vertical .vjs-volume-level .vjs-svg-icon{top:-.55em;transform:translate(-50%)}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{width:3em;height:8em;bottom:8em;background-color:#2b333f;background-color:#2b333fb3}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.video-js .vjs-volume-tooltip{background-color:#fff;background-color:#fffc;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-volume-control:hover .vjs-volume-tooltip,.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip{display:block;font-size:1em;visibility:visible}.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip,.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip{left:1em;top:-12px}.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip{font-size:1em}.video-js .vjs-volume-control .vjs-mouse-display{display:none;position:absolute;width:100%;height:1px;background-color:#000;z-index:1}.video-js .vjs-volume-horizontal .vjs-mouse-display{width:1px;height:100%}.video-js .vjs-volume-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.vjs-mouse-display .vjs-volume-tooltip{color:#fff;background-color:#000;background-color:#000c}.vjs-poster{display:inline-block;vertical-align:middle;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-has-started .vjs-poster,.vjs-using-native-controls .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster,.vjs-has-started.vjs-audio-poster-mode .vjs-poster,.vjs-pip-container.vjs-has-started .vjs-poster{display:block}.vjs-poster img{width:100%;height:100%;object-fit:contain}.video-js .vjs-live-control{display:flex;align-items:flex-start;flex:auto;font-size:1em;line-height:3em}.video-js:not(.vjs-live) .vjs-live-control,.video-js.vjs-liveui .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control{align-items:center;cursor:pointer;flex:none;display:inline-flex;height:100%;padding-left:.5em;padding-right:.5em;font-size:1em;line-height:3em;width:auto;min-width:4em}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{margin-right:.5em;color:#888}.vjs-svg-icons-enabled .vjs-seek-to-live-control{line-height:0}.vjs-seek-to-live-control .vjs-svg-icon{width:1em;height:1em;pointer-events:none;fill:#888}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-svg-icon{fill:red}.video-js .vjs-time-control{flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control,.vjs-live .vjs-time-divider,.video-js .vjs-current-time,.video-js .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-normalise-time-controls:not(.vjs-live) .vjs-time-control{display:flex}.video-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder{flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.vjs-error .vjs-text-track-display{display:none}.video-js.vjs-controls-disabled .vjs-text-track-display,.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{transform:translateY(-3em)}.video-js.vjs-controls-disabled video::-webkit-media-text-track-display,.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{transform:translateY(-1.5em)}.video-js.vjs-force-center-align-cues .vjs-text-track-cue{text-align:center!important;width:80%!important}@supports not (inset: 10px){.video-js .vjs-text-track-display>div{top:0;right:0;bottom:0;left:0}}.video-js .vjs-picture-in-picture-control{cursor:pointer;flex:none}.video-js.vjs-audio-only-mode .vjs-picture-in-picture-control,.vjs-pip-window .vjs-picture-in-picture-control{display:none}.video-js .vjs-fullscreen-control{cursor:pointer;flex:none}.video-js.vjs-audio-only-mode .vjs-fullscreen-control,.vjs-pip-window .vjs-fullscreen-control{display:none}.vjs-playback-rate>.vjs-menu-button,.vjs-playback-rate .vjs-playback-rate-value{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;font-size:1.5em;line-height:2;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);opacity:.85;text-align:left;border:.6em solid rgba(43,51,63,.7);box-sizing:border-box;background-clip:padding-box;width:5em;height:5em;border-radius:50%;visibility:hidden}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:flex;justify-content:center;align-items:center;animation:vjs-spinner-show 0s linear .3s forwards}.vjs-error .vjs-loading-spinner{display:none}.vjs-loading-spinner:before,.vjs-loading-spinner:after{content:"";position:absolute;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:before,.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after{animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;animation-delay:.44s}@keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-spin{to{transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}to{border-top-color:#73859f}}.video-js.vjs-audio-only-mode .vjs-captions-button{display:none}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-audio-only-mode .vjs-descriptions-button{display:none}.vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-svg-icon{width:1.5em;height:1.5em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:"";font-size:1.5em;line-height:inherit}.video-js.vjs-audio-only-mode .vjs-subs-caps-button{display:none}.video-js .vjs-audio-button+.vjs-menu .vjs-descriptions-menu-item .vjs-menu-item-text .vjs-icon-placeholder,.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-audio-button+.vjs-menu .vjs-descriptions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before,.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:" ";font-size:1.5em;line-height:inherit}.video-js.vjs-layout-small .vjs-current-time,.video-js.vjs-layout-small .vjs-time-divider,.video-js.vjs-layout-small .vjs-duration,.video-js.vjs-layout-small .vjs-remaining-time,.video-js.vjs-layout-small .vjs-playback-rate,.video-js.vjs-layout-small .vjs-volume-control,.video-js.vjs-layout-x-small .vjs-current-time,.video-js.vjs-layout-x-small .vjs-time-divider,.video-js.vjs-layout-x-small .vjs-duration,.video-js.vjs-layout-x-small .vjs-remaining-time,.video-js.vjs-layout-x-small .vjs-playback-rate,.video-js.vjs-layout-x-small .vjs-volume-control,.video-js.vjs-layout-tiny .vjs-current-time,.video-js.vjs-layout-tiny .vjs-time-divider,.video-js.vjs-layout-tiny .vjs-duration,.video-js.vjs-layout-tiny .vjs-remaining-time,.video-js.vjs-layout-tiny .vjs-playback-rate,.video-js.vjs-layout-tiny .vjs-volume-control{display:none}.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover{width:auto;width:initial}.video-js.vjs-layout-x-small .vjs-progress-control,.video-js.vjs-layout-tiny .vjs-progress-control{display:none}.video-js.vjs-layout-x-small .vjs-custom-control-spacer{flex:auto;display:block}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:#2b333fbf;color:#fff;height:70%}.vjs-spatial-navigation-enabled .vjs-modal-dialog.vjs-text-track-settings{height:80%}.vjs-error .vjs-text-track-settings{display:none}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-font,.vjs-text-track-settings .vjs-track-settings-controls{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports (display: grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:20px 24px 0}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-text-track-settings select{font-size:inherit}.vjs-track-setting>select{margin-right:1em;margin-bottom:.5em}.vjs-text-track-settings fieldset{margin:10px;border:none}.vjs-text-track-settings fieldset span{display:inline-block;padding:0 .6em .8em}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;font-weight:700;font-size:1.2em}.vjs-text-track-settings .vjs-label{margin:0 .5em .5em 0}.vjs-track-settings-controls button:focus,.vjs-track-settings-controls button:active{outline-style:solid;outline-width:medium;background-image:linear-gradient(0deg,#fff 88%,rgb(114.9141509434,132.7028301887,159.3858490566) 100%)}.vjs-track-settings-controls button:hover{color:#2b333fbf}.vjs-track-settings-controls button{background-color:#fff;background-image:linear-gradient(-180deg,#fff 88%,rgb(114.9141509434,132.7028301887,159.3858490566) 100%);color:#2b333f;cursor:pointer;border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}.vjs-title-bar{background:rgba(0,0,0,.9);background:linear-gradient(180deg,rgba(0,0,0,.9) 0%,rgba(0,0,0,.7) 60%,rgba(0,0,0,0) 100%);font-size:1.2em;line-height:1.5;transition:opacity .1s;padding:.666em 1.333em 4em;pointer-events:none;position:absolute;top:0;width:100%}.vjs-error .vjs-title-bar{display:none}.vjs-title-bar-title,.vjs-title-bar-description{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vjs-title-bar-title{font-weight:700;margin-bottom:.333em}.vjs-playing.vjs-user-inactive .vjs-title-bar{opacity:0;transition:opacity 1s}.video-js .vjs-skip-forward-5,.video-js .vjs-skip-forward-10,.video-js .vjs-skip-forward-30,.video-js .vjs-skip-backward-5,.video-js .vjs-skip-backward-10,.video-js .vjs-skip-backward-30{cursor:pointer}.video-js .vjs-transient-button{position:absolute;height:3em;display:flex;align-items:center;justify-content:center;background-color:#32323280;cursor:pointer;opacity:1;transition:opacity 1s}.video-js:not(.vjs-has-started) .vjs-transient-button{display:none}.video-js.not-hover .vjs-transient-button:not(.force-display),.video-js.vjs-user-inactive .vjs-transient-button:not(.force-display){opacity:0}.video-js .vjs-transient-button span{padding:0 .5em}.video-js .vjs-transient-button.vjs-left{left:1em}.video-js .vjs-transient-button.vjs-right{right:1em}.video-js .vjs-transient-button.vjs-top{top:1em}.video-js .vjs-transient-button.vjs-near-top{top:4em}.video-js .vjs-transient-button.vjs-bottom{bottom:4em}.video-js .vjs-transient-button:hover{background-color:#323232e6}@media print{.video-js>*:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{position:absolute;top:0;left:0;width:100%;height:100%;border:none;z-index:-1000}.js-focus-visible .video-js *:focus:not(.focus-visible){outline:none}.video-js *:focus:not(:focus-visible){outline:none}.video-player-container{max-width:800px;margin:0 auto}.video-wrapper{position:relative;width:100%;padding-bottom:56.25%;background:#000;border-radius:8px;overflow:hidden;max-height:450px}.video-wrapper video{position:absolute;top:0;left:0;width:100%;height:100%}.video-js{width:100%!important;height:100%!important}.video-controls{display:flex;align-items:center;justify-content:space-between;margin-top:1rem;padding:1rem;background:#f5f5f5;border-radius:8px}.btn-start-stream,.btn-stop-stream{padding:.75rem 2rem;border:none;border-radius:6px;font-size:1rem;cursor:pointer;transition:all .2s;color:#fff}.btn-start-stream{background:linear-gradient(135deg,#4CAF50 0%,#45a049 100%)}.btn-start-stream:hover{transform:translateY(-2px);box-shadow:0 4px 12px #4caf5066}.btn-stop-stream{background:linear-gradient(135deg,#f44336 0%,#d32f2f 100%)}.btn-stop-stream:hover{transform:translateY(-2px);box-shadow:0 4px 12px #f4433666}.streaming-indicator{display:flex;align-items:center;gap:.5rem;color:#f44336;font-weight:500}.pulse{width:12px;height:12px;background:#f44336;border-radius:50%;animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.2)}}.error-message{margin-top:1rem;padding:1rem;background:#ffebee;color:#c62828;border-radius:6px;border-left:4px solid #f44336}.mjpeg-player-container{max-width:800px;margin:0 auto}.mjpeg-wrapper{position:relative;width:100%;background:#000;border-radius:8px;overflow:hidden;min-height:450px;display:flex;align-items:center;justify-content:center}.mjpeg-image{width:100%;height:auto;display:block}.mjpeg-loading{display:flex;flex-direction:column;align-items:center;gap:1rem;color:#fff}.spinner{width:50px;height:50px;border:4px solid rgba(255,255,255,.3);border-top:4px solid white;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.mjpeg-error{padding:2rem;color:#ff6b6b;text-align:center}.mjpeg-info{display:flex;gap:.5rem;margin-top:.5rem;align-items:center}.badge{padding:.25rem .75rem;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;border-radius:12px;font-size:.875rem;font-weight:500}.badge-light{padding:.25rem .75rem;background:#e9ecef;color:#495057;border-radius:12px;font-size:.875rem}.badge-success{padding:.25rem .75rem;background:#28a745;color:#fff;border-radius:12px;font-size:.875rem;font-weight:600;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.7}}.display-control-container{margin-top:2rem;padding:1.5rem;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:12px;color:#fff}.display-header h3{margin:0 0 .5rem;font-size:1.25rem}.display-subtitle{margin:0;opacity:.9;font-size:.875rem}.display-warning{text-align:center;padding:1rem;background:rgba(255,255,255,.1);border-radius:8px}.display-warning small{display:block;margin-top:.5rem;opacity:.8}.display-config{margin-top:1rem;display:flex;flex-direction:column;gap:1rem}.output-selector{display:flex;flex-direction:column;gap:.5rem}.output-selector label{font-weight:500}.output-selector select{padding:.75rem;border:2px solid rgba(255,255,255,.3);border-radius:8px;background:rgba(255,255,255,.1);color:#fff;font-size:1rem;cursor:pointer;transition:all .2s}.output-selector select:hover{border-color:#ffffff80;background:rgba(255,255,255,.15)}.output-selector select option{background:#764ba2;color:#fff}.output-hint{display:block;margin-top:.5rem;opacity:.85;font-size:.875rem;line-height:1.4}.btn-display-start,.btn-display-stop{padding:1rem 2rem;border:none;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s;color:#667eea}.btn-display-start{background:white}.btn-display-start:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 16px #0003}.btn-display-stop{background:#ff6b6b;color:#fff}.btn-display-stop:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 16px #0003;background:#ff5252}.btn-display-start:disabled,.btn-display-stop:disabled{opacity:.6;cursor:not-allowed}.display-active{margin-top:1rem;display:flex;flex-direction:column;gap:1rem}.active-indicator{display:flex;align-items:center;gap:.75rem;padding:1rem;background:rgba(255,255,255,.15);border-radius:8px;font-weight:500}.pulse-dot{width:16px;height:16px;background:#4ade80;border-radius:50%;animation:pulse-dot 1.5s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.3)}}.display-error{margin-top:1rem;padding:.75rem;background:rgba(255,107,107,.2);border:1px solid rgba(255,107,107,.5);border-radius:6px;text-align:center}.display-info{margin-top:1rem;padding:.75rem;background:rgba(255,255,255,.1);border-radius:6px}.display-info small{display:block;line-height:1.5;opacity:.9}.camera-view-container{padding:2rem;max-width:1600px;margin:0 auto}.camera-view-header{margin-bottom:2rem}.btn-back{padding:.5rem 1rem;background:#e0e0e0;border:none;border-radius:6px;cursor:pointer;margin-bottom:1rem;transition:background .2s}.btn-back:hover{background:#d0d0d0}.camera-view-header h1{margin:.5rem 0;color:#333}.location{color:#666;font-size:1.1rem;margin:0}.camera-view-content{display:grid;grid-template-columns:1fr 350px;gap:2rem}@media (max-width: 1024px){.camera-view-content{grid-template-columns:1fr}}.stream-mode-selector{display:flex;gap:.5rem;margin-bottom:1rem;padding:.5rem;background:#f8f9fa;border-radius:8px}.mode-btn{flex:1;padding:.75rem 1rem;border:2px solid transparent;border-radius:6px;background:white;color:#666;font-size:.95rem;font-weight:500;cursor:pointer;transition:all .2s}.mode-btn:hover{background:#f0f0f0}.mode-btn.active{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;border-color:transparent;transform:translateY(-2px);box-shadow:0 4px 12px #667eea4d}.video-section{background:white;border-radius:12px;padding:1.5rem;box-shadow:0 2px 8px #0000001a}.camera-details{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid #f0f0f0}.camera-details h3{margin:0 0 1rem;color:#333}.detail-row{display:flex;justify-content:space-between;margin-bottom:.75rem;font-size:.95rem}.detail-row .label{font-weight:500;color:#666}.detail-row .value{color:#333}.ptz-section{background:white;border-radius:12px;padding:1.5rem;box-shadow:0 2px 8px #0000001a}.ptz-section h3{margin:0 0 1.5rem;color:#333}.ptz-controls{display:flex;flex-direction:column;gap:1.5rem}.ptz-movement{display:grid;grid-template-rows:auto auto auto;gap:.5rem;justify-items:center}.ptz-middle-row{display:grid;grid-template-columns:auto auto auto;gap:.5rem;align-items:center}.ptz-center{width:60px;height:60px;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:50%;opacity:.3}.ptz-btn{width:60px;height:60px;border:none;border-radius:8px;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;font-size:1.5rem;cursor:pointer;transition:all .2s;box-shadow:0 2px 8px #667eea4d}.ptz-btn:active{transform:scale(.95);box-shadow:0 1px 4px #667eea80}.ptz-btn:hover{background:linear-gradient(135deg,#764ba2 0%,#667eea 100%);box-shadow:0 4px 12px #667eea66}.ptz-zoom{display:flex;gap:.5rem;justify-content:center}.ptz-zoom-in,.ptz-zoom-out{width:auto;padding:0 1.5rem}.ptz-presets{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid #f0f0f0}.ptz-presets h4{margin:0 0 1rem;color:#333}.preset-buttons{display:flex;flex-direction:column;gap:.5rem}.btn-preset{padding:.75rem 1rem;background:linear-gradient(135deg,#f093fb 0%,#f5576c 100%);color:#fff;border:none;border-radius:6px;cursor:pointer;transition:all .2s;text-align:left}.btn-preset:hover{transform:translate(4px);box-shadow:0 4px 12px #f5576c4d}.react-flow{direction:ltr}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;-webkit-animation:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:-webkit-grab;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid white;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:rgba(255,255,255,.5);padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@-webkit-keyframes dashdraw{0%{stroke-dashoffset:10}}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border-width:1px;border-style:solid;border-color:#1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:rgba(0,89,220,.08);border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{border:none;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__minimap svg{display:block}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:#3367d9;border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.modbus-test-page{padding:24px;max-width:1400px;margin:0 auto}.modbus-test-hero{margin-bottom:24px;padding:24px;border-radius:20px;background:linear-gradient(135deg,rgba(37,99,235,.14) 0%,rgba(29,78,216,.06) 100%);border:1px solid rgba(37,99,235,.18)}.modbus-test-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;margin-bottom:14px;border-radius:8px;border:1px solid var(--border-color);background:var(--surface);color:var(--text-primary);cursor:pointer}.modbus-test-heading{display:flex;align-items:center;gap:14px}.modbus-test-icon{width:56px;height:56px;border-radius:18px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;flex-shrink:0}.modbus-test-heading h1{margin:0;font-size:1.8rem;font-weight:900;color:var(--text-primary)}.modbus-test-heading p{margin:4px 0 0;color:var(--text-secondary)}.modbus-section{background:var(--bg-secondary);border-radius:16px;border:1px solid var(--border-color);padding:20px;margin-bottom:24px}.modbus-section h2{margin:0 0 10px;font-size:1.2rem;color:var(--text-primary)}.modbus-section p{margin:0 0 18px;color:var(--text-secondary)}.modbus-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.modbus-field{display:flex;flex-direction:column;gap:8px}.modbus-field label{font-size:12px;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.modbus-field input,.modbus-field select{width:100%;padding:10px 12px;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-primary);color:var(--text-primary);font-size:14px}.modbus-field input:focus,.modbus-field select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #3b82f61f}.modbus-button-group{display:flex;gap:8px;flex-wrap:wrap}.modbus-button-group button,.modbus-primary,.modbus-secondary{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 16px;border-radius:8px;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-primary);cursor:pointer;font-weight:700;transition:all .2s}.modbus-primary{background:var(--primary);border-color:var(--primary);color:#fff}.modbus-primary:hover:not(:disabled){filter:brightness(1.05)}.modbus-secondary:hover:not(:disabled),.modbus-button-group button:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.modbus-active{background:rgba(59,130,246,.14)!important;border-color:#3b82f673!important;color:var(--primary)!important}.modbus-primary:disabled,.modbus-secondary:disabled,.modbus-button-group button:disabled{opacity:.6;cursor:not-allowed}.modbus-message{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:10px;margin-bottom:20px}.modbus-message.success{background:rgba(16,185,129,.14);color:#10b981;border:1px solid rgba(16,185,129,.28)}.modbus-message.error{background:rgba(239,68,68,.14);color:#ef4444;border:1px solid rgba(239,68,68,.28)}.modbus-message.info{background:rgba(59,130,246,.14);color:#60a5fa;border:1px solid rgba(59,130,246,.28)}.modbus-message button{margin-left:auto;background:transparent;border:none;color:inherit;cursor:pointer;font-size:18px}.modbus-status-box{margin-top:16px;padding:16px;border-radius:12px;border:1px solid var(--border-color);background:var(--bg-primary)}.modbus-status-box.success{border-color:#10b98166;background:rgba(16,185,129,.08)}.modbus-status-box.error{border-color:#ef444466;background:rgba(239,68,68,.08)}.modbus-debug{display:grid;gap:8px;font-size:14px}.modbus-debug strong{color:var(--text-primary)}.modbus-words-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(400px,1fr));gap:16px}.modbus-word-card{background:var(--bg-primary);border:2px solid var(--border-color);border-radius:12px;padding:16px}.modbus-word-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.modbus-word-address{font-weight:700;color:var(--text-primary)}.modbus-word-value,.modbus-word-value-input{font-family:Courier New,monospace;font-weight:700}.modbus-word-value{color:var(--primary);font-size:18px}.modbus-word-value-input{width:110px;padding:7px 8px;border:1px solid var(--border-color);border-radius:6px;background:var(--bg-secondary);color:var(--text-primary);font-size:16px;text-align:center}.modbus-bits-row{display:grid;grid-template-columns:repeat(16,1fr);gap:3px}.modbus-bit-square{aspect-ratio:1;min-height:22px;border:1px solid var(--border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;background:var(--bg-secondary);color:var(--text-secondary);transition:all .18s}.modbus-bit-square.on{background:#10b981;border-color:#059669;color:#fff;box-shadow:0 0 0 1px #ffffff0f inset,0 0 14px #10b98138}.modbus-bit-square.writable{cursor:pointer}.modbus-bit-square.writable:hover{transform:scale(1.08)}.modbus-bits-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(86px,1fr));gap:12px}.modbus-bit-card{aspect-ratio:1;border:3px solid var(--border-color);border-radius:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:12px;background:var(--bg-primary);color:var(--text-secondary);transition:all .2s}.modbus-bit-card.on{background:#10b981;border-color:#059669;color:#fff;box-shadow:0 0 18px #10b98133}.modbus-bit-card.writable{cursor:pointer}.modbus-bit-card.writable:hover{transform:scale(1.04)}.modbus-bit-address{font-size:11px;font-weight:700;opacity:.9}.modbus-bit-status{font-size:24px;font-weight:800;font-family:Courier New,monospace}@media (max-width: 900px){.modbus-words-grid{grid-template-columns:1fr}}@media (max-width: 760px){.modbus-test-page{padding:16px}.modbus-grid{grid-template-columns:1fr}.modbus-bits-grid{grid-template-columns:repeat(auto-fill,minmax(68px,1fr))}}.canvas-editor{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:column;background:#18181b;color:#fff;overflow:hidden;z-index:1001}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:#27272a;border-bottom:1px solid #3f3f46;z-index:100}.canvas-toolbar-left h3{margin:0;font-size:1rem;font-weight:600}.canvas-toolbar-center{display:flex;align-items:center;gap:.5rem}.canvas-toolbar-center button{padding:.5rem;background:#3f3f46;border:none;border-radius:6px;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}.canvas-toolbar-center button:hover{background:#52525b}.zoom-display{font-size:.9rem;font-weight:600;min-width:60px;text-align:center;color:#a1a1aa}.canvas-toolbar-right{display:flex;gap:.5rem}.btn-save{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem 1.2rem;background:#10b981;color:#fff;border:none;border-radius:6px;cursor:pointer;font-weight:600;transition:all .2s}.btn-save:hover{background:#059669}.btn-save:disabled{opacity:.6;cursor:not-allowed}.canvas-toolbar-right .btn-preview{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem 1.2rem;background:#6366f1;color:#fff;border:none;border-radius:6px;cursor:pointer;font-weight:600;transition:all .2s}.canvas-toolbar-right .btn-preview:hover{background:#4f46e5}.canvas-toolbar-right .btn-preview:disabled{opacity:.6;cursor:not-allowed}.btn-cancel{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem 1.2rem;background:#3f3f46;color:#fff;border:none;border-radius:6px;cursor:pointer;transition:all .2s}.btn-cancel:hover{background:#52525b}.canvas-main{display:flex;flex:1;overflow:hidden}.canvas-sidebar{background:#27272a;border-right:1px solid #3f3f46;overflow-y:auto;padding:1rem}.canvas-sidebar-left{width:280px}.canvas-sidebar-right{width:320px;border-right:none;border-left:1px solid #3f3f46}.canvas-sidebar h4{margin:0 0 .75rem;font-size:.85rem;text-transform:uppercase;color:#a1a1aa;font-weight:600;letter-spacing:.5px}.sidebar-title{padding:0 0 .5rem;border-bottom:1px solid #3f3f46;margin-bottom:.5rem!important}.sidebar-accordion{display:flex;flex-direction:column;gap:2px}.accordion-section{border-radius:8px;overflow:hidden;background:rgba(255,255,255,.03)}.accordion-section.accordion-open{background:rgba(255,255,255,.05)}.accordion-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.65rem .75rem;background:none;border:none;color:#d4d4d8;cursor:pointer;font-size:.85rem;font-weight:600;transition:background .15s,color .15s}.accordion-header:hover{background:rgba(255,255,255,.06);color:#fff}.accordion-header-left{display:flex;align-items:center;gap:.5rem}.accordion-count{font-size:.7rem;font-weight:500;background:rgba(255,255,255,.1);color:#a1a1aa;padding:.1rem .4rem;border-radius:10px}.accordion-chevron{color:#71717a;transition:transform .2s ease}.accordion-chevron-open{transform:rotate(180deg)}.accordion-content{padding:.25rem .75rem .75rem}.canvas-widget-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.4rem}.canvas-widget-btn{display:flex;flex-direction:column;align-items:center;gap:.4rem;padding:.7rem .4rem;background:#3f3f46;border:2px solid transparent;border-radius:8px;cursor:pointer;transition:all .2s;color:#fff;font-size:.72rem}.canvas-widget-btn:hover{background:#52525b;transform:translateY(-2px)}.canvas-widget-btn span{font-weight:500}.canvas-bg-picker{display:flex;gap:.5rem;align-items:center}.canvas-bg-picker input[type=color]{width:50px;height:40px;border:2px solid #3f3f46;border-radius:6px;cursor:pointer;background:transparent}.canvas-bg-picker input[type=text]{flex:1;padding:.6rem;background:#3f3f46;border:1px solid #52525b;border-radius:6px;color:#fff;font-family:Courier New,monospace}.canvas-container{flex:1;background:#18181b;overflow:hidden;display:flex;align-items:center;justify-content:center;padding:0;min-height:0}.canvas-workspace{position:relative;box-shadow:0 0 0 1px #3f3f46,0 20px 50px #00000080;cursor:default;overflow:hidden;transition:box-shadow .2s;flex-shrink:0;box-sizing:border-box}.canvas-workspace-selected{box-shadow:0 0 0 3px #3b82f6,0 20px 50px #3b82f64d;animation:pulse-border 2s ease-in-out infinite}@keyframes pulse-border{0%,to{box-shadow:0 0 0 3px #3b82f6,0 20px 50px #3b82f64d}50%{box-shadow:0 0 0 3px #2563eb,0 20px 50px #2563eb80}}.canvas-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#52525b;pointer-events:none}.canvas-empty p{margin-top:1rem;font-size:1.1rem}.canvas-element{border:2px solid transparent;transition:border-color .2s;cursor:move;box-sizing:border-box}.canvas-element:hover{border-color:#3b82f680}.canvas-element-selected{border-color:#3b82f6!important;box-shadow:0 0 0 1px #3b82f6}.canvas-element.resizing{opacity:.9;box-shadow:0 4px 12px #3b82f64d}.canvas-props-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:.75rem;border-bottom:1px solid #3f3f46;margin-bottom:1rem}.canvas-props-header h4{margin:0;font-size:1rem;color:#fff;text-transform:none}.canvas-props-actions{display:flex;gap:.25rem}.canvas-props-actions button{padding:.5rem;background:#3f3f46;border:none;border-radius:4px;color:#fff;cursor:pointer;display:flex;align-items:center;transition:background .2s}.canvas-props-actions button:hover{background:#52525b}.canvas-props-body{display:flex;flex-direction:column;gap:1.5rem}.canvas-props-section{display:flex;flex-direction:column;gap:.75rem}.canvas-props-section h5{margin:0;font-size:.8rem;text-transform:uppercase;color:#a1a1aa;font-weight:600;letter-spacing:.5px}.canvas-props-section label{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:#d4d4d8}.canvas-props-section input,.canvas-props-section select,.canvas-props-section textarea{padding:.6rem;background:#3f3f46;border:1px solid #52525b;border-radius:6px;color:#fff;font-family:inherit;font-size:.9rem}.canvas-props-section input[type=number]{width:100%}.canvas-props-section input[type=color]{height:40px;cursor:pointer}.canvas-props-section input[type=range]{width:100%}.canvas-props-section textarea{resize:vertical;min-height:80px}.canvas-props-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem}.canvas-layer-controls{display:flex;flex-direction:column;gap:.5rem}.canvas-layer-controls button{display:flex;align-items:center;gap:.5rem;padding:.6rem;background:#3f3f46;border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:.85rem;transition:background .2s}.canvas-layer-controls button:hover{background:#52525b}.canvas-props-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;color:#52525b}.canvas-props-empty p{margin-top:1rem;font-size:.95rem}.element-text,.element-menu,.element-weather,.element-reminder{width:100%;height:100%;pointer-events:none}.element-menu ul{list-style:none;padding:0;margin:0}.react-draggable{cursor:move}.canvas-element-selected .react-resizable-handle{position:absolute;width:12px;height:12px;background:#3b82f6;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px #0003;z-index:10;opacity:1;transition:all .2s}.canvas-element-selected .react-resizable-handle:hover{background:#2563eb;transform:scale(1.2);box-shadow:0 4px 8px #0000004d}.canvas-element-selected .react-resizable-handle-se{bottom:-6px;right:-6px;cursor:se-resize}.canvas-element-selected .react-resizable-handle-sw{bottom:-6px;left:-6px;cursor:sw-resize}.canvas-element-selected .react-resizable-handle-ne{top:-6px;right:-6px;cursor:ne-resize}.canvas-element-selected .react-resizable-handle-nw{top:-6px;left:-6px;cursor:nw-resize}.canvas-element-selected .react-resizable-handle-n{top:-6px;left:50%;transform:translate(-50%);cursor:n-resize}.canvas-element-selected .react-resizable-handle-s{bottom:-6px;left:50%;transform:translate(-50%);cursor:s-resize}.canvas-element-selected .react-resizable-handle-e{right:-6px;top:50%;transform:translateY(-50%);cursor:e-resize}.canvas-element-selected .react-resizable-handle-w{left:-6px;top:50%;transform:translateY(-50%);cursor:w-resize}.canvas-element:not(.canvas-element-selected) .react-resizable-handle{display:none}.canvas-sidebar::-webkit-scrollbar,.canvas-container::-webkit-scrollbar{width:8px;height:8px}.canvas-sidebar::-webkit-scrollbar-track,.canvas-container::-webkit-scrollbar-track{background:#18181b}.canvas-sidebar::-webkit-scrollbar-thumb,.canvas-container::-webkit-scrollbar-thumb{background:#3f3f46;border-radius:4px}.canvas-sidebar::-webkit-scrollbar-thumb:hover,.canvas-container::-webkit-scrollbar-thumb:hover{background:#52525b}.context-menu{min-width:220px;background:#27272a;border:1px solid #3f3f46;border-radius:8px;box-shadow:0 10px 40px #00000080;padding:.5rem;animation:contextMenuFadeIn .15s ease-out}@keyframes contextMenuFadeIn{0%{opacity:0;transform:scale(.95) translateY(-5px)}to{opacity:1;transform:scale(1) translateY(0)}}.context-menu-item{display:flex;align-items:center;gap:.75rem;width:100%;padding:.6rem .75rem;background:transparent;border:none;border-radius:6px;color:#d4d4d8;cursor:pointer;transition:all .15s;font-size:.9rem;text-align:left}.context-menu-item:hover{background:#3f3f46;color:#fff}.context-menu-item.danger{color:#fca5a5}.context-menu-item.danger:hover{background:rgba(239,68,68,.15);color:#ef4444}.context-menu-label{flex:1}.context-menu-shortcut{font-size:.75rem;color:#71717a;font-family:Courier New,monospace}.context-menu-separator{height:1px;background:#3f3f46;margin:.5rem 0}@media (max-width: 1200px){.canvas-sidebar-left{width:240px}.canvas-sidebar-right{width:280px}.canvas-widget-grid{grid-template-columns:1fr}}@media (max-width: 768px){.canvas-main{flex-direction:column}.canvas-sidebar{width:100%!important;max-height:200px}.canvas-container{padding:1rem}}.menu-course-block{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:.6rem;margin-bottom:.5rem}.menu-course-header{display:flex;align-items:center;gap:.4rem;margin-bottom:.5rem;padding-bottom:.4rem;border-bottom:1px solid rgba(255,255,255,.06)}.menu-course-name{flex:1;padding:.35rem .5rem;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);border-radius:5px;color:#d97706;font-size:.8rem;font-weight:700;text-transform:uppercase}.menu-course-name:focus{outline:none;border-color:#d97706}.menu-item-block{margin-bottom:.35rem;padding-bottom:.35rem;border-bottom:1px solid rgba(255,255,255,.04)}.menu-item-block:last-of-type{border-bottom:none;margin-bottom:0;padding-bottom:0}.menu-item-row{display:flex;align-items:center;gap:.3rem;margin-bottom:.2rem}.menu-item-dish{flex:1;padding:.3rem .45rem;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:4px;color:#e4e4e7;font-size:.78rem}.menu-item-dish:focus{outline:none;border-color:#3b82f6}.menu-item-price{width:45px;padding:.3rem .35rem;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:4px;color:#d97706;font-size:.78rem;text-align:center;font-weight:600}.menu-item-price:focus{outline:none;border-color:#d97706}.menu-item-desc{width:calc(100% - 32px);margin-left:32px;padding:.2rem .45rem;background:transparent;border:1px dashed rgba(255,255,255,.08);border-radius:4px;color:#71717a;font-size:.7rem;font-style:italic;box-sizing:border-box}.menu-item-desc:focus{outline:none;border-color:#fff3;color:#a1a1aa}.menu-btn-small{display:flex;align-items:center;justify-content:center;width:22px;height:22px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:4px;color:#71717a;cursor:pointer;font-size:.7rem;flex-shrink:0;transition:all .15s}.menu-btn-danger:hover{background:rgba(239,68,68,.2);border-color:#ef4444;color:#ef4444}.menu-btn-add-item{width:100%;padding:.25rem;background:transparent;border:1px dashed rgba(255,255,255,.12);border-radius:4px;color:#3b82f6;font-size:.72rem;font-weight:600;cursor:pointer;margin-top:.3rem;transition:background .15s}.menu-btn-add-item:hover{background:rgba(59,130,246,.1)}.menu-btn-add-course{width:100%;padding:.4rem;background:rgba(217,119,6,.1);border:1.5px dashed rgba(217,119,6,.4);border-radius:6px;color:#d97706;font-size:.78rem;font-weight:600;cursor:pointer;transition:background .15s}.menu-btn-add-course:hover{background:rgba(217,119,6,.2)}.emoji-picker-inline{position:relative;flex-shrink:0}.emoji-picker-trigger{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:5px;font-size:.85rem;cursor:pointer;transition:all .15s}.emoji-picker-trigger:hover{background:rgba(255,255,255,.12);border-color:#fff3}.emoji-picker-popup{position:absolute;top:100%;left:0;z-index:100;background:#1e1e2e;border:1px solid rgba(255,255,255,.15);border-radius:8px;padding:.4rem;display:grid;grid-template-columns:repeat(6,1fr);gap:.15rem;min-width:180px;box-shadow:0 8px 24px #00000080}.emoji-opt{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:4px;font-size:.85rem;cursor:pointer;transition:all .1s}.emoji-opt:hover{background:rgba(255,255,255,.1)}.emoji-opt.active{background:rgba(217,119,6,.2);border-color:#d97706}.city-autocomplete{position:relative;width:100%}.city-input-wrap{position:relative;display:flex;align-items:center}.city-input{width:100%;padding:.45rem .6rem;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.15);border-radius:6px;color:#e4e4e7;font-size:.85rem}.city-input:focus{outline:none;border-color:#3b82f6}.city-spinner{position:absolute;right:8px;color:#71717a;font-size:.75rem;animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:.3}50%{opacity:1}}.city-resolved{display:flex;align-items:center;gap:.3rem;margin-top:.3rem;padding:.25rem .5rem;background:rgba(16,185,129,.12);border:1px solid rgba(16,185,129,.3);border-radius:5px;font-size:.7rem;color:#34d399}.city-resolved-dot{font-weight:700;font-size:.8rem}.city-not-found{display:flex;align-items:center;gap:.3rem;margin-top:.3rem;padding:.25rem .5rem;background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.3);border-radius:5px;font-size:.7rem;color:#f87171}.city-not-found-dot{font-weight:700;font-size:.8rem}.city-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#1e1e2e;border:1px solid rgba(255,255,255,.15);border-radius:8px;box-shadow:0 8px 24px #00000080;z-index:100;overflow:hidden;max-height:240px;overflow-y:auto}.city-option{display:flex;flex-direction:column;align-items:flex-start;width:100%;padding:.5rem .7rem;background:transparent;border:none;border-bottom:1px solid rgba(255,255,255,.05);cursor:pointer;transition:background .1s;text-align:left}.city-option:last-child{border-bottom:none}.city-option:hover{background:rgba(59,130,246,.15)}.city-option-name{font-size:.85rem;font-weight:600;color:#e4e4e7}.city-option-detail{font-size:.7rem;color:#71717a;margin-top:1px}.font-picker{position:relative;width:100%}.font-picker-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;padding:.45rem .6rem;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.15);border-radius:6px;color:#e4e4e7;font-size:.85rem;cursor:pointer;transition:border-color .15s}.font-picker-trigger:hover{border-color:#3b82f6}.font-picker-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.font-picker-chevron-open{transform:rotate(180deg)}.font-picker-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:#1e1e2e;border:1px solid rgba(255,255,255,.15);border-radius:8px;box-shadow:0 8px 24px #00000080;z-index:100;overflow:hidden;display:flex;flex-direction:column;max-height:350px}.font-picker-search{padding:.55rem .7rem;background:rgba(255,255,255,.05);border:none;border-bottom:1px solid rgba(255,255,255,.1);color:#e4e4e7;font-size:.82rem;outline:none}.font-picker-search::placeholder{color:#71717a}.font-picker-list{overflow-y:auto;flex:1}.font-picker-group{padding:.4rem .7rem .2rem;font-size:.65rem;font-weight:700;color:#a78bfa;text-transform:uppercase;letter-spacing:.05em;position:sticky;top:0;background:#1e1e2e}.font-picker-item{display:block;width:100%;text-align:left;padding:.45rem .7rem;background:transparent;border:none;color:#d4d4d8;font-size:.9rem;cursor:pointer;transition:background .1s}.font-picker-item:hover{background:rgba(59,130,246,.15);color:#fff}.font-picker-item.active{background:rgba(59,130,246,.25);color:#60a5fa}@keyframes slideIn{0%{transform:translate(400px);opacity:0}to{transform:translate(0);opacity:1}}.pages-manager{width:100%;min-height:calc(100vh - 4rem);display:flex;flex-direction:column}.pages-manager-loading{display:flex;align-items:center;justify-content:center;height:100vh;font-size:1.2rem;color:#fff}.pages-manager-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1.25rem;color:var(--text-primary, #1a1a2e)}.pages-manager-header h2{margin:0 0 .25rem;font-size:1.4rem;font-weight:700}.pages-manager-header p{margin:0;color:var(--text-secondary, #64748b);font-size:.85rem}.pages-manager-actions{display:flex;gap:.5rem;flex-shrink:0}.btn-play,.btn-stop,.btn-save-all{display:flex;align-items:center;gap:.4rem;padding:.5rem 1rem;color:#fff;border:none;border-radius:8px;font-size:.82rem;font-weight:600;cursor:pointer;transition:transform .2s,box-shadow .2s}.btn-play{background:linear-gradient(135deg,#10b981 0%,#059669 100%)}.btn-stop{background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%)}.btn-save-all{background:linear-gradient(135deg,#3b82f6 0%,#2563eb 100%)}.btn-play:hover{box-shadow:0 4px 14px #10b98166}.btn-stop:hover{box-shadow:0 4px 14px #ef444466}.btn-save-all:hover{box-shadow:0 4px 14px #3b82f666}.btn-play:disabled,.btn-stop:disabled,.btn-save-all:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-close{display:flex;align-items:center;gap:.4rem;padding:.5rem 1rem;background:var(--bg-secondary, #f1f5f9);color:var(--text-secondary, #64748b);border:1px solid var(--border-color, #e2e8f0);border-radius:8px;font-size:.82rem;font-weight:600;cursor:pointer;transition:background .2s}.btn-close:hover{background:var(--bg-primary, #e2e8f0);color:var(--text-primary, #1e293b)}.pages-manager-info{display:flex;gap:.75rem;margin-bottom:1.25rem}.info-card{flex:1;display:flex;align-items:center;gap:.6rem;padding:.7rem .9rem;background:var(--bg-secondary, #fff);border:1px solid var(--border-color, #e2e8f0);border-radius:10px;color:var(--text-primary, #1a1a2e)}.info-card svg{color:#3b82f6;flex-shrink:0}.info-card div{display:flex;flex-direction:column;gap:.1rem}.info-card strong{font-size:.72rem;color:var(--text-secondary, #64748b);text-transform:uppercase;letter-spacing:.03em}.info-card span{font-size:1.1rem;font-weight:700;color:#10b981}.info-card-playing{border-color:#10b98180!important;background:rgba(16,185,129,.1)!important;animation:pulse-playing 2s infinite}.info-card-playing svg{color:#10b981!important}@keyframes pulse-playing{0%,to{border-color:#10b9814d}50%{border-color:#10b981b3}}.pages-list{display:flex;flex-direction:column;gap:.6rem}.page-row{display:flex;align-items:center;gap:.9rem;padding:.75rem 1rem;background:var(--bg-secondary, #fff);border:1px solid var(--border-color, #e2e8f0);border-radius:12px;transition:border-color .2s,box-shadow .2s}.page-row:hover{border-color:#3b82f666;box-shadow:0 2px 12px #3b82f61f}.page-row.dragging{opacity:.5}.page-row-drag{color:var(--text-secondary, #94a3b8);cursor:grab;padding:.25rem;flex-shrink:0}.page-row-drag:active{cursor:grabbing}.page-row-thumb{position:relative;width:110px;height:62px;border-radius:8px;flex-shrink:0;display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px solid var(--border-color, #e2e8f0)}.page-row-num{font-size:1.2rem;font-weight:800;color:#ffffff59;text-shadow:0 1px 4px rgba(0,0,0,.5)}.page-row-badge{position:absolute;top:3px;right:3px;padding:2px 6px;background:rgba(59,130,246,.85);color:#fff;border-radius:4px;font-size:.65rem;font-weight:700;line-height:1.3}.page-row-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.3rem}.page-row-name{background:transparent;border:none;color:var(--text-primary, #1e293b);font-size:.95rem;font-weight:600;padding:.2rem 0;width:100%}.page-row-name:focus{outline:none;border-bottom:1px solid #3b82f6}.page-row-meta{display:flex;gap:.9rem;font-size:.78rem;color:var(--text-secondary, #64748b)}.page-row-meta span{display:flex;align-items:center;gap:.25rem}.page-row-actions{display:flex;gap:.4rem;flex-shrink:0}.btn-row{display:flex;align-items:center;justify-content:center;gap:.35rem;height:34px;padding:0 .7rem;background:var(--bg-primary, #f8fafc);border:1px solid var(--border-color, #e2e8f0);border-radius:7px;color:var(--text-secondary, #64748b);cursor:pointer;transition:all .15s;font-size:.75rem;font-weight:500}.btn-row:hover{background:var(--bg-secondary, #e2e8f0);color:var(--text-primary, #1e293b);border-color:var(--border-color, #cbd5e1)}.btn-row-primary{background:rgba(59,130,246,.15);border-color:#3b82f659;color:#60a5fa}.btn-row-primary:hover{background:rgba(59,130,246,.3);color:#fff}.btn-row-danger:hover{background:rgba(239,68,68,.2);border-color:#ef4444;color:#ef4444}.page-row-add{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.85rem;background:rgba(59,130,246,.06);border:1.5px dashed rgba(59,130,246,.35);border-radius:12px;color:#3b82f6;font-size:.9rem;font-weight:600;cursor:pointer;transition:all .2s}.page-row-add:hover{background:rgba(59,130,246,.12);border-color:#3b82f6}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2000;display:flex;align-items:center;justify-content:center;animation:fadeIn .15s ease-out}.modal-content{width:480px;max-width:95vw;max-height:85vh;background:#1e1e2e;border:1px solid rgba(255,255,255,.12);border-radius:14px;overflow:hidden;display:flex;flex-direction:column;animation:scaleIn .2s ease-out}@keyframes scaleIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.25rem;border-bottom:1px solid rgba(255,255,255,.08)}.modal-header h3{margin:0;font-size:1rem;font-weight:700;color:#fff;display:flex;align-items:center;gap:.5rem}.modal-close{background:transparent;border:none;color:#71717a;cursor:pointer;padding:.3rem;border-radius:6px;display:flex;transition:color .15s}.modal-close:hover{color:#e4e4e7}.modal-body{padding:1.25rem;overflow-y:auto;display:flex;flex-direction:column;gap:1.25rem}.modal-field>label{display:block;font-size:.78rem;font-weight:600;color:#a0a0b0;margin-bottom:.5rem;text-transform:uppercase;letter-spacing:.04em}.modal-field input[type=number]{width:100%;padding:.55rem .75rem;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.15);border-radius:8px;color:#fff;font-size:.9rem;font-weight:600}.modal-field input[type=number]:focus{outline:none;border-color:#3b82f6}.transition-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.4rem}.transition-chip{display:flex;flex-direction:column;align-items:center;gap:.15rem;padding:.5rem .25rem;background:rgba(255,255,255,.04);border:1.5px solid rgba(255,255,255,.1);border-radius:8px;color:#a0a0b0;cursor:pointer;transition:all .15s;font-size:.72rem}.transition-chip:hover{background:rgba(255,255,255,.08);color:#e4e4e7;border-color:#fff3}.transition-chip.active{background:rgba(59,130,246,.2);border-color:#3b82f6;color:#93bbfd}.transition-chip-icon{font-size:1.1rem;line-height:1}.transition-chip-label{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.modal-range-row{display:flex;align-items:center;gap:.75rem}.modal-range-row input[type=range]{flex:1;accent-color:#3b82f6;height:4px}.modal-range-value{font-size:.9rem;font-weight:700;color:#fff;min-width:2.5rem;text-align:center}.modal-footer{padding:.75rem 1.25rem;border-top:1px solid rgba(255,255,255,.08);display:flex;justify-content:flex-end}.btn-modal-done{padding:.5rem 1.5rem;background:linear-gradient(135deg,#3b82f6 0%,#2563eb 100%);color:#fff;border:none;border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer;transition:box-shadow .2s}.btn-modal-done:hover{box-shadow:0 4px 14px #3b82f666}@media (max-width: 640px){.pages-manager{padding:.75rem}.pages-manager-header{flex-direction:column;gap:.75rem}.pages-manager-info{flex-direction:column}.page-row{flex-wrap:wrap}.page-row-actions{width:100%;justify-content:flex-end;padding-top:.3rem;border-top:1px solid var(--border-color, #e2e8f0);margin-top:.2rem}.transition-grid{grid-template-columns:repeat(2,1fr)}}.digital-signage-page{padding:2rem 2.5rem;max-width:1100px;margin:0 auto}.ds-loading{text-align:center;padding:4rem;color:var(--text-secondary)}.ds-header{margin-bottom:2rem}.ds-header-top{display:flex;align-items:center;gap:.85rem;margin-bottom:.4rem}.ds-header-icon{width:44px;height:44px;background:linear-gradient(135deg,#3b82f6,#6366f1);border-radius:12px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #3b82f640;flex-shrink:0}.ds-header h1{margin:0;font-size:1.6rem;font-weight:800;color:var(--text-primary)}.ds-header p{margin:0;color:var(--text-secondary);font-size:.88rem;padding-left:calc(44px + .85rem)}.ds-tabs{display:flex;gap:.25rem;margin-bottom:1.75rem;background:var(--bg-secondary);padding:.3rem;border-radius:12px;border:1px solid var(--border-color);width:fit-content}.ds-tabs button{display:flex;align-items:center;gap:.5rem;padding:.55rem 1.2rem;border:none;background:transparent;cursor:pointer;color:var(--text-secondary);border-radius:9px;font-size:.88rem;font-weight:600;transition:all .2s}.ds-tabs button:hover{color:var(--text-primary);background:var(--surface)}.ds-tabs button.active{color:#fff;background:var(--primary);box-shadow:0 2px 8px #3b82f64d}.ds-section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.25rem}.ds-section-header h2{margin:0;font-size:1.1rem;font-weight:700;color:var(--text-primary)}.btn-primary{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem 1.15rem;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border:none;border-radius:10px;cursor:pointer;font-size:.88rem;font-weight:700;transition:all .2s;box-shadow:0 2px 8px #3b82f640}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 14px #3b82f659}.ds-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.ds-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:14px;padding:1.25rem;display:flex;flex-direction:column;gap:.85rem;transition:all .2s ease}.ds-card:hover{border-color:#3b82f640;box-shadow:0 4px 16px #0000000f}.ds-card.disabled{opacity:.5}.ds-card-top{display:flex;align-items:center;gap:.75rem}.ds-card-icon{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ds-card-icon.on{background:rgba(34,197,94,.1);color:#22c55e}.ds-card-icon.off{background:var(--surface);color:var(--text-secondary)}.ds-card-info{flex:1;min-width:0}.ds-card-name{font-weight:700;font-size:1rem;color:var(--text-primary);display:flex;align-items:center;gap:.5rem}.ds-card-name .ds-badge{font-size:.62rem;padding:.15rem .5rem;background:linear-gradient(135deg,#3b82f6,#6366f1);color:#fff;border-radius:20px;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.ds-card-sub{font-size:.8rem;color:var(--text-secondary);margin-top:1px}.ds-card-tags{display:flex;gap:.4rem;flex-wrap:wrap}.ds-tag{display:inline-flex;align-items:center;gap:.3rem;padding:.25rem .6rem;border-radius:6px;font-size:.72rem;font-weight:600;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border-color)}.ds-tag.green{background:rgba(16,185,129,.08);color:#10b981;border-color:#10b98126}.ds-card-actions{display:flex;gap:.35rem;margin-top:auto}.ds-card-actions .ds-btn{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;padding:.45rem .75rem;border:1px solid var(--border-color);background:var(--bg-primary);border-radius:8px;cursor:pointer;color:var(--text-secondary);font-size:.78rem;font-weight:600;transition:all .15s;text-decoration:none}.ds-card-actions .ds-btn:hover{color:var(--text-primary);border-color:#3b82f64d;background:rgba(59,130,246,.04)}.ds-card-actions .ds-btn.blue{background:rgba(59,130,246,.08);color:#3b82f6;border-color:#3b82f62e}.ds-card-actions .ds-btn.blue:hover{background:rgba(59,130,246,.15);border-color:#3b82f659}.ds-card-actions .ds-btn.red{color:#ef4444;border-color:#ef444426}.ds-card-actions .ds-btn.red:hover{background:rgba(239,68,68,.08);border-color:#ef44444d}.ds-empty{text-align:center;padding:3.5rem 2rem;background:var(--bg-secondary);border:2px dashed var(--border-color);border-radius:16px;color:var(--text-secondary)}.ds-empty-icon{width:56px;height:56px;background:var(--surface);border-radius:14px;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;color:var(--text-secondary)}.ds-empty h3{margin:0 0 .35rem;font-size:1.05rem;font-weight:700;color:var(--text-primary)}.ds-empty p{margin:0;font-size:.88rem}.ds-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:ds-fadeIn .15s ease}@keyframes ds-fadeIn{0%{opacity:0}to{opacity:1}}.ds-modal{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:18px;width:90%;max-width:480px;max-height:85vh;overflow-y:auto;box-shadow:0 20px 60px #00000040;animation:ds-slideUp .2s ease}@keyframes ds-slideUp{0%{opacity:0;transform:translateY(20px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.ds-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border-color)}.ds-modal-header h3{margin:0;font-size:1.1rem;font-weight:700;color:var(--text-primary);display:flex;align-items:center;gap:.5rem}.ds-modal-close{width:32px;height:32px;border-radius:8px;border:none;background:var(--surface);color:var(--text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;padding:0}.ds-modal-close:hover{background:var(--border-color);color:var(--text-primary)}.ds-modal-body{padding:1.25rem 1.5rem;display:flex;flex-direction:column;gap:1.25rem}.ds-modal-section{display:flex;flex-direction:column;gap:.6rem}.ds-modal-section-title{font-size:.75rem;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.ds-modal-row{display:flex;align-items:center;gap:.75rem}.ds-modal-label{font-size:.88rem;font-weight:500;color:var(--text-primary);min-width:100px}.ds-modal-select{flex:1;padding:.55rem .75rem;border-radius:8px;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-primary);font-size:.88rem;cursor:pointer;outline:none;transition:border-color .2s}.ds-modal-select:focus{border-color:var(--primary);box-shadow:0 0 0 3px #3b82f61a}.ds-modal-select option{background:var(--bg-secondary);color:var(--text-primary)}.ds-modal-orient{display:flex;gap:.5rem;flex:1}.ds-modal-orient button{flex:1;display:flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .75rem;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-secondary);border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer;transition:all .15s}.ds-modal-orient button:hover{border-color:#3b82f64d;color:var(--text-primary)}.ds-modal-orient button.active{background:rgba(59,130,246,.1);border-color:var(--primary);color:#3b82f6}.ds-modal-resolution{text-align:center;padding:.6rem;border-radius:8px;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.12);font-size:.95rem;font-weight:700;color:#10b981}.ds-modal-toggle-row{display:flex;align-items:center;justify-content:space-between;padding:.6rem 0}.ds-modal-toggle-row+.ds-modal-toggle-row{border-top:1px solid var(--border-color)}.ds-modal-toggle-label{font-size:.88rem;color:var(--text-primary);font-weight:500}.ds-modal-toggle-desc{font-size:.75rem;color:var(--text-secondary);margin-top:2px}.ds-toggle{position:relative;width:44px;height:24px;flex-shrink:0}.ds-toggle input{opacity:0;width:0;height:0}.ds-toggle-track{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--border-color);border-radius:12px;cursor:pointer;transition:background .2s}.ds-toggle input:checked+.ds-toggle-track{background:#3b82f6}.ds-toggle-track:after{content:"";position:absolute;width:18px;height:18px;left:3px;top:3px;background:white;border-radius:50%;transition:transform .2s;box-shadow:0 1px 3px #00000026}.ds-toggle input:checked+.ds-toggle-track:after{transform:translate(20px)}.ds-modal-url{padding:.6rem .85rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;font-family:SF Mono,Fira Code,monospace;font-size:.78rem;color:var(--text-secondary);word-break:break-all;display:flex;align-items:center;gap:.4rem}.ds-modal-footer{display:flex;justify-content:flex-end;gap:.5rem;padding:1rem 1.5rem;border-top:1px solid var(--border-color)}.ds-modal-footer .ds-btn-danger{margin-right:auto;display:inline-flex;align-items:center;gap:.4rem;padding:.5rem .85rem;border:1px solid rgba(239,68,68,.2);background:rgba(239,68,68,.06);color:#ef4444;border-radius:8px;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .15s}.ds-modal-footer .ds-btn-danger:hover{background:rgba(239,68,68,.12);border-color:#ef444459}.ds-modal-footer .ds-btn-close{padding:.5rem 1rem;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-primary);border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer;transition:all .15s}.ds-modal-footer .ds-btn-close:hover{background:var(--surface)}.ds-form{padding:1.5rem;margin-bottom:1.75rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:14px}.ds-form h3{margin:0 0 1.25rem;font-size:1.05rem;font-weight:700;color:var(--text-primary)}.ds-form label{display:block;margin-bottom:1rem;font-size:.82rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.ds-form label.checkbox{display:flex;align-items:center;gap:.6rem;text-transform:none;font-size:.88rem;font-weight:500;color:var(--text-primary);cursor:pointer}.ds-form input[type=text],.ds-form select{display:block;margin-top:.35rem;width:100%;max-width:400px;padding:.6rem .85rem;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-primary);color:var(--text-primary);font-size:.9rem;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.ds-form input[type=text]:focus,.ds-form select:focus{border-color:var(--primary);box-shadow:0 0 0 3px #3b82f61a}.ds-form input[type=checkbox]{width:18px;height:18px;accent-color:var(--primary);cursor:pointer}.ds-form label.checkbox input{width:auto;max-width:none}.form-actions{display:flex;gap:.6rem;margin-top:1.5rem}.form-actions button{padding:.6rem 1.2rem;border-radius:8px;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-primary);cursor:pointer;font-weight:600;font-size:.88rem;transition:all .15s}.form-actions button:hover{background:var(--surface)}.form-actions button[type=submit]{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-color:transparent}@media (max-width: 768px){.digital-signage-page{padding:1.25rem}.ds-grid{grid-template-columns:1fr}.ds-header p{padding-left:0}.ds-card-actions .ds-btn span{display:none}}.display-viewer{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;background:#1a1a2e;color:#eee}.display-viewer--fullscreen{width:100vw;height:100vh;overflow:hidden}.canvas-viewer-container{position:fixed;top:0;left:0;width:100vw;height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#000}.canvas-viewer-canvas{position:relative;overflow:visible;box-sizing:border-box}.display-viewer__loading,.display-viewer__error{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100%;padding:2rem;text-align:center}.display-viewer__error small{display:block;margin-top:.5rem;color:#888;font-size:.9rem}.display-viewer__grid{position:relative;width:100%;height:100vh}.display-viewer__grid-item{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:12px;display:flex;align-items:center;justify-content:center;overflow:hidden}.display-viewer__inner{min-height:100%;padding:1.5rem;box-sizing:border-box}.display-viewer__header{font-size:1.5rem;font-weight:600;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid rgba(255,255,255,.1)}.display-viewer__content{display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.display-viewer__placeholder{grid-column:1 / -1;text-align:center;padding:3rem;color:#666}.display-viewer__placeholder small{display:block;margin-top:.5rem;font-size:.9rem}.display-viewer__widget{padding:1rem;background:rgba(255,255,255,.06);border-radius:8px;border:1px solid rgba(255,255,255,.08)}.widget-text{font-weight:600;line-height:1.4;word-break:break-word}.widget-menu{text-align:center}.widget-menu h3{margin:0 0 1rem;font-size:1.8rem;font-weight:700;color:#10b981}.widget-menu ul{list-style:none;padding:0;margin:0}.widget-menu li{padding:.5rem 0;font-size:1.2rem;border-bottom:1px solid rgba(255,255,255,.1)}.widget-menu li:last-child{border-bottom:none}.widget-image{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.widget-clock{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}.widget-weather{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.widget-weather h3{margin:0 0 .5rem;font-size:1.5rem}.widget-reminder{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:1.5rem;background:rgba(239,68,68,.1);border:2px solid rgba(239,68,68,.3);border-radius:12px}.widget-reminder h3{margin:.5rem 0;font-size:1.2rem;color:#fca5a5}.widget-reminder p{margin:0;font-size:1.1rem;line-height:1.4}.mpv-container{position:relative;width:100vw;height:100vh;overflow:hidden;background:#000;perspective:1200px}.mpv-layer{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:1;will-change:transform,opacity,filter}.mpv-fade-exit{animation:fadeOut var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards}.mpv-fade-enter{animation:fadeIn var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.mpv-slide-left-exit{animation:slideLeftOut var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards}.mpv-slide-left-enter{animation:slideLeftIn var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards}@keyframes slideLeftOut{0%{transform:translate(0);opacity:1}to{transform:translate(-100%);opacity:.3}}@keyframes slideLeftIn{0%{transform:translate(100%);opacity:.3}to{transform:translate(0);opacity:1}}.mpv-slide-right-exit{animation:slideRightOut var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards}.mpv-slide-right-enter{animation:slideRightIn var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards}@keyframes slideRightOut{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:.3}}@keyframes slideRightIn{0%{transform:translate(-100%);opacity:.3}to{transform:translate(0);opacity:1}}.mpv-slide-up-exit{animation:slideUpOut var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards}.mpv-slide-up-enter{animation:slideUpIn var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards}@keyframes slideUpOut{0%{transform:translateY(0);opacity:1}to{transform:translateY(-100%);opacity:.3}}@keyframes slideUpIn{0%{transform:translateY(100%);opacity:.3}to{transform:translateY(0);opacity:1}}.mpv-slide-down-exit{animation:slideDownOut var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards}.mpv-slide-down-enter{animation:slideDownIn var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards}@keyframes slideDownOut{0%{transform:translateY(0);opacity:1}to{transform:translateY(100%);opacity:.3}}@keyframes slideDownIn{0%{transform:translateY(-100%);opacity:.3}to{transform:translateY(0);opacity:1}}.mpv-blur-dissolve-exit{animation:blurDissolveOut var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards}.mpv-blur-dissolve-enter{animation:blurDissolveIn var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards}@keyframes blurDissolveOut{0%{opacity:1;filter:blur(0px)}50%{opacity:.5;filter:blur(12px)}to{opacity:0;filter:blur(20px)}}@keyframes blurDissolveIn{0%{opacity:0;filter:blur(20px)}50%{opacity:.5;filter:blur(12px)}to{opacity:1;filter:blur(0px)}}.mpv-wipe-exit{animation:wipeOut var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards;z-index:1!important}.mpv-wipe-enter{animation:wipeIn var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards;z-index:3!important}@keyframes wipeOut{0%{clip-path:inset(0 0 0 0)}to{clip-path:inset(0 0 0 0)}}@keyframes wipeIn{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}.mpv-morph-zoom-exit{animation:morphZoomOut var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards}.mpv-morph-zoom-enter{animation:morphZoomIn var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards}@keyframes morphZoomOut{0%{transform:scale(1);opacity:1;filter:blur(0px)}40%{transform:scale(1.08);opacity:.8;filter:blur(2px)}to{transform:scale(1.15);opacity:0;filter:blur(6px)}}@keyframes morphZoomIn{0%{transform:scale(.85);opacity:0;filter:blur(6px)}60%{transform:scale(.95);opacity:.8;filter:blur(2px)}to{transform:scale(1);opacity:1;filter:blur(0px)}}.mpv-ken-burns-exit{animation:kenBurnsOut var(--mpv-dur) cubic-bezier(.4,0,.6,1) forwards}.mpv-ken-burns-enter{animation:kenBurnsIn var(--mpv-dur) cubic-bezier(.4,0,.6,1) forwards}@keyframes kenBurnsOut{0%{transform:scale(1.05) translate(0);opacity:1}to{transform:scale(1.12) translate(-1%,-1%);opacity:0}}@keyframes kenBurnsIn{0%{transform:scale(1) translate(1%,1%);opacity:0}to{transform:scale(1.05) translate(0);opacity:1}}.mpv-cube-exit{animation:cubeOut var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards;transform-origin:right center}.mpv-cube-enter{animation:cubeIn var(--mpv-dur) cubic-bezier(.65,0,.35,1) forwards;transform-origin:left center}@keyframes cubeOut{0%{transform:perspective(1200px) rotateY(0);opacity:1}to{transform:perspective(1200px) rotateY(-90deg);opacity:.3}}@keyframes cubeIn{0%{transform:perspective(1200px) rotateY(90deg);opacity:.3}to{transform:perspective(1200px) rotateY(0);opacity:1}}.mpv-flip-card-exit{animation:flipCardOut var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards;backface-visibility:hidden}.mpv-flip-card-enter{animation:flipCardIn var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards;backface-visibility:hidden}@keyframes flipCardOut{0%{transform:perspective(1200px) rotateY(0);opacity:1}50%{transform:perspective(1200px) rotateY(-90deg);opacity:0}to{transform:perspective(1200px) rotateY(-90deg);opacity:0}}@keyframes flipCardIn{0%{transform:perspective(1200px) rotateY(90deg);opacity:0}50%{transform:perspective(1200px) rotateY(90deg);opacity:0}to{transform:perspective(1200px) rotateY(0);opacity:1}}.mpv-door-exit{animation:doorOut var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards;transform-origin:left center}.mpv-door-enter{animation:doorIn var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards;z-index:0!important}@keyframes doorOut{0%{transform:perspective(1200px) rotateY(0);opacity:1}to{transform:perspective(1200px) rotateY(-110deg);opacity:0}}@keyframes doorIn{0%{opacity:0;transform:scale(.92)}40%{opacity:1}to{opacity:1;transform:scale(1)}}.mpv-glitch-exit{animation:glitchOut var(--mpv-dur) steps(1) forwards}.mpv-glitch-enter{animation:glitchIn var(--mpv-dur) steps(1) forwards}@keyframes glitchOut{0%{opacity:1;transform:none;filter:none}10%{opacity:1;transform:translate(5px,-3px) skew(2deg);filter:hue-rotate(90deg) saturate(2)}20%{opacity:1;transform:translate(-5px,2px) skew(-3deg);filter:hue-rotate(180deg) saturate(3)}30%{opacity:1;transform:translate(3px,4px) skew(1deg);filter:hue-rotate(270deg) saturate(2)}40%{opacity:.8;transform:translate(-8px,-2px) skew(-2deg);filter:hue-rotate(45deg) saturate(4) brightness(1.5)}50%{opacity:.6;transform:translate(6px,1px) skew(3deg);filter:hue-rotate(135deg) saturate(2)}60%{opacity:.3;transform:translate(-3px,-5px);filter:hue-rotate(200deg) saturate(1)}70%{opacity:.1;transform:translate(2px,3px);filter:none}to{opacity:0;transform:none;filter:none}}@keyframes glitchIn{0%{opacity:0;transform:none;filter:none}30%{opacity:0}40%{opacity:.2;transform:translate(-4px,3px) skew(-2deg);filter:hue-rotate(180deg) saturate(3)}50%{opacity:.4;transform:translate(6px,-2px) skew(3deg);filter:hue-rotate(90deg) saturate(4) brightness(1.3)}60%{opacity:.6;transform:translate(-3px,1px) skew(-1deg);filter:hue-rotate(270deg) saturate(2)}70%{opacity:.8;transform:translate(2px,-4px) skew(2deg);filter:hue-rotate(45deg) saturate(2)}80%{opacity:.9;transform:translate(-1px,2px);filter:hue-rotate(10deg)}90%{opacity:1;transform:translate(1px);filter:none}to{opacity:1;transform:none;filter:none}}.mpv-curtain-exit{animation:curtainOut var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards;z-index:3!important}.mpv-curtain-enter{animation:curtainIn var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards;z-index:1!important}@keyframes curtainOut{0%{clip-path:inset(0 0 0 0)}50%{clip-path:inset(50% 0 0 0)}51%{clip-path:inset(50% 0 0 0)}to{clip-path:inset(100% 0 0 0)}}@keyframes curtainIn{0%{opacity:0;transform:scale(.95)}50%{opacity:1;transform:scale(.98)}to{opacity:1;transform:scale(1)}}.mpv-scale-fade-exit{animation:scaleFadeOut var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards}.mpv-scale-fade-enter{animation:scaleFadeIn var(--mpv-dur) cubic-bezier(.4,0,.2,1) forwards}@keyframes scaleFadeOut{0%{transform:scale(1);opacity:1}to{transform:scale(.75);opacity:0}}@keyframes scaleFadeIn{0%{transform:scale(1.15);opacity:0}to{transform:scale(1);opacity:1}}@keyframes tickerScroll{0%{transform:translate(0)}to{transform:translate(-50%)}}.viewer-ticker-container{overflow:hidden!important}.viewer-ticker-scroll{padding:0 2rem}
