/* ==========================================================================
   Custom Ginzburglaw Plugin — site-wide CSS overrides
   Add new sections below as needed. Keep one clearly labeled block per feature.
   ========================================================================== */


/* --------------------------------------------------------------------------
   Practice Areas accordion — custom collapsed/expanded icon per item
   --------------------------------------------------------------------------
   Setup needed in the Elementor editor (per item, one-time):
   For EACH accordion item -> Advanced tab (on that item) -> CSS ID -> set to
   one of: banking-litigation / civil-litigation / commercial-law /
   inheritance-disputes / insolvency-crisis / real-estate / tort-claims /
   capital-markets / hedge-funds

   No widget-level CSS class needed — targeted directly by each item's
   unique ID.

   !important is required on background-image: Elementor's icon system
   (nested accordion / atomic widgets) applies its own !important reset on
   this property for icon elements, which silently beats any normal-priority
   rule — confirmed by testing directly in the live DOM.
   -------------------------------------------------------------------------- */

:root {
	--practice-area-icon-size: 45px; /* <-- change this to resize all 9 icons */

	/* Set to true to switch all 9 icons to the dark (#1A1A1A) set below.
	   CSS can't branch on a variable by itself, so accordion-dark-mode.js
	   reads this value on page load and toggles a class on <body> that the
	   dark rules at the bottom of this file key off. */
	--is-accordion-dark-mode: true;
}

.e-n-accordion-item[id] .e-n-accordion-item-title-icon .e-opened,
.e-n-accordion-item[id] .e-n-accordion-item-title-icon .e-closed {
	width: var(--practice-area-icon-size);
	height: var(--practice-area-icon-size);
	background-repeat: no-repeat;
	background-position: center;
	background-size: contain;
}

/* Hide the default Elementor icon glyph (font icon or svg) since we're
   replacing it with a background-image per item below. */
.e-n-accordion-item[id] .e-n-accordion-item-title-icon .e-opened i,
.e-n-accordion-item[id] .e-n-accordion-item-title-icon .e-opened svg,
.e-n-accordion-item[id] .e-n-accordion-item-title-icon .e-closed i,
.e-n-accordion-item[id] .e-n-accordion-item-title-icon .e-closed svg {
	display: none !important;
}

/* Banking Litigation */
.e-n-accordion-item#banking-litigation .e-closed {
	background-image: url('../img/practice-areas/icon-banking-litigation-collapsed.svg') !important;
}
.e-n-accordion-item#banking-litigation .e-opened {
	background-image: url('../img/practice-areas/icon-banking-litigation-expanded.svg') !important;
}

/* Commercial Law */
.e-n-accordion-item#commercial-law .e-closed {
	background-image: url('../img/practice-areas/icon-commercial-law-collapsed.svg') !important;
}
.e-n-accordion-item#commercial-law .e-opened {
	background-image: url('../img/practice-areas/icon-commercial-law-expanded.svg') !important;
}

/* Inheritance Disputes */
.e-n-accordion-item#inheritance-disputes .e-closed {
	background-image: url('../img/practice-areas/icon-inheritance-disputes-collapsed.svg') !important;
}
.e-n-accordion-item#inheritance-disputes .e-opened {
	background-image: url('../img/practice-areas/icon-inheritance-disputes-expanded.svg') !important;
}

/* Real Estate */
.e-n-accordion-item#real-estate .e-closed {
	background-image: url('../img/practice-areas/icon-real-estate-collapsed.svg') !important;
}
.e-n-accordion-item#real-estate .e-opened {
	background-image: url('../img/practice-areas/icon-real-estate-expanded.svg') !important;
}

/* Civil Litigation */
.e-n-accordion-item#civil-litigation .e-closed {
	background-image: url('../img/practice-areas/icon-civil-litigation-collapsed.svg') !important;
}
.e-n-accordion-item#civil-litigation .e-opened {
	background-image: url('../img/practice-areas/icon-civil-litigation-expanded.svg') !important;
}

/* Insolvency & Crisis */
.e-n-accordion-item#insolvency-crisis .e-closed {
	background-image: url('../img/practice-areas/icon-insolvency-crisis-collapsed.svg') !important;
}
.e-n-accordion-item#insolvency-crisis .e-opened {
	background-image: url('../img/practice-areas/icon-insolvency-crisis-expanded.svg') !important;
}

/* Tort Claims */
.e-n-accordion-item#tort-claims .e-closed {
	background-image: url('../img/practice-areas/icon-tort-claims-collapsed.svg') !important;
}
.e-n-accordion-item#tort-claims .e-opened {
	background-image: url('../img/practice-areas/icon-tort-claims-expanded.svg') !important;
}

/* Capital Markets */
.e-n-accordion-item#capital-markets .e-closed {
	background-image: url('../img/practice-areas/icon-capital-markets-collapsed.svg') !important;
}
.e-n-accordion-item#capital-markets .e-opened {
	background-image: url('../img/practice-areas/icon-capital-markets-expanded.svg') !important;
}

/* Hedge Funds */
.e-n-accordion-item#hedge-funds .e-closed {
	background-image: url('../img/practice-areas/icon-hedge-funds-collapsed.svg') !important;
}
.e-n-accordion-item#hedge-funds .e-opened {
	background-image: url('../img/practice-areas/icon-hedge-funds-expanded.svg') !important;
}


/* --------------------------------------------------------------------------
   Practice Areas accordion — DARK icon set
   --------------------------------------------------------------------------
   Active only when <body> has class "accordion-dark-mode", which
   accordion-dark-mode.js adds automatically when --is-accordion-dark-mode
   (above) is "true". Same 9 items, same states, just pointed at
   assets/img/practice-areas-dark/ instead. Higher specificity than the
   light rules above (extra body class), so these win whenever active.
   -------------------------------------------------------------------------- */

