/*
 * Elementor bridge. Staff add brand classes in Elementor (Advanced → CSS Classes), and Elementor puts
 * them on the widget's wrapper <div>, not on the <a> / <h2> inside it. tokens.css styles those
 * classes as the element itself, so these rules map each class onto Elementor's real markup and give
 * stock widgets on-brand defaults. Per-widget Style settings still win over the defaults; a button's
 * btn-primary / btn-secondary class wins over its per-widget colors.
 */
:where(:root){--sloff-gutter:clamp(16px, 12.2vw - 86px, 90px);--sloff-content-max:1260px;--sloff-measure:720px}

/* Headings: the old site's kit styles bare h1–h6 (a 1 px h3 line height, a capitalized, word-spaced h1),
   and every widget heading inherits it. Design sync rewrites the kit's Theme Style; this is the fallback
   until it runs. Kept at (0,1,2), so it beats the kit's .elementor-kit-N h3 (0,1,1) but per-widget
   typography (0,3,0) still wins. Case is inherited, so a heading in an uppercase block stays uppercase.
   Plugin widgets that set their own case or line height on headings are skipped. */
body .elementor :is(h1,h2,h3,h4,h5,h6){word-spacing:normal}
body .elementor :is(h1,h2,h3,h4,h5,h6):where(:not(.sloff-schedule *,.sloff-now-next *,.sloff-film-heading *,.sloff-passes *,.sloff-content__heading)){text-transform:inherit;line-height:var(--sloff-lh-snug)}

/* Page sections: top-level full-width containers keep content in the centered column (mockups: 1260 px
   content at 1440, 90 px gutters). The hero draws its own frame, so its wrapper is left alone. */
body .elementor[data-elementor-type="wp-page"] > .e-con-full:not(:has(.sloff-hero)){
	--padding-left:max(var(--sloff-gutter), calc((100% - var(--sloff-content-max)) / 2));
	--padding-right:max(var(--sloff-gutter), calc((100% - var(--sloff-content-max)) / 2));
	padding-left:var(--padding-left);
	padding-right:var(--padding-right);
}

/* Heading color fallbacks have low specificity so Elementor's global and per-widget Style
   colors win, regardless of stylesheet order. Typography and the newsletter ink treatment
   remain class-owned. Elementor's Primary global may supply the festival accent by default.
   The eyebrow class is the exception: it is pink over Elementor's default (Primary, lime) and over a
   per-widget color, as in the mockups. An accent card recolors it below. */
:where(body .elementor .elementor-widget-heading) .elementor-heading-title{color:var(--sloff-text)}
body .elementor .elementor-widget-heading.eyebrow .elementor-heading-title{color:var(--sloff-fest-highlight)}
body .elementor .elementor-widget-heading.eyebrow .elementor-heading-title.elementor-heading-title{font-family:var(--sloff-font);font-size:var(--sloff-fs-12);font-weight:var(--sloff-fw-extrabold);line-height:var(--sloff-lh-tight);letter-spacing:var(--sloff-ls-eyebrow);text-transform:uppercase}
body .elementor .elementor-widget-heading.eyebrow .elementor-heading-title a{color:inherit;text-decoration:none}
body .elementor .elementor-widget-heading.eyebrow .elementor-heading-title a:hover{text-decoration:underline}
body .elementor .elementor-widget-heading.section-head .elementor-heading-title.elementor-heading-title{font-family:var(--sloff-font);font-size:var(--sloff-fs-22);font-weight:var(--sloff-fw-extrabold);line-height:var(--sloff-lh-snug);letter-spacing:0;text-transform:uppercase}
body .elementor .elementor-widget-text-editor.muted{color:var(--sloff-text-muted)}
/* Text pages: lead is the intro paragraph; sloff-measure on a container keeps its text at a readable width. */
body .elementor .elementor-widget-text-editor.lead{font-family:var(--sloff-font);font-size:var(--sloff-fs-18);line-height:1.55;color:var(--sloff-text-muted);max-width:60ch}
@media (min-width:1025px){body .elementor .elementor-widget-text-editor.lead{font-size:var(--sloff-fs-20)}}
body .elementor .e-con.sloff-measure>.elementor-element{max-width:min(100%,var(--sloff-measure))}
/* Icon List text: body color by default (Elementor's default is the Secondary global, pink). */
body .elementor .elementor-widget-icon-list .elementor-icon-list-text{color:var(--sloff-text-body)}

/* Buttons: the default is the primary pill; .btn-secondary is the outline pill. The wrapper that
   carries the class is reset so it doesn't draw a second, full-width pill around the button. */
