:root {
  --fw-bg:     oklch(99%  0.004 240);
  --fw-bg-2:   oklch(94%  0.025 245);
  --fw-bg-3:   oklch(88%  0.04  245);
  --fw-ink:    oklch(20%  0.20  262);
  --fw-ink-2:  oklch(36%  0.15  260);
  --fw-mute:   oklch(54%  0.09  258);
  --fw-line:   oklch(80%  0.06  245);
  --fw-accent: oklch(48%  0.25  262);
  --fw-warn:   oklch(50%  0.24   18);
  --fw-ok:     oklch(60%  0.08  160);
  --fw-serif: "Instrument Serif", "Times New Roman", serif;
  --fw-sans: "Geist", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --fw-mono: "JetBrains Mono", ui-monospace, Menlo, monospace;
}
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; background: var(--fw-bg); color: var(--fw-ink); font-family: var(--fw-sans); font-size: 15px; line-height: 1.5; -webkit-font-smoothing: antialiased; }
a { color: inherit; text-decoration: none; cursor: pointer; }
button { font: inherit; cursor: pointer; }

.fw-mono { font-family: var(--fw-mono); font-size: 11px; letter-spacing: 0.02em; text-transform: uppercase; }
.fw-eye { font-family: var(--fw-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--fw-mute); }
.fw-serif { font-family: var(--fw-serif); font-weight: 400; letter-spacing: -0.01em; }

.fw-container { max-width: 1440px; margin: 0 auto; padding: 0 48px; }
@media (max-width: 740px) { .fw-container { padding: 0 22px; } }

/* nav */
.fw-nav { position: sticky; top: 0; display: flex; align-items: center; justify-content: space-between; padding: 18px 48px; border-bottom: 1px solid var(--fw-line); background: color-mix(in oklab, var(--fw-bg) 88%, transparent); backdrop-filter: blur(12px); z-index: 50; transition: padding .2s; }
.fw-nav.scrolled { padding: 12px 48px; }
@media (max-width: 740px) { .fw-nav, .fw-nav.scrolled { padding: 14px 22px; } }
.fw-logo { display: flex; align-items: center; gap: 10px; font-weight: 600; font-size: 14px; letter-spacing: 0.06em; }
.fw-logo .dot { width: 9px; height: 9px; border-radius: 2px; background: var(--fw-ink); }
.fw-logo .ring { width: 9px; height: 9px; border-radius: 50%; border: 1.5px solid var(--fw-ink); margin-left: -2px; }
.fw-logo small { display: block; font-size: 9px; letter-spacing: 0.12em; color: var(--fw-mute); margin-top: 2px; font-weight: 400; }
.fw-navlinks { display: flex; gap: 26px; font-size: 13px; }
.fw-navlinks a { color: var(--fw-ink-2); padding: 4px 0; position: relative; transition: color .15s; }
.fw-navlinks a:hover, .fw-navlinks a.act { color: var(--fw-ink); }
.fw-navlinks a.act::after { content:""; position: absolute; left: 0; right: 0; bottom: -2px; height: 1px; background: var(--fw-ink); }
@media (max-width: 900px) { .fw-navlinks { display: none; } }
.fw-navactions { display: flex; align-items: center; gap: 10px; font-size: 12.5px; }
.fw-iconbtn { width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; background: transparent; border: 1px solid transparent; color: var(--fw-ink); position: relative; transition: background .15s, border-color .15s; }
.fw-iconbtn:hover { background: var(--fw-bg-2); border-color: var(--fw-line); }
.fw-iconbtn .badge { position: absolute; top: -2px; right: -2px; min-width: 16px; height: 16px; border-radius: 999px; background: var(--fw-accent); color: white; font-size: 9px; font-weight: 600; display: flex; align-items: center; justify-content: center; padding: 0 4px; }
.fw-burger { display: none; }
@media (max-width: 900px) { .fw-burger { display: inline-flex; } }

