/* Generated by build-css.py from nagori.css, nav.css, line.css — do not edit this file.
   Edit those, then run build-css.py. */

/* ---- css/nagori.css ---- */
/* ============================================================
   NAGORI — brand layer
   Loaded last. Everything here enforces a rule that is written
   down in the brand kit; each block cites the rule it serves.
   ============================================================ */

/* ---- §07 RADIUS: 0 px everywhere. Curves belong to the glass. ----
   ---- §07 SHADOW: none. Depth is made with hairlines and space. ---- */
*, *::before, *::after { border-radius: 0 !important; box-shadow: none !important; }

/* ---- Italics: only where the copy asks for them, in DM Sans italic.
   Headlines stay upright. ---- */
h1, h2, h3, .statement, .display { font-style: normal; }

/* ---- TYPE: body DM Sans 400 at 16/1.65. Never below 16 px for reading. ---- */
body {
  background: var(--nagori-kozo);
  color: var(--nagori-sumi);
  font-family: var(--nagori-font-reading);
  font-weight: 400;
  font-size: 16px;
  line-height: var(--nagori-leading-body);
  letter-spacing: 0;
}

/* §02 measure 60–68 characters, ragged right, never justified.
   Set at the floor: at 66ch the column read diffuse beside houses
   that run 47–52ch. 60 is as tight as §02 allows. */
.body-text, p {
  font-family: var(--nagori-font-reading);
  font-weight: 400;
  font-size: 16px;
  line-height: var(--nagori-leading-body);
  letter-spacing: 0;
  text-align: left;
  max-width: 60ch;
  color: var(--nagori-read);
}

/* §02 scale — statement / heading / body / notation / label key */
.display, .statement {
  font-family: var(--nagori-font-reading);
  font-weight: 300;
  line-height: var(--nagori-leading-statement);
  letter-spacing: -0.006em;
  font-size: clamp(22px, 3.3vw, 34px);
}
.headline, .title, h2, h3 {
  font-family: var(--nagori-font-reading);
  font-weight: 500;
  font-size: clamp(19px, 2.2vw, 21px);
  line-height: 1.35;
  letter-spacing: 0.01em;
  color: var(--nagori-sumi);
}
.display em, .headline em { font-weight: 300; color: var(--nagori-sumi); }

/* ---- §02 NOTATION: anything counted, dated, timed, measured or filed ---- */
.eyebrow, .caption, .label, .origin, .footer-social, .legal-updated, .article-meta, .co-row, .cart-item-variant, .gift-price {
  font-family: var(--nagori-font-label);
  font-weight: 400;
  font-size: 12px;
  line-height: 1.9;
  letter-spacing: var(--nagori-track-notation);
  text-transform: uppercase;
  color: var(--nagori-ash);
  font-variant-numeric: tabular-nums;
}
/* .small is fine print, not notation: sentences, ingredient lists, captions.
   It stays in the reading face and keeps its sentence case. */
.small {
  font-family: var(--nagori-font-reading);
  font-weight: 400;
  font-size: 14px;
  line-height: 1.55;
  letter-spacing: 0;
  text-transform: none;
  color: var(--nagori-ash);
  max-width: 60ch;
}

/* label key — the quieter of the two notation roles */
.label, .co-row .l {
  font-weight: 300;
  font-size:12px;
  line-height: 1.8;
  letter-spacing: var(--nagori-track-label);
}
/* values sit in ink, keys sit in ash */


/* §02 numerals: tabular lining wherever a number sits in a column */
table, .record, .register, .co-totals { font-variant-numeric: tabular-nums; }

/* ---- §02 JAPANESE: 名残 and any CJK setting ---- */


/* ---- §07 BUTTONS: rectangles, zero radius, DM Mono 400 at 11.5 px, +0.14 em.
        Never an arrow, never a chevron, never "Shop now". ---- */
.btn, .btn--border, .btn--lg, .btn--ghost, button, .pdp-cart, .pdp-sample, .checkout-place, .contact-submit, .consult-submit, .footer-submit {
  font-family: var(--nagori-font-label);
  font-weight: 400;
  font-size: 11.5px;
  letter-spacing: var(--nagori-track-notation);
  text-transform: uppercase;
  color: var(--nagori-sumi);
  background: transparent;
  border: 1px solid var(--nagori-sumi);
  padding:16px 28px;
  transition: opacity var(--nagori-motion) ease-out;
}
.btn:hover, .btn--border:hover, .btn--ghost:hover, button:hover { opacity: 0.62; }
/* the bag's stepper and remove link are controls, not §07 buttons: without
   this they took the 16 × 28 padding above and swelled to 58 × 34. The
   stepper sits on its own line under the size. */
.cart-qty { display: flex; width: max-content; margin-top: .6rem; }
.cart-qty button { padding: 0; width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center; }
.cart-remove { padding: 0; min-height: 32px; }
/* tertiary / link — a rule under the words, no border box */
.btn--ghost {
  border: none;
  border-bottom: 1px solid var(--nagori-hairline);
  padding: 0 0 3px;
  color: var(--nagori-ash);
}
/* §07 focus state is a 2 px Ai outline and is never removed */
a:focus-visible, button:focus-visible, input:focus-visible,
textarea:focus-visible, select:focus-visible, summary:focus-visible {
  outline: 2px solid var(--nagori-ai);
  outline-offset: 2px;
}

/* ---- §07 MOTION: opacity fades, 180 ms, ease-out.
        No slide-ins, no parallax, no scroll reveals, no skeleton shimmer.

        This is the default and it stays the default: anything on this site
        that has not been named below fades, in 180 ms, and does nothing else.

        What it was also doing, until 24 September 2026, was overruling motion
        that had been chosen deliberately — silently, because !important wins
        however the other rule is written. The line across the five had never
        once drawn itself; the hero had never made its slow approach; the bag
        snapped open instead of sliding. Every one of those was written, with
        a reduced-motion fallback, by someone who then watched it not happen.

        So the exceptions are named, one at a time, where each motion is
        defined, and each carries !important and the same tag:

            grep -rn "§07-exempt" css/

        Twenty of them today. Nothing opts in by accident — a rule has to be
        given the tag by hand, which is the entire point of the tag. Adding
        one is a decision about how the house moves, not a bug fix, and the
        list is short enough to read in one sitting on purpose. ---- */
*, *::before, *::after {
  transition-property: opacity, color, background-color, border-color !important;
  transition-duration: var(--nagori-motion) !important;
  transition-timing-function: ease-out !important;
  animation: none !important;
}
/* anything that was hidden pending a scroll reveal is simply present */
.revealed, .visible { opacity: 1 !important; transform: none !important; }
/* an image frame waits in the hairline tone. The old dark art-directed
   placeholders read as black holes while a photograph was still arriving */
.ph, .ph--01, .ph--02, .ph--03 { background-color: var(--nagori-hairline); background-image: none; }

/* ---- §01 MARKS. One file, masked, so it inherits colour from context. ----
        Header and footer sit below 200 px, so both take the small cut. */




/* §01 clear space: 2 × cap height, nothing enters the field */


/* ---- §03 RULES: hairlines only. Ai is a rule, never a ground. ---- */
.rule, hr, .article-rule { background: var(--nagori-hairline); border: none; height: 1px; }
a { color: var(--nagori-ai); }
::selection { background: var(--nagori-mist); color: var(--nagori-sumi); }

/* ---- §05 THE RECORD — eleven fields, one order, every object.
        Keys DM Mono 300 at +.16 em in Ash, values DM Mono 400 in Sumi.
        Hairlines between rows only — never vertical, never boxed. ---- */
.record { width: 100%; border-collapse: collapse; background: var(--nagori-plate); margin: 2rem 0; }
.record th, .record td {
  font-family: var(--nagori-font-label);
  text-align: left;
  padding:12px 16px;
  border: none;
  border-bottom: 1px solid var(--nagori-hairline);
  vertical-align: baseline;
}
.record th {
  font-weight: 300; font-size:12px; line-height: 1.8;
  letter-spacing: var(--nagori-track-label);
  text-transform: uppercase; color: var(--nagori-ash);
  width: 38%; white-space: nowrap;
}
.record td { font-weight: 400; font-size: 12px; letter-spacing: 0.06em; color: var(--nagori-sumi); }
.record tr:last-child th, .record tr:last-child td { border-bottom: none; }
/* §05 a corrected record stays legible — the only permitted strike in the system */
.record s { text-decoration: line-through; color: var(--nagori-ash); }

/* ---- §07 COLLECTION IS A REGISTER, NOT A GRID.
        Archive number, name, family, concentration, price. One thumbnail per row. ---- */
.register { width: 100%; border-collapse: collapse; margin: 0 0 4rem; }
.register thead th {
  font-family: var(--nagori-font-label);
  font-weight: 300; font-size:12px;
  letter-spacing: var(--nagori-track-label);
  text-transform: uppercase; color: var(--nagori-ash);
  text-align: left; padding:0 16px 8px;
  border-bottom: 1px solid var(--nagori-sumi);
}
.register td {
  padding:16px 16px;
  border-bottom: 1px solid var(--nagori-hairline);
  vertical-align: middle;
  font-family: var(--nagori-font-label);
  font-size: 12px; letter-spacing: 0.06em;
  color: var(--nagori-ash);
}



.register img { display: block; width: 56px; height: 70px; object-fit: cover; }
.register tbody tr { transition: opacity var(--nagori-motion) ease-out; }
.register tbody tr:hover { opacity: 0.62; }
.register a { text-decoration: none; color: inherit; }
@media (max-width: 760px) {
  /* §07 the record table scrolls horizontally rather than wrapping */
  .record-wrap { overflow-x: auto; }
  .register { min-width: 620px; }
}

/* ---- §03 ratio: Kozo 70 · Sumi 22 · Mist 6. Dark sections are Sumi. ---- */



/* ---- §07 GRID: 12 columns, 24 px gutter, 1240 max.
        Outer margin never below one full column. ---- */
.container--wide, .container, .container--narrow { max-width: var(--grid-max); }
.container--narrow { max-width: 720px; }
@media (max-width: 760px) { .container, .container--wide, .container--narrow { padding-left: 20px; padding-right: 20px; } }

@media (prefers-reduced-motion: reduce) { * { transition: none !important; } }

/* ---- §07 HOME: statement, then the archive as a list. Nothing else. ---- */


.statement { max-width: 28ch; margin: 0; }










/* ---- footer additions ---- */




/* ---- collection register ---- */
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.register td a { display: block; }


.coll-hero { padding: clamp(70px, 12vh, 130px) 0 clamp(30px, 5vh, 54px); }
.coll-hero-body { margin-top:24px; }

/* ============================================================
   §07 PRODUCT PAGE
   Name and archive number · one image · the paragraph · the full
   eleven-field record · materials with origins · honest wear time
   in hours · price · add to bag · discovery set as the alternative.
   ============================================================ */



.pdp-panel { padding: clamp(56px, 8vw, 104px) clamp(28px, 5vw, 72px); max-width: 640px; }

.pdp-archive {
  font-family: var(--nagori-font-label); font-size: 12px;
  letter-spacing: var(--nagori-track-notation); color: var(--nagori-ash);
  font-variant-numeric: tabular-nums; margin:0 0 8px;
}
.pdp-name {
  font-family: var(--nagori-font-display); font-weight: 300;
  font-size: clamp(28px, 4vw, 40px); line-height: var(--nagori-leading-statement);
  letter-spacing: -0.006em; color: var(--nagori-sumi); margin:0 0 16px;
}




/* honest wear time, in hours */






.size-selector { display: flex; flex-direction: column; gap: 0; border-top: 1px solid var(--nagori-hairline); margin:0 0 24px; }
.size-option {
  display: flex; align-items: center; gap:8px; cursor: pointer;
  padding: 12px 0; border-bottom: 1px solid var(--nagori-hairline);
  font-family: var(--nagori-font-label); font-size: 12px;
  letter-spacing: 0.06em; color: var(--nagori-ash);
  background: none; border-left: none; border-right: none; border-top: none;
}
.size-option.selected { color: var(--nagori-sumi); background: none; }

.pdp-cart { margin: 0 0 12px; }












/* product.css styles .arc-track as a repeat(3,1fr) card grid. The redesign
   below is a vertical list of rows — label, then text — so that grid has to be
   switched off explicitly, not merely overridden in part. Left on, each row got
   a third of the container and the 190px label column left about fifty pixels
   for the sentence: twenty lines averaging five characters. */

/* product.css also gives each moment a top rule and a small square marker,
   which belong to the card version and fight the row version. */












/* §06 the object placed off-centre against a large empty field */








@media (max-width: 860px) {
  
  .pdp-panel { max-width: none; }
  
  
  
}

/* ---- discovery set ---- */


.disc-cta { margin-top:24px; }


.vial-list { list-style: none; margin:16px 0 0; padding: 0; border-top: 1px solid var(--nagori-hairline); }
.vial-row { display: grid; grid-template-columns: 88px 1fr auto; gap: 20px; align-items: baseline; padding: 16px 0; border-bottom: 1px solid var(--nagori-hairline); opacity: 1; }



@media (max-width: 620px) { .vial-row { grid-template-columns: 74px 1fr; row-gap: 4px; }  }

/* ---- primer / guide rows (layering, language of scent, sustainability) ---- */
.primer-row { display: grid; grid-template-columns: 240px 1fr; gap: 32px; padding:32px 0; border-bottom: 1px solid var(--nagori-hairline); }
.primer-row:first-child { border-top: 1px solid var(--nagori-sumi); }
.primer-term { font-family: var(--nagori-font-reading); font-weight: 500; font-size: 21px; line-height: 1.35; letter-spacing: 0.01em; color: var(--nagori-sumi); margin:8px 0 0; }
.primer-body .body-text { margin: 0 0 12px; }
.primer-list { list-style: none; margin: 0; padding: 0; }
.primer-list li { padding:8px 0; border-bottom: 1px solid var(--nagori-hairline); font-size: 16px; max-width: 60ch; }
.primer-list li:last-child { border-bottom: none; }
.primer-list-k { display: block; font-family: var(--nagori-font-label); font-weight: 300; font-size:12px; letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--nagori-ash); margin-bottom: 4px; }
@media (max-width: 760px) { .primer-row { grid-template-columns: 1fr; gap:8px; } }

/* ---- materials: one material, one image, one origin ---- */
.feature { display: grid; grid-template-columns: 1fr 1fr; gap: 0; align-items: center; border-top: 1px solid var(--nagori-hairline); }





.feature-name { font-family: var(--nagori-font-display); font-weight: 300; font-size: clamp(26px, 3.4vw, 34px); line-height: var(--nagori-leading-statement); letter-spacing: -0.006em; color: var(--nagori-sumi); margin:8px 0 16px; }

.process { border-top: 1px solid var(--nagori-hairline); padding: clamp(44px, 6vw, 72px) 0; }
@media (max-width: 860px) { .feature { grid-template-columns: 1fr; }  }

/* ---- §08 ABOUT: under 250 words. No founder photograph, no journey. ---- */
.about { padding: clamp(70px, 12vh, 130px) 0 clamp(50px, 8vh, 90px); }









/* ---- §02 ragged right, never justified, never centred.
        Every column left-aligned except numeric, which align right. ---- */
