
*,*::before,*::after{box-sizing:border-box}
/* ============ POLICES ============ */
/* Livrees depuis /fonts, identiques a celles de la vitrine — les deux moities
   du site doivent avoir le meme dessin, comme elles ont deja les memes valeurs
   de couleur. Avant, la page empruntait la police du systeme du visiteur :
   Helvetica Neue sur Mac, Arial sur Windows, SF Mono ici et Consolas la.
   Voir fonts/README.md. Chemins absolus : cette feuille est servie depuis
   /catalogue/. TeX Gyre Heros est un clone metrique d'Helvetica — Helvetica
   Neue appartient a Monotype et ne peut pas etre redistribuee depuis le
   domaine. */
@font-face{font-family:"TeX Gyre Heros";font-style:normal;font-weight:400;font-display:swap;
  src:url("/fonts/texgyreheros-400.woff2") format("woff2")}
@font-face{font-family:"TeX Gyre Heros";font-style:normal;font-weight:700;font-display:swap;
  src:url("/fonts/texgyreheros-700.woff2") format("woff2")}
/* Fonte variable bornee a 400-700 : un seul fichier pour les deux graisses. */
@font-face{font-family:"Roboto Mono";font-style:normal;font-weight:400 700;font-display:swap;
  src:url("/fonts/robotomono-var.woff2") format("woff2")}
:root{
  --ink:#141210; --soft:#6E665C; --faint:#96907F; --accent:#2B211A;
  --sand:#FFFFFF; --espresso:#141210;
  --wash:rgba(20,18,16,.042); --wash2:rgba(20,18,16,.082); --hair:rgba(20,18,16,.11);
  --rule:rgba(20,18,16,.14);
  --sans:"TeX Gyre Heros","Helvetica Neue",Helvetica,Arial,sans-serif;
  --mono:"Roboto Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --gut:clamp(1.15rem,4vw,3.5rem);
}
/* Fond blanc.
   Le catalogue presente des pieces detourees : sur un fond sable, chaque photo
   posait sa propre lumiere contre la couleur du papier, et le rayon entier
   prenait un ton de brocante. Sur blanc l'objet est seul, et c'est la maniere
   dont une maison de mobilier montre son fonds — pas un decor, un fonds.
   `--sand` garde son nom : il ne designe plus une couleur mais LE FOND, et il
   sert aussi d'encre sur les boutons espresso. Le sable, l'espresso et le
   laiton restent la marque ; ils vivent sur le site vitrine, pas dans la salle
   d'exposition. */
/* `clip` rather than `hidden`: both stop a stray wide child from scrolling the
   page sideways, but `hidden` makes the element its own scroll container, and a
   scroll container above `position:sticky` kills it silently — the mobile tools
   bar simply scrolled away. `hidden` stays first as the fallback. */
html{overflow-x:hidden;overflow-x:clip}
body{margin:0;min-height:100vh;overflow-x:hidden;overflow-x:clip;
  color:var(--ink);font-family:var(--sans);
  font-size:clamp(.9375rem,.5vw + .84rem,1rem);line-height:1.55;letter-spacing:-.005em;
  -webkit-font-smoothing:antialiased;background:var(--sand);
  display:flex;flex-direction:column}
main{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}
/* Le grain, reduit a un souffle. Sur le sable il faisait la matiere du papier ;
   sur blanc, a la meme force, il grisait toute la page — un blanc sale n'est
   plus un blanc. Il reste juste de quoi que l'aplat ne soit pas un ecran
   eteint. */
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:90;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.72' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23n)' opacity='0.55'/%3E%3C/svg%3E");background-size:200px 200px;opacity:.05;mix-blend-mode:multiply}
img{max-width:100%;display:block}
a{color:inherit}
h1,h2,h3{font-weight:700;letter-spacing:-.034em;margin:0;line-height:1.05;text-wrap:balance}
.wrap{width:100%;min-width:0;max-width:1320px;margin-inline:auto;
  padding-inline:var(--gut);position:relative;z-index:1}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.eyebrow{font-family:var(--mono);font-size:.6875rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--soft);margin:0}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* `.cap` est la commande generique du catalogue : elle garde sa forme pleine la
   ou elle est vraiment un bouton — sur la page de demande (Copier, Ouvrir dans
   le mail, Envoyer). Dans le BANDEAU, elle n'en est plus une : voir plus bas.

   La typo est celle de la page d'accueil : Helvetica grasse en capitales, 12px,
   chasse a .16em — exactement le reglage de `.menu-cat` dans index.html. Elle
   etait en monospace, ce qui faisait du catalogue un autre site des la premiere
   ligne. Le monospace reste la voix FONCTIONNELLE (references, cotes, categories
   sous les vignettes) ; il ne porte plus la navigation. */
.cap{display:inline-flex;align-items:center;gap:.5em;border:0;border-radius:999px;
  padding:.62em 1.15em;font-family:var(--sans);font-size:12px;font-weight:700;
  letter-spacing:.16em;
  text-transform:uppercase;text-decoration:none;cursor:pointer;color:var(--ink);
  background:var(--wash);transition:background .18s,color .18s,opacity .25s}
