/* ══════════════════════════════════════════════════════════════════════
   tsgotouch.com — shared shell
   Tokens, self-hosted fonts, nav, footer, buttons. Every page links this.
   Page-specific CSS lives inline (index.html) or in page.css (all others).
   ══════════════════════════════════════════════════════════════════════ */

/* ── FONTS ──
   Self-hosted so no visitor IP reaches a third-party CDN — the Privacy
   Policy's sub-processor list depends on this staying true.
   All three are SIL OFL variable fonts; see assets/fonts/OFL.txt.
   unicode-range is copied verbatim from Google's latin subset, so glyph
   fallback behaviour is identical to what the site served before. */
@font-face{
  font-family:'Bricolage Grotesque';
  src:url('fonts/bricolage-grotesque-latin.woff2') format('woff2');
  font-style:normal; font-weight:200 800; font-stretch:100%; font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Hanken Grotesk';
  src:url('fonts/hanken-grotesk-latin.woff2') format('woff2');
  font-style:normal; font-weight:100 900; font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'JetBrains Mono';
  src:url('fonts/jetbrains-mono-latin.woff2') format('woff2');
  font-style:normal; font-weight:400 800; font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

/* ── TOKENS ── */
:root{
  --bg:#0a0a0c; --bg2:#0e0e12; --panel:#141419; --panel2:#1b1b22;
  --ink:#edecf0; --mut:#8d8c98; --dim:#5b5a66; --line:rgba(255,255,255,.08);
  --amber:#ffb23e; --amber-d:#e8983f; --blue:#6f93ff; --green:#5fd08a; --red:#ff6b6b;
  --display:'Bricolage Grotesque',serif; --body:'Hanken Grotesk',sans-serif; --mono:'JetBrains Mono',monospace;
}

/* ── BASE ── */
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--bg); color:var(--ink); font-family:var(--body);
  font-size:16px; line-height:1.55; -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
body::before{
  content:""; position:fixed; inset:0; z-index:-2; pointer-events:none;
  background:
    radial-gradient(60% 40% at 78% -5%, rgba(255,178,62,.16), transparent 60%),
    radial-gradient(45% 35% at 8% 8%, rgba(111,147,255,.10), transparent 60%),
    linear-gradient(180deg,#0a0a0c,#08080a);
}
body::after{ /* grain */
  content:""; position:fixed; inset:0; z-index:-1; pointer-events:none; opacity:.04;
  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%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
a{color:inherit;text-decoration:none}
.wrap{max-width:1180px;margin:0 auto;padding:0 28px}
.mono{font-family:var(--mono);font-weight:500}
.tag{font-family:var(--mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber)}

/* Keyboard focus must stay visible — the reset above removes nothing, but
   several interactive elements are <a> with custom backgrounds. */
:focus-visible{outline:2px solid var(--amber);outline-offset:3px;border-radius:4px}

/* ── NAV ── */
nav{position:fixed;top:0;left:0;right:0;z-index:50;backdrop-filter:blur(14px);
    background:linear-gradient(180deg,rgba(10,10,12,.86),rgba(10,10,12,.4));border-bottom:1px solid var(--line)}
.nav{display:flex;align-items:center;justify-content:space-between;height:64px}
.brand{display:flex;align-items:center;gap:11px;font-family:var(--display);font-weight:800;font-size:19px;letter-spacing:-.02em}
.glyph{width:26px;height:26px;border-radius:7px;position:relative;background:var(--panel2);border:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:2px;padding:4px;flex:none}
.glyph span{border-radius:2px;background:var(--dim)}
.glyph span:first-child{background:var(--amber)}
.nav-links{display:flex;gap:30px;align-items:center;font-size:14px;color:var(--mut)}
.nav-links a{transition:color .2s} .nav-links a:hover{color:var(--ink)}
.nav-links a.here{color:var(--ink)}
.nav-cta{font-family:var(--mono);font-size:12.5px;color:var(--bg);background:var(--amber);padding:8px 15px;border-radius:8px;font-weight:700;transition:transform .15s,box-shadow .2s}
.nav-cta:hover{transform:translateY(-1px);box-shadow:0 8px 26px rgba(255,178,62,.3)}
.nav-right{display:flex;gap:12px;align-items:center}
.nav-login{font-family:var(--mono);font-size:12.5px;color:var(--ink);border:1px solid var(--line);padding:8px 15px;border-radius:8px;transition:border-color .2s,color .2s}
.nav-login:hover{border-color:var(--amber);color:var(--amber)}
@media(max-width:860px){.nav-links{display:none}}

/* ── BUTTONS ── */
.btn{font-family:var(--mono);font-weight:700;font-size:13.5px;padding:13px 22px;border-radius:10px;transition:transform .15s,box-shadow .2s,background .2s;display:inline-block}
.btn-p{background:var(--amber);color:#1a1206} .btn-p:hover{transform:translateY(-2px);box-shadow:0 12px 34px rgba(255,178,62,.32)}
.btn-s{border:1px solid var(--line);color:var(--ink);background:var(--panel)} .btn-s:hover{border-color:var(--amber);color:var(--amber)}
.cta-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap}

/* ── FOOTER ── */
footer{border-top:1px solid var(--line);padding:44px 0 40px;margin-top:60px;color:var(--dim)}
.foot{display:grid;grid-template-columns:1.7fr 1fr 1fr 1fr;gap:32px;align-items:start;font-size:13.5px}
.foot-brand .brand{font-size:16px;margin-bottom:12px}
.foot-brand .fdesc{color:var(--dim);font-family:var(--mono);font-size:11.5px;line-height:1.7;max-width:290px}
.foot-col h4{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);font-weight:500;margin-bottom:13px}
.foot-col a{display:block;color:var(--dim);padding:4px 0;transition:color .2s}
.foot-col a:hover{color:var(--amber)}
.foot-base{border-top:1px solid var(--line);margin-top:34px;padding-top:22px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-family:var(--mono);font-size:11.5px;color:var(--dim)}
@media(max-width:860px){.foot{grid-template-columns:1fr 1fr 1fr}.foot-brand{grid-column:1/-1;margin-bottom:8px}}
@media(max-width:560px){.foot{grid-template-columns:1fr 1fr;gap:26px}}

/* ── REVEAL ── */
.rv{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}
.rv.in{opacity:1;transform:none}
.stagger>*{opacity:0;transform:translateY(14px);animation:rise .7s forwards}
@keyframes rise{to{opacity:1;transform:none}}

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