/*
Theme Name:  WedAssist Web
Template:    neve
Theme URI:   https://wpmobileappmanager.com/
Description: WedAssist web version — a Neve child theme mirroring the WedAssist
             mobile app. Reads the same MAM payload and account context as the
             app; planners switch weddings via the top-bar account switcher (C6).
Author:      Tiny Screen Labs
Version:     0.58.2
License:     GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: wedassist-web
*/

/* ------------------------------------------------------------------ *
 * Brand — Olive & Ivory "black · gold · ivory · Palm Beach" luxury
 * redesign (from the WedAssist luxury-redesign mockup). Formal editorial
 * look: near-black chrome, ivory content, gold accents, emerald for
 * "paid/complete". Palette + type live here as tokens so a future
 * per-planner palette is a single swap.
 * ------------------------------------------------------------------ */
:root {
	--wa-ink:        #14130f;   /* chrome, headings, primary dark   */
	--wa-ink-2:      #1b1913;   /* nav bar, deep panels             */
	--wa-text:       #2a2823;   /* body text                        */
	--wa-muted:      #8a8474;   /* subtext / placeholder wash       */
	--wa-ivory:      #f8f4ec;   /* page background                  */
	--wa-panel:      #fbf8f1;   /* cards / panels                   */
	--wa-line:       #e4d9c0;   /* hairline borders / underlines    */
	--wa-line-2:     #ede6d6;   /* softer inner rule                */
	--wa-gold:       #b4924e;   /* brand accent, active             */
	--wa-gold-l:     #cbb273;   /* light gold (wordmark, footer)    */
	--wa-gold-d:     #8a6e32;   /* deep gold (hover, labels)        */
	--wa-olive:      #6e7458;
	--wa-em:         #256b52;   /* emerald — paid / success         */
	--wa-em-bg:      #e7efe9;
	--wa-warn:       #9b4a38;   /* over-budget / caution            */
	--wa-white:      #ffffff;

	--wa-serif:      "Cormorant Garamond", Georgia, serif;  /* display: titles, numerals */
	--wa-serif-body: "EB Garamond", Georgia, serif;         /* readable serif: names, values, dates */
	--wa-sans:       "Poppins", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;

	/* Back-compat aliases — earlier selectors / any inline styles referenced
	   these names. Kept so nothing has to be re-pointed. */
	--wa-green:      var(--wa-ink);
	--wa-green-soft: var(--wa-muted);
	--wa-cream:      var(--wa-ivory);
	--wa-mauve:      var(--wa-gold);
	--wa-mauve-deep: var(--wa-gold-d);
	--wa-rose-line:  var(--wa-line);
}

body.wedassist-app {
	background: var(--wa-ivory);
	color: var(--wa-text);
	font-family: var(--wa-sans);
	font-weight: 300;
}

/* Native checks render Chrome-blue without this, which is the one color the palette
   doesn't own (client note 2026-08-10). Deliberate exceptions (e.g. the olive "paid"
   toggle) re-declare their own accent further down and win on order. */
.wedassist-app input[type="checkbox"],
.wedassist-app input[type="radio"] {
	accent-color: var(--wa-ink);
}

.wedassist-app h1,
.wedassist-app h2,
.wedassist-app h3 {
	font-family: var(--wa-serif);
	color: var(--wa-ink);
	font-weight: 600;
}

/* ------------------------------------------------------------------ *
 * Header chrome
 * ------------------------------------------------------------------ */
.wa-header {
	background: var(--wa-ink);
	color: var(--wa-white);
	border-bottom: 1px solid var(--wa-gold);
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 0.9rem 1.75rem;
}

.wa-header__brand {
	font-family: var(--wa-serif);
	font-size: 1.35rem;
	letter-spacing: 0.4em;
	text-transform: uppercase;
	color: var(--wa-gold-l);
	text-decoration: none;
}

.wa-header__brand:hover { color: var(--wa-gold); opacity: 1; }

.wa-header__logo {
	display: block;
	height: 72px;
	width: auto;
	padding: 2px 0;
}

.wa-header__tools {
	display: flex;
	align-items: center;
	gap: 1rem;
}

/* C6 account switcher */
.wa-switcher select {
	background: var(--wa-ink-2);
	color: var(--wa-white);
	border: 1px solid rgba(255, 255, 255, 0.25);
	border-radius: 0;
	padding: 0.35rem 0.6rem;
	font-family: var(--wa-sans);
	font-size: 0.85rem;
}

.wa-nav-toggle {
	background: none;
	border: 0;
	color: var(--wa-white);
	font-size: 1.5rem;
	line-height: 1;
	cursor: pointer;
	padding: 0.25rem 0.4rem;
}

.wa-nav {
	display: none;
	background: var(--wa-ink-2);
	padding: 0.5rem 1.75rem 1rem;
}

.wa-nav.is-open { display: block; }

.wa-nav a {
	display: block;
	color: var(--wa-muted);
	text-decoration: none;
	padding: 0.55rem 0;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);
	font-family: var(--wa-sans);
	font-size: 0.72rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
}

/* Visited/focus/active too (client round 2026-09-14: "blue color after clicking a menu item") —
 * with only :hover covered, Neve's a:visited / a:active accent painted the tapped link blue. */
.wa-nav a:visited { color: var(--wa-muted); }
.wa-nav a:hover,
.wa-nav a:focus,
.wa-nav a:focus-visible,
.wa-nav a:active { color: var(--wa-white); opacity: 1; }

/* ------------------------------------------------------------------ *
 * Buttons — outline / ink-filled, sharp corners, tracked uppercase
 * ------------------------------------------------------------------ */
.wa-btn,
.wedassist-app .wa-btn {
	display: inline-block;
	background: var(--wa-ink);
	color: var(--wa-white);
	border: 1px solid var(--wa-ink);
	border-radius: 0;
	padding: 0.7rem 1.6rem;
	font-family: var(--wa-sans);
	font-size: 0.78rem;
	font-weight: 400;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
	cursor: pointer;
}

.wa-btn:hover { background: #000; color: var(--wa-white); }

.wa-btn--green { background: var(--wa-ink); border-color: var(--wa-ink); }
.wa-btn--green:hover { background: #000; }

.wa-btn--ghost { background: transparent; color: var(--wa-ink); border: 1px solid var(--wa-ink); }
.wa-btn--ghost:hover { background: var(--wa-ink); color: var(--wa-white); }

/* ------------------------------------------------------------------ *
 * Content shell
 * ------------------------------------------------------------------ */
.wa-main {
	max-width: 1180px;
	margin: 0 auto;
	padding: 2.5rem 2rem 4rem;
}

.wa-page-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	margin-bottom: 1.5rem;
}

.wa-page-head h1 { margin: 0; font-size: 2.4rem; letter-spacing: 0.01em; }

/* Quick Access tiles (home + screen footers) */
.wa-tiles {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
	gap: 1rem;
	margin: 1.5rem 0;
}

.wa-tile {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 90px;
	border-radius: 2px;
	border: 1px solid var(--wa-line);
	background: var(--wa-ink);
	color: var(--wa-ivory);
	font-family: var(--wa-serif);
	font-style: normal;
	font-size: 1.5rem;
	letter-spacing: 0.02em;
	text-align: center;
	text-decoration: none;
	background-size: cover;
	background-position: center;
	box-shadow: inset 0 0 0 999px rgba(20, 19, 15, 0.5);
}

.wa-tile:hover { color: var(--wa-ivory); box-shadow: inset 0 0 0 999px rgba(20, 19, 15, 0.32); }

/* Couple card (home) */
.wa-couple {
	display: flex;
	align-items: center;
	gap: 1.5rem;
	margin: 1rem 0 2rem;
}

.wa-couple__photo {
	width: 180px;
	height: 180px;
	border-radius: 50%;
	object-fit: cover;
	background: var(--wa-muted);
	border: 1px solid var(--wa-line);
}

.wa-couple__names {
	font-family: var(--wa-serif);
	color: var(--wa-ink);
	font-size: 3rem;
	font-weight: 600;
	line-height: 1.02;
	margin: 0;
}

.wa-couple__date {
	font-family: var(--wa-serif-body);
	font-style: italic;
	color: var(--wa-muted);
	margin: 0.4rem 0 0;
	font-size: 1.2rem;
}

/* Wedding Details: round profile photo, left-aligned and indented to line up with the
   field column (matches the form-pane's 1.5rem inner padding). */
.wa-wd-photo { text-align: left; margin: 0 0 1.75rem; padding-left: 1.5rem; }
.wa-wd-photo .wa-couple__photo { display: inline-block; }

/* Section heading with a "View all" affordance (home strips). */
.wa-section-head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 1rem;
	margin: 1.75rem 0 0.75rem;
}
.wa-section-head h2 { margin: 0; }
.wa-section-head__more {
	font-family: var(--wa-sans);
	font-size: 0.7rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wa-gold-d);
	text-decoration: none;
}
.wa-section-head__more:hover { color: var(--wa-ink); }

/* Horizontal scroller strip (Up Next, Inspiration). */
.wa-strip {
	display: flex;
	gap: 1rem;
	overflow-x: auto;
	padding: 0.25rem 0.25rem 0.75rem;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: thin;
}

.wa-task-card {
	flex: 0 0 auto;
	width: 220px;
	min-height: 92px;
	display: flex;
	align-items: center;
	border-radius: 2px;
	border: 1px solid var(--wa-line);
	padding: 1rem 1.1rem;
	background: var(--wa-panel);
	color: var(--wa-text);
	font-family: var(--wa-serif-body);
	font-size: 1.15rem;
	line-height: 1.25;
	text-decoration: none;
}
.wa-task-card:hover { background: var(--wa-white); color: var(--wa-ink); }

.wa-strip--images .wa-insp-tile {
	flex: 0 0 auto;
	width: 150px;
	height: 150px;
	border-radius: 2px;
	background-size: cover;
	background-position: center;
	background-color: var(--wa-muted);
	display: block;
}

.wa-countdown {
	font-family: var(--wa-serif-body);
	font-style: italic;
	color: var(--wa-muted);
	text-align: center;
	margin: 0.5rem 0 1rem;
	font-size: 1.15rem;
}

/* ------------------------------------------------------------------ *
 * Footer chrome
 * ------------------------------------------------------------------ */
.wa-footer {
	background: var(--wa-ink);
	color: var(--wa-muted);
	border-top: 1px solid var(--wa-gold);
	text-align: center;
	font-family: var(--wa-serif-body);
	font-style: italic;
	font-size: 0.95rem;
	padding: 2rem 1.5rem 2.5rem;
	margin-top: 3rem;
}

.wa-footer p { margin: 0.4rem 0; }
.wa-footer__plogo {
	display: inline-block;
	background: var(--wa-ivory);
	border-radius: 6px;
	padding: 0.8rem 1.5rem;
	margin-bottom: 0.9rem;
}
.wa-footer__plogo img { display: block; max-height: 54px; max-width: 240px; width: auto; height: auto; }
.wa-footer__tag { font-style: normal; font-family: var(--wa-sans); font-size: 0.72rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--wa-gold-l); }
.wa-footer span,
.wa-footer strong,
.wa-footer b { color: var(--wa-gold-l); font-style: normal; }

/* ================================================================== *
 * Custom themed login page (page-templates/wedassist-login.php)
 * ================================================================== */

body.wedassist-login-page {
	background: var(--wa-ink);
	font-family: var(--wa-sans);
	margin: 0;
}

.wa-login {
	min-height: 100vh;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	padding: 2rem 1.25rem;
	box-sizing: border-box;
}

/* 2026 logo above the card (client round 2026-08-23). White artwork on the ink page
   background — inside the cream card it would disappear. */
.wa-login__logo-link {
	display: block;
	margin-bottom: 1.75rem;
	line-height: 0;
}
.wa-login__logo {
	display: block;
	height: 96px;
	width: auto;
	max-width: 100%;
}
@media (max-width: 480px) {
	.wa-login__logo { height: 72px; }
}

.wa-login__card {
	width: 100%;
	max-width: 380px;
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 2px;
	padding: 2.5rem 2rem;
	box-shadow: 0 18px 50px rgba(0, 0, 0, 0.4);
	text-align: center;
}

.wa-login__brand {
	font-family: var(--wa-serif);
	font-size: 1.5rem;
	letter-spacing: 0.4em;
	text-transform: uppercase;
	color: var(--wa-ink);
}

.wa-login__tagline {
	font-family: var(--wa-serif-body);
	font-style: italic;
	color: var(--wa-muted);
	margin: 0.35rem 0 1.5rem;
}

.wa-login__error {
	background: rgba(180, 146, 78, 0.12);
	color: var(--wa-gold-d);
	border-radius: 0;
	padding: 0.6rem 0.8rem;
	font-size: 0.9rem;
	margin: 0 0 1rem;
}

/* wp_login_form + signup form markup */
.wa-login__card #loginform,
.wa-login__card #wa-signup-form { text-align: left; }

.wa-login__card #loginform label,
.wa-login__card #wa-signup-form label {
	display: block;
	font-family: var(--wa-serif);
	color: var(--wa-ink);
	font-size: 0.95rem;
	margin-bottom: 0.2rem;
}

.wa-login__card #loginform input[type="text"],
.wa-login__card #loginform input[type="password"],
.wa-login__card #wa-signup-form input[type="text"],
.wa-login__card #wa-signup-form input[type="email"],
.wa-login__card #wa-signup-form input[type="password"] {
	width: 100%;
	box-sizing: border-box;
	background: var(--wa-white);
	border: 1px solid var(--wa-line);
	border-radius: 0;
	padding: 0.65rem 0.75rem;
	font-size: 1rem;
	color: var(--wa-text);
	margin-bottom: 1rem;
}

.wa-login__card #loginform input:focus,
.wa-login__card #wa-signup-form input:focus {
	outline: 0;
	border-color: var(--wa-gold);
}

/* signup helpers */
.wa-field-hint {
	display: block;
	font-size: 0.78rem;
	color: var(--wa-muted);
	margin: -0.6rem 0 1rem;
}
.wa-hp { position: absolute; left: -9999px; height: 0; overflow: hidden; }

.wa-login__card .login-remember {
	font-size: 0.85rem;
	color: var(--wa-text);
}
.wa-login__card .login-remember label {
	display: inline;
	font-family: var(--wa-sans);
}

.wa-login__card #wp-submit {
	width: 100%;
	background: var(--wa-ink);
	color: var(--wa-white);
	border: 1px solid var(--wa-ink);
	border-radius: 0;
	padding: 0.8rem 1rem;
	font-family: var(--wa-sans);
	font-size: 0.82rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	cursor: pointer;
	margin-top: 0.5rem;
}
.wa-login__card #wp-submit:hover { background: #000; }

.wa-login__links {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.5rem 1.25rem;
	margin-top: 1.4rem;
	font-size: 0.9rem;
}
.wa-login__links a { color: var(--wa-ink); text-decoration: none; }
.wa-login__links a:hover { color: var(--wa-gold-d); text-decoration: underline; }

/* Catch WP's own in-form links (e.g. Lost Password) so nothing renders default blue. */
.wa-login__card a { color: var(--wa-ink); }
.wa-login__card a:hover { color: var(--wa-gold-d); }

/* ================================================================== *
 * Responsive navigation (DECIDED 2026-06-16): hamburger drawer on
 * mobile; persistent horizontal nav bar on desktop.
 * ================================================================== */

/* shared link styling */
.wa-nav__link {
	display: block;
	color: var(--wa-muted);
	text-decoration: none;
	padding: 0.55rem 0;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);
	font-family: var(--wa-sans);
	font-size: 0.72rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
}
.wa-nav__link:visited { color: var(--wa-muted); }
.wa-nav__link:hover,
.wa-nav__link:focus,
.wa-nav__link:focus-visible,
.wa-nav__link:active { opacity: 1; color: var(--wa-white); }
.wa-nav__link.is-current,
.wa-nav__link.is-current:visited { color: var(--wa-white); font-weight: 500; }

/* Desktop (>= 900px): show the nav as a persistent bar, hide the hamburger. */
@media (min-width: 900px) {

	.wa-nav-toggle { display: none; }

	.wa-nav {
		display: flex;
		flex-wrap: wrap;
		align-items: center;
		gap: 0.25rem 1.4rem;
		padding: 0 1.75rem;
		border-top: 1px solid rgba(255, 255, 255, 0.08);
	}

	.wa-nav__link,
	.wa-nav a {
		border-bottom: 0;
		padding: 0.85rem 0;
		position: relative;
	}

	/* active underline accent */
	.wa-nav__link.is-current::after {
		content: "";
		position: absolute;
		left: 0;
		right: 0;
		bottom: 0;
		height: 2px;
		background: var(--wa-white);
	}

	/* push log-out to the right edge of the bar */
	.wa-nav__link--logout { margin-left: auto; }

	/* Weddings (planner only) belongs with Log out, not with the wedding screens —
	   it acts on the ACCOUNT, not on the wedding you are in. It therefore opens the
	   right-hand group and takes the auto margin, and Log out drops back to a normal
	   gap so the two sit together at the right edge. Log out keeps the auto margin on
	   its own for a couple, who never sees a Weddings link. */
	.wa-nav__link--weddings { margin-left: auto; }
	.wa-nav__link--weddings ~ .wa-nav__link--logout { margin-left: 0; }
}

/* ================================================================== *
 * Form screen shell — left section nav + form pane (Event Info,
 * Questionnaire, Vendor Information). Reusable across C2–C4 screens.
 * ================================================================== */

.wa-screen {
	display: grid;
	grid-template-columns: 1fr;
	gap: 1.5rem;
}

@media (min-width: 760px) {
	.wa-screen { grid-template-columns: 240px 1fr; }
}

.wa-section-nav {
	list-style: none;
	margin: 0;
	padding: 0;
	border-radius: 0;
	overflow: hidden;
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	align-self: start;
}

.wa-section-nav__item a {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
	padding: 0.85rem 1rem;
	color: var(--wa-text);
	font-family: var(--wa-serif-body);
	text-decoration: none;
	border-bottom: 1px solid var(--wa-line);
	font-size: 1.05rem;
}

.wa-section-nav__item:last-child a { border-bottom: 0; }
.wa-section-nav__item a:hover { background: var(--wa-ivory); color: var(--wa-ink); }
.wa-section-nav__item a:hover > span { color: var(--wa-ink); }
/* Same flex min-width:auto trap as the vendor rail: a long unbreakable label overflowed
   the row and the hover fill stopped mid-word (client round 2026-08-19). */
.wa-section-nav__item a { min-width: 0; }
.wa-section-nav__item a > span { min-width: 0; overflow-wrap: anywhere; }

.wa-section-nav__item.is-current a {
	background: var(--wa-ink);
	color: var(--wa-white);
	font-weight: 500;
}

/* progress checkmark on a section row / list item */
.wa-progress-check {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 22px;
	height: 22px;
	border-radius: 50%;
	border: 1px solid var(--wa-ink);
	flex: 0 0 auto;
	font-size: 0.8rem;
	line-height: 1;
}

.wa-progress-check.is-complete {
	background: var(--wa-ink);
	border-color: var(--wa-ink);
	color: var(--wa-white);
}

.wa-form-pane {
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 0;
	padding: 1.5rem;
}

.wa-form-pane h2 { margin-top: 0; }

/* Single-form screen (Wedding Details) — no section nav, so cap the width for readability. */
.wa-form-pane--single { max-width: 640px; }

/* Budget edit affordances (Set Budget + per-category), mirroring the app's tap-to-edit.
   A small Font Awesome pencil sits to the right of the section title. */
.wa-edit-link {
	margin-left: 0.45rem;
	color: var(--wa-gold-d);
	font-size: 0.8em;
	text-decoration: none;
	vertical-align: middle;
}
.wa-edit-link:hover,
.wa-edit-link:focus { color: var(--wa-ink); }
/* Close-without-saving X on the Budget editors (client note 2026-08-10). */
.wa-edit-close { font-size: 1em; }
.wa-edit-close:hover,
.wa-edit-close:focus { color: var(--wa-warn); }
.wa-form-embed--inline { margin-top: 0.75rem; max-width: 420px; }
.wa-form-embed--inline .gform_wrapper { margin: 0; }

/* $-prefixed amount inputs on the Budget editors: the $ is an adornment, never part
   of the stored value (see wedassist_web_budget_clean_amounts). */
.wa-amt { position: relative; display: block; }
.wa-amt .wa-amt-prefix {
	position: absolute;
	left: 0.25rem;
	top: 50%;
	transform: translateY(-50%);
	font-family: var(--wa-serif-body);
	font-size: 1.1rem;
	color: var(--wa-muted);
	pointer-events: none;
}
body.wedassist-app .gform_wrapper .wa-amt input[type="text"] { padding-left: 1.1rem; }

.wa-form-pane__head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 1rem;
	margin-bottom: 1rem;
}
.wa-form-pane__head h2 { margin-bottom: 0; }

/* Embedded Gravity Form (section editor). GF supplies its own field styling;
   these rules just keep it inside the pane and on-brand. */
.wa-form-embed { margin-top: 0.5rem; }
.wa-form-embed .gform_wrapper { margin: 0; }
.wa-form-embed .gform_wrapper .gform_title { display: none; }
.wa-form-embed .gform_wrapper .gform_footer input[type="submit"],
.wa-form-embed .gform_wrapper .gform_button {
	background: var(--wa-ink);
	color: var(--wa-white);
	border: 1px solid var(--wa-ink);
	border-radius: 0;
	padding: 0.7rem 1.6rem;
	font-family: var(--wa-sans);
	font-size: 0.78rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	cursor: pointer;
}
.wa-form-embed .gform_wrapper .gform_footer input[type="submit"]:hover,
.wa-form-embed .gform_wrapper .gform_button:hover { background: #000; }

/* Checklist items */
.wa-checklist { list-style: none; margin: 0; padding: 0; }
.wa-checklist__item {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	padding: 0.85rem 0;
	border-bottom: 1px solid var(--wa-line);
}
.wa-checklist__item:last-child { border-bottom: 0; }
.wa-checklist__title { font-family: var(--wa-serif-body); font-size: 1.15rem; color: var(--wa-text); text-decoration: none; flex: 1 1 auto; }
a.wa-checklist__title:hover { color: var(--wa-ink); text-decoration: underline; }
.wa-checklist__item.is-complete .wa-checklist__title {
	color: var(--wa-muted);
	text-decoration: line-through;
}
/* the completion circle is a tappable link */
a.wa-progress-check { text-decoration: none; cursor: pointer; transition: border-color .15s, background .15s; }
a.wa-progress-check:hover { border-color: var(--wa-ink); background: rgba(20, 19, 15, 0.06); }
/* tap-through chevron to the item's destination */
.wa-checklist__go {
	margin-left: auto;
	color: var(--wa-line);
	font-size: 1.4rem;
	line-height: 1;
	text-decoration: none;
	flex: 0 0 auto;
}
.wa-checklist__go:hover { color: var(--wa-gold-d); }

/* Checklist header: title + add (fa-plus-circle) action. */
.wa-page-head--actions { display: flex; align-items: center; justify-content: flex-start; gap: 0.6rem; }
.wa-add-link {
	color: var(--wa-gold-d);
	font-size: 1.5rem;
	line-height: 1;
	text-decoration: none;
	display: inline-flex;
}
.wa-add-link:hover,
.wa-add-link:focus { color: var(--wa-ink); }
button.wa-add-link { background: none; border: 0; padding: 0; cursor: pointer; }

/* Checklist period nav — image cards (same art as the app), one per countdown bucket. */
.wa-period-nav { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.6rem; align-self: start; }
.wa-period-card {
	position: relative;
	display: block;
	min-height: 72px;
	border-radius: 2px;
	overflow: hidden;
	background-size: cover;
	background-position: center;
	background-color: var(--wa-ink);
	text-decoration: none;
	box-shadow: inset 0 0 0 999px rgba(20, 19, 15, 0.28);
}
/* The period name is baked into the artwork, so no text label — just the dynamic count as a
   small legible badge in the corner. */
.wa-period-card__label {
	position: absolute;
	left: 14px;
	top: 12px;
	max-width: 70%;
	font-family: var(--wa-serif);
	font-size: 1.15rem;
	font-weight: 600;
	line-height: 1.1;
	color: #fff;
	text-shadow: 0 1px 6px rgba(20, 19, 15, 0.6);
}
.wa-period-card__count {
	position: absolute;
	right: 0.5rem;
	bottom: 0.5rem;
	padding: 0.1rem 0.45rem;
	border-radius: 999px;
	background: rgba(20, 19, 15, 0.6);
	color: var(--wa-white);
	font-size: 0.75rem;
	line-height: 1.4;
}
.wa-period-card.is-current { outline: 2px solid var(--wa-gold); outline-offset: 0; }

/* ================================================================== *
 * Our People — card grid
 * ================================================================== */
.wa-count { font-size: 0.9rem; color: var(--wa-muted); }

.wa-people {
	display: grid;
	grid-template-columns: repeat( auto-fill, minmax( 240px, 1fr ) );
	gap: 1rem;
}

.wa-person {
	display: flex;
	align-items: center;
	gap: 0.85rem;
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 0;
	padding: 0.9rem 1rem;
}

.wa-person__avatar {
	flex: 0 0 auto;
	width: 44px;
	height: 44px;
	border-radius: 50%;
	background: var(--wa-ink);
	color: var(--wa-white);
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--wa-serif);
	font-size: 1.3rem;
}

.wa-person__body { display: flex; flex-direction: column; min-width: 0; }
.wa-person__name { font-family: var(--wa-serif-body); font-size: 1.15rem; color: var(--wa-ink); }
.wa-person__relation { font-size: 0.85rem; color: var(--wa-muted); }
.wa-person__role {
	align-self: flex-start;
	margin-top: 0.25rem;
	font-size: 0.68rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wa-gold-d);
	background: rgba( 180, 146, 78, 0.14 );
	border-radius: 0;
	padding: 0.12rem 0.5rem;
}

/* Our People: clickable cards (edit), search box, inline add/edit form. */
a.wa-person { text-decoration: none; color: inherit; transition: border-color 0.12s ease, transform 0.12s ease; }
a.wa-person:hover,
a.wa-person:focus { border-color: var(--wa-ink); transform: translateY( -1px ); }