body.accordion-dark-mode .e-n-accordion-item#banking-litigation .e-closed {
	background-image: url('../img/practice-areas-dark/icon-banking-litigation-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#banking-litigation .e-opened {
	background-image: url('../img/practice-areas-dark/icon-banking-litigation-expanded.svg') !important;
}

body.accordion-dark-mode .e-n-accordion-item#commercial-law .e-closed {
	background-image: url('../img/practice-areas-dark/icon-commercial-law-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#commercial-law .e-opened {
	background-image: url('../img/practice-areas-dark/icon-commercial-law-expanded.svg') !important;
}

body.accordion-dark-mode .e-n-accordion-item#inheritance-disputes .e-closed {
	background-image: url('../img/practice-areas-dark/icon-inheritance-disputes-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#inheritance-disputes .e-opened {
	background-image: url('../img/practice-areas-dark/icon-inheritance-disputes-expanded.svg') !important;
}

body.accordion-dark-mode .e-n-accordion-item#real-estate .e-closed {
	background-image: url('../img/practice-areas-dark/icon-real-estate-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#real-estate .e-opened {
	background-image: url('../img/practice-areas-dark/icon-real-estate-expanded.svg') !important;
}

body.accordion-dark-mode .e-n-accordion-item#civil-litigation .e-closed {
	background-image: url('../img/practice-areas-dark/icon-civil-litigation-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#civil-litigation .e-opened {
	background-image: url('../img/practice-areas-dark/icon-civil-litigation-expanded.svg') !important;
}

body.accordion-dark-mode .e-n-accordion-item#insolvency-crisis .e-closed {
	background-image: url('../img/practice-areas-dark/icon-insolvency-crisis-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#insolvency-crisis .e-opened {
	background-image: url('../img/practice-areas-dark/icon-insolvency-crisis-expanded.svg') !important;
}

body.accordion-dark-mode .e-n-accordion-item#tort-claims .e-closed {
	background-image: url('../img/practice-areas-dark/icon-tort-claims-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#tort-claims .e-opened {
	background-image: url('../img/practice-areas-dark/icon-tort-claims-expanded.svg') !important;
}

body.accordion-dark-mode .e-n-accordion-item#capital-markets .e-closed {
	background-image: url('../img/practice-areas-dark/icon-capital-markets-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#capital-markets .e-opened {
	background-image: url('../img/practice-areas-dark/icon-capital-markets-expanded.svg') !important;
}

body.accordion-dark-mode .e-n-accordion-item#hedge-funds .e-closed {
	background-image: url('../img/practice-areas-dark/icon-hedge-funds-collapsed.svg') !important;
}
body.accordion-dark-mode .e-n-accordion-item#hedge-funds .e-opened {
	background-image: url('../img/practice-areas-dark/icon-hedge-funds-expanded.svg') !important;
}


/* --------------------------------------------------------------------------
   Practice Areas accordion — divider between items
   --------------------------------------------------------------------------
   Short centered separator line under each item's title. Scoped to the 9
   practice-area item IDs only, so it won't affect other accordions on
   the site.

   --practice-area-divider-enabled:            "block" to show, "none" to hide.
   --practice-area-divider-color:              line color.
   --practice-area-divider-width:              flat line length (px), used
                                                only when the percent
                                                variable below is `initial`.
   --practice-area-divider-width-percent:      line length as a % of the
                                                item's own title text width
                                                while CLOSED. Set to
                                                `initial` to disable and
                                                fall back to the flat width
                                                above.
   --practice-area-divider-width-percent-open: line length as a % of the
                                                title text width while OPEN.
   --practice-area-divider-offset:             vertical gap pushing the line
                                                down from the text baseline.

   Anchored to the title text itself, which Elementor already sizes to fit
   its content — so % widths here resolve against the real text width, no
   JS measurement needed. Open state read from the native <details> [open]
   attribute Elementor itself uses for the widget's own active styling.

   If Elementor's own item border is on for this widget (Style tab ->
   Accordion -> Border), turn it off first or you'll get both lines stacked.
   -------------------------------------------------------------------------- */

:root {
	--practice-area-divider-enabled: block;
	--practice-area-divider-color: #B17030;
	--practice-area-divider-width: 60px;
	/*The divider percentage parm overrides the width parm.*/
	--practice-area-divider-width-percent: 40%;
	--practice-area-divider-width-percent-open: 100%;
	--practice-area-divider-offset: 14px;
}

.e-n-accordion-item:is(#banking-litigation, #commercial-law, #inheritance-disputes,
	#real-estate, #civil-litigation, #insolvency-crisis, #tort-claims,
	#capital-markets, #hedge-funds) .e-n-accordion-item-title-header {
	position: relative;
}

.e-n-accordion-item:is(#banking-litigation, #commercial-law, #inheritance-disputes,
	#real-estate, #civil-litigation, #insolvency-crisis, #tort-claims,
	#capital-markets, #hedge-funds) .e-n-accordion-item-title-header::after {
	content: "";
	display: var(--practice-area-divider-enabled);
	position: absolute;
	top: 77.5%;
	inset-inline-start: 0;
	width: var(--practice-area-divider-width-percent, var(--practice-area-divider-width));
	height: 1px;
	background-color: var(--practice-area-divider-color);
	transform: translateY(var(--practice-area-divider-offset));
}

.e-n-accordion-item[open]:is(#banking-litigation, #commercial-law, #inheritance-disputes,
	#real-estate, #civil-litigation, #insolvency-crisis, #tort-claims,
	#capital-markets, #hedge-funds) .e-n-accordion-item-title-header::after {
	width: var(--practice-area-divider-width-percent-open, 100%);
}


