/* css/tokens.css — design tokens + reset
 * Variables, color palette, typography. Loaded first; everything below depends on it.
 */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box;}
/* Tell the browser this app is light-themed so native controls (scrollbars,
 * date pickers, autofill buttons) render in light mode. */
:root{color-scheme:light;}
:root{
  --navy:#1f1b16;--navy-mid:#4a4036;--navy-deep:#17130f;--navy-light:#f1ded4;
  --blue:#c2553a;--blue-soft:#f1ded4;
  --teal:#1a8c7a;--teal-soft:#d4f0eb;
  --amber:#b06c10;--amber-soft:#fdefd8;
  --green:#1f7a3e;--green-soft:#dff2e7;
  --gray-50:#faf4e8;--gray-100:#f4ecdd;--gray-200:#e6dcc7;--gray-300:#cdbfa7;--gray-400:#a89782;--gray-500:#7a6d5c;
  --text:#1f1b16;--text-muted:#7a6d5c;--text-faint:#a89782;
  --border:rgba(230,220,199,0.72);--border-md:#e6dcc7;
  --surface:#faf4e8;--bg:#f4ecdd;
  --radius:7px;--radius-lg:11px;
  /* Polish layer — shared shadow, ring, and motion tokens (additive, no overrides) */
  --shadow-card:0 1px 0 rgba(255,255,255,0.6) inset,0 1px 2px rgba(15,29,48,0.04),0 8px 18px -10px rgba(15,29,48,0.10);
  --shadow-card-hover:0 1px 0 rgba(255,255,255,0.6) inset,0 2px 4px rgba(15,29,48,0.06),0 14px 26px -12px rgba(15,29,48,0.14);
  --shadow-soft:0 1px 2px rgba(15,29,48,0.05),0 4px 12px -6px rgba(15,29,48,0.08);
  --ring-focus:0 0 0 3px rgba(194,85,58,0.20);
  --ease:cubic-bezier(.22,.61,.36,1);
  /* Consistent transition timings for orchestration */
  --t-fast:0.13s;
  --t-mid:0.18s;
  --t-slow:0.32s;
  /* Iris signature decoration — tunable via these custom properties */
  --iris-blue:rgba(194,85,58,0.06);
  --iris-teal:rgba(31,122,62,0.06);
  --iris-amber:rgba(176,108,16,0.06);
  --iris-glow:radial-gradient(circle at 50% 50%,rgba(15,29,48,0.06) 0%,rgba(15,29,48,0) 70%),
    conic-gradient(from 0deg,var(--iris-blue),var(--iris-teal),var(--iris-amber),var(--iris-blue));
	  --font:'Geist',system-ui,sans-serif;
	  --mono:'Geist Mono',ui-monospace,monospace;
	  --display:'Newsreader',Georgia,serif;
  --os-logo-font:'Newsreader',Georgia,serif;
  --os-logo-letter-spacing:-0.02em;
  --os-logo-primary-weight:600;
  --os-logo-secondary-weight:500;
  --os-logo-eye-stroke:0.9286;
  --os-logo-mark:#1f1b16;
  --os-logo-mark-cutout:#f4ecdd;
  --os-logo-word-primary:#c2553a;
  --os-logo-word-secondary:#6f6255;
  /* Semantic exam-cell token palette (D-colors): black = authoritative coded
   * finding, yellow = provisional alias (click to disambiguate), orange =
   * grade/modifier/measurement, gray = unrecognized (default text) + ghost. */
  --exam-token-grade:var(--amber);
  --exam-token-finding:var(--text);
  --exam-token-alias:#a08206;
  --exam-token-ghost:var(--text-faint);

  /* Sidebar palette — cool slate */
  --sb-bg:#1e2a35;--sb-mid:#263545;--sb-border:rgba(150,190,220,0.12);
  --sb-text:rgba(225,235,245,0.92);--sb-text-faint:rgba(170,195,220,0.55);
  --sb-title:rgba(255,255,255,0.88);--sb-btn-bg:rgba(150,190,230,0.1);
  --sb-btn-text:rgba(170,200,230,0.65);--sb-btn-border:rgba(150,190,220,0.2);
	  --sb-inp-bg:rgba(255,255,255,0.08);--sb-inp-border:rgba(150,190,220,0.22);

  /* ============================================================
   * OphthoScribe design-system blueprint tokens
   *
   * Source: claude.ai/design bundle JMXAOcBVGbdZsS6rz0xI8w
   *   project/dist/ophthoscribe-tokens.css
   *   project/ui_kits/ophthoscribe-app/app.css
   *   the archived design preview (comp 39)
   *
   * Color values are authored in universal-colour-contract.css (the
   * 13-input palette). This block adds the type scale, radii, pip
   * palette, shadow recipes, and motion tokens that the blueprint
   * relies on. Everything below is consumed by ophthoscribe-encounter.css.
   * ============================================================ */

  /* Type scale */
  --t-2xs:  9px;
  --t-xs:   10.5px;
  --t-sm:   11.5px;
  --t-base: 13px;
  --t-md:   15px;
  --t-lg:   18px;
  --t-xl:   23px;
  --t-2xl:  32px;
  --t-3xl:  44px;

  --tracking-display: -0.025em;
  --tracking-ui:       0.01em;
  --tracking-eyebrow:  0.1em;

  /* Radii */
  --r-xs:   4px;
  --r-sm:   8px;
  --r-md:   12px;
  --r-lg:   16px;
  --r-pill: 999px;

  /* Widget pip palette — per-widget identity dots */
  --pip-anterior:  #81C4B0;
  --pip-posterior: #B09FE8;
  --pip-investig:  #7AB8E8;
  --pip-addon:     #E89A7A;

  /* Shadow recipes (blueprint) */
  --os-shadow-paper:      0 1px 0 rgba(255,255,255,0.5) inset, 0 1px 2px rgba(31,27,22,0.04), 0 20px 40px -28px rgba(31,27,22,0.18);
  --os-shadow-card-hover: 0 1px 0 rgba(255,255,255,0.5) inset, 0 2px 4px rgba(31,27,22,0.06), 0 18px 32px -18px rgba(31,27,22,0.20);
  --os-shadow-soft:       0 1px 2px rgba(31,27,22,0.04), 0 14px 28px -22px rgba(31,27,22,0.16);
  --os-ring-focus:        0 0 0 3px rgba(194,85,58,0.20);

  /* ============================================================
   * Widget contract — canonical encounter widget anatomy.
   *
   * Every encounter widget is a 3-part card: header (pip + title +
   * action buttons), body (scrollable content), footer (always
   * contains the directory search bar where one exists).
   *
   * These tokens describe the contract; ophthoscribe-encounter.css
   * applies them to .card[data-widget-card] uniformly across every
   * encounter tab.
   *
   * Source: claude.ai/design bundle JMXAOcBVGbdZsS6rz0xI8w
   *   ophthoscribe-encounter.css (.w / .w-hdr / .w-body / .w-foot)
   * ============================================================ */

  /* Shell */
  --widget-bg:            var(--surface);
  --widget-border:        color-mix(in srgb, var(--ink) 8%, transparent);
  --widget-border-hover:  color-mix(in srgb, var(--ink) 12%, transparent);
  --widget-radius:        var(--r-md);
  --widget-shadow:        var(--os-shadow-soft);
  --widget-shadow-hover:  var(--os-shadow-card-hover);

  /* Header band — same warm-tint as the top banner so chrome reads as one
   * coherent surface. Sourced from --os-enc-banner-bg (single source of
   * truth for the banner color, declared above). */
  --widget-header-bg:     var(--os-enc-banner-bg);
  --widget-header-border: color-mix(in srgb, var(--ink) 8%, transparent);
  --widget-header-pad:    12px 16px;
  --widget-header-min-h:  46px;
  --widget-header-gap:    10px;

  /* Pip dot */
  --widget-pip-size:      8px;
  --widget-pip-ring:      0 0 0 2px rgba(255,255,255,0.65), 0 1px 3px rgba(15,29,48,0.18);

  /* Title typography */
  --widget-title-font:    var(--mono);
  --widget-title-size:    11px;
  --widget-title-weight:  600;
  --widget-title-tracking: var(--tracking-eyebrow);
  --widget-title-color:   var(--ink);

  /* Mini action buttons (Download / Add / N/A) */
  --widget-mini-h:        24px;
  --widget-mini-min-w:    26px;
  --widget-mini-radius:   7px;
  --widget-mini-border:   color-mix(in srgb, var(--ink) 14%, transparent);
  --widget-mini-bg:       rgba(255,255,255,0.72);
  --widget-mini-text:     var(--muted);
  --widget-mini-active-bg: var(--ink);
  --widget-mini-active-text: var(--paper);

  /* Body */
  --widget-body-bg:       var(--surface);
  --widget-body-pad:      14px 16px;
  --widget-body-pad-bottom-with-footer: calc(var(--widget-footer-min-h, 46px) + 14px);

  /* Footer band — always houses the directory search bar. Matches the
   * header (and the top banner) so the widget reads as a paper-bordered
   * surface clipped between two warm bands. */
  --widget-footer-bg:     var(--os-enc-banner-bg);
  --widget-footer-border: color-mix(in srgb, var(--ink) 8%, transparent);
  --widget-footer-pad:    8px 12px;
  --widget-footer-min-h:  46px;

  /* Footer search input */
  --widget-search-bg:        var(--surface);
  --widget-search-border:    color-mix(in srgb, var(--ink) 14%, transparent);
  --widget-search-radius:    var(--r-sm);
  --widget-search-height:    30px;
  --widget-search-pad:       6px 10px;
  --widget-search-font-size: var(--t-base);
  --widget-search-focus-border: var(--accent);
  --widget-search-focus-ring:   var(--os-ring-focus);

  /* ============================================================
   * Encounter shell tokens.
   * Display-only values for the SMART-on-FHIR encounter wrapper:
   * patient banner, encounter tabs, and page canvas. They must not
   * imply changes to FHIR extraction, encounter mapping, or write-back
   * behavior.
   *
   * These derive from the blueprint palette above so the inline <style>
   * block injected at runtime by encounter-app.js picks up the
   * blueprint colors automatically through CSS variable fallback.
   * ============================================================ */
  --os-enc-page-bg:           var(--paper);
  --os-enc-surface:           var(--surface);
  --os-enc-surface-strong:    var(--surface);
  --os-enc-surface-soft:      color-mix(in srgb, var(--ink) 3%, var(--surface));
  --os-enc-surface-hover:     color-mix(in srgb, var(--accent-soft) 40%, var(--surface));
  --os-enc-text:              var(--ink);
  --os-enc-text-soft:         color-mix(in srgb, var(--ink) 88%, var(--paper));
  --os-enc-text-muted:        var(--muted);
  --os-enc-text-faint:        var(--faint);
  --os-enc-border:            color-mix(in srgb, var(--ink) 10%, transparent);
  --os-enc-border-soft:       color-mix(in srgb, var(--ink) 8%, transparent);
  --os-enc-border-faint:      var(--line-soft);
  --os-enc-shadow-card:       var(--os-shadow-soft);
  --os-enc-shadow-panel:      var(--os-shadow-paper);
  --os-enc-banner-bg:         color-mix(in srgb, var(--ink) 6%, var(--paper));
  --os-enc-banner-border:     color-mix(in srgb, var(--ink) 10%, transparent);
  --os-enc-banner-text:       var(--ink);
  --os-enc-banner-muted:      var(--muted);
  --os-enc-logo-mark:         var(--ink);
  --os-enc-logo-word-primary: var(--accent);
  --os-enc-logo-word-secondary: var(--ink);
  --os-enc-accent:            var(--accent);
  --os-enc-accent-legacy:     var(--accent);
  --os-enc-accent-dark:       var(--accent-ink);
  --os-enc-accent-soft:       var(--accent-soft);
  --os-enc-tab-bg:            var(--paper);
  --os-enc-tab-border:        color-mix(in srgb, var(--ink) 8%, transparent);
  --os-enc-tab-text:          color-mix(in srgb, var(--ink) 55%, transparent);
  --os-enc-tab-active:        var(--accent);
  --os-enc-tab-active-bg:     transparent;
  --os-enc-meta-separator:    var(--faint);
  --os-enc-meta-mark:         var(--faint);
  --os-enc-connected:         var(--muted);
  --os-enc-connected-dot:     var(--faint);
  --os-enc-loading:           var(--warning);
  --os-enc-loading-dot:       var(--warning);
  --os-enc-loaded:            var(--success);
  --os-enc-loaded-dot:        var(--success);
  --os-enc-loaded-ring:       color-mix(in srgb, var(--success) 18%, transparent);
  --os-enc-incomplete:        var(--accent-ink);
  --os-enc-incomplete-dot:    var(--accent);
  --os-enc-incomplete-ring:   color-mix(in srgb, var(--accent) 18%, transparent);
  --os-enc-error:             var(--danger);
  --os-enc-read-gap-bg:       var(--danger-soft);
  --os-enc-read-gap-border:   color-mix(in srgb, var(--danger) 30%, transparent);
  --os-enc-read-gap-text:     var(--danger);
  --os-enc-code-bg:           var(--ink);
  --os-enc-code-text:         var(--paper);
  --os-enc-modal-bg:          var(--surface);
  --os-enc-success:           var(--success);
  --os-enc-success-bg:        var(--success-soft);
  --os-enc-success-border:    color-mix(in srgb, var(--success) 40%, transparent);
  --os-enc-control-bg:        var(--surface);
  --os-enc-control-border:    color-mix(in srgb, var(--ink) 14%, transparent);
  --os-enc-control-focus:     color-mix(in srgb, var(--accent) 18%, transparent);
	}

