:root{
  color-scheme:dark;
  --paper:#2D302C;
  --surface:#363A34;
  --ink:#FFFFFF;
  --ink-2:#B7BBB3;
  --rule:#474B45;
  --rule-strong:#FFFFFF;
  --accent:#640402;
  --accent-ink:#FFFFFF;
  --focus:var(--ink-2);

  --display:"Archivo","Helvetica Neue",Helvetica,Arial,sans-serif;
  --body:"Newsreader",Georgia,"Times New Roman",serif;

  --gap:clamp(20px,2.4vw,34px);
  --pad:clamp(20px,5vw,64px);
  --section:clamp(38px,4.4vw,66px);
  --header:80px;
}
*{box-sizing:border-box;}
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--body);
  font-size:17px;
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none;}
img,svg{display:block;max-width:100%;}
:focus-visible{outline:2px solid var(--focus);outline-offset:3px;}

.wrap{max-width:1360px;margin:0 auto;padding-inline:var(--pad);}

/* ---------- shared type ---------- */
.label{
  font-family:var(--display);
  font-variation-settings:"wdth" 100,"wght" 600;
  font-size:11px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink-2);
  font-variant-numeric:tabular-nums;
  margin:0;
}
.sect-title{
  font-family:var(--display);
  font-variation-settings:"wdth" 108,"wght" 600;
  letter-spacing:-.005em;
  font-size:clamp(28px,4.2vw,52px);
  line-height:1.02;
  margin:0;
  text-wrap:balance;
}
.lede{
  font-size:clamp(17px,1.35vw,20px);
  line-height:1.5;
  color:var(--ink-2);
  max-width:52ch;
  margin:0;
}

/* ---------- header ---------- */
.top{
  position:sticky;top:0;z-index:40;
  background:color-mix(in srgb,var(--paper) 88%,transparent);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--rule);
}
.top-in{display:flex;align-items:center;gap:var(--gap);height:var(--header);}
.mark{
  font-family:var(--display);
  font-variation-settings:"wdth" 118,"wght" 700;
  text-transform:uppercase;
  letter-spacing:.02em;
  font-size:17px;
  margin-right:auto;
}
.mark-logo{
  display:block;
  height:50px;width:auto;
  margin-right:auto;
}
.mark-logo img{display:block;height:100%;width:auto;filter:invert(1);}
@media (max-width:520px){.mark-logo{height:40px;}}
.nav{display:flex;gap:26px;align-items:center;}
.nav a{
  font-family:var(--display);
  font-variation-settings:"wdth" 100,"wght" 500;
  font-size:12px;letter-spacing:.1em;text-transform:uppercase;
  padding-block:4px;
  border-bottom:1px solid transparent;
}
.nav a:hover{border-bottom-color:var(--rule-strong);}
@media (max-width:860px){.nav{display:none;}}

.btn{
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--display);
  font-variation-settings:"wdth" 100,"wght" 600;
  font-size:12px;letter-spacing:.1em;text-transform:uppercase;
  padding:11px 20px;
  background:var(--accent);color:var(--accent-ink);
  border:1px solid var(--accent);
  transition:opacity .18s ease;
}
.btn:hover{opacity:.84;}
.btn-ghost{background:transparent;color:var(--ink);border-color:var(--rule-strong);}
.btn-ghost:hover{background:var(--ink);color:var(--paper);opacity:1;}
.btn-sm{padding:9px 16px;}

/* ---------- hero ---------- */
.hero{position:relative;}
.hero-banner{width:100%;height:auto;}

