/* GPI specials pop-up, coupons and wheel. Colours come from specials.json (theme). */
.sp-launch{position:fixed;left:max(18px,env(safe-area-inset-left,0px));bottom:max(18px,env(safe-area-inset-bottom,0px));z-index:1400;display:flex;align-items:center;gap:8px;
  padding:11px 16px 11px 12px;border:0;border-radius:999px;background:var(--sp-hot);color:#fff;font:800 13px/1 'Archivo','Montserrat',system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;
  box-shadow:0 10px 26px -10px rgba(0,0,0,.45);cursor:pointer;animation:sp-wiggle 3.6s ease-in-out infinite}
.sp-launch svg{width:22px;height:22px}
.sp-launch:focus-visible{outline:3px solid var(--sp-gold);outline-offset:3px}
@keyframes sp-wiggle{0%,82%,100%{transform:rotate(0)}86%{transform:rotate(-7deg) scale(1.06)}90%{transform:rotate(6deg) scale(1.06)}94%{transform:rotate(-3deg)}}
.sp-modal{position:fixed;inset:0;z-index:3000;display:grid;place-items:center;padding:20px;background:rgba(8,14,28,.58);opacity:0;transition:opacity .25s}
.sp-modal.on{opacity:1}
.sp-card{position:relative;width:min(440px,100%);max-height:calc(100svh - 40px);overflow:auto;border-radius:22px;padding:0 26px 24px;background:var(--sp-paper);color:var(--sp-ink);text-align:center;
  font-family:'Archivo','Montserrat',system-ui,sans-serif;box-shadow:0 30px 80px -20px rgba(0,0,0,.55);transform:translateY(18px) scale(.94);transition:transform .45s cubic-bezier(.2,1.5,.4,1)}
