/* ============================================================================
   GLOBAL DARK THEME & SLIDE-OUT MENU
   Unified dark theme for all Pinoyshki pages with slide-out navigation
   ============================================================================ */

/* ============================================================================
   DARK THEME VARIABLES
   ============================================================================ */

:root {
    /* Dark theme colors - Warm Gold Restaurant Theme */
    --dark-bg-primary: #0a0e12;     /* Slightly darker for better depth */
    --dark-bg-secondary: #151a24;
    --dark-bg-tertiary: #1e2530;
    --dark-bg-card: #181d28;
    --dark-text-primary: #f0f2f5;   /* Bright white - headings, key values */
    --dark-text-secondary: #bfc8d1; /* Light gray - body text, table cells */
    --dark-text-muted: #adb7c2;     /* Mid gray - timestamps, captions, hints */
    --dark-border: #2d3643;
    --dark-accent: #e5b584;         /* Slightly brighter gold */
    --dark-accent-secondary: #34e89e;
    --dark-success: #34e89e;
    --dark-warning: #ffab2e;
    --dark-danger: #ff5e57;
    --dark-shadow: rgba(0, 0, 0, 0.6);

    /* Gradient for headers */
    --dark-gradient: linear-gradient(135deg, #d4a574, #b38454);
}

/* ============================================================================
   PAGE CONTENT HIDDEN UNTIL LOADED
   ============================================================================ */

/* Hide page content from first paint.  JS (global-menu.js) adds .page-ready
   to <body> once the server is ready and the loading overlay is dismissed,
   triggering a smooth fade-in of the fully-rendered page.
   This rule lives in the external stylesheet (loaded render-blocking via
   <link> in <head>) so it takes effect even for pre-generated HTML that
   hasn't been regenerated with updated inline critical CSS. */
.container {
    opacity: 0 !important;
}

body.page-ready .container {
    opacity: 1 !important;
    transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1);
}

/* ============================================================================
   DARK THEME STYLES
   ============================================================================ */

body.dark-theme {
    background-color: var(--dark-bg-primary) !important;
    color: var(--dark-text-primary) !important;
}

/* Force dark theme for common containers that might have inline white bg */
.dark-theme div[style*="background-color: white"],
.dark-theme div[style*="background-color: #fff"],
.dark-theme div[style*="background-color: #ffffff"],
.dark-theme section[style*="background-color: white"],
.dark-theme section[style*="background-color: #fff"] {
    background-color: var(--dark-bg-card) !important;
    color: var(--dark-text-primary) !important;
}

/* Container */
.dark-theme .container {
    background-color: transparent !important;
}

/* Header */
.dark-theme header {
    background: var(--dark-gradient) !important;
    color: #000 !important; /* Gold header needs dark text for contrast */
}

.dark-theme header h1,
.dark-theme header h2,
.dark-theme header p {
    color: #000 !important;
}

/* Cards & Panels - all container elements with white backgrounds */
.dark-theme .card,
.dark-theme .summary-card,
.dark-theme .chart-container,
.dark-theme .table-container,
.dark-theme .panel,
.dark-theme .controls,
.dark-theme .sidebar,
.dark-theme .data-panel,
.dark-theme .receipt-item,
.dark-theme .stat-card,
.dark-theme .usage-summary,
.dark-theme .price-history-container,
.dark-theme .date-controls,
.dark-theme .modal,
.dark-theme .stats-panel,
.dark-theme .info-panel {
    background: var(--dark-bg-card) !important;
    border: 1px solid var(--dark-border) !important;
    box-shadow: 0 4px 15px var(--dark-shadow) !important;
    color: var(--dark-text-primary) !important;
}

/* Ensure chart containers don't have white bleed */
.dark-theme .chart-container svg {
    background: transparent !important;
}

/* Animations for scroll-triggered entrance */
.js-animations-ready .chart-container,
.js-animations-ready .card,
.js-animations-ready .summary-card,
.js-animations-ready .table-container,
.js-animations-ready .section,
.js-animations-ready .panel,
.js-animations-ready .stat-card,
.js-animations-ready .stats-panel,
.js-animations-ready .data-panel,
.js-animations-ready .section-title {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1), 
                transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}

.js-animations-ready .animate-in {
    opacity: 1 !important;
    transform: translateY(0) !important;
}

/* Text fixes for elements that might inherit light colors */
.dark-theme h1, .dark-theme h2, .dark-theme h3, .dark-theme h4, .dark-theme h5, .dark-theme h6 {
    color: var(--dark-text-primary) !important;
}

.dark-theme p, .dark-theme span, .dark-theme li, .dark-theme label {
    color: var(--dark-text-secondary) !important;
}

.dark-theme strong, .dark-theme b {
    color: var(--dark-text-primary) !important;
}

.dark-theme .muted, .dark-theme .text-muted, .dark-theme .small {
    color: var(--dark-text-muted) !important;
}

.dark-theme .card:hover,
.dark-theme .chart-container:hover {
    box-shadow: 0 4px 20px var(--dark-shadow) !important;
}

/* Panel headings */
.dark-theme .panel h2 {
    color: var(--dark-accent) !important;
    border-bottom-color: var(--dark-accent) !important;
}

