/* GENERATED — do not edit. Source: src/assets/art.css.njk, data: src/_data/colors.json
   ---------------------------------------------------------------------------------------------
   One rule per artwork, binding that piece's own extracted pigment to three custom properties:

     --chip  the raw dominant colour. Decorative only — swatches, strip slivers, glow halos.
     --wash  the pigment at 12% over the DARK ground. A tinted section background.
     --pen   the same hue walked toward LIGHT until it clears WCAG AA 4.5:1 against all three
             grounds and its own wash. The only one of the three that may carry text — section
             headlines are set in it, so each page glows in the colour of its own subject.
             scripts/check.mjs recomputes every ratio on each build, so a hand-edited value
             cannot ship a contrast violation.
     --art-w-in  the painting's real width in inches, emitted only where the record has
             dimensions. Drives the to-scale "View in a room" wall on the artwork page.

   The wash/pen derivation REVERSED when the site went dark (Gallery Night): pen used to be
   darkened toward a cream page, and is now lightened toward a charcoal one.

   Why a generated file rather than style="--chip:#0b7" on each card: the CSP in public/_headers
   is `style-src 'self'` with no 'unsafe-inline'. That blocks inline style ATTRIBUTES as well as
   <style> elements, and a style attribute cannot carry a nonce — so the inline version would be
   silently dropped by the browser and every chip on the site would render as the neutral
   fallback, with nothing in the console to say why. Shipping from our own origin is the only way
   to do this without weakening the CSP for every page. Same reasoning as vt.css.njk; see the
   wissota-brand skill.

   Regenerate the source data with `npm run colors` after adding paintings. A piece with no entry
   here simply inherits the neutral fallbacks from :root — chip-less, never broken. */