html[data-palette="terracotta"] {
  --paper:#F4ECDD; --surface:#FAF4E8; --ink:#1F1B16;
  --muted:#7A6D5C; --faint:#A89782;
  --line:#E6DCC7; --line-soft:#EFE6D2;
  --accent:#C2553A; --accent-soft:#F1DED4; --accent-ink:#8E3A26;
  --success:#5C7A5B; --warning:#A57225; --info:#3D5F87;
}
html[data-palette="sage"],
html[data-palette="sage-clinic"] {
  --paper:#F2EFE6; --surface:#F8F5EC; --ink:#1C1F1B;
  --muted:#6D7569; --faint:#A6AC9F;
  --line:#DEDDD0; --line-soft:#E8E6D8;
  --accent:#5C7A5B; --accent-soft:#E0E7DA; --accent-ink:#3F5A40;
  --success:#5C7A5B; --warning:#A26B2A; --info:#3B6491;
}
html[data-palette="ink-copper"] {
  --paper:#F1ECE2; --surface:#F8F3E9; --ink:#1A2230;
  --muted:#6E695A; --faint:#A89C83;
  --line:#DDD5C5; --line-soft:#E7DFCF;
  --accent:#9C5A2D; --accent-soft:#EFDDC8; --accent-ink:#6F3D17;
  --success:#3D6A55; --warning:#9C5E1D; --info:#2A4A7A;
}
html[data-palette="mulberry"] {
  --paper:#F2EBE2; --surface:#F8F2E9; --ink:#211A1E;
  --muted:#6E5F62; --faint:#A89AA0;
  --line:#E2D6CB; --line-soft:#ECDFD4;
  --accent:#7D3A4A; --accent-soft:#EDD9DC; --accent-ink:#5A2434;
  --success:#5C7A5B; --warning:#A06A2A; --info:#46517F;
}

