/* ============================================================
   Quod Architects — site.css
   Shared base + chrome (tokens, typography, nav, footer, WhatsApp
   bar, preloader, scroll progress, reveal animations).
   Loaded by every page. Page-specific layout lives in page.css
   or in the page's own <style> block.
   ============================================================ */

/* ---------- Typography: Italiana + Jost (Google Fonts) ----------
   Display: Italiana (sharp Didone serif). Body: Jost (geometric sans).
   Requested by Quod Architects, 15 Jun 2026.
*/
@import url('https://fonts.googleapis.com/css2?family=Italiana&family=Jost:ital,wght@0,300;0,400;0,500;1,400&display=swap');

/* ---------- Legacy self-hosted pair (kept for the font switcher) ----------
   Display: Boska (Indian Type Foundry, neo-classical editorial serif)
   Body:    Switzer (Pangram Pangram, refined neutral grotesque)
   Both free for commercial use, served from /assets/fonts/.
*/
@font-face{font-family:'Boska';font-style:normal;font-weight:300;font-display:swap;src:url('/assets/fonts/boska-300.woff2') format('woff2')}
@font-face{font-family:'Boska';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/boska-400.woff2') format('woff2')}
@font-face{font-family:'Boska';font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/boska-500.woff2') format('woff2')}
@font-face{font-family:'Boska';font-style:normal;font-weight:700;font-display:swap;src:url('/assets/fonts/boska-700.woff2') format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:300;font-display:swap;src:url('/assets/fonts/switzer-300.woff2') format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/switzer-400.woff2') format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/switzer-500.woff2') format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:600;font-display:swap;src:url('/assets/fonts/switzer-600.woff2') format('woff2')}

*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}

:root{
  --ink:#0c0b09;--paper:#f6f3ee;--cream:#eae5dc;--warm-white:#faf8f5;
  --accent:#9a8568;--gold:#c2a56e;--white:#fff;
  --gray-200:#e5e0d8;--gray-400:#a9a299;--gray-500:#8a8379;--gray-600:#6b655c;--gray-800:#2e2b27;
  --display:'Italiana','Georgia',serif;
  --body:'Jost','Helvetica Neue',sans-serif;
  --ease-out-expo:cubic-bezier(0.16,1,0.3,1);
  --ease-out-quart:cubic-bezier(0.25,1,0.5,1);
}

html{font-size:16px;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,0.12) transparent;scroll-behavior:smooth}
body{font-family:var(--body);color:var(--ink);background:var(--paper);overflow-x:hidden;-webkit-font-smoothing:antialiased;line-height:1.6;position:relative;width:100%}
@media(max-width:768px){html{scrollbar-width:none}html::-webkit-scrollbar{display:none}}
img{display:block;max-width:100%;height:auto}
a{text-decoration:none;color:inherit}

/* Grain overlay */
body::before{content:'';position:fixed;inset:0;z-index:9999;pointer-events:none;opacity:0.022;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:180px}

/* Skip link */
.skip-link{position:absolute;left:-9999px;top:0;z-index:10002;background:var(--ink);color:var(--white);padding:12px 20px;font-size:0.82rem;letter-spacing:0.08em}
.skip-link:focus{left:8px;top:8px}

/* Typography scale */
.t-display-xl{font-family:var(--display);font-weight:400;font-size:clamp(3.2rem,8vw,7.5rem);line-height:1.05;letter-spacing:-0.03em}
.t-display-lg{font-family:var(--display);font-weight:400;font-size:clamp(2.4rem,5vw,4.5rem);line-height:1.05;letter-spacing:-0.025em}
.t-display-md{font-family:var(--display);font-weight:400;font-size:clamp(1.8rem,3.2vw,3rem);line-height:1.15;letter-spacing:-0.02em}
.t-display-sm{font-family:var(--display);font-weight:400;font-size:clamp(1.4rem,2.4vw,2rem);line-height:1.2;letter-spacing:-0.015em}
.t-label{font-family:var(--body);font-size:0.82rem;font-weight:500;letter-spacing:0.22em;text-transform:uppercase}
.t-body{font-family:var(--body);font-size:clamp(1rem,1.15vw,1.15rem);font-weight:300;line-height:1.85;color:var(--gray-600)}
.t-body-lg{font-family:var(--body);font-size:clamp(1.1rem,1.35vw,1.3rem);font-weight:300;line-height:1.9;color:var(--gray-600)}

