/* Cookie consent bar (decision C7). Live tokens only. */
:root{--consent-h:0px}
.consent{position:fixed;left:0;right:0;bottom:0;z-index:70;background:var(--surface);color:var(--text);box-shadow:0 -1px 0 var(--line),0 -8px 24px rgba(12,24,68,.10);padding-block:16px max(16px,env(safe-area-inset-bottom,0px))}
.consent[hidden]{display:none}
.consent-in{display:flex;align-items:center;gap:var(--s4)}
.consent p{flex:1;max-width:none;margin:0;font-size:var(--fs-0);line-height:1.5;color:var(--text)}
.consent p a{font-weight:700;white-space:nowrap}
.consent-actions{display:flex;gap:12px;flex:none}
.consent-actions .btn{min-height:44px;min-width:128px;padding:6px 22px;font-size:var(--fs-0)}
.consent-actions .btn-primary{color:#0C1844}
.has-consent .to-top{opacity:0;pointer-events:none}
.has-consent .site-footer{padding-bottom:calc(var(--s4) + var(--consent-h))}
.consent-open{background:none;border:0;padding:0;font:inherit;color:inherit;cursor:pointer}
.consent-open:hover{color:var(--accent-text)}
.site-footer .legal .consent-open{display:inline-flex;align-items:center;min-height:44px}
.btn.consent-open{background:transparent;border:2px solid var(--text);padding:6px 22px}
@media (max-width:759.98px){
  /* On phones the bar sits under the header, over the top of the hero photo, so it never covers a first-screen action (28 Oct). */
  /* The page is pushed down by the bar's height while the bar shows (Project Director, option 1b), so the bar covers nothing; it scrolls away with the page and goes under the sticky header. */
  .has-consent .site-header{margin-bottom:var(--consent-h,0px)}
  .consent{position:absolute;z-index:40;top:var(--hdr-h,64px);bottom:auto;padding-block:6px;box-shadow:0 1px 0 var(--line),0 6px 16px rgba(12,24,68,.10)}
  .has-consent .site-footer{padding-bottom:var(--s4)}
  .consent-in{flex-direction:column;align-items:stretch;gap:4px}
  .consent p{font-size:14px;line-height:1.35}
  .consent-actions{gap:8px}
  .consent-actions .btn{flex:1;min-width:0;min-height:40px;padding:2px 12px;font-size:14px}
  /* While the bar shows, the hero photo is a little shorter so the first button stays on screen. */
  .has-consent .hero-media{aspect-ratio:16/10}
  /* Short phones (360 x 740): a little shorter still. */
  @media (max-height:760px){
    .has-consent .hero-media{aspect-ratio:9/4}
    .has-consent .pers-hero > .wrap,.has-consent .app-hero > .wrap{padding-top:24px}
  }
}
.consent:not([hidden]){animation:consent-in .28s ease-out}
@keyframes consent-in{from{opacity:0;transform:translateY(16px)}}
/* After Accept or Decline (Project Director, 28 Oct): the bar fades out while the pushed-down page and the shorter hero photo ease back
   over 220 ms, instead of jumping. consent.js sets .consent-leaving on the root for that moment only; with reduced motion nothing animates. */
.consent.is-leaving{opacity:0;transition:opacity .2s ease-out}
@media (max-width:759.98px){
  .consent-leaving .site-header{margin-bottom:var(--consent-h,0px);transition:box-shadow .25s var(--ease),transform .3s var(--ease),margin-bottom .22s ease-out}
  .consent-leaving .hero-media{transition:aspect-ratio .22s ease-out}
}
@media (prefers-reduced-motion:reduce){.consent.is-leaving{transition:none}}