/* ---------- ticker ---------- */
.ticker{
  border-bottom:1px solid var(--rule);
  overflow:hidden;
  padding-block:14px;
}
.ticker-track{
  display:flex;width:max-content;
  animation:slide 46s linear infinite;
}
.ticker:hover .ticker-track{animation-play-state:paused;}
.ticker-track span{
  font-family:var(--display);
  font-variation-settings:"wdth" 100,"wght" 500;
  font-size:12px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink-2);
  padding-inline:18px;
  white-space:nowrap;
}
.ticker-track span::after{content:"·";margin-left:18px;color:var(--rule);}
.ticker-hero{
  position:sticky;top:calc(var(--header) + 1px);z-index:30;
  background:var(--accent);
  border-top:2px solid var(--accent);
  border-bottom:2px solid var(--accent);
}
.ticker-hero .ticker-track span{color:#FFFFFF;}
.ticker-hero .ticker-track span::after{color:rgba(255,255,255,.45);}
@keyframes slide{from{transform:translateX(0);}to{transform:translateX(-50%);}}
@media (prefers-reduced-motion:reduce){
  .ticker-track{animation:none;}
  .ticker{overflow-x:auto;}
}

/* ---------- section scaffold ---------- */
.sect{padding-block:var(--section);}
.sect-head{
  display:grid;grid-template-columns:180px 1fr auto;
  gap:var(--gap);align-items:baseline;
  padding-top:18px;border-top:1px solid var(--rule-strong);
  margin-bottom:clamp(24px,2.8vw,38px);
}
.sect-head .more{
  font-family:var(--display);
  font-variation-settings:"wdth" 100,"wght" 600;
  font-size:12px;letter-spacing:.1em;text-transform:uppercase;
  border-bottom:1px solid var(--rule-strong);padding-bottom:2px;
  white-space:nowrap;
}
.sect-head .more:hover{color:var(--ink-2);border-bottom-color:var(--ink-2);}
@media (max-width:760px){
  .sect-head{grid-template-columns:1fr;gap:14px;}
  .sect-head .more{justify-self:start;}
}
/* Section heads: accent-coloured eyebrow, title underscored in the same red.
   justify-self shrinks the title to its text, so the rule ends with the words. */
.sect-head .label{color:var(--ink-2);}
.sect-head .sect-title{
  justify-self:start;
  padding-bottom:.14em;
  border-bottom:2px solid var(--ink-2);
}

#programs{padding-top:clamp(34px,4vw,58px);}

/* ---------- how to attend ---------- */
#attend .sect-head{margin-bottom:clamp(18px,2vw,26px);}
.attend-lede{margin:0 0 clamp(30px,4vw,52px);}
.attend-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gap);}
.attend-panel{
  display:flex;flex-direction:column;gap:clamp(34px,4.2vw,58px);
  padding:clamp(30px,3.2vw,54px);
  min-height:clamp(330px,30vw,430px);
  background:var(--bg);color:var(--fg);
}
.panel-accent{--bg:#4B0302;--fg:#F5F4F1;--line:rgba(245,244,241,.4);--muted:rgba(245,244,241,.78);}
.panel-black{--bg:#000000;--fg:#F5F4F1;--line:rgba(245,244,241,.34);--muted:rgba(245,244,241,.72);}
.attend-panel svg{width:44px;height:44px;stroke:currentColor;fill:none;stroke-width:1.25;}
.attend-body{display:flex;flex-direction:column;align-items:flex-start;}
.attend-head{display:flex;align-items:center;gap:18px;}
.attend-head h3{
  font-family:var(--display);
  font-variation-settings:"wdth" 104,"wght" 600;letter-spacing:-.005em;
  font-size:clamp(19px,1.5vw,24px);line-height:1.08;
  margin:0;
}
.attend-body p{margin:0 0 1.05em;color:var(--muted);font-size:18px;line-height:1.5;max-width:46ch;}
.attend-mail{
  display:block;width:100%;
  margin-top:8px;
  border-top:1px solid var(--line);
  padding-top:18px;
  font-size:15px;color:var(--muted);
  word-break:break-word;
}
.attend-mail:hover{color:var(--fg);}
.attend-btn{
  display:inline-flex;align-items:center;gap:16px;
  margin-top:26px;padding-bottom:2px;
  background-image:linear-gradient(currentColor,currentColor);
  background-size:100% 1px;background-repeat:no-repeat;background-position:0 100%;
  font-family:var(--display);
  font-variation-settings:"wdth" 100,"wght" 600;
  font-size:12px;letter-spacing:.1em;text-transform:uppercase;
  transition:opacity .2s ease;
}
.attend-btn .arrow{width:17px;height:9px;stroke-width:1.6;}
.attend-btn:hover{opacity:.6;}
@media (max-width:760px){.attend-grid{grid-template-columns:1fr;}}
@media (prefers-reduced-motion:reduce){.attend-btn{transition:none;}}

/* ---------- card rows ---------- */
.row-3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap);}
.row-2{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gap);}
@media (max-width:900px){.row-3{grid-template-columns:1fr 1fr;}}
@media (max-width:620px){.row-3,.row-2{grid-template-columns:1fr;}}

