/* ================================================================
   ALLFORMS — project pages
   One template for every case study (Figma · Mila frame 120:2).
   Shares tokens, nav, cursor and grain with index.html.

   Spacing scale — nothing else is allowed:
     --gutter   page side padding
     --space    between sections
     --head     heading block → media
     --gap      between tiles
   Type scale — nothing else is allowed:
     title 64 · closing 80 · intro 24 · h2 38 · body 18 · mono 11/10
   ================================================================ */
:root{
  --paper:#F2F1ED;
  /* brand-identity.html — Porcelain · Mineral · Alloy · Petrol · Graphite */
  --plate:#E6E5E0;
  --mineral:#C8C2B8;
  --alloy:#D3D7D8;
  --petrol:#284B50;
  --muted:#5C6266;
  --ink:#24282B;
  --ink-72:rgba(36,40,43,.72);
  --ink-60:rgba(36,40,43,.6);
  --ink-30:rgba(36,40,43,.3);
  --ink-12:rgba(36,40,43,.12);

  --pop-orange:#5846F5; /* Ion — the one spark */

  --ease-precise:cubic-bezier(.65,0,.15,1);
  --ease-fluid:cubic-bezier(.28,1.44,.36,1);
  --ease-glide:cubic-bezier(.16,1,.3,1);

  --font-g:"Archivo",sans-serif;
  --font-m:"Spline Sans Mono",monospace;

  --gutter:40px;
  --space:clamp(64px,7.2vw,104px);
  --head:clamp(36px,3.9vw,56px);
  --gap:8px;
  --r:clamp(28px,5.14vw,74px);
  --max:1360px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{
  background:var(--paper);color:var(--ink);
  font-family:var(--font-g);font-size:18px;line-height:1.55;
  overflow-x:hidden;-webkit-font-smoothing:antialiased;
  cursor:none;
}
::selection{background:var(--pop-orange);color:var(--paper);}
img,video{display:block;max-width:100%;}
.mono{font-family:var(--font-m);font-size:11px;letter-spacing:.14em;text-transform:uppercase;font-weight:400;}

/* ---------------- custom cursor + grain (as index) -------------------- */
#cursor{
  position:fixed;top:0;left:0;width:10px;height:10px;border-radius:50%;
  background:var(--ink);pointer-events:none;z-index:9999;
  transform:translate(-50%,-50%);
  transition:width .35s var(--ease-fluid),height .35s var(--ease-fluid),background .2s var(--ease-precise);
  mix-blend-mode:exclusion;
}
body.cursor-hot #cursor{width:56px;height:56px;background:#fff;}
@media (hover:none){ body{cursor:auto;} #cursor{display:none;} }
body::after{
  content:"";position:fixed;inset:0;z-index:5;pointer-events:none;opacity:.5;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .04 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ---------------- nav (as index) -------------------------------------- */
nav{
  position:fixed;top:0;left:0;right:0;z-index:100;
  display:flex;align-items:center;justify-content:space-between;
  padding:18px var(--gutter);
  background:rgba(242,241,237,.55);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-bottom:1px solid var(--ink-12);
}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink);}
.logo svg{width:30px;height:auto;display:block;}
.logo b{font-weight:640;font-size:19px;letter-spacing:-.02em;}
nav .links{display:flex;gap:32px;align-items:center;}
nav .links a{
  color:var(--ink);text-decoration:none;position:relative;
  font-family:var(--font-m);font-size:12px;letter-spacing:.12em;text-transform:uppercase;
}
nav .links a::after{
  content:"";position:absolute;left:0;bottom:-4px;width:100%;height:2px;
  background:var(--pop-orange);transform:scaleX(0);transform-origin:left;
  transition:transform .4s var(--ease-fluid);
}
nav .links a:hover::after,nav .links a[aria-current]::after{transform:scaleX(1);}
.nav-cta{
  font-family:var(--font-m);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink);text-decoration:none;padding:10px 18px;
  border:1px solid var(--ink);border-radius:999px;
  transition:background .3s var(--ease-precise),color .3s var(--ease-precise);
}
.nav-cta:hover{background:var(--ink);color:var(--paper);}

