/* =====================================================================
   NXP POLISH LAYER — shared by the Nexora example sites.
   Same motion language as the Nexora site:
     A masked line rise (headings)   B lift + focus (paragraphs)
     C settle (buttons, labels)      D quiet lift (cards, blocks)
   Rules: animate transform + opacity only, pause every loop while its section is off screen,
   and switch everything off for prefers-reduced-motion. Each site re-themes this file through
   the --nxp-* variables in its own section at the bottom of polish.css.
   ===================================================================== */
:root{
  --nxp-reveal:cubic-bezier(.16,1,.3,1);
  --nxp-soft:cubic-bezier(.25,.8,.3,1);
  --nxp-a:#8b5cf6;                         /* primary accent */
  --nxp-b:#6e3ff2;                         /* secondary accent */
  --nxp-orb-a:rgba(139,92,246,.22);        /* ambient orb colours */
  --nxp-orb-b:rgba(110,63,242,.16);
  --nxp-prog:linear-gradient(90deg,var(--nxp-a),var(--nxp-b));
  --nxp-spot:rgba(255,255,255,.12);        /* pointer spotlight on cards */
  --nxp-top-bg:#111;--nxp-top-fg:#fff;     /* back-to-top button */
  --mq-bg:transparent;--mq-fg:inherit;--mq-dot:var(--nxp-a);--mq-line:rgba(128,128,128,.25);
  --mq-font:inherit;
  --nxp-mark-font:inherit;--nxp-mark-fill:linear-gradient(180deg,rgba(128,128,128,.32),rgba(128,128,128,0) 82%);
}

/* ---------- scroll progress + back to top ---------- */
.nxp-progress{position:fixed;left:0;right:0;top:0;height:3px;z-index:9999;pointer-events:none}
.nxp-progress i{display:block;height:100%;background:var(--nxp-prog);transform-origin:0 50%;transform:scaleX(0)}
.nxp-top{position:fixed;right:max(16px,env(safe-area-inset-right));bottom:max(16px,env(safe-area-inset-bottom));z-index:900;display:grid;place-items:center;
  width:46px;height:46px;padding:0;border:1px solid rgba(128,128,128,.35);border-radius:50%;background:var(--nxp-top-bg);color:var(--nxp-top-fg);cursor:pointer;
  opacity:0;transform:translateY(12px);pointer-events:none;transition:opacity .3s ease,transform .3s var(--nxp-soft),background .2s ease}
