/*
 Theme Name:   Rossi Fest Child (OceanWP)
 Theme URI:    https://rossifest.estrela.io
 Description:  Child theme of OceanWP for Rossi Fest. Adds page templates
               (Front Page, Yearly Edition, Call for Composers, Standard
               Page, Event Page, Biography/Team) plus a custom 404, all
               matching the site's typography spec (centered H1/H5,
               justified body copy) and the structure produced by the Wix
               migration scripts (fix_heading_levels.py, fix_bio_layout.py,
               fix_photo_galleries.py). Inherits OceanWP's own styling/
               Customizer settings as-is.
 Author:       Rossi Fest
 Author URI:   https://rossifest.estrela.io
 Template:     oceanwp
 Version:      1.4.13
 Text Domain:  rossifest-child
*/

/* ==========================================================================
   Shared typography rules, per template. Each template file adds its own
   body class via add_filter('body_class', ...) - see the top of each
   page-templates/*.php file. Kept in one place here (rather than split
   across each template's own <style> block) so the whole typography spec
   is visible/editable in one file.

   These are *content-area defaults*, not !important overrides - a block
   editor author can still manually set a different alignment on any
   individual block (Gutenberg's has-text-align-* classes are more
   specific than these bare element selectors and will win).
   ========================================================================== */

/* Front Page: hero H1/H5 centered, hero paragraph justified. Section
   headings (H2) and their paragraphs are left as normal (default/left)
   per spec - only the hero block is centered. */
body.rf-front-page .entry-content > h1:first-of-type,
body.rf-front-page .entry-content .rf-hero h1 {
	text-align: center;
}
body.rf-front-page .entry-content > h5:first-of-type,
body.rf-front-page .entry-content .rf-hero h5 {
	text-align: center;
}
body.rf-front-page .entry-content .rf-hero > p {
	text-align: justify;
}

/* Front Page: team/bios. Deliberately no special styling here - these use
   the exact same photo-left/text-right wp:columns pattern as every other
   bio on the site (see fix_bio_layout.py), just stacked one row per
   person, so they need to look identical to bios on the other pages
   rather than a distinct grid/card treatment. Only spacing between
   consecutive bio rows is added. */
body.rf-front-page .entry-content > .wp-block-columns + .wp-block-columns {
	margin-top: 2rem;
}

/* Front Page: contact section - "simple label only, no heading hierarchy"
   means just a short label line, not an H2/H3. Apply this class to
   whatever paragraph/label introduces the form. */
body.rf-front-page .rf-contact-label {
	font-weight: 600;
	text-align: center;
	margin-bottom: 1rem;
}

/* Yearly Edition: centered H1/H5, justified theme paragraph. */
body.rf-year-page .entry-content > h1:first-of-type {
	text-align: center;
}
body.rf-year-page .entry-content > h5:first-of-type {
	text-align: center;
}
body.rf-year-page .entry-content > p {
	text-align: justify;
}

/* Yearly Edition: chronological program list (built by the template's own
   PHP, not manually authored - see page-templates/template-year.php). */
body.rf-year-page .rf-program-list {
	list-style: none;
	margin: 1.5rem 0;
	padding: 0;
}
body.rf-year-page .rf-program-list li {
	display: flex;
	gap: 1rem;
	padding: 0.6rem 0;
	border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}
body.rf-year-page .rf-program-list .rf-program-date {
	flex: 0 0 140px;
	opacity: 0.75;
}
body.rf-year-page .rf-program-list .rf-program-title a {
	font-weight: 600;
}
body.rf-year-page .rf-sponsors-link {
	text-align: center;
	margin-top: 2rem;
}

/* Call for Composers: centered H1/H5, longest justified paragraphs on the
   site, two-column split (author with a regular Columns block - left
   column "Uslovi i rokovi", right column "Žiri i izvođači" - no special
   class needed, core column styling + this template's justify default
   is enough), and one centered CTA button. Apply the extra CSS class
   "rf-cta-button" to a Buttons block in the editor for the centered/
   sized treatment. */