/* ---------------- hero — masked image + glass title card -------------- */
.p-hero{
  position:relative;
  max-width:1440px;margin:0 auto;
  padding:73px 20px 0;
}
.p-hero-img{
  width:100%;aspect-ratio:1400/556;min-height:340px;
  border-radius:var(--r);overflow:hidden;background:var(--plate);
}
.p-hero-img img{width:100%;height:100%;object-fit:cover;object-position:var(--pos,50% 50%);}
.p-title{
  position:absolute;left:107px;bottom:-69px;z-index:2;
  width:min(487px,calc(100% - 214px));
  display:flex;flex-direction:column;gap:20px;
  padding:40px 40px 28px;
  border-radius:var(--r);
  background:rgba(246,241,232,.5);
  border:1px solid rgba(255,255,255,.6);
  box-shadow:0 10px 9px rgba(36,40,43,.07);
  backdrop-filter:blur(9.4px);-webkit-backdrop-filter:blur(9.4px);
}
.p-title h1{font-size:clamp(44px,4.45vw,64px);font-weight:700;line-height:1;letter-spacing:-.035em;}
.p-title p{font-size:18px;line-height:1.55;color:var(--ink-72);margin-top:8px;}
.chips{display:flex;flex-wrap:wrap;gap:10px;list-style:none;}
.chips li{
  font-family:var(--font-m);font-size:10px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;
  color:rgba(36,40,43,.8);white-space:nowrap;
  padding:9px 16px;border:1px solid rgba(36,40,43,.55);border-radius:999px;
}

/* ---------------- body ------------------------------------------------ */
main{padding:0 var(--gutter);}
.p-sec{max-width:var(--max);margin:var(--space) auto 0;}
.p-hero + main > .p-sec:first-child{margin-top:calc(var(--space) + 69px);}

.p-intro{
  max-width:920px;margin-left:auto;margin-right:auto;text-align:center;
  font-size:clamp(20px,1.67vw,24px);line-height:1.45;letter-spacing:-.01em;font-weight:400;
}

/* one heading + one paragraph, everywhere */
.p-text{max-width:760px;margin:0 auto var(--head);text-align:center;}
.p-text:last-child{margin-bottom:0;}
h2{font-size:clamp(28px,2.64vw,38px);font-weight:600;line-height:1.15;letter-spacing:-.025em;}
h2 + p{margin-top:20px;}
.p-text p,.tile.text p,.p-feature p{font-size:18px;line-height:1.55;color:var(--muted);}

/* media grid — two columns, every tile the same proportion */
.p-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap);}
.p-grid + .p-grid{margin-top:var(--gap);}
.tile{
  position:relative;overflow:hidden;
  aspect-ratio:678/606;border-radius:var(--r);
  background:var(--tile-bg,var(--plate));
}
.tile > img,.tile > video{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:var(--pos,50% 50%);
}
.tile.contain > img{object-fit:contain;padding:12%;}
.tile.tall{grid-row:span 2;aspect-ratio:auto;border-radius:999px;}
.tile.wide{grid-column:1 / -1;aspect-ratio:1360/600;}
.tile.film{grid-column:1 / -1;aspect-ratio:16/9;}
.tile.short{aspect-ratio:687/383;}
.tile.pill{border-radius:999px;}
.tile.cap-l{border-radius:999px 0 0 999px;}
.tile.cap-r{border-radius:0 999px 999px 0;}
.p-grid.joined{gap:0;}
.tile.multiply > img{mix-blend-mode:multiply;}

.tile.text{
  display:flex;flex-direction:column;justify-content:center;
  padding:clamp(32px,5vw,72px);
}

/* feature — wide plate, copy left, object right */
.p-feature{
  display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:clamp(24px,4vw,64px);
  min-height:clamp(420px,41.6vw,600px);
  padding:clamp(40px,5vw,72px) clamp(40px,8.4vw,120px);
  border-radius:999px;background:var(--plate);overflow:hidden;
}
.p-feature .media img{width:100%;height:auto;max-height:460px;object-fit:contain;margin:0 auto;}

/* three-up strip inside one pill (HeartBeam portal) */
.p-strip{
  display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap);
  aspect-ratio:1360/485;border-radius:999px;overflow:hidden;
}
.p-strip img{width:100%;height:100%;object-fit:cover;object-position:0 0;}

