/* Latest content updates */
.site-header{height:98px}
.brand-logo{display:block;width:auto;height:76px;max-width:180px}
footer .brand-logo{height:62px}
.menu-photo{position:relative;display:block;min-height:365px;overflow:hidden;background:var(--night)}
.menu-photo img{display:block;width:100%;height:100%;position:absolute;inset:0;object-fit:cover}
.menu-photo:after{content:"";position:absolute;inset:48% 0 0;background:linear-gradient(transparent,color-mix(in srgb,var(--night) 78.04%,transparent))}
.menu-photo span{position:absolute;z-index:1;right:25px;bottom:22px;padding-bottom:5px;border-bottom:1px solid #fff;color:#fff;font-size:12px;font-weight:700}
.events-footer{display:flex;justify-content:space-between;align-items:center;gap:25px;padding:25px 0 0;color:var(--on-dark);font-size:14px}
.events-footer p{margin:0}
.events-footer .underlined{color:var(--yellow)}
.event-more{display:inline-block;margin-top:15px;padding-bottom:5px;border-bottom:1px solid var(--yellow);color:var(--yellow);font-size:12px;font-weight:700}
.delivery-button.foodora{background:#d70f64;color:#fff;border-radius:12px}
.delivery-button.wolt{background:#00c2e8;color:#071f29;border-radius:12px}
.delivery-button.foodora strong{font-size:24px;letter-spacing:-.05em}
.delivery-button.wolt strong{font-size:22px;letter-spacing:-.06em}

@media (max-width:800px){
  .site-header{height:76px}
  .site-header nav{top:76px}
  .brand-logo{height:58px;max-width:140px}
  footer .brand-logo{height:54px}
  .menu-photo{min-height:290px;margin:0 0 45px}
  .menu-photo span{right:18px;bottom:16px}
  .events-footer{display:block}
  .events-footer .underlined{margin-top:18px}
}

/* ---- Data-driven menu with fish-silhouette dish photos ---- */
/* Everything in the Kínálat band is coloured from the --menu-* set, never from the page-wide
   --orange / --yellow. Those two are picked to sit on the dark header and hero, and land at 1.75:1
   laid onto the band's own background — invisible. Every theme declares --menu-strong as "the
   emphasis colour that reads on --menu-bg", which is exactly the contract these need, and it holds
   whether a palette's band is pale or dark. */
.menu .eyebrow,.menu .section-label{color:var(--menu-strong)}
.menu-source-toggle{margin-top:48px;display:flex;flex-wrap:wrap;align-items:center;gap:12px 2px;padding:4px;border:1px solid color-mix(in srgb,var(--menu-heading) 25.1%,transparent);border-radius:999px}
.menu-source-button{min-width:130px;min-height:42px;padding:0 20px;border:0;border-radius:999px;background:transparent;color:var(--menu-heading);font:700 12px "DM Sans";letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:background .15s ease,color .15s ease}
/* Inverting the band is what makes "selected" legible as a shape: a --yellow fill only separates
   from a dark band, and on the pale ones it sinks into the background at 1.26:1. */
.menu-source-button.is-active{background:var(--menu-strong);color:var(--menu-bg)}
.menu-source-location{flex-basis:100%;margin:0;padding:0 16px;color:var(--menu-strong);font-size:12.5px;font-weight:600}
.menu-list{margin-top:64px;display:grid;gap:56px}
.menu-category-head{display:flex;align-items:baseline;gap:14px;margin-bottom:22px;color:var(--menu-heading)}
.menu-category-head h3{margin:0;color:var(--menu-heading);font-size:clamp(26px,3vw,38px);line-height:.95}
.dish-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 46px}
.dish-card{display:grid;grid-template-columns:146px minmax(0,1fr);gap:20px;align-items:center;padding:15px 0;border-top:1px solid color-mix(in srgb,var(--menu-ink) 18.04%,transparent)}
/* Rounded, near-circular fish body (curved SVG outline) shows most of the photo. */
.fish-defs{position:absolute;width:0;height:0;overflow:hidden}
/* The backing tint has to be mixed from --menu-ink rather than set to --mint: on the default
   palette --mint *is* the band, so a flat --mint fill left the silhouette invisible whenever an
   image failed to load. */
.dish-figure{width:146px;height:134px;display:grid;place-items:center;overflow:hidden;background:color-mix(in srgb,var(--menu-ink) 12%,transparent);filter:drop-shadow(0 3px 6px rgba(1,35,56,.3))}
/* Two cut-outs, picked per dish by dishHasFish() in script.js: the fish silhouette belongs to the
   dishes that contain fish, and everything else takes the plain arch (icon test 5, "Sima forma").
   The arch is a border-radius rather than a second clipPath so it needs nothing added to the page
   markup, and drop-shadow follows a rounded box just as it follows a clip. */
.dish-figure--fish{clip-path:url(#fishClip)}
.dish-figure--plain{border-radius:73px 73px 18px 18px}
/* The stand-in plate is decoration, not content — it sits back so it never competes with a row whose
   dish does have a real photo. It is one fixed bitmap across every palette, so on a dark band it
   would otherwise shout louder than the real photos; --menu-plate-blend lets those palettes push it
   back into their own background instead. */
.dish-figure--empty{opacity:.62;mix-blend-mode:var(--menu-plate-blend);filter:drop-shadow(0 2px 5px rgba(1,35,56,.18))}
.dish-figure .dish-photo{width:100%;height:100%;object-fit:cover}
.dish-body{min-width:0}
.dish-title{display:flex;justify-content:space-between;align-items:baseline;gap:14px}
.dish-title h4{margin:0;color:var(--menu-strong);font:600 19px/1.05 "Playfair Display";letter-spacing:-.03em}
.dish-title b{flex:none;white-space:nowrap;color:var(--menu-strong);font:11px "DM Mono"}
.dish-body p{margin:6px 0 0;color:var(--menu-muted);font-size:12.5px;line-height:1.45}

/* The dusk terrace shot is portrait, so a centred crop cuts the lit sign in half on a wide screen.
   Biasing it upward keeps the sign whole beside the wordmark. */
.hero-image--upper{object-position:center 30%}

/* The hero already drifts every slide from 1.08 down to 1. With five photos in the rotation the
   even ones run it the other way, so the movement reads as a slow in-and-out rather than the same
   push repeated. Reduced-motion is handled where the animation is declared. */
.hero-image:nth-child(even).is-active{animation-name:hero-zoom-in}
@keyframes hero-zoom-in{from{transform:scale(1)}to{transform:scale(1.08)}}

/* ---- The owner's word --------------------------------------------------------------------- */
/* A quiet band between the film and the reviews. The quote carries the section on its own, so the
   column is narrow enough to read in one go and the rule under the heading is the only ornament. */
.owner-word{padding:104px 0;background:var(--paper)}
.owner-word-inner{max-width:760px}
.owner-word h2{margin:12px 0 0;font-size:clamp(34px,4.2vw,56px);line-height:.96}
.owner-word-lead{margin:30px 0 0;padding:0 0 0 26px;border-left:2px solid var(--yellow);color:var(--muted-strong);font:400 clamp(19px,2.1vw,25px)/1.5 "Playfair Display",serif}
@media(max-width:800px){.owner-word{padding:70px 0}.owner-word-lead{padding-left:18px}}

/* ---- Fish backdrop ----------------------------------------------------------------------
   A shoal of the brand's own fish outline, faint, down the left and right edges of every flat
   band. It is a mask rather than a background image: the fill comes from the band's own
   currentColor, so it darkens a pale palette and lightens a dark one without a per-theme colour
   ever being written down. It rides a ::before at z-index -1, which paints above the band's
   background and below its content, so no section has to give up its own background shorthand and
   nothing in the markup moves. The middle of every band stays empty — the shoal is edge trim. */
:root{
  --fish-shoal-left:url("assets/fish-shoal-left.svg");
  --fish-shoal-right:url("assets/fish-shoal-right.svg");
}
/* isolation is what makes the z-index:-1 layer land *inside* the band. Without a stacking context
   of its own a negative-z child drops behind the nearest one that has any, which is the page, and an
   opaque band then paints straight over it. The two bands that let a scroll arrow hang past their
   bottom edge also take an explicit z-index, so the arrow keeps sitting above the band below it now
   that the band below stacks too. */
.home-links,.menu,.events,.gallery,.contact,.service,.careers-intro,.contact-form-section,.google-reviews,.owner-word{position:relative;isolation:isolate}
.contact,.service{z-index:1}
/* overflow-x:clip stops the full-bleed layer below from adding a horizontal scrollbar, and
   overflow-clip-margin is what stops it from also clipping that layer back to this band's own box —
   without the margin the clip edge is the padding box and the widened backdrop is cut off again. */
.home-links{overflow-x:clip;overflow-clip-margin:50vw}
.home-links::before,.menu::before,.events::before,.gallery::before,.contact::before,.service::before,.careers-intro::before,.contact-form-section::before,.google-reviews::before,.owner-word::before{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:currentColor;opacity:.13;
  -webkit-mask-image:var(--fish-shoal-left),var(--fish-shoal-right);mask-image:var(--fish-shoal-left),var(--fish-shoal-right);
  -webkit-mask-repeat:repeat-y;mask-repeat:repeat-y;-webkit-mask-size:340px auto,360px auto;mask-size:340px auto,360px auto;
  -webkit-mask-position:left -74px top var(--shoal-y,0px),right -80px top var(--shoal-y,0px);mask-position:left -74px top var(--shoal-y,0px),right -80px top var(--shoal-y,0px)
}
/* .home-links is its own .wrap, so unlike every other band its box stops at the content column and
   the backdrop stopped with it. This one's layer is stretched back out to the viewport edges; the
   overflow-x:clip above is what keeps the extra width from adding a horizontal scrollbar. */
.home-links::before{inset:0 calc(50% - 50vw)}

/* The shoal is painted in the band's own currentColor, and a light mark on a dark band needs more
   of it than a dark mark on a pale one to land at the same faintness. .events is the one band that
   is dark in the default palette; under the night theme every band is. */
.events::before{opacity:.18}
[data-theme="ejszaka"] .home-links::before,[data-theme="ejszaka"] .menu::before,[data-theme="ejszaka"] .events::before,[data-theme="ejszaka"] .gallery::before,[data-theme="ejszaka"] .contact::before,[data-theme="ejszaka"] .service::before,[data-theme="ejszaka"] .careers-intro::before,[data-theme="ejszaka"] .contact-form-section::before,[data-theme="ejszaka"] .google-reviews::before,[data-theme="ejszaka"] .owner-word::before{opacity:.18}

/* Narrow screens have no side margin to spare, so the shoal shrinks and pulls halfway off each
   edge rather than swimming across the text. */
@media(max-width:800px){
  .home-links::before,.menu::before,.events::before,.gallery::before,.contact::before,.service::before,.careers-intro::before,.contact-form-section::before,.google-reviews::before,.owner-word::before{
    opacity:.1;
    -webkit-mask-size:190px auto,200px auto;mask-size:190px auto,200px auto;
    -webkit-mask-position:left -58px top var(--shoal-y,0px),right -64px top var(--shoal-y,0px);mask-position:left -58px top var(--shoal-y,0px),right -64px top var(--shoal-y,0px)
  }
}
@media(prefers-reduced-motion:no-preference){}

/* On Kínálat the contact band lands directly under the menu band, and on the default palette both
   resolve to --mint, so the two read as one long section. The adjacent-sibling selector fires only
   on that pairing, which is why the band keeps its usual colour on every other page. Mixing toward
   --cream rather than naming a colour keeps it inside whichever palette is active: every theme
   defines both tokens, and a blend of the two can never land back on the menu band's own value. */
.menu + .contact{background-color:color-mix(in srgb,var(--mint) 42%,var(--cream))}

/* The embedded map, sized to fit rather than to a fixed ratio. The address column stretches to the
   row height the other two columns already set, and the map takes whatever is left under the
   address — so adding it costs the band almost none of its original height. min-height is the floor
   that keeps it readable when the neighbouring columns happen to be short. The iframe stays lazy, so
   a page nobody scrolls to the bottom of never loads it. */
.contact-details{display:flex;flex-direction:column;align-self:stretch}
.contact-map{margin-top:20px;flex:1;min-height:170px;overflow:hidden;background:color-mix(in srgb,var(--ink) 8%,transparent)}
.contact-map iframe{display:block;width:100%;height:100%;border:0}
/* The repeated block at the foot of the other pages. It carries no scroll arrow, so it does not need
   the relative padding kapcsolat.html leaves for one. */
.contact-footer .contact-footer-cta{margin-top:26px}
@media(max-width:800px){.contact-map{margin-top:16px;flex:none;aspect-ratio:4/3;min-height:0}}

/* ---- Catering / Careers service sections ---- */
.service{padding:112px 0}
.service.catering{background:var(--mint)}
.service-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:64px;align-items:center}
.service.catering .eyebrow{color:var(--orange)}
.service-copy h2{margin:14px 0 0;font-size:clamp(40px,5vw,68px);line-height:.92}
.service-copy .copy{max-width:520px;margin:22px 0 0}
.service-copy .button{margin-top:28px}
.service-features,.positions{list-style:none;margin:6px 0 0;padding:0}
.service-features li,.positions li{display:grid;gap:5px;padding:21px 0;border-top:1px solid var(--line)}
.service-features li:last-child,.positions li:last-child{border-bottom:1px solid var(--line)}
.service-features strong,.positions strong{font:600 22px/1.05 "Playfair Display";letter-spacing:-.03em}
.service-features span,.positions span{color:var(--muted);font-size:13px;line-height:1.5}
.service-highlights{list-style:none;margin:24px 0 8px;padding:0;display:grid;gap:12px}
.service-highlights li{position:relative;padding-left:26px;color:var(--on-dark);font-size:14px;line-height:1.5}
.service-highlights li:before{content:"≈";position:absolute;left:0;top:-1px;color:var(--yellow);font-size:17px}
.service-photo{margin:0;min-height:370px;overflow:hidden;background:var(--deep)}
.service-photo img{display:block;width:100%;height:100%;min-height:370px;object-fit:cover}

/* Bigger, clearer navigation labels; collapse to a hamburger sooner so they still fit */
@media(min-width:1081px){#main-nav{gap:16px}#main-nav a{font-size:15px}#main-nav .nav-cta{padding:12px 16px}}
@media(max-width:1080px){
  .menu-toggle{display:block}
  #main-nav{display:none;position:absolute;top:98px;left:0;right:0;flex-direction:column;align-items:stretch;gap:2px;padding:16px 22px 26px;background:var(--deep)}
  #main-nav.open{display:flex}
  #main-nav a{padding:13px 2px;font-size:18px;opacity:.95}
  #main-nav .nav-cta{display:block;text-align:center;margin-top:10px}
}
@media(max-width:800px){#main-nav{top:76px}}

@media (max-width:800px){
  .menu-list{margin-top:44px;gap:44px}
  .dish-grid{grid-template-columns:1fr;gap:2px}
  .dish-card{grid-template-columns:116px minmax(0,1fr);gap:16px}
  .dish-figure{width:116px;height:110px}
  .dish-figure--plain{border-radius:58px 58px 14px 14px}
  .service{padding:78px 0}
  .service-grid,.service-grid.reversed{grid-template-columns:1fr;gap:34px}
  .service-grid.reversed .service-copy{order:0}
  .service-photo,.service-photo img{min-height:260px}
}

footer{flex-wrap:wrap}

/* ---- Multi-page basics ---- */
[hidden]{display:none !important}
body{display:flex;flex-direction:column;min-height:100vh}
main{flex:1 0 auto}
/* Interior pages have a single section; let it fill so its colour reaches the footer */
.page main{display:flex;flex-direction:column;padding-top:40px}
.page main > section{flex:1 0 auto}

/* ---- Home page: section teaser links ---- */
.home-links{padding:94px 0 104px}
.home-links-head h2{margin:10px 0 0;font-size:clamp(38px,5vw,64px);line-height:.95}
/* Five cards as a wrapping grid, so the row never overflows and there is no
   scrollbar to look at. Only the narrow layout below keeps the swipe strip. */
.home-links-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-top:40px}
.home-link{display:flex;flex-direction:column;gap:11px;min-height:220px;padding:26px 24px 22px;color:var(--ink);background:var(--card);border:1px solid var(--line);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}
.home-link h3{margin:0;font-size:27px;letter-spacing:-.03em}
.home-link p{flex:1;margin:0;color:var(--muted);font-size:13.5px;line-height:1.5}
.home-link b{color:var(--deep);font:11px "DM Mono";letter-spacing:.05em}
.home-link:hover{transform:translateY(-4px);box-shadow:0 16px 40px rgba(1,42,74,.15);border-color:transparent}
.home-cta{display:flex;justify-content:space-between;align-items:center;gap:32px;margin-top:46px;padding-top:34px;border-top:1px solid var(--line)}
.home-cta p{margin:0;max-width:640px;font:600 clamp(22px,2.6vw,34px)/1.12 "Playfair Display";letter-spacing:-.03em}

/* ---- Events page empty state ---- */
.events-empty{max-width:560px;margin-top:4px;color:var(--on-dark);font-size:15px;line-height:1.65}
.events-empty p{margin:0 0 12px}
.events-empty .underlined{color:var(--yellow)}

@media (max-width:800px){
  .page main{padding-top:20px}
  .home-links{padding:70px 0 78px}
  /* Swipe strip on phones; the scrollbar itself stays out of the design. */
  .home-links-grid{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .home-links-grid::-webkit-scrollbar{display:none}
  .home-link{flex:0 0 220px;min-height:0;scroll-snap-align:start}
  .home-cta{flex-direction:column;align-items:flex-start;gap:20px}
}

/* ---- Rólunk: scroll-driven lake film ----
   Default (no JS) = a static illustration with the captions stacked underneath.
   script.js adds .is-live, which turns the stage into a sticky, scroll-scrubbed scene. */
.lake-story{position:relative;background:var(--deep);color:#fff}
.lake-stage{position:relative;overflow:hidden}
.lake-scene{display:block;width:100%;height:auto;aspect-ratio:16/9;background:var(--water)}
.lake-captions{display:grid;gap:18px;width:min(1220px,84vw);margin:0 auto;padding:44px 0 58px}
.lake-caption{max-width:520px}
.lake-caption .eyebrow{color:var(--yellow)}
.lake-caption h2{margin:12px 0 0;color:#fff;font-size:clamp(30px,4vw,54px);line-height:.96}
.lake-caption .copy{max-width:460px;margin:16px 0 0;color:var(--on-dark-2);font-size:15.5px;line-height:1.62}
.lake-caption-actions{display:flex;flex-wrap:wrap;align-items:center;gap:14px 22px;margin-top:24px}
.lake-caption-actions .underlined{color:var(--yellow)}
.lake-cue{display:none}
/* The film is the first thing on the page, so it runs flush under the fixed header. */
.page main:has(> .lake-story:first-child),
.page main:has(> .photo-story:first-child),
.page main:has(> .film-story:first-child){padding-top:0}

.lake-story.is-live .lake-track{height:480vh}
.lake-story.is-live .lake-stage{position:sticky;top:0;height:100vh;height:100svh}
.lake-story.is-live .lake-scene{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto}
.lake-story.is-live .lake-captions{display:block;position:absolute;inset:0;width:auto;margin:0;padding:0;pointer-events:none}
.lake-story.is-live .lake-caption{position:absolute;max-width:min(440px,76vw);padding:26px 28px 28px;background:color-mix(in srgb,var(--deep) 83.92%,transparent);border:1px solid #ffffff26;border-radius:2px;backdrop-filter:blur(6px);opacity:0;will-change:opacity,transform}
.lake-story.is-live .lake-caption a{pointer-events:auto}
.lake-story.is-live .lake-caption[data-caption="1"]{left:7vw;bottom:13vh}
.lake-story.is-live .lake-caption[data-caption="2"]{right:7vw;bottom:15vh}
.lake-story.is-live .lake-caption[data-caption="3"]{left:7vw;bottom:14vh}
.lake-story.is-live .lake-cue{display:block;position:absolute;left:50%;bottom:26px;transform:translateX(-50%);margin:0;color:#eaf7ff;font:10px "DM Mono";letter-spacing:.2em;text-transform:uppercase;text-shadow:0 2px 12px rgba(1,35,56,.6)}
.lake-story.is-live .lake-cue span{display:inline-block;margin-left:6px;animation:lake-cue-bob 1.8s ease-in-out infinite}
@keyframes lake-cue-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}

@media (max-width:800px){
  .lake-story.is-live .lake-track{height:400vh}
  .lake-story.is-live .lake-caption{max-width:none;left:5vw;right:5vw;padding:20px 20px 22px}
  .lake-story.is-live .lake-caption[data-caption="1"],
  .lake-story.is-live .lake-caption[data-caption="2"],
  .lake-story.is-live .lake-caption[data-caption="3"]{left:5vw;right:5vw;bottom:11vh}
  .lake-caption .copy{font-size:14.5px}
}

/* ---- Rólunk (realista): the same film composed from photographic plates.
   The plates all live inside .photo-world, a box sized to cover the stage at the lake photo's own
   aspect, so every position below is a fraction of the photograph rather than of the viewport. */
.photo-story{position:relative;background:#0b131c;color:#fff}
.photo-stage{position:relative;overflow:hidden;background:#0b131c}
.photo-world{position:absolute;left:0;top:0;width:100%;height:100%}
.photo-world img{display:block;width:100%;height:100%;object-fit:cover}
.photo-layer{position:absolute;left:0;top:0;width:100%;height:100%;will-change:transform}
/* Full-size layer so it shares the lake's transform box exactly; the strip sits inside it. */
.photo-water{position:absolute;left:0;top:0;width:100%;height:100%;will-change:transform}
/* Depth of field: a fixed blur, never animated, so it stays off the compositor's critical path. */
.photo-water img{position:absolute;left:0;top:62%;width:100%;height:38%;filter:blur(1.4px)}
.photo-fish{position:absolute;left:0;top:0;width:30%;transform-origin:50% 50%;will-change:transform;filter:drop-shadow(0 0 26px rgba(255,196,128,.42))}
.photo-fish img{height:auto;object-fit:contain}
.photo-splash{position:absolute;left:0;top:0;width:34%;aspect-ratio:400/240;transform-origin:50% 50%;will-change:transform,opacity;opacity:0}
.photo-shore{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;will-change:transform,opacity}
/* The truck was shot at midday; this warms it into the same golden hour as the lake plates. */
.photo-shore img{display:block;width:100%;height:100%;object-fit:cover;filter:sepia(.34) saturate(1.2) hue-rotate(-12deg) brightness(.95) contrast(1.04)}
/* One warm pass over everything so the plates read as a single photograph. */
.photo-grade{position:absolute;inset:0;pointer-events:none;background:linear-gradient(200deg,#ffb96b33,#ff8a3d1f 42%,#08111c66);mix-blend-mode:soft-light}
.photo-vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(126% 94% at 50% 44%,transparent 52%,#040a1226 78%,#040a1273)}

.photo-story .lake-captions{display:grid;gap:18px;width:min(1220px,84vw);margin:0 auto;padding:44px 0 58px}
.photo-story .lake-caption{max-width:520px}

.photo-story.is-live .lake-track{height:500vh}
.photo-story.is-live .lake-stage{position:sticky;top:0;height:100vh;height:100svh}
.photo-story.is-live .lake-captions{display:block;position:absolute;inset:0;width:auto;margin:0;padding:0;pointer-events:none}
.photo-story.is-live .lake-caption{position:absolute;max-width:min(440px,76vw);padding:26px 28px 28px;background:#06111cd9;border:1px solid #ffffff26;border-radius:2px;backdrop-filter:blur(6px);opacity:0;will-change:opacity,transform}
.photo-story.is-live .lake-caption a{pointer-events:auto}
.photo-story.is-live .lake-caption[data-caption="1"]{left:7vw;bottom:13vh}
.photo-story.is-live .lake-caption[data-caption="2"]{right:7vw;bottom:15vh}
.photo-story.is-live .lake-caption[data-caption="3"]{left:7vw;bottom:14vh}
.photo-story.is-live .lake-cue{display:block;position:absolute;left:50%;bottom:26px;transform:translateX(-50%);margin:0;color:#f4e6d4;font:10px "DM Mono";letter-spacing:.2em;text-transform:uppercase;text-shadow:0 2px 12px rgba(4,10,18,.7)}
.photo-story.is-live .lake-cue span{display:inline-block;margin-left:6px;animation:lake-cue-bob 1.8s ease-in-out infinite}

/* Without JS or with reduced motion the stage is one still frame of the film. */
.photo-story:not(.is-live) .photo-stage{aspect-ratio:16/9}
.photo-story:not(.is-live) .photo-fish{left:44%;top:38%;transform:translate(-50%,-50%) rotate(-14deg)}

.photo-credit{display:block;width:min(1220px,84vw);margin:0 auto;padding:0 0 34px;color:#9fb6c8;font-size:11.5px;line-height:1.6}
.photo-credit a{border-bottom:1px solid #9fb6c855}

@media (max-width:800px){
  .photo-story.is-live .lake-track{height:420vh}
  .photo-story.is-live .lake-caption{max-width:none;left:5vw;right:5vw;padding:20px 20px 22px}
  .photo-story.is-live .lake-caption[data-caption="1"],
  .photo-story.is-live .lake-caption[data-caption="2"],
  .photo-story.is-live .lake-caption[data-caption="3"]{left:5vw;right:5vw;bottom:11vh}
  .photo-fish{width:44%}
  .photo-splash{width:38%}
}

/* ---- Rólunk (video): the filmed cut — rolunk-video.html.
   The shots are stacked in one frame and crossfaded by opacity; the page never reorders or hides
   them, so the browser keeps all three decoders warm and a hand-over never waits on a first paint.
   The <video> elements carry a poster, which is what a still-frame fallback amounts to here. ---- */
.film-story{position:relative;background:#0b131c;color:#fff}
.film-stage{position:relative;overflow:hidden;background:#0b131c}
.film-shot{position:absolute;inset:0;opacity:0;will-change:opacity,transform}
.film-shot:first-child{opacity:1}
.film-shot video{display:block;width:100%;height:100%;object-fit:cover;background:#0b131c}
/* Shots that were not filmed in the same light as the lake get pulled towards the sunset here
   rather than in the encode, so the match can be tuned without re-rendering the clip. */
.film-shot[data-grade="sunset"] video{filter:sepia(.34) saturate(1.2) hue-rotate(-12deg) brightness(.95) contrast(1.04)}
.film-grade{position:absolute;inset:0;pointer-events:none;background:linear-gradient(200deg,#ffb96b2e,#ff8a3d1a 42%,#08111c5c);mix-blend-mode:soft-light}
.film-vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(126% 94% at 50% 44%,transparent 52%,#040a1226 78%,#040a1273)}

.film-story .lake-captions{display:grid;gap:18px;width:min(1220px,84vw);margin:0 auto;padding:44px 0 58px}
.film-story .lake-caption{max-width:520px}

/* 820vh, up from 620vh on 2026-09-09. The water beat went from 180 frames to 280 when the camera
   started turning around the fish, and the scroll a beat gets is what decides how many frames the
   decoder is asked for per second on a fast flick: below about 15px of scroll per frame it starts
   dropping them. 820vh keeps that number where it was. The mobile rule below is the same sum
   against a shorter viewport. */
.film-story.is-live .lake-track{height:820vh}
.film-story.is-live .lake-stage{position:sticky;top:0;height:100vh;height:100svh}
.film-story.is-live .lake-captions{display:block;position:absolute;inset:0;width:auto;margin:0;padding:0;pointer-events:none}
.film-story.is-live .lake-caption{position:absolute;max-width:min(440px,76vw);padding:26px 28px 28px;background:#06111cd9;border:1px solid #ffffff26;border-radius:2px;backdrop-filter:blur(6px);opacity:0;will-change:opacity,transform}
.film-story.is-live .lake-caption a{pointer-events:auto}
.film-story.is-live .lake-caption[data-caption="1"]{left:7vw;bottom:13vh}
.film-story.is-live .lake-caption[data-caption="2"]{right:7vw;bottom:15vh}
.film-story.is-live .lake-caption[data-caption="3"]{left:7vw;bottom:14vh}
.film-story.is-live .lake-cue{display:block;position:absolute;left:50%;bottom:26px;transform:translateX(-50%);margin:0;color:#f4e6d4;font:10px "DM Mono";letter-spacing:.2em;text-transform:uppercase;text-shadow:0 2px 12px rgba(4,10,18,.7)}
.film-story.is-live .lake-cue span{display:inline-block;margin-left:6px;animation:lake-cue-bob 1.8s ease-in-out infinite}

/* Without JS or with reduced motion only the opening shot's poster stands, as a still hero, and the
   captions become ordinary prose under it. The 16:9 box has to sit on the shot rather than on the
   stage: the stage clips, so sizing *it* to the frame would hide every caption below the fold of a
   box that can no longer grow — leaving a page with a picture and no words on it. */
.film-story:not(.is-live) .film-shot{position:relative;aspect-ratio:16/9}
.film-story:not(.is-live) .film-shot:not(:first-child){display:none}
.film-story:not(.is-live) .film-grade,
.film-story:not(.is-live) .film-vignette,
/* Arrows point at a frame that only exists mid-scrub, so in the static fallback they would be
   pointing at nothing. */
.film-story:not(.is-live) .film-arrows{display:none}

/* The annotations over the held frame. The SVG slices exactly like the video's object-fit:cover, so
   its coordinates stay glued to the picture whatever shape the viewport is. */
.film-arrows{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none;will-change:opacity}
.film-arrow path{fill:none;stroke:#fffaf0;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 2px 7px rgba(4,10,18,.8))}
/* Bright water and bright sky in the same frame, so neither a light nor a dark label survives on its
   own. paint-order draws the dark stroke behind the fill, giving the type its own outline instead of
   a shadow that smears at this size. */
.film-arrow text{fill:#fffaf0;font:600 15px/1 "DM Mono",ui-monospace,monospace;letter-spacing:.14em;text-transform:uppercase;paint-order:stroke;stroke:rgba(4,10,18,.62);stroke-width:4px;stroke-linejoin:round}

/* ?debug=story — the instrument the delivery-format gate is decided with. */
.story-debug{position:absolute;left:14px;top:14px;z-index:5;margin:0;padding:10px 12px;background:rgba(4,10,18,.84);color:#d8f3ff;font:11px/1.55 "DM Mono",ui-monospace,monospace;white-space:pre;border-radius:3px;pointer-events:none}

@media (max-width:800px){
  .film-story.is-live .lake-track{height:660vh}
  .film-story.is-live .lake-caption{max-width:none;left:5vw;right:5vw;padding:20px 20px 22px}
  .film-story.is-live .lake-caption[data-caption="1"],
  .film-story.is-live .lake-caption[data-caption="2"],
  .film-story.is-live .lake-caption[data-caption="3"]{left:5vw;right:5vw;bottom:11vh}
  /* A portrait phone crops the frame to roughly its middle third, which leaves no room to point
     from — an arrow short enough to fit would start on top of what it is pointing at. The caption
     card is already carrying this beat's message, so the annotations simply stand down. */
  .film-arrows{display:none}
}

/* ---- Contact form (kapcsolat / catering / karrier) ---- */
.contact-form-section{padding:100px 0}
.contact-form-section .eyebrow{color:var(--orange)}
.contact-form-section h2{margin:14px 0 0;font-size:clamp(38px,4.6vw,58px);line-height:.94}
.contact-form-wrap{display:grid;grid-template-columns:.9fr 1.1fr;gap:64px;align-items:start}
.contact-form{display:grid;gap:20px;padding:36px;background:var(--card);border:1px solid var(--line);box-shadow:0 20px 50px rgba(1,42,74,.08)}
.form-row{display:grid;gap:8px}
.form-row label{color:var(--ink);font:11px "DM Mono";letter-spacing:.1em;text-transform:uppercase}
.form-row label small{text-transform:none;letter-spacing:0;color:var(--muted);font-family:"DM Sans"}
.form-row input[type="file"]{padding:10px 12px;cursor:pointer}
.form-row input,.form-row textarea{width:100%;padding:14px 16px;border:1px solid color-mix(in srgb,var(--ink) 29.02%,transparent);border-radius:2px;background:var(--cream);color:var(--ink);font:15px "DM Sans";resize:vertical;transition:border-color .15s ease,background .15s ease}
.form-row input::placeholder,.form-row textarea::placeholder{color:color-mix(in srgb,var(--muted) 60%,transparent)}
.form-row input:focus,.form-row textarea:focus{outline:0;border-color:var(--orange);background:var(--card)}
.form-honeypot{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.contact-form .button{justify-self:start;border:0;cursor:pointer}
.contact-form .button:disabled{opacity:.6;cursor:default}
.form-status{margin:0;min-height:16px;font-size:13px;font-weight:700}
.form-status[data-state="ok"]{color:#1a7f37}
.form-status[data-state="error"]{color:#c0392b}
.form-positions{display:grid;gap:8px;margin:0;padding:0;border:0}
.form-positions legend{padding:0 0 8px;color:var(--ink);font:11px "DM Mono";letter-spacing:.1em;text-transform:uppercase}
.form-checkbox{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border:1px solid color-mix(in srgb,var(--ink) 29.02%,transparent);border-radius:2px;background:var(--cream);cursor:pointer;transition:border-color .15s ease,background .15s ease}
.form-checkbox:has(input:checked){border-color:var(--orange);background:var(--card)}
.form-checkbox input{margin-top:3px;accent-color:var(--orange)}
.form-checkbox span{display:grid;gap:2px}
.form-checkbox strong{font:600 15px "DM Sans"}
.form-checkbox small{color:var(--muted);font-size:12px;line-height:1.4}
@media (max-width:800px){
  .contact-form-section{padding:70px 0}
  .contact-form-wrap{grid-template-columns:1fr;gap:32px}
  .contact-form{padding:24px}
}

/* ---- Google reviews (live feed) --------------------------------------------
   Cards are built by script.js from /google-reviews.json, so every rule below has
   to hold for content of unknown length. Google's own gold stars and the G mark
   are the two colours that stay literal; everything else runs on the theme
   tokens so the section follows the palette switcher like the rest of the site. */
.google-reviews{padding:88px 0 96px;background:var(--paper);border-top:1px solid var(--line);border-bottom:1px solid var(--line);overflow:hidden}
.review-slider-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:34px;margin-bottom:34px}
.review-slider-title h2{margin:11px 0 0;font-size:clamp(36px,4.4vw,58px);line-height:.95}
.review-slider-rating{display:flex;align-items:center;gap:9px;margin:16px 0 0;color:var(--muted);font-size:13px;font-weight:600}
.review-slider-rating .rating-score{display:inline-flex;align-items:center;gap:5px}
.review-slider-rating .rating-score svg{width:14px;height:14px;fill:#fbbc04}
.review-slider-rating strong{color:var(--ink);font-size:15px;font-weight:700}
.google-g-icon{flex:0 0 auto;width:19px;height:19px}
.review-slider-notice{display:block;max-width:46ch;margin-top:7px;color:var(--muted);font-size:11px;line-height:1.45}
.review-slider-side{display:flex;flex-direction:column;align-items:flex-end;gap:16px}
.review-slider-controls{display:flex;gap:8px}
.review-scroll-button{display:grid;place-items:center;width:42px;height:42px;padding:0;color:var(--ink);border:1px solid var(--line);background:var(--card);cursor:pointer;transition:transform .22s cubic-bezier(.16,1,.3,1),background .22s ease,color .22s ease,border-color .22s ease}
.review-scroll-button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8}

/* The gutter matches .wrap (min(1220px,84vw)) so the first card lines up with the
   heading above it, while the track itself still bleeds to both screen edges. */
.review-slider-track{display:flex;gap:18px;width:100%;padding:3px max(8vw,calc((100vw - 1220px) / 2)) 16px;overflow-x:scroll;overscroll-behavior-inline:contain;scrollbar-width:thin;scrollbar-color:transparent transparent}
.review-slider-track.is-scrolling{scrollbar-color:color-mix(in srgb,var(--ink) 30%,transparent) transparent}
.review-slider-track::-webkit-scrollbar{height:5px}
.review-slider-track::-webkit-scrollbar-thumb{background:transparent}
.review-slider-track.is-scrolling::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ink) 30%,transparent)}

.review-slide{position:relative;display:grid;grid-template-columns:42px minmax(0,1fr);grid-template-rows:auto auto 1fr auto;column-gap:12px;flex:0 0 min(330px,calc((100vw - 116px) / 3.35));min-width:0;min-height:252px;padding:22px 22px 16px;color:var(--ink);border:1px solid var(--line);background:var(--card);transition:transform .28s cubic-bezier(.16,1,.3,1),box-shadow .28s ease,border-color .28s ease}
.review-slide p{grid-column:1 / -1;grid-row:3;align-self:start;margin:12px 0 0;overflow:hidden;color:var(--muted);font-size:13.5px;line-height:1.58;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical}
.reviewer-avatar{grid-column:1;grid-row:1;display:grid;place-items:center;align-self:start;width:38px;height:38px;overflow:hidden;border-radius:50%;color:#fff;background:var(--water);font-size:14px;font-weight:700}
.review-slide:nth-child(3n) .reviewer-avatar{background:#c0392b}
.review-slide:nth-child(4n) .reviewer-avatar{background:#2f855a}
.review-slide:nth-child(5n) .reviewer-avatar{background:#b7791f}
.review-slide:nth-child(7n) .reviewer-avatar{background:#6b46c1}
.reviewer-avatar img{width:100%;height:100%;object-fit:cover}
.reviewer-name{grid-column:2;grid-row:1;display:grid;align-content:center;gap:2px;min-width:0}
.reviewer-name strong{overflow:hidden;font-size:14px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}
.reviewer-name small{color:var(--muted);font-size:11px;line-height:1.25}
.review-stars{grid-column:2;grid-row:2;display:flex;align-items:center;gap:7px;margin-top:6px;color:#fbbc04}
.review-stars .stars-row{display:flex;gap:1px}
.review-stars svg{width:14px;height:14px;fill:currentColor}
.review-stars svg.is-empty{fill:color-mix(in srgb,var(--ink) 18%,transparent)}
.review-stars time{color:var(--muted);font:10px "DM Mono";letter-spacing:.04em}
.review-footer{grid-column:1 / -1;grid-row:4;display:flex;align-items:center;gap:6px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);color:var(--muted);font:10px "DM Mono";letter-spacing:.06em}
.review-footer svg{width:13px;height:13px}

/* The score card opens the run: the overall rating, then a way into Google. */
.review-score-card{grid-template-columns:1fr;grid-template-rows:auto auto auto auto 1fr;border-color:var(--mint);background:linear-gradient(168deg,var(--card),var(--tint))}
.review-score-card .google-g-icon{grid-row:1;width:30px;height:30px}
.review-score-card .score-number{grid-row:2;margin:14px 0 0;font:600 46px/1 "Playfair Display",serif;letter-spacing:-.04em}
.review-score-card .review-stars{grid-row:3;grid-column:1;margin-top:10px}
.review-score-card .score-count{grid-row:4;margin-top:8px;color:var(--muted);font-size:12.5px;font-weight:600}
.review-score-card .review-source{grid-row:5;align-self:end;margin-top:14px;padding-top:13px;border-top:1px solid var(--line);color:var(--orange);font-size:12px;font-weight:700}

@media (hover:hover){
  .review-slide:hover{transform:translateY(-4px);box-shadow:0 16px 40px rgba(1,42,74,.15);border-color:transparent}
  .review-scroll-button:hover{transform:translateY(-2px);color:var(--on-ink);border-color:var(--ink);background:var(--ink)}
}
.review-slide:focus-visible,.review-scroll-button:focus-visible{outline:3px solid var(--orange);outline-offset:3px}

/* Loading, switched off, and unreachable states. */
.review-slider-loading{display:flex;align-items:center;justify-content:center;gap:11px;flex:1;min-height:252px;margin:0;color:var(--muted);font-size:13px;font-weight:600}
.review-spinner{display:block;width:22px;height:22px;border:2px solid var(--line);border-top-color:var(--orange);border-radius:50%;animation:review-spin .8s linear infinite}
.google-reviews.is-loading .review-slider-rating strong,.google-reviews.is-loading .review-slider-rating [data-google-review-count]{display:inline-block;min-width:24px;color:transparent;background:color-mix(in srgb,var(--ink) 12%,transparent);animation:review-pulse 1.4s ease-in-out infinite}
.google-reviews.is-loading .review-slider-controls{visibility:hidden}
.google-reviews.is-unavailable .review-slider-rating,.google-reviews.is-unavailable .review-slider-controls{visibility:hidden}
.review-slider-unavailable{flex-wrap:wrap;gap:9px;font-weight:500}
.review-slider-unavailable .google-g-icon{width:17px;height:17px}
.review-slider-unavailable a{color:var(--orange);text-decoration:underline;text-underline-offset:3px}
@keyframes review-spin{to{transform:rotate(360deg)}}
@keyframes review-pulse{0%,100%{opacity:1}50%{opacity:.45}}
@media (prefers-reduced-motion:reduce){
  .review-spinner{animation-duration:2.4s}
  .google-reviews.is-loading .review-slider-rating strong,.google-reviews.is-loading .review-slider-rating [data-google-review-count]{animation:none}
}

@media (max-width:800px){
  .google-reviews{padding:62px 0 68px}
  .review-slider-toolbar{display:block}
  .review-slider-side{align-items:flex-start;margin-top:20px}
  .review-slider-track{gap:12px;padding:3px 9vw 16px}
  .review-slide{flex-basis:min(80vw,300px);min-height:238px}
}

/* ---- Header controls: day/night and language -------------------------------
   The bar is a three-track grid so the links sit dead centre no matter how wide
   the logo or the controls grow; the controls keep the right-hand track. */
.header-tools{display:flex;align-items:center;gap:8px}
/* Scoped to the width where the links are actually a row. Below 1081px the nav
   collapses to the hamburger dropdown (see the block above), and a justify-self on
   that absolutely positioned box — with left/right:0 — would make it shrink to fit
   instead of spanning the header. */
@media (min-width:1081px){
  .site-header{display:grid;grid-template-columns:1fr auto 1fr;gap:20px}
  .site-header .brand{justify-self:start}
  .site-header nav{justify-self:center}
  .header-tools{justify-self:end}
}
.tool-button,.lang-select select{height:34px;background:transparent;color:#fff;font:700 11px "DM Sans";letter-spacing:.06em;cursor:pointer;transition:border-color .18s ease,color .18s ease}
/* The theme toggle is a bare icon: the sun/moon carries it, no frame needed. */
.tool-button{display:grid;place-items:center;width:34px;padding:0;border:0}
.tool-button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round}
.tool-button .icon-sun-core{fill:currentColor;stroke:none}
/* The button shows the mode it switches *to*, which is what its label promises. */
.tool-button .icon-sun-core,.tool-button .icon-sun-rays{display:none}
[data-theme="ejszaka"] .tool-button .icon-sun-core,[data-theme="ejszaka"] .tool-button .icon-sun-rays{display:block}
[data-theme="ejszaka"] .tool-button .icon-moon{display:none}

.lang-select{position:relative;display:flex;align-items:center}
.lang-select select{appearance:none;-webkit-appearance:none;padding:0 27px 0 11px;border:1px solid #ffffff7a}
/* The popup is drawn by the OS, so its own colours have to be set explicitly —
   inheriting the header's white-on-transparent would leave it unreadable. */
.lang-select option{color:var(--ink);background:var(--card)}
.lang-caret{position:absolute;right:9px;width:11px;height:11px;pointer-events:none;fill:none;stroke:#fff;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.tool-button:hover,.lang-select select:hover{color:var(--yellow)}
.lang-select select:hover{border-color:var(--yellow)}
.lang-select:hover .lang-caret{stroke:var(--yellow)}
/* A <select> matches :focus-visible on an ordinary mouse click, so an outline ring
   here would jump out of the control every time it is opened. Focus reuses the
   hover treatment instead — still visible, and exactly the same geometry. */
.lang-select select:focus{outline:none}
.lang-select select:focus-visible{border-color:var(--yellow);color:var(--yellow)}
.lang-select select:focus-visible+.lang-caret{stroke:var(--yellow)}
/* A <button> only matches :focus-visible on keyboard focus, so this never fires
   on a click and the keyboard ring is kept. */
.tool-button:focus-visible{outline:2px solid var(--yellow);outline-offset:2px}

@media (max-width:1080px){
  /* The nav is out of flow here, so the bar is just a row: brand, the two
     controls, then the hamburger. Both stay reachable without opening the menu. */
  .site-header{gap:10px}
  .header-tools{order:2;margin-left:auto}
  .menu-toggle{order:3}
}


/* ---- Rescued mobile rules --------------------------------------------------
   The careers and scroll-arrow blocks were appended to style.css *after* its own
   max-width:800px section, so those base rules win at every width and the phone
   overrides in that section are dead. The visible damage was the application form
   holding two ~110px columns on a phone, clipping every input and pushing the page
   into horizontal scroll. Restated here, in the sheet that loads last. */
@media (max-width:800px){
  .form-row-pair{grid-template-columns:1fr}
  .application-grid{grid-template-columns:1fr;gap:28px}
  .application-col:last-child{border-left:0;padding-left:0}
  .careers-intro{padding:50px 0 0}
  .careers-photo{height:260px}
  .careers-intro-copy{padding:34px 0 60px}
  .scroll-arrow{bottom:-20px}
  .scroll-arrow i{width:36px;height:36px;font-size:15px}
}


/* ---- Legal pages (ÁSZF, adatkezelési tájékoztató) --------------------------
   Long-form reading, not a marketing section: one narrow measure, generous line
   height, and tables that scroll inside themselves so a phone never has to. */
.legal{padding:96px 0 96px;background:var(--paper)}
.legal-wrap{width:min(820px,88vw)}
.legal-wrap h1{margin:12px 0 26px;font-family:"Playfair Display",serif;letter-spacing:-.055em;font-size:clamp(40px,5.6vw,72px);line-height:.94}
.legal-wrap h1 em{font-weight:600}
.legal-lead{margin:0 0 14px;color:var(--muted-strong);font-size:17px;line-height:1.7}
.legal-meta{margin:0 0 22px;color:var(--muted);font:11px "DM Mono";letter-spacing:.06em}
.legal-note{margin:0 0 34px;padding:13px 16px;border-left:2px solid var(--orange);background:var(--tint);color:var(--muted-strong);font-size:13px;line-height:1.6}
.legal-toc{margin:0 0 46px;padding:24px 28px;background:var(--card);border:1px solid var(--line)}
.legal-toc ol{margin:0;padding-left:0;list-style:none;columns:2;column-gap:34px;font-size:14px;line-height:2}
.legal-wrap h2{margin:54px 0 16px;font-size:clamp(25px,3vw,33px);line-height:1.15;letter-spacing:-.03em;scroll-margin-top:100px}
.legal-wrap h3{margin:34px 0 12px;font-size:19px;line-height:1.3;letter-spacing:-.02em;scroll-margin-top:100px}
.legal-wrap p{margin:0 0 15px;color:var(--muted-strong);font-size:15px;line-height:1.78}
.legal-wrap ul{margin:0 0 18px;padding-left:20px;color:var(--muted-strong);font-size:15px;line-height:1.78}
.legal-wrap li{margin-bottom:7px}
/* Prose links carry their contrast from the body text and are marked by the
   underline, not by hue. --water is a dark navy in the ejszaka theme (#10364d on
   a #14212c page), so colouring links with it made them unreadable there; this
   holds up in all five themes without a per-theme table. */
.legal-wrap a:not(.underlined){color:inherit;border-bottom:1px solid color-mix(in srgb,currentColor 45%,transparent)}
.legal-wrap a:not(.underlined):hover{color:var(--orange);border-bottom-color:currentColor}
/* The contents list is a navigation block, not prose: no underline until hover. */
.legal-wrap .legal-toc a{color:var(--muted-strong);border-bottom-color:transparent}
.legal-wrap .legal-toc a:hover{color:var(--orange);border-bottom-color:currentColor}
.legal-wrap code{padding:1px 5px;background:var(--tint);font:12px "DM Mono";word-break:break-word}
.legal-table{display:block;overflow-x:auto;width:100%;margin:0 0 22px;border-collapse:collapse;font-size:14px}
.legal-table th,.legal-table td{padding:11px 14px;border:1px solid var(--line);text-align:left;vertical-align:top;line-height:1.6;color:var(--muted-strong)}
.legal-table thead th{background:var(--tint);color:var(--ink);font:10px "DM Mono";letter-spacing:.1em;text-transform:uppercase}
.legal-table tbody th{width:30%;min-width:150px;background:var(--tint);color:var(--ink);font-weight:700}
.legal-table small{color:var(--muted);font-size:12px}
/* Placeholders the operator still has to replace. Loud on purpose: they must not
   survive a deploy unnoticed. */
.legal-wrap mark.fill{padding:2px 6px;background:#ffe27a;color:#4a3200;font-weight:700}
.legal-back{margin-top:44px;padding-top:24px;border-top:1px solid var(--line)}
.legal-back .underlined{color:var(--orange)}
@media (max-width:800px){
  .legal{padding:64px 0 70px}
  .legal-toc{padding:20px}
  .legal-toc ol{columns:1}
  .legal-wrap h2{margin-top:42px}
}

/* ---- Privacy consent checkbox on the three forms ---- */
.contact-form .form-consent{display:grid;grid-template-columns:auto 1fr;gap:11px;align-items:start;padding-top:2px}
.contact-form .form-consent input{width:18px;height:18px;margin:2px 0 0;accent-color:var(--water);flex:none}
.contact-form .form-consent label{margin:0;color:var(--muted);font:400 12px/1.6 "DM Sans",sans-serif;letter-spacing:0;text-transform:none}
.contact-form .form-consent a{color:var(--water);border-bottom:1px solid currentColor}
.contact-form .form-consent a:hover{color:var(--orange)}

/* ---- Footer legal links ---- */
.footer-legal{display:flex;flex-wrap:wrap;gap:6px 20px;font-size:12px}
.footer-legal a{color:var(--footer-muted);border-bottom:1px solid transparent}
.footer-legal a:hover{color:var(--yellow);border-bottom-color:currentColor}
@media (max-width:800px){
  footer{gap:14px}
  .footer-legal{width:100%;gap:6px 16px}
}