/* --------------------------------------------------------------------------
   Single post — Related Posts heading chevron
   --------------------------------------------------------------------------
   OceanWP prefixes any ".theme-heading .text" with a Font Awesome chevron
   (content: "\f105"). That base selector is used theme-wide, so this override
   is scoped to #related-posts only — it won't touch other headings on the site.
   -------------------------------------------------------------------------- */

.gbl-latest-posts__archive-link {

}

#related-posts .related-posts-title .text::before,
#related-posts .related-posts-title .text::after {
	content: none;
}


/* --------------------------------------------------------------------------
   Footer widgets — sitemap bullets, contact color, title accent, centering,
   copyright alignment
   --------------------------------------------------------------------------
   Requested Aug 2026: remove the Font Awesome bullet Ocean Extra puts before
   each Sitemap link, match the Address text color to the Phone/Email links,
   recolor the widget-title accent bar, center all four footer columns, and
   right-align the copyright line. Scoped to #footer-widgets / #footer-bottom
   so nothing outside the footer is affected.

   !important is required on two of these rules — confirmed by testing
   directly in the live DOM:
   - .widget-title border-color: OceanWP's Footer Widgets styles set this
     at higher specificity, so a normal-priority rule here is silently
     overridden.
   - #footer-bottom-inner #copyright text-align: OceanWP's own
     "#footer-bottom.no-footer-nav #copyright" rule (this site has no
     footer nav, so that modifier class is active) outranks a plain
     two-ID selector on specificity.
   -------------------------------------------------------------------------- */
#footer-widgets {
	margin-left: auto;
	margin-right: auto;
}
#footer-widgets .oceanwp-custom-links li a::before {
	display: none;
}
#footer .contact-info-widget .oceanwp-contact-title{
	color: #c59d55 !important;
}
#footer-widgets .widget-title {
	border-color: #DDDDDD !important;
}
#footer .contact-info-widget i {
	border: none;
	font-size: 25px;
	color: #c59d55 !important;
}
#ocean_social-1 li a{
	border: none;
	font-size: 30px;
	color: #c59d55 !important;
	margin-top: -12px
}
#ocean_social-1 li a:hover{
	color: #DDDDDD !important;
}
#footer-bottom-inner #copyright {
	text-align: right !important;
}
#block-7 {
	transform: translateY(20px);
}
#block-7 img {
	width: 187px;
	margin-right: 0;
}
#footer-bottom {
	border-top: 1px solid rgb(221 221 221 / 0.04);
}


/* --------------------------------------------------------------------------
   Footer widgets — center the column group
   --------------------------------------------------------------------------
   Follow-up to the block above: Footer 1 (first of the 4 configured Footer
   Columns) has no widget in it since the About Us placeholder was removed.
   OceanWP's column grid uses same-direction floats, and a genuinely empty
   float collapses to 0 height and stops reserving its slot — so the 3 real
   columns (sitemap / contact / social+logo) all shift toward one edge
   instead of filling the row, leaving a visible gap on the other side
   instead of even side margins.

   Switching the row to flexbox with centered content fixes this regardless
   of which column ends up empty, and re-centers automatically if a widget
   is ever added back to Footer 1 (nothing left to hide at that point).
   -------------------------------------------------------------------------- */

#footer-widgets .footer-widgets-inner {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-evenly;
}

#footer-widgets .footer-widgets-inner .col:not(:has(*)) {
	display: none;
}
#footer-widgets .col-3 {
	margin-right: -70px !important;
}
#footer-widgets .footer-widgets-inner {
	column-gap: 30px;
}


/* --------------------------------------------------------------------------
   Homepage — Latest Posts section
   --------------------------------------------------------------------------
   Renders the [ginzburglaw_latest_posts] shortcode (see plugin PHP file).
   Drop a Shortcode widget anywhere on the homepage in Elementor and paste
   [ginzburglaw_latest_posts] into it.

   3-column card grid, stacks to 1 column under 768px.
   -------------------------------------------------------------------------- */

.gbl-latest-posts__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: max(20px, 10%);
}

@media (max-width: 768px) {
	.gbl-latest-posts__grid {
		grid-template-columns: 1fr;
	}
}

.gbl-latest-posts__box {
	border: 1px solid #DDDDDD;
	border-radius: 4px;
	overflow: hidden;
	background: #fff;
	transition: box-shadow 0.2s ease;
}

.gbl-latest-posts__box:hover {
	box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
}

.gbl-latest-posts__thumb {
	display: block;
	line-height: 0;
}

/* Uniform thumbnail size across the cards.
   NOTE: a fixed `height` here does NOT work — OceanWP's style.min.css has
   `img[class*="attachment-"] { height: auto }`, the same specificity (0,1,1) as
   this selector, and the theme stylesheet loads after this plugin's, so it wins
   the tie and the images fall back to their natural ratio. `aspect-ratio`
   sidesteps the conflict entirely (nothing else on the page sets it) and keeps
   the crop proportional when the grid stacks to 1 column under 768px. */
.gbl-latest-posts__thumb img {
	width: 100%;
	aspect-ratio: 3 / 2;
	height: auto;
	object-fit: cover;
}

.gbl-latest-posts__title {
	margin: 16px 20px 8px;
	font-size: 18px;
	line-height: 1.4;
}

.gbl-latest-posts__title a {
	color: inherit;
	text-decoration: none;
}

.gbl-latest-posts__title a:hover {
	color: #c59d55;
}