/* Focus-visible: keyboard only */
:focus{outline:none}
:focus-visible{outline:2px solid currentColor;outline-offset:4px;border-radius:2px}
.btn-submit:focus-visible,.wa-bar-btn:focus-visible{outline-color:var(--gold);outline-offset:3px}
.form-field input:focus-visible,.form-field textarea:focus-visible{outline:none;border-bottom-color:var(--accent);border-bottom-width:2px}

/* Layout */
.container{max-width:1400px;margin:0 auto;padding:0 clamp(24px,4vw,60px)}
.container-narrow{max-width:860px;margin:0 auto;padding:0 clamp(24px,4vw,60px)}
.container-wide{max-width:1640px;margin:0 auto;padding:0 clamp(24px,4vw,60px)}

/* Scroll-reveal */
[data-reveal]{opacity:0;transform:translateY(48px);transition:opacity 1s var(--ease-out-expo),transform 1s var(--ease-out-expo)}
[data-reveal].is-visible{opacity:1;transform:translateY(0)}
[data-reveal="0.1"].is-visible{transition-delay:0.1s}
[data-reveal="0.12"].is-visible{transition-delay:0.12s}
[data-reveal="0.15"].is-visible{transition-delay:0.15s}
[data-reveal="0.2"].is-visible{transition-delay:0.2s}
[data-reveal="0.24"].is-visible{transition-delay:0.24s}
[data-reveal="0.3"].is-visible{transition-delay:0.3s}
[data-reveal="0.36"].is-visible{transition-delay:0.36s}
[data-reveal="0.4"].is-visible{transition-delay:0.4s}

