:root {
  --ink: #2a2a2a;
  --body: #5e6068;
  /* Darkened from #8c8e96 (3.3:1) so small print clears WCAG AA 4.5:1 on white. */
  --muted: #6b6d75;
  --cream: #fff6e9;
  --sky-wash: #f6fbff;
  --pink: #ff3e7f;
  --pink-soft: #ffd7e8;
  --green: #3ed17f;
  --green-shadow: #2aae64;
  --blue: #3ec1ff;
  --purple: #a855f7;
  --yellow: #ffc93c;
  /* Style guide: 20px card radius. */
  --card-radius: 20px;
  --radius-xl: 28px;  /* hero media, big cards */
  --radius-lg: 24px;  /* picker card, panels */
  --radius-md: 16px;  /* boxes, notices */
  --radius-sm: 12px;  /* inputs, small panels */
  --pad-x: clamp(20px, 4vw, 88px); /* section side padding, every full-width band */
  /* Availability / status colours (calendar days, legend pills, paid strip). */
  --ok-bg: #e4f8ee;
  --ok-bg-strong: #cdefdd;
  --ok-ink: #1f9d5f;
  --no-bg: #ffe1e6;
  --no-ink: #d63a5a;
  --paid-bg: #f0fbf4;
  --paid-ink: #1f7a47;
  --no-bg-soft: #fff1f4;
  --no-edge: #ffb8c6;
  --no-ink-strong: #b3243f;
  --ok-edge: #b9ecd1;
  --premium-bg: #fff3cf;
  --premium-bg-soft: #fffbee;
  --premium-edge: #ffe8a8;
  --premium-ink: #a86a00;
  --select-bg: #bfefd5;
  --select-ink: #14804a;
  --select-ink-strong: #063d22;
  --faint: #c7ccd3;
  --line: #e6edf2;
  --field-border: #e5e2da;
  /* Content widths: forms and reading columns, page bodies, the map. */
  --content-narrow: 640px;
  --content: 960px;
  --content-wide: 1100px;
  /* Page-level title size shared by the heroes, the rental page and the legal pages. */
  --title-xl: clamp(2.4rem, 4vw, 3.2rem);
  --card-shadow: 0 18px 34px rgba(64, 96, 115, 0.09);
  --display-font:
    "Baloo 2", "Arial Rounded MT Bold", "Trebuchet MS", system-ui, sans-serif;
  --body-font: "Nunito", "Avenir Next", system-ui, sans-serif;
}

* {
  box-sizing: border-box;
}

html {
  background: var(--ink);
}

body {
  margin: 0;
  color: var(--ink);
  font-family: var(--body-font);
  font-weight: 400;
  line-height: 1.45;
  background: #ffffff;
  -webkit-font-smoothing: antialiased;
}

a {
  color: inherit;
  text-decoration: none;
}

/* Links inside running text must be distinguishable without colour
   (WCAG 1.4.1). Components (nav, .button, cards, footer) override by
   specificity and keep their own treatment. */
p a,
li a,
dd a,
td a {
  text-decoration: underline;
  text-underline-offset: 0.15em;
  text-decoration-thickness: 1.5px;
}

/* Shared section heading. Lives here rather than in a component file because
   both page sections and the site-wide CTA band use it. */
.section-title {
  margin: 0;
  font-family: var(--display-font);
  font-size: clamp(2.15rem, 3.2vw, 3rem);
  font-weight: 800;
  line-height: 1.05;
  text-align: center;
}

/* Headline primitives, shared by every page hero. An explicit class rather
   than a descendant span selector, which would also catch the arrow inside a
   CTA button and paint it pink. */
.accent {
  color: var(--pink);
}

.emoji {
  display: inline-block;
  /* Hero headline emoji. One absolute size on the About, Rentals and Contact
     heroes (not an em fraction of each page's headline, which vary): 0.7x the
     About hero's heading size, per client. The homepage hero overrides this
     to scale with its much larger headline (homepage.css). */
  font-size: clamp(1.68rem, 2.94vw, 2.03rem);
  transform: translateY(-0.08em);
}

:focus-visible {
  outline: 3px solid var(--ink);
  outline-offset: 3px;
  border-radius: 6px;
}

/* "‹ All bounce houses" back link. Shared by the rental page and the booking
   form (hence here, not in rental_show.css). */
.rental-back {
  display: inline-block;
  margin-bottom: 18px;
  color: var(--ink); /* pink at body size is 3.4:1; keep the brand as the underline */
  font-weight: 700;
  text-decoration: underline;
  text-decoration-color: var(--pink);
  text-decoration-thickness: 2px;
  text-underline-offset: 0.2em;
}

.rental-back:hover {
  color: var(--pink);
}

