/* ==========================================================================
   Stadthus Zürich — one-pager
   Werte aus dem Figma (Frame 1728 × 1117): Rand 75, Textspalte 1391,
   Namenspalte 209 ab x=1491, Linie 4 px / 812 breit, Marken 37 × 37.
   ========================================================================== */

:root{
  --ink:#000;
  --paper:#fff;
  --muted:#5a5a5a;
  --hair:#d4d4d4;

  --page:1728px;
  --gutter:clamp(20px, 4.34vw, 75px);
  /* Auf sehr breiten Bildschirmen bleibt das Raster des Figma-Frames erhalten. */
  --edge:max(var(--gutter), calc((100vw - var(--page)) / 2 + var(--gutter)));

  --rail-w:209px;
  --rail-gap:clamp(24px, 3vw, 48px);
  --bar:clamp(74px, 8.1vw, 140px);          /* Kopfzeile nach dem Scrollen */
  --bar-open:clamp(130px, 16vw, 280px);     /* Kopfzeile oben, mit grossem Logo */
  --logo-open:clamp(96px, 12.5vw, 220px);   /* Logo oben */
  --logo-small:clamp(30px, 3.1vw, 52px);    /* Logo nach dem Scrollen */

  /* 0 = ganz oben, 1 = fertig geschrumpft. Wird in main.js aus der
     Scrollposition gesetzt, damit die Kopfzeile dem Scrollen direkt folgt. */
  --head-progress:0;

  --fs-display:clamp(32px, 4.6vw, 80px);
  --fs-display-sm:clamp(28px, 3.9vw, 68px);
  --fs-lead:clamp(20px, 2.08vw, 36px);
  --fs-body:clamp(17px, 1.39vw, 24px);
  --fs-act:clamp(12px, 1.1vw, 19px);
  --fs-rail:clamp(11px, 0.93vw, 16px);
  --fs-small:clamp(14px, 1.05vw, 17px);

  --rule-w:4px;
  --mark:clamp(20px, 2.14vw, 37px);
  /* Breite der Linie unter den Titeln — der Fliesstext richtet sich danach. */
  --measure:812px;

  --font:"Helvetica Neue", Helvetica, Arial, "Liberation Sans", sans-serif;
  --ease:cubic-bezier(.2,.7,.2,1);
  /* Nur zum Glätten: Mausräder scrollen in Sprüngen, das rundet sie ab.
     Höhere Werte lassen die Kopfzeile dem Scrollen träger folgen. */
  --head-smooth:.18s;
}

*,*::before,*::after{box-sizing:border-box}

html{
  -webkit-text-size-adjust:100%;
  scroll-behavior:smooth;
  scroll-padding-top:calc(var(--bar) + 24px);
}

body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font);
  font-size:var(--fs-body);
  line-height:1.45;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

/* Verhindert, dass beim ersten Rendern eine Übergangsanimation losläuft. */
body.no-anim *,
body.no-anim *::before,
body.no-anim *::after{transition:none !important}

img{max-width:100%;height:auto;display:block}
a{color:inherit}
h1,h2,h3{font-weight:700}

:focus-visible{outline:3px solid var(--ink);outline-offset:3px}

.skip{
  position:absolute;left:-9999px;top:0;z-index:100;
  background:var(--ink);color:var(--paper);
  padding:14px 20px;font-weight:700;
}
.skip:focus{left:0}

/* --------------------------------------------------------------- Masthead */

.masthead{
  position:fixed;inset:0 0 auto 0;z-index:40;
  height:calc(var(--bar-open) + (var(--bar) - var(--bar-open)) * var(--head-progress));
  display:flex;align-items:center;justify-content:space-between;
  gap:24px;
  padding:0 var(--edge);
  background:var(--paper);
  transition:height var(--head-smooth) linear;
}
.masthead::after{
  content:"";position:absolute;left:0;right:0;top:100%;height:18px;
  background:linear-gradient(var(--paper),rgba(255,255,255,0));
  pointer-events:none;
}

.masthead__logo{display:block;flex:0 0 auto}
.masthead__logo img{
  width:auto;
  height:calc(var(--logo-open) + (var(--logo-small) - var(--logo-open)) * var(--head-progress));
  transition:height var(--head-smooth) linear;
}