.sp-modal.on .sp-card{transform:none}
.sp-card>*{position:relative}
.sp-x{position:absolute;top:12px;right:12px;width:34px;height:34px;display:grid;place-items:center;border:0;border-radius:50%;background:rgba(255,255,255,.9);color:var(--sp-ink);cursor:pointer;z-index:2}
.sp-x svg{width:18px;height:18px}
.sp-sample{margin:0 0 8px;display:inline-block;padding:5px 10px;border-radius:6px;background:#fff;color:#8A5A00;font:700 11px/1.3 system-ui,sans-serif}
.sp-badge{display:inline-block;margin:0 0 6px;padding:6px 14px;border-radius:999px;background:var(--sp-gold);color:var(--sp-ink);font:900 12px/1 'Archivo',system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;animation:sp-pulse 1.6s ease-in-out infinite}
@keyframes sp-pulse{50%{transform:scale(1.07)}}
.sp-top{margin:0 -26px;padding:30px 26px 30px;background:var(--sp-hot);color:#fff;border-radius:22px 22px 50% 50% / 22px 22px 34px 34px}
.sp-top .sp-title{color:#fff;margin-top:10px}
.sp-top .sp-sub{color:#fff;opacity:.95}
.sp-top .sp-sample{margin-bottom:12px}
.sp-amount{margin:6px 0 0;display:flex;justify-content:center;align-items:flex-end;gap:4px;text-shadow:0 3px 0 rgba(0,0,0,.14)}
.sp-amount b{font:900 clamp(64px,17vw,92px)/.9 'Archivo Black','Archivo',system-ui,sans-serif;letter-spacing:-.03em}
.sp-amount span{font:800 20px/1.4 'Archivo',system-ui,sans-serif;margin-bottom:8px}
.sp-strike{margin:4px 0 0;font:700 15px/1.3 system-ui,sans-serif;text-decoration:line-through;opacity:.85}
.sp-title{margin:14px 0 0;font:900 21px/1.25 'Archivo',system-ui,sans-serif;color:var(--sp-ink)}
.sp-sub{margin:6px auto 0;max-width:34ch;font:500 14.5px/1.5 system-ui,sans-serif;color:var(--sp-ink);opacity:.85}
.sp-count{display:flex;justify-content:center;align-items:center;gap:6px;margin:14px 0 0;font:700 12px/1 system-ui,sans-serif;text-transform:uppercase;letter-spacing:.08em}
.sp-count b{display:inline-flex;align-items:baseline;gap:1px;padding:7px 8px;border-radius:7px;background:var(--sp-ink);color:#fff;font:800 17px/1 'Archivo',system-ui,sans-serif;font-variant-numeric:tabular-nums}
.sp-count i{font-style:normal;font-size:10px;opacity:.75}
.sp-coupons{display:grid;gap:10px;margin:18px 0 0}
.sp-coupon{position:relative;display:grid;grid-template-columns:auto 1fr;align-items:center;gap:14px;text-align:left;padding:13px 16px;border-radius:12px;background:#fff;
  border:2px dashed color-mix(in srgb,var(--sp-hot) 55%,transparent);overflow:hidden}
.sp-coupon::after{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.75) 50%,transparent 65%);transform:translateX(-120%);animation:sp-shine 3.2s ease-in-out infinite}
@keyframes sp-shine{60%,100%{transform:translateX(120%)}}
.sp-coupon b{font:900 24px/1 'Archivo Black','Archivo',system-ui,sans-serif;color:var(--sp-hot);white-space:nowrap}
.sp-coupon em{display:block;font:800 14px/1.3 'Archivo',system-ui,sans-serif;font-style:normal}
.sp-coupon small{display:block;font:500 12.5px/1.4 system-ui,sans-serif;opacity:.75}
.sp-actions{display:grid;gap:10px;margin:20px 0 0}
.sp-btn{display:block;width:100%;padding:16px;border-radius:999px;border:0;font:900 15px/1 'Archivo',system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;cursor:pointer}
.sp-btn-hot{background:var(--sp-hot);color:#fff;box-shadow:0 8px 0 -2px color-mix(in srgb,var(--sp-hot) 55%,#000);animation:sp-pulse 1.8s ease-in-out infinite}
.sp-btn-hot:active{transform:translateY(3px);box-shadow:none}
.sp-btn-line{background:transparent;color:var(--sp-ink);border:2px solid var(--sp-ink)}
.sp-btn:focus-visible,.sp-spin:focus-visible{outline:3px solid var(--sp-gold);outline-offset:3px}
.sp-terms,.sp-fine{margin:14px 0 0;font:500 11.5px/1.5 system-ui,sans-serif;opacity:.7}
.sp-form{display:grid;gap:10px;margin:18px 0 0;text-align:left}
.sp-form-h{margin:0;text-align:center;font:900 18px/1.3 'Archivo',system-ui,sans-serif}
.sp-form label{display:grid;gap:4px;font:700 12px/1.3 system-ui,sans-serif;text-transform:uppercase;letter-spacing:.06em}
.sp-form small{text-transform:none;font-weight:500;opacity:.7}
.sp-form input{width:100%;padding:12px 14px;border-radius:10px;border:1.5px solid color-mix(in srgb,var(--sp-ink) 25%,transparent);background:#fff;font:500 16px/1.2 system-ui,sans-serif;color:var(--sp-ink)}
.sp-form input:focus{outline:none;border-color:var(--sp-hot);box-shadow:0 0 0 3px color-mix(in srgb,var(--sp-hot) 25%,transparent)}
.sp-done{text-align:center;display:grid;gap:8px;justify-items:center;padding:8px 0}
.sp-check{width:58px;height:58px;display:grid;place-items:center;border-radius:50%;background:var(--sp-hot);color:#fff;font-size:30px;font-weight:900}
.sp-cf{position:absolute;top:40%;width:9px;height:14px;border-radius:2px;z-index:5;pointer-events:none;animation:sp-cf 1.5s cubic-bezier(.2,.7,.4,1) forwards}
@keyframes sp-cf{0%{transform:translate(0,0) rotate(0);opacity:1}100%{transform:translate(var(--dx),calc(var(--dy) + 420px)) rotate(var(--rot));opacity:0}}
.sp-card-wheel{width:min(460px,100%)}
.sp-card-wheel .sp-top{padding-bottom:26px}
.sp-wheel{position:relative;width:min(320px,78vw);aspect-ratio:1;margin:22px auto 0}
.sp-disc{width:100%;height:100%;display:block;filter:drop-shadow(0 12px 22px rgba(0,0,0,.28))}
.sp-pointer{position:absolute;left:50%;top:-10px;z-index:2;width:0;height:0;transform:translateX(-50%);border-left:16px solid transparent;border-right:16px solid transparent;border-top:30px solid var(--sp-gold);filter:drop-shadow(0 3px 2px rgba(0,0,0,.3))}
.sp-spin{position:absolute;left:50%;top:50%;width:66px;height:66px;transform:translate(-50%,-50%);border-radius:50%;border:4px solid #fff;background:var(--sp-hot);color:#fff;font:900 14px/1 'Archivo',system-ui,sans-serif;letter-spacing:.08em;cursor:pointer;box-shadow:0 6px 16px rgba(0,0,0,.3)}
.sp-spin:disabled{cursor:default;opacity:.85}
.sp-win{margin:16px 0 0;font:900 22px/1.3 'Archivo',system-ui,sans-serif}
.sp-win b{color:var(--sp-hot)}
@media (prefers-reduced-motion:reduce){.sp-launch,.sp-badge,.sp-btn-hot,.sp-coupon::after{animation:none}.sp-card{transition:none}}

/* ── per-community skins (style in specials.json) ── */
/* The Cape: resort-quiet */
.sp-s-tide .sp-card{border-radius:2px;font-family:'Manrope',system-ui,sans-serif}
.sp-s-tide .sp-top{border-radius:2px 2px 0 0;padding-top:36px}
.sp-s-tide .sp-badge{background:none;border:1px solid var(--sp-gold);color:var(--sp-gold);font:600 10.5px/1 'Manrope',sans-serif;letter-spacing:.3em;animation:none}
.sp-s-tide .sp-amount b{font:200 clamp(78px,18vw,104px)/.9 'Antonio','Oswald',sans-serif;letter-spacing:.01em;text-shadow:none}
.sp-s-tide .sp-amount span{font:italic 400 24px/1.4 'Cormorant Garamond',Georgia,serif}
.sp-s-tide .sp-title{font:italic 400 26px/1.2 'Cormorant Garamond',Georgia,serif}
.sp-s-tide .sp-sub{font-family:'Manrope',sans-serif}
.sp-s-tide .sp-coupon{border:1px solid rgba(13,33,64,.16);border-radius:0}
.sp-s-tide .sp-coupon::after{display:none}
.sp-s-tide .sp-coupon b{font:300 26px/1 'Antonio',sans-serif;color:var(--sp-ink)}
.sp-s-tide .sp-coupon em{font:600 14px/1.3 'Manrope',sans-serif}
.sp-s-tide .sp-btn{border-radius:0;font:600 11.5px/1 'Manrope',sans-serif;letter-spacing:.22em;animation:none;box-shadow:none;padding:18px}
.sp-s-tide .sp-btn-hot{background:var(--sp-gold)}
.sp-s-tide .sp-form-h,.sp-s-tide .sp-win{font:italic 400 24px/1.3 'Cormorant Garamond',serif}
.sp-s-tide .sp-form input{border-radius:0}
.sp-launch.sp-s-tide{border-radius:0;padding:14px 18px;background:var(--sp-hot);font:600 10.5px/1 'Manrope',sans-serif;letter-spacing:.26em;animation:none}
/* Midtown & Fox Meadows: campus-bold */
.sp-s-campus .sp-card{border-radius:26px;font-family:'Instrument Sans',system-ui,sans-serif}
.sp-s-campus .sp-badge{background:var(--sp-gold);color:var(--sp-ink);font:700 12px/1 'Instrument Sans',sans-serif;letter-spacing:.06em;transform:rotate(-3deg);animation:none}
.sp-s-campus .sp-amount b{font:800 clamp(72px,17vw,96px)/.9 'Bricolage Grotesque',sans-serif;letter-spacing:-.045em;color:var(--sp-gold);text-shadow:none}
.sp-s-campus .sp-amount span{font:700 20px/1.4 'Instrument Sans',sans-serif}
.sp-s-campus .sp-title{font:800 24px/1.15 'Bricolage Grotesque',sans-serif;letter-spacing:-.02em}
.sp-s-campus .sp-coupon{border:2px solid rgba(23,50,77,.1);border-radius:16px}
.sp-s-campus .sp-coupon b{font:800 24px/1 'Bricolage Grotesque',sans-serif;color:var(--sp-hot);letter-spacing:-.02em}
.sp-s-campus .sp-btn{font:700 15px/1 'Instrument Sans',sans-serif;letter-spacing:0;text-transform:none}
.sp-s-campus .sp-btn-hot{background:var(--sp-gold);color:var(--sp-ink);box-shadow:none;animation:none}
.sp-launch.sp-s-campus{background:var(--sp-gold);color:var(--sp-ink);font:700 14px/1 'Instrument Sans',sans-serif;letter-spacing:0;text-transform:none;animation:none}
/* Nottingham: the offer, elegantly */
.sp-s-offer .sp-card{border-radius:22px;font-family:'Plus Jakarta Sans',system-ui,sans-serif}
.sp-s-offer .sp-badge{background:#fff;color:var(--sp-hot);font:700 11px/1 'Plus Jakarta Sans',sans-serif;letter-spacing:.16em}
.sp-s-offer .sp-amount b{font:400 clamp(80px,19vw,108px)/.88 'DM Serif Display',Georgia,serif;letter-spacing:-.02em;text-shadow:none}
.sp-s-offer .sp-amount span{font:600 18px/1.4 'Plus Jakarta Sans',sans-serif}
.sp-s-offer .sp-title{font:400 30px/1.1 'DM Serif Display',Georgia,serif}
.sp-s-offer .sp-coupon{border:1px solid rgba(184,138,74,.55)}
.sp-s-offer .sp-coupon b{font:400 28px/1 'DM Serif Display',Georgia,serif;color:var(--sp-hot)}
.sp-s-offer .sp-btn{font:700 14.5px/1 'Plus Jakarta Sans',sans-serif;letter-spacing:.01em;text-transform:none}
.sp-s-offer .sp-btn-hot{animation:none}
.sp-s-offer .sp-win{font:400 26px/1.25 'DM Serif Display',serif}
.sp-launch.sp-s-offer{background:var(--sp-ink);font:700 13.5px/1 'Plus Jakarta Sans',sans-serif;letter-spacing:.02em;text-transform:none;animation:none}
.sp-launch.sp-s-offer svg{color:var(--sp-gold)}
.sp-s-tide .sp-top{border-radius:2px 2px 0 0!important}

/* classic: the Prata / Newsreader / Montserrat family (Signature) */
.sp-s-classic .sp-card{border-radius:8px;font-family:'Montserrat',system-ui,sans-serif}
.sp-s-classic .sp-top{border-radius:8px 8px 50% 50% / 8px 8px 28px 28px}
.sp-s-classic .sp-badge{background:#fff;color:var(--sp-hot);font:600 11px/1 'Montserrat',sans-serif;letter-spacing:.2em}
.sp-s-classic .sp-amount b{font:400 clamp(80px,19vw,104px)/.9 'Prata',Georgia,serif;letter-spacing:-.01em;text-shadow:none}
.sp-s-classic .sp-amount span{font:500 18px/1.4 'Montserrat',sans-serif}
.sp-s-classic .sp-title{font:400 30px/1.1 'Newsreader',Georgia,serif}
.sp-s-classic .sp-coupon{border:1px solid rgba(184,138,74,.55);border-radius:6px}
.sp-s-classic .sp-coupon b{font:400 26px/1 'Prata',Georgia,serif;color:var(--sp-hot)}
.sp-s-classic .sp-coupon em{font:600 13.5px/1.35 'Montserrat',sans-serif}
.sp-s-classic .sp-btn{border-radius:6px;font:600 12px/1 'Montserrat',sans-serif;letter-spacing:.16em}
.sp-s-classic .sp-btn-hot{animation:none}
.sp-s-classic .sp-form-h,.sp-s-classic .sp-win{font:400 24px/1.3 'Newsreader',serif}
.sp-launch.sp-s-classic{border-radius:6px;background:var(--sp-hot);font:600 11.5px/1 'Montserrat',sans-serif;letter-spacing:.14em;animation:none}

/* pages with a bottom bar: the launcher sits above it */
body:has(.s-dock) .sp-launch,body:has(.a-dock) .sp-launch{bottom:calc(76px + env(safe-area-inset-bottom,0px))}

/* end date (rolls to the last day of each month), many specials, one list per community */
.sp-ends{display:inline-block;margin:12px 0 0;padding:6px 12px;border-radius:999px;background:rgba(255,255,255,.18);color:#fff;font:700 12px/1 system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase}
.sp-group{margin:8px 0 -2px;text-align:left;font:800 12px/1.2 system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;opacity:.8}
.sp-coupon-empty{grid-template-columns:1fr;border-style:solid;border-color:color-mix(in srgb,var(--sp-ink) 14%,transparent);background:transparent}
.sp-coupon-empty::after{display:none}
.sp-coupon-empty em{opacity:.75}
.sp-coupons.sp-many .sp-coupon{padding:11px 14px}
.sp-coupons.sp-many .sp-coupon b{min-width:3.6em}
