@import url("https://fonts.googleapis.com/css2?family=Unbounded:wght@600;700&display=swap");
/* penui landing — core. "The baseplate": warm studio canvas, faint stud grid,
   9-slice guide frames instead of selection handles. Sections own their own CSS in /site/l/sections/. */
:root{
  /* canvas + ink */
  --bg:#f2f0eb;          /* baseplate canvas */
  --bg2:#e9e6df;         /* sunken canvas */
  --card:#fbfaf7;        /* raised sheet */
  --ink:#17161b;         /* primary text */
  --ink2:#4b4953;        /* body text */
  --mute:#8f8b84;        /* secondary headline grey (paper-style second line) */
  --line:#d9d5cc;        /* frame hairline */
  --line2:#c7c2b7;       /* stronger hairline */
  /* signal colors (used sparingly) */
  --sel:#1f8cff;         /* studio selection blue: guides, handles, focus */
  --sel-soft:rgba(31,140,255,.12);
  --stud:#ffd21f;        /* brand yellow: one marker per view, never a fill for big areas */
  --hot:#ff4d2e;         /* rare emphasis */
  --ok:#22b35e;
  /* dark surfaces (studio mocks, code) */
  --night:#121116;--night2:#1b1a21;--night3:#26242d;--nline:#2f2d37;--ntext:#d9d5cb;
  /* type */
  --sans:"Geist",ui-sans-serif,system-ui,"Segoe UI",sans-serif;
  --mono:"Geist Mono",ui-monospace,Consolas,monospace;
  --game:"Fredoka One","Fredoka",system-ui,sans-serif; /* only inside rendered game UI */
  /* layout */
  --max:1200px;--gut:clamp(16px,4vw,40px);
  --r:14px;--r-sm:8px;
  --ease:cubic-bezier(.2,.7,.1,1);--ease-io:cubic-bezier(.65,0,.35,1);
}
@font-face{font-family:"Fredoka One";src:url(/library/fonts/FredokaOne-Regular.ttf) format("truetype");font-display:swap}
*{box-sizing:border-box}
html,body{margin:0}
html{scroll-behavior:smooth;scroll-padding-top:60px;-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--ink);font:400 16px/1.55 var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}
::selection{background:var(--sel);color:#fff}
a{color:inherit;text-decoration:none}
img,svg{display:block;max-width:100%}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
code,kbd,pre{font-family:var(--mono)}
:focus-visible{outline:2px solid var(--sel);outline-offset:3px;border-radius:4px}
.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-999px;top:10px;z-index:99;background:var(--ink);color:var(--bg);padding:8px 12px;border-radius:6px}.skip:focus{left:10px}
.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--gut)}