html.nxp-show-top .nxp-top{opacity:1;transform:none;pointer-events:auto}
.nxp-top:hover{background:var(--nxp-a);color:#fff}
.nxp-top svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* ---------- entrance + scroll reveal ---------- */
@keyframes nxLine{from{transform:translateY(100%)}to{transform:translateY(0)}}
@keyframes nxSub{from{opacity:0;transform:translateY(14px);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
@keyframes nxPill{from{opacity:0;transform:translateY(8px) scale(.972)}to{opacity:1;transform:none}}
@keyframes nxLift{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
@keyframes nxVisual{from{opacity:0;transform:translateY(24px) scale(.95)}to{opacity:1;transform:none}}
@keyframes nxImg{from{opacity:0;transform:translateY(22px) scale(1.04)}to{opacity:1;transform:none}}

.nxp-l{display:block;overflow:hidden;padding:.3em .14em .22em;margin:-.3em -.14em -.22em}
.nxp-li{display:block}
.nxp-split{display:flex;flex-direction:column}      /* keeps neighbouring line masks from collapsing their margins */

html.nxp [data-nxp="line"]:not(.nxp-split):not(.nxp-done){opacity:0}
html.nxp .nxp-li{transform:translateY(100%)}
html.nxp [data-nxp]:not([data-nxp="line"]):not([data-nxp="draw"]):not(.nxp-in){opacity:0}

html.nxp .nxp-in .nxp-li,html.nxp .nxp-in.nxp-li{animation:nxLine 1.05s var(--nxp-reveal) calc(var(--d,0s) + var(--l,0) * .1s) both}
html.nxp [data-nxp="sub"].nxp-in{animation:nxSub .85s var(--nxp-reveal) var(--d,0s) both}
html.nxp [data-nxp="pill"].nxp-in{animation:nxPill .65s var(--nxp-soft) var(--d,0s) both}
html.nxp [data-nxp="lift"].nxp-in{animation:nxLift .8s var(--nxp-reveal) var(--d,0s) both}
html.nxp [data-nxp="visual"].nxp-in{animation:nxVisual 1.2s var(--nxp-reveal) var(--d,0s) both}
html.nxp [data-nxp="img"].nxp-in{animation:nxImg .95s var(--nxp-reveal) var(--d,0s) both}
html.nxp [data-nxp].nxp-fin{animation:none!important}   /* added once an entrance has played, so finished elements stop holding layers */
@media (max-width:552px){
  html.nxp [data-nxp="sub"].nxp-in{animation-name:nxLift}
  html.nxp .nxp-in .nxp-li,html.nxp .nxp-in.nxp-li{animation-duration:.92s}
}

/* the sites' own fade-in is replaced by the layer above */
html.js-reveal .reveal:not([data-nxp]){opacity:1!important;transform:none!important;transition:none!important}

/* ---------- ambient backdrops (injected) ---------- */
[data-nxp-fx]{position:relative;isolation:isolate;overflow:hidden;overflow:clip}
.nxp-fx{position:absolute;inset:0;z-index:-1;overflow:hidden;pointer-events:none}
.nxp-fx i{position:absolute;display:block}
.nxp-orb{width:min(680px,88vw);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle closest-side,var(--nxp-orb-a),transparent 70%);
  animation:nxOrb 30s ease-in-out infinite alternate;animation-play-state:paused}
.nxp-orb.o1{left:var(--o1x,-14%);top:var(--o1y,-18%)}
.nxp-orb.o2{right:var(--o2x,-16%);bottom:var(--o2y,-18%);background:radial-gradient(circle closest-side,var(--nxp-orb-b),transparent 70%);animation-duration:38s;animation-delay:-12s}
.fx-b .nxp-orb.o1{--o1x:56%;--o1y:-22%}.fx-b .nxp-orb.o2{--o2x:48%;--o2y:-16%}
.is-vis .nxp-orb{animation-play-state:running;will-change:transform}
@keyframes nxOrb{0%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(7%,5%,0) scale(1.1)}100%{transform:translate3d(-5%,9%,0) scale(.95)}}

/* floating particles (look comes from each site) */
.nxp-parts{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:1}
.nxp-p{position:absolute;left:var(--x,50%);bottom:-24px;width:var(--s,8px);height:var(--s,8px);border-radius:50%;opacity:0;
  animation:nxpRise var(--dur,14s) linear var(--del,0s) infinite;animation-play-state:paused}
.is-vis .nxp-p{animation-play-state:running}
@keyframes nxpRise{0%{transform:translate3d(0,0,0);opacity:0}12%{opacity:var(--op,.7)}85%{opacity:var(--op,.7)}100%{transform:translate3d(var(--dx,20px),-92vh,0);opacity:0}}

/* ---------- marquee strip ---------- */
.nxp-mq{position:relative;overflow:hidden;background:var(--mq-bg);color:var(--mq-fg);border-block:1px solid var(--mq-line);font-family:var(--mq-font)}
.nxp-mq::before,.nxp-mq::after{content:"";position:absolute;top:0;bottom:0;z-index:2;width:10%;pointer-events:none}
.nxp-mq::before{left:0;background:linear-gradient(90deg,var(--mq-fade,var(--mq-bg)),transparent)}
.nxp-mq::after{right:0;background:linear-gradient(270deg,var(--mq-fade,var(--mq-bg)),transparent)}
.nxp-mq-track{display:flex;width:max-content;padding:15px 0;animation:nxMq 48s linear infinite;animation-play-state:paused}
.is-vis .nxp-mq-track{animation-play-state:running}
.nxp-mq:hover .nxp-mq-track{animation-play-state:paused}
.nxp-mq-set{display:flex}
.nxp-mq-set span{display:inline-flex;align-items:center;gap:30px;padding-right:30px;white-space:nowrap;font-size:.8rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase}
.nxp-mq-set span::after{content:"";flex:none;width:6px;height:6px;border-radius:50%;background:var(--mq-dot)}
@keyframes nxMq{to{transform:translateX(-50%)}}

/* ---------- misc components ---------- */
.nxp-label{display:inline-block;margin:0 0 14px;font-size:.74rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--nxp-a)}
.nxp-imgw{display:block;overflow:hidden;border-radius:inherit}
.nxp-imgw img{display:block;width:100%;transition:transform .9s var(--nxp-reveal)}
@media (hover:hover){.nxp-imgw:hover img{transform:scale(1.06)}}
[data-nxp-spot]{position:relative}
[data-nxp-spot]::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .3s ease;
  background:radial-gradient(380px circle at var(--mx,50%) var(--my,50%),var(--nxp-spot),transparent 62%)}