body .elementor .elementor-widget-button:is(.btn-primary,.btn-secondary,.btn-orange,.btn-pink,.btn-block){display:block;min-height:0;padding:0;border:0;border-radius:0;background:none;color:inherit;white-space:normal}
body .elementor .elementor-widget-button .elementor-button,
body .elementor .elementor-widget-form .elementor-field-type-submit .elementor-button{display:inline-flex;align-items:center;justify-content:center;gap:var(--sloff-space-2);min-height:var(--sloff-button-h);padding:0 var(--sloff-space-button-x);border:1px solid var(--sloff-fest-accent);border-radius:var(--sloff-radius-pill);background:var(--sloff-fest-accent);color:var(--sloff-fest-accent-ink);font-family:var(--sloff-font);font-size:var(--sloff-fs-14);font-weight:var(--sloff-fw-extrabold);line-height:var(--sloff-lh-tight);letter-spacing:var(--sloff-ls-button);text-transform:uppercase;text-decoration:none;white-space:nowrap}
body .elementor .elementor-widget-button .elementor-button:hover,
body .elementor .elementor-widget-form .elementor-field-type-submit .elementor-button:hover{background:var(--sloff-fest-accent-hover);border-color:var(--sloff-fest-accent-hover);color:var(--sloff-fest-accent-ink)}
body .elementor .elementor-widget-button.btn-primary a.elementor-button{background:var(--sloff-fest-accent);border-color:var(--sloff-fest-accent);color:var(--sloff-fest-accent-ink)}
body .elementor .elementor-widget-button.btn-primary a.elementor-button:hover{background:var(--sloff-fest-accent-hover);border-color:var(--sloff-fest-accent-hover)}
body .elementor .elementor-widget-button.btn-secondary a.elementor-button{background:transparent;border-color:var(--sloff-text);color:var(--sloff-text)}
body .elementor .elementor-widget-button.btn-secondary a.elementor-button:hover{background:transparent;border-color:var(--sloff-fest-accent);color:var(--sloff-fest-accent)}
/* Filled variants: btn-orange (Palm / membership), btn-pink. After btn-primary, so the variant wins if both are set. */
body .elementor .elementor-widget-button.btn-orange a.elementor-button{background:var(--sloff-palm-orange);border-color:var(--sloff-palm-orange);color:var(--sloff-palm-orange-ink)}
body .elementor .elementor-widget-button.btn-pink a.elementor-button{background:var(--sloff-fest-highlight);border-color:var(--sloff-fest-highlight);color:var(--sloff-fest-highlight-ink)}
body .elementor .elementor-widget-button:is(.btn-orange,.btn-pink) a.elementor-button:hover{filter:brightness(1.1)}
body .elementor :is(.elementor-widget-button,.elementor-widget-form) .elementor-button:focus-visible{outline:var(--sloff-focus-w) solid var(--sloff-focus);outline-offset:var(--sloff-focus-offset)}
/* Buttons placed side by side in a row container keep their natural width; btn-block fills the row and wraps its label. */
body .elementor .e-con > .elementor-widget-button{width:auto}
body .elementor .e-con>.elementor-widget-button.btn-block{width:100%}
body .elementor .elementor-widget-button.btn-block a.elementor-button{display:flex;width:100%;white-space:normal}

/* Newsletter form: pill field and button, in one row from 640 px. Band colors set on the widget win. */
/* Pro prints a per-widget white field background with :not() selectors; this matches its specificity and more. */
body .elementor .elementor-element.elementor-widget-form.sloff-newsletter-form .elementor-field-group:not(.elementor-field-type-upload) .elementor-field:not(.elementor-select-wrapper){min-height:var(--sloff-button-h);padding:0 18px;border:1px solid var(--sloff-line-input);border-radius:var(--sloff-radius-pill);background:var(--sloff-bg);color:var(--sloff-text);font-family:var(--sloff-font);font-size:var(--sloff-fs-15)}
body .elementor .elementor-widget-form.sloff-newsletter-form .elementor-field-label{color:var(--sloff-text-muted);font-family:var(--sloff-font);font-size:var(--sloff-fs-13);font-weight:var(--sloff-fw-semibold)}
body .elementor .elementor-widget-form.sloff-newsletter-form .elementor-field-group>label.elementor-field-label{margin-bottom:8px;line-height:1.3}
/* One row once the form itself is wide enough (a container query, so a narrow card stacks too). */
body .elementor .elementor-widget-form.sloff-newsletter-form{container-type:inline-size}
@container (min-width:520px){
	body .elementor .elementor-widget-form.sloff-newsletter-form .elementor-form-fields-wrapper{flex-wrap:nowrap;align-items:flex-end}
	body .elementor .elementor-widget-form.sloff-newsletter-form .elementor-field-group{flex:1 1 0;width:auto;max-width:none}
	body .elementor .elementor-widget-form.sloff-newsletter-form .elementor-field-type-submit{flex:0 0 auto}
}
/* On the colored newsletter band, labels use the ink color for contrast. */
body .elementor .sloff-newsletter-band .elementor-widget-form.sloff-newsletter-form .elementor-field-label{color:var(--sloff-ink)}

/* Waiting cards: Elementor's saved per-widget label color can outrank the generic newsletter rule.
   These card-scoped selectors beat that generated selector even when its stylesheet loads later. */
body .elementor .sloff-films-waiting-panel .elementor-widget-form.sloff-films-waiting-form .elementor-field-group>label.elementor-field-label,
body .elementor .sloff-schedule-waiting-card .elementor-widget-form.sloff-schedule-inline-form .elementor-field-group>label.elementor-field-label{color:var(--sloff-text)}

/* Photo slots: an Image widget with class sloff-photo-slot stays hidden until staff choose a photo
   (Elementor shows its grey placeholder.png until then). Visible in the editor so staff can fill it. */
body:not(.elementor-editor-active) .elementor .elementor-widget-image.sloff-photo-slot:has(img[src*="placeholder.png"]),
body:not(.elementor-editor-active) .elementor .elementor-widget-image.sloff-photo-slot:not(:has(img)){display:none}

/* Photos crop to their slot instead of depending on the uploaded crop: 4:3 by default, wide banners
   21:9 on desktop and 4:3 on phones, never shorter than 160 px. */
body .elementor .elementor-widget-image.sloff-photo-slot img{display:block;width:100%;height:auto;aspect-ratio:4 / 3;object-fit:cover}
body .elementor .elementor-widget-image.sloff-photo-slot.sloff-photo-wide img{aspect-ratio:21 / 9}
body .elementor .elementor-widget-image.sloff-photo-slot.sloff-photo-wide img{min-height:160px}
@media (max-width:767px){body .elementor .elementor-widget-image.sloff-photo-slot.sloff-photo-wide img{aspect-ratio:4 / 3}}

