/* BANURU Resort & Residences — «La Table à Dessin»
   Tokens de design. Les composants arrivent en Task 3. */

:root{
  /* encres */
  --paper:#F7F3EA;        /* papier ivoire chaud */
  --paper-deep:#EFE9DC;   /* case de cartouche, fonds de bloc */
  --ink:#1A1B1D;          /* encre noire — trait, texte */
  --ink-soft:#5A5B58;     /* texte secondaire */
  --lagoon:#1FB8A6;       /* turquoise lagon — l'eau, hover, seul aplat vif */
  --lagoon-pale:#D8F0EC;  /* aplat d'eau plans */
  --mark:#C8371E;         /* rouge annotation, parcimonieux */
  /* traits */
  --hairline:1px solid var(--ink);
  --rule:.5px solid color-mix(in srgb,var(--ink) 55%,transparent);
  /* typo */
  --grot:'Inter Tight',system-ui,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,monospace;
  --step-0:clamp(1rem, .95rem + .3vw, 1.125rem);
  --step-2:clamp(1.6rem, 1.2rem + 1.6vw, 2.6rem);
  --step-4:clamp(2.6rem, 1.8rem + 3.5vw, 5.2rem);
}
html[lang="ar"]{--grot:'El Messiri',sans-serif}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}

/* base */
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--grot);font-size:var(--step-0);line-height:1.6;-webkit-font-smoothing:antialiased}
img{max-width:100%;height:auto;display:block}
a{color:inherit}

/* ═══════════════ composants — contrat de classes (Task 3) ═══════════════
   Voix : --mono = donnée technique, --grot = éditorial.
   Traits 1px / .5px, angles vifs, aucune ombre portée sauf .print. */

/* ── cartouche — en-tête de section façon cartouche suisse ── */
.cartouche{border:var(--hairline);background:var(--paper)}
.cart-head{padding:48px 40px 36px;border-bottom:var(--rule)}
.kicker{font-family:var(--mono);font-size:.78rem;letter-spacing:.18em;color:var(--ink-soft);margin:0 0 18px;text-transform:uppercase}
.cart-cells{display:grid;grid-template-columns:repeat(4,1fr)}
.cart-cell{padding:14px 20px;border-inline-start:var(--rule);background:var(--paper-deep);font-family:var(--mono);font-size:.8rem;line-height:1.55}
.cart-cell:first-child{border-inline-start:0}
.cart-cell small{display:block;color:var(--ink-soft);font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;margin-block-end:4px}
.cart-ref{font-family:var(--mono);font-size:.78rem;letter-spacing:.2em;text-transform:uppercase}
.cart-stamp{display:inline-block;border:1.5px solid var(--ink);padding:5px 12px;font-family:var(--mono);font-size:.72rem;letter-spacing:.1em;transform:rotate(-2deg)}

/* ── masskette — séparateur ligne de cote |———— COTE ————| ── */
.masskette{display:flex;align-items:center;gap:14px;margin:64px 0 40px}
.masskette::before,.masskette::after{content:"";flex:1;min-width:24px;height:9px;background:linear-gradient(var(--ink),var(--ink)) 50% 50%/100% 1px no-repeat}
.masskette::before{border-inline-start:1px solid var(--ink)}
.masskette::after{border-inline-end:1px solid var(--ink)}
.mk-cote{font-family:var(--mono);font-size:.78rem;letter-spacing:.12em;text-align:center;background:var(--paper)}

/* ── annot — annotation de plan (ligne d'attache + étiquette mono) ──
   Superposition plan : <div class="annot annot--abs" style="left:32%;top:41%"> */
.annot{position:relative;display:flex;align-items:center;gap:10px;margin:14px 0;font-family:var(--mono);font-size:.76rem;line-height:1.45;color:var(--ink)}
.annot-line{flex:none;align-self:center;width:36px;height:1px;background:currentColor;position:relative}
.annot-line::before{content:"";position:absolute;inset-inline-start:-1px;top:-2px;width:5px;height:5px;background:currentColor}
.annot-tag{letter-spacing:.04em}
.annot--mark{color:var(--mark)}
.annot--abs{position:absolute;margin:0;transform:translateY(-50%)}
.annot--abs .annot-tag{background:var(--paper);border:var(--rule);padding:2px 7px;max-width:min(220px,32vw);overflow-wrap:break-word}
.annot--end{flex-direction:row-reverse} /* annotation ancrée près du bord droit du plan */