.gbl-latest-posts__excerpt {
	margin: 0 20px 20px;
	font-size: 14px;
	line-height: 1.6;
	color: #666666;
}

.gbl-latest-posts__archive-link {
	display: inline-block;
	margin-top: 10px;
	color: #c59d55;
	font-weight: 600;
	text-decoration: none;
	border-bottom: 1px solid #c59d55;
}

.gbl-latest-posts__archive-link:hover {
	color: #B17030;
	border-color: #B17030;
}


/* --------------------------------------------------------------------------
   Blog Archive — hide post date, comment count, and infinite-scroll
   "end of content" message
   --------------------------------------------------------------------------
   Requested Aug 2026: no per-element Content Builder toggle exists for these
   on OceanWP's List blog style (that granular toggle UI is only available
   for Grid/Large Image styles). The Infinite Scroll "Error Text" Customizer
   field is empty by default (front-end shows OceanWP's own translated
   fallback, "סוף התוכן") — blanking an already-empty field wouldn't remove
   it, so a CSS hide is the only way.

   .blog-entry-bottom is the archive-listing wrapper around just the date +
   comment-count link (the category label above the title is a separate
   sibling element, left untouched).
   .scroller-status is the infinite-scroll.js library's status/message box,
   only present when Blog Archives Pagination Style = Infinite Scroll.
   Both classes are specific to archive-listing markup, so single-post pages
   are unaffected.

   !important is required on both — confirmed by testing directly in the
   live DOM:
   - .blog-entry-bottom: OceanWP's own style.min.css sets this via the more
     specific ".blog-entry.thumbnail-entry .blog-entry-bottom { display:
     block }" (two ancestor classes beats our one), which wins on
     specificity regardless of stylesheet load order.
   - .scroller-status: the infinite-scroll.js library toggles this element's
     visibility via an inline style attribute when it reaches the last page,
     and inline styles beat any non-!important stylesheet rule outright.
   -------------------------------------------------------------------------- */

.blog-entry-bottom {
	display: none !important;
}

.scroller-status {
	display: none !important;
}


/* --------------------------------------------------------------------------
   Contact form (homepage) — inline labels + styled acceptance checkbox
   --------------------------------------------------------------------------
   Requested Aug 2026. Scoped under .gbl-contact-form, a CSS Class added
   manually on the Form widget itself (Advanced tab) — matches the same
   pattern already used for the Practice Areas accordion (targeted ID/class
   instead of a global selector), so this never affects any other Elementor
   form that might get added to the site later.

   Verified against the installed Elementor Pro 4.2.1 source before writing
   this (modules/forms/classes/form-base.php + fields/acceptance.php +
   fields/tel.php):
   - Elementor DOES have a native "Label Position: Inline" setting
     (label_position, values above/inline) but it's registered as
     Controls_Manager::HIDDEN — present in code, no UI switcher to use it.
     Hence doing it with CSS instead.
   - Every text-like field (text/email/tel) renders as a flat
     <div class="elementor-field-group ..."><label class="elementor-field-label">
     ...</label><input class="elementor-field-textual" ...></div> — no extra
     wrapper div, so a simple flex row on .elementor-field-group works
     directly.
   - The textarea ("הודעה") field uses the same structure/classes
     (elementor-field-textual is shared by input AND textarea).
   - The submit button also carries elementor-field-group, but has no
     .elementor-field-label/.elementor-field-textual child, so it's
     unaffected by the flex/width rules below (single flex child, same as
     before).
   - Acceptance field: field heading is item['field_label'] as
     <label class="elementor-field-label"> directly in
     .elementor-field-type-acceptance (hiding it here doesn't touch the
     שם/טלפון/אימייל/הודעה labels — those live in their own, different
     .elementor-field-type-* wrapper). The checkbox always carries class
     elementor-acceptance-field (hardcoded, not editable from the panel).
     The consent text next to it is a bare, class-less <label>, targeted via
     its .elementor-field-option parent.

   90px label column width and the gold (#c59d55) checkbox accent are
   starting values — check the live page and adjust if a label wraps or the
   spacing looks off.

   UPDATE Aug 2026 (round 2, live feedback): this page has its OWN
   Elementor-generated widget-specific stylesheet
   (wp-content/uploads/elementor/css/post-161.css) with rules scoped to
   ".elementor-161 .elementor-element.elementor-element-8758f2c ... " —
   that's 4-6 chained classes, beating any normal 2-3 class override here.
   Confirmed THREE separate rules fighting us there (found by walking
   document.styleSheets + el.matches() live, not guessed):
     1. ".elementor-field-group .elementor-field:not(.elementor-select-wrapper)"
        — border-width: 0 0 1px; border-color: #B17030; background: transparent
        (bottom-only "underline" look, meant for the text inputs)
     2. ".elementor-field-group .elementor-field" — margin: 0 auto; max-width: 500px
        (centers/caps the text inputs at 500px)
     3. ".elementor-field-group > label" — margin: 0 auto; width: 500px
        (same auto-margin centering, but on the LABEL itself)
   All three match more than just their intended target: #1 and #2 use the
   plain .elementor-field class, which the acceptance checkbox also carries;
   #3 uses a bare "label" tag selector, which matches every field's own
   .elementor-field-label too. With flex-grow:1 on our input and the input's
   own max-width:500px capping how much of that grow it can actually use,
   the leftover space doesn't just vanish — flexbox hands it to whichever
   items still have auto margins (label AND input here), which is exactly
   what silently pushed the label away from the input despite our gap being
   only 3px. Any margin/border/background we set on a label or field-type
   element on THIS widget needs !important or it silently loses. If a future
   tweak on this widget doesn't visually apply, check post-161.css for an
   element-8758f2c-scoped rule before assuming the CSS here is wrong.
   -------------------------------------------------------------------------- */

