/* ==================================================================
   EXTRACTED from show.blade.php's inline css section (2026-09-09, page-speed:
   the block re-downloaded with every HTML response; now cached).
   ORDER IS LOAD-BEARING — blocks appear in their original sequence;
   the documented specificity traps (before-vs-after _detail.css)
   depend on it. Edit HERE, not in the blade.
   ================================================================== */
/* ======================================================================
       Restaurant DETAIL page — the v3_old/restaurants.html detail view, its
       CSS extracted VERBATIM and prefix-scoped under .rstp (same markup +
       class names, so the render matches the prototype 1:1). The page wears
       the LIVE v3 site chrome instead of the prototype's own header/footer.
       ====================================================================== */
    /* --grad is the THREE-stop house gradient (user 2026-08-06): the prototype
         page carried the older 2-stop pink→purple, making the Join pill the one
         CTA off the approved family — the choose page, register and every panel
         CTA are 3-stop. All 7 var(--grad) consumers on this page align with it. */
    .rstp{--pink:#FF08C9;--purple:#AE00FF;--blue:#00AEFF;--grad:linear-gradient(135deg,#FF08C9,#AE00FF,#00AEFF);--ink:#000000;--slate:#666666;--hint:#6D6E71;--line:#E6E7E8;--soft:#F1F2F2;--gold:#F5A623;
        font-family:'Nunito',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
    /* the LIVE site nav is position:fixed (73px desktop / 69px mobile) — the prototype's
       own header was in-flow, so without this the breadcrumb hides under the bar
       (user-reported). The dark header surface extends up behind the dark nav. */
    .rstp .profile-header{padding-top:89px !important}
    @media(max-width:680px){ .rstp .profile-header{padding-top:85px !important} }
    /* hero masters are crop-enforced 9:16 PORTRAIT (platform rule). Treatment matched
       to the pc_chef profile page (user-directed): a 3:4 PORTRAIT card, cover-filled,
       full-bleed — no letterbox bands. A legacy LANDSCAPE source (detected client-side)
       falls back to a 16:9 frame with the blurred-fill letterbox. Overrides the
       prototype's 16:9 .chef-card-img because this style block loads after _detail.css. */
    /* selector carries .chef-card-img too (0,3,0) — these rules sit BEFORE the
       inlined _detail.css in this style block, so plain 0,2,0 would lose to the
       prototype's later 16:9 rule on the same element. */
    .rstp .chef-card-img.rst-heroimg{position:relative;overflow:hidden;aspect-ratio:3/4;max-height:520px;background-color:#1a3448}
    .rstp .chef-card-img.rst-heroimg img{position:relative;z-index:1;display:block;width:100%;height:100%;object-fit:cover}
    .rstp .chef-card-img.rst-heroimg .hz{display:none;position:absolute;inset:0;background-size:cover;background-position:center;filter:blur(20px) brightness(.7);transform:scale(1.12)}
    .rstp .chef-card-img.rst-heroimg.landscape{aspect-ratio:16/9;max-height:none}
    .rstp .chef-card-img.rst-heroimg.landscape img{object-fit:contain}
    .rstp .chef-card-img.rst-heroimg.landscape .hz{display:block}
    /* video master (hero_type='video'): same portrait frame, cover-filled */
    .rstp .chef-card-img.rst-heroimg.rst-herovid video{position:relative;z-index:1;display:block;width:100%;height:100%;object-fit:cover;background:#1a3448}
    /* MOBILE: masters are crop-enforced 9:16, so the frame goes NATIVE 9:16
       (user 2026-08-05: "image and video not looks good" — the 3:4 desktop
       frame re-crops ~a quarter of the media the vendor already cropped).
       Cover-fit is then an exact fit: zero cropping, app-story look. The
       legacy .landscape branch (0,4,0) still outranks this (0,3,0). */
    @media(max-width:680px){
        .rstp .chef-card-img.rst-heroimg{aspect-ratio:9/16;max-height:640px}
    }
    /* header bio: stays in its design position beside the master media (user
       2026-08-05) but UN-CAPPED — the prototype's 560px max-width made it "half
       of page". Selector is 0,3,0 — these rules sit BEFORE the inlined
       _detail.css, so a plain 0,2,0 loses to its later 560px cap (the
       documented trap; measured live before this fix). */
    .rstp .profile-info .profile-bio{max-width:none}
    /* 6 lines before the fold, desktop AND mobile alike (user 2026-08-05) */
    .rstp .profile-bio.clamped{display:-webkit-box;-webkit-line-clamp:6;-webkit-box-orient:vertical;overflow:hidden}
    .rstp .rst-biotog{border:none;background:none;padding:0;margin-top:6px;font-family:inherit;font-size:13px;font-weight:800;color:#fff;opacity:.85;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
    .rstp .rst-biotog:hover{opacity:1}
    /* The sidebar Join CTA (user 2026-08-07: "check this button width"): .cta-block
       had NO rule anywhere, so the pill rendered as a bare inline element. It is
       meant to be the card's full-width contained block pill, like the choose
       page's "Continue to checkout". 0,3,0 beats _detail.css's later .rstp .cta. */
    .rstp .cta.cta-block{display:block;width:100%;box-sizing:border-box;text-align:center;margin:0}
    /* ── MOBILE-ONLY sticky Join bar (user 2026-08-07) ───────────────────────
       On mobile the booking sidebar (membership rows + Join CTA) stacks BELOW
       the whole left column, so the Join button was unreachable without
       scrolling the entire page. This fixed bottom bar surfaces it immediately
       — the house pattern is the vendor rate-card page's sticky mobile sign CTA.
       Hidden > 820px (desktop keeps the sidebar CTA, page pixel-unchanged).
       z-index 900 sits ABOVE page content but BELOW the mobile-nav scrim (998,
       so opening the nav dims the bar too), the in-page doc reader (1200) and
       the photo lightbox (1300). Selectors are 0,3,0 to beat _detail.css's later
       .rstp .cta (0,2,0) — the documented specificity trap. */
    .rstp .rst-joinbar{display:none}
    @media(max-width:820px){
        .rstp .rst-joinbar{display:flex;align-items:center;gap:12px;position:fixed;left:0;right:0;bottom:0;z-index:900;
            background:var(--card,#fff);border-top:1px solid var(--line);
            padding:10px 16px calc(10px + env(safe-area-inset-bottom, 0px));
            box-shadow:0 -6px 24px rgba(0,0,0,.10)}
        .rstp .rst-joinbar .rjb-price{font-size:13px;color:var(--slate);line-height:1.3;flex:1 1 auto;min-width:0}
        .rstp .rst-joinbar .rjb-price strong{font-size:16px;font-weight:900;color:var(--ink)}
        /* same gradient-border / white-fill pill as the sidebar .cta */
        .rstp .rst-joinbar .cta{margin:0;flex:none;font-size:14.5px;padding:12px 22px}
        /* clear the fixed bar so it never covers the last section or the footer
           links — this style block only loads on this page, so the body rule is
           page-scoped (the footer is a sibling of .rstp, not a child). */
        body{padding-bottom:calc(72px + env(safe-area-inset-bottom, 0px))}
    }
    /* ==== BEGIN _detail.css (prototype-generated — regenerate from public/v3_old/restaurants.html
        and re-paste between these markers; never hand-edit; see CLAUDE.md) ==== */
/* EXTRACTED VERBATIM from public/v3_old/restaurants.html (detail view), every
   selector prefix-scoped under .rstp — regenerate from the prototype rather than
   hand-editing if the design handoff changes. Inlined into show.blade.php via
   file_get_contents inside its <style> block. */
.rstp .app{width:440px;max-width:100%;min-height:100vh;background:transparent;position:relative;padding-bottom:90px;margin:0 auto}
.rstp .gthumb{flex:0 0 auto;width:130px;height:96px;border-radius:13px;background-size:cover;background-position:center}
.rstp .pk{display:flex;align-items:center;gap:13px;border:1.5px solid var(--line);border-radius:15px;padding:12px;margin-bottom:11px;box-shadow:0 4px 24px rgba(0,0,0,.06);cursor:pointer;transition:.15s}
.rstp .pk.sel{border-color:var(--pink);background:rgba(255,8,201,.05);box-shadow:0 8px 22px -12px rgba(255,8,201,.45)}
.rstp .pk .chk{margin-left:8px;width:22px;height:22px;border-radius:50%;border:1.5px solid var(--line);flex:none;display:flex;align-items:center;justify-content:center}
.rstp .pk.sel .chk{border-color:var(--pink);background:var(--pink)}
.rstp .pk.sel .chk:after{content:"";width:8px;height:8px;border-radius:50%;background:#fff}
.rstp .pk .pi{width:58px;height:58px;border-radius:12px;flex:none;background-size:cover;background-position:center}
.rstp .pk .pn{font-family:'Nunito',sans-serif;font-weight:800;font-size:15px}
.rstp .pk .pd{font-size:12px;color:var(--slate);margin-top:2px}
.rstp .pk .pp{margin-left:auto;text-align:right;flex:none}
.rstp .pk .pp .f{font-size:10px;color:var(--hint);font-weight:600}
.rstp .pk .pp .v{font-family:'Nunito',sans-serif;font-weight:800;font-size:15px}
.rstp .btn-ghost{display:inline-block;border:2px solid transparent;background:linear-gradient(#fff,#fff) padding-box,var(--grad) border-box;font-family:'Nunito',sans-serif;font-weight:800;font-size:13px;padding:9px 18px;border-radius:999px;text-decoration:none}
.rstp .btn-ghost span{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.rstp .cta{margin-left:auto;border:2px solid transparent;background:linear-gradient(#fff,#fff) padding-box,var(--grad) border-box;font-family:'Nunito',sans-serif;font-weight:800;font-size:15px;padding:12px 26px;border-radius:999px;text-decoration:none}
.rstp .cta span{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.rstp .dsf-note{font-size:11.5px;color:var(--hint);margin-top:11px;text-align:center;line-height:1.5}
.rstp .getapp{font-size:13px;font-weight:800;color:#fff;background:linear-gradient(135deg,#FF08C9,#AE00FF,#00AEFF);padding:9px 16px;border-radius:999px;text-decoration:none;white-space:nowrap}
.rstp .container{max-width:1200px;margin:0 auto;padding:0 20px}
.rstp .profile-header{background:#0D0D12;padding:16px 0 30px;position:relative;overflow:hidden}
.rstp .profile-header:before{content:"";position:absolute;top:-30%;right:-10%;width:60%;height:120%;background:radial-gradient(ellipse,rgba(0,174,255,.07),transparent 60%);pointer-events:none}
.rstp .dback{padding:4px 0 16px;position:relative;z-index:2;font-size:13px;color:rgba(255,255,255,.5)}
.rstp .dback a{color:rgba(255,255,255,.55);font-size:13px;font-weight:600;text-decoration:none;cursor:pointer}
.rstp .dback .sep{margin:0 9px;opacity:.5}
.rstp .dback .cur{color:rgba(255,255,255,.85)}
.rstp .profile-grid{display:grid;grid-template-columns:1fr;gap:22px;align-items:start;position:relative;z-index:2}
.rstp .profile-img-wrap{position:relative;border-radius:20px;overflow:hidden;box-shadow:0 16px 48px rgba(0,0,0,.4)}
.rstp .chef-card-img{aspect-ratio:16/9;background-size:cover;background-position:center;background-color:#1a3448}
.rstp .chef-card-rating{position:absolute;top:14px;right:14px;background:rgba(13,13,18,.8);border:1px solid rgba(255,255,255,.12);color:#fff;font-size:13px;font-weight:700;padding:5px 12px;border-radius:100px;display:flex;align-items:center;gap:5px}
.rstp .chef-card-rating .star{color:#FFB800}
.rstp .chef-card-badge{position:absolute;top:14px;left:14px;background:linear-gradient(135deg,#FF08C9,#AE00FF);color:#fff;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:5px 12px;border-radius:100px}
.rstp .profile-info{padding-top:0}
.rstp .profile-badge{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:100px;padding:6px 16px;font-size:12px;font-weight:700;color:#00d9cb;text-transform:uppercase;letter-spacing:.07em;margin-bottom:15px}
.rstp .profile-info h1{font-family:'Nunito',sans-serif;font-size:28px;font-weight:800;color:#fff;line-height:1.12;letter-spacing:-.5px;margin-bottom:6px}
.rstp .profile-brand{font-size:16px;font-weight:600;background:linear-gradient(90deg,#FF08C9,#AE00FF,#00AEFF);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:16px}
.rstp .profile-rating{display:flex;align-items:center;gap:8px;margin-bottom:16px}
.rstp .profile-rating .stars{color:#FFB800;font-size:16px;letter-spacing:2px}
.rstp .profile-rating .rating-text{font-size:14px;color:rgba(255,255,255,.65)}
.rstp .profile-cuisines{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:18px}
.rstp .profile-cuisine-tag{padding:6px 14px;border-radius:100px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);font-size:12px;font-weight:600;color:rgba(255,255,255,.8)}
.rstp .profile-bio{font-size:14px;color:rgba(255,255,255,.65);line-height:1.7;max-width:560px}
.rstp .detail-light{background:#fff}
.rstp .content-grid{display:grid;grid-template-columns:1fr;gap:24px;align-items:start;padding:26px 0 40px}
.rstp .sec-h{font-family:'Nunito',sans-serif;font-size:22px;font-weight:800;color:#000;margin-bottom:12px}
.rstp .sec-h3{font-family:'Nunito',sans-serif;font-size:18px;font-weight:800;color:#000;margin-bottom:12px}
.rstp .bodytext{font-size:14.5px;color:#555;line-height:1.7;margin-bottom:8px}
.rstp .highlights-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:20px 0 4px}
.rstp .highlight-item{display:flex;align-items:center;gap:12px;padding:13px;background:#F1F2F2;border-radius:12px}
.rstp .highlight-icon{width:40px;height:40px;border-radius:10px;background:linear-gradient(135deg,rgba(255,8,201,.1),rgba(174,0,255,.1),rgba(0,174,255,.1));display:flex;align-items:center;justify-content:center;flex-shrink:0}
.rstp .highlight-icon svg{width:20px;height:20px;stroke:#AE00FF;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.rstp .highlight-text{font-size:13.5px;font-weight:700;color:#000}
.rstp .highlight-sub{font-size:12px;color:#777;font-weight:500;margin-top:1px}
.rstp .menu-section,.rstp .photos-section,.rstp .reviews-section{margin-top:28px;padding-top:24px;border-top:1px solid #E6E7E8}
.rstp .dgallery{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.rstp .dgallery .gthumb{width:100%;height:150px;border-radius:14px;background-size:cover;background-position:center}
.rstp .review-card{padding:18px;background:#F1F2F2;border-radius:14px;margin-bottom:12px}
.rstp .review-text{font-size:14px;color:#333;line-height:1.6}
.rstp .booking-card{background:#fff;border-radius:20px;padding:24px;border:1px solid #E6E7E8;box-shadow:0 4px 24px rgba(0,0,0,.06)}
.rstp .booking-card h3{font-family:'Nunito',sans-serif;font-size:19px;font-weight:800;color:#000;margin-bottom:6px}
.rstp .booking-price{font-size:14px;color:#666;margin-bottom:18px}
.rstp .booking-price strong{font-size:24px;font-weight:800;color:#000}
@media(min-width:880px){
.rstp .app{width:100%;max-width:100%;padding:0;flex:1 0 auto;min-height:0}
.rstp .container{padding:0 24px}
.rstp .profile-header{padding:22px 0 46px}
.rstp .profile-grid{grid-template-columns:320px 1fr;gap:48px}
.rstp .chef-card-img{aspect-ratio:3/4}
.rstp .profile-info h1{font-size:42px}
.rstp .profile-brand{font-size:18px}
.rstp .profile-bio{font-size:16px}
.rstp .content-grid{grid-template-columns:1fr 380px;gap:48px;padding:38px 0 60px}
.rstp .booking-sidebar{position:sticky;top:84px}
.rstp .booking-card{padding:30px}
.rstp .dgallery .gthumb{height:190px}
}
@media(max-width:879px){
.rstp .app{width:100%;padding-bottom:30px}
}
.rstp .soon-badge{display:inline-block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--purple);background:rgba(174,0,255,.08);border:1px solid rgba(174,0,255,.16);border-radius:999px;padding:5px 12px;margin-bottom:14px}
.rstp .soon-copy{font-size:14px;color:#666;line-height:1.6;margin-bottom:18px}
.rstp .cs-badge-hero{background:var(--grad);color:#fff;text-transform:uppercase;letter-spacing:.5px}
.rstp .chef-card-img.mono{font-size:60px}
/* Notify-me: house frame-not-fill (Lars) - white inside, 2px gradient frame, gradient
   text via the child span (mirrors .rstp .cta). The border is paid out of the padding
   (13-2 / 26-2) so the box footprint matches the old solid button. */
.rstp .notify-btn{display:block;width:100%;text-align:center;cursor:pointer;border:2px solid transparent;background:linear-gradient(#fff,#fff) padding-box,var(--grad) border-box;font-family:'Nunito',sans-serif;font-weight:800;font-size:15px;padding:11px 24px;border-radius:999px;margin-top:4px}
.rstp .notify-btn span{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.rstp .notify-btn[disabled]{opacity:.7;cursor:default}
.rstp .notify-btn.done{background:rgba(174,0,255,.10);color:var(--purple);cursor:default}
.rstp .notify-foot{font-size:11.5px;color:var(--hint);margin-top:11px;text-align:center;line-height:1.5}
.rstp .notify-form{margin-top:4px}
.rstp .notify-form input[type=email]{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:12px;padding:12px 14px;font-family:'Nunito',sans-serif;font-size:14px;color:var(--ink);background:#fff;margin-bottom:10px;outline:none}
.rstp .notify-form input[type=email]:focus{border-color:var(--purple)}
.rstp .nf-hp{position:absolute;left:-9999px;opacity:0;height:0;width:0}
.rstp .nf-err{color:#E5484D;font-size:12px;font-weight:700;margin:2px 0 8px;text-align:center}
.rstp .protochip{display:inline-block;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--hint);background:var(--soft);border-radius:999px;padding:2px 8px;margin-bottom:10px}
.rstp .dmap{height:140px;border-radius:14px;background:linear-gradient(135deg,#e9ecf2,#dfe3ea);position:relative;overflow:hidden;margin-bottom:10px}
.rstp .dmap:before{content:"";position:absolute;inset:0;background-image:repeating-linear-gradient(0deg,#d4d9e2 0 1px,transparent 1px 28px),repeating-linear-gradient(90deg,#d4d9e2 0 1px,transparent 1px 28px)}
.rstp .dmap .dpin{position:absolute;left:50%;top:46%;transform:translate(-50%,-100%)}
.rstp .dmap .dpin svg{width:34px;height:34px;stroke:var(--purple);fill:rgba(174,0,255,.12);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.rstp .dmap .dmap-stand{position:absolute;right:8px;bottom:8px;font-size:9.5px;font-weight:700;color:var(--hint);background:rgba(255,255,255,.78);border-radius:6px;padding:2px 7px;font-style:italic}
.rstp .dmap-link{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:800;text-decoration:none}
.rstp .dmap-link span.g{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.rstp .dmap-link svg{width:16px;height:16px;stroke:var(--purple);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
    /* ==== END _detail.css ==== */

    /* ---- membership menus (Lars round 3, decision 13: the "This month's menu"
       section IS each membership's own menu — its text and, when there is one, a
       link to its PDF. The dish catalogue no longer feeds this page.) ----
       menu text is authored as prose with line breaks, so it renders escaped with
       white-space:pre-line — the breaks survive without any raw-HTML output. */
    .rstp .rst-mmenu{border:1px solid var(--line);border-radius:16px;padding:16px 18px;background:#fff;box-shadow:0 4px 24px rgba(0,0,0,.06);margin-top:14px}
    .rstp .rst-mmenu .mmname{font-size:15px;font-weight:800;color:var(--ink);line-height:1.25;margin-bottom:8px}
    .rstp .rst-mmenu .mmtext{font-size:13.5px;line-height:1.7;color:var(--slate);white-space:pre-line;margin:0}
    .rstp .rst-mmenu .mmpdf{display:inline-flex;align-items:center;gap:7px;margin-top:12px;font-size:12.5px;font-weight:800;color:var(--purple);text-decoration:none;border:1px solid rgba(174,0,255,.28);border-radius:100px;padding:7px 14px}
    .rstp .rst-mmenu .mmpdf:hover{background:rgba(174,0,255,.06)}
    .rstp .rst-mmenu .mmpdf svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}

    /* ---- photos: count-aware mosaic (1–5) + lightbox carousel.
       Every gallery upload is crop-enforced 16:9, so EVERY tile is 16:9 —
       no fixed row heights, no subject-cutting (user-reported). The featured
       2×2 span lands on ~16:9 automatically because the neighbouring 1×1
       tiles set the implicit row height from their own 16:9 aspect. ---- */
    .rstp .rst-gal{display:grid;gap:10px;margin-top:12px}
    .rstp .rst-gal .g{aspect-ratio:16/9;border-radius:14px;background-size:cover;background-position:center;background-color:var(--soft);cursor:pointer;overflow:hidden;transition:filter .15s}
    .rstp .rst-gal .g:hover{filter:brightness(.9)}
    .rstp .rst-gal.n1{grid-template-columns:1fr}
    .rstp .rst-gal.n2{grid-template-columns:1fr 1fr}
    .rstp .rst-gal.n3{grid-template-columns:2fr 1fr}
    .rstp .rst-gal.n3 .g:first-child{grid-row:span 2;aspect-ratio:auto}
    .rstp .rst-gal.n4{grid-template-columns:1fr 1fr}
    .rstp .rst-gal.n5{grid-template-columns:repeat(4,1fr)}
    .rstp .rst-gal.n5 .g:first-child{grid-column:span 2;grid-row:span 2;aspect-ratio:auto}
    @media(max-width:680px){
        /* stack: featured full-width 16:9, the rest 2-across 16:9 — nothing cropped */
        .rstp .rst-gal.n3,.rstp .rst-gal.n5{grid-template-columns:1fr 1fr}
        .rstp .rst-gal.n3 .g:first-child,
        .rstp .rst-gal.n5 .g:first-child{grid-column:span 2;grid-row:auto;aspect-ratio:16/9}
    }
    /* lightbox lives on <body>, outside .rstp. ⚠️ Inner class names must be UNIQUE —
       generic names collide with the site chrome (a button classed "nav" inherited the
       header bar's fixed/left rules and both arrows piled up on the left; user-caught). */
    .rstp-lb{position:fixed;inset:0;z-index:1300;background:rgba(10,10,14,.92);display:flex;align-items:center;justify-content:center;padding:30px}
    .rstp-lb img{display:block;max-width:92vw;max-height:80vh;width:auto;height:auto;border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,.6)}
    .rstp-lb button{font-family:inherit;cursor:pointer}
    .rstp-lb .lbnav{position:absolute;left:auto;top:50%;transform:translateY(-50%);width:46px;height:46px;border-radius:50%;border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.09);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s}
    .rstp-lb .lbnav:hover{background:rgba(255,255,255,.2)}
    .rstp-lb .lbnav.lbprev{left:16px;right:auto}
    .rstp-lb .lbnav.lbnext{right:16px;left:auto}
    .rstp-lb .lbx{position:absolute;top:14px;right:14px;left:auto;width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.09);color:#fff;font-size:17px;font-weight:800}
    .rstp-lb .lbx:hover{background:rgba(255,255,255,.2)}
    .rstp-lb .lbcnt{position:absolute;bottom:16px;left:50%;transform:translateX(-50%);color:rgba(255,255,255,.8);font-size:12.5px;font-weight:800;letter-spacing:.04em}
    @media(max-width:680px){
        .rstp-lb{padding:14px}
        .rstp-lb .lbnav.lbprev{left:8px}
        .rstp-lb .lbnav.lbnext{right:8px}
    }
    /* The picker CSS (day chips · date strip · bill summary) moved to
         choose.blade.php with the picker itself (user 2026-08-05: separate
         page). This page keeps only the note card + Join CTA. */
    /* "memberships start <date>" note — shown above the Join CTA until the
       first membership here opens (tokens only, so it themes). */
    /* real embedded map (2026-08-05) — the iframe fills the prototype's .dmap
       frame; taller than the 140px stand-in because a live map that small is
       unusable. Overrides sit here because this block loads after _detail.css. */
    .rstp .dmap.dmap-live{height:300px;background:#e9ecf2}
    .rstp .dmap.dmap-live iframe{display:block;width:100%;height:100%;border:0}
    @media(max-width:680px){ .rstp .dmap.dmap-live{height:230px} }

    /* #membership is the landing target when the choose/checkout pages bounce a
         customer back here because new sign-ups are closed (Lars 2026-08-13: never a
         silent failure). The fixed site nav is 89px, so the anchor needs its own
         scroll offset or the card lands underneath it. */
    .rstp .booking-sidebar{scroll-margin-top:100px}
    /* frame-not-fill (Lars 26 Aug #12b): the start-date notice loses its purple
       TINT; white inside, purple frame. */
    .rstp .rst-opens{background:#fff;border:1.5px solid rgba(174,0,255,.45);border-radius:13px;padding:13px 15px;margin:14px 0 12px}
    .rstp .rst-opens b{display:block;font-size:14.5px;font-weight:900;color:var(--purple,#AE00FF);margin-bottom:3px}
    .rstp .rst-opens span{font-size:12.5px;color:#666;line-height:1.55}
    /* selected membership row (the show-page picker remnant) — frame-not-fill
       (Lars 26 Aug #12c): _detail.css tints the selected row's inside pink; keep
       the pink FRAME, white the inside. The solid-pink radio dot (.pk.sel .chk)
       is EXEMPT (Lars named it, like the checkbox tick). This rule sits AFTER the
       inlined _detail.css, so same-specificity later-wins. */
    .rstp .pk.sel{background:#fff}
    /* The membership row's TEXT column must be allowed to shrink, or the flex
       row pushes the .chk radio circle 18px OUT of the card's right edge on
       narrow sidebars (user-reported 2026-09-08, measured at 375px). Flex items
       default to min-width:auto (min-content), so the anonymous text div
       refused to shrink below its longest line ("Dinner 7:00 PM – 11:00 PM")
       and shoved the flex:none price + radio past the border. min-width:0 lets
       it wrap inside the card instead. */
    .rstp .pk>div:not([class]){flex:1 1 auto;min-width:0}
    /* On narrow phones reclaim row width with a smaller thumb + tighter gap so
       the detail lines wrap at natural points instead of mid-word. Deliberately
       NO ellipsis/nowrap: the service window and the locked "1 visit per day on
       this pass" line must stay fully readable (Lars #16). */
    @media(max-width:480px){
        .rstp .pk{gap:10px}
        .rstp .pk .pi{width:44px;height:44px}
    }
    /* TABLET (681–879): the profile header goes two-column like desktop (≥880).
       In the single-column base the 3:4 hero is width-capped by max-height:520 to
       ~390px, so on a 768 portrait tablet it sat left with a wide empty dark band
       to its right and the bio dumped below (tablet pass). Putting the hero (320)
       left and the info right — the SAME layout as desktop, just a lower breakpoint
       — fills that band. Phone (≤680, 9:16 full-width hero) and desktop (≥880) are
       untouched; this override lands AFTER the inlined _detail.css so 0,2,0 wins. */
    @media(min-width:681px) and (max-width:879px){
        .rstp .profile-grid{grid-template-columns:320px 1fr;gap:32px;align-items:start}
    }