/* ── print — photo en tirage épinglé ; inclinaison via --tilt (±0.5deg, posée en HTML) ── */
.print{margin:0;background:#fff;padding:10px 10px 14px;box-shadow:0 2px 14px rgb(0 0 0/.12);transform:rotate(var(--tilt,0deg))}
.print img,.print-full img{width:100%}
.print-cap{font-family:var(--mono);font-size:.72rem;letter-spacing:.05em;color:var(--ink-soft);padding-block-start:8px}
.print-full{margin:0}
.print-full .print-cap{padding-block-start:10px}

/* ── cta — rectangle encre, remplissage lagon montant ── */
.cta{display:inline-block;border:var(--hairline);background:none;color:var(--ink);font-family:var(--grot);font-size:.95rem;font-weight:400;letter-spacing:.06em;line-height:1.4;padding:14px 26px;text-decoration:none;cursor:pointer;box-shadow:inset 0 0 0 0 var(--lagoon);transition:box-shadow .35s,color .2s}
.cta:hover{box-shadow:inset 0 -3.6em 0 0 var(--lagoon)}
.cta:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
.cta small{font-family:var(--mono);font-size:.76rem;color:var(--ink-soft);margin-inline-start:12px;white-space:nowrap;direction:ltr;unicode-bidi:isolate}
.cta:hover small{color:var(--ink)}
/* réf. de feuille (R-01…) : run LTR insécable, ne se coupe jamais au trait d'union ni ne s'inverse en RTL */
.code{direction:ltr;unicode-bidi:isolate;white-space:nowrap}

/* ── bordereau — formulaire ── */
.bordereau .field{margin-block-end:26px}
.bordereau .row{display:grid;grid-template-columns:1fr 1fr;gap:0 32px}
.bordereau label{display:block;font-family:var(--mono);font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft);margin-block-end:6px}
.bordereau input:not([type=checkbox]),.bordereau textarea{width:100%;border:0;border-bottom:var(--hairline);border-radius:0;background:none;font:inherit;color:var(--ink);padding:6px 1px 8px}
.bordereau textarea{resize:vertical;min-height:96px}
.bordereau ::placeholder{color:var(--ink-soft);opacity:.7}
.bordereau select{appearance:none;width:100%;border:var(--hairline);border-radius:0;font:inherit;color:var(--ink);padding-block:10px;padding-inline:12px 36px;cursor:pointer;background:var(--paper) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%231A1B1D'/%3E%3C/svg%3E") no-repeat right 12px center/10px 6px}
.bordereau :is(input:not([type=checkbox]),textarea,select):focus-visible{outline:none;border-color:var(--lagoon);box-shadow:0 1px 0 0 var(--lagoon)}
.bordereau input[type=checkbox]{appearance:none;flex:none;width:16px;height:16px;margin:0;border:var(--hairline);border-radius:0;background:none;cursor:pointer}
.bordereau input[type=checkbox]:checked{background:var(--lagoon);box-shadow:inset 0 0 0 2px var(--paper)}
.bordereau input[type=checkbox]:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.bordereau label.check{display:flex;align-items:center;gap:10px;font-family:var(--grot);font-size:.88rem;letter-spacing:0;text-transform:none;color:var(--ink);margin:0;cursor:pointer}
.fnote{font-family:var(--mono);font-size:.78rem;margin-block-start:14px}
.fnote.ok{color:color-mix(in srgb,var(--lagoon) 60%,var(--ink))}
.fnote.err{color:var(--mark)}

/* ── sheet-nav — barre fine ; liens défilables horizontalement en mobile ── */
.sheet-nav{display:flex;align-items:center;justify-content:space-between;gap:20px;border-bottom:var(--hairline);padding:14px 0;font-size:.92rem}
.sheet-nav .brand{flex:none;font-weight:600;letter-spacing:.35em;color:var(--ink);text-decoration:none}
.sheet-nav nav{flex:1;display:flex;justify-content:center;gap:28px;min-width:0;overflow-x:auto;scrollbar-width:none}
.sheet-nav nav::-webkit-scrollbar{display:none}
.sheet-nav nav a{color:var(--ink);text-decoration:none;white-space:nowrap;padding-block:4px}
.sheet-nav nav a:hover{text-decoration:underline;text-decoration-color:var(--lagoon);text-decoration-thickness:2px;text-underline-offset:6px}
.sheet-nav nav a:focus-visible,.lang-btn:focus-visible,.lang-menu button:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
/* sélecteur de langue — mêmes noms d'états que v8 (#langBtn/#langMenu, .open/.on : i18n-runtime.js) */
.lang{position:relative;flex:none}
.lang-btn{display:flex;align-items:center;gap:8px;background:none;border:var(--hairline);color:var(--ink);font-family:var(--mono);font-size:.74rem;letter-spacing:.14em;text-transform:uppercase;padding:6px 11px;cursor:pointer;transition:background .25s}
.lang-btn:hover{background:var(--lagoon-pale)}
.lang-btn svg{width:9px;height:9px;transition:transform .3s}
.lang.open .lang-btn svg{transform:rotate(180deg)}
.lang-menu{position:absolute;inset-inline-end:0;top:calc(100% + 10px);z-index:60;min-width:290px;background:var(--paper);border:var(--hairline);display:grid;grid-template-columns:1fr 1fr;opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .3s,transform .3s,visibility .3s}
.lang.open .lang-menu{opacity:1;visibility:visible;transform:none}
.lang-menu button{background:none;border:0;border-inline-start:3px solid transparent;color:var(--ink);font-family:var(--grot);font-size:.85rem;text-align:start;padding:10px 14px;cursor:pointer;display:flex;justify-content:space-between;align-items:baseline;gap:12px;transition:background .2s}
.lang-menu button:hover{background:var(--lagoon-pale)}
.lang-menu button.on{border-inline-start-color:var(--lagoon);font-weight:600}
.lang-menu button small{font-family:var(--mono);font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft)}