.cap:hover{background:var(--wash2)}
.cap.on{background:var(--espresso);color:#FFF}
.cap.acc{background:var(--espresso);color:#FFF}
.cap.acc:hover{background:#332F2B}

/* ---- LE BANDEAU, LE MÊME QUE SUR LA VITRINE --------------------------------
   Emblème et MENU à gauche, Curated Products et le cabas à droite, a fond
   perdu, aux retraits exacts de `#nav` dans index.html : 26px en haut,
   clamp(26px,4vw,60px) sur les cotes. Il etait rentre dans la colonne de
   1320px, et passer de la vitrine au catalogue faisait sauter l'emblemme et
   les liens de plusieurs centimetres.

   Il reste `sticky` et non `fixed` : la planche est une page qui defile sous
   son bandeau, et c'est de sa hauteur mesuree (--masth) que la barre des
   rayons tire son `top`. Pose en haut du document, colle a 0, il est au meme
   endroit qu'un bandeau fixe tant que la page n'a pas bouge — et c'est
   l'arrivee sur la page qui devait cesser de sauter. */
.mast{position:sticky;top:0;z-index:130;display:flex;align-items:center;
  justify-content:space-between;gap:1.5rem;background:var(--sand);
  padding:26px clamp(26px,4vw,60px)}
/* Pas de filet sous le bandeau. Il en portait un, la vitrine non : c'etait la
   derniere chose qui distinguait les deux barres. Le fond blanc du bandeau
   suffit a tenir les pieces qui defilent dessous. */
body.home .mast{flex:none}
.nav-l,.nav-r{display:flex;align-items:center;gap:clamp(18px,2.4vw,34px)}
/* L'emblemme seul, comme sur la vitrine — plus le logotype « House Morphosis. ».
   Deux marques de largeurs differentes aux deux bouts du site, c'est justement
   ce qui faisait bouger le coin haut-gauche d'une page a l'autre. */
.brand{display:block;text-decoration:none;line-height:0}
/* 58x34 : exactement la taille que prend horse.png a `height:34px` sur la
   vitrine. L'emblemme est le meme dessin des deux cotes, il doit occuper la
   meme place au pixel pres — sinon le mot MENU a cote de lui ne tombe pas au
   meme endroit d'une page a l'autre, et c'est precisement ce qu'on corrige. */
.brand i{display:block;width:58px;height:34px;
  background:url("data:image/png;base64,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") left center/contain no-repeat}

/* Les libelles du bandeau : 12px, gras, chasse a .16em. C'est le reglage de
   `.menu-cat` sur la vitrine, et c'est celui qui tient tout le haut de la page
   avec la rangee des rayons juste dessous — INDOOR / OUTDOOR / BATHROOM est en
   .05em, et une capitale de 14px serree au-dessus d'elle cassait l'accord.
   Le panneau du menu, lui, parle au grand corps : ce n'est pas la meme place,
   ce n'est pas le meme role. */
.menu-btn,.menu-cat{background:none;border:0;padding:0;cursor:pointer;
  font:inherit;font-family:var(--sans);font-size:12px;font-weight:700;
  letter-spacing:.16em;line-height:1;text-transform:uppercase;color:var(--ink);
  text-decoration:none;white-space:nowrap;list-style:none;
  background-image:linear-gradient(currentColor,currentColor);
  background-repeat:no-repeat;background-position:0 100%;background-size:0% 1px;
  transition:background-size .3s cubic-bezier(.22,1,.36,1)}
.menu-btn::-webkit-details-marker{display:none}
.menu-btn:hover,.menu-cat:hover,
.menu-btn:focus-visible,.menu-cat:focus-visible{background-size:100% 1px}
/* CLOSE est le premier element DU PANNEAU, comme sur le site de reference : on
   le lit en haut de la liste, au-dessus des destinations. Le bouton du bandeau
   s'efface pendant ce temps — il ne dit pas deux fois la meme chose. */
.menu-close{background:none;border:0;padding:0;cursor:pointer;
  font:inherit;font-family:var(--sans);font-size:12px;font-weight:700;
  letter-spacing:.16em;line-height:1;text-transform:uppercase;color:var(--ink);
  background-image:linear-gradient(currentColor,currentColor);
  background-repeat:no-repeat;background-position:0 100%;background-size:0% 1px;
  transition:background-size .3s cubic-bezier(.22,1,.36,1);
  margin-bottom:clamp(38px,7vh,84px)}
.menu-close:hover,.menu-close:focus-visible{background-size:100% 1px}
.sitemenu[open] .menu-btn{opacity:0;visibility:hidden}

/* Le cabas : le meme signe et le meme compte que sur la vitrine. */
.menu-bag{display:inline-flex;align-items:flex-start;gap:.25em;color:var(--ink);
  text-decoration:none;transition:opacity .25s}
.menu-bag:hover{opacity:.6}
.menu-bag svg{width:21px;height:21px;display:block;flex:none;fill:none;
  stroke:currentColor;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round}
.menu-bag .n{font-family:var(--mono);font-size:9px;font-weight:700;line-height:1;
  letter-spacing:0;margin-top:.2em}
.menu-bag .n:empty{display:none}

/* ---- LE PANNEAU, LE MÊME QUE SUR LA VITRINE --------------------------------
   Une colonne pleine hauteur sur la gauche, sur le blanc de la page, et la page
   reste visible a droite. Pas de cadre, pas d'ombre, pas de voile teinte.

   LE MOUVEMENT EST UN FONDU DE 220 ms, ET RIEN D'AUTRE — releve sur la
   reference. Pas de glissement, pas de cascade ligne a ligne : le modele est
   beaucoup plus sobre qu'il n'en a l'air sur une capture, et c'est ce qui le
   fait passer pour cher. Ce qui porte l'evenement, c'est le mot MENU qui devient
   CLOSE a la meme ligne.

   Le decalage du haut place la premiere destination 45px sous cette ligne :
   l'ecart exact du modele entre sa croix et son premier lien. */
.sitemenu{position:relative}
.menu-veil{position:fixed;inset:0;z-index:135;background:transparent;
  animation:menufade .22s ease both}
.menu-panel{position:fixed;top:0;left:0;bottom:0;z-index:140;
  /* La colonne s'arrete juste apres le plus long des libelles — pas a une
     fraction de l'ecran. `max-content` la fait tenir a la largeur de son
     contenu, et le rembourrage de droite est exactement ce « legerement
     apres » : le meme retrait qu'a gauche, de sorte que le mot est pose au
     milieu de sa marge et non colle au bord. */
  width:max-content;max-width:100vw;
  /* Les valeurs relevees sur le site de reference : blanc a 50%, flou de 3px.
     Pas 90% et 14px — a cette force la page derriere est effacee, alors que
     tout l'effet tient dans le fait qu'on la voit. Un demi-blanc et un souffle
     de flou : la colonne est une vitre depolie, pas un mur. */
  background:rgba(255,255,255,.5);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  color:var(--ink);
  padding:26px clamp(26px,4vw,60px);
  display:flex;flex-direction:column;align-items:flex-start;
  overflow-y:auto;overscroll-behavior:contain;
  animation:menufade .22s ease both}
@keyframes menufade{from{opacity:0}to{opacity:1}}
/* Sans `backdrop-filter` (Firefox d'avant 103, ou le reglage desactive), un
   demi-blanc sans flou laisse le texte se battre avec ce qu'il y a derriere.
   On remonte alors l'opacite : moins beau, toujours lisible — c'est le bon
   ordre de priorite. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .menu-panel{background:rgba(255,255,255,.93)}
}
/* Les destinations : la meme voix que le bouton, au grand corps. C'est elles
   qui donnent le ton — le bouton n'en est que la version de bandeau. */
.menu-list{display:flex;flex-direction:column;align-items:flex-start}
.menu-list a{text-decoration:none;color:inherit;
  font-size:clamp(21px,2.4vw,32px);font-weight:700;letter-spacing:-.01em;
  line-height:1.34;text-transform:uppercase;
  transition:opacity .15s cubic-bezier(.4,0,.2,1)}
.menu-list a:hover,.menu-list a:focus-visible{opacity:.5}
@media(max-width:860px){.menu-panel{width:100vw}}
@media (prefers-reduced-motion:reduce){.menu-panel,.menu-veil{animation:none}}

/* ---- les trois grands rayons ------------------------------------------------
   INDOOR · OUTDOOR · BATHROOM, centres sous le bandeau, et rien autour : pas de
   pastille, pas de cadre, pas de filet sous le mot choisi. Le rayon ouvert est
   simplement EN GRAS. C'est la seule difference entre les deux etats et elle
   suffit — sur un fond blanc, une graisse se voit d'un bout a l'autre de la
   rangee, la ou une pastille aurait ajoute une forme a regarder.

   La barre va d'un bord a l'autre de l'ecran et se colle sous le bandeau : les
   trois rayons restent sous la main quelle que soit la longueur de la planche.

   La place de chaque mot est reservee A SA LARGEUR EN GRAS — c'est le doublon
   cache dans ::after. Sans lui, choisir un rayon elargit son mot et fait
   glisser toute la rangee sous le curseur. */
.rayons{position:sticky;top:var(--masth,0px);z-index:30;background:var(--sand)}
.rayons-in{max-width:1320px;margin-inline:auto;padding-inline:var(--gut);
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:1rem;
  padding-block:clamp(.85rem,2vw,1.3rem)}
.rayons-nav{grid-column:2;display:flex;justify-content:center;align-items:baseline;
  flex-wrap:wrap;gap:clamp(1.1rem,3vw,2.6rem)}
.rayon{display:inline-block;position:relative;text-decoration:none;color:var(--ink);
  font-size:clamp(.75rem,.3vw + .69rem,.8125rem);letter-spacing:.05em;
  text-transform:uppercase;font-weight:400;opacity:.5;white-space:nowrap;
  transition:opacity .2s}
.rayon::after{content:attr(data-label);display:block;height:0;overflow:hidden;
  font-weight:700;visibility:hidden;pointer-events:none}
.rayon:hover{opacity:1}
.rayon.on{font-weight:700;opacity:1}
/* Sur une fiche produit, la famille de la piece se pose apres les rayons : la
   fiche dit alors ou elle se range — OUTDOOR · SOFAS — et les deux mots sont
   le chemin du retour. Elle sort `hidden` : c'est le script qui la nomme, et
   une piece dont la categorie n'appartient a aucune famille n'affiche rien
   plutot qu'un mot vide. */
.rayon-fam{opacity:.5;font-weight:400}
.rayon-fam::before{content:"·";margin-right:.55em;opacity:.5}
.rayon-fam[hidden]{display:none}

/* La recherche, au bout de la barre. Sans pastille ni fond : un filet, et le
   filet fonce quand le champ a le curseur. Elle porte sur tout le fonds, jamais
   sur le seul rayon ouvert — un champ qui a l'air de couvrir le catalogue doit
   couvrir le catalogue. */
.search{grid-column:3;justify-self:end;display:flex;align-items:center;gap:.55em;
  min-width:0;width:min(100%,13rem);margin:0;
  border-bottom:1px solid var(--hair);padding:.25em 0 .3em;
  transition:border-color .18s}
.search:focus-within{border-bottom-color:var(--ink)}
.search svg{width:14px;height:14px;stroke:var(--faint);fill:none;stroke-width:1.7;flex:none}
.search>label{display:flex;align-items:center;flex:none;cursor:text}
.search input{font:inherit;font-size:.75rem;letter-spacing:.04em;border:0;background:none;
  color:var(--ink);width:100%;padding:0}
.search input::placeholder{color:var(--faint);text-transform:uppercase;letter-spacing:.05em}
.search input:focus{outline:none}
/* La croix qui vide le champ. Le navigateur en dessine une, et elle est BLEUE —
   la seule couleur du site qui ne vienne pas de nous. On la remplace par la
   notre, au trait, a l'encre noire. `appearance:none` est indispensable : sans
   lui le dessin natif reste par-dessus. */
.search input[type=search]::-webkit-search-cancel-button{
  -webkit-appearance:none;appearance:none;
  width:11px;height:11px;flex:none;cursor:pointer;opacity:.45;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1.5 1.5l9 9M10.5 1.5l-9 9' stroke='%23141210' stroke-width='1.4' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat;
  transition:opacity .18s}
.search input[type=search]::-webkit-search-cancel-button:hover{opacity:1}
@media(max-width:720px){
  .rayons-in{grid-template-columns:1fr;gap:.7rem}
  .rayons-nav{grid-column:1}
  .search{grid-column:1;justify-self:stretch;width:100%}
}

/* ---- la planche : les familles a gauche, les pieces a droite ----------------
   Une fois le rayon choisi, ses familles se deplient dans une colonne collee a
   gauche — Sofas, Armchairs, Coffee & Side Tables… — et la grille occupe tout
   le reste. La colonne suit le defilement : sur une planche de deux cents
   pieces, changer de famille ne doit pas demander de remonter.

   Les familles ne sont pas ecrites dans la page : elles sont comptees sur le
   catalogue reel, rayon par rayon. Une famille sans piece dans le rayon ouvert
   ne parait pas, et elle revient d'elle-meme le jour ou une piece y entre. */
.shelf{display:grid;gap:clamp(1.5rem,3vw,3.4rem);align-items:start;
  padding-top:clamp(1.3rem,2.6vw,2.2rem)}
@media(min-width:900px){.shelf{grid-template-columns:12.5rem minmax(0,1fr)}}
.rail{position:sticky;top:calc(var(--masth,0px) + var(--rayh,0px) + 1.3rem);min-width:0}
@media(max-width:899px){.rail{position:static}}
/* Le filet vertical le long de la colonne, et le segment plein en face de la
   famille ouverte : c'est la seule marque de la liste. */
.rail-cats{display:flex;flex-direction:column;
  border-left:1px solid var(--hair);padding-left:1.05rem}
.rail-cats a{position:relative;display:block;text-decoration:none;color:var(--soft);
  font-size:.75rem;letter-spacing:.05em;text-transform:uppercase;line-height:1.3;
  padding:.36rem 0;transition:color .18s}
.rail-cats a::before{content:"";position:absolute;left:-1.05rem;margin-left:-1px;
  top:0;bottom:0;width:2px;background:transparent;transition:background .18s}
.rail-cats a::after{content:attr(data-label);display:block;height:0;overflow:hidden;
  font-weight:700;visibility:hidden;pointer-events:none}
.rail-cats a:hover{color:var(--ink)}
.rail-cats a.on{color:var(--ink);font-weight:700}
.rail-cats a.on::before{background:var(--ink)}
@media(max-width:899px){
  /* Sur telephone la colonne devient une ligne qu'on pousse du doigt : elle
     garderait sinon douze familles empilees au-dessus de la premiere piece. */
  .rail-cats{flex-direction:row;gap:1.2rem;overflow-x:auto;overscroll-behavior-x:contain;
    border-left:0;padding-left:0;padding-bottom:.6rem;
    border-bottom:1px solid var(--hair);-webkit-overflow-scrolling:touch}
  .rail-cats a{white-space:nowrap;padding:.1rem 0}
  .rail-cats a::before{left:0;top:auto;bottom:-.62rem;height:2px;width:100%;margin-left:0}
}

/* PAS DE CHAPEAU AU-DESSUS DE LA PLANCHE. Il portait le compte des pieces puis
   le nom du rayon — « ( Itms. 268 ) INDOOR » — tous deux retires le 2026-09-06 :
   la barre des rayons juste au-dessus met deja OUTDOOR en gras, et la colonne de
   gauche redit ALL OUTDOOR. Trois fois le meme mot pour un seul renseignement,
   c'etait deux de trop. Ni `.shelfhead` ni `#shelfname` n'existent plus. */

/* ---- la meme barre, sur une fiche produit ----------------------------------
   Une fiche ouverte depuis un e-mail ou depuis Google serait un cul-de-sac si
   le bandeau ne proposait qu'une entree vers tout le fonds : il faudrait
   repartir de zero pour voir une autre chaise. La barre de la planche est donc
   reprise ici telle quelle — memes rayons, meme recherche, meme place sous le
   bandeau — a ceci pres qu'elle ne filtre rien : elle emmene. Et la famille de
   la piece s'y ecrit, de sorte que la fiche dit ou elle se range.

   Elle descend AVEC le visiteur : collee sous le bandeau, elle reste sous la
   main jusqu'au bas de la fiche. Elle est donc posee a meme la page et n'est
   enveloppee dans rien — `position:sticky` ne colle qu'a l'interieur de son
   parent, et un parent de la hauteur de la barre ne lui laisse rien a
   parcourir : enveloppee, elle repartait avec la page des le premier geste. */
.rayons[data-sheet]{margin-bottom:1.5rem}

/* La recherche d'une fiche est un vrai formulaire : sans grille sous les yeux
   il n'y a rien a filtrer au fil de la frappe, et la touche Entree emmene sur
   la planche avec la recherche deja faite. */
form.search{margin:0}
.totop{position:fixed;right:clamp(1rem,3vw,2.2rem);bottom:clamp(1rem,3vw,2.2rem);z-index:35;
  width:2.7rem;height:2.7rem;border:0;border-radius:999px;background:var(--espresso);
  color:var(--sand);cursor:pointer;font-size:.95rem;line-height:1;
  box-shadow:0 14px 30px -18px rgba(28,24,19,.9);
  opacity:0;pointer-events:none;transform:translateY(7px);
  transition:opacity .25s,transform .25s,background .25s}
.totop.on{opacity:1;pointer-events:auto;transform:none}
.totop:hover{background:#332F2B}

/* The grid, unruled. The drawn frame and the running number were the catalogue
   device of the first pass; Marvin dropped both — the pieces are cut out on
   sand and carry the page on their own, and a number that renumbers itself
   every time a filter changes tells a buyer nothing. Cell padding alone does
   the separating now. */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,15.5rem),1fr));
  margin-bottom:5rem}