body.rf-composers-page .entry-content > h1:first-of-type {
	text-align: center;
}
body.rf-composers-page .entry-content > h5:first-of-type {
	text-align: center;
}
body.rf-composers-page .entry-content p {
	text-align: justify;
}
body.rf-composers-page .rf-cta-button {
	text-align: center;
	margin: 2.5rem 0;
}
body.rf-composers-page .rf-cta-button .wp-block-button__link {
	font-size: 1.1rem;
	padding: 0.9em 2.2em;
}

/* Standard Page: the plainest template - centered H1, justified body,
   nothing else. */
body.rf-standard-page .entry-content > h1:first-of-type {
	text-align: center;
}
body.rf-standard-page .entry-content p {
	text-align: justify;
}

/* Event Page: centered H1/H5, justified description. The "Program" (right)
   / "Participants and Biographies" (left) split is authored content - use
   a Columns block with two columns; put the bios (photo+name+role, same
   pattern as fix_bio_layout.py already produces) in the LEFT column and
   the concert program in the RIGHT column. A photo gallery goes at the
   bottom, added separately once photos are curated (see
   fix_photo_galleries.py / the photo-review page). */
body.rf-event-page .entry-content > h1:first-of-type {
	text-align: center;
}
body.rf-event-page .entry-content > h5:first-of-type {
	text-align: center;
}
body.rf-event-page .entry-content > p {
	text-align: justify;
}
body.rf-event-page .rf-related-events {
	margin-top: 2.5rem;
	padding-top: 1.5rem;
	border-top: 1px solid rgba(0, 0, 0, 0.08);
}

/* 404: centered H1 stands in for the error message, minimal supporting
   text, one centered button home. The least structured template. */
body.rf-404-page .rf-404-wrap {
	text-align: center;
	padding: 4rem 1rem;
}
body.rf-404-page .rf-404-wrap h1 {
	margin-bottom: 0.75rem;
}
body.rf-404-page .rf-404-wrap p {
	opacity: 0.75;
	margin-bottom: 2rem;
}

/* ==========================================================================
   Concert page modules (Portreti i sećanja)
   Used by pages whose content is wrapped in a Group block with the class
   "rf-concert" (prepared by design/portreti-i-secanja/wp/prepare_2026.py).
   STRUCTURE ONLY: colours, fonts and links come from the theme (OceanWP
   Customizer). Lines use a neutral semi-transparent grey so they work with
   any theme colour. Every module is a core block with a class name, so it
   stays editable in the block editor.
   Design reference: design/portreti-i-secanja/index.html
   ========================================================================== */
.rf-concert { --rf-line: rgba(127, 127, 127, .3); }
.rf-concert p { margin: 0; }

/* 1 hero */
.rf-concert .rf-c-hero { padding: 8px 0 32px; }
.rf-concert .rf-c-eyebrow { font-size: 13px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; margin-bottom: 14px; }
.rf-concert h1.rf-c-title { text-align: left; margin: 0; line-height: 1.1; }
.rf-concert .rf-c-theme { font-size: 1.5em; opacity: .85; margin-top: 10px; }
.rf-concert .rf-c-when { font-size: 1.15em; margin-top: 18px; }

/* label + value pairs (credits, key facts, choir line-up) */
.rf-concert .rf-c-label { font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; opacity: .7; }
.rf-concert .rf-c-value { margin-top: 4px; font-size: 1.1em; line-height: 1.4; }

.rf-concert .rf-c-credits { margin: 22px 0 0; padding: 16px 0; border-top: 1px solid var(--rf-line); border-bottom: 1px solid var(--rf-line); gap: 16px 40px; }
.rf-concert .rf-c-credits > .wp-block-column:first-child { flex: 2 1 0; }