@media (hover:hover){[data-nxp-spot]:hover::after{opacity:1}}
[data-nxp-par]{transition:translate .7s var(--nxp-soft)}
[data-nxp-mag]{transition:translate .35s var(--nxp-soft)}
.nxp-mark{display:block;margin:0 0 -.08em;text-align:center;font-family:var(--nxp-mark-font);font-size:clamp(44px,calc((min(100vw,1200px) - 80px) / var(--mark-k,5.6)),210px);font-weight:700;
  line-height:.86;letter-spacing:-.02em;background:var(--nxp-mark-fill);-webkit-background-clip:text;background-clip:text;color:transparent;user-select:none;pointer-events:none;overflow:hidden}
.nxp-nav-ind{display:none}

@media (prefers-reduced-motion:reduce){
  .nxp-mq-track{flex-wrap:wrap;justify-content:center;width:auto;transform:none;animation:none}
  .nxp-mq-set.dup{display:none}
  .nxp-mq-set{flex-wrap:wrap;justify-content:center;row-gap:10px}
  .nxp-mq::before,.nxp-mq::after{display:none}
  .nxp-orb,.nxp-p,.nxp-mq-track{animation:none}
}

/* ---------- orbit art: fills an empty column (the monogram sits in .core) ---------- */
.nxp-orbit{position:relative;width:min(100%,340px);aspect-ratio:1;margin-top:clamp(28px,4vw,44px)}
.nxp-orbit::before{content:"";position:absolute;inset:-14%;border-radius:50%;background:radial-gradient(circle closest-side,var(--nxp-orb-a),transparent 72%)}
.nxp-orbit .r{position:absolute;display:block;border:1px solid var(--nxp-ring,rgba(128,128,128,.35));border-radius:50%;animation:nxSpin 60s linear infinite;animation-play-state:paused}
.nxp-orbit .r1{inset:0}
.nxp-orbit .r2{inset:15%;border-style:dashed;animation-duration:44s;animation-direction:reverse}
.nxp-orbit .r3{inset:30%;animation-duration:30s}
.nxp-orbit .r::before{content:"";position:absolute;left:50%;top:0;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;border-radius:50%;background:var(--nxp-a);box-shadow:0 0 14px 3px var(--nxp-orb-a)}
.nxp-orbit .r2::before{width:6px;height:6px;margin:-3px 0 0 -3px}
.nxp-orbit .core{position:absolute;inset:37%;display:grid;place-items:center;border-radius:50%;color:var(--nxp-a);text-align:center;line-height:1;
  background:radial-gradient(circle,var(--nxp-orb-a),transparent 74%);animation:nxPulse 4s ease-in-out infinite;animation-play-state:paused}
.is-vis .nxp-orbit .r,.is-vis .nxp-orbit .core{animation-play-state:running}
@keyframes nxSpin{to{transform:rotate(360deg)}}
@keyframes nxPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
@media (prefers-reduced-motion:reduce){.nxp-orbit .r,.nxp-orbit .core{animation:none}}