.tile{position:relative;text-decoration:none;display:flex;flex-direction:column;
  border-radius:.5rem;transition:background .25s}
.tile:hover{background:rgba(28,24,19,.035)}
.tile-media{height:13.5rem;display:flex;align-items:center;justify-content:center;
  padding:2rem 1.4rem 1rem}
.tile-media img{max-height:100%;width:auto;object-fit:contain;
  transition:transform .35s cubic-bezier(.22,.68,.3,1)}
.tile:hover .tile-media img{transform:scale(1.04)}
.tile-label{padding:0 1.1rem 1.2rem}
/* The house, above the model — the way a trade catalogue is read. It sits over
   the name rather than in the line of specifications below it, because it is
   who made the piece and not another attribute of it. */
.tile h3{font-size:1.0625rem;margin-bottom:.15rem;font-weight:400;letter-spacing:-.02em}
.tile p{margin:0;font-family:var(--mono);font-size:.625rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--faint)}

/* Quick selection.
   A client assembling a shopping list should not have to open fifteen hundred
   sheets to do it. The button rides on the tile and becomes its own stepper the
   moment the piece is in: one press to add, the quantity right there afterwards.
   The sheet stays for anyone who wants the dimensions.

   This is why the tile is no longer one large <a>: a <button> inside an anchor
   is invalid, and browsers settle it by giving the click to the link — the
   piece would open instead of being added. Anchor and button are now siblings
   inside a plain div. */