/* main image: one 16:9 frame for every edition, the image is shown whole (never cropped) */
.rf-concert .rf-c-hero16 { margin: 32px 0 0; }
.rf-concert .rf-c-hero16 img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: contain; }

/* 3 key facts */
.rf-concert .rf-c-facts { gap: 0; border: 1px solid var(--rf-line); margin: 0 0 8px; }
.rf-concert .rf-c-facts > .wp-block-column { padding: 16px 20px; border-left: 1px solid var(--rf-line); }
.rf-concert .rf-c-facts > .wp-block-column:first-child { border-left: 0; }

/* sections */
.rf-concert .rf-c-section { padding: 48px 0 8px; border-top: 1px solid var(--rf-line); margin-top: 48px; }
.rf-concert .rf-c-h2 { margin: 0 0 24px; }
.rf-concert .rf-c-h3 { margin: 40px 0 16px; }
.rf-concert .rf-c-about p { text-align: justify; margin-bottom: 1em; }

/* 6 programme: numbered items grouped by composer */
.rf-concert .rf-c-programme { counter-reset: rf-item; }
.rf-concert .rf-c-item { position: relative; padding: 20px 0 20px 56px; border-top: 1px solid var(--rf-line); counter-increment: rf-item; }
.rf-concert .rf-c-item:first-of-type { border-top: 0; }
.rf-concert .rf-c-item::before { content: counter(rf-item); position: absolute; left: 0; top: 16px; font-size: 1.8em; line-height: 1; opacity: .6; }
.rf-concert .rf-c-composer { font-size: 1.1em; }
.rf-concert .rf-c-dates { opacity: .7; font-size: .85em; margin-left: 6px; }
.rf-concert .rf-c-work { font-size: 1.3em; margin-top: 4px; }
.rf-concert .rf-c-songs { list-style: none; margin: 8px 0 0; padding: 0; columns: 2; column-gap: 32px; }
.rf-concert .rf-c-songs li { margin: 0 0 4px; break-inside: avoid; }
.rf-concert .rf-c-sub, .rf-concert .rf-c-players { opacity: .85; margin-top: 6px; font-size: .95em; }

/* 8 performers */
.rf-concert .rf-c-performers .wp-block-columns + .wp-block-columns { margin-top: 2rem; }
.rf-concert .rf-c-people { list-style: none; margin: 32px 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px 24px; }
.rf-concert .rf-c-people li { margin: 0; }
.rf-concert .rf-c-people strong { display: block; }
.rf-concert .rf-c-roster { gap: 24px; }

/* 11 every edition */
.rf-concert .rf-c-editions { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 8px; }
.rf-concert .rf-c-editions li { margin: 0; }
.rf-concert .rf-c-editions a { display: flex; flex-direction: column; gap: 4px; min-height: 84px; padding: 12px; border: 1px solid var(--rf-line); text-decoration: none; font-size: 13px; }
.rf-concert .rf-c-editions a strong { font-size: 20px; }
.rf-concert .rf-c-editions li.is-current a { border: 2px solid currentColor; font-weight: 700; }
.rf-concert .rf-c-edition-link { margin-top: 20px; font-weight: 700; }

@media (max-width: 781px) {
	.rf-concert .rf-c-facts > .wp-block-column { border-left: 0; border-top: 1px solid var(--rf-line); }
	.rf-concert .rf-c-facts > .wp-block-column:first-child { border-top: 0; }
	.rf-concert .rf-c-songs { columns: 1; }
	.rf-concert .rf-c-item { padding-left: 40px; }
}