/* Cards: the card look on a container, set through Elementor's own container variables so it doesn't
   depend on stylesheet order. Kept at two-class specificity: beats Elementor's .e-con defaults, and a
   card's own Style settings (padding, a highlight border) still win. */
.e-con.card{
	--padding-top:var(--sloff-space-4);--padding-right:var(--sloff-space-4);--padding-bottom:var(--sloff-space-4);--padding-left:var(--sloff-space-4);
	--border-radius:var(--sloff-radius-card);
	padding:var(--sloff-space-4);border:1px solid var(--sloff-line);border-radius:var(--sloff-radius-card);background-color:var(--sloff-surface-1);color:var(--sloff-text)
}
/* Card accents (Get Involved): card--lime / --orange / --pink / --neutral color the border, the eyebrow and
   the buttons; titles stay white. card--push-actions lines the buttons up at the bottom of equal-height cards. */
.e-con.card.card--lime{--sloff-card-accent:var(--sloff-fest-accent);--sloff-card-accent-ink:var(--sloff-fest-accent-ink)}
.e-con.card.card--orange{--sloff-card-accent:var(--sloff-palm-orange);--sloff-card-accent-ink:var(--sloff-palm-orange-ink)}
.e-con.card.card--pink{--sloff-card-accent:var(--sloff-fest-highlight);--sloff-card-accent-ink:var(--sloff-fest-highlight-ink)}
.e-con.card.card--neutral{--sloff-card-accent:var(--sloff-text);--sloff-card-accent-ink:var(--sloff-bg)}
.e-con.card:is(.card--lime,.card--orange,.card--pink,.card--neutral){border-color:var(--sloff-card-accent)}
body .elementor .e-con.card:is(.card--lime,.card--orange,.card--pink,.card--neutral) .elementor-widget-heading.eyebrow .elementor-heading-title{color:var(--sloff-card-accent)}
body .elementor .e-con.card:is(.card--lime,.card--orange,.card--pink,.card--neutral) .elementor-widget-button.btn-primary a.elementor-button{background:var(--sloff-card-accent);border-color:var(--sloff-card-accent);color:var(--sloff-card-accent-ink)}
body .elementor .e-con.card:is(.card--lime,.card--orange,.card--pink,.card--neutral) .elementor-widget-button.btn-secondary a.elementor-button{border-color:var(--sloff-card-accent);color:var(--sloff-card-accent)}
body .elementor .e-con.card:is(.card--lime,.card--orange,.card--pink,.card--neutral) .elementor-widget-button:is(.btn-primary,.btn-secondary) a.elementor-button:hover{filter:brightness(1.1)}
body .elementor .e-con.card:where(:is(.card--lime,.card--orange,.card--pink,.card--neutral)) .elementor-widget-heading:not(.eyebrow) .elementor-heading-title{color:var(--sloff-text)}
body .elementor .e-con.card.card--push-actions>.elementor-widget-button:not(.elementor-widget-button~.elementor-widget-button),body .elementor .e-con.card.card--push-actions>.e-con:last-child{margin-top:auto}
/* sloff-card-link: a text link in a card, in the card's accent (e.g. "thepalmtheatre.com ↗" in About's orange card). */
body .elementor .e-con.card .elementor-widget-text-editor.sloff-card-link a{color:var(--sloff-card-accent,var(--sloff-fest-accent));font-weight:var(--sloff-fw-extrabold);text-decoration:none}
body .elementor .e-con.card .elementor-widget-text-editor.sloff-card-link a:hover{text-decoration:underline}
/* Link cards (a card container whose Link is set, class sloff-link-card): an arrow at the right edge, accent border on hover. */
body .elementor .e-con.card.sloff-link-card{position:relative}
body .elementor .e-con.card.sloff-link-card>.elementor-element{padding-right:28px}
body .elementor .e-con.card.sloff-link-card::after{content:"→";position:absolute;top:50%;right:var(--sloff-space-5);translate:0 -50%;color:var(--sloff-fest-accent);font-weight:var(--sloff-fw-extrabold)}
body .elementor a.e-con.card.sloff-link-card:hover{border-color:var(--sloff-fest-accent)}
/* Chips (text editor with class sloff-chips): each list item is a pill, e.g. the King Vidor honorees on About. */
body .elementor .elementor-widget-text-editor.sloff-chips ul{display:flex;flex-wrap:wrap;gap:var(--sloff-space-2);margin:0;padding:0;list-style:none}
body .elementor .elementor-widget-text-editor.sloff-chips li{padding:5px var(--sloff-space-pill-x);border:1px solid var(--sloff-line-strong);border-radius:var(--sloff-radius-pill);color:var(--sloff-text);font-size:var(--sloff-fs-12);font-weight:var(--sloff-fw-bold);line-height:var(--sloff-lh-snug)}
/* People (container class sloff-person: photo, name, role). The photo is a square that stays as a dark tile until staff choose one. */
body .elementor .e-con.sloff-person .elementor-widget-image.sloff-person-photo img{display:block;width:100%;height:auto;aspect-ratio:1;object-fit:cover;border-radius:var(--sloff-radius-card);background:var(--sloff-surface-3)}
body .elementor .e-con.sloff-person .elementor-widget-image.sloff-person-photo img[src*="placeholder.png"]{opacity:0}
body .elementor .e-con.sloff-person .elementor-widget-image.sloff-person-photo .elementor-widget-container{border-radius:var(--sloff-radius-card);background:var(--sloff-surface-3)}
body .elementor .e-con.sloff-person .elementor-widget-heading .elementor-heading-title{color:var(--sloff-text);font-family:var(--sloff-font);font-size:var(--sloff-fs-13);font-weight:var(--sloff-fw-extrabold);letter-spacing:0}
body .elementor .e-con.sloff-person .elementor-widget-text-editor{font-size:var(--sloff-fs-12);line-height:var(--sloff-lh-snug)}
/* Phone-only layout helpers (767 px = Elementor's mobile breakpoint): sloff-phone-only / sloff-hide-phone swap a compact
   phone variant for the full one; sloff-contents-phone dissolves a column so its children can be reordered (Order, Mobile). */