/* =====================================================================
   LUMIÈRE — theme + upgrades for the shared polish layer
   Warm candlelight: brass glows, bokeh lights drifting up the hero, slow Ken Burns on the photo,
   paper grain on the menu, dotted price leaders, and an "open now" badge from the visitor's clock.
   ===================================================================== */
:root{
  --nxp-a:#b08d57;--nxp-b:#33493a;
  --nxp-orb-a:rgba(176,141,87,.20);--nxp-orb-b:rgba(76,107,87,.18);
  --nxp-prog:linear-gradient(90deg,#8d6c3a,#d9bd8a);
  --nxp-spot:rgba(176,141,87,.16);
  --nxp-top-bg:#17130f;--nxp-top-fg:#f4efe6;
  --mq-bg:#17130f;--mq-fg:rgba(244,239,230,.74);--mq-dot:#b08d57;--mq-line:rgba(244,239,230,.1);
  --mq-font:'Fraunces',Georgia,serif;
  --nxp-mark-font:'Fraunces',Georgia,serif;
  --nxp-mark-fill:linear-gradient(180deg,rgba(176,141,87,.36),rgba(176,141,87,0) 84%);
  --mark-k:4.6;
}
.nxp-mq-set span{font-style:italic;font-weight:500;letter-spacing:.08em;text-transform:none;font-size:1.05rem}

/* header: glass once scrolled, brass underline on the active link */
.site-header{transition:background .35s ease,box-shadow .35s ease}
.site-header.nxp-scrolled{background:rgba(23,19,15,.94);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 1px 0 rgba(244,239,230,.08)}
.primary-nav a:not(.nav-cta){position:relative}
.primary-nav a:not(.nav-cta)::after{content:"";position:absolute;left:0;right:0;bottom:-7px;height:1px;background:var(--brass);transform:scaleX(0);transform-origin:left;transition:transform .4s var(--nxp-reveal)}
.primary-nav a:not(.nav-cta):hover::after,.primary-nav a.nxp-active::after{transform:scaleX(1)}
.primary-nav a.nxp-active{color:var(--ivory)}
.nav-cta{transition:background .25s ease,border-color .25s ease}
.nav-cta:hover{background:rgba(176,141,87,.18);border-color:var(--brass)}

/* hero: slow Ken Burns, a warm pool of light, bokeh candles */
.hero{overflow:hidden}
.hero-image{transform-origin:62% 42%;animation:lmKen 34s ease-in-out infinite alternate;animation-play-state:paused;will-change:transform}
.hero.is-vis .hero-image{animation-play-state:running}
@keyframes lmKen{from{transform:scale(1.04)}to{transform:scale(1.16)}}
.hero::before{content:"";position:absolute;left:0;right:0;bottom:0;height:55%;z-index:1;pointer-events:none;
  background:radial-gradient(70% 100% at 18% 100%,rgba(176,141,87,.26),transparent 70%)}
.hero-overlay{z-index:1}
.hero-content{z-index:2}
.nxp-parts{z-index:1}
.nxp-p{background:radial-gradient(circle,rgba(255,228,176,.95),rgba(176,141,87,.38) 46%,transparent 72%);box-shadow:0 0 14px rgba(176,141,87,.35);animation-duration:calc(var(--dur,14s) * 1.6)}
.hero-eyebrow{display:inline-flex;align-items:center;gap:14px}
.hero-eyebrow::before{content:"";width:36px;height:1px;background:var(--brass)}
.hero-content h1{text-shadow:0 2px 30px rgba(0,0,0,.35)}

/* menu: paper grain, dotted leaders, diamond bullets */
.section:not(.section-dark){background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .35 0 0 0 0 .27 0 0 0 0 .18 0 0 0 .055 0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23n)'/%3E%3C/svg%3E")}
.menu-item-row{align-items:baseline}
.menu-item-row>span:first-child{order:1}
.menu-item-row::before{content:"";order:2;flex:1;min-width:24px;margin:0 8px;border-bottom:1.5px dotted rgba(23,19,15,.28);transform:translateY(-4px)}
.menu-price{order:3;font-family:var(--font-display);font-style:italic;font-size:1.05rem}
.menu-item{transition:transform .35s var(--nxp-soft)}
@media (hover:hover){.menu-item:hover{transform:translateX(6px)}.menu-item:hover .menu-price{color:var(--green)}}
.menu-group h3{display:flex;align-items:center;gap:12px}
.menu-group h3::before{content:"";width:7px;height:7px;background:var(--brass);transform:rotate(45deg);flex:none}
.kicker{display:inline-flex;align-items:center;gap:14px}
.kicker::before{content:"";width:30px;height:1px;background:currentColor;opacity:.7}

/* signatures + gallery: framed photos with hover zoom and a caption rule */
.nxp-imgw{border-radius:2px;position:relative}
.feature-card img{height:340px;object-fit:cover}
.feature-card figcaption{position:relative;padding-top:14px;margin-top:0}
.feature-card figcaption::before{content:"";position:absolute;left:0;top:0;width:34px;height:1px;background:var(--brass);transition:width .5s var(--nxp-reveal)}
@media (hover:hover){.feature-card:hover figcaption::before{width:100%}}
.gallery-grid .nxp-imgw:nth-child(1) img,.gallery-grid .nxp-imgw:nth-child(5) img{height:340px}
.gallery-grid .nxp-imgw::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 50%,rgba(23,19,15,.55));opacity:0;transition:opacity .45s ease;pointer-events:none}
@media (hover:hover){.gallery-grid .nxp-imgw:hover::after{opacity:1}}
.about-image .nxp-imgw{box-shadow:0 30px 60px -30px rgba(23,19,15,.5)}
.about-stats strong{font-variant-numeric:tabular-nums}
.about-stats strong>span{font-size:inherit;color:inherit;display:inline;margin:0}
.hero-eyebrow{text-shadow:0 1px 16px rgba(0,0,0,.7)}
/* empty Reservations column: a slow brass orbit around a monogram */
:root{--nxp-ring:rgba(176,141,87,.38)}
.nxp-orbit .core{font-family:var(--font-display);font-style:italic;font-size:clamp(2.4rem,6vw,3.6rem);font-weight:500}
.contact-grid .nxp-orbit{margin-top:clamp(36px,5vw,64px)}