.line-reveal{overflow:hidden;display:block;padding-bottom:0.1em}
.line-reveal-inner{display:block;transform:translateY(110%);animation:lineUp 1.1s var(--ease-out-expo) forwards}
.line-reveal:nth-child(2) .line-reveal-inner{animation-delay:0.12s}
.line-reveal:nth-child(3) .line-reveal-inner{animation-delay:0.24s}
@keyframes lineUp{from{transform:translateY(110%)}to{transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}

.img-reveal{overflow:hidden}
.img-reveal img{transform:scale(1.12);transition:transform 1.4s var(--ease-out-expo)}
.img-reveal.is-visible img{transform:scale(1)}

/* ---------- Navigation ---------- */
/* Beige from load on every page so the black logo always reads clearly */
.nav{position:fixed;top:0;left:0;right:0;z-index:1000;padding:24px 0;padding-top:calc(24px + env(safe-area-inset-top,0px));background:rgba(246,243,238,0.92);backdrop-filter:blur(24px) saturate(1.2);-webkit-backdrop-filter:blur(24px) saturate(1.2);border-bottom:1px solid transparent;transition:background 0.5s var(--ease-out-quart),padding 0.5s var(--ease-out-quart),border-color 0.5s;mix-blend-mode:normal}
.nav.is-solid{mix-blend-mode:normal;background:rgba(246,243,238,0.92);backdrop-filter:blur(24px) saturate(1.2);-webkit-backdrop-filter:blur(24px) saturate(1.2);padding:16px 0;padding-top:calc(16px + env(safe-area-inset-top,0px));border-bottom:1px solid rgba(0,0,0,0.05)}
/* Pages without a dark hero force the solid treatment from load */
body.solid-nav .nav{mix-blend-mode:normal;background:rgba(246,243,238,0.92);backdrop-filter:blur(24px) saturate(1.2);-webkit-backdrop-filter:blur(24px) saturate(1.2);padding:16px 0;padding-top:calc(16px + env(safe-area-inset-top,0px));border-bottom:1px solid rgba(0,0,0,0.05)}
.nav-inner{display:flex;align-items:center;justify-content:space-between;gap:24px}
.nav-logo{position:relative;display:inline-block;line-height:0}
.nav-logo img{height:38px;transition:opacity 0.4s}
.nav-logo .logo-light{opacity:0}
.nav-logo .logo-dark{position:absolute;top:0;left:0;opacity:1}
.nav.is-solid .nav-logo .logo-light,body.solid-nav .nav-logo .logo-light{opacity:0}
.nav.is-solid .nav-logo .logo-dark,body.solid-nav .nav-logo .logo-dark{opacity:1}
.nav-links{display:flex;align-items:center;gap:40px;list-style:none}
.nav-links a{color:var(--ink);font-size:0.78rem;font-weight:400;letter-spacing:0.15em;text-transform:uppercase;transition:opacity 0.3s,color 0.3s}
.nav.is-solid .nav-links a,body.solid-nav .nav-links a{color:var(--ink)}
.nav-links a:hover{opacity:0.55}
.nav-links a.is-active{opacity:1;border-bottom:1px solid currentColor;padding-bottom:3px}
.nav-links a.nav-cta-link{padding:10px 28px;border:1px solid rgba(0,0,0,0.3);transition:background 0.4s var(--ease-out-quart),color 0.4s var(--ease-out-quart),border-color 0.4s var(--ease-out-quart)}
.nav-links a.nav-cta-link.is-active{padding-bottom:10px;border-bottom-width:1px}
.nav.is-solid .nav-links a.nav-cta-link,body.solid-nav .nav-links a.nav-cta-link{border-color:var(--ink)}
.nav-links a.nav-cta-link:hover{background:var(--ink);color:var(--white);opacity:1}
.nav.is-solid .nav-links a.nav-cta-link:hover,body.solid-nav .nav-links a.nav-cta-link:hover{background:var(--ink);color:var(--white)}
.nav-toggle{display:none;background:none;border:none;cursor:pointer;padding:10px;z-index:10;min-width:44px;min-height:44px}
.nav-toggle-bar{display:block;width:26px;height:1.5px;background:var(--ink);margin:6px 0;transition:background 0.4s,transform 0.4s,opacity 0.3s}
.nav.is-solid .nav-toggle-bar,body.solid-nav .nav-toggle-bar{background:var(--ink)}
@media(max-width:960px){
  .nav-links{display:none}
  .nav-toggle{display:block}
  .nav-links.is-open{display:flex;flex-direction:column;position:fixed;inset:0;background:var(--ink);justify-content:center;align-items:center;gap:32px;z-index:5}
  .nav-links.is-open a{color:var(--white) !important;font-size:1rem;opacity:1}
  .nav-links.is-open a.nav-cta-link{border-color:rgba(255,255,255,0.4)}
  .nav-toggle.is-open .nav-toggle-bar:nth-child(1){transform:translateY(7.5px) rotate(45deg)}
  .nav-toggle.is-open .nav-toggle-bar:nth-child(2){opacity:0}
  .nav-toggle.is-open .nav-toggle-bar:nth-child(3){transform:translateY(-7.5px) rotate(-45deg)}
  .nav-toggle.is-open .nav-toggle-bar{background:var(--white)}
  /* Menu open: drop the difference blend so the dark overlay + white links render true */
  .nav:has(.nav-links.is-open){mix-blend-mode:normal;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border-bottom-color:transparent}
  .nav:has(.nav-links.is-open) .nav-logo .logo-light{opacity:1}
  .nav:has(.nav-links.is-open) .nav-logo .logo-dark{opacity:0}
  .nav:has(.nav-links.is-open) .nav-toggle-bar{background:var(--white)}
}

/* ---------- Footer ---------- */
.footer{background:var(--ink);color:rgba(255,255,255,0.6);padding:clamp(64px,9vh,104px) 0 56px;border-top:1px solid rgba(255,255,255,0.05)}
.footer-top{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:clamp(32px,5vw,72px);padding-bottom:clamp(48px,7vh,80px);border-bottom:1px solid rgba(255,255,255,0.07)}
.footer-brand img{height:40px;margin-bottom:24px}
.footer-brand p{font-size:0.92rem;font-weight:300;line-height:1.8;max-width:34ch;color:rgba(255,255,255,0.55)}
.footer-col h4{font-family:var(--body);font-size:0.72rem;font-weight:500;letter-spacing:0.2em;text-transform:uppercase;color:var(--gold);margin-bottom:20px}
.footer-col ul{list-style:none;display:flex;flex-direction:column;gap:12px}
.footer-col a,.footer-col address{font-size:0.92rem;font-weight:300;color:rgba(255,255,255,0.6);font-style:normal;line-height:1.7;transition:color 0.3s}
.footer-col a:hover{color:var(--white)}
.footer-bottom{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:20px;padding-top:40px}
.footer-copy{font-size:0.82rem;color:rgba(255,255,255,0.45);font-weight:300;display:flex;flex-direction:column;gap:6px}
.footer-ai{font-size:0.72rem;letter-spacing:0.04em;color:rgba(255,255,255,0.32)}
.footer-ai a{color:rgba(255,255,255,0.4);border-bottom:1px solid rgba(255,255,255,0.12);transition:color 0.3s,border-color 0.3s}
.footer-ai a:hover{color:var(--gold);border-color:var(--gold)}
.footer-copy a:hover{color:var(--white)}
.footer-social{display:flex;gap:14px}
.footer-social a{width:44px;height:44px;border:1px solid rgba(255,255,255,0.12);border-radius:50%;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,0.55);transition:border-color 0.3s,color 0.3s,background 0.3s}
.footer-social a:hover{border-color:var(--gold);color:var(--gold);background:rgba(194,165,110,0.04)}
.footer-social svg{width:16px;height:16px;fill:currentColor}
@media(max-width:860px){.footer-top{grid-template-columns:1fr 1fr;gap:40px}}
@media(max-width:560px){.footer-top{grid-template-columns:1fr}.footer-bottom{flex-direction:column;text-align:center}}