@media (max-width:767px){body .elementor .elementor-element.sloff-hide-phone{display:none}body .elementor .e-con.sloff-contents-phone{display:contents}}
@media (min-width:768px){body .elementor .elementor-element.sloff-phone-only{display:none}}
/* A container that only holds an empty photo slot hides too, so the column next to it takes the width. */
body:not(.elementor-editor-active) .elementor .e-con:has(> .elementor-widget-image.sloff-photo-slot:only-child img[src*="placeholder.png"]){display:none}

/* Search Form widget (classic skin) with class sloff-search-form: dark pill field, lime Search button. */
body .elementor .elementor-widget-search-form.sloff-search-form .elementor-search-form__container{min-height:var(--sloff-button-h);overflow:hidden;border:1px solid var(--sloff-line-input);background:var(--sloff-surface-1);border-radius:var(--sloff-radius-pill)}
body .elementor .elementor-widget-search-form.sloff-search-form .elementor-search-form__input{padding:0 18px;border:0;background:transparent;color:var(--sloff-text);font-family:var(--sloff-font);font-size:var(--sloff-fs-15)}
body .elementor .elementor-widget-search-form.sloff-search-form .elementor-search-form__input::placeholder{color:var(--sloff-text-muted);opacity:1}
body .elementor .elementor-widget-search-form.sloff-search-form .elementor-search-form__submit{min-width:0;margin:4px;padding:0 var(--sloff-space-button-x);border-radius:var(--sloff-radius-pill);background:var(--sloff-fest-accent);color:var(--sloff-fest-accent-ink);font-family:var(--sloff-font);font-size:var(--sloff-fs-14);font-weight:var(--sloff-fw-extrabold);letter-spacing:var(--sloff-ls-button);text-transform:uppercase}
body .elementor .elementor-widget-search-form.sloff-search-form .elementor-search-form__submit:hover{background:var(--sloff-fest-accent-hover)}
body .elementor .elementor-widget-search-form.sloff-search-form .elementor-search-form__container:focus-within{outline:var(--sloff-focus-w) solid var(--sloff-focus);outline-offset:var(--sloff-focus-offset)}
/* Needs content: an element with class sloff-needs-content is a placeholder staff still have to fill. Hidden on
   the live page; the editor outlines it and labels it (::after, since containers use ::before for overlays). */
body:not(.elementor-editor-active) .elementor .elementor-element.sloff-needs-content,body:not(.elementor-editor-active) .elementor .elementor-element .sloff-needs-content{display:none}
body.elementor-editor-active .elementor .elementor-element.sloff-needs-content,body.elementor-editor-active .elementor .elementor-element .sloff-needs-content{position:relative;outline:2px dashed var(--sloff-warning);outline-offset:2px}
body.elementor-editor-active .elementor .elementor-element.sloff-needs-content::after,body.elementor-editor-active .elementor .elementor-element .sloff-needs-content::after{content:"Needs content";position:absolute;top:0;right:0;z-index:2;padding:2px 8px;background:var(--sloff-warning);color:var(--sloff-ink);font:var(--sloff-fw-bold) var(--sloff-fs-11)/1.4 var(--sloff-font)}

/* Newsletter band: every heading and paragraph uses the ink color on the band (the per-widget accent
   and muted colors disappear on pink). */
body .elementor .sloff-newsletter-band .elementor-widget-heading .elementor-heading-title.elementor-heading-title,
body .elementor .sloff-newsletter-band .elementor-widget-text-editor.elementor-widget-text-editor{color:var(--sloff-ink)}
/* A top-level page section whose widgets all printed nothing (e.g. the sponsor strip before any sponsors exist) takes no space on the live page; the editor still shows it. */
body:not(.elementor-editor-active) .elementor[data-elementor-type="wp-page"] > .e-con.e-parent:not(:has(*)){display:none}
/* Home: the Submissions card (class sloff-hero-panel-twin) steps aside on desktop only while the Festival Hero prints its Submissions panel (mockup 112). Once every deadline has passed the hero prints no panel and the card comes back. 1025 px = Elementor's desktop (default tablet breakpoint 1024). */
@media (min-width:1025px){body:not(.elementor-editor-active):has(.sloff-hero--panel) .sloff-hero-panel-twin{display:none}}
/* The full Submissions card: one steady rhythm (eyebrow, title, line, pills, buttons) and an art strip that sits flush at the bottom. */
.sloff-hero-panel-twin .card>.elementor-widget{margin:0}
.sloff-hero-panel-twin .card .eyebrow,.sloff-hero-panel-twin .card .eyebrow *{margin:0}
.sloff-hero-panel-twin .card h2{margin:0;line-height:1.1}
.sloff-hero-panel-twin .card .muted p{margin:0}
.sloff-hero-panel-twin .card .sloff-deadlines--compact{margin-top:8px}
.sloff-hero-panel-twin .card .sloff-deadlines__list{grid-template-columns:repeat(auto-fit,minmax(min(100%,92px),1fr))}
.sloff-hero-panel-twin .card .sloff-brand-art{margin-top:var(--sloff-space-2,8px);border-radius:var(--sloff-radius-control,12px);overflow:hidden}