/* UPDATE Aug 2026 (round 5): rounds 3-4's position:absolute + calc() label
   positioning broke badly below ~686px of row width — the calc formula
   assumed the input is always exactly 500px wide, and once the row got
   narrower than that, the label's computed offset went negative, pushing it
   completely outside the row (confirmed live: forcing the row to 390px put
   the label 58px past its own row's right edge, floating detached from the
   form). Rebuilt from scratch with CSS Grid instead of absolute positioning
   — the standard pattern for "beside on desktop, stacked on mobile" label
   layouts, and the same technique suggested (as an alternative to the
   ::before shadow-spacer) back in round 2.

   Structure: every row is a 2-column grid — a fixed 90px label column, plus
   a flexible content column that holds the input/button/checkbox-group.
   Content is capped at max-width:500px but NOT auto-centered within its
   column — it's pinned flush to the column's start edge (justify-self:start)
   instead, so any leftover space (when the row is wider than 500+90+gap)
   collects on the FAR side, away from the label, rather than splitting
   evenly around the content. That's what keeps the label genuinely glued to
   the input at any width: the gap between them is always exactly the
   column-gap below, never a calculated guess.

   Trade-off vs. round 3-4, flagged and confirmed: this makes the label
   glued to the input the priority over the input being dead-center in the
   FULL row. Input/button/checkbox all still land pixel-identical to each
   other (verified live) since they share the identical grid template and
   sizing rules — they just sit as a group flush against the label instead
   of centered in the row's full width.

   Verified live before writing this (temporary injected CSS, not guessed):
   desktop — label-to-input gap exactly 3px, input/button/checkbox all at
   the same left/right edges. Forced the row down to 390px (simulating
   mobile) — input/button/checkbox all shrank together to the same width in
   lockstep, label stayed glued with the same 3px gap, nothing overlapped or
   went off-screen. Also live-tested the <767px stacked variant (below) at
   that same forced narrow width — label sits cleanly above its input, full
   width, normal document flow. */

/* UPDATE Aug 2026 (round 6): center the form itself within its section.
   .gbl-contact-form (confirmed live to be the same element as #contact-form)
   is already display:block with Elementor's default max-width:100%, sitting
   inside a full-bleed flex-child column with no boxed-width cap of its own —
   no separate wrapper div needed, capping its own width and adding auto
   side-margins centers it exactly the same way a wrapper would.
   !important needed on max-width — post-161.css already sets max-width:100%
   on this same element (element-8758f2c) and would otherwise win (same
   override pattern as the label-width bug from round 3).
   600px covers the widest row (60px label + 3px gap + 500px input = 563px)
   plus ~37px of breathing room each side. */
.gbl-contact-form {
	max-width: 600px !important;
	margin: 0 auto !important;
}

/* UPDATE Aug 2026 (round 7): center the form vertically too. Its direct
   parent (.elementor-element-ba1b171, the Elementor flex-column container
   that holds just this widget) is stretched by the row above it to match
   the map embed's height (403px) — taller than the form's own content
   (287.5px) — so the leftover ~115px was sitting entirely below the form
   (default justify-content:normal = top-aligned in a column flex container).
   justify-content:center splits that leftover space evenly above/below, and
   isn't a hardcoded number, so it stays correct if the row height ever
   changes (different map embed, etc). No competing rule found on this
   specific element/property in post-161.css, but !important kept anyway for
   consistency with every other override on this widget (see gotcha list
   above) and because Elementor's own base .e-con/.e-flex rule sets the
   fallback. Scoped to this one container's unique Elementor ID, same as
   elsewhere in this file — doesn't touch the map column or any other
   section. No @media override needed — confirmed (again) zero responsive
   breakpoints exist for this section in Elementor's generated CSS. */
.elementor-element-ba1b171 {
	justify-content: center !important;
}

.gbl-contact-form .elementor-field-group {
	display: grid;
	grid-template-columns: 60px 1fr;
	align-items: center;
	column-gap: 3px;
	position: static;
}

.gbl-contact-form .elementor-field-group > .elementor-field-label {
	position: static;
	margin: 0 !important;
	width: auto !important;
}

.gbl-contact-form .elementor-field-group > .elementor-field-textual {
	grid-column: 2;
	justify-self: start;
	width: 100% !important;
	max-width: 500px !important;
	margin: 0 !important;
}

/* "הודעה" textarea: label pinned near the top instead of vertically centered
   against the taller box */
.gbl-contact-form .elementor-field-type-textarea > .elementor-field-label {
	align-self: start;
	margin-top: 8px;
}

/* Acceptance field: hide its own heading; the checkbox+consent-text group
   (.elementor-field-subgroup) gets the SAME grid-column/width/max-width/
   justify-self treatment as the text inputs above, so it lands at the exact
   same edge — no hardcoded spacer width to keep in sync with anything. */
.gbl-contact-form .elementor-field-type-acceptance > label.elementor-field-label {
	display: none;
}

.gbl-contact-form .elementor-field-type-acceptance .elementor-field-subgroup {
	grid-column: 2;
	justify-self: start;
	width: 100% !important;
	max-width: 500px !important;
	margin: 0 !important;
}

.gbl-contact-form .elementor-field-type-acceptance .elementor-field-option {
	display: flex;
	align-items: center;
	gap: 8px;
}

/* Submit button: same grid-column/width/max-width/justify-self treatment so
   it shrinks and aligns in lockstep with the inputs above. Overrides
   Elementor's native "margin: 15px auto 0" (post-161.css) — keeps the 15px
   top spacing, drops the auto side-margins since justify-self:start now
   handles positioning. */
