/* Sanaloka — shared design tokens + dark mode.
   Monochrome-first palette (ink/paper), terracotta reserved as a small
   accent only (hover glow, focus states) — mirrors Almanack's approach.
   Theme is controlled by assets/theme.js via [data-theme] on <html>,
   with @media (prefers-color-scheme) as a no-JS fallback. */

:root { color-scheme: light dark; }

:root {
  --sl-paper: #FFFFFF;
  --sl-surface: #FFFFFF;
  --sl-surface-container: #F0F0F0;
  --sl-surface-container-high: #EBEBEB;
  --sl-ink: #221A18;
  --sl-ink-soft: #514E46;
  --sl-secondary: #675C57;
  --sl-ink-strong: #2C2420;
  --sl-on-strong: #FFFFFF;
  --sl-outline: #87726D;
  --sl-outline-variant: #E0E0E0;
  --sl-accent: #B5614A;
  --sl-accent-glow: rgba(181, 97, 74, 0.08);
  --sl-danger: #991B1B;
  --sl-danger-light: #FEF2F2;
  --sl-success: #166534;
  --sl-success-light: #F0FDF4;
  --sl-info: #0C4A6E;
  --sl-info-light: #F0F9FF;
  --sl-warning: #92400E;
  --sl-warning-light: #FFFBEB;
}

@media (prefers-color-scheme: dark) {
  :root {
    --sl-paper: #171512;
    --sl-surface: #1E1B18;
    --sl-surface-container: #232019;
    --sl-surface-container-high: #2A2620;
    --sl-ink: #ECE8DE;
    --sl-ink-soft: #B0A892;
    --sl-secondary: #B0A892;
    --sl-ink-strong: #ECE8DE;
    --sl-on-strong: #1C1A17;
    --sl-outline: #877F6C;
    --sl-outline-variant: #2C2924;
    --sl-accent: #D98A71;
    --sl-accent-glow: rgba(217, 138, 113, 0.14);
    --sl-danger: #F87171;
    --sl-danger-light: #7f1d1d;
    --sl-success: #4ADE80;
    --sl-success-light: #14532d;
    --sl-info: #60A5FA;
    --sl-info-light: #1e3a8a;
    --sl-warning: #FBBF24;
    --sl-warning-light: #78350f;
  }
}

:root[data-theme="dark"] {
  --sl-paper: #171512;
  --sl-surface: #1E1B18;
  --sl-surface-container: #232019;
  --sl-surface-container-high: #2A2620;
  --sl-ink: #ECE8DE;
  --sl-ink-soft: #B0A892;
  --sl-secondary: #B0A892;
  --sl-ink-strong: #ECE8DE;
  --sl-on-strong: #1C1A17;
  --sl-outline: #877F6C;
  --sl-outline-variant: #2C2924;
  --sl-accent: #D98A71;
  --sl-accent-glow: rgba(217, 138, 113, 0.14);
  --sl-danger: #F87171;
  --sl-danger-light: #7f1d1d;
  --sl-success: #4ADE80;
  --sl-success-light: #14532d;
  --sl-info: #60A5FA;
  --sl-info-light: #1e3a8a;
  --sl-warning: #FBBF24;
  --sl-warning-light: #78350f;
}

:root[data-theme="light"] {
  --sl-paper: #FFFFFF;
  --sl-surface: #FFFFFF;
  --sl-surface-container: #F0F0F0;
  --sl-surface-container-high: #EBEBEB;
  --sl-ink: #221A18;
  --sl-ink-soft: #514E46;
  --sl-secondary: #675C57;
  --sl-ink-strong: #2C2420;
  --sl-on-strong: #FFFFFF;
  --sl-outline: #87726D;
  --sl-outline-variant: #E0E0E0;
  --sl-accent: #B5614A;
  --sl-accent-glow: rgba(181, 97, 74, 0.08);
  --sl-danger: #991B1B;
  --sl-danger-light: #FEF2F2;
  --sl-success: #166534;
  --sl-success-light: #F0FDF4;
  --sl-info: #0C4A6E;
  --sl-info-light: #F0F9FF;
  --sl-warning: #92400E;
  --sl-warning-light: #FFFBEB;
}

