/*
 * chrome.css — shared site chrome.
 *
 * Header / nav / dropdown, mobile menu, footer, scroll-to-top equalizer, the
 * shared waveform bars, plus the global resets and scrollbar styling.
 *
 * These 53 rules were previously duplicated byte-for-byte in all nine
 * assets/css/pages/*.css files. Edit them HERE ONLY — a change made in a page
 * file will not apply to the other eight pages.
 *
 * Loaded after components.css and before the per-page stylesheet, so page CSS
 * can still override anything here.
 */

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 14rem; }
.ts-totop { opacity: 0; visibility: hidden; transform: scale(0.85); filter: drop-shadow(0 4px 14px rgba(3,0,60,0.35)); transition: opacity var(--dur-med) var(--ease-out), transform var(--dur-med) var(--ease-out), filter var(--dur-med) var(--ease-out); }
.ts-totop.ts-totop-show { opacity: 1; visibility: visible; transform: scale(1); }
.ts-totop:hover { filter: drop-shadow(0 0 18px rgba(186,0,235,0.75)); }
.ts-totop-eq { display: flex; align-items: flex-end; justify-content: center; gap: 2px; width: 62%; height: 60%; }
.ts-totop-eq i { flex: 1 1 0; height: var(--h, 60%); background: repeating-linear-gradient(to bottom, var(--c, #d24ff2) 0 3px, transparent 3px 6px); transform-origin: bottom; animation: ts-teq 0.9s ease-in-out infinite alternate; animation-delay: var(--d, 0s); }
@keyframes ts-teq { from { transform: scaleY(0.72); } to { transform: scaleY(1.04); } }
.ts-totop:hover .ts-totop-eq i { animation-duration: 0.4s; }
@media (prefers-reduced-motion: reduce) { .ts-totop-eq i { animation: none !important; } }
body { margin: 0; font-family: var(--font-body); color: var(--text-body); -webkit-font-smoothing: antialiased; background: var(--white); }
a.ts-navlink, a.ts-footlink {
    background-image: linear-gradient(90deg, var(--purple-300) 0%, var(--purple-600) 40%, #fff 62%, #fff 100%);
    background-size: 300% 100%; background-position: 100% center;
    -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
    transition: background-position 1.2s var(--ease-out);
  }
a.ts-navlink:hover, a.ts-footlink:hover { background-position: 0% center; }
.ts-navitem { position: relative; display: inline-flex; align-items: center; }
.ts-submenu { position: absolute; top: 100%; left: 50%; transform: translateX(-50%) translateY(3rem); min-width: 15.5rem; display: flex; flex-direction: column; gap: 0.1rem; padding: 0.55rem; border-radius: 0.85rem; background: var(--gradient-night); border: 1px solid rgba(255,255,255,0.16); box-shadow: 0 26px 55px rgba(3,0,40,0.55); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); opacity: 0; visibility: hidden; pointer-events: none; transition: opacity .3s var(--ease-out), transform .35s var(--ease-out); z-index: 70; }
.ts-submenu::before { content: ""; position: absolute; bottom: 100%; left: 0; right: 0; height: 2.6rem; }
.ts-navitem:hover .ts-submenu, .ts-navitem:focus-within .ts-submenu { opacity: 1; visibility: visible; pointer-events: auto; transform: translateX(-50%) translateY(2.5rem); }
.ts-sublink { display: block; padding: 0.6rem 1rem; font-family: var(--font-body); font-weight: 600; font-size: var(--fs-other-4); letter-spacing: 0.08em; text-transform: uppercase; text-decoration: none; white-space: nowrap; background-image: linear-gradient(90deg, var(--purple-300) 0%, var(--purple-600) 40%, #fff 62%, #fff 100%); background-size: 300% 100%; background-position: 100% center; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; transition: background-position 1.2s var(--ease-out); }
.ts-sublink:hover { background-position: 0% center; }
@media (prefers-reduced-motion: reduce) { .ts-submenu { transition: none; } }
.ts-frow .ts-fcol { flex: 1; }
@media (max-width: 1440px) {
    .ts-footer-grid .ts-fbrand { flex: 3 1 0 !important; }
    .ts-footer-grid .ts-fright { flex: 2 1 0 !important; }
    .ts-frow .ts-fcol { flex: 1 1 0 !important; }
    .ts-frow { gap: clamp(1.5rem, 3vw, 3rem) !important; }
  }
.ts-fseam { height: clamp(8px, 1vw, 15px); }
@media (max-width: 1440px) { .ts-fseam { height: clamp(10px, 1vw, 14px); } }
@media (max-width: 480px) { .ts-frow { flex-direction: column !important; } }
@supports not selector(::-webkit-scrollbar) {
    html { scrollbar-width: thin; scrollbar-color: var(--purple-500) #05010f; }
  }
::-webkit-scrollbar { width: 12px; }
::-webkit-scrollbar-track { background: #05010f; }
::-webkit-scrollbar-thumb { background: linear-gradient(180deg, var(--purple-950) 0%, var(--purple-300) 100%); border-radius: 999px; min-height: 80px; }
.ts-logo { width: 16rem; height: auto; display: block; transition: width 0.5s ease-in-out, transform 0.55s var(--ease-out); }
.ts-logo:hover { transform: scale(0.94); }
.ts-scrolled .ts-logo { width: 12rem; }
.ts-logo-m { width: 12rem; height: auto; display: block; transition: width 0.5s ease-in-out, transform 0.55s var(--ease-out); }
.ts-logo-m:hover { transform: scale(0.94); }
.ts-scrolled .ts-logo-m { width: 10rem; }
@keyframes tsRise { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }
@keyframes tsMenuIn { from { opacity: 0; transform: translateY(-12px); } to { opacity: 1; transform: none; } }
.ts-nav-mobile { display: none; }
.ts-mnavrow { border-width: 0 0 1px; border-style: solid; border-image: linear-gradient(90deg, #03006D 0%, #7100FF 55%, #BA00EB 100%) 1; padding: 16px 0; }
.ts-mnavlink {
    display: inline-block; font-family: var(--font-heading); font-weight: 400; text-transform: uppercase;
    font-size: var(--fs-h3); line-height: 1.1; text-decoration: none;
    background-image: linear-gradient(90deg, var(--purple-300) 0%, var(--purple-600) 40%, #fff 62%, #fff 100%);
    background-size: 300% 100%; background-position: 100% center;
    -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
    transition: background-position 1.2s var(--ease-out);
  }
.ts-mnavlink:hover, .ts-mnavlink:active { background-position: 0% center; }
.ts-msub { padding: 7px 0 7px 1.25rem; }
.ts-msublink { display: inline-block; font-family: var(--font-body); font-weight: 500; text-transform: uppercase; letter-spacing: 0.08em; font-size: var(--fs-h5); line-height: 1.2; text-decoration: none; background-image: linear-gradient(90deg, var(--purple-300) 0%, var(--purple-600) 40%, #fff 62%, #fff 100%); background-size: 300% 100%; background-position: 100% center; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; transition: background-position 1.2s var(--ease-out); }
.ts-msublink:hover, .ts-msublink:active { background-position: 0% center; }
.ts-mphone {
    align-self: flex-start; text-decoration: none;
    background-image: linear-gradient(90deg, var(--purple-300) 0%, var(--purple-600) 40%, #fff 62%, #fff 100%);
    background-size: 300% 100%; background-position: 100% center;
    -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
    transition: background-position 2.2s var(--ease-out);
  }
.ts-mphone:hover, .ts-mphone:active { background-position: 0% center; }
.ts-burger span { transition: transform .35s cubic-bezier(.22,.61,.36,1), opacity .25s ease; }
.ts-about-eq-bar { flex: 1 1 0; background-image: linear-gradient(var(--c, #fff), var(--c, #fff)); background-repeat: no-repeat; background-position: bottom; background-size: 0.11rem 100%; transform-origin: bottom; animation-name: ts-idle; animation-iteration-count: infinite; animation-timing-function: ease-in-out; }
@keyframes ts-idle { 0%,100% { transform: scaleY(0.9); } 50% { transform: scaleY(1.08); } }
@media (prefers-reduced-motion: reduce) { .ts-about-eq-bar { animation: none !important; } }
.ts-foot-col { opacity: 0; transform: translateY(3rem); transition: opacity 1.4s var(--ease-out), transform 1.4s var(--ease-out); }
.ts-foot-col.ts-foot-in { opacity: 1; transform: none; }
@media (max-width: 1024px) {
    .ts-fbrand.ts-foot-col { transition-delay: 0s !important; }
    .ts-fright .ts-foot-col { transition-delay: 0.3s !important; }
  }

/* Footer social row + Best of Weddings badge — responsive stacking.
   Moved here 2026-08-19: the badge now renders in the footer on every page. */
@media (max-width: 1024px) { .ts-fsocial-dirs { flex-wrap: wrap; justify-content: center; } .ts-bow { flex: 0 0 100%; display: flex !important; justify-content: center; margin-top: 4px; } }

/* Rich-text blocks (WYSIWYG fields). The container carries the type styles; the
   editor supplies its own <p> tags, so only spacing is set here. */
.ts-rt > p { margin: 0 0 1.375rem; }
.ts-rt > p:last-child { margin-bottom: 0; }
/* Plain text links in copy (rev 2026-10-07): light bg = purple text, underline draws in L→R on hover;
   dark bg (section has color:#fff) = white text, underline on, sweeps away L→R on hover.
   Default box-decoration-break (slice) makes the underline run across wrapped lines in order. */
:where(.ts-rt, p, li) a:not([class]) { color: var(--purple-600); text-decoration: none; background-image: linear-gradient(var(--purple-600), var(--purple-600)); background-repeat: no-repeat; background-size: 0% 1px; background-position: 0% 100%; transition: background-size 0.5s var(--ease-out); }
:where(.ts-rt, p, li) a:not([class]):hover, :where(.ts-rt, p, li) a:not([class]):focus-visible { background-size: 100% 1px; }
[style*="color:#fff"] :where(.ts-rt, p, li) a:not([class]) { color: #fff; background-image: linear-gradient(#fff, #fff); background-size: 100% 1px; background-position: 100% 100%; }
[style*="color:#fff"] :where(.ts-rt, p, li) a:not([class]):hover, [style*="color:#fff"] :where(.ts-rt, p, li) a:not([class]):focus-visible { background-size: 0% 1px; }
@media (prefers-reduced-motion: reduce) { :where(.ts-rt, p, li) a:not([class]) { transition: none; } }
/* rev 2026-10-08: solid bar behind logo + X while the mobile menu is open, so scrolled links pass under it */
#ts-header.is-menu-open { background: rgb(3,0,60) !important; border-bottom-color: rgba(113,0,255,0.35) !important; }
