/* Events discovery — one shared button, card, and rail system for the page. */
:root{
  --ev-ink:#201a13;--ev-muted:#71685e;--ev-soft:#8b8177;--ev-paper:#fff8f1;
  --ev-line:rgba(32,26,19,.11);--ev-line-strong:rgba(32,26,19,.17);
  --ev-maroon:#7a0019;--ev-gold:#ffcc33;--ev-gold-soft:#fff0c4;
  --ev-green:#207356;--ev-green-soft:#e9f6ed;--ev-card:#fffdfa;
  --ev-shadow:0 14px 30px rgba(56,34,10,.07);--ev-shadow-lift:0 20px 38px rgba(56,34,10,.13);
  --ev-radius:18px;
}
*{box-sizing:border-box}
html{background:var(--ev-paper);scroll-behavior:smooth}
body{
  min-height:100vh;margin:0;color:var(--ev-ink);
  font-family:Manrope,Inter,ui-sans-serif,system-ui,sans-serif;
  background:radial-gradient(circle at 6% 0,rgba(255,204,51,.2),transparent 24%),
             radial-gradient(circle at 95% 3%,rgba(122,0,25,.06),transparent 20%),
             linear-gradient(180deg,#fffdf8,var(--ev-paper) 52%,#fbf0df);
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ---------- Buttons: one family, four weights ---------- */
.ev-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  min-height:42px;padding:0 15px;border:1px solid var(--ev-line-strong);border-radius:12px;
  background:#fff;color:var(--ev-ink);font:inherit;font-size:13px;font-weight:800;
  white-space:nowrap;cursor:pointer;
  transition:transform .16s ease,box-shadow .16s ease,background .16s ease,border-color .16s ease,color .16s ease;
}
.ev-btn:hover,.ev-btn:focus-visible{outline:none;transform:translateY(-1px);box-shadow:0 10px 20px rgba(44,28,12,.1);border-color:rgba(122,0,25,.24)}
.ev-btn:active{transform:translateY(0)}
.ev-btn:disabled{cursor:not-allowed;opacity:.6;transform:none;box-shadow:none}
.ev-btn--primary{border-color:#4d3600;background:var(--ev-gold);color:#3f2a00}
.ev-btn--primary:hover,.ev-btn--primary:focus-visible{border-color:#4d3600;background:#ffd54f}
.ev-btn--dark{border-color:#2d261f;background:var(--ev-ink);color:#fff}
.ev-btn--dark:hover,.ev-btn--dark:focus-visible{border-color:#2d261f;background:#332b22}
.ev-btn--quiet{border-color:transparent;background:transparent;color:var(--ev-maroon)}
.ev-btn--quiet:hover,.ev-btn--quiet:focus-visible{border-color:var(--ev-line);background:rgba(255,255,255,.8);box-shadow:none}
.ev-btn--sm{min-height:36px;padding:0 12px;font-size:12px;border-radius:10px}
.ev-btn--icon{width:38px;min-height:38px;padding:0;border-radius:11px}
.ev-btn--going{border-color:rgba(32,115,86,.28);background:var(--ev-green-soft);color:var(--ev-green)}
.ev-btn svg{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
.ev-btn--icon.is-on{border-color:rgba(122,0,25,.3);background:#fff0f2;color:var(--ev-maroon)}
.ev-btn--icon.is-on svg{fill:currentColor}

/* ---------- Shell + hero ---------- */
.ev-shell{width:min(1320px,calc(100% - 48px));margin:0 auto;padding:34px 0 104px}
.ev-hero{padding:14px 0 20px}
.ev-hero__eyebrow{margin:0 0 8px;color:var(--ev-maroon);font-size:11px;font-weight:900;letter-spacing:.1em;text-transform:uppercase}
.ev-hero h1{margin:0;font-size:clamp(38px,4.6vw,56px);letter-spacing:-.06em;line-height:.97}
.ev-hero__sub{max-width:520px;margin:10px 0 0;color:var(--ev-muted);font-size:15px;line-height:1.55}

/* ---------- One search bar: field, filters, and submit in a single pill ---------- */
.ev-toolbar{display:flex;align-items:center;gap:10px}
.ev-searchbar{
  display:flex;align-items:center;flex:1;min-width:0;padding:4px 4px 4px 6px;
  border:1px solid var(--ev-line-strong);border-radius:14px;background:#fff;
  transition:border-color .16s ease,box-shadow .16s ease
}
.ev-searchbar:focus-within{border-color:rgba(122,0,25,.45);box-shadow:0 0 0 3px rgba(122,0,25,.08)}
.ev-search{display:flex;align-items:center;flex:1;min-width:0;gap:8px;padding-left:8px}
.ev-search svg{width:17px;height:17px;flex:none;fill:none;stroke:#73695f;stroke-linecap:round;stroke-width:2}
.ev-search input{
  width:100%;min-width:0;min-height:40px;padding:0;border:0;background:transparent;
  color:var(--ev-ink);font:inherit;font-size:14px;outline:none
}
.ev-search input::placeholder{color:#9b9188}
.ev-search input::-webkit-search-cancel-button{cursor:pointer}
.ev-searchbar__go{min-height:36px;padding:0 14px;border-radius:10px;font-size:12.5px}

/* Filter popover — click the icon, click outside to close */
.ev-filters{position:relative;flex:none}
.ev-filters__toggle{
  display:inline-flex;align-items:center;gap:5px;min-height:36px;padding:0 10px;margin-right:4px;
  border-radius:10px;color:var(--ev-muted);cursor:pointer;list-style:none;
  transition:background .16s ease,color .16s ease
}
.ev-filters__toggle::-webkit-details-marker{display:none}
.ev-filters__toggle:hover,.ev-filters[open] .ev-filters__toggle{background:#f7f1e8;color:var(--ev-maroon)}
.ev-filters__toggle svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-linecap:round;stroke-width:1.9}
.ev-filters__toggle .ev-count{
  display:inline-grid;place-items:center;min-width:17px;height:17px;padding:0 5px;border-radius:999px;
  background:var(--ev-maroon);color:#fff;font-size:10px;font-weight:900
}
.ev-filters__panel{
  position:absolute;z-index:40;top:calc(100% + 12px);right:0;width:min(420px,calc(100vw - 32px));
  padding:16px;border:1px solid var(--ev-line-strong);border-radius:16px;background:#fffdfa;
  box-shadow:0 26px 50px rgba(48,30,9,.18);
}
.ev-filters:not([open]) .ev-filters__panel{display:none}
.ev-filters__group+.ev-filters__group{margin-top:14px;padding-top:14px;border-top:1px solid var(--ev-line)}
.ev-filters__group>p{margin:0 0 8px;color:var(--ev-soft);font-size:11px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}
.ev-choice-row{display:flex;flex-wrap:wrap;gap:7px}
.ev-choice{
  display:inline-flex;align-items:center;min-height:34px;padding:0 12px;border:1px solid var(--ev-line);
  border-radius:999px;background:#fff;color:var(--ev-muted);font-size:12px;font-weight:800;cursor:pointer;
  transition:border-color .16s ease,background .16s ease,color .16s ease
}
.ev-choice:hover{border-color:rgba(122,0,25,.24);color:var(--ev-maroon)}
.ev-choice input{position:absolute;opacity:0;pointer-events:none}
.ev-choice:has(input:checked){border-color:rgba(122,0,25,.28);background:var(--ev-gold-soft);color:#633c00}
.ev-choice small{margin-left:5px;color:var(--ev-soft);font-weight:800}
.ev-filters__foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:16px}

/* View switch */
.ev-switch{display:inline-flex;padding:3px;border:1px solid var(--ev-line-strong);border-radius:12px;background:#fff}
.ev-switch button{
  display:inline-grid;width:38px;height:36px;place-items:center;border:0;border-radius:9px;
  background:transparent;color:var(--ev-muted);cursor:pointer
}
.ev-switch button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
.ev-switch button[aria-pressed="true"]{background:var(--ev-ink);color:#fff}

/* ---------- Section headers + rails ---------- */
.ev-section{margin-top:46px}
.ev-section__head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:14px}
.ev-section__head>div:first-child{position:relative;padding-left:14px}
.ev-section__head>div:first-child::before{position:absolute;top:5px;bottom:4px;left:0;width:4px;border-radius:99px;background:linear-gradient(var(--ev-maroon) 0 58%,var(--ev-gold) 58%);content:""}
.ev-section__head h2{margin:0;font-size:clamp(21px,2.2vw,26px);letter-spacing:-.055em}
.ev-section__head p{margin:4px 0 0;color:var(--ev-muted);font-size:12px;font-weight:750}
.ev-section__tools{display:flex;align-items:center;gap:8px}
/* Cards grow to fill a short row but never stretch past a readable width. */
.ev-rail{
  display:flex;gap:16px;overflow-x:auto;padding:4px 4px 12px;margin:-4px -4px -12px;
  scroll-snap-type:x mandatory;scrollbar-width:none
}
.ev-rail::-webkit-scrollbar{display:none}
/* The panel sits beside the photo, so a card needs roughly twice the width it
   did when the text was stacked underneath. */
.ev-rail>*{flex:0 0 520px;max-width:none;scroll-snap-align:start}
.ev-rail--feature>*{flex:0 0 560px;max-width:none}
.ev-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:16px}
/* Event cards carry a side panel, so their grid needs a much wider track
   than the deals feed, which shares this class. */
.ev-grid:has(.ev-card){grid-template-columns:repeat(auto-fill,minmax(452px,1fr))}
/* Phone: 1.6 cards per rail. The next one is clearly cut so the row still reads
   as scrollable, but each card is wide enough to carry its capacity and its
   RSVP button instead of being a bare tile. The vertical grid stays full
   width — there the card is the whole row. */
@media(max-width:719px){
  .ev-rail>*,.ev-rail--feature>*{flex:0 0 calc((100% - 12px) / 1.6);max-width:none}
  .ev-grid:has(.ev-card){grid-template-columns:1fr}
}

/* ---------- Card ---------- */
.ev-card{
  position:relative;display:block;min-width:0;overflow:hidden;min-height:326px;
  border:1px solid var(--ev-line);border-radius:22px;background:#f0e2c8;
  box-shadow:var(--ev-shadow);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease
}
.ev-cal-ask{width:min(360px,calc(100% - 32px));padding:0;border:1px solid var(--ev-line);border-radius:20px;background:var(--ev-surface,#fffdfa);color:inherit;box-shadow:0 28px 70px rgba(30,18,10,.3)}.ev-cal-ask::backdrop{background:rgba(26,18,12,.5);backdrop-filter:blur(3px)}.ev-cal-ask__body{padding:22px}.ev-cal-ask__icon{display:grid;width:44px;height:44px;place-items:center;margin-bottom:14px;border-radius:14px;background:var(--ev-gold-soft,#fff3cd);color:var(--ev-maroon)}.ev-cal-ask__icon svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.ev-cal-ask h2{margin:0 0 6px;font-size:19px;letter-spacing:-.03em}.ev-cal-ask p{margin:0 0 18px;color:var(--ev-muted,#6c6055);font-size:13px;line-height:1.5}.ev-cal-ask__when{display:block;margin-top:8px;color:var(--ev-ink);font-weight:850}.ev-cal-ask__actions{display:grid;grid-template-columns:1fr 1fr;gap:9px}.ev-cal-ask__actions .ev-btn{justify-content:center;min-height:44px}.ev-card__media>img{transition:transform .4s ease}@media(hover:hover){.ev-card:hover{transform:translateY(-5px);border-color:rgba(122,0,25,.45);box-shadow:0 26px 50px rgba(56,34,10,.28)}.ev-card:hover .ev-card__media>img{transform:scale(1.06)}.ev-card:hover .ev-card__panel{border-color:rgba(255,255,255,.9);background:rgba(252,249,244,.9)}}.ev-card:focus-within{border-color:rgba(122,0,25,.45);box-shadow:0 22px 44px rgba(56,34,10,.22)}@media(prefers-reduced-motion:reduce){.ev-card,.ev-card__media>img{transition:none}.ev-card:hover{transform:none}}
/* The cover is the card. Everything else floats over it. */
.ev-card__media{position:absolute;inset:0;display:block;overflow:hidden;background:#f0e2c8}
.ev-card__media>img{display:block;width:100%;height:100%;object-fit:cover}
.ev-card__fallback{
  --cover-a:#f6e6c6;--cover-b:#e7d2a4;--cover-ink:#4a351a;--cover-accent:rgba(122,0,25,.16);
  position:relative;display:flex;width:100%;height:100%;flex-direction:column;justify-content:flex-end;
  padding:56px 16px 40px;overflow:hidden;color:var(--cover-ink);
  background:linear-gradient(150deg,var(--cover-a),var(--cover-b));
}
/* Covers stay inside the brand palette — gold, sand, and maroon — so the grid
   reads as one product instead of a rainbow of stock art. */
.ev-card__fallback[data-theme="social"]{--cover-a:#ffe9b8;--cover-b:#f4c86a;--cover-ink:#5c3d05}
.ev-card__fallback[data-theme="career"]{--cover-a:#f3e7d3;--cover-b:#d9c39c;--cover-ink:#4d3a1c;--cover-accent:rgba(77,58,28,.2)}
.ev-card__fallback[data-theme="academic"]{--cover-a:#f7ecd8;--cover-b:#e3caa0;--cover-ink:#523a15;--cover-accent:rgba(82,58,21,.2)}
.ev-card__fallback[data-theme="community"]{--cover-a:#f8e3e0;--cover-b:#e6b9b4;--cover-ink:#5f1f22;--cover-accent:rgba(122,0,25,.22)}
.ev-card__fallback[data-theme="arts"]{--cover-a:#fae0dd;--cover-b:#e5aeae;--cover-ink:#63161f;--cover-accent:rgba(122,0,25,.24)}
.ev-card__fallback[data-theme="wellness"]{--cover-a:#eeecd6;--cover-b:#cfcb9d;--cover-ink:#41411c;--cover-accent:rgba(65,65,28,.2)}
.ev-card__fallback[data-theme="campus-life"],.ev-card__fallback[data-theme="campus"]{--cover-a:#fdeec4;--cover-b:#f0d18a;--cover-ink:#59410c}
.ev-card__fallback::before{
  position:absolute;top:-46%;right:-16%;width:106%;height:88%;border:1px solid var(--cover-accent);
  border-radius:50%;content:""
}
.ev-card__fallback em::before{
  display:block;width:44px;height:3px;margin-bottom:8px;border-radius:2px;
  background:currentColor;opacity:.55;content:""
}
.ev-card__fallback em{position:relative;z-index:1;overflow:hidden;margin-bottom:6px;font-size:10px;font-style:normal;font-weight:900;letter-spacing:.09em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;opacity:.72}
.ev-card__fallback i{position:absolute;display:block;border:1px solid var(--cover-accent);border-radius:50%}
.ev-card__fallback i:nth-of-type(1){top:14%;right:12%;width:22px;height:22px}
.ev-card__fallback i:nth-of-type(2){top:31%;right:26%;width:9px;height:9px}
.ev-card__fallback i:nth-of-type(3){top:22%;right:38%;width:13px;height:13px}
.ev-card__fallback strong{
  position:relative;z-index:1;display:-webkit-box;max-width:12ch;overflow:hidden;font-size:20px;
  letter-spacing:-.04em;line-height:1.12;-webkit-box-orient:vertical;-webkit-line-clamp:2
}

/* Date tile: month over day, sized to be read from a scrolling rail. */
.ev-card__date{
  position:absolute;top:14px;left:14px;z-index:2;display:grid;place-items:center;min-width:62px;
  padding:9px 8px 11px;border-radius:17px;background:rgba(252,249,244,.96);
  box-shadow:0 10px 22px rgba(30,20,10,.3);line-height:1
}
.ev-card__date small{color:var(--ev-maroon);font-size:12px;font-weight:950;letter-spacing:.1em;text-transform:uppercase}
.ev-card__date b{margin-top:5px;font-size:29px;letter-spacing:-.05em}
/* Flags tuck against the panel's leading edge, level with the tile. */
.ev-card__flags{
  position:absolute;top:14px;right:calc(51% + 20px);left:84px;z-index:2;
  display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end
}
.ev-flag{
  display:inline-flex;align-items:center;gap:4px;min-height:24px;padding:0 9px;border-radius:999px;
  background:rgba(24,17,11,.72);color:#fff;font-size:10px;font-weight:900;letter-spacing:.01em;
  box-shadow:0 8px 18px rgba(30,20,10,.24)
}
.ev-flag--cat{background:rgba(252,249,244,.95);color:var(--ev-maroon)}
.ev-flag--food{background:var(--ev-gold,#ffcc33);color:#4a3200}
/* Live state, sat with the time it qualifies rather than on the picture. */
.ev-state{
  flex:none;padding:2px 7px;border-radius:999px;background:var(--ev-maroon);color:#fff;
  font-size:9.5px;font-weight:900;letter-spacing:.05em;text-transform:uppercase
}

/* ---------- The frosted panel ---------- */
.ev-card__panel{
  position:absolute;top:12px;right:12px;bottom:12px;z-index:2;display:flex;
  width:clamp(246px,51%,320px);
  flex-direction:column;padding:15px 16px 16px;border:1px solid rgba(255,255,255,.6);
  border-radius:18px;background:rgba(252,249,244,.76);
  -webkit-backdrop-filter:blur(32px) saturate(1.4);backdrop-filter:blur(32px) saturate(1.4)
}
/* Without blur support the panel goes near-solid, so text is never left
   sitting on raw photo. */
@supports not ((backdrop-filter:blur(2px)) or (-webkit-backdrop-filter:blur(2px))){
  .ev-card__panel{background:rgba(252,249,244,.96)}
}
.ev-card__head{display:flex;align-items:flex-start;gap:9px}
.ev-card__title{flex:1;margin:0;font-size:17px;letter-spacing:-.04em;line-height:1.16}
.ev-card__title a{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.ev-card__title a:hover,.ev-card__title a:focus-visible{color:var(--ev-maroon);outline:none}
/* Stretched link: the whole card opens the event, which is why there is no
   Details button. Everything interactive above sits on a higher layer. */
.ev-card__title a::after{position:absolute;inset:0;z-index:1;content:""}
.ev-card__quick,.ev-card__foot{position:relative;z-index:3}
.ev-card__quick{display:flex;flex:none;gap:6px}
.ev-card__quick .ev-btn{background:rgba(255,253,250,.72);border-color:rgba(30,20,10,.16)}
.ev-card__quick .ev-btn.is-on{border-color:var(--ev-maroon);background:var(--ev-maroon);color:#fff}
.ev-card__quick .ev-btn.is-on svg{fill:currentColor}
.ev-card__media:focus-visible,.ev-card__title a:focus-visible,
.ev-card__quick .ev-btn:focus-visible,.ev-card__foot .ev-btn:focus-visible{
  outline:3px solid rgba(122,0,25,.42);outline-offset:2px
}
.ev-card__org{display:flex;align-items:center;gap:9px;min-width:0;margin:12px 0 0}
.ev-card__org img,.ev-card__org span.ev-avatar{
  display:grid;width:32px;height:32px;flex:none;place-items:center;overflow:hidden;border-radius:11px;
  border:1px solid rgba(122,0,25,.14);background:var(--ev-gold-soft);color:var(--ev-maroon);
  font-size:12px;font-weight:950;object-fit:cover
}
.ev-card__orgtext{min-width:0}
.ev-card__orgtext b{display:block;overflow:hidden;color:var(--ev-ink);font-size:12.5px;font-weight:900;letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap}
.ev-card__orgtext small{display:block;margin-top:1px;color:#574f47;font-size:10.5px;font-weight:850}
.ev-card__org svg{width:13px;height:13px;flex:none;fill:none;stroke:var(--ev-maroon);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.ev-card__facts{display:grid;gap:8px;margin:13px 0 0;padding:0;list-style:none}
.ev-card__facts li{display:flex;align-items:center;gap:9px;min-width:0;color:#3f3831;font-size:13px;font-weight:850;line-height:1.3}
.ev-card__facts li svg{width:17px;height:17px;flex:none;fill:none;stroke:var(--ev-maroon);stroke-linecap:round;stroke-linejoin:round;stroke-width:2}
.ev-card__facts li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* The short spelling of the time only appears on narrow rail cards. */
.ev-when-short{display:none}
.ev-card__promo{display:flex;align-items:center;gap:7px;margin:11px 0 0;color:#6b5a2a;font-size:11.5px;font-weight:800}
.ev-card__promo svg{width:15px;height:15px;flex:none;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}

/* Capacity, when the event has one. */
.ev-card__capacity{margin-top:auto;padding-top:13px}
.ev-card__capacity-copy{display:flex;align-items:baseline;justify-content:space-between;gap:8px;font-size:11.5px;font-weight:900}
.ev-card__capacity-copy strong{color:var(--ev-ink)}
.ev-card__capacity-copy span{color:var(--ev-maroon);font-size:11px;font-weight:900}
.ev-card__capacity-track{height:6px;overflow:hidden;margin-top:6px;border-radius:999px;background:rgba(30,20,10,.14)}
.ev-card__capacity-track i{display:block;height:100%;min-width:4px;border-radius:inherit;background:var(--ev-maroon)}
/* Past 80% it warns in amber; at capacity it goes quiet grey, never red. */
.ev-card__capacity.is-warm .ev-card__capacity-copy span{color:#8f5309}
.ev-card__capacity.is-warm .ev-card__capacity-track i{background:#8f5309}
.ev-card__capacity.is-full .ev-card__capacity-copy span{color:#7d746b}
.ev-card__capacity.is-full .ev-card__capacity-track i{background:#7d746b}
/* No cap set — most events. One line, no bar, no empty space left behind. */
.ev-card__capacity--open{
  display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:11.5px;font-weight:900
}
.ev-card__capacity--open strong{color:var(--ev-ink)}
.ev-card__capacity--open span{color:var(--ev-muted);font-size:11px;font-weight:900}

.ev-card__foot{display:grid;grid-template-columns:1fr;gap:8px;margin-top:12px}
.ev-card__foot .ev-btn{justify-content:center;min-height:42px;font-size:13px}
.ev-card__status{position:relative;z-index:3;margin:8px 0 0;color:var(--ev-green);font-size:11px;font-weight:800;line-height:1.35}
.ev-card__status:empty{display:none}

/* Featured card: same anatomy, more room */
.ev-card--feature{min-height:358px}
.ev-card--feature .ev-card__title{font-size:20px;letter-spacing:-.045em}

/* Phone: the card is tall enough to carry who is hosting. The date tile is
   still dropped — the fact row already reads "Sat, Aug 29", so the tile was
   saying it twice — and the strip it used to sit on goes to the flags. The
   picture still reads through the glass above the panel. */
@media(max-width:719px){
  .ev-card{min-height:310px;border-radius:16px}
  .ev-card--feature{min-height:310px}
  .ev-card__panel{top:auto;right:7px;bottom:7px;left:7px;width:auto;padding:8px 11px 9px;
                  border-radius:13px;background:rgba(252,249,244,.7);
                  -webkit-backdrop-filter:blur(34px) saturate(1.45);backdrop-filter:blur(34px) saturate(1.45)}
  /* The date lives in the fact row on a phone, so the tile is redundant. */
  .ev-card__date{display:none}
  .ev-card__flags{top:7px;right:9px;left:9px;justify-content:flex-end}
  .ev-flag{min-height:19px;padding:0 8px;font-size:9.5px;box-shadow:0 4px 10px rgba(30,20,10,.2)}
  .ev-card__head{gap:7px}
  .ev-card__title{font-size:14px;line-height:1.15}
  .ev-card__title a{-webkit-line-clamp:1}
  .ev-card__quick .ev-btn{width:26px;height:26px;min-height:26px;border-radius:8px}
  .ev-card__quick .ev-btn svg{width:13px;height:13px}
  /* Who is hosting is why a student trusts the event, so the organiser row
     earns the height rather than stepping aside. Only the promo code, which
     has its own line on the detail page, stays out. */
  .ev-card__promo{display:none}
  .ev-card__org{gap:7px;margin-top:7px}
  .ev-card__org img,.ev-card__org span.ev-avatar{width:24px;height:24px;border-radius:8px;font-size:10px}
  .ev-card__orgtext b{font-size:11.5px}
  .ev-card__orgtext small{font-size:9.5px}
  .ev-card__org svg{width:11px;height:11px}
  .ev-card__facts{gap:4px;margin-top:6px}
  .ev-card__facts li{font-size:11px}
  .ev-card__facts li svg{width:13px;height:13px}
  .ev-card__capacity{margin-top:5px;padding-top:0}
  .ev-card__capacity-copy{font-size:10.5px}
  .ev-card__capacity-track{height:3px;margin-top:3px}
  .ev-card__capacity--open{font-size:10.5px}
  .ev-card__foot{margin-top:6px}
  .ev-card__foot .ev-btn{min-height:28px;font-size:11.5px;border-radius:9px}
  .ev-btn--cal{width:34px;padding:0;font-size:0}
  .ev-btn--cal svg{width:15px;height:15px}
  .ev-card__status{margin-top:6px;font-size:10px}
  .ev-grid:has(.ev-card){gap:10px}

  /* At 1.6-across a rail card is ~213px, which is enough to carry the same
     information as the list card: capacity, RSVP, save and share all stay.
     At the taller height the organiser and the location both fit too. */
  .ev-rail .ev-card{min-height:310px}
  .ev-rail .ev-card__panel{padding:9px 11px 10px}
  .ev-rail .ev-card__title{font-size:13.5px;line-height:1.18}
  .ev-rail .ev-card__title a{-webkit-line-clamp:2}
  .ev-rail .ev-card__facts{margin-top:5px}
  .ev-rail .ev-card__facts li{font-size:11px}
  .ev-rail .ev-card__quick .ev-btn{width:24px;height:24px;min-height:24px;border-radius:7px}
  .ev-rail .ev-card__quick .ev-btn svg{width:12px;height:12px}
  .ev-rail .ev-card__capacity{margin-top:6px}
  .ev-rail .ev-card__capacity-copy{font-size:10px}
  .ev-rail .ev-card__foot{margin-top:7px}
  .ev-rail .ev-card__foot .ev-btn{min-height:28px;font-size:11.5px}
  .ev-rail .ev-flag{min-height:17px;padding:0 7px;font-size:9px}
  /* A 209px card still cannot hold "Sun, Aug 30 · 1:00 AM-4:00 AM", so the
     short spelling stays. The clock icon and the inline live badge both fit
     again — the badge must NOT be absolutely positioned here, or it lands on
     top of the title. */
  .ev-rail .ev-when-long{display:none}
  .ev-rail .ev-when-short{display:inline}
}
.ev-card--feature .ev-card__org b{font-size:12px}
.ev-card--feature .ev-card__facts li{font-size:12.5px}

/* ---------- Calendar view ---------- */
.ev-calendar{margin-top:28px;padding:16px;border:1px solid var(--ev-line);border-radius:var(--ev-radius);background:rgba(255,255,255,.72);box-shadow:var(--ev-shadow)}
.ev-calendar__head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.ev-calendar__head h2{margin:0;font-size:20px;letter-spacing:-.045em}
.ev-calendar__grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.ev-calendar__dow{padding:4px 6px;color:var(--ev-soft);font-size:10px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}
.ev-calendar__day{
  display:flex;min-height:104px;flex-direction:column;gap:4px;padding:7px;border:1px solid var(--ev-line);
  border-radius:12px;background:#fffdfa
}
.ev-calendar__day.is-muted{background:rgba(255,255,255,.4);opacity:.55}
.ev-calendar__day.is-today{border-color:rgba(122,0,25,.35);box-shadow:0 0 0 2px rgba(255,204,51,.35)}
.ev-calendar__day>b{color:var(--ev-ink);font-size:12px;font-weight:900}
.ev-calendar__event{
  display:block;overflow:hidden;padding:4px 6px;border-radius:7px;background:var(--ev-gold-soft);
  color:#5a3a05;font-size:10.5px;font-weight:800;text-overflow:ellipsis;white-space:nowrap
}
.ev-calendar__event.is-food{background:var(--ev-green-soft);color:var(--ev-green)}
.ev-calendar__event:hover{background:var(--ev-gold)}
.ev-calendar__more{color:var(--ev-soft);font-size:10px;font-weight:800}

/* ---------- Empty / gated states ---------- */
.ev-empty{
  display:grid;min-height:240px;place-content:center;justify-items:center;padding:32px;
  border:1px dashed rgba(122,0,25,.22);border-radius:var(--ev-radius);background:rgba(255,255,255,.55);text-align:center
}
.ev-empty h2{margin:0;font-size:24px;letter-spacing:-.045em}
.ev-empty p{max-width:440px;margin:9px 0 18px;color:var(--ev-muted);font-size:14px;line-height:1.6}
.ev-locked{margin-top:32px;padding:24px;border:1px solid var(--ev-line);border-radius:var(--ev-radius);background:rgba(255,255,255,.72);text-align:center}
.ev-locked h2{margin:0;font-size:21px;letter-spacing:-.04em}
.ev-locked p{max-width:580px;margin:8px auto 16px;color:var(--ev-muted);font-size:13px;line-height:1.55}

/* ---------- Responsive ---------- */
@media(max-width:900px){
  .ev-shell{width:min(100% - 32px,780px);padding-top:18px}
  .ev-calendar__day{min-height:88px}
}
@media(max-width:620px){
  .ev-shell{width:min(100% - 28px,560px);padding:12px 0 96px}
  .ev-hero{padding:10px 0 16px}
  .ev-hero__eyebrow,.ev-hero__sub{display:none}
  .ev-hero h1{font-size:clamp(34px,11vw,46px)}
  .ev-toolbar{gap:8px}
  .ev-search input{min-height:44px;font-size:16px}
  .ev-searchbar__go{min-height:38px;padding:0 12px}
  .ev-filters__panel{right:-46px;width:min(420px,calc(100vw - 28px))}
  .ev-section{margin-top:32px}
  .ev-section__head>div:first-child{padding-left:11px}
  .ev-rail{gap:12px}
  .ev-grid{gap:12px}
  /* Short covers on phones: the accent stays, so the block is sized to clear
     the date tile — one title line, a smaller rule, tighter gaps. */
  .ev-card__fallback{padding:56px 13px 7px}
  .ev-card__fallback strong{font-size:15px;-webkit-line-clamp:1}
  .ev-card__fallback em{margin-bottom:2px;font-size:9px}
  .ev-card__fallback em::before{width:30px;height:2px;margin-bottom:5px}
  .ev-card:hover .ev-card__fallback em::before{width:38px}
  .ev-calendar{padding:11px}
  .ev-calendar__grid{gap:4px}
  .ev-calendar__day{min-height:64px;padding:5px;border-radius:9px}
  .ev-calendar__event{font-size:9px;padding:3px 4px}
  .ev-section__tools .ev-rail-nav{display:none}
}

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

/* Promo code line — visible on the card so students do not have to open the event. */
.ev-card__promo{
  display:flex;align-items:center;gap:6px;margin:10px 0 0;padding:6px 9px;border:1px dashed rgba(122,0,25,.28);
  border-radius:9px;background:#fff7e8;color:var(--ev-maroon);font-size:11.5px;font-weight:800
}
.ev-card__promo svg{width:14px;height:14px;flex:none;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8}
.ev-card__promo b{letter-spacing:.06em}

.ev-rail-nav[hidden]{display:none}

/* Calendar: day selection + the agenda that carries the detail on small screens. */
.ev-calendar__day{cursor:pointer}
.ev-calendar__day.is-selected{border-color:rgba(122,0,25,.4);background:#fff7e8}
.ev-calendar__day:focus-visible{outline:2px solid var(--ev-maroon);outline-offset:2px}
.ev-calendar__dots{display:none;gap:3px;margin-top:auto}
.ev-calendar__dot{display:block;width:6px;height:6px;border-radius:50%;background:var(--ev-gold)}
.ev-calendar__dot.is-food{background:var(--ev-green)}
.ev-calendar__agenda{margin-top:14px;padding-top:14px;border-top:1px solid var(--ev-line)}
.ev-calendar__agenda-head{margin:0 0 9px;color:var(--ev-soft);font-size:11px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}
.ev-calendar__agenda-empty{margin:0;color:var(--ev-muted);font-size:13px;font-weight:750}
.ev-calendar__agenda-row{
  display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--ev-line);
  border-radius:12px;background:#fffdfa;transition:border-color .16s ease,transform .16s ease
}
.ev-calendar__agenda-row+.ev-calendar__agenda-row{margin-top:7px}
.ev-calendar__agenda-row:hover{border-color:rgba(122,0,25,.24);transform:translateX(2px)}
.ev-calendar__agenda-row>b{flex:none;min-width:74px;color:var(--ev-maroon);font-size:12px;font-weight:900}
.ev-calendar__agenda-row>span{display:grid;min-width:0;gap:2px}
.ev-calendar__agenda-row strong{overflow:hidden;font-size:14px;letter-spacing:-.02em;text-overflow:ellipsis;white-space:nowrap}
.ev-calendar__agenda-row small{color:var(--ev-muted);font-size:11.5px;font-weight:750}
.ev-calendar__agenda-row em{margin-left:auto;flex:none;font-style:normal}
@media(max-width:620px){
  .ev-calendar__day{min-height:52px;justify-content:flex-start}
  .ev-calendar__event,.ev-calendar__more{display:none}
  .ev-calendar__dots{display:flex}
  .ev-calendar__agenda-row>b{min-width:62px;font-size:11.5px}
}

/* Filters popover header: a visible close, so the panel never feels stuck open. */
.ev-filters__bar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-4px 0 12px}
.ev-filters__bar strong{font-size:13px;letter-spacing:-.02em}
.ev-filters__close{
  display:grid;width:28px;height:28px;place-items:center;border:1px solid var(--ev-line);border-radius:9px;
  background:#fff;color:var(--ev-muted);font-size:18px;line-height:1;cursor:pointer;
  transition:border-color .16s ease,color .16s ease
}
.ev-filters__close:hover,.ev-filters__close:focus-visible{border-color:rgba(122,0,25,.28);color:var(--ev-maroon);outline:none}
