/* ============================================================
   easymealz-themes.css — 4-axis taxonomy visual system
   Write to disk at: frontend/css/easymealz-themes.css
   Served at:        /static/css/easymealz-themes.css
   Loads AFTER main.css. ALL dimensions in rem. ZERO px.
   References (never redefines) main.css tokens:
     --grad-warm-mesh, --radius-soft, --radius-pill, --radius-sm/xl,
     --shadow-soft, --shadow-elevated, --font-display,
     --color-*, --bg-*, --text-*, --border-color,
     --transition-fast/base, keyframes emPulseDot, emSkel.
   ============================================================ */

/* ---------- 1. NEW --mz-* axis tokens (light) ---------- */
:root {
  /* Cuisine / Ethnicity — violet */
  --mz-axis-ethnicity:        #7c3aed;
  --mz-axis-ethnicity-bg:     color-mix(in oklab, #7c3aed 12%, var(--bg-surface));
  --mz-axis-ethnicity-border: color-mix(in oklab, #7c3aed 30%, transparent);
  --mz-axis-ethnicity-fg:     #6d28d9;

  /* Human Activity — blue */
  --mz-axis-activity:         #2563eb;
  --mz-axis-activity-bg:      color-mix(in oklab, #2563eb 12%, var(--bg-surface));
  --mz-axis-activity-border:  color-mix(in oklab, #2563eb 30%, transparent);
  --mz-axis-activity-fg:      #1d4ed8;

  /* Taste / Spice — red-orange (sits beside amber) */
  --mz-axis-taste:            #ea580c;
  --mz-axis-taste-bg:         color-mix(in oklab, #ea580c 13%, var(--bg-surface));
  --mz-axis-taste-border:     color-mix(in oklab, #ea580c 32%, transparent);
  --mz-axis-taste-fg:         #c2410c;

  /* Purchaser Goal — emerald (brand-accent family) */
  --mz-axis-goal:             #059669;
  --mz-axis-goal-bg:          color-mix(in oklab, #059669 13%, var(--bg-surface));
  --mz-axis-goal-border:      color-mix(in oklab, #059669 30%, transparent);
  --mz-axis-goal-fg:          #047857;

  /* Secondary supply tier (restaurant backfill) — neutral note */
  --mz-supply:                var(--text-secondary);
  --mz-supply-bg:             color-mix(in oklab, var(--text-secondary) 12%, var(--bg-surface));
  --mz-supply-border:         color-mix(in oklab, var(--text-secondary) 28%, transparent);

  /* spice-meter geometry */
  --mz-pip-w:   0.75rem;
  --mz-pip-h:   1.25rem;
  --mz-pip-gap: 0.25rem;

  /* the axis the user is currently dialing (set by JS) */
  --mz-active-axis: var(--color-primary);

  /* on-color text + glow for the FIXED brand fills (theme-invariant:
     they sit on --color-primary/accent/danger which do not change by theme) */
  --mz-on-primary:   #1f1300;
  --mz-on-accent:    #ffffff;
  --mz-on-danger:    #ffffff;
  --mz-primary-glow: rgba(245, 158, 11, 0.28);
}

.dark {
  --mz-axis-ethnicity:        #a78bfa;
  --mz-axis-ethnicity-bg:     color-mix(in oklab, #a78bfa 18%, var(--bg-surface));
  --mz-axis-ethnicity-border: color-mix(in oklab, #a78bfa 34%, transparent);
  --mz-axis-ethnicity-fg:     #c4b5fd;

  --mz-axis-activity:         #60a5fa;
  --mz-axis-activity-bg:      color-mix(in oklab, #60a5fa 18%, var(--bg-surface));
  --mz-axis-activity-border:  color-mix(in oklab, #60a5fa 34%, transparent);
  --mz-axis-activity-fg:      #93c5fd;

  --mz-axis-taste:            #fb923c;
  --mz-axis-taste-bg:         color-mix(in oklab, #fb923c 18%, var(--bg-surface));
  --mz-axis-taste-border:     color-mix(in oklab, #fb923c 34%, transparent);
  --mz-axis-taste-fg:         #fdba74;

  --mz-axis-goal:             #34d399;
  --mz-axis-goal-bg:          color-mix(in oklab, #34d399 18%, var(--bg-surface));
  --mz-axis-goal-border:      color-mix(in oklab, #34d399 34%, transparent);
  --mz-axis-goal-fg:          #6ee7b7;

  --mz-supply-bg:             color-mix(in oklab, var(--text-secondary) 18%, var(--bg-surface));
  --mz-supply-border:         color-mix(in oklab, var(--text-secondary) 34%, transparent);
}

/* ---------- 2. axis helper (modifier -> active local hue) ---------- */
.is-ethnicity { --mz-c: var(--mz-axis-ethnicity); --mz-c-bg: var(--mz-axis-ethnicity-bg); --mz-c-border: var(--mz-axis-ethnicity-border); --mz-c-fg: var(--mz-axis-ethnicity-fg); }
.is-activity  { --mz-c: var(--mz-axis-activity);  --mz-c-bg: var(--mz-axis-activity-bg);  --mz-c-border: var(--mz-axis-activity-border);  --mz-c-fg: var(--mz-axis-activity-fg); }
.is-taste     { --mz-c: var(--mz-axis-taste);     --mz-c-bg: var(--mz-axis-taste-bg);     --mz-c-border: var(--mz-axis-taste-border);     --mz-c-fg: var(--mz-axis-taste-fg); }
.is-goal      { --mz-c: var(--mz-axis-goal);      --mz-c-bg: var(--mz-axis-goal-bg);      --mz-c-border: var(--mz-axis-goal-border);      --mz-c-fg: var(--mz-axis-goal-fg); }

/* ---------- 3. Composer shell ---------- */
.mz-composer { display: flex; flex-direction: column; gap: 1rem; }
.mz-rails { display: flex; flex-direction: column; gap: 1rem; }

.mz-axis-rail {
  border: 0.0625rem solid var(--border-color);
  border-left: 0.1875rem solid var(--mz-c, var(--border-color));
  border-radius: var(--radius-soft);
  background: var(--bg-surface);
  padding: 0.875rem;
}
.mz-axis-rail-label {
  display: flex; align-items: center; gap: 0.5rem;
  font-size: 0.6875rem; font-weight: 600; text-transform: uppercase;
  letter-spacing: 0.12em; color: var(--text-secondary);
  margin-bottom: 0.625rem;
}
.mz-axis-rail-label::before {
  content: ''; width: 0.5rem; height: 0.5rem; border-radius: 50%;
  background: var(--mz-c, var(--text-secondary)); flex-shrink: 0;
}

/* chips row — scroll-snap on phone */
.mz-axis-track {
  display: flex; gap: 0.5rem; overflow-x: auto;
  scroll-snap-type: x mandatory; padding-bottom: 0.25rem;
}
.mz-axis-track::-webkit-scrollbar { height: 0.25rem; }

/* ---------- 4. axis-chip ---------- */
.mz-axis-chip {
  scroll-snap-align: start; flex: 0 0 auto;
  display: inline-flex; align-items: center; gap: 0.375rem;
  min-height: 2.75rem; padding: 0.5rem 0.875rem;
  border-radius: var(--radius-pill);
  border: 0.0625rem solid var(--border-color);
  background: var(--bg-surface); color: var(--text-primary);
  font-size: 0.8125rem; font-weight: 500; cursor: pointer;
  transition: transform var(--transition-fast),
              border-color var(--transition-fast),
              background-color var(--transition-fast);
}
.mz-axis-chip:hover { transform: translateY(-0.0625rem); border-color: var(--mz-c); }
.mz-axis-chip[aria-checked="true"] {
  background: var(--mz-c-bg); border-color: var(--mz-c-border); color: var(--mz-c-fg);
  box-shadow: inset 0 0 0 0.0625rem var(--mz-c-border);
}
.mz-axis-chip:active { transform: scale(0.985); }
.mz-axis-chip:disabled { opacity: 0.5; cursor: not-allowed; }

/* larger tile variant (sm+ grids) */
.mz-axis-card {
  min-height: 4.5rem; flex-direction: column; align-items: flex-start;
  gap: 0.25rem; border-radius: var(--radius-soft); text-align: left;
  padding: 0.75rem 0.875rem;
}

/* ---------- 5. spice meter ---------- */
.mz-spice-meter { display: inline-flex; align-items: center; gap: var(--mz-pip-gap); }
.mz-spice-pip {
  width: var(--mz-pip-w); height: var(--mz-pip-h);
  border-radius: var(--radius-sm);
  background: color-mix(in oklab, var(--mz-axis-taste) 18%, var(--bg-surface-alt));
  transition: background-color var(--transition-fast), box-shadow var(--transition-fast);
}
.mz-spice-pip.is-on { background: var(--mz-axis-taste); }
.mz-spice-pip.is-flame {
  background: var(--mz-axis-taste);
  box-shadow: 0 0 0.5rem color-mix(in oklab, var(--mz-axis-taste) 70%, transparent);
  animation: mzFlame 1.6s ease-in-out infinite;
}
@keyframes mzFlame {
  0%, 100% { box-shadow: 0 0 0.375rem color-mix(in oklab, var(--mz-axis-taste) 55%, transparent); }
  50%      { box-shadow: 0 0 0.75rem color-mix(in oklab, var(--mz-axis-taste) 85%, transparent); }
}
/* interactive: each pip is a 2.75rem touch button wrapping the visual pip */
.mz-spice-btn {
  min-width: 2.75rem; min-height: 2.75rem; display: inline-flex;
  align-items: center; justify-content: center; background: none;
  border: none; cursor: pointer; padding: 0;
}

/* ---------- 6. theme-pill (composed 4-axis result) ---------- */
.mz-theme-pill {
  position: sticky; top: 3.75rem; z-index: 10;
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.625rem;
  min-height: 3rem; padding: 0.625rem 1rem;
  border-radius: var(--radius-pill);
  background: var(--grad-warm-mesh), var(--bg-surface);
  border: 0.0625rem solid var(--border-color);
  box-shadow: var(--shadow-elevated);
}
.mz-theme-seg { display: inline-flex; align-items: center; gap: 0.375rem; font-size: 0.8125rem; font-weight: 600; color: var(--text-primary); }
.mz-theme-seg::before { content: ''; width: 0.5rem; height: 0.5rem; border-radius: 50%; background: var(--mz-c, var(--border-color)); }
.mz-theme-seg.is-empty { color: var(--text-secondary); font-weight: 500; }
.mz-theme-seg.is-empty::before { background: var(--border-color); }
.mz-theme-sep { color: var(--text-secondary); opacity: 0.5; }
.mz-theme-pill .mz-save { margin-left: auto; }
@keyframes mzCompose { 0% { transform: scale(0.99); } 60% { transform: scale(1.01); } 100% { transform: scale(1); } }
.mz-theme-pill.is-composing { animation: mzCompose var(--transition-base); }

/* ---------- 7. result grid + meal card ---------- */
.mz-result-grid { display: grid; grid-template-columns: 1fr; gap: 1rem; min-height: 14rem; }
.mz-meal-card {
  display: flex; flex-direction: column; gap: 0.75rem;
  padding: 1rem; border-radius: var(--radius-soft);
  background: var(--bg-surface); border: 0.0625rem solid var(--border-color);
  box-shadow: var(--shadow-soft);
  transition: box-shadow var(--transition-base), transform var(--transition-base), border-color var(--transition-base);
}
.mz-meal-card:hover { box-shadow: var(--shadow-elevated); transform: translateY(-0.125rem); border-color: var(--color-accent); }
.mz-meal-title { font-size: 1rem; font-weight: 600; color: var(--text-primary); line-height: 1.2; }
.mz-meal-desc { font-size: 0.8125rem; color: var(--text-secondary); line-height: 1.4; }
.mz-meal-tags { display: flex; flex-wrap: wrap; gap: 0.375rem; }
.mz-meal-macros { display: flex; gap: 0.875rem; font-size: 0.75rem; color: var(--text-secondary); }
.mz-meal-macros b { color: var(--text-primary); font-weight: 600; font-variant-numeric: tabular-nums; }
.mz-axis-tag {
  display: inline-flex; align-items: center; gap: 0.25rem;
  min-height: 1.5rem; padding: 0.125rem 0.5rem;
  border-radius: var(--radius-pill); font-size: 0.6875rem; font-weight: 600;
  background: var(--mz-c-bg); color: var(--mz-c-fg);
  border: 0.0625rem solid var(--mz-c-border);
}
.mz-axis-tag::before { content: ''; width: 0.375rem; height: 0.375rem; border-radius: 50%; background: var(--mz-c); }

/* ---------- 8. goal badge / plan / supply / robotic / kpi ---------- */
.mz-goal-badge {
  display: inline-flex; align-items: center; gap: 0.375rem;
  padding: 0.25rem 0.75rem; border-radius: var(--radius-pill);
  font-size: 0.75rem; font-weight: 600;
  background: var(--mz-axis-goal-bg); color: var(--mz-axis-goal-fg);
  border: 0.0625rem solid var(--mz-axis-goal-border);
}
.mz-plan-card {
  display: flex; flex-direction: column; gap: 0.875rem;
  padding: 1.25rem; border-radius: var(--radius-xl);
  background: var(--grad-warm-mesh), var(--bg-surface);
  border: 0.0625rem solid var(--border-color); box-shadow: var(--shadow-elevated);
  transition: transform var(--transition-base), box-shadow var(--transition-base);
}
.mz-plan-card:hover { transform: translateY(-0.125rem); box-shadow: var(--shadow-elevated); }
.mz-plan-card.is-featured { border-color: var(--color-primary); box-shadow: 0 0 0 0.0625rem var(--color-primary), var(--shadow-elevated); }
.mz-plan-name { font-family: var(--font-display); font-size: 1.25rem; font-weight: 600; color: var(--text-primary); line-height: 1.15; }
.mz-plan-price { font-size: 1.5rem; font-weight: 700; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.mz-plan-price small { font-size: 0.75rem; font-weight: 500; color: var(--text-secondary); }

/* supply badge: robotic vs partner */
.mz-supply-badge {
  display: inline-flex; align-items: center; gap: 0.375rem;
  padding: 0.125rem 0.625rem; border-radius: var(--radius-pill);
  font-size: 0.6875rem; font-weight: 600;
}
.mz-supply-badge.is-robotic {
  background: color-mix(in oklab, var(--color-accent) 12%, var(--bg-surface));
  color: var(--color-accent-hover);
  border: 0.0625rem solid color-mix(in oklab, var(--color-accent) 30%, transparent);
}
.mz-supply-badge.is-partner {
  background: var(--mz-supply-bg); color: var(--text-secondary);
  border: 0.0625rem solid var(--mz-supply-border);
}

.mz-robotic-pill {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.25rem 0.75rem; border-radius: var(--radius-pill);
  font-size: 0.75rem; font-weight: 600;
  background: color-mix(in oklab, var(--color-accent) 12%, var(--bg-surface));
  color: var(--color-accent-hover);
  border: 0.0625rem solid color-mix(in oklab, var(--color-accent) 30%, transparent);
}
.mz-robotic-pill::before {
  content: ''; width: 0.4rem; height: 0.4rem; border-radius: 50%;
  background: currentColor; animation: emPulseDot 1.6s ease-out infinite;
}
.mz-robotic-pill.is-fault { color: var(--color-danger); background: color-mix(in oklab, var(--color-danger) 12%, var(--bg-surface)); border-color: color-mix(in oklab, var(--color-danger) 30%, transparent); }
.mz-robotic-pill.is-idle  { color: var(--text-secondary); background: var(--mz-supply-bg); border-color: var(--mz-supply-border); }
.mz-robotic-pill.is-fault::before, .mz-robotic-pill.is-idle::before { animation: none; }

.mz-kpi-stat { display: flex; flex-direction: column; gap: 0.125rem; padding: 1rem; border: 0.0625rem solid var(--border-color); border-radius: var(--radius-soft); background: var(--bg-surface); }
.mz-kpi-num { font-size: 1.75rem; font-weight: 700; line-height: 1.1; font-variant-numeric: tabular-nums; color: var(--text-primary); }
.mz-kpi-label { font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--text-secondary); }

/* data-source badge */
.mz-data-badge {
  display: inline-flex; align-items: center; gap: 0.375rem;
  padding: 0.125rem 0.625rem; border-radius: var(--radius-pill);
  font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em;
  border: 0.0625rem solid var(--border-color); color: var(--text-secondary); background: var(--bg-surface-alt);
}
.mz-data-badge.is-live { color: var(--color-accent-hover); border-color: color-mix(in oklab, var(--color-accent) 30%, transparent); }

/* ---------- 9. section head / skeleton / empty ---------- */
.mz-section-head {
  font-family: var(--font-display); font-size: 1.5rem; font-weight: 600;
  letter-spacing: -0.01em; color: var(--text-primary); line-height: 1.1;
}
.mz-section-sub { font-size: 0.875rem; color: var(--text-secondary); line-height: 1.5; margin-top: 0.375rem; }
.mz-skeleton-card {
  height: 11rem; border-radius: var(--radius-soft);
  background: linear-gradient(90deg, var(--bg-surface-alt) 0%, color-mix(in oklab, var(--bg-surface-alt) 50%, transparent) 50%, var(--bg-surface-alt) 100%);
  background-size: 200% 100%; animation: emSkel 1.4s ease-in-out infinite;
}
.mz-empty {
  display: flex; flex-direction: column; align-items: center; gap: 0.75rem;
  text-align: center; padding: 2.5rem 1rem; color: var(--text-secondary);
}
.mz-empty i { font-size: 2rem; color: var(--text-secondary); opacity: 0.6; }

/* off-screen live region */
.mz-live { position: absolute; width: 0.0625rem; height: 0.0625rem; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* ---------- 10. focus + responsive + reduced motion ---------- */
.mz-composer :focus-visible,
.mz-meal-card :focus-visible,
.mz-plan-card :focus-visible,
.mz-axis-chip:focus-visible,
.mz-spice-btn:focus-visible {
  outline: 0.1875rem solid var(--color-accent);
  outline-offset: 0.125rem; border-radius: var(--radius-sm);
}

@media (min-width: 40rem) {
  .mz-axis-track { flex-wrap: wrap; overflow-x: visible; }
  .mz-result-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 64rem) {
  .mz-composer { display: grid; grid-template-columns: 20rem 1fr; align-items: start; gap: 1.5rem; }
  .mz-result-grid { grid-template-columns: repeat(3, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
  .mz-axis-chip, .mz-meal-card, .mz-theme-pill, .mz-plan-card,
  .mz-spice-pip.is-flame, .mz-robotic-pill::before, .mz-skeleton-card {
    animation: none !important; transition: none !important;
  }
}
