/* Generated by scripts/bundle-home-css.mjs from 13 sources. Do not edit. */
/* scrollcraft.css */
/* ============================================================================
   scrollcraft.css: the taste floor
   ----------------------------------------------------------------------------
   Two layers, and the split matters:

     TOKENS   what you override per brand. Colour roles, the type ramp, the
              spacing scale, elevation, motion. A brand is ~12 values.
     DEVICES  what the engine drives. Do not restyle these to taste; they are
              the mechanism. Style your own markup instead.

   Nothing here draws a "component". There are no card, badge, or pill classes,
   because a stylesheet that ships those is how every page built on it ends up
   with the same shapes. You get a floor and a vocabulary; the composition is
   yours.
   ========================================================================== */

/* ---------------------------------------------------------------- tokens -- */
:root {
  /* --- colour roles. Override these six and the page is rebranded. -------- */
  --sc-canvas:      #08090b;   /* the page ground. Drift interpolates this.   */
  --sc-surface:     #101217;   /* anything raised off the ground             */
  --sc-ink:         #f4f2ef;   /* primary text                               */
  --sc-ink-soft:    #9a9ba1;   /* secondary text. Tinted, never flat gray.   */
  --sc-accent:      #d8ff3e;   /* ONE accent. It owns a region, not confetti. */
  --sc-accent-ink:  #08090b;   /* text that sits on the accent               */

  --sc-hairline:    color-mix(in oklab, var(--sc-ink) 12%, transparent);
  --sc-hairline-strong: color-mix(in oklab, var(--sc-ink) 22%, transparent);

  /* --- type. Two families max. Display carries voice, text carries prose. - */
  --sc-font-display: "Instrument Sans", "Geist", system-ui, sans-serif;
  --sc-font-text:    "Geist", system-ui, sans-serif;
  --sc-font-mono:    "Geist Mono", ui-monospace, monospace;

  /* Fluid ramp. Tracking tightens as size grows because a face set at 6rem
     with 0 tracking reads loose; this is optical correction, not decoration. */
  --sc-t-xs:   clamp(0.75rem, 0.72rem + 0.15vw, 0.82rem);
  --sc-t-sm:   clamp(0.875rem, 0.84rem + 0.18vw, 0.95rem);
  --sc-t-base: clamp(1rem, 0.96rem + 0.22vw, 1.125rem);
  --sc-t-lg:   clamp(1.2rem, 1.1rem + 0.5vw, 1.5rem);
  --sc-t-xl:   clamp(1.6rem, 1.35rem + 1.2vw, 2.25rem);
  --sc-t-2xl:  clamp(2.1rem, 1.6rem + 2.4vw, 3.4rem);
  --sc-t-3xl:  clamp(2.8rem, 1.9rem + 4.2vw, 5rem);
  --sc-t-4xl:  clamp(3.4rem, 1.9rem + 6.6vw, 7.5rem);

  --sc-track-tight:  -0.035em;
  --sc-track-snug:   -0.02em;
  --sc-track-normal: -0.005em;
  --sc-track-wide:    0.08em;

  --sc-leading-none: 0.94;
  --sc-leading-tight: 1.06;
  --sc-leading-body: 1.62;

  --sc-measure: 62ch;

  /* --- space. 4px base: the useful middle steps an 8-only scale misses. --- */
  --sc-1: 0.25rem;  --sc-2: 0.5rem;   --sc-3: 0.75rem;  --sc-4: 1rem;
  --sc-5: 1.5rem;   --sc-6: 2rem;     --sc-7: 3rem;     --sc-8: 4rem;
  --sc-9: 6rem;     --sc-10: 8rem;    --sc-11: 12rem;

  /* Section rhythm is fluid so a phone doesn't inherit desktop air. */
  --sc-section: clamp(4.5rem, 9vw, 11rem);
  --sc-gutter:  clamp(1.25rem, 5vw, 5.5rem);
  --sc-maxw:    82rem;

  /* --- radius. Pick one scale for the page and hold it. ------------------- */
  --sc-r-sm: 6px;  --sc-r-md: 12px;  --sc-r-lg: 20px;  --sc-r-pill: 999px;

  /* --- elevation. Every shadow has an offset AND a soft blur, and is tinted
         to the canvas hue. A zero-offset coloured halo is decoration, not
         depth, so there isn't one here. ---------------------------------- */
  --sc-shadow-color: 220 40% 2%;
  --sc-e1: 0 1px 2px hsl(var(--sc-shadow-color) / 0.28),
           0 2px 6px -1px hsl(var(--sc-shadow-color) / 0.20);
  --sc-e2: 0 2px 4px hsl(var(--sc-shadow-color) / 0.24),
           0 8px 18px -4px hsl(var(--sc-shadow-color) / 0.30);
  --sc-e3: 0 4px 8px hsl(var(--sc-shadow-color) / 0.22),
           0 18px 40px -8px hsl(var(--sc-shadow-color) / 0.38),
           0 48px 90px -24px hsl(var(--sc-shadow-color) / 0.30);

  /* Edge light: a 1px top highlight sells a raised surface better than any
     amount of blur, because real raised things catch light on their lip. */
  --sc-edge: inset 0 1px 0 color-mix(in oklab, var(--sc-ink) 10%, transparent);

  /* --- motion. Built-in CSS easings are too weak for UI. ------------------ */
  --sc-ease-out:    cubic-bezier(0.23, 1, 0.32, 1);
  --sc-ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
  --sc-ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
  --sc-d-fast: 160ms;  --sc-d-base: 240ms;  --sc-d-slow: 420ms;

  --sc-z-stage: 1; --sc-z-copy: 20; --sc-z-chrome: 60;
}

/* --------------------------------------------------------------- reset -- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
  margin: 0;
  background: var(--sc-canvas);
  color: var(--sc-ink);
  font-family: var(--sc-font-text);
  font-size: var(--sc-t-base);
  line-height: var(--sc-leading-body);
  letter-spacing: var(--sc-track-normal);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-synthesis-weight: none;
  overflow-x: clip;
}
img, video, canvas, svg { display: block; max-width: 100%; }
button, input, select, textarea { font: inherit; color: inherit; }

/* ------------------------------------------------- the browser surfaces --
   The parts you did not draw still carry the design. Selection, caret, focus
   ring, scrollbar and tabular numerals all ship with defaults that belong to no
   design system. Theming them is the cheapest signal that a page was built
   rather than assembled, and it is the step that gets skipped most reliably. */
::selection { background: var(--sc-accent); color: var(--sc-accent-ink); }
:root { caret-color: var(--sc-accent); accent-color: var(--sc-accent); }
:focus-visible {
  outline: 2px solid var(--sc-accent);
  outline-offset: 3px;
  border-radius: var(--sc-r-sm);
}
:where(a) { color: inherit; text-decoration-thickness: 1px; text-underline-offset: 0.22em; }
@supports (scrollbar-color: auto) {
  html { scrollbar-color: color-mix(in oklab, var(--sc-ink) 26%, transparent) transparent; scrollbar-width: thin; }
}
:where(table, .sc-nums, [data-sc-count]) { font-variant-numeric: tabular-nums; }

/* ----------------------------------------------------------- typography -- */
.sc-display {
  font-family: var(--sc-font-display);
  font-weight: 500;
  line-height: var(--sc-leading-none);
  letter-spacing: var(--sc-track-tight);
  text-wrap: balance;
  margin: 0;
}
.sc-display--xl { font-size: var(--sc-t-4xl); }
.sc-display--lg { font-size: var(--sc-t-3xl); }
.sc-display--md { font-size: var(--sc-t-2xl); letter-spacing: var(--sc-track-snug); }
.sc-lede {
  font-size: var(--sc-t-lg);
  line-height: 1.44;
  letter-spacing: var(--sc-track-snug);
  color: var(--sc-ink);
  max-width: 46ch;
  text-wrap: pretty;
  margin: 0;
}
.sc-body { max-width: var(--sc-measure); color: var(--sc-ink-soft); text-wrap: pretty; margin: 0; }
.sc-label {
  font-family: var(--sc-font-mono);
  font-size: var(--sc-t-xs);
  letter-spacing: var(--sc-track-wide);
  text-transform: uppercase;
  color: var(--sc-ink-soft);
}

/* ---------------------------------------------------------------- layout -- */
.sc-wrap { width: 100%; max-width: var(--sc-maxw); margin-inline: auto; padding-inline: var(--sc-gutter); }
.sc-section { padding-block: var(--sc-section); }
/* More space above a heading than below it: the gap belongs to the boundary,
   not to the pair. */
.sc-stack > * + * { margin-top: var(--sc-4); }
.sc-stack > :is(h1,h2,h3) { margin-top: var(--sc-7); }
.sc-stack > :is(h1,h2,h3):first-child { margin-top: 0; }
.sc-rule { height: 1px; border: 0; background: var(--sc-hairline); margin: 0; }

/* =============================================================== DEVICES ==
   Driven by the engine. Restyle your own markup, not these.                */

.sc-act--pinned { position: relative; }
.sc-stage {
  position: sticky; top: 0;
  height: 100vh; height: 100svh;
  overflow: clip;
  z-index: var(--sc-z-stage);
}

/* scrub / sequence media */
.sc-stage :is(video[data-sc-scrub], canvas[data-sc-sequence], .sc-stage__poster) {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
}
video[data-sc-scrub] { opacity: 0; transition: opacity 380ms var(--sc-ease-out); }
.sc-has-clip video[data-sc-scrub] { opacity: 1; }
/* The poster is a live frame-holder, not a placeholder: it stays up until a
   real video frame has painted, which is what stops the blank-stage flash. */