/* buttons */
.fw-btn { display: inline-flex; align-items: center; gap: 10px; padding: 12px 20px; border-radius: 999px; font-size: 13px; font-weight: 500; border: 1px solid var(--fw-ink); background: var(--fw-ink); color: var(--fw-bg); transition: transform .15s, background .15s, color .15s; }
.fw-btn:hover { transform: translateY(-1px); }
.fw-btn.ghost { background: transparent; color: var(--fw-ink); }
.fw-btn.ghost:hover { background: var(--fw-ink); color: var(--fw-bg); }
.fw-btn .arr { transition: transform .2s; }
.fw-btn:hover .arr { transform: translateX(3px); }

/* placeholder */
.fw-img { position: relative; overflow: hidden; background: repeating-linear-gradient(135deg, transparent 0 14px, color-mix(in oklab, var(--fw-ink) 4%, transparent) 14px 15px), var(--fw-bg-2); color: var(--fw-mute); display: flex; align-items: flex-end; justify-content: space-between; padding: 14px; }
.fw-img::before { content: ""; position: absolute; inset: 0; border: 1px solid var(--fw-line); pointer-events: none; }
.fw-img.dark { background: repeating-linear-gradient(135deg, transparent 0 14px, rgba(255,255,255,0.05) 14px 15px), oklch(22% 0.012 240); color: oklch(70% 0.01 240); }
.fw-img.dark::before { border-color: rgba(255,255,255,0.12); }
.fw-img-lbl, .fw-img-corner { font-family: var(--fw-mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; position: relative; z-index: 1; }
.fw-img-corner { opacity: 0.7; }

.fw-card { border: 1px solid var(--fw-line); background: var(--fw-bg); transition: transform .25s, box-shadow .25s; }
.fw-card:hover { transform: translateY(-2px); box-shadow: 0 12px 30px -16px rgba(0,0,0,0.18); }

.fw-chip { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px; border: 1px solid var(--fw-line); border-radius: 999px; font-size: 12px; color: var(--fw-ink-2); background: transparent; }
.fw-chip.act { background: var(--fw-ink); color: var(--fw-bg); border-color: var(--fw-ink); }
.fw-rule { border-top: 1px solid var(--fw-line); }
.fw-pill { display: inline-flex; align-items: center; gap: 6px; font-family: var(--fw-mono); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--fw-mute); padding: 5px 11px; border: 1px solid var(--fw-line); border-radius: 999px; }
.fw-pill .dotg { width: 6px; height: 6px; border-radius: 50%; background: var(--fw-ok); box-shadow: 0 0 0 3px color-mix(in oklab, var(--fw-ok) 22%, transparent); }

/* marquee */
.fw-marquee { display: flex; overflow: hidden; white-space: nowrap; padding: 26px 0; border-top: 1px solid var(--fw-line); border-bottom: 1px solid var(--fw-line); }
.fw-marquee-track { display: inline-flex; gap: 80px; animation: fw-mar 40s linear infinite; padding-right: 80px; }
@keyframes fw-mar { from { transform: translateX(0); } to { transform: translateX(-50%); } }

@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }

/* mobile nav drawer */
.fw-mnav { position: fixed; inset: 0; background: var(--fw-bg); z-index: 80; padding: 22px; display: flex; flex-direction: column; gap: 18px; animation: slideInRight .28s cubic-bezier(.2,.7,.3,1) both; }
.fw-mnav a { font-family: var(--fw-serif); font-size: 36px; }

/* form */
.fw-field { display: flex; flex-direction: column; gap: 6px; }
.fw-field label { font-family: var(--fw-mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--fw-mute); }
.fw-field input, .fw-field textarea, .fw-field select { border: none; border-bottom: 1px solid var(--fw-mute); background: transparent; padding: 10px 0; font: inherit; color: var(--fw-ink); outline: none; transition: border-color .15s; }
.fw-field input:focus, .fw-field textarea:focus, .fw-field select:focus { border-color: var(--fw-ink); }

/* footer */
.fw-footer { background: var(--fw-bg-2); border-top: 1px solid var(--fw-line); padding: 48px 0; margin-top: 80px; }

/* page anim */
@keyframes fadeUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
.page-enter { animation: fadeUp .4s cubic-bezier(.2,.7,.3,1) both; }