/* ── sheet-foot — pied de planche ── */
.sheet-foot{margin-block-start:96px;border-top:var(--hairline);padding:36px 0 44px;font-family:var(--mono);font-size:.78rem;color:var(--ink-soft)}
.sheet-foot .masskette{margin:0 0 32px}
.sheet-foot .foot-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px 40px}
.sheet-foot a{color:var(--ink);text-decoration:none;border-bottom:var(--rule)}
.sheet-foot a:hover{border-bottom:2px solid var(--lagoon)} /* soulignement lagon, texte encre (contraste) */

/* ── board — planche 2 colonnes (tirage + descriptif) ── */
.board{display:grid;grid-template-columns:1.2fr 1fr;gap:48px;align-items:start}

/* ── wrap — gabarit de page partagé (repris de la maquette validée) ── */
.wrap{max-width:1120px;margin:0 auto;padding:32px 40px}
.wrap--narrow{max-width:840px}
@media (max-width:720px){.wrap{padding:24px 18px}}

/* ── titres éditoriaux partagés ── */
h1{font-family:var(--grot);font-weight:300;font-size:var(--step-4);line-height:1.04;margin:0}
h1 em,h1 b{font-style:normal;font-weight:600}
h2{font-family:var(--grot);font-weight:300;font-size:var(--step-2);line-height:1.15;margin:0 0 16px}
h2 b{font-weight:600}
.lead{color:var(--ink-soft);max-width:56ch;margin:18px 0 0}