/* Screen-reader-only text (e.g. a table header with no visible label). */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* Rails' field_with_errors wrapper (config/initializers/field_error_proc.rb):
   no layout of its own, just a red edge on the control inside it. */
.field_with_errors {
  display: contents;
}

.field_with_errors input,
.field_with_errors textarea,
.field_with_errors select,
.field_with_errors lexxy-editor {
  border-color: var(--no-ink);
}

.skip-link {
  position: absolute;
  left: 16px;
  top: 16px;
  z-index: 10;
  padding: 12px 22px;
  border-radius: 999px;
  background: var(--ink);
  color: #ffffff;
  font-family: var(--display-font);
  font-size: 1rem;
  font-weight: 700;
  transform: translateY(-200%);
}

.skip-link:focus-visible {
  transform: translateY(0);
}

/* Page hero (About, Rentals, Contact): cream band, one soft blob, centred
   title and lead. Pages add their own decorations beside these. */
.page-hero {
  position: relative;
  overflow: hidden;
  padding: 60px var(--pad-x) 64px;
  background: var(--cream);
  text-align: center;
}

.page-hero-blob {
  position: absolute;
  top: -80px;
  right: -60px;
  width: 260px;
  height: 260px;
  border-radius: 50%;
  background: var(--yellow);
  opacity: 0.18;
}

.page-hero-blob--blue {
  background: var(--blue);
}

.page-hero-blob--green {
  right: auto;
  left: -50px;
  background: var(--green);
  opacity: 0.15;
}

.page-hero-inner {
  position: relative;
  z-index: 2;
  max-width: var(--content);
  margin: 0 auto;
}

.page-hero h1 {
  margin: 0;
  color: var(--ink);
  font-family: var(--display-font);
  font-size: var(--title-xl);
  font-weight: 800;
  line-height: 1.1;
}

.page-hero-lead {
  max-width: 56ch;
  margin: 14px auto 0;
  color: var(--body);
  font-size: 1.1rem;
  font-weight: 600;
  line-height: 1.6;
}

/* Text inputs and textareas on the public forms (contact, booking, picker). */
.field-input {
  width: 100%;
  padding: 12px 14px;
  border: 2px solid var(--field-border);
  border-radius: var(--radius-sm);
  background: #fff;
  color: var(--ink);
  font: inherit;
  font-weight: 600;
}

.field-input:focus {
  outline: none;
  border-color: var(--blue);
  box-shadow: 0 0 0 3px rgba(62, 193, 255, 0.22);
}

/* Form error summary (shared/_form_errors). The admin recolours it. */
.form-errors {
  margin-bottom: 20px;
  padding: 14px 18px;
  background: var(--no-bg);
  border-radius: var(--radius-sm);
  color: var(--no-ink-strong);
  font-weight: 700;
}

.form-errors p {
  margin: 0 0 6px;
}

.form-errors ul {
  margin: 0;
  padding-left: 20px;
  font-weight: 600;
}

/* Honeypot field: off-screen for people (not display:none, some bots skip
   hidden inputs), present for bots. Filled in means the submission is dropped. */
.hp {
  position: absolute;
  left: -10000px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

@media (max-width: 640px) {
  .page-hero {
    padding: 44px 20px 48px;
  }

  .page-hero-blob {
    width: 200px;
    height: 200px;
    top: -70px;
  }
}

/* Rendered Action Text (Rental#summary on the homepage card, #description on
   the rental page). Lexxy wraps each body in .lexxy-content; its own
   stylesheet loads in the admin only, so the public rhythm is set here and
   the page files only size/colour the container. Text formatting only:
   images and files are refused by the model. */
.lexxy-content > :first-child {
  margin-top: 0;
}

.lexxy-content > :last-child {
  margin-bottom: 0;
}

.lexxy-content p,
.lexxy-content ul,
.lexxy-content ol,
.lexxy-content blockquote,
.lexxy-content pre {
  margin: 0 0 0.75em;
}

.lexxy-content ul,
.lexxy-content ol {
  padding-left: 1.35em;
}

.lexxy-content h2,
.lexxy-content h3,
.lexxy-content h4 {
  margin: 0.9em 0 0.35em;
  line-height: 1.3;
}

.lexxy-content h2 { font-size: 1.35em; }
.lexxy-content h3 { font-size: 1.15em; }
.lexxy-content h4 { font-size: 1em; }

.lexxy-content blockquote {
  padding-left: 1em;
  border-left: 3px solid var(--blue);
}

.lexxy-content__underline { text-decoration: underline; }
.lexxy-content__strikethrough { text-decoration: line-through; }
.lexxy-content__highlight,
.lexxy-content mark { background: var(--yellow); color: inherit; }
