/* CORE Timetable — styles
   Colour coding: HUE = weekly vs one-off (primary vs secondary Frost tokens);
   FILL vs OUTLINE = included vs not included in the subscription.
   Built for a light background; swap the fallbacks to match your Frost palette. */

.core-tt{
	--tt-weekly: var(--wp--preset--color--primary,   #3858e9);
	--tt-oneoff: var(--wp--preset--color--secondary, #e0655b);
	--tt-text:   var(--wp--preset--color--contrast,  #1a1a1a);
	--tt-line:   rgba(0,0,0,.14);
	--tt-radius: 10px;
	color: var(--tt-text);
	font-size: .9rem;
	line-height: 1.25;
}

/* ---- Legend ---- */
.tt-legend{display:flex;flex-wrap:wrap;gap:.6rem 1.25rem;margin:0 0 1.1rem;font-size:.75rem;font-weight:600;color:var(--tt-text);}
.tt-legend-item{display:inline-flex;align-items:center;gap:.45rem;}
.tt-swatch{width:16px;height:16px;border-radius:5px;border:2px solid transparent;flex:0 0 auto;}

/* ---- Grid (flexible columns: always fits the container, no horizontal scroll) ---- */
.tt-grid{display:grid;gap:8px;min-width:0;}
.tt-head,.tt-row{display:contents;}
.tt-time{text-align:center;font-size:.7rem;font-weight:700;letter-spacing:.03em;opacity:.6;padding-bottom:6px;align-self:end;}
.tt-daylabel{display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--tt-text);border:2px solid var(--tt-line);border-radius:999px;padding:.35rem .6rem;min-width:52px;}

/* Cells: dashed only when empty; filled cells give all their space to the chips */
.tt-cell{display:flex;flex-direction:column;gap:4px;min-height:56px;padding:0;border-radius:var(--tt-radius);}
.tt-cell:empty{border:1px dashed var(--tt-line);}

/* ---- Chips: fill the whole slot ---- */
.tt-act{
	flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;gap:2px;
	width:100%;text-align:center;cursor:pointer;border-radius:var(--tt-radius);
	padding:.5rem .4rem;font:inherit;border:2px solid transparent;
	transition:transform .08s ease,filter .15s ease;
}
.tt-act:hover{transform:translateY(-1px);filter:brightness(1.04);}
.tt-act:focus-visible{outline:2px solid var(--tt-text);outline-offset:2px;}
.tt-act-title{font-weight:800;font-size:.72rem;letter-spacing:.02em;text-transform:uppercase;}
.tt-act-sub{font-size:.66rem;opacity:.92;text-transform:uppercase;}
.tt-act-date{font-size:.64rem;font-weight:700;}
.tt-act-time{font-size:.62rem;opacity:.85;}

/* Four-way coding (chips + legend swatches) */
.tt-act--weekly.tt-act--sub{background:var(--tt-weekly);border-color:var(--tt-weekly);color:#fff;}
.tt-act--weekly.tt-act--nosub{background:#fff;border-color:var(--tt-weekly);color:var(--tt-weekly);}
.tt-act--oneoff.tt-act--sub{background:var(--tt-oneoff);border-color:var(--tt-oneoff);color:#fff;}
.tt-act--oneoff.tt-act--nosub{background:#fff;border-color:var(--tt-oneoff);color:var(--tt-oneoff);}

/* ---- Week navigation ---- */
.tt-weeknav{display:flex;align-items:center;justify-content:center;gap:.75rem;margin:0 0 1rem;}
.tt-weeknav-btn{
	display:inline-flex;align-items:center;justify-content:center;width:2.2rem;height:2.2rem;
	font-size:1.35rem;line-height:1;cursor:pointer;color:var(--tt-text);
	background:#fff;border:2px solid var(--tt-line);border-radius:999px;
	transition:border-color .15s ease,color .15s ease,transform .08s ease;
}
.tt-weeknav-btn:hover:not([disabled]){border-color:var(--tt-weekly);color:var(--tt-weekly);transform:translateY(-1px);}
.tt-weeknav-btn:focus-visible{outline:2px solid var(--tt-text);outline-offset:2px;}
.tt-weeknav-btn[disabled]{opacity:.35;cursor:default;}
.tt-weeknav-label{min-width:9.5rem;text-align:center;font-weight:800;font-size:.9rem;letter-spacing:.01em;text-transform:capitalize;}

/* ---- One-off chips injected into the grid for the active week ---- */
.tt-act--injected{animation:tt-pop .18s ease;}
@keyframes tt-pop{from{opacity:0;transform:scale(.96);}to{opacity:1;transform:none;}}
.tt-act--flash{animation:tt-flash 1.4s ease;}
@keyframes tt-flash{0%,100%{box-shadow:0 0 0 0 transparent;}20%,60%{box-shadow:0 0 0 3px var(--tt-oneoff);}}

/* ---- Upcoming one-off events list (under the grid) ---- */
.tt-oneoffs{margin:1.6rem 0 0;}
.tt-oneoffs-title{margin:0 0 .7rem;font-size:1rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;opacity:.75;}
.tt-oneoffs-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem;}
.tt-oneoff-item{margin:0;}
.tt-oneoff-row{
	width:100%;display:flex;align-items:center;gap:.9rem;text-align:left;cursor:pointer;
	background:#fff;border:2px solid var(--tt-line);border-left:4px solid var(--tt-oneoff);
	border-radius:var(--tt-radius);padding:.6rem .8rem;font:inherit;color:var(--tt-text);
	transition:border-color .15s ease,transform .08s ease,box-shadow .15s ease;
}
.tt-oneoff-row:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(0,0,0,.08);}
.tt-oneoff-row:focus-visible{outline:2px solid var(--tt-text);outline-offset:2px;}
.tt-oneoff-row.is-active{border-color:var(--tt-oneoff);}
.tt-oneoff-date{
	flex:0 0 auto;min-width:5.2rem;text-align:center;font-weight:800;font-size:.8rem;
	color:var(--tt-oneoff);padding:.35rem .4rem;border-radius:8px;background:rgba(224,101,91,.1);
}
.tt-oneoff-main{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex:1 1 auto;}
.tt-oneoff-name{font-weight:800;font-size:.9rem;line-height:1.2;text-transform:uppercase;letter-spacing:.01em;}
.tt-oneoff-meta{font-size:.78rem;opacity:.7;}
.tt-oneoff-go{flex:0 0 auto;font-size:1.4rem;line-height:1;opacity:.4;}
.tt-oneoff-row:hover .tt-oneoff-go{opacity:.8;color:var(--tt-oneoff);}

/* ---- Modal ---- */
.tt-modal-overlay{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;padding:1rem;background:rgba(10,12,40,.55);}
.tt-modal-overlay[hidden]{display:none;}
.tt-modal{
	position:relative;display:flex;flex-direction:column;gap:1.1rem;
	width:100%;max-width:440px;background:#fff;color:#1a1a2e;
	border-radius:16px;padding:2rem 1.75rem 1.75rem;box-shadow:0 20px 60px rgba(0,0,0,.35);
}
.tt-modal [hidden]{display:none !important;}
.tt-modal-close{position:absolute;top:.6rem;right:.7rem;background:none;border:none;cursor:pointer;font-size:1.6rem;line-height:1;color:#888;}
.tt-modal-close:hover{color:#1a1a2e;}
.tt-modal-title{margin:0;font-size:1.25rem;line-height:1.2;}
.tt-modal-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin:0;}
.tt-tag{font-size:.7rem;font-weight:700;padding:.2rem .6rem;border-radius:999px;border:1.5px solid currentColor;}
.tt-tag--weekly{color:var(--wp--preset--color--primary,#3858e9);}
.tt-tag--oneoff{color:var(--wp--preset--color--secondary,#e0655b);}
.tt-tag--sub{color:#1a7f37;}
.tt-tag--nosub{color:#8a6d00;}
.tt-modal-meta{margin:0;font-size:.85rem;color:#555;font-weight:600;}
.tt-modal-desc{margin:0;font-size:.95rem;line-height:1.5;}

/*
 * The modal's two actions, one row, the same size. The booking action is filled in
 * the theme's primary colour; "find out more" is the same shape outlined. Every
 * size is the same on both, so the only difference is the one that means something.
 */
.tt-modal-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin:0;}
.tt-modal-primary{display:contents;}
.tt-modal .tt-btn{
	flex:1 1 10rem;display:inline-flex;align-items:center;justify-content:center;
	box-sizing:border-box;min-height:3rem;margin:0;padding:.65rem 1.25rem;
	border:0;border-radius:999px;cursor:pointer;
	font:inherit;font-size:1rem;font-weight:700;line-height:1.2;text-align:center;text-decoration:none;
}
.tt-modal .tt-btn--primary{
	background:var(--wp--preset--color--primary,#3858e9);
	color:var(--wp--preset--color--base,#fff);
}
.tt-modal .tt-btn--secondary{
	background:transparent;
	color:var(--wp--preset--color--primary,#3858e9);
	box-shadow:inset 0 0 0 2px currentColor;
}
.tt-modal .tt-btn:hover{filter:brightness(1.08);}
.tt-modal .tt-btn--secondary:hover{background:color-mix(in srgb,currentColor 8%,transparent);filter:none;}
.tt-modal .tt-btn:focus-visible{outline:2px solid var(--wp--preset--color--contrast,#1a1a2e);outline-offset:2px;}
.tt-modal .tt-btn:disabled{opacity:.6;cursor:default;}

/*
 * What the member needs to know before acting. A notice, not a paragraph: tinted,
 * with a rule down the side, so "you need to sign in" reads as a condition and
 * not as the class description carrying on.
 */
.tt-modal-notice{
	margin:0;padding:.75rem 1rem;border-radius:.5rem;
	font-size:.95rem;line-height:1.45;
	border-left:4px solid var(--wp--preset--color--primary,#3858e9);
	background:color-mix(in srgb,var(--wp--preset--color--primary,#3858e9) 8%,transparent);
}
.tt-modal-notice--error{border-left-color:#b32d2e;background:color-mix(in srgb,#b32d2e 8%,transparent);}
.tt-modal-notice--ok{border-left-color:#00733f;background:color-mix(in srgb,#00733f 8%,transparent);}

/* ---- Activities by Category ---- */
.core-cat{display:grid;grid-template-columns:repeat(var(--core-cat-cols,3),1fr);gap:1.5rem;}
.core-cat-card{display:flex;flex-direction:column;}
.core-cat-media{display:block;aspect-ratio:3/2;overflow:hidden;border-radius:12px;background:rgba(0,0,0,.05);}
.core-cat-media img{width:100%;height:100%;object-fit:cover;display:block;}
.core-cat-title{margin:.9rem 0 .4rem;font-size:1.35rem;font-weight:800;line-height:1.2;letter-spacing:-.01em;color:var(--wp--preset--color--contrast,#1a1a1a);}
.core-cat-title a{text-decoration:none;color:inherit;}
.core-cat-title a:hover{text-decoration:underline;text-underline-offset:2px;}
.core-cat-excerpt{margin:0 0 1.75rem;font-size:.9rem;line-height:1.5;color:var(--wp--preset--color--contrast,#333);opacity:.8;}
/* CTA rendered as a button, clearly subordinate to the (now larger) title. */
.core-cat-more{
	margin-top:auto;align-self:flex-end;display:inline-flex;align-items:center;gap:.35rem;
	text-decoration:none;font-weight:600;font-size:.85rem;line-height:1;
	padding:.6rem 1.15rem;border-radius:999px;
	background:var(--wp--preset--color--primary,#3858e9);color:#fff;
	border:2px solid var(--wp--preset--color--primary,#3858e9);
	transition:filter .15s ease,transform .08s ease;
}
.core-cat-more::after{content:"\2192";font-weight:700;}
.core-cat-more:hover{filter:brightness(1.06);transform:translateY(-1px);text-decoration:none;color:#fff;}
.core-cat-more:focus-visible{outline:2px solid var(--wp--preset--color--contrast,#1a1a1a);outline-offset:2px;}

/* ---- Single activity: timeslots table ---- */
.core-slots-panel{margin:2.2rem 0 0;}
.core-slots-panel h2{font-size:1.2rem;margin:0 0 .8rem;}
.core-slots-table{width:100%;border-collapse:collapse;font-size:.95rem;}
.core-slots-table th,.core-slots-table td{text-align:left;padding:.55rem .6rem;border-bottom:1px solid rgba(0,0,0,.1);}
.core-slots-table th{font-size:.72rem;text-transform:uppercase;letter-spacing:.03em;opacity:.7;}
.core-slot-badge{display:inline-block;font-size:.7rem;font-weight:700;padding:.15rem .55rem;border-radius:999px;border:1.5px solid currentColor;}
.core-slot-badge--sub{color:#1a7f37;}
.core-slot-badge--nosub{color:#8a6d00;}

/* ---- Mobile: collapse the matrix into per-day lists ---- */
@media (max-width:768px){
	.tt-grid{display:block;}
	.tt-head{display:none;}
	.tt-row{display:flex;flex-direction:column;gap:6px;margin-bottom:1.4rem;}
	.tt-daylabel{align-self:flex-start;margin-bottom:.3rem;}
	.tt-cell{min-height:0;}
	.tt-cell:empty{display:none;}
	.tt-act-title{font-size:.8rem;}
	.tt-act-sub{font-size:.72rem;}
}
@media (max-width:781px){ .core-cat{grid-template-columns:repeat(2,1fr);} }
@media (max-width:520px){ .core-cat{grid-template-columns:1fr;} }

/* ---- List layout (shared "list" option; also used by auto nav menus) ---- */
.core-cat.core-cat--list{display:block;grid-template-columns:none;gap:0;margin:0;padding:0;list-style:none;}
.core-cat--list .core-cat-item{margin:0;padding:.15rem 0;}
.core-cat--list .core-cat-item a{text-decoration:none;color:inherit;}
.core-cat--list .core-cat-item a:hover{text-decoration:underline;}
.core-auto-menu{list-style:none;margin:0;padding:0;}
.core-auto-menu .menu-item{margin:0;padding:.15rem 0;}
.core-auto-menu .menu-item a{text-decoration:none;color:inherit;}
.core-auto-menu .menu-item a:hover{text-decoration:underline;}
.core-auto-menu-wrap{margin:0;}
.core-auto-menu-title{margin:0 0 .4rem;font-size:1rem;}
.core-cat-heading{margin:0 0 .6rem;font-size:1.05rem;}

/* ---------- Booking layer ----------
 * Added by booking.js once it knows the visitor's state. Everything here is
 * additive: with the script absent the grid renders exactly as before.
 */

.tt-book-summary{
	margin:.4em 0 1em;font-size:.95em;opacity:.85;
}
.tt-book-summary.is-warn{
	opacity:1;font-weight:600;
	color:var(--wp--preset--color--secondary,#b35c00);
}

/* White pills, so the state reads on a filled chip and on an outlined one alike. */
.tt-book-badge{
	display:inline-block;align-self:center;margin-top:4px;
	font-size:.72em;font-weight:700;letter-spacing:.03em;text-transform:uppercase;
	background:#fff;border:1px solid currentColor;border-radius:999px;padding:1px 8px;
}
.tt-book-badge--booked{color:#00733f;}
.tt-book-badge--wait{color:#8a5700;}
.tt-book-badge--full{color:#444;}
.tt-book-badge--left{color:#8a5700;}

.tt-act--booked{outline:2px solid #00733f;outline-offset:-2px;}
.tt-act--waitlisted{outline:2px dashed #8a5700;outline-offset:-2px;}
.tt-act--full{opacity:.6;}
/* The member's own room booking: theirs, not on the programme, so outlined. */
.tt-act--appointment{background:#fff;color:#1a1a2e;border:2px dashed #00733f;}
.tt-book-badge--cancelled{color:#b00020;}
.tt-act--cancelled > :not(.tt-book-badge){opacity:.55;}
.tt-act--cancelled .tt-act-title,.tt-oneoff-row--cancelled .tt-oneoff-name{text-decoration:line-through;}
.tt-oneoff-row--cancelled .tt-oneoff-date,.tt-oneoff-row--cancelled .tt-oneoff-meta{opacity:.55;}
.tt-oneoff-row--cancelled .tt-book-badge--cancelled{align-self:flex-start;margin-top:2px;}



/* ---- Plans (the tariffe cards) ----
 * The look the price list already has: a dark band carrying the plan's name, a pale
 * card, prices and inclusions on ruled lines, one button. Colours come from the
 * theme — contrast for the band, neutral for the card, primary for the button — so
 * the cards follow the site when the palette changes.
 */
/* Cards keep a third of the row whether two or three are in it, and a short row sits
   in the middle. Each block is one row, so a page of Start, Boost and Full blocks
   lines its cards up in columns. */
.core-plans{display:flex;flex-wrap:wrap;justify-content:center;gap:1rem;margin:0 auto;}
.core-plans > .core-plan{flex:0 0 calc((100% - 2rem) / 3);min-width:min(100%,15rem);}
@media (max-width:40rem){.core-plans > .core-plan{flex-basis:100%;}}
.core-plan{
	display:flex;flex-direction:column;overflow:hidden;
	background:var(--wp--preset--color--neutral,#eeeeee);
	color:var(--wp--preset--color--contrast,#222625);
	border:1px solid color-mix(in srgb,currentColor 22%,transparent);border-radius:3px;
}
.core-plan__head{
	padding:.9rem 1rem .8rem;text-align:center;
	background:var(--wp--preset--color--contrast,#222625);
	color:var(--wp--preset--color--base,#ffffff);
}
.core-plan__title{margin:0;font-size:1rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase;line-height:1.2;}
.core-plan__sub{margin:.25rem 0 0;font-size:.72rem;opacity:.8;}
.core-plan__body{display:flex;flex-direction:column;flex:1;padding:1rem 1.25rem 1.25rem;text-align:center;}
.core-plan__option{display:flex;flex-direction:column;flex:1;}
.core-plan__option[hidden]{display:none;}
.core-plan__pick{margin:0 0 .75rem;display:flex;flex-direction:column;gap:.3rem;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;}
.core-plan__pick select{
	width:100%;font:inherit;font-size:.9rem;text-transform:none;letter-spacing:0;
	padding:.45rem .6rem;border-radius:3px;
	border:1px solid color-mix(in srgb,currentColor 35%,transparent);
	background:var(--wp--preset--color--base,#fff);color:inherit;
}
.core-plan__name{margin:0 0 .5rem;font-weight:700;font-size:.9rem;}
.core-plans.is-live .core-plan__name{display:none;}
.core-plan__prices,.core-plan__features{list-style:none;margin:0;padding:0;}
.core-plan__prices li,.core-plan__features li{border-bottom:1px solid color-mix(in srgb,currentColor 14%,transparent);}
.core-plan__prices li:last-child,.core-plan__features li:last-child{border-bottom:0;}
.core-plan__prices label{display:flex;align-items:baseline;justify-content:center;gap:.35rem;padding:.4rem 0;font-size:.82rem;cursor:pointer;}
.core-plan__prices strong{font-size:1rem;font-weight:800;}
.core-plan__prices input{accent-color:var(--wp--preset--color--primary,#0000ff);margin:0 .15rem 0 0;align-self:center;}
.core-plan__prices label:has(input:checked){color:var(--wp--preset--color--primary,#0000ff);}
.core-plan__features{margin-top:1rem;}
/* Room above the button, which sits at the foot of the card whatever is above it. */
.core-plan__option > ul:last-of-type{margin-bottom:1.1rem;}
.core-plan__features li{padding:.32rem 0;font-size:.75rem;}
.core-plan__cta{
	align-self:center;margin-top:auto;
	display:inline-block;padding:.6rem 1.7rem;
	background:var(--wp--preset--color--primary,#0000ff);color:var(--wp--preset--color--base,#fff);
	font-size:.72rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;text-decoration:none;
	border-radius:2px;
}
.core-plan__cta:hover{filter:brightness(1.12);}
.core-plan__cta:focus-visible{outline:2px solid currentColor;outline-offset:3px;}
.core-plans__signin{margin:0 0 1rem;text-align:center;font-size:.9rem;}
/* The member's own plan: marked, and its button renews it. */
.core-plan--current{border:2px solid var(--wp--preset--color--primary,#0000ff);}
.core-plan__mine{
	align-self:center;margin:0 0 .75rem;padding:.2rem .7rem;border-radius:999px;
	background:var(--wp--preset--color--primary,#0000ff);color:var(--wp--preset--color--base,#fff);
	font-size:.68rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;
}
/* A plan for later is not the thing to do today: outlined, and allowed to wrap. */
.core-plan__cta{text-align:center;max-width:100%;}
.core-plan__cta--later{
	background:transparent;color:var(--wp--preset--color--primary,#0000ff);
	box-shadow:inset 0 0 0 2px var(--wp--preset--color--primary,#0000ff);padding-inline:1rem;
}
.core-plan__when{align-self:center;margin:.45rem 0 0;font-size:.72rem;opacity:.75;}
/* The upgrade sits under the button as a quieter second way in. */
.core-plan__upgrade{align-self:center;margin-top:.6rem;font-size:.72rem;color:var(--wp--preset--color--primary,#0000ff);text-align:center;}
.core-upgrades{list-style:none;padding:0;display:grid;gap:.5rem;}
.core-upgrades li{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;}