.tile-open{display:flex;flex-direction:column;text-decoration:none;color:inherit}
.tile-add{position:absolute;top:.7rem;right:.7rem;z-index:2;display:flex;
  align-items:center;justify-content:center;min-width:2rem;height:2rem;padding:0;
  border:0;border-radius:999px;background:var(--espresso);color:var(--sand);
  cursor:pointer;font:inherit;font-size:1.05rem;line-height:1;
  opacity:0;transform:scale(.85);
  transition:opacity .2s,transform .2s,background .2s}
.tile:hover .tile-add,.tile:focus-within .tile-add,.tile-add.on{opacity:1;transform:none}
/* A tile at rest has no edges of its own — the cut-out carries the cell. So a
   stepper left standing on a chosen piece floated in the sand with nothing to
   belong to. The cell it counts now holds a faint ground for as long as the
   piece is in the enquiry, which doubles as the answer to "what have I already
   picked?" while scrolling back through fifteen hundred of them. */
.tile.picked{background:rgba(28,24,19,.05)}
/* A touch screen has no hover, so a button that waits for one would only appear
   after a tap that has already opened the sheet. */
@media(hover:none){.tile-add{opacity:1;transform:none}}
.tile-add:hover{background:#332F2B}
.tile-add.on{padding-inline:.28rem}
.tile-add .tq{border:0;background:none;color:var(--sand);cursor:pointer;font:inherit;
  font-size:1rem;line-height:1;padding:.25rem .4rem;opacity:.8;transition:opacity .15s}
.tile-add .tq:hover{opacity:1}
.tile-add .tn{font-family:var(--mono);font-size:.72rem;letter-spacing:.06em;
  min-width:1.15em;text-align:center}

/* ---- the index of every piece ----------------------------------------------
   Text only, no photographs: this page exists so that every sheet is linked
   from somewhere, and so that someone who already knows they want a daybed can
   get to the list of daybeds in one click. Set as a plain reading page. */
.idx-link{margin:0 0 4.5rem;font-family:var(--mono);font-size:.6875rem;
  letter-spacing:.14em;text-transform:uppercase}
.idx-link a{color:var(--soft);text-underline-offset:.4em}
.idx-link a:hover{color:var(--ink)}
.idx{padding-bottom:4rem}
.idx h1{font-size:clamp(2rem,4.5vw,3.2rem);font-weight:400;letter-spacing:-.035em;
  text-transform:uppercase;margin:0 0 .8rem}
.idx-lede{margin:0 0 3rem;color:var(--soft);font-size:.9375rem}
.idx-cat{margin-bottom:2.6rem;break-inside:avoid}
.idx-cat h3{font-family:var(--mono);font-size:.6875rem;letter-spacing:.18em;
  text-transform:uppercase;font-weight:700;margin:0 0 .9rem;
  padding-bottom:.5rem;border-bottom:1px solid var(--rule)}
.idx-cat h3 span{color:var(--faint);font-weight:400;margin-left:.5em}
.idx-cat ul{margin:0;padding:0;list-style:none;
  columns:3 14rem;column-gap:2.2rem}
.idx-cat li{margin-bottom:.42rem;break-inside:avoid}
.idx-cat a{color:var(--ink);text-decoration:none;font-size:.875rem;
  border-bottom:1px solid transparent;transition:border-color .2s}
.idx-cat a:hover{border-bottom-color:var(--ink)}
@media(max-width:640px){.idx-cat ul{columns:1}}

/* ---- product sheet : le cahier de Marvin ------------------------------------
   La fiche est une image (2026-09-07) : `catalogue-book.png`, a la racine du
   site, le cahier a anneaux dessine par Marvin — deux pages creme, six anneaux,
   la languette gauche vide, et sur la tranche droite les trois onglets INDOOR /
   OUTDOOR / BATHROOM imprimes dans l'image. Rien n'est redessine en CSS : le
   contenu est POSE sur l'image, en pourcentages de sa largeur, et toutes les
   tailles sont en `cqw` pour que la fiche garde les proportions de la maquette
   a toute largeur. Remplacer le PNG a la racine suffit a changer le decor.
   Les onglets de l'image sont couverts de liens invisibles vers les rayons ;
   la barre des rayons + recherche reste en haut de la fiche, a la demande de
   Marvin (2026-09-07) : les deux menent au meme endroit. */
/* La fiche tient dans l'ecran : la largeur du cahier est aussi bornee par la
   hauteur disponible (fenetre moins bandeau, rayons, fil d'Ariane et pied),
   pour que « House of Morphosis · Bali » et « Trade only » restent visibles
   sans faire defiler, sur tout ecran. 2.041 = 1792/878. */
.sheet{padding-bottom:1.25rem}
.crumb{grid-column:1/-1}
@media(min-width:980px){
  .sheet{grid-template-columns:minmax(0,1fr) var(--gutter) 32rem;align-items:stretch}
  .sheet-left{grid-column:1;grid-row:2}
  .rings{grid-column:2;grid-row:2}
  .sheet-right{grid-column:3;grid-row:2}
  .dwg{grid-column:3;grid-row:3}
}
:root{--gutter:2.2rem;--paper:#FFFFFF;--folder:#F5F3EF;--tab:#DCD0BF;
  --leaf1:#E8E1D2;--leaf2:#D9D5CD;--leaf3:#BEBBB5;--leaf4:#8E8D89;--leaf5:#ABA9A4}
.crumb{grid-column:1/-1}
.crumb{font-family:var(--mono);font-size:.6875rem;letter-spacing:.2em;color:var(--faint);
  margin:0 0 1rem;padding-top:.5rem}
.book{position:relative;width:min(100%,1400px,calc((100vh - 20rem) * 2.041));margin:.4rem auto 0;
  aspect-ratio:1792/878;
  container-type:inline-size}
.book>img.bg{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none;
  user-select:none}
.bk{position:absolute}
/* Page de gauche : la photo, centree dans la page. */
.bk-photo{left:14.5%;top:22%;width:28.5%;height:60%;display:flex;align-items:center;justify-content:center}
.bk-photo img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}
/* La loupe. Ronde, sans bord dur, et elle ne se pose que sur les fiches dont
   l'original a la résolution pour la nourrir (voir ZOOM_MIN_PX). */
.stage[data-zoom]{cursor:zoom-in}
.lens{position:absolute;width:190px;height:190px;margin:-95px 0 0 -95px;border-radius:50%;
  pointer-events:none;opacity:0;transition:opacity .18s ease;z-index:3;
  background-color:var(--sand);background-repeat:no-repeat;
  box-shadow:0 0 0 1px var(--hair),0 20px 44px -22px rgba(28,24,19,.85)}
.lens.on{opacity:1}
@media(hover:none){.lens{display:none}}
/* La languette gauche : le nom de la piece, lu de bas en haut. */
.bk-tab{left:4.8%;top:16.2%;width:2.7%;height:25.2%;display:flex;align-items:center;justify-content:center;
  overflow:hidden}
.bk-tab span{writing-mode:vertical-rl;transform:rotate(180deg);font-family:var(--mono);
  font-size:.62cqw;letter-spacing:.22em;text-transform:uppercase;color:#4A3F33;white-space:nowrap}
/* Page de droite : le contenu. Le bouton est cale en bas de la page ; ce qui
   est au-dessus prend la place qui reste, et une description trop longue est
   coupee proprement plutot que de sortir du papier. */
.bk-text{left:55%;top:17.5%;width:31.5%;height:68%;display:flex;flex-direction:column}
.bk-text h1{font-size:2.55cqw;font-weight:400;letter-spacing:-.035em;text-transform:uppercase;
  line-height:1.05;margin:0}
.bk-text .finish{margin:.4cqw 0 0;font-family:var(--mono);font-size:.62cqw;letter-spacing:.18em;
  text-transform:uppercase;color:var(--soft)}
.bk-text hr.rule{border:0;border-top:1px solid var(--ink);margin:1.2cqw 0 1.4cqw}
.bk-text hr.dots{border:0;border-top:1px dashed var(--rule);margin:1.3cqw 0}
.bk-text .lede{font-family:var(--mono);font-size:.72cqw;line-height:2.1;letter-spacing:.06em;
  text-transform:uppercase;color:var(--soft);margin:0;overflow:hidden;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:7}
.bk-text .facts{display:grid;grid-template-columns:1fr 1.2fr;gap:1cqw}
.bk-text .facts.three{grid-template-columns:1fr 1fr 1fr}
.bk-text .fact + .fact{border-left:1px solid var(--rule);padding-left:1.2cqw}
.bk-text .fact h4{margin:0 0 .5cqw;font-family:var(--mono);font-size:.62cqw;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink);font-weight:700}
.bk-text .fact h4.sp{margin-top:.9cqw}
.bk-text .fact ul{margin:0;padding:0;list-style:none;font-size:.85cqw;line-height:1.6;color:var(--ink)}
.bk-text .fact ul.ref li{font-family:var(--sans);white-space:nowrap}
.bk-text .fact .small{margin:0;font-size:.85cqw;line-height:1.5;color:var(--ink)}
.bk-text .sws{display:flex;gap:.4cqw;margin-top:.4cqw}
.bk-text .sw{width:1.2cqw;height:1.2cqw}
.bk-text .buy{display:flex;gap:.7cqw;margin-top:auto}
.bk-text .qtybox{flex:0 0 6cqw;padding:.6cqw .9cqw;border:1px solid var(--rule);background:#FCFCFB;
  display:flex;flex-direction:column;justify-content:center;gap:.1cqw}
.bk-text .qtybox span{font-family:var(--mono);font-size:.55cqw;letter-spacing:.16em;
  text-transform:uppercase;color:var(--faint)}
.bk-text .qtybox input{font:inherit;font-size:1cqw;border:0;background:none;color:var(--ink);
  width:100%;padding:0}
.bk-text .qtybox input:focus{outline:none}
.bk-text .addbtn{flex:1;background:var(--espresso);color:#FFF;border:0;cursor:pointer;
  font-family:var(--mono);font-size:.72cqw;letter-spacing:.18em;text-transform:uppercase;padding:0;
  transition:opacity .2s}
.bk-text .addbtn:hover{opacity:.87}
.bk-text .note{font-size:.8cqw;margin:.6cqw 0 0}
/* Les trois onglets de l'image : des liens invisibles poses dessus, dans
   l'ordre haut / milieu / bas — le rayon de la piece est toujours en haut. */
.bk-nav a{position:absolute;display:block;text-indent:-9999px;overflow:hidden}
.bk-nav a:focus-visible{outline:2px solid var(--ink);outline-offset:-2px}
.bk-in{left:91%;top:13.5%;width:3.6%;height:24.5%}
.bk-out{left:91.8%;top:38%;width:3.8%;height:21.5%}
.bk-bath{left:92.7%;top:59.5%;width:3.8%;height:23%}
/* Sous 820px l'image d'une double page serait illisible : elle disparait, et
   les memes elements s'empilent — photo, puis le contenu sur un carton creme,
   puis les trois rayons en ligne. Les tailles repassent en rem. */
@media(max-width:820px){
  .book{aspect-ratio:auto;width:100%;container-type:normal;margin-top:0}
  .sheet{padding-bottom:3rem}
  .book>img.bg,.bk-tab{display:none}
  .bk{position:static}
  .bk-photo{width:auto;height:auto;padding:1rem 0 2rem}
  .bk-photo img{max-height:60vh}
  .bk-text{width:auto;height:auto;background:#F7F5F0;padding:2rem 1.4rem 2.4rem;border-radius:.25rem}
  .bk-text h1{font-size:1.9rem}
  .bk-text .finish{font-size:.6875rem;margin-top:.5rem}
  .bk-text hr.rule{margin:1.1rem 0 1.3rem}.bk-text hr.dots{margin:1.4rem 0}
  .bk-text .lede{font-size:.6875rem;line-height:2;-webkit-line-clamp:unset;display:block}
  .bk-text .facts{gap:1rem}.bk-text .fact + .fact{padding-left:1.1rem}
  .bk-text .fact h4{font-size:.625rem;margin-bottom:.65rem}.bk-text .fact h4.sp{margin-top:1.2rem}
  .bk-text .fact ul,.bk-text .fact .small{font-size:.8125rem}
  .bk-text .sws{gap:.5rem}.bk-text .sw{width:1.6rem;height:1.6rem}
  .bk-text .buy{gap:.7rem;margin-top:1.6rem}
  .bk-text .qtybox{flex-basis:5.4rem;padding:.5rem .8rem}
  .bk-text .qtybox span{font-size:.5625rem}.bk-text .qtybox input{font-size:1rem}
  .bk-text .addbtn{font-size:.6875rem;padding:1.1em}
  .bk-text .note{font-size:.875rem;margin-top:.8rem}
  .bk-nav{display:flex;gap:1.6rem;justify-content:center;padding:1.6rem 0 0}
  .bk-nav a{position:static;text-indent:0;font-family:var(--mono);font-size:.6875rem;
    letter-spacing:.18em;text-transform:uppercase;color:var(--soft);text-decoration:none}
  .bk-nav a:hover{color:var(--ink)}
}
.dwg{margin-top:1.6rem;padding-top:1.3rem;border-top:1px solid var(--rule);
  text-align:center}
/* The drawing box hugs the image; both cotes are placed against it, so the rules
   are exactly as long as the object they measure. */
.dwg-img{position:relative;display:inline-block;padding:0 2.4rem 2.1rem 0}
.dwg-img img{max-height:8rem;width:auto;opacity:.88;display:block}
/* Dimension callouts. The <i> is the rule; its ::before/::after are the end
   ticks, so each cote is one element and lines up with the drawing itself. */
.cote{font-family:var(--mono);font-size:.625rem;letter-spacing:.06em;color:var(--soft);
  white-space:nowrap}
.cote i{display:block;position:relative;background:var(--rule)}
.cote i::before,.cote i::after{content:"";position:absolute;background:var(--soft)}
.cote-w{position:absolute;left:0;right:2.4rem;bottom:0;text-align:center}
.cote-w i{height:1px;width:100%;margin-bottom:.4rem}
.cote-w i::before,.cote-w i::after{top:-3.5px;width:1px;height:8px}
.cote-w i::before{left:0}.cote-w i::after{right:0}
/* Set upright beside its rule, the way a height is annotated on an elevation —
   laid flat it sat across the drawing it was measuring. */
.cote-h{position:absolute;right:0;top:0;bottom:2.1rem;display:flex;align-items:center;
  gap:.4rem;flex-direction:row-reverse}
.cote-h b{writing-mode:vertical-rl;transform:rotate(180deg);font-weight:400}
.cote-h i{width:1px;height:100%;flex:none}
.cote-h i::before,.cote-h i::after{left:-3.5px;height:1px;width:8px}
.cote-h i::before{top:0}.cote-h i::after{bottom:0}
.cote-d{display:block;text-align:center;margin-top:.55rem;opacity:.8}

.t-head{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}
.sheet-right h1{font-size:clamp(1.8rem,3.2vw,2.4rem);font-weight:400;letter-spacing:-.035em;
  text-transform:uppercase;margin:0;line-height:1.08}
/* La maison, au-dessus du modèle. Deux liens qui ramènent à l'étagère filtrée :
   la maison seule, puis sa collection. */
.house a{color:inherit;text-decoration:none;border-bottom:1px solid transparent;
  transition:color .2s,border-color .2s}
.house a:hover{color:var(--ink);border-bottom-color:var(--rule)}
.house span{opacity:.5;margin-inline:.15em}
.sheet-right .finish{margin:.55rem 0 0;font-family:var(--mono);font-size:.6875rem;
  letter-spacing:.18em;text-transform:uppercase;color:var(--soft)}
.stamp{flex:none;margin-top:.2rem;border:1px solid rgba(60,45,35,.42);padding:.4rem .7rem;
  transform:rotate(-2deg);font-family:var(--mono);font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:rgba(60,45,35,.6);text-align:center;line-height:1.6;
  white-space:nowrap}
hr.rule{border:0;border-top:1px solid var(--ink);margin:1.1rem 0 1.3rem}
hr.dots{border:0;border-top:1px dashed var(--rule);margin:1.4rem 0}
.sheet-right .lede{font-family:var(--mono);font-size:.6875rem;line-height:2;letter-spacing:.055em;
  text-transform:uppercase;color:var(--soft);margin:0}
.facts{display:grid;grid-template-columns:1.1fr 1.1fr 1fr;gap:1rem}
.facts.two{grid-template-columns:1fr 1fr}
.fact + .fact{border-left:1px solid var(--rule);padding-left:1.1rem}
.fact h4{margin:0 0 .65rem;font-family:var(--mono);font-size:.625rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink);font-weight:700}
.fact h4.sp{margin-top:1.5rem}
.fact ul{margin:0;padding:0;list-style:none;font-size:.78125rem;line-height:1.7;color:var(--soft)}
.fact ul.ref li{white-space:nowrap;font-family:var(--mono);font-size:.6875rem}
.fact .small{margin:0;font-size:.75rem;line-height:1.55;color:var(--soft)}
.mats{display:flex;gap:.7rem;flex-wrap:wrap;margin-top:1rem}
.mat{margin:0;width:4.35rem}
.mat img{width:4.35rem;height:4.35rem;object-fit:cover;border-radius:.15rem;
  box-shadow:0 2px 7px rgba(28,24,19,.16),inset 0 0 0 1px rgba(28,24,19,.09)}
.mat span{display:block;margin-top:.4rem;font-family:var(--mono);font-size:.5625rem;
  letter-spacing:.11em;text-transform:uppercase;color:var(--soft);line-height:1.35}
.sws{display:flex;gap:.5rem}
.sw{width:1.6rem;height:1.6rem;border-radius:999px;display:block;
  box-shadow:inset 0 0 0 1px rgba(28,24,19,.12)}
.buy{display:flex;gap:.7rem;align-items:stretch;margin-top:1.6rem}
.qtybox{display:flex;flex-direction:column;justify-content:center;gap:.15rem;flex:0 0 5.4rem;
  padding:.5rem .8rem;border:1px solid var(--rule);background:#FCFCFB}
.qtybox span{font-family:var(--mono);font-size:.5625rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--faint)}
.qtybox input{font:inherit;font-size:1rem;border:0;background:none;color:var(--ink);
  width:100%;padding:0}
.qtybox input:focus{outline:none}
.addbtn{flex:1 1 auto;white-space:nowrap;background:var(--espresso);color:#FFF;border:0;
  cursor:pointer;font-family:var(--mono);font-size:.6875rem;letter-spacing:.18em;
  text-transform:uppercase;padding:1.1em 1.1em;transition:opacity .2s}
.addbtn:hover{opacity:.87}
@media(max-width:640px){
  .facts{grid-template-columns:1fr}
  .fact + .fact{border-left:0;padding-left:0;border-top:1px solid var(--rule);padding-top:1rem}

}

.row{display:flex;gap:.55rem;flex-wrap:wrap;align-items:center}
/* Le chemin manuel, replié : présent pour qui en a besoin, invisible pour les
   autres. Un envoi qui marche ne doit pas être accompagné de son propre plan B
   affiché en permanence — ça donne l'impression qu'il ne marche pas. */
.fallback{margin-top:1.6rem;border-top:1px solid var(--hair);padding-top:1rem}
.fallback summary{list-style:none;cursor:pointer;font-family:var(--mono);font-size:.625rem;
  letter-spacing:.16em;text-transform:uppercase;color:var(--faint);transition:color .2s}
.fallback summary::-webkit-details-marker{display:none}
.fallback summary:hover{color:var(--ink)}
.fallback[open] summary{color:var(--soft)}
.qty{width:4.2rem;font:inherit;font-family:var(--mono);text-align:center;padding:.62em .4em;
  border:0;border-radius:999px;background:var(--wash);color:var(--ink)}
.qty:focus{outline:none;background:var(--wash2)}

.enq{padding-block:clamp(1rem,3vw,2.5rem) 3rem;display:grid;gap:clamp(2rem,4vw,3.5rem)}
@media(min-width:900px){.enq{grid-template-columns:1fr 1fr}}
.enq h1{font-size:clamp(1.9rem,4vw,3rem);margin-bottom:1.2rem}
/* Vider la selection d'un geste. Sans lui, defaire vingt pieces se fait vingt
   fois de suite par la croix de chaque ligne.
   Ce n'est pas un bouton plein : sur une page qui sert a envoyer, effacer n'est
   pas l'action qu'on met en avant. Il prend la voix des petites capitales de la
   page — le meme corps et la meme chasse que la reference d'une ligne — et se
   tient au bout de la liste, la ou finit ce qu'il efface. Le filet ne parait
   qu'au survol, en poussant depuis la gauche comme celui de MENU.
   Il ne parait que lorsqu'il y a quelque chose a vider. */
.clearbar{display:flex;justify-content:flex-end;margin:-.74rem 0 .26rem}
/* Le rembourrage vertical ne se voit pas : il donne au pouce une cible de trente
   pixels la ou le seul texte en faisait vingt-quatre. Les marges de la barre
   sont reprises d'autant, pour que le mot reste ou il etait. */
.clearall{background:none;border:0;padding:.5rem 0;cursor:pointer;
  font-family:var(--mono);font-size:.6875rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--soft);
  background-image:linear-gradient(currentColor,currentColor);
  background-repeat:no-repeat;background-position:0 100%;background-size:0 1px;
  transition:color .18s,background-size .2s cubic-bezier(0,0,.2,1)}