.sc-stage__poster { z-index: 0; transition: opacity 380ms var(--sc-ease-out); }
.sc-has-clip .sc-stage__poster { opacity: 0; }

/* A scrim only where text sits. A full-frame darkening layer flattens the
   image everywhere to fix contrast in one corner. */
.sc-scrim {
  position: absolute; inset: 0; pointer-events: none; z-index: 1;
  background: linear-gradient(
    var(--sc-scrim-angle, 180deg),
    color-mix(in oklab, var(--sc-canvas) var(--sc-scrim-a, 78%), transparent) 0%,
    color-mix(in oklab, var(--sc-canvas) 30%, transparent) 42%,
    transparent 68%);
}
/* Point the scrim at the copy. A scrim gradient that darkens the top while the
   copy sits at the bottom fixes contrast nowhere and flattens the image
   everywhere, which is the most common way text-over-video goes wrong. */
.sc-scrim--bottom { --sc-scrim-angle: 0deg; }
.sc-scrim--left   { --sc-scrim-angle: 90deg; }
.sc-scrim--right  { --sc-scrim-angle: 270deg; }

/* Corner scrims, for copy anchored to a corner. An edge gradient has to darken
   a whole band across the frame to cover one corner; a corner gradient puts the
   density where the text is and leaves the rest of the image alone. Pair with
   .sc-copy--lead / .sc-copy--trail. */
.sc-scrim--lead {
  background: linear-gradient(to top right,
    color-mix(in oklab, var(--sc-canvas) 94%, transparent) 0%,
    color-mix(in oklab, var(--sc-canvas) 72%, transparent) 30%,
    color-mix(in oklab, var(--sc-canvas) 30%, transparent) 52%,
    transparent 72%);
}
.sc-scrim--trail {
  background: linear-gradient(to top left,
    color-mix(in oklab, var(--sc-canvas) 94%, transparent) 0%,
    color-mix(in oklab, var(--sc-canvas) 72%, transparent) 30%,
    color-mix(in oklab, var(--sc-canvas) 30%, transparent) 52%,
    transparent 72%);
}
/* A band across the bottom, for copy that spans the full width of the frame.
   That is what both corner anchors become below 860px, and it is also the right
   shape whenever the copy block is wider than a corner. */
.sc-scrim--band {
  background: linear-gradient(to top,
    color-mix(in oklab, var(--sc-canvas) 94%, transparent) 0%,
    color-mix(in oklab, var(--sc-canvas) 74%, transparent) 22%,
    color-mix(in oklab, var(--sc-canvas) 30%, transparent) 42%,
    transparent 58%);
}
.sc-scrim--vignette {
  background: radial-gradient(120% 90% at 50% 45%, transparent 40%,
              color-mix(in oklab, var(--sc-canvas) 70%, transparent) 100%);
}

/* copy over a stage.
   max-width is in rem, never ch. A `ch` on this container resolves against the
   CONTAINER's font-size (body size), not the display size of the heading inside
   it, so `max-width: 20ch` here silently produces a ~180px column and wraps a
   hero headline to six lines. Set a ch measure on the text element itself. */
.sc-copy {
  position: absolute; z-index: var(--sc-z-copy);
  inset-inline: var(--sc-gutter);
  max-width: min(46rem, 76vw);
  will-change: opacity, transform;
}
.sc-copy--lead   { left: var(--sc-gutter); bottom: clamp(3rem, 12vh, 9rem); }
/* inset-inline FIRST. It is the shorthand for left+right, so declaring it after
   `left: 50%` resets left to auto and the block drifts off the left edge. */
.sc-copy--center { inset-inline: auto; left: 50%; top: 50%; translate: -50% -50%; text-align: center; }
.sc-copy--trail  { inset-inline: auto; right: var(--sc-gutter); bottom: clamp(3rem, 12vh, 9rem); text-align: right; }

/* cue defaults: the engine writes opacity/transform inline, these are the
   pre-paint state so nothing flashes before the first read() */
[data-sc-cue] { opacity: 0; will-change: opacity, transform; }
.sc-ready [data-sc-cue] { transition: none; }

/* kinetic split */
.sc-split { display: inline-block; overflow: hidden; vertical-align: top; }
/* Descenders live below the baseline; a line mask clipped to the line box eats
   the tails off g, y, p, j. The padding buys them room back. */
.sc-split--line { display: block; padding-bottom: 0.14em; margin-bottom: -0.14em; }
.sc-split__i { display: inline-block; will-change: transform, opacity; }
.sc-is-split { opacity: 1 !important; }

/* horizontal rail */
[data-sc-pan] { display: flex; will-change: transform; }

/* reveal + parallax */
[data-sc-reveal] { will-change: clip-path; }
[data-sc-parallax] { will-change: transform; }

/* flow reveal (fires once) */
[data-sc-in], [data-sc-stagger] > * {
  opacity: 0;
  transform: translate3d(0, 14px, 0);
  transition: opacity 620ms var(--sc-ease-out), transform 620ms var(--sc-ease-out);
}
[data-sc-in].sc-in, [data-sc-stagger] > .sc-in { opacity: 1; transform: none; }

/* pointer devices */
[data-sc-tilt] { transform-style: preserve-3d; will-change: transform; }
[data-sc-magnet] { will-change: transform; }
/* isolation always; position only if nothing more specific already set it.
   Written with :where() (zero specificity) on purpose: a plain `position:
   relative` here has the same weight as `.sc-stage` and, being later in the
   file, silently wins. A stage carrying both attributes then stops being
   sticky and the whole act scrolls away instead of pinning. */
[data-sc-spotlight] { isolation: isolate; }
:where([data-sc-spotlight]) { position: relative; }
[data-sc-spotlight]::after {
  content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 2;
  background: radial-gradient(
    28rem 28rem at calc(var(--sc-mx, 0.5) * 100%) calc(var(--sc-my, 0.5) * 100%),
    color-mix(in oklab, var(--sc-accent) 16%, transparent), transparent 70%);
  opacity: 0; transition: opacity var(--sc-d-slow) var(--sc-ease-out);
}
[data-sc-spotlight]:hover::after { opacity: 1; }

/* =========================================================== WORLDFLIGHT ==
   One fixed stage for the whole page. The only thing in document flow is the
   spacer, and it is empty. If you find yourself adding a section here, you want
   act mode instead: the moment a real block scrolls past the fixed stage, the
   page has a seam again and the whole point is gone.                        */

[data-sc-mode="worldflight"] { position: relative; }

.sc-world {
  position: fixed; inset: 0;
  overflow: clip;
  z-index: var(--sc-z-stage);
  background: var(--sc-canvas);
}

/* Every leg is mounted for the life of the page and stacked in the same box.
   The engine owns opacity, visibility and z-index here; do not set them. */
.sc-world__seg {
  position: absolute; inset: 0;
  opacity: 0;
  will-change: opacity;
}
.sc-world__seg > :is(video, img, canvas) {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
}
/* The poster is the frame-holder AND the first camera move: the engine pushes
   it in slowly until a real decoded frame is available to replace it. */
.sc-world__poster {
  z-index: 0;
  transform-origin: 50% 50%;
  transition: opacity 420ms var(--sc-ease-out);
}
.sc-world__seg > video { z-index: 1; }
.sc-world__seg.sc-has-clip .sc-world__poster { opacity: 0; }
/* The act stylesheet lights a clip through its ancestor act. A worldflight leg
   has no act, so match the class the engine also writes on the clip itself. */
video[data-sc-scrub].sc-has-clip { opacity: 1; }

/* The copy layer is fixed too, and inert by default: the engine hands
   pointer-events back to a block only while it is actually legible. */
.sc-world__copy {
  position: fixed; inset: 0;
  z-index: var(--sc-z-copy);
  pointer-events: none;
}
.sc-world__scrim { position: absolute; inset: 0; pointer-events: none; z-index: 0; }
[data-sc-copy] {
  opacity: 0;
  pointer-events: none;
  will-change: opacity, transform;
}
.sc-ready [data-sc-copy] { transition: none; }

/* The track. Empty on purpose. */
.sc-world__spacer { pointer-events: none; }

/* scroll progress */
[data-sc-progress] {
  position: fixed; inset: 0 0 auto 0; height: 2px; z-index: var(--sc-z-chrome);
  background: var(--sc-accent); transform-origin: 0 50%; transform: scaleX(0);
  will-change: transform;
}

/* ----------------------------------------------------------- atmosphere --
   Depth is not only shadow. Grain keeps a flat dark ground from banding, and
   it is the difference between "a dark page" and "a lit room". */
.sc-grain { position: fixed; inset: 0; pointer-events: none; z-index: 3; opacity: 0.045; }
.sc-grain::before {
  content: ""; position: absolute; inset: -50%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/></filter><rect width='140' height='140' filter='url(%23n)'/></svg>");
}

/* -------------------------------------------------------- reduced motion -- */
@media (prefers-reduced-motion: reduce) {
  /* Fewer and gentler, not zero. Opacity still carries the reveal so the page
     is comprehensible; every position change is dropped. */
  [data-sc-in], [data-sc-stagger] > * { transform: none; transition-duration: 220ms; }
  [data-sc-parallax], [data-sc-pan], .sc-split__i { transform: none !important; }
  /* A wipe is a position change too. Show reveal content settled. */
  [data-sc-reveal] { clip-path: none !important; }
  /* A rail's transform IS its navigation, not decoration. Zeroing it the way
     parallax and kinetic type are zeroed parks the act on its first screenful
     and makes everything past the fold unreachable: a device degrading into
     missing content. Hand the travel back to the reader as an ordinary scroll
     region instead, so the same items are all still gettable without motion.
     A build that would rather re-lay the rail out as a grid can still do that;
     this is the floor, not the ceiling. */
  [data-sc-act="pan"] .sc-stage,
  [data-sc-act="pan"] [data-sc-stage] {
    overflow-x: auto; overflow-y: hidden;
    overscroll-behavior-x: contain;
    scroll-snap-type: x proximity;
  }
  [data-sc-pan] > * { scroll-snap-align: center; }
  [data-sc-spotlight]::after { display: none; }
  /* A worldflight keeps its whole story here. No clip is ever fetched, so the
     posters are the film, and they cross-dissolve through exactly the same
     seams at exactly the same scroll positions. The push-in and the copy drift
     are the only things that go. */
  .sc-world__poster, [data-sc-copy] { transform: none !important; }
}

