:root{--md-sys-color-primary:#1565c0;--md-sys-color-on-primary:#fff;--md-sys-color-primary-container:#d1e4ff;--md-sys-color-surface:#fafafa;--md-sys-color-surface-container:#fff;--md-sys-color-surface-variant:#e7e0ec;--md-sys-color-on-surface:#1c1b1f;--md-sys-color-on-surface-variant:#49454f;--md-sys-color-outline:#79747e;--md-sys-color-error:#b3261e;--md-sys-color-success:#2e7d32;--md-sys-color-warning:#ed6c02;--md-sys-shape-corner-medium:12px;--md-sys-shape-corner-small:8px;--md-sys-typescale-headline-large:2rem;--md-sys-typescale-headline-medium:1.5rem;--md-sys-typescale-title-medium:1.125rem;--md-sys-typescale-body-large:1rem;--md-sys-typescale-body-medium:.875rem;--md-sys-typescale-label-large:.875rem}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);font-family:Roboto,Segoe UI,sans-serif;line-height:1.5}.auth-shell{background:linear-gradient(135deg, #1565c029, #d1e4ff57 42%, transparent 42%), radial-gradient(circle at top left, #1565c02e, transparent 34rem), linear-gradient(180deg, #f8fbff 0%, var(--md-sys-color-surface) 100%);place-items:center;min-height:100vh;padding:24px;display:grid}.auth-card{background:var(--md-sys-color-surface-container);border:1px solid #79747e38;border-radius:24px;width:min(100%,440px);padding:36px;box-shadow:0 6px 18px #1565c01a,0 18px 48px #0000001f}.auth-mark{background:var(--md-sys-color-primary-container);width:48px;height:48px;color:var(--md-sys-color-primary);border-radius:14px;place-items:center;margin-bottom:18px;font-size:.95rem;font-weight:700;display:grid;box-shadow:inset 0 0 0 1px #1565c01f}.auth-brand{color:var(--md-sys-color-primary);font-size:var(--md-sys-typescale-label-large);letter-spacing:0;margin-bottom:12px;font-weight:600}.auth-title{color:var(--md-sys-color-on-surface);font-size:var(--md-sys-typescale-headline-large);margin-bottom:8px;font-weight:400}.auth-subtitle{color:var(--md-sys-color-on-surface-variant);font-size:var(--md-sys-typescale-body-large);margin-bottom:28px}.auth-field{gap:6px;margin-bottom:16px;display:grid}.auth-field label{color:var(--md-sys-color-on-surface-variant);font-size:var(--md-sys-typescale-body-medium);font-weight:500}.auth-input{border:1px solid var(--md-sys-color-outline);width:100%;min-height:52px;color:var(--md-sys-color-on-surface);font:inherit;font-size:var(--md-sys-typescale-body-large);background:#fefbff;border-radius:12px;padding:14px 16px;transition:border-color .15s,box-shadow .15s,background .15s}.auth-input:focus{border-color:var(--md-sys-color-primary);background:#fff;outline:none;box-shadow:0 0 0 2px #1565c02e}.auth-input::placeholder{color:#49454fb8}.auth-actions{margin-top:24px}.auth-submit{border-radius:24px;justify-content:center;width:100%;min-height:48px;box-shadow:0 2px 8px #1565c038}.auth-footer{text-align:center;color:var(--md-sys-color-on-surface-variant);font-size:var(--md-sys-typescale-body-medium);margin-top:20px}.auth-footer a{color:var(--md-sys-color-primary);font-weight:600;text-decoration:none}.auth-footer a:hover{text-decoration:underline}.auth-alert{margin-bottom:16px}@media (width<=560px){.auth-shell{align-items:stretch;padding:16px}.auth-card{border-radius:20px;align-self:center;padding:28px 22px}}.auth-loading{color:var(--md-sys-color-on-surface-variant);text-align:center;justify-items:center;gap:16px;padding:32px 0 16px;display:grid}.md-spinner{border:4px solid var(--md-sys-color-primary-container);border-top-color:var(--md-sys-color-primary);border-radius:50%;width:44px;height:44px;animation:.9s linear infinite spin}.app-layout{min-height:100vh;display:flex}.nav-drawer{background:#fff;border-right:1px solid #e0e0e0;width:280px;height:100vh;padding:16px 0;position:fixed;overflow-y:auto}.nav-drawer h2{font-size:var(--md-sys-typescale-headline-medium);color:var(--md-sys-color-primary);padding:16px 24px}.nav-item{color:var(--md-sys-color-on-surface);border-radius:0 28px 28px 0;align-items:center;margin-right:12px;padding:12px 24px;text-decoration:none;transition:background .2s;display:flex}.nav-item:hover{background:var(--md-sys-color-surface-variant)}.nav-item.active{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-primary);font-weight:500}.main-content{flex:1;margin-left:280px;padding:24px}.top-bar{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.top-bar h1{font-size:var(--md-sys-typescale-headline-large);font-weight:400}.card{border-radius:var(--md-sys-shape-corner-medium);background:#fff;padding:24px;transition:box-shadow .2s;box-shadow:0 1px 3px #0000001f,0 1px 2px #00000014}.card:hover{box-shadow:0 4px 8px #0000001f,0 2px 4px #00000014}.card-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;display:grid}.card-title{font-size:var(--md-sys-typescale-title-medium);margin-bottom:12px;font-weight:500}.card-metric{color:var(--md-sys-color-primary);font-size:2.5rem;font-weight:300}.card-label{font-size:var(--md-sys-typescale-body-medium);color:#666;margin-top:4px}.card-status{justify-content:space-between;align-items:center;margin-top:16px;display:flex}.status-badge{font-size:var(--md-sys-typescale-label-large);border-radius:16px;padding:4px 12px;font-weight:500;display:inline-block}.status-active{color:var(--md-sys-color-success);background:#e8f5e9}.status-alert{color:var(--md-sys-color-warning);background:#fff3e0}.status-inactive{color:#9e9e9e;background:#f5f5f5}.data-table{border-collapse:collapse;border-radius:var(--md-sys-shape-corner-medium);background:#fff;width:100%;overflow:hidden;box-shadow:0 1px 3px #0000001f}.data-table th{text-align:left;font-size:var(--md-sys-typescale-label-large);color:#666;background:#fafafa;border-bottom:1px solid #e0e0e0;padding:16px;font-weight:500}.data-table td{font-size:var(--md-sys-typescale-body-medium);border-bottom:1px solid #f0f0f0;padding:16px}.data-table tr:hover td{background:#f5f5f5}.pagination{justify-content:flex-end;align-items:center;gap:8px;padding:16px;display:flex}.btn{font-size:var(--md-sys-typescale-label-large);cursor:pointer;border:none;border-radius:20px;align-items:center;gap:8px;padding:10px 24px;font-weight:500;transition:all .2s;display:inline-flex}.btn-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.btn-primary:hover{box-shadow:0 2px 4px #0003}.btn:disabled,.btn[disabled]{color:#9e9e9e;cursor:not-allowed;box-shadow:none;background:#e0e0e0;border-color:#e0e0e0}.btn:disabled:hover,.btn[disabled]:hover{box-shadow:none}.btn-outline{color:var(--md-sys-color-primary);border:1px solid var(--md-sys-color-primary);background:0 0}.btn-danger{background:var(--md-sys-color-error);color:#fff}.btn-sm{padding:6px 16px;font-size:.8rem}@keyframes btn-spin{to{transform:rotate(360deg)}}.btn-spinner{border:2px solid;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:14px;height:14px;animation:.6s linear infinite btn-spin}.btn-sm .btn-spinner{border-width:1.5px;width:11px;height:11px}.form-group{margin-bottom:16px}.form-label{font-size:var(--md-sys-typescale-body-medium);color:#666;margin-bottom:4px;display:block}.form-input{border-radius:var(--md-sys-shape-corner-small);width:100%;font-size:var(--md-sys-typescale-body-large);border:1px solid #ccc;padding:12px 16px;transition:border-color .2s}.form-input:focus,.form-select:focus{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 1px var(--md-sys-color-primary);outline:none}.form-select{border-radius:var(--md-sys-shape-corner-small);width:100%;font-size:var(--md-sys-typescale-body-large);cursor:pointer;background:#fff;border:1px solid #ccc;padding:12px 16px}.alert{border-radius:var(--md-sys-shape-corner-small);font-size:var(--md-sys-typescale-body-medium);padding:14px 16px}.alert-banner{border-radius:var(--md-sys-shape-corner-small);align-items:center;gap:12px;margin-bottom:16px;padding:16px 24px;display:flex}.alert-info{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-primary)}.alert-warning{color:#e65100;background:#fff3e0}.alert-error{color:var(--md-sys-color-error);background:#fdecea}.alert-success{color:var(--md-sys-color-success);background:#e8f5e9}.stream-container{border-radius:var(--md-sys-shape-corner-medium);background:#000;max-width:100%;overflow:hidden}.stream-container img{width:100%;height:auto;display:block}.dialog-overlay{z-index:100;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog{border-radius:var(--md-sys-shape-corner-medium);background:#fff;min-width:400px;max-width:90vw;padding:24px;box-shadow:0 8px 32px #0003}.dialog-title{font-size:var(--md-sys-typescale-headline-medium);margin-bottom:16px}.dialog-actions{justify-content:flex-end;gap:8px;margin-top:24px;display:flex}.dialog-large{min-width:640px;max-width:95vw;max-height:90vh;overflow-y:auto}.calib-image-wrap{max-width:100%;display:inline-block;position:relative}.calib-image{cursor:crosshair;-webkit-user-select:none;user-select:none;max-width:100%;height:auto;display:block}.calib-marker{color:#fff;cursor:grab;-webkit-user-select:none;user-select:none;background:#dc2828d9;border:2px solid #fff;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:12px;font-weight:700;display:flex;position:absolute;transform:translate(-50%,-50%)}.calib-marker:active{cursor:grabbing}.calib-dims-row{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px;display:flex}.calib-dims-row .form-label{min-width:100px;margin-bottom:0}.calib-dims-row .form-input{width:100px}.calib-ghost-hint{color:#666;background:#f5f5f5;border-radius:6px;align-items:center;gap:8px;margin-top:8px;padding:6px 10px;font-size:13px;display:flex}.calib-ghost-badge{color:#666;background:#b4b4b480;border:2px dashed #aaa;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:12px;font-weight:700;display:inline-flex}.calib-ghost-label{color:#888;font-style:italic}.calib-overlay-wrap{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.loading{text-align:center;color:#999;padding:48px}.empty-state{text-align:center;color:#666;padding:48px}.zone-editor-dialog{border-radius:var(--md-sys-shape-corner-medium);background:#fff;max-width:95vw;max-height:95vh;padding:24px;overflow-y:auto;box-shadow:0 8px 32px #0003}.form-row{gap:16px;display:flex}.form-row .form-group{flex:1}.zone-canvas-container{margin:16px 0}.zone-canvas-wrapper{cursor:crosshair;border:2px solid #ccc;border-radius:4px;position:relative;overflow:hidden}.zone-frame-img{-webkit-user-select:none;user-select:none;pointer-events:none;display:block}.zone-canvas-overlay{cursor:crosshair;position:absolute;top:0;left:0}.zone-toolbar{align-items:center;gap:8px;margin-bottom:12px;display:flex}.zone-info{color:#666;margin-left:8px;font-size:.875rem}.live-wrapper{width:100%;min-height:0;margin-top:16px;display:block;position:relative}.live-frame{border-radius:var(--md-sys-shape-corner-medium);background:#000;width:100%;height:auto;display:block}.live-frame.loading{border-radius:var(--md-sys-shape-corner-medium);background:#000;justify-content:center;align-items:center;min-height:300px;display:flex;position:relative}.live-frame.loading-img{opacity:0;pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.live-frame.offline{border-radius:var(--md-sys-shape-corner-medium);border-radius:var(--md-sys-shape-corner-medium);background:#f5f5f5;border:2px dashed #ccc;justify-content:center;align-items:center;min-height:300px;display:flex}.offline-message{text-align:center;padding:24px}.loading-message{text-align:center;color:#fff;padding:48px}.loading-spinner{border:4px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:40px;height:40px;margin:0 auto 16px;animation:1s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.offline-icon{margin-bottom:16px;font-size:48px}.offline-hint{color:#666;max-width:500px;margin-top:8px;margin-left:auto;margin-right:auto;font-size:14px}.live-count-pill{color:#fff;background:#000000b3;border-radius:16px;padding:8px 16px;font-size:1rem;position:absolute;top:12px;right:12px}.live-count-pill strong{color:#4caf50;font-size:1.4rem}.live-count-pill .live-conf{opacity:.85;margin-top:4px;font-size:.85rem}.live-count-pill .live-conf strong{color:#b3e5fc;font-size:1rem}.event-bubble{color:#fff;pointer-events:none;white-space:nowrap;z-index:10;background:#000000e0;border-radius:10px;align-items:center;gap:6px;padding:6px 10px;font-size:.75rem;animation:.35s cubic-bezier(.2,1.2,.3,1) both event-pop;display:flex;position:absolute;transform:translate(-50%,-100%);box-shadow:0 4px 12px #00000059}.event-bubble:after{content:"";border:6px solid #0000;border-top-color:#000000e0;border-bottom-width:0;position:absolute;bottom:-6px;left:50%;transform:translate(-50%)}@keyframes event-pop{0%{opacity:0;transform:translate(-50%,-80%)scale(.7)}to{opacity:1;transform:translate(-50%,-100%)scale(1)}}.event-time{color:#b3e5fc;font-variant-numeric:tabular-nums;font-size:.75rem}.event-type{border-radius:12px;padding:2px 8px;font-size:.7rem;font-weight:600}.event-type-entered_queue{background:#2e7d32}.event-type-started_service{background:#1565c0}.event-type-finished_service{background:#6a1b9a}.event-type-left_queue{background:#c62828}.event-zone{font-weight:500}.event-person{opacity:.6;margin-left:auto;font-size:.75rem}.zone-tabs{flex-wrap:wrap;align-items:center;gap:6px;margin:12px 0;display:flex}.zone-tabs-label{color:#666;margin-right:4px;font-size:.875rem}.zone-tab{cursor:pointer;background:#fff;border:2px solid #ccc;border-radius:16px;align-items:center;gap:4px;padding:6px 14px;font-size:.875rem;transition:all .15s;display:inline-flex}.zone-tab.staff-tab{color:#1565c0;border-color:#1565c0}.zone-tab.queue-tab{color:#2e7d32;border-color:#2e7d32}.zone-tab.add-tab{color:#666;border-style:dashed;border-color:#999}.zone-tab.active.staff-tab{color:#fff;background:#1565c0}.zone-tab.active.queue-tab{color:#fff;background:#2e7d32}.zone-tab .tab-x{opacity:.7;margin-left:4px;font-weight:700}.zone-tab .tab-x:hover{opacity:1}.window-select-row{align-items:stretch;gap:8px;display:flex}.window-select-main{flex:1}.window-select-row>button{white-space:nowrap}.inline-window-form{border-radius:var(--md-sys-shape-corner-small);background:#f5f9ff;border:1px solid #cfd8dc;padding:12px 16px}.inline-form-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.empty-select-hint{color:#999;border-radius:var(--md-sys-shape-corner-small);border:1px dashed #ccc;padding:12px 16px}.mat-select{width:100%;position:relative}.mat-select-trigger{border-radius:var(--md-sys-shape-corner-small);cursor:pointer;font-size:var(--md-sys-typescale-body-large);background:#fff;border:1px solid #ccc;justify-content:space-between;align-items:center;padding:12px 16px;transition:border-color .2s;display:flex}.mat-select-open .mat-select-trigger{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 1px var(--md-sys-color-primary)}.mat-select-arrow{color:#666;font-size:.8em}.mat-select-panel{z-index:200;border-radius:var(--md-sys-shape-corner-small);background:#fff;border:1px solid #ccc;margin-top:2px;display:none;position:absolute;top:100%;left:0;right:0;overflow:hidden;box-shadow:0 4px 12px #00000026}.mat-select-panel-visible{display:block}.mat-option{cursor:pointer;font-size:var(--md-sys-typescale-body-large);padding:12px 16px;transition:background .15s}.mat-option:hover{background:#f5f5f5}.mat-option-selected{color:var(--md-sys-color-primary);background:#e3f2fd;font-weight:500}.coords-preview{word-break:break-all;background:#f5f5f5;border-radius:4px;padding:8px 12px;font-size:.8rem;display:block}.drop-zone{text-align:center;color:#555;border:2px dashed #90caf9;border-radius:8px;margin-bottom:12px;padding:24px;transition:background .2s}.drop-zone.drag-over{background:#e3f2fd;border-color:#1976d2}.drop-zone-label{margin:0;font-size:.95rem}.form-label-inline{cursor:pointer;align-items:center;gap:8px;display:flex}@keyframes skeleton-shimmer{0%{background-position:-600px 0}to{background-position:600px 0}}.skeleton{background:linear-gradient(90deg,#eee 25%,#e0e0e0 50%,#eee 75%) 0 0/1200px 100%;border-radius:4px;animation:1.4s ease-in-out infinite skeleton-shimmer;display:block}.skeleton-card{border-radius:var(--md-sys-shape-corner-medium);background:#fff;flex-direction:column;gap:12px;padding:24px;display:flex;box-shadow:0 1px 3px #0000001f,0 1px 2px #00000014}.skeleton-card .sk-title{width:55%;height:18px}.skeleton-card .sk-metric{width:35%;height:40px}.skeleton-card .sk-label{width:70%;height:14px}.skeleton-card .sk-footer{width:45%;height:20px;margin-top:8px}.skeleton-row td{padding:12px 16px}.skeleton-row .sk-cell{border-radius:4px;height:16px}