/* ---------- WhatsApp sticky bar ---------- */
.wa-bar{position:fixed;bottom:0;left:0;right:0;z-index:900;background:rgba(12,11,9,0.94);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);padding:14px 0;padding-bottom:calc(14px + env(safe-area-inset-bottom,0px));transform:translateY(100%);transition:transform 0.5s var(--ease-out-quart);border-top:1px solid rgba(255,255,255,0.06);will-change:transform}
.wa-bar.is-visible{transform:translateY(0)}
.wa-bar-inner{max-width:1640px;margin:0 auto;padding:0 clamp(24px,4vw,60px);display:flex;align-items:center;justify-content:space-between;gap:16px}
.wa-bar-text{font-size:0.92rem;color:rgba(255,255,255,0.6);font-weight:300}
.wa-bar-text strong{color:var(--white);font-weight:400}
.wa-bar-btn{display:inline-flex;align-items:center;gap:10px;background:#25D366;color:var(--white);padding:10px 28px;border-radius:4px;font-size:0.82rem;font-weight:500;letter-spacing:0.06em;transition:background 0.3s;white-space:nowrap}
.wa-bar-btn:hover{background:#1ebe5a}
.wa-bar-btn svg{width:18px;height:18px;fill:currentColor;flex-shrink:0}
@media(max-width:600px){.wa-bar-inner{flex-direction:column;text-align:center;gap:10px}.wa-bar-text{font-size:0.85rem}}

/* ---------- Scroll progress ---------- */
.scroll-progress{position:fixed;top:0;left:0;width:0%;height:2px;background:var(--gold);z-index:10000;transition:width 0.1s linear}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:0.01ms !important;animation-delay:0ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;scroll-behavior:auto !important}
  [data-reveal],.line-reveal-inner,.img-reveal img,.hero-eyebrow,.hero-sub{opacity:1 !important;transform:none !important}
  .hero-media img{transform:scale(1) !important;animation:none !important}
  .img-reveal img{transform:scale(1) !important}
  [data-parallax]{transform:none !important}
  .scroll-line::after{animation:none !important;opacity:0}
}
