/* ================= Restaurant offers (2026-11-07, docs/dining-offers-plan.md) — loaded once per page by <x-dining.styles />.
   Plain static CSS (no build), tokens only (--mn-*): dark mode comes from the tokens. Motion only inside
   @media (prefers-reduced-motion: no-preference). Mobile first (360/390/768), targets >= 44px where it matters, long
   translations wrap. Vocabulary: .do-badge (banner vignette) · .do-vig (offer vignette in the restaurant sidebar) · .do-note (quiet link)
   · .do-slider/.do-slide (grid tile) · .dx (animated "how it works"). ================= */

/* ---------- banner vignette (top-right corner of the restaurant banner) ---------- */
.mn-pt__banner--dining{position:relative}
.mn-pt__banner--dining .do-badge{position:absolute;top:.6rem;right:.6rem;z-index:2;display:inline-flex;align-items:center;gap:.5rem;box-sizing:border-box;min-height:2.75rem;max-width:min(calc(100% - 1.2rem),15rem);padding:.3rem .7rem .3rem .35rem;border:1px solid var(--mn-line-2);border-radius:var(--mn-r-lg,14px);background:var(--mn-surface);color:var(--mn-ink);text-decoration:none;box-shadow:0 8px 22px -10px rgb(var(--mn-shadow-rgb)/55%);line-height:1.15}
@supports ((-webkit-backdrop-filter:blur(8px)) or (backdrop-filter:blur(8px))){
  .mn-pt__banner--dining .do-badge{background:color-mix(in srgb,var(--mn-surface) 86%,transparent);-webkit-backdrop-filter:blur(10px) saturate(1.2);backdrop-filter:blur(10px) saturate(1.2)}
}
.mn-pt__banner--dining .do-badge:hover{border-color:var(--mn-brand)}
.mn-pt__banner--dining .do-badge:focus-visible{outline:none;box-shadow:var(--mn-focus),0 8px 22px -10px rgb(var(--mn-shadow-rgb)/55%)}
.do-badge__ic{flex:none;display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:50%;background:var(--mn-brand);color:var(--mn-on-brand,#fff)}
.do-badge--free_item .do-badge__ic{background:var(--mn-accent);color:var(--mn-accent-ink-on,#fff)}
.do-badge--club_benefit .do-badge__ic{background:var(--mn-night);color:var(--mn-on-night,#fff)}
.do-badge--event .do-badge__ic{background:var(--mn-info);color:#fff}
.do-badge__ic svg{width:1.1rem;height:1.1rem}
.do-badge__tx{display:grid;gap:.1rem;min-width:0}
.do-badge__v{font-size:.95rem;font-weight:700;letter-spacing:-.01em;color:var(--mn-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.do-badge__d{font-size:.74rem;font-weight:500;color:var(--mn-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.do-badge__more{flex:none;display:inline-grid;place-items:center;min-width:1.6rem;height:1.6rem;padding:0 .35rem;border-radius:999px;background:var(--mn-soft);border:1px solid var(--mn-line-2);font-size:.74rem;font-weight:700;color:var(--mn-ink)}
@media(min-width:640px){
  .mn-pt__banner--dining .do-badge{top:.9rem;right:.9rem;gap:.65rem;padding:.4rem .9rem .4rem .45rem}
  .do-badge__ic{width:2.4rem;height:2.4rem}
  .do-badge__v{font-size:1.05rem}
  .do-badge__d{font-size:.8rem}
}
@media(max-width:379.98px){.do-badge__d{display:none}}

/* ---------- offer vignette in the restaurant sidebar (#offers, between "Practical information" and "Opening hours") ----------
   Deliberately quieter than the sidebar blocks: soft panel, small type, ghost button, no photo. */
.do-vig{scroll-margin-top:calc(var(--mn-hh,4.5rem) + 1rem)}
.do-vig__card{padding:.85rem .95rem .6rem;border:1px solid var(--mn-line);border-radius:var(--mn-r-lg,14px);background:var(--mn-soft);min-width:0}
.do-vig__head{display:flex;align-items:center;gap:.5rem;margin:0 0 .35rem}
.do-vig__ic{flex:none;display:grid;place-items:center;width:1.5rem;height:1.5rem;border-radius:50%;background:var(--mn-brand-l,var(--mn-surface));color:var(--mn-brand-ink)}
.do-vig__ic svg{width:.9rem;height:.9rem}
.mn-body main .do-vig .do-vig__h{margin:0;font-family:var(--mn-font);font-size:.82rem!important;line-height:1.3;font-weight:600!important;letter-spacing:.02em;color:var(--mn-brand-ink)!important;text-transform:none}
.do-vig__list{margin:0;padding:0;list-style:none}
.do-vig__row{display:grid;gap:.3rem;justify-items:start;min-width:0;padding:.7rem 0;border-top:1px solid var(--mn-line)}
.do-vig__row:first-child{border-top:0;padding-top:.3rem}
.do-vig__meta{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .6rem;max-width:100%}
.do-vig__val{display:inline-block;padding:.12rem .55rem;border-radius:999px;background:var(--mn-brand);color:var(--mn-on-brand,#fff);font-size:.78rem;font-weight:700;line-height:1.35;white-space:nowrap}
.do-vig__row--free_item .do-vig__val{background:var(--mn-accent);color:var(--mn-accent-ink-on,#fff)}
.do-vig__row--club_benefit .do-vig__val{background:var(--mn-ink);color:var(--mn-bg)}
.do-vig__row--event .do-vig__val{background:var(--mn-info);color:#fff}
.do-vig .of-valid{display:inline-flex;align-items:center;gap:.3rem;min-width:0;font-size:.78rem;font-weight:500;color:var(--mn-mute)}
.do-vig .of-valid svg{flex:none;width:.85rem;height:.85rem;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.do-vig .of-valid--soon{color:var(--mn-danger)}
.mn-body main .do-vig .do-vig__t{margin:0;font-family:var(--mn-font);font-size:.92rem!important;line-height:1.4;font-weight:600!important;letter-spacing:0;color:var(--mn-ink);overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.do-vig__more{min-width:0;max-width:100%;font-size:.8rem;color:var(--mn-text)}
.mn-body main .do-vig details.do-vig__more{border-bottom:0!important}
.mn-body main .do-vig details.do-vig__more>:not(summary){padding:0}
.mn-body main .do-vig details>summary{display:inline-flex;align-items:center;min-height:2.25rem;padding:0;position:static;cursor:pointer;color:var(--mn-mute);font-weight:500;font-size:.8rem!important;list-style:none}
.mn-body main .do-vig details>summary::-webkit-details-marker{display:none}
.mn-body main .do-vig details>summary::after{content:"+";position:static;margin-left:.4rem;font-size:.95rem;font-weight:600;color:var(--mn-mute)}
.mn-body main .do-vig details[open]>summary::after{content:"\2212"}
.do-vig__more>summary:focus-visible,.do-vig__link:focus-visible,.do-vig__btn:focus-visible{outline:none;box-shadow:var(--mn-focus)}
.do-vig__more dl{margin:.2rem 0 .3rem;display:grid;gap:.4rem}
.do-vig__more dt{font-size:.72rem;font-weight:600;color:var(--mn-mute)}
.do-vig__more dd{margin:0;line-height:1.5;overflow-wrap:anywhere}
.do-vig__claim{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .75rem;margin-top:.1rem;max-width:100%;min-width:0}
.do-vig__btn{min-height:2.75rem;padding:.35rem .9rem;font-size:.84rem;font-weight:600;text-align:center;line-height:1.25;background:var(--mn-surface)}
.do-vig__code{display:inline-block;max-width:100%;padding:.2rem .5rem;border:1px solid var(--mn-line-2);border-radius:var(--mn-r-sm,6px);background:var(--mn-surface);font:600 .82rem/1.3 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.05em;color:var(--mn-ink);overflow-wrap:anywhere}
.do-vig__hint{flex-basis:100%;margin:0;font-size:.76rem;line-height:1.4;color:var(--mn-mute);overflow-wrap:anywhere}
.do-vig__link{display:inline-flex;align-items:center;min-height:2.75rem;font-size:.82rem;font-weight:500;color:var(--mn-brand-ink);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--mn-line-2);overflow-wrap:anywhere}
.do-vig__link:hover{text-decoration-color:currentColor}
.do-vig__foot{margin:0;border-top:1px solid var(--mn-line)}
.do-vig__foot--all .do-vig__link{color:var(--mn-mute);font-weight:400;font-size:.78rem}
.do-vig__foot+.do-vig__foot{border-top:0}
.do-vig__pts{display:flex;align-items:flex-start;gap:.4rem;margin:0;padding:.55rem 0;border-top:1px solid var(--mn-line);font-size:.76rem;line-height:1.45;color:var(--mn-mute)}
.do-vig__pts .mn-i{flex:none;width:.9rem;height:.9rem;margin-top:.1rem;color:var(--mn-brand-ink)}
.do-vig__pts span{min-width:0;overflow-wrap:anywhere}
/* phones / tablets: the sidebar stacks above the article; lift the vignette to its top (one markup, CSS order only) */
@media(max-width:1023.98px){
  .mn-dn__side>.do-vig{order:-1;padding:0 0 1.25rem;border-top:0}
  .mn-dn__side:has(>.do-vig)>.mn-dn__blk:not(.do-vig):first-of-type{padding-top:1.5rem;border-top:1px solid var(--mn-line)}
}
@media(prefers-reduced-motion:no-preference){
  html:has(.do-vig){scroll-behavior:smooth}
  .do-vig__btn,.do-vig__link{transition:border-color .2s,color .2s,background-color .2s}
}
.do-more{margin:1.25rem 0 0;font-size:.92rem}
.do-more .mn-link-inline{display:inline-flex;align-items:center;min-height:2.75rem}

/* ---------- touch targets for the shared card/pager bits used on the restaurant surfaces (>= 44px) ---------- */
.of-grid .of-card__claim .mn-link-inline{display:inline-flex;align-items:center;min-height:2.75rem}
.do-pager .mn-pg__a{min-width:2.75rem;min-height:2.75rem}

/* Free-item ticket: offers.css pairs the clay tone with its own ink (#8f4a28 on #b0603a, about 1.7:1, unreadable over photos). White on clay is 4.6:1; dark mode swaps to a dark ink on the lighter clay. */
.of-grid .of-card--free_item,.of-hero .of-hero__tickets span:nth-child(2){--of-on:#fff;color:#fff}
.dark .of-grid .of-card--free_item{--of-on:#1b1b1b}

/* ---------- quiet one-line link ---------- */
.do-note{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;font-size:.9rem;color:var(--mn-mute)}
.do-note__i{flex:none;width:1rem;height:1rem}
.do-note .mn-link-inline{display:inline-flex;align-items:center;min-height:2.75rem;overflow-wrap:anywhere}

/* ---------- grid slider tile (/dining) ---------- */
.do-slider{position:relative}
.do-slider__slides{display:flex;flex-direction:column;flex:1 1 auto;min-width:0}
.do-slide{display:flex;flex-direction:column;flex:1 1 auto;min-width:0}
.do-slide[hidden]{display:none}
.do-slide .mc-cover{display:block}
.do-slide .mc-tile__t{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere;min-height:2.6em}
.do-slide .mc-tile__p{min-height:3.1em;overflow-wrap:anywhere}
.do-slide .mc-meta{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;font-size:.82rem;color:var(--mn-mute);white-space:normal}
.do-slide .mc-meta>*+*::before{display:none}
.do-slide .mc-meta .mc-k{font-weight:600;color:var(--mn-brand-ink)}
.do-slide__valid{margin:.35rem 0 0}
/* self-contained: /dining does not load offers.css, so the validity line (.of-valid) is styled here too (an unsized svg rendered as a giant black disc) */
.do-slide__valid .of-valid{display:inline-flex;align-items:center;gap:.35rem;min-width:0;max-width:100%;font-size:.8rem;font-weight:500;color:var(--mn-mute)}
.do-slide__valid .of-valid svg{flex:none;width:.95rem;height:.95rem;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.do-slide__valid .of-valid--soon{color:var(--mn-danger)}
.do-slide__acts{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem 1rem;margin-top:.75rem}
.do-slide__acts .mn-btn{min-height:2.75rem}
.do-slide__all{display:inline-flex;align-items:center;min-height:2.75rem;font-size:.85rem;overflow-wrap:anywhere}
.do-val{position:absolute;top:.7rem;right:.7rem;z-index:2;display:inline-flex;align-items:center;gap:.4rem;max-width:calc(100% - 1.4rem);padding:.4rem .75rem;border:1px solid var(--mn-line-2);border-radius:var(--mn-r,10px);background:var(--mn-surface);color:var(--mn-ink);font-size:.9rem;line-height:1.1;box-shadow:0 6px 16px -8px rgb(var(--mn-shadow-rgb)/50%)}
.do-val svg{flex:none;width:1.05rem;height:1.05rem;color:var(--mn-brand-ink)}
.do-val b{font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.do-val--free_item svg{color:var(--mn-accent-ink)}
.do-slider .mc-cover::after{content:"";position:absolute;inset:auto 0 0 0;height:40%;background:linear-gradient(0deg,rgb(var(--mn-scrim-rgb)/28%),transparent);pointer-events:none}
.do-slider__ctl{display:flex;align-items:center;justify-content:space-between;gap:.25rem;margin-top:auto;padding-top:.6rem;border-top:1px solid var(--mn-line)}
.do-btn{flex:none;display:inline-grid;place-items:center;width:2.75rem;height:2.75rem;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mn-ink);cursor:pointer}
.do-btn svg{width:1.3rem;height:1.3rem;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.do-btn:hover{background:var(--mn-soft)}
.do-btn:focus-visible,.do-dot:focus-visible{outline:none;box-shadow:var(--mn-focus)}
.do-btn[hidden]{display:none}
/* pause: floats over the top-left corner of the cover (the cover is the first block of the tile) */
.do-btn--pause{position:absolute;top:.35rem;left:.35rem;z-index:3;width:2.75rem;height:2.75rem;background:color-mix(in srgb,var(--mn-surface) 88%,transparent);border:1px solid var(--mn-line-2);box-shadow:0 4px 12px -6px rgb(var(--mn-shadow-rgb)/50%)}
.do-btn--pause .do-i-play{display:none;fill:currentColor}
.do-slider.is-paused .do-i-pause{display:none}
.do-slider.is-paused .do-i-play{display:block}
.do-dots{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;min-width:0;flex:1 1 auto}
.do-dot{display:grid;place-items:center;width:2.75rem;height:2.75rem;padding:0;border:0;background:transparent;cursor:pointer}
.do-dot i{display:block;width:.5rem;height:.5rem;border-radius:999px;background:var(--mn-line-2)}
.do-dot.is-active i{width:1.1rem;background:var(--mn-brand)}
/* the pause button only exists once the script runs (no JS: first slide, static) */
.do-slider:not(.is-js) .do-btn--pause,.do-slider:not(.is-js) .do-slider__ctl{display:none}
@media(prefers-reduced-motion:no-preference){
  .do-slide.is-active{animation:do-fade .5s var(--mn-ease-out,ease) both}
  .do-dot i{transition:width .3s var(--mn-ease-out,ease),background-color .3s}
  .do-slide .mc-cover img{transition:transform .6s var(--mn-ease-out,ease)}
  .do-slider:hover .do-slide .mc-cover img{transform:scale(1.03)}
}
@keyframes do-fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------- animated "How it works" (.dx, modelled on .pdx; pure CSS, starts when on screen) ---------- */
.dx{--dx-d:7.2s;margin:0 0 1.75rem;min-width:0}
.dx__in{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:1.25rem;align-items:center;padding:1rem;border:1px solid var(--mn-line);border-radius:var(--mn-r-lg,14px);background:var(--mn-surface)}
.dx__stage{min-width:0}
.dx__media{position:relative;isolation:isolate;overflow:hidden;aspect-ratio:4/3;border-radius:var(--mn-r,10px);background:linear-gradient(135deg,var(--mn-g-brand-1),var(--mn-g-brand-3))}
.dx__bg{position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:cover;opacity:0}
.dx__bg:last-of-type{opacity:1}
.dx__media .lvid{position:absolute;inset:0;z-index:0;width:100%;height:100%;aspect-ratio:auto;border-radius:0;box-shadow:none}
.dx__ov{position:absolute;inset:0;z-index:1;pointer-events:none}
.dx__ov::before{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgb(var(--mn-scrim-rgb)/38%),transparent 65%)}
.dx__body{display:flex;flex-direction:column;gap:.75rem;min-width:0}
.dx__k{margin:0;font-size:var(--mn-t-xs,.75rem);font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mn-brand-ink)}
.dx__steps{display:grid;gap:.75rem;margin:0;padding:0;list-style:none}
.dx__step{position:relative;display:grid;grid-template-columns:2.5rem minmax(0,1fr);gap:.75rem;align-items:start;padding:.6rem .75rem;border-radius:var(--mn-r,10px);border:1px solid transparent}
.dx__ic{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:50%;background:var(--mn-brand-l,var(--mn-soft));color:var(--mn-brand-ink)}
.dx__ic .mn-i{width:1.2rem;height:1.2rem}
.dx__n{position:absolute;left:.3rem;top:.3rem;display:grid;place-items:center;min-width:1.15rem;height:1.15rem;padding:0 .2rem;border-radius:999px;background:var(--mn-ink);color:var(--mn-bg);font-size:.65rem;font-weight:700}
.dx__tx{display:grid;gap:.15rem;min-width:0}
.dx__tx strong{color:var(--mn-ink);font-weight:600;font-size:.98rem;line-height:1.3;overflow-wrap:anywhere}
.dx__tx span{color:var(--mn-text);font-size:.9rem;line-height:1.5;overflow-wrap:anywhere}
.dx__ok{align-self:flex-start;min-height:2.75rem}
.dx__chip{display:inline-flex;align-items:center;gap:.4rem;min-height:2.75rem;padding:0 1rem;border:1px solid var(--mn-line-2);border-radius:999px;background:var(--mn-surface);color:var(--mn-brand-ink);font:inherit;font-size:.9rem;font-weight:600;cursor:pointer}
.dx__chip .mn-i{width:1rem;height:1rem}
.dx__chip:focus-visible,.dx__ok:focus-visible{outline:none;box-shadow:var(--mn-focus)}
.dx__path{position:absolute;inset:12% 0 auto 0;width:100%;height:76%;overflow:visible}
.dx__path path{fill:none;stroke-linecap:round;vector-effect:non-scaling-stroke}
.dx__path-bg{stroke:rgb(255 255 255/55%);stroke-width:2;stroke-dasharray:2 6}
.dx__path-fg{stroke:var(--mn-on-night-accent,#fff);stroke-width:3;stroke-dasharray:100;stroke-dashoffset:0}
.dx__tok{position:absolute;top:50%;display:grid;place-items:center;width:3rem;height:3rem;margin:-1.5rem 0 0 -1.5rem;border-radius:50%;background:var(--mn-surface);color:var(--mn-brand-ink);box-shadow:0 10px 24px -10px rgb(var(--mn-shadow-rgb)/60%)}
.dx__tok .mn-i{width:1.35rem;height:1.35rem}
.dx__tok::after{content:"";position:absolute;inset:-6px;border-radius:50%;border:2px solid var(--mn-surface);opacity:0}
.dx__tok.dx-a1{left:18%;top:62%}.dx__tok.dx-a2{left:50%;top:40%}.dx__tok.dx-a3{left:82%;top:56%}
.dx__dot{position:absolute;left:18%;top:62%;width:.7rem;height:.7rem;margin:-.35rem 0 0 -.35rem;border-radius:50%;background:var(--mn-accent);box-shadow:0 0 0 4px rgb(255 255 255/55%);opacity:0}
@media(prefers-reduced-motion:no-preference){
  .dx.is-on .dx__tok,.dx.is-on .dx__tok::after,.dx.is-on .dx__dot,.dx.is-on .dx__path-fg,.dx.is-on .dx__step,.dx.is-on .dx__ic,.dx.is-on .dx__bg{animation-duration:var(--dx-d);animation-iteration-count:infinite;animation-timing-function:ease-in-out}
  .dx.is-on .dx__bg{animation-timing-function:linear}
  .dx.is-on .dx__bg.dx-b1{animation-name:dx-b1}.dx.is-on .dx__bg.dx-b2{animation-name:dx-b2}.dx.is-on .dx__bg.dx-b3{animation-name:dx-b3}
  .dx.is-on .dx__tok.dx-a1{animation-name:dx-t1}.dx.is-on .dx__tok.dx-a2{animation-name:dx-t2}.dx.is-on .dx__tok.dx-a3{animation-name:dx-t3}
  .dx.is-on .dx__tok.dx-a1::after{animation-name:dx-r1}.dx.is-on .dx__tok.dx-a2::after{animation-name:dx-r2}.dx.is-on .dx__tok.dx-a3::after{animation-name:dx-r3}
  .dx.is-on .dx__dot{animation-name:dx-dot}
  .dx.is-on .dx__path-fg{animation-name:dx-path}
  .dx.is-on .dx-s1{animation-name:dx-s1}.dx.is-on .dx-s2{animation-name:dx-s2}.dx.is-on .dx-s3{animation-name:dx-s3}
  .dx.is-on .dx-s1 .dx__ic{animation-name:dx-i1}.dx.is-on .dx-s2 .dx__ic{animation-name:dx-i2}.dx.is-on .dx-s3 .dx__ic{animation-name:dx-i3}
  .dx:not(.is-on) .dx__tok{opacity:.55;transform:scale(.88)}
  .dx__step{transition:background-color .35s,border-color .35s}
}
@keyframes dx-b1{0%,28%{opacity:1}36%,92%{opacity:0}100%{opacity:1}}
@keyframes dx-b2{0%,28%{opacity:0}36%,61%{opacity:1}69%,100%{opacity:0}}
@keyframes dx-b3{0%,61%{opacity:0}69%,92%{opacity:1}100%{opacity:0}}
@keyframes dx-t1{0%{opacity:.45;transform:scale(.8)}5%{opacity:1;transform:scale(1.12)}9%,90%{opacity:1;transform:scale(1)}100%{opacity:.45;transform:scale(.8)}}
@keyframes dx-t2{0%,33%{opacity:.45;transform:scale(.8)}38%{opacity:1;transform:scale(1.12)}42%,90%{opacity:1;transform:scale(1)}100%{opacity:.45;transform:scale(.8)}}
@keyframes dx-t3{0%,66%{opacity:.45;transform:scale(.8)}71%{opacity:1;transform:scale(1.12)}75%,90%{opacity:1;transform:scale(1)}100%{opacity:.45;transform:scale(.8)}}
@keyframes dx-r1{0%{opacity:0;transform:scale(1)}4%{opacity:.9}14%{opacity:0;transform:scale(1.6)}100%{opacity:0}}
@keyframes dx-r2{0%,33%{opacity:0;transform:scale(1)}37%{opacity:.9}47%{opacity:0;transform:scale(1.6)}100%{opacity:0}}
@keyframes dx-r3{0%,66%{opacity:0;transform:scale(1)}70%{opacity:.9}80%{opacity:0;transform:scale(1.6)}100%{opacity:0}}
@keyframes dx-dot{0%,22%{opacity:0;left:18%;top:62%}26%{opacity:1;left:18%;top:62%}34%{left:50%;top:40%}55%{opacity:1;left:50%;top:40%}67%{left:82%;top:56%}72%,100%{opacity:0;left:82%;top:56%}}
@keyframes dx-path{0%,25%{stroke-dashoffset:100}34%,58%{stroke-dashoffset:50}67%,90%{stroke-dashoffset:0}100%{stroke-dashoffset:100}}
@keyframes dx-s1{0%,30%{background:var(--mn-soft);border-color:var(--mn-line)}34%,100%{background:transparent;border-color:transparent}}
@keyframes dx-s2{0%,33%{background:transparent;border-color:transparent}36%,63%{background:var(--mn-soft);border-color:var(--mn-line)}67%,100%{background:transparent;border-color:transparent}}
@keyframes dx-s3{0%,66%{background:transparent;border-color:transparent}69%,96%{background:var(--mn-soft);border-color:var(--mn-line)}100%{background:transparent;border-color:transparent}}
@keyframes dx-i1{0%,30%{background:var(--mn-brand);color:var(--mn-on-brand)}34%,100%{background:var(--mn-brand-l,var(--mn-soft));color:var(--mn-brand-ink)}}
@keyframes dx-i2{0%,33%{background:var(--mn-brand-l,var(--mn-soft));color:var(--mn-brand-ink)}36%,63%{background:var(--mn-brand);color:var(--mn-on-brand)}67%,100%{background:var(--mn-brand-l,var(--mn-soft));color:var(--mn-brand-ink)}}
@keyframes dx-i3{0%,66%{background:var(--mn-brand-l,var(--mn-soft));color:var(--mn-brand-ink)}69%,96%{background:var(--mn-brand);color:var(--mn-on-brand)}100%{background:var(--mn-brand-l,var(--mn-soft));color:var(--mn-brand-ink)}}
@media(max-width:900px){
  .dx__in{grid-template-columns:minmax(0,1fr);padding:.75rem}
  .dx__media{aspect-ratio:16/9;max-height:200px}
}
@media(max-width:480px){
  .dx__tok{width:2.5rem;height:2.5rem;margin:-1.25rem 0 0 -1.25rem}
  .dx__tok .mn-i{width:1.1rem;height:1.1rem}
  .dx__step{padding:.5rem}
}

/* ---------- offer box (/dining/offers): compact framed box per offer, no photo ----------
   Hairline border, token radius, type = 3px left rule + tinted value pill + type label (never colour alone). */
.do-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--mn-s-4,1rem);margin:.5rem 0 0;padding:0;list-style:none}
@media(min-width:640px){.do-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:1100px){.do-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
.do-grid>li{display:flex;min-width:0}
@media(prefers-reduced-motion:no-preference){
  .vz-js .do-grid>li[data-vz-reveal]:not(.is-in){opacity:0;transform:translateY(10px)}
  .do-grid>li[data-vz-reveal]{transition:opacity .45s var(--mn-ease-out,ease),transform .45s var(--mn-ease-out,ease)}
}
.do-box{--do-rule:var(--mn-brand);--do-pill-bg:var(--mn-brand-l);--do-pill-ink:var(--mn-brand-ink);
  display:flex;flex-direction:column;gap:.6rem;flex:1 1 auto;width:100%;min-width:0;box-sizing:border-box;padding:.95rem 1rem .8rem 1.15rem;
  border:1px solid var(--mn-line);border-radius:var(--mn-r-lg,14px);background:var(--mn-surface);box-shadow:inset 3px 0 0 var(--do-rule)}
.do-box--free_item{--do-rule:var(--mn-accent);--do-pill-bg:var(--mn-accent-l);--do-pill-ink:var(--mn-accent-ink)}
.do-box--club_benefit{--do-rule:var(--mn-mute);--do-pill-bg:var(--mn-soft);--do-pill-ink:var(--mn-ink)}
.do-box--event{--do-rule:var(--mn-info);--do-pill-bg:var(--mn-info-l);--do-pill-ink:var(--mn-info)}
.do-box:hover{border-color:color-mix(in srgb,var(--mn-ink) 30%,var(--mn-line))}
.do-box:has(:focus-visible){border-color:var(--mn-brand)}
.do-box__id{display:flex;align-items:center;gap:.65rem;min-width:0}
.do-box__thumb,.do-box__chip{flex:none;width:2.5rem;height:2.5rem;border-radius:50%}
.do-box__thumb{object-fit:cover;background:var(--mn-soft);border:1px solid var(--mn-line)}
.do-box__chip{display:grid;place-items:center;background:var(--mn-soft);border:1px solid var(--mn-line);color:var(--mn-mute)}
.do-box__chip svg{width:1.2rem;height:1.2rem}
.do-box__who{min-width:0}
.do-box .do-box__rest,.do-box .do-box__sub,.do-box .do-box__meta{margin:0}
.do-box .do-box__rest{font-size:.8125rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;line-height:1.3;color:var(--mn-ink);overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.do-box .do-box__sub{display:flex;flex-wrap:wrap;gap:0 .5rem;font-size:.8rem;line-height:1.4;color:var(--mn-mute)}
.do-box__sub>span+.do-box__here::before{content:"\00b7";margin-right:.5rem;color:var(--mn-mute)}
.do-box__here{color:var(--mn-mute);text-decoration:underline;text-decoration-color:var(--mn-line-2);text-underline-offset:3px;overflow-wrap:anywhere}
.do-box__here:hover{color:var(--mn-ink);text-decoration-color:currentColor}
.do-box .do-box__meta{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem .6rem}
.do-box__val{display:inline-flex;align-items:center;gap:.4rem;max-width:100%;padding:.2rem .65rem .2rem .5rem;border-radius:999px;background:var(--do-pill-bg);color:var(--do-pill-ink);font-size:.85rem;line-height:1.35}
.do-box__val svg{flex:none;width:1rem;height:1rem}
.do-box__val b{font-weight:700;overflow-wrap:anywhere}
.do-box__type{font-size:.78rem;font-weight:500;color:var(--mn-mute);overflow-wrap:anywhere}
.mn-body main .do-box .do-box__t{margin:0;font-family:var(--mn-font);font-size:1rem!important;line-height:1.4;font-weight:600!important;letter-spacing:0;color:var(--mn-ink);text-transform:none;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.do-box .of-valid{display:inline-flex;align-items:center;gap:.3rem;align-self:flex-start;min-width:0;font-size:.8rem;font-weight:500;color:var(--mn-mute)}
.do-box .of-valid svg{flex:none;width:.85rem;height:.85rem;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.do-box .of-valid--soon{color:var(--mn-danger)}
.do-box__more{min-width:0;max-width:100%;font-size:.8rem;color:var(--mn-text)}
.mn-body main .do-box details.do-box__more{border-bottom:0!important}
.mn-body main .do-box details.do-box__more>:not(summary){padding:0}
.mn-body main .do-box details>summary{display:inline-flex;align-items:center;min-height:2.25rem;padding:0;position:static;cursor:pointer;color:var(--mn-mute);font-weight:500;font-size:.8rem!important;list-style:none}
.mn-body main .do-box details>summary::-webkit-details-marker{display:none}
.mn-body main .do-box details>summary::after{content:"+";position:static;margin-left:.4rem;font-size:.95rem;font-weight:600;color:var(--mn-mute)}
.mn-body main .do-box details[open]>summary::after{content:"\2212"}
.do-box__more>summary:focus-visible,.do-box__link:focus-visible,.do-box__here:focus-visible{outline:none;box-shadow:var(--mn-focus);border-radius:4px}
.do-box__more dl{margin:.2rem 0 .3rem;display:grid;gap:.4rem}
.do-box__more dt{font-size:.72rem;font-weight:600;color:var(--mn-mute)}
.do-box__more dd{margin:0;line-height:1.5;overflow-wrap:anywhere}
.do-box__foot{display:grid;gap:.1rem;margin-top:auto;padding-top:.3rem;min-width:0}
.do-box .do-vig__claim{display:grid;gap:.35rem;justify-items:stretch;margin:0}
.do-box .do-vig__btn{width:100%;white-space:normal;min-height:2.75rem;background:transparent}
.do-box .do-vig__btn:hover{border-color:var(--mn-ink)}
.do-box .do-vig__code{justify-self:start}
.do-box .do-vig__link{min-height:2.25rem}
.do-box__link{display:inline-flex;align-items:center;justify-self:start;min-height:2.5rem;font-size:.82rem;font-weight:500;color:var(--mn-brand-ink);text-decoration:none;overflow-wrap:anywhere}
.do-box__link:hover{text-decoration:underline;text-underline-offset:3px}
@media(prefers-reduced-motion:no-preference){.do-box{transition:border-color .2s}.do-box__link,.do-box__here{transition:color .2s}}
.mn-body main .do-box img.do-box__thumb{width:2.5rem!important;height:2.5rem!important;max-width:none;aspect-ratio:1;border-radius:50%}

/* partner page: offers vignette with slider (x-partners.offer-vignette) — same card as the restaurant vignette, one offer per slide */
.mn-pt__side>.do-vig{padding:0;border:0}
.do-vig__nav{display:flex;align-items:center;gap:.25rem;margin-left:auto}
.do-vig__count{margin-right:.25rem;font-size:.76rem;font-variant-numeric:tabular-nums;color:var(--mn-mute)}
.do-vig__arrow{display:grid;place-items:center;width:2.25rem;height:2.25rem;padding:0;border:1px solid var(--mn-line-2);border-radius:50%;background:var(--mn-surface);color:var(--mn-ink);cursor:pointer}
.do-vig__arrow .mn-i{width:1rem;height:1rem}
.do-vig__arrow:first-of-type .mn-i{transform:scaleX(-1)}
.do-vig__arrow:disabled{opacity:.35;cursor:default}
.do-vig__arrow:focus-visible{outline:none;box-shadow:var(--mn-focus)}
.do-vig__track{display:flex;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.do-vig__track::-webkit-scrollbar{display:none}
.do-vig__track:focus-visible{outline:none;box-shadow:var(--mn-focus);border-radius:var(--mn-r-sm,6px)}
.do-vig__track>.do-vig__slide{flex:0 0 100%;min-width:0;scroll-snap-align:start;scroll-snap-stop:always;border-top:0;padding:.3rem 0 .5rem;align-content:start;box-sizing:border-box}
.do-vig__dots{display:flex;justify-content:center;gap:.15rem;padding:0 0 .35rem}
.do-vig__dot{position:relative;width:1.5rem;height:1.5rem;padding:0;border:0;background:none;cursor:pointer}
.do-vig__dot::after{content:"";position:absolute;inset:50% auto auto 50%;width:.45rem;height:.45rem;margin:-.225rem 0 0 -.225rem;border-radius:50%;background:var(--mn-line-2);transition:background-color .2s,transform .2s}
.do-vig__dot.is-on::after{background:var(--mn-brand);transform:scale(1.3)}
@media(max-width:1023.98px){
  .mn-pt__side>.do-vig{order:-1}
}
@media(prefers-reduced-motion:reduce){.do-vig__dot::after{transition:none}}
