/* OMIUR. Hand-written CSS, no framework, no web fonts, no third-party requests.
   Matte neutrals: carbon and charcoal bands against warm ivory, no accent colour,
   no glow. Type carries the design. Motion uses transform and opacity only, and
   every animation has a reduced-motion fallback at the bottom. */

:root {
  --ink-0: #0f0f0f;          /* carbon */
  --ink-1: #181716;          /* charcoal */
  --ivory: #f4f3f1;
  --limestone: #e6e4e1;
  --ash: #a7a4a0;
  --text-d: #f4f3f1;         /* text on dark */
  --muted-d: #a7a4a0;
  --line-d: rgba(244, 243, 241, 0.14);
  --text-l: #121211;         /* text on ivory */
  --muted-l: #5d5953;
  --line-l: rgba(18, 18, 17, 0.16);
  --gold: #c9a77c;           /* the Ledgrplus icon's gold, on dark */
  --gold-l: #7d6039;         /* the same gold, deepened for text on ivory */
  --squircle: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20100%20100%27%20preserveAspectRatio%3D%27none%27%3E%3Cpath%20d%3D%27M100.00%2050.00L99.98%2063.69L99.94%2068.06L99.86%2071.23L99.75%2073.81L99.61%2076.01L99.44%2077.94L99.24%2079.68L99.01%2081.26L98.74%2082.71L98.44%2084.05L98.11%2085.30L97.74%2086.46L97.35%2087.55L96.91%2088.57L96.44%2089.52L95.94%2090.43L95.39%2091.27L94.81%2092.07L94.19%2092.82L93.53%2093.53L92.82%2094.19L92.07%2094.81L91.27%2095.39L90.43%2095.94L89.52%2096.44L88.57%2096.91L87.55%2097.35L86.46%2097.74L85.30%2098.11L84.05%2098.44L82.71%2098.74L81.26%2099.01L79.68%2099.24L77.94%2099.44L76.01%2099.61L73.81%2099.75L71.23%2099.86L68.06%2099.94L63.69%2099.98L50.00%20100.00L36.31%2099.98L31.94%2099.94L28.77%2099.86L26.19%2099.75L23.99%2099.61L22.06%2099.44L20.32%2099.24L18.74%2099.01L17.29%2098.74L15.95%2098.44L14.70%2098.11L13.54%2097.74L12.45%2097.35L11.43%2096.91L10.48%2096.44L9.57%2095.94L8.73%2095.39L7.93%2094.81L7.18%2094.19L6.47%2093.53L5.81%2092.82L5.19%2092.07L4.61%2091.27L4.06%2090.43L3.56%2089.52L3.09%2088.57L2.65%2087.55L2.26%2086.46L1.89%2085.30L1.56%2084.05L1.26%2082.71L0.99%2081.26L0.76%2079.68L0.56%2077.94L0.39%2076.01L0.25%2073.81L0.14%2071.23L0.06%2068.06L0.02%2063.69L0.00%2050.00L0.02%2036.31L0.06%2031.94L0.14%2028.77L0.25%2026.19L0.39%2023.99L0.56%2022.06L0.76%2020.32L0.99%2018.74L1.26%2017.29L1.56%2015.95L1.89%2014.70L2.26%2013.54L2.65%2012.45L3.09%2011.43L3.56%2010.48L4.06%209.57L4.61%208.73L5.19%207.93L5.81%207.18L6.47%206.47L7.18%205.81L7.93%205.19L8.73%204.61L9.57%204.06L10.48%203.56L11.43%203.09L12.45%202.65L13.54%202.26L14.70%201.89L15.95%201.56L17.29%201.26L18.74%200.99L20.32%200.76L22.06%200.56L23.99%200.39L26.19%200.25L28.77%200.14L31.94%200.06L36.31%200.02L50.00%200.00L63.69%200.02L68.06%200.06L71.23%200.14L73.81%200.25L76.01%200.39L77.94%200.56L79.68%200.76L81.26%200.99L82.71%201.26L84.05%201.56L85.30%201.89L86.46%202.26L87.55%202.65L88.57%203.09L89.52%203.56L90.43%204.06L91.27%204.61L92.07%205.19L92.82%205.81L93.53%206.47L94.19%207.18L94.81%207.93L95.39%208.73L95.94%209.57L96.44%2010.48L96.91%2011.43L97.35%2012.45L97.74%2013.54L98.11%2014.70L98.44%2015.95L98.74%2017.29L99.01%2018.74L99.24%2020.32L99.44%2022.06L99.61%2023.99L99.75%2026.19L99.86%2028.77L99.94%2031.94L99.98%2036.31Z%27%2F%3E%3C%2Fsvg%3E");
  --gutter: clamp(22px, 5vw, 64px);
  --max: 1240px;
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --sans: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Segoe UI", system-ui, Roboto, "Helvetica Neue", Arial, sans-serif;
  --serif: "New York", ui-serif, "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: 72px; background: var(--ink-0); }
body {
  margin: 0; background: var(--ink-0); color: var(--text-d);
  font: 400 1.0625rem/1.6 var(--sans);
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
  overflow-x: clip;
}
img, svg { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; }
h1, h2, h3, p, figure { margin: 0; }
ul, ol, dl, dd { margin: 0; padding: 0; list-style: none; }
:focus-visible { outline: 2px solid currentColor; outline-offset: 4px; border-radius: 4px; }
::selection { background: rgba(167, 164, 160, 0.4); }

.skip { position: fixed; left: 16px; top: -64px; z-index: 100; padding: 10px 16px; background: var(--ivory); color: var(--text-l); font-weight: 600; transition: top 0.2s var(--ease); }
.skip:focus { top: 16px; }
.wrap { width: 100%; max-width: calc(var(--max) + var(--gutter) * 2); margin-inline: auto; padding-inline: var(--gutter); }

/* ─── Bands ────────────────────────────────────────────── */
.band { position: relative; isolation: isolate; }
.band--dark { background: var(--ink-0); color: var(--text-d); }
.band--dark2 { background: var(--ink-1); color: var(--text-d); }
.band--light { background: var(--ivory); color: var(--text-l); --muted-d: var(--muted-l); }
.band--light .lead, .band--light .meta dt, .band--light .principles p { color: var(--muted-l); }
.grain { position: absolute; inset: 0; z-index: -1; pointer-events: none; opacity: 0.55;
  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' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .05 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E"); }

/* ─── Type ─────────────────────────────────────────────── */
.display { font-weight: 500; letter-spacing: -0.035em; line-height: 1; text-wrap: balance; }
.display em, .statement__text em { font-family: var(--serif); font-style: italic; font-weight: 400; letter-spacing: -0.02em; }
.h2 { font-size: clamp(2.4rem, 5.4vw, 4.4rem); }
.h1x { font-size: clamp(4rem, 13vw, 11rem); letter-spacing: -0.05em; line-height: 0.92; }
.h3 { font-size: 1.25rem; font-weight: 500; letter-spacing: -0.015em; line-height: 1.25; }
.lead { font-size: clamp(1.06rem, 1.35vw, 1.2rem); color: var(--muted-d); max-width: 34em; text-wrap: pretty; }
.link { display: inline-flex; gap: 10px; align-items: center; min-height: 44px; padding-bottom: 2px; border-bottom: 1px solid var(--line-d); font-weight: 500; transition: border-color 0.3s var(--ease), gap 0.3s var(--ease); }
.link:hover { border-color: currentColor; gap: 14px; }

/* ─── Nav ──────────────────────────────────────────────── */
.nav { position: fixed; inset: 0 0 auto 0; z-index: 50; height: 68px; display: flex; align-items: center; color: var(--text-d); transition: background 0.4s var(--ease), box-shadow 0.4s var(--ease); }
.nav.is-stuck { background: rgba(15, 15, 15, 0.82); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); box-shadow: 0 1px 0 var(--line-d); }
.nav__row { display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.logo { display: inline-flex; align-items: center; min-height: 44px; gap: 11px; font-weight: 600; letter-spacing: 0.1em; font-size: 0.95rem; }
.logo svg { width: 24px; height: 24px; }
.logo svg circle:last-child { fill: var(--gold); }
.nav__links { display: none; gap: 30px; }
.nav__links a { position: relative; padding: 10px 0; font-size: 0.92rem; color: var(--muted-d); transition: color 0.25s; }
.nav__links a::after { content: ""; position: absolute; left: 0; right: 0; bottom: 6px; height: 1px; background: currentColor; transform: scaleX(0); transform-origin: 0 50%; transition: transform 0.4s var(--ease); }
.nav__links a:hover { color: var(--text-d); }
.nav__links a:hover::after { transform: scaleX(1); }
.menu-btn { display: inline-grid; place-items: center; width: 46px; height: 46px; background: none; border: 0; cursor: pointer; }
.menu-btn span, .menu-btn span::before { display: block; width: 22px; height: 1.5px; background: var(--text-d); transition: transform 0.35s var(--ease); }
.menu-btn span { position: relative; }
.menu-btn span::before { content: ""; position: absolute; top: 7px; }
.menu-btn[aria-expanded="true"] span { transform: translateY(3.5px) rotate(45deg); }
.menu-btn[aria-expanded="true"] span::before { transform: translateY(-7px) rotate(-90deg); }
.sheet { position: fixed; inset: 68px 0 auto 0; z-index: 49; padding: 8px var(--gutter) 28px; background: rgba(15, 15, 15, 0.97); border-bottom: 1px solid var(--line-d); clip-path: inset(0 0 100% 0); visibility: hidden; transition: clip-path 0.5s var(--ease), visibility 0s 0.5s; }
.sheet.is-open { clip-path: inset(0); visibility: visible; transition: clip-path 0.5s var(--ease); }
.sheet a { display: block; padding: 18px 0; font-size: 1.7rem; font-weight: 500; letter-spacing: -0.025em; border-bottom: 1px solid var(--line-d); }
@media (min-width: 860px) { .nav__links { display: flex; } .menu-btn, .sheet { display: none; } }

/* ─── Hero ─────────────────────────────────────────────── */
.hero { min-height: min(100svh, 920px); display: flex; flex-direction: column; justify-content: center; padding: 92px 0 24px; overflow: clip; }
.hero__grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; align-items: center; justify-items: center; width: 100%; flex: 1; }
.hero__copy { display: flex; flex-direction: column; align-items: center; text-align: center; }
.hero h1 { font-size: clamp(3rem, 7.4vw, 6.6rem); letter-spacing: -0.055em; line-height: 0.9; }
.line { display: block; overflow: hidden; padding: 0.04em 0.06em 0.12em 0; margin: -0.04em 0 -0.12em; }
.line > span { display: block; transform: translateY(55%); animation: rise 1s var(--ease) forwards; animation-delay: calc(var(--i, 0) * 0.1s); }
@keyframes rise { to { transform: none; } }
.hero__sub { margin: 30px 0 16px; animation: fade-up 1s var(--ease) 0.45s both; }
.hero__soon { margin-bottom: 22px; font-size: 0.8rem; color: var(--gold); padding: 5px 12px; border: 1px solid rgba(201, 167, 124, 0.38); border-radius: 999px; animation: fade-up 1s var(--ease) 0.52s both; }
.hero .link { animation: fade-up 1s var(--ease) 0.6s both; }
@keyframes fade-up { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }

/* One object, one light */
.object { --rx: 0deg; --ry: 0deg; position: relative; display: flex; align-items: flex-start; justify-content: center; gap: var(--gap); perspective: 1200px; max-width: 100%; animation: settle 1.6s var(--ease) 0.2s both; }
@keyframes settle { from { opacity: 0; transform: translateY(24px) scale(0.97); } to { opacity: 1; transform: none; } }
.gi { --size: var(--duo); position: relative; display: block; width: var(--size); height: var(--size); }
.gi-shadow { position: absolute; inset: 12% 10% -2%; animation: gi-shadow 7s ease-in-out infinite; }
.gi-shadow-in { position: absolute; inset: 0; opacity: 0.8; filter: blur(calc(var(--size) * 0.07)); transform: translateY(calc(var(--size) * 0.1)); }
.gi-shadow-in i { position: absolute; inset: 0; background: #000; -webkit-mask: var(--squircle) center / 100% 100% no-repeat; mask: var(--squircle) center / 100% 100% no-repeat; }
.gi-float { position: absolute; inset: 0; animation: gi-float 7s ease-in-out infinite; }
.gi-tilt { position: absolute; inset: 0; transform: perspective(900px) rotateX(var(--rx)) rotateY(var(--ry)) rotate(var(--tilt, -4deg)); transition: transform 0.8s var(--ease); will-change: transform; }
.gi-body { position: absolute; inset: 0; overflow: hidden; isolation: isolate; background: linear-gradient(180deg, #ffffff, #dedad9); -webkit-mask: var(--squircle) center / 100% 100% no-repeat; mask: var(--squircle) center / 100% 100% no-repeat; }
.gi-frost { position: absolute; inset: 0; background: radial-gradient(130% 70% at 30% -5%, rgb(255 255 255 / 0.45), transparent 62%), linear-gradient(0deg, rgb(0 0 0 / 0.06), transparent 42%); }
.gi-glyph, .gi-rim { position: absolute; inset: 0; width: 100%; height: 100%; }
.gi-bevel { position: absolute; inset: 0; border-radius: 23%; pointer-events: none; box-shadow: inset 0 0 calc(var(--size) * 0.05) calc(var(--size) * 0.01) rgb(255 255 255 / 0.8), inset 0 calc(var(--size) * 0.022) calc(var(--size) * 0.03) rgb(255 255 255 / 0.95), inset 0 calc(var(--size) * -0.03) calc(var(--size) * 0.06) rgb(0 0 0 / 0.12); }
@property --sheen-angle { syntax: '<angle>'; inherits: false; initial-value: 140deg; }
.gi-sheen { position: absolute; inset: 0; background: linear-gradient(var(--sheen-angle), rgb(255 255 255 / 0.34) 0%, rgb(255 255 255 / 0.08) 38%, rgb(255 255 255 / 0) 55%, rgb(0 0 0 / 0) 78%, rgb(0 0 0 / 0.06) 100%); opacity: 0.6; transition: --sheen-angle 0.6s var(--ease); }
.gi-rim { overflow: visible; pointer-events: none; }
.gi-edge { fill: none; stroke-width: 1.5px; vector-effect: non-scaling-stroke; }
@keyframes gi-float { 50% { transform: translateY(calc(var(--size) * -0.025)); } }
@keyframes gi-shadow { 50% { transform: scale(0.94); opacity: 0.8; } }
/* The floor the icon floats above: a hairline of light across the stage, a pale
   pool under the icon, one brighter line where it catches the light, and a faint
   reflection. They sit outside the floating icon, so the floor stays put while
   the icon bobs above it; the light line dims a little as the icon rises. */
.gi-wrap { position: relative; }
.gi-wrap .gi { -webkit-box-reflect: below 18px linear-gradient(transparent 74%, rgb(255 255 255 / 0.11)); }
.floor { position: absolute; left: 50%; top: calc(100% + 18px); width: min(140%, 92vw); height: 0; transform: translateX(-50%); pointer-events: none; }
.floor__line { position: absolute; inset: 0 0 auto; height: 1px; background: linear-gradient(90deg, transparent, rgb(244 243 241 / 0.2) 18%, rgb(244 243 241 / 0.2) 82%, transparent); }
.floor__pool { position: absolute; left: 20%; right: 20%; top: -14px; height: 60px; background: radial-gradient(closest-side, rgb(244 243 241 / 0.09), transparent); }
.floor__light { position: absolute; left: 50%; top: -1px; width: 52%; height: 2px; border-radius: 2px; transform: translateX(-50%); background: linear-gradient(90deg, transparent, rgb(244 243 241 / 0.95) 30%, rgb(244 243 241 / 0.95) 70%, transparent); box-shadow: 0 0 14px 2px rgb(244 243 241 / 0.26), 0 0 44px 4px rgb(244 243 241 / 0.07); animation: floor-breathe 7s ease-in-out infinite; }
@keyframes floor-breathe { 50% { opacity: 0.62; } }
/* The same floor under the small app icons. They don't float, so the light
   line is still. On the ivory band there is nothing to light, so the line
   becomes a soft contact line and the reflection a faint shade. */
.stand { position: relative; flex: none; width: 56px; height: 56px; }
.stand img { -webkit-box-reflect: below 5px linear-gradient(transparent 60%, rgb(255 255 255 / 0.14)); }
.floor--sm { top: calc(100% + 5px); width: 200%; }
.floor--sm .floor__light { width: 58%; height: 1.5px; box-shadow: 0 0 8px 1px rgb(244 243 241 / 0.24); animation: none; }
.band--light .floor__line { background: linear-gradient(90deg, transparent, rgb(18 18 17 / 0.2) 22%, rgb(18 18 17 / 0.2) 78%, transparent); }
.band--light .floor--sm .floor__light { background: linear-gradient(90deg, transparent, rgb(18 18 17 / 0.5) 30%, rgb(18 18 17 / 0.5) 70%, transparent); box-shadow: 0 3px 8px rgb(18 18 17 / 0.2); }
.app__id { margin-bottom: 14px; }
/* Two apps, equal weight: the same icon size, mirrored tilt, the same floor, each a link to its section. */
.hero { --gap: clamp(24px, 7vw, 120px); --duo: min(280px, max(140px, 21vw), calc((100vw - 2 * var(--gutter) - var(--gap)) / 2)); }
.duo { padding: 14px 0 calc(var(--duo) * 0.26 + 24px); }
.duo__item { display: flex; flex-direction: column; align-items: center; border-radius: 28px; }
.duo__item:nth-child(3) { --tilt: 4deg; --delay: -3.5s; }
.duo__item .gi-float, .duo__item .gi-shadow, .duo__item .floor__light { animation-delay: var(--delay, 0s); }
.duo__item .gi-tilt { translate: 0 0; transition: transform 0.8s var(--ease), translate 0.5s var(--ease); }
.duo__item:hover .gi-tilt, .duo__item:focus-visible .gi-tilt { translate: 0 -8px; }
.gi--cream .gi-body { background: linear-gradient(180deg, #faf8f4, #e9e6df); }
.object__light { position: absolute; width: 120%; aspect-ratio: 1; left: -35%; top: -45%; background: radial-gradient(closest-side, rgba(244, 243, 241, 0.13), rgba(244, 243, 241, 0.03) 55%, transparent 75%); pointer-events: none; }


/* ─── Statement ────────────────────────────────────────── */
.statement { padding: clamp(96px, 14vw, 200px) 0; }
.statement__text { max-width: 19em; margin-inline: auto; text-align: center; font-size: clamp(2rem, 4.8vw, 4rem); font-weight: 500; letter-spacing: -0.035em; line-height: 1.08; text-wrap: balance; }

/* ─── Apps ─────────────────────────────────────────────── */
.app { padding: clamp(80px, 11vw, 160px) 0; content-visibility: auto; contain-intrinsic-size: auto 900px; }
.app__grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 56px; align-items: center; }
.app__copy { display: flex; flex-direction: column; gap: 24px; min-width: 0; }
.app__id { display: flex; align-items: center; gap: 14px; font-weight: 600; letter-spacing: -0.01em; }
.app__id img { width: 56px; height: 56px; }
.app__id small { margin-left: auto; font-size: 0.8rem; font-weight: 400; color: var(--gold); padding: 5px 12px; border: 1px solid rgba(201, 167, 124, 0.38); border-radius: 999px; }
.band--light .app__id small { color: var(--gold-l); border-color: rgba(125, 96, 57, 0.4); }
.app .h2 { font-size: clamp(2.3rem, 4.6vw, 3.8rem); }
.meta { margin-top: 14px; border-top: 1px solid var(--line-d); }
.band--light .meta { border-top-color: var(--line-l); }
.meta div { display: grid; grid-template-columns: minmax(0, 9.5rem) minmax(0, 1fr); gap: 16px; padding: 15px 0; border-bottom: 1px solid var(--line-d); font-size: 0.95rem; }
.band--light .meta div { border-bottom-color: var(--line-l); }
.meta dt { color: var(--muted-d); }
.meta dd { font-weight: 500; }
@media (min-width: 1000px) {
  .app__grid { grid-template-columns: 0.85fr 1.15fr; gap: clamp(48px, 7vw, 112px); }
  .app--flip .app__grid { grid-template-columns: 1fr 0.9fr; }
  .app--flip .app__copy { order: 2; }
}

.shots { position: relative; min-width: 0; padding-bottom: 12%; }
.shot { margin: 0; overflow: hidden; border-radius: 8px; border: 1px solid var(--line-d); box-shadow: 0 60px 80px -30px rgba(0, 0, 0, 0.8); background: #1c1c1e; }
.shot img { width: 100%; height: auto; }
.shot--b { position: absolute; right: -2%; bottom: 0; width: 66%; box-shadow: 0 40px 70px -20px rgba(0, 0, 0, 0.85); }

.stone { display: grid; place-items: center; aspect-ratio: 1; background: var(--limestone); border-radius: 4px; overflow: hidden; }
.stone img { width: 58%; height: auto; filter: drop-shadow(0 34px 26px rgba(18, 18, 17, 0.28)); }

/* ─── Principles ───────────────────────────────────────── */
.principles { padding: clamp(88px, 12vw, 170px) 0; }
.principles .h2 { text-align: center; }
.cols { display: grid; gap: 0; margin-top: clamp(48px, 7vw, 96px); }
.cols li { padding: 28px 0 40px; border-top: 1px solid var(--line-d); }
.idx { display: block; margin-bottom: 44px; font-size: 0.82rem; color: var(--muted-d); font-variant-numeric: tabular-nums; }
.cols p { margin-top: 12px; color: var(--muted-d); max-width: 24em; }
@media (min-width: 800px) { .cols { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 40px; } }

/* ─── Contact ──────────────────────────────────────────── */
.contact { padding: clamp(96px, 13vw, 190px) 0 clamp(88px, 11vw, 150px); text-align: center; }
.contact .lead { margin: 34px auto 0; }
.mail { display: inline-block; margin-top: 30px; font-size: clamp(1.5rem, 3.6vw, 2.6rem); font-weight: 500; letter-spacing: -0.03em; padding-bottom: 6px; border-bottom: 1px solid var(--line-l); transition: border-color 0.3s; }
.mail:hover { border-color: var(--text-l); }

/* ─── Footer ───────────────────────────────────────────── */
.foot { padding: 52px 0 36px; }
.foot__row { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 16px; }
.foot ul { display: flex; flex-wrap: wrap; gap: 0 28px; }
.foot li a { display: inline-flex; align-items: center; min-height: 44px; color: var(--muted-d); font-size: 0.93rem; transition: color 0.2s; }
.foot li a:hover { color: var(--text-d); }
.foot__base { text-align: center; margin-top: 28px; padding-top: 22px; border-top: 1px solid var(--line-d); color: var(--muted-d); font-size: 0.82rem; }

/* ─── Reveal on scroll ─────────────────────────────────── */
.js [data-reveal] { opacity: 0; transform: translate3d(0, 24px, 0); transition: opacity 1s var(--ease), transform 1s var(--ease); transition-delay: calc(var(--d, 0) * 100ms); }
.js [data-reveal].is-in { opacity: 1; transform: none; }

/* ─── Reduced motion ───────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: 0.001ms !important; animation-delay: 0ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; transition-delay: 0ms !important; }
  .line > span { transform: none; }
  .gi-float, .gi-shadow { animation: none; }
  .js [data-reveal] { opacity: 1; transform: none; }
}