.coll-hero, .coll-hero-inner, .coll-hero-body, .rule--center, .contact-hero {
  text-align: left !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
.coll-hero-inner { max-width: none; }
.rule--center { margin: 0 !important; }
.coll-hero-body { max-width: 60ch; }



/* ---- §07 mobile is the design case, not the adaptation ---- */
@media (max-width: 760px) {
  .coll-hero, .about { padding-top: clamp(44px, 9vh, 72px); padding-bottom:24px; }
  
  
  .pdp-panel { padding: 40px 20px 48px; }
  .footer { padding-top: 56px; }
}



/* ---- F.02 the bag and saved triggers are siblings and need a gap.
        .nav-actions is populated at runtime, so this must not rely on markup. ---- */
.nav-actions { display: flex; align-items: center; gap:16px; }


/* ============================================================
   EDITORIAL LAYER
   Cinematic pacing without breaking §07: the drama is scale,
   space and image, never motion. No parallax, no scroll reveal.
   ============================================================ */

/* ---- chapters: long vertical rhythm. Confidence leaves space. ---- */
.chapter { padding: clamp(90px, 16vh, 190px) 0; }
.chapter--tight { padding: clamp(56px, 9vh, 110px) 0; }
.chapter + .chapter { border-top: 1px solid var(--nagori-hairline); }
.chapter-label { display: block; margin-bottom: clamp(26px, 4vw, 44px); }

/* an opening paragraph sits a step above body, never a step above the statement */


/* ---- full-bleed plates: the image is the section ---- */
.plate {
  position: relative;
  width: 100%;
  margin: 0;
  background: var(--nagori-mist);
  overflow: hidden;
}
.plate img { display: block; width: 100%; height: 100%; object-fit: cover; }

.plate--pano  { aspect-ratio: 16 / 9; }


.plate-caption {
  display: block;
  padding: 12px 0 0;
  font-family: var(--nagori-font-label);
  font-weight: 300; font-size:12px;
  letter-spacing: var(--nagori-track-label);
  text-transform: uppercase; color: var(--nagori-ash);
}
/* a line laid over a plate — Kozo on Sumi, never Ai (§03) */


/* an awaited photograph is drawn, not faked — the slot shows its own brief */



/* ---- editorial two-column: image and argument ---- */





/* ---- the homepage index: the five, as an editorial register ---- */










/* ---- the wearing: the brief's emotional dimensions, kept as record fields ---- */
.wearing { width: 100%; border-collapse: collapse; }
.wearing th, .wearing td {
  text-align: left; padding:12px 0; border-bottom: 1px solid var(--nagori-hairline);
  vertical-align: baseline;
}
.wearing th {
  font-family: var(--nagori-font-label); font-weight: 300; font-size:12px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase;
  color: var(--nagori-ash); width: 132px; white-space: nowrap;
}
.wearing td {
  font-family: var(--nagori-font-reading); font-size: 17px;
  color: var(--nagori-sumi); max-width: 52ch;
}
.wearing tr:last-child th, .wearing tr:last-child td { border-bottom: none; }

/* ---- a single line alone in a field ---- */



/* ---- §01 THE INTERVAL MARK ----------------------------------------
   The house has two marks: the wordmark, and the interval mark — two
   facing arcs with a gap held open between them. Until now the interval
   mark appeared only on the loading screen, which almost nobody sees.
   It is the drawing of the thing the house is named for, so it now marks
   every place the site stops speaking: a line alone, a pause, a break
   between chapters. One mark, one meaning, on nearly every page.
   ------------------------------------------------------------------ */





/* ---- THE ISSUE ------------------------------------------------------
   Not a size picker. The same object as the register on collection.html:
   ruled rows, a notation header, tabular prices hard right. Choosing a
   size is choosing a line. The selected line is marked in the gutter with
   the interval mark — the house's own mark, doing the work an accent
   colour would do on a shop, which §03 does not allow.
   ------------------------------------------------------------------- */














/* ---- THE OPENING: staged, not described ----------------------------
   The page already said what unwrapping a bottle is like. Four frames in
   order, numbered like every other record on the site, so the ceremony is
   shown at the length it actually takes rather than only claimed.
   ------------------------------------------------------------------ */








/* ---- THE HOUR ------------------------------------------------------
   The house composes for a time of day, so the register can be read by
   one. Filtering is the register's own idea: rows that do not answer the
   hour are struck out of view, not hidden by a select box.
   ------------------------------------------------------------------ */















/* the hour, stated beside the archive number on the edition's own page */



/* ---- THE WEARING, COMPARED -----------------------------------------
   Aesop keeps a comparison tool and is the strictest subtractor in the
   set, so restraint is not an argument against having one. Every cell is
   read from that edition's own record — the comparison states nothing the
   product page does not already state.
   ------------------------------------------------------------------ */


.compare {
  width: 100%; min-width: 1080px; border-collapse: collapse;
  margin:0 0 24px; table-layout: fixed;
}
.compare thead th {
  vertical-align: bottom; text-align: left; padding:0 16px 16px 0;
  border-bottom: 1px solid var(--nagori-sumi);
  font-family: var(--nagori-font-reading); font-weight: 300; font-size: 17px;
  letter-spacing: -.006em; color: var(--nagori-sumi);
}
.compare thead th:first-child { width: 118px; border-bottom-color: var(--nagori-hairline); }
.compare thead a { text-decoration: none; color: inherit; display: block; }
.compare thead a:hover { color: var(--nagori-ash); }
.cmp-no {
  display: block; margin-bottom:8px;
  font-family: var(--nagori-font-label); font-weight: 300; font-size:12px;
  letter-spacing: var(--nagori-track-notation); text-transform: uppercase;
  color: var(--nagori-ash); font-variant-numeric: tabular-nums;
}
.compare tbody th {
  text-align: left; vertical-align: top; padding:20px 16px 20px 0;
  border-bottom: 1px solid var(--nagori-hairline);
  font-family: var(--nagori-font-label); font-weight: 300; font-size:12px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase;
  color: var(--nagori-ash); white-space: nowrap;
}
.compare tbody td {
  vertical-align: top; padding:20px 16px 20px 0;
  border-bottom: 1px solid var(--nagori-hairline);
  font-family: var(--nagori-font-reading); font-weight: 300;
  font-size: 14px; line-height: 1.62; color: var(--nagori-sumi);
}
.compare tbody tr:last-child th, .compare tbody tr:last-child td { border-bottom: none; }

/* the consultation's promise — rendered only when config.js carries one */
.consult-promise {
  margin: 1.6em 0 0;
  font-family: var(--nagori-font-label); font-weight: 300; font-size:12px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase;
  color: var(--nagori-ash);
}

/* The horizontal scroll that used to be here was treating the symptom: the
   row overflowed because it was still a three-column grid. That is fixed at
   the source above, so there is nothing to scroll. */

/* ---- the material an edition is built on, weighted -------------------
   Born To Stand Out sets its dominant notes heavier than the supporting
   ones, which turns a list into a hierarchy. Ours marks the one material
   the edition is stated to be built on — a fact from the record, not a
   judgement about which note leads. Weight, never colour: §03.
   ------------------------------------------------------------------ */
.pyr-lead { font-weight: 500; color: var(--nagori-sumi); }



/* ---- what applies at the point of buying, on one line ---------------- */





/* ---- THE INSCRIPTION -------------------------------------------------
   Le Labo puts personalisation on the product page, not buried at
   checkout, and shows the characters left as you type — so the constraint
   is part of the object rather than a validation error later. Cap
   engraving already existed here; it was three pages further on.
   Built as a register row, like the issue above it.
   ------------------------------------------------------------------ */



   /* 1.52:1 was unreadable */











.co-row--note .l, .co-row--note .v {
  font-family: var(--nagori-font-label); font-weight: 300; font-size:12px;
  letter-spacing: var(--nagori-track-notation); text-transform: uppercase;
  color: var(--nagori-read);
}
.co-row--note .v { text-align: right; max-width: 30ch; line-height: 1.7; }
.co-row--note[hidden] { display: none; }
.currency-notice {
  margin: 0 0 0.8rem; font-family: var(--nagori-font-label); font-weight: 300;
  font-size:12px; letter-spacing: var(--nagori-track-notation);
  text-transform: uppercase; line-height: 1.7; color: var(--nagori-read);
  max-width: 46ch;
}
.currency-notice[hidden] { display: none; }
.currency-switch {
  appearance: none; background: none; border: 0; padding:0 16px 0 0; cursor: pointer;
  font-family: var(--nagori-font-label); font-weight: 300; font-size: 11.5px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: inherit;
  background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
                    linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position: right 4px center, right 0 center;
  background-size: 4px 4px, 4px 4px; background-repeat: no-repeat;
}
.currency-switch:focus-visible { outline: 1px solid currentColor; outline-offset: 3px; }
.currency-switch option { color: var(--nagori-sumi); background: var(--nagori-kozo); }
.preorder-note {
  margin: 0 0 0.9rem; font-family: var(--nagori-font-reading); font-weight: 400;
  font-size: 14px; letter-spacing: 0; text-transform: none;
  line-height: 1.55; color: var(--nagori-read); max-width: 46ch;
}

.cart-item-eng {
  display: block; font-family: var(--nagori-font-label); font-weight: 300;
  font-size:12px; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--nagori-ash); margin-top: 3px;
}

/* ---- BREADCRUMB ------------------------------------------------------
   Every reference house has one; we had none on any page. It sits at the
   head of the text column so the full-bleed hero is untouched.
   ------------------------------------------------------------------ */
.crumbs { margin: 0 0 1.6rem; }
.crumbs ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: .55em; }
.crumbs li {
  font-family: var(--nagori-font-label); font-weight: 300; font-size:12px;
  letter-spacing: 0.1em; text-transform: uppercase; color: var(--nagori-ash);
}
.crumbs li + li::before { content: "/"; margin-right: .55em; color: var(--nagori-ash); }
.crumbs a { color: var(--nagori-ash); text-decoration: none; }
.crumbs a:hover { color: var(--nagori-sumi); }
.crumbs [aria-current="page"] { color: var(--nagori-sumi); }

/* ---- ingredient pages ---- */







/* ---- rituals ---- */
.ritual { padding: clamp(30px, 5vw, 46px) 0; border-bottom: 1px solid var(--nagori-hairline); }
.ritual:first-of-type { border-top: 1px solid var(--nagori-sumi); }



@media (max-width: 860px) {
  
  
  
  
  .wearing th { width: 108px; }
}

/* ---- the note pyramid sits above the fold: it is what a fragrance-literate
        reader came for, and it should not be the sixth section down ---- */







/* ---- config-driven components. Each is absent, not empty, when unconfigured ---- */
.press-list { border-top: 1px solid var(--nagori-hairline); margin-top:16px; }
.press-row { display: grid; grid-template-columns: 180px 1fr 90px; gap: 20px; align-items: baseline; padding:16px 0; border-bottom: 1px solid var(--nagori-hairline); }
.press-outlet { font-family: var(--nagori-font-label); font-weight: 300; font-size:12px; letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--nagori-ash); }
.press-title { font-family: var(--nagori-font-reading); font-size: 16px; color: var(--nagori-sumi); text-decoration: none; }
.press-title:hover { opacity: .62; }
.press-date { font-family: var(--nagori-font-notation); font-size: 12px; letter-spacing: var(--nagori-track-notation); color: var(--nagori-ash); text-align: right; font-variant-numeric: tabular-nums; }
.currency-switch, .currency-static {
  font-family: var(--nagori-font-label); font-weight: 400; font-size: 11.5px;
  letter-spacing: var(--nagori-track-notation); text-transform: uppercase;
  color: var(--nagori-ash); background: transparent; border: none; padding: 0;
  appearance: none; cursor: pointer;
}
.currency-switch:hover { color: var(--nagori-sumi); }
/* an editor sees the unfilled state; a visitor sees nothing */
[data-unfilled] { display: none; }
@media (max-width: 760px) { .press-row { grid-template-columns: 1fr; gap: 4px; } .press-date { text-align: left; } }

/* ---- PRINT -----------------------------------------------------------
   A house that letterpresses an archive card should survive a printer.
   The chrome goes; the record stays, unbroken, on paper.
   ------------------------------------------------------------------- */