/* programs: two stacked boxes per column */
.programs{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap);align-items:stretch;}
.programs .stack{display:flex;flex-direction:column;gap:var(--gap);}
.programs .card{gap:0;}
.programs .card .frame{margin-bottom:16px;}
.programs .card p{margin-top:7px;}
.programs .frame{aspect-ratio:16/9;position:relative;}
/* Programme tiles sit mono at rest and cross-fade to the red-accented shot on hover. */
.programs .frame .frame-hover{
  position:absolute;inset:0;
  opacity:0;
  transition:opacity .45s ease,transform .5s cubic-bezier(.2,.6,.2,1);
}
.programs .card:hover .frame-hover{opacity:1;}
.programs .frame svg,
.programs .frame img{width:100%;height:100%;object-fit:cover;}
@media (max-width:760px){
  .programs{grid-template-columns:1fr;}
}

.card{display:flex;flex-direction:column;gap:16px;}
.card .frame{overflow:hidden;}
.card .frame svg,
.card .frame img{transition:transform .5s cubic-bezier(.2,.6,.2,1);}
.card:hover .frame svg,
.card:hover .frame img{transform:scale(1.03);}
.card h3{
  font-family:var(--display);
  font-variation-settings:"wdth" 104,"wght" 600;
  font-size:clamp(19px,1.7vw,24px);
  line-height:1.1;letter-spacing:-.005em;
  margin:0;
  display:inline;
  background-image:linear-gradient(var(--ink),var(--ink));
  background-size:0 1px;background-repeat:no-repeat;background-position:0 100%;
  transition:background-size .35s ease;
}
.card:hover h3{background-size:100% 1px;}
.card p{margin:0;color:var(--ink-2);font-size:16px;max-width:44ch;}
.card .meta{display:flex;gap:14px;align-items:baseline;}
.card .meta .dot{color:var(--ink-2);}
@media (prefers-reduced-motion:reduce){
  .card .frame svg,.card .frame img,.card h3{transition:none;}
  .programs .frame .frame-hover{transition:none;}
}

/* ---------- event day schedule ---------- */
/* Event Day: intro column beside the schedule. */
.event-layout{
  display:grid;grid-template-columns:1fr 1.75fr;gap:clamp(28px,4vw,72px);align-items:start;
  border-top:1px solid var(--rule-strong);padding-top:22px;
}
.event-intro .label{font-size:12.65px;margin-bottom:12px;color:var(--ink-2);}
/* Footnote marker on the sessions, and its key under the section title. */
.slot h3 .ast{font-size:.55em;line-height:1;vertical-align:super;margin-left:3px;color:var(--ink-2);}
.event-note{
  margin:clamp(20px,2.4vw,28px) 0 0;
  color:var(--ink);font-size:19px;line-height:1.45;
  max-width:24ch;
}
/* Inline rather than a flex sibling, so the marker sits tight against the
   text. Matches the session markers: display face, muted, superscript --
   just larger, since this one is the key rather than the reference. */
.event-note .ast-lg{
  font-family:var(--display);
  font-size:1.25em;line-height:1;
  vertical-align:super;
  margin-right:.22em;
  color:var(--ink-2);
}
.event-intro .sect-title{
  display:inline-block;
  padding-bottom:.14em;
  border-bottom:2px solid var(--ink-2);
}
@media (max-width:860px){.event-layout{grid-template-columns:1fr;}}