/* phones in a row (Nuri app) */
.p-phones{
  display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,5.1vw,74px);
  max-width:1020px;margin:0 auto;
}
.p-phones img{width:100%;height:auto;}

/* phone sitting in a tile */
.tile.phone{display:flex;justify-content:center;align-items:center;}
.tile.phone > img{position:static;width:auto;height:84%;object-fit:contain;}
.tile.phone.bleed{align-items:flex-start;}
.tile.phone.bleed > img{height:auto;width:66%;margin-top:7%;}

/* system diagram (HeartBeam) */
.flow{display:flex;flex-direction:column;align-items:center;width:100%;max-width:440px;margin:0 auto;}
.flow .node{
  width:64%;text-align:center;padding:12px 14px;
  border:1px solid var(--petrol);border-radius:14px;background:rgba(242,241,237,.6);
}
.flow .node b{display:block;font-size:16px;font-weight:600;line-height:1.3;color:var(--ink);}
.flow .node span{display:block;font-size:13px;line-height:1.4;color:var(--muted);}
.flow .link{width:1px;height:26px;background:var(--petrol);}
.flow .fork{width:52%;height:22px;border:1px solid var(--petrol);border-bottom:0;border-radius:10px 10px 0 0;}
.flow .pair{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%;}
.flow .pair .node{width:100%;}

/* ---------------- closing statement + footer -------------------------- */
.closing{max-width:calc(var(--max) + 2 * var(--gutter));margin:0 auto;padding:clamp(80px,10vw,150px) var(--gutter) 0;}
.signoff{display:block;width:56px;height:auto;margin-bottom:clamp(28px,3vw,40px);color:var(--ink);}
.closing p{font-size:clamp(42px,5.5vw,80px);line-height:1.04;font-weight:480;letter-spacing:-.05em;}
.closing p span{display:block;}
.closing p span + span{color:var(--muted);}
.closing-cta{display:flex;flex-direction:column;gap:10px;margin-top:clamp(32px,4vw,56px);}
.closing-cta .mono{color:#5C6266;}
.closing-cta a{
  align-self:flex-start;color:var(--ink);text-decoration:none;
  font-size:clamp(20px,2vw,28px);font-weight:500;letter-spacing:-.02em;
  padding-bottom:6px;border-bottom:1px solid var(--ink);
  transition:color .3s var(--ease-precise),border-color .3s var(--ease-precise);
}
.closing-cta a:hover{color:var(--pop-orange);border-color:var(--pop-orange);}
.closing-cta .arrow{display:inline-block;margin-left:.4em;transition:transform .5s var(--ease-fluid);}
.closing-cta a:hover .arrow{transform:translateX(8px);}
footer{display:flex;justify-content:space-between;align-items:center;margin-top:48px;padding:26px var(--gutter);border-top:1px solid var(--ink-12);color:var(--ink-60);}
footer a{color:inherit;text-decoration:none;transition:color .3s var(--ease-precise);}
footer a:hover{color:var(--pop-orange);}

/* reveal */
.reveal{opacity:0;transform:translateY(36px);transition:opacity .9s var(--ease-glide),transform .9s var(--ease-glide);}
.reveal.in{opacity:1;transform:none;}

@media (max-width:900px){
  :root{--gutter:20px;}
  nav{padding:14px 20px;}
  nav .links{display:none;}
  .p-hero{padding:66px 14px 0;}
  .p-title{position:relative;left:auto;bottom:auto;width:auto;margin:-56px 14px 0;padding:28px 26px 24px;}
  .p-hero + main > .p-sec:first-child{margin-top:var(--space);}
  .p-feature{grid-template-columns:1fr;border-radius:var(--r);padding:40px 28px;}
}
@media (max-width:700px){
  .p-grid{grid-template-columns:1fr;}
  .tile.tall{grid-row:auto;aspect-ratio:678/1000;}
  .tile.wide,.tile.short{aspect-ratio:678/606;}
  .tile.cap-l,.tile.cap-r{border-radius:var(--r);}
  .p-grid.joined{gap:var(--gap);}
  .tile.text{aspect-ratio:auto;padding:44px 28px;}
  .p-strip{grid-template-columns:1fr;aspect-ratio:auto;border-radius:var(--r);}
  .p-strip img{aspect-ratio:678/606;}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important;}
  .reveal{opacity:1;transform:none;}
}