@media print {
  .nav, .nav-overlay, .skip-link, .cart-drawer, .footer, .pdp-cart, .pdp-sample, .btn { display: none !important; }

  html, body { background: #fff !important; color: #000 !important; }
  main { padding-top: 0 !important; }
  a { text-decoration: none; color: #000 !important; }

  /* a record must never be split across a page break */
  .record, .wearing, .register, .compare, .record-wrap, figure, .plate { break-inside: avoid; page-break-inside: avoid; }
  .record th, .record td, .wearing th, .wearing td,
  .register th, .register td, .compare th, .compare td {
    border-color: #000 !important; color: #000 !important;
  }
  
  .compare { min-width: 0 !important; }

  h1, h2, h3 { break-after: avoid; page-break-after: avoid; }
  img { max-width: 100% !important; break-inside: avoid; }

  /* the archive number is the identifier — print it beside the name */
  .pdp-archive::after { content: " · nagoriolfactive.com"; color: #000; }
}

/* ---- WhatsApp. Renders only when js/config.js carries a number; the rule
   costs nothing while that is empty because the element is never created.
   Kept in the house greyscale — no brand green, no icon, no badge. ---- */
.wa-float {
  position: fixed; right: 20px; bottom: 20px; z-index: 60;
  display: inline-block; padding:12px 16px;
  background: var(--nagori-sumi); color: var(--nagori-kozo);
  font-family: var(--nagori-font-label); font-weight: 300; font-size:12px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase;
  text-decoration: none;
  transition: opacity var(--nagori-motion) ease;
}
.wa-float:hover { opacity: .82; }
.wa-float:focus-visible { outline: 1px solid var(--nagori-ai); outline-offset: 3px; }
@media (max-width: 620px) { .wa-float { right: 14px; bottom: 14px; padding:8px 16px; } }
@media (prefers-reduced-motion: reduce) { .wa-float { transition: none; } }

/* ---- Ask the house. Created only when /api/chat reports a key in the
   environment, so these rules cost nothing until then. Same greyscale as
   the rest: no bubbles, no avatars, no rounded corners. ---- */



/* when WhatsApp is also present it takes the corner and this sits above it */




























/* ---- Last-line orphans -------------------------------------------------
   Eleven paragraphs across the site ended on a single short word alone —
   "best.", "changed.", "equivalent.", "paper.". `pretty` is the property
   made for exactly this: it pulls a word back rather than equalising every
   line the way `balance` does, so running prose keeps its natural rag.
   Display type that already asks for `balance` is left alone; browsers
   without support ignore it and nothing changes. ---- */
p, .body-text, .legal-p, .accordion-inner p, .article-body p {
  text-wrap: pretty;
}
/* experience.css loads after this file, so the display type that asks for
   `balance` keeps it; only unclassed prose falls through to `pretty`. */

/* ---- The graduation ------------------------------------------------------
   The flask carries a graduated scale with the vermilion band at the top of
   it: the level starts at the band and only ever falls. The Brand Bible puts
   the same device on the site — "graduated marks along a rule, long at every
   fifth, short between… used on the site's section dividers" — so the site's
   dividers become the scale rather than a plain hairline.

   Drawn with gradients, so it costs no image, scales to any width, and stays
   crisp at any density. The single vermilion mark is the index: one per rule,
   never a row of them. ---------------------------------------------------- */


/* the index — one mark, at the start of the scale */


/* NOT applied to the record. The scale was tried there and pulled: it measures
   nothing on that block, which makes it a texture band referencing the bottle
   rather than an instrument, and §06 forbids decoration. It also collided with
   the caption. The component stays below, ready for the place where it will
   measure something real — most likely the volume selector, once 100 ml or
   50 ml is settled, or a wear scale against the hours the edition actually
   lasts. Do not apply it until it has something to measure. */

/* On ink the two tick weights swap round: the hairline is the lighter colour,
   so against a dark ground it out-shouts the ash and the long-every-fifth
   hierarchy is lost. Invert the pair so the reading stays the same. */




/* ---- The wear scale ------------------------------------------------------
   The graduation, put where it measures something. The flask's scale measures
   what is left in the bottle; this one measures what is left on skin — which
   is the thing the house says it composes for. "Everyone composes for the
   first spray. We compose for the hour after."

   The vermilion index is the first spray: the datum, at zero, exactly as the
   band sits at the first-fill line on the flask. Everything to the right of it
   is the hour after.

   One scale across all five editions, so they are comparable at a glance —
   that is the whole reason to draw it rather than only write the sentence.
   The sentence stays and carries the meaning for anyone not seeing this, which
   is why the figure is aria-hidden rather than given a role of its own. ---- */



/* the interval this edition actually occupies */

/* an open-ended figure — "twelve hours or more" — fades rather than stopping */

/* the first spray */




/* a struck entry that came back — the strike stays, the pointer is added */




/* ---------- touch targets ----------
   Thirty-five of the sixty-six controls on the homepage measured under 44px
   high, because the notation register is small and most controls are set in
   it. Rather than enlarge the type everywhere, the hit area is grown on
   coarse pointers only: the mark stays the same size, the target does not. */
@media (pointer: coarse), (max-width: 768px) {
  .x-link, .btn, .btn--ghost, .btn--border, .size-option, .crumbs a, .nav-overlay a, footer a, .footer-submit, .cart-close, .cart-trigger {
    min-height: 44px;
  }
  .cart-close, .cart-trigger, .footer-submit { min-width: 44px; }
  /* grown to 44px, the bag's label would sit at the top of its box and
     ride above the currency beside it */
  .cart-trigger { align-items: center; }
  .x-link, .crumbs a {
    display: inline-flex; align-items: center;
  }
  
}


/* ---------- the registered address ----------
   An unknown house asking fifteen thousand rupees has to say where it is.
   Set in the notation register, because an address is data, and left
   unstyled otherwise — <address> defaults to italic and the kit forbids it
   (the global reset already normalises font-style, this is belt and braces). */

.channel-addr{
  font-style: normal; line-height: 1.6;
}
.channel-note{ color: var(--nagori-ash); margin-top: 8px; }



/* ---------- About: why a Japanese word ----------
   A heading for the reader and the outline, set in the caption register so it
   reads as a label within the essay rather than a new chapter. */

/* ---- css/nav.css ---- */
/* ============================================================
   NAGORI — the header, the menu and search
   Three things at rest: Menu, the name, and Search · currency · Bag.
   Everything else lives in the menu. On the home page the bar sits
   over the film in Leaf until the page moves.
   ============================================================ */

:root { --nav-h: 72px; }
@media (max-width: 720px) { :root { --nav-h: 60px; } }

nav.nav {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 900;
  height: var(--nav-h);
  background: var(--leaf);
  border-bottom: 1px solid var(--rule);
  color: var(--ink);
  transition: background-color .4s ease, border-color .4s ease, color .4s ease;
}
body { padding-top: var(--nav-h); }
body.home { padding-top: 0; }

.nav-inner {
  height: 100%;
  max-width: var(--max);
  margin: 0 auto;
  padding: 0 var(--gut);
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 16px;
}

/* ---- Menu ---- */
.nav-hamburger {
  justify-self: start;
  display: inline-flex; align-items: center; gap: 12px;
  min-height: 44px; padding: 0; margin: 0;
  background: none; border: 0; cursor: pointer; color: inherit;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase;
}
.nav-burger { position: relative; display: block; width: 20px; height: 8px; }
.nav-burger span {
  position: absolute; left: 0; width: 20px; height: 1px; background: currentColor;
  transition: transform .3s ease, top .3s ease !important;  /* §07-exempt */
}
.nav-burger span:nth-child(1) { top: 0; }
.nav-burger span:nth-child(2) { top: 7px; }
.nav.open .nav-burger span:nth-child(1) { top: 4px; transform: rotate(35deg); }
.nav.open .nav-burger span:nth-child(2) { top: 4px; transform: rotate(-35deg); }
.nav-close-label { display: none; }
.nav.open .nav-menu-label { display: none; }
.nav.open .nav-close-label { display: inline; }

/* ---- the name ---- */
/* the drawn wordmark (brand/nagori-wordmark-small.svg), in the bar's colour */
/* The wordmark is drawn at 134 x 21, which is a 21 px tall thing to hit with
   a thumb — under the 24 x 24 that WCAG 2.2 AA asks of a target (2.5.8). The
   box is 158 x 40 and the mark is painted at its own size in the middle of
   it, so the mark has not moved and the target is now a comfortable one. */
.nav-logo {
  --mark-w: 134px; --mark-h: 21px;
  justify-self: center;
  display: block; margin: 0;
  width: calc(var(--mark-w) + 24px);
  height: max(40px, calc(var(--mark-h) + 16px));
  background: currentColor;
  -webkit-mask: url(../brand/nagori-wordmark-small.svg) center / var(--mark-w) var(--mark-h) no-repeat;
          mask: url(../brand/nagori-wordmark-small.svg) center / var(--mark-w) var(--mark-h) no-repeat;
  font-size: 0; line-height: 0; color: inherit; text-decoration: none; overflow: hidden;
}
.nav-logo:hover { color: inherit; }

/* ---- Search · currency · Bag ---- */
.nav-actions {
  justify-self: end;
  display: flex; align-items: center; gap: 26px;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase;
}
.nav-search, .nav .cart-trigger {
  appearance: none; background: none; border: 0; padding: 0; margin: 0;
  min-height: 44px; display: inline-flex; align-items: center; gap: .35em;
  cursor: pointer; color: inherit;
  font: inherit; letter-spacing: inherit; text-transform: inherit;
}
.nav .cart-count { font: inherit; color: inherit; font-feature-settings: "tnum" 1; }
.nav [data-currency], .nav .currency-static, .nav .currency-switch {
  font: inherit; letter-spacing: inherit; text-transform: inherit; color: inherit;
}
.nav .currency-switch {
  appearance: none; -webkit-appearance: none; background: none; border: 0; padding: 0 2px;
  min-height: 44px; cursor: pointer;
}
.nav .currency-switch option { color: var(--ink); background: var(--leaf); }
.nav-search:hover, .nav .cart-trigger:hover, .nav .currency-switch:hover, .nav-hamburger:hover { opacity: .6; }
.nav-search:focus-visible, .nav .cart-trigger:focus-visible, .nav-hamburger:focus-visible,
.nav-logo:focus-visible, .nav .currency-switch:focus-visible { outline: 1px solid currentColor; outline-offset: 4px; }

@media (max-width: 720px) {
  .nav-menu-label, .nav.open .nav-close-label { display: none; }
  .nav-hamburger { width: 44px; }
  .nav-logo { --mark-w: 108px; --mark-h: 17px; }
  .nav-actions { gap: 14px; font-size: 11px; }
  .nav-search { display: none; }
}

/* ---- over the film (Leaf on a dark picture, ink on a light one) ---- */
body.home .nav:not(.scrolled):not(.open) {
  background: transparent;
  border-bottom-color: transparent;
  color: var(--leaf);
}
body.home .nav:not(.scrolled):not(.open)::before {
  content: ""; position: absolute; inset: 0 0 -96px; z-index: -1; pointer-events: none;
  background: linear-gradient(to bottom, rgba(26,26,26,.5), rgba(26,26,26,.22) 55%, rgba(26,26,26,0));
}
body.home:has(.l-slide.is-on[data-tone="light"]) .nav:not(.scrolled):not(.open) { color: var(--ink); }
body.home:has(.l-slide.is-on[data-tone="light"]) .nav:not(.scrolled):not(.open)::before {
  background: linear-gradient(to bottom, rgba(246,244,237,.7), rgba(246,244,237,.3) 55%, rgba(246,244,237,0));
}

/* ============================================================
   The menu — one panel for every screen
   ============================================================ */
.nav-overlay {
  position: fixed;
  top: var(--nav-h); left: 0; right: 0; bottom: 0;
  z-index: 899;
  background: var(--leaf);
  border-top: 1px solid var(--rule);
  overflow-y: auto; overscroll-behavior: contain;
  opacity: 0; visibility: hidden;
  transition: opacity .3s ease, visibility 0s linear .3s;
  display: flex; flex-direction: column;
}
.nav.open .nav-overlay { opacity: 1; visibility: visible; transition: opacity .3s ease; }

.menu-grid {
  width: 100%; max-width: var(--max); margin: 0 auto;
  padding: clamp(32px, 6vh, 72px) var(--gut) 32px;
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) minmax(0, .8fr) minmax(0, 1.1fr);
  gap: clamp(24px, 4vw, 64px);
  align-items: start;
}
.menu-col { display: flex; flex-direction: column; }
.menu-k {
  margin: 0 0 14px;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--graphite);
}
.menu-k:not(:first-child) { margin-top: 32px; }
.nav-overlay a, .nav-overlay-search { text-decoration: none; color: var(--ink); }
.menu-main a {
  font-family: var(--nagori-font-display); font-weight: 300;
  font-size: clamp(28px, 3vw, 40px); line-height: 1.22; letter-spacing: -.01em;
}
.menu-five a {
  display: grid; grid-template-columns: 66px minmax(0, 1fr); align-items: baseline;
  padding: 10px 0; border-top: 1px solid var(--rule);
  font-family: var(--nagori-font-display); font-weight: 300; font-size: 22px; line-height: 1.2;
}
.menu-five a:last-child { border-bottom: 1px solid var(--rule); }
.menu-five a span {
  display: inline-flex; align-items: center;
  font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .12em; color: var(--graphite);
}
.menu-help a, .menu-help .nav-overlay-search {
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; line-height: 2.6;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase;
}
.nav-overlay a:hover, .nav-overlay-search:hover { color: var(--graphite); }
/* Search in the menu opens a dialog, so it is a button: an <a href="#"> is
   not a place you can go, and a crawler is told to follow it. The button
   carries no look of its own — the rules above draw it, and these three
   lines only undo what a browser gives a <button> for free. */
.nav-overlay-search {
  appearance: none; -webkit-appearance: none; background: none; border: 0;
  padding: 0; margin: 0; text-align: inherit; cursor: pointer; width: 100%;
}
.nav-overlay-feature { margin: 0; overflow: hidden; aspect-ratio: 4 / 5; background: var(--rule); }
.nav-overlay-feature img { width: 100%; height: 100%; object-fit: cover; display: block; }

.nav-overlay-foot {
  width: 100%; max-width: var(--max); margin: auto auto 0;
  padding: 20px var(--gut) 28px;
  border-top: 1px solid var(--rule);
  display: flex; gap: 24px; align-items: baseline; justify-content: space-between;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--graphite);
}
.nav-overlay-foot a { color: var(--graphite); }

@media (max-width: 1080px) {
  .menu-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .nav-overlay-feature { display: none; }
}
@media (max-width: 720px) {
  .menu-grid { grid-template-columns: minmax(0, 1fr); gap: 28px; padding-top: 24px; }
  .menu-main a { font-size: 30px; }
}
@media (prefers-reduced-motion: reduce) {
  .nav-overlay, .nav.open .nav-overlay, .nav-burger span, nav.nav { transition: none; }
}

/* ============================================================
   Search
   ============================================================ */
/* display:flex below would otherwise beat the [hidden] attribute */
.search-panel[hidden] { display: none; }
.search-panel {
  position: fixed; inset: 0; z-index: 950;
  background: var(--leaf);
  display: flex; align-items: flex-start; justify-content: center;
  padding: clamp(84px, 14vh, 160px) var(--gut) 40px;
  overflow-y: auto; overscroll-behavior: contain;
}
.search-inner { width: 100%; max-width: 760px; }
.search-field {
  display: flex; align-items: baseline; gap: 20px;
  border-bottom: 1px solid var(--ink); padding-bottom: 16px;
}
.search-input {
  flex: 1 1 auto; min-width: 0; appearance: none; background: none; border: 0; padding: 0;
  font-family: var(--nagori-font-display); font-weight: 300;
  font-size: clamp(1.6rem, 3.4vw, 2.5rem); line-height: 1.2; color: var(--ink);
}
.search-input::placeholder { color: var(--graphite); opacity: .55; }
.search-input:focus { outline: none; }
.search-input::-webkit-search-cancel-button { display: none; }
.search-close {
  flex: 0 0 auto; appearance: none; background: none; border: 0; padding: 0; min-height: 44px;
  cursor: pointer; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--graphite);
}
.search-close:hover { color: var(--ink); }
.search-hint {
  margin: 16px 0 0; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-notation); text-transform: uppercase; color: var(--graphite);
}
.search-results { margin-top: clamp(26px, 4vh, 44px); }
.search-hit {
  display: block; text-decoration: none; color: inherit;
  padding: 16px 0; border-bottom: 1px solid var(--rule);
}
.search-hit:hover, .search-hit:focus-visible { background: rgba(26,26,26,.03); outline: none; }
.search-hit-k {
  display: block; margin-bottom: 5px;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--graphite);
}
.search-hit-t {
  display: block; font-family: var(--nagori-font-display); font-weight: 300;
  font-size: 1.35rem; line-height: 1.3; color: var(--ink);
}
.search-hit-d {
  display: block; margin-top: 4px; max-width: 62ch;
  font-family: var(--nagori-font-reading); font-size: .9rem; line-height: 1.55; color: var(--nagori-read);
}
@media (prefers-reduced-motion: reduce) { .search-close, .search-hit { transition: none; } }

/* ---- css/line.css ---- */
/* ============================================================
   NAGORI — the line
   The house style from 17 September 2026, loaded last on every page.

   Five colours for the house: Leaf, Ink, Shu, Graphite, Rule. Shu is the
   line only — the red band of the flask carried across the page. Each
   edition adds one colour of its own (tokens.css, data-edition), used as a
   dash: a chip, and the ground under its flask and its story.
   Spectral for what is said; DM Sans for what is read, and in tracked
   capitals for every label and button; DM Mono only for what is counted
   (edition numbers, the record, dates).

   Photography: every photograph on the site is a stand-in until the
   shoot (IMAGE-BRIEF-05 lists the slots). They are shown in full colour.
   ============================================================ */

/* ---------- 0. ground ---------- */
html { background: var(--leaf); overflow-x: clip; }
body {
  background: var(--leaf);
  color: var(--ink);
  font-family: var(--nagori-font-reading);
  font-weight: 300;
  font-size: 16px;
  line-height: var(--nagori-leading-body);
  overflow-x: clip;
  -webkit-font-smoothing: antialiased;
}
::selection { background: var(--ink); color: var(--leaf); }
:focus-visible { outline: 1px solid var(--ink); outline-offset: 3px; }
main { display: block; }
/* an older rule gives every paragraph a measure and a left alignment; inside
   the new components the component decides */
:where(.l-home, .l-coll, .l-pdp, .l-page, .l-head, .l-foot, .l-sec) p { max-width: none; text-align: inherit; letter-spacing: inherit; }
main img { max-width: 100%; height: auto; }

/* ---------- 1. the edition's colour ---------- */
/* graphite is too faint on a tinted ground: labels there take the reading grey */
.l-story .l-label, .l-stage .l-label, .l-pdp-sleeve .l-label, .l-record-card .l-label,
.l-record-card .l-record dt, .l-record-card .l-fine, .l-vials-row figcaption, .l-begin-card .l-label { color: var(--nagori-read); }
/* a small square of the edition's colour, beside its number */
.l-chip {
  display: inline-block; flex-shrink: 0;
  width: 7px; height: 7px; margin-right: 9px;
  background: var(--acc);
  vertical-align: .08em;
}

/* ---------- 2. type ---------- */
.l-label, main .eyebrow, main .caption, main .chapter-label, main .article-meta, main .legal-updated, main .record th {
  font-family: var(--nagori-font-label);
  font-weight: 500;
  font-size: 11px;
  line-height: 1.6;
  letter-spacing: var(--nagori-track-label);
  text-transform: uppercase;
  color: var(--graphite);
}
.l-label { margin: 0; }
h2.l-label, h3.l-label { font-weight: 500; }
.l-muted { color: var(--graphite); }
/* an edition number inside a label: the record's face, in ink */
.l-no { font-family: var(--nagori-font-notation); font-weight: 400; letter-spacing: .12em; color: var(--ink); }