[data-piece="about-face"]{--chip:#e94829;--wash:#2d1813;--pen:#fa4f2e;--art-w-in:24}
[data-piece="azur-turtles"]{--chip:#ea5807;--wash:#2d1a0f;--pen:#fb610a}
[data-piece="beach-boats"]{--chip:#48768b;--wash:#191d1f;--pen:#5f96b0}
[data-piece="beach-picnic"]{--chip:#265a86;--wash:#151a1e;--pen:#4b94d4}
[data-piece="belted-kingfisher"]{--chip:#0676d6;--wash:#111d28;--pen:#1196ff;--art-w-in:24}
[data-piece="blue-azure-turtles"]{--chip:#294565;--wash:#16171a;--pen:#6797ce}
[data-piece="buon-camino"]{--chip:#c67801;--wash:#281d0e;--pen:#d48204;--art-w-in:48}
[data-piece="by-the-edge-water"]{--chip:#0358a8;--wash:#111a22;--pen:#1992ff;--art-w-in:30}
[data-piece="can-you-see-me-now"]{--chip:#177686;--wash:#131d1e;--pen:#2aa1b6;--art-w-in:24}
[data-piece="coy-koi"]{--chip:#069999;--wash:#112120;--pen:#09a5a5;--art-w-in:30}
[data-piece="deep-running"]{--chip:#c7b8a7;--wash:#292522;--pen:#c7b8a7}
[data-piece="double-talk"]{--chip:#e78727;--wash:#2c1f13;--pen:#e78727;--art-w-in:24}
[data-piece="ever-dancing"]{--chip:#01d7d7;--wash:#112928;--pen:#01d7d7}
[data-piece="flamingo-waterfall"]{--chip:#e87777;--wash:#2d1d1c;--pen:#e87777}
[data-piece="forward-motion"]{--chip:#48789a;--wash:#191d21;--pen:#6098c1;--art-w-in:18}
[data-piece="fresh-lobster"]{--chip:#386786;--wash:#171b1e;--pen:#5b9ac5}
[data-piece="great-blue-heron"]{--chip:#b79b76;--wash:#27221c;--pen:#b79b76}
[data-piece="great-white-heron"]{--chip:#b7b6ab;--wash:#272523;--pen:#b7b6ab}
[data-piece="green-flash"]{--chip:#e73800;--wash:#2c160e;--pen:#ff4d0a;--art-w-in:48}
[data-piece="high-seas"]{--chip:#05b7e9;--wash:#11252a;--pen:#05b7e9}
[data-piece="iguanas"]{--chip:#e67804;--wash:#2c1d0f;--pen:#e67804}
[data-piece="ladies-in-waiting"]{--chip:#46471a;--wash:#191711;--pen:#8e8f47;--art-w-in:30}
[data-piece="meadow-soft"]{--chip:#574639;--wash:#1b1715;--pen:#a98d78;--art-w-in:18}
[data-piece="michigan-tulips"]{--chip:#d7a65a;--wash:#2b2319;--pen:#d7a65a}
[data-piece="midas-touch"]{--chip:#b78738;--wash:#271f15;--pen:#b78738;--art-w-in:36}
[data-piece="palm-in-a-new-light"]{--chip:#59c8db;--wash:#1b2728;--pen:#59c8db;--art-w-in:24}
[data-piece="palm-sunset"]{--chip:#e96847;--wash:#2d1b17;--pen:#e96847}
[data-piece="pelican-tall"]{--chip:#47b9c7;--wash:#192526;--pen:#47b9c7}
[data-piece="run-silent-run-deep"]{--chip:#b79778;--wash:#27211d;--pen:#b79778;--art-w-in:48}
[data-piece="run-silent-run-deep-triptych"]{--chip:#ca8627;--wash:#291f13;--pen:#ca8627}
[data-piece="sacred-cow"]{--chip:#777802;--wash:#1f1d0e;--pen:#97980c;--art-w-in:36}
[data-piece="sawgrass-remembered"]{--chip:#875601;--wash:#21190e;--pen:#c68412;--art-w-in:48}
[data-piece="shall-we-dance"]{--chip:#e9268a;--wash:#2d141f;--pen:#ff31a1;--art-w-in:52}
[data-piece="soft-landing"]{--chip:#c69757;--wash:#292118;--pen:#c69757;--art-w-in:48}
[data-piece="soft-morning"]{--chip:#596829;--wash:#1b1b13;--pen:#889c48;--art-w-in:48}
[data-piece="speak-loudly"]{--chip:#b76718;--wash:#271b11;--pen:#d47a21;--art-w-in:24}
[data-piece="spilled-paint"]{--chip:#c7580b;--wash:#291a0f;--pen:#e66913;--art-w-in:48}
[data-piece="sugar"]{--chip:#e8461a;--wash:#2d1711;--pen:#ff5523;--art-w-in:16}
[data-piece="sunflower-remix"]{--chip:#c7a927;--wash:#292313;--pen:#c7a927}
[data-piece="three-sisters"]{--chip:#d6c9b9;--wash:#2a2724;--pen:#d6c9b9;--art-w-in:48}
[data-piece="turtle-in-deep"]{--chip:#474726;--wash:#191813;--pen:#90905a}
[data-piece="turtles-in-paradise"]{--chip:#49aad4;--wash:#192328;--pen:#49aad4;--art-w-in:48}
[data-piece="underwater-beautiful"]{--chip:#b72878;--wash:#27141c;--pen:#ff46b1}
[data-piece="vineyards"]{--chip:#ea7737;--wash:#2d1d15;--pen:#ea7737;--art-w-in:36}
[data-piece="whirling-dervish"]{--chip:#e5a801;--wash:#2c230e;--pen:#e5a801}
[data-piece="everglades-remembered"]{--chip:#885700;--wash:#21190e;--pen:#c78512}
[data-piece="cat-with-parasol"]{--chip:#e6b999;--wash:#2c2520;--pen:#e6b999}
[data-piece="dragonfly-detail"]{--chip:#d5ab7a;--wash:#2a231d;--pen:#d5ab7a}
[data-piece="koi-column-base"]{--chip:#e5a66b;--wash:#2c231b;--pen:#e5a66b}
[data-piece="koi-soffit"]{--chip:#978979;--wash:#231f1d;--pen:#978979}
[data-piece="lanai-flamingo"]{--chip:#a9a9a5;--wash:#252322;--pen:#a9a9a5}
[data-piece="lanai-giraffe"]{--chip:#949587;--wash:#22211e;--pen:#949587}
[data-piece="hyena-corner"]{--chip:#94aab4;--wash:#232324;--pen:#94aab4}
[data-piece="pavilion-corner"]{--chip:#958b79;--wash:#23201d;--pen:#958b79}
[data-piece="petroglyph-column"]{--chip:#a88758;--wash:#251f19;--pen:#a88758}
[data-piece="pine-branch-beam"]{--chip:#c4b9aa;--wash:#282523;--pen:#c4b9aa}
[data-piece="sandhill-crane-column"]{--chip:#b69466;--wash:#27211a;--pen:#b69466}
[data-piece="tiger-column"]{--chip:#b8976a;--wash:#27211b;--pen:#b8976a}
[data-piece="wall-lion"]{--chip:#d9e6e9;--wash:#2b2b2a;--pen:#d9e6e9}
[data-piece="wildflower-wall"]{--chip:#c9b9a7;--wash:#292522;--pen:#c9b9a7}
[data-piece="girl-on-the-shore"]{--chip:#b59979;--wash:#26211d;--pen:#b59979}
[data-piece="girl-underwater"]{--chip:#b76947;--wash:#271c17;--pen:#d47c56;--art-w-in:16}
[data-piece="three-girls-in-party-dresses"]{--chip:#974724;--wash:#231812;--pen:#da7042;--art-w-in:48}
[data-piece="woman-with-beads"]{--chip:#c89b74;--wash:#29221c;--pen:#c89b74}
[data-piece="young-man-in-orange"]{--chip:#c83704;--wash:#29160f;--pen:#ff5212}
[data-piece="beagle-boy"]{--chip:#756839;--wash:#1f1b15;--pen:#a19054}
[data-piece="black-dog-in-bloom"]{--chip:#48a567;--wash:#19231a;--pen:#48a567;--art-w-in:11}
[data-piece="black-dog-photo"]{--chip:#c7b6a8;--wash:#292522;--pen:#c7b6a8}
[data-piece="bulldog-portrait"]{--chip:#4a3529;--wash:#1a1513;--pen:#ad8770}
[data-piece="dog-in-dress-uniform"]{--chip:#034787;--wash:#11181e;--pen:#228ff5}
[data-piece="pug-in-teal"]{--chip:#1a4539;--wash:#141715;--pen:#56a28d}
[data-piece="setter-in-green"]{--chip:#956739;--wash:#231b15;--pen:#bb844d;--art-w-in:11}
[data-piece="setter-photo"]{--chip:#7a633b;--wash:#1f1b15;--pen:#a78a58}
[data-piece="three-boston-terriers"]{--chip:#e7c6a7;--wash:#2c2722;--pen:#e7c6a7}
[data-piece="tricolor-dog-on-blue"]{--chip:#365987;--wash:#171a1e;--pen:#6293d4;--art-w-in:11}
[data-piece="tricolor-dog-photo"]{--chip:#cb956a;--wash:#29211b;--pen:#cb956a}
[data-piece="aussie-puppy-photo"]{--chip:#675848;--wash:#1d1a17;--pen:#a7927b}
[data-piece="beach-day-shell-ornament"]{--chip:#d5d5ca;--wash:#2a2926;--pen:#d5d5ca}
[data-piece="beachcomber-shell-ornament"]{--chip:#c9c8c4;--wash:#292726;--pen:#c9c8c4}
[data-piece="border-collie-photo"]{--chip:#685847;--wash:#1d1917;--pen:#a8917a}
[data-piece="cavalier-photo"]{--chip:#75664a;--wash:#1f1b17;--pen:#a18e6a}
[data-piece="husky-photo"]{--chip:#865939;--wash:#211a15;--pen:#c5885d}
[data-piece="monarch-shell-ornament"]{--chip:#389575;--wash:#17211c;--pen:#3fa17f}
[data-piece="moored-sailboats"]{--chip:#2b6684;--wash:#161b1e;--pen:#4a99c2;--art-w-in:20}
[data-piece="outlet-cover-amber-glass"]{--chip:#572a16;--wash:#1b1411;--pen:#d17d57}
[data-piece="outlet-cover-mosaic-tile"]{--chip:#857869;--wash:#211d1b;--pen:#9c8d7d}
[data-piece="pet-shell-ornaments"]{--chip:#982a44;--wash:#231416;--pen:#fd5880}
[data-piece="riverside-village-at-sunset"]{--chip:#b87607;--wash:#271d0f;--pen:#c6800a;--art-w-in:48}
[data-piece="switch-covers-grey-tile"]{--chip:#a7a9a7;--wash:#252322;--pen:#a7a9a7}

/* Sort ranks for the gallery's CSS-only sort control.
   ---------------------------------------------------------------------------------------------
   One position per piece per sort mode, computed in src/_data/pieces.mjs. styles.css reads the
   matching property into `order` under a :has() rule — four rules total, rather than four rules
   PER PIECE, which is why the sort costs no JavaScript and barely any bytes.

   Emitted for every piece, including those with no extracted colour: a piece missing from
   colors.json still has to sort, and the block above skips it. Missing values already rank last
   from the data side, so nothing here needs a fallback.

   Keyed on data-slug, NOT data-piece. `order` only applies to a grid ITEM, which is the <li>,
   while data-piece sits on the <figure> inside it — and a custom property set on a child is
   invisible to its parent. data-slug is the separate hook the overlay work reserves for exactly
   this reason (ROADMAP 1.1: "do not reuse data-piece"), so the pigment binding stays untouched. */
[data-slug="about-face"]{--ord-price-up:13;--ord-price-down:19;--ord-size:20;--ord-year:0}
[data-slug="azur-turtles"]{--ord-price-up:15;--ord-price-down:15;--ord-size:32;--ord-year:1}
[data-slug="beach-boats"]{--ord-price-up:18;--ord-price-down:13;--ord-size:33;--ord-year:2}
[data-slug="beach-picnic"]{--ord-price-up:1;--ord-price-down:29;--ord-size:34;--ord-year:3}
[data-slug="belted-kingfisher"]{--ord-price-up:33;--ord-price-down:33;--ord-size:21;--ord-year:4}
[data-slug="blue-azure-turtles"]{--ord-price-up:12;--ord-price-down:20;--ord-size:35;--ord-year:5}
[data-slug="buon-camino"]{--ord-price-up:34;--ord-price-down:34;--ord-size:1;--ord-year:6}
[data-slug="by-the-edge-water"]{--ord-price-up:35;--ord-price-down:35;--ord-size:16;--ord-year:7}
[data-slug="can-you-see-me-now"]{--ord-price-up:36;--ord-price-down:36;--ord-size:17;--ord-year:8}
[data-slug="coy-koi"]{--ord-price-up:26;--ord-price-down:5;--ord-size:15;--ord-year:9}
[data-slug="deep-running"]{--ord-price-up:20;--ord-price-down:12;--ord-size:36;--ord-year:10}
[data-slug="double-talk"]{--ord-price-up:37;--ord-price-down:37;--ord-size:22;--ord-year:11}
[data-slug="ever-dancing"]{--ord-price-up:23;--ord-price-down:9;--ord-size:37;--ord-year:12}
[data-slug="flamingo-waterfall"]{--ord-price-up:2;--ord-price-down:30;--ord-size:38;--ord-year:13}
[data-slug="forward-motion"]{--ord-price-up:0;--ord-price-down:32;--ord-size:27;--ord-year:14}
[data-slug="fresh-lobster"]{--ord-price-up:16;--ord-price-down:16;--ord-size:39;--ord-year:15}
[data-slug="great-blue-heron"]{--ord-price-up:5;--ord-price-down:22;--ord-size:40;--ord-year:16}
[data-slug="great-white-heron"]{--ord-price-up:6;--ord-price-down:23;--ord-size:41;--ord-year:17}
[data-slug="green-flash"]{--ord-price-up:38;--ord-price-down:38;--ord-size:2;--ord-year:18}
[data-slug="high-seas"]{--ord-price-up:14;--ord-price-down:18;--ord-size:42;--ord-year:19}
[data-slug="iguanas"]{--ord-price-up:27;--ord-price-down:6;--ord-size:43;--ord-year:20}
[data-slug="ladies-in-waiting"]{--ord-price-up:19;--ord-price-down:14;--ord-size:18;--ord-year:21}
[data-slug="meadow-soft"]{--ord-price-up:4;--ord-price-down:28;--ord-size:26;--ord-year:22}
[data-slug="michigan-tulips"]{--ord-price-up:17;--ord-price-down:17;--ord-size:44;--ord-year:23}
[data-slug="midas-touch"]{--ord-price-up:39;--ord-price-down:39;--ord-size:12;--ord-year:24}
[data-slug="palm-in-a-new-light"]{--ord-price-up:7;--ord-price-down:24;--ord-size:19;--ord-year:25}
[data-slug="palm-sunset"]{--ord-price-up:11;--ord-price-down:21;--ord-size:45;--ord-year:26}
[data-slug="pelican-tall"]{--ord-price-up:8;--ord-price-down:25;--ord-size:46;--ord-year:27}
[data-slug="run-silent-run-deep"]{--ord-price-up:28;--ord-price-down:3;--ord-size:3;--ord-year:28}
[data-slug="run-silent-run-deep-triptych"]{--ord-price-up:31;--ord-price-down:1;--ord-size:47;--ord-year:29}
[data-slug="sacred-cow"]{--ord-price-up:29;--ord-price-down:4;--ord-size:13;--ord-year:30}
[data-slug="sawgrass-remembered"]{--ord-price-up:24;--ord-price-down:8;--ord-size:4;--ord-year:31}
[data-slug="shall-we-dance"]{--ord-price-up:32;--ord-price-down:0;--ord-size:0;--ord-year:32}
[data-slug="soft-landing"]{--ord-price-up:21;--ord-price-down:11;--ord-size:5;--ord-year:33}
[data-slug="soft-morning"]{--ord-price-up:25;--ord-price-down:7;--ord-size:6;--ord-year:34}
[data-slug="speak-loudly"]{--ord-price-up:40;--ord-price-down:40;--ord-size:23;--ord-year:35}
[data-slug="spilled-paint"]{--ord-price-up:41;--ord-price-down:41;--ord-size:7;--ord-year:36}
[data-slug="sugar"]{--ord-price-up:42;--ord-price-down:42;--ord-size:25;--ord-year:37}
[data-slug="sunflower-remix"]{--ord-price-up:9;--ord-price-down:26;--ord-size:48;--ord-year:38}
[data-slug="three-sisters"]{--ord-price-up:43;--ord-price-down:43;--ord-size:11;--ord-year:39}
[data-slug="turtle-in-deep"]{--ord-price-up:3;--ord-price-down:31;--ord-size:49;--ord-year:40}
[data-slug="turtles-in-paradise"]{--ord-price-up:30;--ord-price-down:2;--ord-size:8;--ord-year:41}
[data-slug="underwater-beautiful"]{--ord-price-up:10;--ord-price-down:27;--ord-size:50;--ord-year:42}
[data-slug="vineyards"]{--ord-price-up:44;--ord-price-down:44;--ord-size:14;--ord-year:43}
[data-slug="whirling-dervish"]{--ord-price-up:22;--ord-price-down:10;--ord-size:51;--ord-year:44}
[data-slug="everglades-remembered"]{--ord-price-up:45;--ord-price-down:45;--ord-size:52;--ord-year:45}
[data-slug="cat-with-parasol"]{--ord-price-up:46;--ord-price-down:46;--ord-size:53;--ord-year:46}
[data-slug="dragonfly-detail"]{--ord-price-up:47;--ord-price-down:47;--ord-size:54;--ord-year:47}
[data-slug="koi-column-base"]{--ord-price-up:48;--ord-price-down:48;--ord-size:55;--ord-year:48}
[data-slug="koi-soffit"]{--ord-price-up:49;--ord-price-down:49;--ord-size:56;--ord-year:49}
[data-slug="lanai-flamingo"]{--ord-price-up:50;--ord-price-down:50;--ord-size:57;--ord-year:50}
[data-slug="lanai-giraffe"]{--ord-price-up:51;--ord-price-down:51;--ord-size:58;--ord-year:51}
[data-slug="hyena-corner"]{--ord-price-up:52;--ord-price-down:52;--ord-size:59;--ord-year:52}
[data-slug="pavilion-corner"]{--ord-price-up:53;--ord-price-down:53;--ord-size:60;--ord-year:53}
[data-slug="petroglyph-column"]{--ord-price-up:54;--ord-price-down:54;--ord-size:61;--ord-year:54}
[data-slug="pine-branch-beam"]{--ord-price-up:55;--ord-price-down:55;--ord-size:62;--ord-year:55}
[data-slug="sandhill-crane-column"]{--ord-price-up:56;--ord-price-down:56;--ord-size:63;--ord-year:56}
[data-slug="tiger-column"]{--ord-price-up:57;--ord-price-down:57;--ord-size:64;--ord-year:57}
[data-slug="wall-lion"]{--ord-price-up:58;--ord-price-down:58;--ord-size:65;--ord-year:58}
[data-slug="wildflower-wall"]{--ord-price-up:59;--ord-price-down:59;--ord-size:66;--ord-year:59}
[data-slug="girl-on-the-shore"]{--ord-price-up:60;--ord-price-down:60;--ord-size:67;--ord-year:60}
[data-slug="girl-underwater"]{--ord-price-up:61;--ord-price-down:61;--ord-size:28;--ord-year:61}
[data-slug="three-girls-in-party-dresses"]{--ord-price-up:62;--ord-price-down:62;--ord-size:9;--ord-year:62}
[data-slug="woman-with-beads"]{--ord-price-up:63;--ord-price-down:63;--ord-size:68;--ord-year:63}
[data-slug="young-man-in-orange"]{--ord-price-up:64;--ord-price-down:64;--ord-size:69;--ord-year:64}
[data-slug="beagle-boy"]{--ord-price-up:65;--ord-price-down:65;--ord-size:70;--ord-year:65}
[data-slug="black-dog-in-bloom"]{--ord-price-up:66;--ord-price-down:66;--ord-size:29;--ord-year:66}
[data-slug="black-dog-photo"]{--ord-price-up:67;--ord-price-down:67;--ord-size:71;--ord-year:67}
[data-slug="bulldog-portrait"]{--ord-price-up:68;--ord-price-down:68;--ord-size:72;--ord-year:68}
[data-slug="dog-in-dress-uniform"]{--ord-price-up:69;--ord-price-down:69;--ord-size:73;--ord-year:69}
[data-slug="pug-in-teal"]{--ord-price-up:70;--ord-price-down:70;--ord-size:74;--ord-year:70}
[data-slug="setter-in-green"]{--ord-price-up:71;--ord-price-down:71;--ord-size:30;--ord-year:71}
[data-slug="setter-photo"]{--ord-price-up:72;--ord-price-down:72;--ord-size:75;--ord-year:72}
[data-slug="three-boston-terriers"]{--ord-price-up:73;--ord-price-down:73;--ord-size:76;--ord-year:73}
[data-slug="tricolor-dog-on-blue"]{--ord-price-up:74;--ord-price-down:74;--ord-size:31;--ord-year:74}
[data-slug="tricolor-dog-photo"]{--ord-price-up:75;--ord-price-down:75;--ord-size:77;--ord-year:75}
[data-slug="aussie-puppy-photo"]{--ord-price-up:76;--ord-price-down:76;--ord-size:78;--ord-year:76}
[data-slug="beach-day-shell-ornament"]{--ord-price-up:77;--ord-price-down:77;--ord-size:79;--ord-year:77}
[data-slug="beachcomber-shell-ornament"]{--ord-price-up:78;--ord-price-down:78;--ord-size:80;--ord-year:78}
[data-slug="border-collie-photo"]{--ord-price-up:79;--ord-price-down:79;--ord-size:81;--ord-year:79}
[data-slug="cavalier-photo"]{--ord-price-up:80;--ord-price-down:80;--ord-size:82;--ord-year:80}
[data-slug="husky-photo"]{--ord-price-up:81;--ord-price-down:81;--ord-size:83;--ord-year:81}
[data-slug="monarch-shell-ornament"]{--ord-price-up:82;--ord-price-down:82;--ord-size:84;--ord-year:82}
[data-slug="moored-sailboats"]{--ord-price-up:83;--ord-price-down:83;--ord-size:24;--ord-year:83}
[data-slug="outlet-cover-amber-glass"]{--ord-price-up:84;--ord-price-down:84;--ord-size:85;--ord-year:84}
[data-slug="outlet-cover-mosaic-tile"]{--ord-price-up:85;--ord-price-down:85;--ord-size:86;--ord-year:85}
[data-slug="pet-shell-ornaments"]{--ord-price-up:86;--ord-price-down:86;--ord-size:87;--ord-year:86}
[data-slug="riverside-village-at-sunset"]{--ord-price-up:87;--ord-price-down:87;--ord-size:10;--ord-year:87}
[data-slug="switch-covers-grey-tile"]{--ord-price-up:88;--ord-price-down:88;--ord-size:88;--ord-year:88}
