/* e-panigiria — Layout A «Η Αφίσα» */
:root{
  /* warm near-black — chosen so #FE0000 clears 4.5:1 contrast on it */
  --night:#131110;
  --night2:#1C1917;
  --night3:#262220;
  --line:#332D29;
  --line2:#453D38;

  --red:#FE0000;        /* your accent, unchanged */
  --red-lift:#FF5A4A;   /* hover / focus only */
  --ember:rgba(254,0,0,.14);

  /* used once, on .featured — a second accent would fight --red everywhere
     else, so it's scoped to the one card that's meant to look singled-out */
  --gold:#D4AF37;
  --gold-soft:rgba(212,175,55,.4);

  --paper:#F2EDE6;
  --dim:#9C938B;
  --dim2:#6F6862;

  --serif:'Alegreya',Georgia,serif;
  --sc:'Alegreya SC',Georgia,serif;
  --sans:'Commissioner',system-ui,sans-serif;
  --w:1180px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
/* overflow-x:clip (not hidden) contains the 100vw ad bleeds without breaking position:sticky */
body{margin:0;background:var(--night);color:var(--paper);font-family:var(--sans);
  -webkit-font-smoothing:antialiased;overflow-x:clip}
img{display:block;max-width:100%;height:auto}
a{text-decoration:none;color:inherit}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}
:focus-visible{outline:2px solid var(--red-lift);outline-offset:3px}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

.wrap{max-width:var(--w);margin:0 auto;padding:0 22px}



/* -------- header -------- */
/* .stickytop (a direct <body> child — see header.php) is the ONE sticky
   element, always, never .top itself: .top's containing block is now
   .stickytop (its parent), so if .top carried position:sticky it would
   only get .stickytop's own short height as "room" to stick within
   instead of the whole page — the exact bug .flyerbox had before
   .ev{align-items:stretch}. .stickytop has no such problem since IT is a
   direct <body> child, giving it the full page's height to work with. */