/* responsive grids */
.grid-2 { display: grid; grid-template-columns: 1.15fr 1fr; gap: 56px; align-items: end; }
.grid-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 28px; }
.grid-4 { display: grid; grid-template-columns: repeat(4,1fr); gap: 22px; }
@media (max-width: 900px) {
  .grid-2 { grid-template-columns: 1fr; gap: 32px; }
  .grid-3 { grid-template-columns: 1fr; gap: 22px; }
  .grid-4 { grid-template-columns: repeat(2,1fr); gap: 16px; }
}
.h-hero { font-size: clamp(48px, 8vw, 108px); line-height: 0.96; letter-spacing: -0.02em; margin: 0; }
.h-page { font-size: clamp(40px, 6vw, 80px); line-height: 0.98; letter-spacing: -0.02em; margin: 0; }
.h-sec { font-size: clamp(28px, 3.4vw, 44px); line-height: 1.04; letter-spacing: -0.01em; margin: 0; }

/* select dropdown reset */
.fw-field select { appearance: none; background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path fill='%23999' d='M0 0h10L5 6z'/></svg>"); background-repeat: no-repeat; background-position: right 0 center; padding-right: 18px; }



/* ── visual animation keyframes ─────────────────────────────────── */
@keyframes fw-flow       { from { stroke-dashoffset: 60; } to { stroke-dashoffset: 0; } }
@keyframes fw-glow       { 0%,100% { opacity: .35; } 50% { opacity: 1; } }
@keyframes fw-spin-slow  { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes fw-scan       { from { transform: translateY(-100%); } to { transform: translateY(1200%); } }
@keyframes fw-fade-up    { from { opacity:0; transform:translateY(6px); } to { opacity:1; transform:translateY(0); } }
@keyframes fw-map-pulse  { 0% { transform:scale(1); opacity:.8; } 100% { transform:scale(2.8); opacity:0; } }
@keyframes fw-signal     { 0% { transform:translate(-50%,-50%) scale(0.05); opacity:1; } 75% { opacity:0.35; } 100% { transform:translate(-50%,-50%) scale(1); opacity:0; } }

/* ── Leaflet map custom markers ─────────────────────────────── */
.fw-map-hq { position:relative; width:24px; height:24px; }
.fw-map-ring { position:absolute; inset:0; border-radius:50%; border:1.5px solid oklch(55% 0.06 240); animation:fw-map-pulse 2.4s ease-out infinite; }
.fw-map-dot-hq { position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); width:12px; height:12px; border-radius:50%; background:oklch(55% 0.06 240); }
.fw-map-dot-client { width:9px; height:9px; border-radius:50%; background:oklch(18% 0.01 240); border:1.5px solid white; opacity:.72; }

/* ── Leaflet control overrides ──────────────────────────────── */
.leaflet-control-zoom { border:1px solid var(--fw-line) !important; box-shadow:none !important; border-radius:2px !important; }
.leaflet-control-zoom a { background:var(--fw-bg) !important; color:var(--fw-ink) !important; border-bottom-color:var(--fw-line) !important; font-size:15px !important; line-height:26px !important; }
.leaflet-control-zoom a:hover { background:var(--fw-bg-2) !important; }
.leaflet-control-attribution { font-family:var(--fw-mono) !important; font-size:9px !important; letter-spacing:.06em !important; background:color-mix(in oklab,var(--fw-bg) 88%,transparent) !important; border-radius:0 !important; }
.leaflet-attribution-flag { display:none !important; }
.leaflet-popup-content-wrapper { border-radius:2px !important; box-shadow:0 6px 20px -8px rgba(0,0,0,.18) !important; border:1px solid var(--fw-line) !important; background:var(--fw-bg) !important; font-family:var(--fw-sans) !important; }
.leaflet-popup-tip-container { display:none !important; }
.leaflet-popup-content { margin:12px 16px !important; font-size:13px !important; line-height:1.55 !important; }
.fw-map-popup b { display:block; font-family:var(--fw-mono); font-size:9.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--fw-mute); margin-bottom:4px; }
.fw-map-tip { background:var(--fw-bg) !important; border:1px solid var(--fw-line) !important; border-radius:2px !important; box-shadow:none !important; font-family:var(--fw-mono) !important; font-size:9.5px !important; letter-spacing:.1em !important; text-transform:uppercase !important; color:var(--fw-ink) !important; padding:4px 9px !important; }
.fw-map-tip::before { display:none !important; }

