@import "tailwindcss";

@theme {
  /* Custom typefaces — Field Almanac */
  --font-display: var(--font-fraunces, "Georgia"), Georgia, serif;
  --font-sans: var(--font-manrope, system-ui), system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  --font-mono: var(--font-fragment-mono, "JetBrains Mono"), ui-monospace, SFMono-Regular, Menlo, monospace;

  /* Apple-inspired dark palette — sophisticated depth */
  --color-surface-50: #f5f5f7;
  --color-surface-100: #e8e8ed;
  --color-surface-200: #d2d2d7;
  --color-surface-300: #aeaeb5;
  --color-surface-400: #86868b;
  --color-surface-500: #6e6e73;
  --color-surface-600: #424245;
  --color-surface-700: #333336;
  --color-surface-800: #1d1d1f;
  --color-surface-900: #141417;
  --color-surface-950: #0a0a0c;

  /* Forest green — refined accent */
  --color-forest-50: #f0fdf4;
  --color-forest-100: #dcfce7;
  --color-forest-200: #bbf7d0;
  --color-forest-300: #86efac;
  --color-forest-400: #4ade80;
  --color-forest-500: #22c55e;
  --color-forest-600: #16a34a;
  --color-forest-700: #15803d;
  --color-forest-800: #166534;
  --color-forest-900: #14532d;

  /* Sage — secondary accent */
  --color-sage-50: #f6f7f6;
  --color-sage-100: #e8ebe8;
  --color-sage-200: #d4d9d3;
  --color-sage-300: #b3bfac;
  --color-sage-400: #8fa284;
  --color-sage-500: #6f8562;
  --color-sage-600: #57694e;
  --color-sage-700: #47543f;
  --color-sage-800: #3b4434;
  --color-sage-900: #313a2c;

  /* Warm gold — premium highlight */
  --color-gold-50: #fefce8;
  --color-gold-100: #fef9c3;
  --color-gold-200: #fef08a;
  --color-gold-300: #fde047;
  --color-gold-400: #facc15;
  --color-gold-500: #eab308;
  --color-gold-600: #ca8a04;
  --color-gold-700: #a16207;
  --color-gold-800: #854d0e;
  --color-gold-900: #713f12;

  /* Warm red for errors/warnings */
  --color-warmred-50: #fef2f2;
  --color-warmred-100: #fee2e2;
  --color-warmred-500: #ef4444;
  --color-warmred-600: #dc2626;
  --color-warmred-700: #b91c1c;

  /* Citrus orange — IRD brand accent */
  --color-citrus-50: #fff7ed;
  --color-citrus-100: #ffedd5;
  --color-citrus-200: #fed7aa;
  --color-citrus-300: #fdba74;
  --color-citrus-400: #fb923c;
  --color-citrus-500: #f97316;
  --color-citrus-600: #ea580c;
  --color-citrus-700: #c2410c;
  --color-citrus-800: #9a3412;
  --color-citrus-900: #7c2d12;
}

/* Field Almanac palette — values are intentionally equal to the existing
 * --color-surface-50 (== --color-surface-2) and --color-surface-100
 * (== --color-surface-3). The new tokens live in :root (not @theme) so
 * they don't collide with the existing @theme token names. The duplication
 * is intentional until the legacy @theme palette is consolidated. */
/* ─── Field Almanac palette (mobile-first / HIG Accessibility) ─── */
:root {
  /* Surfaces */
  --color-bg: #ffffff;
  --color-surface: #faf8f5;
  --color-surface-2: #f5f5f7;
  --color-surface-3: #e8e8ed;

  /* Text — all AAA on every surface (see design-tokens.test.ts) */
  --color-text: #1d1d1f;
  --color-text-muted: #424245;
  --color-text-faint: #5e5e63;    /* AA on every surface (>= 5.28:1) */

  /* Accent / status — darkened to pass AAA on the surfaces they actually
   * appear on (bg, surface, and their -soft pill backgrounds). The darker
   * hues (green-900 / red-900 / amber-900) intentionally trade a touch of
   * vibrancy for legibility in outdoor / sun-glare conditions. */
  --color-accent: #14532d;        /* AAA on bg (9.11), surface (8.59), s2 (8.37), s3 (7.46) */
  --color-accent-2: #166534;      /* hover state — used as button background, NOT text */
  --color-accent-soft: #dcfce7;   /* pill background; accent text on it = 8.36:1 */
  --color-danger: #7f1d1d;        /* AAA on bg (10.02), surface (9.45), s2 (9.20), s3 (8.20) */
  --color-danger-soft: #fee2e2;
  --color-warning: #5e2a04;       /* AAA on bg (11.61), surface (10.95), s2 (10.66), s3 (9.51) */
  --color-warning-soft: #fef9c3;
  --color-success: #14532d;       /* mirrors accent — both are "positive" semantics */
  --color-success-soft: #dcfce7;
  --color-info: #1e3a8a;          /* AAA on every surface (8.48–10.36) */
  --color-info-soft: #dbeafe;
}