/* Concert page modules – additions for the empty template (patterns/portreti-i-secanja-*.php) */
.rf-concert p:empty, .rf-concert li:empty, .rf-concert h1:empty, .rf-concert h3:empty, .rf-concert h5:empty { display: none; } /* unfilled fields stay invisible */
.rf-concert .rf-c-notice { margin: 0 0 24px; padding: 14px 18px; border: 1px solid var(--rf-line); }
.rf-concert .rf-c-section .wp-block-columns + .wp-block-columns { margin-top: 2rem; }
.rf-concert .rf-c-note { margin-top: 1em; font-style: italic; }
.rf-concert .rf-c-opencall .rf-c-facts { margin-bottom: 16px; }
.rf-concert .rf-c-video, .rf-concert .rf-c-gallery { margin: 0 0 24px; }

/* BEGIN template modules – generated from design/templates/new-modules.css by build.py */
/* ==========================================================================
   Page template modules (all templates)
   SOURCE: design/templates/new-modules.css – build.py copies this block into the
   child theme style.css between the BEGIN/END markers. Edit the source, not the copy.
   Same rules as the concert modules above: STRUCTURE ONLY, colours and fonts
   come from the theme. Every template keeps the wrapper class "rf-concert"
   (so the concert module CSS applies) plus a type class: rf-t-concert,
   rf-t-opera, rf-t-masterclass, rf-t-lecture, rf-t-academy, rf-t-opencall,
   rf-t-bio, rf-t-directory, rf-t-hub.
   Design reference: design/templates/index.html
   ========================================================================== */

/* classic themes wrap group content in an inner container: let grids see the cards */
.rf-concert .rf-c-cards > .wp-block-group__inner-container { display: contents; }

/* shared */
.rf-concert .rf-c-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 14px; }
.rf-concert .rf-c-chip { display: inline-block; font-size: 12px; font-weight: 700; letter-spacing: .04em; padding: 2px 10px; border: 1px solid currentColor; border-radius: 999px; opacity: .85; }
.rf-concert .rf-c-status { display: inline-block; font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; padding: 3px 10px; border: 2px solid currentColor; margin: 14px 0 0; }
.rf-concert .rf-c-apply .rf-c-status { margin: 0 0 12px; }
.rf-concert .rf-c-more-link { margin-top: 10px; font-weight: 700; }
.rf-concert .rf-c-muted { opacity: .7; }
.rf-concert .rf-c-linklist { margin: 0; padding-left: 1.2em; }

/* image placeholders in the design previews (in WordPress these are Image blocks) */
.rf-concert .rf-ph { display: flex; align-items: center; justify-content: center; text-align: center; padding: 8px; font-size: 13px; background: rgba(127,127,127,.12); }
.rf-concert .rf-ph.r16x9 { aspect-ratio: 16 / 9; }
.rf-concert .rf-ph.r4x5 { aspect-ratio: 4 / 5; }
.rf-concert .rf-ph.r1x1 { aspect-ratio: 1 / 1; }
.rf-concert .rf-ph.r3x2 { aspect-ratio: 3 / 2; }

/* card grid: faculty, results, speakers */
.rf-concert .rf-c-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 32px 28px; }
.rf-concert .rf-c-cards.is-small { grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 24px 20px; }
.rf-concert .rf-c-card { display: flex; flex-direction: column; gap: 8px; }
.rf-concert .rf-c-card figure { margin: 0; }
.rf-concert .rf-c-name { font-size: 1.15em; font-weight: 600; margin-top: 4px; }
.rf-concert .rf-c-meta { font-size: .9em; opacity: .7; }

/* feature: photo left + text right (teacher, film, bio header) */
.rf-concert .rf-c-feature { gap: 40px; align-items: flex-start; }
.rf-concert .rf-c-feature p + p { margin-top: 1em; }

/* lists whose first bold / italic word is a label column:
   rules ("<strong>Deadline</strong> 5 October"), appearances ("<strong>2019</strong> event – work"),
   cast ("<em>Carmen</em> singer") */