/* ── Mobile / tablet responsive ──────────────────────────────────────────── */
@media (max-width: 640px) {
  .fw-container { padding-left: 16px !important; padding-right: 16px !important; }
  .fw-nav, .fw-nav.scrolled { padding: 12px 16px; }
  .fw-footer { margin-top: 48px; }
  .h-hero { font-size: clamp(38px, 11vw, 72px); }
  .h-page { font-size: clamp(32px, 9vw, 60px); }
}
@media (max-width: 900px) {
  .grid-3 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 580px) {
  .grid-3 { grid-template-columns: 1fr; }
  .grid-4 { grid-template-columns: 1fr; }
}

/* footer main layout */
.fw-footer-main { display: flex; justify-content: space-between; align-items: flex-start; flex-wrap: wrap; gap: 40px; padding-bottom: 36px; }
@media (max-width: 580px) { .fw-footer-main { flex-direction: column; gap: 28px; } }

/* ── Social media buttons ── */
.fw-social {
  width: 44px; height: 44px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--fw-line);
  border-radius: 999px;
  color: var(--fw-ink-2);
  background: transparent;
  text-decoration: none;
  transition:
    transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.24s ease,
    background 0.22s ease,
    color 0.18s ease,
    border-color 0.22s ease,
    filter 0.22s ease;
}
.fw-social:hover  { transform: translateY(-4px) scale(1.12); }
.fw-social:active { transform: translateY(0) scale(0.92) !important; transition-duration: .07s !important; }