/* --------------------------------------------------------------- mobile -- */
@media (max-width: 860px) {
  .sc-copy { inset-inline: var(--sc-gutter); max-width: none; }
  .sc-copy--trail { text-align: left; }
  .sc-stage { height: 100svh; }
  /* .sc-copy--trail re-anchors to the left and spans the full width here, so a
     bottom-RIGHT corner gradient darkens the one corner the copy just left and
     guarantees a contrast failure over any bright clip. Point the density at
     the copy: the same band .sc-scrim--band paints. */
  .sc-scrim--trail {
    background: linear-gradient(to top,
      color-mix(in oklab, var(--sc-canvas) 94%, transparent) 0%,
      color-mix(in oklab, var(--sc-canvas) 74%, transparent) 22%,
      color-mix(in oklab, var(--sc-canvas) 30%, transparent) 42%,
      transparent 58%);
  }
}
/* ice-worlds.css */
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;font-family:Manrope,Arial,sans-serif;background:#e8f0f3;color:#142c3b;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,a,summary{-webkit-tap-highlight-color:transparent}a:focus-visible,summary:focus-visible{outline:3px solid #3b94c1;outline-offset:6px}img{display:block;max-width:100%}h1,h2,h3,p{margin:0}h1,h2{font-weight:500;letter-spacing:-.067em;line-height:1.02}h3{font-weight:600;letter-spacing:-.04em}p{line-height:1.6}.skip{position:fixed;left:20px;top:-80px;background:#fff;padding:15px;z-index:200}.skip:focus{top:15px}.ice-nav{position:absolute;top:0;left:0;width:100%;z-index:20;padding:32px 5.5vw;display:flex;align-items:center;justify-content:space-between}.wordmark{font-size:41.86px;font-weight:800;letter-spacing:-1.2px}.wordmark span{font-weight:400;margin-left:5px}.ice-nav nav{display:flex;align-items:center;gap:36px;font-size:13px;font-weight:600}.nav-contact{padding:13px 19px;border:1px solid #18354845;border-radius:2px}.nav-contact span{margin-left:28px}.ice-wrap{padding-left:7vw;padding-right:7vw}.eyebrow,.tiny-note{font-size:12px;letter-spacing:.14em;font-weight:700;line-height:1.7}.ice-button{display:inline-flex;gap:45px;align-items:center;background:#16374b;color:#f4fbff;padding:18px 25px;font-size:13px;font-weight:600;transition:background .2s,transform .2s}.ice-button:hover{background:#285774;transform:translateY(-2px)}.ice-button span{font-size:21px;line-height:1}.lede{font-size:17px;max-width:365px;margin:27px 0 32px;line-height:1.65}.studio-intro{min-height:85svh;padding-top:130px;padding-bottom:130px;display:grid;grid-template-columns:.75fr 2fr;gap:5vw;background:#f3f6f5}.studio-intro h2{font-size:clamp(36px,4.2vw,68px)}.studio-intro h2 span{color:#7191a2}.studio-intro p:not(.tiny-note){max-width:530px;margin-top:35px;font-size:17px;color:#526675}.ice-aperture{height:280svh;position:relative}.aperture-stage{height:100svh;min-height:720px;position:sticky;top:0;overflow:hidden;background:#dbe9ee}.aperture-depth{position:absolute;inset:0;background:url('/ice-in-motion/assets/ice-studio-world.webp') center/cover;opacity:.35;transform:scale(1.25)}.aperture-heading{position:absolute;left:8vw;right:8vw;top:10vh;text-align:center;z-index:3;pointer-events:none}.aperture-heading h2{font-size:clamp(45px,5.3vw,82px);margin:16px 0}.aperture-heading p:last-child{font-size:14px}.ice-door{position:absolute;inset:-8%;z-index:4;pointer-events:none;will-change:transform}.ice-door img{width:100%;height:100%;object-fit:cover;filter:drop-shadow(12px 15px 20px #28516a35)}.door-left{clip-path:inset(0 50% 0 0)}.door-right{clip-path:inset(0 0 0 50%)}.ice-product-grid{position:absolute;inset:auto 7vw 13vh;display:grid;grid-template-columns:repeat(4,1fr);gap:18px;z-index:5}.product-slab{position:relative;display:flex;flex-direction:column;min-width:0;min-height:335px;background:#f3f8fae8;border:1px solid #fff;box-shadow:0 16px 32px #31516913;padding:25px 23px;backdrop-filter:blur(16px)}.slab-meta{display:flex;justify-content:space-between;font-size:12px;letter-spacing:.09em}.slab-meta>span:last-child{font-size:23px;line-height:1}.slab-title{margin-top:43px}.slab-title h3{font-size:clamp(22px,2vw,34px)}.slab-title>p{font-size:12px;margin-top:8px;color:#587385}.slab-bottom{margin-top:auto;padding-top:28px}.slab-bottom>p{font-size:12px;color:#526a78;min-height:58px}.slab-bottom a{display:flex;justify-content:space-between;gap:8px;font-size:12px;font-weight:700;border-top:1px solid #90a9b64d;padding-top:17px;margin-top:20px}.slab-bottom a:hover{text-decoration:underline}.aperture-caption{position:absolute;bottom:5vh;left:7vw;right:7vw;display:flex;justify-content:space-between;font-size:12px;letter-spacing:.13em;z-index:5}.studio-close{position:relative;overflow:hidden;height:100svh;min-height:650px;display:grid;place-items:center;background:#d9e9f0;text-align:center}.close-ice{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.studio-close>div{position:relative;z-index:2}.studio-close h2{font-size:clamp(60px,9vw,144px);margin:27px 0 38px}.email-link{display:block;margin-top:23px;font-size:13px}.email-link:hover{text-decoration:underline}.ice-footer{padding:38px 5.5vw;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12px}.ice-footer>span{color:#68808e}
@media(min-width:1600px){.ice-product-grid{inset:auto 10vw 15vh}.product-slab{min-height:370px}}
@media(max-width:1050px){.ice-product-grid{left:4vw;right:4vw;gap:10px}.product-slab{padding:20px 15px}.slab-title h3{font-size:22px}.studio-intro{grid-template-columns:1fr}}
@media(max-width:700px){html{scroll-padding-top:25px}.ice-nav{padding:23px 6vw}.wordmark{font-size:34.58px}.ice-nav nav{gap:15px}.ice-nav nav>a:not(.nav-contact):not(.nav-route){display:none}.nav-contact{padding:10px 13px;font-size:12px}.nav-contact span{margin-left:12px}.eyebrow,.tiny-note{font-size:12px}.lede{font-size:14px;max-width:290px}.ice-button{padding:16px 20px;font-size:12px;gap:30px}.studio-intro{padding:85px 7vw;min-height:auto;gap:35px}.studio-intro h2{font-size:37px}.studio-intro p:not(.tiny-note){font-size:15px}.ice-aperture{height:auto}.aperture-stage{position:relative;height:auto;min-height:0;padding:70px 7vw 80px}.aperture-heading{position:relative;inset:auto;margin-bottom:40px;z-index:5}.aperture-heading h2{font-size:43px}.aperture-heading p:last-child{font-size:12px}.ice-product-grid{position:relative;inset:auto;grid-template-columns:1fr;gap:18px}.product-slab{min-height:300px;padding:26px}.slab-title{margin-top:34px}.slab-title h3{font-size:34px}.slab-bottom>p{min-height:0;font-size:13px}.slab-bottom a{font-size:12px}.ice-door{z-index:1;opacity:.55}.aperture-caption{position:relative;inset:auto;margin-top:34px;font-size:12px;gap:15px}.studio-close{height:90svh;min-height:640px}.close-ice{opacity:.7}.studio-close h2{font-size:70px}.ice-footer{padding:35px 7vw 100px;align-items:flex-start;flex-direction:column;gap:20px}.ice-footer>span{display:none}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.ice-aperture,.glacier-expedition{height:auto}.aperture-stage,.expedition-stage{position:relative;height:auto;padding:85px 7vw;min-height:0}.aperture-heading,.expedition-title{position:relative;inset:auto;margin-bottom:45px}.ice-product-grid{position:relative;inset:auto;transform:none!important;opacity:1!important}.ice-door{display:none}.aperture-caption,.expedition-meter{position:relative;inset:auto;margin-top:40px}[data-sc-reveal]{opacity:1!important;transform:none!important;clip-path:none!important}}.ice-product-grid{z-index:3}
@media(max-width:700px){.ice-aperture,.glacier-expedition{height:auto!important}}
@media(prefers-reduced-motion:reduce){.ice-aperture,.glacier-expedition{height:auto!important}}
/* ice-three-introduction.css */
/* Original icy 3, with separate layout space for the artwork and CTAs. */

