
  :root{
    --ink:#08172E; --ink-2:#0C2247; --ink-3:#123059;
    --azure:#1E9BE0; --azure-2:#54BCF3;
    --flame:#F26522; --flame-2:#FF8244;
    --paper:#F3F6FB; --paper-2:#E7EEF7;
    --mist:#9DB2D2; --mist-2:#C6D3E7;
    --line:rgba(255,255,255,.10); --line-dk:rgba(8,23,46,.10);
    --white:#fff;
    --display:'Space Grotesk',system-ui,sans-serif;
    --body:'Inter',system-ui,sans-serif;
    --script:'Caveat',cursive;
    --wrap:1180px;
    --ac-nodots:url("/assets/media/aztec-mark-nodots.png");
    --ac:url("/assets/media/aztec-mark.png");
  }
  *{ box-sizing:border-box; }
  html{ scroll-behavior:smooth; }
  body{
    margin:0; background:var(--ink); color:var(--white);
    font-family:var(--body); font-size:16px; line-height:1.6;
    -webkit-font-smoothing:antialiased; overflow-x:hidden;
  }
  img{ max-width:100%; display:block; }
  a{ color:inherit; text-decoration:none; }
  .wrap{ max-width:var(--wrap); margin:0 auto; padding:0 28px; }
  .eyebrow{
    font-family:var(--body); font-size:12px; font-weight:700; letter-spacing:.22em;
    text-transform:uppercase; color:var(--azure-2);
  }
  .eyebrow.dark{ color:var(--flame); }
  h1,h2,h3{ font-family:var(--display); font-weight:700; line-height:1.02; letter-spacing:-.02em; margin:0; }
  .flame{ color:var(--flame); }
  .azure{ color:var(--azure); }

  /* ---------- buttons ---------- */
  .btn{
    display:inline-flex; align-items:center; gap:.55em; font-family:var(--body);
    font-weight:600; font-size:15px; padding:14px 22px; border-radius:100px;
    border:1px solid transparent; cursor:pointer; transition:transform .18s, background .18s, box-shadow .18s;
  }
  .btn:hover{ transform:translateY(-2px); }
  .btn-flame{ background:var(--flame); color:#fff; box-shadow:0 10px 30px -10px rgba(242,101,34,.6); }
  .btn-flame:hover{ background:var(--flame-2); }
  .btn-ghost{ background:transparent; color:#fff; border-color:rgba(255,255,255,.28); }
  .btn-ghost:hover{ border-color:#fff; background:rgba(255,255,255,.06); }
  .btn .arw{ transition:transform .2s; }
  .btn:hover .arw{ transform:translateX(4px); }

  /* ---------- AC monogram ---------- */
  .mark{ display:block; }
  .mark .stroke{ fill:none; stroke-linecap:round; stroke-linejoin:round; }
  .mark .s-a{ stroke:var(--azure); }
  .mark .s-c{ stroke:var(--flame); }
  .mark .d-a{ fill:var(--azure); }
  .mark .d-c{ fill:var(--flame); }
  .mark--hero .stroke{ stroke-dasharray:1; stroke-dashoffset:1; }
  .mark--hero.play .s-c{ animation:draw 1s .15s ease forwards; }
  .mark--hero.play .s-a{ animation:draw .9s .55s ease forwards; }
  .mark--hero.play .s-x{ animation:draw .5s 1.2s ease forwards; }
  .mark--hero .dot{ transform:scale(0); transform-origin:center; }
  .mark--hero.play .d-a{ animation:pop .5s 1.3s cubic-bezier(.2,1.4,.5,1) forwards; }
  .mark--hero.play .d-c{ animation:pop .5s 1.5s cubic-bezier(.2,1.4,.5,1) forwards, spark 2.6s 2s ease-in-out infinite; }
  @keyframes draw{ to{ stroke-dashoffset:0; } }
  @keyframes pop{ to{ transform:scale(1); } }
  @keyframes spark{ 0%,100%{ opacity:1; } 50%{ opacity:.35; } }

  /* ---------- preloader (logo load screen, plays every reload) ---------- */
  #preloader{
    position:fixed; inset:0; z-index:200; display:grid; place-items:center;
    background:var(--ink); transition:opacity .4s ease, visibility .4s ease;
  }
  #preloader::before{
    content:""; position:absolute; inset:0; pointer-events:none;
    background:radial-gradient(120% 90% at 50% 32%, rgba(30,155,224,.15), transparent 60%),
               radial-gradient(90% 80% at 50% 100%, rgba(242,101,34,.10), transparent 60%);
  }
  #preloader.done{ opacity:0; visibility:hidden; pointer-events:none; }
  /* multi-page nav: skip the preloader entirely when arriving via an in-site
     link click (see skipLoaderScript() — set before body paints, so this
     never flashes). Still shows on the very first visit / an actual reload. */
  html.skip-loader #preloader{ display:none; }
  .pl-inner{ position:relative; z-index:1; display:flex; flex-direction:column; align-items:center; gap:26px; }
  .pl-mark{ width:116px; height:116px; filter:drop-shadow(0 18px 46px rgba(30,155,224,.32)); }
  .pl-mark .stroke{ fill:none; stroke-linecap:round; stroke-linejoin:round; stroke-dasharray:1; stroke-dashoffset:1; }
  .pl-mark .s-c{ stroke:var(--flame); animation:plDraw .82s .10s ease forwards; }
  .pl-mark .s-a{ stroke:var(--azure); animation:plDraw .78s .52s ease forwards; }
  .pl-mark .s-x{ stroke:var(--azure); animation:plDraw .42s 1.08s ease forwards; }
  .pl-mark .dot{ transform:scale(0); transform-origin:center; }
  .pl-mark .d-a{ fill:var(--azure); animation:plPop .5s 1.22s cubic-bezier(.2,1.4,.5,1) forwards; }
  .pl-mark .d-c{ fill:var(--flame); animation:plPop .5s 1.42s cubic-bezier(.2,1.4,.5,1) forwards, spark 2.6s 1.95s ease-in-out infinite; }
  @keyframes plDraw{ to{ stroke-dashoffset:0; } }
  @keyframes plPop{ to{ transform:scale(1); } }
  .pl-word{ font-family:var(--display); font-weight:700; font-size:15px; letter-spacing:.42em; text-indent:.42em; color:#fff; text-align:center; opacity:0; transform:translateY(8px); animation:plUp .7s .82s ease forwards; }
  .pl-word small{ display:block; font-family:var(--body); font-weight:600; font-size:8.5px; letter-spacing:.34em; text-indent:.34em; color:var(--mist); margin-top:7px; }
  .pl-bar{ width:172px; height:2px; border-radius:2px; background:rgba(255,255,255,.12); overflow:hidden; opacity:0; animation:plUp .6s 1s ease forwards; }
  /* Width is driven from JS (preloaderScript's tickBar), fed by the SAME
     progress value the logo canvas uses (window.__acDrawProgress) — not an
     independent fixed-duration CSS animation. That used to finish filling at
     ~2.5s while the real logo draw + dot travel kept going for ~5s (Udin:
     "loading bar udah beres duluan, tp dot masih jalan") — this way the bar
     can never disagree with what the dot is actually doing. */
  .pl-bar i{ display:block; height:100%; width:0%; background:linear-gradient(90deg,var(--azure),var(--flame)); transition:width .12s linear; }
  @keyframes plUp{ to{ opacity:1; transform:none; } }
  @media (prefers-reduced-motion:reduce){
    .pl-mark .stroke{ stroke-dashoffset:0; animation:none; }
    .pl-mark .dot{ transform:scale(1); animation:none; }
    .pl-word,.pl-bar,.pl-live{ opacity:1; transform:none; animation:none; }
    .pl-bar i{ transition:none; }
  }

  /* ---------- real AC logo ---------- */
  .ac-mark{ background-image:var(--ac); background-repeat:no-repeat; background-position:center; background-size:contain; display:block; }
  .brand .brand-mark{ width:54px; height:34px; }

  /* canvas draws A+C from empty on loop — a glowing pen-ball TRAVELS along the
     path drawing each letter, then STOPS at the end and just sits there as the
     "dot" (pen becomes the dot at rest). Udin: "dot nya jangan diem, bergerak
     seolah menggambar huruf, baru berenti" — no separate always-static dot
     elements anymore; the moving ball IS the dot. PAD gives the ball breathing
     room at the canvas edges (dot positions sit close to the corners). */
  .ac-live{ position:relative; display:block; isolation:isolate; aspect-ratio:612/419; }
  .ac-canvas{ position:absolute; inset:0; width:100%; height:100%; display:block; }
  .hero-mark-wrap{ position:relative; z-index:2; }
  .hero-mark-wrap .ac-live{ width:min(400px,78vw); filter:drop-shadow(0 24px 60px rgba(30,155,224,.30));
    animation:heroIn .9s .2s ease both; }
  @keyframes heroIn{ from{ opacity:0; transform:translateY(14px) scale(.96); } to{ opacity:1; transform:none; } }
  .pl-live{ width:202px; opacity:0; transform:scale(.92); animation:plLogoIn .7s .1s ease forwards; }
  @keyframes plLogoIn{ to{ opacity:1; transform:scale(1); } }

  /* ---------- nav ---------- */
  header.nav{ position:fixed; inset:0 0 auto 0; z-index:60; transition:background .3s, border-color .3s; border-bottom:1px solid transparent; }
  header.nav.scrolled{ background:rgba(8,23,46,.82); backdrop-filter:blur(12px); border-color:var(--line); }
  .nav-row{ display:flex; align-items:center; justify-content:space-between; height:74px; }
  .brand{ display:flex; align-items:center; gap:11px; }
  .brand .mark{ width:38px; height:38px; }
  .brand-name{ font-family:var(--display); font-weight:700; font-size:19px; letter-spacing:.02em; }
  .brand-name small{ display:block; font-family:var(--body); font-weight:600; font-size:9px; letter-spacing:.28em; color:var(--mist); margin-top:1px; }
  .nav-links{ display:flex; gap:30px; align-items:center; }
  .nav-links a{ font-size:14.5px; font-weight:500; color:var(--mist-2); transition:color .15s; }
  .nav-links a:hover{ color:#fff; }
  .nav-links a.active{ color:#fff; }
  .nav-right{ display:flex; align-items:center; gap:18px; }
  .nav-toggle{ display:none; background:none; border:0; cursor:pointer; padding:8px; }
  .nav-toggle span{ display:block; width:22px; height:2px; background:#fff; margin:4px 0; transition:.2s; }

  /* ---------- hero ---------- */
  .hero{ position:relative; min-height:100svh; display:flex; align-items:flex-start; padding:88px 0 40px; overflow:hidden; }
  .hero::after{ content:""; position:absolute; inset:0; z-index:1;
    background:radial-gradient(120% 90% at 78% 12%, rgba(30,155,224,.16), transparent 55%),
               radial-gradient(90% 80% at 10% 100%, rgba(242,101,34,.12), transparent 55%);
    pointer-events:none; }
  #net{ position:absolute; inset:0; z-index:0; }
  .hero .wrap{ position:relative; z-index:2; width:100%; }
  /* Same "connection constellation" canvas + content-above-it stacking as
     .hero, generalised so every page's opening section can host it (Udin:
     "animasi background di home, munculin di semua menu, biar keren") —
     #net is already ID-generic; this just gives a non-hero section the
     positioning .hero already had built in. */
  .bg-net{ position:relative; overflow:hidden; }
  .bg-net > .wrap{ position:relative; z-index:2; }
  /* Left-text/right-logo split. The grid holds ONLY the headline + logo
     (lead/CTA sit below it, outside the grid, under the text column's own
     width via .hero-lead's max-width) — so align-items:center centers the
     logo against the headline's own line specifically, not against the much
     taller headline+lead+CTA stack (which used to push the logo too low). */
  .hero-grid{ display:grid; grid-template-columns:1.15fr .85fr; gap:40px; align-items:center; }
  .hero h1{ margin:0; font-size:clamp(2.9rem,7.2vw,6rem); text-transform:uppercase; }
  .hero h1 .ln{ display:block; }
  .hero-lead{ margin:28px 0 0; max-width:520px; color:var(--mist-2); font-size:clamp(1rem,1.4vw,1.15rem); }
  .hero-cta{ display:flex; gap:14px; flex-wrap:wrap; margin-top:34px; }
  .hero-mark-wrap{ display:flex; justify-content:center; align-items:center; }
  .hero .services-row{ display:flex; flex-wrap:wrap; gap:8px 0; margin-top:56px; border-top:1px solid var(--line); padding-top:22px; }
  .hero .services-row span{ font-family:var(--display); font-weight:500; font-size:clamp(.8rem,1.4vw,1rem); letter-spacing:.02em; color:var(--mist-2); padding-right:22px; margin-right:22px; position:relative; }
  .hero .services-row span+span::before{ content:""; position:absolute; left:-1px; top:50%; transform:translateY(-50%); width:2px; height:2px; border-radius:50%; background:var(--flame); }
  .scrollcue{ position:absolute; left:50%; bottom:26px; transform:translateX(-50%); z-index:2; font-size:11px; letter-spacing:.2em; text-transform:uppercase; color:var(--mist); display:flex; flex-direction:column; align-items:center; gap:8px; }
  .scrollcue .bar{ width:1px; height:34px; background:linear-gradient(var(--azure),transparent); animation:cue 1.8s ease-in-out infinite; }
  @keyframes cue{ 0%,100%{ opacity:.3; transform:scaleY(.6); } 50%{ opacity:1; transform:scaleY(1); } }

  /* ---------- clients (logo marquee) ---------- */
  .clients{ background:var(--paper); padding:84px 0 66px; overflow:hidden; }
  .clients-head{ text-align:center; max-width:620px; margin:0 auto 46px; }
  .clients-head .eyebrow{ color:var(--flame); }
  .clients-head h2{ color:var(--ink); font-size:clamp(1.9rem,4vw,2.9rem); text-transform:uppercase; margin-top:14px; }
  .clients-head p{ color:#54657e; margin:16px 0 0; font-size:1.02rem; }
  .logo-marquee{ display:flex; flex-direction:column; gap:24px;
    -webkit-mask:linear-gradient(90deg,transparent,#000 9%,#000 91%,transparent);
            mask:linear-gradient(90deg,transparent,#000 9%,#000 91%,transparent); }
  .lm-row{ overflow:hidden; }
  .lm-track{ display:flex; gap:34px; width:max-content; align-items:center; animation:scrollx 44s linear infinite; }
  .lm-track.lm-rev{ animation-direction:reverse; }
  .logo-marquee:hover .lm-track{ animation-play-state:paused; }
  .lm-logo{ height:58px; width:auto; display:block; object-fit:contain; border-radius:11px; background:#fff;
    box-shadow:0 4px 16px rgba(20,44,78,.08); opacity:.94; transition:transform .25s, opacity .25s, box-shadow .25s; }
  .lm-logo:hover{ transform:translateY(-3px); opacity:1; box-shadow:0 10px 24px rgba(20,44,78,.15); }
  /* Track is LM_REPEAT(=6, blocks.js) copies of the row's logo set; scroll exactly one
     copy-width (-100%/6) so the loop tiles seamlessly with no visible seam/gap. */
  @keyframes scrollx{ to{ transform:translateX(calc(-100%/6)); } }
  @media (prefers-reduced-motion:reduce){ .lm-track{ animation:none; } }

  /* ---------- section shell ---------- */
  section{ position:relative; }
  .sec{ padding:104px 0; }
  .sec-head{ max-width:640px; margin-bottom:52px; }
  .sec-head h2{ font-size:clamp(2rem,4.4vw,3.3rem); margin-top:16px; text-transform:uppercase; }
  .sec-head p{ color:var(--mist-2); margin:18px 0 0; font-size:1.05rem; }
  .on-paper{ background:var(--paper); color:var(--ink); }
  .on-paper .sec-head p{ color:#4a5b74; }
  .on-paper .eyebrow{ color:var(--flame); }

  /* ---------- approach pillars ---------- */
  .pillars{ display:grid; grid-template-columns:repeat(4,1fr); gap:0; border:1px solid var(--line); border-radius:18px; overflow:hidden; }
  .pillar{ padding:34px 28px; border-right:1px solid var(--line); transition:background .2s; }
  .pillar:last-child{ border-right:0; }
  .pillar:hover{ background:rgba(30,155,224,.06); }
  .pillar .pico{ width:44px; height:44px; margin-bottom:20px; color:var(--flame); }
  .pillar h3{ font-size:1.35rem; letter-spacing:.02em; text-transform:uppercase; }
  .pillar p{ color:var(--mist); font-size:.95rem; margin:10px 0 0; }
  .pillar .idx{ font-family:var(--display); font-size:.8rem; color:var(--azure); letter-spacing:.1em; display:block; margin-bottom:14px; }

  /* ---------- moments ---------- */
  .moments-grid{ display:grid; grid-template-columns:1fr 1fr; gap:60px; align-items:center; }
  .flow{ display:flex; flex-direction:column; gap:0; }
  .flow-step{ display:flex; align-items:flex-start; gap:20px; padding:22px 0; }
  .flow-step .fnum{ flex:none; width:52px; height:52px; border-radius:14px; display:grid; place-items:center; font-family:var(--display); font-weight:700; font-size:1.1rem; background:#fff; color:var(--ink); box-shadow:0 8px 22px -12px rgba(8,23,46,.4);
    transition:background-color .4s ease, color .4s ease, box-shadow .4s ease, transform .4s cubic-bezier(.2,1.4,.5,1); }
  /* flowScript() cycles this through See -> Feel -> Remember -> repeat
     (Udin: "kotak ini bewarna orange menyala berurutan ... berulang"). */
  .flow-step .fnum.fnum-on{ background:var(--flame); color:#fff; box-shadow:0 0 0 6px rgba(242,101,34,.18), 0 10px 26px -10px rgba(242,101,34,.5); transform:scale(1.06); }
  @media (prefers-reduced-motion:reduce){ .flow-step .fnum{ transition:none; } }
  .flow-step h3{ font-size:1.3rem; text-transform:uppercase; }
  .flow-step p{ margin:4px 0 0; color:#54657e; }
  .flow-line{ width:2px; height:20px; margin-left:25px; background:var(--line-dk); }
  .moment-quote{ background:var(--ink); color:#fff; border-radius:22px; padding:44px 40px; position:relative; overflow:hidden; }
  .moment-quote p{ font-family:var(--display); font-weight:500; font-size:1.5rem; line-height:1.35; margin:22px 0 0; }
  .moment-quote .qh{ font-size:2rem; font-family:var(--display); font-weight:700; text-transform:uppercase; line-height:1.05; }
  .moment-quote .qh .flame{ display:block; }

  /* ---------- services ---------- */
  .svc-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }
  .svc{ background:#fff; border:1px solid var(--line-dk); border-radius:18px; padding:30px 26px; transition:transform .2s, box-shadow .2s, border-color .2s; position:relative; overflow:hidden; }
  .svc::before{ content:""; position:absolute; left:0; top:0; height:100%; width:4px; background:var(--azure); transform:scaleY(0); transform-origin:top; transition:transform .25s; }
  .svc:hover{ transform:translateY(-4px); box-shadow:0 26px 50px -30px rgba(8,23,46,.4); border-color:transparent; }
  .svc:hover::before{ transform:scaleY(1); }
  .svc .sidx{ font-family:var(--display); font-weight:700; font-size:.85rem; color:var(--flame); letter-spacing:.08em; }
  .svc h3{ font-size:1.28rem; margin:14px 0 12px; color:var(--ink); text-transform:uppercase; }
  .svc ul{ margin:0; padding:0; list-style:none; }
  .svc li{ color:#54657e; font-size:.92rem; padding:5px 0 5px 18px; position:relative; }
  .svc li::before{ content:""; position:absolute; left:0; top:12px; width:6px; height:6px; border-radius:2px; background:var(--azure); }

  /* ---------- stats band ---------- */
  .stats{ background:linear-gradient(120deg,var(--ink) 0%,var(--ink-3) 100%); padding:70px 0; }
  .stats-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:24px; }
  .stat{ text-align:center; border-right:1px solid var(--line); }
  .stat:last-child{ border-right:0; }
  .stat .num{ font-family:var(--display); font-weight:700; font-size:clamp(2.6rem,5vw,3.6rem); line-height:1; background:linear-gradient(120deg,#fff,var(--azure-2)); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
  .stat .lbl{ margin-top:12px; font-size:.9rem; letter-spacing:.04em; color:var(--mist-2); text-transform:uppercase; }

  /* ---------- why ---------- */
  .why-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:18px; }
  .why{ padding:26px 22px; border-radius:16px; background:rgba(255,255,255,.03); border:1px solid var(--line); transition:background .2s, transform .2s; }
  .why:hover{ background:rgba(30,155,224,.08); transform:translateY(-3px); }
  .why .wico{ width:30px; height:30px; color:var(--flame); margin-bottom:16px; }
  .why h3{ font-size:1.02rem; text-transform:uppercase; letter-spacing:.01em; }
  .why p{ color:var(--mist); font-size:.88rem; margin:8px 0 0; }

  /* ---------- about / facts ---------- */
  .facts-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:18px; margin-bottom:44px; }
  .fact{ background:#fff; border:1px solid var(--line-dk); border-radius:16px; padding:24px 22px; }
  .fact .flbl{ font-size:.72rem; letter-spacing:.08em; text-transform:uppercase; color:var(--flame); font-weight:700; }
  .fact b{ display:block; font-family:var(--display); font-size:1.1rem; color:var(--ink); margin:10px 0 6px; }
  .fact p{ font-size:.86rem; color:#54657e; margin:0; line-height:1.5; }
  .journey{ display:grid; grid-template-columns:repeat(3,1fr); gap:24px; position:relative; margin-bottom:40px; }
  /* journeyScript() positions this via transform:translate(x,y) in JS
     (measured against each .jdot's real position) — left/top:0 is just the
     translate origin, not a visible default position. */
  .jr-ball{ position:absolute; left:0; top:0; width:14px; height:14px; margin:-7px 0 0 -7px; border-radius:50%;
    background:var(--flame); box-shadow:0 0 0 4px rgba(242,101,34,.22), 0 0 14px 2px rgba(242,101,34,.55);
    opacity:0; pointer-events:none; z-index:2; }
  @media (prefers-reduced-motion:reduce){ .jr-ball{ display:none; } .jdot{ opacity:1; transform:none; transition:none; } }
  .journey::before{ content:""; position:absolute; top:11px; left:8%; right:8%; height:2px; background:var(--line-dk); }
  .jnode{ position:relative; text-align:center; }
  /* Hidden until journeyScript()'s travelling ball reaches this node, then
     pops in as the "trace" it leaves behind (Udin: dot muncul dari kiri,
     berhenti di tiap titik, meninggalkan jejak). */
  .jdot{ display:block; width:12px; height:12px; border-radius:50%; background:var(--flame); margin:0 auto 16px; box-shadow:0 0 0 5px #fff; position:relative; z-index:1;
    opacity:0; transform:scale(.3); transition:opacity .25s ease, transform .4s cubic-bezier(.2,1.4,.5,1); }
  .jdot-on{ opacity:1; transform:scale(1); }
  .jnode .jyear{ display:block; font-family:var(--display); font-weight:700; color:var(--azure); font-size:1.1rem; }
  .jnode b{ display:block; color:var(--ink); font-size:.95rem; margin:6px 0 6px; }
  .jnode p{ font-size:.82rem; color:#54657e; margin:0; max-width:26ch; margin-inline:auto; }
  @media (max-width:860px){ .facts-grid{ grid-template-columns:1fr 1fr; } .journey{ grid-template-columns:1fr; } .journey::before{ display:none; } }
  @media (max-width:640px){ .facts-grid{ grid-template-columns:1fr; } }

  /* ---------- work ---------- */
  .work-grid{ display:grid; grid-template-columns:repeat(6,1fr); grid-auto-rows:300px; gap:14px; }
  .work-tile{ border-radius:16px; position:relative; overflow:hidden; display:flex; align-items:flex-end; padding:18px; color:#fff; isolation:isolate; }
  .work-tile::after{ content:""; position:absolute; inset:0; z-index:-1; background:linear-gradient(160deg,var(--tile,#123059),rgba(8,23,46,.9)); transition:transform .4s; }
  .work-tile:hover::after{ transform:scale(1.06); }
  .work-tile .wlogo{ height:32px; width:auto; max-width:120px; object-fit:contain; display:block; margin-bottom:14px;
    background:#fff; border-radius:8px; padding:5px 10px; }
  .work-tile .wbrand{ font-family:var(--display); font-weight:700; font-size:1.15rem; }
  .work-tile .wcat{ font-size:.75rem; color:var(--mist-2); letter-spacing:.06em; text-transform:uppercase; }
  .work-tile .wloc{ font-size:.82rem; color:rgba(255,255,255,.72); margin-top:6px; line-height:1.4; max-width:32ch; }
  .work-tile .wtags{ display:flex; flex-wrap:wrap; gap:6px; margin-top:12px; }
  .work-tile .wtags span{ font-size:.68rem; letter-spacing:.03em; text-transform:uppercase; padding:4px 10px; border-radius:99px; background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.18); }
  .work-tile.big{ grid-column:span 3; grid-row:span 2; }
  .work-tile.wide{ grid-column:span 3; }
  .work-tile.tall{ grid-row:span 2; }
  .work-tile.span2{ grid-column:span 2; }
  .work-tile.has-photos{ cursor:pointer; }
  .work-tile.has-photos:hover{ outline:2px solid rgba(255,255,255,.35); outline-offset:-2px; }
  .work-tile .wview{ margin-top:12px; font-size:.78rem; font-weight:600; color:#fff; opacity:.85; display:inline-flex; align-items:center; gap:5px; }
  .work-tile.has-photos:hover .wview{ opacity:1; text-decoration:underline; }

  /* ---------- work photo lightbox ---------- */
  .work-lightbox{ position:fixed; inset:0; z-index:500; background:rgba(8,23,46,.94); display:none; flex-direction:column;
    padding:60px 40px; overflow-y:auto; }
  .work-lightbox.open{ display:flex; }
  .wl-close{ position:fixed; top:20px; right:24px; width:44px; height:44px; border-radius:50%; border:1px solid rgba(255,255,255,.25);
    background:rgba(255,255,255,.06); color:#fff; font-size:18px; cursor:pointer; z-index:1; }
  .wl-close:hover{ background:rgba(255,255,255,.14); }
  .wl-title{ font-family:var(--display); font-weight:700; font-size:1.6rem; color:#fff; text-transform:uppercase; margin:0 auto 26px; max-width:1180px; width:100%; }
  .wl-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:16px; max-width:1180px; margin:0 auto; width:100%; }
  .wl-grid img{ width:100%; height:220px; object-fit:cover; border-radius:12px; background:#0C2247; }

  /* ---------- CTA ---------- */
  .cta{ position:relative; padding:120px 0; overflow:hidden; background:var(--ink-2); }
  .cta::before{ content:""; position:absolute; inset:0; background:radial-gradient(100% 120% at 85% 15%, rgba(242,101,34,.20), transparent 55%), radial-gradient(90% 90% at 8% 90%, rgba(30,155,224,.18), transparent 55%); }
  .cta .wrap{ position:relative; }
  .cta .eyebrow{ color:var(--azure-2); }
  .cta h2{ font-size:clamp(2.2rem,5.4vw,4.2rem); text-transform:uppercase; margin-top:18px; max-width:16ch; }
  .cta .script{ font-family:var(--script); font-weight:700; font-size:clamp(2.4rem,5vw,3.6rem); color:var(--flame); display:inline-block; margin-top:6px; transform:rotate(-3deg); }
  .cta-foot{ display:flex; flex-wrap:wrap; gap:40px 60px; align-items:flex-end; justify-content:space-between; margin-top:46px; }
  .cta-contact{ display:flex; flex-direction:column; gap:14px; }
  .cta-contact .row{ display:flex; align-items:center; gap:12px; color:var(--mist-2); font-size:.98rem; }
  .cta-contact .row svg{ width:20px; height:20px; color:var(--azure); flex:none; }
  .cta-contact .row b{ color:#fff; font-weight:600; }
  .cta-start{ display:flex; flex-wrap:wrap; gap:12px; margin-bottom:6px; }
  .btn-whatsapp{ background:#25D366; color:#08172E; box-shadow:0 10px 30px -10px rgba(37,211,102,.55); }
  .btn-whatsapp:hover{ background:#22c15e; }

  /* ---------- contact maps ---------- */
  .cta-maps{ display:grid; grid-template-columns:1fr 1fr; gap:20px; margin-top:52px; }
  .map-card{ background:rgba(255,255,255,.04); border:1px solid var(--line); border-radius:16px; padding:16px; }
  .map-label{ font-family:var(--display); font-weight:700; font-size:.85rem; letter-spacing:.04em; text-transform:uppercase; color:var(--azure-2); margin-bottom:10px; }
  .map-frame{ width:100%; height:220px; border:0; border-radius:10px; display:block; filter:grayscale(.15) contrast(1.05); }
  .map-addr{ margin-top:10px; font-size:.85rem; color:var(--mist-2); }
  @media (max-width:700px){ .cta-maps{ grid-template-columns:1fr; } }

  /* ---------- footer ---------- */
  footer.ft{ background:var(--ink); padding:56px 0 40px; border-top:1px solid var(--line); }
  .ft-top{ display:flex; justify-content:space-between; align-items:flex-start; gap:30px; flex-wrap:wrap; }
  .ft-bottom{ margin-top:36px; padding-top:22px; border-top:1px solid var(--line); display:flex; justify-content:space-between; gap:16px; flex-wrap:wrap; color:var(--mist); font-size:12.5px; }
  /* No .ft-top (logo) above it any more — the footer's own top border/padding
     already separates it from the section above, so drop the second
     redundant divider that used to separate the logo row from this row. */
  .ft-bottom-only{ margin-top:0; padding-top:0; border-top:none; }
  .ft-cred{ display:flex; gap:18px; flex-wrap:wrap; }
  .ft-cred span{ display:flex; align-items:center; gap:6px; }
  .ft-cred span::before{ content:""; width:5px; height:5px; border-radius:50%; background:var(--flame); }

  /* ---------- reveal ---------- */
  section[id]{ scroll-margin-top:84px; }
  .js .reveal{ opacity:0; transform:translateY(22px); transition:opacity .7s cubic-bezier(.2,.7,.3,1), transform .7s cubic-bezier(.2,.7,.3,1); }
  .js .reveal.in{ opacity:1; transform:none; }

  /* ---------- responsive ---------- */
  @media (max-width:940px){
    .hero-grid{ grid-template-columns:1fr; }
    .hero-mark-wrap{ order:-1; margin-bottom:8px; }
    .pillars{ grid-template-columns:1fr 1fr; }
    .pillar:nth-child(2n){ border-right:0; }
    .pillar{ border-bottom:1px solid var(--line); }
    .moments-grid{ grid-template-columns:1fr; gap:36px; }
    .svc-grid{ grid-template-columns:1fr 1fr; }
    .stats-grid{ grid-template-columns:1fr 1fr; gap:36px 24px; }
    .stat:nth-child(2){ border-right:0; }
    .why-grid{ grid-template-columns:1fr 1fr; }
    .work-grid{ grid-template-columns:repeat(2,1fr); grid-auto-rows:auto; }
    .work-tile{ min-height:230px; }
    .work-tile.big,.work-tile.wide,.work-tile.span2{ grid-column:span 2; grid-row:span 1; }
    .nav-links,.nav-right .btn{ display:none; }
    .nav-toggle{ display:block; }
    header.nav.open .nav-links{ display:flex; position:absolute; top:74px; left:0; right:0; flex-direction:column; gap:0; background:rgba(8,23,46,.97); border-top:1px solid var(--line); padding:8px 0; }
    header.nav.open .nav-links a{ padding:14px 28px; }
  }
  @media (max-width:560px){
    .svc-grid,.why-grid{ grid-template-columns:1fr; }
    .stats-grid{ grid-template-columns:1fr; }
    .stat{ border-right:0; border-bottom:1px solid var(--line); padding-bottom:24px; }
    .sec{ padding:72px 0; }
  }
  @media (prefers-reduced-motion:reduce){
    *{ animation:none !important; scroll-behavior:auto; }
    .mark--hero .stroke{ stroke-dashoffset:0; }
    .mark--hero .dot{ transform:scale(1); }
    .reveal{ opacity:1; transform:none; }
  }
  