/* ---------- baseplate background: stud grid that fades out toward the page middle ---------- */
.plate{position:fixed;inset:0;z-index:-1;pointer-events:none;
  background-image:radial-gradient(circle at 50% 50%,rgba(23,22,27,.075) 1.6px,transparent 2.2px);
  background-size:24px 24px;
  -webkit-mask-image:linear-gradient(90deg,#000 0,rgba(0,0,0,.15) 22%,rgba(0,0,0,0) 34%,rgba(0,0,0,0) 66%,rgba(0,0,0,.15) 78%,#000 100%);
          mask-image:linear-gradient(90deg,#000 0,rgba(0,0,0,.15) 22%,rgba(0,0,0,0) 34%,rgba(0,0,0,0) 66%,rgba(0,0,0,.15) 78%,#000 100%)}

/* ---------- nav ---------- */
.nav{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid transparent;transition:border-color .3s}
.nav.scrolled{border-bottom-color:var(--line)}
.nav .wrap{display:flex;align-items:center;height:60px;gap:28px}
.logo{display:inline-flex;align-items:center;gap:0;font:700 27px/1 "Unbounded",var(--sans);letter-spacing:-.06em;text-decoration:none}
.logo .mark{width:38px;height:38px;flex:none;margin-right:4px;transition:transform .35s cubic-bezier(.3,1.6,.5,1)}
.logo:hover .mark{transform:rotate(-8deg) scale(1.06)}
.logo b{font-weight:700;color:var(--sel)}
.nav nav{display:flex;gap:26px;margin:0 auto}
.nav nav a{font-size:14.5px;color:var(--ink2);transition:color .15s}
.nav nav a:hover{color:var(--ink)}
.nav .right{display:flex;gap:18px;align-items:center}
.nav .right a{font-size:14.5px}
@media (max-width:820px){.nav nav{display:none}.nav .right{margin-left:auto}}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:10px;height:46px;padding:0 20px;border-radius:10px;font:500 15.5px var(--sans);letter-spacing:-.01em;transition:transform .15s var(--ease),background .15s,box-shadow .15s;white-space:nowrap}
.btn-dark{background:var(--ink);color:var(--bg);box-shadow:0 1px 0 rgba(255,255,255,.08) inset,0 6px 20px -8px rgba(23,22,27,.5)}
.btn-dark:hover{background:#000;transform:translateY(-1px)}
.btn-ghost{color:var(--ink2);padding:0 6px}
.btn-ghost:hover{color:var(--ink)}
.btn-ghost .arr{transition:transform .2s var(--ease)}.btn-ghost:hover .arr{transform:translateX(3px)}
.btn-sm{height:36px;padding:0 14px;font-size:14px;border-radius:8px}

/* ---------- section typography (paper-like: tiny eyebrow, two-tone 2-line headline) ---------- */
.eyebrow{display:inline-flex;align-items:center;gap:8px;font:500 14px var(--sans);color:var(--ink);letter-spacing:-.005em;margin:0 0 18px}
.eyebrow::before{content:"";width:7px;height:7px;border-radius:2px;background:var(--stud);box-shadow:0 0 0 1px rgba(23,22,27,.25) inset}
.h1{font:450 clamp(40px,6.4vw,76px)/1.02 var(--sans);letter-spacing:-.045em;margin:0;text-wrap:balance}
.h2{font:450 clamp(32px,4.6vw,54px)/1.06 var(--sans);letter-spacing:-.04em;margin:0;text-wrap:balance}
.h3{font:500 19px/1.3 var(--sans);letter-spacing:-.02em;margin:0 0 8px}
.h1 .g,.h2 .g{color:var(--mute)}
.lede{font-size:18px;line-height:1.55;color:var(--ink2);max-width:600px;margin:22px 0 0;text-wrap:pretty}
.body{font-size:15.5px;color:var(--ink2);margin:0;text-wrap:pretty}
.center{text-align:center}.center .lede{margin-left:auto;margin-right:auto}

/* ---------- section frame: hairline box with 9-slice guide ticks at the corners ---------- */
.sec{position:relative;padding:clamp(80px,12vw,150px) 0}
.frame{position:relative;border:1px solid var(--line);background:color-mix(in srgb,var(--card) 70%,transparent)}
.frame>.tick{position:absolute;width:9px;height:9px;background:var(--bg);border:1px solid var(--line2);z-index:2}
.frame>.tick.tl{left:-5px;top:-5px}.frame>.tick.tr{right:-5px;top:-5px}.frame>.tick.bl{left:-5px;bottom:-5px}.frame>.tick.br{right:-5px;bottom:-5px}
/* the 9-slice guide: dashed lines inset from each edge, drawn in when .in */
.slice{position:absolute;inset:0;pointer-events:none;z-index:1}
.slice i{position:absolute;background:repeating-linear-gradient(90deg,var(--sel) 0 4px,transparent 4px 8px);opacity:.0;transition:opacity .8s var(--ease),transform 1.1s var(--ease)}
.slice i.h{left:0;right:0;height:1px;transform:scaleX(0)}
.slice i.v{top:0;bottom:0;width:1px;background:repeating-linear-gradient(180deg,var(--sel) 0 4px,transparent 4px 8px);transform:scaleY(0)}
.slice i.h1{top:var(--inset,28px)}.slice i.h2{bottom:var(--inset,28px)}
.slice i.v1{left:var(--inset,28px)}.slice i.v2{right:var(--inset,28px)}
.in .slice i{opacity:.35;transform:none}

/* card grid like paper's 2-up rows under a section */
.cards{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--line)}
.cards>.card{padding:clamp(24px,3.4vw,40px);border-right:1px solid var(--line);min-width:0}
.cards>.card:last-child{border-right:0}
@media (max-width:820px){.cards{grid-template-columns:1fr}.cards>.card{border-right:0;border-bottom:1px solid var(--line)}.cards>.card:last-child{border-bottom:0}}
.card .stagebox{margin-top:26px;border-radius:var(--r);background:var(--bg2);border:1px solid var(--line);aspect-ratio:4/3;position:relative;overflow:hidden}

/* ---------- reveal on scroll (core.js toggles .in) ---------- */
[data-reveal]{opacity:0;transform:translateY(14px);transition:opacity .7s var(--ease),transform .7s var(--ease);transition-delay:var(--d,0s)}
[data-reveal].in{opacity:1;transform:none}
/* line-by-line headline reveal: wrap lines in <span class="ln"><span>…</span></span> */
.ln{display:block;overflow:hidden;padding-bottom:.06em;margin-bottom:-.06em}
.ln>span{display:block;transform:translateY(105%);transition:transform .85s cubic-bezier(.22,.61,.36,1);transition-delay:var(--d,0s)}
.in .ln>span,.ln.in>span{transform:none}

/* ---------- footer ---------- */
.foot{border-top:1px solid var(--line);padding:40px 0 56px;color:var(--ink2);font-size:14px}
.foot .wrap{display:flex;gap:28px;align-items:center;flex-wrap:wrap}
.foot nav{display:flex;gap:22px;margin-left:auto}
.foot nav a:hover{color:var(--ink)}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  [data-reveal],.ln>span,.slice i{transition:none!important;opacity:1!important;transform:none!important}
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important}
}