.l-h1, main .statement, main .headline, main .title, main h1 {
  font-family: var(--nagori-font-display);
  font-weight: 300;
  font-style: normal;
  letter-spacing: -.012em;
  color: var(--ink);
  text-wrap: balance;
}
.l-h1 { margin: 0; font-size: clamp(40px, 5.4vw, 72px); line-height: 1.04; }
.l-h2, main h2:not(.l-label) {
  font-family: var(--nagori-font-display);
  font-weight: 300;
  letter-spacing: -.01em;
  line-height: 1.12;
  color: var(--ink);
  text-wrap: balance;
}
.l-h2 { margin: 0; font-size: clamp(30px, 3.4vw, 46px); }
.l-p, main .body-text, main .legal-p, main .article-body p, main .accordion-inner p {
  color: var(--nagori-read);
  font-weight: 300;
  line-height: 1.75;
}
.l-p { margin: 0; font-size: 17px; max-width: 46ch; }
.l-fine { margin: 0; font-size: 13px; line-height: 1.6; color: var(--graphite); }


/* links in running text */
main p a, main li a, .l-fine a, main dd a {
  color: var(--ink);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: var(--rule);
}
main p a:hover, main li a:hover, .l-fine a:hover, main dd a:hover { text-decoration-color: var(--shu); }

/* the quiet link: a label with a rule under it */
.l-under {
  display: inline-block;
  color: var(--ink);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  padding-bottom: 5px;
  transition: border-color .2s ease, color .2s ease;
}
.l-under:hover { border-bottom-color: var(--shu); }

/* ---------- 3. buttons ---------- */
.l-btn, main .btn, main .btn--border, main .btn--lg, .cart-drawer .btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .4em;
  min-height: 52px; padding: 0 32px;
  background: var(--ink); color: var(--leaf);
  border: 1px solid var(--ink); border-radius: 0;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase;
  text-decoration: none; cursor: pointer;
  transition: background-color .2s ease, color .2s ease, opacity .2s ease;
}
.l-btn:hover, main .btn:hover, main .btn--border:hover, .cart-drawer .btn:hover { opacity: 1; background: #000; color: var(--leaf); }
.l-btn--full, main .btn--full { width: 100%; }
.l-btn .price, main .btn .price { color: inherit; }
main .btn--ghost {
  background: transparent; color: var(--ink); border: 1px solid var(--ink);
}
main .btn--ghost:hover { background: var(--ink); color: var(--leaf); }
.l-link {
  appearance: none; background: none; border: 0; padding: 0; margin: 0; cursor: pointer;
  min-height: 44px; display: inline-flex; align-items: center; gap: .3em;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--ink);
  text-decoration: underline; text-underline-offset: 5px; text-decoration-color: var(--rule);
}
.l-link:hover { text-decoration-color: var(--shu); }
.l-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 28px; }

/* ---------- 4. structure ---------- */
.l-sec { max-width: var(--max); margin: 0 auto; padding: clamp(64px, 9vw, 112px) var(--gut); }
.l-sec + .l-sec, .l-thesis + .l-sec { border-top: 1px solid var(--rule); }
.l-sec-head {
  display: flex; justify-content: space-between; align-items: baseline; gap: 16px;
  margin: 0 0 clamp(36px, 5vw, 56px);
}
.l-head {
  max-width: var(--max); margin: 0 auto;
  padding: clamp(56px, 9vw, 120px) var(--gut) clamp(40px, 6vw, 72px);
  display: grid; gap: 22px; justify-items: start;
}
.l-head .l-p { max-width: 58ch; }

/* ---------- 5. the flask ---------- */
/* The flask cut from its studio picture (build-cutouts.py), with the edition's label set over the glass.
   Its red band sits at 36.45% of the flask's height; every line on the site
   is drawn to that point. */
.l-flask {
  --w: 150px;
  position: relative;
  width: var(--w);
  aspect-ratio: 458 / 966;
  margin: 0;
  container-type: inline-size;
  flex-shrink: 0;
}
.l-flask img { display: block; width: 100%; height: 100%; }
.l-flask--s  { --w: 104px; }
.l-flask--m  { --w: 150px; }
.l-flask--l  { --w: 170px; }
.l-flask--xl { --w: 280px; }
.l-flask-label {
  position: absolute; left: 19%; right: 19%; top: 43%; bottom: 21%;
  display: flex; flex-direction: column; align-items: center;
  color: var(--ink); opacity: .88; text-align: center;
  font-family: var(--nagori-font-notation); text-transform: uppercase;
  pointer-events: none;
}
.l-flask-house { font-family: var(--nagori-font-display); font-weight: 400; font-size: max(4px, 4.2cqw); letter-spacing: .34em; padding-left: .34em; line-height: 1; }
.l-flask-no    { font-weight: 400; font-size: 17cqw; line-height: 1; margin-top: 3.5cqw; letter-spacing: -.02em; }
.l-flask-name  { font-size: max(4px, 4.8cqw); letter-spacing: .08em; line-height: 1.2; margin-top: 2.2cqw; white-space: nowrap; }
.l-flask-edp   { font-size: max(3px, 2.6cqw); letter-spacing: .12em; line-height: 1.2; margin-top: 1.4cqw; white-space: nowrap; }
/* Type under about 6 px is not type, it is a grey smear: on a 104 px flask
   the name set at 4.8cqw lands at 5.7 px and the concentration at 3.1 px.
   The label is dropped a line at a time as the flask shrinks, leaving the
   number — which is the thing that tells the five apart, and the only line
   still legible. Nothing is lost: the label is aria-hidden decoration, and
   the row beside the flask carries the number, the name, the notes and the
   price as real text. */
@container (max-width: 230px) {
  .l-flask-edp { display: none; }
  .l-flask-label { justify-content: center; }
}
@container (max-width: 142px) {
  .l-flask-house, .l-flask-name { display: none; }
}

.l-flask-ticks {
  position: absolute; right: 21%; top: 45%; height: 30%; width: 2.2cqw;
  background: repeating-linear-gradient(to bottom, var(--ink) 0 1px, transparent 1px 2.2cqw);
  opacity: .4; pointer-events: none;
}


/* ---------- 5a. the mark ---------- */
/* The house wordmark (brand/nagori-wordmark-small.svg), painted in the
   colour of whatever it sits on. The element keeps the name as text for
   screen readers and search. */
.l-mark {
  --mh: 16px;                                   /* the height of the letters */
  display: inline-block; flex-shrink: 0; box-sizing: content-box;
  width: calc(var(--mh) * 6.386); height: var(--mh);
  min-width: 0; min-height: 0; padding: 8px 0;  /* a tap target taller than the letters */
  background: currentColor; background-clip: content-box;
  -webkit-mask: url(../brand/nagori-wordmark-small.svg) center / contain no-repeat content-box;
          mask: url(../brand/nagori-wordmark-small.svg) center / contain no-repeat content-box;
  font-size: 0; line-height: 0; color: inherit; overflow: hidden;
}

/* ---------- 5b. the stage: an object on paper, the line through its band ---------- */
.l-stage, .l-pdp-stage {
  --fw: 150px;                                   /* flask width */
  --fh: calc(var(--fw) * 966 / 458);             /* flask height */
  --vw: 34px;                                    /* vial width */
  --vh: calc(var(--vw) * 916 / 200);             /* vial height */
  position: relative; overflow: hidden;
  background: var(--acc-mist);
  min-height: 380px;
  display: flex; align-items: center; justify-content: center;
  padding: 48px 24px;
}
.l-stage .l-flask, .l-pdp-stage .l-flask { --w: var(--fw); }
.l-stage:has(.l-flask)::before, .l-pdp-stage::before {
  /* a centred flask's band sits 13.55% of its height above the middle */
  content: ""; position: absolute; left: 0; right: 0; height: 3px; background: var(--shu);
  top: calc(50% - var(--fh) * .1355 - 1.5px);
}
.l-stage--vials::before {
  /* a centred vial's band sits 17.2% of its height above the middle */
  content: ""; position: absolute; left: 0; right: 0; height: 2px; background: var(--shu);
  top: calc(50% - var(--vh) * .172 - 1px);
}
.l-vials-row { position: relative; display: flex; gap: clamp(20px, 3vw, 36px); }
.l-vials-row figure { position: relative; margin: 0; }
.l-vials-row img { display: block; width: var(--vw); height: var(--vh); }
.l-vials-row figcaption {
  position: absolute; left: 50%; top: calc(100% + 14px); transform: translateX(-50%);
  font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .1em; color: var(--nagori-read);
}
.l-stage--tall { --vw: 52px; min-height: min(calc(100svh - var(--nav-h) - 48px), 760px); margin-top: 24px; }
.l-stage--sleeve img { width: min(420px, 90%); height: auto; }
@media (max-width: 600px) {
  .l-stage { --vw: 28px; min-height: 300px; }
  .l-vials-row { gap: 18px; }
}

/* ---------- 6. the five, and the line through them ---------- */
.l-five {
  --w: 150px;
  position: relative;
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 0 12px;
  align-items: stretch;
}
.l-five--s { --w: 104px; }
.l-five--l { --w: 170px; }
.l-five::before {
  content: "";
  position: absolute;
  left: calc(50% - 50vw); width: 100vw;
  top: calc(var(--w) * 966 / 458 * .3645 - 1.5px);
  height: 3px;
  background: var(--shu);
}
.l-five > li { position: relative; display: flex; }
/* the line draws itself once, when a row below the fold comes into view
   (main.js adds .l-draw only then; without it the line is simply there) */
.l-five.l-draw::before { transform: scaleX(0); transform-origin: left center; transition: transform var(--dur-draw) var(--ease-both) !important; }  /* §07-exempt */
.l-five.l-draw.l-drawn::before { transform: scaleX(1); }
.l-five-item {
  flex: 1;
  display: flex; flex-direction: column; align-items: center; text-align: center;
  text-decoration: none; color: var(--ink);
}
.l-five-item .l-flask { --w: inherit; width: var(--w); }
.l-five-no {
  margin-top: 28px;
  font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .16em; color: var(--graphite);
}
.l-five-name {
  margin-top: 8px;
  font-family: var(--nagori-font-display); font-weight: 300; font-size: clamp(22px, 2.1vw, 28px); line-height: 1.12;
}
.l-five-kind {
  margin-top: 8px; max-width: 22ch;
  font-family: var(--nagori-font-display); font-style: italic; font-weight: 300;
  font-size: 16px; line-height: 1.4; color: var(--nagori-read);
}
.l-five-line { margin-top: 14px; max-width: 26ch; font-size: 14px; line-height: 1.6; color: var(--nagori-read); }
.l-five-notes, .l-five-price {
  margin-top: 12px;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em;
  font-variant-numeric: tabular-nums;
  text-transform: uppercase; color: var(--graphite);
}
.l-five-notes { max-width: 24ch; line-height: 1.7; }
.l-five-price { margin-top: auto; padding-top: 12px; }
.l-five-item:hover .l-five-name { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 6px; text-decoration-color: var(--shu); }
.l-five-item[aria-current="page"] .l-five-name { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 6px; text-decoration-color: var(--shu); }
.l-five-item[aria-current="page"] .l-flask { opacity: 1; }
.l-five--s .l-five-kind, .l-five--s .l-five-price { display: none; }
.l-five--s .l-five-name { font-size: 20px; }

/* narrower screens: the row scrolls sideways and the line runs through it */
@media (max-width: 1080px) {
  .l-five, .l-five--l { --w: 132px; }
  .l-five--s { --w: 96px; }
  .l-five {
    display: flex; gap: 8px;
    overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory;
    margin-inline: calc(-1 * var(--gut)); padding-inline: var(--gut);
    scrollbar-width: none;
  }
  .l-five::-webkit-scrollbar { display: none; }
  .l-five::before { left: 0; width: max(100%, calc(5 * 176px)); }
  .l-five > li { flex: 0 0 176px; scroll-snap-align: start; }
  .l-five--s > li { flex-basis: 132px; }
}
@media (max-width: 720px) {
  .l-five, .l-five--l { --w: 118px; }
  .l-five > li { flex-basis: 160px; }
  .l-five::before { width: max(100%, calc(5 * 168px + var(--gut))); }
}

/* ---------- 7. the record ---------- */
.l-record { margin: 0; display: flex; flex-direction: column; font-family: var(--nagori-font-notation); font-size: 12px; letter-spacing: .04em; }
.l-record > div {
  display: grid; grid-template-columns: 150px minmax(0, 1fr); align-items: end; gap: 12px;
  padding: 11px 0; border-top: 1px solid var(--rule);
}
.l-record > div:first-child { border-top-color: var(--ink); }
.l-record > div:last-child { border-bottom: 1px solid var(--ink); }
.l-record dt { color: var(--graphite); text-transform: uppercase; }
.l-record dd { margin: 0; text-transform: uppercase; }
.l-record .l-blank { height: 15px; width: min(170px, 100%); border-bottom: 1px solid var(--shu); }
.l-record-card { background: var(--leaf-shade); padding: 22px 22px 20px; display: grid; gap: 12px; }
.l-record-card .l-record > div { grid-template-columns: 110px minmax(0, 1fr); }
.l-record-card .l-record > div:first-child { border-top-color: var(--rule); }
.l-record-card .l-record > div:last-child { border-bottom-color: var(--rule); }

/* ---------- 8. home ---------- */
/* The opening: the editions' worlds, one after another, each with its
   bottle tagged above the headline. The first slide is set in the markup, so
   the page is whole without script; main.js 18 turns the others. */
.l-hero {
  --hold: 7s;
  position: relative;
  height: max(560px, min(100svh, 920px));
  overflow: hidden;
  background: var(--ink);
  color: var(--leaf);
}
.l-hero-slides { position: absolute; inset: 0; }
.l-slide { position: absolute; inset: 0; margin: 0; opacity: 0; visibility: hidden; transition: opacity 1.4s ease, visibility 0s linear 1.4s !important; }  /* §07-exempt */
.l-slide.is-on { opacity: 1; visibility: visible; transition: opacity 1.4s ease !important; z-index: 1; }  /* §07-exempt */
.l-slide picture { position: absolute; inset: 0; }
.l-hero-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: var(--pos, 50% 50%); transform: scale(1.06); transform-origin: var(--pos, 50% 50%); transition: transform 9s cubic-bezier(.2, .6, .3, 1) !important; }  /* §07-exempt */
.l-slide.is-on .l-hero-img { transform: scale(1); }
.l-slide::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(to bottom, rgba(26,26,26,0) 45%, rgba(26,26,26,.55));
}

/* the bottle's tag, on the quiet side of the picture, above the headline
   (the headline is clamp(52px, 7.4vw, 104px) at .96, then 20px and the link) */
.l-slide-tag {
  position: absolute; z-index: 1;
  left: var(--gut); bottom: calc(clamp(32px, 5vw, 56px) + clamp(52px, 7.4vw, 104px) * .96 + 76px);
  width: min(340px, calc(100% - 2 * var(--gut)));
}
.l-slide-tag a {
  display: grid; grid-template-columns: 76px minmax(0, 1fr); gap: 16px; align-items: center;
  padding: 10px 18px 10px 10px;
  background: var(--leaf); color: var(--ink); text-decoration: none;
}
.l-slide-thumb.l-stage { --fw: 34px; width: 76px; height: 100px; min-height: 0; padding: 0; }
.l-slide-thumb .l-flask { display: block; }
.l-slide-thumb.l-stage--vials { --vw: 16px; }
.l-slide-vial { display: block; width: var(--vw); height: var(--vh); }
.l-slide-text { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; min-width: 0; }
.l-slide-no { display: inline-flex; align-items: center; font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .14em; color: var(--nagori-read); }
.l-slide-name { font-family: var(--nagori-font-display); font-weight: 300; font-size: 23px; line-height: 1.15; }
.l-slide-kind { font-family: var(--nagori-font-display); font-style: italic; font-weight: 300; font-size: 14px; line-height: 1.35; color: var(--nagori-read); }
.l-slide-price { margin-top: 5px; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; font-variant-numeric: tabular-nums; color: var(--ink); }
.l-slide-tag a:hover .l-slide-name { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: var(--shu); }