/* Card text */
.dark-theme .card-label {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .card-value {
    color: var(--dark-text-primary) !important;
}

.dark-theme .card-detail {
    color: var(--dark-text-muted) !important;
}

.dark-theme .card-benchmark {
    border-top-color: var(--dark-border) !important;
}

/* Section titles */
.dark-theme .section-title {
    color: var(--dark-accent) !important;
    border-bottom-color: var(--dark-accent) !important;
}

/* Tables */
.dark-theme table {
    background: transparent !important;
}

.dark-theme th {
    background-color: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme td {
    color: var(--dark-text-secondary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme tr:hover {
    background-color: var(--dark-bg-tertiary) !important;
}

.dark-theme tr:nth-child(even) {
    background-color: rgba(255, 255, 255, 0.02) !important;
}

/* Allergen page */
.dark-theme .allergen-key-item {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .allergen-key-item .name {
    color: var(--dark-text-primary) !important;
}

.dark-theme .allergen-table td.recipe-name {
    color: var(--dark-text-primary) !important;
}

.dark-theme .allergen-table td.category {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .allergen-table td.allergen-cell.has-allergen {
    color: var(--dark-danger) !important;
}

.dark-theme .disclaimer {
    background: rgba(243, 156, 18, 0.15) !important;
    border-left-color: var(--dark-warning) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .disclaimer strong {
    color: var(--dark-warning) !important;
}

.dark-theme .last-updated {
    color: var(--dark-text-muted) !important;
}

.dark-theme .print-btn {
    background: var(--dark-accent) !important;
    color: #fff !important;
}

/* Expense & Controls pages */
.dark-theme .control-group label {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .control-group input,
.dark-theme .control-group select {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .btn-toggle {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .btn-toggle.active {
    background: var(--dark-accent) !important;
    color: #fff !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .btn-secondary {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .btn-secondary:hover {
    background: var(--dark-accent) !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .toggle-group button {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .toggle-group button.active {
    background: var(--dark-accent) !important;
    color: #fff !important;
}

.dark-theme .sales-toggle-group {
    border-color: var(--dark-accent) !important;
}
.dark-theme .sales-toggle-btn {
    background: transparent !important;
    color: var(--dark-accent) !important;
    border-color: transparent !important;
}
.dark-theme .sales-toggle-btn.active {
    background: var(--dark-accent) !important;
    color: #fff !important;
}
.dark-theme .sales-toggle-btn:hover:not(.active) {
    background: rgba(212,165,116, 0.15) !important;
}

/* Vendor list (expense visualization) */
.dark-theme .vendor-item {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .vendor-item:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .vendor-item.selected {
    background: rgba(212, 165, 116, 0.15) !important;
    border-left-color: var(--dark-accent) !important;
}

.dark-theme .vendor-name {
    color: var(--dark-text-primary) !important;
}

.dark-theme .vendor-amount {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .vendor-bar {
    background: var(--dark-border) !important;
}

.dark-theme .receipt-panel {
    background: var(--dark-bg-secondary) !important;
}

.dark-theme .receipt-close {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .receipt-header h3 {
    color: var(--dark-text-primary) !important;
}

.dark-theme .loading {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .spinner {
    border-color: var(--dark-border) !important;
    border-top-color: var(--dark-accent) !important;
}

/* Data explorer */
.dark-theme .tab {
    background: var(--dark-bg-secondary) !important;
    color: var(--dark-text-secondary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .tab:hover,
.dark-theme .tab.active {
    background: var(--dark-bg-card) !important;
    color: var(--dark-text-primary) !important;
}

/* Stat cards (ingredient costs) */
.dark-theme .stat-card .label {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .stat-card .value {
    color: var(--dark-text-primary) !important;
}

/* Usage items */
.dark-theme .usage-item {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .usage-item .usage-qty {
    color: var(--dark-text-secondary) !important;
}

/* Autocomplete dropdowns */
.dark-theme .autocomplete-dropdown {
    background: var(--dark-bg-card) !important;
    border-color: var(--dark-border) !important;
    box-shadow: 0 4px 12px var(--dark-shadow) !important;
}

.dark-theme .autocomplete-item {
    color: var(--dark-text-primary) !important;
}

.dark-theme .autocomplete-item:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .autocomplete-item .item-meta {
    color: var(--dark-text-muted) !important;
}

/* Chart headers */
.dark-theme .chart-header h2 {
    color: var(--dark-accent) !important;
}

/* Recipe editor - unassigned ingredients warning */
.dark-theme .unassigned-ingredients {
    background: rgba(243, 156, 18, 0.15) !important;
    border-left-color: var(--dark-warning) !important;
}

.dark-theme .unassigned-ingredients h3 {
    color: var(--dark-warning) !important;
}

.dark-theme .unassigned-ingredients li:hover {
    background: rgba(255, 193, 7, 0.15) !important;
}

/* Recipe editor - allergen badges (dark-friendly muted tones) */
.dark-theme .allergen-badge {
    background: rgba(220, 53, 69, 0.2) !important;
    color: #f5a0a8 !important;
}

.dark-theme .allergen-badge.dairy {
    background: rgba(0, 123, 255, 0.2) !important;
    color: #80bdff !important;
}

.dark-theme .allergen-badge.eggs {
    background: rgba(255, 193, 7, 0.2) !important;
    color: #ffc107 !important;
}

.dark-theme .allergen-badge.wheat {
    background: rgba(40, 167, 69, 0.2) !important;
    color: #81c784 !important;
}

.dark-theme .allergen-badge.nuts {
    background: rgba(220, 53, 69, 0.2) !important;
    color: #f5a0a8 !important;
}

.dark-theme .allergen-badge.fish {
    background: rgba(108, 117, 125, 0.2) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .allergen-badge.soy {
    background: rgba(108, 117, 125, 0.2) !important;
    color: var(--dark-text-secondary) !important;
}

/* Recipe editor - meta text, cost display */
.dark-theme .recipe-item .meta {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .cost-display .margin-value.warning {
    color: var(--dark-warning) !important;
}

/* Generic inline color fixes for elements with hardcoded light-theme colors */
.dark-theme [style*="color:#666"],
.dark-theme [style*="color: #666"],
.dark-theme [style*="color:#6b7280"],
.dark-theme [style*="color: #6b7280"],
.dark-theme [style*="color:#9ca3af"],
.dark-theme [style*="color: #9ca3af"] {
    color: var(--dark-text-secondary) !important;
}

.dark-theme [style*="color:#856404"],
.dark-theme [style*="color: #856404"] {
    color: var(--dark-warning) !important;
}

.dark-theme [style*="color:#888"],
.dark-theme [style*="color: #888"] {
    color: var(--dark-text-muted) !important;
}

.dark-theme [style*="color:#374151"],
.dark-theme [style*="color: #374151"] {
    color: var(--dark-text-primary) !important;
}

.dark-theme [style*="color:#2563eb"],
.dark-theme [style*="color: #2563eb"] {
    color: var(--dark-accent) !important;
}

.dark-theme [style*="background:#f9fafb"],
.dark-theme [style*="background: #f9fafb"] {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme [style*="border-top:1px solid #e5e7eb"],
.dark-theme [style*="border-top: 1px solid #e5e7eb"] {
    border-top-color: var(--dark-border) !important;
}

.dark-theme [style*="border-bottom:1px solid #e5e7eb"],
.dark-theme [style*="border-bottom: 1px solid #e5e7eb"] {
    border-bottom-color: var(--dark-border) !important;
}

/* Date filter buttons (dashboard) */
.dark-theme .date-filters button {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .date-filters button:hover,
.dark-theme .date-filters button.active {
    background: var(--dark-accent) !important;
    color: #fff !important;
}

/* Category chips */
.dark-theme .category-chips .chip {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-secondary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .category-chips .chip.active,
.dark-theme .category-chips .chip:hover {
    background: var(--dark-accent) !important;
    color: #fff !important;
}

/* Form inputs */
.dark-theme input,
.dark-theme select,
.dark-theme textarea {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme input:focus,
.dark-theme select:focus,
.dark-theme textarea:focus {
    border-color: var(--dark-accent) !important;
    outline: none;
}

.dark-theme input::placeholder,
.dark-theme textarea::placeholder {
    color: var(--dark-text-muted) !important;
}

/* Buttons */
.dark-theme button:not(.chatbot-toggle):not(.chatbot-header-btn):not(.chatbot-send-btn):not(.chatbot-new-chat-btn):not([class*="debug-"]):not(.toggle-notes):not(.checklist-submit-btn) {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme button:hover:not(.chatbot-toggle):not(.chatbot-header-btn):not(.chatbot-send-btn):not(.chatbot-new-chat-btn):not([class*="debug-"]):not(.toggle-notes):not(.checklist-submit-btn) {
    background: var(--dark-accent) !important;
    border-color: var(--dark-accent) !important;
}

/* Links */
.dark-theme a {
    color: var(--dark-accent) !important;
}

.dark-theme a:hover {
    color: var(--dark-accent-secondary) !important;
}

/* Chart tooltip */
.dark-theme .chart-tooltip {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
}

/* Label info tooltip dark mode */
.dark-theme .label-info { background: var(--dark-text-muted) !important; }
.dark-theme .label-info:hover { background: var(--dark-accent) !important; }
.dark-theme .label-tooltip { background: var(--dark-bg-tertiary) !important; color: var(--dark-text-primary) !important; }
.dark-theme .label-tooltip::after { border-top-color: var(--dark-bg-tertiary) !important; }

/* Tags - dashboard status badges */
.dark-theme .tag-success {
    background: rgba(46, 204, 113, 0.2) !important;
    color: #2ECC71 !important;
}

.dark-theme .tag-warning {
    background: rgba(243, 156, 18, 0.2) !important;
    color: var(--dark-warning) !important;
}

.dark-theme .tag-danger {
    background: rgba(231, 76, 60, 0.2) !important;
    color: var(--dark-danger) !important;
}

.dark-theme .tag-info {
    background: rgba(52, 152, 219, 0.2) !important;
    color: #3498DB !important;
}

.dark-theme .tag-muted {
    background: rgba(150, 160, 170, 0.2) !important;
    color: #96A0AA !important;
}

/* Loading overlay & spinner */
.dark-theme .loading-overlay {
    background: rgba(15, 20, 25, 0.85) !important;
}

.dark-theme .loading-spinner {
    border-color: var(--dark-border) !important;
    border-top-color: var(--dark-accent) !important;
}

/* Footer */
.dark-theme footer {
    color: var(--dark-text-muted) !important;
    border-top: 1px solid var(--dark-border) !important;
    background: var(--dark-bg-secondary) !important;
    padding: 20px !important;
    margin-top: 40px !important;
}

.dark-theme #data-exclusions-notice {
    background: rgba(243, 156, 18, 0.05) !important;
    border-color: var(--dark-warning) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme #data-exclusions-notice h4 {
    color: var(--dark-warning) !important;
}

.dark-theme #dq-issues-list {
    color: var(--dark-text-muted) !important;
}

.dark-theme #dq-total-rows {
    color: var(--dark-text-primary) !important;
}

/* Form labels */
.dark-theme .form-group label {
    color: var(--dark-text-secondary) !important;
}

/* Card benchmark text (expense percentage page) */
.dark-theme .card-benchmark {
    border-top-color: var(--dark-border) !important;
    color: var(--dark-text-muted) !important;
}

/* Benchmark legend (expense percentage page) */
.dark-theme .benchmark-legend {
    background: var(--dark-bg-tertiary) !important;
}

/* Drill-down panel (expense percentage page) */
.dark-theme .drill-down-panel {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .drill-down-header h3 {
    color: var(--dark-text-primary) !important;
}

.dark-theme .close-btn {
    color: var(--dark-text-secondary) !important;
}

/* ---- Cost Breakdown Page ---- */
.dark-theme .kpi-card {
    background: var(--dark-bg-card) !important;
    box-shadow: 0 2px 8px var(--dark-shadow) !important;
}

.dark-theme .kpi-card .kpi-label {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .kpi-card .kpi-sub {
    color: var(--dark-text-muted) !important;
}

.dark-theme .section {
    background: var(--dark-bg-card) !important;
    box-shadow: 0 2px 8px var(--dark-shadow) !important;
}

.dark-theme .section h2 {
    color: var(--dark-text-primary) !important;
}

.dark-theme .section .section-desc {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .data-table th {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .data-table td {
    color: var(--dark-text-secondary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .data-table tr:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .category-panel {
    border-color: var(--dark-border) !important;
}

.dark-theme .category-panel-body {
    background: var(--dark-bg-card) !important;
}

.dark-theme .item-row {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .item-row .item-name {
    color: var(--dark-text-primary) !important;
}

.dark-theme .item-row .item-cost {
    color: var(--dark-text-primary) !important;
}

.dark-theme .item-row .item-pct {
    color: var(--dark-text-muted) !important;
}

.dark-theme .uncat-row {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .uncat-row .uncat-name {
    color: var(--dark-text-primary) !important;
}

.dark-theme .uncat-row .uncat-cost {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .freshness-badge {
    background: rgba(255, 255, 255, 0.15) !important;
    color: var(--dark-text-secondary) !important;
}

/* ---- Data Explorer Page ---- */
.dark-theme .sidebar h3 {
    color: var(--dark-text-muted) !important;
}

.dark-theme .source-count {
    color: var(--dark-text-muted) !important;
}

.dark-theme .source-name {
    color: var(--dark-text-primary) !important;
}

.dark-theme .source-item:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .source-item.active {
    background: rgba(212, 165, 116, 0.15) !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .panel-header {
    background: var(--dark-bg-tertiary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .panel-title {
    color: var(--dark-text-primary) !important;
}

.dark-theme .panel-subtitle {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .tabs {
    background: var(--dark-bg-secondary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .controls-bar {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .column-chip {
    background: var(--dark-bg-tertiary) !important;
    border-color: var(--dark-border) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .column-chip.active {
    background: var(--dark-accent) !important;
    color: #fff !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .column-chip:hover {
    border-color: var(--dark-accent) !important;
}

.dark-theme .pagination {
    border-top-color: var(--dark-border) !important;
}

.dark-theme .pagination-info {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .page-size-select {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .dtype {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .schema-table th {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .null-value {
    color: var(--dark-text-muted) !important;
}

.dark-theme .stat-card h4 {
    color: var(--dark-text-muted) !important;
}

.dark-theme .stat-list li {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .empty-state {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .empty-state h3 {
    color: var(--dark-text-primary) !important;
}

/* ---- Recipe Editor Page ---- */
.dark-theme .cost-display {
    background: linear-gradient(135deg, var(--dark-bg-secondary) 0%, var(--dark-bg-tertiary) 100%) !important;
}

.dark-theme .cost-display .total-cost {
    color: var(--dark-accent) !important;
}

.dark-theme .cost-display .cost-details {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .cost-display .margin-calc {
    border-top-color: var(--dark-border) !important;
}

.dark-theme .cost-badge.high-cost {
    background: rgba(231, 76, 60, 0.2) !important;
    color: #f5a0a8 !important;
}

.dark-theme .cost-badge.good-margin {
    background: rgba(46, 204, 113, 0.2) !important;
    color: var(--dark-success) !important;
}

.dark-theme .cost-badge.warning {
    background: rgba(243, 156, 18, 0.2) !important;
    color: var(--dark-warning) !important;
}

.dark-theme .recipe-item {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .recipe-item:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .recipe-item.active {
    background: rgba(212, 165, 116, 0.15) !important;
    border-left-color: var(--dark-accent) !important;
}

.dark-theme .recipe-item .name {
    color: var(--dark-text-primary) !important;
}

.dark-theme .recipe-item .action-btn {
    background: var(--dark-bg-tertiary) !important;
    border-color: var(--dark-border) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .recipe-item .action-btn:hover {
    background: var(--dark-accent) !important;
    color: #fff !important;
}

.dark-theme .recipe-item .action-btn.delete:hover {
    background: rgba(231, 76, 60, 0.2) !important;
    color: var(--dark-danger) !important;
}

.dark-theme .recipe-margin-bar .margin-bar-track {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .recipe-margin-nums {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .recipe-no-cost {
    color: var(--dark-text-muted) !important;
}

.dark-theme .autocomplete-list {
    background: var(--dark-bg-card) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .autocomplete-item:hover,
.dark-theme .autocomplete-item.highlighted {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .autocomplete-item .item-meta {
    color: var(--dark-text-muted) !important;
}

.dark-theme .autocomplete-unit {
    color: var(--dark-text-muted) !important;
}

.dark-theme .search-results-dropdown {
    background: var(--dark-bg-card) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .search-result-item {
    border-bottom-color: var(--dark-border) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .search-result-item:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .search-result-item .match-score {
    color: var(--dark-text-muted) !important;
}

.dark-theme .base-recipe-section {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .base-recipe-section h4 {
    color: var(--dark-accent) !important;
}

.dark-theme .shortcuts-hint {
    color: var(--dark-text-muted) !important;
}

.dark-theme .shortcuts-hint kbd {
    background: var(--dark-bg-tertiary) !important;
    border-color: var(--dark-border) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .toast.warning {
    color: #fff !important;
}

.dark-theme .duplicate-modal .similar-recipe {
    border-color: var(--dark-border) !important;
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .duplicate-modal .similar-recipe:hover {
    background: var(--dark-bg-secondary) !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .duplicate-modal .similarity-bar {
    background: var(--dark-border) !important;
}

/* Sales stats section (recipe editor inline styles) */
.dark-theme #sales-stats-section {
    border-top-color: var(--dark-border) !important;
}

.dark-theme #daily-sales-chart {
    background: var(--dark-bg-tertiary) !important;
}

/* Expense visualization - category chips dark tweaks */
.dark-theme .category-chip {
    border-color: transparent !important;
}

.dark-theme .category-chip.active {
    border-color: currentColor !important;
}

/* ---- What-If Calculator Page ---- */
.dark-theme .item-row:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .item-row.selected {
    background: rgba(212, 165, 116, 0.15) !important;
    border-left-color: var(--dark-accent) !important;
}

.dark-theme .item-row .item-meta {
    color: var(--dark-text-muted) !important;
}

.dark-theme .item-row .item-qty {
    color: var(--dark-text-muted) !important;
}

.dark-theme .substitute-row {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .substitute-row:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .substitute-row.selected {
    background: rgba(243, 156, 18, 0.15) !important;
    border-color: var(--dark-warning) !important;
}

.dark-theme .metric-card {
    background: var(--dark-bg-card) !important;
    box-shadow: 0 2px 8px var(--dark-shadow) !important;
}

.dark-theme .metric-card .metric-label {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .metric-card.positive {
    background: rgba(46, 204, 113, 0.15) !important;
    color: var(--dark-success) !important;
}

.dark-theme .metric-card.negative {
    background: rgba(231, 76, 60, 0.15) !important;
    color: var(--dark-danger) !important;
}

.dark-theme .ingredient-table th,
.dark-theme .ingredient-table td {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .ingredient-table th {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .allocation-bar {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .allocation-qty {
    color: var(--dark-text-muted) !important;
}

.dark-theme .loading {
    color: var(--dark-text-muted) !important;
}

.dark-theme .panel h2 .count {
    color: var(--dark-text-muted) !important;
}

.dark-theme .results-placeholder {
    color: var(--dark-text-muted) !important;
}

/* ---- Ingredient Costs Page ---- */
.dark-theme .vendor-tag.cheapest {
    background: rgba(46, 204, 113, 0.2) !important;
    color: var(--dark-success) !important;
}

.dark-theme .vendor-tag.expensive {
    background: rgba(231, 76, 60, 0.2) !important;
    color: var(--dark-danger) !important;
}

.dark-theme .vendor-tag {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .stat-card .label,
.dark-theme .price-stats .label,
.dark-theme .summary-card .label {
    color: var(--dark-text-muted) !important;
}

.dark-theme .ingredient-row {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .ingredient-row:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .ingredient-row.expanded {
    background: rgba(212, 165, 116, 0.1) !important;
}

.dark-theme .usage-details {
    background: var(--dark-bg-secondary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .usage-summary h4 {
    border-bottom-color: var(--dark-border) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .usage-item {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .usage-item .usage-qty {
    color: var(--dark-text-muted) !important;
}

.dark-theme .expand-icon {
    color: var(--dark-text-muted) !important;
}

.dark-theme .date-controls .preset-btn.active {
    background: var(--dark-accent) !important;
    color: #fff !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .date-controls .date-separator {
    color: var(--dark-text-muted) !important;
}

/* ---- Errors & Warnings Page ---- */
.dark-theme .tag-error {
    background: rgba(231, 76, 60, 0.2) !important;
    color: var(--dark-danger) !important;
}

.dark-theme .panel.warning h2 {
    color: var(--dark-warning) !important;
}

.dark-theme .panel.error h2 {
    color: var(--dark-danger) !important;
}

.dark-theme .panel {
    background: var(--dark-bg-card) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme th,
.dark-theme td {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme th {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme td {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .summary-card {
    background: var(--dark-bg-card) !important;
    box-shadow: 0 2px 8px var(--dark-shadow) !important;
}

.dark-theme .summary-card .value {
    color: var(--dark-text-primary) !important;
}

/* ---- Allergens Page ---- */
.dark-theme .allergen-key-item {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .allergen-table th {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .allergen-table td {
    border-bottom-color: var(--dark-border) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .allergen-table tr:hover,
.dark-theme .allergen-table tr:nth-child(even):hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .allergen-table tr:nth-child(even) {
    background: rgba(255, 255, 255, 0.03) !important;
}

.dark-theme .allergen-table td.category {
    color: var(--dark-text-muted) !important;
}

.dark-theme .disclaimer {
    background: rgba(243, 156, 18, 0.15) !important;
    border-color: var(--dark-warning) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .disclaimer strong {
    color: var(--dark-warning) !important;
}

.dark-theme .last-updated {
    color: var(--dark-text-muted) !important;
}

/* ---- Additional generic overrides for remaining light-theme colors ---- */
.dark-theme .unassigned-ingredients {
    background: rgba(243, 156, 18, 0.1) !important;
    border-color: var(--dark-warning) !important;
}

.dark-theme .unassigned-ingredients h3 {
    color: var(--dark-warning) !important;
}

.dark-theme [style*="color:#155724"],
.dark-theme [style*="color: #155724"] {
    color: var(--dark-success) !important;
}

.dark-theme [style*="color:#721c24"],
.dark-theme [style*="color: #721c24"] {
    color: var(--dark-danger) !important;
}

.dark-theme [style*="color:#999"],
.dark-theme [style*="color: #999"] {
    color: var(--dark-text-muted) !important;
}

.dark-theme [style*="background:#d4edda"],
.dark-theme [style*="background: #d4edda"],
.dark-theme [style*="background-color:#d4edda"],
.dark-theme [style*="background-color: #d4edda"] {
    background: rgba(46, 204, 113, 0.15) !important;
}

.dark-theme [style*="background:#f8d7da"],
.dark-theme [style*="background: #f8d7da"],
.dark-theme [style*="background-color:#f8d7da"],
.dark-theme [style*="background-color: #f8d7da"] {
    background: rgba(231, 76, 60, 0.15) !important;
}

.dark-theme [style*="background:#fff3cd"],
.dark-theme [style*="background: #fff3cd"],
.dark-theme [style*="background-color:#fff3cd"],
.dark-theme [style*="background-color: #fff3cd"] {
    background: rgba(243, 156, 18, 0.15) !important;
}

.dark-theme [style*="background:#e3f2fd"],
.dark-theme [style*="background: #e3f2fd"],
.dark-theme [style*="background-color:#e3f2fd"],
.dark-theme [style*="background-color: #e3f2fd"] {
    background: rgba(212, 165, 116, 0.1) !important;
}

.dark-theme [style*="background:#eee"],
.dark-theme [style*="background: #eee"],
.dark-theme [style*="background-color:#eee"],
.dark-theme [style*="background-color: #eee"] {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme [style*="background:#f5f5f5"],
.dark-theme [style*="background: #f5f5f5"],
.dark-theme [style*="background-color:#f5f5f5"],
.dark-theme [style*="background-color: #f5f5f5"] {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme [style*="background:#f8f9fa"],
.dark-theme [style*="background: #f8f9fa"],
.dark-theme [style*="background-color:#f8f9fa"],
.dark-theme [style*="background-color: #f8f9fa"] {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme [style*="background:#f0f0f0"],
.dark-theme [style*="background: #f0f0f0"] {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme [style*="border-bottom:1px solid #eee"],
.dark-theme [style*="border-bottom: 1px solid #eee"] {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme [style*="border-color:#eee"],
.dark-theme [style*="border-color: #eee"] {
    border-color: var(--dark-border) !important;
}

/* ---- Passthrough Editor Page ---- */
.dark-theme .item-entry {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .item-entry:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .item-entry.active {
    background: rgba(212, 165, 116, 0.15) !important;
    border-left-color: var(--dark-accent) !important;
}

.dark-theme .item-entry .name {
    color: var(--dark-text-primary) !important;
}

.dark-theme .item-entry .meta {
    color: var(--dark-text-muted) !important;
}

.dark-theme .item-entry .action-btn {
    background: var(--dark-bg-tertiary) !important;
    border-color: var(--dark-border) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .item-entry .action-btn:hover {
    background: var(--dark-accent) !important;
    color: #fff !important;
}

.dark-theme .item-entry .action-btn.delete:hover {
    background: rgba(231, 76, 60, 0.2) !important;
    color: var(--dark-danger) !important;
}

.dark-theme .cost-method-fields {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .help-text {
    color: var(--dark-text-muted) !important;
}

.dark-theme .info-box {
    background: rgba(52, 152, 219, 0.15) !important;
    border-color: rgba(52, 152, 219, 0.3) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .info-box h4 {
    color: var(--dark-text-primary) !important;
}

.dark-theme .unit-arrow {
    color: var(--dark-text-muted) !important;
}

.dark-theme .small-label {
    color: var(--dark-text-muted) !important;
}

.dark-theme .ingredient-info {
    background: rgba(46, 204, 113, 0.1) !important;
    border-color: rgba(46, 204, 113, 0.25) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .ingredient-info .label {
    color: var(--dark-text-muted) !important;
}

.dark-theme .ingredient-info .value {
    color: var(--dark-text-primary) !important;
}

.dark-theme .cost-preview {
    background: rgba(243, 156, 18, 0.1) !important;
    border-color: rgba(243, 156, 18, 0.25) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .btn-secondary {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .btn-secondary:hover {
    background: var(--dark-bg-card) !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .btn-primary {
    background: var(--dark-accent) !important;
    color: #fff !important;
}

.dark-theme .btn-primary:hover {
    opacity: 0.9;
}

/* Scrollbar */
.dark-theme ::-webkit-scrollbar {
    width: 8px;
    height: 8px;
}

.dark-theme ::-webkit-scrollbar-track {
    background: var(--dark-bg-secondary);
}

.dark-theme ::-webkit-scrollbar-thumb {
    background: var(--dark-border);
    border-radius: 4px;
}

.dark-theme ::-webkit-scrollbar-thumb:hover {
    background: var(--dark-text-muted);
}

/* Chart container overflow constraints - prevent oversized charts from
   breaking page layout. Scrollable containers for dynamic-height charts. */
.chart-container {
    min-height: 200px;
    max-width: 100%;
    overflow: visible;
}
.chart-container .js-plotly-plot,
.chart-container .plotly-graph-div {
    width: 100% !important;
    max-width: 100% !important;
}
.chart-container .svg-container {
    width: 100% !important;
    max-width: 100% !important;
}
.chart-container .main-svg {
    max-width: 100% !important;
}

/* Plotly charts - dark background is handled by updatePlotlyCharts()
   in global-menu.js via Plotly.relayout() with paper_bgcolor/plot_bgcolor.
   Do NOT use CSS background on SVG elements - it paints on top of SVG
   content and hides all chart elements. */

/* ============================================================================
   SERVER LOADING OVERLAY
   ============================================================================ */

.server-loading-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    z-index: 99999;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: var(--dark-bg-primary, #0a0e12);
    transition: opacity 0.4s ease;
}

.server-loading-overlay.fade-out {
    opacity: 0;
    pointer-events: none;
}

.server-loading-overlay .loading-spinner {
    width: 48px;
    height: 48px;
    border: 4px solid rgba(160, 171, 182, 0.25);
    border-top-color: var(--dark-accent, #e5b584);
    border-radius: 50%;
    animation: serverLoadingSpin 0.8s linear infinite;
}

.server-loading-overlay .loading-status {
    margin-top: 24px;
    font-size: 15px;
    font-weight: 500;
    color: var(--dark-text-primary, #f0f2f5);
}

.server-loading-overlay .loading-progress-track {
    margin-top: 16px;
    width: 220px;
    height: 4px;
    background: rgba(160, 171, 182, 0.15);
    border-radius: 2px;
    overflow: hidden;
}

.server-loading-overlay .loading-progress-bar {
    height: 100%;
    width: 0%;
    background: var(--dark-accent, #e5b584);
    border-radius: 2px;
    transition: width 1s ease-out;
}

.server-loading-overlay .loading-elapsed {
    margin-top: 10px;
    font-size: 12px;
    color: var(--dark-text-muted, #94a0ad);
}

@keyframes serverLoadingSpin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

/* ============================================================================
   SLIDE-OUT MENU TRAY
   ============================================================================ */

/* Menu toggle button (left edge arrow tab) */
.menu-toggle {
    position: fixed;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    width: 18px;
    height: 50px;
    border-radius: 0 8px 8px 0;
    background: var(--dark-bg-tertiary);
    border: 1px solid var(--dark-border);
    border-left: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: width 0.2s ease, background 0.2s ease, opacity 0.3s ease;
    z-index: 11002;
    padding: 0;
    opacity: 0.5;
}

.menu-toggle:hover {
    width: 26px;
    background: var(--dark-accent);
    opacity: 1;
}

.menu-toggle:active {
    width: 22px;
}

.menu-toggle svg {
    width: 14px;
    height: 14px;
}

/* Hide menu toggle when tray is open */
.menu-toggle.hidden {
    opacity: 0;
    pointer-events: none;
}

/* Slide-out tray */
.slide-menu {
    position: fixed;
    top: 0;
    left: 0;
    width: 280px;
    height: 100vh;
    background: var(--dark-bg-secondary);
    border-right: 1px solid var(--dark-border);
    transform: translateX(-100%);
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 11001;
    display: flex;
    flex-direction: column;
    box-shadow: 4px 0 20px var(--dark-shadow);
}

.slide-menu.open {
    transform: translateX(0);
}

/* Menu header */
.slide-menu-header {
    padding: 20px;
    background: var(--dark-gradient);
    display: flex;
    align-items: center;
    gap: 12px;
}

.slide-menu-header .menu-logo {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.2);
    display: flex;
    align-items: center;
    justify-content: center;
}

.slide-menu-header .menu-logo svg {
    width: 40px;
    height: 40px;
}

.slide-menu-header .menu-title {
    flex: 1;
}

.slide-menu-header h2 {
    margin: 0;
    font-size: 18px;
    color: #fff;
    font-weight: 600;
}

.slide-menu-header p {
    margin: 4px 0 0;
    font-size: 12px;
    color: rgba(255, 255, 255, 0.8);
}

/* Close button in menu */
.slide-menu-close {
    background: rgba(255, 255, 255, 0.2);
    border: none;
    border-radius: 6px;
    padding: 8px;
    cursor: pointer;
    transition: background 0.2s;
    display: flex;
    align-items: center;
    justify-content: center;
}

.slide-menu-close:hover {
    background: rgba(255, 255, 255, 0.3);
}

.slide-menu-close svg {
    width: 20px;
    height: 20px;
    fill: #fff;
}

/* Menu navigation list */
.slide-menu-nav {
    flex: 1;
    overflow-y: auto;
    padding: 16px 12px;
}

.slide-menu-nav a {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    color: var(--dark-text-secondary) !important;
    text-decoration: none !important;
    border-radius: 10px;
    margin-bottom: 4px;
    transition: all 0.2s;
    font-size: 14px;
    font-weight: 500;
}

.slide-menu-nav a:hover {
    background: var(--dark-bg-tertiary);
    color: var(--dark-text-primary) !important;
}

.slide-menu-nav a.active {
    background: rgba(46, 134, 171, 0.2);
    color: var(--dark-accent) !important;
}

.slide-menu-nav a svg {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
    opacity: 0.7;
}

.slide-menu-nav a:hover svg,
.slide-menu-nav a.active svg {
    opacity: 1;
}

/* Menu section divider */
.slide-menu-divider {
    height: 1px;
    background: var(--dark-border);
    margin: 12px 16px;
}

.slide-menu-section {
    padding: 8px 16px;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: var(--dark-text-muted);
}

/* Menu footer with theme toggle */
.slide-menu-footer {
    padding: 16px;
    border-top: 1px solid var(--dark-border);
}

/* Page-specific action buttons rescued from hidden nav-bar */
.slide-menu-action-btn {
    width: 100%;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
    margin-bottom: 10px;
    background: var(--dark-bg-tertiary);
    border: 1px solid var(--dark-border);
    border-radius: 10px;
    color: var(--dark-text-primary);
    cursor: pointer;
    transition: all 0.2s;
    font-size: 14px;
}

.slide-menu-action-btn:hover {
    background: var(--dark-bg-card);
    border-color: var(--dark-accent);
}

.slide-menu-action-btn svg {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
}

.slide-menu-action-btn.is-loading {
    opacity: 0.7;
    cursor: wait;
}

.slide-menu-action-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}

.slide-menu-action-btn.is-loading svg {
    animation: menuSpin 1s linear infinite;
}

@keyframes menuSpin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

.theme-toggle-btn {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 16px;
    background: var(--dark-bg-tertiary);
    border: 1px solid var(--dark-border);
    border-radius: 10px;
    color: var(--dark-text-primary);
    cursor: pointer;
    transition: all 0.2s;
    font-size: 14px;
}

.theme-toggle-btn:hover {
    background: var(--dark-bg-card);
    border-color: var(--dark-accent);
}

.theme-toggle-btn .theme-icon {
    width: 20px;
    height: 20px;
    margin-right: 10px;
}

.theme-toggle-switch {
    width: 44px;
    height: 24px;
    background: var(--dark-border);
    border-radius: 12px;
    position: relative;
    transition: background 0.2s;
}

.theme-toggle-switch::after {
    content: '';
    position: absolute;
    width: 18px;
    height: 18px;
    background: #fff;
    border-radius: 50%;
    top: 3px;
    left: 3px;
    transition: transform 0.2s;
}

.dark-theme .theme-toggle-switch {
    background: var(--dark-accent);
}

.dark-theme .theme-toggle-switch::after {
    transform: translateX(20px);
}

/* Hover zone for mouse-triggered opening */
.menu-hover-zone {
    position: fixed;
    top: 0;
    left: 0;
    width: 20px;
    height: 100vh;
    z-index: 11000;
}

/* Backdrop for closing menu when clicking outside */
.slide-menu-backdrop {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background: rgba(0, 0, 0, 0.5);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s, visibility 0.3s;
    z-index: 11000;
}

.slide-menu-backdrop.visible {
    opacity: 1;
    visibility: visible;
}

/* ============================================================================
   CHATBOT DARK THEME ADJUSTMENTS
   ============================================================================ */

/* Use html.dark-theme / body.dark-theme (specificity 0,1,1) to beat
   chatbot.css :root (0,1,0) which loads later and would otherwise
   reset these chat variables back to their light-theme values */
html.dark-theme, body.dark-theme {
    --chat-white: var(--dark-bg-card);
    --chat-light: var(--dark-bg-tertiary);
    --chat-dark: var(--dark-text-primary);
    --chat-gray: #d0d8e0;
    --chat-border: var(--dark-border);
}

.dark-theme .chatbot-widget {
    background: var(--dark-bg-secondary) !important;
}

.dark-theme .chatbot-messages {
    background: var(--dark-bg-primary) !important;
}

.dark-theme .chat-message-content {
    background: var(--dark-bg-card) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .chat-message.user .chat-message-content {
    background: var(--dark-accent) !important;
    color: #2d1a0a !important;
}

.dark-theme .chatbot-input-area {
    background: var(--dark-bg-secondary) !important;
    border-top-color: var(--dark-border) !important;
}

.dark-theme .chatbot-input {
    background: var(--dark-bg-tertiary) !important;
    border-color: var(--dark-border) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .chatbot-input::selection {
    background: rgba(212, 165, 116, 0.45) !important;
    color: #fff !important;
}

.dark-theme .chatbot-input::-moz-selection {
    background: rgba(212, 165, 116, 0.45) !important;
    color: #fff !important;
}

.dark-theme .chat-inline-debug-report {
    background: var(--dark-bg-card) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .chatbot-input:focus {
    border-color: var(--dark-accent) !important;
}

.dark-theme .chat-welcome {
    color: var(--dark-text-primary);
}

.dark-theme .chat-welcome h4 {
    color: var(--dark-text-primary) !important;
}

.dark-theme .chat-welcome p {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .chatbot-history {
    background: var(--dark-bg-secondary) !important;
    border-right-color: var(--dark-border) !important;
}

.dark-theme .chatbot-history-header {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .chatbot-history-header h4 {
    color: var(--dark-text-primary) !important;
}

.dark-theme .chatbot-history-item:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .chatbot-history-item h5 {
    color: var(--dark-text-primary) !important;
}

.dark-theme .chatbot-history-item p {
    color: var(--dark-text-muted) !important;
}

/* Chat tables in dark mode */
.dark-theme .chat-table-container {
    background: var(--dark-bg-card) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .chat-table thead {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .chat-table th {
    color: var(--dark-text-primary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .chat-table td {
    color: var(--dark-text-secondary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .chat-table tbody tr:hover {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .chat-table tbody tr:nth-child(even) {
    background: rgba(255, 255, 255, 0.02) !important;
}

/* Markdown tables inside chat messages */
.dark-theme .chat-message-content .markdown-content .md-table th {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .chat-message-content .markdown-content .md-table td {
    border-bottom-color: var(--dark-border) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .chat-message-content .markdown-content .md-table tr:hover {
    background: var(--dark-bg-tertiary) !important;
}

/* Message action buttons (copy, etc.) on user messages */
.dark-theme .chat-message.user .message-action-btn:hover {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-accent) !important;
}

/* Inline code in chat messages */
.dark-theme .chat-message-content .markdown-content code {
    background: rgba(255, 255, 255, 0.08) !important;
}

/* Findings data panel */
.dark-theme .findings-data-content {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-secondary) !important;
}

/* Chat search input */
.dark-theme .chatbot-search-input {
    background: var(--dark-bg-tertiary) !important;
    border-color: var(--dark-border) !important;
    color: var(--dark-text-primary) !important;
}

/* Chat typing indicator */
.dark-theme .chat-typing {
    background: var(--dark-bg-card) !important;
}

/* Chat graphs in dark mode */
.dark-theme .chat-graph {
    background: var(--dark-bg-card) !important;
}

/* Recipe proposal cards in dark mode */
.dark-theme .chat-recipe-proposal {
    background: var(--dark-bg-card) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .proposal-actions {
    background: var(--dark-bg-tertiary) !important;
    border-top-color: var(--dark-border) !important;
}

.dark-theme .recipe-card-form {
    background: var(--dark-bg-card) !important;
}

.dark-theme .recipe-card-form input,
.dark-theme .recipe-card-form select,
.dark-theme .recipe-card-form textarea {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .recipe-card-form label {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .proposal-message {
    background: rgba(46, 134, 171, 0.08) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .proposal-cost-display {
    background: var(--dark-bg-tertiary) !important;
    border-top-color: var(--dark-border) !important;
}

.dark-theme .proposal-stack-nav {
    background: var(--dark-bg-tertiary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .ingredient-row {
    background: var(--dark-bg-tertiary) !important;
}

.dark-theme .delete-proposal-content {
    color: var(--dark-text-primary) !important;
}

.dark-theme .delete-warning h4 {
    color: var(--dark-text-primary) !important;
}

.dark-theme .delete-warning p {
    color: var(--dark-text-secondary) !important;
}

/* Cooldown indicator - hardcoded #856404 is invisible on dark backgrounds */
.dark-theme .chat-cooldown {
    background: rgba(255, 171, 46, 0.12) !important;
    color: var(--dark-warning) !important;
}

.dark-theme .chat-cooldown .cooldown-time {
    color: var(--dark-warning) !important;
}

/* Findings descriptions and summaries - boost from chat-gray to brighter */
.dark-theme .findings-item-desc {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .findings-summary {
    color: var(--dark-text-secondary) !important;
}

.dark-theme .findings-category {
    color: var(--dark-text-muted) !important;
}

/* Tool call indicators in dark mode */
.dark-theme .chat-tool-call {
    color: var(--dark-text-secondary) !important;
    background: rgba(46, 134, 171, 0.08) !important;
}

/* Nav card message text */
.dark-theme .nav-card-message {
    color: var(--dark-text-secondary) !important;
}

/* Choice prompt descriptions */
.dark-theme .choice-btn-desc {
    color: var(--dark-text-secondary) !important;
}

/* Page change notice */
.dark-theme .chat-page-notice {
    color: var(--dark-text-secondary) !important;
}

/* Loading tip text */
.dark-theme .loading-tip {
    color: var(--dark-text-muted) !important;
}

/* ============================================================================
   HIDE EXISTING INLINE NAV (replaced by slide-out menu)
   ============================================================================ */

/* Hide the original inline navigation links */
.nav-links,
.nav-bar {
    display: none !important;
}

/* ============================================================================
   RESPONSIVE ADJUSTMENTS
   ============================================================================ */

@media (max-width: 768px) {
    .slide-menu {
        width: 100%;
    }

    .menu-toggle {
        left: 12px;
        width: 44px;
        height: 44px;
    }

    header {
        padding: 15px 20px !important;
        flex-direction: column;
        align-items: flex-start !important;
        gap: 15px !important;
    }

    header h1 {
        font-size: 1.4rem !important;
        line-height: 1.2 !important;
    }

    header p {
        font-size: 0.85rem !important;
    }
}

/* ============================================================================
   SCROLL-TRIGGERED ENTRANCE ANIMATIONS (applied globally to all pages)
   ============================================================================ */

/* Elements only hide once JS has set up scroll animations.
   Without .js-animations-ready, content stays visible — prevents
   flash-of-invisible-content before JS loads. */
.js-animations-ready .chart-container,
.js-animations-ready .table-container,
.js-animations-ready .section,
.js-animations-ready .data-panel,
.js-animations-ready .stats-panel {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.7s cubic-bezier(0.4, 0, 0.2, 1),
                transform 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}

.js-animations-ready .summary-cards .card,
.js-animations-ready .card-grid .card,
.js-animations-ready .summary-card {
    opacity: 0;
    transform: translateY(20px) scale(0.97);
    transition: opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1),
                transform 0.5s cubic-bezier(0.4, 0, 0.2, 1),
                box-shadow 0.2s;
}

.js-animations-ready .section-title,
.js-animations-ready h2.section-title {
    opacity: 0;
    transform: translateX(-20px);
    transition: opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1),
                transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Animated-in state */
.chart-container.animate-in,
.table-container.animate-in,
.section.animate-in,
.data-panel.animate-in,
.stats-panel.animate-in {
    opacity: 1;
    transform: translateY(0);
}

.summary-cards .card.animate-in,
.card-grid .card.animate-in,
.summary-card.animate-in {
    opacity: 1;
    transform: translateY(0) scale(1);
}

.section-title.animate-in,
h2.section-title.animate-in {
    opacity: 1;
    transform: translateX(0);
}

/* ---- Chart content reveal (period switching only) ---- */
/* After the initial page reveal (.page-ready), charts swapped during period
   switching start hidden and fade in when Plotly finishes rendering
   (hookPlotlyNewPlot adds .chart-rendered).  This does NOT apply to
   the initial page load — the container-level fade handles that. */
body.page-ready .chart-container .js-plotly-plot:not(.chart-rendered) {
    opacity: 0;
    transform: scale(0.96);
    transition: opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1),
                transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

body.page-ready .chart-container .js-plotly-plot.chart-rendered {
    opacity: 1;
    transform: scale(1);
}

/* Period-switch chart transition: fade out before swap, fade in after */
.chart-container.chart-switching .js-plotly-plot {
    opacity: 0 !important;
    transform: scale(0.96) !important;
    transition: opacity 0.2s ease-out, transform 0.2s ease-out !important;
}

/* Stagger delays for chart reveal during period switching */
.chart-container[data-chart-index="1"] .js-plotly-plot { transition-delay: 0.06s; }
.chart-container[data-chart-index="2"] .js-plotly-plot { transition-delay: 0.12s; }
.chart-container[data-chart-index="3"] .js-plotly-plot { transition-delay: 0.18s; }
.chart-container[data-chart-index="4"] .js-plotly-plot { transition-delay: 0.24s; }
.chart-container[data-chart-index="5"] .js-plotly-plot { transition-delay: 0.30s; }
.chart-container[data-chart-index="6"] .js-plotly-plot { transition-delay: 0.36s; }

/* Disable animations for users who prefer reduced motion */
@media (prefers-reduced-motion: reduce) {
    .js-animations-ready .chart-container,
    .js-animations-ready .table-container,
    .js-animations-ready .section,
    .js-animations-ready .data-panel,
    .js-animations-ready .stats-panel,
    .js-animations-ready .summary-cards .card,
    .js-animations-ready .card-grid .card,
    .js-animations-ready .summary-card,
    .js-animations-ready .section-title,
    .js-animations-ready h2.section-title {
        opacity: 1 !important;
        transform: none !important;
        transition: box-shadow 0.2s !important;
    }

    body.page-ready .chart-container .js-plotly-plot,
    body.page-ready .chart-container .js-plotly-plot.chart-rendered {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }

    /* Page reveal: no transition, just show immediately */
    body.page-ready .container {
        transition: none !important;
    }
}

/* ============================================================================
   SANKEY FILTER PANEL
   ============================================================================ */

/* Filter toggle button */
.sankey-filter-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 8px 14px;
    border-radius: 8px;
    border: 1px solid var(--dark-border, #2f3944);
    background: var(--dark-bg-tertiary, #252d3d);
    color: var(--dark-text-secondary, #bfc8d1);
    cursor: pointer;
    font-size: 13px;
    font-weight: 500;
    transition: all 0.2s;
    white-space: nowrap;
}

.sankey-filter-btn:hover {
    background: var(--dark-accent, #D4A574) !important;
    color: #fff !important;
    border-color: var(--dark-accent, #D4A574) !important;
}

/* Filter backdrop */
.sankey-filter-backdrop {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background: rgba(0, 0, 0, 0.5);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s, visibility 0.3s;
    z-index: 9990;
}

.sankey-filter-backdrop.visible {
    opacity: 1;
    visibility: visible;
}

/* Slide-out panel */
.sankey-filter-panel {
    position: fixed;
    top: 0;
    right: 0;
    width: 340px;
    height: 100vh;
    background: var(--dark-bg-secondary, #1a1f2e);
    border-left: 1px solid var(--dark-border, #2f3944);
    transform: translateX(100%);
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 9991;
    display: flex;
    flex-direction: column;
    box-shadow: -4px 0 20px rgba(0, 0, 0, 0.4);
}

.sankey-filter-panel.open {
    transform: translateX(0);
}

.sankey-filter-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border-bottom: 1px solid var(--dark-border, #2f3944);
}

.sankey-filter-header h3 {
    margin: 0;
    font-size: 16px;
    color: var(--dark-text-primary, #e7e9ea);
}

.sankey-filter-close {
    background: none;
    border: none;
    color: var(--dark-text-secondary, #bfc8d1);
    font-size: 24px;
    cursor: pointer;
    padding: 4px 8px;
    line-height: 1;
    border-radius: 4px;
    transition: all 0.2s;
}

.sankey-filter-close:hover {
    background: var(--dark-bg-tertiary, #252d3d) !important;
    color: var(--dark-text-primary, #e7e9ea) !important;
}

.sankey-filter-body {
    flex: 1;
    overflow-y: auto;
    padding: 16px 20px;
    display: flex;
    flex-direction: column;
    gap: 14px;
}

/* Search input */
.sankey-filter-search {
    width: 100%;
    padding: 10px 12px;
    border-radius: 8px;
    border: 1px solid var(--dark-border, #2f3944);
    background: var(--dark-bg-tertiary, #252d3d);
    color: var(--dark-text-primary, #e7e9ea);
    font-size: 13px;
    box-sizing: border-box;
}

.sankey-filter-search::placeholder {
    color: var(--dark-text-muted, #6e767d);
}

.sankey-filter-search:focus {
    outline: none;
    border-color: var(--dark-accent, #D4A574);
}

/* Range slider section */
.sankey-filter-range {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.sankey-filter-range label {
    font-size: 12px;
    color: var(--dark-text-secondary, #bfc8d1);
}

.sankey-range-inputs {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.sankey-range-inputs input[type="range"] {
    width: 100%;
    -webkit-appearance: none;
    height: 4px;
    background: var(--dark-border, #2f3944);
    border-radius: 2px;
    outline: none;
}

.sankey-range-inputs input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background: var(--dark-accent, #D4A574);
    cursor: pointer;
    border: 2px solid var(--dark-bg-secondary, #1a1f2e);
}

/* Toggle checkboxes */
.sankey-filter-toggles {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.sankey-filter-toggles label {
    font-size: 13px;
    color: var(--dark-text-secondary, #bfc8d1);
    display: flex;
    align-items: center;
    gap: 8px;
    cursor: pointer;
}

.sankey-filter-toggles input[type="checkbox"] {
    width: 16px;
    height: 16px;
    accent-color: var(--dark-accent, #D4A574);
}

/* Action buttons */
.sankey-filter-actions {
    display: flex;
    gap: 8px;
}

.sankey-action-btn {
    flex: 1;
    padding: 8px;
    border-radius: 6px;
    border: 1px solid var(--dark-border, #2f3944);
    background: var(--dark-bg-tertiary, #252d3d);
    color: var(--dark-text-secondary, #bfc8d1);
    font-size: 12px;
    cursor: pointer;
    transition: all 0.2s;
}

.sankey-action-btn:hover {
    background: var(--dark-accent, #D4A574) !important;
    color: #fff !important;
    border-color: var(--dark-accent, #D4A574) !important;
}

/* Scrollable ingredient list */
.sankey-filter-list {
    flex: 1;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-height: 200px;
}

.sankey-filter-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    border-radius: 6px;
    cursor: pointer;
    transition: background 0.15s;
    font-size: 13px;
    color: var(--dark-text-primary, #e7e9ea);
}

.sankey-filter-item:hover {
    background: var(--dark-bg-tertiary, #252d3d);
}

.sankey-filter-item input[type="checkbox"] {
    width: 16px;
    height: 16px;
    accent-color: var(--dark-accent, #D4A574);
    flex-shrink: 0;
}

.sankey-item-name {
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.sankey-item-cost {
    color: var(--dark-text-muted, #6e767d);
    font-size: 12px;
    flex-shrink: 0;
}

.sankey-item-badges {
    display: flex;
    gap: 4px;
    flex-shrink: 0;
}

.sankey-badge {
    font-size: 9px;
    padding: 1px 4px;
    border-radius: 3px;
    font-weight: 600;
    text-transform: uppercase;
}

.sankey-badge.est {
    background: rgba(158, 158, 158, 0.2);
    color: #9E9E9E;
}

.sankey-badge.sr {
    background: rgba(0, 172, 165, 0.2);
    color: #00ACA5;
}

@media (max-width: 768px) {
    .sankey-filter-panel {
        width: 100%;
    }
}

/* ============================================================================
   DEBUG REPORT MODAL - Dark theme overrides
   ============================================================================ */

.dark-theme .debug-modal {
    background: var(--dark-bg-secondary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .debug-modal-header {
    border-bottom-color: var(--dark-border) !important;
}

.dark-theme .debug-modal-footer {
    border-top-color: var(--dark-border) !important;
}

.dark-theme .debug-form-group textarea {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .debug-form-group textarea:focus {
    border-color: var(--dark-accent) !important;
}

.dark-theme .debug-section-item {
    background: var(--dark-bg-tertiary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .debug-btn-cancel {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-secondary) !important;
}

.dark-theme .debug-btn-cancel:hover {
    background: var(--dark-bg-card) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .debug-section-item-header .toggle-notes {
    background: none !important;
    border: none !important;
    color: var(--dark-text-muted) !important;
}

.dark-theme .debug-section-item-header .toggle-notes:hover {
    color: var(--dark-accent) !important;
    background: transparent !important;
}

.dark-theme .debug-btn-save {
    background: var(--dark-accent) !important;
    color: #fff !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .debug-btn-save:hover {
    opacity: 0.9;
    background: var(--dark-accent) !important;
    color: #fff !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .debug-btn-launch {
    background: var(--dark-success) !important;
    color: #fff !important;
    border-color: var(--dark-success) !important;
}

.dark-theme .debug-btn-launch:hover {
    opacity: 0.9;
    background: var(--dark-success) !important;
    color: #fff !important;
    border-color: var(--dark-success) !important;
}

.dark-theme .debug-btn-capture {
    background: transparent !important;
    color: var(--dark-accent) !important;
    border-color: var(--dark-accent) !important;
}

.dark-theme .debug-btn-capture:hover {
    background: var(--dark-accent) !important;
    color: #fff !important;
}

.dark-theme .debug-btn-upload {
    background: transparent !important;
    color: var(--dark-text-secondary) !important;
    border-color: var(--dark-border) !important;
    border-style: dashed !important;
}

.dark-theme .debug-btn-upload:hover {
    border-color: var(--dark-accent) !important;
    color: var(--dark-accent) !important;
    background: transparent !important;
}

.dark-theme .debug-modal-close {
    background: none !important;
    border: none !important;
}

.dark-theme .debug-modal-close:hover {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .debug-screenshot-remove {
    background: rgba(231, 76, 60, 0.85) !important;
    color: #fff !important;
    border: none !important;
}

.dark-theme .debug-lightbox-close {
    background: var(--dark-bg-secondary) !important;
    border: 1px solid var(--dark-border) !important;
    color: var(--dark-text-primary) !important;
}

.dark-theme .debug-lightbox-close:hover {
    background: var(--dark-danger) !important;
    color: #fff !important;
}

.dark-theme .debug-section-chip-remove {
    background: none !important;
    border: none !important;
    color: var(--dark-text-muted) !important;
}

.dark-theme .debug-section-chip-remove:hover {
    color: var(--dark-danger) !important;
    background: none !important;
}

.dark-theme .debug-severity-select {
    background: var(--dark-bg-tertiary) !important;
    color: var(--dark-text-primary) !important;
    border-color: var(--dark-border) !important;
}

.dark-theme .debug-severity-select:focus {
    border-color: var(--dark-accent) !important;
}