.schedule{border-top:0;}
.slot{
  display:grid;grid-template-columns:180px 1fr;gap:var(--gap);align-items:baseline;
  padding:22px 0 24px;
  border-bottom:1px solid var(--rule);
}
.slot:first-child{padding-top:0;}
.slot .slot-time{
  font-family:var(--display);
  font-variation-settings:"wdth" 100,"wght" 500;
  font-size:14.95px;letter-spacing:.1em;
  font-variant-numeric:tabular-nums;
  color:var(--ink-2);
  white-space:nowrap;
}
.slot h3{
  font-family:var(--display);
  font-variation-settings:"wdth" 104,"wght" 600;letter-spacing:-.005em;
  font-size:clamp(19px,1.8vw,25px);line-height:1.08;
  margin:0;
  text-wrap:balance;
}
.slot p{margin:7px 0 0;color:var(--ink-2);max-width:58ch;}
@media (max-width:760px){
  .slot{grid-template-columns:1fr;gap:8px;}
}



.note{font-size:13px;color:var(--ink-2);margin:14px 0 0;}

/* ---------- footer ---------- */
.foot{padding-block:clamp(44px,6vw,72px) 40px;}
/* Same wordmark as the header, a little smaller. */
.foot .mark-logo{height:44px;margin-bottom:16px;}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:var(--gap);}
@media (max-width:820px){.foot-grid{grid-template-columns:1fr 1fr;}}
.foot ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px;}
.foot ul a{font-size:15px;color:var(--ink-2);}
.foot ul a:hover{color:var(--ink);}

/* ---------- mobile navigation ---------- */
/* .nav is hidden below 860px; this hamburger carries the links instead. */
.top-actions{display:flex;align-items:center;gap:14px;}
.nav-toggle{display:none;}
.mobile-nav{display:none;}

@media (max-width:860px){
  .nav-toggle{
    display:inline-flex;align-items:center;justify-content:center;
    width:42px;height:42px;flex:none;padding:0;
    background:none;border:1px solid var(--rule);
    color:var(--ink);cursor:pointer;
  }
  /* Three bars from one element: the middle is the span, the outer two
     are its pseudo-elements, which rotate into an X when open. */
  .nav-toggle .bars,
  .nav-toggle .bars::before,
  .nav-toggle .bars::after{
    display:block;width:18px;height:1.5px;background:currentColor;
  }
  .nav-toggle .bars{position:relative;}
  .nav-toggle .bars::before,
  .nav-toggle .bars::after{content:"";position:absolute;left:0;}
  .nav-toggle .bars::before{top:-6px;}
  .nav-toggle .bars::after{top:6px;}
  .nav-toggle[aria-expanded="true"] .bars{background:transparent;}
  .nav-toggle[aria-expanded="true"] .bars::before{top:0;transform:rotate(45deg);}
  .nav-toggle[aria-expanded="true"] .bars::after{top:0;transform:rotate(-45deg);}

  .mobile-nav{
    flex-direction:column;
    padding-inline:var(--pad);
    border-top:1px solid var(--rule);
    background:var(--paper);
  }
  .mobile-nav.is-open{display:flex;}
  .mobile-nav a{
    font-family:var(--display);
    font-variation-settings:"wdth" 100,"wght" 500;
    font-size:13px;letter-spacing:.1em;text-transform:uppercase;
    padding-block:16px;
    border-bottom:1px solid var(--rule);
  }
  .mobile-nav a:last-child{border-bottom:0;}
}

/* Footer links stack into one column on phones, so Venue / Speakers /
   MARKA x STEPEVI sit below About / Programme / How to attend. */
@media (max-width:760px){
  .foot-grid{grid-template-columns:1fr;}
}

/* The hero ticker sits at roughly half its desktop height on phones:
   ~48px tall becomes ~24px, with type and spacing scaled to match. */
@media (max-width:760px){
  .ticker{padding-block:5px;}
  .ticker-track span{font-size:9px;letter-spacing:.1em;padding-inline:9px;}
  .ticker-track span::after{margin-left:9px;}
}

/* The header (80px) and the hero ticker are both sticky, so they cover the
   top ~132px of the viewport -- desktop ~132px, mobile ~109px. Without this,
   an anchor jump to #visit or #attend parks the section title underneath
   them. scroll-margin-top moves the landing point clear, leaving the
   section's own padding as breathing room above the title. */
.sect{scroll-margin-top:110px;}
@media (max-width:760px){
  .sect{scroll-margin-top:90px;}
}