.gbl-contact-form .elementor-field-type-submit .elementor-button {
	grid-column: 2;
	justify-self: start;
	width: 100% !important;
	max-width: 500px !important;
	margin: 15px 0 0 0 !important;
}

/* Below this width there's no longer room to comfortably fit a 90px label +
   gap + a usable-width input side by side — label stacks above its input
   instead, each full width. Standard tablet/mobile breakpoint; adjust if it
   looks wrong on a real device. */
@media (max-width: 767px) {
	.gbl-contact-form .elementor-field-group {
		grid-template-columns: 1fr;
		row-gap: 4px;
	}
	.gbl-contact-form .elementor-field-group > .elementor-field-label {
		grid-column: 1;
		grid-row: 1;
	}
	.gbl-contact-form .elementor-field-group > .elementor-field-textual,
	.gbl-contact-form .elementor-field-type-acceptance .elementor-field-subgroup,
	.gbl-contact-form .elementor-field-type-submit .elementor-button {
		grid-column: 1;
		max-width: 100% !important;
	}
	.gbl-contact-form .elementor-field-group > .elementor-field-textual {
		grid-row: 2;
	}
	.gbl-contact-form .elementor-field-type-textarea > .elementor-field-label {
		margin-top: 0;
	}
}

.gbl-contact-form .elementor-field-type-acceptance .elementor-acceptance-field {
	appearance: none;
	-webkit-appearance: none;
	width: 20px;
	height: 20px;
	min-width: 20px;
	margin: 0 !important;
	border: 2px solid #c59d55 !important;
	border-radius: 0;
	background: #ffffff !important;
	cursor: pointer;
	position: relative;
	flex-shrink: 0;
}

.gbl-contact-form .elementor-field-type-acceptance .elementor-acceptance-field:checked {
	background: #c59d55 !important;
}

.gbl-contact-form .elementor-field-type-acceptance .elementor-acceptance-field:checked::after {
	content: '';
	position: absolute;
	left: 6px;
	top: 2px;
	width: 5px;
	height: 10px;
	border: solid #fff;
	border-width: 0 2px 2px 0;
	transform: rotate(45deg);
}

#contact-form input[type="checkbox"] {
	transform: scale(0.7);
}
#contact-form input[type="checkbox"] label {
	transform: translateY(4px);
}
#contact-form a {
	color: #ba6e18
}
#contact-form a:hover {
	color: #af4607
}


/* --------------------------------------------------------------------------
   Standard featured-image sizing — single post, blog archive, related posts
   --------------------------------------------------------------------------
   Requested Aug 2026. Featured images are stock photos in mixed orientations
   (mostly landscape ~3:2, a couple portrait), and none of the three places
   they're used were cropping them — portrait images rendered at full
   natural height, looking oversized/disproportionate next to landscape
   ones (visible in the related-posts grid, where cards should be uniform).

   OceanWP's own crop mechanism (Ocean Extra's ocean_extra_resize, a real
   server-side hard center-crop) exists in the template code for the
   archive and related-posts contexts, gated behind the
   ocean_blog_related_img_width/height and ocean_blog_entry_image_width/
   height theme_mods — but no Customizer control for those four settings
   was found anywhere in this install (confirmed by grepping the theme's
   customizer registration code), so they're unset and the crop never
   fires. The single-post featured image (blog-single.php) has no crop
   mechanism at all, gated or otherwise — it always prints the image at
   full size. A CSS fix is the only approach that covers all three.

   object-fit is used instead of a server-side crop: every featured image
   is forced into the same aspect ratio and center-cropped by the browser,
   with no new cropped image files generated on disk (unlike Ocean Extra's
   resize, which caches a cropped copy per size on the server). 3:2 was
   chosen because it's already the native ratio of most of the current
   photos (crops nothing off those, only the portrait outliers) — change
   --gbl-post-image-ratio below to adjust the crop ratio everywhere at once.

   Three selectors because all three contexts render markup with the SAME
   ".thumbnail" wrapper class — scoped by ancestor so they don't collide,
   confirmed against the live DOM on each of the three page types:
   - body.single-post .thumbnail img → single-post hero (blog-single.php).
     No other distinguishing ancestor class exists there, so this relies
     on WP core's own body_class() output.
   - .blog-entry .thumbnail img → archive/blog-list entry image
     (blog-entry.php). .blog-entry is the per-post article wrapper and
     never appears on single-post views, so this can't double-apply.
   - .related-post-media img → related-posts card image
     (related-posts.php). Only appears at the bottom of single-post pages.
   -------------------------------------------------------------------------- */

:root {
	--gbl-post-image-ratio: 3 / 2; /* <-- change this to adjust the crop ratio everywhere at once */
}

body.single-post .thumbnail img,
.blog-entry .thumbnail img,
.related-post-media img {
	width: 100%;
	height: auto;
	aspect-ratio: var(--gbl-post-image-ratio);
	object-fit: cover;
	object-position: center;
}


/* --------------------------------------------------------------------------
   Mobile header — align hamburger menu icon to the right
   --------------------------------------------------------------------------
   Requested Aug 2026. OceanWP's own style.min.css sets
   .oceanwp-mobile-menu-icon.mobile-right { float: right }, but the theme's
   rtl.css (loads after, wins the tie on equal specificity — same load-order
   pattern documented in [[css_specificity_oceanwp]]) flips this to
   float: left for RTL sites, treating "right" as a logical/start property
   that mirrors under RTL. On this site that puts the hamburger icon +
   "תפריט ניווט" label on the visual LEFT of the mobile/tablet header instead
   of the right. !important forces it back to the physical right regardless
   of stylesheet load order.

   Confirmed live via document.styleSheets + el.matches() that this rule has
   no @media wrapper (applies unconditionally) — the icon's mobile/tablet-
   only visibility is controlled elsewhere by the theme, so no breakpoint
   guard is needed here. Also confirmed nothing else occupies that side of
   the header on mobile (the responsive logo slot is empty), so floating
   right doesn't collide with anything.
   -------------------------------------------------------------------------- */