.ice-crop-defs{position:absolute;pointer-events:none;overflow:hidden}
.wordmark{letter-spacing:-.055em;font-weight:800;text-transform:none;white-space:nowrap}
.ice-button{gap:0;font-size:14px;min-height:48px}
.nav-contact{font-size:14px}
.slab-bottom a{font-size:14px;min-height:44px;align-items:center}
.slab-meta,.slab-meta>span:last-child{font-size:12px;line-height:1.5}
.studio-intro h2 span{color:#466579}
.studio-intro p:not(.tiny-note),.making-copy>p,.making-copy li p{color:#405867}
.ice-studio .slab-title>p,.ice-studio .slab-bottom>p{color:#3c5666;font-size:14px}
.ice-studio .hero-baseline,.ice-studio .ice-footer>span{color:#405867}
.ice-studio .studio-close>div{background:#deedf3ed;padding:45px 50px;border-radius:3px}

@media(max-width:700px){.ice-studio .studio-close>div{width:88%;padding:35px 20px}}
/* ice-industry.css */
/* A restrained iGaming and Web3 layer within the existing ice worlds. */

/* Hallmark · genre: atmospheric · tone: icy editorial · anchor hue: blue
 * Existing split-hero and glacier layouts retained; case studies use long-form editorial rows.
 * Pre-emit critique: P4 H4 E4 S4 R4 V4. Source claims remain explicitly attributed. */
.ice-studio,.glacier-depth{--proof-paper:#e9f2f6;--proof-ink:#102d40;--proof-muted:#405b6d;--proof-rule:#aac0cf;--proof-panel:#cbdfe9;--proof-focus:#145d83;--proof-cover:#15384b;--proof-cover-ink:#edf7ff;--proof-cover-muted:#c9dce7;--proof-space:clamp(24px,7vw,112px)}

html,body{overflow-x:clip}
.ice-nav a,.case-source-link,.case-conversation a{white-space:nowrap}
.ice-nav nav{gap:24px}
.ice-brand-strip{position:relative;background:var(--proof-paper);color:var(--proof-ink);padding:40px var(--proof-space);border-block:1px solid var(--proof-rule);text-align:center}
.ice-brand-strip>p{font-size:13px;margin:0;color:var(--proof-muted)}

.case-section-heading h2,.ice-faq h2{font-size:clamp(38px,4.4vw,66px);letter-spacing:-.055em;line-height:1.08;max-width:650px;margin:0;overflow-wrap:anywhere}

.ice-faq{position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:64px;padding:112px var(--proof-space);color:var(--proof-ink);background:var(--proof-paper)}
.ice-faq>div>p{max-width:300px;line-height:1.8;font-size:15px;color:var(--proof-muted);margin:24px 0 0}
.faq-questions details{border-bottom:1px solid var(--proof-rule)}
.faq-questions details:first-child{border-top:1px solid var(--proof-rule)}
.faq-questions summary{list-style:none;cursor:pointer;position:relative;padding:24px 40px 24px 0;font-size:18px;line-height:1.5;font-weight:600}
.faq-questions summary::-webkit-details-marker{display:none}
.faq-questions summary::after{content:'+';position:absolute;right:4px;top:24px;font-size:24px;font-weight:400}
.faq-questions details[open] summary::after{content:'−'}
.faq-questions details>p{margin:0;padding:0 32px 28px 0;font-size:15px;line-height:1.8;color:var(--proof-muted)}
.faq-questions a{text-decoration:underline;text-underline-offset:4px}
.ice-cases a:focus-visible,.ice-brand-strip a:focus-visible,.ice-faq :focus-visible{outline:3px solid var(--proof-focus);outline-offset:5px}

@media(max-width:768px){.ice-nav nav{gap:16px}.case-section-heading,.ice-faq{grid-template-columns:minmax(0,1fr);gap:32px}.ice-cases,.ice-faq{padding-block:72px}.ice-faq h2 br{display:none}}
@media(max-width:700px){.ice-nav nav{gap:14px}.ice-nav nav a{font-size:12px}.ice-nav nav a[href="#work"]{display:none}.ice-brand-strip{padding-block:32px}}

/* Content-engine revision: preserve natural word spacing and dissolve the process artwork into the section. */
.ice-studio h1,.glacier-depth h1{letter-spacing:-.04em;word-spacing:.015em}
.ice-studio h2,.glacier-depth h2{letter-spacing:-.035em;word-spacing:.025em;line-height:1.12;overflow-wrap:anywhere}
.ice-studio h3,.glacier-depth h3,.ice-studio h4,.glacier-depth h4{letter-spacing:-.025em;word-spacing:.025em}

.studio-intro.engine-intro{display:block;padding-block:72px}
/* Intro sits directly under the heading. */
.engine-intro-heading{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:start;margin-bottom:40px}
.engine-intro-heading h2{font-size:clamp(38px,4.5vw,64px)}
.studio-intro .engine-intro-heading>p{margin:0;max-width:560px;font-size:17px}
.engine-services{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:72px}
.engine-services article{border-top:1px solid var(--proof-rule);padding:32px 0 40px}
.engine-services h3{font-size:30px;margin:0 0 20px}
.studio-intro .engine-services p{font-size:16px;line-height:1.8;max-width:520px;margin:0}
.studio-intro .engine-services .service-output,.glacier-work .work-lines .service-output{font-size:13px;font-weight:600;margin-top:24px;line-height:1.7}
.studio-intro .engine-services .service-links{font-size:14px;line-height:1.7;margin-top:8px}
.engine-services .service-links a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em}

@media(max-width:900px){.engine-services{column-gap:40px}}
@media(max-width:700px){.studio-intro.engine-intro{padding-block:56px}.engine-services{grid-template-columns:1fr}.engine-intro-heading{margin-bottom:32px}.engine-services article{padding-block:28px}.engine-services h3{font-size:28px}}

/* User-supplied scale figures, kept readable without animated counters. */
.ice-scale{position:relative;background:var(--proof-cover);color:var(--proof-cover-ink);padding:88px 7vw 96px}

.brand-logo-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;align-items:center;max-width:1200px;margin:28px auto 0}
.brand-logo-grid>div,.brand-logo-grid>a{display:flex;align-items:center;justify-content:center;min-height:112px;padding:24px}
.brand-logo-grid img{display:block;width:100%;max-width:180px;height:44px;object-fit:contain;filter:brightness(0) saturate(100%);opacity:.88}
.brand-logo-grid img[alt="io.finnet"]{filter:grayscale(1)}
.brand-logo-grid>a:focus-visible{outline:3px solid var(--proof-focus);outline-offset:-4px}

@media(max-width:600px){.ice-scale{padding-block:64px}.brand-logo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.brand-logo-grid>div,.brand-logo-grid>a{min-height:90px;padding:20px 14px}.brand-logo-grid img{height:34px;max-width:140px}}
/* tokens.css */
/* Existing Ice Studio identity, isolated tokens for the new motion layer. */
.ice-in-motion{
 --font-body:Manrope,Arial,sans-serif;
 --color-paper:oklch(96% .012 225);
 --color-ink:var(--proof-ink);
 --color-muted:var(--proof-muted);
 --color-glint:oklch(98% .012 220 / .8);
 --color-shadow:oklch(25% .035 230 / .45);
 --ease-out:cubic-bezier(.16,1,.3,1);
 --color-stage:var(--color-section-dark);
 --color-stage-ink:oklch(96% .012 225);
 --color-stage-muted:oklch(83% .025 225);
 --color-panel:oklch(90% .025 225);
 --color-rule:oklch(73% .03 225);
 --color-focus:oklch(44% .09 235);
 --color-overlay:oklch(18% .03 230 / .92);
 --color-overlay-soft:oklch(18% .03 230 / .12);
 --space-xs:.5rem;
 --space-sm:.75rem;
 --space-md:1rem;
 --space-lg:1.5rem;
 --space-xl:2.5rem;
 --space-2xl:4rem;
 --radius-panel:clamp(14px,1.4vw,20px);
 --radius-control:10px;
 --dur-short:150ms;
 --dur-panel:250ms;
 /* Approved compact proof / campaign layouts and alternating section surfaces. */
 --font-proof-display:'Archivo',Arial,sans-serif;
 --font-proof-body:'IBM Plex Sans',Arial,sans-serif;
 --color-section-light:oklch(94.7% .021 225);
 --color-section-dark:oklch(29% .045 232);
 --color-proof-light:oklch(96% .016 225);
 --color-proof-muted:oklch(49% .044 232);
 --color-proof-soft:oklch(81% .035 225);
 --color-proof-rule:oklch(77% .027 225);
 --color-proof-dark-rule:oklch(48% .04 232);
 --space-proof-edge:clamp(24px,6vw,96px);
}
/* explore.css */
/* Hallmark · component: six-service explorer · genre: editorial
 * Existing icy palette and Manrope retained. User-controlled state transitions.
 * Pre-emit critique: P4 H4 E4 S4 R5 V4 (source review, not browser QA). */
.ice-in-motion .format-tabs{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-xs);margin-bottom:var(--space-xl)}
.ice-in-motion .explore-button{appearance:none;font:inherit;font-size:.875rem;font-weight:600;line-height:1.4;white-space:nowrap;min-height:48px;padding:var(--space-sm) var(--space-lg);border:1px solid var(--color-rule);border-radius:var(--radius-control);background:transparent;color:var(--color-ink);cursor:pointer;transition:transform var(--dur-short) var(--ease-out)}
.ice-in-motion .explore-button[aria-selected=true],.ice-in-motion .explore-button[aria-pressed=true]{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink);text-decoration:underline;text-underline-offset:5px}
.ice-in-motion .explore-button:focus-visible,.ice-in-motion .format-panel:focus-visible{outline:3px solid var(--color-focus);outline-offset:4px}
.ice-in-motion .explore-button:active{transform:translateY(1px)}
.ice-in-motion .explore-button:disabled{opacity:.5;cursor:not-allowed}
@media(hover:hover){.ice-in-motion .explore-button:hover{background:var(--color-panel);color:var(--color-ink)}}
.ice-in-motion .format-panel[hidden]{display:none!important}
.ice-in-motion .engine-services.is-explorer{display:block}
.ice-in-motion .engine-services.is-explorer article{padding:0;border:0}
.ice-in-motion .format-panel{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-xl)}
.ice-in-motion .format-copy{padding-top:var(--space-lg)}
.ice-in-motion .format-copy h3{font-size:clamp(1.75rem,3vw,2.75rem);letter-spacing:-.025em;line-height:1.15;max-width:18ch;overflow-wrap:anywhere}
.ice-in-motion .format-copy .service-output{padding-top:var(--space-lg);border-top:1px solid var(--color-rule)}
.ice-in-motion .format-stage{border-radius:var(--radius-panel);background:var(--color-stage);color:var(--color-stage-ink);padding:var(--space-lg);min-width:0;display:flex;flex-direction:column;min-height:440px}
.ice-in-motion .format-panel > .format-stage{align-self:start;width:100%}
.ice-in-motion .format-stage .format-caption{font-size:.875rem;color:var(--color-stage-muted);margin:0 0 var(--space-lg);max-width:none}
.ice-in-motion .format-stage h4{font-size:clamp(1.375rem,2vw,1.75rem);line-height:1.2;letter-spacing:-.025em;max-width:22ch;margin:0 0 var(--space-lg);overflow-wrap:anywhere}
.ice-in-motion .format-stage .format-explanation{font-size:1rem;line-height:1.7;color:var(--color-stage-muted);margin:0;min-height:6.8em;max-width:52ch}
.ice-in-motion .format-sequence{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin:var(--space-lg) 0 var(--space-xl);padding:0;list-style:none}
.ice-in-motion .format-sequence li{font-size:.875rem;border-bottom:1px solid var(--color-stage-muted);padding-bottom:var(--space-xs);flex:1 1 130px;line-height:1.6}
.ice-in-motion .format-demo{display:grid;gap:var(--space-lg);grid-template-columns:minmax(0,1fr);align-items:start}
.ice-in-motion .format-sample{margin:0;min-width:0}
.ice-in-motion .sample-visual{position:relative;isolation:isolate;aspect-ratio:4/5;min-height:300px;background:var(--color-stage);color:var(--color-stage-ink);overflow:clip;display:flex;align-items:end}
.ice-in-motion .sample-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:grayscale(1);z-index:-2;transform:scale(1.02);transition:transform var(--dur-panel) var(--ease-out)}
.ice-in-motion .sample-visual:after{content:'';position:absolute;inset:0;background:linear-gradient(0deg,var(--color-overlay),var(--color-overlay-soft));z-index:-1}
.ice-in-motion .sample-text{padding:var(--space-lg);width:100%;background:var(--color-overlay);color:var(--color-stage-ink)}
.ice-in-motion .sample-label{display:block;font-size:.875rem;line-height:1.5;margin-bottom:var(--space-sm)}
.ice-in-motion .format-stage .sample-headline{font-size:clamp(1.5rem,2.4vw,2.25rem);font-weight:700;letter-spacing:-.025em;line-height:1.2;white-space:pre-line;color:var(--color-stage-ink);margin:0;overflow-wrap:anywhere}
.ice-in-motion .sample-note{font-size:.875rem;line-height:1.6;color:var(--color-stage-muted);margin-top:var(--space-sm)}
.ice-in-motion .format-stage .sample-disclaimer{font-size:.875rem;line-height:1.6;color:var(--color-stage-muted);margin:var(--space-lg) 0 0;max-width:none}
.ice-in-motion [data-kind=clipping][data-step='1'] .sample-image{transform:scale(1.25);object-position:50% 30%}
.ice-in-motion [data-kind=clipping][data-step='2'] .sample-image{transform:scale(1.5);object-position:50% 30%}
.ice-in-motion [data-kind=ugc][data-step='2'] .sample-headline,.ice-in-motion [data-kind=clipping][data-step='2'] .sample-headline{background:var(--color-paper);color:var(--color-ink);padding:var(--space-sm)}
.ice-in-motion [data-kind=ai] .sample-image,.ice-in-motion [data-kind=kol] .sample-image,.ice-in-motion [data-kind=memes] .sample-image{filter:none}
.ice-in-motion [data-kind=kol] .sample-visual{align-items:center}
.ice-in-motion [data-kind=streamers][data-step='2'] .sample-image{transform:scale(1.25)}
@media(min-width:48rem){.ice-in-motion .format-demo{grid-template-columns:minmax(0,1fr) minmax(0,.8fr)}}
@media(min-width:70rem){.ice-in-motion .format-panel{grid-template-columns:minmax(0,.55fr) minmax(0,1.45fr);gap:var(--space-xl)}.ice-in-motion .format-stage{padding:var(--space-xl)}}
@media(max-width:40rem){.ice-in-motion .format-tabs{gap:var(--space-xs)}.ice-in-motion .format-tabs .explore-button{padding-inline:var(--space-md)}.ice-in-motion .format-stage{padding:var(--space-md)}.ice-in-motion .engine-intro-heading{gap:var(--space-lg)}.ice-in-motion .sample-text{padding:var(--space-md)}}
@media(prefers-reduced-motion:reduce){.ice-in-motion .explore-button{transition:none}.ice-in-motion .explore-button:active{transform:none}}
@media(prefers-reduced-motion:reduce){.ice-in-motion .sample-image{transition:none}}