/* ── lightbox — #lb (site.js) ; l'attribut hidden est respecté ── */
.lightbox{position:fixed;inset:0;z-index:80;background:rgba(26,27,29,.82);display:flex;align-items:center;justify-content:center;padding:24px;cursor:pointer}
.lightbox[hidden]{display:none}
.lightbox img{max-width:min(90vw,1200px);max-height:90vh;background:#fff;padding:10px;box-shadow:0 6px 40px rgb(0 0 0/.4)}

/* ── hero-video — le film en tirage épinglé (home) ; reduced-motion → poster ── */
.hero-video,.hero-poster{width:100%;aspect-ratio:16/9;object-fit:cover;background:var(--paper-deep)}
.hero-poster{display:none}
@media (prefers-reduced-motion:reduce){.hero-video{display:none}.hero-poster{display:block}}

/* ── faq — details/summary minimal (invest) ── */
.faq{border-block-start:var(--rule)}
.faq details{border-block-end:var(--rule)}
.faq summary{list-style:none;cursor:pointer;display:flex;align-items:baseline;justify-content:space-between;gap:18px;padding:16px 2px;font-weight:500}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-family:var(--mono);color:var(--ink-soft);flex:none}
.faq details[open] summary::after{content:"−"}
.faq details p{margin:0;padding:0 2px 18px;color:var(--ink-soft);max-width:64ch}

/* ── reveals — REQUIERT <html class="js"> :
   1 ligne dans <head> : <script>document.documentElement.classList.add('js')</script>
   Sans JS, .rv reste pleinement visible. ── */
html.js .rv{opacity:0;transform:translateY(12px);transition:opacity .5s,transform .5s}
html.js .rv.in{opacity:1;transform:none}
html.js .rv.d1{transition-delay:.08s}
html.js .rv.d2{transition-delay:.16s}
html.js .rv.d3{transition-delay:.24s}
/* additif seulement — @media (scripting) n'est pas supporté partout ; le vrai gating est html.js */
@media (scripting:none){.rv{opacity:1!important;transform:none!important}}

/* ── rtl ── */
/* fallback navigateurs sans color-mix() */
@supports not (color:color-mix(in srgb,red,red)){
  :root{--rule:.5px solid rgba(26,27,29,.55)}
  .fnote.ok{color:#147F73}
}

[dir="rtl"] .cart-stamp{transform:rotate(2deg)}
/* le chip est forcé en direction:ltr → sa marge inline-start tombe côté extérieur ; on la rebascule côté texte */
[dir="rtl"] .cta small{margin-inline-start:0;margin-inline-end:12px}
[dir="rtl"] .print{transform:rotate(calc(var(--tilt,0deg)*-1))}
[dir="rtl"] .bordereau select{background-position:left 12px center}
/* textes des SVG inline (masterplan) : ancrage physique, sinon text-anchor bascule et sort du cadre */
[dir="rtl"] svg{direction:ltr}
/* l'interlettrage casse la ligature arabe — neutralisé sur les éléments à tracking */
[dir="rtl"] :is(.kicker,.cart-cell small,.cart-ref,.cart-stamp,.mk-cote,.annot-tag,.print-cap,.rooms,.backlink,.pn-nav,.bordereau label,.cta,.vdata){letter-spacing:0}

/* ── responsive ── */
@media (max-width:860px){
  .cart-head{padding:36px 24px 28px}
  .cart-cells{grid-template-columns:1fr 1fr}
  .cart-cell:nth-child(odd){border-inline-start:0}
  .cart-cell:nth-child(n+3){border-block-start:var(--rule)}
  .board{grid-template-columns:1fr;gap:32px}
}
@media (max-width:720px){
  .sheet-nav nav{justify-content:flex-start;padding-inline:14px;
    -webkit-mask-image:linear-gradient(90deg,transparent,#000 14px,#000 calc(100% - 14px),transparent);
    mask-image:linear-gradient(90deg,transparent,#000 14px,#000 calc(100% - 14px),transparent)}
  .bordereau .row{grid-template-columns:1fr}
}
@media (max-width:480px){
  .cart-head{padding:28px 18px 24px}
  .cart-cells{grid-template-columns:1fr}
  .cart-cell{border-inline-start:0}
  .cart-cell+.cart-cell{border-block-start:var(--rule)}
  .masskette{margin:48px 0 32px}
  .lang-menu{min-width:250px}
}