.oceanwp-mobile-menu-icon.mobile-right {
	float: right !important;
}

/* --------------------------------------------------------------------------
   Contact section — tablet & mobile responsive pass (≤1024px)
   --------------------------------------------------------------------------
   Requested Aug 2026. Two separate problems fixed here.

   1. The contact INFO BAR (container 2f68b23: the "צור קשר" heading plus the
      three image-box widgets for כתובת / טלפון / אימייל) was built desktop-only
      and carries Elementor's own elementor-hidden-tablet + elementor-hidden-mobile
      classes, with no mobile counterpart anywhere on the page — so below 1025px
      the address, phone and email simply did not exist for the visitor. (The
      clients strip on this page DOES have a hidden-desktop twin, 71d801d, so the
      duplicate-section pattern exists here; the contact bar just never got one.)

      Unhiding it as-is is not enough: the three items sit in a nowrap flex row
      (062a596) and the image widget sizes its icon as a PERCENTAGE of the item
      width, so at 390px each item gets ~110px and the icons collapse from 73px
      to 18px — effectively invisible — while the email address wraps mid-word.
      Confirmed by measurement, not assumed.

      So below 1025px the bar is re-laid-out to match the reference Itzik
      supplied: no heading, no per-item title, one compact right-aligned line
      per item with a small icon at the (RTL) right edge and the value beside it.

      Elementor breakpoints confirmed from the live stylesheet, NOT assumed:
      mobile = (max-width: 767px), tablet = (min-width: 768px) and
      (max-width: 1024px). A single ≤1024px query therefore covers exactly the
      range where the bar was hidden, and stops precisely where the untouched
      desktop layout takes over.

      The unhide rule carries an extra ".elementor" ancestor on purpose:
      Elementor's own ".elementor .elementor-hidden-mobile { display:none
      !important }" is (0,2,0) + !important, so a plain
      ".elementor-element-2f68b23.elementor-hidden-mobile" would be a
      specificity TIE decided by stylesheet load order — which is not something
      this plugin controls. (0,3,0) wins outright regardless of order.

   2. Form panel padding/typography on small screens. The form column
      (ba1b171) only carries 10px of padding, which is fine beside the map on
      desktop but leaves the fields nearly touching the panel edge once the
      row wraps to full width. Inputs also render at 13px — iOS Safari
      auto-zooms the whole page whenever a focused input is under 16px, so the
      inputs go to 16px. That applies to iPads as much as to phones, so the
      form typography / tap-target rules share the same ≤1024 query as the info
      bar rather than sitting in a separate ≤767 one.

   Tap targets: the per-item titles are collapsed to font-size:0 rather than
   display:none, and their existing <a> (tel: / mailto: / google maps, already
   present in the markup) is stretched over the whole row with position:absolute
   + inset:0. Result: the entire line is tappable, and the link keeps its
   accessible name for screen readers instead of disappearing from the a11y
   tree. Verified live with elementFromPoint on all three rows.

   Verified at 386 / 764 / 1020px CSS pixels using same-origin iframes sized to
   those widths (real @media evaluation — window resizing does not work in this
   automation environment, so the media queries were genuinely triggered rather
   than simulated by forcing container widths). No horizontal overflow at any
   of the three; desktop >1024px measured before/after and unchanged.
   -------------------------------------------------------------------------- */