.wa-people-search {
	display: block;
	width: 100%;
	max-width: 360px;
	margin: 0 0 1.25rem;
	padding: 0.6rem 0.8rem;
	border: 1px solid var(--wa-line);
	border-radius: 0;
	font-size: 0.95rem;
	background: var(--wa-panel);
}
.wa-people-search:focus { outline: none; border-color: var(--wa-gold); }
.wa-people-empty { color: var(--wa-muted); }

.wa-person-form { display: flex; flex-direction: column; gap: 0.9rem; max-width: 420px; }
.wa-field { display: flex; flex-direction: column; gap: 0.25rem; }
.wa-field__label { font-family: var(--wa-serif); color: var(--wa-ink); font-size: 1rem; }
.wa-person-form input[type="text"],
.wa-person-form select {
	padding: 0.55rem 0.7rem;
	border: 1px solid var(--wa-line);
	border-radius: 0;
	font-size: 1rem;
	background: var(--wa-white);
}
.wa-person-form input[type="text"]:focus,
.wa-person-form select:focus { outline: none; border-color: var(--wa-gold); }
.wa-person-form .wa-btn { align-self: flex-start; }

/* CSV import/export toolbar (hidden until the file icon toggles it — class display must yield to [hidden]) */
.wa-people-tools[hidden] { display: none; }
.wa-people-tools {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.75rem 1rem;
	margin: 0 0 1.25rem;
	padding: 0.85rem 1rem;
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 0;
}
.wa-people-upload {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem 0.85rem;
}
.wa-people-mode { display: inline-flex; gap: 0.75rem; font-size: 0.9rem; color: var(--wa-text); }
.wa-people-mode label { display: inline-flex; align-items: center; gap: 0.25rem; }

.wa-notice {
	border-radius: 0;
	padding: 0.6rem 0.9rem;
	margin: 0 0 1rem;
	font-size: 0.95rem;
}
.wa-notice--ok  { background: var(--wa-em-bg); color: var(--wa-em); }
.wa-notice--err { background: rgba( 155, 74, 56, 0.1 ); color: var(--wa-warn); }

/* ================================================================== *
 * Budget — summary (set budget + paid donut + allocated/remaining bar)
 * and category line items.
 * ================================================================== */
.wa-budget-summary {
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 0;
	padding: 1.5rem;
	margin-bottom: 1.5rem;
}

.wa-budget-summary__top {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	flex-wrap: wrap;
}

.wa-budget-set__label { display: block; font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--wa-ink); }
.wa-budget-set__value {
	display: block;
	font-family: var(--wa-serif);
	font-weight: 600;
	font-size: 3rem;
	color: var(--wa-ink);
	line-height: 1.1;
}

/* CSS conic-gradient donut: ink = paid fraction, line = remaining. */
.wa-donut {
	width: 140px;
	height: 140px;
	border-radius: 50%;
	flex: 0 0 auto;
	background: conic-gradient( var(--wa-ink) calc( var(--frac) * 360deg ), var(--wa-line) 0 );
	display: flex;
	align-items: center;
	justify-content: center;
}
.wa-donut__hole {
	width: 104px;
	height: 104px;
	border-radius: 50%;
	background: var(--wa-panel);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
}
.wa-donut__label { font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--wa-muted); }
.wa-donut__value { font-family: var(--wa-serif); font-weight: 600; font-size: 1.5rem; color: var(--wa-ink); }

.wa-budget-bar-head {
	margin: 1.25rem 0 0.4rem;
	font-size: 0.72rem;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--wa-muted);
	font-family: var(--wa-sans);
}

.wa-budget-bar {
	height: 8px;
	border-radius: 0;
	background: var(--wa-line);
	overflow: hidden;
}
.wa-budget-bar--sm { height: 6px; }
.wa-budget-bar__fill {
	height: 100%;
	background: var(--wa-ink);
	border-radius: inherit;
}
.wa-budget-summary.is-over .wa-budget-bar__fill { background: var(--wa-warn); }
.wa-budget-summary.is-over .wa-budget-set__value { color: var(--wa-warn); }

.wa-budget-bar-value {
	margin-top: 0.5rem;
	font-family: var(--wa-serif);
	font-size: 1.35rem;
	color: var(--wa-ink);
}

/* line items */
.wa-budget-list { display: flex; flex-direction: column; gap: 0.85rem; }
.wa-budget-item {
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 0;
	padding: 1rem 1.1rem;
}
.wa-budget-item__row {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 1rem;
	margin-bottom: 0.6rem;
}
.wa-budget-item__title { font-family: var(--wa-serif-body); font-size: 1.15rem; color: var(--wa-text); }
.wa-budget-item__amount { font-family: var(--wa-serif); font-size: 1.35rem; color: var(--wa-ink); }
.wa-budget-item__label { margin-top: 0.5rem; font-size: 0.85rem; color: var(--wa-muted); }

/* ================================================================== *
 * Timeline — chronological event list (time chip + title + vendor)
 * ================================================================== */
.wa-timeline { list-style: none; margin: 0; padding: 0; }

.wa-timeline__item {
	display: flex;
	align-items: center;
	gap: 1.25rem;
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 0;
	padding: 1rem 1.25rem;
	margin-bottom: 0.75rem;
}

.wa-timeline__time {
	flex: 0 0 auto;
	min-width: 92px;
	text-align: center;
	font-family: var(--wa-sans);
	font-weight: 500;
	font-size: 0.72rem;
	letter-spacing: 0.06em;
	color: var(--wa-ink);
	background: #efe7d6;
	border-radius: 0;
	padding: 0.55rem 0.75rem;
}

.wa-timeline__body { display: flex; flex-direction: column; min-width: 0; }
.wa-timeline__title { font-family: var(--wa-serif-body); font-size: 1.2rem; color: var(--wa-text); }
.wa-timeline__sub { font-size: 0.8rem; letter-spacing: 0.02em; color: var(--wa-muted); margin-top: 0.15rem; }

/* Tap-to-edit: the whole item body is a link (opens the event's form). Keep the look flat. */
.wa-timeline__link { display: flex; flex-direction: column; text-decoration: none; color: inherit; }
.wa-timeline__link:hover .wa-timeline__title,
.wa-timeline__link:focus .wa-timeline__title { color: var(--wa-ink); }

/* Delete (custom items only) — trash icon pushed to the right edge of the row. */
.wa-timeline__delete {
	margin-left: auto;
	align-self: center;
	flex: 0 0 auto;
	color: var(--wa-muted);
	text-decoration: none;
	font-size: 0.95rem;
	padding: 0.25rem 0.4rem;
}
.wa-timeline__delete:hover,
.wa-timeline__delete:focus { color: var(--wa-warn); }

/* ================================================================== *
 * Inspiration gallery — category filter pills + image/color grid
 * ================================================================== */
.wa-inspo-filter {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin-bottom: 1.25rem;
}

.wa-inspo-pill {
	font-family: var(--wa-serif-body);
	font-size: 0.95rem;
	color: var(--wa-text);
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 999px;
	padding: 0.4rem 1rem;
	text-decoration: none;
}
.wa-inspo-pill:hover { border-color: var(--wa-gold); color: var(--wa-gold-d); }
.wa-inspo-pill.is-on {
	background: var(--wa-ink);
	border-color: var(--wa-ink);
	color: var(--wa-white);
}

/* Masonry: column flow so each image keeps its natural height (column count adapts to width). */
.wa-inspo-grid {
	columns: 180px;
	column-gap: 0.75rem;
}
.wa-inspo-grid > * { break-inside: avoid; margin-bottom: 0.75rem; }

.wa-inspo-tile {
	aspect-ratio: 1 / 1;
	border-radius: 2px;
	background-size: cover;
	background-position: center;
	background-color: var(--wa-muted);
}
.wa-inspo-tile--color { border: 1px solid var(--wa-line); }

/* Image tile wrapper + delete (X) affordance, top-right. */
.wa-inspo-tile-wrap { position: relative; }
.wa-inspo-tile-wrap .wa-inspo-tile { width: 100%; height: 100%; }
.wa-inspo-img { width: 100%; display: block; border-radius: 2px; background: var(--wa-muted); }
.wa-inspo-del {
	position: absolute;
	top: 6px;
	right: 6px;
	width: 26px;
	height: 26px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	background: rgba( 20, 19, 15, 0.6 );
	color: #fff;
	text-decoration: none;
	font-size: 20px;
	line-height: 1;
	opacity: 0.85;
	transition: background 0.12s ease, opacity 0.12s ease;
}
.wa-inspo-del:hover,
.wa-inspo-del:focus { background: var(--wa-warn); color: #fff; opacity: 1; }

/* ================================================================== *
 * Vendor Info — left vendor-type nav (circular icons) + detail pane
 * ================================================================== */
.wa-vendor-nav {
	list-style: none;
	margin: 0;
	padding: 0;
	align-self: start;
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
}

.wa-vendor-nav__item a {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	padding: 0.5rem 0.6rem;
	border-radius: 999px;
	border: 1.5px solid transparent;
	color: var(--wa-text);
	text-decoration: none;
}
/* Keep ink on hover — Neve's global a:hover paints links blue otherwise (client round 2026-08-15). */
.wa-vendor-nav__item a:hover { background: var(--wa-panel); color: var(--wa-text); }
.wa-vendor-nav__item a:hover .wa-vendor-nav__label { color: var(--wa-text); }
/* The label is a flex item, so its default min-width:auto refuses to shrink below the
   longest unbreakable run — "Planner/Coordinator" then spilled past the 240px rail and the
   hover pill stopped mid-word (client round 2026-08-19). Let it shrink AND break, so the
   pill always covers the whole label.
   `anywhere` broke that same label mid-word ("Planner/Coordi | nator", client round
   2026-08-23) because Chrome offers no break after "/". wedassist_web_nav_label() now
   injects a <wbr> after each slash, so `break-word` is enough: it wraps at the slash and
   only falls back to a mid-word break for a single run that genuinely cannot fit. */
.wa-vendor-nav__item a { min-width: 0; }
.wa-vendor-nav__label { min-width: 0; overflow-wrap: break-word; }
.wa-vendor-nav__item.is-current a {
	border-color: var(--wa-gold);
	background: var(--wa-panel);
	font-weight: 500;
}

.wa-vendor-nav__icon {
	flex: 0 0 auto;
	width: 53px;   /* +25% (Phase 2 sheet) */
	height: 53px;
	border-radius: 50%;
	/* The source art bakes a pale ring around the photo circle; zooming past 100%
	   crops it out (same trick as the checklist tile corners). */
	background-size: 126%;
	background-position: center;
	background-color: var(--wa-panel);
}
.wa-vendor-nav__label { font-family: var(--wa-serif-body); font-size: 1.2rem; }

/* Read-only detail list (label + value) — Poppins caps label over serif value */
.wa-detail-list { margin: 0; }
.wa-detail {
	padding: 0.6rem 0 0.7rem;
	border-bottom: 1px solid var(--wa-line);
}
.wa-detail__label {
	font-family: var(--wa-sans);
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--wa-ink);
	/* Eyebrow headings sat at 0.6–0.7rem; the whole family reads at 0.8rem now
	   (client note 2026-08-10, "enlarge category font size ... used throughout"). */
	font-size: 0.8rem;
	margin: 0 0 0.25rem;
}
.wa-detail__value { margin: 0; font-family: var(--wa-serif-body); color: var(--wa-text); font-size: 1.15rem; }
.wa-detail__empty { color: var(--wa-muted); }
.wa-vendor-empty { color: var(--wa-muted); }

/* Event Info extras: subhead, per-section check in the nav, complete pill */
.wa-subhead { margin: 0.25rem 0 0; font-family: var(--wa-serif-body); font-style: italic; color: var(--wa-muted); font-size: 1rem; }
.wa-status-pill {
	font-family: var(--wa-sans);
	font-size: 0.68rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wa-white);
	background: var(--wa-ink);
	border-radius: 999px;
	padding: 0.18rem 0.65rem;
	vertical-align: middle;
	margin-left: 0.5rem;
}

/* ================================================================== *
 * Gravity Forms — styled to match the luxe look (serif labels, hairline
 * underlined fields, ink submit). Scoped to the app body class.
 * ================================================================== */

.wedassist-app .gform_wrapper .gfield_label {
	font-family: var(--wa-serif);
	color: var(--wa-ink);
	font-weight: 600;
	font-size: 1.1rem;
}

/* Cormorant runs small for its point size, so 1.1rem of it reads like ~14px of the sans — too
 * quiet for the labels that head a whole group of entries. Enlarged on the Event Info section
 * headings ("Entrance Order", "Decor Items") and inside the Edit Entry modal only; the signup,
 * login and questionnaire forms keep the smaller label (client note 2026-08-05). */
.wedassist-app .gform_wrapper .gfield--type-form > .gfield_label,
.gpnf-modal .gform_wrapper .gfield_label {
	font-size: 1.35rem;
}

/* body.-prefixed on purpose: Elementor's kit stylesheet (post-6.css) styles bare
   inputs as 30px gold pills at the same specificity as a .wedassist-app rule, and
   whichever loads later wins — the pages were inconsistent (client note 2026-08-10,
   Budget). body.wedassist-app out-specifies the kit no matter the load order. */
body.wedassist-app .gform_wrapper input[type="text"],
body.wedassist-app .gform_wrapper input[type="email"],
body.wedassist-app .gform_wrapper input[type="tel"],
body.wedassist-app .gform_wrapper input[type="number"],
body.wedassist-app .gform_wrapper input[type="date"],
body.wedassist-app .gform_wrapper input[type="time"],
body.wedassist-app .gform_wrapper textarea,
body.wedassist-app .gform_wrapper select {
	width: 100%;
	background: transparent;
	border: 0;
	border-bottom: 1px solid var(--wa-line);
	border-radius: 0;
	padding: 0.5rem 0.25rem;
	font-family: var(--wa-serif-body);
	font-size: 1.1rem;
	color: var(--wa-text);
	box-shadow: none;
}

body.wedassist-app .gform_wrapper input:focus,
body.wedassist-app .gform_wrapper textarea:focus,
body.wedassist-app .gform_wrapper select:focus {
	outline: 0;
	border-bottom-color: var(--wa-gold);
}

body.wedassist-app .gform_wrapper textarea {
	border: 1px solid var(--wa-line);
	border-radius: 0;
	/* Client round 2026-08-15: the notes boxes at the bottom of each questionnaire form
	   were far too tall — cap them at roughly 40% of the GF default. Still resizable. */
	height: 6.5rem;
	min-height: 4rem;
	resize: vertical;
}
/* …but that rule is only (0,2,2), and GF ships taller ones that outrank it — the classic
   theme's `.gform_wrapper.gravity-theme textarea.large` (0,3,1) and the framework theme's
   `… .gfield .ginput_container textarea` (0,4,1). So the conditional "Please describe" boxes
   and "Additional ceremony notes" stayed at full height (client round 2026-08-19). Same
   numbers, deep enough to land on every questionnaire textarea; the doubled body class buys
   the specificity. NO !important — the drag handle writes an INLINE height, and an important
   declaration here would beat it and kill resizing. */
body.wedassist-app.wedassist-app .gform_wrapper .gfield .ginput_container textarea,
body.wedassist-app.wedassist-app .gform_wrapper .gfield .ginput_container textarea.small,
body.wedassist-app.wedassist-app .gform_wrapper .gfield .ginput_container textarea.medium,
body.wedassist-app.wedassist-app .gform_wrapper .gfield .ginput_container textarea.large,
body.wedassist-app.wedassist-app .gform_wrapper .gfield textarea,
body.wedassist-app.wedassist-app .gform_wrapper .gfield textarea.small,
body.wedassist-app.wedassist-app .gform_wrapper .gfield textarea.medium,
body.wedassist-app.wedassist-app .gform_wrapper .gfield textarea.large {
	height: 6.5rem;
	min-height: 4rem;
	max-height: none;
	resize: vertical;
}

/* GF's "Select All" choice toggle (Photography questionnaire) — removed per client round
   2026-08-15. The field setting lives in form DATA, so the web hides it here instead. */
body.wedassist-app .gform_wrapper .gfield_choice_all_toggle { display: none !important; }

.wedassist-app .gform_wrapper .gform_footer input[type="submit"],
.wedassist-app .gform_wrapper .gform_footer button {
	background: var(--wa-ink);
	color: var(--wa-white);
	border: 1px solid var(--wa-ink);
	border-radius: 0;
	padding: 0.8rem 2rem;
	font-family: var(--wa-sans);
	font-size: 0.8rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	cursor: pointer;
}

.wedassist-app .gform_wrapper .gform_footer input[type="submit"]:hover { background: #000; }

/* --- Vendor picker (GeoDirectory) --- */
.wa-vendor-picker {
	margin-bottom: 1.5rem;
	padding-bottom: 1.25rem;
	border-bottom: 1px solid var(--wa-line);
}
.wa-vendor-picker__label {
	display: block;
	font-family: var(--wa-serif);
	color: var(--wa-ink);
	font-weight: 600;
	margin-bottom: .4rem;
}
.wa-vendor-picker__row {
	display: flex;
	gap: .6rem;
	flex-wrap: wrap;
	align-items: center;
}
.wa-vendor-picker__select {
	flex: 1 1 18rem;
	min-width: 12rem;
	padding: .6rem;
	border: 1px solid var(--wa-line);
	border-radius: 0;
	background: var(--wa-white);
	font-size: 1rem;
}
.wa-vendor-picker__add {
	display: inline-block;
	margin-top: .75rem;
}
.wa-vendor-picker__add .fa-plus-circle { margin-right: .35rem; }

.wa-vendor-card {
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	border-radius: 2px;
	padding: 1rem 1.15rem;
	margin-bottom: 1.25rem;
}
.wa-vendor-card__name {
	margin: 0 0 .6rem;
	font-family: var(--wa-serif);
	color: var(--wa-ink);
	font-size: 1.3rem;
}
.wa-vendor-card__meta { margin: 0; }
.wa-vendor-card__row {
	display: flex;
	gap: .75rem;
	padding: .25rem 0;
}
.wa-vendor-card__row dt {
	flex: 0 0 6rem;
	font-family: var(--wa-sans);
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	font-size: 0.7rem;
	color: var(--wa-gold-d);
	align-self: center;
}
.wa-vendor-card__row dd { margin: 0; font-family: var(--wa-serif-body); font-size: 1.1rem; }

/* ================================================================== *
 * Luxury-mockup components (page-by-page pass, v0.36.0)
 * Shared vocabulary from wedassist-luxury-redesign: page rules, section
 * labels, qa tiles, up-next rows, inspo panel, panels, entrance rows,
 * vendor blocks, questionnaire rows, event-file page, home hero.
 * ================================================================== */

/* ---- page head: title + italic hint + ink rule ---- */
.wa-hr {
	height: 1px;
	background: var(--wa-ink);
	opacity: 0.55;
	border: 0;
	margin: 1.25rem 0 2.1rem;
}
.wa-page-hint {
	font-family: var(--wa-serif-body);
	font-style: italic;
	color: var(--wa-muted);
	font-size: 1rem;
	margin: 0.3rem 0 0;
}

/* ---- section label: small caps Cormorant + short bar ---- */
.wa-shead { margin-bottom: 1.4rem; }
.wa-shead__t {
	font-family: var(--wa-serif);
	font-size: 0.95rem;
	letter-spacing: 0.4em;
	color: var(--wa-ink);
	text-transform: uppercase;
}
.wa-shead__bar { width: 46px; height: 1px; background: var(--wa-ink); margin-top: 0.75rem; }
.wa-shead--center { text-align: center; }
.wa-shead--center .wa-shead__bar { margin-left: auto; margin-right: auto; }

/* ---- quick-access tiles (icon + serif label) ---- */
.wa-qa {
	display: block;
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	padding: 2.1rem 1.25rem;
	text-align: center;
	text-decoration: none;
	transition: border-color 0.2s, background 0.2s;
}
.wa-qa:hover { border-color: var(--wa-ink); background: var(--wa-white); }
.wa-qa i { font-size: 26px; color: var(--wa-ink); }
/* Image variant of a quick-access icon (lower-strip 'icon_img'). Boxed at the glyph's
   26px em so the artwork lands at the same optical size as the Tabler glyphs beside it;
   the PNG is already the #14130f ink on transparent, so no filter is needed. */
.wa-qa .wa-qa__img { width: 26px; height: 26px; display: inline-block; vertical-align: middle; }
.wa-qa__t { font-family: var(--wa-serif-body); font-size: 1.2rem; color: var(--wa-text); margin-top: 0.75rem; }
.wa-qa__sub { font-size: 0.62rem; letter-spacing: 0.16em; color: var(--wa-muted); text-transform: uppercase; margin-top: 0.35rem; }

.wa-qa-2x2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 18px; margin-bottom: 3rem; }
.wa-qa-stack { display: flex; flex-direction: column; gap: 16px; }

/* ---- up-next task rows ---- */
.wa-up__row {
	display: flex;
	align-items: center;
	gap: 1.3rem;
	padding: 1.05rem 0.25rem;
	border-bottom: 1px solid var(--wa-line);
}
.wa-up__row:last-child { border-bottom: 0; }
.wa-up__cb {
	width: 22px;
	height: 22px;
	border: 1px solid var(--wa-ink);
	border-radius: 50%;
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: transparent;
	font-size: 12px;
	text-decoration: none;
	transition: 0.15s;
}
.wa-up__cb:hover { background: rgba(20, 19, 15, 0.08); color: transparent; }
.wa-up__row.is-done .wa-up__cb { background: var(--wa-ink); border-color: var(--wa-ink); color: var(--wa-white); }
.wa-up__t { font-family: var(--wa-serif-body); font-size: 1.2rem; color: var(--wa-text); flex: 1; text-decoration: none; }
a.wa-up__t:hover { color: var(--wa-ink); }
.wa-up__row.is-done .wa-up__t { color: var(--wa-muted); text-decoration: line-through; }
.wa-up__go { color: var(--wa-ink); text-decoration: none; font-size: 18px; margin-left: auto; }
.wa-up__row--viewall .wa-up__t { color: var(--wa-ink); font-style: italic; }

/* ---- 3-col lower strip (Quick Access / Up Next / Inspiration) ---- */
.wa-lower3 {
	display: grid;
	grid-template-columns: 1fr 1.3fr 1.2fr;
	gap: 44px;
	align-items: start;
	margin-top: 3.5rem;
}
@media (max-width: 960px) { .wa-lower3 { grid-template-columns: 1fr; } }