.l-hero-copy {
  position: absolute; z-index: 2;
  left: var(--gut); right: var(--gut); bottom: clamp(32px, 5vw, 56px);
  max-width: var(--max);
  display: flex; flex-direction: column; align-items: flex-start; gap: 20px;
  pointer-events: none;
}
.l-hero-copy a { pointer-events: auto; }
.l-hero-title {
  margin: 0;
  font-family: var(--nagori-font-display); font-weight: 300; font-style: italic;
  font-size: clamp(52px, 7.4vw, 104px); line-height: .96; letter-spacing: -.015em;
  color: var(--leaf);
  text-shadow: 0 1px 24px rgba(26,26,26,.25);
  transition: color .8s ease, text-shadow .8s ease !important;  /* §07-exempt */
}
.l-hero .l-hero-copy .l-under, .l-hero .l-hero-copy .l-label { color: var(--leaf); }

/* the slide marks: one short line each, filling while its slide holds */
.l-hero-dots {
  position: absolute; z-index: 3;
  right: var(--gut); bottom: clamp(32px, 5vw, 56px);
  display: none; align-items: center; gap: 2px;
}
.l-hero.is-live .l-hero-dots { display: flex; }
.l-dot {
  appearance: none; background: none; border: 0; margin: 0; cursor: pointer;
  width: 44px; height: 44px; padding: 0 6px;
  display: flex; align-items: center;
}
.l-dot i { position: relative; display: block; width: 100%; height: 1px; background: rgba(246,244,237,.4); }
.l-dot i::after {
  content: ""; position: absolute; left: 0; right: 0; top: -.5px; height: 2px;
  background: var(--leaf); transform: scaleX(0); transform-origin: left center;
}
.l-dot.is-on i::after { transform: scaleX(1); }
.l-hero.is-ticking .l-dot.is-on i::after { animation: l-tick var(--hold) linear both !important; }  /* §07-exempt */
@keyframes l-tick { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.l-dot:hover i { background: rgba(246,244,237,.8); }
.l-dot:focus-visible, .l-hero-pause:focus-visible { outline: 1px solid var(--leaf); outline-offset: -6px; }
.l-hero-pause {
  appearance: none; background: none; border: 0; margin: 0 0 0 12px; padding: 0 2px; min-height: 44px; cursor: pointer;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--leaf);
}
.l-hero-pause:hover { opacity: .7; }

/* a light picture: ink type, a pale lift behind the headline, a lifted tag */
.l-slide[data-tone="light"]::after {
  /* The type is ink on a photograph, and a photograph has shadows in it. This
     lifts the foot of the picture to Leaf so the headline, the link and the
     pause never cross a dark patch: measured, not guessed (herocontrast.py). */
  background:
    linear-gradient(to top, rgba(246,244,237,.94) 0%, rgba(246,244,237,.78) 16%, rgba(246,244,237,.34) 34%, rgba(246,244,237,0) 52%),
    radial-gradient(120% 95% at 0% 100%, rgba(246,244,237,.55), rgba(246,244,237,0) 58%);
}
.l-slide[data-tone="light"] .l-slide-tag a { box-shadow: 0 0 0 1px rgba(26,26,26,.06), 0 22px 44px -24px rgba(26,26,26,.35); }
.l-hero:has(.l-slide.is-on[data-tone="light"]) { background: var(--leaf-shade); color: var(--ink); }
.l-hero:has(.l-slide.is-on[data-tone="light"]) .l-hero-title { color: var(--ink); text-shadow: none; }
.l-hero:has(.l-slide.is-on[data-tone="light"]) .l-hero-copy .l-under,
.l-hero:has(.l-slide.is-on[data-tone="light"]) .l-hero-pause { color: var(--ink); }
.l-hero:has(.l-slide.is-on[data-tone="light"]) .l-dot i { background: rgba(26,26,26,.22); }
.l-hero:has(.l-slide.is-on[data-tone="light"]) .l-dot:hover i { background: rgba(26,26,26,.5); }
.l-hero:has(.l-slide.is-on[data-tone="light"]) .l-dot i::after { background: var(--ink); }
.l-hero:has(.l-slide.is-on[data-tone="light"]) .l-dot:focus-visible,
.l-hero:has(.l-slide.is-on[data-tone="light"]) .l-hero-pause:focus-visible { outline-color: var(--ink); }

@media (max-width: 720px) {
  .l-hero-img { object-position: 50% 50%; transform-origin: 50% 50%; }
  .l-slide-tag { top: calc(var(--nav-h) + 12px); bottom: auto; left: auto; right: var(--gut); width: min(300px, calc(100% - 2 * var(--gut))); }
  .l-slide-tag a { grid-template-columns: 56px minmax(0, 1fr); gap: 12px; padding: 8px 14px 8px 8px; }
  .l-slide-thumb.l-stage { --fw: 26px; width: 56px; height: 76px; }
  .l-slide-thumb.l-stage--vials { --vw: 12px; }
  .l-slide-name { font-size: 20px; }
  .l-slide-kind { display: none; }
  /* the marks and the link share the foot of the picture: keep them clear of
     each other, or the active mark reads as a stray rule over the link */
  .l-hero-copy { right: calc(var(--gut) + 150px); }
  .l-hero-pause { margin-left: 4px; }
  .l-dot { width: 28px; padding: 0 4px; }
}
@media (prefers-reduced-motion: reduce) {
  .l-slide, .l-slide.is-on { transition: none; }
  .l-hero-img { transform: none; transition: none; }
  .l-hero.is-ticking .l-dot.is-on i::after { animation: none; }
}

.l-thesis {
  max-width: var(--max); margin: 0 auto;
  padding: clamp(72px, 10vw, 128px) var(--gut);
  display: flex; flex-direction: column; align-items: center; gap: 24px; text-align: center;
}
.l-thesis-line {
  margin: 0; max-width: 26ch; text-align: center; color: var(--ink);
  font-family: var(--nagori-font-display); font-weight: 300;
  font-size: clamp(30px, 3.6vw, 48px); line-height: 1.16; letter-spacing: -.01em;
  text-wrap: balance;
}

.l-split {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  border-top: 1px solid var(--rule);
}
.l-split-media { margin: 0; min-height: 100%; overflow: hidden; background: var(--rule); }
.l-split-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.l-split-copy {
  padding: clamp(56px, 7vw, 96px) clamp(24px, 6vw, 88px);
  display: flex; flex-direction: column; align-items: flex-start; gap: 22px;
}
.l-split-copy .l-record { width: 100%; max-width: 460px; margin-top: 8px; }

.l-disc { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(32px, 5vw, 80px); align-items: center; }

.l-cards { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(16px, 2vw, 28px); }
.l-cards a { display: flex; flex-direction: column; gap: 12px; text-decoration: none; color: var(--ink); }
.l-cards img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; background: var(--rule); }
.l-card-t { font-family: var(--nagori-font-display); font-weight: 300; font-size: clamp(20px, 1.8vw, 24px); line-height: 1.2; }
.l-cards a:hover .l-card-t { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: var(--shu); }

@media (max-width: 900px) {
  .l-split, .l-disc { grid-template-columns: minmax(0, 1fr); }
  .l-split-media { aspect-ratio: 4 / 3; min-height: 0; }
  .l-cards { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 600px) {
  .l-record > div { grid-template-columns: 118px minmax(0, 1fr); }
}

/* ---------- 9. collection ---------- */
.l-coll .l-five-sec { padding-top: clamp(24px, 4vw, 48px); border-top: 0; }
.l-coll-note { margin-top: 48px; text-align: center; }
.l-compare-wrap { overflow-x: auto; margin-inline: calc(-1 * var(--gut)); padding-inline: var(--gut); }
.l-compare { width: 100%; min-width: 880px; border-collapse: collapse; }
.l-compare th, .l-compare td { text-align: left; vertical-align: top; padding: 14px 16px 14px 0; border-top: 1px solid var(--rule); }
.l-compare thead th { border-top: 1px solid var(--ink); padding-top: 16px; }
.l-compare thead a { display: flex; flex-direction: column; gap: 4px; text-decoration: none; color: var(--ink); font-family: var(--nagori-font-display); font-weight: 300; font-size: 21px; line-height: 1.15; }
.l-compare .cmp-no { font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .16em; color: var(--graphite); }
.l-compare tbody th { width: 140px; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--graphite); }
.l-compare td { font-size: 14px; line-height: 1.55; color: var(--nagori-read); }
.l-compare tbody tr:last-child th, .l-compare tbody tr:last-child td { border-bottom: 1px solid var(--ink); }
.l-band { margin: 0; }
.l-band img { display: block; width: 100%; aspect-ratio: 2 / 1; object-fit: cover; object-position: 50% 55%; }
@media (max-width: 720px) { .l-band img { aspect-ratio: auto; } }
.l-begin { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.l-begin-card {
  display: flex; flex-direction: column; align-items: flex-start; gap: 18px;
  padding: clamp(28px, 4vw, 48px); background: var(--leaf-shade);
  text-decoration: none; color: var(--ink); transition: box-shadow .2s ease;
}
.l-begin-card:hover { box-shadow: inset 0 0 0 1px var(--ink); }
.l-begin-t { font-family: var(--nagori-font-display); font-weight: 300; font-size: clamp(24px, 2.4vw, 32px); line-height: 1.15; }
@media (max-width: 720px) { .l-begin { grid-template-columns: minmax(0, 1fr); } }

/* ---------- 10. an edition ---------- */
.l-pdp-hero {
  max-width: var(--max); margin: 0 auto;
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  grid-template-areas: "media info" "more info";
  column-gap: clamp(32px, 5vw, 80px);
  padding: 0 var(--gut) clamp(64px, 8vw, 104px);
  align-items: start;
}
.l-pdp-media { grid-area: media; display: grid; }
/* the flask (50 ml) and the photograph of the 20 ml share one box; the size
   chosen in the panel (data-size on .l-pdp-hero, set by main.js 6) shows one */
.l-pdp-view { grid-area: 1 / 1; transition: opacity .45s ease, visibility 0s linear .45s !important; }  /* §07-exempt */
.l-pdp-hero[data-size="50 ml"] .l-pdp-view:not([data-view="50 ml"]),
.l-pdp-hero[data-size="20 ml"] .l-pdp-view:not([data-view="20 ml"]) { opacity: 0; visibility: hidden; }
.l-pdp-hero[data-size="50 ml"] .l-pdp-view[data-view="50 ml"],
.l-pdp-hero[data-size="20 ml"] .l-pdp-view[data-view="20 ml"] { transition: opacity .45s ease !important; }  /* §07-exempt */
.l-pdp-shot { margin: 24px 0 0; overflow: hidden; background: var(--acc-mist); }
.l-pdp-shot img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 50% 55%; }
/* the same photograph lower down would repeat itself */
.l-pdp-hero[data-size="20 ml"] .l-pdp-small { display: none; }
.l-pdp-info { grid-area: info; position: sticky; top: calc(var(--nav-h) + 24px); padding-top: 40px; display: flex; flex-direction: column; gap: 22px; }
.l-pdp-more { grid-area: more; display: grid; gap: 16px; margin-top: 16px; }

.l-pdp-stage { --fw: clamp(220px, 22vw, 300px); min-height: min(calc(100svh - var(--nav-h) - 48px), 820px); margin-top: 24px; }

.l-pdp-photo, .l-pdp-sleeve, .l-pdp-pair figure { margin: 0; }
.l-pdp-photo img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; }
.l-pdp-pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.l-pdp-pair img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; }
.l-pdp-pair figcaption, .l-pdp-sleeve figcaption, .l-pdp-small figcaption { margin-top: 10px; }
.l-pdp-small { margin: 0; }
.l-pdp-small img { display: block; width: 100%; height: auto; }
.l-pdp-sleeve { background: var(--acc-mist); padding: clamp(32px, 5vw, 64px); display: flex; flex-direction: column; align-items: center; }
.l-pdp-sleeve img { width: min(560px, 100%); height: auto; }
.l-pdp-sleeve figcaption { align-self: flex-start; }

.l-crumbs ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: .6em; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--graphite); }
.l-crumbs li { white-space: nowrap; }
.l-crumbs li + li::before { content: "/"; margin-right: .6em; color: var(--rule); }
.l-crumbs a { color: var(--graphite); text-decoration: none; display: inline-flex; align-items: center; padding: 4px 0; }
.l-crumbs a:hover { color: var(--ink); }
.l-crumbs [aria-current] { color: var(--ink); }
.l-pdp .crumbs { margin: 0; }

.l-pdp-id { display: flex; align-items: baseline; gap: 14px; margin-top: 8px; }
.l-pdp-id .l-chip { margin-right: -6px; }
.l-pdp .pdp-archive { margin: 0; font-family: var(--nagori-font-notation); font-weight: 400; font-size: 12px; letter-spacing: .16em; color: var(--ink); }
.l-pdp .pdp-name {
  margin: -6px 0 0;
  font-family: var(--nagori-font-display); font-weight: 300;
  font-size: clamp(44px, 4.6vw, 64px); line-height: 1; letter-spacing: -.015em;
}
.l-pdp-lede { margin: -4px 0 0; font-family: var(--nagori-font-display); font-style: italic; font-weight: 300; font-size: 21px; line-height: 1.4; color: var(--nagori-read); }

.l-sizes { display: flex; flex-direction: column; margin-top: 6px; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--ink); }
.l-pdp .size-option {
  position: relative;
  display: grid; grid-template-columns: 16px auto minmax(0, 1fr) auto; align-items: center; gap: 14px;
  min-height: 58px; padding: 0; margin: 0; cursor: pointer;
  border: 0; background: none;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase;
  font-variant-numeric: tabular-nums; color: var(--graphite);
}
.l-pdp .size-option + .size-option { border-top: 1px solid var(--rule); }
.l-pdp .size-option input { position: absolute; opacity: 0; pointer-events: none; }
.l-size-mark { width: 10px; height: 10px; border: 1px solid var(--graphite); }
.l-pdp .size-option.selected { color: var(--ink); }
.l-pdp .size-option.selected .l-size-mark { background: var(--ink); border-color: var(--ink); }
.l-size-note { color: var(--graphite); font-weight: 400; letter-spacing: .04em; text-transform: none; font-size: 13px; }
.l-size-price { justify-self: end; }
.l-pdp .size-option:has(input:focus-visible) { outline: 1px solid var(--ink); outline-offset: 2px; }

.l-pdp-note { margin: -6px 0 0; font-size: 14px; line-height: 1.6; color: var(--nagori-read); }
.l-pdp .pdp-sample { align-self: flex-start; margin-top: -10px; }

.l-inscribe { display: grid; gap: 8px; padding-top: 6px; }
.l-inscribe-row { display: flex; align-items: center; border-bottom: 1px solid var(--ink); }
.l-pdp .l-inscribe-row input {
  flex: 1 1 auto; min-width: 0; min-height: 44px; border: 0; background: transparent; padding: 0;
  font-family: var(--nagori-font-display); font-weight: 300; font-size: 20px; color: var(--ink);
}
.l-pdp .l-inscribe-row input::placeholder { color: var(--graphite); opacity: .6; }
.l-pdp .l-inscribe-row input:focus { outline: none; }
.l-inscribe-row:focus-within { border-bottom-color: var(--shu); }
.l-inscribe-n { font-family: var(--nagori-font-notation); font-size: 11px; color: var(--graphite); }
.l-inscribe-n.is-full { color: var(--shu); }