/* ─── Type scale (HIG Accessibility-tier) ─── */
:root {
  --text-display: 32px;
  --text-display--line-height: 1.15;
  --text-display--letter-spacing: -0.01em;

  --text-h1: 24px;
  --text-h1--line-height: 1.2;

  --text-h2: 19px;
  --text-h2--line-height: 1.3;

  --text-body: 18px;
  --text-body--line-height: 1.45;

  --text-label: 15px;
  --text-label--line-height: 1.3;
  --text-label--letter-spacing: 0.02em;

  --text-mono: 14px;
  --text-mono--line-height: 1.4;

  --text-meta: 13px;
  --text-meta--line-height: 1.4;
}

/* ─── Spacing (8pt grid) ─── */
:root {
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-6: 24px;
  --space-8: 32px;
  --space-12: 48px;
  --space-16: 64px;
}

/* ─── Motion ─── */
:root {
  --ease-apple: cubic-bezier(0.32, 0.72, 0, 1);
  --duration-fast: 150ms;
  --duration-base: 200ms;
  --duration-slow: 320ms;
}

/* ─── Base ─────────────────────────────────────────────────────── */

*, *::before, *::after {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color-scheme: light;
  caret-color: #1a4d2e;
}

body {
  font-family: var(--font-sans);
  background: #ffffff;
  background-attachment: fixed;
  color: #1a1a1a;
  min-height: 100vh;
}

/* Admin content area: warm cream instead of dark */
.admin-section {
  background: linear-gradient(180deg, #fdfaf6 0%, #f5f3ef 100%) !important;
}

/* Animated gradient background - light theme */
body::before {
  content: '';
  position: fixed;
  inset: 0;
  background: 
    radial-gradient(ellipse 80% 50% at 20% 40%, rgba(34, 197, 94, 0.06) 0%, transparent 50%),
    radial-gradient(ellipse 60% 40% at 80% 60%, rgba(59, 130, 246, 0.04) 0%, transparent 50%);
  pointer-events: none;
  z-index: -1;
}

/* ─── Text Selection - Light Theme ───────────────────────────────────────── */

::selection {
  background-color: rgba(26, 77, 46, 0.2);
  color: #1a1a1a;
}

/* ─── Custom scrollbar - Light Theme ─────────────────────────────────────── */

::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}
::-webkit-scrollbar-track {
  background: #f5f5f5;
}
::-webkit-scrollbar-thumb {
  background: #d1d5db;
  border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
  background: #9ca3af;
}

/* ─── Focus states - Light Theme ──────────────────────────────────────────── */

:focus-visible {
  outline: none;
  box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px rgba(26, 77, 46, 0.4);
  border-radius: 6px;
}

/* ─── Light mode form autofill ─────────────────────────────────── */

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
  -webkit-text-fill-color: #1a1a1a;
  -webkit-box-shadow: 0 0 0px 1000px #ffffff inset;
  transition: background-color 5000s ease-in-out 0s;
}

/* ─── Placeholder text - Light Theme ─────────────────────────────────────── */

::placeholder {
  color: #999999;
  opacity: 1;
}

::-webkit-input-placeholder {
  color: #999999;
}

::-moz-placeholder {
  color: #999999;
}

/* ─── View Transitions (route fades) ────────────────────────────────────── */
/*
 * Native browser View Transitions API, opt-in via the
 * <ViewTransition name="page-content"> component and Next.js's
 * experimental.viewTransition config. These rules define the actual
 * crossfade / slide. Without them, transitions still work but use
 * the browser default (instant cut).
 *
 * 220ms is the sweet spot for route changes: long enough to soften
 * the cut, short enough to feel like a single app. The cubic-bezier
 * keeps the start crisp and the finish gentle.
 */
/* Route fade — pure opacity, no slide. The old "translateY(6px) on enter,
 * translateY(-4px) on exit" was a classic multi-axis vestibular trigger.
 * 140ms total is the sweet spot: barely there, but softens the cut. */
::view-transition-old(page-content) {
  animation: route-fade-out 90ms ease-out both;
}
::view-transition-new(page-content) {
  animation: route-fade-in 140ms ease-out both;
}