.clearall:hover{color:var(--ink);background-size:100% 1px}
.clearall.armed{color:var(--ink);background-size:100% 1px}
.clearall:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
.clearbar[hidden]{display:none}
.line{display:flex;gap:1rem;align-items:center;padding:.8rem 0;border-bottom:1px solid var(--hair)}
.line img{width:66px;height:66px;object-fit:contain;flex:none}
.line b{display:block;font-size:.875rem}
.line .r{font-family:var(--mono);font-size:.625rem;letter-spacing:.14em;color:var(--accent)}
.line .rm{margin-left:auto;background:none;border:0;cursor:pointer;color:var(--soft);
  font-size:1.15rem;padding:.3rem .55rem;border-radius:999px}
.line .rm:hover{background:var(--wash)}
.form{display:grid;gap:1.05rem}
.form label{display:grid;gap:.4rem;font-family:var(--mono);font-size:.6875rem;
  letter-spacing:.15em;text-transform:uppercase;color:var(--soft)}
.form input,.form textarea{font:inherit;font-size:.9375rem;color:var(--ink);
  background:var(--wash);border:0;border-radius:1.1rem;padding:.72rem .95rem;resize:vertical}
.form input:focus,.form textarea:focus{outline:none;background:var(--wash2)}
/* La destination n'est plus une ligne a remplir mais un choix : l'Indonesie, ou
   ailleurs. Le studio livre depuis Bali, et la difference entre les deux change
   tout au devis — le fret, les droits, le delai. Une case cochee le dit d'un
   coup d'oeil, la ou un champ libre recevait « Bali », « bali », « Indo » ou
   rien du tout.
   Ce sont des boutons radio et non des cases a cocher : les deux reponses
   s'excluent, et seul le radio empeche d'en cocher deux. Ils en prennent le
   dessin — un rond pose sur un filet, rien d'autre.
   Le choix se lit a ce que le rond se remplit d'un gris clair, et non a une
   pastille noire posee dedans : deux tons dans un cercle de quinze pixels font
   un bouton d'interface, un aplat calme fait une marque. Le gris est celui des
   champs juste au-dessus (la meme encre a treize pour cent), de sorte que la
   reponse cochee appartienne au formulaire au lieu de le ponctuer. */
