/*
 * Shared page widgets: page wrapper, accordion, marquee, reveal animation, carousel, map, plates.
 * Scoped under .ornwp-pg. All values come from tokens.css.
 */
.ornwp-pg { background: var(--ornwp-bg); color: var(--ornwp-text); font-family: var(--ornwp-font-body); overflow-x: clip; }
.ornwp-tnum { font-variant-numeric: tabular-nums; }
.ornwp-plate { filter: sepia(0.22) saturate(0.82) contrast(1.05); border: var(--ornwp-plate-border) solid var(--ornwp-surface); outline: 1px solid var(--ornwp-divider); }

/* Accordion (details/summary: works with no JavaScript) */
.ornwp-details summary { list-style: none; cursor: pointer; }
.ornwp-details summary::-webkit-details-marker { display: none; }
.ornwp-details .ornwp-plus { transition: transform var(--ornwp-dur-fast) ease; }
.ornwp-details[open] .ornwp-plus { transform: rotate(45deg); }

/* Insurance marquee: static wrapped list by default; scrolls only when motion is allowed. Duplicates are hidden from everyone unless scrolling. */
.ornwp-pg .ornwp-marquee-track.ornwp-marquee-track { width: auto; flex-wrap: wrap; justify-content: center; }
.ornwp-dup { display: none; }
@keyframes ornwp-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: no-preference) {
	body:not(.ornwp-no-motion) .ornwp-pg .ornwp-marquee-track.ornwp-marquee-track { width: max-content; flex-wrap: nowrap; animation: ornwp-scroll var(--ornwp-marquee-dur) linear infinite; }
	body:not(.ornwp-no-motion) .ornwp-dup { display: contents; }
}

/* Scroll reveal: hidden only after widgets.js is running (class set by the script), so a failed script never hides content. */
@keyframes ornwp-hero-rise { from { opacity: 0; transform: translateY(var(--ornwp-px-24)); } to { opacity: 1; transform: translateY(0); } }
@media (prefers-reduced-motion: no-preference) {
	.ornwp-reveal-ready body:not(.ornwp-no-reveal) .ornwp-reveal:not(.ornwp-in) { opacity: 0; transform: translateY(var(--ornwp-px-26)); transition: none; }
	.ornwp-reveal-ready body:not(.ornwp-no-reveal) .ornwp-reveal.ornwp-in { transition: opacity 0.9s var(--ornwp-ease), transform 0.9s var(--ornwp-ease); }
	body:not(.ornwp-no-reveal) .ornwp-hero-1 { animation: ornwp-hero-rise 0.8s var(--ornwp-ease) both; }
	body:not(.ornwp-no-reveal) .ornwp-hero-2 { animation: ornwp-hero-rise 0.8s var(--ornwp-ease) 0.1s both; }
	body:not(.ornwp-no-reveal) .ornwp-hero-3 { animation: ornwp-hero-rise 0.8s var(--ornwp-ease) 0.2s both; }
	body:not(.ornwp-no-motion) .ornwp-service-card { transition: transform var(--ornwp-dur) var(--ornwp-ease), box-shadow var(--ornwp-dur) var(--ornwp-ease); }
	body:not(.ornwp-no-motion) .ornwp-service-card:hover { transform: translateY(calc(var(--ornwp-px-8) * -1)); box-shadow: var(--ornwp-shadow-lg); }
	body:not(.ornwp-no-motion) .ornwp-service-img { transition: transform 0.7s var(--ornwp-ease); }
	body:not(.ornwp-no-motion) .ornwp-service-card:hover .ornwp-service-img { transform: scale(1.07); }
	body:not(.ornwp-no-motion) .ornwp-service-arrow { transition: background var(--ornwp-dur-fast) ease, border-color var(--ornwp-dur-fast) ease, transform var(--ornwp-dur-fast) ease; }
	body:not(.ornwp-no-motion) .ornwp-service-card:hover .ornwp-service-arrow { background: var(--ornwp-primary); border-color: var(--ornwp-primary); transform: rotate(45deg); }
}
.ornwp-service-card:focus-visible { outline-offset: var(--ornwp-sp-4); }

/* Home hero: on phones the "now accepting" badge drops below the image. */
@media (max-width: 640px) {
	.ornwp-pg .ornwp-hero-wrap { display: flex; flex-direction: column; align-items: stretch; }
	/* Relative (not static) so the badge paints above the photo overlay. */
	.ornwp-pg .ornwp-hero-wrap .ornwp-hero-badge { position: relative !important; z-index: 1; }
	.ornwp-pg .ornwp-hero-badge { position: static !important; max-width: none !important; margin: 0 var(--ornwp-c-12-2vw-24) var(--ornwp-c-20-4vw-32) !important; border-radius: 0 0 var(--ornwp-radius-md) var(--ornwp-radius-md) !important; }
}

/* Show image first on phones (editable per section) */
@media (max-width: 767px) {
	.ornwp-media-first > .ornwp-media { order: -1; }
}