@keyframes route-fade-out {
  to { opacity: 0; }
}
@keyframes route-fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* Top-of-page shimmer for the LoadingFade placeholder bar. */
@keyframes transition-shimmer {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(400%); }
}

/* Reduce motion: respect the user's OS-level preference. */
/* The motion pass deliberately keeps the visual design intact (colors, type, layout)
 * but flattens everything that fights vestibular comfort. This block wipes:
 *   - all CSS animations and transitions across the app
 *   - all view transitions and route fades
 *   - GSAP, framer-motion, and any scroll-driven transforms (those need JS-side guards
 *     in their components, but the CSS-side transforms inherit this via inheritance).
 * If you want even less, just set prefers-reduced-motion: reduce in your OS and
 * every animation in the app turns off. */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  ::view-transition-old(page-content),
  ::view-transition-new(page-content) {
    animation: none !important;
  }
  @keyframes transition-shimmer {
    0%, 100% { transform: translateX(0); }
  }
  .atelier-enter,
  .atelier-backdrop,
  .atelier-stagger > *,
  .atelier-cta .atelier-cta-shimmer,
  .parallax-float,
  .animate-bounce,
  .hero-reveal {
    animation: none !important;
    transition: none !important;
  }
  .atelier-stagger > *,
  .parallax-float,
  .hero-reveal {
    opacity: 1 !important;
    transform: none !important;
  }
  /* Scroll progress bar (Tuxedo hero) — no animated width when motion is off */
  .scroll-progress-bar {
    transition: none !important;
  }
}

/* Light mode placeholder (used by storefront) */
.light ::placeholder,
.light::-webkit-input-placeholder,
.light::-moz-placeholder {
  color: #a8a29e;
}

/* ─── Glass morphism card - Light Theme ────────────────────────────────────── */

.glass {
  background: rgba(255, 255, 255, 0.8);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(0, 0, 0, 0.08);
}

.glass-strong {
  background: rgba(255, 255, 255, 0.9);
  backdrop-filter: blur(40px);
  -webkit-backdrop-filter: blur(40px);
  border: 1px solid rgba(0, 0, 0, 0.1);
}

.glass-card {
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.95) 0%,
    rgba(255, 255, 255, 0.9) 100%
  );
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(0, 0, 0, 0.08);
  border-radius: 1rem;
  box-shadow: 
    0 8px 32px rgba(0, 0, 0, 0.06),
    inset 0 1px 0 rgba(255, 255, 255, 0.8);
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.glass-card:hover {
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.98) 0%,
    rgba(255, 255, 255, 0.95) 100%
  );
  border-color: rgba(26, 77, 46, 0.15);
  box-shadow: 
    0 16px 48px rgba(0, 0, 0, 0.08),
    inset 0 1px 0 rgba(255, 255, 255, 0.9);
  transform: translateY(-1px);
}

/* ─── Premium card - Light Theme ─────────────────────────────────────── */

.card {
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.95) 0%,
    rgba(248, 248, 248, 0.98) 100%
  );
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-radius: 1rem;
  border: 1px solid rgba(0, 0, 0, 0.06);
  box-shadow: 
    0 4px 16px rgba(0, 0, 0, 0.04),
    inset 0 1px 0 rgba(255, 255, 255, 0.8);
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.card:hover {
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.98) 0%,
    rgba(255, 255, 255, 0.99) 100%
  );
  border-color: rgba(26, 77, 46, 0.12);
  box-shadow: 
    0 8px 32px rgba(0, 0, 0, 0.06),
    0 0 0 1px rgba(26, 77, 46, 0.08),
    inset 0 1px 0 rgba(255, 255, 255, 0.9);
  transform: translateY(-1px);
}
.card:active {
  transform: scale(0.995) translateY(0);
}

.card-dark {
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.95) 0%,
    rgba(250, 250, 250, 0.98) 100%
  );
  backdrop-filter: blur(20px);
  border-radius: 1rem;
  border: 1px solid rgba(0, 0, 0, 0.06);
  box-shadow: 
    0 8px 32px rgba(0, 0, 0, 0.05),
    inset 0 1px 0 rgba(255, 255, 255, 0.8);
}

/* ─── High-contrast text utilities - Light Theme ─────────────────────────── */

