/* Five base colors. Every UI role is an alias, tint or mixture of these. */
:root {
  --palette-ink: #292B30;
  --palette-slate: #3B3E45;
  --palette-paper: #F4F3EE;
  --palette-gold: #C6A76D;
  --palette-green: #7DB596;
  --bg: var(--palette-ink);
  --bg-deep: var(--palette-ink);
  --panel: var(--palette-slate);
  --surface-soft: color-mix(in srgb, var(--palette-slate) 80%, var(--palette-ink));
  --text: var(--palette-paper);
  --muted: color-mix(in srgb, var(--palette-paper) 72%, var(--palette-ink));
  --line: color-mix(in srgb, var(--palette-paper) 14%, transparent);
  --accent: var(--palette-gold);
  --accent-dim: color-mix(in srgb, var(--palette-gold) 78%, var(--palette-slate));
  --green: var(--palette-green);
  --success: var(--palette-green);
  --focus: color-mix(in srgb, var(--palette-paper) 70%, var(--palette-slate));
  --focus-halo: color-mix(in srgb, var(--focus) 12%, transparent);
  --accent-wash: color-mix(in srgb, var(--palette-gold) 11%, transparent);
  --shadow-color: color-mix(in srgb, var(--palette-ink) 30%, transparent);
  --ink-on-accent: var(--palette-ink);
  color-scheme: dark;
}
:root[data-theme=light] {
  --bg: color-mix(in srgb, var(--palette-paper) 95%, var(--palette-ink));
  --bg-deep: color-mix(in srgb, var(--palette-paper) 92%, var(--palette-slate));
  --panel: var(--palette-paper);
  --surface-soft: color-mix(in srgb, var(--palette-paper) 96%, var(--palette-slate));
  --text: var(--palette-ink);
  --muted: color-mix(in srgb, var(--palette-ink) 75%, var(--palette-paper));
  --line: color-mix(in srgb, var(--palette-slate) 18%, transparent);
  --accent: color-mix(in srgb, var(--palette-gold) 52%, var(--palette-ink));
  --accent-dim: var(--accent);
  --success: color-mix(in srgb, var(--palette-green) 45%, var(--palette-ink));
  --focus: color-mix(in srgb, var(--palette-slate) 75%, var(--palette-paper));
  --shadow-color: color-mix(in srgb, var(--palette-ink) 13%, transparent);
  color-scheme: light;
}
:root .portal, :root[data-theme] .portal {
  --portal-bg: var(--bg);
  --portal-surface: var(--panel);
  --portal-soft: var(--surface-soft);
  --portal-border: var(--line);
  --portal-ink: var(--text);
  --portal-muted: var(--muted);
  --portal-green: var(--accent);
  --portal-gold: var(--accent);
  background: var(--bg);
  color: var(--text);
}
:root[data-theme] :is(.header,.portal-topbar,.portal-sidebar,.portal-card,.business-card,.status-notice,.map-sidebar,.tour-header,.tour-sidebar,.tour-tabs) {
  border-color: var(--line);
}
:root[data-theme] :is(.portal-topbar,.portal-sidebar,.portal-card,.business-card,.status-notice,.map-sidebar,.tour-header,.tour-sidebar,.tour-tabs,.search-panel,dialog) {
  background: var(--panel);
  color: var(--text);
}
:root[data-theme] :is(.main-nav.open,.tour-search,.tour-main,.tour-loading,.map-workspace) { background: var(--bg-deep); }
:root[data-theme] .portal :is(.welcome-card,.auth-story) {
  background: linear-gradient(120deg,var(--palette-slate),var(--palette-ink));
  color: var(--palette-paper);
  border-color: color-mix(in srgb,var(--palette-paper) 15%,transparent);
}
:root[data-theme] .portal .welcome-card:after { background: radial-gradient(ellipse at 0 0,var(--accent-wash),transparent 65%); }
:root[data-theme] .portal :is(.welcome-card p,.auth-story-copy p) { color: color-mix(in srgb,var(--palette-paper) 78%,var(--palette-slate)); }
:root[data-theme] .portal :is(.welcome-card .eyebrow,.welcome-link,.auth-story .eyebrow,.auth-story>.subtle-link) { color: var(--palette-gold); }
:root[data-theme] .portal .auth-story :is(.brand b,.auth-tools .select-trigger) { color: var(--palette-paper); }
:root[data-theme] .portal .art-building { background: linear-gradient(140deg,var(--palette-slate),var(--palette-ink));border-color:var(--accent-wash); }
:root[data-theme] .portal .art-building i { background: var(--accent-wash);border-color:color-mix(in srgb,var(--palette-gold) 25%,transparent); }
:root[data-theme] .portal .art-building i:nth-child(4n) { background: color-mix(in srgb,var(--palette-gold) 35%,var(--palette-slate));box-shadow:none; }
:root[data-theme] .portal .auth-art>span { color: var(--accent-wash); }
:root[data-theme] .portal .nav-item.active { background: var(--accent-wash);color:var(--accent); }
:root[data-theme] .portal :is(.notification-button i,.notification-row.is-unread b:after) { background: var(--palette-gold); }
:root[data-theme] .portal .notification-row.is-unread .stat-icon { background: var(--accent-wash); }
:root[data-theme] .portal :is(.stat-icon,.large-icon) { color: var(--accent);background:var(--surface-soft); }
:root[data-theme] .portal :is(.portal-button.secondary,.form-control::file-selector-button) { color:var(--text);background:var(--surface-soft);border-color:var(--line); }
:root[data-theme] :is(.primary-button,.search-submit), :root[data-theme] .portal .portal-button:not(.secondary) {
  color:var(--ink-on-accent);background:var(--palette-gold);border-color:transparent;
}
:root[data-theme] :is(.primary-button:hover,.search-submit:hover), :root[data-theme] .portal .portal-button:not(.secondary):hover {
  color:var(--ink-on-accent);background:color-mix(in srgb,var(--palette-gold) 80%,var(--palette-paper));
}
:root[data-theme] .outline-button { border-color:var(--line);color:var(--text); }
:root[data-theme] :is(.select-trigger,.portal .form-control) { box-shadow:0 1px 2px var(--shadow-color); }
:root[data-theme] .portal :is(.form-control,.ui-select .select-trigger) { color:var(--text);background:var(--surface-soft);border-color:var(--line); }
:root[data-theme] .portal .portal-language .select-trigger { background:transparent; }
:root[data-theme] .portal .form-control:hover { border-color:var(--focus); }
:root[data-theme] .portal .form-control:focus { background:var(--panel);border-color:var(--focus);box-shadow:0 0 0 4px var(--focus-halo); }
:root[data-theme] .select-popover { background:var(--panel);color:var(--text);border-color:var(--line);box-shadow:0 16px 44px var(--shadow-color); }
:root[data-theme] .select-option[aria-selected=true] { background:var(--accent-wash); }
:root[data-theme] .select-check { color:var(--accent); }
:root[data-theme] :is(.select-validation,.field-error,.form-errors,.portal-message.error,.danger-link) { color:var(--accent); }
:root[data-theme] .ui-select.has-error .select-trigger { border-color:var(--accent); }
:root[data-theme] .portal .status-chip.published { color:var(--success); }
:root[data-theme] .portal .status-chip.pending { color:var(--accent); }
:root[data-theme] .password-rule[data-state=met] { color:var(--success); }
:root[data-theme] .password-rule[data-state=met] .password-rule-icon { background:color-mix(in srgb,var(--success) 10%,transparent);border-color:color-mix(in srgb,var(--success) 40%,transparent); }
:root[data-theme] progress { accent-color:var(--palette-gold); }
:root[data-theme] progress::-webkit-progress-value { background:var(--palette-gold); }
:root[data-theme] progress::-moz-progress-bar { background:var(--palette-gold); }
:root[data-theme] progress[value="100"] { accent-color:var(--success); }
:root[data-theme] progress[value="100"]::-webkit-progress-value { background:var(--success); }
:root[data-theme] progress[value="100"]::-moz-progress-bar { background:var(--success); }
:root[data-theme] input[type=checkbox] { accent-color:var(--accent); }
:root[data-theme] .live-dot { background:var(--palette-gold);box-shadow:none; }
:root[data-theme] :is(.model-hint,.model-coordinate,.card-category,.card-products,.card-footer,.footer-note,.popular,.popular>span,.map-info,.north,.source-note,.gallery-grid figcaption) { color:var(--muted); }
:root[data-theme] .business-logo { background:var(--surface-soft);border-color:var(--line); }
:root[data-theme] .demo-badge { color:var(--accent);border-color:var(--line); }
:root[data-theme] .model-glow { background:radial-gradient(ellipse at center,var(--accent-wash),transparent 65%); }
:root[data-theme] .model-controls { background:color-mix(in srgb,var(--panel) 94%,transparent); }
:root[data-theme] .model-control.active { background:var(--accent-wash); }
:root[data-theme] .label-dot { border-color:var(--palette-slate); }
:root[data-theme] .address-marker { background:var(--accent-wash);border-color:var(--line); }
:root[data-theme] .enter-building { background:var(--surface-soft);border-color:var(--line); }
:root[data-theme] .enter-building:hover { background:var(--panel); }
:root[data-theme] .floor-button.active { background:var(--accent-wash);color:var(--accent);border-color:var(--accent); }
:root[data-theme] :is(.tour-scene-status,.tour-minimap,.tour-selected,.tour-viewpoints button,.tour-walk-hint,.tour-controls button) { color:var(--text);background:color-mix(in srgb,var(--panel) 96%,transparent);border-color:var(--line); }
:root[data-theme] .tour-viewpoints button.active { color:var(--ink-on-accent);background:var(--palette-gold); }
:root[data-theme] .tour-photo-peek { background:var(--panel);color:var(--text);border-color:var(--line); }
:root[data-theme] :is(.tour-demo-note,.tour-floor-nav small,.tour-media-thumbs span) { color:var(--muted); }
:root[data-theme] .tour-minimap :is(.mini-unit,.mini-corridor) { fill:var(--surface-soft);stroke:var(--muted); }
:root[data-theme] .tour-minimap :is(circle,.mini-position) { fill:var(--palette-gold);stroke:var(--palette-ink); }
:root[data-theme] .plan-shell { fill:var(--palette-slate);stroke:var(--muted); }
:root[data-theme] .plan-void { fill:var(--palette-ink);stroke:var(--muted); }
:root[data-theme] .plan-unit,:root[data-theme] .plan-empty { fill:var(--surface-soft);stroke:var(--muted); }
:root[data-theme] :is(.plan-unit:hover,.plan-unit:focus,.plan-unit.selected) { fill:var(--palette-gold);stroke:var(--palette-paper); }
:root[data-theme] .plan-unit text { fill:var(--text); }
:root[data-theme] :is(.plan-unit:hover,.plan-unit.selected) text { fill:var(--palette-ink); }
:root[data-theme] .plan-core { fill:color-mix(in srgb,var(--palette-gold) 38%,var(--palette-slate));stroke:var(--muted); }
:root[data-theme] .plan-label { fill:var(--muted); }
:root[data-theme] .legend-unit { background:var(--surface-soft); }
:root[data-theme] .legend-core { background:var(--accent); }
:root[data-theme] .legend-corridor { background:var(--palette-slate); }
:root[data-theme] .plan-area { background-image:radial-gradient(var(--line) .6px,transparent .6px); }
:root[data-theme] .search-panel { box-shadow:0 8px 30px var(--shadow-color); }
:root[data-theme] .search-floor { border-color:var(--line); }
/* Technical admin reuses the same semantic colors. */
:root[data-theme] {
  --body-bg:var(--bg);--body-fg:var(--text);--body-quiet-color:var(--muted);
  --darkened-bg:var(--surface-soft);--border-color:var(--line);--hairline-color:var(--line);
  --header-bg:var(--panel);--header-color:var(--text);--header-branding-color:var(--accent);
  --breadcrumbs-bg:var(--surface-soft);--breadcrumbs-fg:var(--muted);--breadcrumbs-link-fg:var(--text);
  --link-fg:var(--accent);--link-hover-color:var(--text);--selected-bg:var(--surface-soft);--selected-row:var(--accent-wash);
}
@media(prefers-color-scheme:light) {
  :root[data-theme=auto] {
    --bg:color-mix(in srgb,var(--palette-paper) 95%,var(--palette-ink));--bg-deep:color-mix(in srgb,var(--palette-paper) 92%,var(--palette-slate));
    --panel:var(--palette-paper);--surface-soft:color-mix(in srgb,var(--palette-paper) 96%,var(--palette-slate));--text:var(--palette-ink);
    --muted:color-mix(in srgb,var(--palette-ink) 75%,var(--palette-paper));--line:color-mix(in srgb,var(--palette-slate) 18%,transparent);
    --accent:color-mix(in srgb,var(--palette-gold) 52%,var(--palette-ink));--success:color-mix(in srgb,var(--palette-green) 45%,var(--palette-ink));
    --focus:color-mix(in srgb,var(--palette-slate) 75%,var(--palette-paper));color-scheme:light;
  }
}
@media(max-width:760px) {
  :root[data-theme] .portal .auth-tools .select-trigger { color:var(--palette-paper);border-color:color-mix(in srgb,var(--palette-paper) 20%,transparent); }
}
:root[data-theme] .portal .portal-message.success { color:var(--success); }
:root[data-theme] :is(.gallery-grid img,.gallery-grid video,.about-photo img,.tour-media-stage) { background:var(--palette-ink); }
:root[data-theme] .home-real-photo>span { color:var(--palette-paper);background:linear-gradient(transparent,color-mix(in srgb,var(--palette-ink) 92%,transparent)); }
:root[data-theme] .model-label:after { background:color-mix(in srgb,var(--palette-gold) 40%,transparent); }
:root[data-theme] :is(.model-area:before,.model-area:after) { color:var(--muted); }
:root[data-theme] body:not(.portal) .password-rule[data-state=met] { color:var(--success); }