.nav ul{
  list-style:none;margin:0;padding:0;
  display:flex;align-items:flex-start;
  gap:clamp(16px, 3.1vw, 54px);
}

.act{
  display:flex;flex-direction:column;gap:clamp(5px,.6vw,10px);
  align-items:flex-start;
  background:none;border:0;padding:0;margin:0;
  font:inherit;color:inherit;text-decoration:none;
  cursor:pointer;text-align:left;
}
.act__mark{
  display:block;
  width:clamp(18px, 1.9vw, 32px);height:clamp(18px, 1.9vw, 32px);
  color:var(--ink);
  overflow:visible;
  transition:transform .18s var(--ease);
}
.act__label{
  font-size:clamp(11px, 0.9vw, 15px);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.01em;
  line-height:1.1;
  white-space:nowrap;
}
/* Der Pfeil rückt beim Überfahren ein Stück in seine Richtung. */
.act:hover .act__mark,
.act:focus-visible .act__mark{transform:translate(3px, 3px)}

/* Nur Ablage für das <symbol>, selbst nie sichtbar. */
.sprite{position:absolute;width:0;height:0;overflow:hidden}

.burger{display:none}

/* ------------------------------------------------------------- Namensrail */

.rail{
  position:fixed;z-index:45;
  top:0;right:var(--edge);
  width:var(--rail-w);
  height:100vh;
  overflow:hidden;
  mask-image:linear-gradient(transparent 0, #000 6%, #000 92%, transparent 100%);
  -webkit-mask-image:linear-gradient(transparent 0, #000 6%, #000 92%, transparent 100%);
}
.rail ul{
  list-style:none;margin:0;padding:0;
  font-size:var(--fs-rail);
  font-weight:700;
  text-transform:uppercase;
  line-height:1.28;
  letter-spacing:.005em;
}
.rail__inner{will-change:transform}

/* ------------------------------------------------------------------ Aufbau */

main{
  padding-top:calc(var(--bar-open) + (var(--bar) - var(--bar-open)) * var(--head-progress));
  transition:padding-top var(--head-smooth) linear;
}

.section{
  margin-left:var(--edge);
  margin-right:var(--edge);
  padding:clamp(72px,9vw,160px) 0 clamp(48px,6vw,96px);
  max-width:1391px;
}

.rule{
  border:0;
  border-top:var(--rule-w) solid var(--ink);
  width:min(var(--measure), 100%);
  margin:clamp(20px,2.3vw,40px) 0 clamp(18px,2vw,34px);
}

.display{
  font-size:var(--fs-display);
  font-weight:400;
  line-height:1.02;
  letter-spacing:-.018em;
  margin:0;
  max-width:16ch;
  text-wrap:balance;
}
.display--sm{font-size:var(--fs-display-sm);max-width:20ch}

.lead{
  font-size:var(--fs-lead);
  line-height:1.18;
  margin:0;
  max-width:28ch;
  max-height:12em;
  transition:opacity .4s ease .1s, max-height .55s var(--ease);
}

/* ------------------------------------------------------- Vision / Scrollen */
/* Notiz aus dem Figma: der Satz wandert beim Scrollen nach oben,
   der ganze Text kommt darunter zum Vorschein. */

.vision{
  margin-left:var(--edge);
  margin-right:var(--edge);
}

.vision__head{
  position:sticky;
  top:var(--bar);
  z-index:20;
  background:var(--paper);
  padding-bottom:clamp(20px,2.4vw,44px);
  transition:padding-bottom .6s var(--ease);
}
/* Weicher Abschluss, damit der durchlaufende Text nicht hart abgeschnitten wirkt. */
.vision__head::after{
  content:"";position:absolute;left:0;right:0;top:100%;height:26px;
  background:linear-gradient(var(--paper),rgba(255,255,255,0));
  pointer-events:none;
  transition:height .6s var(--ease);
}

body.is-scrolled .vision__head{padding-bottom:10px}
body.is-scrolled .vision__head::after{height:10px}
.vision__headInner{
  min-height:calc(58svh - var(--bar));
  display:flex;flex-direction:column;justify-content:center;
  transition:min-height .6s var(--ease);
}

body.is-scrolled .vision__headInner{min-height:0}
body.is-scrolled .vision .display{font-size:var(--fs-display-sm)}
body.is-scrolled .lead{
  opacity:0;
  max-height:0;
  overflow:hidden;
}

.vision .display{transition:font-size .6s var(--ease)}


.vision__body{padding-bottom:clamp(60px,8vw,140px)}

.prose{max-width:min(var(--measure), 100%)}
.prose p{margin:0 0 1.15em}
.prose p:not(.prose__q){
  text-align:justify;
  line-height:1.5;
  hyphens:auto;
}
.prose h2{
  font-size:var(--fs-body);
  margin:2em 0 .5em;
}
.prose__q{
  font-size:var(--fs-lead);
  line-height:1.2;
  margin:clamp(24px,2.6vw,46px) 0;
  padding-left:clamp(16px,1.6vw,28px);
  border-left:var(--rule-w) solid var(--ink);
  max-width:34ch;
}
.prose__end{font-weight:700}

/* -------------------------------------------------------------- Neuigkeiten */

.news__list{list-style:none;margin:0;padding:0}

.entry{
  display:grid;
  grid-template-columns:clamp(150px, 18vw, 286px) minmax(0,1fr);
  gap:clamp(16px,2.3vw,40px);
  padding:clamp(22px,2.4vw,40px) 0;
  border-bottom:1px solid var(--hair);
}
.entry:first-child{border-top:1px solid var(--hair)}
.entry__date{margin:0;font-weight:700;line-height:1.25}
.entry__text{max-width:58ch}
.entry__text h3{margin:0 0 .45em;font-size:inherit;line-height:1.25}
.entry__text p{margin:0}

/* ------------------------------------------------------ Mitgliederformular */

.form{max-width:34rem}
.form__row{margin-bottom:clamp(18px,2vw,28px)}
.form__label{
  display:block;
  font-size:var(--fs-act);
  font-weight:700;
  text-transform:uppercase;
  margin-bottom:10px;
}
.form__input{
  width:100%;
  font:inherit;color:inherit;
  padding:14px 0;
  background:none;
  border:0;
  border-bottom:var(--rule-w) solid var(--ink);
  border-radius:0;
}
.form__input::placeholder{color:#9a9a9a}
.form__input:focus{outline:0;background:#f4f4f4}

.form__trap{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.form__check{
  display:flex;gap:12px;align-items:flex-start;
  margin:20px 0 26px;
  font-size:var(--fs-small);
  line-height:1.4;
  max-width:46ch;
  cursor:pointer;
}
.form__check input{
  flex:0 0 auto;
  width:20px;height:20px;margin:2px 0 0;
  accent-color:#000;
}

.btn{
  font:inherit;font-weight:700;
  text-transform:uppercase;letter-spacing:.02em;
  font-size:var(--fs-act);
  padding:16px 34px;
  background:var(--ink);color:var(--paper);
  border:var(--rule-w) solid var(--ink);
  border-radius:0;cursor:pointer;
  transition:background-color .18s ease, color .18s ease;
}
.btn:hover{background:var(--paper);color:var(--ink)}
.btn[disabled]{opacity:.45;cursor:progress}

.form__msg{margin:18px 0 0;font-size:var(--fs-small);min-height:1.4em}
.form__msg[data-state="ok"],
.form__msg[data-state="error"]{font-weight:700}
.form__msg[data-state="error"]{text-decoration:underline;text-underline-offset:4px}

/* ---------------------------------------------------------------- Downloads */

.files{list-style:none;margin:0;padding:0;max-width:820px}
.files li{border-top:1px solid var(--hair)}
.files li:last-child{border-bottom:1px solid var(--hair)}

.file{
  display:flex;align-items:center;gap:clamp(14px,1.6vw,28px);
  padding:clamp(18px,2vw,30px) 0;
  text-decoration:none;
}
.file__mark{
  flex:0 0 auto;
  width:var(--mark);height:var(--mark);
  border:var(--rule-w) solid var(--ink);
  position:relative;
  transition:background-color .18s ease;
}
.file__mark::after{
  content:"";position:absolute;left:50%;top:50%;
  width:36%;height:36%;
  border-right:var(--rule-w) solid var(--ink);
  border-bottom:var(--rule-w) solid var(--ink);
  transform:translate(-50%,-64%) rotate(45deg);
  transition:border-color .18s ease;
}
.file:hover .file__mark,
.file:focus-visible .file__mark{background:var(--ink)}
.file:hover .file__mark::after,
.file:focus-visible .file__mark::after{border-color:var(--paper)}

.file__body{display:block}
.file__name{display:block;font-weight:700;line-height:1.3}
.file__meta{display:block;color:var(--muted);font-size:var(--fs-small);margin-top:4px}

/* -------------------------------------------------------------------- Fuss */

.foot{
  margin:clamp(40px,6vw,110px) var(--edge) 0;
  padding:clamp(28px,3vw,52px) 0 clamp(36px,4vw,72px);
  border-top:var(--rule-w) solid var(--ink);
  max-width:1391px;
  font-size:var(--fs-small);
}
.foot__grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:24px;
}
.foot p{margin:0;line-height:1.55}
.foot__brand{font-weight:700;text-transform:uppercase}
.foot a{text-decoration:none;border-bottom:1px solid var(--ink)}
.foot a:hover{background:var(--ink);color:var(--paper)}

/* ------------------------------------------------------------------- Modal */

.modal{
  border:var(--rule-w) solid var(--ink);
  border-radius:0;padding:0;
  width:min(720px, calc(100vw - 32px));
  max-width:none;
  max-height:calc(100dvh - 32px);
  background:var(--paper);color:var(--ink);
  overflow:hidden;
}
.modal::backdrop{background:rgba(0,0,0,.72)}
.modal__bar{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:18px clamp(16px,2vw,28px);
  border-bottom:var(--rule-w) solid var(--ink);
}
.modal__title{
  margin:0;font-size:var(--fs-act);
  font-weight:700;text-transform:uppercase;
}
.modal__close{
  font:inherit;font-size:var(--fs-act);font-weight:700;text-transform:uppercase;
  background:none;border:0;padding:6px;cursor:pointer;
  text-decoration:underline;text-underline-offset:4px;
}
.modal__body{
  padding:clamp(16px,2vw,28px);
  overflow:auto;
  max-height:calc(100dvh - 150px);
  min-height:120px;
}
.modal__fallback{margin:0;line-height:1.5}

/* -------------------------------------------------------------- Breakpoints */

@media (max-width:1199px){
  .rail{display:none}
}

@media (min-width:1200px){
  .section,
  .vision,
  .foot{margin-right:calc(var(--edge) + var(--rail-w) + var(--rail-gap))}
  .nav ul{padding-right:calc(var(--rail-w) + var(--rail-gap))}
}

@media (max-width:860px){
  :root{--bar:64px;--bar-open:110px;--logo-open:78px;--logo-small:30px}

  .burger{
    display:flex;align-items:center;gap:10px;
    background:none;border:0;padding:8px 0;margin:0;
    font:inherit;font-size:13px;font-weight:700;text-transform:uppercase;
    cursor:pointer;
  }
  .burger__bars{display:block;width:26px}
  .burger__bars i{display:block;height:var(--rule-w);background:var(--ink);transition:transform .25s ease}
  .burger__bars i + i{margin-top:6px}
  .burger[aria-expanded="true"] .burger__bars i:first-child{transform:translateY(5px) rotate(45deg)}
  .burger[aria-expanded="true"] .burger__bars i:last-child{transform:translateY(-5px) rotate(-45deg)}

  .nav{
    position:fixed;inset:var(--bar) 0 0 0;
    background:var(--paper);
    padding:clamp(20px,6vw,40px) var(--edge);
    display:none;overflow:auto;
  }
  .nav.is-open{display:block}
  .nav ul{flex-direction:column;align-items:stretch;gap:0}
  .nav li{border-bottom:1px solid var(--hair)}
  .nav li:first-child{border-top:1px solid var(--hair)}
  .act{flex-direction:row;align-items:center;gap:16px;width:100%;padding:20px 0}
  .act__mark{width:24px;height:24px}
  .act__label{font-size:17px;white-space:normal}

  .entry{grid-template-columns:1fr;gap:8px}
  .cols{grid-template-columns:1fr}
  .display{max-width:none}
  html{scroll-padding-top:calc(var(--bar) + 16px)}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    transition-duration:.01ms !important;
    animation-duration:.01ms !important;
  }
  .rail__inner{transform:none !important}
}

@media print{
  .masthead,.rail,.modal,.burger{display:none !important}
  .vision__head{position:static}
  .vision__headInner{min-height:0}
  main{padding-top:0}
  body{font-size:11pt}
  a{text-decoration:none}
}