.choice{display:flex;gap:1.6rem;flex-wrap:wrap;padding:.15rem 0 .1rem}
.choice label{display:inline-flex;align-items:center;gap:.55em;cursor:pointer;
  font-family:var(--sans);font-size:.9375rem;letter-spacing:0;text-transform:none;
  color:var(--ink)}
.choice input{appearance:none;-webkit-appearance:none;flex:none;margin:0;
  width:15px;height:15px;border:1px solid var(--rule);border-radius:50%;
  background:none;padding:0;cursor:pointer;
  transition:background-color .18s,border-color .18s}
.choice input:hover{border-color:rgba(20,18,16,.34)}
.choice input:checked{border-color:rgba(20,18,16,.34);
  background:rgba(20,18,16,.13)}
.choice input:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
/* Le pays ne parait qu'une fois « Other » choisi : demander le pays a quelqu'un
   qui vient de repondre « Indonesie » serait lui poser deux fois la question. */
.form .subfield{display:grid;gap:.4rem;margin-top:.75rem}
.form .subfield[hidden]{display:none}
.out{font-family:var(--mono);font-size:.75rem;white-space:pre-wrap;background:var(--wash);
  padding:1.1rem;border-radius:1.1rem;max-height:19rem;overflow:auto;color:var(--ink)}
