/*
 * GENERATED — DO NOT EDIT BY HAND.
 *
 * porter's palette: the house's dials with porter's own second voice (secondHue 195°),
 * generated and verified alone, so its stations bend only for its own voices.
 * It applies wherever data-palette="porter" stands, the document or a region.
 *
 * Every value here is derived by house-materials/algorithm.mjs from the dials in
 * house-materials/config.mjs. Change a dial and regenerate:
 *
 *   pnpm --filter @whittlelabs/bootstrop generate:palette
 *
 * Tokens are named by their identity in the generation model, never by
 * invented material names: the name states the derivation.
 *
 * seed #9a6b2f (L 0.56 · C 0.097 · H 70°)
 * scheme split (realizes 3 anchors) · cast +0° (→ 70°) · blade drift +160° · voice 0.17 · prominence 0.65/0.4 · poles L 0.18/0.96
 *
 * The three layers:
 *   Layer 0  palette    --wl-<identity>   what a color IS (this file)
 *   Layer 1  theme      --wl-<role>       what a color is FOR (house.css)
 *   Layer 2  semantic   --color-<role>    how the utility layer reaches it
 *
 * voices: second ← anchor-second · third ← anchor-third
 *
 * Geometric adjustments (elastic constraints; every stretch receipted):
 *   warning-deep: L 0.500→0.465 — clearance from anchor-primary (ΔE
 *   0.043→0.081)
 *   warning-pale: L 0.720→0.740 — clearance from anchor-primary (ΔE
 *   0.072→0.085)
 *   queued-deep: L 0.500→0.460 — clearance from anchor-second (ΔE
 *   0.036→0.088)
 *   queued-pale: L 0.720→0.755 — clearance from anchor-second (ΔE
 *   0.052→0.087)
 *   info-deep: L 0.500→0.465 — clearance from anchor-second (ΔE
 *   0.048→0.085)
 *   info-pale: L 0.720→0.750 — clearance from anchor-third (ΔE
 *   0.057→0.083)
 *   warning-fill-deep: C 0.095→0.094 (fill chroma)
 *   success-fill-deep: C 0.094→0.110 (fill chroma) · L 0.550→0.525 — pole
 *   text 4.12→4.54
 *   success-fill-pale: C 0.094→0.110 (fill chroma)
 *   queued-fill-deep: C 0.077→0.090 (fill chroma)
 *   queued-fill-pale: C 0.077→0.110 (fill chroma)
 *   info-fill-deep: C 0.051→0.088 (fill chroma)
 *   info-fill-pale: C 0.051→0.110 (fill chroma)
 *   success-fill-pale: L 0.770→0.775 — separation from queued (pair 0.042
 *   below 0.08)
 *   success-fill-pale: L 0.775→0.780 — separation from queued (pair 0.050
 *   below 0.08)
 *   success-fill-pale: L 0.780→0.785 — separation from queued (pair 0.056
 *   below 0.08)
 *   success-fill-pale: L 0.785→0.790 — separation from queued (pair 0.066
 *   below 0.08)
 *   success-fill-pale: L 0.790→0.795 — separation from queued (pair 0.078
 *   below 0.08)
 *   syntax-string-deep: L 0.460→0.450 — contrast 4.42→4.61 on light
 *   grounds
 *   syntax-variable-deep: L 0.460→0.455 — separation from entity (pair
 *   0.072 below 0.08)
 *   syntax-variable-deep: L 0.455→0.450 — separation from entity (pair
 *   0.072 below 0.08)
 *   syntax-variable-deep: L 0.450→0.445 — separation from entity (pair
 *   0.075 below 0.08)
 *   syntax-variable-deep: L 0.445→0.440 — separation from entity (pair
 *   0.078 below 0.08)
 *   syntax-variable-pale: L 0.760→0.765 — separation from entity (pair
 *   0.071 below 0.08)
 *   syntax-variable-pale: L 0.765→0.770 — separation from entity (pair
 *   0.072 below 0.08)
 *   syntax-variable-pale: L 0.770→0.775 — separation from entity (pair
 *   0.073 below 0.08)
 *   syntax-variable-pale: L 0.775→0.780 — separation from entity (pair
 *   0.077 below 0.08)
 *   series-2-deep: L 0.510→0.520 — clearance from anchor-primary (ΔE
 *   0.073→0.081)
 *   series-1-deep: L 0.530→0.525 — separation from series-3 (pair 0.079
 *   below 0.08)
 *   series-1-fill-deep: C 0.092→0.094 (fill chroma)
 *   series-3-fill-deep: C 0.102→0.098 (fill chroma) · L 0.540→0.525 — pole
 *   text 4.26→4.59
 *   series-1-fill-deep: L 0.525→0.520 — separation from series-3 (pair
 *   0.071 below 0.08)
 *   series-1-fill-deep: L 0.520→0.515 — separation from series-3 (pair
 *   0.072 below 0.08)
 *   series-1-fill-deep: L 0.515→0.510 — separation from series-3 (pair
 *   0.071 below 0.08)
 *   series-1-fill-deep: L 0.510→0.505 — separation from series-3 (pair
 *   0.075 below 0.08)
 *   series-1-fill-deep: L 0.505→0.500 — separation from series-3 (pair
 *   0.078 below 0.08)
 *
 * Verification: 493 declared pairs checked; minimum 0.02:1.
 */

