/* =====================================================================
   ANCHOR STUDIOS — shared brand system
   Used by index.html (chooser) + concepts a/ b/ c/.
   Visual identity is fixed by the brand deck + IG; concepts differ in
   layout only. Edit tokens here to recolor/retype everything at once.
   ===================================================================== */

/* ---------- Fonts (self-hosted, see assets/fonts) -------------------- */
/* NOTE: url() is resolved relative to THIS file (site/brand.css). */
@font-face{font-family:"Open Sauce";src:url("assets/fonts/oss1-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Open Sauce";src:url("assets/fonts/oss1-600.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Open Sauce";src:url("assets/fonts/oss1-700.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Open Sauce";src:url("assets/fonts/oss1-800.woff2") format("woff2");font-weight:800;font-style:normal;font-display:swap}
/* Signature wordmark — PLACEHOLDER for Hélicie's real logo font */
@font-face{font-family:"Signature";src:url("assets/fonts/pinyon-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}

/* ---------- Design tokens ------------------------------------------- */
:root{
  /* brand palette (deck) */
  --white:#FFFFFF;
  --oxblood:#591414;
  --oxblood-tint:#c98b8b;   /* lifted oxblood for accents/emphasis on dark */
  --maroon-deep:#3D0000;
  --black:#000000;
  /* working tones derived from the palette */
  --paper:#F4EFE9;          /* warm off-white for "cream" sections (≈ deck MISSION bg) */
  --paper-2:#ECE4DB;        /* slightly deeper paper for cards/wells */
  --ink:#1A0A0A;            /* near-black with a red cast, softer than #000 for body text */
  --hairline:rgba(89,20,20,.22);
  --hairline-light:rgba(244,239,233,.20);

  /* type */
  --font:"Open Sauce",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --script:"Signature","Open Sauce",cursive;

  /* fluid display scale (clamp: min, vw, max) */
  --fs-mega:clamp(3.2rem,11vw,9.5rem);
  --fs-h1:clamp(2.4rem,6.5vw,5.2rem);
  --fs-h2:clamp(1.9rem,4vw,3.2rem);
  --fs-h3:clamp(1.3rem,2.2vw,1.8rem);
  --fs-lead:clamp(1.1rem,1.5vw,1.45rem);
  --fs-body:1.0625rem;
  --fs-small:.82rem;

  /* rhythm */
  --container:1280px;
  --gutter:clamp(1.25rem,5vw,5rem);
  --section:clamp(4.5rem,10vw,9rem);

  --ease:cubic-bezier(.22,.61,.36,1);
}

/* ---------- Reset / base -------------------------------------------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  font-family:var(--font);
  font-weight:400;
  font-size:var(--fs-body);
  line-height:1.6;
  color:var(--ink);
  background:var(--paper);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer}
h1,h2,h3,h4{margin:0;font-weight:800;line-height:1.02;letter-spacing:-.01em;text-wrap:balance}
p{margin:0;text-wrap:pretty}
::selection{background:var(--oxblood);color:var(--paper)}

/* ---------- Typography helpers -------------------------------------- */
.display{font-weight:800;text-transform:uppercase;letter-spacing:-.015em;line-height:.92}
.mega{font-size:var(--fs-mega)}
.h1{font-size:var(--fs-h1)}
.h2{font-size:var(--fs-h2)}
.h3{font-size:var(--fs-h3);font-weight:700;letter-spacing:0}
.lead{font-size:var(--fs-lead);line-height:1.45;font-weight:400}
.eyebrow{
  font-size:var(--fs-small);font-weight:700;text-transform:uppercase;
  letter-spacing:.28em;
}
.script{font-family:var(--script);font-weight:400;text-transform:none;letter-spacing:0;line-height:1}
.muted{opacity:.66}
.measure{max-width:62ch}
.measure-sm{max-width:46ch}

/* ---------- Layout --------------------------------------------------- */
.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter)}
.section{padding-block:var(--section)}
.stack>*+*{margin-top:1.1em}
.rule{height:1px;background:var(--hairline);border:0;margin:0}

/* ---------- Components ----------------------------------------------- */
/* Buttons */
.btn{
  display:inline-flex;align-items:center;gap:.6em;
  padding:.95em 1.7em;border-radius:999px;border:1px solid transparent;
  font-weight:700;font-size:.92rem;letter-spacing:.02em;
  background:var(--oxblood);color:var(--paper);
  transition:transform .35s var(--ease),background .35s var(--ease),color .35s var(--ease);
}
.btn:hover{background:var(--maroon-deep);transform:translateY(-2px)}
.btn--ghost{background:transparent;border-color:currentColor;color:var(--oxblood)}
.btn--ghost:hover{background:var(--oxblood);color:var(--paper);border-color:var(--oxblood)}
.btn--light{background:var(--paper);color:var(--oxblood)}
.btn--light:hover{background:var(--white);color:var(--maroon-deep)}
.btn .arrow{transition:transform .35s var(--ease)}
.btn:hover .arrow{transform:translateX(4px)}

/* Wordmarks */
.wordmark{font-weight:800;text-transform:uppercase;letter-spacing:-.02em;line-height:1}
.wordmark-script{font-family:var(--script);line-height:1}
/* "AS" monogram — circular, mirrors the IG avatar (stand-in) */
.monogram{
  display:grid;place-items:center;width:2.6em;height:2.6em;border-radius:50%;
  border:1px solid currentColor;font-family:var(--script);font-size:1.15em;
}

/* Service box — thin outline on dark (mirrors IG services slide) */
.svc-box{
  border:1px solid var(--hairline-light);padding:clamp(1.4rem,2.5vw,2.2rem);
  background:transparent;transition:background .4s var(--ease),border-color .4s var(--ease);
}
.svc-box:hover{background:rgba(244,239,233,.05);border-color:rgba(244,239,233,.45)}

/* Tag / pill */
.tag{display:inline-block;border:1px solid currentColor;border-radius:999px;
  padding:.35em .9em;font-size:.72rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase}

/* ---------- Texture utilities --------------------------------------- */
/* Film grain — drop <div class="grain"></div> as a fixed overlay */
.grain{
  position:fixed;inset:0;z-index:80;pointer-events:none;opacity:.05;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
.grain--light{mix-blend-mode:screen;opacity:.06}

/* Halftone dot field (from deck MISSION corner). Apply to a positioned el. */
.halftone{
  background-image:radial-gradient(var(--oxblood) 1.4px,transparent 1.6px);
  background-size:11px 11px;
  -webkit-mask-image:radial-gradient(120% 120% at 100% 100%,#000 0%,transparent 62%);
          mask-image:radial-gradient(120% 120% at 100% 100%,#000 0%,transparent 62%);
}

/* Oxblood duotone for photography — wrap an <img> in .duo.
   Two-tone ramp: oxblood shadows (multiply) + lifted cream highlights (soft-light). */
.duo{position:relative;overflow:hidden;background:var(--maroon-deep);isolation:isolate}
.duo>img{width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.08) brightness(1.1)}
.duo::after{content:"";position:absolute;inset:0;background:var(--oxblood);mix-blend-mode:multiply;opacity:.92;z-index:1;pointer-events:none}
.duo::before{content:"";position:absolute;inset:0;background:var(--paper);mix-blend-mode:soft-light;opacity:.45;z-index:2;pointer-events:none}
.duo--deep::after{background:var(--maroon-deep)}
.duo--soft::after{opacity:.74}
.duo--soft::before{opacity:.6}
.duo--plain::after,.duo--plain::before{display:none}     /* natural image when needed */
.duo>.duo-cap,.duo>.duo-content{position:relative;z-index:3}

/* Surfaces */
.on-dark{background:var(--maroon-deep);color:var(--paper)}
.on-oxblood{background:var(--oxblood);color:var(--paper)}
.on-paper{background:var(--paper);color:var(--ink)}
.on-dark .eyebrow,.on-oxblood .eyebrow{color:rgba(244,239,233,.7)}

/* ---------- Scroll reveal (progressive enhancement) ------------------ */
.reveal{opacity:0;transform:translateY(22px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.reveal.is-in{opacity:1;transform:none}
.no-js .reveal{opacity:1;transform:none}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .reveal{opacity:1;transform:none}
}

/* =====================================================================
   CINEMATIC MOTION LAYER  (see assets/motion.js)
   Content only hides while JS is live AND motion is allowed, so a
   no-JS or reduced-motion visitor always sees everything, unanimated.
   ===================================================================== */

/* Generic block reveals */
html.js:not(.reduce) [data-reveal]{opacity:0;will-change:opacity,transform,filter}
html.js:not(.reduce) [data-reveal][data-shown]{opacity:1}          /* safety net */

/* Film-title line masks */
html.js:not(.reduce) [data-title] .line{overflow:hidden;padding-bottom:.04em}
html.js:not(.reduce) [data-title] .line > *{display:block;transform:translateY(110%)}
html.js:not(.reduce) [data-title][data-shown] .line > *{transform:none}

/* Per-word split reveals (spans injected by motion.js) */
html.js:not(.reduce) [data-split] .word{display:inline-block;overflow:hidden;vertical-align:top}
html.js:not(.reduce) [data-split] .word > span{display:inline-block;transform:translateY(102%)}
html.js:not(.reduce) [data-split][data-shown] .word > span{transform:none}

/* Opening curtain: only exists when JS + motion are on */
[data-curtain]{display:none}
html.js:not(.reduce) [data-curtain]{
  display:grid;place-items:center;position:fixed;inset:0;z-index:300;
  background:radial-gradient(120% 120% at 50% 40%,var(--oxblood),var(--maroon-deep) 70%);
  will-change:transform}
[data-curtain] .mark{font-family:var(--script);font-size:clamp(2.4rem,8vw,5rem);
  color:var(--paper);opacity:.92;letter-spacing:.01em}

/* Custom cursor ring (fine pointers only; additive to the native cursor) */
.cursor-ring{position:fixed;top:0;left:0;z-index:250;width:32px;height:32px;
  border:1px solid rgba(244,239,233,.55);border-radius:50%;pointer-events:none;
  mix-blend-mode:difference;will-change:transform;
  transition:width .3s var(--ease),height .3s var(--ease),background .3s var(--ease)}
.cursor-ring.is-lg{width:66px;height:66px;background:rgba(244,239,233,.06)}
@media (pointer:coarse){.cursor-ring{display:none}}

/* Gallery: warm the duotone toward true colour on hover — the signature move */
.gal figure .duo::after{transition:opacity .6s var(--ease)}
.gal figure .duo>img{transition:transform .9s var(--ease),filter .6s var(--ease)}
@media (hover:hover){
  .gal figure:hover .duo::after{opacity:.58}
  .gal figure:hover .duo>img{transform:scale(1.045);filter:grayscale(.35) contrast(1.06) brightness(1.14)}
}

/* Magnetic targets need their own transform space */
[data-magnetic]{will-change:transform}

/* ---------- A tiny shared scroll-reveal + year helper ---------------- */