/* ---- inspiration panel (collage + veil + pinterest CTA) ---- */
.wa-inspo-panel {
	position: relative;
	border: 1px solid var(--wa-line);
	overflow: hidden;
	min-height: 420px;
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--wa-panel);
	padding: 2.75rem;
}
.wa-inspo-panel--tall { min-height: 560px; }
.wa-inspo-panel--full { min-height: 640px; padding: 3.75rem; }
.wa-inspo-panel__collage {
	position: absolute;
	inset: 0;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	grid-auto-rows: 1fr;
	gap: 6px;
	opacity: 0.3;
}
.wa-inspo-panel--full .wa-inspo-panel__collage { grid-template-columns: repeat(6, 1fr); grid-auto-rows: 200px; opacity: 0.34; }
.wa-inspo-panel__collage img { width: 100%; height: 100%; object-fit: cover; }
.wa-inspo-panel__veil {
	position: absolute;
	inset: 0;
	background: radial-gradient(circle at center, rgba(248, 244, 236, 0.7), rgba(248, 244, 236, 0.93));
}
.wa-inspo-panel__content { position: relative; text-align: center; width: 100%; }
.wa-inspo-mark {
	font-family: var(--wa-serif);
	font-style: italic;
	font-size: 30px;
	color: #c0392b;
	font-weight: 600;
	margin-bottom: 8px;
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
}
.wa-inspo-panel--full .wa-inspo-mark { font-size: 52px; margin-bottom: 12px; }
.wa-inspo-panel__sub {
	font-family: var(--wa-serif-body);
	font-style: italic;
	color: var(--wa-muted);
	font-size: 1rem;
	margin-bottom: 1.9rem;
}
.wa-inspo-panel--full .wa-inspo-panel__sub { font-size: 1.15rem; max-width: 520px; margin-left: auto; margin-right: auto; }
/* Inspiration page: connected-state button menu (Pinterest / Upload / Palette side by side) */
.wa-inspo-menu { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 1.75rem; }
.wa-inspo-menu .wa-csv-btn .ti-brand-pinterest { color: #c0392b; }
.wa-inspo-menu .wa-csv-btn[aria-expanded="true"] { background: var(--wa-ink); color: var(--wa-ivory); }
.wa-inspo-menu .wa-csv-btn[aria-expanded="true"] .ti-brand-pinterest { color: var(--wa-ivory); }
.wa-pin-manage { margin-bottom: 1.75rem; }
.wa-pin-manage .wa-bar { margin-bottom: 0; }

/* connected-board takeover: nothing but pins, edge-to-edge masonry */
.wa-inspo-panel--pins { display: block; height: 420px; padding: 10px; }
.wa-inspo-panel--tall.wa-inspo-panel--pins { height: 560px; }
.wa-inspo-panel--full.wa-inspo-panel--pins { height: 640px; }
.wa-inspo-masonry { columns: 3; column-gap: 10px; }
.wa-inspo-panel--full .wa-inspo-masonry { columns: 5; }
.wa-inspo-masonry__tile { display: block; break-inside: avoid; margin-bottom: 10px; }
.wa-inspo-masonry__tile img { width: 100%; display: block; border-radius: 3px; }

.wa-pin-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	width: 100%;
	max-width: 380px;
	margin: 0 auto 16px;
	padding: 1.05rem 1.4rem;
	border-radius: 40px;
	font-family: var(--wa-serif-body);
	font-size: 1.2rem;
	cursor: pointer;
	background: var(--wa-white);
	text-decoration: none;
	transition: 0.2s;
}
.wa-pin-btn:last-child { margin-bottom: 0; }
.wa-pin-btn--connect { border: 1.5px solid #c0392b; color: #c0392b; }
.wa-pin-btn--connect:hover { background: #c0392b; color: #fff; }
.wa-pin-btn--upload { border: 1.5px solid var(--wa-ink); color: var(--wa-ink); }
.wa-pin-btn--upload:hover { background: var(--wa-ink); color: var(--wa-white); }
.wa-pin-btn--palette { border: 1.5px solid var(--wa-gold-d); color: var(--wa-gold-d); }
.wa-pin-btn--palette:hover { background: var(--wa-gold-d); color: var(--wa-white); }
.wa-pin-soon {
	display: none;
	font-family: var(--wa-serif-body);
	font-style: italic;
	color: var(--wa-muted);
	font-size: 0.95rem;
	margin: -6px auto 14px;
	max-width: 380px;
}
.wa-pin-soon.is-open { display: block; }

/* ---- content panel + head (Cormorant caps title, eyebrow, EDIT button) ---- */
.wa-panel {
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	padding: 2.4rem 2.6rem;
}
.wa-panel__head {
	display: flex;
	justify-content: space-between;
	align-items: flex-start;
	gap: 1rem;
}
.wa-panel__title {
	font-family: var(--wa-serif);
	font-size: 1.9rem;
	letter-spacing: 0.09em;
	color: var(--wa-ink);
	font-weight: 600;
	text-transform: uppercase;
	margin: 0;
}
.wa-panel__eyebrow {
	font-family: var(--wa-sans);
	font-size: 0.66rem;
	letter-spacing: 0.32em;
	color: var(--wa-ink);
	text-transform: uppercase;
	margin-top: 0.4rem;
}
.wa-panel__rule { height: 1px; background: var(--wa-line); border: 0; margin: 1.5rem 0; }
.wa-btn-edit {
	display: inline-block;
	border: 1px solid var(--wa-ink);
	background: none;
	color: var(--wa-ink);
	font-family: var(--wa-sans);
	font-size: 0.66rem;
	letter-spacing: 0.18em;
	padding: 0.6rem 1.4rem;
	text-transform: uppercase;
	text-decoration: none;
	cursor: pointer;
	white-space: nowrap;
	transition: 0.15s;
}
.wa-btn-edit:hover { background: var(--wa-ink); color: var(--wa-white); }

/* ---- entrance rows (Processional / Reception Entrances) ---- */
/* The row's height was never set by its padding (1rem) but by the leading on the big serif
 * numeral: 2.2rem at the body's 1.7 line-height is a 60px line box for a 35px glyph, and with
 * `align-items: baseline` that dead space lands under every row. Result was a 103px row holding
 * 53px of content, which read as "entries spaced apart" rather than a list (client note
 * 2026-08-05). Tightening the two leadings does the work; the padding stays generous enough to
 * keep the hairline rules from crowding the names. */
.wa-ent {
	display: flex;
	align-items: baseline;
	gap: 1.4rem;
	padding: 0.55rem 0;
	border-bottom: 1px solid var(--wa-line-2);
}
.wa-ent:last-child { border-bottom: 0; }
.wa-ent__lab { font-family: var(--wa-sans); font-size: 0.75rem; letter-spacing: 0.2em; color: var(--wa-ink); text-transform: uppercase; width: 80px; flex: none; }
.wa-ent__num { font-family: var(--wa-serif); font-size: 2.2rem; color: var(--wa-ink); width: 50px; flex: none; }
/* Scoped to .wa-ent so the shared __num/__nm rules keep their airier leading where they are used
 * as headings (seating rows, portrait combos, table cards). */
.wa-ent > .wa-ent__num { line-height: 1.1; }
.wa-ent .wa-ent__nm { line-height: 1.25; }
.wa-ent__people { flex: 1; display: flex; gap: 3rem; flex-wrap: wrap; }
.wa-ent__nm { font-family: var(--wa-serif-body); font-size: 1.25rem; color: var(--wa-text); }
.wa-ent__ro { font-family: var(--wa-sans); font-size: 0.6rem; letter-spacing: 0.2em; color: var(--wa-muted); text-transform: uppercase; margin-top: 3px; }

/* ---- ceremony seating: rows of the aisle, Left against Right ---- */
.wa-seating__head,
.wa-seating__row {
	display: grid;
	grid-template-columns: 112px 1fr 1fr;
	gap: 1.4rem;
	align-items: baseline;
}
.wa-seating__head { padding-bottom: 0.4rem; }
.wa-seating__sidelab {
	font-family: var(--wa-sans);
	font-size: 0.75rem;
	letter-spacing: 0.2em;
	color: var(--wa-muted);
	text-transform: uppercase;
}
.wa-seating__row { padding: 1rem 0; border-bottom: 1px solid var(--wa-line-2); }
.wa-seating__row:last-child { border-bottom: 0; }
.wa-seating__num { display: flex; align-items: baseline; gap: 0.5rem; }
.wa-seating__num .wa-ent__lab { width: auto; }
.wa-seating__num .wa-ent__num { width: auto; font-size: 1.6rem; }
.wa-seating__side > div + div { margin-top: 0.7rem; }
@media (max-width: 760px) {
	.wa-seating__head { display: none; }
	.wa-seating__row { grid-template-columns: 1fr; gap: 0.6rem; }
}

/* ---- portrait shot list: combinations grouped by phase ---- */
.wa-combo__phase {
	font-family: var(--wa-sans);
	font-size: 0.8rem;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: var(--wa-muted);
	margin: 1.8rem 0 0.4rem;
}
.wa-combo__phase:first-child { margin-top: 0.4rem; }
.wa-combo { padding: 0.6rem 0; border-bottom: 1px solid var(--wa-line-2); }
.wa-combo:last-child { border-bottom: 0; }
/* The "COMBINATION 1" eyebrow and numeral are gone (client 2026-08-05), so the name is no longer a
   trailing aside — it is the heading, and carries the weight the numeral used to. */
.wa-combo__head { margin-bottom: 0.25rem; }
.wa-combo__name {
	font-family: var(--wa-serif);
	font-size: 1.15rem;
	font-weight: 700;
	line-height: 1.25;
	color: var(--wa-ink);
}
/* Bold name over one comma-separated line of people (client note 2026-08-10) — the
   earlier flex-of-columns layout is gone with the markup that used it. Names sit in the
   lighter wash, matching the entrance-grid role labels (Phase 2 sheet, color example). */
.wa-combo__names {
	font-family: var(--wa-serif-body);
	font-size: 1.05rem;
	line-height: 1.5;
	color: var(--wa-muted);
}

/* ---- table breakdown ---- */
.wa-table { padding: 1.1rem 0; border-bottom: 1px solid var(--wa-line-2); }
.wa-table:last-child { border-bottom: 0; }
.wa-table__head { display: flex; align-items: baseline; gap: 0.6rem; }
.wa-table__head .wa-ent__lab { width: auto; }
.wa-table__head .wa-ent__num { width: auto; font-size: 1.9rem; }
.wa-table__meta,
.wa-table__meals {
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--wa-muted);
}
.wa-table__meals { margin: 0.2rem 0 0.6rem; }
.wa-table__guests { list-style: decimal; margin: 0; padding-left: 1.4rem; columns: 2; column-gap: 3rem; }
@media (max-width: 760px) { .wa-table__guests { columns: 1; } }
.wa-table__guests li { margin-bottom: 0.35rem; break-inside: avoid; }
.wa-table__meal {
	font-family: var(--wa-sans);
	font-size: 0.58rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--wa-muted);
	margin-left: 0.5rem;
}
.wa-table__diet { font-style: italic; color: var(--wa-muted); margin-left: 0.4rem; }

/* ---- questionnaire edit: each vendor child form as its own titled block ---- */
.wa-subform { margin-top: 2rem; padding-top: 1.4rem; border-top: 1px solid var(--wa-line-2); }
.wa-subform__tabs { display: flex; flex-wrap: wrap; gap: 1.4rem; margin-bottom: 1.1rem; }
.wa-subform__tab {
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--wa-muted);
	text-decoration: none;
	padding-bottom: 0.35rem;
	border-bottom: 1px solid transparent;
}
.wa-subform__tab:hover { color: var(--wa-ink); }
.wa-subform__tab.is-active { color: var(--wa-ink); border-bottom-color: var(--wa-ink); }

.wa-subform__title {
	font-family: var(--wa-sans);
	font-size: 0.66rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--wa-ink);
	margin: 0 0 0.9rem;
}

/* ---- questionnaire: a nested vendor record inside one answer ---- */
.wa-qq__sub { margin-top: 0.35rem; }
.wa-qq__subrow { display: flex; gap: 0.8rem; align-items: baseline; margin-bottom: 0.3rem; }
.wa-qq__subk {
	font-family: var(--wa-sans);
	font-size: 0.6rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--wa-muted);
	width: 168px;
	flex: none;
}
/* Vendor-pulled values are answers too — same serif as .wa-qq__a (Phase 2 sheet: the
   Officiant record was inheriting the sans stack). */
.wa-qq__subv { font-family: var(--wa-serif-body); font-size: 1.15rem; color: var(--wa-text); }
@media (max-width: 620px) {
	.wa-qq__subrow { display: block; }
	.wa-qq__subk { width: auto; display: block; margin-bottom: 0.1rem; }
}

/* ---- table breakdown: seating board ---- */
.wa-seatboard__saved {
	font-family: var(--wa-sans); font-size: 0.62rem; letter-spacing: 0.14em; text-transform: uppercase;
	color: var(--wa-muted); margin: 0 0 1.1rem;
}
/* One column since the Unseated rail came out (client round 2026-08-23). The .wa-seatboard__pool
   rules below are kept because the same classes dress the seat-picker dialog's roster rows. */
.wa-seatboard { display: grid; grid-template-columns: 1fr; gap: 28px; align-items: start; }

.wa-seatboard__pool { border: 1px solid var(--wa-line-2); padding: 1rem 1.1rem; border-radius: 4px; position: sticky; top: 1rem; }
/* Pool rows carry a surname and a role under the name, so two guests sharing a first name can be
   told apart before one of them is seated at the wrong table (client note 2026-08-04). */
.wa-seatboard__who { display: inline-flex; flex-direction: column; gap: 1px; vertical-align: top; }
.wa-seatboard__nm { font-family: var(--wa-serif-body); font-size: 1rem; color: var(--wa-text); line-height: 1.2; }
.wa-seatboard__ro {
	font-family: var(--wa-sans);
	font-size: 0.54rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--wa-muted);
}
.wa-seatboard__title {
	font-family: var(--wa-sans); font-size: 0.66rem; letter-spacing: 0.2em; text-transform: uppercase;
	color: var(--wa-ink); margin: 0 0 0.2rem; display: flex; align-items: center; gap: 0.5rem;
}
.wa-seatboard__count {
	display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 22px;
	padding: 0 6px; border-radius: 11px; background: var(--wa-ink); color: var(--wa-white); font-size: 0.62rem;
}
.wa-seatboard__hint { font-family: var(--wa-sans); font-size: 0.62rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--wa-muted); margin: 0 0 0.8rem; }
.wa-seatboard__lead { font-size: 0.82rem; color: var(--wa-text); margin: 0 0 0.6rem; font-style: italic; }
.wa-seatboard__list label { display: flex; align-items: center; gap: 0.45rem; cursor: pointer; }
.wa-seat-here { margin-left: auto; white-space: nowrap; }
.wa-table-card__remove { margin-left: 0; }
.wa-seatboard__list { list-style: none; margin: 0 0 1rem; padding: 0; max-height: 420px; overflow-y: auto; }
.wa-seatboard__list li { display: block; width: 100%; margin: 0; padding: 0.28rem 0; border-bottom: 1px solid var(--wa-line-2); color: var(--wa-text); }
.wa-seatboard__list li:last-child { border-bottom: 0; }
.wa-seatboard__add { border-top: 1px solid var(--wa-line-2); padding-top: 0.9rem; }
.wa-seatboard__add label,
.wa-seatboard__newtable label {
	display: block; font-family: var(--wa-sans); font-size: 0.6rem; letter-spacing: 0.16em;
	text-transform: uppercase; color: var(--wa-muted); margin-bottom: 0.3rem;
}
.wa-seatboard__add input[type="text"] { width: 100%; margin-bottom: 0.5rem; }

.wa-seatboard__newtable { display: flex; align-items: flex-end; gap: 0.7rem; flex-wrap: wrap; margin-bottom: 1.4rem; }
.wa-seatboard__newtable input[type="number"] { width: 84px; }

.wa-table-card { border: 1px solid var(--wa-line-2); border-radius: 4px; padding: 1rem 1.1rem; margin-bottom: 1.2rem; }
.wa-table-card__head { display: flex; align-items: baseline; gap: 0.8rem; flex-wrap: wrap; margin-bottom: 0.7rem; }
.wa-table-card__head .wa-ent__lab { width: auto; }
.wa-table-card__head .wa-ent__num { width: auto; font-size: 1.8rem; }
.wa-table-card__meta { font-family: var(--wa-sans); font-size: 0.62rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--wa-muted); }
.wa-table-card__shape, .wa-table-card__remove { display: inline-flex; gap: 0.4rem; margin: 0; }

.wa-table-card__seats { list-style: decimal; margin: 0 0 0.7rem; padding-left: 1.3rem; }
.wa-table-card__seats li { display: flex; align-items: center; gap: 0.6rem; margin-bottom: 0.4rem; flex-wrap: wrap; }
.wa-seat__name { flex: 1 1 120px; min-width: 110px; color: var(--wa-text); }
.wa-table-card__seats select { flex: 0 1 122px; min-width: 104px; }
/* The panel is narrow, so let the dietary note shrink rather than wrap to its own row —
   only a handful of guests ever have one. */
.wa-table-card__seats input[type="text"] { flex: 1 1 110px; min-width: 90px; }

.wa-table-card__unseat { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0.5rem 0 0.9rem; }
.wa-table-card__unseat form { margin: 0; }

.wa-mini {
	font-family: var(--wa-sans); font-size: 0.58rem; letter-spacing: 0.16em; text-transform: uppercase;
	padding: 0.32rem 0.7rem; border: 1px solid var(--wa-line); background: transparent; color: var(--wa-ink);
	cursor: pointer; border-radius: 2px;
}
.wa-mini:hover { border-color: var(--wa-ink); }
.wa-mini--danger { color: #9d3b2f; border-color: rgba(157, 59, 47, 0.4); }
.wa-mini--danger:hover { border-color: #9d3b2f; }

/* .wa-seatpick was the per-table <details> guest grid, dropped when the Unseated rail took over
   the ticking in the 8/15 rework. Nothing renders it any more, and its `display: grid` was
   overriding the UA's `display: none` on the closed seat-picker <dialog> that reuses the name
   (client round 2026-08-23) — so it goes. */

/* ---- decor: one block per item ---- */
/* Location selector — the same three the app's tab bar offers and the PDF groups by. Plain links
   (?decor=<slug>) so it works without JavaScript, like every other control in this theme. */
.wa-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 1.5rem; }
.wa-tab {
	display: inline-flex;
	align-items: baseline;
	gap: 7px;
	border: 1px solid var(--wa-line);
	color: var(--wa-text);
	background: none;
	font-family: var(--wa-serif-body);
	font-size: 0.98rem;
	padding: 0.45rem 0.9rem;
	text-decoration: none;
	transition: 0.15s;
}
.wa-tab:hover { border-color: var(--wa-ink); color: var(--wa-ink); }
.wa-tab.is-current { background: var(--wa-ink); border-color: var(--wa-ink); color: var(--wa-ivory); }
.wa-tab__n {
	font-family: var(--wa-sans);
	font-size: 0.58rem;
	letter-spacing: 0.1em;
	color: var(--wa-muted);
	font-variant-numeric: lining-nums tabular-nums;
}
.wa-tab.is-current .wa-tab__n { color: var(--wa-gold-l); }
.wa-decor__group {
	font-family: var(--wa-sans);
	font-size: 0.8rem;
	letter-spacing: 0.28em;
	text-transform: uppercase;
	color: var(--wa-muted);
	margin: 1.6rem 0 0.2rem;
	padding-bottom: 0.5rem;
	border-bottom: 1px solid var(--wa-line);
}
.wa-decor__group:first-of-type { margin-top: 0; }

.wa-decor { padding: 0.95rem 0; border-bottom: 1px solid var(--wa-line-2); }
.wa-decor:last-child { border-bottom: 0; }
.wa-decor__head { display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap; }
/* Per-item edit pencil. .wa-decor__head is already a flex row, so margin-left:auto parks it at
   the far end without disturbing the description's wrapping. */
.wedassist-app .wa-decor__edit {
	margin-left: auto;
	flex: none;
	color: var(--wa-muted);
	font-size: 16px;
	line-height: 1;
	text-decoration: none;
	padding: 2px 4px;
}
.wedassist-app .wa-decor__edit:hover { color: var(--wa-ink); }
.wa-decor__head .wa-ent__lab { width: auto; }
/* 1.9rem Cormorant beside a one-line description made the ordinal the loudest thing in the item;
   the description is what you actually scan for. Lining figures so "01" is not a Roman numeral. */
.wa-decor__head .wa-ent__num {
	width: auto;
	font-family: var(--wa-serif-body);
	font-size: 1.2rem;
	font-variant-numeric: lining-nums tabular-nums;
}
.wa-decor__desc { font-family: var(--wa-serif-body); font-size: 1.15rem; color: var(--wa-text); }
.wa-decor__meta {
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--wa-muted);
	margin: 0.15rem 0 0.45rem;
}
.wa-decor__row { display: flex; align-items: baseline; gap: 0.55rem; margin-bottom: 0.25rem; }
.wa-decor__k {
	font-family: var(--wa-sans);
	font-size: 0.6rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--wa-muted);
	width: 92px;
	flex: none;
}
/* Values and notes had no font-family, so they fell through to the page's Poppins while the
   description beside them was EB Garamond — three fonts inside one item is most of what read as
   "jumbled". The label stays sans; the content is serif like everywhere else. */
.wa-decor__k { width: auto; }
.wa-decor__v { font-family: var(--wa-serif-body); font-size: 1rem; color: var(--wa-text); }
.wa-decor__notes { margin-top: 0.35rem; font-family: var(--wa-serif-body); font-size: 1rem; color: var(--wa-text); line-height: 1.5; }
.wa-decor__notes p { margin: 0 0 0.5rem; }
.wa-decor__notes p:last-child { margin-bottom: 0; }

/* ---- vendor info: repeating categories (Rentals 38 / Additional Vendors 39) ----
   The vendor cards ARE decor items structurally, so they reuse .wa-decor wholesale. The one
   thing that does not carry over is the second line: on Decor it holds one short word (who is
   responsible), here it holds a vendor's role or a rental company's whole items list — which in
   0.62rem letterspaced caps is unreadable and loses its line breaks. */
.wa-vrow .wa-decor__meta {
	font-family: var(--wa-serif-body);
	font-size: 1rem;
	letter-spacing: 0;
	text-transform: none;
	color: var(--wa-text);
	line-height: 1.5;
	margin: 0.2rem 0 0.5rem;
	white-space: pre-line;
}

/* ---- additional info: titled free-form notes ---- */
.wa-note { padding: 1.1rem 0; border-bottom: 1px solid var(--wa-line-2); }
.wa-note:last-child { border-bottom: 0; }
/* Title + its pencil on one line (the Decor pattern, Phase 2 sheet). */
.wa-note__head { display: flex; align-items: baseline; gap: 0.6rem; }
.wa-note__head .wa-note__title { margin-bottom: 0; }
.wa-note__head + .wa-note__body,
.wa-note__head + .wa-detail__files { margin-top: 0.45rem; }
.wa-note__title {
	font-family: var(--wa-sans);
	font-size: 0.8rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--wa-ink);
	margin: 0 0 0.45rem;
}
.wa-note__body { color: var(--wa-text); line-height: 1.6; }
.wa-note--gallery .wa-detail__files { margin-top: 0.2rem; }

/* ---- vendor detail: two bordered blocks ---- */
.wa-vgrid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 30px; }
@media (max-width: 760px) { .wa-vgrid { grid-template-columns: 1fr; } }
.wa-vblock { border-left: 2px solid var(--wa-ink); padding-left: 20px; }
.wa-vblock .wa-detail { border-bottom: 0; padding: 0 0 1.1rem; }
.wa-vblock .wa-detail__value--note { font-style: italic; color: var(--wa-muted); font-size: 1rem; }