/* Tiles keep their compatibility classes. Final poster artwork and optional Palmie images stay in flow below the copy. */
body .elementor .e-con.sloff-tile{--sloff-tile-accent:var(--sloff-fest-accent);--sloff-tile-zone:0px;position:relative;isolation:isolate;overflow:hidden;min-height:calc(var(--sloff-tap-min) * 2);padding-bottom:calc(var(--padding-bottom, var(--sloff-space-4)) + var(--sloff-tile-zone));transition:translate .18s ease,border-color .18s ease}
body .elementor .e-con.sloff-tile:hover{translate:0 -3px;border-color:var(--sloff-tile-accent)}
body .elementor a.e-con.sloff-tile:focus-visible{outline:var(--sloff-focus-w) solid var(--sloff-tile-accent);outline-offset:var(--sloff-focus-offset)}
body .elementor .e-con.sloff-tile.sloff-tile--sun{--sloff-tile-accent:var(--sloff-fest-accent)}

body .elementor .e-con.sloff-tile.sloff-tile--checker{--sloff-tile-accent:var(--sloff-fest-sage)}

body .elementor .e-con.sloff-tile.sloff-tile--bars{--sloff-tile-accent:var(--sloff-fest-orange)}

body .elementor .e-con.sloff-tile.sloff-tile--band{--sloff-tile-accent:var(--sloff-fest-highlight)}

body .elementor .e-con.sloff-tile > .elementor-widget-image.sloff-tile-art{position:relative;align-self:flex-end;z-index:0;width:55%;margin:var(--sloff-space-3) var(--sloff-space-2) var(--sloff-space-3) 0;pointer-events:none;transition:translate .18s ease}
body .elementor .e-con.sloff-tile > .elementor-widget-image.sloff-tile-art img{width:100%;max-width:100%;height:auto;aspect-ratio:auto;object-fit:contain;border-radius:var(--sloff-radius-control);box-shadow:0 6px 18px var(--sloff-scrim);transform:rotate(-5deg)}
body .elementor .e-con.sloff-tile:hover > .elementor-widget-image.sloff-tile-art{translate:0 -3px}
body .elementor .e-con.sloff-tile:has(> .elementor-widget-image.sloff-tile-art img:not([src*="placeholder.png"])){padding-bottom:var(--padding-bottom,var(--sloff-space-4))}
body .elementor .e-con.sloff-tile:has(> .elementor-widget-image.sloff-tile-art img:not([src*="placeholder.png"]))::after{display:none}
@media (prefers-reduced-motion:reduce){body .elementor .e-con.sloff-tile,body .elementor .e-con.sloff-tile::after,body .elementor .e-con.sloff-tile > .elementor-widget-image.sloff-tile-art{transition:none}body .elementor .e-con.sloff-tile:hover,body .elementor .e-con.sloff-tile:hover > .elementor-widget-image.sloff-tile-art{translate:none}body .elementor .e-con.sloff-tile:hover::after{scale:none}}
/* Photo mosaic: the lead photo (Image widget with classes sloff-photo-slot sloff-photo-lead) fills the height of the grid beside it, so both columns end on the same line. Phones keep its 4:3 shape. */
@media (min-width:768px){body .elementor .e-con:has(> .elementor-widget-image.sloff-photo-lead){align-self:stretch}body .elementor .elementor-widget-image.sloff-photo-lead{position:relative;flex:1 1 auto;min-height:240px}body .elementor .elementor-widget-image.sloff-photo-slot.sloff-photo-lead img{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto;object-fit:cover}}
/* Card widgets (Palm strip, compact Archive Year, Deadlines) take the container's full width. Without a definite width, a column container measures them at their unconstrained width first, so on phones the card kept 70-300 px of empty space below its content. The per-widget Width control still wins through its variable. */
body .elementor .e-con>.elementor-widget-sloff-palm-strip,body .elementor .e-con>.elementor-widget-sloff-archive-year,body .elementor .e-con>.elementor-widget-sloff-deadlines{width:var(--container-widget-width,100%)}

/* Films, Schedule, Passes and News/Search templates (T44). */
body .elementor .e-con.sloff-films-waiting-panel:has(.sloff-lineup-soon){padding:var(--sloff-space-5);border:1px solid var(--sloff-line);border-radius:var(--sloff-radius-card);background:var(--sloff-surface-1)}
body .elementor .sloff-lineup-soon{max-width:var(--sloff-measure);margin:0 auto;text-align:center}
body .elementor .sloff-lineup-soon h2{margin:0 0 var(--sloff-space-3);color:var(--sloff-text);font-family:var(--sloff-font);font-size:var(--sloff-fs-24);font-weight:var(--sloff-fw-extrabold);text-transform:none}
body .elementor .sloff-lineup-soon__copy,body .elementor .sloff-lineup-soon__announced{color:var(--sloff-text-muted)}
body .elementor .sloff-lineup-archive{margin-block:var(--sloff-space-6)}
body .elementor .sloff-lineup-archive h2{margin:0 0 var(--sloff-space-4);font-family:var(--sloff-font);font-size:var(--sloff-fs-22);font-weight:var(--sloff-fw-extrabold);text-transform:uppercase}
body .elementor .sloff-lineup-archive__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--sloff-space-4)}
body .elementor .sloff-lineup-archive__card>a{display:flex;height:100%;flex-direction:column;gap:var(--sloff-space-2);color:var(--sloff-text);text-decoration:none}
body .elementor .sloff-lineup-archive__image{display:block;width:100%;height:auto;aspect-ratio:3 / 4;object-fit:cover;border-radius:var(--sloff-radius-control);background:var(--sloff-surface-3)}
body .elementor .sloff-lineup-archive__title{font-weight:var(--sloff-fw-bold)}
body .elementor .sloff-lineup-archive__meta{color:var(--sloff-text-muted);font-size:var(--sloff-fs-12)}
body .elementor .e-con.sloff-schedule-waiting-card:not(:has(.sloff-schedule--waiting)){display:none}
body .elementor .sloff-schedule-meanwhile{margin-block:var(--sloff-space-5)}
body .elementor .sloff-schedule-meanwhile>h2{margin:0 0 var(--sloff-space-3);font-family:var(--sloff-font);font-size:var(--sloff-fs-22);font-weight:var(--sloff-fw-extrabold);text-transform:uppercase}
body .elementor .sloff-schedule-meanwhile__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sloff-space-3)}
body .elementor .sloff-schedule-meanwhile__card{height:100%;padding:var(--sloff-space-4);border:1px solid var(--sloff-line);border-radius:var(--sloff-radius-card);background:var(--sloff-surface-1)}
body .elementor .sloff-schedule-meanwhile__card>a{display:flex;height:100%;flex-direction:column;gap:var(--sloff-space-2);color:var(--sloff-text);text-decoration:none}
body .elementor .sloff-schedule-meanwhile__title{font-weight:var(--sloff-fw-extrabold)}
body .elementor .sloff-schedule-meanwhile__copy{color:var(--sloff-text-muted)}
body .elementor .sloff-schedule-meanwhile__action{margin-top:auto;color:var(--sloff-fest-accent);font-size:var(--sloff-fs-13);font-weight:var(--sloff-fw-extrabold);text-transform:uppercase}
body .elementor .sloff-schedule-app-band{margin-block:var(--sloff-space-6)}
body .elementor .sloff-schedule-page:not(:has(.sloff-schedule--waiting)) .sloff-schedule-waiting-only{display:none}
/* The Schedule subscribe form is a sibling of the waiting widget. Put the complete surface on their
   shared container and explicitly size both flex items; these selectors outrank Elementor's generated
   page and per-element rules even when its stylesheet is loaded after the bridge. */