@media (max-width: 1024px) {

	/* Un-hide the info bar. Extra .elementor ancestor beats Elementor's own
	   hidden-tablet/hidden-mobile rule on specificity, not on load order. */
	.elementor .elementor-element-2f68b23.elementor-hidden-tablet,
	.elementor .elementor-element-2f68b23.elementor-hidden-mobile {
		display: grid !important;
	}

	/* Drop the desktop 2-column split (heading | items) down to one column —
	   grid-auto-flow stacks 83900d5 (heading) above 1e24f85 (items) in DOM
	   order, 20px row-gap inherited from the bar's own "gap" (untouched). */
	.elementor-element-2f68b23 {
		grid-template-columns: 1fr !important;
		padding: 18px 0 !important;
	}

	/* UPDATE Aug 2026 (round 9): show the heading on mobile/tablet after all —
	   round 8 hid it per the reference image (compact list only), but Itzik
	   asked for it back, resized to fit. Its own border-right (the vertical
	   rule that separated it from the items column on desktop) is zeroed since
	   there's no adjacent column to divide from once stacked; same for the
	   heading widget's own left border and 15%-right/5%-vertical padding,
	   which existed to keep it clear of that column and the divider. Centered
	   rather than right-aligned — sits better as a standalone title above the
	   right-aligned item rows than repeating their alignment would. */
	.elementor-element-83900d5 {
		display: flex !important;
		padding: 0 20px 4px !important;
		border-width: 0 !important;
	}

	.elementor-element-3063972 {
		padding: 0 !important;
		border-width: 0 !important;
		width: 100% !important;
		max-width: 100% !important;
	}

	.elementor-element-3063972 .elementor-heading-title {
		font-size: 22px !important;
		line-height: 1.4 !important;
		border-bottom: 1px solid #B17030;
		max-width: 300px;
		padding-bottom: 7px;
		margin-bottom: -8px;
	}

	.elementor-element-1e24f85 {
		margin: 0 !important;
		padding: 0 20px !important;
	}

	/* The three items: stacked, one per line. */
	.elementor-element-062a596 {
		flex-direction: column !important;
		padding: 0 !important;
		gap: 12px;
		align-items: stretch;
	}

	.elementor-element-062a596 > .elementor-widget-image-box {
		width: 100% !important;
		position: relative; /* containing block for the stretched link below */
	}

	/* icon (first in DOM = right edge in RTL) then value, right-aligned */
	.elementor-element-062a596 .elementor-image-box-wrapper {
		display: flex !important;
		flex-direction: row;
		justify-content: center;
		gap: 10px;
		text-align: right;
	}

	/* The figure's width is a % set by the widget's own image-size control —
	   that percentage is what shrank the icons to 18px. Fixed px instead. */
	.elementor-element-062a596 .elementor-image-box-img {
		width: auto !important;
		flex: 0 0 auto;
		margin: 0 !important;
	}

	.elementor-element-062a596 .elementor-image-box-img img {
		width: 24px !important;
		height: 24px !important;
	}

	.elementor-element-062a596 .elementor-image-box-content {
		text-align: right;
		flex: 0 1 auto;
	}

	/* Title collapses visually but stays in the a11y tree; its link becomes
	   the row-wide tap target (see header comment). */
	.elementor-element-062a596 .elementor-image-box-title {
		font-size: 0 !important;
		line-height: 0 !important;
		margin: 0 !important;
	}

	.elementor-element-062a596 .elementor-image-box-title a {
		position: absolute;
		inset: 0;
		z-index: 2;
	}

	.elementor-element-062a596 .elementor-image-box-description {
		font-size: 16px !important;
		line-height: 1.4 !important;
		margin: 0 !important;
		white-space: nowrap; /* keeps the email on one line */
	}

	/* Form panel: 10px is fine as a gutter beside the map, far too tight once
	   the row wraps and the panel spans the full screen width. */
	.elementor-element-ba1b171 {
		padding: 26px 20px !important;
	}

	/* 16px minimum stops iOS Safari from auto-zooming the page on focus —
	   applies to iPads too, hence the whole ≤1024 range and not just phones. */
	.gbl-contact-form .elementor-field-group > .elementor-field-textual {
		font-size: 16px !important;
	}

	/* 12px text / 40px tall is under the comfortable tap target on touch.
	   NOTE: padding alone does nothing here — Elementor's .elementor-size-sm
	   sets min-height:40px, and 12+15+12 = 39px stays under it, so the button
	   still measured exactly 40px with the padding applied (confirmed live).
	   min-height is the property that actually moves it. */
	.gbl-contact-form .elementor-field-type-submit .elementor-button {
		font-size: 15px !important;
		min-height: 48px !important;
		padding-top: 12px !important;
		padding-bottom: 12px !important;
	}

	/* The consent text wraps to two lines on phones — centring the checkbox
	   against the whole block leaves it floating beside the gap between the
	   lines, so pin it to the first line instead. Harmless on one line. */
	.gbl-contact-form .elementor-field-type-acceptance .elementor-field-option {
		align-items: flex-start;
	}

	/* Cancels the desktop scale(0.7) on touch widths only — at 0.7 the box is
	   14px, under the 24px minimum tap target. Desktop >1024 keeps the 0.7
	   (a deliberate manual tweak by Itzik, not something to "fix" there). */
	#contact-form input[type="checkbox"] {
		transform: none;
		margin-top: 2px !important;
	}
}



/* ------------------------------------------------------------------------
   Community page (1484) — "עשייה חברתית" section: image fills its column
   ------------------------------------------------------------------------
   The section (container 505ca57b) is a 2-column Elementor grid: dark text
   panel on the right (2dfecbc7), photo on the left (image widget 9095f82).
   Grid items stretch to the row height, so the image WIDGET is always as
   tall as the text panel — but the <img> inside it kept its natural 3:2
   ratio (height:auto, from OceanWP's `img` rule and Elementor's
   `.elementor img`), so below ~1900px viewport the photo ended up shorter
   than the panel and left a blank gap under it (at 900px: 295px of image
   in a 725px tall column).

   Making the widget a flex container lets the <img> stretch to the full
   column height as a flex item, and object-fit:cover crops instead of
   distorting. No !important needed: flex `stretch` applies precisely
   BECAUSE the cross size is `height:auto`, so this sidesteps the
   equal-specificity/source-order loss against OceanWP + Elementor rather
   than fighting it (same tactic as the aspect-ratio fix on the latest-posts
   thumbs). object-position keeps the left edge of the photo — the two
   figures on that side — when the crop bites.                             */
.elementor-element-9095f82 {
	display: flex;
	align-items: stretch;
}

.elementor-element-9095f82 img {
	display: block;
	width: 100%;
	object-fit: cover;
	object-position: left center;
}

/* Elementor already stacks this grid to 1 column at its own ≤767px
   breakpoint, but the 768–1024 tablet range stays 2-up, where each column
   is only ~380–500px wide — with the rule above the photo is then cropped
   to a tall narrow sliver (377x854 at 768px). Stacking from 1024 down
   gives the photo the full row width at its natural ratio instead.
   The actual `grid-template-columns` property is set here, not the
   `--e-con-grid-template-columns` custom property: post-1484.css declares
   that variable on `.elementor-1484 .elementor-element.elementor-element-
   505ca57b` (3 classes), which outranks any single-class override of the
   variable — confirmed live, the variable version silently did nothing. */
@media (max-width: 1024px) {
	.elementor-element-505ca57b {
		grid-template-columns: 1fr !important;
		grid-template-rows: auto !important;
	}
}