.fw-social-fb:hover {
  background: #1877f2; border-color: #1877f2; color: #fff;
  box-shadow: 0 10px 26px -8px rgba(24,119,242,0.65);
}
.fw-social-ig:hover {
  background: linear-gradient(135deg,#f09433 0%,#e6683c 25%,#dc2743 50%,#cc2366 75%,#bc1888 100%);
  border-color: transparent; color: #fff;
  box-shadow: 0 10px 26px -8px rgba(188,24,136,0.55);
}
.fw-social-li:hover {
  background: #0077b5; border-color: #0077b5; color: #fff;
  box-shadow: 0 10px 26px -8px rgba(0,119,181,0.6);
}
.fw-social-tt:hover {
  color: var(--fw-ink); border-color: var(--fw-ink);
  animation: fw-tt-glitch 0.55s linear infinite;
}
@keyframes fw-tt-glitch {
  0%   { filter: drop-shadow(-2px  1.5px 0 #69c9d0) drop-shadow( 2px -1.5px 0 #ee1d52); }
  25%  { filter: drop-shadow( 1.5px  2px 0 #69c9d0) drop-shadow(-1.5px  -2px 0 #ee1d52); }
  50%  { filter: drop-shadow( 2px -1.5px 0 #69c9d0) drop-shadow(-2px  1.5px 0 #ee1d52); }
  75%  { filter: drop-shadow(-1.5px -2px 0 #69c9d0) drop-shadow( 1.5px   2px 0 #ee1d52); }
  100% { filter: drop-shadow(-2px  1.5px 0 #69c9d0) drop-shadow( 2px -1.5px 0 #ee1d52); }
}

.fw-footer-bottom { display: flex; justify-content: space-between; padding-top: 18px; font-size: 11px; color: var(--fw-mute); font-family: var(--fw-mono); letter-spacing: 0.08em; text-transform: uppercase; flex-wrap: wrap; gap: 8px; }
@media (max-width: 580px) { .fw-footer-bottom { flex-direction: column; align-items: center; text-align: center; } }

/* camera grid */
.fw-camera-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5px; padding: 1.5px; height: 100%; }
@media (max-width: 640px) { .fw-camera-grid { grid-template-columns: repeat(2, 1fr); } }

/* contact form rows */
.fw-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
@media (max-width: 580px) { .fw-form-row { grid-template-columns: 1fr; } }


/* ════════════════════════════════════════════════════════════════════════════
   MICRO-INTERACTIONS & POLISH
   ════════════════════════════════════════════════════════════════════════════ */

/* Text selection */
::selection { background: var(--fw-accent); color: #fff; }

/* Custom scrollbar */
::-webkit-scrollbar { width: 5px; height: 5px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--fw-line); border-radius: 99px; }
::-webkit-scrollbar-thumb:hover { background: var(--fw-mute); }

/* ── Scroll reveal ── */
.fw-reveal { opacity: 0; transform: translateY(24px); transition: opacity .65s cubic-bezier(.2,.7,.3,1), transform .65s cubic-bezier(.2,.7,.3,1); }
.fw-reveal.is-visible { opacity: 1; transform: translateY(0); }

/* ── Buttons ── */
.fw-btn { position: relative; overflow: hidden; }
.fw-btn::before {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(105deg, transparent 30%, rgba(255,255,255,0.18) 50%, transparent 70%);
  transform: translateX(-100%);
  pointer-events: none;
  transition: transform 0s;
}
.fw-btn:hover::before { transform: translateX(210%); transition: transform .52s ease; }
.fw-btn:not(.ghost):hover { box-shadow: 0 6px 22px -8px rgba(0,0,0,0.24); }
.fw-btn:active { transform: translateY(1px) scale(0.984) !important; transition-duration: .07s !important; }
.fw-btn .arr { transition: transform .22s ease; }
.fw-btn:hover .arr { transform: translateX(4px); }

/* ── Icon buttons ── */
.fw-iconbtn { transition: background .15s, border-color .15s, transform .12s, box-shadow .15s; }
.fw-iconbtn:hover { transform: scale(1.11); box-shadow: 0 2px 8px -3px rgba(0,0,0,0.12); }
.fw-iconbtn:active { transform: scale(0.91); }

/* ── Cards ── */
.fw-card { transition: transform .26s cubic-bezier(.2,.7,.3,1), box-shadow .26s, border-color .28s; }
.fw-card:hover { border-color: color-mix(in oklab, var(--fw-mute) 60%, transparent); box-shadow: 0 14px 36px -18px rgba(0,0,0,0.16); }

/* Card image zoom */
.fw-img { overflow: hidden; }
.fw-img img { transition: transform .6s cubic-bezier(.25,.46,.45,.94), filter .4s ease; }
.fw-img:hover img, .fw-card:hover .fw-img img { transform: scale(1.048); }

/* Arrow icon in BigCard */
.fw-arr-icon { display: inline-flex; transition: transform .22s ease; }
.fw-card:hover .fw-arr-icon { transform: translateX(5px); }

/* ── Chips ── */
.fw-chip { transition: background .15s, color .15s, border-color .15s, transform .15s, box-shadow .15s; cursor: pointer; }
.fw-chip:not(.act):hover { background: var(--fw-bg-2); border-color: color-mix(in oklab, var(--fw-mute) 65%, transparent); transform: translateY(-1px); box-shadow: 0 3px 10px -4px rgba(0,0,0,0.09); }
.fw-chip.act { box-shadow: 0 2px 10px -4px rgba(0,0,0,0.16); }

/* ── Pills ── */
.fw-pill { transition: border-color .15s, color .15s; }
.fw-pill:hover { border-color: var(--fw-mute); color: var(--fw-ink); }

/* ── Nav links — underline slides from left ── */
.fw-navlinks a { transition: color .15s; }
.fw-navlinks a::after {
  content: ''; position: absolute;
  left: 0; right: 0; bottom: -2px; height: 1px;
  background: var(--fw-ink);
  transform: scaleX(0); transform-origin: left center;
  transition: transform .22s ease;
}
.fw-navlinks a:hover::after,
.fw-navlinks a.act::after { transform: scaleX(1); }

/* Logo hover */
.fw-logo { transition: opacity .16s; }
a:hover > .fw-logo { opacity: 0.7; }

/* ── Footer links ── */
.fw-footer ul li { transition: color .15s, transform .15s; }
.fw-footer ul li:hover { color: var(--fw-ink) !important; transform: translateX(4px); }

/* ── Form fields — expanding underline + label lift ── */
.fw-field input, .fw-field textarea, .fw-field select {
  background-image: linear-gradient(var(--fw-ink), var(--fw-ink));
  background-size: 0 1.5px;
  background-position: left bottom;
  background-repeat: no-repeat;
  transition: border-color .2s, background-size .32s ease;
}
.fw-field input:focus, .fw-field textarea:focus, .fw-field select:focus {
  border-color: transparent;
  background-size: 100% 1.5px;
}
.fw-field label { transition: color .2s, letter-spacing .2s; }
.fw-field:focus-within label { color: var(--fw-ink); letter-spacing: 0.14em; }

/* ── FAQ ── */
.fw-faq-q { transition: color .2s; }
.fw-faq-q:hover { color: var(--fw-accent); }
.fw-faq-open .fw-faq-q { color: var(--fw-accent); }

/* ── Team cards ── */
.fw-team-card { overflow: hidden; }
.fw-team-card:hover .fw-img img { transform: scale(1.048); }
.fw-team-card:hover .fw-team-name { color: var(--fw-accent); }
.fw-team-name { transition: color .2s; }

/* ── Spec / stat rows — hover highlight ── */
.fw-hover-row { transition: background .16s, padding-left .16s; border-radius: 3px; padding: 2px 4px; margin: -2px -4px; }
.fw-hover-row:hover { background: var(--fw-bg-2); padding-left: 10px; }

/* ── Stat items — stagger handled inline ── */
.fw-stat-item .fw-serif { transition: color .22s; }
.fw-stat-item:hover .fw-serif { color: var(--fw-accent); }

/* ── Coverage / index list rows ── */
.fw-list-row { transition: background .15s, padding-left .16s; }
.fw-list-row:hover { background: var(--fw-bg-2); padding-left: 8px; }

/* ── Page section stagger on enter ── */
@keyframes fw-sec-in { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } }
.page-enter > section { animation: fw-sec-in .55s cubic-bezier(.2,.7,.3,1) both; }
.page-enter > section:nth-child(1) { animation-delay: .05s; }
.page-enter > section:nth-child(2) { animation-delay: .13s; }
.page-enter > section:nth-child(3) { animation-delay: .21s; }
.page-enter > section:nth-child(4) { animation-delay: .29s; }
.page-enter > section:nth-child(5) { animation-delay: .37s; }
.page-enter > section:nth-child(6) { animation-delay: .45s; }
.page-enter > section:nth-child(7) { animation-delay: .53s; }

/* ── Misc ── */
.fw-rule { transition: border-color .2s; }
button { transition: opacity .15s; }
button:disabled { opacity: 0.42; cursor: not-allowed; }

/* ── Text effects ── */
@keyframes fw-line-up { from { transform: translateY(108%); } to { transform: translateY(0); } }

/* em highlight sweep — background wipes left-to-right under emphasis text */
@keyframes fw-em-sweep { from { background-size: 0% 100%; } to { background-size: 100% 100%; } }
.h-hero em, .h-sec em, .h-page em {
  background-image: linear-gradient(transparent 62%, color-mix(in oklab, var(--fw-accent) 22%, transparent) 62%);
  background-size: 0% 100%;
  background-repeat: no-repeat;
  background-position: left center;
  animation: fw-em-sweep .55s ease both;
  animation-delay: .75s;
}

/* ── Scroll progress bar ── */
.fw-progress { position: fixed; top: 0; left: 0; height: 2px; background: var(--fw-accent); z-index: 200; pointer-events: none; transform-origin: left center; transition: width .1s linear; }

/* ── Back to top ── */
.fw-backtop { position: fixed; bottom: 32px; right: 32px; z-index: 100; width: 40px; height: 40px; border-radius: 999px; background: var(--fw-ink); color: var(--fw-bg); border: none; display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: 0 4px 16px -6px rgba(0,0,0,0.28); transition: opacity .22s, transform .22s, background .15s; }
.fw-backtop:hover { background: var(--fw-accent); transform: translateY(-3px); }
.fw-backtop.hidden { opacity: 0; pointer-events: none; transform: translateY(12px); }
@media (max-width: 640px) { .fw-backtop { bottom: 20px; right: 16px; } }