.l-rows { margin: 8px 0 0; display: flex; flex-direction: column; }
.l-rows > div { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 14px; padding: 13px 0; border-top: 1px solid var(--rule); }
.l-rows > div:last-child { border-bottom: 1px solid var(--rule); }
.l-rows dt { font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--graphite); padding-top: 3px; }
.l-rows dd { margin: 0; font-family: var(--nagori-font-display); font-weight: 300; font-size: 17px; line-height: 1.45; color: var(--ink); }
.l-rows .l-muted { display: block; font-family: var(--nagori-font-reading); font-size: 13px; }
.l-target {
  position: relative; display: block; height: 12px; margin-top: 10px;
  background: repeating-linear-gradient(to right, var(--graphite) 0 1px, transparent 1px calc(100% / 14));
}
.l-target::before { content: ""; position: absolute; left: 0; right: 0; top: 5px; height: 2px; background: var(--rule); }
.l-target span {
  position: absolute; left: 0; top: 5px; height: 2px;
  width: calc(var(--to) / 14 * 100%);
  background: linear-gradient(to right, var(--shu) calc(var(--from) / var(--to) * 100%), rgba(198,40,40,.3) calc(var(--from) / var(--to) * 100%));
}

.l-promise {
  list-style: none; margin: 0; padding: 0; display: grid; gap: 8px;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--graphite);
}
.l-promise li { position: relative; padding-left: 18px; }
.l-promise li::before { content: ""; position: absolute; left: 0; top: .72em; width: 8px; height: 1px; background: var(--graphite); }

.l-acc { border-top: 1px solid var(--ink); }
.l-acc .accordion { border-bottom: 1px solid var(--rule); }
.l-acc .accordion:last-child { border-bottom-color: var(--ink); }
.l-acc .accordion-header {
  width: 100%; min-height: 52px; padding: 0; margin: 0;
  display: flex; align-items: center; justify-content: space-between;
  background: none; border: 0; cursor: pointer; color: var(--ink);
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; text-align: left;
}
.l-acc-mark { position: relative; width: 11px; height: 11px; }
.l-acc-mark::before, .l-acc-mark::after { content: ""; position: absolute; background: currentColor; left: 0; right: 0; top: 5px; height: 1px; transition: transform .25s ease !important; }  /* §07-exempt */
.l-acc-mark::after { transform: rotate(90deg); }
.l-acc .accordion.open .l-acc-mark::after { transform: rotate(0deg); }
.l-acc .accordion-body { max-height: 0; overflow: hidden; transition: max-height .35s ease !important; }  /* §07-exempt */
.l-acc .accordion-inner { padding: 0 0 18px; }
.l-acc .accordion-inner p { margin: 0; font-size: 14px; line-height: 1.7; }
.l-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.l-table th, .l-table td { text-align: left; padding: 8px 0; border-top: 1px solid var(--rule); vertical-align: top; }
.l-table th { width: 42%; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--graphite); }
.l-table td { color: var(--nagori-read); }

.l-story {
  background: var(--acc-mist);
  margin: 0;
  padding: clamp(72px, 10vw, 136px) max(var(--gut), calc(50% - 450px));
  display: flex; flex-direction: column; align-items: center; gap: 28px; text-align: center;
}
.l-story-line { margin: 0; color: var(--ink); font-family: var(--nagori-font-display); font-weight: 300; font-style: italic; font-size: clamp(32px, 4vw, 54px); line-height: 1.12; letter-spacing: -.01em; text-wrap: balance; }
.l-story-body { margin: 0; max-width: 60ch; font-size: 17px; line-height: 1.8; color: var(--nagori-read); text-align: left; }
.l-also { max-width: var(--max); margin: 0 auto; padding: clamp(56px, 8vw, 96px) var(--gut) clamp(72px, 10vw, 128px); }

@media (max-width: 900px) {
  .l-pdp-hero { grid-template-columns: minmax(0, 1fr); grid-template-areas: "media" "info" "more"; padding-top: 0; }
  .l-pdp-info { position: static; padding-top: 28px; }
  .l-pdp-more { margin-top: 48px; }
  .l-pdp-stage, .l-disc-hero .l-stage--tall {
    --fw: 200px; --vw: 36px;
    min-height: 460px; margin: 0 calc(-1 * var(--gut)); border-width: 0 0 1px;
  }
  .l-pdp-shot { margin: 0 calc(-1 * var(--gut)); }
}


/* ---------- 10b. the other pages ---------- */
.l-center { text-align: center; }
.l-title {
  margin: -4px 0 0;
  font-family: var(--nagori-font-display); font-weight: 300;
  font-size: clamp(40px, 4.2vw, 58px); line-height: 1.02; letter-spacing: -.015em; text-wrap: balance;
}
.l-display {
  margin: 0; font-family: var(--nagori-font-display); font-weight: 300; font-style: italic;
  font-size: clamp(56px, 9vw, 132px); line-height: .95; letter-spacing: -.02em;
}
.l-head--center { justify-items: center; text-align: center; }
.l-rows--mono dd { font-family: var(--nagori-font-notation); font-size: 12px; letter-spacing: .06em; text-transform: uppercase; line-height: 1.7; }
.l-rows--mono dd .price { font: inherit; }

.l-wide { margin: 0 auto; max-width: var(--max); padding: 0 var(--gut); }
.l-wide img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }
.l-wide--tall img { aspect-ratio: 21 / 9; }
.l-wide figcaption { margin-top: 10px; }

/* a page's one picture: in the reading column on the help and legal pages,
   a band under the introduction on contact, the order column at checkout,
   and the empty niche on the 404 */
.l-page-pic { margin: clamp(32px, 5vw, 56px) 0 0; }
.l-page-pic img, .co-pic img, .l-nf-pic img { display: block; width: 100%; height: auto; object-fit: cover; background: var(--leaf-shade); }
.l-page-pic img { aspect-ratio: 3 / 2; }
.l-page-pic--wide img { aspect-ratio: 16 / 9; }
.co-pic { margin: 0 0 24px; }
.co-pic img { aspect-ratio: 4 / 3; }
.l-nf-pic { margin: 0; }
.l-nf-pic img { aspect-ratio: 1; }
@media (max-width: 720px) { .l-page-pic--wide img { aspect-ratio: 4 / 3; } }

.l-sec--flush { padding-top: 0; }
.l-two { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(32px, 6vw, 96px); align-items: start; }
.l-two-copy { display: flex; flex-direction: column; align-items: flex-start; gap: 20px; }
.l-go {
  display: block; width: 100%; padding: 14px 0; border-top: 1px solid var(--rule);
  font-family: var(--nagori-font-display); font-weight: 300; font-size: clamp(24px, 2.4vw, 32px); line-height: 1.2;
  color: var(--ink); text-decoration: none;
}
.l-go:last-child { border-bottom: 1px solid var(--rule); }
.l-go:hover { color: var(--graphite); }
.l-prose p, .l-essay-body p { margin: 0 0 1.1em; font-size: 17px; line-height: 1.8; color: var(--nagori-read); max-width: 62ch; }
.l-prose .l-label, .l-essay-body .l-label { margin: 2.4em 0 .8em; }

.l-essay { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(32px, 6vw, 96px); align-items: start; }
.l-lead { margin: 0; font-family: var(--nagori-font-display); font-weight: 300; font-size: clamp(28px, 3vw, 40px); line-height: 1.2; letter-spacing: -.01em; color: var(--ink); position: sticky; top: calc(var(--nav-h) + 40px); }

.l-manifesto {
  border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule);
  padding: clamp(72px, 10vw, 136px) var(--gut);
  display: flex; flex-direction: column; align-items: center; gap: 36px; text-align: center;
}
.l-manifesto blockquote { margin: 0 auto; max-width: 34em; text-align: center; }
.l-manifesto blockquote p {
  margin: 0 0 1em; font-family: var(--nagori-font-display); font-weight: 300;
  font-size: clamp(20px, 2vw, 26px); line-height: 1.5; color: var(--ink);
}
.l-manifesto blockquote p:first-child { font-style: italic; font-size: clamp(26px, 3vw, 38px); line-height: 1.25; }
.l-manifesto-end { position: relative; padding-top: 36px; margin-top: 44px !important; }
.l-manifesto-end::before { content: ""; position: absolute; top: 0; left: 50%; width: 48px; height: 1px; margin-left: -24px; background: var(--ink); }

/* The Making: the flask with its notes */
.l-spec { max-width: var(--max); margin: 0 auto; padding: 0 var(--gut); }
.l-stage--spec { --fw: clamp(200px, 20vw, 280px); min-height: 720px; }
.l-note {
  position: absolute; display: flex; flex-direction: column; gap: 4px;
  font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--nagori-read);
}
.l-note-t { color: var(--ink); }
.l-note-line { position: absolute; top: 7px; height: 1px; background: var(--graphite); }
.l-note--cap   { left: calc(50% + var(--fw) * .28); top: calc(50% - var(--fh) * .45); padding-left: calc(var(--fw) * .5); }
.l-note--cap .l-note-line { left: 0; width: calc(var(--fw) * .44); }
.l-note--flask { right: calc(50% + var(--fw) * .5); top: calc(50% + var(--fh) * .02); padding-right: 96px; align-items: flex-end; text-align: right; }
.l-note--flask .l-note-line { right: 0; width: 84px; }
.l-note--glass { left: calc(50% + var(--fw) * .5); top: calc(50% + var(--fh) * .26); padding-left: 72px; }
.l-note--glass .l-note-line { left: 0; width: 60px; }
@media (max-width: 900px) {
  .l-note { display: none; }
  .l-stage--spec { min-height: 520px; margin-inline: calc(-1 * var(--gut)); border-width: 1px 0; }
}

.l-spec-list { margin: 0; display: flex; flex-direction: column; }
.l-spec-list > div { display: grid; grid-template-columns: 130px minmax(0, 1fr); gap: 20px; padding: 18px 0; border-top: 1px solid var(--rule); }
.l-spec-list > div:first-child { border-top-color: var(--ink); }
.l-spec-list > div:last-child { border-bottom: 1px solid var(--ink); }
.l-spec-list dt { font-family: var(--nagori-font-display); font-weight: 300; font-size: 20px; line-height: 1.3; color: var(--ink); }
.l-spec-list dd { margin: 0; font-size: 15px; line-height: 1.7; color: var(--nagori-read); }

.l-detail { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.l-detail figure { margin: 0; display: flex; flex-direction: column; gap: 10px; }
.l-detail img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.l-detail .l-stage img { aspect-ratio: auto; width: min(560px, 90%); }
.l-detail-wide { grid-column: 1 / -1; }

/* an index of five */
.l-idx { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--ink); }
.l-idx a {
  display: grid; grid-template-columns: 72px minmax(0, 1fr) minmax(0, 1fr); align-items: baseline; gap: 16px;
  padding: 22px 0; border-bottom: 1px solid var(--rule); text-decoration: none; color: var(--ink);
}
.l-idx li:last-child a { border-bottom-color: var(--ink); }
.l-idx-no { font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .16em; color: var(--graphite); }
.l-idx-name { font-family: var(--nagori-font-display); font-weight: 300; font-size: clamp(26px, 2.8vw, 38px); line-height: 1.1; }
.l-idx-note { font-family: var(--nagori-font-display); font-style: italic; font-weight: 300; font-size: 17px; color: var(--nagori-read); }
.l-idx a:hover .l-idx-name { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 6px; text-decoration-color: var(--shu); }

