/* Self-hosted webfonts. Downloaded from Google Fonts and served from this server,
so the site makes no third-party font request and nothing leaks to Google on
page load. These are VARIABLE fonts: one file per family/style/subset covers
the whole weight range, which is why there are 6 files and not 18.
Subsets: latin + latin-ext only (covers all Spanish and English copy here).
Regenerate: see README.md in this folder. */
/* latin */
@font-face {
font-family: 'Cormorant Garamond';
font-style: italic;
font-weight: 500 600;
font-display: swap;
src: url(fonts/cormorant-garamond-italic-latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Cormorant Garamond';
font-style: italic;
font-weight: 500 600;
font-display: swap;
src: url(fonts/cormorant-garamond-italic-latin-ext.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Cormorant Garamond';
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url(fonts/cormorant-garamond-normal-latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Cormorant Garamond';
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url(fonts/cormorant-garamond-normal-latin-ext.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Manrope';
font-style: normal;
font-weight: 400 800;
font-display: swap;
src: url(fonts/manrope-normal-latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Manrope';
font-style: normal;
font-weight: 400 800;
font-display: swap;
src: url(fonts/manrope-normal-latin-ext.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* ============================================================
Theme: "Vitrina Blanca" — Los Joyeritos, Tampa
A jewelry case in daylight: porcelain white space, royal blue
script, faceted gold light. No rounded-corner cards — every
surface is emerald-cut, prong-set or chained, like the pieces
in the vitrine.
Type: Cormorant Garamond (display) / Manrope (body)
============================================================ */
:root{
--paper:#fdfcf8; --porcelain:#f5f2ea; --vitrine:#ffffff;
--ink:#131b3a; --ink-soft:#3c4364; --ink-dim:#6a7090;
--royal:#2434c9; --royal-deep:#16217e; --royal-ghost:rgba(36,52,201,.07);
--sodalite-1:#0e1a56; --sodalite-2:#1b2f9e; --sodalite-3:#0a1140;
--gold:#c99a3f; --gold-2:#e0ba5c; --gold-3:#f6e0a4; --gold-deep:#9a742a; --gold-text:#8a6726;
/* Every stop clears 3:1 on --paper (was 2.50:1 at 40% and 1.80:1 at 65%,
which faded multi-word <em> accents out through the middle). Keeps the
metallic shift. --gold-mid is the 65% stop, kept as its own token purely so
that rule survives theming: in the default palette it is #b3893a (3.1:1),
while every seasonal palette sets it to that theme's own --gold, which was
designed to clear 3.35:1. Pointing the stop straight at --gold instead would
have reintroduced the exact 2.50:1 washout on the default theme.
Both gradients are now composed from the themeable tokens rather than
hard-coded hexes. They resolve to byte-identical colours for the default
palette, but a seasonal theme sets those tokens as inline styles on <html>
— which IS :root, at higher specificity — so var() picks the new values up.
Without this the primary .btn-gold, #annbar and every .dia glyph would have
stayed default gold while the rest of the page changed: a half-applied theme. */
--gold-mid:#b3893a;
--gold-grad-text:linear-gradient(120deg,var(--gold-text) 0%,var(--gold-deep) 40%,var(--gold-mid) 65%,var(--gold-text) 100%);
--gold-grad:linear-gradient(120deg,var(--gold-deep) 0%,var(--gold-2) 30%,var(--gold-3) 50%,var(--gold) 72%,var(--gold-deep) 100%);
--line:#e6e0d0; --line-gold:rgba(201,154,63,.4);
--cut:16px; --cut-sm:8px;
--ease:cubic-bezier(.22,.9,.28,1);
--shadow:0 18px 50px -18px rgba(19,27,58,.18);
--font-d:"Cormorant Garamond",Georgia,serif;
--font-b:"Manrope",system-ui,-apple-system,sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth;overflow-x:clip}
body{font-family:var(--font-b);background:var(--paper);color:var(--ink);line-height:1.6;overflow-x:clip;font-size:16px}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none}
::selection{background:var(--royal);color:#fff}
/* ---------- gold dust canvas (full page, behind everything) ---------- */
#dust{position:fixed;inset:0;z-index:0;pointer-events:none}
.page{position:relative;z-index:1}
/* ---------- faceted cut corners (the anti-rounded-corner) ---------- */
.cut{clip-path:polygon(var(--cut) 0,calc(100% - var(--cut)) 0,100% var(--cut),100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,var(--cut) 100%,0 calc(100% - var(--cut)),0 var(--cut))}
.cut-sm{clip-path:polygon(var(--cut-sm) 0,calc(100% - var(--cut-sm)) 0,100% var(--cut-sm),100% calc(100% - var(--cut-sm)),calc(100% - var(--cut-sm)) 100%,var(--cut-sm) 100%,0 calc(100% - var(--cut-sm)),0 var(--cut-sm))}
.gold-edge{position:relative;display:block;background:var(--gold-grad);padding:1.5px;height:100%}
.gold-edge>.cut,.gold-edge>.cut-sm{background:var(--vitrine);height:100%;box-sizing:border-box}
.faq-item.gold-edge{height:auto}
/* ---------- prong-set frames (photos held like stones) ---------- */
.prong{position:relative;padding:10px}
.prong img{width:100%;height:100%;object-fit:cover}
.prong .claw{position:absolute;width:30px;height:30px;border:3.5px solid var(--gold);z-index:2;pointer-events:none}
.prong .claw.tl{top:0;left:0;border-right:0;border-bottom:0;border-top-left-radius:12px}
.prong .claw.tr{top:0;right:0;border-left:0;border-bottom:0;border-top-right-radius:12px}
.prong .claw.bl{bottom:0;left:0;border-right:0;border-top:0;border-bottom-left-radius:12px}
.prong .claw.br{bottom:0;right:0;border-left:0;border-top:0;border-bottom-right-radius:12px}
/* ---------- cuban chain divider ---------- */
.chain-div{display:block;width:min(420px,70%);margin:0 auto;color:var(--gold);opacity:.9}
.chain-div.left{margin:0}
/* ---------- diamond marker ---------- */
.dia{display:inline-block;width:9px;height:9px;background:var(--gold-grad);transform:rotate(45deg);flex:none}
.dia.blue{background:linear-gradient(135deg,#2434c9,#6b7bff)}
/* ---------- type ---------- */
/* text-wrap:balance evens the rag so the gold <em> accent stops landing
alone on its own line - it was splitting on 6 headings across the site. */
h1,h2,h3,.disp{font-family:var(--font-d);font-weight:600;line-height:1.08;letter-spacing:.005em;text-wrap:balance}
h1{font-size:clamp(40px,7.2vw,76px)}
h2{font-size:clamp(30px,4.6vw,52px)}
h1 em,h2 em{font-style:italic;background:var(--gold-grad-text);-webkit-background-clip:text;background-clip:text;color:transparent;padding-right:.06em}
.kicker{display:flex;align-items:center;gap:10px;font-size:12.5px;font-weight:700;letter-spacing:.24em;text-transform:uppercase;color:var(--royal)}
.kicker .dia{width:7px;height:7px}
.lead{font-size:clamp(16px,1.9vw,18.5px);color:var(--ink-soft);max-width:56ch;text-wrap:pretty}
/* ---------- buttons (cut corners, never pills) ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:50px;padding:13px 26px;font-weight:800;font-size:15px;letter-spacing:.02em;transition:transform .35s var(--ease),box-shadow .35s var(--ease),background .35s;clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px),0 10px)}
.btn:active{transform:scale(.97)}
.btn-gold{background:var(--gold-grad);color:var(--sodalite-3);box-shadow:0 10px 26px -10px rgba(201,154,63,.55)}
.btn-gold:hover{transform:translateY(-2px)}
.btn-royal{background:var(--royal);color:#fff;box-shadow:0 10px 26px -12px rgba(36,52,201,.5)}
.btn-royal:hover{transform:translateY(-2px);background:var(--royal-deep)}
/* The stroke is the parent's background; ::after (inset 1.5px, same polygon)
paints the fill. An inset box-shadow here was clipped by .btn's clip-path,
leaving the outline open at all four chamfers. z-index:-1 paints ::after
after the parent background but before the label, which is what we want. */
.btn-line{border:0;box-shadow:none;color:var(--royal);background:var(--royal);isolation:isolate}
.btn-line::after{content:"";position:absolute;inset:1.5px;clip-path:inherit;background:var(--paper);z-index:-1}
.btn-line:hover::after{background:#f0f0fa}
.btn-white{background:#fff;color:var(--royal-deep)}
.btn svg{width:18px;height:18px;flex:none}
/* ---------- announcement bar ---------- */
#annbar{display:none;background:var(--gold-grad);color:var(--sodalite-3);text-align:center;font-weight:800;font-size:13.5px;padding:9px 40px;position:relative;z-index:60}
#annbar.on{display:block}
#annbar button{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:18px;line-height:1;color:var(--sodalite-3);padding:6px 10px}
/* ---------- header ---------- */
header.site{position:sticky;top:0;z-index:50;background:rgba(253,252,248,.86);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
.nav-in{max-width:1180px;margin:0 auto;display:flex;align-items:center;gap:20px;padding:10px 22px}
.brand{display:flex;align-items:center;gap:12px;flex:none}
/* The owner's real master (assets/logo-master.jpg) is 347x189 of actual artwork —
1.84:1, much squarer than a typical wordmark because the J descender and the
crown dominate the box. So height drives legibility here: at 56px tall the
script reads cleanly, and the source is 3.4x that, which is ample for retina.
Sized by height with width:auto so the aspect can never be distorted. */
.brand img.word{height:56px;width:auto;flex:none}
nav.links{display:flex;gap:18px;margin-left:auto;font-weight:700;font-size:14px;color:var(--ink-soft)}
nav.links a{position:relative;padding:6px 0}
nav.links a::after{content:"";position:absolute;left:0;bottom:0;width:0;height:2px;background:var(--gold-grad);transition:width .35s var(--ease)}
nav.links a:hover::after,nav.links a.here::after{width:100%}
nav.links a.here{color:var(--royal)}
/* dropdowns */
nav.links .dd{position:relative;display:flex;align-items:center}
nav.links .dd>a{display:inline-flex;align-items:center;gap:6px}
nav.links .caret{font-size:9px;color:var(--gold-deep);transition:transform .3s var(--ease);transform:translateY(1px)}
nav.links .dd:hover .caret,nav.links .dd:focus-within .caret{transform:translateY(1px) rotate(180deg)}
nav.links .dd:hover::before,nav.links .dd:focus-within::before{content:"";position:absolute;top:100%;left:-16px;right:-16px;height:20px}
.dd-menu{position:absolute;top:calc(100% + 14px);left:50%;transform:translate(-50%,10px);min-width:238px;background:#fff;border:1px solid var(--line-gold);box-shadow:0 26px 60px -22px rgba(22,33,126,.32);padding:10px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .28s var(--ease),transform .28s var(--ease),visibility .28s;z-index:70;clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px),0 10px)}
.dd-menu::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--gold-grad)}
nav.links .dd:hover .dd-menu,nav.links .dd:focus-within .dd-menu{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%,0)}
.dd-menu a{display:block;padding:11px 14px;font-size:13.5px;font-weight:700;color:var(--ink-soft);white-space:nowrap}
.dd-menu a::after{display:none}
.dd-menu a:hover{background:var(--royal-ghost);color:var(--royal)}
.nav-cta{display:flex;align-items:center;gap:10px;margin-left:6px}
/* padding acts as the stroke: a real border would be clipped at the bevel,
and the royal ES fill DOES respect it, so the mismatch was visible. */
.lang{display:flex;background:var(--line);padding:1.5px;gap:1.5px;overflow:hidden;clip-path:polygon(6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px),0 6px)}
/* opaque fill so the parent's --line background only shows through as the
1.5px padding stroke and the gap between the two buttons */
.lang button{padding:11px 14px;min-height:42px;font-weight:800;font-size:12.5px;color:var(--ink-dim);background:var(--vitrine)}
.lang button.on{background:var(--royal);color:#fff}
.btn-call{min-height:42px;padding:9px 18px;font-size:13.5px}
#burger{display:none;flex-direction:column;gap:5px;padding:12px;margin-left:auto}
#burger span{display:block;width:24px;height:2.5px;background:var(--ink);transition:.3s var(--ease)}
#burger.x span:nth-child(1){transform:translateY(7.5px) rotate(45deg)}
#burger.x span:nth-child(2){opacity:0}
#burger.x span:nth-child(3){transform:translateY(-7.5px) rotate(-45deg)}
#mnav{display:none;position:fixed;inset:0;top:0;z-index:49;background:rgba(253,252,248,.98);backdrop-filter:blur(10px);padding:96px 30px 30px;flex-direction:column;gap:6px;overflow-y:auto}
#mnav.open{display:flex}
#mnav a{font-family:var(--font-d);font-size:26px;font-weight:600;padding:9px 4px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:14px}
#mnav a .dia{width:8px;height:8px}
#mnav .mgroup{border-bottom:1px solid var(--line);padding:2px 0 10px}
#mnav .mlabel{font-size:11.5px;font-weight:800;letter-spacing:.22em;text-transform:uppercase;color:var(--gold-text);padding:12px 4px 4px}
#mnav .msub{display:flex;flex-direction:column}
#mnav .msub a{font-size:20px;border-bottom:0;padding:6px 4px 6px 16px}
#mnav .msub a .dia{width:6px;height:6px}
#mnav .mnav-cta{display:flex;gap:12px;margin-top:22px;flex-wrap:wrap}
/* ---------- hero ---------- */
#hero{position:relative;overflow:clip}
.hero-watermark{position:absolute;left:33%;top:44%;transform:translate(-50%,-50%);width:min(1100px,150%);max-width:none;opacity:.13;pointer-events:none;user-select:none;z-index:0;-webkit-mask-image:radial-gradient(closest-side,#000 62%,transparent 100%);mask-image:radial-gradient(closest-side,#000 62%,transparent 100%)}
.hero-in{max-width:1180px;margin:0 auto;padding:84px 22px 78px;display:grid;grid-template-columns:1.06fr .94fr;gap:56px;align-items:center;position:relative;z-index:1}
.hero-copy{display:flex;flex-direction:column;gap:22px}
/* Hero wordmark sits above the kicker. width/height are on the <img> so the
box is reserved before it loads (no CLS on the LCP element). The negative
bottom margin pulls the kicker back toward the logo, since the flex `gap`
above is tuned for text rows, not a 300px image. */
/* Capped at 260px: the real master is 347px of artwork, so anything wider than
this is being upscaled on a 2x screen and goes soft. Raise this the day a
larger export of the logo exists. */
.hero-logo{width:min(260px,66%);height:auto;margin-bottom:-6px;align-self:start}
.hero-cta{display:flex;gap:14px;flex-wrap:wrap}
.trust{display:flex;gap:10px;flex-wrap:wrap;margin-top:4px}
/* Fill, not outline: the pointed ends cannot be stroked through a clip-path.
gap:0 because the markup already carries &nbsp; between the spans, and
having both produced visibly uneven word spacing inside one line. */
.chip{display:inline-flex;align-items:center;gap:0;font-size:12.5px;font-weight:800;color:var(--ink-soft);border:0;background:rgba(201,154,63,.10);padding:8px 14px;clip-path:polygon(8px 0,calc(100% - 8px) 0,100% 50%,calc(100% - 8px) 100%,8px 100%,0 50%)}
.chip b{color:var(--gold-text)}
.chip .star{color:var(--gold);letter-spacing:1px}
.hero-fig{position:relative}
.hero-fig .prong{aspect-ratio:4/4.6;max-height:600px}
.hero-mini{position:absolute;left:-34px;bottom:34px;width:200px;background:#fff;box-shadow:var(--shadow);padding:10px 10px 12px;display:flex;flex-direction:column;gap:8px}
.hero-mini img{aspect-ratio:1.5;object-fit:cover}
.hero-mini span{font-size:12px;font-weight:800;color:var(--ink-soft);display:flex;gap:8px;align-items:center}
.hero-glow{position:absolute;z-index:-1;border-radius:50%;filter:blur(70px);opacity:.5;pointer-events:none}
.hg-1{width:480px;height:480px;right:-120px;top:-120px;background:radial-gradient(circle,rgba(224,186,92,.35),transparent 65%)}
.hg-2{width:420px;height:420px;left:-140px;bottom:-160px;background:radial-gradient(circle,rgba(36,52,201,.16),transparent 65%)}
.scroll-cue{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);color:var(--ink-dim);font-size:11px;letter-spacing:.3em;text-transform:uppercase;display:flex;flex-direction:column;align-items:center;gap:6px}
.scroll-cue::after{content:"";width:1.5px;height:34px;background:linear-gradient(var(--gold),transparent)}
/* ---------- royal marquee ribbon ---------- */
#ribbon{background:linear-gradient(100deg,var(--sodalite-3),var(--sodalite-2) 55%,var(--sodalite-1));color:#fff;overflow:hidden;padding:15px 0;border-top:1px solid var(--line-gold);border-bottom:1px solid var(--line-gold);position:relative}
#ribbon .track{display:flex;gap:56px;white-space:nowrap;width:max-content;animation:mq 30s linear infinite;font-family:var(--font-d);font-style:italic;font-size:19px;letter-spacing:.06em}
#ribbon .track span{display:flex;align-items:center;gap:56px}
#ribbon .track .dia{width:7px;height:7px}
@keyframes mq{to{transform:translateX(-50%)}}
/* ---------- sections ---------- */
section{position:relative}
.sec{max-width:1180px;margin:0 auto;padding:88px 22px}
.sec-head{display:flex;flex-direction:column;gap:16px;margin-bottom:48px;max-width:720px}
.porcelain{background:linear-gradient(180deg,rgba(245,242,234,.85),rgba(253,252,248,.85))}
/* ---------- services grid ---------- */
.svc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.svc{position:relative;padding:30px 26px 28px;background:var(--vitrine);display:flex;flex-direction:column;gap:12px;transition:transform .45s var(--ease),box-shadow .45s var(--ease)}
.gold-edge:hover .svc{transform:none}
.svc-wrap{transition:transform .45s var(--ease)}
.svc-wrap:hover{transform:translateY(-6px)}
.svc h3{font-size:25px}
.svc p{font-size:14.5px;color:var(--ink-dim);flex:1}
.svc .go{font-weight:800;font-size:13px;color:var(--royal);display:inline-flex;gap:8px;align-items:center;letter-spacing:.04em}
.svc .go::after{content:"→";transition:transform .3s}
.svc-wrap:hover .go::after{transform:translateX(5px)}
.svc-ico{width:52px;height:52px;color:var(--gold-deep)}
.svc-ico svg{width:100%;height:100%}
/* ---------- gallery ---------- */
.gal-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.gal-item{position:relative;aspect-ratio:1;overflow:hidden;cursor:pointer;background:var(--porcelain)}
.gal-item img{width:100%;height:100%;object-fit:cover;transition:transform .8s var(--ease)}
.gal-item:hover img{transform:scale(1.06)}
.gal-item::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(10,17,64,.55),transparent 45%);opacity:0;transition:.45s}
.gal-item:hover::after{opacity:1}
.gal-cap{position:absolute;left:14px;right:44px;bottom:12px;z-index:2;color:#fff;font-size:12.5px;font-weight:700;letter-spacing:.05em;opacity:0;transform:translateY(8px);transition:.45s var(--ease);pointer-events:none;text-shadow:0 1px 10px rgba(0,0,0,.7)}
.gal-item:hover .gal-cap{opacity:1;transform:none}
.gal-zoom{position:absolute;right:10px;bottom:10px;z-index:2;width:34px;height:34px;display:grid;place-items:center;background:rgba(255,255,255,.92);color:var(--royal-deep);opacity:0;transition:.4s;clip-path:polygon(6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px),0 6px)}
.gal-item:hover .gal-zoom{opacity:1}
.gal-zoom svg{width:17px;height:17px;stroke:currentColor}
#lightbox{position:fixed;inset:0;z-index:100;background:rgba(8,11,30,.94);display:none;align-items:center;justify-content:center;padding:26px}
#lightbox.open{display:flex}
#lightbox img{max-width:min(1000px,92vw);max-height:84vh;object-fit:contain}
.lb-x,.lb-p,.lb-n{position:absolute;color:#fff;background:rgba(255,255,255,.1);width:48px;height:48px;display:grid;place-items:center;font-size:22px;transition:.3s;clip-path:polygon(8px 0,calc(100% - 8px) 0,100% 8px,100% calc(100% - 8px),calc(100% - 8px) 100%,8px 100%,0 calc(100% - 8px),0 8px)}
.lb-x:hover,.lb-p:hover,.lb-n:hover{background:var(--royal)}
.lb-x{top:18px;right:18px}
.lb-p{left:14px;top:50%;transform:translateY(-50%)}
.lb-n{right:14px;top:50%;transform:translateY(-50%)}
/* ---------- five-star magic (royal band) ---------- */
#five{background:radial-gradient(1000px 500px at 15% -10%,rgba(107,123,255,.25),transparent 60%),radial-gradient(900px 480px at 105% 115%,rgba(224,186,92,.16),transparent 55%),linear-gradient(160deg,var(--sodalite-3) 0%,var(--sodalite-1) 45%,var(--sodalite-2) 100%);color:#fff}
#five .sec-head .kicker{color:var(--gold-3)}
#five .lead{color:rgba(255,255,255,.82)}
.five-grid{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center}
.magic{background:rgba(255,255,255,.045);border:1px solid rgba(246,224,164,.28);padding:40px 34px;text-align:center;position:relative}
.magic h3{font-size:28px;margin-bottom:6px}
.magic .hint{font-size:13px;color:rgba(255,255,255,.6);margin-bottom:20px}
.stars{display:flex;justify-content:center;gap:8px}
.stars button{font-size:44px;line-height:1;color:rgba(255,255,255,.28);transition:transform .22s var(--ease),color .22s;padding:6px;min-width:52px}
.stars button.lit{color:var(--gold-2);text-shadow:0 0 24px rgba(224,186,92,.55)}
.stars button:hover{transform:scale(1.18) rotate(8deg)}
.magic .stage{display:none;flex-direction:column;gap:16px;align-items:center}
.magic .stage.on{display:flex}
.magic textarea,.magic input{width:100%;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.22);color:#fff;padding:13px 15px;font-family:inherit;font-size:16px}
.magic textarea{min-height:110px;resize:vertical}
.magic textarea::placeholder,.magic input::placeholder{color:rgba(255,255,255,.6)}
.magic .back{font-size:13px;color:rgba(255,255,255,.55);margin-top:4px}
.magic .fine{font-size:11.5px;color:rgba(255,255,255,.62);margin-top:14px}
.rev-cards{display:flex;flex-direction:column;gap:18px}
.rev{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.14);padding:24px 24px 20px;display:flex;flex-direction:column;gap:10px;transition:border-color .4s,transform .4s var(--ease)}
.rev:hover{border-color:rgba(246,224,164,.45);transform:translateX(6px)}
.rev .rstars{color:var(--gold-2);letter-spacing:3px;font-size:15px}
.rev blockquote{font-size:14px;color:rgba(255,255,255,.82);font-style:italic}
.rev .who{font-size:12.5px;font-weight:800;color:rgba(255,255,255,.6);display:flex;gap:8px;align-items:center}
.rev-more{color:var(--gold-3);font-weight:800;font-size:14px;display:inline-flex;gap:8px;align-items:center}
/* ---------- story ---------- */
.story-grid{display:grid;grid-template-columns:.96fr 1.04fr;gap:60px;align-items:center}
.story-fig .prong{aspect-ratio:4/3.1}
.story-copy{display:flex;flex-direction:column;gap:18px}
.story-copy p{color:var(--ink-soft);font-size:16px}
.story-sign{display:flex;align-items:center;gap:16px;margin-top:10px}
.story-sign img{height:56px;width:auto}
.story-sign span{font-size:12.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-dim);font-weight:700}
/* ---------- visit ---------- */
.visit-grid{display:grid;grid-template-columns:1fr 1fr;gap:26px}
.vcard{background:var(--vitrine);padding:34px 30px;display:flex;flex-direction:column;gap:18px}
.vcard h3{font-size:26px;display:flex;align-items:center;gap:12px}
.vcard h3 svg{width:24px;height:24px;color:var(--gold-deep)}
.addr{font-size:17px;font-weight:700;color:var(--ink-soft)}
.hours{display:flex;flex-direction:column}
.hours .row{display:flex;justify-content:space-between;padding:9px 2px;border-bottom:1px dashed var(--line);font-size:14.5px}
.hours .row b{font-weight:800;color:var(--ink-soft)}
.hours .row.today{color:var(--royal);font-weight:800}
.hours .row.today b{color:var(--royal)}
.hours .row .closed{color:#b3541e;font-weight:800}
.open-now{display:inline-flex;align-items:center;gap:9px;font-weight:800;font-size:13px;padding:9px 16px;background:var(--royal-ghost);color:var(--royal);align-self:flex-start;clip-path:polygon(8px 0,calc(100% - 8px) 0,100% 50%,calc(100% - 8px) 100%,8px 100%,0 50%)}
.open-now .dot{width:8px;height:8px;border-radius:50%;background:#1d9e57;box-shadow:0 0 0 4px rgba(29,158,87,.18)}
.open-now.shut .dot{background:#b3541e;box-shadow:0 0 0 4px rgba(179,84,30,.15)}
.vbtns{display:flex;gap:12px;flex-wrap:wrap}
/* ---------- CTA band ---------- */
#ctaband{background:linear-gradient(120deg,var(--sodalite-3),var(--sodalite-1) 60%,var(--sodalite-2));color:#fff;text-align:center}
#ctaband .sec{padding:74px 22px}
#ctaband h2{margin-bottom:10px}
#ctaband p{color:rgba(255,255,255,.75);margin-bottom:26px;font-size:16.5px}
#ctaband .btn-row{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}
/* ---------- footer ---------- */
footer{background:var(--sodalite-3);color:rgba(255,255,255,.78);position:relative}
.foot-chain{background:var(--sodalite-3);padding:18px 0 0;text-align:center}
.foot-in{max-width:1180px;margin:0 auto;padding:46px 22px 30px;display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:40px}
.foot-in h4{font-family:var(--font-d);font-size:20px;color:#fff;margin-bottom:14px}
.foot-in a{display:block;padding:5px 0;font-size:14px;transition:color .3s}
.foot-in a:hover{color:var(--gold-3)}
/* The real logo is royal blue on transparent, which disappears on the navy
footer. A cream plate reads as a deliberate badge and keeps the artwork
untouched — the old brightness(0)+invert(1) flattened it to a white blob. */
.foot-brand .fb-lock{display:inline-flex;align-items:center;background:var(--paper);border-radius:12px;padding:10px 16px;margin-bottom:14px}
.foot-brand img{height:80px;width:auto;display:block}
.foot-brand p{font-size:13.5px;max-width:34ch}
.foot-base{border-top:1px solid rgba(255,255,255,.12);padding:18px 22px;display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;font-size:12.5px;color:rgba(255,255,255,.6);max-width:1180px;margin:0 auto}
.foot-base a{color:rgba(255,255,255,.72)}
/* ---------- mobile quickbar ---------- */
#quickbar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:48;background:rgba(253,252,248,.96);backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:8px 10px calc(8px + env(safe-area-inset-bottom));grid-template-columns:1fr 1fr 1fr;gap:8px}
#quickbar a{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;font-weight:800;color:var(--royal-deep);padding:7px 4px;min-height:48px;justify-content:center}
#quickbar a svg{width:20px;height:20px}
/* --gold-text (5.05:1), not --gold-deep (4.17:1): this is 11px text, which
needs 4.5:1. --gold-deep is fine for the icons it is used for elsewhere. */
#quickbar a.gold{color:var(--gold-text)}
/* A flex container drops the whitespace BETWEEN items, so with gap:0 the stars
sat flush against the rating. The &nbsp; entities are text nodes (anonymous
flex items) and do still render, which is why only this one edge needs it. */
.chip>.star{margin-right:6px}
/* ---------- reveal animations ---------- */
/* Gated on html.js, which base.js sets as its first statement. If the script
is blocked, 404s, or fails to parse, .rv is never hidden at all — without
this, most of every page stays permanently invisible and the <noscript>
rule below does not fire (JS is enabled; it just broke). The safety
animation is the second net: if the observer never runs, reveal anyway. */
html.js .rv{opacity:0;transform:translateY(26px);transition:opacity .8s var(--ease),transform .8s var(--ease);animation:rvSafety 0s linear 4s forwards}
@keyframes rvSafety{to{opacity:1;transform:none}}
html.js .rv.in{opacity:1;transform:none;animation:none}
.rv-d1{transition-delay:.06s}.rv-d2{transition-delay:.14s}.rv-d3{transition-delay:.22s}
@media (prefers-reduced-motion:reduce){
.rv{opacity:1;transform:none;transition:none}
#ribbon .track{animation:none}
html{scroll-behavior:auto}
}
/* ---------- page hero (subpages) ---------- */
.page-hero{padding:60px 22px 48px;max-width:1180px;margin:0 auto;display:flex;flex-direction:column;gap:16px}
.crumbs{font-size:12.5px;font-weight:700;color:var(--ink-dim);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.crumbs a{color:var(--royal)}
.crumbs span.sep{color:var(--gold)}
/* ---------- service detail rows ---------- */
.det-row{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;padding:44px 0;border-bottom:1px solid var(--line)}
.det-row:last-child{border-bottom:0}
.det-row .prong{aspect-ratio:4/3}
.det-copy{display:flex;flex-direction:column;gap:14px}
.det-copy h3{font-size:clamp(24px,3vw,34px)}
.det-copy p{color:var(--ink-soft);font-size:15.5px}
.det-copy ul{list-style:none;display:flex;flex-direction:column;gap:9px;margin:6px 0}
.det-copy ul li{display:flex;gap:12px;align-items:baseline;font-size:14.5px;color:var(--ink-soft)}
.det-copy ul li .dia{width:7px;height:7px;transform:rotate(45deg) translateY(-1px)}
/* ---------- FAQ ---------- */
.faq-list{display:flex;flex-direction:column;gap:14px;max-width:840px}
/* No background here: this element is also .gold-edge, whose gradient IS the
1.5px frame. Setting a background at equal specificity 271 lines later
silently painted over it. The inner .cut-sm supplies the white fill. */
.faq-item{}
.faq-q{width:100%;text-align:left;display:flex;justify-content:space-between;gap:18px;align-items:center;padding:20px 24px;font-weight:800;font-size:16.5px;color:var(--ink);font-family:var(--font-b)}
.faq-q .tog{flex:none;width:30px;height:30px;display:grid;place-items:center;color:var(--gold-deep);border:1.5px solid var(--line-gold);transition:transform .4s var(--ease);clip-path:polygon(6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px),0 6px)}
.faq-item.open .tog{transform:rotate(45deg);background:var(--gold-grad);color:var(--sodalite-3)}
.faq-a{max-height:0;overflow:hidden;transition:max-height .5s var(--ease)}
.faq-a p{padding:0 24px 22px;color:var(--ink-soft);font-size:15px;max-width:64ch}
/* ---------- forms ---------- */
input,textarea,select{font-size:16px}
/* ============================================================
MOBILE — triple-checked
============================================================ */
@media (max-width:1020px){
.svc-grid{grid-template-columns:repeat(2,1fr)}
.gal-grid{grid-template-columns:repeat(3,1fr)}
.five-grid,.story-grid,.det-row{grid-template-columns:1fr;gap:40px}
.hero-in{grid-template-columns:1fr;gap:44px;padding:60px 22px 66px}
/* Matches the hero photo's own 4/4.6, so object-fit:cover crops nothing. The
old 4/3.4 made this frame landscape while the photo is portrait, which threw
away 27% of its height — enough to push the Cuban link's diamond clasp, the
one detail the shot is about, down behind the .hero-mini card. Raised
max-height with it: at 4/4.6 a 390px phone wants ~398px here, and the old
480px cap would have clamped the ratio back off on anything wider. */
.hero-fig .prong{aspect-ratio:4/4.6;max-height:560px}
.foot-in{grid-template-columns:1fr 1fr}
}
/* Header-only breakpoint, deliberately higher than the 760px used for the rest
of the mobile layout. The desktop header needs ~850px of content width once
you add up brand + 7 nav items + the ES/EN toggle + the "Llamar Ahora" CTA
(the Spanish label is wider than the English one). Below that it does not
wrap gracefully: html/body carry overflow-x:clip, so the CTA is silently
sliced off the right edge with no scrollbar to reveal it. Switching the
header to the burger at 900px closes the 761-835px band where that happened.
Everything else still changes at 760px. */
@media (max-width:900px){
nav.links,.nav-cta .btn-call,.nav-cta .btn-royal{display:none}
#burger{display:flex}
}
@media (max-width:760px){
.sec{padding:64px 18px}
.page-hero{padding:44px 18px 36px}
.svc-grid{grid-template-columns:1fr}
.gal-grid{grid-template-columns:repeat(2,1fr);gap:12px}
.visit-grid{grid-template-columns:1fr}
.hero-mini{left:10px;bottom:-24px;width:172px}
.hero-cta .btn{flex:1 1 100%;justify-content:center}
.trust{gap:8px}
.chip{font-size:11.5px;padding:7px 12px}
#quickbar{display:grid}
body{padding-bottom:76px}
footer{padding-bottom:8px}
.stars button{font-size:38px;min-width:46px}
.magic{padding:32px 20px}
.brand img.word{height:44px}
h1{font-size:clamp(36px,10.5vw,52px)}
.scroll-cue{display:none}
.foot-in{grid-template-columns:1fr;gap:28px}
.hg-1{width:300px;height:300px;right:-90px}
.hg-2{width:280px;height:280px;left:-100px}
}
@media (max-width:390px){
.gal-grid{grid-template-columns:1fr 1fr;gap:10px}
.stars button{font-size:34px;min-width:42px;padding:5px}
.btn{padding:12px 18px;font-size:14px}
}
/* ---------- financing strip (home) ---------- */
#finband .sec{padding-top:0}
.fin-strip{display:grid;grid-template-columns:1.15fr .85fr;gap:34px;align-items:center;background:linear-gradient(120deg,var(--sodalite-3),var(--sodalite-1) 62%,var(--sodalite-2));color:#fff;padding:38px 40px;position:relative}
.fin-strip::after{content:"";position:absolute;inset:0;background:radial-gradient(560px 260px at 88% -20%,rgba(224,186,92,.22),transparent 60%);pointer-events:none}
.fin-strip .kicker{color:var(--gold-3)}
.fin-strip h3{font-size:clamp(24px,2.6vw,32px);margin:10px 0 8px}
.fin-strip p{color:rgba(255,255,255,.78);font-size:14.5px;max-width:52ch}
.fin-side{display:flex;flex-direction:column;gap:18px;align-items:flex-start;position:relative;z-index:1}
.fin-logos{display:flex;flex-wrap:wrap;gap:9px}
.fin-logos span{font-size:12px;font-weight:800;letter-spacing:.06em;padding:8px 13px;border:1px solid rgba(246,224,164,.4);color:var(--gold-3);white-space:nowrap;clip-path:polygon(7px 0,calc(100% - 7px) 0,100% 50%,calc(100% - 7px) 100%,7px 100%,0 50%)}
/* ---------- financing page ---------- */
.fin-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:26px;margin-top:44px}
.fin-card{background:var(--vitrine);padding:30px 28px;display:flex;flex-direction:column;gap:12px;height:100%}
.fin-card h3{font-size:24px}
.fin-card p{color:var(--ink-soft);font-size:14.5px;flex:1}
.fin-card .btn{align-self:flex-start}
.fine{font-size:12px;color:var(--ink-dim);max-width:72ch;margin:0 auto}
/* ---------- shop ---------- */
.shop-soon{background:var(--vitrine);border:1px solid var(--line-gold);padding:44px 38px;display:flex;flex-direction:column;gap:14px;align-items:flex-start;max-width:760px;margin:0 auto}
.shop-soon h3{font-size:clamp(26px,3vw,36px)}
.shop-soon p{color:var(--ink-soft);font-size:15.5px}
.shop-teasers{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:34px}
.shop-teasers figure{position:relative;overflow:hidden;background:#fff;box-shadow:0 18px 44px -20px rgba(22,33,126,.18)}
.shop-teasers img{width:100%;aspect-ratio:4/4.6;object-fit:cover;display:block;transition:transform .8s var(--ease)}
.shop-teasers figure:hover img{transform:scale(1.05)}
.shop-teasers figcaption{padding:13px 16px;font-size:13px;font-weight:800;color:var(--royal-deep);background:#fff;position:relative}
.shop-teasers figcaption::before{content:"";position:absolute;top:0;left:16px;right:16px;height:2px;background:var(--gold-grad)}
/* ---------- footer socials ---------- */
.soc-row{display:flex;gap:10px;margin-top:12px}
.soc-row a{display:grid;place-items:center;width:38px;height:38px;padding:0;border:1px solid rgba(255,255,255,.22);color:rgba(255,255,255,.75);transition:.3s;clip-path:polygon(8px 0,calc(100% - 8px) 0,100% 8px,100% calc(100% - 8px),calc(100% - 8px) 100%,8px 100%,0 calc(100% - 8px),0 8px)}
.soc-row a:hover{color:var(--gold-3);border-color:rgba(246,224,164,.6);transform:translateY(-2px)}
.soc-row svg{width:17px;height:17px}
@media (max-width:1020px){
.fin-strip{grid-template-columns:1fr;gap:22px}
nav.links{gap:17px;font-size:13.5px}
}
@media (max-width:760px){
.fin-strip{padding:30px 22px}
.fin-grid{grid-template-columns:1fr}
.shop-teasers{grid-template-columns:1fr}
.hero-watermark{width:180%;opacity:.1;left:50%;top:30%}
.fin-side .btn,.fin-side{width:100%}
.fin-side .btn{justify-content:center}
}
/* ============================================================
v3 — accessibility, areas, contact, GHL slots, FAQ cats
============================================================ */
/* skip link + focus */
.skip-link{position:fixed;left:12px;top:-60px;z-index:100;background:var(--royal);color:#fff;font-weight:800;font-size:14px;padding:12px 18px;transition:top .25s;clip-path:polygon(8px 0,calc(100% - 8px) 0,100% 8px,100% calc(100% - 8px),calc(100% - 8px) 100%,8px 100%,0 calc(100% - 8px),0 8px)}
.skip-link:focus{top:12px}
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid var(--royal);outline-offset:2px;border-radius:2px}
#five a:focus-visible,#five button:focus-visible,footer a:focus-visible{outline-color:var(--gold-2)}
.hp-field{position:absolute!important;left:-9999px!important;width:1px;height:1px;opacity:0;pointer-events:none}
/* FAQ category headers */
.faq-cat{display:flex;align-items:center;gap:12px;font-size:clamp(22px,2.6vw,30px);margin:38px 0 16px}
.faq-cat:first-child{margin-top:0}
.faq-cat .dia{width:9px;height:9px}
/* GHL embed slots */
.ghl-slot{background:var(--vitrine);border:1.5px dashed var(--line-gold);padding:36px 32px;max-width:860px;margin:0 auto}
/* A dashed "Muy pronto" wireframe box was shipping as the last thing above the
footer on 36 of 40 pages. A dashed border is the universal unfinished signal
and it undercut the premium read on a site selling gold. Hide the slot until
an embed actually lands: base.js adds .ghl-live in injectEmbed() and removes
it when the value is cleared, so this needs no other machinery. The whole
section collapses too, rather than leaving an empty padded band. */
.ghl-slot:not(.ghl-live){display:none}
.pageghl:not(:has(.ghl-live)){display:none}
.ghl-slot.ghl-live{border-style:solid;padding:18px}
.ghl-ph{display:flex;flex-direction:column;gap:12px;align-items:flex-start}
.ghl-ph h3{font-size:clamp(22px,2.6vw,30px)}
.ghl-ph p{color:var(--ink-soft);font-size:14.5px;max-width:56ch}
/* areas hub grid */
.areas-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.area-card .vcard{display:flex;flex-direction:column;gap:8px;padding:26px 24px;transition:transform .4s var(--ease)}
.area-card:hover .vcard{transform:translateY(-4px)}
.area-card .area-name{font-family:var(--font-d);font-size:26px;font-weight:600;color:var(--ink)}
.area-card .area-blurb{font-size:12.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--royal)}
.area-card .go{font-weight:800;font-size:13px;color:var(--gold-text);margin-top:6px}
.area-note{text-align:center;margin-top:38px;display:flex;flex-direction:column;gap:16px;align-items:center}
.area-note p{color:var(--ink-soft);max-width:64ch}
.area-faq{margin-top:14px;padding-top:34px}
.area-links{display:flex;gap:14px;flex-wrap:wrap;margin-top:30px}
/* contact socials on white card */
.soc-royal a{border-color:var(--line-gold);color:var(--royal-deep)}
.soc-royal a:hover{color:var(--gold-deep);border-color:var(--gold)}
/* reviews page wall */
#revList[data-all]{display:flex;flex-direction:column;gap:18px}
#revList[data-all]:has(.rev:nth-child(5)){max-height:560px;overflow:auto;padding-right:6px;scrollbar-width:thin;scrollbar-color:var(--line-gold) transparent}
/* mobile */
@media (max-width:1020px){
.areas-grid{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:760px){
.areas-grid{grid-template-columns:1fr}
.ghl-slot{padding:26px 20px}
}
/* ============================================================
round 2 — cookie consent, per-page slots, tall dropdowns
============================================================ */
#cookiebar{position:fixed;left:0;right:0;bottom:0;z-index:80;background:rgba(253,252,248,.98);backdrop-filter:blur(12px);border-top:1.5px solid var(--line-gold);box-shadow:0 -18px 50px -22px rgba(19,27,58,.25);padding:16px 18px calc(16px + env(safe-area-inset-bottom))}
#cookiebar .cb-in{max-width:1180px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
#cookiebar p{font-size:13.5px;color:var(--ink-soft);flex:1 1 380px;margin:0}
#cookiebar .cb-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
#cookiebar .cb-row a{font-size:13px;font-weight:800;color:var(--royal);text-decoration:underline}
#cookiebar .btn{min-height:42px;padding:10px 18px;font-size:13.5px}
.linklike{color:rgba(255,255,255,.6);font-size:inherit;text-decoration:none;padding:0;font-weight:inherit}
.linklike:hover{color:var(--gold-3)}
.sms-consent{font-size:11.5px;color:var(--ink-dim);margin-top:12px;line-height:1.5;max-width:72ch}
.sms-consent a{color:var(--royal);font-weight:700}
.ghl-page{margin-top:26px}
.ghl-page[hidden]{display:none}
.pageghl .sec{max-width:1180px}
nav.links .dd .dd-menu{max-height:72vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--line-gold) transparent}
@media (max-width:760px){
#cookiebar .btn{flex:1;justify-content:center}
body:has(#cookiebar:not([hidden])) #quickbar{display:none}
}
.nearby{margin-top:38px;padding-top:28px;border-top:1px solid var(--line)}
.nearby h3{font-size:clamp(20px,2.4vw,26px);margin-bottom:14px}
.nearby-row{display:flex;gap:12px;flex-wrap:wrap}
.nearby-link{display:inline-flex;align-items:center;gap:9px;font-weight:800;font-size:13.5px;color:var(--royal);padding:10px 16px;border:1.5px solid var(--line);background:#fff;clip-path:polygon(8px 0,calc(100% - 8px) 0,100% 8px,100% calc(100% - 8px),calc(100% - 8px) 100%,8px 100%,0 calc(100% - 8px),0 8px);transition:border-color .3s,transform .3s}
.nearby-link:hover{border-color:var(--gold);transform:translateY(-2px)}
.nearby-link .dia{width:6px;height:6px}
.nearby-link.all{color:var(--gold-text)}
.map-embed{border:1.5px solid var(--line);clip-path:polygon(14px 0,calc(100% - 14px) 0,100% 14px,100% calc(100% - 14px),calc(100% - 14px) 100%,14px 100%,0 calc(100% - 14px),0 14px)}
.map-embed iframe{display:block}
/* ---------- social follow strip ---------- */
.social-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.social-tile .vcard{display:flex;flex-direction:column;align-items:center;gap:8px;padding:30px 20px;text-align:center;transition:transform .4s var(--ease)}
.social-tile:hover .vcard{transform:translateY(-4px)}
.social-tile svg{width:34px;height:34px;color:var(--royal)}
.social-tile b{font-size:17px;color:var(--ink)}
.social-tile .handle{font-size:12.5px;font-weight:700;color:var(--gold-text);letter-spacing:.04em}
@media (max-width:760px){.social-strip{grid-template-columns:1fr;gap:14px}.social-tile .vcard{flex-direction:row;justify-content:flex-start;text-align:left;padding:18px 20px}.social-tile .handle{margin-left:auto}}
/* per-page slot placeholders (compact 2-col; .one = pages with only a form OR only a survey) */
.ghl-intro{max-width:860px;margin:0 auto 22px;display:flex;flex-direction:column;gap:10px;align-items:flex-start}
.ghl-intro h2{font-size:clamp(24px,3vw,34px);margin:0}
.ghl-intro .lead{margin:0;max-width:62ch;font-size:16px;color:var(--ink-soft)}
@media (max-width:760px){.ghl-intro{margin-bottom:18px}}
.pageghl-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;max-width:1180px;margin:0 auto}
.pageghl-grid.one{grid-template-columns:1fr;max-width:860px}
.pageghl .ghl-slot{max-width:none;margin:0;padding:22px 24px}
.ghl-ph-sm{gap:8px}
.ghl-ph-sm p{font-size:13px}
.ghl-slot.ghl-live{grid-column:1/-1}
@media (max-width:760px){.pageghl-grid{grid-template-columns:1fr}}
/* ============================================================
v5 — modern polish: light behavior (sheen, glow, draw).
Transform/opacity/filter only — zero layout impact.
============================================================ */
/* 1 — gold hairline scroll-progress bar (JS-injected in header) */
#goldbar{position:absolute;left:0;bottom:-1px;width:100%;height:2px;background:var(--gold-grad);transform:scaleX(0);transform-origin:left;z-index:51;pointer-events:none}
/* 2 — header settles on scroll (shadow + wordmark scale, zero CLS) */
header.site{transition:box-shadow .4s var(--ease),background .4s}
.brand img.word{transition:transform .4s var(--ease);transform-origin:left center}
header.site.scrolled{background:rgba(253,252,248,.94);box-shadow:0 10px 30px -18px rgba(19,27,58,.22)}
header.site.scrolled .brand img.word{transform:scale(.88)}
/* 3 — btn-gold light-sweep sheen (auto-masked by the cut clip-path) */
.btn{position:relative}
.btn-gold::before{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 40%,rgba(255,255,255,.5) 50%,transparent 60%);transform:translateX(-130%);pointer-events:none}
.btn-gold:hover::before,.btn-gold:focus-visible::before{transition:transform .8s var(--ease);transform:translateX(130%)}
/* 4 — back-to-top faceted diamond (JS-injected) */
#totop{position:fixed;right:22px;bottom:26px;z-index:47;width:46px;height:46px;background:var(--gold-grad);color:var(--sodalite-3);display:grid;place-items:center;transform:rotate(45deg) translateY(14px);opacity:0;pointer-events:none;transition:opacity .4s,transform .4s var(--ease);box-shadow:0 12px 28px -12px rgba(154,116,42,.5)}
#totop.show{opacity:1;pointer-events:auto;transform:rotate(45deg)}
#totop svg{transform:rotate(-45deg);width:18px;height:18px}
#totop:hover{transform:rotate(45deg) translateY(-3px)}
@media (max-width:760px){#totop{display:none}}
/* 5 — gallery hover: calmer zoom + caption glide */
.gal-item img{transition:transform 1.1s var(--ease),filter 1.1s var(--ease)}
.gal-item:hover img{transform:scale(1.045);filter:brightness(1.04) saturate(1.05)}
.gal-item::after{transition:opacity .5s var(--ease)}
.gal-cap{transition:opacity .5s var(--ease) .06s,transform .5s var(--ease) .06s}
/* 6 — dropdown item stagger (delay capped at n+5 for tall menus) */
.dd-menu a{opacity:0;transform:translateY(5px);transition:opacity .3s var(--ease),transform .3s var(--ease),background .2s}
nav.links .dd:hover .dd-menu a,nav.links .dd:focus-within .dd-menu a{opacity:1;transform:none}
.dd-menu a:nth-child(1){transition-delay:.03s}
.dd-menu a:nth-child(2){transition-delay:.06s}
.dd-menu a:nth-child(3){transition-delay:.09s}
.dd-menu a:nth-child(4){transition-delay:.12s}
.dd-menu a:nth-child(n+5){transition-delay:.15s}
/* 7 — hero mini-card gentle float */
@keyframes ljFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.hero-mini{animation:ljFloat 7s ease-in-out infinite}
/* 8 — gold-edge frame catches light on card hover */
.gold-edge{transition:filter .45s var(--ease),box-shadow .45s var(--ease)}
.svc-wrap:hover .gold-edge,.area-card:hover .gold-edge,.social-tile:hover .gold-edge{filter:brightness(1.07) saturate(1.12);box-shadow:0 16px 40px -18px rgba(201,154,63,.45)}
/* 9 — announcement bar shimmer (only when admin-enabled) */
@keyframes ljShimmer{0%{background-position:130% 0}100%{background-position:-30% 0}}
#annbar.on{background:linear-gradient(105deg,#9a742a 0%,#e0ba5c 30%,#f6e0a4 46%,#c99a3f 62%,#9a742a 100%);background-size:220% 100%;animation:ljShimmer 9s linear infinite}
/* 10 — lightbox entrance: fade + settle (close stays instant) */
@keyframes lbBg{from{opacity:0}}
@keyframes lbImg{from{opacity:0;transform:scale(.96)}}
#lightbox.open{animation:lbBg .3s var(--ease)}
#lightbox.open img{animation:lbImg .38s var(--ease)}
/* 11 — chain-divider draw-in (progressive, JS-free) */
@supports (animation-timeline: view()){
@keyframes ljWipe{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
.chain-div{animation:ljWipe .9s var(--ease) both;animation-timeline:view();animation-range:entry 10% entry 55%}
@media (prefers-reduced-motion:reduce){.chain-div{animation:none;clip-path:none}}
}
/* ---------- v5 shared reduced-motion kill-switches (keep LAST) ---------- */
@media (prefers-reduced-motion:reduce){
#goldbar,header.site,.brand img.word,.gal-item img,.gal-cap,.dd-menu a,.gold-edge,#totop{transition:none}
.hero-mini,#annbar.on,#lightbox.open,#lightbox.open img,.chain-div{animation:none}
.btn-gold::before{display:none}
.gal-item:hover img{transform:none;filter:none}
#annbar.on{background:var(--gold-grad)}
.dd-menu a{opacity:1;transform:none}
}