/* The table: a dark lamp-lit room, a white cloth, and the menu standing on it. */
.hero{position:relative;height:100vh;height:100svh;min-height:560px;overflow:hidden;background:#0a0604;color:#efe3c8;--mx:0;--my:0;isolation:isolate}
.room{position:absolute;inset:0;transition:opacity .7s ease}
.room .layer{position:absolute;left:-3%;top:-3%;width:106%;height:106%;transform:translate3d(calc(var(--mx) * var(--d) * -22px),calc(var(--my) * var(--d) * -12px),0)}
.room .layer.front{left:-2%;width:104%}
.room .lamp{position:absolute;inset:0;background:radial-gradient(ellipse 38% 46% at 50% 52%,rgba(255,196,120,.22),rgba(255,160,70,0) 70%);mix-blend-mode:screen;pointer-events:none;transition:opacity .5s ease}
.room .vignette{position:absolute;inset:0;background:radial-gradient(ellipse 70% 75% at 50% 48%,transparent 38%,rgba(5,3,2,.88) 100%);pointer-events:none}
.lampglow{mix-blend-mode:screen}
.hero .grain{position:absolute;inset:0;background:url(../img/grain.png);background-size:320px;mix-blend-mode:overlay;opacity:.35;pointer-events:none;z-index:6}
/* room life */
.r-ship .back,.r-ship .mid{animation:sway 7s ease-in-out infinite;transform-origin:50% 120%}
.r-ship .swing{animation:swing 7s ease-in-out infinite}
.r-ship .sea{animation:seatilt 7s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
@keyframes sway{0%,100%{rotate:-.9deg}50%{rotate:.9deg}}
@keyframes swing{0%,100%{rotate:5deg}50%{rotate:-5deg}}
@keyframes seatilt{0%,100%{rotate:2deg}50%{rotate:-2deg}}
.r-train .slide{animation:slide linear infinite}.r-train .slide.slow{animation-duration:60s}.r-train .slide.mid{animation-duration:26s}.r-train .slide.fast{animation-duration:9s}
@keyframes slide{from{transform:translateX(0)}to{transform:translateX(-1560px)}}
.r-train .back,.r-train .mid,.r-train ~ .stand{animation:rock 1.9s ease-in-out infinite}
@keyframes rock{0%,100%{translate:0 0}50%{translate:0 1.5px}}
@media (prefers-reduced-motion:reduce){.room *,.room .layer{animation:none!important}}

/* wordmark and controls over the room */
.hero .hmark{position:absolute;left:36px;top:26px;z-index:8;margin:0;font-weight:800;font-size:40px;letter-spacing:-.055em;line-height:.85;color:#f3e6c8}
.hero .hmark small{display:block;font-size:13px;font-weight:500;letter-spacing:0;margin-top:8px;opacity:.7}
.hero .hcount{position:absolute;right:36px;top:30px;z-index:8;font-size:14px;color:#d9c8a6;text-align:right}
.hero .hcount b{display:block;font-size:30px;font-weight:800;letter-spacing:-.05em;color:#f3e6c8}

/* the menu standing on the cloth */
.stand{position:absolute;left:50%;bottom:13%;z-index:5;height:min(66vh,calc(100vw * .9 / var(--ratio,.714)));aspect-ratio:var(--ratio,.714);transform:translateX(-50%);perspective:1600px}
.stand .shadow{position:absolute;left:-14%;right:-14%;bottom:-6%;height:13%;background:radial-gradient(ellipse at 50% 35%,rgba(20,10,4,.9),transparent 70%);filter:blur(6px);transition:transform .6s,opacity .6s}
.card{position:absolute;inset:0;transform-style:preserve-3d;transform:rotateX(5deg) rotateY(calc(var(--mx) * 4deg));transition:transform .9s cubic-bezier(.3,.7,.2,1);cursor:pointer;outline:none}
.card:focus-visible{box-shadow:0 0 0 3px #f3e6c8}
.stand.lift .card{transform:translateY(-6%) rotateX(0deg) rotateY(calc(180deg + var(--mx) * 4deg)) scale(1.04)}
.stand.lift .shadow{transform:scale(.8);opacity:.5}
.face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;background:color-mix(in srgb,var(--paper) 88%,#7a5a30);box-shadow:0 1px 0 rgba(0,0,0,.2),0 30px 40px -18px rgba(0,0,0,.85),inset 0 0 0 1px rgba(60,40,20,.25)}
.face.back{transform:rotateY(180deg)}
.card.gilt .face{box-shadow:inset 0 0 0 3px #c9a256,inset 0 0 0 4px #8a6a2a,0 30px 40px -18px rgba(0,0,0,.85)}
.card.k-booklet .face.front{box-shadow:inset 6px 0 6px -3px rgba(40,25,10,.45),0 30px 40px -18px rgba(0,0,0,.85)}
.card.k-booklet .face.front::after{content:"";position:absolute;right:-5px;top:2px;bottom:2px;width:5px;background:repeating-linear-gradient(90deg,#e8dcc3 0 1px,#bfae8c 1px 2px)}
.card.k-folder .face.back::before{content:"";position:absolute;left:50%;top:0;bottom:0;width:1px;background:rgba(60,40,20,.25)}
.card.scallop .face{-webkit-mask:radial-gradient(circle 5px at 50% 5px,#0000 98%,#000) 0 -5px/12px 100% repeat-x,linear-gradient(#000,#000) 0 6px/100% calc(100% - 12px) no-repeat;mask:radial-gradient(circle 5px at 50% 5px,#0000 98%,#000) 0 -5px/12px 100% repeat-x,linear-gradient(#000,#000) 0 6px/100% calc(100% - 12px) no-repeat}
.face{container-type:size}
.face .cov{position:absolute;left:50%;top:50%;width:min(88cqw,calc(91cqh / 1.4));transform:translate(-50%,-50%)}
.face .cov .pz{box-shadow:0 0 0 1px rgba(0,0,0,.08)}
/* the lamp falls on the card: warm and bright at the top, falling off toward the cloth */
.face::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:3;background:radial-gradient(ellipse 90% 70% at 45% 18%,rgba(255,214,150,.18),rgba(255,190,110,0) 60%),linear-gradient(180deg,rgba(60,30,10,0) 40%,rgba(40,20,6,.38) 100%);mix-blend-mode:multiply}
.face::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:4;background:linear-gradient(115deg,rgba(255,240,210,0) 35%,rgba(255,240,210,.14) 48%,rgba(255,240,210,0) 60%);mix-blend-mode:screen}
.ribbon{position:absolute;left:8%;top:-2%;width:3.5%;height:16%;background:linear-gradient(90deg,#8d2323,#b23a2a);clip-path:polygon(0 0,100% 0,100% 100%,50% 86%,0 100%)}
/* dissolve between two covers during a change */
.cov .old{position:absolute;inset:0}
.cov .new{position:relative;-webkit-mask-image:radial-gradient(circle,#000 var(--dot,0px),transparent calc(var(--dot,0px) + .6px));-webkit-mask-size:9px 9px;mask-image:radial-gradient(circle,#000 var(--dot,0px),transparent calc(var(--dot,0px) + .6px));mask-size:9px 9px}

/* the back of the menu */
.back-in{position:absolute;inset:0;padding:7% 7% 6%;color:var(--ink);display:flex;flex-direction:column;container-type:inline-size;font-family:"Hanken Grotesk",Helvetica,Arial,sans-serif}
.b-kick{margin:0 0 3cqw;font-size:6.2cqw;font-weight:800;letter-spacing:-.04em;line-height:.95}
.b-facts{display:grid;grid-template-columns:1fr 1fr;gap:1.6cqw 4cqw;margin:0 0 4cqw;font-size:3cqw}
.b-facts div{border-top:1px solid color-mix(in srgb,var(--ink) 30%,transparent);padding-top:.8cqw}
.b-facts dt{opacity:.7;font-size:2.5cqw}.b-facts dd{margin:0;font-weight:700}
.b-head{display:flex;align-items:center;justify-content:space-between;border-top:2px solid var(--ink);border-bottom:1px solid var(--ink);padding:1.6cqw 0;margin-bottom:2cqw}
.b-head b{font-size:4.2cqw;font-weight:800;letter-spacing:-.03em}
.tn{display:flex;border:1px solid var(--ink)}
.tn button{all:unset;cursor:pointer;font-size:3cqw;font-weight:700;padding:.8cqw 2.6cqw}
.tn button[aria-pressed=true]{background:var(--ink);color:var(--paper,#f0e7d3)}
.b-note{margin:0 0 2cqw;font-size:3.1cqw;font-weight:700}
.b-dishes{list-style:none;margin:0;padding:0;flex:1;display:flex;flex-direction:column;justify-content:space-around}
.b-dishes button{all:unset;cursor:pointer;display:flex;align-items:baseline;gap:1.5cqw;width:100%;font-size:3.5cqw;line-height:1.2;padding:.6cqw 0}
.b-dishes .bd{font-weight:600;max-width:72%}
.b-dishes .dots{flex:1;border-bottom:1px dotted color-mix(in srgb,var(--ink) 55%,transparent);transform:translateY(-.8cqw)}
.b-dishes .bp{font-weight:800;font-variant-numeric:tabular-nums lining-nums;white-space:nowrap}
.b-dishes .bp.unc{font-weight:600;font-style:italic;opacity:.75}
.b-dishes button:hover .bd,.b-dishes button.on .bd{text-decoration:underline;text-underline-offset:.6cqw}
.b-basis{margin:1.6cqw 0 0;font-size:2.5cqw;opacity:.75}
.b-phys{margin:2cqw 0 0;font-size:2.3cqw;letter-spacing:.06em;text-transform:uppercase;opacity:.65}
/* the waiter's card */
.waiter{position:absolute;z-index:9;left:calc(50% + min(24vh,40vw));bottom:30%;width:min(260px,62vw);background:#fbf6ea;color:#2a211a;padding:16px 18px 14px;transform:rotate(-2.5deg);box-shadow:0 18px 30px -12px rgba(0,0,0,.8);font-size:15px;line-height:1.4}
.waiter b{display:block;font-size:17px;font-weight:800;letter-spacing:-.02em;margin-bottom:6px;padding-right:18px}
.waiter p{margin:0 0 10px}
.waiter small{display:block;border-top:1px solid #d6c9ad;padding-top:6px;font-size:12px;color:#7a6c55;font-weight:700}
.waiter .wx{position:absolute;right:8px;top:6px;border:0;background:none;font-size:20px;cursor:pointer;color:#7a6c55}

/* controls on the cloth */
.tbar{position:absolute;left:0;right:0;bottom:0;z-index:7;display:flex;align-items:flex-end;justify-content:space-between;gap:12px 24px;padding:0 36px 20px;color:#f3e6c8;flex-wrap:wrap}
.tbar .cap{font-size:14px;line-height:1.35}.tbar .cap b{display:block;font-size:22px;font-weight:800;letter-spacing:-.04em}
.tbar .acts{display:flex;flex-wrap:wrap;gap:8px 20px;font-size:15px;font-weight:700}
.tbar .acts button,.tbar .acts a{border:0;background:none;color:inherit;padding:0 0 1px;border-bottom:2px solid currentColor;cursor:pointer;text-decoration:none;font:inherit;font-weight:700}
.tbar .acts button:disabled{opacity:.4;cursor:default}
.hint{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(13% - 44px);z-index:6;font-size:13px;color:#d9c8a6;opacity:.8}

@media (max-width:760px){
 .hero{min-height:640px}
 .hero .hmark{left:16px;top:18px;font-size:30px}.hero .hcount{right:16px;top:20px}.hero .hcount b{font-size:22px}
 .stand{bottom:22%;height:min(52svh,calc(100vw * .78 / var(--ratio,.714)))}
 .tbar{padding:0 16px 14px;gap:8px}.tbar .cap b{font-size:18px}.tbar .acts{gap:6px 16px;font-size:14px}
 .waiter{left:12px;right:12px;bottom:12px;width:auto;transform:rotate(-1deg)}
 .hint{bottom:calc(22% - 34px)}
 .hero .hcount{display:none}
}

/* a menu change in progress (1.2s): lamp dims, old room slides off, new room fades in */
.hero.changing .room.out{opacity:0;transform:translateX(-5%)}
.hero .room.out{transition:opacity 1.1s ease,transform 1.2s cubic-bezier(.5,0,.3,1)}
.hero .room.in{animation:roomin 1.2s ease both}
@keyframes roomin{from{opacity:0;transform:scale(1.03)}to{opacity:1;transform:none}}
.hero.changing .lamp{opacity:.25}
.hero.changing .stand{filter:brightness(.8)}
.hero .stand{transition:filter .6s ease}