:root[data-palette='porter'],
[data-palette='porter'] {
  /* House relationship constants: the stops layer 1 mixes with. Emitted
     so config is the single source and every composed pair (secondary on
     each ground, ladder steps on soft grounds) is verified at generation. */
  --wl-soft-stop-light: 87%; /* stock-soft: the light pole this far toward dark */
  --wl-soft-stop-dark: 95.5%; /* ink-soft */
  --wl-border-stop: 86%; /* border: the surface toward its counterpole */
  --wl-secondary-stop: 70%; /* secondary text: the ink toward its surface */
  --wl-status-wash-stop-light: 12%; /* status wash by day: the station soaked toward its polarity's pole */
  --wl-status-wash-stop-dark: 20%; /* status wash at night: deeper, so a pill stands off a raised surface one soft step from the pole */
  --wl-series-wash-stop: 12%; /* series wash: the area chart's fill — the same soak, on the dataviz family */
  --wl-series-ground-stop: 20%; /* series ground: a whole surface wearing a family, deeper than the wash so a mark of the same family still reads on it */
  --wl-state-hover-stop: 93%; /* hover wash: the surface toward its counterpole, subtler than a soft step */
  --wl-state-selected-wash-stop-light: 24%; /* selected wash by day: the SECOND VOICE soaked toward the polarity's pole, the status-wash relationship on the house's own voice (ruled 2026-09-02) */
  --wl-state-selected-wash-stop-dark: 12%; /* selected wash at night: half the soak, the board's signal over the code well (2026-11-05) */
  --wl-voice-wash-stop: 8%; /* voice wash: the second voice soaked toward the polarity's pole, a tint a tag stands on (its ink is gated at the small-text floor) */
  --wl-state-disabled-stop: 55%; /* disabled ink: the ink toward its surface, floored readable */
  --wl-shadow-stop-light: 14%; /* shadow: the dark pole at this weight, by day */
  --wl-shadow-stop-dark: 50%; /* the same at night, where the rung does the lifting */

  /* Neutrals: two poles and a blade, one cast. Each pole is the
     other's foreground. Recessed text is not a palette token — it
     derives per ground in house.css. */
  --wl-ground-dark: #15110e; /* cast 58° (seed-12) · L 0.18 · tint C 0.009 */
  --wl-ground-well: #110d0a; /* the night page's cast · L 0.16 · what a well inside a raised surface sinks to at night, below the page */
  --wl-ground-light: #f7f1eb; /* cast 70° · L 0.96 · tint C 0.011 */
  --wl-ground-lift: #fefcfb; /* same cast · L 0.99 · tint C 0.005 · what a raised surface stands on by day: elevation moves toward the light */
  --wl-blade: #5c686f; /* mid neutral · cast+160 → 230° · L 0.51 */

  /* Anchors: the identity, realized from the harmony spokes. The fill is
     the canonical value; the deep/pale steps exist because an anchor
     becomes text (links, focus) and a fill color is not a text color. */
  --wl-anchor-primary: #9a6b2f; /* the seed realized as a fill · H 70° */
  --wl-anchor-primary-deep: #865819; /* text step for light grounds · L 0.5 */
  --wl-anchor-primary-pale: #cc9a5f; /* text step for dark grounds · L 0.72 */
  --wl-anchor-second: #35baba; /* voice only, never a control · H 195° */
  --wl-anchor-second-deep: #047272; /* text step for light grounds · L 0.5 */
  --wl-anchor-second-pale: #35baba; /* text step for dark grounds · L 0.72 */
  --wl-anchor-third: #5b5f8a; /* voice only, never a control · H 280° */
  --wl-anchor-third-deep: #5b5f8a; /* text step for light grounds · L 0.5 */
  --wl-anchor-third-pale: #9ca0cf; /* text step for dark grounds · L 0.72 */

  /* The voice interface: fixed slots the house pours from, regardless of
     scheme. An unrealized rung collapses down the prominence gradient to
     the neutral voice — the cast at the voice registers — never up to
     the accent. Slots are aliases: the receipt states the resolution. */
  --wl-voice-neutral-deep: #70604e; /* the cast spoken quietly · L 0.5 · C 0.034 */
  --wl-voice-neutral-pale: #b3a18e; /* same, for dark grounds · L 0.72 */
  --wl-voice-second-deep: var(--wl-anchor-second-deep); /* realized */
  --wl-voice-second-pale: var(--wl-anchor-second-pale); /* realized */
  --wl-voice-third-deep: var(--wl-anchor-third-deep); /* realized */
  --wl-voice-third-pale: var(--wl-anchor-third-pale); /* realized */

  /* The voiced ground: a ground poured in a voice, when the dial asks and
     the geometry allows (a near-opponent voice vibrates against the accent
     at ground scale and refuses). Undialed or unrealized, it aliases to
     the ink pole — the ground's floor — so a house may always offer the
     ground and a scheme change never edits it. */
  --wl-ground-voice-dark: #001616; /* the second voice at the dark pole · H 195° · wash C 0.031 */

  /* Pours: role→voice declarations from config, resolved against what
     this house realizes. The house consumes these per polarity; a scheme
     change re-resolves them here, and nothing above the config edits. */
  --wl-pour-label-deep: var(--wl-voice-second-deep); /* rich: voice second ← anchor-second */
  --wl-pour-label-pale: var(--wl-voice-second-pale); /* rich: voice second ← anchor-second */
  --wl-pour-heading-2-deep: var(--wl-ground-dark); /* rich: ink, the content's own */
  --wl-pour-heading-2-pale: var(--wl-ground-light); /* rich: ink, the content's own */
  --wl-pour-heading-3-deep: var(--wl-ground-dark); /* rich: ink, the content's own */
  --wl-pour-heading-3-pale: var(--wl-ground-light); /* rich: ink, the content's own */

  /* Statuses: five semantic stations, hue windows fixed across every
     house this algorithm will ever produce. Each ships its complete
     ladder: deep on light grounds, pale on dark grounds. */

  /* destructive · 45° · gravity toward 70°, clamped at the window edge · urgency 1 */
  --wl-destructive-deep: #953b01; /* L 0.47 · C 0.134 */
  --wl-destructive-pale: #ee7233; /* L 0.69 · C 0.17 */
  --wl-destructive-fill-deep: #953b01; /* L 0.47 · fill register: pole text verified ≥ 4.5 */
  --wl-destructive-fill-pale: #ee7233; /* L 0.69 · fill register: pole text verified ≥ 4.5 */

  /* warning · 95° · slid 80°→95° to clear anchor-primary · deep stretched -0.035 · pale stretched +0.02 · urgency 0.9 */
  --wl-warning-deep: #6a5801; /* L 0.46 · C 0.095 */
  --wl-warning-pale: #c9a806; /* L 0.74 · C 0.151 */
  --wl-warning-fill-deep: #6a5804; /* L 0.46 · fill register: pole text verified ≥ 4.5 */
  --wl-warning-fill-pale: #c9a806; /* L 0.74 · fill register: pole text verified ≥ 4.5 */

  /* success · 155° · gravity toward 195°, clamped at the window edge · urgency 0.55 */
  --wl-success-deep: #3f8259; /* L 0.55 · C 0.094 */
  --wl-success-pale: #83c69a; /* L 0.77 · C 0.094 */
  --wl-success-fill-deep: #287d4d; /* L 0.53 · fill register: pole text verified ≥ 4.5 */
  --wl-success-fill-pale: #80d19d; /* L 0.8 · fill register: pole text verified ≥ 4.5 */

  /* queued · 170° · slid 189°→170° to clear anchor-second · deep stretched -0.04 · pale stretched +0.035 · urgency 0.45 */
  --wl-queued-deep: #216651; /* L 0.46 · C 0.077 */
  --wl-queued-pale: #7dc0a8; /* L 0.76 · C 0.077 */
  --wl-queued-fill-deep: #046850; /* L 0.46 · fill register: pole text verified ≥ 4.5 */
  --wl-queued-fill-pale: #5dc6a5; /* L 0.76 · fill register: pole text verified ≥ 4.5 */

  /* info · 225° · slid 254°→225° to clear anchor-third · deep stretched -0.035 · pale stretched +0.03 · urgency 0.3 */
  --wl-info-deep: #38606f; /* L 0.46 · C 0.051 */
  --wl-info-pale: #8cb5c7; /* L 0.75 · C 0.051 */
  --wl-info-fill-deep: #00637e; /* L 0.46 · fill register: pole text verified ≥ 4.5 */
  --wl-info-fill-pale: #54bce2; /* L 0.75 · fill register: pole text verified ≥ 4.5 */

  /* Syntax: the code pane's seven-scope vocabulary (whittlelabs#379).
     Convention-hard hue centers with house gravity — coral keywords,
     green tags, blue-family strings and variables, purple entities —
     at the 4.5 text floor on every ground code sits on, including the
     diff washes. comment is the cast spoken quietly; plain is the
     polarity's own ink, aliased, never generated. */

  /* syntax keyword · 41° · gravity toward 70° */
  --wl-syntax-keyword-deep: #903914; /* L 0.46 · C 0.128 */
  --wl-syntax-keyword-pale: #f59470; /* L 0.76 · C 0.128 */

  /* syntax tag · 160° · gravity toward 195°, clamped at the window edge */
  --wl-syntax-tag-deep: #015032; /* L 0.38 · C 0.085 */
  --wl-syntax-tag-pale: #71dda8; /* L 0.82 · C 0.128 */

  /* syntax string · 211° · gravity toward 195° · deep stretched -0.01 */
  --wl-syntax-string-deep: #02606e; /* L 0.45 · C 0.077 */
  --wl-syntax-string-pale: #1fc6df; /* L 0.76 · C 0.128 */

  /* syntax variable · 264° · gravity toward 280° */
  --wl-syntax-variable-deep: #2d4e98; /* L 0.44 · C 0.128 */
  --wl-syntax-variable-pale: #93b7fe; /* L 0.78 · C 0.109 */

  /* syntax entity · 296° · gravity toward 280° */
  --wl-syntax-entity-deep: #604596; /* L 0.46 · C 0.128 */
  --wl-syntax-entity-pale: #b99ff9; /* L 0.76 · C 0.128 */

  /* syntax comment · 70° */
  --wl-syntax-comment-deep: #625648; /* L 0.46 · C 0.027 */
  --wl-syntax-comment-pale: #bdae9f; /* L 0.76 · C 0.027 */

  --wl-syntax-plain-deep: var(--wl-ground-dark); /* plain code is primary ink on light grounds */
  --wl-syntax-plain-pale: var(--wl-ground-light); /* same, for dark grounds */

  /* Series: the dataviz identity family (caliper D1). Six stations in a
     FIXED order — the order is the CVD-safety mechanism, so a chart
     assigns slots in sequence and never cycles or invents a seventh.
     Marks are glanced shapes: the 3.0 UI floor on the four grounds a
     chart stands on, pairwise distinctness per register, accent-only
     kinship (a series must never be mistaken for the control). */

  /* series 1 · 218° · gravity toward 195° */
  --wl-series-1-deep: #08778e; /* L 0.53 · C 0.092 */
  --wl-series-1-pale: #09b0d1; /* L 0.7 · C 0.124 */
  --wl-series-1-fill-deep: #076f84; /* L 0.5 · fill register: pole text verified ≥ 4.5 */
  --wl-series-1-fill-pale: #09b0d1; /* L 0.7 · fill register: pole text verified ≥ 4.5 */

  /* series 2 · 45° · slid 60°→45° to clear anchor-primary · deep stretched +0.01 */
  --wl-series-2-deep: #a94709; /* L 0.52 · C 0.145 */
  --wl-series-2-pale: #e77e4c; /* L 0.7 · C 0.145 */
  --wl-series-2-fill-deep: #a94709; /* L 0.52 · fill register: pole text verified ≥ 4.5 */
  --wl-series-2-fill-pale: #e77e4c; /* L 0.7 · fill register: pole text verified ≥ 4.5 */

  /* series 3 · 174° · gravity toward 195°, clamped at the window edge */
  --wl-series-3-deep: #01826a; /* L 0.54 · C 0.102 */
  --wl-series-3-pale: #05b998; /* L 0.7 · C 0.133 */
  --wl-series-3-fill-deep: #087c66; /* L 0.53 · fill register: pole text verified ≥ 4.5 */
  --wl-series-3-fill-pale: #05b998; /* L 0.7 · fill register: pole text verified ≥ 4.5 */

  /* series 4 · 320° · gravity toward 280°, clamped at the window edge */
  --wl-series-4-deep: #7d3a8c; /* L 0.47 · C 0.145 */
  --wl-series-4-pale: #d68ee6; /* L 0.75 · C 0.145 */
  --wl-series-4-fill-deep: #7d3a8c; /* L 0.47 · fill register: pole text verified ≥ 4.5 */
  --wl-series-4-fill-pale: #d68ee6; /* L 0.75 · fill register: pole text verified ≥ 4.5 */

  /* series 5 · 125° · slid 96°→125° to clear anchor-primary */
  --wl-series-5-deep: #567204; /* L 0.51 · C 0.127 */
  --wl-series-5-pale: #8aad3d; /* L 0.7 · C 0.145 */
  --wl-series-5-fill-deep: #567204; /* L 0.51 · fill register: pole text verified ≥ 4.5 */
  --wl-series-5-fill-pale: #8aad3d; /* L 0.7 · fill register: pole text verified ≥ 4.5 */

  /* series 6 · 280° · gravity toward 280° */
  --wl-series-6-deep: #5858b6; /* L 0.51 · C 0.145 */
  --wl-series-6-pale: #8e92f6; /* L 0.7 · C 0.145 */
  --wl-series-6-fill-deep: #5858b6; /* L 0.51 · fill register: pole text verified ≥ 4.5 */
  --wl-series-6-fill-pale: #8e92f6; /* L 0.7 · fill register: pole text verified ≥ 4.5 */
}