/* Service progression follows native scroll; the complete stage must fit. */
.ice-in-motion .service-scroll-track{position:relative}
.ice-in-motion .service-scroll-hint{font-size:.875rem!important;color:var(--color-muted)!important;margin:0 0 var(--space-md)!important}
.ice-in-motion .service-scroll-track .format-tabs{background:var(--color-section-light);color:var(--color-ink);padding-block:var(--space-sm);margin-bottom:var(--space-lg)}
.ice-in-motion .format-tabs [aria-current=true]{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink);text-decoration:underline;text-underline-offset:5px}
.ice-in-motion .is-scroll-pinned .service-scroll-stage{position:sticky;top:24px}
/* Pinned panels dissolve into the stage grid: every copy block shares one cell, every media box another. */
.ice-in-motion .is-scroll-pinned .engine-services{display:contents}
.ice-in-motion .is-scroll-pinned .format-panel{display:contents;visibility:hidden;pointer-events:none}
.ice-in-motion .is-scroll-pinned .format-panel.is-current{visibility:visible;opacity:1;pointer-events:auto}
.ice-in-motion .is-scroll-pinned .format-stage{padding:var(--space-lg)}
.ice-in-motion .is-scroll-pinned .sample-visual{height:clamp(240px,32svh,340px);min-height:240px;aspect-ratio:auto}
.ice-in-motion .is-scroll-pinned .format-copy h3{font-size:clamp(1.75rem,2.4vw,2.25rem)}
.ice-in-motion .is-scroll-stacked .format-panel{margin-bottom:var(--space-2xl);padding-bottom:var(--space-2xl)!important;border-bottom:1px solid var(--color-rule)!important;scroll-margin-top:var(--service-anchor-offset,160px)}
.ice-in-motion .is-scroll-stacked .format-tabs{position:sticky;top:12px;z-index:8}
.ice-in-motion .ice-product-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:700px){.ice-in-motion .ice-product-grid{grid-template-columns:minmax(0,1fr)}}
@media(prefers-reduced-motion:reduce){.ice-in-motion .service-scroll-track .format-panel{transition:none}}

/* Real supplied media: original colour and complete frames, with no overlays. */
.ice-in-motion .supplied-media-stage{margin:0;min-height:0;align-items:stretch}
.ice-in-motion .service-media-content{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-xl);align-items:center}
.ice-in-motion .service-media{display:block;width:min(100%,29.25svh,292.5px);height:auto;aspect-ratio:9/16;object-fit:contain;background:#071a22;max-width:100%;border:0;justify-self:center}
.ice-in-motion .supplied-media-stage .format-description{min-width:0}
.ice-in-motion .supplied-media-stage .format-explanation{min-height:0}
.ice-in-motion .supplied-media-stage .format-sequence{display:block;margin-bottom:0}
.ice-in-motion .supplied-media-stage .format-sequence li{padding-block:var(--space-sm)}
.ice-in-motion video.service-media:focus-visible{outline:3px solid var(--color-stage-ink);outline-offset:4px}
.ice-in-motion .supplied-media-stage[data-media-type=image] .service-media-content{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr)}
.ice-in-motion .supplied-media-stage[data-media-type=image] .service-media{background:transparent;aspect-ratio:2392/1226;width:100%}
@media(max-width:700px){.ice-in-motion .service-media-content,.ice-in-motion .supplied-media-stage[data-media-type=image] .service-media-content{grid-template-columns:minmax(0,1fr);gap:var(--space-lg)}.ice-in-motion .service-media{width:min(100%,320px)}.ice-in-motion .supplied-media-stage .format-description{padding-top:var(--space-sm)}}
/* Phones: one swipeable row of service tabs keeps the sticky bar short instead of two wrapped rows. */
@media(max-width:40rem){.ice-in-motion .is-scroll-stacked .format-tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;overscroll-behavior-x:contain;top:0}.ice-in-motion .is-scroll-stacked .format-tabs::-webkit-scrollbar{display:none}.ice-in-motion .is-scroll-stacked .format-tabs .explore-button{flex:0 0 auto}}

/* Compact composition (pinned, wide screens): heading, intro, tabs and service copy fill the left
 * column; the media box spans the full height on the right. Media scale with the viewport so the
 * box stays full instead of floating a small video in empty space. */