/* steps */
.l-steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(24px, 3vw, 48px); }
.l-steps--four { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.l-steps li { border-top: 1px solid var(--ink); padding-top: 18px; display: flex; flex-direction: column; gap: 12px; }
.l-steps p { margin: 0; font-family: var(--nagori-font-display); font-weight: 300; font-size: 20px; line-height: 1.4; color: var(--ink); }

/* gifts */
.l-gift-grid { list-style: none; margin: 0 0 40px; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(16px, 2vw, 28px); align-items: start; }
.l-gift-card { display: flex; flex-direction: column; align-items: flex-start; gap: 14px; }
.l-gift-card .l-stage { width: 100%; min-height: 360px; margin-bottom: 10px; }
.l-gift-card .l-stage .l-flask, .l-pdp-stage .l-flask { --w: var(--fw); }
.l-gift-name { margin: 0; font-family: var(--nagori-font-display); font-weight: 300; font-size: 34px; line-height: 1.1; }
.l-gift-price, .l-gift-price .price { margin: -4px 0 0; font-family: var(--nagori-font-label); font-weight: 500; font-size: 12px; letter-spacing: .1em; font-variant-numeric: tabular-nums; color: var(--ink); }
.l-gift-card .l-p { font-size: 15px; }
.l-gift-card .l-btn { margin-top: 8px; }
.l-gift-choice { display: flex; gap: 6px; flex-wrap: wrap; }
.l-gift-choice .gift-opt {
  min-width: 52px; min-height: 40px; padding: 0 10px; cursor: pointer;
  background: transparent; color: var(--graphite); border: 1px solid var(--rule);
  font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .12em;
}
.l-gift-choice .gift-opt.selected { color: var(--leaf); background: var(--ink); border-color: var(--ink); }

/* journal */
.l-cards--journal { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: clamp(40px, 5vw, 64px); }
.l-card-d { font-size: 15px; line-height: 1.6; color: var(--nagori-read); }

/* the quiz */
.l-quiz-head { display: grid; gap: 18px; justify-items: center; text-align: center; margin: 0 auto clamp(40px, 6vw, 72px); }

/* 404 */
.l-nf { max-width: var(--max); margin: 0 auto; padding: clamp(32px, 5vw, 64px) var(--gut) clamp(64px, 8vw, 104px); display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(32px, 5vw, 80px); align-items: center; }
.l-nf-copy { display: flex; flex-direction: column; align-items: flex-start; gap: 22px; }

@media (max-width: 900px) {
  .l-two, .l-essay, .l-nf { grid-template-columns: minmax(0, 1fr); }
  .l-lead { position: static; }
  .l-steps, .l-steps--four, .l-gift-grid, .l-cards--journal { grid-template-columns: minmax(0, 1fr); }
  .l-idx a { grid-template-columns: 48px minmax(0, 1fr); }
  .l-idx-note { grid-column: 2; }
  .l-detail { grid-template-columns: minmax(0, 1fr); }
  .l-wide { padding: 0; }
  .l-wide--tall img { aspect-ratio: 4 / 3; }
}
@media (min-width: 901px) and (max-width: 1180px) {
  .l-steps--four { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .l-cards--journal { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ---------- 11. every other page: the same voice ---------- */
/* page heads */
main .coll-hero, main .contact-hero {
  background: transparent; color: var(--ink); border: 0;
}
main .coll-hero { min-height: 0; display: block; padding: clamp(56px, 8vw, 104px) 0 clamp(28px, 4vw, 48px); text-align: left; }
main .coll-hero .coll-hero-inner { max-width: 720px; }
.primer-page main .coll-hero .coll-hero-inner { max-width: 920px; }
main .chapter { padding: clamp(56px, 8vw, 104px) 0; }
main .chapter--tight { padding: clamp(40px, 6vw, 72px) 0; }
main .section { padding: clamp(32px, 5vw, 64px) 0; }
/* the head sits on the same centred measure as the text under it (an older
   rule in nagori.css pins it to the left edge with !important) */
main .coll-hero .container--narrow.coll-hero-inner { margin-left: auto !important; margin-right: auto !important; }
main .article-body p, main .article-lede { font-size: 18px; line-height: 1.8; }
main .article-body h2 { font-size: clamp(26px, 2.6vw, 32px); margin-top: 1.6em; }
main .coll-hero .rule, main .coll-hero .rule--center { display: none; }
main .coll-hero .statement { margin: 14px 0 0; text-align: left; }
main .coll-hero-body { margin: 18px 0 0; max-width: 60ch; text-align: left; font-size: 17px; }
main .legal-updated {
  font-family: var(--nagori-font-reading); font-weight: 300; font-size: 14px; line-height: 1.6;
  letter-spacing: 0; text-transform: none; color: var(--graphite);
  border-top: 1px solid var(--ink); padding-top: 16px; margin-bottom: 40px;
}
main .legal-h, main .legal h2, main .faq-group > .caption, main .primer-head {
  font-family: var(--nagori-font-display); font-weight: 300; font-size: 26px; line-height: 1.2;
  letter-spacing: -.005em; text-transform: none; color: var(--ink);
}
main .legal-p { font-size: 16px; }
main .contact-intro { padding-top: 0; }
main .coll-hero .statement, main .contact-hero .statement, main .checkout-head .statement {
  font-size: clamp(40px, 5.2vw, 68px); line-height: 1.05;
}
main .rule { border: 0; height: 1px; background: var(--rule); }
main .rule--center { width: 48px; background: var(--ink); height: 1px; }
main .section, main .chapter { background: transparent; }
main .record, main .record-wrap { background: transparent; border-color: var(--rule); }
main .record td, main .record th { border-color: var(--rule); }
main .plate, main .ph, main .ph--01, main .ph--02, main .ph--03 { background-color: var(--rule); }

/* accordions (questions) */
main .accordion-group { border-top: 1px solid var(--ink); }
main .accordion { border: 0; border-bottom: 1px solid var(--rule); }
main .accordion-header {
  width: 100%; min-height: 64px; padding: 16px 0; margin: 0;
  display: flex; align-items: center; justify-content: space-between; gap: 20px;
  background: none; border: 0; text-align: left; cursor: pointer;
  font-family: var(--nagori-font-display); font-weight: 300; font-size: 21px; line-height: 1.3;
  letter-spacing: 0; text-transform: none; color: var(--ink);
}
main .accordion-header:hover { color: var(--graphite); }
main .accordion-chev { border-color: var(--ink); }
main .accordion-inner { padding: 0 0 22px; }
main .accordion-inner p { margin: 0 0 .8em; font-size: 16px; max-width: 62ch; }
main .faq-group + .faq-group { margin-top: 48px; }

/* forms */
main input[type="text"], main input[type="email"], main input[type="tel"], main input[type="search"],
main select, main textarea {
  border-radius: 0; background: var(--nagori-plate); border-color: var(--rule); color: var(--ink);
  font-family: var(--nagori-font-reading);
}
main input:focus, main select:focus, main textarea:focus { border-color: var(--ink); outline: none; }
main label { color: var(--ink); }

/* journal cards and articles */

main .article-title { font-family: var(--nagori-font-display); font-weight: 300; color: var(--ink); }
main .article-title { font-size: clamp(40px, 5vw, 66px); line-height: 1.05; letter-spacing: -.012em; }
main .pull-quote { font-family: var(--nagori-font-display); font-style: italic; font-weight: 300; color: var(--ink); border-color: var(--ink); }

/* ---------- 12. the footer ---------- */
.l-foot {
  border-top: 1px solid var(--ink);
  background: var(--leaf); color: var(--ink);
  padding: clamp(48px, 6vw, 72px) var(--gut) 28px;
}
.l-foot > * { max-width: var(--max); margin-left: auto; margin-right: auto; }
.l-foot-cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(0, 1.4fr); gap: 32px; }
.l-foot-col { display: flex; flex-direction: column; align-items: flex-start; }
.l-foot-k {
  margin: 0 0 10px;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; color: var(--graphite);
}
.l-foot-col > a {
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; line-height: 2.5;
  letter-spacing: .12em; text-transform: uppercase; color: var(--ink); text-decoration: none;
}
.l-foot-col > a:hover { color: var(--graphite); }
.l-foot-form { width: 100%; display: flex; align-items: center; border-bottom: 1px solid var(--ink); }
footer.l-foot .l-foot-form input {
  flex: 1 1 auto; min-width: 0; min-height: 44px; border: 0; background: transparent; padding: 0; color: var(--ink);
  font-family: var(--nagori-font-reading); font-size: 15px;
}
.l-foot-form input::placeholder { color: var(--graphite); }
.l-foot-form input:focus { outline: none; }
.l-foot-form button {
  appearance: none; background: none; border: 0; padding: 0 0 0 12px; min-height: 44px; cursor: pointer; color: var(--ink);
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: var(--nagori-track-label); text-transform: uppercase;
}
.l-foot-form button:hover { color: var(--shu); }
.l-foot-msg { margin: 8px 0 0; min-height: 1em; font-size: 13px; color: var(--nagori-read); }
.l-foot-msg.error { color: var(--shu); }
.l-foot-fine { margin: 6px 0 0; font-size: 13px; line-height: 1.6; color: var(--graphite); }
.l-foot .footer-social { font-family: var(--nagori-font-reading); font-weight: 300; font-size: 13px; letter-spacing: 0; text-transform: none; line-height: 1.6; }
.l-foot-fine a { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--rule); display: inline-block; padding: 4px 0; }
.l-foot-terms {
  list-style: none; padding: 20px 0 0; margin-top: 40px; margin-bottom: 0;
  border-top: 1px solid var(--rule);
  display: flex; flex-wrap: wrap; gap: 8px 28px;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--graphite);
}
.l-foot-base {
  margin-top: clamp(40px, 6vw, 72px); padding-top: 22px; border-top: 1px solid var(--rule);
  display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px 28px;
  font-family: var(--nagori-font-reading); font-weight: 400; font-size: 12px; line-height: 1.6; color: var(--graphite);
}
.l-foot-sign { display: flex; align-items: center; gap: 18px; }
.l-foot-sign .l-mark { --mh: 13px; padding: 6px 0; color: var(--ink); }
.l-foot-base p, .l-foot-base address { margin: 0; font: inherit; font-style: normal; letter-spacing: inherit; color: inherit; }
.l-foot-base a { color: var(--graphite); text-decoration: none; display: inline-block; padding: 4px 0; }
.l-foot-base a:hover { color: var(--ink); }
@media (max-width: 900px) {
  .l-foot-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .l-foot-letters { grid-column: 1 / -1; }
}
@media (max-width: 520px) {
  .l-foot-base { flex-direction: column; }
}

/* ---------- 13. the bag ---------- */
.cart-overlay { background: rgba(26,26,26,.32); }
.cart-drawer { background: var(--leaf); color: var(--ink); border-left: 1px solid var(--rule); }
.cart-head, .cart-foot { border-color: var(--rule); }
.cart-title { font-family: var(--nagori-font-display); font-weight: 300; font-size: 26px; }
.cart-item { border-color: var(--rule); }
.cart-item-name { font-family: var(--nagori-font-display); font-weight: 300; font-size: 20px; }
.cart-item-variant, .cart-remove, .cart-item-price, .cart-subtotal .lbl {
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--graphite);
  font-variant-numeric: tabular-nums;
}
.cart-item-price { color: var(--ink); }
.cart-total { font-family: var(--nagori-font-display); font-weight: 300; font-size: 26px; }
.cart-qty button { border-color: var(--rule); color: var(--ink); }
.cart-note { color: var(--graphite); }

/* ---------- 13b. carried over from the previous build ---------- */
/* the article's quiet link */
.x-link {
  position: relative; display: inline-block; padding-bottom: .45em;
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px;
  letter-spacing: var(--nagori-track-label); text-transform: uppercase; text-decoration: none; color: currentColor;
}
.x-link::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: currentColor; opacity: .3; transition: opacity .3s ease; }
.x-link:hover::after { opacity: 1; }
.pdp-cart .price, .disc-cta .price { font: inherit; letter-spacing: inherit; }
.ph::after { display: none; }
@media (pointer: coarse), (max-width: 768px) {
  .currency-switch, [data-currency] select { min-height: 44px; padding-inline: 6px; }
  .footer-input { min-height: 44px; }
  .contact-form input, .contact-form select, .consult-form input, .field input, .field select { min-height: 44px; }

  /* 16px is not a taste decision. Below it, iOS Safari zooms the whole page
     the moment a field takes focus — the layout jumps, the keyboard covers
     what you were reading, and you pinch back out to find your place. Every
     field on the checkout was 14px and the footer's was 12px, so it happened
     on all fourteen fields of the one form that matters, on the phones most
     people will use. The height above was already right; this is the half
     that was missing. */
  /* .nav .currency-switch carries `font: inherit` in nav.css at (0,2,0), so
     a bare .currency-switch here loses on specificity and the select keeps
     the nav's 11px. Matching it on the element as well settles it. */
  .nav select.currency-switch,
  .footer-input, .currency-switch, [data-currency] select,
  .contact-form input, .contact-form select, .contact-form textarea,
  .consult-form input, .consult-form select, .consult-form textarea,
  .field input, .field select, .field textarea,
  footer.l-foot .l-foot-form input { font-size: 16px; }

  /* A thumb is not a cursor. The quantity steppers sit side by side, so 32px
     square meant aiming between two targets a finger-width apart. */
  .cart-qty button { width: 44px; height: 44px; }
  .cart-remove { min-height: 44px; }
  .co-gift-toggle input[type="checkbox"] { width: 20px; height: 20px; }
}

/* ---------- 14. print ---------- */
@media print {
  .l-five::before, .l-pdp-stage::before, .l-vials-row::before { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .l-five.l-draw::before { transform: none; transition: none; }
  .l-pdp-view, .l-pdp-hero[data-size] .l-pdp-view { transition: none; }
  .l-under, .l-btn, .l-begin-card, .l-acc-mark::before, .l-acc-mark::after, .l-acc .accordion-body { transition: none; }
}

/* ---------- where to begin: two ways in, straight under the five ----------
   The quiz's first question, answered here and carried on at quiz.html; or
   all five on paper first. */
.l-begin { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(40px, 6vw, 96px); align-items: start; border-top: 1px solid var(--rule); }
.l-begin > div { display: flex; flex-direction: column; align-items: flex-start; gap: 18px; min-width: 0; }
.l-begin .l-h2 { margin: 0; }
.l-begin-sub { margin: -4px 0 0; max-width: 34ch; font-family: var(--nagori-font-display); font-style: italic; font-weight: 300; font-size: 19px; line-height: 1.45; color: var(--nagori-read); }
.l-begin-q { margin: 18px 0 0; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--graphite); }
.l-begin-step { margin-right: .9em; font-family: var(--nagori-font-notation); font-weight: 400; letter-spacing: .08em; }
.l-begin-opts { list-style: none; margin: -6px 0 0; padding: 0; width: 100%; border-bottom: 1px solid var(--rule); }
.l-begin-opts a {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  min-height: 52px; padding: 12px 0; border-top: 1px solid var(--rule);
  font-family: var(--nagori-font-display); font-weight: 300; font-size: 19px; line-height: 1.3;
  color: var(--ink); text-decoration: none;
}
.l-begin-opts a::after { content: "\2192"; flex: none; font-family: var(--nagori-font-label); font-size: 15px; color: var(--graphite); transition: transform .2s ease, color .2s ease !important; }  /* §07-exempt */
.l-begin-opts a:hover { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: var(--shu); }
.l-begin-opts a:hover::after { transform: translateX(4px); color: var(--ink); }
.l-begin-set .l-stage { width: 100%; min-height: 250px; padding: 40px 24px 60px; margin-bottom: 8px; }
@media (max-width: 900px) {
  .l-begin { grid-template-columns: minmax(0, 1fr); }
  .l-begin-opts a { font-size: 18px; }
}
@media (prefers-reduced-motion: reduce) { .l-begin-opts a::after { transition: none; } }

/* a button that also says what it costs now */
.l-btn:has(.l-btn-sub) { flex-wrap: wrap; row-gap: 2px; padding-block: 9px; }
.l-btn-sub { flex-basis: 100%; text-align: center; font-size: 10px; letter-spacing: .1em; opacity: .74; }

/* the discovery set's price and credit, where the decision is made */
.l-disc-deal { margin: 4px 0 0; font-family: var(--nagori-font-display); font-weight: 300; font-size: clamp(20px, 2vw, 24px); line-height: 1.35; color: var(--ink); }
/* on an edition: trying first is one line under the button */
/* the quiz without JavaScript */
.l-quiz-plain { max-width: 640px; margin: 0 auto; }
.l-quiz-plain .l-begin-opts { margin-top: 14px; }
.l-quiz-plain .l-fine { margin-top: 18px; }
.l-quiz-plain .l-begin-opts a { flex-wrap: wrap; }
.l-quiz-plain .l-begin-opts a::after { order: 3; }

/* on a phone, once the page's own button has scrolled away: the same button at the foot */
.l-sticky-buy {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 800;
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 10px var(--gut) calc(10px + env(safe-area-inset-bottom));
  background: var(--leaf); border-top: 1px solid var(--rule);
  box-shadow: 0 -18px 36px -28px rgba(26, 26, 26, .35);
  transform: translateY(100%); visibility: hidden;
  transition: transform .3s ease, visibility 0s linear .3s !important;  /* §07-exempt */
}
.l-sticky-buy.is-on { transform: none; visibility: visible; transition: transform .3s ease !important; }  /* §07-exempt */
.l-sticky-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.l-sticky-name { font-family: var(--nagori-font-display); font-weight: 300; font-size: 17px; line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.l-sticky-meta { white-space: nowrap; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; font-variant-numeric: tabular-nums; color: var(--graphite); }
.l-sticky-btn { flex: none; padding-inline: 16px; }
@media (min-width: 721px) { .l-sticky-buy { display: none; } }
@media (prefers-reduced-motion: reduce) { .l-sticky-buy, .l-sticky-buy.is-on { transition: none; } }
body.has-sticky-buy { padding-bottom: calc(76px + env(safe-area-inset-bottom)); }

/* the first batch, as it stands: a record, not a countdown */
.l-batch { list-style: none; margin: 4px 0 18px; padding: 0; border-top: 1px solid var(--rule); }
.l-batch li { display: grid; grid-template-columns: 7.5em minmax(0, 1fr) minmax(0, 1.2fr); gap: 4px 16px; align-items: baseline; padding: 12px 0; border-bottom: 1px solid var(--rule); }
.l-batch-s { display: inline-flex; align-items: center; gap: .6em; font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .06em; color: var(--graphite); }
.l-batch-s::before { content: ""; flex: none; width: 8px; height: 8px; border-radius: 50%; border: 1px solid var(--ink); }
.l-batch li[data-state="done"] .l-batch-s::before { background: var(--ink); }
.l-batch li[data-state="now"] .l-batch-s::before { background: linear-gradient(90deg, var(--ink) 50%, transparent 50%); }
.l-batch li[data-state="next"] .l-batch-s::before { border-color: var(--graphite); }
.l-batch-k { font-family: var(--nagori-font-display); font-weight: 300; font-size: 18px; line-height: 1.3; color: var(--ink); }
.l-batch-v { font-size: 14px; line-height: 1.5; color: var(--nagori-read); }
@media (max-width: 560px) {
  .l-batch li { grid-template-columns: 7.5em minmax(0, 1fr); }
  .l-batch-v { grid-column: 2; }
}

/* the scent map: the hour each is worn, against how far it reaches */
.l-map { display: grid; border-top: 1px solid var(--rule); }
.l-map-row { display: grid; grid-template-columns: 8.5em repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--rule); }
.l-map-row > span { padding: 14px 12px; min-height: 64px; display: flex; flex-direction: column; justify-content: center; gap: 10px; }
.l-map-row > span + span { border-left: 1px solid var(--rule); }
.l-map-h, .l-map-r { font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--graphite); }
.l-map-row:first-child > span { min-height: 0; }
.l-map-cell a { display: flex; flex-direction: column; gap: 2px; color: var(--ink); text-decoration: none; font-family: var(--nagori-font-display); font-weight: 300; font-size: 20px; line-height: 1.2; }
.l-map-cell a:hover { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: var(--shu); }
.l-map-no { display: inline-flex; align-items: center; font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .14em; color: var(--graphite); }
.l-map-note { margin-top: 16px; max-width: 70ch; }
@media (max-width: 720px) {
  .l-map-row { grid-template-columns: 5.6em repeat(3, minmax(0, 1fr)); }
  .l-map-row > span { padding: 10px 6px; }
  .l-map-h, .l-map-r { font-size: 10px; letter-spacing: .08em; }
  .l-map-cell a { font-size: 15px; }
}