/* Testimonial carousel: every slide shows without JavaScript; with JavaScript only the first shows until the script takes over, then one slide at a time. */
.ornwp-carousel__controls { gap: var(--ornwp-sp-10); }
/* Without JavaScript the buttons would do nothing, so they stay hidden (this rule outranks the page's own display style). */
html:not(.js) .ornwp-pg .ornwp-carousel__controls { display: none; }
.ornwp-slide + .ornwp-slide { margin-top: var(--ornwp-sp-48); padding-top: var(--ornwp-sp-48); border-top: 1px solid var(--ornwp-divider); }
.js .ornwp-slide + .ornwp-slide { margin-top: 0; padding-top: 0; border-top: 0; }
.js:not(.ornwp-carousel-ready) .ornwp-slide + .ornwp-slide { display: none; }
.js .ornwp-slide[hidden] { display: none; }
.ornwp-carousel__toggle { min-width: var(--ornwp-tap-min); }

/* Map: fills the full height of its column */
.ornwp-map { position: relative; width: 100%; height: 100%; min-height: var(--ornwp-px-320); background: var(--ornwp-surface); }
.ornwp-map iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.ornwp-map__empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: var(--ornwp-text-muted); }

/* Highlighted words inside dark sections use the on-dark highlight color. */
.ornwp-on-dark .ornwp-hl { color: var(--ornwp-highlight-on-dark); }

/* Photo overlays: a uniform floor of darkness under the text, on top of the original gradient. */
.ornwp-pg .ornwp-scrim { box-shadow: inset 0 0 0 100vmax color-mix(in srgb, var(--ornwp-dark) var(--ornwp-scrim-min), transparent); }

/* Text on photos (WCAG AA): a dark band behind the small text blocks, light small labels, and a heavier gradient on the text side of the hero.
   Small orange text cannot reach 4.5:1 over a visible photo, so on photos small labels use the light on-dark color. */
.ornwp-pg .ornwp-onphoto { background: color-mix(in srgb, var(--ornwp-dark) var(--ornwp-onphoto-bg), transparent); padding: var(--ornwp-sp-4) var(--ornwp-space-6); border-radius: var(--ornwp-radius-md); }
.ornwp-pg .ornwp-onphoto div[class] { color: var(--ornwp-on-dark); }
.ornwp-pg .ornwp-hero-wrap > .ornwp-scrim {
	background: linear-gradient(90deg, color-mix(in srgb, var(--ornwp-dark) var(--ornwp-scrim-hero), transparent) 0%, color-mix(in srgb, var(--ornwp-dark) var(--ornwp-scrim-hero), transparent) 55%, color-mix(in srgb, var(--ornwp-dark) 0%, transparent) 100%);
	box-shadow: none;
}
.ornwp-pg .ornwp-hero-content > div:first-child { color: var(--ornwp-on-dark); }
@media (max-width: 900px) {
	.ornwp-pg .ornwp-hero-wrap > .ornwp-scrim { background: color-mix(in srgb, var(--ornwp-dark) var(--ornwp-scrim-hero-phone), transparent); }
}
.ornwp-pg .ornwp-hero-wrap .ornwp-hero-badge { background: color-mix(in srgb, var(--ornwp-on-dark) 98%, transparent); }
.ornwp-pg .ornwp-hero-content a, .ornwp-pg .ornwp-hero-content a:hover { color: var(--ornwp-on-dark); }

/* Announcement banner dismiss */
.ornwp-banner { position: relative; }
.ornwp-banner[hidden] { display: none; }
.ornwp-banner__close { position: absolute; right: var(--ornwp-sp-4); top: 50%; transform: translateY(-50%); display: inline-flex; align-items: center; justify-content: center; width: var(--ornwp-tap-min); height: var(--ornwp-tap-min); padding: 0; border: 0; background: transparent; color: inherit; cursor: pointer; }
.ornwp-banner__close:hover { background: color-mix(in srgb, currentColor 12%, transparent); }

/* Third-party floating widgets (chat, cookie buttons) are lifted above the phone call/text/book bar.
   Extra selectors can be added in Customize > Design Tweaks > "Floating widgets to lift above the phone bar". */
@media (max-width: 767px) {
	body.ornwp-has-mobilebar :is(#tidio-chat, .intercom-lightweight-app-launcher, #hubspot-messages-iframe-container, .crisp-client .cc-1brb6, #launcher, .tawk-min-container, #drift-widget-container, .cky-btn-revisit-wrapper, #cmplz-manage-consent, #CookiebotWidget, .t-consentPrefs, #cookie-law-info-again, .cc-revoke) {
		bottom: calc(var(--ornwp-mobilebar-h) + var(--ornwp-sp-14) + env(safe-area-inset-bottom, 0px)) !important;
	}
}

/* Phones: button text is never below 16px, even where a page style sets a smaller size. */
@media (max-width: 767px) {
	.ornwp-pg .ornwp-btn.ornwp-btn { font-size: max(var(--ornwp-fs-md), var(--ornwp-btn-font-size)); }
}

/* Links styled as buttons, chips or cards are never underlined. Low specificity on purpose: a style set on the element itself still wins.
   Plain links inside running text (no class) keep their underline. */
.ornwp-pg :where(a[class]) { text-decoration: none; }
