/* =========================================================
   SOLAR DO BACALHAU — animações e interações
   ========================================================= */

/* ---------- Intro com o logótipo ---------- */
.intro{display:none}
.js .intro{display:flex;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;pointer-events:auto;
  animation:introFailsafe .01s 7s forwards}
@keyframes introFailsafe{to{visibility:hidden;opacity:0;pointer-events:none}}
.intro__panel{position:absolute;left:0;right:0;height:50.5%;background:var(--green-950);transition:transform 1.1s cubic-bezier(.77,0,.18,1)}
.intro__panel--top{top:0;background:linear-gradient(180deg,#0c1b15,var(--green-950))}
.intro__panel--bottom{bottom:0;background:linear-gradient(0deg,#0c1b15,var(--green-950))}
.intro__panel::after{content:"";position:absolute;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--brass-light),transparent);opacity:0;transition:opacity .4s}
.intro__panel--top::after{bottom:0}.intro__panel--bottom::after{top:0}
.intro__inner{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;width:min(78vw,620px);transition:opacity .6s ease,transform 1s cubic-bezier(.77,0,.18,1)}
.intro__crest{position:relative;width:clamp(110px,16vw,170px);overflow:hidden;opacity:0;transform:translateY(24px) scale(.7);animation:crestIn 1.1s .15s cubic-bezier(.2,.9,.25,1.15) forwards}
.intro__crest img{width:100%;height:auto;display:block}
.intro__shine{position:absolute;inset:0;background:linear-gradient(110deg,transparent 35%,rgba(255,240,200,.75) 50%,transparent 65%);transform:translateX(-120%);mix-blend-mode:overlay;animation:shine 1.2s 1s ease-in-out forwards;
  -webkit-mask:url("../img/brasao.webp") center/100% 100% no-repeat;mask:url("../img/brasao.webp") center/100% 100% no-repeat}
@keyframes crestIn{to{opacity:1;transform:none}}
@keyframes shine{to{transform:translateX(120%)}}
.intro__word{position:relative;width:100%;margin-top:clamp(14px,2.5vw,26px)}
.intro__word svg{display:block;width:100%;height:auto;fill:var(--beige-100);clip-path:inset(-10% 100% -10% 0);animation:write 1.5s .75s cubic-bezier(.55,.1,.35,1) forwards;filter:drop-shadow(0 0 18px rgba(201,166,107,.25))}
@keyframes write{to{clip-path:inset(-10% -2% -10% 0)}}
.intro__pen{position:absolute;top:50%;left:0;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:#ffe3a8;box-shadow:0 0 12px 4px rgba(255,200,110,.9),0 0 40px 10px rgba(201,166,107,.5);opacity:0;animation:pen 1.5s .75s cubic-bezier(.55,.1,.35,1) forwards}
@keyframes pen{0%{opacity:0;left:0}8%{opacity:1}90%{opacity:1}100%{opacity:0;left:100%}}
.intro__line{display:block;height:1px;width:0;margin-top:clamp(18px,3vw,28px);background:linear-gradient(90deg,transparent,var(--brass-light),transparent);animation:line .9s 2s ease forwards}
@keyframes line{to{width:min(60vw,300px)}}
.intro__tag{margin:14px 0 0;font-size:11px;letter-spacing:.42em;padding-left:.42em;white-space:nowrap;text-align:center;text-transform:uppercase;color:var(--brass-light);opacity:0;animation:fadeTag .8s 2.2s ease forwards}
@media (max-width:420px){.intro__tag{font-size:10px;letter-spacing:.3em;padding-left:.3em}}
.js .intro{overflow:hidden}
@keyframes fadeTag{from{opacity:0;transform:translateY(8px)}to{opacity:.9;transform:none}}
.intro.is-out{pointer-events:none}
.intro.is-out .intro__panel--top{transform:translateY(-101%)}
.intro.is-out .intro__panel--bottom{transform:translateY(101%)}
.intro.is-out .intro__panel::after{opacity:1}
.intro.is-out .intro__inner{opacity:0;transform:scale(1.12)}
.intro.is-gone{display:none}
.js.is-loading body{overflow:hidden}

/* ---------- Barra de progresso ---------- */
.progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:150;pointer-events:none}
.progress i{display:block;height:100%;width:100%;background:linear-gradient(90deg,var(--brass),#e9c98d);transform-origin:left;transform:scaleX(0)}

/* ---------- Entrada da página (após intro) ---------- */
.hero__content{animation:none}
.hero__content>*{transition:opacity 1.1s var(--ease),transform 1.1s var(--ease),filter 1.1s var(--ease)}
.hero__title{overflow:hidden;padding-bottom:.08em}
.hero__title-in{display:block;transition:transform 1.3s cubic-bezier(.2,.8,.2,1) .35s}
.js.is-loading .hero__content>*{opacity:0;transform:translateY(34px);filter:blur(6px)}
.js.is-loading .hero__title{opacity:1;transform:none;filter:none}
.js.is-loading .hero__title-in{transform:translateY(110%)}
.hero__content>:nth-child(1){transition-delay:.05s}
.hero__content>:nth-child(2){transition-delay:.2s}
.hero__content>:nth-child(4){transition-delay:.55s}
.hero__content>:nth-child(5){transition-delay:.7s}
.hero__content>:nth-child(6){transition-delay:.85s}
.header{transition:background .45s var(--ease),height .45s var(--ease),box-shadow .45s,transform 1s cubic-bezier(.2,.8,.2,1) .3s}
.js.is-loading .header{transform:translateY(-110%)}
.js.is-loading .hero__scroll,.js.is-loading .hero__count{opacity:0}
.hero__scroll,.hero__count{transition:opacity 1s 1.2s}

/* ---------- Hero: diaporama + brasas ---------- */
.hero__slides{position:absolute;inset:0;overflow:hidden}
.hero__slide{position:absolute;inset:-3%;background-size:cover;background-position:center 45%;opacity:0;transition:opacity 1.8s ease;will-change:opacity,transform}
.hero__slide.is-active{opacity:1;animation:kenburns 9s linear forwards}
.hero__slide:nth-child(even).is-active{animation-name:kenburns2}
@keyframes kenburns{from{transform:scale(1.14) translate3d(-1.5%,1%,0)}to{transform:scale(1.02) translate3d(1%,-1%,0)}}
@keyframes kenburns2{from{transform:scale(1.02) translate3d(1%,0,0)}to{transform:scale(1.14) translate3d(-1%,-1.5%,0)}}
.hero__embers{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none}
.hero__content{will-change:transform}
.hero__count{position:absolute;left:var(--pad);bottom:40px;z-index:3;display:flex;align-items:center;gap:14px;font-size:12px;letter-spacing:.2em;color:rgba(243,236,221,.8);font-variant-numeric:tabular-nums}
.hero__count i{display:block;width:90px;height:1px;background:rgba(243,236,221,.25);position:relative;overflow:hidden}
.hero__count b{position:absolute;inset:0;background:var(--brass-light);transform-origin:left;transform:scaleX(0)}
.hero__count b.run{animation:bar 7s linear forwards}
@keyframes bar{to{transform:scaleX(1)}}
@media (max-width:640px){.hero__count{display:none}}

/* ---------- Estado aberto/fechado ---------- */
.status{display:inline-flex;align-items:center;gap:10px;margin:28px 0 0;padding:8px 16px 8px 14px;border:1px solid rgba(243,236,221,.25);border-radius:40px;font-size:12.5px;letter-spacing:.06em;color:rgba(243,236,221,.92);background:rgba(15,33,26,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.status i{position:relative;width:8px;height:8px;border-radius:50%;background:#6fcf8e;flex:none}
.status i::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:1.5px solid #6fcf8e;animation:pulse 2s ease-out infinite}
.status.is-closed i{background:#e0836e}.status.is-closed i::after{border-color:#e0836e}
.status.is-closing i{background:#e8c06a}.status.is-closing i::after{border-color:#e8c06a}
@keyframes pulse{from{transform:scale(.6);opacity:1}to{transform:scale(2.2);opacity:0}}
.status--dark{color:var(--green-800);background:var(--beige-100);border-color:var(--line);backdrop-filter:none;margin-top:14px;font-size:13px}
.status:empty,.status span:empty{display:none}

/* ---------- Títulos: palavras a subir ---------- */
.h2 .w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.1em;margin-bottom:-.1em}
.h2 .w>span{display:inline-block;transform:translateY(105%);transition:transform 1s cubic-bezier(.2,.8,.2,1);transition-delay:calc(var(--w,0) * 60ms + .1s)}
.is-in .h2 .w>span,.h2.is-in .w>span{transform:none}

/* ---------- Revelação de imagens ---------- */
.about__media img,.dish__img img,.visit__photo img,.gallery__item img{clip-path:inset(100% 0 0 0);transform:scale(1.18);transition:clip-path 1.3s cubic-bezier(.77,0,.18,1),transform 1.8s cubic-bezier(.2,.8,.2,1),opacity .4s}
.about__media.is-in img,.dish.is-in .dish__img img,.visit__media.is-in .visit__photo img,.gallery__item.is-in img{clip-path:inset(0 0 0 0);transform:scale(1)}
.about__media img{transform:scale(1.18) translateY(var(--py,0px))}
.about__media.is-in img{transform:scale(1.06) translateY(var(--py,0px))}
.gallery__item.is-in:hover img{transform:scale(1.06)}
.dish.is-in:hover .dish__img img{transform:scale(1.07)}
.gallery__item:nth-child(3n+2){transition-delay:.1s}
.gallery__item:nth-child(3n+3){transition-delay:.2s}

/* ---------- Cartões com inclinação 3D ---------- */
.specials__grid{perspective:1200px}
.tilt{transform-style:preserve-3d;transition:transform .5s cubic-bezier(.2,.8,.2,1),opacity 1s var(--ease)}
.tilt.is-tilting{transition:transform .08s linear}
.dish__img{position:relative}
.dish__img::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at var(--gx,50%) var(--gy,50%),rgba(255,230,180,.28),transparent 55%);opacity:0;transition:opacity .4s;pointer-events:none}
.dish:hover .dish__img::after{opacity:1}

/* ---------- Faixa em movimento ---------- */
.marquee{position:relative;overflow:hidden;background:var(--green-900);color:var(--beige-100);padding:clamp(22px,3.5vw,40px) 0;border-top:1px solid rgba(201,166,107,.25);border-bottom:1px solid rgba(201,166,107,.25)}
.marquee__track{display:flex;width:max-content;will-change:transform}
.marquee__group{display:flex;align-items:center;flex:none}
.marquee__item{font-family:var(--serif);font-style:italic;font-weight:500;font-size:clamp(38px,6.4vw,96px);line-height:1;white-space:nowrap;padding:0 clamp(18px,2.4vw,36px);color:var(--beige-100)}
.marquee__item--outline{color:transparent;-webkit-text-stroke:1.2px var(--brass-light)}
.marquee__sep{width:clamp(30px,3.6vw,52px);height:auto;flex:none;opacity:.95;animation:spinSlow 12s linear infinite}
@keyframes spinSlow{0%,100%{transform:rotate(-8deg)}50%{transform:rotate(8deg)}}

/* ---------- Faixa foto (parallax por JS) ---------- */
.band__bg{background-attachment:scroll!important;inset:-22% 0;will-change:transform;transform:translate3d(0,var(--py,0px),0)}

/* ---------- Ementa: tinta deslizante + pratos ---------- */
.menu__tabs{position:relative}
.menu__tab[aria-selected="true"]{border-bottom-color:transparent}
.menu__ink{position:absolute;height:2px;background:var(--brass);left:0;top:0;width:0;transition:transform .55s cubic-bezier(.7,0,.2,1),width .55s cubic-bezier(.7,0,.2,1);pointer-events:none}
.menu__banner{position:relative}
.menu__banner img{animation:bannerIn 1.2s cubic-bezier(.2,.8,.2,1) both}
@keyframes bannerIn{from{transform:scale(1.15);clip-path:inset(0 0 100% 0)}to{transform:none;clip-path:inset(0)}}
.menu__panel .menu__item{animation:itemIn .7s cubic-bezier(.2,.8,.2,1) both;animation-delay:calc(var(--i,0) * 40ms + .15s)}
@keyframes itemIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
.menu__item{position:relative;transition:background .3s}
.menu__item.has-photo{cursor:pointer}
.menu__item.has-photo:hover .menu__name,.menu__item.has-photo:focus-visible .menu__name{color:var(--burgundy)}
.menu__name{transition:color .3s}
.menu__cam{display:inline-block;width:16px;height:16px;margin-left:8px;vertical-align:-1px;background:currentColor;opacity:.45;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8'%3E%3Cpath d='M4 8h3l2-3h6l2 3h3v11H4z'/%3E%3Ccircle cx='12' cy='13' r='3.5'/%3E%3C/svg%3E") center/contain no-repeat;
          mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8'%3E%3Cpath d='M4 8h3l2-3h6l2 3h3v11H4z'/%3E%3Ccircle cx='12' cy='13' r='3.5'/%3E%3C/svg%3E") center/contain no-repeat}
.menu__item.has-photo:hover .menu__cam{opacity:1;color:var(--brass)}
.menu__tap{display:none;text-align:center;font-size:13px;color:var(--muted);margin:-28px 0 30px}
@media (hover:none){.menu__tap{display:block}}

.menu-preview{position:fixed;top:0;left:0;z-index:120;width:240px;aspect-ratio:4/5;pointer-events:none;opacity:0;transform:translate3d(-50%,-50%,0) scale(.6) rotate(-6deg);transition:opacity .35s ease,transform .45s cubic-bezier(.2,.8,.2,1);box-shadow:0 30px 60px -20px rgba(10,20,16,.55);border:6px solid #fff;background:#fff}
.menu-preview img{width:100%;height:100%;object-fit:cover}
.menu-preview span{display:none}
.menu-preview.is-on{opacity:1;transform:translate3d(-50%,-50%,0) scale(1) rotate(-3deg)}
/* versão tátil: cartão central */
.menu-preview.is-modal{pointer-events:auto;left:50%!important;top:50%!important;width:min(82vw,380px);transform:translate3d(-50%,-50%,0) scale(.85);border-width:8px;z-index:310}
.menu-preview.is-modal.is-on{transform:translate3d(-50%,-50%,0) scale(1)}
.menu-preview.is-modal span{display:block;padding:12px 4px 4px;font-family:var(--serif);font-size:22px;text-align:center;color:var(--green-800)}
.menu-preview.is-modal img{height:auto;aspect-ratio:4/5}
.menu-preview.is-modal{aspect-ratio:auto}
.preview-veil{position:fixed;inset:0;z-index:305;background:rgba(10,20,16,.6);opacity:0;pointer-events:none;transition:opacity .3s}
.preview-veil.is-on{opacity:1;pointer-events:auto}

/* ---------- Cursor personalizado (só rato) ---------- */
.cursor{display:none}
.has-cursor .cursor{display:block;position:fixed;inset:0;pointer-events:none;z-index:400}
.cursor__dot,.cursor__ring{position:fixed;top:0;left:0;border-radius:50%;will-change:transform}
.cursor__dot{width:6px;height:6px;margin:-3px 0 0 -3px;background:var(--brass-light)}
.cursor__ring{width:38px;height:38px;margin:-19px 0 0 -19px;border:1px solid rgba(201,166,107,.7);display:flex;align-items:center;justify-content:center;transition:width .35s cubic-bezier(.2,.8,.2,1),height .35s cubic-bezier(.2,.8,.2,1),margin .35s cubic-bezier(.2,.8,.2,1),background .35s,border-color .35s}
.cursor__label{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:#fff;opacity:0;transition:opacity .25s;font-weight:500}
.cursor.is-link .cursor__ring{width:56px;height:56px;margin:-28px 0 0 -28px;background:rgba(201,166,107,.12)}
.cursor.is-view .cursor__ring{width:88px;height:88px;margin:-44px 0 0 -44px;background:rgba(168,131,74,.88);border-color:transparent}
.cursor.is-view .cursor__label{opacity:1}
.cursor.is-view .cursor__dot,.cursor.is-hidden{opacity:0}
.cursor.is-down .cursor__ring{transform-origin:center}

/* ---------- Voltar ao topo ---------- */
.totop{position:fixed;right:22px;bottom:22px;z-index:90;width:52px;height:52px;border-radius:50%;background:var(--green-900);display:grid;place-items:center;opacity:0;transform:translateY(20px) scale(.8);pointer-events:none;transition:opacity .4s,transform .4s cubic-bezier(.2,.8,.2,1);box-shadow:0 10px 30px -10px rgba(0,0,0,.5)}
.totop.is-on{opacity:1;transform:none;pointer-events:auto}
.totop svg{width:100%;height:100%;fill:none}
.totop__track{stroke:rgba(243,236,221,.15);stroke-width:2}
.totop__ring{stroke:var(--brass-light);stroke-width:2;stroke-linecap:round;transform:rotate(-90deg);transform-origin:center;stroke-dasharray:138.2;stroke-dashoffset:138.2}
.totop path{stroke:var(--beige-100);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.totop:hover path{stroke:var(--brass-light)}

/* ---------- Barra fixa no telemóvel ---------- */
.mbar{display:none}
@media (max-width:640px){
  .mbar{display:grid;grid-template-columns:1fr 1.4fr;position:fixed;left:0;right:0;bottom:0;z-index:95;padding:10px 12px calc(10px + env(safe-area-inset-bottom));gap:10px;background:rgba(15,33,26,.96);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-top:1px solid rgba(201,166,107,.3);transform:translateY(110%);transition:transform .45s cubic-bezier(.2,.8,.2,1)}
  .mbar.is-on{transform:none}
  .mbar a{display:flex;align-items:center;justify-content:center;gap:8px;min-height:48px;text-decoration:none;font-size:13px;letter-spacing:.14em;text-transform:uppercase;font-weight:500}
  .mbar__call{border:1px solid rgba(243,236,221,.35);color:var(--beige-100)}
  .mbar__call svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6}
  .mbar__book{background:var(--brass);color:#fff}
  .totop{display:none}
  .footer{padding-bottom:70px}
}

/* ---------- Botões magnéticos ---------- */
.magnetic{transition:transform .35s cubic-bezier(.2,.8,.2,1),background .35s var(--ease),color .35s var(--ease),border-color .35s var(--ease)}
.btn--brass{position:relative;overflow:hidden;isolation:isolate}
.btn--brass::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.35) 50%,transparent 70%);transform:translateX(-120%);transition:transform .8s ease}
.btn--brass:hover::before{transform:translateX(120%)}

/* ---------- Movimento reduzido ---------- */
@media (prefers-reduced-motion:reduce){
  .intro{display:none!important}
  .hero__slide.is-active{animation:none}
  .about__media img,.dish__img img,.visit__photo img,.gallery__item img{clip-path:none;transform:none}
  .h2 .w>span{transform:none}
  .marquee__track{transform:none!important}
}