.rf-concert .rf-c-rules, .rf-concert .rf-c-appearances, .rf-concert .rf-c-cast, .rf-concert .rf-c-dates-list { list-style: none; margin: 0; padding: 0; }
.rf-concert .rf-c-rules li, .rf-concert .rf-c-appearances li, .rf-concert .rf-c-cast li, .rf-concert .rf-c-dates-list li { position: relative; margin: 0; padding: 13px 0; border-top: 1px solid var(--rf-line); }
.rf-concert .rf-c-rules li:first-child, .rf-concert .rf-c-appearances li:first-child, .rf-concert .rf-c-dates-list li:first-child { border-top: 0; }
.rf-concert .rf-c-rules li { padding-left: 260px; }
.rf-concert .rf-c-rules li > strong:first-child { position: absolute; left: 0; top: 13px; width: 240px; }
.rf-concert .rf-c-appearances li { padding-left: 90px; }
.rf-concert .rf-c-appearances li > strong:first-child { position: absolute; left: 0; top: 10px; font-size: 1.6em; line-height: 1; font-weight: 400; opacity: .6; }
.rf-concert .rf-c-cast { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(340px, 100%), 1fr)); gap: 0 40px; }
.rf-concert .rf-c-cast li { padding-left: 50%; font-weight: 600; }
.rf-concert .rf-c-cast li > em:first-child { position: absolute; left: 0; top: 13px; font-weight: 400; }
.rf-concert .rf-c-workfacts { margin: 0 0 24px; }
.rf-concert .rf-c-team { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 16px 24px; }
.rf-concert .rf-c-team li { margin: 0; }

/* lecture: talks */
.rf-concert .rf-c-talk { padding: 28px 0; border-top: 1px solid var(--rf-line); gap: 32px; }
.rf-concert .rf-c-talk:first-of-type { border-top: 0; padding-top: 0; }
.rf-concert .rf-c-talk-title { font-size: 1.3em; margin: 4px 0 10px; font-style: italic; }

/* application / call box */
.rf-concert .rf-c-apply { border: 1px solid var(--rf-line); padding: 24px 28px; }

/* link card to another page (students' concert, productions, current call) */
.rf-concert .rf-c-linkcard { display: block; border: 1px solid var(--rf-line); padding: 18px 22px; margin: 0 0 12px; max-width: 560px; }
.rf-concert .rf-c-linkcard a { font-weight: 700; }