.top{position:static;z-index:50;background:rgba(19,17,16,.94);
  backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
/* .topin's OWN top/bottom padding applied to every child equally, no
   matter what the child's own box/padding/margin did — a child can't
   "opt out" of its container's padding while still centered normally in
   flow (confirmed: symmetric margin has provably ZERO effect on a
   center-aligned flex item's rendered position, since the free-space
   redistribution exactly cancels it — padding-on-the-child likewise still
   sits inside the container's own inset, just adds more box around it).
   The only way to actually give the logo a smaller edge-gap than nav/.r
   is to shrink .topin's OWN padding (4px, benefiting everyone) and give
   the logo an EXPLICIT height that swallows the difference (53px = old
   total bar height 61 minus 2*4), so nav/.r's rendered position — which
   depends only on (total bar height, their own unchanged size) — comes
   out identical to before with no changes needed on them at all. */
.topin{max-width:var(--w);margin:0 auto;padding:4px 22px;display:flex;align-items:center;gap:28px}
.logo{font-family:var(--serif);font-weight:800;font-size:32px;letter-spacing:-.025em;color:var(--paper);
  height:53px;box-sizing:border-box;display:flex;align-items:center}
.logo span{color:var(--red)}
/* items_wrap on the wp_nav_menu() call is '%3$s' — no <ul>, bare <li>s
   directly inside <nav class="nav"> — so a stale ".nav ul{list-style:none}"
   rule never matched anything and the browser's default list bullet ("•")
   rendered before every item, including the first (right after the logo).
   list-style:none on the <li> itself removes that; the ::before below
   re-adds a dot ONLY between items (never before the first), with its own
   margins for spacing (replacing the old .nav gap) and flex+align-items on
   each <li> so the dot sits vertically centered with the link text instead
   of at the default list-marker baseline. */
.nav{display:flex;align-items:center;font-size:14.5px;color:#BEB4AC;font-weight:500}
.nav li{list-style:none;display:flex;align-items:center}
.nav li:not(:first-child)::before{content:'•';color:var(--dim2);margin:0 11px}
.nav a{padding-bottom:2px;border-bottom:2px solid transparent}
.nav a:hover{color:var(--paper);border-bottom-color:var(--red)}
/* wp_nav_menu() ήδη προσθέτει αυτές τις κλάσεις σωστά ανά τρέχουσα σελίδα/
   ταξινομία — απλώς δεν υπήρχε καθόλου CSS να τις δείξει οπτικά. Οι
   περιφέρειες περνούν current-(menu|category)-ancestor αντί για
   current-menu-item όταν βλέπεις ένα παιδί-κατηγορία (π.χ. «Δυτική
   Ελλάδα»), όχι την ίδια την «Περιφέρειες» — γι' αυτό χρειάζονται και τα δύο. */
.nav .current-menu-item > a,
.nav .current_page_item > a,
.nav .current-menu-ancestor > a,
.nav .current-menu-parent > a,
.nav .current-category-ancestor > a,
.nav .current-category-parent > a{color:var(--paper);border-bottom-color:var(--red)}
.topin .r{margin-left:auto;display:flex;gap:10px;align-items:center}
.social-icons{display:flex;gap:8px;align-items:center}
.social-icons a{width:30px;height:30px;border-radius:7px;border:1px solid var(--line2);
  display:flex;align-items:center;justify-content:center;color:#A0968E;transition:.15s}
.social-icons a:hover{border-color:var(--red);color:var(--paper)}
.social-icons .svg-i{width:15px;height:15px}
.foot .social-icons{margin-top:14px}
.btn-red{background:var(--red);color:#fff;font-weight:600;font-size:13.5px;padding:9px 17px;border-radius:6px}
.btn-red:hover{background:var(--red-lift)}
.btn-ghost{border:1px solid var(--line2);color:#CFC5BC;font-size:13.5px;padding:8px 15px;border-radius:6px}
.btn-ghost:hover{border-color:var(--red);color:var(--paper)}

/* -------- hero -------- */
.hero{position:relative;padding:54px 0 30px;overflow:hidden}
.hero::before{content:"";position:absolute;inset:-45% 0 auto 0;height:440px;pointer-events:none;
  background:radial-gradient(ellipse 55% 100% at 50% 0%,var(--ember),transparent 68%)}
.lights{position:absolute;top:0;left:-2%;width:104%;height:56px;pointer-events:none}
.hero h1{position:relative;font-family:var(--serif);font-weight:800;
  font-size:clamp(38px,6vw,66px);line-height:1.02;letter-spacing:-.03em;margin:0 0 15px;max-width:15ch}
.hero h1 em{font-style:italic;color:var(--red)}
.hero .lede{position:relative;color:#ADA39B;font-size:17px;line-height:1.55;max-width:50ch;margin:0}

/* finder — signature */
.finder{position:relative;margin:30px 0 0;background:var(--night2);border:1px solid var(--line2);
  border-radius:12px;padding:7px;display:flex;gap:7px;flex-wrap:wrap;
  box-shadow:0 24px 54px -24px #000}
.finder .seg{display:flex;background:#100E0D;border-radius:9px;padding:4px;gap:2px;flex:1;min-width:290px}
.finder .seg button{flex:1;padding:11px 8px;border-radius:6px;font-size:14px;font-weight:600;
  color:#A0968E;white-space:nowrap;transition:.14s}
.finder .seg button[aria-pressed="true"]{background:var(--red);color:#fff}
.finder .pick{display:flex;align-items:center;gap:9px;padding:11px 15px;background:#100E0D;
  border-radius:9px;font-size:14px;color:#D5CBC2;min-width:196px;font-weight:500}
.finder .pick small{display:block;font-size:10px;letter-spacing:.1em;
  color:var(--dim2);font-weight:600;margin-bottom:1px}
.finder .go{background:var(--red);color:#fff;font-weight:600;padding:11px 28px;border-radius:9px;font-size:15px}
.finder .go:hover{background:var(--red-lift)}
.count{margin:14px 2px 0;font-size:13.5px;color:var(--dim)}
.count b{color:var(--paper);font-weight:600}

/* -------- section heads: echoes the site's heading + heavy rule -------- */
.sec{padding:50px 0 6px}
.sechead{margin-bottom:24px}
.sechead .row1{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap}
.sechead h2{font-family:var(--serif);font-size:32px;font-weight:800;margin:0;letter-spacing:-.02em}
.sechead .sub{font-family:var(--sc);font-size:12.5px;letter-spacing:.11em;color:var(--dim)}
.sechead .more{margin-left:auto;font-size:13.5px;color:var(--dim)}
.sechead .more:hover{color:var(--red-lift)}
.sechead .rule{display:block;width:74px;height:5px;background:var(--red);margin-top:11px;border-radius:1px}

/* -------- poster wall -------- */
.wall{display:grid;grid-template-columns:repeat(auto-fill,minmax(214px,1fr));gap:24px}
/* κλειδωμένος αριθμός στηλών (π.χ. «Την ίδια μέρα, κοντά» στη σελίδα εκδήλωσης) —
   μόνο πάνω από το mobile breakpoint, ώστε η @media(max-width:900px) παρακάτω να
   συνεχίσει να κερδίζει στο κινητό παρά την υψηλότερη ειδικότητα του .wall-3. */
@media(min-width:901px){
  .wall-3{grid-template-columns:repeat(3,1fr)}
}
/* position:relative is required — .meta below is absolute and must anchor to the card */
.poster{position:relative;display:block;transition:transform .22s cubic-bezier(.2,.7,.3,1)}
.poster:hover{transform:translateY(-5px)}
.poster .shot{position:relative;aspect-ratio:3/4;border-radius:3px;overflow:hidden;
  background:linear-gradient(150deg,#2E2724,#1B1715);border:1px solid rgba(255,255,255,.07);
  box-shadow:0 14px 30px -13px rgba(0,0,0,.8)}
.poster .shot img{width:100%;height:100%;object-fit:cover;object-position:top center}
.poster .shot::after{content:"";position:absolute;inset:0;
  background:linear-gradient(to top,rgba(11,9,8,.92) 0%,rgba(11,9,8,.2) 44%,transparent 68%)}
.poster:hover .shot{border-color:rgba(254,0,0,.5)}
/* Featured events had NO distinct treatment in the loop grid before this —
   single.php (.flyer.is-featured), the χάρτης (.mrow-star/.mapstage .pin.is-featured)
   and the homepage's own featured section all already use this exact gold
   language; the poster wall was the one place a featured event looked
   identical to every other card. Same gold border+top bar as .flyer.is-featured.
   .poster-featured-badge lives ON THE IMAGE (.shot), not inside .meta — the
   card_show_title/nomos/performers Customizer toggles all default to OFF, so
   anything nested inside that optional text block would be invisible on an
   un-customized site; this badge is always there regardless of those toggles,
   same as the border/top-bar. Bottom-right — top-left/top-right are already
   .stamp/.kind, and .dist (the one thing that can appear at the bottom of
   .meta) is left-aligned, so the two never collide. */
.poster.is-featured .shot{border-color:var(--gold-soft);
  box-shadow:0 14px 30px -13px rgba(0,0,0,.8),0 18px 40px -28px rgba(212,175,55,.55)}
.poster.is-featured .shot::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;z-index:3;
  background:linear-gradient(90deg,transparent,var(--gold) 15%,#F1E3AE 50%,var(--gold) 85%,transparent)}
.poster.is-featured:hover .shot{border-color:var(--gold)}
.poster-featured-badge{position:absolute;right:10px;bottom:10px;z-index:2;width:26px;height:26px;
  border-radius:50%;background:rgba(11,9,8,.78);border:1px solid var(--gold-soft);
  display:flex;align-items:center;justify-content:center;backdrop-filter:blur(3px);
  box-shadow:0 4px 11px rgba(0,0,0,.5)}
.poster-featured-badge svg{width:12px;height:12px;fill:var(--gold);flex:none}
.poster.is-featured:hover .poster-featured-badge{border-color:var(--gold)}
.stamp{position:absolute;top:10px;left:10px;z-index:2;background:var(--paper);color:#17130F;
  border-radius:2px;text-align:center;padding:5px 9px 6px;line-height:1;box-shadow:0 4px 11px rgba(0,0,0,.5)}
.stamp .d{font-family:var(--serif);font-weight:800;font-size:22px;display:block}
.stamp .m{font-family:var(--sc);font-size:9.5px;letter-spacing:.11em;display:block;margin-top:3px;color:#6F6862}
.stamp.today{background:var(--red);color:#fff}
.stamp.today .m{color:rgba(255,255,255,.82)}
.kind{position:absolute;top:11px;right:10px;z-index:2;font-family:var(--sc);font-size:9.5px;
  letter-spacing:.11em;background:rgba(11,9,8,.74);border:1px solid rgba(254,0,0,.55);
  color:var(--red-lift);padding:4px 9px;border-radius:2px;backdrop-filter:blur(3px);
  max-width:62%;text-align:right;line-height:1.3}
.poster:hover .kind{background:var(--red);border-color:var(--red);color:#fff}
.poster .meta{position:absolute;left:13px;right:13px;bottom:12px;z-index:2}
.poster .region{font-family:var(--sc);font-size:10px;letter-spacing:.12em;color:var(--red-lift);
  display:block;margin-bottom:5px}
.poster h3{font-family:var(--serif);font-size:17.5px;line-height:1.18;margin:0;font-weight:700;color:#fff}
/* label above name, not "Παίζει Χ" — a bare surname doesn't inflect and an
   ensemble name doesn't take a singular verb; see .artist in the facts box */
.poster .plays{margin-top:7px;font-size:12.5px;color:#BBB1A9}
.poster .plays .pl{display:block;font-family:var(--sc);font-size:9px;letter-spacing:.11em;
  color:var(--dim2);margin-bottom:2px}
.poster .plays b{font-weight:600;color:#fff}
.poster .plays .more-n{color:var(--dim2);margin-left:2px}
.poster .dist{margin-top:5px;font-size:11.5px;color:var(--dim2)}

/* -------- musicians -------- */
.bands{display:flex;gap:9px;flex-wrap:wrap}
.chipband{border:1px solid var(--line2);border-radius:999px;padding:8px 16px;font-size:13.5px;
  color:#C0B6AE;transition:.15s}
.chipband:hover{border-color:var(--red);color:var(--paper)}
.chipband b{color:#fff;font-weight:600}
.chipband s{text-decoration:none;color:var(--dim2)}

.perf-search{margin:22px 0 0}
.perf-search input{width:100%;max-width:420px;background:var(--night2);border:1px solid var(--line2);
  border-radius:8px;padding:11px 15px;color:var(--paper);font:inherit;font-size:14.5px}
.perf-search input:focus{border-color:var(--red);outline:none}
.perf-search input::placeholder{color:#5C5550}

/* -------- map teaser -------- */
.mapteaser{margin:54px 0 0;border-radius:14px;overflow:hidden;border:1px solid var(--line2);
  background:var(--night2);display:grid;grid-template-columns:1fr 1fr;min-height:270px}
/* Rectangle ad (300×250) as a third, RIGHTMOST column (text | map | ad — not
   between them), only when epan_ad('rectangle') will actually render
   something — see front-page.php's $rect_will_render check — so the grid
   never reserves a track for a column with nothing in it. Explicit columns,
   no wrapping mechanism involved, so this never breaks into a second row. */
.mapteaser.has-rect{grid-template-columns:1fr 1fr 300px}
.mapteaser .txt{padding:38px}
.mapteaser h2{font-family:var(--serif);font-size:30px;margin:0 0 10px;font-weight:800;letter-spacing:-.02em}
.mapteaser p{color:var(--dim);font-size:15px;line-height:1.6;margin:0 0 22px;max-width:36ch}
.mapteaser .fake{position:relative;background:#0E0C0B;overflow:hidden}
.mapteaser .fake .blob{position:absolute;width:44px;height:44px;border-radius:50%;
  background:radial-gradient(circle,rgba(254,0,0,.55),rgba(254,0,0,.05) 70%)}
/* Living inside the already-bordered mapteaser panel — drop .adrect's own
   card chrome (border/background/margin) so it doesn't look like a box
   nested in a box, just center its content in the stretched grid cell. */
.mapteaser .adrect{max-width:none;margin:0;border:0;border-radius:0;background:transparent;
  display:flex;flex-direction:column;justify-content:center;padding:20px;
  border-left:1px solid var(--line2)}

/* -------- footer -------- */
/* the site's own "advertise with us" strip — NOT an EPAN_Ads slot (see
   footer.php's comment / CONTEXT.md «Χορηγική θέση»). Full-bleed background
   via margin:0 -22px, the same proven technique as .adshelf .bleed — see
   that rule for why not vw/vmax/box-shadow. */
.promo-strip{background:var(--night2);border-top:1px solid var(--line2);
  border-bottom:1px solid var(--line2);margin:40px 0 0}
.promo-strip .bleed{margin:0 -22px;padding:18px 22px;display:flex;align-items:center;
  justify-content:center;gap:18px;flex-wrap:wrap;text-align:center}
.promo-strip span{font-size:14.5px;color:var(--dim)}
.promo-strip span b{color:var(--paper)}
.promo-strip .btn-red{flex:none;padding:10px 18px;white-space:nowrap}

.foot{margin-top:62px;border-top:1px solid var(--line);padding:38px 0 48px;color:var(--dim);font-size:13.5px}
.foot .cols{display:grid;grid-template-columns:1.7fr 1fr 1fr;gap:34px}
.foot h4{font-family:var(--sc);font-size:11.5px;letter-spacing:.11em;color:#CFC5BC;margin:0 0 12px}
.foot ul{padding:0;margin:0}.foot li{list-style:none;margin-bottom:7px}
.foot a:hover{color:var(--red-lift)}
/* legal small-print — separate from ΠΕΡΙΗΓΗΣΗ (site navigation): Terms/
   Privacy/Cookies aren't navigation, they're the fine print next to the
   copyright line, same convention as most sites. */
.legalrow{margin-top:28px;padding-top:20px;border-top:1px solid var(--line);
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 24px}
.legalrow p{margin:0;font-size:12.5px;color:var(--dim2);line-height:1.7}
/* μνεία κατασκευής — ένα σκαλί πιο σβηστή από τα πνευματικά δικαιώματα:
   είναι υπογραφή, όχι ανακοίνωση. */
.legalrow .credit{color:#5C5550}
.legalrow .credit a{color:var(--dim2);border-bottom:1px solid var(--line2)}
.legalrow .credit a:hover{color:var(--red-lift);border-bottom-color:var(--red-lift)}
.legalrow ul{display:flex;flex-wrap:wrap;gap:4px 18px}
.legalrow li{margin:0;font-size:12.5px}
.legalrow a{color:var(--dim2)}
.legalrow a:hover{color:var(--red-lift)}

/* ============ EVENT DETAIL ============ */
/* min-width:0 on both columns — grid items default to min-width:auto (their
   content's min-content size), so the content column was growing past its
   1fr track to fit .wxrow's wide, unwrapped row of 8 weather slots instead
   of clipping/scrolling inside it as intended, dragging the whole page
   wider on mobile. */
/* align-items:stretch (the grid default — kept explicit here since it's
   load-bearing, not decorative) is what makes .flyerbox's own position:sticky
   work at all: with align-items:start the left grid item shrinks to exactly
   .flyerbox's own height, leaving sticky ~zero room to move within before
   its container ends, so it silently scrolled away 1:1 with the page
   instead of sticking. Stretching the (invisible, unstyled) grid item to
   match the taller right column gives .flyerbox the room it needs; nothing
   renders differently since only that empty wrapper grows, not .flyerbox
   itself. */
/* Named areas (not DOM order) control desktop-vs-mobile layout: .evposter
   spans both rows of its column on desktop, same width column as before —
   .evtitle/.evbody just split what used to be one tall content column into
   two areas so mobile can reorder them around the poster without touching
   markup. row-gap:0 — .evtitle and .evbody butt up against each other
   exactly like the single column they used to be; the visual space between
   h1rule and .facts/.past-flag still comes from THEIR OWN margin, unchanged. */
.ev{display:grid;grid-template-columns:400px 1fr;grid-template-areas:"poster title" "poster body";gap:0 46px;padding:34px 0 0;align-items:stretch}
.evposter{grid-area:poster}
.evtitle{grid-area:title}
.evbody{grid-area:body}
.ev>div{min-width:0}
/* --stickytop-h: το πραγματικό ύψος του sticky header (μενού, +κορδέλα
   όταν είναι κολλητή, +admin bar όταν είσαι συνδεδεμένος) — μετριέται στο
   theme.js, όχι hardcoded εδώ, γιατί αλλάζει (toggle της κορδέλας, ύψος
   εικόνας χορηγού, admin bar). 34px = το ίδιο padding-top που ήδη έχει το
   .ev. Fallback 62px = μόνο το μενού, χωρίς κορδέλα/admin bar — καλύτερη
   εικασία πριν προλάβει να τρέξει το JS. */
.flyerbox{position:sticky;top:calc(var(--stickytop-h, 62px) + 34px)}
.flyer{border-radius:4px;overflow:hidden;border:1px solid rgba(255,255,255,.09);
  box-shadow:0 28px 64px -26px #000;display:block;position:relative}
.flyer img{width:100%}
.flyer .mag{position:absolute;right:10px;bottom:10px;width:34px;height:34px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;background:rgba(11,9,8,.8);
  border:1px solid rgba(255,255,255,.2);color:#E6DCD3;backdrop-filter:blur(4px);cursor:pointer}
.flyer .mag:hover{border-color:var(--red)}
.flyer .mag .svg-i{width:16px;height:16px}
/* same gold treatment as .featured on the homepage, applied to the single
   event page's own equivalent "card" — the poster itself — plus a small
   badge above the title, so a featured event reads as such wherever it's
   viewed, not just from the homepage. */
.flyer.is-featured{border-color:var(--gold-soft);
  box-shadow:0 28px 64px -26px #000,0 22px 50px -34px rgba(212,175,55,.5)}
.flyer.is-featured::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;z-index:3;
  background:linear-gradient(90deg,transparent,var(--gold) 15%,#F1E3AE 50%,var(--gold) 85%,transparent)}
/* Αφισολόγιο slider — βλ. single.php .evposter. Το .posterslides .flyer{display:none}
   παρακάτω ΔΕΝ είναι scoped στο .has-multi — ισχύει πάντα, ακόμα και με μία
   μοναδική αφίσα. Αυτό που κρατάει το μονο-αφίσας σενάριο σωστό είναι ότι το
   EPAN_Posters::slide_index_for_day() εγγυάται active_index πάντα έγκυρο —
   το slide 0 παίρνει πάντα .is-active, άρα πάντα display:block, ίδιο
   αποτέλεσμα με πριν. */
.posterslider{position:relative}
/* Λεζάντα ημερομηνίας — πλέον στατική μπάρα πάνω από την αφίσα (όχι πια
   overlay πάνω στην εικόνα), εξ ου και πλάτος 100% χωρίς δικό της
   position:absolute· .flyerbox δεν έχει max-width στο desktop, οπότε ένα
   απλό block div ήδη απλώνεται στο πλήρες πλάτος της αφίσας. Το κείμενο
   περνάει από epan_strip_gr_accent() (single.php) πριν φτάσει εδώ — η
   γραμματοσειρά small-caps (var(--sc)) δείχνει το κείμενο σαν κεφαλαίο,
   ίδιο μοτίβο με το .past-flag. */
.poster-date{background:rgba(11,9,8,.85);border:1px solid rgba(255,255,255,.14);
  color:var(--paper);font-family:var(--sc);font-size:11px;letter-spacing:.08em;
  padding:7px 12px;border-radius:4px;text-align:center;margin-bottom:8px}
.posterslides{position:relative}
.posterslides .flyer{display:none}
.posterslides .flyer.is-active{display:block}
.posternav{position:absolute;top:50%;transform:translateY(-50%);width:34px;height:34px;
  border-radius:50%;background:rgba(11,9,8,.72);border:1px solid rgba(255,255,255,.2);
  color:var(--paper);display:flex;align-items:center;justify-content:center;
  z-index:4;cursor:pointer}
/* SVG αντί για χαρακτήρα ‹/› — ίδιο μοτίβο με το .mag· ένα glyph χαρακτήρα
   δεν κεντράρεται συμμετρικά στο δικό του bounding box σε κάθε γραμματοσειρά,
   οπότε ακόμα και με άψογο flex centering στο ίδιο το κουμπί, φαινόταν
   μετατοπισμένο μέσα στον κύκλο. */
.posternav .svg-i{width:20px;height:20px}
.posternav:hover{background:rgba(11,9,8,.9);border-color:var(--red)}
.posternav:disabled{opacity:.32;cursor:not-allowed;pointer-events:none}
.posternav.prev{left:10px}
.posternav.next{right:10px}
.ev-featured-badge{display:inline-flex;align-items:center;gap:5px;font-family:var(--sc);
  font-size:9.5px;letter-spacing:.16em;color:var(--gold);border:1px solid var(--gold-soft);
  border-radius:3px;padding:4px 9px;margin:0 0 12px}
.ev-featured-badge svg{width:10px;height:10px;fill:var(--gold);flex:none}
.sourcenote{margin-top:12px;font-size:12.5px;color:var(--dim2);line-height:1.5;
  border-left:2px solid var(--red);padding-left:11px}
.lightbox{position:fixed;inset:0;z-index:1000;background:rgba(11,9,8,.92);
  display:flex;align-items:center;justify-content:center;padding:40px;cursor:zoom-out}
/* .lightbox-figure τυλίγει πάντα την εικόνα, με μια λεζάντα ημερομηνίας +
   κουμπί κλεισίματος από πάνω σε ΚΑΘΕ lightbox αφίσας (όχι μόνο τις
   πολυήμερες πια) — εξ ου και το σταθερό άνω όριο πλάτους, ώστε η λεζάντα να
   έχει ΣΤΑΘΕΡΟ πλάτος να «κολλήσει» πάνω· χωρίς αυτό το όριο, το πλάτος του
   flex column θα ακολουθούσε την εικόνα κάθε φορά. */
.lightbox-figure{position:relative;display:flex;flex-direction:column;
  max-height:100%;max-width:min(92vw,640px);cursor:default}
/* Το κλείσιμο μπαίνει ΔΙΠΛΑ στη λεζάντα (ίδια γραμμή, βλ. theme.js), όχι
   σταθερό στη γωνία του viewport — αλλιώς σε στενό viewport επικαλύπτεται
   με μια πλατιά λεζάντα ημερομηνίας. align-items:stretch τα κάνει ίσου
   ύψους αυτόματα, χωρίς hardcoded ύψος και στα δύο. */
.lightbox-caption-row{margin-bottom:8px;display:flex;align-items:stretch;gap:8px}
.lightbox-caption-row .poster-date{flex:1 1 auto;margin-bottom:0}
/* Ίδιο ορθογώνιο στυλ με το πάνελ ημερομηνίας (ίδιο bg/border/radius) —
   κουτί δίπλα στο πάνελ, όχι μια μεμονωμένη στρογγυλή σφαίρα σταθερή στη
   γωνία (αυτό ίσχυε μόνο όσο κάποιο lightbox δεν είχε λεζάντα καθόλου). */
.lightbox-close{flex:none;width:auto;height:auto;padding:0 12px;
  background:rgba(11,9,8,.85);border:1px solid rgba(255,255,255,.14);
  border-radius:4px;color:#E6DCD3;font-size:14px;line-height:1;cursor:pointer}
.lightbox-close:hover{border-color:var(--red)}
.lightbox-figure img{max-width:100%;max-height:80vh;width:auto;border-radius:4px;
  box-shadow:0 28px 64px -26px #000;cursor:default;display:block;margin:0 auto}
/* Ίδιο posternav με το κύριο slider, μόνο τοποθετημένο ως προς το .lightbox
   (fixed, ολόκληρο viewport) αντί για το .posterslider. */
.lightbox .posternav.prev{left:18px}
.lightbox .posternav.next{right:18px}
.crumb{font-size:12.5px;color:var(--dim2);margin-bottom:14px}
.crumb a:hover{color:var(--red-lift)}
.kicker{font-family:var(--sc);font-size:12px;letter-spacing:.13em;color:var(--red-lift);margin-bottom:11px}
.ev h1{font-family:var(--serif);font-size:clamp(30px,4.4vw,46px);line-height:1.05;
  margin:0 0 6px;letter-spacing:-.028em;font-weight:800}
.ev .h1rule{width:74px;height:5px;background:var(--red);border-radius:1px;margin:14px 0 0}
.ev .h1rule.is-gold{background:var(--gold)}

.facts{margin:26px 0 0;border:1px solid var(--line2);border-radius:12px;overflow:hidden}
.factrow{display:grid;grid-template-columns:126px 1fr;gap:16px;padding:16px 18px;
  border-bottom:1px solid var(--line);font-size:15.5px}
.factrow:last-child{border-bottom:0}
.factrow .k{font-family:var(--sc);font-size:11px;letter-spacing:.11em;color:var(--dim2);padding-top:4px}
.factrow .v b{font-weight:600}
.factrow .v small{display:block;color:var(--dim);font-size:13px;margin-top:4px;line-height:1.45}
.factrow .v a{border-bottom:1px solid var(--line2)}
.factrow .v a:hover{border-bottom-color:var(--red)}

/* Καλλιτέχνες: a bare surname can't be inflected and an ensemble name can't
   follow a singular verb, so a performer is always a name under a label,
   never the object of a sentence ("Παίζει ο Χ"). Pills rather than a
   comma-joined sentence — wraps cleanly whether there's one name or eleven. */
.artists{display:flex;flex-wrap:wrap;gap:7px;margin-top:2px}
.artist{font-weight:600;font-size:13.5px;color:#fff;background:var(--night3);
  border:1px solid var(--line2);border-radius:999px;padding:5px 13px}
.artist:hover{border-color:var(--red)}

.actions{display:flex;gap:9px;flex-wrap:wrap;margin:22px 0 0}
.actions a,.actions button{padding:12px 20px;font-size:14.5px;line-height:1.2}
.add-cal{position:relative;display:flex}
.add-cal-trigger{display:inline-flex;align-items:center;gap:7px;cursor:pointer;font:inherit}
.add-cal-caret{width:13px;height:13px;stroke:currentColor;stroke-width:2.4;fill:none;
  stroke-linecap:round;stroke-linejoin:round;transition:transform .15s ease}
.add-cal-trigger[aria-expanded="true"] .add-cal-caret{transform:rotate(180deg)}
.add-cal-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:10;min-width:190px;
  background:var(--night3);border:1px solid var(--line2);border-radius:8px;padding:6px;
  display:flex;flex-direction:column;gap:2px;box-shadow:0 10px 30px rgba(0,0,0,.35);
  animation:add-cal-in .12s ease}
.add-cal-menu[hidden]{display:none}
.add-cal-menu a{padding:9px 11px;font-size:14px;color:var(--paper);border-radius:5px}
.add-cal-menu a:hover,.add-cal-menu a:focus{background:var(--night2);color:var(--red-lift);outline:none}
@keyframes add-cal-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}

/* Πριν ήταν απλό ανεπένδυτο κείμενο (μόνο the_content() σε ένα γυμνό div)
   — εύκολα προσπερνιόταν ανάμεσα στα κουμπιά ενεργειών και τα υπόλοιπα
   στυλισμένα panels (mapcard/wxcard). Ίδια οπτική γλώσσα με αυτά: πλαίσιο,
   επικεφαλίδα με εικονίδιο. */
.evtext{margin-top:24px;border:1px solid var(--line2);border-radius:12px;overflow:hidden}
.evtext .evtexthead{padding:14px 18px;display:flex;align-items:center;gap:9px;
  background:var(--night2);border-bottom:1px solid var(--line2)}
.evtext .evtexthead svg{flex:none;color:var(--red-lift)}
.evtext .evtexthead b{color:var(--paper);font-size:14.5px;font-weight:600}
.evtext .evtextbody{padding:18px 20px;color:var(--dim);font-size:15px;line-height:1.68}
.evtext .evtextbody p{margin:0 0 14px}
.evtext .evtextbody p:last-child{margin-bottom:0}
/* headings/lists/links — event descriptions (the original use of .evtextbody)
   are always plain paragraphs, but static pages (page.php: Terms/Privacy/
   Cookies) reuse this same card for real structured legal text. */
.evtext .evtextbody h1,.evtext .evtextbody h2,.evtext .evtextbody h3{
  font-family:var(--serif);color:var(--paper);font-weight:700;font-size:21px;
  margin:28px 0 12px;letter-spacing:-.01em}
.evtext .evtextbody h1:first-child,.evtext .evtextbody h2:first-child,.evtext .evtextbody h3:first-child{margin-top:0}
.evtext .evtextbody h4{color:var(--paper);font-weight:700;font-size:16px;margin:22px 0 10px}
.evtext .evtextbody ul,.evtext .evtextbody ol{margin:0 0 16px;padding-left:22px}
.evtext .evtextbody li{margin-bottom:8px}
.evtext .evtextbody a{color:var(--red-lift);border-bottom:1px solid var(--line2)}
.evtext .evtextbody a:hover{border-bottom-color:var(--red-lift)}
.evtext .evtextbody strong{color:var(--paper)}

.mapcard{margin-top:30px;border:1px solid var(--line2);border-radius:12px;overflow:hidden}
.mapcard .maphead{padding:14px 18px;display:flex;align-items:center;gap:9px;
  background:var(--night2);border-bottom:1px solid var(--line2)}
.mapcard .maphead svg{flex:none;color:var(--red-lift)}
.mapcard .maphead b{color:var(--paper);font-size:14.5px;font-weight:600}
/* z-index:0 is load-bearing, not cosmetic — see the .mapstage rule for why.
   Without it Leaflet's panes paint over the anchor ad and the sticky header. */
.mapcard .canvas{height:230px;background:#0E0C0B;position:relative;z-index:0}
.mapcard .foot2{padding:12px 16px;background:var(--night2);font-size:12.5px;color:var(--dim);
  display:flex;gap:10px;align-items:center;border-top:1px solid var(--line)}
.mapcard .foot2 svg{flex:none}

/* ================= WEATHER (single.php, template-parts/part-weather.php) ================= */
.wxcard{margin-top:24px;border:1px solid var(--line2);border-radius:12px;overflow:hidden;background:var(--night2)}
.wxcard .wxhead{padding:14px 18px;display:flex;align-items:center;gap:9px;border-bottom:1px solid var(--line2)}
.wxcard .wxhead svg{flex:none;color:var(--red-lift)}
.wxcard .wxhead b{color:var(--paper);font-size:14.5px;font-weight:600;margin-right:auto}
.wxrow{display:grid;grid-template-columns:repeat(8,1fr)}
.wxrow+.wxrow{border-top:1px solid var(--line2)}
.wxempty{padding:28px 24px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px}
.wxempty svg{width:26px;height:26px;color:var(--dim2);stroke:currentColor;fill:none;
  stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.wxempty p{margin:0;max-width:38ch;font-size:13px;line-height:1.55;color:var(--dim)}
.wxempty-em{font-style:italic}
.wxslot{padding:16px 8px;text-align:center;border-left:1px solid var(--line);position:relative;display:flex;flex-direction:column}
.wxslot:first-child{border-left:0}
.wxslot .date{display:block;font-family:var(--sc);font-size:9px;letter-spacing:.08em;color:var(--dim2);margin-bottom:3px}
.wxslot .time{display:block;font-size:12.5px;color:var(--dim);font-weight:600;margin-bottom:6px}
.wxslot .wicon{width:28px;height:28px;margin:0 auto 6px;color:#C0B6AE;stroke:currentColor;fill:none;
  stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.wxslot .temp{display:block;font-family:var(--serif);font-size:20px;font-weight:800;color:var(--paper)}
.wxslot .cond{display:block;font-size:10.5px;color:var(--dim2);margin:2px 0 9px;line-height:1.3}
.wxslot .meta{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--dim);margin-top:auto}
.wxslot .meta span{display:flex;align-items:center;justify-content:center;gap:4px}
.wxslot .meta svg{width:12px;height:12px;flex:none;stroke:currentColor;fill:none;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.wxcard .wxfoot{padding:12px 16px;background:var(--night2);font-size:12.5px;color:var(--dim);
  display:flex;gap:6px;align-items:center;border-top:1px solid var(--line)}
.wxcard .wxfoot svg{flex:none}
.wxcard .wxfoot a{color:var(--dim);border-bottom:1px solid var(--line2)}
.wxcard .wxfoot a:hover{color:var(--paper);border-bottom-color:var(--red)}

.adslot{border:1px dashed var(--line2);border-radius:10px;padding:18px;text-align:center;
  color:var(--dim2);font-size:11.5px;font-family:var(--sc);letter-spacing:.11em;margin:32px 0}
.adslot b{display:block;color:var(--dim);font-weight:600;margin-bottom:5px}
.adslot span{display:block;font-family:var(--sans);letter-spacing:0;font-size:12.5px}

/* .wall grid item (see .poster .shot) — same 3:4 shape so a placeholder
   doesn't break the grid's rhythm while infeed is empty/disabled. */
.adslot-grid{aspect-ratio:3/4;border:1px dashed var(--line2);border-radius:3px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  padding:16px;text-align:center;color:var(--dim2);font-size:11px;font-family:var(--sc);letter-spacing:.1em}
.adslot-grid b{color:var(--dim);font-weight:600}
.adslot-grid span{font-family:var(--sans);letter-spacing:0;font-size:11.5px;line-height:1.4}



/* ---- sponsored video card (click-to-play facade: no YouTube iframe until asked) ---- */
.videocard{margin:56px 0;display:grid;grid-template-columns:1.25fr 1fr;gap:0;
  border:1px solid var(--line2);border-radius:14px;overflow:hidden;background:var(--night2)}
.videocard .thumb{position:relative;display:block;aspect-ratio:16/9;background:#0E0C0B;overflow:hidden}
.videocard .thumb img{width:100%;height:100%;object-fit:cover}
.videocard .thumb::after{content:"";position:absolute;inset:0;background:rgba(11,9,8,.28);transition:.2s}
.videocard .thumb:hover::after{background:rgba(11,9,8,.1)}
.videocard .play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:2;
  width:66px;height:66px;border-radius:50%;background:var(--red);display:flex;align-items:center;
  justify-content:center;box-shadow:0 10px 30px -8px rgba(254,0,0,.7);transition:.2s}
.videocard .thumb:hover .play{transform:translate(-50%,-50%) scale(1.08)}
.videocard .play svg{width:24px;height:24px;fill:#fff;margin-left:4px}
.videocard .txt{padding:34px 34px 32px;display:flex;flex-direction:column;justify-content:center}
.videocard .slabel{font-family:var(--sc);font-size:9.5px;letter-spacing:.16em;color:var(--dim2);
  border:1px solid var(--line2);border-radius:3px;padding:4px 9px;align-self:flex-start;margin-bottom:14px}
.videocard h2{font-family:var(--serif);font-size:29px;font-weight:800;margin:0 0 10px;
  letter-spacing:-.02em;line-height:1.12}
.videocard p{color:var(--dim);font-size:15px;line-height:1.6;margin:0 0 20px;max-width:34ch}
.videocard .btn-red{align-self:flex-start;padding:11px 20px}
.videocard iframe{width:100%;aspect-ratio:16/9;border:0;display:block}
@media(max-width:900px){
  .videocard{grid-template-columns:1fr}
  .videocard .txt{padding:24px}
  .videocard h2{font-size:24px}
}

/* ---- featured event: soonest event marked _epan_featured, above "Ποιος
   παίζει" — same card language as .videocard (dark card, .slabel eyebrow)
   but with a portrait poster image (3:4, same crop as the wall's .poster
   cards) instead of a 16:9 video thumb, and a gold accent instead of red —
   this is the one card on the page meant to read as "singled out", so it
   gets the site's only second accent color instead of competing with --red
   (the CTA stays --red: it's still the same action as every other card's
   button, and gold-on-gold for a button would lose the contrast anyway). */
.featured{position:relative;margin:56px 0;display:grid;grid-template-columns:260px 1fr;gap:0;
  border:1px solid var(--gold-soft);border-radius:14px;overflow:hidden;
  background:linear-gradient(135deg,rgba(212,175,55,.08),var(--night2) 45%);
  box-shadow:0 22px 50px -32px rgba(212,175,55,.5)}
.featured::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background:linear-gradient(90deg,transparent,var(--gold) 15%,#F1E3AE 50%,var(--gold) 85%,transparent)}
.featured-thumb{display:block;aspect-ratio:3/4;background:#0E0C0B;overflow:hidden}
.featured-thumb img{width:100%;height:100%;object-fit:cover;object-position:top center}
.featured-txt{padding:30px 34px;display:flex;flex-direction:column;justify-content:center;min-width:0}
.featured-txt .slabel{display:inline-flex;align-items:center;gap:5px;font-family:var(--sc);
  font-size:9.5px;letter-spacing:.16em;color:var(--gold);border:1px solid var(--gold-soft);
  border-radius:3px;padding:4px 9px;align-self:flex-start;margin-bottom:14px}
.featured-txt .slabel svg{width:10px;height:10px;fill:var(--gold);flex:none}
.featured-txt h2{font-family:var(--serif);font-size:27px;font-weight:800;margin:0 0 12px;
  letter-spacing:-.02em;line-height:1.14}
.featured-txt h2 a{color:inherit}
.featured-txt h2 a:hover{color:var(--gold)}
.featured-facts{display:flex;flex-wrap:wrap;gap:6px 14px;color:var(--dim);font-size:14px;margin-bottom:14px}
.featured-txt .plays{margin:0 0 22px;font-size:13px;color:#BBB1A9}
.featured-txt .plays .pl{display:block;font-family:var(--sc);font-size:9px;letter-spacing:.11em;
  color:var(--dim2);margin-bottom:3px}
.featured-txt .plays b{font-weight:600;color:#fff}
.featured-txt .plays .more-n{color:var(--dim2);margin-left:2px}
.featured-txt .btn-red{align-self:flex-start;padding:11px 20px}
@media(max-width:900px){
  .featured{grid-template-columns:1fr}
  .featured-thumb{aspect-ratio:16/9}
  .featured-txt{padding:22px}
  .featured-txt h2{font-size:22px}
}

/* ---- Στα ΜΜΕ: κάρτες εξωτερικών εμφανίσεων (podcast/YouTube/ραδιόφωνο/
   τηλεόραση/άρθρο) — landscape thumb (16:9, όχι το 3:4 των αφισών, γιατί
   αυτά είναι καλύψεις τρίτων/βίντεο, όχι αφίσες εκδήλωσης), ίδια γλώσσα
   eyebrow-label με .featured-txt .slabel αλλά χωρίς το χρυσό — δεν είναι
   «προβεβλημένη εκδήλωση», ξεχωριστή έννοια. */
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:22px;margin-top:8px}
.media-card{display:block;border:1px solid var(--line2);border-radius:12px;overflow:hidden;
  background:var(--night2);transition:.15s}
.media-card:hover{border-color:var(--red-lift)}
.media-card .thumb{aspect-ratio:16/9;background:#0E0C0B}
.media-card .thumb img{width:100%;height:100%;object-fit:cover}
.media-card .txt{padding:16px 18px 18px}
.media-card .slabel{display:inline-block;font-family:var(--sc);font-size:9px;letter-spacing:.13em;
  color:var(--red-lift);border:1px solid var(--line2);border-radius:3px;padding:3px 8px;margin-bottom:10px}
.media-card h3{font-family:var(--serif);font-size:16.5px;font-weight:700;line-height:1.28;
  margin:0 0 6px;color:var(--paper)}
.media-card .date{font-size:12.5px;color:var(--dim2)}

/* ================= ADVERTISING SURFACES ================= */
/* every slot has a reserved height -> zero layout shift (CLS) */

/* light "shelf" — ad creatives are built for white pages, so we give them one
   deliberately instead of letting them punch a hole in the dark layout */
.adshelf{background:var(--paper);color:#17130F;position:relative}
/* "Full bleed" background WITHOUT any vw/vmax unit at all. Two earlier
   attempts both broke: margin-left:calc(50% - 50vw) took its 50% from the
   wrong (narrower) parent, and a 100vmax box-shadow bled hundreds of pixels
   VERTICALLY on tall phones since body only clips overflow-x, not
   overflow-y (the latter must stay visible for .flyerbox's position:sticky
   elsewhere on the site) — and a third attempt, margin-left:50% +
   transform:translateX(-50%), turned out to be algebraically IDENTICAL to
   the first (both reduce to "half of .adshelf's width minus half of a
   scrollbar-inclusive 100vw"), so it failed the exact same way on any
   screen with a real scrollbar.
   This version only cancels .wrap's own fixed 22px padding (a known
   constant, not a viewport measurement) — .bleed reaches .wrap's own edge,
   which IS true full-bleed on any screen at or under .wrap's max-width
   (--w, 1180px) — i.e. every phone and tablet, where the visible bug was
   — and merely stops a bit short of the true edge on very wide desktop
   screens instead of overshooting into the scrollbar or bleeding
   vertically. A correct, if occasionally slightly conservative, edge beats
   a wrong one. */
.adshelf .bleed{margin:0 -22px}
.adlabel{font-family:var(--sc);font-size:9.5px;letter-spacing:.16em;color:#8B837B;
  text-align:center;padding:9px 0 0}
.adlabel.on-dark{color:var(--dim2)}

/* 1. masthead ribbon — top sponsor, above the nav, contained not intrusive */
.ribbon{background:var(--paper);border-bottom:1px solid #D8D0C6}
.ribbon .in{max-width:var(--w);margin:0 auto;padding:8px 22px 10px;display:flex;
  flex-direction:column;align-items:center}
.ribbon img{max-height:76px;width:auto;border-radius:2px}
.ribbon .tag{font-family:var(--sc);font-size:9px;letter-spacing:.16em;color:#8B837B;margin-bottom:5px}
/* AdSense fallback when no sponsor image — same reserved height as the image, whatever Google returns gets clipped rather than pushing the masthead taller. */
.ribbon-fallback{max-height:76px;width:100%;max-width:760px;overflow:hidden;display:flex;align-items:center;justify-content:center}
/* .stickytop is ALWAYS the sticky element (see .top's own rule above for
   why) — z-index only actually matters once it's genuinely stacked above
   something (page content scrolling underneath). Ρυθμίσεις → Διαφημίσεις →
   Κορδέλα κορυφής → «Κολλητή κατά το scroll» controls the MARKUP instead
   (header.php): the ribbon renders INSIDE .stickytop when the toggle is on
   (scrolls together with the menu, in its own natural height — no need to
   know the ribbon's px height up front), or BEFORE it, outside, when off
   (scrolls away normally, only .top stays pinned). */
.stickytop{position:sticky;top:0;z-index:51}

/* 2. in-feed sponsored poster — lives inside the wall, same 3:4 shape */
.poster.sponsored .shot{border:1px solid rgba(254,0,0,.4)}
.poster.sponsored .shot::after{background:linear-gradient(to top,rgba(11,9,8,.92) 0%,rgba(11,9,8,.2) 44%,transparent 68%)}
.sponsortag{position:absolute;top:11px;left:10px;z-index:2;font-family:var(--sc);font-size:9.5px;
  letter-spacing:.12em;background:var(--paper);color:#17130F;padding:4px 9px;border-radius:2px}
.poster.sponsored .fill{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  padding:16px;background:#1F1B19}
.poster.sponsored .fill img{max-width:100%;max-height:100%;object-fit:contain}

/* 2b. in-feed AdSense fallback — same 3:4 card box as .poster.sponsored
   above (.poster .shot already clips to that ratio), used when there's no
   sponsored poster configured yet. No gradient/label/title here since
   there's no sponsor copy to show; the ad unit is just centered and
   clipped to the card's fixed bounds so an oversized responsive unit gets
   cropped instead of growing the grid row (same reserved-size philosophy
   as .ribbon-fallback/.adrect/.adband above). */
.poster-adsense .shot{border:1px solid var(--line2);background:#1F1B19}
.poster-adsense .fill{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:10px}

/* 3. full-bleed sponsor band between sections */
.adband{margin:54px 0;padding:14px 0 16px}
.adband .creative{display:block;max-width:760px;margin:0 auto;text-align:center}
.adband .creative img{width:100%;border-radius:4px}

/* 3b. sponsor rectangle (300×250 Medium Rectangle) — standalone card, not full-bleed. */
.adrect{max-width:300px;margin:40px auto;text-align:center;border:1px solid var(--line2);
  border-radius:12px;padding:14px 14px 18px;background:var(--night3)}
.adrect .creative{display:block}
.adrect .creative img{width:100%;height:auto;border-radius:4px}

/* 4. AdSense shelf (responsive display unit) */
.adsense{margin:0 auto;max-width:970px;padding:14px 22px 30px}
.adsense .unit{background:#E6DFD4;border:1px solid #D3CBBF;border-radius:4px;
  min-height:250px;display:flex;align-items:center;justify-content:center;
  font-family:var(--sc);font-size:11px;letter-spacing:.13em;color:#8B837B;text-align:center;line-height:1.9}
.adsense.dark .unit{background:var(--night2);border-color:var(--line2);color:var(--dim2)}

/* 5. sticky anchor — every viewport now, not just mobile/tablet; desktop was
   losing one full ad exposure per session for no real reason besides an
   inherited breakpoint. body.epan-has-anchor's padding (below) keeps it from
   ever covering page content — scoped to that class, not bare body, so
   disabling the slot (e.g. handing anchor over to AdSense's own Overlay
   ads instead) doesn't leave a dead 62px gap with nothing in it. */
.anchor{position:fixed;left:0;right:0;bottom:0;z-index:90;background:var(--paper);
  border-top:1px solid #D8D0C6;height:62px;display:flex;align-items:center;justify-content:center;
  font-family:var(--sc);font-size:10px;letter-spacing:.14em;color:#8B837B}
body.epan-has-anchor{padding-bottom:62px}
.anchor button{position:absolute;right:8px;top:-26px;background:rgba(11,9,8,.85);color:#E6DCD3;
  border:1px solid var(--line2);border-radius:4px 4px 0 0;padding:4px 10px;font-size:11px}
/* .adslot's default colors/padding (var(--dim2) on dark) are unreadable on
   .anchor's light (var(--paper)) background and too tall for its fixed
   62px bar — compact, single-row override for the debug placeholder only. */
.anchor .adslot{border:1px dashed rgba(0,0,0,.25);border-radius:6px;margin:0;padding:6px 14px;
  display:flex;align-items:center;gap:8px;color:#8B837B;font-size:10px;letter-spacing:.1em}
.anchor .adslot b{color:#3A332D;font-weight:600}
.anchor .adslot span{font-family:var(--sans);letter-spacing:0;font-size:9.5px;color:#8B837B}
@media(max-width:900px){
  .ribbon img{max-height:56px}
  .adsense .unit{min-height:280px}
}

.svg-i{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}

@media(max-width:900px){
  .nav{display:none}
  /* Title above poster, poster above the rest — breadcrumb/H1 read first,
     matching normal article order; desktop keeps the title beside the
     poster's top instead (see the un-prefixed .ev rule's areas). */
  .ev{grid-template-columns:1fr;grid-template-areas:"title" "poster" "body";gap:30px}
  .flyerbox{position:static;max-width:340px;margin:0 auto}
  .mapteaser,.mapteaser.has-rect{grid-template-columns:1fr}
  .mapteaser .fake{min-height:200px;order:-1}
  .mapteaser .adrect{border-left:0;border-top:1px solid var(--line2)}
  /* λογότυπο/περιγραφή σε ολόκληρη τη σειρά, ΠΕΡΙΗΓΗΣΗ+ΠΕΡΙΦΕΡΕΙΕΣ μαζί
     στην επόμενη — χωρίς το grid-column στην πρώτη στήλη, η αυτόματη
     τοποθέτηση του grid έβαζε στήλη 1+2 στην ίδια σειρά και η στήλη 3
     "έσπαγε" μόνη της σε τρίτη σειρά αντί να συνοδεύει τη 2η. */
  .foot .cols{grid-template-columns:1fr 1fr}
  .foot .cols > div:first-child{grid-column:1 / -1}
  .wall{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}
  .poster h3{font-size:15px}
}

/* ---------- πρόσθετα που χρειάζεται το WordPress ---------- */
.skip{position:absolute;left:-9999px;top:0;background:var(--red);color:#fff;padding:10px 16px;z-index:999}
.skip:focus{left:8px;top:8px}
/* Το admin bar του WP είναι fixed, top:0, z-index:99999 ΜΟΝΟ πάνω από τα
   782px δικά του breakpoint — χωρίς αυτό, το δικό μας sticky .stickytop
   (top:0) κολλάει ΚΑΤΩ από αυτό μόλις γίνει scroll, κρυμμένο πίσω του.
   Offset μόνο όταν είσαι συνδεδεμένος (σώμα με .admin-bar). ΚΑΤΩ από τα
   782px το ίδιο το WP κάνει το admin bar position:absolute αντί για
   fixed — κυλάει μαζί με τη σελίδα σαν κανονικό περιεχόμενο, ΔΕΝ
   ανταγωνίζεται συνεχώς τα sticky στοιχεία μας όπως το fixed· το html{margin-
   top:46px} του ίδιου του WP καλύπτει ήδη την αρχική θέση χωρίς να
   χρειάζεται δικό μας offset — ένα τέτοιο θα κρατούσε το .stickytop 46px
   πιο χαμηλά ΓΙΑ ΠΑΝΤΑ μετά το scroll, ακόμα κι αφού το admin bar έχει
   φύγει εδώ και ώρα (κενό στην κορυφή).
   (.flyerbox δεν χρειάζεται δικό του κανόνα εδώ πια — το --stickytop-h
   που μετράει το theme.js περιλαμβάνει ήδη αυτό το offset.) */
@media screen and (min-width:783px){
  body.admin-bar .stickytop{top:32px}
}
.logo img{max-height:45px;width:auto}
.nav-toggle{display:none}
.mobilenav{display:none;border-top:1px solid var(--line);background:var(--night2)}
.mobilenav ul{list-style:none;margin:0;padding:10px 22px 18px}
.mobilenav li{padding:9px 0;border-bottom:1px solid var(--line)}
.mobilenav a{font-size:16px}
.mobilenav .current-menu-item > a,
.mobilenav .current_page_item > a,
.mobilenav .current-menu-ancestor > a,
.mobilenav .current-menu-parent > a,
.mobilenav .current-category-ancestor > a,
.mobilenav .current-category-parent > a{color:var(--red-lift);font-weight:600}
.mobilenav .sub-menu{padding:6px 0 0 14px;border:0}
.mobilenav .social-icons{padding:16px 22px 20px;margin:0}
.mobilenav .sub-menu li{border:0;padding:6px 0}
.mobilenav .sub-menu a{font-size:14px;color:var(--dim)}

.archead{padding:34px 0 6px}
.archead .kicker{font-family:var(--sc);font-size:12px;letter-spacing:.13em;color:var(--red-lift);margin-bottom:9px}
.archead h1{font-family:var(--serif);font-size:clamp(30px,5vw,50px);margin:0;letter-spacing:-.028em;font-weight:800;line-height:1.05}
.archead .h1rule{width:74px;height:5px;background:var(--red);border-radius:1px;margin:14px 0 0}
.archdesc{color:var(--dim);font-size:16px;line-height:1.6;max-width:58ch;margin:16px 0 0}
.archead .stats{display:flex;gap:30px;margin-top:22px;flex-wrap:wrap}
.archead .stats div{font-size:13px;color:var(--dim)}
.archead .stats b{display:block;font-family:var(--serif);font-size:27px;color:var(--paper);font-weight:800;line-height:1.1}

/* template-app.php: info column + promo graphic side by side on desktop, stacked on mobile — same breakpoint as every other two-column layout on the site. */
.apphero{display:grid;grid-template-columns:1fr 400px;gap:44px;align-items:center;margin-top:22px}
.app-promo{text-align:center}
.app-promo img{width:100%;border-radius:8px;box-shadow:0 28px 64px -26px #000}
@media(max-width:900px){
  .apphero{grid-template-columns:1fr;gap:28px}
  .app-promo img{max-width:420px;margin:0 auto}
}

.pagebody{max-width:70ch;margin:0 auto;padding:34px 0 60px}
.pagebody h1{font-family:var(--serif);font-size:clamp(30px,5vw,46px);margin:0;font-weight:800;letter-spacing:-.028em}
.pagebody .h1rule{width:74px;height:5px;background:var(--red);margin:14px 0 26px;border-radius:1px}

.empty{border:1px dashed var(--line2);border-radius:12px;padding:40px 26px;text-align:center}
.empty-t{font-family:var(--serif);font-size:22px;margin:0 0 8px;font-weight:700}
.empty-s{color:var(--dim);font-size:15px;margin:0 0 20px}
.empty .btn-red{display:inline-block;padding:11px 20px}

.past-flag{display:inline-block;background:var(--night3);border:1px solid var(--line2);color:var(--dim);
  font-family:var(--sc);font-size:11px;letter-spacing:.11em;padding:6px 12px;border-radius:3px;margin:16px 0 0}

.pagination,.nav-links{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin:36px 0 0}
.page-numbers{border:1px solid var(--line2);border-radius:6px;padding:9px 14px;font-size:14px;color:var(--dim)}
.page-numbers.current,.page-numbers:hover{background:var(--red);border-color:var(--red);color:#fff}

.ribbon img{height:auto}
/* Only horizontal padding here — vertical spacing already comes from
   .adband's own padding:26px 0 30px, and the background from .adshelf.
   This rule used to carry background+22px/26px vertical padding too, left
   over from before .bleed became the full-bleed technique (margin:0 -22px,
   above) — that doubled up the top/bottom padding with .adshelf's own,
   producing the oversized blank cream strips above/below the banner. */
.adband .bleed{padding:0 22px}
.adband .creative img{max-width:700px;margin:10px auto 0}

@media(max-width:900px){
  .nav-toggle{display:inline-block}
  .mobilenav:not([hidden]){display:block}
  .hide-mobile{display:none}
}

/* ================= PAGE FURNITURE: filter bar / notice / pagination ================= */
/* compact filter bar — same segmented control as the hero finder, archive scale */
.filterbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:26px 0 24px}
.filterbar .seg{display:flex;background:#100E0D;border:1px solid var(--line2);border-radius:9px;padding:4px;gap:2px}
.filterbar .seg button{padding:9px 15px;border-radius:6px;font-size:13.5px;font-weight:600;
  color:#A0968E;white-space:nowrap;transition:.14s}
.filterbar .seg button[aria-pressed="true"]{background:var(--red);color:#fff}
.filterbar .pick{display:flex;align-items:center;gap:9px;padding:10px 15px;background:#100E0D;
  border:1px solid var(--line2);border-radius:9px;font-size:13.5px;color:#D5CBC2;font-weight:500}
.filterbar .pick:hover{border-color:var(--red)}
.filterbar .res{margin-left:auto;font-size:13.5px;color:var(--dim)}
.filterbar .res b{color:var(--paper);font-weight:600}

.notice{display:flex;gap:12px;align-items:flex-start;background:var(--night2);border:1px solid var(--line2);
  border-left:3px solid var(--red);border-radius:8px;padding:14px 17px;color:var(--dim);
  font-size:13.5px;line-height:1.6;margin:22px 0 0;max-width:80ch}
.notice svg{flex:none;color:var(--red-lift);margin-top:2px}
.notice b{color:var(--paper);font-weight:600}

.pager{display:flex;gap:6px;justify-content:center;align-items:center;flex-wrap:wrap;margin:42px 0 0}
.pager a,.pager span{min-width:40px;height:40px;padding:0 13px;display:flex;align-items:center;
  justify-content:center;border:1px solid var(--line2);border-radius:6px;font-size:14px;color:#C0B6AE;font-weight:500}
.pager a:hover{border-color:var(--red);color:var(--paper)}
.pager .cur{background:var(--red);border-color:var(--red);color:#fff;font-weight:600}
.pager .gap{border-color:transparent;color:var(--dim2)}

/* ================= CALENDAR ================= */
.calbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:28px 0 18px}
.calbar .mo{font-family:var(--serif);font-size:27px;font-weight:800;letter-spacing:-.02em;min-width:238px}
.calbar .mo s{text-decoration:none;color:var(--dim2);font-weight:400}
.calbar .arrows{display:flex;gap:6px;order:-1}
.calbar .arrows a{width:40px;height:40px;border:1px solid var(--line2);border-radius:6px;
  color:#C0B6AE;display:flex;align-items:center;justify-content:center;font-size:17px}
.calbar .arrows a:hover{border-color:var(--red);color:var(--paper)}
.calbar .ghost-s{border:1px solid var(--line2);border-radius:6px;padding:0 15px;height:40px;
  font-size:13.5px;color:#C0B6AE;display:flex;align-items:center}
.calbar .ghost-s:hover{border-color:var(--red);color:var(--paper)}

.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;background:var(--night2);
  border:1px solid var(--line2);border-radius:12px;padding:10px}
.cal .dow{font-family:var(--sc);font-size:10px;letter-spacing:.12em;color:var(--dim2);
  text-align:center;padding:4px 0 8px}
.cal .day{position:relative;aspect-ratio:1/.88;background:#100E0D;border:1px solid transparent;
  border-radius:7px;padding:9px 9px 16px;display:flex;flex-direction:column;overflow:hidden;
  transition:transform .14s,border-color .14s}
.cal .day:hover{border-color:var(--red);transform:translateY(-2px)}
.cal .day .n{font-family:var(--serif);font-size:17px;font-weight:700;line-height:1;color:var(--paper)}
.cal .day .c{margin-top:auto;font-size:11.5px;color:var(--dim);line-height:1.2}
.cal .day .heat{position:absolute;left:9px;right:9px;bottom:8px;height:3px;background:#241F1D;
  border-radius:2px;overflow:hidden}
.cal .day .heat i{display:block;height:100%;background:var(--red);border-radius:2px}
.cal .day.out{opacity:.3}
.cal .day.today{border-color:var(--line2)}
.cal .day.today .n{color:var(--red-lift)}
.cal .day.sel{background:var(--red);border-color:var(--red)}
.cal .day.sel .n,.cal .day.sel .c{color:#fff}
.cal .day.sel .heat{background:rgba(255,255,255,.3)}
.cal .day.sel .heat i{background:#fff}
.callegend{margin:14px 2px 0;font-size:12.5px;color:var(--dim2);line-height:1.55}

/* ================= MAP (real Leaflet + OpenStreetMap, assets/js/map.js) ================= */
.maplayout{display:grid;grid-template-columns:1fr 372px;border:1px solid var(--line2);
  border-radius:14px;overflow:hidden;margin-top:24px;background:var(--night2)}
/* z-index:0 contains Leaflet's own z-index soup. Its panes run 200–1000
   (tiles 200 … popups 700, controls 1000) and none of our ancestors created a
   stacking context — position:relative alone with z-index:auto does not, and
   neither does body's overflow:clip — so those panes were resolving against
   the ROOT, where they outrank the anchor ad (90) and the sticky header (50)
   and painted straight over both. Adding z-index:0 to the already-relative
   container makes one stacking context for the whole map, so it competes as a
   single z-index:0 element while Leaflet's internal ordering still works
   inside it. Fullscreen is unaffected — the top layer ignores stacking
   contexts entirely. */
.mapstage{position:relative;z-index:0;background:#0E0C0B;min-height:560px;height:60vh;max-height:720px}

.mapstage .leaflet-container,.mapcard .canvas .leaflet-container{background:#0E0C0B;font-family:var(--sans)}
.mapstage .leaflet-control-zoom,.mapcard .canvas .leaflet-control-zoom{border:1px solid var(--line2)!important;border-radius:6px!important;overflow:hidden}
.mapstage .leaflet-control-zoom a,.mapcard .canvas .leaflet-control-zoom a{background:rgba(11,9,8,.85)!important;color:#D5CBC2!important;
  border-color:var(--line2)!important}
.mapstage .leaflet-control-zoom a:hover,.mapcard .canvas .leaflet-control-zoom a:hover{border-color:var(--red)!important;color:var(--paper)!important}
.mapstage .leaflet-control-attribution,.mapcard .canvas .leaflet-control-attribution{background:rgba(11,9,8,.7)!important;color:var(--dim2)!important}
.mapstage .leaflet-control-attribution a,.mapcard .canvas .leaflet-control-attribution a{color:var(--dim)!important}

/* Fullscreen toggle (assets/js/map-controls.js) — same visual language as
   the zoom control above it, own rule block since it isn't Leaflet's own
   .leaflet-control-zoom (that class carries Leaflet's own two-button
   top/bottom corner-radius rules, wrong shape for a single button). */
.mapstage .epan-fs-ctrl,.mapcard .canvas .epan-fs-ctrl{border:1px solid var(--line2)!important;border-radius:6px!important;overflow:hidden}
.mapstage .epan-fs-ctrl a,.mapcard .canvas .epan-fs-ctrl a{display:flex;align-items:center;justify-content:center;
  width:30px!important;height:30px!important;background:rgba(11,9,8,.85)!important;color:#D5CBC2!important}
.mapstage .epan-fs-ctrl a:hover,.mapcard .canvas .epan-fs-ctrl a:hover{color:var(--paper)!important}

/* :fullscreen leaves the element's own inline/CSS size as-is by default —
   without this it stays pinned at its normal in-page height (e.g. 230px
   for the small event-page map) instead of filling the screen. -webkit-
   prefix still needed for Safari. */
.mapstage:fullscreen,.mapcard .canvas:fullscreen{width:100vw!important;height:100vh!important}
.mapstage:-webkit-full-screen,.mapcard .canvas:-webkit-full-screen{width:100vw!important;height:100vh!important}

/* marker (a divIcon; see map.js) — a teardrop pin as inline SVG, no
   percent-based positioning needed here since Leaflet places the element */
.mapstage .pin{display:block;line-height:1;transform-origin:50% 100%;transition:.15s}
.mapstage .pin svg{display:block;overflow:visible;
  filter:drop-shadow(0 8px 14px -5px rgba(254,0,0,.75))}
.mapstage .pin .body{fill:var(--red);stroke:rgba(0,0,0,.3);stroke-width:.5;transition:fill .15s}
.mapstage .pin .hole{fill:var(--paper)}
.mapstage .pin.active,.leaflet-marker-icon:hover .pin{transform:scale(1.12)}
.mapstage .pin.active .body,.leaflet-marker-icon:hover .body{fill:var(--red-lift)}
/* featured events get the same gold used on their card/single page — a
   marker that's visibly different, not just a bigger red one, so they're
   findable at a glance on a map full of red pins. "is-featured", not
   "featured" — see the comment in map.js: a bare .featured class collides
   with the homepage's <section class="featured"> card. */
.mapstage .pin.is-featured svg{filter:drop-shadow(0 8px 14px -5px rgba(212,175,55,.8))}
.mapstage .pin.is-featured .body{fill:var(--gold)}
.mapstage .pin.is-featured.active .body,.leaflet-marker-icon:hover .pin.is-featured .body{fill:#F1E3AE}

/* popup — same visual language as .pinpop, targeting Leaflet's real DOM */
.leaflet-popup.epan-popup .leaflet-popup-content-wrapper{background:var(--night2);border:1px solid var(--line2);
  border-radius:10px;box-shadow:0 24px 52px -18px #000;padding:0;overflow:hidden}
.leaflet-popup.epan-popup .leaflet-popup-content{margin:0;width:296px!important}
.leaflet-popup.epan-popup .leaflet-popup-tip{background:var(--night2);border:1px solid var(--line2);
  border-top:0;border-left:0}
.pinpop-in{display:grid;grid-template-columns:84px 1fr;color:inherit}
/* aspect-ratio:3/4, ίδιο με κάθε άλλη προεπισκόπηση αφίσας στο site (.poster
   .shot, .featured-thumb) — πριν το height:100% τέντωνε την αφίσα στο ύψος
   της στήλης κειμένου δίπλα της, δηλαδή σε ΟΤΙΔΗΠΟΤΕ ύψος έβγαζε ο τίτλος·
   το object-fit:cover πάνω σε λάθος αναλογία έδειχνε ένα στενό οριζόντιο
   κομμάτι από το κέντρο της αφίσας αντί για μια αναγνωρίσιμη προεπισκόπηση.
   align-self:start ώστε η εικόνα να μην τεντώνεται στο ύψος της σειράς όταν
   ο τίτλος είναι μακρύς. */
.pinpop-in img{width:84px;aspect-ratio:3/4;align-self:start;object-fit:cover;object-position:top center}
.pinpop-in .b{padding:11px 13px 12px}
.pinpop-in.is-featured{box-shadow:inset 0 0 0 1px var(--gold-soft)}
.pinpop-featured{display:inline-flex;align-items:center;gap:4px;font-family:var(--sc);
  font-size:8.5px;letter-spacing:.13em;color:var(--gold);border:1px solid var(--gold-soft);
  border-radius:3px;padding:2px 6px;margin-bottom:5px}
.pinpop-featured svg{width:8px;height:8px;fill:var(--gold);flex:none}
.pinpop-in .r{font-family:var(--sc);font-size:9.5px;letter-spacing:.11em;color:var(--red-lift)}
.pinpop-in h4{font-family:var(--serif);font-size:15.5px;margin:5px 0 4px;font-weight:700;line-height:1.18;color:var(--paper)}
.pinpop-in .m{font-size:12px;color:var(--dim)}

/* Πολυήμερη εκδήλωση στο popup: η αριστερή στήλη-αφίσα φεύγει και τη θέση
   της παίρνει μία γραμμή ΑΝΑ ΗΜΕΡΑ μέσα στο .b — βλ. map.js popup_html().
   Χωρίς αυτό το μονόστηλο, το .b θα στρίμωχνε στα 84px της στήλης εικόνας. */
.pinpop-in.is-multiday{grid-template-columns:1fr}
.pinpop-days{display:flex;flex-direction:column;gap:6px;margin:8px 0 2px}
.pinpop-day{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--dim2)}
.pinpop-day img,.pinpop-day-noimg{width:28px;height:37px;border-radius:3px;flex:none}
.pinpop-day img{object-fit:cover;object-position:top center}
.pinpop-day-noimg{background:rgba(255,255,255,.06)}

.maplist{border-left:1px solid var(--line2);display:flex;flex-direction:column;max-height:640px}
.maplist .lhead{padding:15px 18px;border-bottom:1px solid var(--line);font-family:var(--sc);
  font-size:10.5px;letter-spacing:.12em;color:var(--dim2);display:flex;align-items:center;gap:9px}
.maplist .scroll{overflow-y:auto;flex:1}
.mrow{display:grid;grid-template-columns:52px 1fr;gap:13px;padding:14px 18px;
  border-bottom:1px solid var(--line);align-items:start;transition:.14s}
.mrow:hover,.mrow.on{background:var(--night3)}
.mrow.on{box-shadow:inset 3px 0 0 var(--red)}
.mrow.is-featured{box-shadow:inset 3px 0 0 var(--gold-soft)}
.mrow.is-featured.on{box-shadow:inset 3px 0 0 var(--gold)}
.mrow img{width:52px;height:69px;object-fit:cover;object-position:top center;border-radius:2px}
.mrow > span:first-child{width:52px;height:69px;background:var(--night3);border-radius:2px;display:block}
.mrow .r{font-family:var(--sc);font-size:9.5px;letter-spacing:.11em;color:var(--red-lift);
  display:block;margin-bottom:5px}
.mrow h4{font-family:var(--serif);font-size:15.5px;margin:0 0 5px;font-weight:700;line-height:1.2;color:var(--paper)}
.mrow-star{width:11px;height:11px;fill:var(--gold);vertical-align:-1px;margin-right:3px}
.mrow .m{font-size:12px;color:var(--dim);line-height:1.45}
.mrow .m b{color:#C0B6AE;font-weight:600}

/* ================= FORMS (καταχώρηση / επικοινωνία — Contact Form 7 output) ================= */
/* CF7 renders its own markup (.wpcf7-form-control on every field, .wpcf7-submit
   on the button) — we style that directly rather than fighting it, scoped to
   .formcard/.aside-card (the two containers a CF7 form actually lives in on
   this site — template-contact.php/template-submit.php use .formcard,
   template-advertise.php's compact sidebar CTA uses .aside-card) so it never
   leaks onto a CF7 form used elsewhere. */
.formlayout{display:grid;grid-template-columns:1fr 344px;gap:46px;align-items:start;margin:30px 0 0}
.formcard{border:1px solid var(--line2);border-radius:12px;padding:30px 32px 32px;background:var(--night2)}
.formcard h2{font-family:var(--serif);font-size:24px;font-weight:800;margin:0 0 6px;letter-spacing:-.02em}
.formcard .fsub{color:var(--dim);font-size:14px;margin:0 0 26px;line-height:1.6;max-width:52ch}
.formcard p{margin-bottom:21px}
.formcard label,.aside-card label{display:block;font-family:var(--sc);font-size:11px;letter-spacing:.12em;
  color:var(--dim);margin-bottom:8px}
/* :not(.wpcf7-acceptance) matters — CF7's [acceptance] shortcode wraps the
   checkbox in <span class="wpcf7-form-control wpcf7-acceptance">, a span
   with no type attribute at all, so :not([type=checkbox]) alone doesn't
   exclude it: it was getting the same bordered/padded text-input box as a
   real field, wrapping the checkbox+label in a stray outlined rectangle. */
.formcard .wpcf7-form-control:not([type=submit]):not([type=checkbox]):not([type=radio]):not(.wpcf7-acceptance),
.aside-card .wpcf7-form-control:not([type=submit]):not([type=checkbox]):not([type=radio]):not(.wpcf7-acceptance){
  width:100%;background:#100E0D;border:1px solid var(--line2);border-radius:8px;padding:13px 15px;
  color:var(--paper);font-family:var(--sans);font-size:15px;transition:.14s}
.formcard textarea.wpcf7-form-control,.aside-card textarea.wpcf7-form-control{min-height:134px;resize:vertical;line-height:1.55}
.formcard select.wpcf7-form-control,.aside-card select.wpcf7-form-control{appearance:none;padding-right:42px;background-repeat:no-repeat;
  background-position:right 15px center;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%239C938B' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E")}
.formcard .wpcf7-form-control:focus,.aside-card .wpcf7-form-control:focus{border-color:var(--red);outline:none}
.formcard select.wpcf7-form-control:disabled,.aside-card select.wpcf7-form-control:disabled{opacity:.5;cursor:not-allowed}
.formcard .wpcf7-form-control::placeholder,.aside-card .wpcf7-form-control::placeholder{color:#5C5550}
/* font-family εδώ επίτηδες: το tip γεννιέται ΜΕΣΑ στο <label> (CF7 client-side
   JS το εισάγει μετά το φόρτωμα — δεν περνάει ποτέ από το wpcf7_form_elements
   filter του functions.php που αφαιρεί τόνους), άρα κληρονομεί το var(--sc)
   (Alegreya SC) της ετικέτας — η γραμματοσειρά small-caps δείχνει το πεζό
   κείμενο σαν κεφαλαίο ΜΕ τον τόνο ακόμα πάνω του. Το κανονικό var(--sans)
   εδώ το επαναφέρει σε πραγματικά πεζά, σωστά τονισμένα. */
.formcard .wpcf7-not-valid-tip,.aside-card .wpcf7-not-valid-tip{color:var(--red-lift);font-size:12.5px;margin-top:6px;font-family:var(--sans)}
.formcard .wpcf7-response-output,.aside-card .wpcf7-response-output{border-radius:8px;font-size:13.5px;padding:12px 15px;margin:18px 0 0}
.formcard input[type=checkbox].wpcf7-form-control,.aside-card input[type=checkbox].wpcf7-form-control{width:18px;height:18px;accent-color:var(--red);margin-right:8px}
.formcard .wpcf7-list-item,.aside-card .wpcf7-list-item{margin-left:0}
.formcard .wpcf7-submit,.aside-card .wpcf7-submit{background:var(--red);color:#fff;font-weight:600;padding:13px 26px;
  font-size:15px;border-radius:6px}
.formcard .wpcf7-submit:hover,.aside-card .wpcf7-submit:hover{background:var(--red-lift)}
/* Χωρίς αυτό, ένα κουμπί απενεργοποιημένο από το CF7 (π.χ. το υποχρεωτικό
   [acceptance] στην Επικοινωνία — μη τσεκαρισμένο = disabled=true ΑΠΟ ΤΗΝ
   ΑΡΧΗ, δικό του built-in JS, βλ. index.js) φαινόταν ΙΔΙΟ με ενεργό: ίδιο
   κόκκινο, ίδια αδιαφάνεια, καμία ένδειξη — ένα κλικ πάνω του απλά δεν έκανε
   τίποτα, χωρίς κανένα μήνυμα λάθους να εξηγεί γιατί. */
.formcard .wpcf7-submit:disabled,.aside-card .wpcf7-submit:disabled{opacity:.5;cursor:not-allowed}
.formcard .wpcf7-spinner,.aside-card .wpcf7-spinner{margin:0 0 0 10px}
/* .aside-card p{margin:0} elsewhere is right for its usual single-paragraph
   blurbs — scoped to .wpcf7-form specifically so it doesn't flatten spacing
   between this form's own fields. */
.aside-card .wpcf7-form p{margin-bottom:16px}
.aside-card .wpcf7-form p:last-child{margin-bottom:0}
.formcard-drop{display:block;border:1px dashed var(--line2);border-radius:10px;padding:26px 20px;
  text-align:center;background:#100E0D;margin-bottom:21px}
.formcard-drop b{display:block;font-size:14.5px;color:var(--paper);font-weight:600;margin-bottom:5px}
.formcard-drop small{color:var(--dim2);font-size:12.5px;line-height:1.5}
.formcard .after{font-size:12.5px;color:var(--dim2);margin:16px 0 0;line-height:1.55}

.aside-card{border:1px solid var(--line2);border-radius:12px;padding:26px 24px;
  background:var(--night2);margin-bottom:20px}
.aside-card:last-child{margin-bottom:0}
.aside-card h3{font-family:var(--sc);font-size:11.5px;letter-spacing:.12em;color:#CFC5BC;margin:0 0 18px}
.aside-card p{font-size:13.5px;color:var(--dim);line-height:1.6;margin:0}
.steps{counter-reset:s;list-style:none;padding:0;margin:0}
.steps li{position:relative;padding-left:40px;margin-bottom:20px;font-size:13.5px;
  color:var(--dim);line-height:1.55}
.steps li:last-child{margin-bottom:0}
.steps li::before{counter-increment:s;content:counter(s);position:absolute;left:0;top:-2px;
  width:27px;height:27px;border-radius:50%;background:var(--ember);border:1px solid var(--ember-strong);
  color:var(--red-lift);display:flex;align-items:center;justify-content:center;
  font-family:var(--sc);font-size:12px}
.steps li b{display:block;color:var(--paper);font-weight:600;font-size:14.5px;
  margin-bottom:4px;font-family:var(--sans)}

/* -------- about page: site milestones -------- */
.timeline{list-style:none;margin:0;padding:0}
.timeline li{position:relative;padding:0 0 20px 20px;border-left:1px solid var(--line2)}
.timeline li:last-child{padding-bottom:0;border-color:transparent}
.timeline li::before{content:"";position:absolute;left:-4.5px;top:3px;width:8px;height:8px;
  border-radius:50%;background:var(--red);box-shadow:0 0 0 3px var(--night2)}
.timeline .tl-date{display:block;font-family:var(--sc);font-size:10.5px;letter-spacing:.12em;
  color:var(--red-lift);margin-bottom:3px}
.timeline .tl-text{display:block;font-size:13.5px;color:var(--dim);line-height:1.5}
.timeline .tl-text a{color:inherit;border-bottom:1px solid var(--line2)}
.timeline .tl-text a:hover{color:var(--red-lift);border-bottom-color:var(--red-lift)}
/* traffic milestones (Google Search Console) — a different kind of
   milestone from "we shipped something", so a different dot color
   (blue, not used anywhere else on the site) instead of the red used
   for every other entry. */
.timeline li.is-stat::before{background:#4C8DFF}
.timeline li.is-stat .tl-date{color:#7FADFF}
.chan{display:flex;gap:13px;align-items:center;padding:14px 0;border-bottom:1px solid var(--line)}
.chan:first-of-type{padding-top:0}
.chan:last-of-type{border-bottom:0;padding-bottom:0}
.chan .ic{width:38px;height:38px;border-radius:9px;border:1px solid var(--line2);display:flex;
  align-items:center;justify-content:center;color:var(--red-lift);flex:none;transition:.14s}
.chan:hover .ic{border-color:var(--red)}
.chan b{display:block;font-size:14.5px;color:var(--paper);font-weight:600}
.chan small{color:var(--dim2);font-size:12.5px}

.faq{margin:56px 0 0;max-width:760px}
.faq details{border-bottom:1px solid var(--line)}
.faq details:first-of-type{border-top:1px solid var(--line)}
.faq summary{padding:17px 0;font-size:15.5px;font-weight:600;cursor:pointer;list-style:none;
  display:flex;align-items:center;gap:14px;color:#DFD5CC}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";margin-left:auto;color:var(--red);font-size:21px;line-height:1;font-weight:400}
.faq details[open] summary{color:var(--paper)}
.faq details[open] summary::after{content:"–"}
.faq p{margin:0 0 20px;color:var(--dim);font-size:14.5px;line-height:1.68;max-width:64ch}

@media(max-width:1000px){
  .formlayout{grid-template-columns:1fr;gap:26px}
  .maplayout{grid-template-columns:1fr}
  .mapstage{height:50vh;min-height:380px}
  .maplist{border-left:0;border-top:1px solid var(--line2);max-height:none}
}
@media(max-width:700px){
  .cal{gap:5px;padding:7px}
  .cal .day{aspect-ratio:1/1;padding:6px 5px 13px}
  .cal .day .n{font-size:14px}
  .cal .day .c{display:none}
  .cal .day .heat{left:5px;right:5px;bottom:6px}
  .calbar .mo{font-size:22px;min-width:0}
  .formcard{padding:22px 20px 24px}
  .archead .stats{gap:22px}
  .filterbar .res{margin-left:0;width:100%}
  .leaflet-popup.epan-popup .leaflet-popup-content{width:190px!important}
  .pinpop-in{grid-template-columns:1fr}
  .pinpop-in img{display:none}

  /* 5 columns of temp+humidity+wind never fit a phone width — horizontal
     scroll with each slot at a fixed, readable width instead of squeezing
     every column down to unreadable text. */
  .wxrow{display:flex;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .wxslot{flex:none;min-width:104px}

  /* Front page's "who's playing" teaser AND the full /καλλιτέχνες/ directory
     (template-performers.php): chipband pills at flex-wrap:wrap turn into a
     tall stack of one-or-two-per-row on a phone. Fixed 2-column grid instead.
     minmax(0,1fr), not bare 1fr — a grid track's default min-width is auto
     (= its content's min-content), so a single long last name silently grew
     that whole column past its 1fr share and threw the two columns out of
     alignment; minmax(0,...) lets the track actually shrink to the fr split,
     which is what makes the ellipsis truncation below take effect at all. */
  .bands-grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:9px}
  /* First/last name always on their own line (not just when too long to fit —
     .cb-first/.cb-last are separate blocks, so this holds at any width), the
     event count vertically centered against that two-line name over on the right. */
  .bands-grid2 .chipband{display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;min-width:0}
  .bands-grid2 .chipband b{display:block;flex:1;min-width:0}
  /* template-performers.php's live search sets [hidden] on filtered-out
     chips — an author display:flex rule beats the UA [hidden]{display:none}
     default at equal origin, so without this every "hidden" pill kept
     rendering anyway and the search appeared to do nothing on mobile. */
  .bands-grid2 .chipband[hidden]{display:none}
  .bands-grid2 .chipband .cb-first,.bands-grid2 .chipband .cb-last{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bands-grid2 .chipband s{flex:none}

  /* .seg's buttons are flex:1 with white-space:nowrap — on a narrow phone
     four buttons (incl. "Επόμενες 7 μέρες") need more width than the
     segmented pill has, so the unwrappable text overflowed straight past
     .finder's own rounded border. A 2x2 grid gives each button its own
     full-width row pair instead of forcing them to shrink below their text.
     flex-basis:100% (NOT min-width:0 — that was the bug in the first fix:
     it let .seg shrink onto the SAME row as .pick/.go, three-way-splitting
     331px and overflowing every cell) forces .seg to keep taking its own
     full-width row, same as it always did via its old 290px min-width. */
  .finder .seg{display:grid;grid-template-columns:1fr 1fr;flex-basis:100%}
  .finder .seg button{white-space:normal;padding:10px 6px}
  .finder .pick{min-width:0;flex:1}
}