/* before the first button: what this is, in two words */
.l-prelaunch { margin: 0; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .16em; text-transform: uppercase; color: var(--ink); display: inline-flex; align-items: center; gap: .7em; }
.l-prelaunch::before { content: ""; width: 7px; height: 7px; border: 1px solid var(--ink); background: linear-gradient(90deg, var(--ink) 50%, transparent 50%); }
/* the ladder: try one, try all five, wear it, keep it */
.l-ladder .size-option { grid-template-columns: 16px 7.6em minmax(0, 1fr) auto; min-height: 62px; padding: 8px 0; }
.l-size-vol { display: flex; flex-direction: column; gap: 3px; }
.l-size-step { font-size: 10px; letter-spacing: .14em; color: var(--graphite); }
.l-pdp .size-option.selected .l-size-step { color: var(--ink); }
@media (max-width: 480px) {
  .l-ladder .size-option { grid-template-columns: 14px 8.2em minmax(0, 1fr) auto; gap: 10px; }
  .l-ladder .l-size-step { letter-spacing: .1em; white-space: nowrap; }
  .l-ladder .l-size-note { font-size: 12px; }
  .l-size-more { display: none; }
}

/* presence in ordinary words, under its name on the map */
.l-map-say { display: block; margin-top: 4px; font-weight: 400; font-size: 12px; line-height: 1.35; letter-spacing: 0; text-transform: none; color: var(--nagori-read); }
@media (max-width: 720px) { .l-map-say { font-size: 11px; } }
/* what a reservation is, directly under the button */
.l-pdp-note strong, [data-preorder] strong { font-weight: 600; color: var(--ink); }
/* beside the decision: a person, not a filter */
.l-ask { margin: 2px 0 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; font-size: 14px; line-height: 1.5; color: var(--nagori-read); }
.l-ask-k { font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--ink); }
.l-ask .l-under { padding: 3px 0 4px; line-height: 1.4; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; }
.l-ask-say { flex-basis: 100%; }
.l-compare-sec .l-ask { margin-top: 20px; }
.l-rows-more { margin-top: 12px; }
.l-rows-more .l-under, .l-map-note .l-under { padding: 2px 0 4px; line-height: 1.5; }

/* the primer: presence in three steps, then the five on it */
.primer-sub { margin: 2rem 0 .6rem; font-family: var(--nagori-font-label); font-weight: 500; font-size: 12px; letter-spacing: .14em; text-transform: uppercase; color: var(--ink); scroll-margin-top: 6rem; }
.primer-row[id] { scroll-margin-top: 5rem; }
.primer-scale td { font-family: var(--nagori-font-reading); font-size: 15px; letter-spacing: 0; line-height: 1.55; }
.primer-scale td strong { font-weight: 600; }
.primer-scale th { width: 9.5em; }
.primer-five { list-style: none; margin: .4rem 0 1rem; padding: 0; border-top: 1px solid var(--ink); }
.primer-five li { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1.15fr) minmax(0, .95fr); align-items: baseline; gap: 10px 18px; padding: 14px 0; border-bottom: 1px solid var(--rule); }
.primer-five-cell { display: flex; flex-direction: column; gap: 3px; }
.primer-five a { display: flex; align-items: baseline; gap: 12px; color: var(--ink); text-decoration: none; font-family: var(--nagori-font-display); font-weight: 300; font-size: 20px; line-height: 1.25; }
.primer-five a:hover .primer-five-name { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: var(--shu); }
.primer-five-no { display: inline-flex; align-items: center; font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .14em; color: var(--graphite); }
.primer-five-k { font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--graphite); }
.primer-five-v { font-size: 15px; color: var(--ink); }
.primer-five-note { margin-top: .4rem; }
.primer-next { margin-top: 3rem; padding-top: 1.6rem; border-top: 1px solid var(--ink); display: grid; gap: .6rem; }
@media (max-width: 760px) {
  .primer-five li { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px 12px; }
  .primer-five a { grid-column: 1 / -1; margin-bottom: 2px; }
  .primer-scale th { width: auto; white-space: normal; }
}

/* the quiz without JavaScript: the four questions as one plain form */
.l-quiz-qs { list-style: none; margin: 0; padding: 0; display: grid; gap: 26px; }
.l-quiz-form fieldset { margin: 0; padding: 0; border: 0; }
.l-quiz-form legend { padding: 0; }
.l-quiz-picks { margin-top: 10px; }
.l-quiz-picks li + li { border-top: 1px solid var(--rule); }
.l-quiz-picks label {
  display: flex; align-items: baseline; gap: 12px; padding: 13px 0; min-height: 44px;
  font-family: var(--nagori-font-display); font-weight: 300; font-size: 19px; line-height: 1.3; color: var(--ink); cursor: pointer;
}
.l-quiz-picks input { accent-color: var(--ink); width: 15px; height: 15px; flex: none; }
.l-quiz-picks label:hover { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: var(--shu); }
.l-quiz-picks label:focus-within { outline: 1px solid var(--ink); outline-offset: 3px; }
.l-quiz-form .l-btn { margin-top: 26px; }

.l-prelaunch a { color: inherit; text-decoration: none; border-bottom: 1px solid transparent; padding: 4px 0 5px; }
.l-prelaunch a:hover { border-bottom-color: var(--shu); }

/* a material essay ends where the material is worn */
.article-uses { margin: 2.6rem 0 0; padding-top: 1.4rem; border-top: 1px solid var(--ink); }
.l-uses { list-style: none; margin: .6rem 0 1rem; padding: 0; }
.l-uses li { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); align-items: baseline; gap: 6px 18px; padding: 12px 0; border-bottom: 1px solid var(--rule); }
.l-uses a { display: flex; align-items: baseline; gap: 12px; color: var(--ink); text-decoration: none; font-family: var(--nagori-font-display); font-weight: 300; font-size: 20px; line-height: 1.25; }
.l-uses a:hover { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: var(--shu); }
.l-uses-no { display: inline-flex; align-items: center; font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .14em; color: var(--graphite); }
.l-uses-v { font-size: 14px; line-height: 1.5; color: var(--nagori-read); }
/* the edition page: the smells, under the line that tells the story */
.l-pdp-smell { margin: -2px 0 0; font-size: 15px; line-height: 1.6; color: var(--nagori-read); max-width: 46ch; }
.l-tags { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: -4px 0 0; padding: 0; }
.l-tags li { font-family: var(--nagori-font-label); font-weight: 500; font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--graphite); border: 1px solid var(--rule); padding: 5px 9px; }
@media (max-width: 760px) { .l-uses li { grid-template-columns: 1fr; gap: 4px; } }

/* the discovery method: five days, read at the hours that matter */
.l-method-lede { max-width: 58ch; margin-bottom: 8px; }
.l-method { list-style: none; margin: 18px 0 0; padding: 0; counter-reset: step; border-top: 1px solid var(--ink); }
.l-method li { display: grid; grid-template-columns: 9.5em minmax(0, 1fr); gap: 8px 22px; padding: 16px 0; border-bottom: 1px solid var(--rule); counter-increment: step; }
.l-method-k { font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--ink); display: flex; align-items: baseline; gap: .8em; }
.l-method-k::before { content: counter(step, decimal-leading-zero); font-family: var(--nagori-font-notation); color: var(--graphite); letter-spacing: .08em; }
.l-method-v { font-size: 16px; line-height: 1.65; color: var(--nagori-read); max-width: 62ch; }
@media (max-width: 640px) { .l-method li { grid-template-columns: 1fr; gap: 4px; } }

/* Filtering the five, with no script: a radio group whose value hides what it
   does not match. Every chip's value needs a rule here — build-collection
   refuses to write a chip that has none. */
.l-facets { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 10px; margin: 0 0 26px; }
.l-facet-k { font-family: var(--nagori-font-label); font-weight: 500; font-size: 10px; letter-spacing: .16em; text-transform: uppercase; color: var(--graphite); margin-left: 10px; }
.l-facet-k:first-of-type { margin-left: 0; }
.l-facet {
  font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .12em; text-transform: uppercase;
  color: var(--graphite); border: 1px solid var(--rule); padding: 9px 12px; cursor: pointer; min-height: 34px; display: inline-flex; align-items: center;
  transition: color .15s ease, border-color .15s ease;
}
.l-facet:hover { color: var(--ink); border-color: var(--ink); }
#f-all:checked ~ .l-facets .l-facet[for="f-all"],
#f-fresh:checked ~ .l-facets .l-facet[for="f-fresh"],
#f-green:checked ~ .l-facets .l-facet[for="f-green"],
#f-smoky:checked ~ .l-facets .l-facet[for="f-smoky"],
#f-soft:checked ~ .l-facets .l-facet[for="f-soft"],
#f-warm:checked ~ .l-facets .l-facet[for="f-warm"],
#f-close:checked ~ .l-facets .l-facet[for="f-close"],
#f-moderate:checked ~ .l-facets .l-facet[for="f-moderate"],
#f-noticeable:checked ~ .l-facets .l-facet[for="f-noticeable"],
#f-day:checked ~ .l-facets .l-facet[for="f-day"],
#f-any:checked ~ .l-facets .l-facet[for="f-any"],
#f-night:checked ~ .l-facets .l-facet[for="f-night"] { color: var(--leaf, #F6F4ED); background: var(--ink); border-color: var(--ink); }
#f-all:focus-visible ~ .l-facets .l-facet[for="f-all"],
#f-fresh:focus-visible ~ .l-facets .l-facet[for="f-fresh"],
#f-green:focus-visible ~ .l-facets .l-facet[for="f-green"],
#f-smoky:focus-visible ~ .l-facets .l-facet[for="f-smoky"],
#f-soft:focus-visible ~ .l-facets .l-facet[for="f-soft"],
#f-warm:focus-visible ~ .l-facets .l-facet[for="f-warm"],
#f-close:focus-visible ~ .l-facets .l-facet[for="f-close"],
#f-moderate:focus-visible ~ .l-facets .l-facet[for="f-moderate"],
#f-noticeable:focus-visible ~ .l-facets .l-facet[for="f-noticeable"],
#f-day:focus-visible ~ .l-facets .l-facet[for="f-day"],
#f-any:focus-visible ~ .l-facets .l-facet[for="f-any"],
#f-night:focus-visible ~ .l-facets .l-facet[for="f-night"] { outline: 2px solid var(--ink); outline-offset: 3px; }
#f-fresh:checked ~ .l-five > li:not([data-facets~="fresh"]),
#f-green:checked ~ .l-five > li:not([data-facets~="green"]),
#f-smoky:checked ~ .l-five > li:not([data-facets~="smoky"]),
#f-soft:checked ~ .l-five > li:not([data-facets~="soft"]),
#f-warm:checked ~ .l-five > li:not([data-facets~="warm"]),
#f-close:checked ~ .l-five > li:not([data-facets~="close"]),
#f-moderate:checked ~ .l-five > li:not([data-facets~="moderate"]),
#f-noticeable:checked ~ .l-five > li:not([data-facets~="noticeable"]),
#f-day:checked ~ .l-five > li:not([data-facets~="day"]),
#f-any:checked ~ .l-five > li:not([data-facets~="any"]),
#f-night:checked ~ .l-five > li:not([data-facets~="night"]) { display: none; }
@media (prefers-reduced-motion: reduce) { .l-facet { transition: none; } }

/* the materials: what a note actually is, and who wears it */
.l-mats { margin: 0 0 2.6rem; }
.l-mat { display: grid; grid-template-columns: 200px minmax(0, 1fr); gap: 10px 32px; padding: 22px 0; border-top: 1px solid var(--rule); }
.l-mat:last-child { border-bottom: 1px solid var(--rule); }
.l-mat dt { font-family: var(--nagori-font-display); font-weight: 300; font-size: 21px; line-height: 1.2; color: var(--ink); }
.l-mat-latin { display: block; margin-top: 4px; font-family: var(--nagori-font-reading); font-style: italic; font-size: 13px; color: var(--graphite); }
.l-mat dd { margin: 0; }
.l-mat-what { margin: 0; font-size: 16px; line-height: 1.65; color: var(--nagori-read); max-width: 62ch; }
.l-mat-smell { margin: 10px 0 0; font-family: var(--nagori-font-display); font-weight: 300; font-size: 17px; line-height: 1.5; color: var(--ink); max-width: 56ch; }
.l-mat-in { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; margin: 14px 0 0; }
.l-mat-in .l-label { color: var(--graphite); }
.l-mat-in a { display: inline-flex; align-items: baseline; gap: 8px; color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--rule); padding-bottom: 2px; font-size: 15px; }
.l-mat-in a:hover { border-bottom-color: var(--shu); }
.l-mats-no { display: inline-flex; align-items: center; font-family: var(--nagori-font-notation); font-size: 11px; letter-spacing: .14em; color: var(--graphite); }
@media (max-width: 760px) { .l-mat { grid-template-columns: 1fr; gap: 6px; } .l-mat dt { font-size: 20px; } }

/* where it ships, said where the buying happens */
.l-ships { margin: 6px 0 0; max-width: 52ch; }
.l-ships .l-under { padding-bottom: 1px; }

/* ---------- What lingers, said as a hover ----------
   It arrives on --dur-turn and leaves on --dur-linger. The base rule holds
   the long duration and the hover rule overrides it with the short one, so
   letting go takes more than twice as long as reaching — which is the one
   thing this house is named for. Transform only: the flask lifts, the chip
   opens, and neither moves a pixel of layout. */
.l-five-item .l-flask,
.l-five-item .l-chip {
  transition: transform var(--dur-linger) var(--ease-settle) !important;  /* §07-exempt */
}
.l-five-item:hover .l-flask,
.l-five-item:focus-visible .l-flask {
  transform: translate3d(0, -6px, 0);
  transition-duration: var(--dur-turn) !important;
}
.l-five-item:hover .l-chip,
.l-five-item:focus-visible .l-chip {
  transform: scale(1.35);
  transition-duration: var(--dur-turn) !important;
}
@media (prefers-reduced-motion: reduce) {
  .l-five-item .l-flask, .l-five-item .l-chip { transition: none !important; transform: none !important; }
}

/* The edition in its own world — the picture that makes 001 not 003.
   Portrait, and it opens the gallery under the buy box. */
.l-pdp-still { margin: 0; }
.l-pdp-still img { display: block; width: 100%; height: auto; }

/* The five, as the materials they are made of. materials.html carried 857
   words and no pictures at all until this existed. */
.l-mats-strip { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 16px; }
.l-mats-strip a { display: block; text-decoration: none; color: var(--ink); }
.l-mats-strip img { display: block; width: 100%; height: auto; aspect-ratio: 1 / 1; object-fit: cover; }
.l-mats-strip-no { display: block; margin-top: 12px; font-family: var(--nagori-font-label); font-weight: 500; font-size: 11px; letter-spacing: .14em; color: var(--graphite); }
.l-mats-strip-name { display: block; margin-top: 4px; font-family: var(--nagori-font-display); font-weight: 300; font-size: 17px; line-height: 1.25; }
.l-mats-strip a:hover .l-mats-strip-name { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: var(--shu); }
@media (max-width: 700px) { .l-mats-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } }

/* ── HEADINGS THAT ARE NOT SECTION TITLES ────────────────────────────────
   A question in an accordion and a title on a card are headings: a screen
   reader can now list them and jump between them, where before it found one
   heading on the whole of faq.html. Neither is a section title, though, and
   neither may take the section-title look — so each is put back to what it
   was drawn as when it was a <button> and a <span>. text-wrap is inherited,
   which is why it is named: balance would otherwise reach inside. */
main h2.accordion-h, main h3.accordion-h {
  font: inherit; color: inherit; letter-spacing: inherit; text-wrap: wrap;
}
main h2.l-card-t, main h3.l-card-t {
  font-family: var(--nagori-font-display); font-weight: 300;
  font-size: clamp(20px, 1.8vw, 24px); line-height: 1.2;
  letter-spacing: normal; color: inherit; text-wrap: wrap;
}