/* ---- questionnaire read rows ---- */
.wa-qq { padding: 1.35rem 0; border-bottom: 1px solid var(--wa-line-2, #ede6d6); }
.wa-qq:last-child { border-bottom: 0; }
.wa-qq__q {
	font-family: var(--wa-sans);
	font-weight: 400;
	font-size: 0.76rem;
	letter-spacing: 0.08em;
	color: var(--wa-ink);
	text-transform: uppercase;
	margin-bottom: 0.5rem;
}
.wa-qq__a { font-family: var(--wa-serif-body); font-size: 1.25rem; color: var(--wa-text); }

/* ---- event-info sidebar image cards ---- */
.wa-simg-nav { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; align-self: start; }
.wa-simg {
	position: relative;
	display: flex;
	align-items: center;
	height: 78px;
	overflow: hidden;
	border-radius: 10px;
	text-decoration: none;
}
.wa-simg img,
.wa-simg__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; background-size: cover; background-position: center top; }
.wa-simg__veil { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(20, 19, 15, 0.78), rgba(20, 19, 15, 0.3)); }
.wa-simg__lbl { position: relative; font-family: var(--wa-serif); font-size: 1.45rem; font-weight: 600; color: #fff; padding-left: 20px; line-height: 1.05; }
/* Gold outline selector, same as the checklist month cards (Phase 2 sheet). */
.wa-simg.is-current { outline: 2px solid var(--wa-gold); outline-offset: 2px; }

/* ---- uploaded-file values inside read-only detail views ---- */
.wa-detail__files { display: flex; flex-wrap: wrap; gap: 10px; }
.wa-detail__img img { width: 132px; height: 132px; object-fit: cover; border-radius: 4px; border: 1px solid var(--wa-gold); display: block; }
.wa-detail__file { font-family: var(--wa-sans); font-size: 0.8rem; text-decoration: underline; }

/* ---- search bar + serif utility buttons (Our People / Timeline) ---- */
.wa-bar { display: flex; gap: 16px; align-items: center; margin-bottom: 1.75rem; flex-wrap: wrap; }
.wa-searchbox {
	flex: 1;
	min-width: 220px;
	display: flex;
	align-items: center;
	gap: 10px;
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	padding: 0.8rem 1.1rem;
}
.wa-searchbox i { color: var(--wa-ink); font-size: 18px; }
.wa-searchbox input {
	border: 0;
	background: none;
	outline: none;
	width: 100%;
	font-family: var(--wa-serif-body);
	font-size: 1.1rem;
	color: var(--wa-text);
}
.wa-searchbox input::placeholder { color: var(--wa-muted); }
.wa-csv-btn {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	border: 1px solid var(--wa-ink);
	background: none;
	color: var(--wa-ink);
	font-family: var(--wa-serif-body);
	font-size: 1.05rem;
	padding: 0.8rem 1.4rem;
	cursor: pointer;
	white-space: nowrap;
	text-decoration: none;
	transition: 0.15s;
}
.wa-csv-btn:hover { background: var(--wa-ink); color: var(--wa-white); }
.wa-csv-btn i { font-size: 18px; }

/* neutralize the legacy standalone-input rules when it sits inside the searchbox */
.wa-searchbox .wa-people-search { max-width: none; margin: 0; padding: 0; border: 0; background: none; }

/* people cards → centered tiles */
.wa-person--tile { flex-direction: column; text-align: center; gap: 0.6rem; padding: 1.9rem 1.25rem; }
.wa-person--tile .wa-person__body { align-items: center; }
.wa-person--tile .wa-person__role { align-self: center; background: none; padding: 0; color: var(--wa-muted); letter-spacing: 0.18em; font-size: 0.62rem; margin-top: 0.3rem; }

/* ---- timeline chrome ---- */
.wa-tl-date {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	margin-top: 0.9rem;
	font-family: var(--wa-serif-body);
	font-size: 1.05rem;
	color: var(--wa-ink);
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	padding: 0.65rem 1.25rem;
}
.wa-tl-date i { color: var(--wa-ink); font-size: 18px; }
.wa-tl-bar { display: flex; justify-content: flex-end; align-items: center; gap: 14px; margin-bottom: 1.4rem; flex-wrap: wrap; }
.wa-timeline__actions { display: flex; gap: 16px; margin-left: auto; align-self: center; color: var(--wa-muted); }
.wa-timeline__actions a { color: var(--wa-muted); text-decoration: none; font-size: 17px; }
.wa-timeline__actions a:hover { color: var(--wa-ink); }
.wa-timeline__actions .wa-timeline__delete { margin-left: 0; padding: 0; }

/* ---- budget: top summary grid + joined category rows ---- */
.wa-bud-top {
	display: grid;
	grid-template-columns: 1.5fr 1fr;
	gap: 40px;
	background: var(--wa-panel);
	border: 1px solid var(--wa-line);
	padding: 2.4rem 2.6rem;
	margin-bottom: 2rem;
	align-items: center;
}
@media (max-width: 760px) { .wa-bud-top { grid-template-columns: 1fr; } }
.wa-track { height: 8px; background: var(--wa-line); position: relative; overflow: hidden; }
.wa-track--sm { height: 6px; }
.wa-track__fill { position: absolute; left: 0; top: 0; bottom: 0; background: var(--wa-ink); }
.wa-allo { margin-top: 1.6rem; }
.wa-allo__lab {
	font-family: var(--wa-sans);
	font-size: 0.68rem;
	letter-spacing: 0.14em;
	color: var(--wa-muted);
	text-transform: uppercase;
	margin-bottom: 0.5rem;
	display: flex;
	justify-content: space-between;
	gap: 1rem;
}
.wa-bud-row {
	display: flex;
	align-items: center;
	gap: 24px;
	padding: 1.35rem 2.6rem;
	border: 1px solid var(--wa-line);
	border-top: 0;
	background: var(--wa-panel);
}
.wa-bud-row:first-of-type { border-top: 1px solid var(--wa-line); }
.wa-bud-row__cat { font-family: var(--wa-serif-body); font-size: 1.25rem; color: var(--wa-text); flex: 0 0 230px; }
.wa-bud-row__bar { flex: 1; }
.wa-bud-row__lab { font-family: var(--wa-sans); font-size: 0.68rem; letter-spacing: 0.06em; color: var(--wa-muted); margin-top: 0.5rem; }
.wa-bud-row__amt { font-family: var(--wa-serif); font-size: 1.5rem; color: var(--wa-ink); font-weight: 600; flex: 0 0 130px; text-align: right; }
@media (max-width: 760px) {
	.wa-bud-row { flex-wrap: wrap; padding: 1.25rem 1.4rem; }
	.wa-bud-row__cat { flex: 1 1 100%; }
	.wa-bud-row__amt { flex: 1; text-align: left; }
}
/* thin gold ring donut (mockup) — reuses the conic donut with a gold arc + panel hole */
.wa-donut {
	background: conic-gradient(var(--wa-gold) calc(var(--frac) * 360deg), var(--wa-line) 0);
	width: 150px;
	height: 150px;
}
.wa-donut__hole { width: 128px; height: 128px; background: var(--wa-panel); }
.wa-donut__label { color: var(--wa-ink); }
.wa-donut__value { font-size: 1.6rem; }

/* ---- checklist tweaks: art cards styled like the Event Info tiles ---- *
 * (client note 2026-08-10: larger font, vertically centered, no black border.)
 * The "black border" was the card's ink background showing through the art's
 * transparent rounded corners — transparent lets the page ivory show instead.
 * The label is real text (the art never had it baked in, despite the older
 * comment above), so it takes the .wa-simg__lbl treatment: serif, 1.45rem,
 * centered on the left edge. */
.wa-period-card {
	display: flex;
	align-items: center;
	border-radius: 12px;
	border: 0;
	min-height: 90px;
	background-color: transparent;
	/* The art has its own transparent rounded corners baked in; zooming past them
	   lets the card's border-radius do the rounding, so no ghost frame shows. */
	background-size: 112% 118%;
}
.wa-period-card__label {
	position: static;
	padding-left: 18px;
	max-width: 75%;
	font-size: 1.45rem;
	line-height: 1.05;
}
.wa-period-card.is-current { outline: 2px solid var(--wa-gold); outline-offset: 2px; border: 0; }

/* ---- event-file (export) page ---- */
.wa-ef-cols { display: grid; grid-template-columns: 34% 1fr; gap: 44px; align-items: start; }
@media (max-width: 860px) { .wa-ef-cols { grid-template-columns: 1fr; } }
.wa-ef-full {
	display: flex;
	align-items: center;
	gap: 12px;
	border: 2px solid var(--wa-ink);
	background: var(--wa-panel);
	padding: 1.1rem 1.25rem;
	font-family: var(--wa-serif-body);
	font-size: 1.25rem;
	color: var(--wa-ink);
	cursor: pointer;
	margin: 0.9rem 0 1rem;
}
.wa-ef-or { font-family: var(--wa-serif-body); font-style: italic; font-size: 0.95rem; color: var(--wa-muted); margin-bottom: 0.9rem; }
.wa-cat-list { display: flex; flex-direction: column; gap: 10px; margin: 0 0 1.75rem; }
.wa-cat-chip {
	display: flex;
	align-items: center;
	gap: 12px;
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	padding: 1.05rem 1.2rem;
	font-family: var(--wa-serif-body);
	font-size: 1.15rem;
	color: var(--wa-muted);
	cursor: pointer;
	transition: 0.15s;
}
.wa-cat-chip input { position: absolute; opacity: 0; pointer-events: none; }
.wa-tick {
	width: 22px;
	height: 22px;
	border: 1px solid var(--wa-ink);
	border-radius: 50%;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: transparent;
	font-size: 12px;
	flex: none;
	transition: 0.15s;
}
.wa-cat-chip.is-checked,
.wa-ef-full.is-checked { color: var(--wa-text); border-color: var(--wa-ink); }
.wa-cat-chip.is-checked .wa-tick,
.wa-ef-full.is-checked .wa-tick { background: var(--wa-ink); border-color: var(--wa-ink); color: var(--wa-white); }
/* Hover: black row, white text (client round 2026-08-19 — Elementor's kit painted these
   BLUE, since a bare `.wa-cat-chip:hover` (0,2,0) loses to `.elementor-kit-6 button:hover`
   (0,2,1)). body + element + class clears it. The tick INVERTS to a white disc: left as
   it is, the black checked circle vanishes into the black row. */
body.wedassist-app button.wa-cat-chip:hover,
body.wedassist-app button.wa-ef-full:hover {
	background: var(--wa-ink);
	border-color: var(--wa-ink);
	color: var(--wa-white);
}
body.wedassist-app button.wa-cat-chip:hover .wa-tick,
body.wedassist-app button.wa-ef-full:hover .wa-tick {
	background: none;
	border-color: var(--wa-white);
	color: transparent;
}
body.wedassist-app button.wa-cat-chip.is-checked:hover .wa-tick,
body.wedassist-app button.wa-ef-full.is-checked:hover .wa-tick {
	background: var(--wa-white);
	border-color: var(--wa-white);
	color: var(--wa-ink);
}
.wa-ef-actions { display: flex; flex-direction: column; gap: 14px; }
.wa-exp-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	font-family: var(--wa-serif-body);
	font-size: 1.15rem;
	padding: 1rem 1.5rem;
	cursor: pointer;
	text-decoration: none;
	transition: 0.2s;
	width: 100%;
}
.wa-exp-btn--view { background: none; border: 1px solid var(--wa-ink); color: var(--wa-ink); }
.wa-exp-btn--view:hover { background: var(--wa-panel); color: #000; }
.wa-exp-btn--go { background: var(--wa-ink); border: 1px solid var(--wa-ink); color: var(--wa-white); }
.wa-exp-btn--go:hover { background: #000; color: var(--wa-white); }
.wa-doc-frame { background: var(--wa-panel); border: 1px solid var(--wa-line); padding: 30px; display: flex; justify-content: center; }
/* The paper is sized by this box, so container units below measure the SHEET, not the panel. */
.wa-doc-page { width: 100%; max-width: 520px; container-type: inline-size; }
.wa-doc-paper {
	position: relative;
	background: #fff;
	width: 100%;
	/* US Letter. With a real page ratio the cover block no longer fills the sheet, which is
	   what lets the planner mark and the as-of stamp fall to the foot the way they do in the
	   PDF (there they are the page FOOTER, not part of the cover flow). */
	aspect-ratio: 8.5 / 11;
	box-shadow: 0 12px 40px rgba(0, 0, 0, 0.12);
	/* mPDF margins: 17.73mm sides and 30mm top/bottom of a 215.9mm page. */
	padding: 72px 43px;
	padding: 13.9cqw 8.21cqw;
	display: flex;
	flex-direction: column;
	align-items: center;
	overflow: hidden;
}
/* Mirrors the REDESIGNED PDF cover (cover_page() + css/export-file.css in mam-wedassist):
   everything centered — gold letterspaced kicker over a short ink rule, circular photo, ink
   serif caps names split at the "&", spaced numeric date, planner mark and gold as-of stamp
   at the foot. The old right-aligned olive treatment was the pre-redesign cover and is what
   the client kept seeing here (round 2026-08-23). Keep in step with cover_page(). */
/* Every size below is the PDF's own measurement expressed as a share of page width (letter =
   612pt), so the preview is a true miniature and the two cannot drift however wide the column
   is. px values are the 520px fallback for a browser without container queries.
   Sources: cover_page() in pdf-replacement-fields.php, css/export-file.css. */
.wa-doc-paper__wed { font-family: var(--wa-sans); font-weight: 700; font-size: 7.6px; font-size: 1.47cqw; letter-spacing: 0.4em; text-indent: 0.4em; color: var(--wa-gold); text-transform: uppercase; }
.wa-doc-paper__rule { width: 28.9px; width: 5.56cqw; height: 0; border-bottom: 1px solid var(--wa-ink); margin-top: 5px; margin-top: 0.96cqw; }
.wa-doc-paper__photo { width: 40%; aspect-ratio: 1 / 1; height: auto; object-fit: cover; border-radius: 50%; margin: 0 auto; margin-top: 14px; margin-top: 2.7cqw; }
.wa-doc-paper__names { text-align: center; font-family: var(--wa-serif); font-size: 28.9px; font-size: 5.56cqw; line-height: 1.15; font-weight: 500; letter-spacing: 0.12em; text-indent: 0.12em; color: var(--wa-ink); text-transform: uppercase; margin-top: 12px; margin-top: 2.3cqw; }
.wa-doc-paper__date { font-family: var(--wa-sans); font-size: 9.4px; font-size: 1.8cqw; letter-spacing: 0.3em; text-indent: 0.3em; color: var(--wa-ink); margin-top: 9px; margin-top: 1.7cqw; }
/* Page FOOTER in the PDF — pinned to the foot of the sheet, not trailing the date. */
.wa-doc-paper__logo { text-align: center; margin-top: auto; }
.wa-doc-paper__logo img { height: 53.5px; height: 10.29cqw; max-width: 100%; width: auto; }
/* Black, not gold, per client round 2026-08-31 — changed in the PDF (export-file.css
   .wa-cover-asof) in the same round, so preview and export keep matching. */
.wa-doc-paper__asof { text-align: center; font-family: var(--wa-sans); font-weight: 700; font-size: 6.4px; font-size: 1.23cqw; letter-spacing: 0.15em; text-indent: 0.15em; color: var(--wa-ink); text-transform: uppercase; margin-top: 4px; margin-top: 0.8cqw; }

/* ---- home hero (full-bleed ink band) ---- */
.wa-hero {
	background: var(--wa-ink);
	border-bottom: 1px solid var(--wa-gold);
	padding: 3.5rem 2rem;
	text-align: center;
}
/* Change-photo chip under the hero portrait (client note 2026-08-10). */
.wa-hero__photo-form { margin: -0.6rem 0 1.2rem; }
.wa-hero__photo-btn {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	background: none;
	border: 1px solid rgba(255, 255, 255, 0.35);
	border-radius: 999px;
	padding: 0.3rem 0.9rem;
	font-family: var(--wa-sans);
	font-size: 0.66rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.85);
	cursor: pointer;
	transition: border-color .15s, color .15s;
}
/* Neve's generic button:hover (style-main-new, loaded AFTER this sheet) fills every <button> with
   its blue primary hover background; this rule outranks it but never said what the background
   should be, so the pill went blue on hover (sheet row 18, 2026-09-09). Gold outline + gold text. */
.wa-hero__photo-btn:hover,
.wa-hero__photo-btn:focus,
.wa-hero__photo-btn:focus-visible { background: none; border-color: var(--wa-gold); color: var(--wa-gold-l); box-shadow: none; }
.wa-hero__photo-btn i { font-size: 14px; }

.wa-hero__photo {
	width: 142px;
	height: 142px;
	border-radius: 50%;
	object-fit: cover;
	border: 1px solid #fff;
	margin: 0 auto 1.4rem;
	display: block;
	box-shadow: 0 0 0 6px rgba(255, 255, 255, 0.16);
	background: var(--wa-muted);
}
.wa-hero__eyebrow {
	font-family: var(--wa-sans);
	font-size: 0.64rem;
	letter-spacing: 0.5em;
	color: #fff;
	text-transform: uppercase;
	margin-bottom: 0.9rem;
}
.wa-hero__names,
.wedassist-app .wa-hero__names {
	font-family: var(--wa-serif);
	font-size: clamp(2.4rem, 6vw, 3.6rem);
	line-height: 1.02;
	font-weight: 600;
	color: var(--wa-ivory);
	margin: 0;
}
.wa-hero__date {
	font-family: var(--wa-serif-body);
	font-style: italic;
	color: #fff;
	font-size: 1.2rem;
	margin-top: 0.75rem;
	letter-spacing: 0.02em;
}
.wa-hero__days {
	font-family: var(--wa-sans);
	font-size: 0.64rem;
	letter-spacing: 0.5em;
	color: #fff;
	text-transform: uppercase;
	margin-top: 1.1rem;
}
.wa-home-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 52px; align-items: stretch; }
@media (max-width: 960px) { .wa-home-cols { grid-template-columns: 1fr; } }

/* Inspiration column runs the full height of the left column (Quick Access + Up Next),
   so the panel bottom lines up with the last checklist row. The panel is absolutely
   positioned inside __body so its 1665px of masonry never drives the grid row height —
   __body's min-height is all the row ever sees. */
.wa-home-cols > .wa-home-inspo { display: flex; flex-direction: column; }
.wa-home-inspo__body { position: relative; flex: 1 1 auto; min-height: 560px; }
.wa-home-inspo__body > .wa-inspo-panel { position: absolute; inset: 0; height: auto; min-height: 0; }

/* ---- Pinterest pin badge on gallery tiles (links to the pin) ---- */
.wa-inspo-pin {
	position: absolute;
	bottom: 6px;
	right: 6px;
	width: 26px;
	height: 26px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.92);
	color: #c0392b;
	text-decoration: none;
	font-size: 15px;
	opacity: 0.9;
	transition: opacity 0.12s ease, transform 0.12s ease;
}
.wa-inspo-pin:hover { color: #c0392b; opacity: 1; transform: scale(1.08); }

/* ================================================================== *
 * Marketing site chrome (v0.37.0) — the non-app pages (Neve header/
 * footer + Elementor content) skinned to the luxury palette. Elementor
 * section colors were remapped in the DB (see memory: luxe-marketing-
 * swap); this layer covers the Neve chrome + typography coherence.
 * App pages render their own full HTML, so none of this touches them.
 * ================================================================== */

/* ---- Neve header → ink with gold hairline ---- */
.hfg_header .header--row,
.hfg_header .header-main,
.hfg_header .header-top,
.hfg_header .header-bottom,
.hfg_header .header-main-inner,
.site-header {
	background-color: var(--wa-ink) !important;
}
.hfg_header { border-bottom: 1px solid var(--wa-gold); }

/* old dark logo → white via filter (PNG is dark-on-transparent) */
.hfg_header .site-logo img,
.hfg_header .custom-logo {
	filter: brightness(0) invert(1);
}

/* menu links: Poppins caps, muted → white, luxe tracking */
.hfg_header .nav-menu-primary a,
.hfg_header .primary-menu-ul a,
.hfg_header .header--row a {
	font-family: var(--wa-sans) !important;
	font-size: 0.72rem !important;
	letter-spacing: 0.18em !important;
	text-transform: uppercase !important;
	color: #b7b1a2 !important;
}
.hfg_header .nav-menu-primary a:hover,
.hfg_header .primary-menu-ul a:hover,
.hfg_header .header--row a:hover,
.hfg_header .primary-menu-ul .current-menu-item > a {
	color: #ffffff !important;
}
.hfg_header .sub-menu {
	background-color: var(--wa-ink-2) !important;
	border: 1px solid rgba(255, 255, 255, 0.08);
}

/* ---- Neve footer → ink ---- */
.site-footer,
.site-footer .footer--row {
	background-color: var(--wa-ink) !important;
	color: var(--wa-muted);
}
.site-footer a { color: var(--wa-gold-l); }

/* ---- Marketing typography + surfaces (never the app/login pages) ---- */
body:not(.wedassist-app):not(.wedassist-login-page) {
	background-color: var(--wa-ivory);
	font-family: var(--wa-sans);
}
body:not(.wedassist-app):not(.wedassist-login-page) h1,
body:not(.wedassist-app):not(.wedassist-login-page) h2,
body:not(.wedassist-app):not(.wedassist-login-page) h3,
body:not(.wedassist-app):not(.wedassist-login-page) .elementor-heading-title {
	font-family: var(--wa-serif) !important;
	font-weight: 600;
	letter-spacing: 0.01em;
}

/* Elementor buttons → sharp, tracked, luxe */
body:not(.wedassist-app) .elementor-button {
	border-radius: 0 !important;
	font-family: var(--wa-sans) !important;
	letter-spacing: 0.14em !important;
	text-transform: uppercase !important;
	font-weight: 400 !important;
}

/* Woo bits that show on account/checkout */
body:not(.wedassist-app) .woocommerce a.button,
body:not(.wedassist-app) .woocommerce button.button,
body:not(.wedassist-app) .woocommerce input.button,
body:not(.wedassist-app) .woocommerce #respond input#submit {
	background-color: var(--wa-ink);
	color: #fff;
	border-radius: 0;
	font-family: var(--wa-sans);
	letter-spacing: 0.1em;
	text-transform: uppercase;
}

/* ---- Marketing polish: logo + the two announcement bands ---- */
/* Neve renders the logo as .neve-site-logo (not .site-logo img) — force it white on ink. */
.hfg_header .neve-site-logo { filter: brightness(0) invert(1); }

/* The cream announcement/footer strips read as the mockup's tracked-caps note bars
   (they inherited white text from the old kit). Ids = the heading widgets on page 15
   + the Elementor footer template. */
.elementor-element-9f96ed6 .elementor-heading-title,
.elementor-element-da40677 .elementor-heading-title,
.elementor-element-59be0ba9 .elementor-heading-title {
	color: var(--wa-ink) !important;
	font-family: var(--wa-sans) !important;
	font-size: 0.8rem !important;
	font-weight: 400 !important;
	letter-spacing: 0.24em !important;
	text-transform: uppercase !important;
}
/* social icons sitting in those cream strips: white → ink */
body:not(.wedassist-app) .elementor-social-icon,
body:not(.wedassist-app) .elementor-social-icon i,
body:not(.wedassist-app) .elementor-social-icon svg {
	color: var(--wa-ink) !important;
	fill: var(--wa-ink) !important;
}

/* ================================================================== *
 * Pro Tips — italic affordance + elegant modal (v0.37.1)
 * ================================================================== */
/* body-scoped: the Budget page still loads an old Elementor kit whose `.elementor-kit-6 button` rule
   out-specified .wa-protip and painted the pill gold (client round 2026-08-15). */
body.wedassist-app .wa-protip {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	background: none;
	border: 0;
	/* Padding lives on the resting state so the hover pill doesn't shift the text;
	   the negative margin keeps the label on the panel's left edge. */
	padding: 5px 12px;
	margin-left: -12px;
	border-radius: 999px;
	font-family: var(--wa-serif-body);
	font-style: italic;
	font-size: 1rem;
	color: var(--wa-ink);
	cursor: pointer;
	white-space: nowrap;
	transition: background .15s, color .15s;
}
body.wedassist-app .wa-protip i { font-size: 17px; }
body.wedassist-app .wa-protip:hover { background: var(--wa-ink); color: var(--wa-white); }

.wa-tips-dialog {
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	color: var(--wa-text);
	padding: 2.6rem 2.8rem 2.4rem;
	max-width: 560px;
	width: calc(100vw - 3rem);
	max-height: 82vh;
	overflow-y: auto;
	margin: auto; /* centers the native dialog */
}
.wa-tips-dialog::backdrop { background: rgba(20, 19, 15, 0.55); }
/* Two classes deep: Elementor's `.elementor-kit-6 button` otherwise wins and renders
   this close ✕ as a solid gold button instead of a bare glyph. */
.wa-tips-dialog .wa-tips-dialog__close {
	position: absolute;
	top: 14px;
	right: 14px;
	background: none;
	border: 0;
	box-shadow: none;
	color: var(--wa-muted);
	font-size: 20px;
	cursor: pointer;
	line-height: 1;
	padding: 4px;
}
.wa-tips-dialog .wa-tips-dialog__close:hover,
.wa-tips-dialog .wa-tips-dialog__close:focus-visible { background: none; color: var(--wa-ink); }
.wa-tips-dialog__eyebrow {
	font-family: var(--wa-sans);
	font-size: 0.64rem;
	letter-spacing: 0.4em;
	text-transform: uppercase;
	color: var(--wa-gold-d);
}
.wa-tips-dialog__title {
	font-family: var(--wa-serif);
	font-size: 1.9rem;
	font-weight: 600;
	color: var(--wa-ink);
	margin: 0.3rem 0 0;
}
.wa-tips-dialog__rule { height: 1px; background: var(--wa-line); border: 0; margin: 1.2rem 0 1.4rem; }

.wa-tip {
	display: flex;
	gap: 1.2rem;
	padding: 0.9rem 0;
	border-bottom: 1px solid var(--wa-line-2, #ede6d6);
	align-items: baseline;
}
.wa-tip:last-child { border-bottom: 0; }
.wa-tip__num { font-family: var(--wa-serif); font-size: 1.7rem; color: var(--wa-gold-d); flex: 0 0 38px; }
.wa-tip__title { font-family: var(--wa-serif-body); font-size: 1.2rem; color: var(--wa-ink); margin-bottom: 0.25rem; }
.wa-tip__text { font-family: var(--wa-serif-body); font-size: 1.05rem; color: var(--wa-text); }
.wa-tip__text p { margin: 0 0 0.6rem; }
.wa-tip__text p:last-child { margin-bottom: 0; }
.wa-tip__text img { max-width: 100%; height: auto; }

/* ---- "yours" marker: the wedding's own value overriding a listing default ---- */
.wa-yours {
	font-family: var(--wa-sans);
	font-size: 0.58rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--wa-gold-d);
	border: 1px solid var(--wa-line);
	padding: 0.1rem 0.4rem;
	margin-left: 0.45rem;
	vertical-align: middle;
	white-space: nowrap;
}

/* ---- Timeline: click-to-edit time chip + inline editor ---- */
.wa-tl-timewrap { flex: 0 0 auto; }
button.wa-tl-time-btn { border: 0; cursor: pointer; }
button.wa-tl-time-btn i { font-size: 12px; opacity: 0.55; }
button.wa-tl-time-btn:hover { background: var(--wa-line); }
button.wa-tl-time-btn:hover i { opacity: 1; }
.wa-tl-time-form { display: flex; gap: 8px; align-items: center; margin-top: 8px; }
.wa-tl-time-form[hidden] { display: none; }
.wa-tl-time-form input[type="time"] {
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
	font-family: var(--wa-sans);
	padding: 0.4rem 0.5rem;
	font-size: 0.85rem;
}
.wa-tl-time-form .wa-csv-btn { padding: 0.45rem 0.9rem; font-size: 0.9rem; }
.wa-form-embed .gform_footer { display: flex; align-items: center; gap: 14px; }
.wa-form-embed .gform_footer .wa-csv-btn--danger { padding: 0.7rem 1.4rem; font-size: 0.95rem; }

/* Wedding Details → Meal Options chips */
.wa-meals { margin-top: 1.5rem; }
/* "Meal Options" reads at the same size/family as the Couple / Wedding Date labels
   (client round 2026-08-15). */
.wa-meals h2 {
	font-family: var(--wa-sans);
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--wa-ink);
	font-size: 0.8rem;
	margin: 0 0 0.35rem;
}
.wa-meals__chips { display: flex; flex-wrap: wrap; gap: 10px; margin: 0.75rem 0 1.25rem; }
.wa-meal-chip {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	font-family: var(--wa-serif-body);
	font-size: 0.95rem;
	padding: 0.45rem 0.9rem;
	border-radius: 999px;
}
.wa-meal-chip--custom { border-color: var(--wa-gold); }
.wa-meal-chip__x { text-decoration: none; color: var(--wa-muted); font-size: 1.05rem; line-height: 1; }
.wa-meal-chip__x:hover { color: var(--wa-warn); }
.wa-meals__off { display: flex; align-items: center; flex-wrap: wrap; gap: 0.5rem; margin: 0.9rem 0 0; }
.wa-meals__off-lbl {
	font-family: var(--wa-sans); font-size: 0.58rem; letter-spacing: 0.18em;
	text-transform: uppercase; color: var(--wa-muted);
}
.wa-meal-chip--off {
	border-style: dashed; color: var(--wa-muted); text-decoration: none; cursor: pointer;
}
.wa-meal-chip--off:hover { border-style: solid; color: var(--wa-ink); border-color: var(--wa-ink); }
.wa-meals__add { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.wa-meals__add input[type="text"] { font-family: var(--wa-serif-body); font-size: 1rem; padding: 0.7rem 1rem; border: 1px solid var(--wa-line); background: #fff; min-width: 240px; }

/* Two-up field rows on the person editor (collapses on small screens). */
.wa-field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0 20px; }
@media (max-width: 640px) { .wa-field-row { grid-template-columns: 1fr; } }
.wa-field-row .wa-field { min-width: 0; }
#wa-person-meal-other,
#wa-person-title-other,
#wa-person-relation-other { margin-top: 8px; }
/* Neve/Elementor give bare inputs an explicit display, which beats the UA's [hidden] rule —
   only the meal input carried this kill switch, so "Your own title" / "Your own relationship"
   sat there permanently (client round 2026-08-19). */
#wa-person-meal-other[hidden],
#wa-person-title-other[hidden],
#wa-person-relation-other[hidden] { display: none !important; }

/* Add Category panel — ✕ in the corner backs out of the whole panel (client note 2026-08-04).
   Padding-right keeps the labels clear of it when the panel wraps narrow. */
.wa-budcat-panel { position: relative; padding-right: 3rem; }
/* Two classes deep on purpose: Elementor's `.elementor-kit-6 button` (0,1,1) outranks a
   lone class and would otherwise paint this a solid gold button. */
.wa-budcat-panel .wa-budcat-close {
	position: absolute;
	top: 10px;
	right: 12px;
	background: none;
	border: 0;
	box-shadow: none;
	color: var(--wa-muted);
	font-size: 18px;
	line-height: 1;
	padding: 4px;
	cursor: pointer;
}
.wa-budcat-panel .wa-budcat-close:hover,
.wa-budcat-panel .wa-budcat-close:focus-visible { background: none; color: var(--wa-ink); }
.wa-budcat-new { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; flex-basis: 100%; }
.wa-budcat-new input[type="text"] {
	font-family: var(--wa-serif-body);
	font-size: 1rem;
	padding: 0.7rem 1rem;
	border: 1px solid var(--wa-line);
	background: #fff;
	min-width: 260px;
}
.wa-csv-btn--danger { border-color: var(--wa-warn); color: var(--wa-warn); }
.wa-csv-btn--danger:hover { background: var(--wa-warn); color: #fff; }

/* ================================================================== *
 * Interactive color palette tool (v0.38.0) — replaces the web checkbox
 * grid; output always snapped to the app's fixed palette.
 * ================================================================== */
.wa-pal-tabs { display: flex; gap: 10px; margin-bottom: 1.4rem; flex-wrap: wrap; }
.wa-pal-tab {
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	font-family: var(--wa-sans);
	font-size: 0.7rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	padding: 0.65rem 1.2rem;
	cursor: pointer;
	color: var(--wa-muted);
}
.wa-pal-tab.is-on { border-color: var(--wa-ink); color: var(--wa-ink); background: var(--wa-white); }

.wa-pal-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 0.9rem; }
.wa-pal-chip {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
	font-family: var(--wa-serif-body);
	font-size: 0.95rem;
	color: var(--wa-text);
	padding: 0.5rem 0.9rem;
	cursor: pointer;
}
.wa-pal-chip:hover { border-color: var(--wa-ink); }
.wa-pal-chip .dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; }
.wa-pal-chip--trend { font-style: italic; }