html body {
  background-color: var(--sl-paper) !important;
  color: var(--sl-ink);
  transition: background-color .25s ease, color .25s ease;
}

/* Remap the raw Tailwind arbitrary-value utility classes used across pages
   (these bypass tailwind.config so they need an explicit dark override). */
:root[data-theme="dark"] .bg-white { background-color: var(--sl-surface) !important; }
:root[data-theme="dark"] .bg-\[\#F0F0F0\] { background-color: var(--sl-surface-container) !important; }
:root[data-theme="dark"] .bg-\[\#F9F5F4\],
:root[data-theme="dark"] .bg-\[\#FFF8F6\] { background-color: var(--sl-surface-container) !important; }
:root[data-theme="dark"] .border-\[\#EBEBEB\],
:root[data-theme="dark"] .border-\[\#F0D5CE\] { border-color: var(--sl-outline-variant) !important; }
:root[data-theme="dark"] .text-\[\#6B6460\] { color: var(--sl-ink-soft) !important; }
:root[data-theme="dark"] .bg-\[\#B5614A\] { background-color: var(--sl-accent) !important; }

/* Same problem for stock Tailwind gray-scale utilities — fixed hex output,
   never respond to [data-theme]. text-gray-700/800/900 in particular go
   near-black on the near-black dark --sl-paper/--sl-surface and crush
   contrast. */
:root[data-theme="dark"] .text-gray-400,
:root[data-theme="dark"] .text-gray-500 { color: var(--sl-outline) !important; }
:root[data-theme="dark"] .text-gray-600,
:root[data-theme="dark"] .text-gray-700 { color: var(--sl-secondary) !important; }
:root[data-theme="dark"] .text-gray-800,
:root[data-theme="dark"] .text-gray-900 { color: var(--sl-ink) !important; }

/* ---------- Toggle button (self-injected by theme.js on every page) ---------- */
.sl-theme-toggle {
  position: fixed;
  right: 20px;
  bottom: 20px;
  z-index: 1000;
  width: 42px;
  height: 42px;
  border-radius: 999px;
  border: 1px solid var(--sl-outline-variant);
  background: var(--sl-surface);
  color: var(--sl-ink);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  padding: 0;
  box-shadow: 0 2px 10px rgba(0,0,0,0.14);
  transition: transform .2s ease, box-shadow .2s ease, background-color .2s ease, color .2s ease;
}
.sl-theme-toggle:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,0.18); }
.sl-theme-toggle:active { transform: translateY(0); }
.sl-theme-toggle svg { display: block; }
@media (max-width: 640px) {
  .sl-theme-toggle { right: 14px; bottom: 14px; width: 38px; height: 38px; }
}

/* ============================================================
   Sanaloka Design System v2 — regime tokens + shared components
   Adds to (never replaces) the --sl-* base palette above.
   Source of truth: "Sanaloka - Design System Master.md" v1.0.
   Regimes: Ekspresif / Tenang / Editorial / Fungsional — classify
   the screen BEFORE styling (§4 of the master document).
   Hard rules: zero gradient, warm ink (never pure black), thin
   shadows only, accent terracotta never dominant.
   ============================================================ */

:root {
  /* Type paths (§3). Partners/B2B = Plus Jakarta Sans everywhere.
     Consumer surfaces (Care) override --sl-font-display to Cabinet
     Grotesk + --sl-font-accent to Instrument Serif italic. */
  --sl-font-body: 'Plus Jakarta Sans', sans-serif;
  --sl-font-display: var(--sl-font-body);
  --sl-font-accent: 'Instrument Serif', Georgia, serif;

  /* Expressive type scale (§3.2) */
  --sl-display-xl: 2.5rem;
  --sl-display-xl-lh: 1.05;
  --sl-display-xl-ls: -0.03em;
  --sl-display-l: 2rem;
  --sl-display-l-lh: 1.1;
  --sl-display-l-ls: -0.02em;
  --sl-card-text: 1.5rem;
  --sl-card-text-lh: 1.35;
  --sl-card-text-ls: -0.01em;
  --sl-title: 1.25rem;
  --sl-title-lh: 1.3;
  --sl-caption: 0.8125rem;
  --sl-caption-lh: 1.4;

  /* Shape & elevation per regime (§7) */
  --sl-radius-card: 20px;
  --sl-radius-btn: 14px;
  --sl-radius-pill: 999px;
  --sl-shadow-card: 0 1px 2px rgba(20,20,20,.04), 0 8px 24px rgba(20,20,20,.06);
  --sl-shadow-lift: 0 2px 4px rgba(20,20,20,.04), 0 18px 40px rgba(20,20,20,.10);
  --sl-shadow-editorial: 0 1px 3px rgba(20,20,20,.06);
  --sl-ease-out: cubic-bezier(0.22, 1, 0.36, 1);

  /* Accent support: deep terracotta passes WCAG AA as small text on
     light surfaces (6.7:1); the dark variant is a lighter tone. */
  --sl-accent-deep: #8C4A36;
  --sl-strong-hover: #1C1815;
}

/* ---------- Dark variants for v2 tokens ---------- */
@media (prefers-color-scheme: dark) {
  :root {
    --sl-accent-deep: #E0A18C;
    --sl-strong-hover: #D8D2C6;
  }
}
:root[data-theme="dark"] {
  --sl-accent-deep: #E0A18C;
  --sl-strong-hover: #D8D2C6;
}
:root[data-theme="light"] {
  --sl-accent-deep: #8C4A36;
  --sl-strong-hover: #1C1815;
}

/* ---------- Consumer type override (Care & future consumer lines).
     Page loads Cabinet Grotesk + Instrument Serif + Inter itself. ---------- */
.sl-consumer {
  --sl-font-display: 'Cabinet Grotesk', 'Plus Jakarta Sans', sans-serif;
  --sl-font-body: 'Inter', 'Plus Jakarta Sans', sans-serif;
}

/* ---------- Layout container ---------- */
.sl-container {
  max-width: 1200px;
  margin-left: auto;
  margin-right: auto;
  padding-left: 24px;
  padding-right: 24px;
}
@media (max-width: 640px) {
  .sl-container { padding-left: 20px; padding-right: 20px; }
}

/* ---------- Nav (shared marketing shell) ---------- */
.sl-nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 50;
  background: var(--sl-surface);
  border-bottom: 1px solid var(--sl-outline-variant);
}
.sl-nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 80px;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
@media (max-width: 640px) {
  .sl-nav-inner { height: 68px; padding: 0 20px; }
}
.sl-nav-link {
  color: var(--sl-secondary);
  text-decoration: none;
  font-size: 15px;
  transition: color .2s ease;
}
.sl-nav-link:hover { color: var(--sl-ink-strong); }

/* Brand lockup — mark + wordmark (§1.1 interim rule).
   The mark file is NEVER modified; clear space = half mark height. */
.sl-lockup {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  text-decoration: none;
  color: var(--sl-ink-strong);
}
.sl-lockup img { width: 30px; height: 30px; display: block; }
.sl-lockup span {
  font-family: var(--sl-font-display);
  font-size: 20px;
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1;
}

/* Nav dropdown (hover-only, desktop) */
.sl-nav-dropdown { position: relative; }
.sl-nav-dropdown-menu {
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%) translateY(10px);
  opacity: 0;
  pointer-events: none;
  transition: opacity .2s ease, transform .22s var(--sl-ease-out);
  padding-top: 10px;
  z-index: 100;
  min-width: 250px;
}
.sl-nav-dropdown:hover .sl-nav-dropdown-menu,
.sl-nav-dropdown:focus-within .sl-nav-dropdown-menu {
  opacity: 1;
  pointer-events: auto;
  transform: translateX(-50%) translateY(0);
}
.sl-nav-chevron { transition: transform .3s ease; display: inline-block; }
.sl-nav-dropdown:hover .sl-nav-chevron,
.sl-nav-dropdown:focus-within .sl-nav-chevron { transform: rotate(180deg); }

/* Mobile menu (no-JS <details>) */
.sl-nav-mobile summary {
  list-style: none;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  color: var(--sl-ink-strong);
}
.sl-nav-mobile summary::-webkit-details-marker { display: none; }
.sl-nav-mobile[open] summary .sl-nav-burger-open { display: block; }
.sl-nav-mobile[open] summary .sl-nav-burger-closed { display: none; }
.sl-nav-mobile summary .sl-nav-burger-open { display: none; }
.sl-nav-mobile-panel {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: var(--sl-surface);
  border-bottom: 1px solid var(--sl-outline-variant);
  box-shadow: var(--sl-shadow-lift);
}
.sl-nav-mobile-panel a {
  display: block;
  padding: 14px 24px;
  color: var(--sl-ink);
  text-decoration: none;
  border-top: 1px solid var(--sl-outline-variant);
  font-size: 15px;
}
.sl-nav-mobile-panel a:active { background: var(--sl-surface-container); }

/* ---------- Buttons (craft floor: touch target ≥ 44px) ---------- */
.sl-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  border-radius: var(--sl-radius-btn);
  font-family: var(--sl-font-body);
  font-size: 15px;
  font-weight: 600;
  line-height: 1;
  padding: 16px 28px;
  text-decoration: none;
  border: 1px solid transparent;
  cursor: pointer;
  transition: background-color .15s ease, color .15s ease, border-color .15s ease, transform .15s ease, box-shadow .15s ease;
}
.sl-btn:active { transform: translateY(1px); }
.sl-btn:focus-visible { outline: 2px solid var(--sl-accent); outline-offset: 2px; }
.sl-btn-primary { background: var(--sl-ink-strong); color: var(--sl-on-strong); }
.sl-btn-primary:hover { background: var(--sl-strong-hover); }
.sl-btn-secondary {
  background: var(--sl-surface);
  color: var(--sl-ink-strong);
  border-color: var(--sl-outline-variant);
}
.sl-btn-secondary:hover { background: var(--sl-surface-container); }
.sl-btn-ghost { background: transparent; color: var(--sl-secondary); }
.sl-btn-ghost:hover { color: var(--sl-ink-strong); background: var(--sl-surface-container); }
.sl-btn-sm { padding: 14px 20px; font-size: 14px; }

/* ---------- Cards ---------- */
.sl-card {
  background: var(--sl-surface);
  border: 1px solid var(--sl-outline-variant);
  border-radius: var(--sl-radius-card);
  box-shadow: var(--sl-shadow-card);
}
.sl-card-interactive {
  transition: transform .4s var(--sl-ease-out), box-shadow .4s var(--sl-ease-out), border-color .3s ease;
}
.sl-card-interactive:hover {
  transform: translateY(-3px);
  box-shadow: var(--sl-shadow-lift);
  border-color: var(--sl-accent);
}

/* ---------- Kicker (the ONE named eyebrow style — use sparingly,
   not on every section; craft-floor ban on eyebrow-as-grammar) ---------- */
.sl-kicker {
  display: inline-block;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--sl-accent-deep);
}

/* ---------- Serif accent word (consumer surfaces only, 1-2 words) ---------- */
.sl-accent-word {
  font-family: var(--sl-font-accent);
  font-style: italic;
  font-weight: 400;
}

/* ---------- Badge / status pill ---------- */
.sl-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border-radius: var(--sl-radius-pill);
  padding: 6px 14px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .05em;
}
.sl-badge-accent {
  background: var(--sl-accent-glow);
  color: var(--sl-accent-deep);
  border: 1px solid var(--sl-accent);
}

/* ---------- Inputs ---------- */
.sl-input {
  width: 100%;
  padding: 12px 14px;
  border: 1px solid var(--sl-outline-variant);
  border-radius: 14px;
  background: var(--sl-surface);
  color: var(--sl-ink);
  font-family: var(--sl-font-body);
  font-size: 15px;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.sl-input:focus {
  outline: none;
  border-color: var(--sl-ink-strong);
  box-shadow: 0 0 0 3px var(--sl-accent-glow);
}
.sl-input::placeholder { color: var(--sl-outline); }

/* ---------- Arch motif (§8.3 gate-arch derivative — new line art,
   never a modification of the logo files). Inline SVG, currentColor. ---------- */
.sl-arch { color: var(--sl-outline-variant); display: block; }

/* ---------- Scroll entrance (Ekspresif pages only) ---------- */
.sl-reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .8s var(--sl-ease-out), transform .8s var(--sl-ease-out);
}
.sl-reveal.in-view { opacity: 1; transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
  .sl-reveal { opacity: 1; transform: none; transition: none; }
}