.note{font-size:.8125rem;color:var(--soft)}

.foot{padding-block:1.4rem 1.7rem;font-family:var(--mono);color:var(--faint);
  font-size:.6875rem;letter-spacing:.14em;text-transform:uppercase;
  display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}
/* ---- phone and tablet -------------------------------------------------------
   Clients work this catalogue from a phone or an iPad — in a showroom, on a
   site visit — and have to be able to do the whole job there: browse, filter,
   open a piece, add it to the enquiry. Three things were in the way.

   The grid fell to a single column under 15.5rem of space, so 670 pieces became
   17 000px of scrolling with half of every cell empty. Two per row on a phone
   and three on a tablet is what a thumb can actually skim.

   The filters scrolled away and never came back: from the bottom of the grid,
   changing department meant scrolling to the top. The tools bar is sticky now.

   And the search field was 14px, which is below the threshold where iOS Safari
   zooms the whole page the moment the field is tapped — the page then sits
   off-centre until the visitor pinches back out. */
@media(max-width:900px){
  .grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media(max-width:640px){
  .grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:3rem}
  /* Trois libelles a cote de l'emblemme passent a la ligne a cette largeur et
     coutent 44px d'ecran. « Curated Products » sort : le panneau du menu tient
     la meme destination, ecrite en toutes lettres. Le cabas reste — il porte le
     compte, et c'est la seule chose qu'un visiteur veut en un geste. */
  .mast{padding:18px clamp(18px,4vw,26px)}
  .nav-r .menu-cat{display:none}

  /* La barre des rayons, sur telephone : les trois mots sur une ligne, le champ
     sous eux. Le champ passe a 16px — en dessous, iOS Safari zoome la page des
     qu'on le touche et elle reste de travers jusqu'a ce qu'on repince. */
  .rayons-in{padding-block:.6rem .7rem}
  .search input{font-size:1rem}
  /* Chaque commande qu'un pouce doit atteindre. Les libelles font 11px, donc le
     rembourrage seul n'a jamais fait une cible utilisable. */
  .cap{min-height:2.65rem}
  .line .rm{min-width:2.65rem;min-height:2.65rem}
  /* The same 16px floor as the search field. Five fields at 15px is five
     zooms while a client types out the enquiry that is the point of the site. */
  .form input,.form textarea{font-size:1rem}


  /* Tighter cells: at two columns the 13.5rem media box left each piece
     floating in an empty square. */
  .tile-media{height:9.5rem;padding:1rem .6rem .45rem}
  .tile-label{padding:0 .55rem 1rem}
  .tile h3{font-size:.9375rem;letter-spacing:-.015em}
  .tile p{font-size:.5625rem;letter-spacing:.1em}

  .detail-media{min-height:44vh}
  .detail-media img{max-height:44vh}
}
/* Hover is a mouse idea. On a touch screen the tint and the zoom stay stuck on
   whichever tile was tapped last, which reads as a selection that will not
   clear. */