.wa-pal-drop {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	border: 1px dashed var(--wa-gold-d);
	background: var(--wa-white);
	padding: 2rem 1.5rem;
	cursor: pointer;
	font-family: var(--wa-serif-body);
	font-style: italic;
	color: var(--wa-muted);
	text-align: center;
	margin-bottom: 1rem;
}
.wa-pal-drop i { font-size: 26px; color: var(--wa-gold-d); }
.wa-pal-img { max-height: 180px; max-width: 100%; margin-bottom: 1rem; border: 1px solid var(--wa-line); }

.wa-pal-anchor { display: flex; align-items: center; gap: 1rem; font-family: var(--wa-serif-body); font-size: 1.05rem; margin-bottom: 1rem; }
.wa-pal-anchor input[type="color"] { width: 64px; height: 44px; border: 1px solid var(--wa-line); background: none; padding: 2px; cursor: pointer; }

.wa-pal-strip { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; margin-top: 1.4rem; }
@media (max-width: 700px) { .wa-pal-strip { grid-template-columns: repeat(2, 1fr); } }
.wa-pal-swatch {
	position: relative;
	height: 150px;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	padding: 0.7rem 0.8rem;
	color: #faf6f0;
}
.wa-pal-swatch.is-light { color: #2b2320; }
.wa-pal-role { font-family: var(--wa-sans); font-size: 0.58rem; letter-spacing: 0.2em; text-transform: uppercase; opacity: 0.85; }
.wa-pal-hex { font-family: var(--wa-sans); font-size: 0.78rem; letter-spacing: 0.06em; }
.wa-pal-lock {
	position: absolute;
	top: 8px;
	right: 8px;
	background: none;
	border: 0;
	color: inherit;
	opacity: 0.55;
	cursor: pointer;
	font-size: 16px;
	padding: 4px;
}
.wa-pal-lock:hover, .wa-pal-lock.is-locked { opacity: 1; }
/* The per-swatch color wheel (Phase 2): an eyedropper next to the lock; the real
   <input type=color> is present-but-invisible so its native picker can be click()ed. */
.wa-pal-edit {
	position: absolute;
	top: 8px;
	left: 8px;
	background: none;
	border: 0;
	color: inherit;
	opacity: 0.55;
	cursor: pointer;
	font-size: 16px;
	padding: 4px;
}
.wa-pal-edit:hover { opacity: 1; }
.wa-pal-input {
	position: absolute;
	top: 8px;
	left: 8px;
	width: 1px;
	height: 1px;
	opacity: 0;
	border: 0;
	padding: 0;
	pointer-events: none;
}

/* ================================================================== *
 * Payment Tracker (v0.38.1) — stats, contract cards, milestone rows
 * ================================================================== */
.wa-pay-stats {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	margin-bottom: 1.5rem;
}
.wa-pay-stat { padding: 1.5rem 1rem; text-align: center; border-right: 1px solid var(--wa-line); }
.wa-pay-stat:last-child { border-right: 0; }
.wa-pay-stat .n { display: block; font-family: var(--wa-serif); font-size: 2rem; font-weight: 600; color: var(--wa-ink); }
.wa-pay-stat .l { display: block; font-family: var(--wa-sans); font-size: 0.62rem; letter-spacing: 0.24em; text-transform: uppercase; color: var(--wa-ink); margin-top: 0.35rem; }
.wa-pay-stat.is-over .n { color: var(--wa-warn); }

.wa-contract { margin-bottom: 1.25rem; }
.wa-contract__actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: flex-start; }
.wa-btn-edit--danger { border-color: var(--wa-warn); color: var(--wa-warn); }
.wa-btn-edit--danger:hover { background: var(--wa-warn); border-color: var(--wa-warn); color: #fff; }

.wa-pay-row {
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 0.85rem 0;
	border-top: 1px solid var(--wa-line-2, #ede6d6);
}
.wa-pay-row:first-of-type { border-top: 0; }
.wa-pay-row__body { flex: 1; min-width: 0; }
.wa-pay-row__name { font-family: var(--wa-serif-body); font-size: 1.15rem; color: var(--wa-text); }
.wa-pay-row__due { font-family: var(--wa-sans); font-size: 0.72rem; letter-spacing: 0.04em; color: var(--wa-muted); margin-top: 2px; }
.wa-pay-row__amt { font-family: var(--wa-serif); font-size: 1.25rem; font-weight: 600; color: var(--wa-ink); }
.wa-pill {
	font-family: var(--wa-sans);
	font-size: 0.58rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	padding: 0.3rem 0.75rem;
	border-radius: 20px;
	white-space: nowrap;
}
.wa-pill--paid     { background: #e7eadf; color: #4f5a38; }
.wa-pill--due-soon { background: #f3ead6; color: var(--wa-ink); }
.wa-pill--overdue  { background: #f3e0da; color: #9b4a38; }
.wa-pill--upcoming { background: var(--wa-line-2, #ede6d6); color: var(--wa-muted); }

/* Add/Edit contract form */
.wa-contract-form .wa-field { margin-bottom: 1rem; max-width: none; }
.wa-contract-form input[type="text"],
.wa-contract-form select,
.wa-contract-form textarea {
	padding: 0.55rem 0.7rem;
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
	font-size: 1rem;
	width: 100%;
}
.wa-cform-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 24px; }
@media (max-width: 700px) { .wa-cform-grid { grid-template-columns: 1fr; } }
.wa-ms-row {
	display: grid;
	grid-template-columns: 2fr 1fr 1fr auto auto;
	gap: 12px;
	align-items: end;
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
	padding: 0.9rem;
	margin-bottom: 10px;
}
@media (max-width: 700px) { .wa-ms-row { grid-template-columns: 1fr 1fr; } }
.wa-ms-row label { display: flex; flex-direction: column; gap: 4px; }
.wa-ms-row label span { font-family: var(--wa-sans); font-size: 0.58rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--wa-ink); }
.wa-ms-row input { border: 1px solid var(--wa-line); padding: 0.45rem 0.55rem; font-size: 0.95rem; }
.wa-ms-paid { align-items: center; }
.wa-ms-paid input[type="checkbox"] { width: 20px; height: 20px; accent-color: var(--wa-olive, #6e7458); }
.wa-ms-remove { background: none; border: 0; color: var(--wa-muted); cursor: pointer; font-size: 16px; padding: 6px; }
.wa-ms-remove:hover { color: var(--wa-warn); }

/* ================================================================== *
 * Gravity Perks Nested Forms (GPNF) — the Event Info subform sections
 * (Processional, Reception Entrances, Decor, Portrait Shot List …).
 *
 * GPNF ships its own chrome: a blue "Add Entry" button, text Edit/Delete
 * links, and a white tingle.js modal with a grey footer. All three read as
 * a different product bolted onto the page, so this pulls them onto the
 * WedAssist palette (client notes 2026-08-04).
 *
 * Icon glyphs are Tabler codepoints (ti-pencil eb04, ti-trash eb41,
 * ti-plus eb0b) — the webfont is already enqueued for the `ti ti-*` classes.
 * ================================================================== */

/* Gravity Forms' theme framework paints its checks, focus rings and hovers from
   --gf-color-primary, which defaults to GF blue — the palette's ink everywhere
   instead (client note 2026-08-10). */
.wedassist-app .gform-theme {
	--gf-color-primary: var(--wa-ink);
	--gf-color-primary-rgb: 20, 19, 15;
	--gf-color-primary-contrast: var(--wa-white);
	--gf-color-primary-contrast-rgb: 255, 255, 255;
	--gf-color-primary-darker: #000;
	--gf-color-primary-lighter: #33312a;
	--gf-ctrl-border-color-focus: var(--wa-ink);
}

/* Radio / checkbox choice labels were the one text still in GF's own sans stack —
   "leftover font selection" (client note 2026-08-10). Serif-body, like every other
   answer on these forms. */
.wedassist-app .gform_wrapper .gfield_checkbox label,
.wedassist-app .gform_wrapper .gfield_radio label {
	font-family: var(--wa-serif-body);
	font-size: 1.05rem;
	color: var(--wa-text);
}

/* The Entrance # / Combination # is a storage key, not something the couple types
   (client note 2026-08-10, "same as app"): the modal field auto-fills and hides,
   the grid column hides with it, and Processional order is drag-and-drop instead.
   display:none only — entrance-order.php still reads these cells' textContent for
   the next number, and the modal input still takes the auto-filled value. */
.wa-form-embed--25 .gpnf-nested-entries thead th:first-child,
.wa-form-embed--45 .gpnf-nested-entries thead th:first-child,
.wa-form-embed--46 .gpnf-nested-entries thead th:first-child,
.wa-form-embed--25 .gpnf-nested-entries tbody tr[data-entryid] td:first-child,
.wa-form-embed--45 .gpnf-nested-entries tbody tr[data-entryid] td:first-child,
.wa-form-embed--46 .gpnf-nested-entries tbody tr[data-entryid] td:first-child { display: none; }
body.wedassist-app #field_62_8,
body.wedassist-app #field_53_15 { display: none; }

/* Drag-to-reorder affordance on the entrance grids (25 / 46) + portrait combos (45,
   Phase 2 sheet). */
.wa-form-embed--25 .gpnf-nested-entries tbody tr[data-entryid],
.wa-form-embed--45 .gpnf-nested-entries tbody tr[data-entryid],
.wa-form-embed--46 .gpnf-nested-entries tbody tr[data-entryid] { cursor: grab; }
.wa-form-embed--25 .gpnf-nested-entries tbody tr.wa-drag-src,
.wa-form-embed--45 .gpnf-nested-entries tbody tr.wa-drag-src,
.wa-form-embed--46 .gpnf-nested-entries tbody tr.wa-drag-src { opacity: 0.35; }
.wa-form-embed--25 .gpnf-nested-entries tbody tr.wa-drag-src td,
.wa-form-embed--45 .gpnf-nested-entries tbody tr.wa-drag-src td,
.wa-form-embed--46 .gpnf-nested-entries tbody tr.wa-drag-src td { border-bottom-color: var(--wa-gold); }

/* The entrance EDIT grid reads like the portrait shot list page (Phase 2 sheet):
   entrance-grid.php injects an ENTRANCE NN cell (.wa-entcell) and re-renders the
   people cell stacked name-over-role, parking the Knockout-owned source nodes in
   .wa-entsrc. Header row goes — the cells are self-labelled now. */
.wa-form-embed--25 .gpnf-nested-entries thead,
.wa-form-embed--46 .gpnf-nested-entries thead { display: none; }
.wa-entcell { white-space: nowrap; width: 150px; vertical-align: top; }
.wa-entcell .wa-ent__lab { display: inline-block; width: auto; margin-right: 0.7rem; }
.wa-entcell .wa-ent__num { display: inline-block; width: auto; font-size: 1.9rem; line-height: 1.1; vertical-align: -0.18em; }
.wa-entsrc { display: none; }
/* Tighter than the read view's 3rem: the cell is ~330px, and two stacked people with
   long role labels must still sit side by side (measured: 147+142px + gap). */
.wa-ent__people--grid { display: flex; gap: 0.9rem 1.6rem; flex-wrap: wrap; }

/* --- entry rows: pencil + trash, matching the Timeline list --- */
.wedassist-app .gpnf-nested-entries { border-collapse: collapse; width: 100%; }
.wedassist-app .gpnf-nested-entries thead th {
	font-family: var(--wa-sans);
	font-size: 0.75rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--wa-muted);
	font-weight: 400;
	background: none;
	border: 0;
	border-bottom: 1px solid var(--wa-line);
	padding: 0.6rem 0.75rem;
}
.wedassist-app .gpnf-nested-entries td {
	border: 0;
	border-bottom: 1px solid var(--wa-line-2);
	background: none;
	font-family: var(--wa-serif-body);
	font-size: 1.05rem;
	color: var(--wa-text);
	padding: 0.85rem 0.75rem;
}
.wedassist-app .gpnf-nested-entries tr:last-child td { border-bottom: 0; }
.wedassist-app td.gpnf-row-actions ul {
	display: flex;
	gap: 16px;
	justify-content: flex-end;
	align-items: center;
	list-style: none;
	margin: 0;
	padding: 0;
}
.wedassist-app td.gpnf-row-actions li { margin: 0; }
/* font-size:0 hides the "Edit"/"Delete" words but keeps them as the button's
   accessible name — the icon alone would leave these unlabelled. */
.wedassist-app td.gpnf-row-actions button {
	background: none;
	border: 0;
	box-shadow: none;
	padding: 4px;
	min-height: 0;
	line-height: 1;
	cursor: pointer;
	text-decoration: none;
	font-size: 0;
	color: var(--wa-muted);
}
.wedassist-app td.gpnf-row-actions button::before {
	font-family: 'tabler-icons';
	font-size: 18px;
	font-weight: 400;
}
/* Duplicate: a third row action injected next to GPNF's own Edit and Delete (Portrait only).
   Inherits the icon-button treatment above; \ea7a is Tabler's "copy" (ti-copy). */
.wedassist-app td.gpnf-row-actions li.wa-dup button::before { content: '\ea7a'; }
.wedassist-app td.gpnf-row-actions li.wa-dup button:hover { background: none; color: var(--wa-ink); }
.wedassist-app td.gpnf-row-actions li.wa-dup button.is-working { opacity: 0.4; pointer-events: none; }
.wedassist-app td.gpnf-row-actions li.edit button::before { content: '\eb04'; }
.wedassist-app td.gpnf-row-actions li.delete button::before { content: '\eb41'; }
.wedassist-app td.gpnf-row-actions li.edit button:hover { background: none; color: var(--wa-ink); }
.wedassist-app td.gpnf-row-actions li.delete button:hover { background: none; color: var(--wa-warn); }

/* --- "Add Entry" as a .wa-csv-btn, same as Timeline's "Add Item" --- */
.wedassist-app button.gpnf-add-entry {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	border: 1px solid var(--wa-ink);
	background: none;
	color: var(--wa-ink);
	font-family: var(--wa-serif-body);
	font-size: 1.05rem;
	font-weight: 400;
	letter-spacing: normal;
	text-transform: none;
	padding: 0.8rem 1.4rem;
	margin-top: 1.5rem;
	border-radius: 0;
	box-shadow: none;
	cursor: pointer;
	transition: 0.15s;
}
.wedassist-app button.gpnf-add-entry::before {
	font-family: 'tabler-icons';
	content: '\eb0b';
	font-size: 18px;
}
.wedassist-app button.gpnf-add-entry:hover { background: var(--wa-ink); color: var(--wa-white); }

/* --- the modal: ivory panel, no boxed-in look, site buttons --- */
.gpnf-modal.tingle-modal { background: rgba(20, 19, 15, 0.72); }
.gpnf-modal .tingle-modal-box {
	background: var(--wa-panel);
	border: 0;
	border-radius: 0;
	box-shadow: 0 24px 60px rgba(20, 19, 15, 0.28);
}
.gpnf-modal .tingle-modal-box__content { background: var(--wa-panel); padding: 2.25rem 2.5rem 1.75rem; }
.gpnf-modal .gpnf-modal-header {
	font-family: var(--wa-serif);
	font-size: 1.9rem;
	font-weight: 600;
	color: var(--wa-ink);
	border-bottom: 1px solid var(--wa-line);
	padding-bottom: 0.7rem;
	margin-bottom: 1.6rem;
}
.gpnf-modal .gform_heading { display: none; } /* empty, but GF still reserves its margin */
.gpnf-modal .tingle-modal-box__footer {
	background: var(--wa-panel);
	border-top: 1px solid var(--wa-line);
	padding: 1.1rem 2.5rem;
}
.gpnf-modal .tingle-btn {
	border-radius: 0;
	font-family: var(--wa-sans);
	font-size: 0.8rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	padding: 0.8rem 2rem;
	transition: 0.15s;
}
.gpnf-modal .tingle-btn--primary { background: var(--wa-ink); color: var(--wa-white); border: 1px solid var(--wa-ink); }
.gpnf-modal .tingle-btn--primary:hover { background: #000; }
.gpnf-modal .tingle-btn--default { background: none; color: var(--wa-ink); border: 1px solid var(--wa-line); }
.gpnf-modal .tingle-btn--default:hover { background: none; border-color: var(--wa-ink); }
/* tingle's own close X hovers BLUE out of the box — ink, like everything else
   (client note 2026-08-10). */
.wedassist-app .tingle-modal__close:hover,
.wedassist-app .tingle-modal__close:focus-visible { background: var(--wa-ink); color: var(--wa-white); }

/* people picker — GF's theme draws a 2px box around every option ("no bounding
   box lines"); flatten it to plain rows on the panel wash. */
.gpnf-modal .gform_wrapper .gfield { margin-bottom: 1.4rem; }
.gpnf-modal .gform_wrapper .gfield_label { margin-bottom: 0.35rem; }
.gpnf-modal .gform_wrapper input[type="number"] { padding: 0.35rem 0.25rem; }
/* ---- Edit Entry people picker (search + checkboxes + drag to order, 2026-08-05) ----
   The real <select multiple> stays in the DOM and stays the thing that posts; it is only hidden
   once the widget has taken it over, so with the script absent the native control is still there. */
.wa-pp__native { display: none !important; }
.wa-pp__lbl {
	font-family: var(--wa-sans);
	font-size: 0.55rem;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: var(--wa-muted);
	margin-bottom: 0.4rem;
}
.wa-pp__lbl + * { margin-top: 0; }
.wa-pp .wa-pp__lbl:not(:first-child) { margin-top: 1.2rem; }
.wa-pp__chosen { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.wa-pp__pick {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 0.45rem 0.5rem;
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
	cursor: grab;
}
.wa-pp__pick.is-dragging { opacity: 0.4; }
.wa-pp__pick.is-over { border-color: var(--wa-gold); background: var(--wa-line-2); }
.wa-pp__grip { color: var(--wa-muted); font-size: 15px; flex: none; }
.wa-pp__body { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
.wa-pp__nm { font-family: var(--wa-serif-body); font-size: 1rem; color: var(--wa-text); }
.wa-pp__ro {
	font-family: var(--wa-sans);
	font-size: 0.52rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--wa-muted);
}
.wa-pp__tools { display: flex; align-items: center; gap: 2px; flex: none; }
.wa-pp .wa-pp__mv,
.wa-pp .wa-pp__rm {
	width: 24px;
	height: 24px;
	padding: 0;
	border: 0;
	background: none;
	box-shadow: none;
	border-radius: 0;
	color: var(--wa-muted);
	font-size: 14px;
	line-height: 1;
	cursor: pointer;
}
.wa-pp .wa-pp__mv:hover,
.wa-pp .wa-pp__rm:hover { background: none; color: var(--wa-ink); }
.wa-pp .wa-pp__rm:hover { color: var(--wa-warn); }
.wa-pp .wa-pp__mv:disabled { opacity: 0.25; cursor: default; }
.wa-pp__empty,
.wa-pp__hint {
	font-family: var(--wa-serif-body);
	font-style: italic;
	font-size: 0.9rem;
	color: var(--wa-muted);
	margin: 0.35rem 0 0;
}
.wa-pp input.wa-pp__search {
	width: 100%;
	margin-bottom: 0.5rem;
	padding: 0.4rem 0.15rem;
	font-size: 0.95rem;
}
/* The GF modal's theme CSS gives these elements explicit display values, which beats the
   UA's [hidden] rule — so search-filtered options and the idle quick-add button stayed
   visible. Scoped kill switch: inside the picker, hidden MEANS hidden. */
.wa-pp [hidden] { display: none !important; }

/* Quick-add: create the searched-for name on Our People without leaving the modal. */
.wa-pp .wa-pp__addnew {
	display: block;
	width: 100%;
	margin-top: 0.5rem;
	padding: 0.45rem 0.6rem;
	border: 1px dashed var(--wa-gold);
	background: none;
	box-shadow: none;
	border-radius: 0;
	font-family: var(--wa-sans);
	font-size: 0.7rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--wa-gold-d);
	cursor: pointer;
}
.wa-pp .wa-pp__addnew:hover { border-style: solid; background: var(--wa-panel); color: var(--wa-ink); }
.wa-pp .wa-pp__addnew:disabled { opacity: 0.5; cursor: default; }
/* Quick-add step 2: Title + Relationship (client round 2026-08-15). */
.wa-pp .wa-pp__quick { margin-top: 0.5rem; padding: 0.6rem; border: 1px solid var(--wa-line); background: var(--wa-panel); }
.wa-pp .wa-pp__qfield { display: block; margin-bottom: 0.5rem; }
.wa-pp .wa-pp__qlbl { display: block; font-family: var(--wa-sans); font-size: 0.65rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--wa-muted); margin-bottom: 0.2rem; }
.wa-pp .wa-pp__qfield select, .wa-pp .wa-pp__qother { width: 100%; font-size: 0.85rem; padding: 0.3rem; }
.wa-pp .wa-pp__qother { margin-top: 0.3rem; }
.wa-pp .wa-pp__qgo { border-style: solid; background: var(--wa-ink); color: var(--wa-white); margin-top: 0.2rem; }
/* Single-select mode — the ceremony escort dropdowns (client round 2026-08-19). One pick, so
   nothing to drag; the options list already caps and scrolls on its own. */
.wa-pp--single { max-width: 34rem; margin-top: 0.4rem; }
.wa-pp--single .wa-pp__pick { cursor: default; }

/* ---- Add-person trigger + dialog (client round 2026-08-23) ----
   The escort and reception-toast questions used to render the whole picker open on the page:
   two dozen names under a one-answer question. Now the answer is a line, and the picker is a
   dialog behind the button. */
.wa-pp-trigger {
	display: flex;
	align-items: center;
	gap: 0.9rem;
	flex-wrap: wrap;
	margin-top: 0.45rem;
}
.wa-pp-trigger__who { min-width: 0; }
.wa-pp-trigger__none { font-family: var(--wa-serif-body); font-style: italic; color: var(--wa-muted); }
.wa-pp-trigger__chip {
	display: inline-flex;
	align-items: baseline;
	gap: 0.5rem;
	padding: 0.35rem 0.5rem 0.35rem 0.75rem;
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	border-radius: 999px;
}
.wa-pp-trigger__clear {
	background: none;
	border: 0;
	padding: 0 0.15rem;
	line-height: 1;
	color: var(--wa-muted);
	cursor: pointer;
}
.wa-pp-trigger__clear:hover { color: var(--wa-ink); background: none; }
.wa-pp-trigger__btn {
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	padding: 0.55rem 1.1rem;
	border: 1px solid var(--wa-ink);
	background: transparent;
	color: var(--wa-ink);
	cursor: pointer;
}
.wa-pp-trigger__btn:hover { background: var(--wa-ink); color: var(--wa-white); }

.wa-pp-dialog {
	border: 0;
	border-top: 3px solid var(--wa-gold);
	border-radius: 8px;
	padding: 0;
	max-width: 640px;
	width: calc(100% - 2rem);
	background: var(--wa-panel);
	color: var(--wa-text);
	box-shadow: 0 22px 60px rgba(20, 19, 15, 0.28);
}
.wa-pp-dialog::backdrop { background: rgba(20, 19, 15, 0.55); }
dialog.wa-pp-dialog:modal { margin: auto; }
.wa-pp-dialog[open] { position: relative; z-index: 6; margin: 1.5rem auto; }
.wa-pp-dialog__head { padding: 1.5rem 1.7rem 0; }
.wa-pp-dialog__title { font-family: var(--wa-serif); font-weight: 500; font-size: 1.6rem; margin: 0; color: var(--wa-ink); }
.wa-pp-dialog__body { padding: 1.1rem 1.7rem 0; max-height: 62vh; overflow-y: auto; }
.wa-pp-dialog__body .wa-pp--single { max-width: none; margin-top: 0; }
.wa-pp-dialog__foot {
	display: flex;
	align-items: center;
	gap: 0.6rem;
	padding: 1.3rem 1.7rem 1.5rem;
}
.wa-pp-dialog__gap { flex: 1 1 auto; }
.wa-pp-dialog__btn {
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	padding: 0.6rem 1.3rem;
	border: 1px solid var(--wa-ink);
	background: transparent;
	color: var(--wa-ink);
	cursor: pointer;
}
.wa-pp-dialog__btn--go { background: var(--wa-ink); color: var(--wa-white); }
.wa-pp-dialog__btn--go:hover { background: var(--wa-ink); color: var(--wa-white); opacity: 0.85; }
/* Form styling beats the hidden attribute inside a GF wrapper, same as the Edit Guest dialog. */
.wa-pp-dialog [hidden] { display: none !important; }
/* Solid (black) variant of the section head button — Portrait's Add Combination
   (client round 2026-08-15: "same black add combination button as in edit screen"). */
.wa-btn-edit--solid { background: var(--wa-ink); color: var(--wa-white); margin-right: 0.5rem; }
.wa-btn-edit--solid:hover { background: var(--wa-ink); color: var(--wa-white); opacity: 0.85; }
/* Portrait phase with nothing in it yet */
.wa-combo__empty { font-family: var(--wa-serif-body); font-style: italic; color: var(--wa-muted); margin: 0.4rem 0 1.2rem; }

/* Inspo: the saved palette as little circles, inline with the button row (client round
   2026-08-19 mockup). The label is gone; the standalone form is the no-Pinterest fallback. */
.wa-inspo-palstrip { display: flex; align-items: center; gap: 0.55rem; margin: 0.4rem 0 0.9rem; }
/* Inside .wa-inspo-menu the row is a flex item, so it carries no margin of its own and gets a
   little breathing room from the last button. */
.wa-inspo-palstrip--inline { margin: 0 0 0 0.35rem; }
.wa-inspo-paldot {
	width: 26px;
	height: 26px;
	border-radius: 50%;
	border: 1px solid rgba(0, 0, 0, 0.12);
	display: inline-block;
	transition: transform .12s;
}
.wa-inspo-paldot:hover { transform: scale(1.15); }
.wa-pp .wa-pp__qgo:hover { background: var(--wa-ink); color: var(--wa-white); }
/* Two columns on purpose. Gravity Forms' own theme lays bare <ul>s out in an auto-flow grid, which
   left this list in ragged columns of different widths — so it is declared here rather than
   inherited. 29 people in one column would be nothing but scrolling. */
.wa-pp .wa-pp__opts {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
	gap: 0;
	max-height: 34vh;
	overflow-y: auto;
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
}
.wa-pp__opt { margin: 0; border-bottom: 1px solid var(--wa-line-2); min-width: 0; }
.wa-pp__opt label {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 0.4rem 0.6rem;
	margin: 0;
	cursor: pointer;
}
.wa-pp__opt label:hover { background: var(--wa-line-2); }
.wa-pp__opt input[type="checkbox"],
.wa-pp__opt input[type="radio"] { flex: none; margin: 0; width: auto; }

.gpnf-modal .gform_wrapper select[multiple] {
	border: 1px solid var(--wa-line);
	background: transparent;
	padding: 0.25rem 0;
	height: auto;
	resize: none;
}
.gpnf-modal .gform_wrapper select[multiple] option {
	border: 0;
	background: transparent;
	padding: 0.5rem 0.85rem;
	font-family: var(--wa-serif-body);
	font-size: 1.05rem;
	color: var(--wa-text);
}
.gpnf-modal .gform_wrapper select[multiple] option:checked { background: var(--wa-line); color: var(--wa-ink); }
@media (max-width: 700px) {
	.gpnf-modal .tingle-modal-box__content { padding: 1.5rem 1.25rem 1.25rem; }
	.gpnf-modal .tingle-modal-box__footer { padding: 1rem 1.25rem; }
	.gpnf-modal .gpnf-modal-header { font-size: 1.5rem; }
	.wedassist-app .gpnf-nested-entries td,
	.wedassist-app .gpnf-nested-entries thead th { padding: 0.65rem 0.4rem; }
	.wedassist-app td.gpnf-row-actions ul { gap: 10px; }
}

/* ================================================================== *
 * Ceremony Seating chart (web builder, 2026-08-04; revised 2026-08-05)
 * The couple's names over each side | aisle | rows of chairs that scroll
 * rather than wrap. Same markup serves the editor and the read view —
 * `readonly` drops the controls.
 * ================================================================== */
.wa-cs { margin-top: 0.5rem; }

/* Where the altar bar used to be. Which partner is house-left changes venue to venue, so the two
   names sit over their own side with a swap control between them (client note 2026-08-05). */
.wa-cs__front {
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	gap: 0 1.25rem;
	color: var(--wa-ivory);
	background: var(--wa-ink);
	padding: 0.85rem 1rem;
	margin-bottom: 1.75rem;
	/* Client round 2026-08-15: the couple bar sits at half width, centered over the aisle. */
	width: 50%;
	margin-left: auto;
	margin-right: auto;
}
.wa-cs__front-name {
	font-family: var(--wa-serif);
	font-size: 1.3rem;
	text-align: center;
	overflow-wrap: anywhere;
}
.wa-cs__front-mid {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	margin: 0;
	color: var(--wa-line);
	font-family: var(--wa-serif);
	font-size: 1.1rem;
}
.wa-cs .wa-cs__swapsides {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	padding: 0;
	border: 1px solid rgba(255, 255, 255, 0.28);
	background: none;
	box-shadow: none;
	border-radius: 0;
	color: var(--wa-ivory);
	font-size: 16px;
	line-height: 1;
	cursor: pointer;
}
.wa-cs .wa-cs__swapsides:hover { background: rgba(255, 255, 255, 0.12); border-color: var(--wa-ivory); }
.wa-cs__swaptxt {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}
.wa-cs__board { display: grid; grid-template-columns: 1fr auto 1fr; gap: 0 1.25rem; align-items: start; }
/* A grid item defaults to min-width:auto, i.e. "never smaller than my content". With rows that
   scroll, the content is as wide as the longest row — so without this the sides refuse to shrink,
   the 1fr columns blow past their share, and the whole panel overflows the page instead of the
   chairs scrolling inside it. Same reason .wa-cs__row needs it. */
.wa-cs__side,
.wa-cs__row { min-width: 0; }
.wa-cs__aisle {
	align-self: stretch;
	min-height: 100%;
	width: 34px;
	background: repeating-linear-gradient(180deg, var(--wa-line) 0 10px, transparent 10px 20px);
	position: relative;
}
.wa-cs__aisle span {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%) rotate(180deg);
	writing-mode: vertical-rl;
	font-family: var(--wa-sans);
	font-size: 0.55rem;
	letter-spacing: 0.3em;
	text-transform: uppercase;
	color: var(--wa-muted);
	background: var(--wa-ivory);
	padding: 0.5rem 0.15rem;
}
/* The old "Bride's Side" / "Groom's Side" headings were dropped at the client's request
   (2026-08-05); this is now the couple's own name, and it appears ONLY once the sides stack. In
   the aisle layout .wa-cs__front labels both columns; stacked, that bar lines up with nothing, so
   the label moves onto each block. */
.wa-cs__sidename {
	display: none;
	font-family: var(--wa-serif);
	font-size: 1.25rem;
	color: var(--wa-ink);
	margin: 0 0 0.85rem;
	padding-bottom: 0.5rem;
	border-bottom: 1px solid var(--wa-line);
}
/* The numbering rule, said once under the couple bar (sheet row 30, 2026-09-16). One line of
   markup serves the builder and the read view, so both carry it. The negative top margin tucks it
   under the bar's own 1.75rem gap rather than adding a second one. */
.wa-cs__hint {
	font-family: var(--wa-sans);
	font-size: 0.72rem;
	letter-spacing: 0.04em;
	color: var(--wa-muted);
	text-align: center;
	margin: -1.2rem 0 1.4rem;
}
.wa-cs__none { color: var(--wa-muted); font-family: var(--wa-serif-body); font-style: italic; }
.wa-cs__row { display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.6rem; }
/* Row-level reversal on the right stays: it keeps the "Row N" label at the OUTSIDE end of the
   row on both sides (far left on the left block, far right on the right block). The chairs
   reverse separately, below. */
.wa-cs__side--right .wa-cs__row { flex-direction: row-reverse; }
/* SEAT 1 IS THE AISLE SEAT on both sides (sheet row 30, approved 2026-09-16). The aisle is the
   inside edge of each block, so the LEFT side counts right-to-left and the right side counts
   left-to-right. Until this round chair 1 was the OUTSIDE seat and the RIGHT block was the
   mirrored one; the flip is drawing + wording only — seat numbers are stored exactly as before,
   and the event file (seating_side_grid, now mirroring the LEFT grid) and the app's
   seating.mirror_left flag moved with it. Visual order only: drag and the seat picker key off
   data-wa-seat, not position. */
.wa-cs__side--left .wa-cs__chairs { flex-direction: row-reverse; }
/* The row label inherits .wa-ent__lab/.wa-ent__num from the entrance rows, which are sized for a
   full-width read view: a 2.2rem Cormorant numeral in fixed 62px/50px boxes. Stacked in a narrow
   column beside 54px chairs that read as oversized and overflowed its own column — and Cormorant's
   "1" is a bare stroke that looks like a Roman numeral I next to it. So: one compact baseline row,
   intrinsic widths, and lining/tabular figures out of the body serif. */
.wa-cs__rownum {
	display: flex;
	flex-direction: row;
	align-items: baseline;
	gap: 6px;
	min-width: 62px;
	flex: 0 0 auto;
	padding-top: 1.1rem;
}
.wa-cs__rownum .wa-ent__lab {
	width: auto;
	font-size: 0.55rem;
	letter-spacing: 0.18em;
	color: var(--wa-muted);
}
.wa-cs__rownum .wa-ent__num {
	width: auto;
	font-family: var(--wa-serif-body);
	font-size: 1.15rem;
	line-height: 1;
	font-variant-numeric: lining-nums tabular-nums;
}
/* A row is ONE line, always: adding a chair must never push the row onto a second line, so the
   chairs never wrap and the box scrolls sideways instead (client note 2026-08-05). Chairs are a
   fixed width rather than a share of the row, because sharing is what made them shrink as the row
   grew — which is the same failure as wrapping, just quieter. */
.wa-cs__chairs {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scroll-snap-type: x proximity;
	gap: 6px;
	/* Width of the chairs it holds, capped by what the row can spare — NOT `flex: 1`. Filling the
	   row left the +/-/delete controls stranded at the far edge, a couple of hundred pixels from
	   the last chair they act on. */
	flex: 0 1 auto;
	min-width: 0;
	padding-bottom: 4px; /* room for the scrollbar so it never sits on a chair's border */
}

.wa-cs__seat {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 2px;
	flex: 0 0 88px;
	scroll-snap-align: start;
	min-height: 54px;
	padding: 0.4rem 0.5rem;
	border: 1px solid var(--wa-line);
	background: var(--wa-panel);
	color: var(--wa-text);
	font-family: var(--wa-serif-body);
	font-size: 0.9rem;
	line-height: 1.15;
	text-decoration: none;
	overflow: hidden;
	transition: 0.12s;
}
a.wa-cs__seat { cursor: pointer; }
a.wa-cs__seat:hover { border-color: var(--wa-ink); }
.wa-cs__seat.is-empty { background: transparent; border-style: dashed; }
.wa-cs__seat.is-open { border-color: var(--wa-gold); box-shadow: inset 0 0 0 1px var(--wa-gold); }
.wa-cs__seat.is-dragging { opacity: 0.4; }
.wa-cs__seat.is-drop { border-color: var(--wa-gold); background: var(--wa-line-2); }
/* Brief marker on a chair that was just added, so the scroll lands somewhere legible. */
.wa-cs__seat.is-new { animation: wa-cs-new 1.6s ease-out 1; }
@keyframes wa-cs-new {
	0%, 60% { border-color: var(--wa-gold); background: var(--wa-line-2); }
	100% { border-color: var(--wa-line); background: transparent; }
}
@media (prefers-reduced-motion: reduce) { .wa-cs__seat.is-new { animation: none; } }
/* No .wa-cs__seatno: seat numbers were dropped from the chairs at the client's request
   (2026-08-05). They survive in each chair's aria-label and in the picker's title, which is where
   they still do work — telling you which chair you just opened. */
.wa-cs__seatname { display: block; overflow-wrap: anywhere; text-align: center; }

/* Stacked, not in a row: three 28px buttons side by side took ~100px out of every row's chair
   budget, which is the difference between five chairs fitting on one line and wrapping. */
.wa-cs__chairbtns { display: flex; flex-direction: column; gap: 3px; align-self: center; flex: 0 0 auto; }
.wa-cs__chairbtn {
	width: 28px;
	height: 28px;
	line-height: 1;
	border: 1px solid var(--wa-line);
	background: none;
	color: var(--wa-muted);
	font-size: 15px;
	cursor: pointer;
	padding: 0;
	border-radius: 0;
	box-shadow: none;
}
.wa-cs__chairbtn:hover { background: none; border-color: var(--wa-ink); color: var(--wa-ink); }
.wa-cs__chairbtn--danger:hover { border-color: var(--wa-warn); color: var(--wa-warn); }
.wa-cs__addrow {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	width: 100%;
	justify-content: center;
	border: 1px dashed var(--wa-line);
	background: none;
	color: var(--wa-muted);
	font-family: var(--wa-serif-body);
	font-size: 1rem;
	padding: 0.7rem 1rem;
	margin-top: 0.5rem;
	border-radius: 0;
	box-shadow: none;
	cursor: pointer;
	text-transform: none;
	letter-spacing: normal;
}
.wa-cs__addrow:hover { background: none; border-color: var(--wa-ink); color: var(--wa-ink); }

/* Seat picker: since client round 2026-09-01 this is the site-wide people picker's dialog
   (.wa-pp-dialog + .wa-pp--single, styled with the picker above), reused piece for piece so the
   two popups read as one control — "make the people selector/add new person pop up operate the
   same as the other ones throughout the website". Only what the picker has no equivalent for is
   styled here. With JS it opens modal; without, PHP renders it [open] in normal flow and the
   picker's own [open] rule handles that. */
.wa-cs-dialog::backdrop { background: rgba(20, 19, 15, 0.72); }
.wa-cs-dialog .wa-pp__pick { cursor: default; }
.wa-cs-dialog .wa-pp__tools form { margin: 0; display: inline-flex; }
/* Cancel is a link (the no-JS close), dressed as the picker's button. */
.wa-pp-dialog a.wa-pp-dialog__btn { display: inline-block; text-decoration: none; line-height: normal; }
/* Someone already in another chair says so on their row; picking them moves them here. */
.wa-cs__busynote { display: none; font-style: normal; }
.wa-pp__opt.is-busy .wa-cs__busynote { display: inline; }
.wa-pp__opt.is-busy .wa-pp__nm { color: var(--wa-muted); }
/* No-JS only: the add-person form shows its own name fields (scripting takes them from the search). */
.wa-cs-dialog .wa-cs__qname input { width: 100%; font-size: 0.85rem; padding: 0.3rem; }

/* In-flight state: the pick posts and the page reloads, so show the dialog working instead of
   leaving it looking inert. pointer-events, not `disabled` — that would strip the submitter's
   name/value from the request already on its way. */
.wa-cs-dialog.is-working { cursor: progress; }
.wa-cs-dialog.is-working .wa-pp-dialog__body,
.wa-cs-dialog.is-working .wa-pp-dialog__foot { pointer-events: none; opacity: 0.55; }

/* Full-width variant: section nav becomes a strip across the top so the chart gets the page. */
/* A row of chairs is a wide artifact: at the standard 1180px each side gets ~350px, which wraps
   five chairs onto two lines and breaks the "a row is one line" reading. This screen alone opens
   up. The section nav stays a left rail as on every other Event Info screen — moving it to a top
   strip made the page jump on every section change (client note 2026-08-04). */
.wa-main--wide { max-width: min(1560px, calc(100vw - 3rem)); }

/* The sides NEVER stack (Phase 2 sheet: "the left and right is a key piece to the builder",
   and the couple's names must always head their sides). A narrow viewport just shows fewer
   chairs per side — the rows already scroll sideways — and below ~1000px the chrome shrinks
   with it: smaller chairs, a slimmer aisle, tighter names. "Can be as small as needs to fit." */
@media (max-width: 1000px) {
	.wa-cs__board { gap: 0 0.5rem; }
	.wa-cs__aisle { width: 18px; }
	.wa-cs__aisle span { display: none; }
	.wa-cs__front { gap: 0 0.5rem; padding: 0.6rem 0.6rem; width: 100%; }
	.wa-cs__front-name { font-size: 1.05rem; }
	.wa-cs__seat { flex: 0 0 64px; min-height: 46px; font-size: 0.78rem; padding: 0.3rem 0.35rem; }
	.wa-cs__rownum { min-width: 0; padding-top: 0.9rem; }
	.wa-cs__rownum .wa-ent__lab { display: none; }
	.wa-cs__row { gap: 4px; }
	.wa-cs__chairs { gap: 4px; }
	.wa-cs__chairbtn { width: 24px; height: 24px; }
}

/* Wedding Details photo: GF's auto "Accepted file types" rules line duplicates the
   description's Max-5mb note — the description line is the only verbiage kept
   (client round 2026-08-15). */
#gform_wrapper_207 .gform_fileupload_rules { display: none; }

/* --- Table Breakdown rework round 1 (client mockup, 2026-08-15) ------------------------- */
.wa-seattools { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
.wa-seattools__views { margin: 0; }
.wa-seattools__search { flex: 1 1 220px; max-width: 320px; }

.wa-seatstats {
	display: flex;
	align-items: stretch;
	gap: 2.2rem;
	flex-wrap: wrap;
	background: var(--wa-panel);
	border: 1px solid var(--wa-line-2);
	padding: 1.1rem 1.6rem;
	margin: 1rem 0 1.4rem;
}
/* Two groups, so the band can only break between meals and headcounts — never mid-meal
   (client round 2026-08-23: "move kids meals up to be on the same row as the other meals").
   Narrow screens are the one case where a meal row that cannot fit is allowed to wrap. */
.wa-seatstats__grp { display: flex; align-items: stretch; gap: 2.2rem; flex-wrap: nowrap; }
/* Divider lives on the headcount group, so when the band wraps it travels with the group instead
   of dangling off the end of the meal row. */
.wa-seatstats__grp--counts { border-left: 1px solid var(--wa-line-2); padding-left: 2.2rem; }
@media (max-width: 640px) {
	.wa-seatstats__grp { flex-wrap: wrap; justify-content: center; gap: 1.2rem 1.6rem; }
	.wa-seatstats__grp--counts { border-left: 0; padding-left: 0; }
}
.wa-seatstat { display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 64px; }
.wa-seatstat__n { font-family: var(--wa-serif); font-size: 1.9rem; line-height: 1.1; color: var(--wa-ink); }
.wa-seatstat__l {
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wa-muted);
	margin-top: 0.25rem;
}
.wa-seatstat__sub { font-family: var(--wa-sans); font-size: 0.58rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--wa-soft, var(--wa-muted)); margin-top: 0.15rem; }
.wa-seatstat__rule { width: 1px; background: var(--wa-line-2); align-self: stretch; }

.wa-seatchip {
	display: inline-block;
	font-family: var(--wa-sans);
	font-size: 0.6rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	border: 1px solid var(--wa-line-2);
	border-radius: 999px;
	padding: 0.2rem 0.65rem;
	background: var(--wa-white, #fff);
	color: var(--wa-ink);
	white-space: nowrap;
}
.wa-seatchip--pill { background: var(--wa-ink); color: var(--wa-ivory, #fff); border-color: var(--wa-ink); }
.wa-table-card__chips { display: inline-flex; gap: 0.35rem; flex-wrap: wrap; margin-left: 0.5rem; }

.wa-table-card__addguest {
	display: inline-block;
	margin-top: 0.6rem;
	font-family: var(--wa-serif-body);
	font-style: italic;
	font-size: 0.95rem;
	color: var(--wa-gold);
	text-decoration: none;
}
.wa-table-card__addguest:hover { color: var(--wa-ink); }

.wa-addguest { background: var(--wa-panel); border: 1px solid var(--wa-line-2); padding: 1.2rem 1.4rem; margin: 0 0 1.4rem; }
/* Form styling beats the hidden attribute here, like in the GF modal ([[wa-pp]] fix). */
.wa-addguest [hidden] { display: none !important; }

.wa-seataz { max-width: 760px; }
.wa-seataz__letter {
	font-family: var(--wa-serif);
	font-style: italic;
	font-size: 1.4rem;
	color: var(--wa-gold);
	margin: 1.4rem 0 0.3rem;
	border-bottom: 1px solid var(--wa-line-2);
	padding-bottom: 0.25rem;
}
/* Drag-and-drop (round 2, 2026-08-16) */
.wa-seat__grip { color: var(--wa-soft, var(--wa-muted)); cursor: grab; margin-right: 0.35rem; touch-action: none; }
.wa-seat__grip:active { cursor: grabbing; }
.wa-table-card__seats > li.is-dragging { opacity: 0.45; }
.wa-drop-hint { outline: 2px dashed var(--wa-gold); outline-offset: 3px; }
#wa-tb-board.is-busy, #wa-items-live.is-busy { opacity: 0.55; pointer-events: none; }
/* Decor/Additional-Info reorder (2026-08-16): item cards borrow the seating grip. */
.wa-decor.is-dragging, .wa-note.is-dragging { opacity: 0.45; }
.wa-decor .wa-seat__grip, .wa-note .wa-seat__grip { margin-right: 0.45rem; }
.wa-seat__arrows { display: inline-flex; gap: 0.2rem; margin-left: 0.35rem; }
.wa-seat__arrow { padding: 0.15rem 0.35rem; line-height: 1; }

.wa-seataz__row { display: flex; align-items: center; gap: 1rem; padding: 0.55rem 0; border-bottom: 1px solid var(--wa-line); }
/* The search filter toggles the hidden attribute; explicit display rules above would
   override it otherwise (the recurring [hidden]-vs-CSS gotcha). */
.wa-seataz__row[hidden], .wa-seatboard [hidden], .wa-table-card[hidden] { display: none !important; }
.wa-seataz__who { flex: 1 1 auto; display: flex; flex-direction: column; }
.wa-seataz__where {
	font-family: var(--wa-sans);
	font-size: 0.66rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wa-muted);
	white-space: nowrap;
}

/* ================================================================================
 * Table Breakdown — round 3 restyle to the client's reference mockup
 * (punch-list 2026-08-19, sheet rows 4+5).
 *
 * Everything here is two-class or element+class: the Elementor kit ships single-class
 * button rules that otherwise win, and it paints its own background / box-shadow on
 * every <button>, so each button rule below states both explicitly.
 * ================================================================================ */

/* ---- hero band: REMOVED (client round 2026-08-23) ----
   The ink band with the couple's names is gone from the markup: "remove top black section with
   wedding name altogether, not sure where that came from". Rules deleted with it. */

/* ---- toolbar ---- */
.wedassist-app .wa-tb-bar {
	display: flex;
	align-items: center;
	gap: 0.7rem;
	flex-wrap: wrap;
	padding-bottom: 1rem;
	border-bottom: 1px solid var(--wa-line);
	margin-bottom: 0.4rem;
}
.wedassist-app .wa-tb-bar__search { flex: 1 1 220px; max-width: 300px; border-radius: 999px; }
.wedassist-app .wa-tb-bar__actions { display: flex; gap: 0.6rem; flex-wrap: wrap; margin-left: auto; }

/* segmented BY TABLE / A TO Z */
.wedassist-app .wa-tb-seg {
	display: inline-flex;
	border: 1px solid var(--wa-line);
	border-radius: 999px;
	overflow: hidden;
	background: var(--wa-panel);
}
.wedassist-app .wa-tb-seg__btn {
	padding: 0.62rem 1.3rem;
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--wa-text);
	background: none;
	text-decoration: none;
	transition: 0.2s;
}
.wedassist-app .wa-tb-seg__btn:hover { color: var(--wa-ink); background: rgba(180, 146, 78, 0.12); }
.wedassist-app .wa-tb-seg__btn.is-current { background: var(--wa-ink); color: var(--wa-ivory); }

/* pill buttons — outline by default, gold for the spreadsheet pair */
.wedassist-app .wa-csv-btn.wa-tb-btn,
.wedassist-app button.wa-tb-btn,
.wedassist-app a.wa-tb-btn {
	border-radius: 999px;
	border: 1px solid var(--wa-ink);
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: var(--wa-ink);
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	font-weight: 500;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	padding: 0.75rem 1.4rem;
	line-height: 1.1;
}
.wedassist-app .wa-csv-btn.wa-tb-btn:hover,
.wedassist-app button.wa-tb-btn:hover,
.wedassist-app a.wa-tb-btn:hover {
	background: var(--wa-ink);
	background-image: none;
	box-shadow: none;
	color: var(--wa-ivory);
}
.wedassist-app .wa-csv-btn.wa-tb-btn--gold,
.wedassist-app button.wa-tb-btn--gold,
.wedassist-app a.wa-tb-btn--gold {
	border-color: var(--wa-gold);
	background: var(--wa-gold);
	background-image: none;
	box-shadow: none;
	color: var(--wa-white);
}
.wedassist-app .wa-csv-btn.wa-tb-btn--gold:hover,
.wedassist-app button.wa-tb-btn--gold:hover,
.wedassist-app a.wa-tb-btn--gold:hover {
	border-color: var(--wa-gold-d);
	background: var(--wa-gold-d);
	background-image: none;
	box-shadow: none;
	color: var(--wa-white);
}
.wedassist-app .wa-csv-btn.wa-tb-btn--danger,
.wedassist-app button.wa-tb-btn--danger {
	border-color: var(--wa-warn);
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: var(--wa-warn);
}
.wedassist-app .wa-csv-btn.wa-tb-btn--danger:hover,
.wedassist-app button.wa-tb-btn--danger:hover {
	background: var(--wa-warn);
	background-image: none;
	box-shadow: none;
	color: var(--wa-white);
}
.wedassist-app button.wa-mini.wa-tb-mini {
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: var(--wa-ink);
	border: 1px solid var(--wa-line);
	border-radius: 999px;
}
.wedassist-app button.wa-mini.wa-tb-mini:hover {
	background: var(--wa-ink);
	background-image: none;
	box-shadow: none;
	color: var(--wa-ivory);
	border-color: var(--wa-ink);
}

/* ---- stats band ---- */
.wedassist-app .wa-seatstats {
	justify-content: center;
	gap: clamp(1.1rem, 4vw, 3.4rem);
	background: none;
	border: 0;
	border-bottom: 1px solid var(--wa-line);
	padding: 1.7rem 1rem 1.5rem;
	margin: 0 0 1.8rem;
}
.wedassist-app .wa-seatstat__n { font-size: 2.5rem; font-weight: 500; }
.wedassist-app .wa-seatstat__l {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0.45rem;
	font-size: 0.6rem;
	letter-spacing: 0.3em;
	margin-top: 0.5rem;
}
.wa-swatch { width: 9px; height: 9px; border-radius: 50%; display: inline-block; flex: none; }
.wa-swatch.is-beef { background: var(--wa-ink); }
.wa-swatch.is-fish { background: var(--wa-gold); }
.wa-swatch.is-chicken { background: var(--wa-white); border: 1.5px solid var(--wa-ink); }
.wa-swatch.is-alt1 { background: var(--wa-gold-d); }
.wa-swatch.is-alt2 { background: var(--wa-olive); }
.wa-swatch.is-alt3 { background: var(--wa-gold-l); }

.wedassist-app .wa-vendormeals { margin: 0; }
.wedassist-app .wa-vendormeals__n {
	width: 3.4ch;
	min-width: 0;
	padding: 0;
	border: 0;
	border-bottom: 1px dashed var(--wa-line);
	background: none;
	box-shadow: none;
	text-align: center;
	font-family: var(--wa-serif);
	font-size: 2.5rem;
	line-height: 1.1;
	color: var(--wa-ink);
	-moz-appearance: textfield;
}
.wedassist-app .wa-vendormeals__n::-webkit-outer-spin-button,
.wedassist-app .wa-vendormeals__n::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.wedassist-app .wa-vendormeals__n:focus { border-bottom-color: var(--wa-gold); outline: none; }

/* ---- empty state (sheet row 4) ---- */
.wedassist-app .wa-tb-empty {
	font-family: var(--wa-serif-body);
	font-size: 1.35rem;
	color: var(--wa-muted);
	padding: 2.4rem 0 4rem;
	margin: 0;
}
.wedassist-app .wa-tb-empty span { margin-left: 0.6rem; }

/* ---- table cards ---- */
.wedassist-app .wa-table-card {
	border: 1px solid var(--wa-line-2);
	border-radius: 6px;
	padding: 0;
	overflow: hidden;
	background: var(--wa-panel);
	margin-bottom: 1.6rem;
}
.wedassist-app .wa-table-card__head {
	display: flex;
	align-items: center;
	gap: 0.8rem;
	flex-wrap: wrap;
	margin: 0;
	padding: 0.9rem 1.2rem;
	background: var(--wa-ink);
	color: var(--wa-ivory);
	position: relative;
}
.wedassist-app .wa-table-card__head::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	height: 1.5px;
	background: linear-gradient(90deg, var(--wa-gold), transparent 70%);
}
.wedassist-app .wa-table-card__name {
	font-family: var(--wa-serif);
	font-weight: 500;
	font-size: 1.55rem;
	line-height: 1;
	color: var(--wa-ivory);
	margin: 0;
}
.wedassist-app .wa-table-card__meta { color: rgba(248, 244, 236, 0.6); letter-spacing: 0.26em; }
.wedassist-app .wa-table-card__chips { margin-left: auto; }
.wedassist-app .wa-table-card__head .wa-seatchip {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	background: rgba(248, 244, 236, 0.08);
	border-color: rgba(203, 178, 115, 0.45);
	color: var(--wa-ivory);
}
.wedassist-app .wa-table-card__head .wa-swatch.is-beef { box-shadow: 0 0 0 1.5px var(--wa-gold-l); }
.wedassist-app .wa-table-card__head .wa-swatch.is-chicken { border-color: var(--wa-gold-l); }
.wedassist-app .wa-table-card__shape select {
	background: rgba(248, 244, 236, 0.08);
	border: 1px solid rgba(203, 178, 115, 0.45);
	color: var(--wa-ivory);
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	padding: 0.28rem 0.5rem;
	border-radius: 999px;
}
.wedassist-app .wa-table-card__shape select option { color: var(--wa-ink); }
.wedassist-app .wa-table-card__remove { margin: 0; }
.wedassist-app button.wa-tremove {
	background: none;
	background-image: none;
	box-shadow: none;
	border: 1px solid rgba(248, 244, 236, 0.3);
	color: rgba(248, 244, 236, 0.72);
	border-radius: 999px;
	font-family: var(--wa-sans);
	font-size: 0.55rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	padding: 0.34rem 0.9rem;
	cursor: pointer;
	transition: 0.2s;
}
.wedassist-app button.wa-tremove:hover {
	background: none;
	background-image: none;
	box-shadow: none;
	border-color: #e0a99e;
	color: #e0a99e;
}
.wedassist-app button.wa-tremove.wa-tremove--seat:hover { border-color: var(--wa-gold-l); color: var(--wa-gold-l); }
/* "Change number…" sits in the same head bar as Remove Table and has to read as the same kind of
   control, but it is a link (the no-JS path is a real ?wa_renumber_at= URL), so it cannot inherit
   button.wa-tremove. Element+class here, like the rules above: Elementor's kit styles bare .wa-*
   classes on links and would otherwise repaint this gold-on-white. */
.wedassist-app a.wa-trenumber {
	border: 1px solid rgba(248, 244, 236, 0.3);
	color: rgba(248, 244, 236, 0.72);
	border-radius: 999px;
	font-family: var(--wa-sans);
	font-size: 0.55rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	padding: 0.34rem 0.9rem;
	text-decoration: none;
	white-space: nowrap;
	transition: 0.2s;
}
.wedassist-app a.wa-trenumber:hover { border-color: var(--wa-gold-l); color: var(--wa-gold-l); }

/* ---- seat rows ---- */
.wedassist-app .wa-table-card__seats {
	list-style: none;
	margin: 0;
	padding: 0.35rem 1.2rem 0.4rem;
}
.wedassist-app .wa-table-card__seats > li {
	display: grid;
	grid-template-columns: auto auto 1fr auto auto auto;
	align-items: center;
	gap: 0.55rem 0.85rem;
	margin: 0;
	padding: 0.55rem 0.2rem;
	border-bottom: 1px solid rgba(20, 19, 15, 0.06);
	cursor: pointer;
	transition: background 0.2s;
}
.wedassist-app .wa-table-card__seats > li:last-child { border-bottom: 0; }
.wedassist-app .wa-table-card__seats > li:hover { background: rgba(203, 178, 115, 0.14); }
.wa-seat__num {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	border-radius: 50%;
	border: 1px solid var(--wa-gold-l);
	background: var(--wa-ivory);
	color: var(--wa-gold);
	font-family: var(--wa-sans);
	font-size: 0.68rem;
	font-variant-numeric: lining-nums tabular-nums;
	flex: none;
}
.wa-guestrow__name { font-family: var(--wa-serif-body); font-size: 1.02rem; color: var(--wa-text); }
.wa-guestrow__name b { font-weight: 600; }
/* The mockup's gold "VIP tag" pill. WedAssist has no VIP field — the person's Title, or
   their Relationship to the couple, is the fact that pill was standing in for, so that is
   what rides here. A short one (MOB, FOG) gets the mockup's solid gold; a written-out
   relationship would shout on every row, so it reads as a quiet outline chip instead. */
.wa-guestrow__tag {
	display: inline-block;
	margin-left: 0.55rem;
	font-family: var(--wa-sans);
	font-size: 0.52rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	padding: 0.15rem 0.55rem;
	border-radius: 999px;
	border: 1px solid var(--wa-line);
	background: none;
	color: var(--wa-muted);
	vertical-align: middle;
}
.wa-guestrow__tag.is-vip {
	border-color: var(--wa-gold);
	background: var(--wa-gold);
	color: var(--wa-white);
}
.wa-guestrow__diet {
	display: inline-block;
	margin-left: 0.55rem;
	font-family: var(--wa-serif-body);
	font-style: italic;
	font-size: 0.86rem;
	color: var(--wa-gold);
}
.wa-guestrow__edit {
	opacity: 0;
	transition: opacity 0.2s;
	font-family: var(--wa-sans);
	font-size: 0.55rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--wa-gold);
	text-decoration: none;
	white-space: nowrap;
}
.wa-guestrow:hover .wa-guestrow__edit,
.wa-guestrow__edit:focus-visible { opacity: 1; }

.wa-mealpill {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 92px;
	font-family: var(--wa-sans);
	font-size: 0.58rem;
	font-weight: 500;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	padding: 0.32rem 0.85rem;
	border-radius: 999px;
	border: 1px solid transparent;
	white-space: nowrap;
}
.wa-mealpill.is-beef { background: var(--wa-ink); color: var(--wa-ivory); }
.wa-mealpill.is-fish { background: var(--wa-gold); color: var(--wa-white); }
.wa-mealpill.is-chicken { background: var(--wa-ivory); border-color: var(--wa-ink); color: var(--wa-ink); }
.wa-mealpill.is-alt1 { background: var(--wa-gold-d); color: var(--wa-white); }
.wa-mealpill.is-alt2 { background: var(--wa-olive); color: var(--wa-white); }
.wa-mealpill.is-alt3 { background: var(--wa-gold-l); color: var(--wa-ink); }
.wa-mealpill--none { background: none; border-color: var(--wa-line-2); color: var(--wa-muted); font-style: italic; }

.wedassist-app .wa-table-card__empty {
	font-family: var(--wa-serif-body);
	font-style: italic;
	font-size: 1rem;
	color: var(--wa-muted);
	text-align: center;
	padding: 1.3rem 0 0.4rem;
	margin: 0;
}
.wedassist-app .wa-table-card__addguest { margin: 0.2rem 1.2rem 1rem; }

/* ---- A to Z ---- */
.wedassist-app .wa-seataz { max-width: 900px; margin: 0 auto; }
.wedassist-app .wa-seataz__row { cursor: pointer; padding: 0.6rem 0.4rem; transition: background 0.2s; }
.wedassist-app .wa-seataz__row:hover { background: rgba(203, 178, 115, 0.14); }
.wedassist-app .wa-seataz__who { flex-direction: row; align-items: baseline; }

/* ---- Edit Guest dialog ---- */
.wa-tb-dialog {
	border: 0;
	border-top: 3px solid var(--wa-gold);
	border-radius: 8px;
	padding: 0;
	max-width: 540px;
	width: calc(100% - 2rem);
	background: var(--wa-panel);
	color: var(--wa-text);
	box-shadow: 0 22px 60px rgba(20, 19, 15, 0.28);
}
.wa-tb-dialog::backdrop { background: rgba(20, 19, 15, 0.55); }
dialog.wa-tb-dialog:modal { margin: auto; }
.wa-tb-dialog[open] { position: relative; z-index: 5; margin: 1.5rem auto; }
.wa-tb-dialog__form { margin: 0; padding: 1.8rem 1.9rem 1.6rem; }
.wa-tb-dialog__head { display: flex; align-items: baseline; gap: 1rem; }
.wa-tb-dialog__title { font-family: var(--wa-serif); font-weight: 500; font-size: 1.8rem; margin: 0; color: var(--wa-ink); }
.wa-tb-dialog__close { margin-left: auto; color: var(--wa-muted); font-size: 1.5rem; line-height: 1; text-decoration: none; }
.wa-tb-dialog__close:hover { color: var(--wa-ink); }
.wa-tb-dialog__sub { font-size: 0.85rem; color: var(--wa-muted); margin: 0.3rem 0 1.3rem; }
.wa-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.9rem 1.1rem; }
.wa-field-grid .wa-field { display: flex; flex-direction: column; gap: 0.3rem; }
.wa-field-grid .wa-field--span2 { grid-column: 1 / -1; }
.wa-field__hint { font-family: var(--wa-sans); font-size: 0.58rem; letter-spacing: 0.04em; color: var(--wa-muted); }
.wa-tb-dialog__actions { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; margin-top: 1.5rem; }
.wa-tb-dialog__gap { flex: 1 1 auto; }
/* Form styling beats the hidden attribute here, like in the GF modal ([[wa-pp]] fix). */
.wa-tb-dialog [hidden] { display: none !important; }

/* ---- Seat picker dialog (client round 2026-08-23) ----
   Took over from the standing Unseated rail: the roster only appears when a table asks for it. */
.wa-seatpick { max-width: 620px; }
.wa-seatpick .wa-searchbox { margin-bottom: 0.9rem; padding: 0.6rem 0.9rem; }
.wa-seatpick .wa-searchbox input { font-size: 1rem; }
.wa-seatpick__list { list-style: none; margin: 0; padding: 0; max-height: 46vh; overflow-y: auto; }
.wa-seatpick__list li { display: block; width: 100%; margin: 0; padding: 0.4rem 0; border-bottom: 1px solid var(--wa-line-2); color: var(--wa-text); }
.wa-seatpick__list li:last-child { border-bottom: 0; }
.wa-seatpick__list label { display: flex; align-items: center; gap: 0.55rem; cursor: pointer; }
.wa-seatpick__nomatch { margin: 0.9rem 0 0; }
.wa-seatpick__table { flex: 0 0 auto; }
.wa-seatpick__table select { min-width: 140px; }

/* ---- Change number dialog (client round 2026-09-14, sheet row 40) ----
   Reuses the .wa-tb-dialog shell; only the "that number is taken" line is its own. */
.wa-renumber { max-width: 460px; }
.wa-renumber .wa-field-grid { grid-template-columns: 1fr 1fr; }
.wa-renumber input#wa-rn-cur { opacity: 0.65; }
.wa-renumber p.wa-renumber__taken {
	margin: 1rem 0 0;
	padding: 0.7rem 0.9rem;
	border-left: 3px solid var(--wa-gold);
	background: rgba(203, 178, 115, 0.12);
	font-size: 0.85rem;
	color: var(--wa-text);
}

@media (max-width: 780px) {
	.wedassist-app .wa-table-card__seats > li { grid-template-columns: auto auto 1fr auto; }
	.wedassist-app .wa-guestrow__edit { display: none; }
	.wedassist-app .wa-seat__arrows { grid-column: 4; }
	.wedassist-app .wa-mealpill { grid-column: 3 / -1; justify-self: start; }
	.wa-field-grid { grid-template-columns: 1fr; }
	.wedassist-app .wa-tb-bar__actions { margin-left: 0; width: 100%; }
}

@media print {
	.wedassist-app .wa-tb-bar,
	.wedassist-app .wa-seat__grip,
	.wedassist-app .wa-seat__arrows,
	.wedassist-app .wa-guestrow__edit,
	.wedassist-app .wa-tb-dialog,
	.wedassist-app .wa-table-card__addguest,
	.wedassist-app .wa-trenumber,
	.wedassist-app .wa-table-card__remove { display: none !important; }
}

/* =======================================================================
   Vendor "booked?" dialogs — Questionnaire (client row 10, 2026-08-19)
   The block is Gravity Forms' own markup, moved into a <dialog> that lives
   inside the section's form (see template-parts/vendor-dialog.php), so it is
   styled like the site's other dialogs while GF keeps owning the fields.
   ======================================================================= */
.wa-vd {
	border: 0;
	border-top: 3px solid var(--wa-gold);
	border-radius: 8px;
	padding: 1.8rem 1.9rem 1.6rem;
	max-width: 720px;
	width: calc(100% - 2rem);
	background: var(--wa-panel);
	color: var(--wa-text);
	box-shadow: 0 22px 60px rgba(20, 19, 15, 0.28);
	/* Inside GF's field grid: never let a closed-then-opened dialog claim one column. */
	grid-column: 1 / -1;
}
.wa-vd::backdrop { background: rgba(20, 19, 15, 0.55); }
dialog.wa-vd:modal { margin: auto; max-height: 88vh; overflow-y: auto; }
.wa-vd[open] { position: relative; z-index: 5; margin: 1.5rem auto; }
.wa-vd .wa-vd__fields { margin: 0; padding: 0; }
/* The block's own heading (plugin markup) is the dialog's title. */
.wa-vd .wa-embed__title { margin: 0 2rem 0.2rem 0; font-family: var(--wa-serif); font-weight: 500; font-size: 1.7rem; color: var(--wa-ink); }
.wa-vd .wa-embed__head { margin-bottom: 0.6rem; }

.wa-vd .wa-vd__x {
	position: absolute;
	top: 0.7rem;
	right: 0.9rem;
	border: 0;
	background: none;
	background-image: none;
	box-shadow: none;
	color: var(--wa-muted);
	font-size: 1.6rem;
	line-height: 1;
	padding: 4px 6px;
	cursor: pointer;
}
.wa-vd .wa-vd__x:hover { background: none; box-shadow: none; color: var(--wa-ink); }

.wa-vd .wa-vd__actions { display: flex; align-items: center; justify-content: flex-end; gap: 0.6rem; flex-wrap: wrap; margin-top: 1.5rem; }

/* The stub left in the form where the vendor block was — the reopen affordance. */
.wa-vd-slot {
	grid-column: 1 / -1;
	display: flex;
	align-items: center;
	gap: 0.9rem;
	flex-wrap: wrap;
	margin: 0.2rem 0 0.6rem;
	padding: 0.75rem 1rem;
	border: 1px dashed var(--wa-line);
	border-radius: 6px;
	background: rgba(203, 178, 115, 0.07);
}
.wa-vd-slot__label { font-family: var(--wa-serif); font-size: 1.15rem; color: var(--wa-ink); }
.wa-vd-slot .wa-vd-slot__btn { margin-left: auto; }

/* Buttons: two-class selectors + explicit background/box-shadow so the Elementor
   kit's global <button> rules cannot repaint them. */
.wedassist-app .wa-csv-btn.wa-vd-btn,
.wedassist-app button.wa-vd-btn {
	border-radius: 999px;
	border: 1px solid var(--wa-ink);
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: var(--wa-ink);
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	font-weight: 500;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	padding: 0.7rem 1.3rem;
	line-height: 1.1;
}
.wedassist-app .wa-csv-btn.wa-vd-btn:hover,
.wedassist-app button.wa-vd-btn:hover {
	background: var(--wa-ink);
	background-image: none;
	box-shadow: none;
	color: var(--wa-ivory);
}
.wedassist-app .wa-csv-btn.wa-vd-btn--gold,
.wedassist-app button.wa-vd-btn--gold {
	border-color: var(--wa-gold);
	background: var(--wa-gold);
	background-image: none;
	box-shadow: none;
	color: var(--wa-white);
}
.wedassist-app .wa-csv-btn.wa-vd-btn--gold:hover,
.wedassist-app button.wa-vd-btn--gold:hover {
	border-color: var(--wa-gold-d);
	background: var(--wa-gold-d);
	background-image: none;
	box-shadow: none;
	color: var(--wa-white);
}

/* =======================================================================
   Add New Client + Share — Wedding Details (client rows 36/37, 2026-08-19)
   ======================================================================= */

/* Invite confirmation on the signup card ("You have been invited to join …"). */
.wa-login__note {
	background: rgba(203, 178, 115, 0.14);
	color: var(--wa-ink);
	padding: 0.6rem 0.8rem;
	font-size: 0.9rem;
	margin: 0 0 1rem;
}

.wa-newclient .wa-newclient__form { margin: 0 0 1rem; }
.wa-newclient .wa-field input {
	width: 100%;
	font-family: var(--wa-serif-body);
	font-size: 1rem;
	padding: 0.55rem 0.7rem;
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
	color: var(--wa-text);
}
.wa-newclient .wa-page-hint { margin: 0; }

/* Share trigger sits in the page head next to Pro Tips. */
.wedassist-app .wa-csv-btn.wa-share-btn,
.wedassist-app button.wa-share-btn {
	border-radius: 999px;
	border: 1px solid var(--wa-ink);
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: var(--wa-ink);
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	font-weight: 500;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	padding: 0.7rem 1.3rem;
	line-height: 1.1;
	margin-left: auto;
}
.wedassist-app .wa-csv-btn.wa-share-btn:hover,
.wedassist-app button.wa-share-btn:hover {
	background: var(--wa-ink);
	background-image: none;
	box-shadow: none;
	color: var(--wa-ivory);
}

/* Reuses the Edit Guest dialog shell (.wa-tb-dialog) so every dialog matches. */
.wa-share .wa-share__body { padding: 1.8rem 1.9rem 1.6rem; }
.wa-share .wa-field { display: flex; flex-direction: column; gap: 0.3rem; }
.wa-share #wa-share-url {
	width: 100%;
	font-family: var(--wa-sans);
	font-size: 0.85rem;
	padding: 0.55rem 0.7rem;
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
	color: var(--wa-text);
}
.wa-share .wa-field__hint { margin-top: 0.6rem; }
.wa-share .wa-share__email-field { margin-top: 1rem; }
.wa-share .wa-share__email {
	width: 100%;
	font-family: var(--wa-sans);
	font-size: 0.85rem;
	padding: 0.55rem 0.7rem;
	border: 1px solid var(--wa-line);
	background: var(--wa-white);
	color: var(--wa-text);
}
.wa-share .wa-notice { margin: 0.6rem 0 0; }
.wa-share code { font-size: 0.85rem; letter-spacing: 0.08em; }
.wedassist-app .wa-share .wa-share__x {
	margin-left: auto;
	border: 0;
	background: none;
	background-image: none;
	box-shadow: none;
	color: var(--wa-muted);
	font-size: 1.5rem;
	line-height: 1;
	padding: 0 4px;
	cursor: pointer;
}
.wedassist-app .wa-share .wa-share__x:hover { background: none; box-shadow: none; color: var(--wa-ink); }

/* ================================================================== *
 * ONBOARDING WIZARD (/welcome/) — client-approved 2026-08-19
 *
 * The one DARK screen in an otherwise ivory app: near-black ground, cream
 * serif headings, gold accents, matching the client's mockup. Everything is
 * scoped under body.wedassist-onboarding-page so none of it leaks into the
 * app shell (which carries .wedassist-app instead).
 *
 * Buttons carry a two-class selector plus explicit background /
 * background-image / box-shadow: the Elementor kit's own button rules
 * outrank a single class and would otherwise repaint them.
 * ================================================================== */

body.wedassist-onboarding-page {
	/* !important because the Elementor kit paints body.elementor-kit-6 after this sheet
	   (same specificity, later in the document) and washed the wizard cream. */
	background: #111110 !important;
	color: #f4efe6;
	font-family: var(--wa-serif-body);
	font-weight: 400;
	overflow-x: hidden;
}

.wedassist-onboarding-page .wa-ob {
	min-height: 100vh;
	display: flex;
	flex-direction: column;
	/* The wrapper carries the ink itself too, so the wizard stays dark even if some
	   other body-level rule outranks the one above. */
	background: #111110;
}

/* --- top bar ------------------------------------------------------ */
.wedassist-onboarding-page .wa-ob-top {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 1rem 2rem;
	background: #0c0c0b;
	border-bottom: 1px solid #2a2924;
}
.wedassist-onboarding-page .wa-ob-logo {
	font-family: var(--wa-serif);
	font-size: 1.25rem;
	letter-spacing: 0.22em;
	font-weight: 500;
	color: #fff;
	text-decoration: none;
}
/* The wordmark stays white on hover too — the gold italic & treatment was dropped with the
   monogram (client round 2026-08-31: "just 'WEDASSIST' all in white"). */
.wedassist-onboarding-page .wa-ob-logo:hover { color: #fff; }
.wedassist-onboarding-page .wa-ob-escape { margin: 0; }

/* --- progress rail ------------------------------------------------ */
.wedassist-onboarding-page .wa-ob-progress {
	display: flex;
	justify-content: center;
	flex-wrap: wrap;
	gap: 0.25rem 0.5rem;
	padding: 0.9rem 1rem;
	background: #171613;
	border-bottom: 1px solid #262520;
}
.wedassist-onboarding-page .wa-ob-pstep {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	padding: 0 0.85rem;
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: #6e6a5f;
	text-decoration: none;
}
.wedassist-onboarding-page .wa-ob-pdot {
	width: 22px;
	height: 22px;
	border-radius: 50%;
	border: 1px solid #45423a;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 0.62rem;
	line-height: 1;
}
.wedassist-onboarding-page .wa-ob-pstep.is-done { color: var(--wa-gold-l); }
.wedassist-onboarding-page .wa-ob-pstep.is-done .wa-ob-pdot {
	background: var(--wa-gold);
	border-color: var(--wa-gold);
	color: #fff;
}
.wedassist-onboarding-page .wa-ob-pstep.is-active { color: #f4efe6; }
.wedassist-onboarding-page .wa-ob-pstep.is-active .wa-ob-pdot { border-color: #f4efe6; color: #f4efe6; }
.wedassist-onboarding-page .wa-ob-pstep:hover { color: var(--wa-gold-l); }

/* --- screen / layout ---------------------------------------------- */
.wedassist-onboarding-page .wa-ob-screen {
	flex: 1;
	padding: 4rem 1.5rem 6rem;
}
.wedassist-onboarding-page .wa-ob-wrap {
	max-width: 680px;
	margin: 0 auto;
	text-align: center;
}
.wedassist-onboarding-page .wa-ob-wrap--wide { max-width: 900px; }

.wedassist-onboarding-page .wa-ob-eyebrow {
	font-family: var(--wa-sans);
	font-size: 0.68rem;
	letter-spacing: 0.32em;
	text-transform: uppercase;
	color: var(--wa-gold-l);
	font-weight: 500;
	margin: 0 0 0.6rem;
}
.wedassist-onboarding-page .wa-ob-hero,
.wedassist-onboarding-page .wa-ob-title {
	font-family: var(--wa-serif);
	color: #f6f1e7;
	font-weight: 500;
	line-height: 1.12;
	margin: 0 0 0.7rem;
}
.wedassist-onboarding-page .wa-ob-hero { font-size: 3.2rem; }
.wedassist-onboarding-page .wa-ob-title { font-size: 2.4rem; }
.wedassist-onboarding-page .wa-ob-sub {
	font-size: 1.15rem;
	font-style: italic;
	color: #a9a294;
	max-width: 540px;
	margin: 0 auto 0.5rem;
	line-height: 1.55;
}
.wedassist-onboarding-page .wa-ob-hint {
	display: block;
	font-family: var(--wa-sans);
	font-size: 0.72rem;
	letter-spacing: 0.06em;
	color: #8a8477;
	margin-top: 0.35rem;
}
.wedassist-onboarding-page .wa-ob-error {
	font-family: var(--wa-sans);
	font-size: 0.82rem;
	color: #e3a79a;
	border: 1px solid #4a2f28;
	background: #241a17;
	padding: 0.7rem 1rem;
	margin: 1.2rem auto 0;
	max-width: 480px;
}
.wedassist-onboarding-page .wa-ob-flourish {
	font-size: 1.5rem;
	color: var(--wa-gold);
	letter-spacing: 0.3em;
	margin-bottom: 0.4rem;
}
/* (The .wa-ob-mono circled-& monogram was removed from the welcome screen, 2026-08-31.) */
.wedassist-onboarding-page .wa-ob-meta {
	font-family: var(--wa-sans);
	font-size: 0.65rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: #8a8477;
	margin-top: 1.6rem;
}

/* --- welcome notes ------------------------------------------------ */
.wedassist-onboarding-page .wa-ob-notes {
	display: flex;
	justify-content: center;
	margin: 2.6rem auto 0;
	max-width: 700px;
}
.wedassist-onboarding-page .wa-ob-note {
	flex: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.45rem;
	padding: 0.4rem 1.6rem;
}
.wedassist-onboarding-page .wa-ob-note + .wa-ob-note { border-left: 1px solid #33322c; }
.wedassist-onboarding-page .wa-ob-note__icon {
	width: 34px;
	height: 34px;
	border-radius: 50%;
	border: 1px solid #4a463c;
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--wa-gold-l);
	font-family: var(--wa-serif);
	font-size: 1rem;
}
.wedassist-onboarding-page .wa-ob-note__t {
	font-family: var(--wa-sans);
	font-size: 0.64rem;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: #cfc9bb;
}
.wedassist-onboarding-page .wa-ob-note__d {
	font-family: var(--wa-serif-body);
	font-style: italic;
	font-size: 0.9rem;
	color: #8a8477;
}

/* --- cards + fields ----------------------------------------------- */
.wedassist-onboarding-page .wa-ob-cards {
	display: flex;
	gap: 1.6rem;
	margin-top: 2.4rem;
	text-align: left;
}
.wedassist-onboarding-page .wa-ob-card {
	flex: 1;
	background: #1b1a17;
	border: 1px solid #33322c;
	padding: 1.9rem 1.7rem 1rem;
}
.wedassist-onboarding-page .wa-ob-card__label {
	display: block;
	text-align: center;
	margin-bottom: 1.3rem;
	font-family: var(--wa-sans);
	font-size: 0.66rem;
	letter-spacing: 0.32em;
	text-transform: uppercase;
	color: var(--wa-gold-l);
}
.wedassist-onboarding-page .wa-ob-card--inspo { text-align: center; padding: 2.4rem 1.8rem 2rem; }
.wedassist-onboarding-page .wa-ob-card--inspo.is-selected { border-color: var(--wa-gold); }
.wedassist-onboarding-page .wa-ob-card h2 {
	font-family: var(--wa-serif);
	font-size: 1.55rem;
	font-weight: 500;
	color: #f6f1e7;
	margin: 0 0 0.4rem;
}
.wedassist-onboarding-page .wa-ob-card p {
	font-style: italic;
	color: #8f8a7d;
	font-size: 0.95rem;
	line-height: 1.5;
	margin: 0;
}
.wedassist-onboarding-page .wa-ob-card__icon { font-size: 1.8rem; margin-bottom: 0.8rem; color: var(--wa-gold-l); }
.wedassist-onboarding-page .wa-ob-card__icon--pin { color: #c94f43; }
.wedassist-onboarding-page .wa-ob-connected {
	font-family: var(--wa-sans);
	font-size: 0.7rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: #7fb08f;
	margin-top: 1rem;
}

.wedassist-onboarding-page .wa-ob-narrow { max-width: 360px; margin: 2rem auto 0; }
.wedassist-onboarding-page .wa-ob-field { text-align: left; margin: 0 0 1.3rem; }
.wedassist-onboarding-page .wa-ob-field--center { text-align: center; }
.wedassist-onboarding-page .wa-ob-field label {
	display: block;
	margin-bottom: 0.45rem;
	font-family: var(--wa-sans);
	font-size: 0.64rem;
	letter-spacing: 0.28em;
	text-transform: uppercase;
	color: #8f8a7d;
}
.wedassist-onboarding-page .wa-ob-field input[type="text"],
.wedassist-onboarding-page .wa-ob-field input[type="date"],
.wedassist-onboarding-page .wa-ob-field input[type="file"],
.wedassist-onboarding-page .wa-ob-field select {
	width: 100%;
	border: 1px solid #3a3931;
	background: #f8f6f1;
	color: var(--wa-text);
	font-family: var(--wa-serif-body);
	font-size: 1.05rem;
	padding: 0.75rem 0.85rem;
	border-radius: 2px;
	outline: none;
}
.wedassist-onboarding-page .wa-ob-field input:focus,
.wedassist-onboarding-page .wa-ob-field select:focus { border-color: var(--wa-gold); }
.wedassist-onboarding-page .wa-ob-field input[type="file"] { font-size: 0.85rem; font-family: var(--wa-sans); }

/* --- preview card ------------------------------------------------- */
.wedassist-onboarding-page .wa-ob-preview {
	margin: 2.6rem auto 0;
	max-width: 520px;
	background: #080807;
	border: 1px solid #2e2d27;
	padding: 2.6rem 1.8rem 2.2rem;
	position: relative;
}
.wedassist-onboarding-page .wa-ob-preview__tag {
	position: absolute;
	top: -11px;
	left: 50%;
	transform: translateX(-50%);
	background: var(--wa-gold);
	color: #fff;
	font-family: var(--wa-sans);
	font-size: 0.56rem;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	padding: 0.32rem 0.85rem;
	white-space: nowrap;
}
.wedassist-onboarding-page .wa-ob-preview__photo {
	width: 110px;
	height: 110px;
	border-radius: 50%;
	margin: 0 auto 1.1rem;
	border: 1px solid #4a463e;
	background: #23221f center/cover no-repeat;
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--wa-sans);
	font-size: 0.58rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: #6d6858;
}
.wedassist-onboarding-page .wa-ob-preview__of {
	font-family: var(--wa-sans);
	font-size: 0.56rem;
	letter-spacing: 0.34em;
	text-transform: uppercase;
	color: #8f8a7d;
	margin-bottom: 0.7rem;
}
.wedassist-onboarding-page .wa-ob-preview__names {
	font-family: var(--wa-serif);
	font-size: 2.1rem;
	font-weight: 500;
	line-height: 1.15;
	color: #f4efe6;
}
.wedassist-onboarding-page .wa-ob-preview__date {
	font-style: italic;
	font-size: 1rem;
	color: #bdb6a6;
	margin-top: 0.55rem;
}

/* --- people ------------------------------------------------------- */
.wedassist-onboarding-page .wa-ob-uses {
	display: flex;
	justify-content: center;
	gap: 1.6rem;
	flex-wrap: wrap;
	margin-top: 1rem;
}
.wedassist-onboarding-page .wa-ob-uses span {
	font-family: var(--wa-sans);
	font-size: 0.62rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: #8f8a7d;
	display: inline-flex;
	align-items: center;
	gap: 0.45rem;
}
.wedassist-onboarding-page .wa-ob-uses span:before {
	content: "";
	width: 4px;
	height: 4px;
	border-radius: 50%;
	background: var(--wa-gold);
}
.wedassist-onboarding-page .wa-ob-addrow {
	display: flex;
	gap: 0.8rem;
	align-items: flex-end;
	flex-wrap: wrap;
	margin: 2rem 0 0.6rem;
	text-align: left;
}
.wedassist-onboarding-page .wa-ob-addrow .wa-ob-field { flex: 1 1 170px; margin-bottom: 0; }
.wedassist-onboarding-page .wa-ob-people {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
	gap: 0.9rem;
	margin-top: 1.6rem;
	text-align: center;
}
.wedassist-onboarding-page .wa-ob-person {
	background: #1b1a17;
	border: 1px solid #33322c;
	padding: 1.3rem 0.9rem 1.1rem;
	position: relative;
}
.wedassist-onboarding-page .wa-ob-person__name {
	font-family: var(--wa-serif);
	font-size: 1.3rem;
	font-weight: 500;
	color: #f4efe6;
}
.wedassist-onboarding-page .wa-ob-person__role {
	font-family: var(--wa-sans);
	font-size: 0.68rem;
	letter-spacing: 0.08em;
	color: #8f8a7d;
	margin-top: 0.3rem;
}
.wedassist-onboarding-page .wa-ob-person form { position: absolute; top: 2px; right: 6px; margin: 0; }
.wedassist-onboarding-page .wa-ob-count {
	font-style: italic;
	color: #8f8a7d;
	font-size: 1rem;
	margin-top: 1.3rem;
}

/* --- questionnaire preview ---------------------------------------- */
.wedassist-onboarding-page .wa-ob-qpreview {
	display: flex;
	gap: 0.9rem;
	justify-content: center;
	flex-wrap: wrap;
	margin-top: 2.2rem;
}
.wedassist-onboarding-page .wa-ob-qpill {
	background: #1b1a17;
	border: 1px solid #33322c;
	padding: 1rem 1.3rem;
	text-align: left;
	min-width: 190px;
	flex: 1 1 190px;
	max-width: 260px;
}
.wedassist-onboarding-page .wa-ob-qpill__label {
	display: block;
	font-family: var(--wa-sans);
	font-size: 0.56rem;
	letter-spacing: 0.28em;
	text-transform: uppercase;
	color: #8f8a7d;
	margin-bottom: 0.4rem;
}
.wedassist-onboarding-page .wa-ob-qpill__q {
	display: block;
	font-size: 1rem;
	font-style: italic;
	line-height: 1.35;
	color: #ddd6c8;
}

/* --- upload panel (embeds the Inspiration page's own GF 14) -------- */
.wedassist-onboarding-page .wa-ob-panel {
	background: var(--wa-panel);
	color: var(--wa-text);
	border: 1px solid var(--wa-line);
	padding: 2rem 1.8rem;
	margin-top: 2.2rem;
	text-align: left;
}
.wedassist-onboarding-page .wa-ob-panel h2 {
	font-family: var(--wa-serif);
	color: var(--wa-ink);
	font-size: 1.6rem;
	font-weight: 600;
	margin: 0 0 1rem;
}
.wedassist-onboarding-page .wa-ob-panel .wa-ob-skip { color: var(--wa-gold-d); }
.wedassist-onboarding-page .wa-ob-gf label { color: var(--wa-text); }

/* --- buttons ------------------------------------------------------ *
 * Two-class selectors + explicit background / background-image /
 * box-shadow so the Elementor kit's button rules cannot repaint them.
 * ------------------------------------------------------------------ */
.wedassist-onboarding-page .wa-ob-actions {
	margin-top: 2.6rem;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.85rem;
}
.wedassist-onboarding-page a.wa-ob-btn,
.wedassist-onboarding-page button.wa-ob-btn {
	display: inline-block;
	font-family: var(--wa-sans);
	letter-spacing: 0.22em;
	text-transform: uppercase;
	font-size: 0.72rem;
	font-weight: 400;
	line-height: 1.2;
	padding: 1rem 2.6rem;
	border-radius: 2px;
	cursor: pointer;
	text-decoration: none;
	background-image: none;
	box-shadow: none;
	text-shadow: none;
	transition: background-color 0.25s, color 0.25s, border-color 0.25s;
}
.wedassist-onboarding-page a.wa-ob-btn--primary,
.wedassist-onboarding-page button.wa-ob-btn--primary {
	background: #f4efe6;
	background-image: none;
	box-shadow: none;
	color: #111110;
	border: 1px solid #f4efe6;
}
.wedassist-onboarding-page a.wa-ob-btn--primary:hover,
.wedassist-onboarding-page button.wa-ob-btn--primary:hover {
	background: var(--wa-gold);
	background-image: none;
	box-shadow: none;
	border-color: var(--wa-gold);
	color: #fff;
}
.wedassist-onboarding-page a.wa-ob-btn--welcome,
.wedassist-onboarding-page button.wa-ob-btn--welcome {
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: #f0ebdf;
	border: 1px solid var(--wa-gold);
}
.wedassist-onboarding-page a.wa-ob-btn--welcome:hover,
.wedassist-onboarding-page button.wa-ob-btn--welcome:hover {
	background: var(--wa-gold);
	background-image: none;
	box-shadow: none;
	color: #fff;
}
.wedassist-onboarding-page a.wa-ob-btn--ghost,
.wedassist-onboarding-page button.wa-ob-btn--ghost {
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: #f0ebdf;
	border: 1px solid #6d6858;
	margin-top: 1.3rem;
}
.wedassist-onboarding-page a.wa-ob-btn--ghost:hover,
.wedassist-onboarding-page button.wa-ob-btn--ghost:hover {
	background: transparent;
	background-image: none;
	box-shadow: none;
	border-color: #f0ebdf;
}
.wedassist-onboarding-page a.wa-ob-btn--pin,
.wedassist-onboarding-page button.wa-ob-btn--pin {
	background: #fff;
	background-image: none;
	box-shadow: none;
	color: #c94f43;
	border: 1px solid #c94f43;
	border-radius: 999px;
	padding: 0.8rem 1.7rem;
	letter-spacing: 0.1em;
	margin-top: 1.3rem;
}
.wedassist-onboarding-page a.wa-ob-btn--pin:hover,
.wedassist-onboarding-page button.wa-ob-btn--pin:hover {
	background: #fdf4f3;
	background-image: none;
	box-shadow: none;
	color: #a53c32;
}
.wedassist-onboarding-page a.wa-ob-btn--add,
.wedassist-onboarding-page button.wa-ob-btn--add {
	padding: 0.85rem 1.7rem;
	margin-bottom: 1px;
	flex: 0 0 auto;
}

/* Quiet links: the per-step skips, the global escape, the remove-person x. */
.wedassist-onboarding-page a.wa-ob-skip,
.wedassist-onboarding-page button.wa-ob-btn--skip,
.wedassist-onboarding-page button.wa-ob-btn--escape {
	background: none;
	background-image: none;
	box-shadow: none;
	border: 0;
	padding: 0.6rem;
	font-family: var(--wa-sans);
	font-size: 0.68rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: #8f8a7d;
	cursor: pointer;
	text-decoration: underline;
	text-underline-offset: 4px;
}
.wedassist-onboarding-page a.wa-ob-skip:hover,
.wedassist-onboarding-page button.wa-ob-btn--skip:hover,
.wedassist-onboarding-page button.wa-ob-btn--escape:hover {
	background: none;
	background-image: none;
	box-shadow: none;
	color: #f4efe6;
}
.wedassist-onboarding-page button.wa-ob-person__x {
	background: none;
	background-image: none;
	box-shadow: none;
	border: 0;
	padding: 0 4px;
	color: #6d6858;
	font-family: var(--wa-sans);
	font-size: 0.8rem;
	line-height: 1;
	cursor: pointer;
}
.wedassist-onboarding-page button.wa-ob-person__x:hover {
	background: none;
	background-image: none;
	box-shadow: none;
	color: #f4efe6;
}

/* --- help drawer (a <details>, so it works with no JavaScript) ----- */
.wedassist-onboarding-page .wa-ob-help {
	position: fixed;
	right: 1.5rem;
	bottom: 1.5rem;
	z-index: 60;
	max-width: min(380px, calc(100vw - 3rem));
}
.wedassist-onboarding-page .wa-ob-help > summary.wa-ob-help__btn {
	list-style: none;
	width: 52px;
	height: 52px;
	margin-left: auto;
	border-radius: 50%;
	border: 1px solid var(--wa-gold);
	background: #111110;
	color: var(--wa-gold-l);
	font-family: var(--wa-serif);
	font-size: 1.35rem;
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	box-shadow: 0 6px 24px rgba(0, 0, 0, 0.35);
}
.wedassist-onboarding-page .wa-ob-help > summary.wa-ob-help__btn::-webkit-details-marker { display: none; }
.wedassist-onboarding-page .wa-ob-help__panel {
	position: absolute;
	right: 0;
	bottom: 64px;
	width: min(380px, calc(100vw - 3rem));
	max-height: 70vh;
	overflow-y: auto;
	background: #fbf8f3;
	color: var(--wa-text);
	border: 1px solid var(--wa-line);
	box-shadow: 0 18px 48px rgba(0, 0, 0, 0.4);
	padding: 1.6rem 1.5rem;
	text-align: left;
}
.wedassist-onboarding-page .wa-ob-help__panel .wa-ob-eyebrow { color: var(--wa-gold-d); }
.wedassist-onboarding-page .wa-ob-help__panel h2 {
	font-family: var(--wa-serif);
	color: var(--wa-ink);
	font-size: 1.5rem;
	font-weight: 600;
	margin: 0 0 1rem;
}
.wedassist-onboarding-page .wa-ob-help__item { border-top: 1px solid var(--wa-line-2); padding: 0.8rem 0; }
.wedassist-onboarding-page .wa-ob-help__item > summary {
	cursor: pointer;
	font-family: var(--wa-serif-body);
	font-size: 1rem;
	font-weight: 600;
	color: var(--wa-ink);
	list-style: none;
}
.wedassist-onboarding-page .wa-ob-help__item > summary::-webkit-details-marker { display: none; }
.wedassist-onboarding-page .wa-ob-help__item > summary:after { content: " +"; color: var(--wa-gold); }
.wedassist-onboarding-page .wa-ob-help__item[open] > summary:after { content: " \2013"; }
.wedassist-onboarding-page .wa-ob-help__item p {
	font-style: italic;
	color: #6f6a5e;
	font-size: 0.9rem;
	line-height: 1.6;
	margin: 0.5rem 0 0;
}
.wedassist-onboarding-page .wa-ob-help__foot {
	margin-top: 1.2rem;
	font-style: italic;
	color: var(--wa-muted);
	font-size: 0.85rem;
}

/* --- phones -------------------------------------------------------- */
@media (max-width: 860px) {
	.wedassist-onboarding-page .wa-ob-cards,
	.wedassist-onboarding-page .wa-ob-notes { flex-direction: column; gap: 1.2rem; }
	.wedassist-onboarding-page .wa-ob-note + .wa-ob-note { border-left: 0; border-top: 1px solid #33322c; padding-top: 1.2rem; }
	.wedassist-onboarding-page .wa-ob-screen { padding: 2.5rem 1.1rem 6rem; }
	.wedassist-onboarding-page .wa-ob-hero { font-size: 2.2rem; }
	.wedassist-onboarding-page .wa-ob-title { font-size: 1.8rem; }
	.wedassist-onboarding-page .wa-ob-sub { font-size: 1rem; }
	.wedassist-onboarding-page .wa-ob-top { padding: 0.8rem 1.1rem; }
	.wedassist-onboarding-page .wa-ob-progress { justify-content: flex-start; overflow-x: auto; flex-wrap: nowrap; }
	.wedassist-onboarding-page .wa-ob-pstep { flex: 0 0 auto; }
	.wedassist-onboarding-page .wa-ob-plabel { display: none; }
	.wedassist-onboarding-page .wa-ob-addrow { flex-direction: column; align-items: stretch; }
	.wedassist-onboarding-page .wa-ob-addrow .wa-ob-field { flex: 1 1 auto; margin-bottom: 0.9rem; }
	.wedassist-onboarding-page a.wa-ob-btn,
	.wedassist-onboarding-page button.wa-ob-btn { width: 100%; text-align: center; }
	.wedassist-onboarding-page a.wa-ob-skip,
	.wedassist-onboarding-page button.wa-ob-btn--skip,
	.wedassist-onboarding-page button.wa-ob-btn--escape,
	.wedassist-onboarding-page button.wa-ob-person__x { width: auto; }
	.wedassist-onboarding-page .wa-ob-help { right: 1rem; bottom: 1rem; }
}

/* =========================================================================
   Client punch-list round 2026-08-25
   ========================================================================= */

/* Row 4 — the vendor selector and the public-sharing checkbox are planner tools. Hidden, not
   removed: the identity fields' conditional logic is keyed on the selector's rendered value, so
   taking it out of the DOM collapses the fields the couple is meant to fill in. */
.wa-vendor-planneronly { display: none !important; }

/* Neve/Elementor give bare inputs an explicit display, which beats the UA's [hidden] rule. This
   was patched per-id for the Our People inputs on 8/19 and bit again here, so it is now matched by
   SHAPE: every "__other" free-text twin, wherever it is added next. */
input[id$="-other"][hidden],
.wa-cs-dialog [hidden],
.wa-addguest [hidden] { display: none !important; }


/* Row 8 — invite flags on the Share dialog. */
.wa-share__flags {
	display: flex;
	flex-direction: column;
	gap: 0.6rem;
	margin: 0 0 1.1rem;
}
.wa-share__flag {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	cursor: pointer;
	font-family: var(--wa-sans);
	font-size: 0.82rem;
	color: var(--wa-ink);
}
.wa-share__flag input { margin-top: 3px; flex: none; }
.wa-share__flag em {
	display: block;
	font-style: normal;
	font-size: 0.74rem;
	color: var(--wa-muted);
	margin-top: 2px;
}

/* Row 8 — view-only members. The server refuses the writes (nonce stripped at init, Gravity Forms
   failed in validation); this only takes the controls off the screen so nothing invites a click
   that cannot work. */
.wa-view-only .wa-csv-btn,
.wa-view-only .wa-tb-btn,
.wa-view-only .wa-share-btn,
.wa-view-only .wa-section__edit,
.wa-view-only .wa-pp-trigger__btn,
.wa-view-only .wa-cs__chairbtns,
.wa-view-only .wa-cs__addnewform,
.wa-view-only .wa-cs-dialog .wa-pp-dialog__btn--go,
.wa-view-only .gform_wrapper .gform_footer { display: none !important; }
.wa-view-only .wa-cs__seat { pointer-events: none; }


/* =======================================================================
   Weddings screen (planner wedding list + Active toggles + Add a Wedding)
   Client round 2026-08-26. Rows are a three-column grid — checkbox, wedding,
   Open — that stacks to two rows on a phone with the Open button under the
   name. An inactive row dims (and dims LIVE on the checkbox change, before the
   save posts) so unticking reads as "this drops out of the switcher".
   ======================================================================= */

/* Active / Archive tabs (client round 2026-08-31). Quiet underline tabs in the site's
   letterspaced small-caps voice; the count sits beside each label. */
.wa-wl-tabs {
	display: flex;
	gap: 1.6rem;
	border-bottom: 1px solid var(--wa-line);
	margin: 0 0 1.4rem;
}
.wa-wl-tab {
	font-family: var(--wa-sans);
	font-size: 0.72rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--wa-muted);
	text-decoration: none;
	padding: 0.4rem 0.1rem 0.55rem;
	border-bottom: 2px solid transparent;
	margin-bottom: -1px;
}
.wa-wl-tab:hover { color: var(--wa-ink); }
.wa-wl-tab.is-current { color: var(--wa-ink); border-bottom-color: var(--wa-gold); }
.wa-wl-tab__n { color: var(--wa-gold-d); margin-left: 0.35em; }

.wa-wl-notice {
	background: var(--wa-em-bg);
	color: var(--wa-ink);
	font-family: var(--wa-serif-body);
	font-size: 0.95rem;
	padding: 0.6rem 0.9rem;
	margin: 0 0 1.2rem;
	border-left: 3px solid var(--wa-em);
}
.wa-wl-notice--warn { background: rgba(155, 74, 56, 0.09); border-left-color: var(--wa-warn); }

/* The Open buttons' form: it exists only to carry the nonce, so it takes no space. */
.wa-wl-open { display: contents; }

.wa-weddings { max-width: 820px; }
.wa-weddings .wa-wl-form { margin: 0; }

.wa-wl { list-style: none; margin: 0; padding: 0; }
.wa-wl__head,
.wa-wl__row {
	display: grid;
	grid-template-columns: 4.5rem minmax(0, 1fr) auto;
	align-items: center;
	gap: 0 1rem;
	margin: 0;
	padding: 0.9rem 0;
	border-bottom: 1px solid var(--wa-line-2);
}
.wa-wl__head {
	padding: 0 0 0.5rem;
	border-bottom: 1px solid var(--wa-line);
	font-family: var(--wa-sans);
	font-size: 0.6rem;
	font-weight: 500;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--wa-muted);
}
.wa-wl__row:last-child { border-bottom: 0; }

.wa-wl__c-active { display: flex; justify-content: center; }
.wa-wl__c-active input[type="checkbox"] {
	width: 1.15rem;
	height: 1.15rem;
	margin: 0;
	accent-color: var(--wa-gold);
	cursor: pointer;
}
/* The visible column heading names the checkbox; this label is the accessible one
   per row, so screen readers hear which wedding the box belongs to. */
.wa-wl__box-label {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

.wa-wl__c-name { display: flex; align-items: center; gap: 0.85rem; min-width: 0; }
.wa-wl__photo {
	flex: 0 0 auto;
	width: 46px;
	height: 46px;
	border-radius: 50%;
	object-fit: cover;
	background: var(--wa-line-2);
}
.wa-wl__photo--empty { display: block; border: 1px solid var(--wa-line); background: var(--wa-panel); }
.wa-wl__names { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.wa-wl__title {
	font-family: var(--wa-serif);
	font-size: 1.35rem;
	color: var(--wa-ink);
	line-height: 1.2;
}
.wa-wl__meta { font-family: var(--wa-serif-body); font-size: 0.95rem; color: var(--wa-muted); }
.wa-wl__badge {
	display: inline-block;
	vertical-align: middle;
	margin-left: 0.5rem;
	padding: 0.15rem 0.5rem;
	border: 1px solid var(--wa-gold);
	color: var(--wa-gold-d);
	font-family: var(--wa-sans);
	font-size: 0.55rem;
	font-weight: 500;
	letter-spacing: 0.18em;
	text-transform: uppercase;
}

.wa-wl__c-open { display: flex; justify-content: flex-end; }
.wedassist-app .wa-wl__c-open .wa-csv-btn { padding: 0.45rem 1.1rem; }

/* Inactive: still fully legible (it has to be readable to be re-activated), just
   clearly out of the working set. */
.wa-wl__row.is-inactive .wa-wl__c-name { opacity: 0.5; }

.wa-wl__save {
	display: flex;
	align-items: center;
	justify-content: flex-end;
	gap: 1rem;
	margin-top: 1.4rem;
	padding-top: 1.2rem;
	border-top: 1px solid var(--wa-line);
}
.wa-wl__dirty { font-family: var(--wa-serif-body); font-style: italic; color: var(--wa-gold-d); font-size: 0.95rem; }

/* Add a Wedding sits under the list rather than in a dialog — it is a section of
   this screen, not an interruption of it. */
.wa-weddings + .wa-newclient { margin-top: 1.6rem; }
.wa-newclient h2 { margin-top: 0; }

@media (max-width: 640px) {
	.wa-wl__head { display: none; }
	.wa-wl__row {
		grid-template-columns: 2.5rem minmax(0, 1fr);
		gap: 0.6rem 0.8rem;
	}
	.wa-wl__c-active { justify-content: flex-start; }
	.wa-wl__c-open { grid-column: 2 / -1; justify-content: flex-start; }
	.wa-wl__save { flex-direction: column; align-items: stretch; }
	.wedassist-app .wa-wl__save .wa-csv-btn { width: 100%; justify-content: center; }
}

/* ---- Planner Profile (sheet row 28) ----
   The planner's own company: logo, name, address, phone. Reuses the .wa-newclient form
   skin (same pane, same inputs, same gold Save) so it reads as part of the same app; only
   the logo row is its own, because a preview + a file picker have no equivalent elsewhere. */
.wa-plannerprofile .wa-newclient__form { margin: 0 0 1rem; }
.wa-pp-logo {
	display: flex;
	align-items: center;
	gap: 1.4rem;
	flex-wrap: wrap;
	margin: 0 0 1.4rem;
	padding: 0 0 1.3rem;
	border-bottom: 1px solid var(--wa-line);
}
/* Planner marks are usually ink-on-transparent, so they sit on an ivory plaque — the same
   treatment the couple sees in the footer, so the preview matches the real thing. */
.wa-pp-logo__plaque {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--wa-ivory);
	border-radius: 6px;
	padding: 0.9rem 1.5rem;
	min-width: 150px;
	min-height: 78px;
	flex: 0 0 auto;
}
.wa-pp-logo__plaque img { display: block; max-height: 60px; max-width: 220px; width: auto; height: auto; }
.wa-pp-logo__plaque--empty { border: 1px dashed var(--wa-line); background: transparent; }
.wa-pp-logo__field { flex: 1 1 260px; min-width: 0; }
.wa-plannerprofile .wa-pp-logo__field input[type="file"] {
	font-family: var(--wa-sans);
	font-size: 0.85rem;
	color: var(--wa-text);
}

@media (max-width: 640px) {
	.wa-pp-logo { gap: 1rem; }
	.wa-plannerprofile .wa-tb-dialog__actions .wa-csv-btn { width: 100%; justify-content: center; }
}
