/* Texopeka only. Visual source: ../object-ui/palettes.css + style.css.
   No layout/media geometry, visibility, routing or event-handler overrides.
   Forest is provisional; data-qs-palette=pine|olive is a reversible token choice. */
html.qs-v3 {
  --qs-accent: #45975f;
  --qs-on-accent: #0a0a0a;
  --qs-selected: #233529;
  --v3-bg: #111111;
  --v3-panel: #191919;
  --v3-panel-2: #1e1e1e;
  --v3-line: #383838;
  --v3-line-strong: #666666;
  --v3-text: #f2f2f2;
  --v3-muted: #a0a0a0;
  --v3-live: var(--qs-accent);
  --v3-accent: var(--qs-accent);
  --v3-error: #f07878;
  --v3-button-bg: #222222;
  --v3-button-bg-hover: #2d2d2d;
  --v3-button-border: #484848;
  --v3-button-text: var(--v3-text);
  --bg: var(--v3-bg);
  --panel: var(--v3-panel);
  --panel-2: var(--v3-panel-2);
  --text: var(--v3-text);
  --muted: var(--v3-muted);
  --accent: var(--qs-accent);
  --accent-soft: var(--qs-selected);
  --danger: var(--v3-error);
  --ok: var(--qs-accent);
  --dock-bg: var(--v3-bg);
  --dock-surface: var(--v3-panel);
  --dock-raised: var(--v3-panel-2);
  --dock-border: var(--v3-line);
  --dock-text: var(--v3-text);
  --dock-muted: var(--v3-muted);
  --dock-input: var(--v3-panel-2);
  --dock-accent: var(--qs-accent);
  --dock-on-accent: var(--qs-on-accent);
  --dock-selected: var(--qs-selected);
  --dock-focus: var(--qs-accent);
  --dock-success: var(--qs-accent);
  --dock-error: var(--v3-error);
}
html.qs-v3.qs-theme-light {
  --qs-accent: #236c3b;
  --qs-on-accent: #ffffff;
  --qs-selected: #e4efe7;
  --v3-bg: #f5f5f5;
  --v3-panel: #ffffff;
  --v3-panel-2: #eeeeee;
  --v3-line: #d0d0d0;
  --v3-line-strong: #929292;
  --v3-text: #171717;
  --v3-muted: #646464;
  --v3-error: #b42318;
  --v3-button-bg: #ffffff;
  --v3-button-bg-hover: #eeeeee;
  --v3-button-border: #c2c2c2;
}
html.qs-v3[data-qs-palette="pine"] { --qs-accent: #3e9565; }
html.qs-v3.qs-theme-light[data-qs-palette="pine"] { --qs-accent: #206b46; }
html.qs-v3[data-qs-palette="olive"] { --qs-accent: #8c974e; }
html.qs-v3.qs-theme-light[data-qs-palette="olive"] { --qs-accent: #566c2d; }
html.qs-v3 body { font-family: Inter, "Segoe UI", system-ui, sans-serif; font-synthesis: none; }
html.qs-v3 :is(.header,.panel,.archive-panel,.controls) { background-color: var(--v3-panel); border-color: var(--v3-line); }
html.qs-v3 .title { font-weight: 550; letter-spacing: -.5px; }
/* Non-media navigation. Protected player/timeline/preview sizing is untouched. */
html.qs-v3 body :is(.account-controls > button,.v3-theme-toggle,.workspace-tab,.install-button.visible) {
  border-radius: 9px; border-color: var(--v3-line) !important;
  background: var(--v3-panel-2) !important; color: var(--v3-text) !important;
  font-weight: 500;
}
html.qs-v3 body :is(.access-mode-toggle.active,.workspace-tab.active) {
  border-color: var(--qs-accent) !important; background: var(--qs-selected) !important; color: var(--qs-accent) !important;
}
html.qs-v3 .qs-dock {
  --dock-bg: var(--v3-bg); --dock-surface: var(--v3-panel); --dock-raised: var(--v3-panel-2);
  --dock-border: var(--v3-line); --dock-text: var(--v3-text); --dock-muted: var(--v3-muted);
  --dock-input: var(--v3-panel-2); --dock-accent: var(--qs-accent); --dock-on-accent: var(--qs-on-accent);
  --dock-selected: var(--qs-selected); --dock-focus: var(--qs-accent); --dock-success: var(--qs-accent); --dock-error: var(--v3-error);
}
html.qs-v3 body .qs-dock {
  background: var(--v3-panel) !important; color: var(--v3-text);
  border-color: var(--v3-line) !important; border-radius: 14px !important;
  font-size: 13px; line-height: 1.5;
}
html.qs-v3 body .qs-dock .qs-dock-head { background: var(--v3-panel); border-color: var(--v3-line); }
html.qs-v3 body .qs-dock :is(h2,h3,.qs-dock-title) { font-weight: 550; letter-spacing: -.3px; }
html.qs-v3 body .qs-dock :is(button,.account-menu-action) {
  border-radius: 9px !important; border-color: var(--v3-line) !important;
  background: var(--v3-panel-2) !important; color: var(--v3-text) !important;
  font-family: inherit; font-weight: 500;
}
html.qs-v3 body .qs-dock :is(button,.account-menu-action):hover:not(:disabled) {
  border-color: var(--qs-accent) !important; background: var(--qs-selected) !important;
}
html.qs-v3 body .qs-dock :is(button.active,[aria-pressed="true"],.account-session.current) {
  border-color: var(--qs-accent) !important; background: var(--qs-selected) !important;
}
html.qs-v3 body .qs-dock :is(.danger,.account-session-revoke,.camera-access-revoke) {
  color: var(--v3-error) !important; border-color: var(--v3-error) !important;
}
html.qs-v3 body .qs-dock :is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),select,textarea) {
  background: var(--dock-input) !important; color: var(--v3-text) !important;
  border-color: var(--v3-line) !important; border-radius: 9px !important; font: inherit;
}
html.qs-v3 body .qs-dock :is(input,select,textarea)[aria-invalid="true"] { border-color: var(--v3-error) !important; }
html.qs-v3 body .qs-dock :is(button,input,select,textarea):focus-visible {
  outline: 2px solid var(--qs-accent); outline-offset: 2px;
}
html.qs-v3 body .qs-dock :is(button,input,select,textarea):disabled { cursor: not-allowed; opacity: .5; }
html.qs-v3 body :is(#accountPanel,#objectSettingsPanel,#deviceAdminPanel,#displayNodesPanel,#cameraAccessPanel,#objectStoragePanel,#accessDirectoryPanel,#apartmentStructurePanel,#faceAccessPanel).qs-dock button[disabled]:disabled {
  color: var(--v3-muted) !important; background: var(--v3-panel-2) !important;
  border-color: var(--v3-line) !important; opacity: .65; cursor: not-allowed;
}
html.qs-v3 body #cameraAccessPanel.qs-dock .camera-access-form button:disabled,
html.qs-v3 body #cameraAccessPanel.qs-dock .camera-access-actions button:disabled {
  color: var(--v3-muted) !important; background: var(--v3-panel-2) !important;
  border-color: var(--v3-line) !important; opacity: .65;
}
html.qs-v3 body .qs-dock :is(.account-session,.camera-access-grant,.v3-access-grant-card) {
  background: var(--v3-panel-2) !important; border-color: var(--v3-line) !important; border-radius: 11px;
}
html.qs-v3 body .qs-dock :is(.account-session strong,#accountMenuCurrent) { color: var(--v3-text) !important; }
html.qs-v3 body .qs-dock :is(small,.account-sessions-status,.account-sessions-empty,.account-session > span) { color: var(--v3-muted) !important; }
html.qs-v3 body .qs-dock .account-sessions { border-color: var(--v3-line); }
html.qs-v3 body .qs-dock .account-session.security-risk { border-color: var(--dock-warning) !important; }
html.qs-v3 body .qs-dock .qs-object-menu { gap: 10px; }
html.qs-v3 body .qs-dock .qs-object-menu button { min-height: 44px; padding: 10px 12px; }
html.qs-v3 body .qs-dock .account-menu-list { gap: 8px; }
html.qs-v3 body .qs-dock .account-menu-list button { min-height: 40px; padding: 9px 12px; }
/* Login: original background selection, autofill and SMS handlers remain intact. */
html.qs-v3 body.login-mode #loginPanel {
  background: var(--v3-panel) !important; color: var(--v3-text);
  border: 1px solid var(--v3-line) !important; border-radius: 20px;
  box-shadow: 0 20px 70px #0005;
}
html.qs-v3 body.login-mode #loginPanel .login-brand { color: var(--qs-accent); font-weight: 600; letter-spacing: -.5px; }
html.qs-v3 body.login-mode #loginPanel label { color: var(--v3-muted); }
html.qs-v3 body.login-mode #loginPanel input {
  background: var(--v3-panel-2); color: var(--v3-text); border-color: var(--v3-line);
  border-radius: 10px; font-family: inherit;
}
html.qs-v3 body.login-mode #loginPanel input:focus { border-color: var(--qs-accent); box-shadow: 0 0 0 3px var(--qs-selected); }
html.qs-v3 body.login-mode #loginPanel input[aria-invalid="true"] { border-color: var(--v3-error); }
html.qs-v3 body.login-mode #loginPanel .login-actions button { background: var(--qs-accent); color: var(--qs-on-accent); border-color: var(--qs-accent); border-radius: 10px; font-weight: 600; }
html.qs-v3 body.login-mode #loginPanel .login-actions button.secondary { background: var(--v3-panel-2); color: var(--v3-text); border-color: var(--v3-line); }
html.qs-v3 body.login-mode #loginPanel .status { color: var(--v3-muted); }
html.qs-v3 body.login-mode #loginPanel .status.bad { color: var(--v3-error); }
html.qs-v3 body.login-mode #loginPanel .status.ok { color: var(--qs-accent); }
html.qs-v3 body.login-mode #loginPanel :is(input,button):focus-visible { outline: 2px solid var(--qs-accent); outline-offset: 3px; }
html.qs-v3 body.login-mode #loginPanel button:disabled { opacity: .55; cursor: not-allowed; }
html.qs-v3 body :is(.camera-list,.camera-button,.object-group,.v3-settings-menu) { border-color: var(--v3-line); }
html.qs-v3 body .camera-button { background-color: var(--v3-panel-2); color: var(--v3-text); }
html.qs-v3 body .camera-button.active { border-color: var(--qs-accent); }
/* Floating native dialogs retain their own geometry and close/save handlers. */
html.qs-v3 body :is(.camera-name-dialog-card,.v3-settings-menu) {
  background: var(--v3-panel) !important; color: var(--v3-text); border-color: var(--v3-line); border-radius: 14px;
}