.text-contrast { color: #1a1a1a; }
.light .text-contrast { color: #1a1a1a; }

.text-body { color: #555555; }
.light .text-body { color: #555555; }

.text-label { color: #888888; }
.light .text-label { color: #888888; }

/* ─── Premium button - Light Theme ───────────────────────────────────────── */

.btn-primary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: 0.75rem;
  font-weight: 600;
  font-size: 0.875rem;
  padding: 0.625rem 1.25rem;
  background: linear-gradient(135deg, #1a4d2e 0%, #166534 100%);
  color: white;
  border: none;
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  cursor: pointer;
  box-shadow: 
    0 4px 12px rgba(26, 77, 46, 0.3),
    inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.btn-primary:hover {
  background: linear-gradient(135deg, #2d6a4f 0%, #1a4d2e 100%);
  box-shadow: 
    0 8px 20px rgba(26, 77, 46, 0.4),
    inset 0 1px 0 rgba(255, 255, 255, 0.15);
  /* No vertical lift on hover — was a 1px translate that compounded with the gradient
   * shift and the inset highlight to read as jittery on the eye. */
}
.btn-primary:active {
  transform: scale(0.995);
}

.btn-primary-green {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: 0.75rem;
  font-weight: 600;
  font-size: 0.875rem;
  padding: 0.625rem 1.25rem;
  background: linear-gradient(135deg, #16a34a 0%, #15803d 100%);
  color: white;
  border: none;
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  cursor: pointer;
  box-shadow: 
    0 4px 12px rgba(22, 163, 74, 0.3),
    inset 0 1px 0 rgba(255,255,255,0.2);
}
.btn-primary-green:hover {
  background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
  box-shadow: 
    0 8px 20px rgba(22, 163, 74, 0.4),
    inset 0 1px 0 rgba(255,255,255,0.2);
}

/* ─── Gradient text ───────────────────────────────────────────── */

.text-gradient-forest {
  background: linear-gradient(135deg, var(--color-forest-400), var(--color-forest-300));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.text-gradient-gold {
  background: linear-gradient(135deg, var(--color-gold-400), var(--color-gold-300));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.text-gradient-subtle {
  background: linear-gradient(135deg, var(--color-surface-200), var(--color-surface-400));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* ─── Subtle divider - Light Theme ───────────────────────────────────────── */

.divider {
  height: 1px;
  background: linear-gradient(to right, transparent, rgba(0, 0, 0, 0.1), transparent);
}

/* ─── Ambient glow - Light Theme ─────────────────────────────────────────── */

.glow-forest {
  box-shadow: 
    0 0 20px rgba(26, 77, 46, 0.15),
    0 0 40px rgba(26, 77, 46, 0.1),
    0 0 60px rgba(26, 77, 46, 0.05);
}

.glow-subtle {
  box-shadow: 
    0 0 20px rgba(255, 255, 255, 0.8),
    0 0 40px rgba(255, 255, 255, 0.6);
}

/* ─── Shimmer loading animation - Light Theme ─────────────────────────────── */

@keyframes shimmer {
  0% {
    background-position: -200% 0;
  }
  100% {
    background-position: 200% 0;
  }
}

.shimmer {
  background: linear-gradient(
    90deg,
    rgba(0,0,0,0.03) 25%,
    rgba(0,0,0,0.06) 50%,
    rgba(0,0,0,0.03) 75%
  );
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
}

/* ─── Glass overlay utility - Light Theme ────────────────────────── */

.overlay-glass {
  position: relative;
}
.overlay-glass::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.5) 0%,
    transparent 50%,
    rgba(255, 255, 255, 0.3) 100%
  );
  pointer-events: none;
  border-radius: inherit;
}

/* ─── Apple-style subtle borders ─────────────────────────────── */

.border-subtle {
  border-color: rgba(0, 0, 0, 0.08);
}

.border-active {
  border-color: rgba(26, 77, 46, 0.3);
  box-shadow: 0 0 0 1px rgba(26, 77, 46, 0.1);
}

/* ─── Smooth transitions ──────────────────────────────────────── */

.transition-glass {
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

/* ─── Editorial Modal — "Atelier des Récoltes" ───────────────── */

/* Warm cream canvas for the modal — like aged paper */
.atelier-canvas {
  background-color: #FAF7F0;
  background-image:
    radial-gradient(ellipse 70% 50% at 15% 0%, rgba(180, 155, 100, 0.10) 0%, transparent 55%),
    radial-gradient(ellipse 60% 45% at 100% 100%, rgba(34, 78, 47, 0.06) 0%, transparent 55%);
  position: relative;
}

/* Subtle grain texture for tactile feel */
.atelier-grain {
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.35;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.18 0 0 0 0 0.15 0 0 0 0 0.10 0 0 0 0.045 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* Botanical wreath / corner ornament */
.atelier-flourish {
  background-image: url("data:image/svg+xml,%3Csvg width='80' height='80' viewBox='0 0 80 80' xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23224E2F' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 40 Q 25 20 40 30 Q 55 40 70 30'/%3E%3Cpath d='M22 32 Q 25 28 28 30'/%3E%3Cpath d='M52 38 Q 55 34 58 36'/%3E%3Cpath d='M14 45 Q 18 50 24 48'/%3E%3Ccircle cx='40' cy='30' r='2' fill='%23224E2F'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
}

/* The big editorial numeral — large, italic, gold */
.atelier-numeral {
  font-family: var(--font-fraunces);
  font-style: italic;
  font-weight: 500;
  font-variation-settings: "opsz" 144, "SOFT" 30;
  line-height: 0.85;
  letter-spacing: -0.04em;
  background: linear-gradient(135deg, #CA8A04 0%, #854D0E 100%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* Editorial title — Fraunces with optical sizing */
.atelier-title {
  font-family: var(--font-fraunces);
  font-weight: 500;
  font-variation-settings: "opsz" 144, "SOFT" 50;
  letter-spacing: -0.025em;
  line-height: 0.95;
  color: #1C1917;
}

.atelier-italic {
  font-family: var(--font-fraunces);
  font-style: italic;
  font-variation-settings: "opsz" 14, "SOFT" 100;
  color: #786B53;
}

/* Section label — monospace, small caps style */
.atelier-section-label {
  font-family: var(--font-fragment-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #786B53;
}

/* Section number badge */
.atelier-section-num {
  font-family: var(--font-fragment-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.05em;
  color: #CA8A04;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.atelier-section-num::before {
  content: '';
  display: inline-block;
  width: 18px;
  height: 1px;
  background: linear-gradient(to right, #CA8A04, transparent);
}

/* Editorial hairline rule with fade at edges */
.atelier-rule {
  height: 1px;
  background: linear-gradient(to right, transparent, rgba(180, 155, 100, 0.4) 20%, rgba(34, 78, 47, 0.3) 50%, rgba(180, 155, 100, 0.4) 80%, transparent);
  border: 0;
}

/* Input fields — bottom border only, editorial */
.atelier-input {
  font-family: var(--font-manrope);
  font-size: 15px;
  font-weight: 400;
  color: #1C1917;
  background: transparent;
  border: 0;
  border-bottom: 1.5px solid rgba(28, 25, 23, 0.12);
  border-radius: 0;
  padding: 10px 0 10px 0;
  width: 100%;
  outline: none;
  transition: border-color 220ms cubic-bezier(0.4, 0, 0.2, 1), padding 220ms cubic-bezier(0.4, 0, 0.2, 1);
}
.atelier-input::placeholder {
  color: #A8A29E;
  font-style: italic;
  font-family: var(--font-fraunces);
  font-variation-settings: "opsz" 14, "SOFT" 100;
}
.atelier-input:hover {
  border-bottom-color: rgba(28, 25, 23, 0.28);
}
.atelier-input:focus {
  border-bottom-color: #224E2F;
  border-bottom-width: 2px;
  padding-bottom: 9.5px;
}
.atelier-input.is-error {
  border-bottom-color: #B91C1C;
}

/* Large display input — name field */
.atelier-input--display {
  font-family: var(--font-fraunces);
  font-size: 28px;
  font-weight: 500;
  font-variation-settings: "opsz" 144, "SOFT" 50;
  letter-spacing: -0.02em;
  padding: 8px 0 14px 0;
}
.atelier-input--display::placeholder {
  color: #D6D3D1;
  font-style: italic;
  font-variation-settings: "opsz" 144, "SOFT" 100;
}
.atelier-input--display:focus {
  border-bottom-width: 2.5px;
  padding-bottom: 13px;
}

/* Price input — large currency treatment */
.atelier-price {
  font-family: var(--font-fraunces);
  font-variation-settings: "opsz" 144, "SOFT" 50;
  font-weight: 500;
  font-size: 38px;
  letter-spacing: -0.03em;
  color: #1C1917;
  background: transparent;
  border: 0;
  border-bottom: 2px solid #224E2F;
  border-radius: 0;
  padding: 4px 0 12px 36px;
  width: 100%;
  outline: none;
  transition: border-color 200ms ease;
  -moz-appearance: textfield;
}
.atelier-price::-webkit-outer-spin-button,
.atelier-price::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
.atelier-price:focus {
  border-bottom-color: #14532D;
  border-bottom-width: 2.5px;
}
.atelier-price-sigil {
  font-family: var(--font-fraunces);
  font-style: italic;
  font-weight: 400;
  font-size: 38px;
  color: #CA8A04;
  position: absolute;
  left: 0;
  top: 4px;
  pointer-events: none;
  line-height: 1;
}

/* Type selector — visual cards */
.atelier-type-card {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 14px 12px;
  background: rgba(255, 255, 255, 0.6);
  border: 1.5px solid rgba(28, 25, 23, 0.10);
  border-radius: 10px;
  cursor: pointer;
  transition: all 220ms cubic-bezier(0.4, 0, 0.2, 1);
  text-align: left;
  width: 100%;
  min-height: 92px;
  overflow: hidden;
}
.atelier-type-card::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(34, 78, 47, 0.02) 0%, transparent 60%);
  opacity: 0;
  transition: opacity 220ms ease;
  pointer-events: none;
}
.atelier-type-card:hover {
  border-color: rgba(34, 78, 47, 0.25);
  background: rgba(255, 255, 255, 0.85);
}
.atelier-type-card:hover::before {
  opacity: 1;
}
.atelier-type-card:active {
  transform: scale(0.995);
}
.atelier-type-card.is-selected {
  background: linear-gradient(135deg, #224E2F 0%, #14532D 100%);
  border-color: #14532D;
  box-shadow: 0 8px 24px -8px rgba(20, 83, 45, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.10);
}
.atelier-type-card.is-selected::before {
  opacity: 0;
}
.atelier-type-card .atelier-type-icon {
  color: #786B53;
  transition: color 180ms ease;
}
.atelier-type-card.is-selected .atelier-type-icon {
  color: #FCD34D;
  /* Removed the 1.06 scale on selected — the color change alone communicates the
   * selection. Scale + color change in the same beat read as "double confirmation",
   * which adds up when many cards animate at once. */
}
.atelier-type-card .atelier-type-name {
  font-family: var(--font-fraunces);
  font-size: 14px;
  font-weight: 500;
  font-variation-settings: "opsz" 14, "SOFT" 30;
  letter-spacing: -0.01em;
  color: #1C1917;
  transition: color 220ms ease;
}
.atelier-type-card.is-selected .atelier-type-name {
  color: #FFFFFF;
}
.atelier-type-card .atelier-type-check {
  opacity: 0;
  color: #FCD34D;
  transition: opacity 180ms ease;
}
.atelier-type-card.is-selected .atelier-type-check {
  opacity: 1;
  /* Removed the scale(0.6 → 1) on the checkmark — pure opacity fade is calmer. */
}

/* Pill toggle — Active / Taxable */
.atelier-toggle {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  user-select: none;
}
.atelier-toggle-track {
  position: relative;
  width: 38px;
  height: 22px;
  background: rgba(28, 25, 23, 0.12);
  border-radius: 999px;
  transition: background 220ms ease;
  flex-shrink: 0;
}
.atelier-toggle.is-on .atelier-toggle-track {
  background: linear-gradient(135deg, #224E2F 0%, #16A34A 100%);
  box-shadow: 0 2px 8px -2px rgba(34, 78, 47, 0.4);
}
.atelier-toggle.is-on.is-gold .atelier-toggle-track {
  background: linear-gradient(135deg, #CA8A04 0%, #EAB308 100%);
  box-shadow: 0 2px 8px -2px rgba(202, 138, 4, 0.4);
}
.atelier-toggle-thumb {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 18px;
  height: 18px;
  background: #FFFFFF;
  border-radius: 999px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
  /* Was cubic-bezier(0.34, 1.56, 0.64, 1) — the bouncy overshoot ease that
   * overshoots ~13% past the target then settles. Looks playful on a static
   * design, but in a real product it reads as twitchy and contributes to the
   * sense of "too much movement". */
  transition: transform 160ms ease-out;
}
.atelier-toggle.is-on .atelier-toggle-thumb {
  transform: translateX(16px);
}
.atelier-toggle-label {
  font-family: var(--font-fragment-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #786B53;
  transition: color 220ms ease;
}
.atelier-toggle.is-on .atelier-toggle-label {
  color: #1C1917;
}

/* Image drop zone — large square with botanical treatment */
.atelier-drop {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  aspect-ratio: 1 / 1;
  background: rgba(255, 255, 255, 0.5);
  border: 1.5px dashed rgba(34, 78, 47, 0.25);
  border-radius: 14px;
  cursor: pointer;
  transition: all 280ms cubic-bezier(0.4, 0, 0.2, 1);
  overflow: hidden;
}
.atelier-drop::before {
  content: '';
  position: absolute;
  inset: 12px;
  border: 1px solid rgba(180, 155, 100, 0.18);
  border-radius: 10px;
  pointer-events: none;
}
.atelier-drop::after {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at center, rgba(34, 78, 47, 0.02) 0%, transparent 70%);
  pointer-events: none;
}
.atelier-drop:hover {
  border-color: rgba(34, 78, 47, 0.45);
  background: rgba(255, 255, 255, 0.75);
  transform: scale(1.005);
}
.atelier-drop.is-drag {
  border-color: #224E2F;
  border-style: solid;
  background: rgba(34, 78, 47, 0.04);
  transform: scale(1.01);
}
.atelier-drop.is-error {
  border-color: #B91C1C;
  background: rgba(185, 28, 28, 0.03);
}
.atelier-drop.has-image {
  border-style: solid;
  border-color: rgba(34, 78, 47, 0.3);
  background: #FFFFFF;
}
.atelier-drop-eyebrow {
  font-family: var(--font-fragment-mono);
  font-size: 9px;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: #A8A29E;
  margin-top: -4px;
}
.atelier-drop-title {
  font-family: var(--font-fraunces);
  font-style: italic;
  font-size: 18px;
  font-variation-settings: "opsz" 14, "SOFT" 100;
  color: #57534E;
  text-align: center;
  line-height: 1.2;
}
.atelier-drop-hint {
  font-family: var(--font-manrope);
  font-size: 11px;
  color: #A8A29E;
  letter-spacing: 0.01em;
}

/* Status pill in corner of image */
.atelier-status-pill {
  position: absolute;
  top: 14px;
  right: 14px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px 5px 8px;
  background: rgba(255, 255, 255, 0.95);
  border: 1px solid rgba(28, 25, 23, 0.08);
  border-radius: 999px;
  font-family: var(--font-fragment-mono);
  font-size: 9px;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #1C1917;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
  z-index: 2;
}
.atelier-status-pill .atelier-dot {
  width: 6px;
  height: 6px;
  border-radius: 999px;
  background: #16A34A;
  box-shadow: 0 0 0 2px rgba(22, 163, 74, 0.18);
}
.atelier-status-pill.is-empty .atelier-dot {
  background: #D6D3D1;
  box-shadow: 0 0 0 2px rgba(214, 211, 209, 0.2);
}
.atelier-status-pill.is-empty {
  color: #A8A29E;
}

/* Modal enter animation — calmer version. The previous 420ms scale + 20px slide
 * with 80-440ms cumulative stagger delays meant the modal kept moving for nearly
 * a full second. Now: 180ms opacity-only fade-in, 4px max, no scale, no stagger. */
@keyframes atelier-enter {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes atelier-backdrop {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes atelier-stagger {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.atelier-enter {
  animation: atelier-enter 180ms ease-out both;
}
.atelier-backdrop {
  animation: atelier-backdrop 140ms ease-out both;
}
.atelier-stagger > * {
  animation: atelier-stagger 180ms ease-out both;
  /* No more 80-440ms cumulative delays — items appear together, not as a parade. */
}
.atelier-stagger > *:nth-child(1) { animation-delay: 0ms; }
.atelier-stagger > *:nth-child(2) { animation-delay: 30ms; }
.atelier-stagger > *:nth-child(3) { animation-delay: 60ms; }
.atelier-stagger > *:nth-child(4) { animation-delay: 90ms; }
.atelier-stagger > *:nth-child(5) { animation-delay: 120ms; }
.atelier-stagger > *:nth-child(6) { animation-delay: 150ms; }
.atelier-stagger > *:nth-child(7) { animation-delay: 180ms; }

/* Primary CTA — gradient with subtle inner highlight */
.atelier-cta {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 12px 22px;
  font-family: var(--font-manrope);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.005em;
  color: #FFFFFF;
  background: linear-gradient(135deg, #14532D 0%, #1F6B3E 50%, #14532D 100%);
  background-size: 200% 100%;
  background-position: 0% 50%;
  border: 0;
  border-radius: 10px;
  cursor: pointer;
  box-shadow:
    0 6px 18px -6px rgba(20, 83, 45, 0.55),
    inset 0 1px 0 rgba(255, 255, 255, 0.14),
    inset 0 -1px 0 rgba(0, 0, 0, 0.10);
  transition: background-position 220ms ease-out, box-shadow 180ms ease-out;
  overflow: hidden;
}
.atelier-cta:hover {
  background-position: 100% 50%;
  box-shadow:
    0 10px 28px -8px rgba(20, 83, 45, 0.65),
    inset 0 1px 0 rgba(255, 255, 255, 0.20),
    inset 0 -1px 0 rgba(0, 0, 0, 0.10);
}
.atelier-cta:active {
  transform: scale(0.995);
}
.atelier-cta:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  transform: none;
  background: #57534E;
  box-shadow: none;
}
.atelier-cta .atelier-cta-shimmer {
  position: absolute;
  top: 0;
  left: -100%;
  width: 60%;
  height: 100%;
  background: linear-gradient(105deg, transparent 30%, rgba(255, 255, 255, 0.18) 50%, transparent 70%);
  pointer-events: none;
  /* Was 700ms — the shimmer is decorative but a long linear slide on every
   * hover draws the eye. 400ms keeps the highlight but doesn't linger. */
  transition: left 400ms ease-out;
}
.atelier-cta:hover .atelier-cta-shimmer {
  left: 130%;
}

/* Discard button */
.atelier-discard {
  font-family: var(--font-fraunces);
  font-style: italic;
  font-size: 14px;
  font-variation-settings: "opsz" 14, "SOFT" 100;
  color: #786B53;
  background: transparent;
  border: 0;
  padding: 8px 6px;
  cursor: pointer;
  transition: color 180ms ease;
}
.atelier-discard:hover {
  color: #1C1917;
}

/* Brand selector */
.atelier-select {
  font-family: var(--font-manrope);
  font-size: 15px;
  font-weight: 500;
  color: #1C1917;
  background: transparent;
  border: 0;
  border-bottom: 1.5px solid rgba(28, 25, 23, 0.12);
  border-radius: 0;
  padding: 10px 24px 10px 0;
  width: 100%;
  outline: none;
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L6 6L11 1' stroke='%23786B53' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right center;
  transition: border-color 220ms ease;
}
.atelier-select:hover { border-bottom-color: rgba(28, 25, 23, 0.28); }
.atelier-select:focus { border-bottom-color: #224E2F; border-bottom-width: 2px; padding-bottom: 9.5px; }

/* Hint / help text */
.atelier-hint {
  font-family: var(--font-fraunces);
  font-style: italic;
  font-size: 12px;
  font-variation-settings: "opsz" 14, "SOFT" 100;
  color: #A8A29E;
  line-height: 1.4;
  margin-top: 6px;
}

/* Error banner */
.atelier-error {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px 14px;
  background: linear-gradient(135deg, rgba(185, 28, 28, 0.06) 0%, rgba(185, 28, 28, 0.03) 100%);
  border: 1px solid rgba(185, 28, 28, 0.25);
  border-radius: 10px;
  font-family: var(--font-manrope);
  font-size: 13px;
  color: #991B1B;
}
.atelier-error svg { flex-shrink: 0; margin-top: 1px; }

/* ─── Polish utilities — "Atelier des Récoltes" additions ─────── */

/* Tabular numerals for prices, quantities, dates */
.atelier-numerals {
  font-family: var(--font-fraunces);
  font-variant-numeric: tabular-nums lining-nums;
  letter-spacing: -0.015em;
}

/* Inline editorial pill — for tags, badges, status chips */
.atelier-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px 4px 8px;
  background: rgba(255, 255, 255, 0.7);
  border: 1px solid rgba(28, 25, 23, 0.08);
  border-radius: 999px;
  font-family: var(--font-fragment-mono);
  font-size: 9px;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #1C1917;
  white-space: nowrap;
  transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1);
}
.atelier-pill:hover {
  background: rgba(255, 255, 255, 0.95);
  border-color: rgba(34, 78, 47, 0.25);
}
.atelier-pill .atelier-pill-dot {
  width: 6px;
  height: 6px;
  border-radius: 999px;
  background: #16A34A;
  box-shadow: 0 0 0 2px rgba(22, 163, 74, 0.18);
}
.atelier-pill.is-gold .atelier-pill-dot {
  background: #CA8A04;
  box-shadow: 0 0 0 2px rgba(202, 138, 4, 0.18);
}
.atelier-pill.is-muted .atelier-pill-dot {
  background: #A8A29E;
  box-shadow: none;
}

/* Refined focus ring for atelier inputs (replaces default browser ring) */
.atelier-input:focus-visible {
  outline: none;
  box-shadow: 0 1px 0 0 #224E2F;
}

/* Small caps editorial small-text — for footnote, fine print */
.atelier-fineprint {
  font-family: var(--font-fragment-mono);
  font-size: 10px;
  font-weight: 400;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #786B53;
  line-height: 1.5;
}

/* Soft cream canvas (lighter than atelier-canvas) — for sub-pages */
.atelier-canvas-soft {
  background-color: #FDFBF6;
  background-image:
    radial-gradient(ellipse 60% 40% at 50% 0%, rgba(180, 155, 100, 0.06) 0%, transparent 60%);
  position: relative;
}