body .elementor .sloff-schedule-page .e-con.sloff-schedule-waiting-card:has(>.elementor-widget-sloff-schedule .sloff-schedule--waiting){display:flex;flex-direction:row;flex-wrap:nowrap;align-items:stretch;gap:var(--sloff-space-3);box-sizing:border-box;padding:var(--sloff-space-5);border:1px solid var(--sloff-line);border-radius:var(--sloff-radius-panel);background:var(--sloff-surface-1)}
body .elementor .sloff-schedule-page .e-con.sloff-schedule-waiting-card:has(>.elementor-widget-sloff-schedule .sloff-schedule--waiting)>.elementor-widget-sloff-schedule{flex:1 1 0%;min-width:0}
body .elementor .sloff-schedule-page .e-con.sloff-schedule-waiting-card:has(>.elementor-widget-sloff-schedule .sloff-schedule--waiting)>.elementor-widget-form.sloff-schedule-inline-form{display:block;flex:0 0 clamp(320px,30%,380px);width:auto;min-width:0}
body .elementor .sloff-schedule-page .e-con.sloff-schedule-waiting-card>.elementor-widget-sloff-schedule .sloff-schedule--waiting{box-sizing:border-box;width:100%;min-height:0;padding:0;border:0;border-radius:0;background:transparent}
@media(max-width:767px){body .elementor .sloff-schedule-page .e-con.sloff-schedule-waiting-card:has(>.elementor-widget-sloff-schedule .sloff-schedule--waiting){flex-direction:column;flex-wrap:nowrap;align-items:stretch;padding:var(--sloff-space-4)}body .elementor .sloff-schedule-page .e-con.sloff-schedule-waiting-card:has(>.elementor-widget-sloff-schedule .sloff-schedule--waiting)>.elementor-widget-sloff-schedule{flex:0 1 auto}body .elementor .sloff-schedule-page .e-con.sloff-schedule-waiting-card:has(>.elementor-widget-sloff-schedule .sloff-schedule--waiting)>.elementor-widget-form.sloff-schedule-inline-form{flex:0 0 auto;width:100%}}
body .elementor .sloff-theme-news .sloff-news-filters,body .elementor .sloff-theme-search .sloff-search-filters{display:flex;flex-wrap:wrap;gap:var(--sloff-space-2)}
body .elementor .sloff-theme-news .elementor-widget-button.sloff-news-filter,body .elementor .sloff-theme-search .elementor-widget-button.sloff-search-filter{width:auto}
body .elementor .sloff-theme-news .elementor-widget-button.sloff-news-filter .elementor-button,body .elementor .sloff-theme-search .elementor-widget-button.sloff-search-filter .elementor-button{min-height:36px;padding-inline:var(--sloff-space-3);border-color:var(--sloff-line-strong);background:transparent;color:var(--sloff-text);font-size:var(--sloff-fs-12)}
body.blog .elementor .sloff-theme-news .sloff-news-filter--all .elementor-button,body.category-news .elementor .sloff-theme-news .sloff-news-filter--news .elementor-button,body.category-press .elementor .sloff-theme-news .sloff-news-filter--press .elementor-button{background:var(--sloff-text);border-color:var(--sloff-text);color:var(--sloff-bg)}
body.search.sloff-search-all .elementor .sloff-theme-search .sloff-search-filter--all .elementor-button,body.search.sloff-search-pages .elementor .sloff-theme-search .sloff-search-filter--pages .elementor-button,body.search.sloff-search-posts .elementor .sloff-theme-search .sloff-search-filter--posts .elementor-button{background:var(--sloff-text);border-color:var(--sloff-text);color:var(--sloff-bg)}
body .elementor .sloff-theme-news .sloff-news-loop .elementor-posts-container{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sloff-space-5)}
body .elementor .sloff-theme-news .sloff-news-loop .elementor-post{display:flex;min-width:0;flex-direction:column;padding:0 0 var(--sloff-space-3);border-bottom:1px solid var(--sloff-line)}
body .elementor .sloff-theme-news .sloff-news-loop .elementor-post:first-child{grid-column:span 2;grid-row:span 2}
body .elementor .sloff-theme-news .sloff-news-loop .elementor-post:nth-child(2),body .elementor .sloff-theme-news .sloff-news-loop .elementor-post:nth-child(3){display:grid;grid-template-columns:minmax(96px,34%) minmax(0,1fr);align-content:start;gap:var(--sloff-space-3)}
body .elementor .sloff-theme-news .elementor-post__thumbnail__link{display:block;width:100%;overflow:hidden;border-radius:var(--sloff-radius-control)}
body .elementor .sloff-theme-news .elementor-post__thumbnail img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover}
body .elementor .sloff-theme-news .elementor-post__text{min-width:0}
body .elementor .sloff-theme-news .elementor-post__meta-data{margin:0 0 var(--sloff-space-2);color:var(--sloff-fest-highlight);font-size:var(--sloff-fs-11);font-weight:var(--sloff-fw-extrabold);letter-spacing:var(--sloff-ls-eyebrow);text-transform:uppercase}
body .elementor .sloff-theme-news .elementor-post__title{margin:0 0 var(--sloff-space-2);font-size:var(--sloff-fs-20);line-height:var(--sloff-lh-snug)}
body .elementor .sloff-theme-news .elementor-post:first-child .elementor-post__title{font-size:var(--sloff-fs-30)}
body .elementor .sloff-theme-news .elementor-post__title a{color:var(--sloff-text);text-decoration:none}
body .elementor .sloff-theme-news .elementor-post__excerpt{color:var(--sloff-text-muted)}
body .elementor .sloff-theme-news .elementor-pagination{display:flex;justify-content:center;gap:var(--sloff-space-2);margin-top:var(--sloff-space-5)}
body .elementor .sloff-theme-news .elementor-pagination .page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;min-height:40px;padding:0 var(--sloff-space-3);border:1px solid var(--sloff-line-strong);border-radius:var(--sloff-radius-pill);color:var(--sloff-text);text-decoration:none}
body .elementor .sloff-theme-news .elementor-pagination .page-numbers.current{background:var(--sloff-text);border-color:var(--sloff-text);color:var(--sloff-bg)}
body .elementor .sloff-theme-news .elementor-post__read-more{display:none}
body .elementor .sloff-theme-single-post .sloff-news-back .elementor-button{padding:0;border:0;background:transparent;color:var(--sloff-fest-accent);text-transform:none}
body .elementor .sloff-theme-single-post .elementor-widget-theme-post-title{max-width:760px}
body .elementor .sloff-theme-single-post .sloff-post-featured-image img{display:block;width:100%;max-height:680px;object-fit:cover}
body .elementor .sloff-theme-single-post .sloff-post-content{max-width:760px;margin-inline:auto}
body .elementor .sloff-theme-single-post .sloff-post-content .elementor-widget-container{max-width:760px;margin-inline:auto}
body .elementor .sloff-theme-single-post .sloff-post-share-row{display:flex;align-items:center;gap:var(--sloff-space-3)}
body .elementor .sloff-theme-single-post .sloff-post-share-label{margin:0}
body .elementor .sloff-theme-single-post blockquote{margin:var(--sloff-space-5) 0;padding:var(--sloff-space-3) var(--sloff-space-4);border-left:4px solid var(--sloff-fest-accent);color:var(--sloff-text);font-size:var(--sloff-fs-22);font-weight:var(--sloff-fw-bold)}
body .elementor .sloff-theme-search .sloff-search-results .elementor-posts-container{display:block}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post{display:grid;grid-template-columns:minmax(96px,18%) minmax(0,1fr);gap:var(--sloff-space-3);padding:var(--sloff-space-4) 0;border-bottom:1px solid var(--sloff-line)}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post__thumbnail__link{grid-row:span 2;overflow:hidden;border-radius:var(--sloff-radius-control)}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post__thumbnail img{display:block;width:100%;aspect-ratio:4 / 3;object-fit:cover}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post__title{margin:0;font-size:var(--sloff-fs-20)}
body .elementor .sloff-theme-search .sloff-search-results .elementor-posts-nothing-found{display:none}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post.type-page .elementor-post__meta-data::before{content:"PAGE";margin-right:var(--sloff-space-2);color:var(--sloff-fest-highlight);font-weight:var(--sloff-fw-extrabold);letter-spacing:var(--sloff-ls-eyebrow)}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post.type-post .elementor-post__meta-data::before{content:"NEWS";margin-right:var(--sloff-space-2);color:var(--sloff-fest-highlight);font-weight:var(--sloff-fw-extrabold);letter-spacing:var(--sloff-ls-eyebrow)}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post__title a{color:var(--sloff-text);text-decoration:none}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post__meta-data,body .elementor .sloff-theme-search .sloff-search-results .elementor-post__excerpt{grid-column:2;color:var(--sloff-text-muted)}
body .elementor .sloff-theme-search .sloff-search-results .elementor-post__read-more{display:none}
body .elementor .sloff-theme-search .sloff-search-no-results{display:none}
body .elementor .sloff-theme-search .sloff-search-results:has(.elementor-posts-nothing-found)+.elementor-element.sloff-search-no-results{display:flex}
body .elementor .sloff-theme-search .sloff-search-no-results__actions{display:flex;flex-wrap:wrap;gap:var(--sloff-space-3)}
body .elementor .sloff-theme-search mark{background:transparent;color:var(--sloff-fest-highlight);font-weight:var(--sloff-fw-extrabold)}
body .elementor .sloff-theme-404 .sloff-404-sunburst{display:block;width:min(255px,60vw);height:auto;margin:0 auto var(--sloff-space-4)}
body .elementor .sloff-theme-404 .sloff-404-actions{display:flex;flex-wrap:wrap;gap:var(--sloff-space-3)}
@media (max-width:767px){
 body .elementor .sloff-lineup-archive__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
 body .elementor .sloff-schedule-meanwhile__grid{grid-template-columns:1fr}
 body .elementor .sloff-schedule-waiting-only.sloff-schedule-app-band{display:none}
 body .elementor .sloff-theme-news .sloff-news-loop .elementor-posts-container{display:block}
 body .elementor .sloff-theme-news .sloff-news-loop .elementor-post,body .elementor .sloff-theme-news .sloff-news-loop .elementor-post:first-child,body .elementor .sloff-theme-news .sloff-news-loop .elementor-post:nth-child(2),body .elementor .sloff-theme-news .sloff-news-loop .elementor-post:nth-child(3){display:grid;grid-template-columns:minmax(84px,25%) minmax(0,1fr);grid-column:auto;grid-row:auto;gap:var(--sloff-space-3);padding-block:var(--sloff-space-3)}
 body .elementor .sloff-theme-news .sloff-news-loop .elementor-post__thumbnail__link{grid-row:span 2;align-self:start}
 body .elementor .sloff-theme-news .sloff-news-loop .elementor-post__thumbnail img{aspect-ratio:1;object-fit:cover}
 body .elementor .sloff-theme-news .sloff-news-loop .elementor-post__title,body .elementor .sloff-theme-news .sloff-news-loop .elementor-post:first-child .elementor-post__title{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:var(--sloff-fs-16)}
 body .elementor .sloff-theme-news .sloff-news-loop .elementor-post__excerpt{display:none}
 body .elementor .sloff-theme-search .sloff-search-results .elementor-post{grid-template-columns:72px minmax(0,1fr)}
 body .elementor .sloff-theme-search .sloff-search-no-results__actions{flex-direction:column;align-items:stretch}
 body .elementor .sloff-theme-search .sloff-search-no-results__actions>.elementor-widget-button,body .elementor .sloff-theme-search .sloff-search-no-results__actions>.elementor-widget-button .elementor-button{width:100%}
 body .elementor .sloff-theme-404 .sloff-404-actions{flex-direction:column;align-items:stretch}
 body .elementor .sloff-theme-404 .sloff-404-actions>.elementor-widget-button,body .elementor .sloff-theme-404 .sloff-404-actions>.elementor-widget-button .elementor-button{width:100%}
}