@media(hover:none){
  .tile:hover{background:none}
  .tile:hover .tile-media img{transform:none}
}
/* ---- landing --------------------------------------------------------------
   Nothing but the objects. The silhouettes are the navigation: every one of
   them opens the catalogue, so the page has no instructions to give. */
/* The whole plate has to land in one screen: a visitor should meet the
   collection and the footer at once, never scroll to find out the page ended.
   Rather than pick a cell height and hope, the rows SHARE whatever height is
   left after the masthead and the footer — `1fr` rows inside a main that fills
   the viewport. Any window, any browser chrome, it always fits. */
body.home{display:flex;flex-direction:column;height:100dvh;overflow:hidden}
body.home main{flex:1;min-height:0;display:flex;align-items:center;
  padding-block:clamp(.6rem,1.8vh,1.8rem)}
/* La planche ne parle qu'en silhouettes. Elle a porte un temps une phrase et un
   bouton — le visiteur qui ne pensait pas a cliquer une forme n'avait ni
   instruction ni raison de le faire. Ils sont retires : la planche est une
   ouverture, pas une page de vente, et trente-cinq dessins noirs sur blanc se
   passent de legende. Le chemin reste ouvert par le bandeau (CURATED PRODUCTS)
   et par les formes elles-memes. */

.sils{width:100%;height:100%;display:grid;grid-template-columns:repeat(7,1fr);
  grid-auto-rows:minmax(0,1fr);gap:clamp(.5rem,1.6vh,1.6rem) clamp(.8rem,2vw,2rem);
  align-items:center;justify-items:center}
@media(max-width:1100px){.sils{grid-template-columns:repeat(5,1fr)}}
@media(max-width:760px){.sils{grid-template-columns:repeat(4,1fr)}}
@media(max-width:460px){.sils{grid-template-columns:repeat(3,1fr)}}
/* Cell height carries NO calculation of any kind.
   Two earlier versions of this rule put a custom property inside calc() —
   `calc(100% * var(--s))`, then `calc(var(--s) * clamp(...))`. Safari resolves
   neither: it drops the declaration, the cell loses its definite height, and
   `max-height:100%` on the image then means nothing — a percentage of an auto
   height. The images fall back to their natural 300px and thirty-five of them
   collide. The scale a piece is drawn at is now an inline `max-height` in plain
   percent (see build_home), so nothing in this path can fail to parse. */
.sil{display:flex;align-items:center;justify-content:center;width:100%;height:100%;
  min-height:0;transition:transform .3s cubic-bezier(.22,.68,.3,1),opacity .3s}
.sil img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}
.sils:hover .sil{opacity:.42}
.sils .sil:hover{opacity:1;transform:scale(1.09)}
/* Le pied de la planche. Le menu, lui, est decrit plus haut avec le bandeau. */
/* La planche n'a plus de pied. Il portait un filet et trois mentions — le
   copyright, une devise, l'adresse e-mail — sous une page qui ne dit rien
   d'autre que trente-cinq formes noires. Le contact vit dans le menu, la devise
   nulle part : une planche de silhouettes se passe de legende comme elle se
   passait deja de phrase d'introduction. */

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




/* ============ INDEX PAR RAYON ============ */
/* Les 86 categories etaient une liste alphabetique a plat : on ne savait pas ou
   commencait le mobilier ni ou finissait la salle de bain. Elles sont maintenant
   rangees sous les cinq rayons qui existent DEJA dans les donnees (le champ
   department de chaque piece) — aucune categorie inventee, aucune renommee.
   Le titre de rayon est le seul endroit du Catalogue qui prend la voix
   d'affichage de la page d'accueil : Helvetica 900, capitales, chasse serree.
   C'est lui qui recoud les deux pages. Le monospace reste la voix fonctionnelle
   en dessous (categories, references, cotes) — il n'avait pas a porter le titre. */
.idx-depts{display:flex;flex-wrap:wrap;gap:.4rem .5rem;margin:0 0 3.5rem}
.idx-depts a{text-decoration:none;color:var(--ink);border:1px solid var(--hair);
  border-radius:999px;padding:.5em 1.05em;font-family:var(--mono);font-size:.6875rem;
  letter-spacing:.15em;text-transform:uppercase;transition:background .18s,color .18s}
.idx-depts a:hover{background:var(--espresso);color:#FFF;border-color:var(--espresso)}
.idx-depts a span{display:none}
.idx-dept{margin:4.5rem 0 2rem;padding-top:1.4rem;border-top:1px solid var(--rule);
  font-size:clamp(1.6rem,3.4vw,2.9rem);font-weight:900;letter-spacing:-.025em;
  line-height:1;text-transform:uppercase;
  display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.idx-dept:first-of-type{margin-top:0}
.idx-dept-n{font-family:var(--mono);font-size:.625rem;font-weight:400;letter-spacing:.16em;
  text-transform:uppercase;color:var(--faint)}
/* le titre de la page prend le meme regime que les rayons */
.idx h1{font-size:clamp(2rem,5vw,4rem);font-weight:900;letter-spacing:-.03em;
  line-height:.95;text-transform:uppercase}