/* hours + open-now badge */
.hours-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:6px}
.hours-head h3{margin:0}
.open-badge{display:inline-flex;align-items:center;gap:8px;padding:6px 13px;border-radius:99px;font:500 .78rem/1 var(--font-body);letter-spacing:.03em;white-space:nowrap;
  background:rgba(51,73,58,.12);color:var(--green)}
.open-badge::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.open-badge[data-state="closed"]{background:rgba(23,19,15,.08);color:rgba(23,19,15,.6)}
.hours-row{transition:padding .3s var(--nxp-soft),color .3s ease}
.hours-row.is-today{color:var(--green);font-weight:500;padding-left:12px;border-left:2px solid var(--brass)}

/* buttons + form */
.btn{position:relative;overflow:hidden}
.btn-light::after{content:"";position:absolute;inset:0;transform:translateX(-130%);transition:transform .8s var(--nxp-reveal);pointer-events:none;
  background:linear-gradient(100deg,transparent 30%,rgba(255,255,255,.5) 50%,transparent 70%)}
@media (hover:hover){.btn-light:hover::after{transform:translateX(130%)}}
.contact-form input,.contact-form textarea{transition:border-color .25s ease,box-shadow .25s ease}
.contact-form input:focus,.contact-form textarea:focus{box-shadow:0 0 0 3px rgba(176,141,87,.22)}
.section-dark .nxp-fx{opacity:1}
.site-footer{position:relative;overflow:hidden;background:radial-gradient(70% 120% at 50% 0%,rgba(176,141,87,.12),transparent 70%),var(--ink)}
.nxp-mark{font-style:italic;font-weight:500;margin-top:30px}
@media (max-width:700px){.menu-item-row::before{min-width:12px}.hours-head{flex-wrap:wrap}}
@media (prefers-reduced-motion:reduce){.hero-image{animation:none}}