/* directory (Query Loop of bio posts) and hub (Query Loop of child pages) */
.rf-concert .rf-c-dir .wp-block-post-template,
.rf-concert .rf-c-hublist .wp-block-post-template { list-style: none; margin: 0; padding: 0; display: grid; gap: 28px 20px; }
.rf-concert .rf-c-dir .wp-block-post-template { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); }
.rf-concert .rf-c-hublist .wp-block-post-template { grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.rf-concert .rf-c-dir .wp-block-post { padding-top: 12px; border-top: 1px solid var(--rf-line); }
.rf-concert .rf-c-dir .wp-block-post[hidden] { display: none; }
.rf-concert .wp-block-post-featured-image { margin: 0; }
.rf-concert .wp-block-post-title { font-size: 1.05em; margin: 8px 0 4px; }
.rf-concert .wp-block-post-excerpt, .rf-concert .rf-c-years { font-size: .88em; opacity: .75; margin: 0; }
.rf-concert .wp-block-post-excerpt__more-link { display: none; }
.rf-concert .rf-c-search { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; margin: 0 0 16px; }
.rf-concert .rf-c-search input[type=search] { flex: 1 1 280px; min-height: 44px; padding: 0 14px; font: inherit; border: 1px solid var(--rf-line); }
.rf-concert .rf-c-search select { min-height: 44px; padding: 0 10px; font: inherit; border: 1px solid var(--rf-line); background: transparent; color: inherit; }
.rf-concert .rf-c-az { display: flex; flex-wrap: wrap; gap: 4px; margin: 0 0 20px; }
.rf-concert .rf-c-az button { min-width: 34px; min-height: 34px; border: 1px solid var(--rf-line); background: transparent; font: inherit; font-size: 13px; cursor: pointer; color: inherit; }
.rf-concert .rf-c-az button.is-on { border: 2px solid currentColor; font-weight: 700; }
.rf-concert .rf-c-count { font-size: .9em; opacity: .7; margin-bottom: 16px; }

/* yearly edition: at a glance, programme as event cards, sponsors, previous / next */
.rf-concert .rf-c-figures { gap: 0; margin: 0 0 8px; border-top: 1px solid var(--rf-line); border-bottom: 1px solid var(--rf-line); }
.rf-concert .rf-c-figures > .wp-block-column { padding: 16px 20px; border-left: 1px solid var(--rf-line); }
.rf-concert .rf-c-figures > .wp-block-column:first-child { border-left: 0; padding-left: 0; }
.rf-concert .rf-c-figure { font-size: 2.4em; line-height: 1; font-weight: 600; }
.rf-concert .rf-c-events > .wp-block-group__inner-container { display: contents; }
.rf-concert .rf-c-season { margin: 0 0 40px; }
.rf-concert .rf-c-season-title { margin: 0 0 4px; padding-left: 14px; border-left: 3px solid currentColor; }
.rf-concert .rf-c-season-when { margin: 0 0 8px; padding-left: 17px; opacity: .75; }
.rf-concert h3:empty { display: none; }
.rf-concert .rf-c-event { gap: 28px; align-items: flex-start; padding: 28px 0; margin: 0; border-top: 1px solid var(--rf-line); }
.rf-concert .rf-c-event:first-child { border-top: 0; padding-top: 0; }
.rf-concert .rf-c-day { font-size: 2.6em; line-height: 1; font-weight: 600; }
.rf-concert .rf-c-month { font-size: 1em; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; margin-top: 4px; }
.rf-concert .rf-c-weekday { font-size: .85em; opacity: .7; }
.rf-concert .rf-c-kind { font-size: 12px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; opacity: .75; }
.rf-concert h3.rf-c-event-title { margin: 6px 0 6px; font-size: 1.45em; line-height: 1.25; }
.rf-concert h3.rf-c-event-title a { text-decoration: none; }
.rf-concert .rf-c-event-meta { font-weight: 600; margin-bottom: 10px; }
.rf-concert .rf-c-event figure { margin: 0; }
.rf-concert .rf-c-event img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; }
.rf-concert .rf-c-logos { margin: 0; }
.rf-concert .rf-c-logos img { display: block; max-width: 100%; height: auto; margin: 0 auto; }
.rf-concert .rf-c-prevnext { display: flex; justify-content: space-between; gap: 16px; margin-top: 20px; font-weight: 700; }

/* automatic "More from Rossi Fest [year]" (functions.php adds it after the content) */
.rf-concert .rf-c-related { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
.rf-concert .rf-c-related li { margin: 0; border: 1px solid var(--rf-line); padding: 12px 16px; }
.rf-concert .rf-c-related a { font-weight: 600; text-decoration: none; }

@media (max-width: 781px) {
	.rf-concert .rf-c-rules li { padding-left: 0; }
	.rf-concert .rf-c-rules li > strong:first-child { position: static; display: block; width: auto; }
	.rf-concert .rf-c-appearances li { padding-left: 64px; }
	.rf-concert .rf-c-figures { flex-direction: row !important; flex-wrap: nowrap !important; }
	.rf-concert .rf-c-figures > .wp-block-column { flex-basis: 0 !important; padding: 12px 10px; }
	.rf-concert .rf-c-event { gap: 12px; }
	.rf-concert .rf-c-event > .wp-block-column:first-child { display: flex; gap: 10px; align-items: baseline; flex-basis: auto !important; }
	.rf-concert .rf-c-event > .wp-block-column:first-child p { margin: 0; }
	.rf-concert .rf-c-day { font-size: 1.8em; }
}
/* END template modules */