.ice-in-motion .is-scroll-pinned .service-scroll-stage{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);grid-template-rows:auto minmax(0,1fr) auto auto minmax(0,1fr) auto;column-gap:var(--space-xl);align-items:start}
.ice-in-motion .is-scroll-pinned .engine-intro-heading{grid-column:1;grid-row:1;margin:0 0 var(--space-lg);gap:var(--space-md)}
.ice-in-motion .is-scroll-pinned .engine-intro-heading h2{font-size:clamp(36px,3.2vw,64px)}
.ice-in-motion .is-scroll-pinned .service-scroll-hint{grid-column:1;grid-row:3;margin:0 0 var(--space-sm)!important}
.ice-in-motion .is-scroll-pinned .format-tabs{grid-column:1;grid-row:4;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding-block:0;margin-bottom:var(--space-lg)}
.ice-in-motion .is-scroll-pinned .format-tabs .explore-button{padding-inline:var(--space-sm)}
.ice-in-motion .is-scroll-pinned .format-copy{grid-column:1;grid-row:6;align-self:end;padding-top:0}
/* Type scales up on large screens so the columns stay full rather than gappy. */
.ice-in-motion .is-scroll-pinned .engine-intro-heading>p{font-size:clamp(17px,1vw,20px);max-width:36em}
.ice-in-motion .is-scroll-pinned .format-copy h3{font-size:clamp(1.75rem,2.2vw,2.75rem);max-width:none}
.ice-in-motion .is-scroll-pinned .format-copy p:not(.service-output){font-size:clamp(16px,.95vw,19px)}
.ice-in-motion .is-scroll-pinned .format-copy p{max-width:none}
.ice-in-motion .is-scroll-pinned .format-stage h4{font-size:clamp(1.375rem,1.9vw,2.5rem)}
.ice-in-motion .is-scroll-pinned .format-stage .format-explanation{font-size:clamp(1rem,.95vw,1.2rem)}
.ice-in-motion .is-scroll-pinned .format-sequence li{font-size:clamp(.875rem,.8vw,1rem)}
.ice-in-motion .is-scroll-pinned .format-stage{grid-column:2;grid-row:1/-1;align-self:stretch;container-type:inline-size}
.ice-in-motion .is-scroll-pinned .format-stage .format-caption{margin-bottom:var(--space-md)}
.ice-in-motion .is-scroll-pinned .service-media-content{flex:1;grid-template-columns:auto minmax(0,1fr);gap:var(--space-xl);align-items:center}
.ice-in-motion .is-scroll-pinned video.service-media{width:auto;max-width:none;height:clamp(300px,min(calc(100svh - 150px),72cqi),800px);justify-self:start}
.ice-in-motion .is-scroll-pinned .format-stage h4{max-width:none}
/* Landscape stream still: full width on top, brief and deliverables side by side beneath it. */
.ice-in-motion .is-scroll-pinned .supplied-media-stage[data-media-type=image] .service-media-content{grid-template-columns:minmax(0,1fr);align-items:start;align-content:center;gap:var(--space-lg)}
.ice-in-motion .is-scroll-pinned .supplied-media-stage[data-media-type=image] .service-media{width:100%;max-height:calc(100svh - 340px);object-fit:contain;object-position:left center}
.ice-in-motion .is-scroll-pinned .supplied-media-stage[data-media-type=image] .format-description{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:var(--space-xl);align-items:start}
.ice-in-motion .is-scroll-pinned .supplied-media-stage[data-media-type=image] .format-description h4{grid-column:1;margin-bottom:var(--space-sm)}
.ice-in-motion .is-scroll-pinned .supplied-media-stage[data-media-type=image] .format-explanation{grid-column:1}
.ice-in-motion .is-scroll-pinned .supplied-media-stage[data-media-type=image] .format-sequence{grid-column:2;grid-row:1/span 2;margin-top:0}
.ice-in-motion .is-scroll-pinned .supplied-media-stage[data-media-type=image] .format-sequence li:first-child{padding-top:0}
/* KOL avatars grow with the box. */
.ice-in-motion .is-scroll-pinned .kol-cluster .service-media-content{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}
.ice-in-motion .is-scroll-pinned .kol-cloud{max-width:min(100%,480px);padding-block:0}
.ice-in-motion .is-scroll-pinned .kol-avatar{max-width:150px}
/* Shorter laptop screens: trim spacing so the compact composition still fits the viewport. */
/* Service-page links stay a quiet footnote under the output line in every layout; short viewports tighten them below so the explorer still pins. */
.ice-in-motion .format-copy p.service-links,.ice-in-motion .is-scroll-pinned .format-copy p.service-links{font-size:14px;line-height:1.6;margin-top:var(--space-xs)}
@media(max-height:860px){.ice-in-motion .is-scroll-pinned .engine-intro-heading{margin-bottom:var(--space-sm);gap:var(--space-xs)}.ice-in-motion .is-scroll-pinned .engine-intro-heading>p{font-size:16px}.ice-in-motion .is-scroll-pinned .service-scroll-hint{margin-bottom:var(--space-xs)!important}.ice-in-motion .is-scroll-pinned .format-tabs{margin-bottom:var(--space-md)}.ice-in-motion .is-scroll-pinned .format-tabs .explore-button{min-height:40px;padding-block:var(--space-xs)}.ice-in-motion .is-scroll-pinned .format-copy h3{margin-bottom:8px}.ice-in-motion .is-scroll-pinned .format-copy .service-output{margin-top:8px;padding-top:8px}.ice-in-motion .is-scroll-pinned .format-copy p.service-links{font-size:13px;line-height:1.3;margin-top:2px}}
/* Stacked fallback on tablets and short desktops: the video hugs the box edge instead of floating centred. */
@media(min-width:701px){.ice-in-motion .is-scroll-stacked .supplied-media-stage[data-media-type=video] .service-media-content{grid-template-columns:auto minmax(0,1fr)}}
/* process.css */
/* The process copy stands on its own; no duplicate service cards or sculpture. */
.ice-in-motion #process{display:block;min-height:0;padding-block:clamp(80px,9vw,140px)}
/* kol-cluster.css */
/* Hallmark · component: crypto avatar cluster · genre: editorial · theme: existing ice
 * Pre-emit critique: P4 H4 E4 S5 R5 V4 (source review, not browser QA).
 * Shared dark service-stage tokens; existing typography and service copy retained.
 * Decorative hover only; avatars are not buttons or selectable controls. */
.ice-in-motion .kol-cluster{border-radius:var(--radius-panel);margin:0;min-width:0;background:var(--color-stage);color:var(--color-stage-ink);padding:var(--space-lg)}
.ice-in-motion .kol-cluster .service-media-content{flex:1}
.ice-in-motion .kol-cloud{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:center;justify-items:center;gap:var(--space-md);width:100%;max-width:360px;margin:0 auto;padding:var(--space-lg) 0}
.ice-in-motion .kol-orbit{width:100%;display:grid;place-items:center;min-width:0}
.ice-in-motion .kol-avatar{position:relative;display:grid;place-items:center;width:100%;max-width:104px;aspect-ratio:1;padding:0;border:3px solid var(--color-paper);border-radius:50%;background:var(--color-panel);color:var(--color-ink);box-shadow:0 8px 24px var(--color-overlay-soft);transition:transform var(--dur-panel) var(--ease-out)}
.ice-in-motion .kol-avatar img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;border-radius:inherit;opacity:0}
.ice-in-motion .kol-avatar[data-state=success] img{opacity:1}
.ice-in-motion .kol-avatar[data-state=success] .kol-fallback{visibility:hidden}
.ice-in-motion .kol-pixel{image-rendering:pixelated}
.ice-in-motion .kol-avatar[data-state=loading]{border-style:dashed}
.ice-in-motion .kol-avatar[data-state=error]{border-style:dotted}
@media(min-width:70rem){.ice-in-motion .kol-cluster{padding:var(--space-xl)}}
.ice-in-motion .is-scroll-pinned .kol-cluster{padding:var(--space-lg)}
@media(hover:hover){.ice-in-motion .kol-avatar:hover{transform:translateY(-6px)}}
@media(max-width:40rem){.ice-in-motion .kol-cluster{padding:var(--space-md)}.ice-in-motion .kol-cloud{gap:var(--space-md) var(--space-xs);padding:var(--space-lg) var(--space-xs)}.ice-in-motion .kol-avatar{border-width:2px}}
@media(prefers-reduced-motion:reduce){.ice-in-motion .kol-avatar{transition:none}.ice-in-motion .kol-avatar:hover{transform:none}}
/* motion.css */
/* Hallmark · macrostructure: split hero with scroll reveal · icy editorial
 * Pre-emit critique: P4 H4 E3 S4 R4 V3 (source review; no browser QA).
 * Approved typography, palette, navigation and content retained by request.
 * One authored sequence: contact, turn, ten-shard reveal. */
html,body{overflow-x:clip}
.ice-in-motion{font-family:var(--font-body)}
.motion-opening{position:relative;background:var(--color-paper)}
.motion-stage{position:relative;isolation:isolate;overflow:clip;padding:132px 7vw 88px;min-height:780px}
.motion-landscape{position:absolute;inset:0;z-index:-1;background:url('/ice-in-motion/assets/ice-studio-world.webp') center/cover;opacity:.16}
.motion-copy{position:relative;z-index:3;max-width:900px}
.motion-copy h1{font-size:clamp(36px,4.1vw,72px);line-height:1.12;letter-spacing:-.045em;margin-top:24px;min-width:0}
.motion-copy h1>span{display:block;white-space:nowrap}
.motion-copy .eyebrow{font-size:clamp(12px,1vw,15px);letter-spacing:.12em;max-width:560px}
.motion-copy .lede{color:var(--color-muted);max-width:560px;font-size:clamp(18px,1.45vw,23px);line-height:1.65;margin:30px 0 34px}
/* Approved CTA option 03: frosted glass, dark readable text and softly
 * asymmetric corners. Keep the hit area and keyboard outline intact. */