body .elementor .sloff-rules :is(p,li){position:relative;margin:0;padding:var(--sloff-space-3) 0 var(--sloff-space-3) var(--sloff-space-5)}
body .elementor .sloff-rules :is(p,li)::before{content:"";position:absolute;left:0;top:calc(var(--sloff-space-3) + .5lh - 3px);width:6px;height:6px;border-radius:50%;background:var(--sloff-fest-accent)}
body .elementor .sloff-rules :is(p,li)+:is(p,li){border-top:1px solid var(--sloff-line)}
body .elementor .sloff-rules :is(ul,ol){list-style:none;margin:0;padding:0}
body .elementor .sloff-prizes .sloff-prizes__label{margin:var(--sloff-space-4) 0 var(--sloff-space-2);font-size:var(--sloff-fs-13);font-weight:var(--sloff-fw-extrabold);text-transform:uppercase;color:var(--sloff-fest-accent)}
body .elementor .sloff-prizes .sloff-prizes__label:first-child{margin-top:0}
body .elementor .sloff-prizes .sloff-prizes__rows{list-style:none;margin:0;padding:0}
body .elementor .sloff-prizes .sloff-prizes__rows>li{display:flex;justify-content:space-between;gap:var(--sloff-space-3);padding-block:var(--sloff-space-3)}
body .elementor .sloff-prizes .sloff-prizes__rows>li+li{border-top:1px solid var(--sloff-line)}
body .elementor .sloff-prizes .sloff-prizes__amount{flex:none;font-variant-numeric:tabular-nums;color:var(--sloff-text);font-weight:var(--sloff-fw-extrabold)}
body .elementor .sloff-prizes .sloff-prizes__categories{display:flex;flex-wrap:wrap;gap:var(--sloff-space-2);margin:0}
body .elementor .sloff-prizes .sloff-prizes__categories>span{padding:var(--sloff-space-1) var(--sloff-space-2);border:1px solid var(--sloff-line);border-radius:var(--sloff-radius-control)}
@media(max-width:767px){body .elementor .e-con.sloff-tile>.elementor-widget-image.sloff-tile-art{width:40%}}

/* Supplied poster art, editable with the Festival artwork widget and natively lazy-loaded. */
body .elementor .e-con.sloff-tile::after{content:none}
body .elementor .e-con.card{position:relative;isolation:isolate}
body .elementor .e-con>.elementor-widget-sloff-brand-art.sloff-poster-decoration{position:relative;align-self:flex-end;width:96px;margin-top:auto;pointer-events:none}
body .elementor .e-con>.elementor-widget-sloff-brand-art.sloff-poster-decoration picture{width:100%}
body .elementor .sloff-404-sun-widget{width:min(240px,60vw)}
body .elementor .sloff-404-sun-widget .sloff-brand-art{max-width:240px;margin-inline:auto}
body .elementor .card--push-actions>.elementor-widget-sloff-brand-art.sloff-poster-decoration{margin-top:var(--sloff-space-4)}

body .elementor .e-con.sloff-tile:has(>.elementor-widget-image.sloff-tile-art img:not([src*="placeholder.png"]))>.elementor-widget-sloff-brand-art.sloff-poster-decoration{display:none}

body .elementor .sloff-waiting-art{display:block;width:120px;margin:0 0 var(--sloff-space-4)}
body .elementor .sloff-waiting-art img{display:block;width:100%;height:auto}