html[data-palette] {
  --paper-2:var(--paper);
  --bg:var(--paper);
  --gray-50:var(--surface);
  --gray-100:var(--paper);
  --gray-200:var(--line);
  --gray-400:var(--faint);
  --gray-500:var(--muted);
  --text:var(--ink);
  --text-muted:var(--muted);
  --text-faint:var(--faint);
  --border:var(--line-soft);
  --border-md:var(--line);
  --blue:var(--accent);
  --blue-soft:var(--accent-soft);
  --ink-mute:var(--muted);
  --ink-faint:var(--faint);
  --ink-line:var(--line);
  --ink-pos:var(--success);
  --ink-warn:var(--warning);
  --ink-link:var(--accent);
  --ink-link-soft:var(--accent-soft);
  --os-canvas:var(--paper);
  --os-component-content-bg:var(--surface);
  --os-component-border:var(--line);
  --os-card-text:var(--ink);
  --os-accent:var(--accent);
  --os-accent-soft:var(--accent-soft);
  --os-success:var(--success);
  --os-warning:var(--warning);
  --os-logo-mark:var(--ink);
  --os-logo-word-primary:var(--accent);
  --os-logo-word-secondary:var(--ink);
  --os-logo-primary-weight:500;
  --os-logo-secondary-weight:500;
}
/* stylelint-disable-next-line no-duplicate-selectors */
:root{
  /* ─────────────────────────────────────────────────────────────────────
   * Clinical Paper tokens — additive layer consumed by css/encounter-paper.css
   * inside the encounter view only. Existing tokens above are untouched.
   * Historical design spec lived under docs/superpowers before archival.
   * ───────────────────────────────────────────────────────────────────── */
  --paper:#FAF6EC;
  --paper-2:#FDFAF2;
  --ink:#1f1b16;
  --ink-mute:#7a6d5c;
  --ink-faint:#a89782;
  --ink-line:#e6dcc7;
  --hairline-faint:rgba(0,0,0,0.06);
  --hairline-mid:rgba(0,0,0,0.13);
  --ink-pos:#1f7a3e;
  --ink-pos-soft:#dff2e7;
  --ink-warn:#b06c10;
  --ink-warn-soft:#fdefd8;
  --ink-link:#c2553a;
  --ink-link-soft:#f1ded4;
  --shadow-paper:0 1px 0 rgba(0,0,0,0.02),0 10px 22px -16px rgba(31,27,22,0.12);
  --serif:'Newsreader',Georgia,serif;
  --sans-paper:'Geist',system-ui,sans-serif;
}