.ice-in-motion :is(.ice-button,.nav-contact){position:relative;isolation:isolate;color:#173a4d;background:linear-gradient(155deg,#ffffffbb,#b9d9e6 70%,#90b7cd);border:0;border-radius:14px 10px 19px 13px;box-shadow:inset 0 1px 0 #fff,inset 0 0 0 1px #83adbf,0 5px 9px #244f6112}
.ice-in-motion :is(.ice-button,.nav-contact):hover{color:#173a4d;background:linear-gradient(155deg,#fff,#c9e4ee 70%,#a2c9dc);box-shadow:inset 0 1px 0 #fff,inset 0 0 0 1px #729eb3,0 6px 12px #244f6120}
.ice-in-motion :is(.ice-button,.nav-contact):focus-visible{outline:3px solid var(--proof-focus);outline-offset:5px}
.motion-art{position:relative;width:180%;margin-left:-40%;aspect-ratio:1.5;pointer-events:none;z-index:2}
.motion-orbit,.motion-number,.motion-fragment,.motion-shine{position:absolute;inset:0;transform-origin:50% 82%}
.motion-orbit{transform-style:preserve-3d}
.motion-intact,.motion-fragment img,.motion-pedestal,.motion-pedestal img{position:absolute;inset:0;width:100%;height:100%;max-width:none}
.motion-intact,.motion-fragment img,.motion-shine{clip-path:url(#motion-three)}
.motion-fragment{opacity:0}
/* Complete alpha-cutout chip, independent of the falling numeral. Its
 * transparent canvas is positioned to match the original landing surface. */
.motion-pedestal img{left:25.7%;top:71.4%;width:48.1%;height:27.8%;object-fit:fill}
.motion-shadow{position:absolute;left:33%;top:82.5%;width:34%;height:3%;border-radius:50%;background:var(--color-shadow);filter:blur(9px);opacity:.4}
.motion-ripple{position:absolute;left:27%;top:80%;width:46%;height:13%;border:2px solid var(--color-glint);border-radius:50%;opacity:0}
.motion-shine{opacity:0;mix-blend-mode:screen}
.motion-shine i{display:block;position:absolute;inset:-10%;background:linear-gradient(112deg,transparent 43%,var(--color-glint) 49%,transparent 55%);transform:translateX(-60%)}
.motion-striker{position:absolute;left:36.7%;top:48%;width:16.8%;aspect-ratio:320/336;opacity:0;z-index:5;pointer-events:none;will-change:transform,opacity}
.motion-striker-spin{width:100%;height:100%;transform-style:preserve-3d}
.motion-striker-crop{position:absolute;inset:0}
.motion-striker-crop img{display:block;width:100%;height:100%;object-fit:contain}
.motion-fractures{position:absolute;inset:0;width:100%;height:100%;clip-path:url(#motion-three);opacity:0;pointer-events:none}
.motion-fractures path{fill:none;stroke:#e8fbff;stroke-width:.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;filter:drop-shadow(0 1px 1px #396679)}
.motion-impact{position:absolute;left:42.5%;top:48%;width:9%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,#f1fdff 0,rgba(215,242,250,.6) 20%,rgba(215,242,250,0) 68%);opacity:0;pointer-events:none;z-index:4}
.motion-reveal{display:none;position:absolute;inset:0;padding:100px 7vw;align-content:center;text-align:center;z-index:1;opacity:0;pointer-events:none}
.motion-reveal h2{font-size:clamp(44px,7vw,100px);letter-spacing:-.045em;line-height:1.08;color:var(--color-ink)}
.motion-reveal p{margin:32px auto 0;color:var(--color-muted);font-size:clamp(15px,1.6vw,21px);line-height:2}
.motion-return{position:relative;width:210px;height:210px;margin:-28px auto 12px;pointer-events:none}
.motion-return img{display:block;width:100%;height:100%;object-fit:contain}
.ice-in-motion .studio-close .motion-close-copy{padding-top:44px;background:transparent}
.ice-in-motion .studio-close{min-height:820px;height:auto;padding:80px 0}
@media(min-width:900px){
 /* Keep the intro clear of the artwork, which grows faster than the text column. */
 .motion-copy .lede{max-width:min(560px,42vw)}
 /* Add one original approach interval (.22) so that flight takes twice
  * the scroll distance without speeding up the landing or shatter. */
 .motion-opening.is-enhanced{height:calc(190svh + (190svh - max(100svh,680px)) * .22)}
 .motion-stage{height:100svh;min-height:680px;display:flex;align-items:center;padding-top:130px;padding-bottom:110px}
 .is-enhanced .motion-stage{position:sticky;top:0}
 .motion-copy{width:62%}
 .motion-art{position:absolute;width:min(86%,1360px,120svh);margin:0;right:-8%;top:55%;transform:translateY(-50%);clip-path:inset(0 -100% -100% -100%)}
 
 .is-enhanced .motion-reveal{display:grid}
}
/* Keep the product introduction and cards in flow so shorter viewports cannot
 * push the independently positioned cards into the description. */
@media(min-width:701px){
 .ice-in-motion .aperture-stage{height:auto;min-height:100svh;padding:clamp(64px,8vh,100px) 7vw 56px;display:flex;flex-direction:column;justify-content:center}
 .ice-in-motion .aperture-heading{position:relative;inset:auto;margin:0;flex-shrink:0}
 .ice-in-motion .ice-product-grid{position:relative;inset:auto;width:100%;margin-top:clamp(44px,5vh,64px);flex-shrink:0}
 .ice-in-motion .aperture-caption{position:relative;inset:auto;margin-top:36px;flex-shrink:0}
}
@media(max-width:899px){
 .motion-stage{padding-top:128px;padding-bottom:70px;min-height:0}
 .motion-copy{max-width:740px}
 .motion-copy h1{font-size:clamp(27px,8vw,62px)}
 .motion-copy .lede{font-size:18px;margin:24px 0 28px}
 .motion-art{margin-top:-16px;margin-bottom:-12px}
 
 .ice-in-motion .ice-nav{padding:24px 7vw}
}
@media(max-width:400px){
 .motion-stage{padding-top:138px}
 
}
@media(prefers-reduced-motion:reduce){
 .motion-opening.is-enhanced{height:auto}
 .is-enhanced .motion-stage{position:relative}
 .is-enhanced .motion-reveal{display:none}
 
 .motion-return,.motion-orbit,.motion-number,.motion-copy{transform:none!important;opacity:1!important}
 .motion-fragment{transform:none!important;opacity:0!important}
 .motion-intact{opacity:1!important}
 .motion-shine,.motion-ripple,.motion-striker,.motion-fractures,.motion-impact{display:none}
}

/* Header nav: links and "Let's talk" button at 130% */
.ice-in-motion .ice-nav nav{gap:31.2px}
.ice-in-motion .ice-nav nav a{font-size:16.9px}
.ice-in-motion .ice-nav .nav-contact{font-size:18.2px;padding:16.9px 24.7px}
@media (max-width:768px){.ice-in-motion .ice-nav nav{gap:20.8px}}
@media (max-width:700px){
 .ice-in-motion .ice-nav nav{gap:18.2px}
 .ice-in-motion .ice-nav .nav-contact{font-size:15.6px;padding:13px 16.9px}
}
/* proof-layout.css */
/* Hallmark · macrostructure: Stat-Led · tone: editorial · anchor hue: ice blue
 * Approved compact proof and campaign evidence previews; existing motion preserved.
 * Pre-emit critique: P5 H5 E4 S5 R5 V4. */

html, body.ice-in-motion { overflow-x: clip; }
.ice-in-motion :is(.ice-brand-strip, .studio-intro, .studio-making, .studio-close) {
  background-color: var(--color-section-light);
}
.ice-in-motion .proof-strip {
  padding: var(--space-xl) var(--space-proof-edge);
  color: var(--color-section-dark);
  background: var(--color-section-light);
  font-family: var(--font-proof-body);
}
.proof-strip-inner {
  display: grid;
  gap: var(--space-xl);
  padding-block: var(--space-xl);
}
.ice-in-motion .proof-strip h2 {
  max-width: 260px;
  margin: 0;
  font: 700 24px/1.2 var(--font-proof-display);
  letter-spacing: -.035em;
  overflow-wrap: anywhere;
}
.proof-strip-heading p {
  max-width: 290px;
  margin: var(--space-md) 0 0;
  font-size: 16px;
  line-height: 1.5;
  color: var(--color-proof-muted);
}
.proof-metrics {
  display: grid;
  grid-template-columns: repeat(2,minmax(0,1fr));
  gap: var(--space-xl) var(--space-lg);
  margin: 0;
}
.proof-metrics div { display:flex; flex-direction:column; gap:var(--space-xs); min-width:0; }
.proof-metrics dt { font-size:15px; line-height:1.5; color:var(--color-proof-muted); order:2; }
.proof-metrics dd { margin:0; font:500 36px/1 var(--font-proof-body); letter-spacing:-.055em; }

/* Preserve the original glacier section; alternate the other section surfaces. */
.ice-in-motion :is(.ice-faq, .ice-footer) {
  color: var(--color-proof-light);
  background-color: var(--color-section-dark);
}
.ice-in-motion .ice-faq { --proof-rule:var(--color-proof-dark-rule); --proof-focus:var(--color-proof-light); }
.ice-in-motion .ice-faq :is(h2,summary) { color:var(--color-proof-light); }
.ice-in-motion .ice-faq>div>p,
.ice-in-motion .faq-questions details>p,
.ice-in-motion .ice-footer span { color:var(--color-proof-soft); }
.ice-in-motion .ice-footer nav { display:flex; flex-wrap:wrap; gap:var(--space-lg); }
.ice-in-motion .ice-footer a { white-space:nowrap; }
.ice-in-motion .ice-footer a:focus-visible { outline:3px solid var(--color-proof-light); outline-offset:5px; }
/* Trustpilot Review Collector: reserve the iframe box so the footer does not shift when it loads. */
.ice-in-motion .ice-footer .trustpilot-badge { width:180px; min-height:52px; display:flex; align-items:center; }
/* The widget centres its 92px button in the 180px box (narrower boxes switch to an unreadable mini button),
   so pull it back to the left edge where the stacked mobile footer aligns everything else. */
@media(max-width:700px) { .ice-in-motion .ice-footer .trustpilot-badge { margin-left:-44px; } }

@media(min-width:640px) {
  .proof-metrics { grid-template-columns:repeat(4,minmax(0,1fr)); }
  .proof-metrics dt { font-size:16px; }
  .proof-metrics dd { font-size:40px; }
}
@media(min-width:1024px) {
  .proof-strip-inner { grid-template-columns:minmax(0,1fr) minmax(0,2.8fr); align-items:center; gap:var(--space-2xl); }
  .proof-metrics { gap:var(--space-xl); }
}
/* campaign-content.css */
/* Content-only additions; preserve the approved glacier scene and motion. */
.ice-in-motion .campaign-detail {
  display: block;
  border-top: 1px solid var(--proof-rule);
  padding-top: 17px;
  margin-top: 20px;
  font-size:12px;
  font-weight: 700;
}
.ice-in-motion .aperture-heading h2 {
  min-width: 0;
  overflow-wrap: anywhere;
}
.ice-in-motion .campaign-anchor {
  position: absolute;
  top: 0;
  left: 0;
}
/* telegram-contact.css */
/* Both contact options share the existing frosted-glass button styles. */
.contact-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 16px 24px;
}
.telegram-contact {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  white-space: nowrap;
}
.telegram-icon { display: block; width: 20px; height: 20px; flex: 0 0 20px; }
.studio-close .contact-actions { justify-content: center; padding-inline: 7vw; }
.ice-nav .contact-actions { flex-wrap: nowrap; }
.hero-contact-actions { display: flex; align-items: center; gap: 12px; }
.hero-telegram { display: none; }
@media (max-width: 1100px) {
  .ice-in-motion .ice-nav { flex-wrap: wrap; gap: 16px; }
  .ice-in-motion .ice-nav nav { width: 100%; justify-content: space-between; gap: 16px; }
  .ice-in-motion .ice-nav nav a { font-size: 14px; }
  .ice-in-motion .ice-nav .nav-contact { font-size: 15px; padding: 13px 17px; }
  .ice-in-motion .motion-stage { padding-top: 190px; }
}
@media (max-width: 400px) {
  .ice-in-motion .ice-nav .nav-contact { font-size: 13px; padding: 13px 12px; }
}
@media (max-width: 700px) {
  /* Phones keep the routes to the rest of the site; the hero carries the contact buttons. */
  .ice-in-motion .ice-nav { flex-wrap: nowrap; }
  .ice-in-motion .ice-nav nav { width: auto; gap: 18px; }
  .ice-in-motion .ice-nav nav > a:not(.nav-route), .ice-in-motion .ice-nav .contact-actions { display: none; }
  .ice-in-motion .ice-nav .wordmark { font-size: 30px; }
  .ice-in-motion .motion-stage { padding-top: 132px; }
  .hero-telegram { display: inline-flex; }
  .hero-contact-actions .ice-button { padding: 15px 14px; font-size: 12px; line-height: 20px; white-space: nowrap; }
  .case-conversation .contact-actions { gap: 12px 20px; }
}
@media (max-width: 400px) {
  /* Three header routes (Services, Cases, Insights) keep the side padding on 360px phones. */
  .ice-in-motion .ice-nav { gap: 12px; }
  .ice-in-motion .ice-nav .wordmark { font-size: 26px; }
  .ice-in-motion .ice-nav nav { gap: 10px; }
  .ice-in-motion .ice-nav .nav-route { font-size: 13px; }
}
@media (max-width: 359px) {
  /* Below 360px Insights stays in the footer so the header never overflows. */
  .ice-in-motion .ice-nav nav > a.nav-route[href="/insights/"] { display: none; }
}

/* Conversion pass (25 Oct 2026). The booking button is the primary action everywhere on the
   homepage, so it reads darker than the frosted Telegram button beside it. */
.ice-in-motion .ice-button.ice-button--primary { color: #f4fbff; background: linear-gradient(155deg, #285774, #16374b 70%, #0f2a3a); box-shadow: inset 0 1px 0 #ffffff40, 0 6px 14px #16374b33; }
.ice-in-motion .ice-button.ice-button--primary:hover { color: #fff; background: linear-gradient(155deg, #326887, #1c4560 70%, #143448); }
.hero-offer, .close-offer, .home-book__offer { font-size: 14px; line-height: 1.6; color: #43606f; max-width: 420px; }
.hero-offer { margin-top: 16px; }
.close-offer { margin: -14px auto 26px; }

/* Inline booking slot between the campaign walkthrough and Latest. */
.home-book { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: 5vw; align-items: center; padding: 110px 7vw; background: #f3f7fa; }
.home-book h2 { font-size: clamp(40px, 4.4vw, 70px); margin: 16px 0 24px; }
.home-book__copy > p:not(.eyebrow) { font-size: 17px; color: #43606f; max-width: 460px; }
.home-book__offer { margin: 18px 0 30px; }
.home-book__slot iframe { display: block; width: 100%; height: 700px; border: 0; background: #f3f7fa; }

/* Mobile action bar: hidden on desktop, fixed to the bottom on phones. */
.home-sticky { display: none; }
@media (max-width: 700px) {
  .hero-offer { font-size: 13px; max-width: 300px; }
  .home-book { grid-template-columns: 1fr; padding: 80px 7vw; }
  .home-book h2 { font-size: 40px; }
  .home-book__copy > p:not(.eyebrow) { font-size: 15px; }
  .home-book__slot { display: none; }
  .home-book .contact-actions { gap: 12px; }
  .home-sticky { display: flex; gap: 10px; position: fixed; inset: auto 0 0 0; z-index: 40; padding: 10px 6vw calc(10px + env(safe-area-inset-bottom)); background: #0f2a3aee; backdrop-filter: blur(10px); }
  .home-sticky .ice-button { flex: 1 1 auto; justify-content: center; min-height: 46px; padding: 12px 14px; font-size: 14px; border-radius: 12px; }
  .home-sticky .ice-button:not(.ice-button--primary) { flex: 0 0 auto; }
  .home-sticky.is-hidden { display: none; }
  body:has(.home-sticky:not(.is-hidden)) .ice-footer { padding-bottom: 110px; }
}
/* latest.css */
/* Homepage "Latest" block. Rendered by discoveryFiles() in scripts/seo-editorial.mjs and
 * refreshed on every release, so the most-crawled page always links the newest pages.
 * Mirrors the FAQ grid on the light section surface that sits between the glacier and the FAQ. */
.ice-in-motion .ice-latest {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0,1fr) minmax(0,1.4fr);
  gap: 64px;
  padding: 112px var(--proof-space);
  color: var(--proof-ink);
  background-color: var(--color-section-light);
}
.ice-latest h2 {
  margin: 0;
  max-width: 650px;
  font-size: clamp(38px,4.4vw,66px);
  line-height: 1.08;
  letter-spacing: -.055em;
  overflow-wrap: anywhere;
}
.ice-latest .eyebrow { margin: 0 0 var(--space-md); }
.ice-latest .latest-heading > p:not(.eyebrow):not(.latest-links) {
  max-width: 300px;
  margin: 24px 0 0;
  font-size: 15px;
  line-height: 1.8;
  color: var(--proof-muted);
}
.ice-latest .latest-links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-lg);
  margin: var(--space-xl) 0 0;
}
.ice-latest .latest-links a {
  font-weight: 600;
  white-space: nowrap;
  text-decoration: underline;
  text-underline-offset: 4px;
}
.latest-list { margin: 0; padding: 0; list-style: none; }
.latest-list li { padding: 22px 0; border-bottom: 1px solid var(--proof-rule); }
.latest-list li:first-child { border-top: 1px solid var(--proof-rule); }
.latest-list .latest-meta {
  margin: 0 0 6px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--proof-muted);
}
.latest-list h3 { margin: 0; font-size: 18px; line-height: 1.45; font-weight: 600; }
.latest-list h3 a { color: inherit; text-decoration: none; }
.latest-list h3 a:hover { text-decoration: underline; text-underline-offset: 4px; }
.latest-list li > p:last-child {
  margin: 8px 0 0;
  font-size: 15px;
  line-height: 1.7;
  color: var(--proof-muted);
}
.ice-latest a:focus-visible { outline: 3px solid var(--proof-focus); outline-offset: 5px; }

@media (max-width: 768px) {
  .ice-in-motion .ice-latest { grid-template-columns: minmax(0,1fr); gap: 32px; padding-block: 72px; }
  .ice-latest h2 br { display: none; }
}

/* Footer: sitewide links to the highest-intent service pages (25 Oct 2026). */
.ice-footer { flex-wrap: wrap; }
.ice-footer .foot-popular { flex-basis: 100%; display: flex; flex-wrap: wrap; gap: 10px 24px; color: inherit; opacity: .82; }
.ice-footer .foot-popular a { min-height: 32px; display: inline-flex; align-items: center; }
