/* ==========================================================================
   WIDGETIZER DESIGN SYSTEM - ARCH THEME
   ==========================================================================

   TABLE OF CONTENTS
   =================

   1. FOUNDATIONS
      1.1 CSS Reset
      1.2 Design Tokens (CSS Custom Properties)
      1.3 Color Scheme System

   2. BASE STYLES
      2.1 Document Defaults
      2.2 Typography Elements

   3. TYPOGRAPHY UTILITIES
      3.1 Widget Text Classes
      3.2 Block Text Classes

   4. LAYOUT SYSTEM
      4.1 Widget Container System
      4.2 Widget Header & Content
      4.3 Height Modifiers
      4.4 Grid System

   5. COMPONENT UTILITIES
      5.1 Cards
      5.2 Buttons
      5.3 Forms
      5.4 Icons

   6. BLOCK SYSTEM
      6.1 Block Item Background/Overlay

   7. GLOBAL COMPONENTS
      7.1 Site Header
      7.2 Site Footer

   8. UTILITY CLASSES
      8.1 Content Flow
      8.2 Feature Lists
      8.3 Accessibility Helpers

   ========================================================================== */

/* ==========================================================================
   1. FOUNDATIONS
   ========================================================================== */

/* --------------------------------------------------------------------------
   1.1 CSS Reset
   -------------------------------------------------------------------------- */

/* Base: 62.5% = 10px, so 0.1rem = 1px */
html {
  font-size: 62.5%;
}

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

img {
  max-width: 100%;
  display: block;
}

/* --------------------------------------------------------------------------
   1.2 Design Tokens (CSS Custom Properties)
   -------------------------------------------------------------------------- */

:root {
  /* Typography Scale (0.1rem = 1px) */
  --font-size-xs: 1.2rem; /* 12px */
  --font-size-sm: 1.4rem; /* 14px */
  --font-size-base: 1.6rem; /* 16px */
  --font-size-lg: 1.8rem; /* 18px */
  --font-size-xl: 2rem; /* 20px */
  --font-size-2xl: 2.4rem; /* 24px */
  --font-size-3xl: 2.8rem; /* 28px */
  --font-size-4xl: 3.2rem; /* 32px */
  --font-size-5xl: 3.6rem; /* 36px */
  --font-size-6xl: 4rem; /* 40px */

  /* Line Heights */
  --line-height-tight: 1.2;
  --line-height-normal: 1.5;
  --line-height-relaxed: 1.6;

  /* Font Weights */
  --font-weight-medium: 500; /* Static utility */
  --font-weight-semibold: 600; /* Static utility */

  /* Spacing Scale (0.1rem = 1px) */
  --space-xs: 0.8rem; /* 8px */
  --space-sm: 1.2rem; /* 12px */
  --space-md: 1.6rem; /* 16px */
  --space-lg: 2.4rem; /* 24px */
  --space-xl: 3.2rem; /* 32px */
  --space-2xl: 4rem; /* 40px */
  --space-3xl: 4.8rem; /* 48px */
  --space-4xl: 6.4rem; /* 64px */
  --space-5xl: 8rem; /* 80px */
  --space-6xl: 9.6rem; /* 96px */

  /* Section Spacing */
  --section-padding-block: var(--space-4xl);
  --section-padding-inline: var(--space-lg);

  /* Container */
  --container-max-width: 142rem; /* 1420px */

  /* Content Width Constraints */
  --content-width-xs: 40rem; /* 400px - Narrow content (schedules, forms) */
  --content-width-sm: 60rem; /* 600px - Forms, modals */
  --content-width-md: 80rem; /* 800px - Text-heavy sections */
  --content-width-lg: 90rem; /* 900px - Comfortable reading width */

  /* Border Widths (0.1rem = 1px) */
  --border-width-thin: 0.1rem; /* 1px */
  --border-width-medium: 0.2rem; /* 2px */
  --border-width-thick: 0.3rem; /* 3px */

  /* Border */
  --border-color: var(--colors-standard_border_color, #e0e0e0);

  /* Text Colors */
  --text-content: var(--colors-standard_text_content, #333);
  --text-heading: var(--colors-standard_text_heading, #000);
  --text-muted: var(--colors-standard_text_muted, #666);

  /* Background Colors */
  --bg-primary: var(--colors-standard_bg_primary, #fff);
  --bg-secondary: var(--colors-standard_bg_secondary, #f9f9f9);

  /* Accent Colors */
  --accent: var(--colors-standard_accent, #0d47b7);
  --accent-text: var(--colors-standard_accent_text, #fff);
  --rating-star-color: var(--colors-standard_rating_star, #fbbf24);

  /* Primitive Colors */
  --color-white: #ffffff;
  --color-black: #000000;

  /* Icon Sizes */
  --icon-size-xs: 1.6rem; /* 16px */
  --icon-size-sm: 2rem; /* 20px */
  --icon-size-md: 2.4rem; /* 24px */
  --icon-size-lg: 3.2rem; /* 32px */
  --icon-size-xl: 4.8rem; /* 48px */

  /* Transition Speeds */
  --transition-speed-fast: 0.15s;
  --transition-speed-normal: 0.3s;
  --transition-speed-slow: 0.5s;

  /* Widget Background System (defaults) */
  --widget-bg-color: transparent;
  /* Note: background-image is set inline on elements, not via CSS variable */
  --widget-bg-size: cover;
  --widget-bg-position: center;
  --widget-bg-repeat: no-repeat;
  --widget-bg-attachment: scroll;

  /* Widget Overlay System (defaults) */
  --widget-overlay-color: transparent;
  --widget-overlay-opacity: 0.5;

  /* Responsive spacing adjustments */
  @media (min-width: 750px) {
    --section-padding-block: var(--space-5xl);
  }

  @media (min-width: 990px) {
    --section-padding-block: var(--space-6xl);
  }
}

/* --------------------------------------------------------------------------
   1.3 Color Scheme System
   -------------------------------------------------------------------------- */

/* Standard color scheme (default) */
.color-scheme-standard {
  --text-heading: var(--colors-standard_text_heading, #0f172a);
  --text-content: var(--colors-standard_text_content, #1f2937);
  --text-muted: var(--colors-standard_text_muted, #6b7280);
  --border-color: var(--colors-standard_border_color, #e2e8f0);
  --bg-primary: var(--colors-standard_bg_primary, #ffffff);
  --bg-secondary: var(--colors-standard_bg_secondary, #f1f5f9);
  --accent: var(--colors-standard_accent, #1e3a8a);
  --accent-text: var(--colors-standard_accent_text, #ffffff);
  --rating-star-color: var(--colors-standard_rating_star, #fbbf24);
}

/* Highlight color scheme (for emphasis) */
.color-scheme-highlight {
  --text-heading: var(--colors-highlight_text_heading, #ffffff);
  --text-content: var(--colors-highlight_text_content, #eaf3fc);
  --text-muted: var(--colors-highlight_text_muted, #64748b);
  --border-color: var(--colors-highlight_border_color, #526884);
  --bg-primary: var(--colors-highlight_bg_primary, #233c54);
  --bg-secondary: var(--colors-highlight_bg_secondary, #152a3e);
  --accent: var(--colors-highlight_accent, #de1877);
  --accent-text: var(--colors-highlight_accent_text, #ffffff);
  --rating-star-color: var(--colors-highlight_rating_star, #fbbf24);
}

/* ==========================================================================
   2. BASE STYLES
   ========================================================================== */

/* --------------------------------------------------------------------------
   2.1 Document Defaults
   -------------------------------------------------------------------------- */

body {
  font-family: var(
    --typography-body_font-family,
    -apple-system,
    BlinkMacSystemFont,
    "Segoe UI",
    Roboto,
    Ubuntu,
    "Helvetica Neue",
    sans-serif
  );
  font-weight: var(--typography-body_font-weight, 400);
  font-size: var(--font-size-base);
  line-height: var(--line-height-normal);
  color: var(--text-content);
  background-color: var(--bg-primary);
  /* Sticky footer layout */
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  min-height: 100dvh; /* Mobile viewport fix */
}

/* Main content grows to push footer down */
.main-content {
  flex: 1;
}

/* Bold elements use smart bold weight */
strong,
b {
  font-weight: var(--typography-body_font_bold-weight, 700);
}

/* --------------------------------------------------------------------------
   2.2 Typography Elements
   -------------------------------------------------------------------------- */

h1,
h2,
h3,
h4,
h5,
h6 {
  font-family: var(--typography-heading_font-family, inherit);
  font-weight: var(--typography-heading_font-weight, 700);
  color: var(--text-heading);
  line-height: var(--line-height-tight);
  margin-block-end: var(--space-sm);
}

h1 {
  font-size: var(--font-size-5xl);
}
h2 {
  font-size: var(--font-size-4xl);
}
h3 {
  font-size: var(--font-size-3xl);
}
h4 {
  font-size: var(--font-size-2xl);
}
h5 {
  font-size: var(--font-size-xl);
}
h6 {
  font-size: var(--font-size-lg);
}

/* ==========================================================================
   3. TYPOGRAPHY UTILITIES
   ========================================================================== */

/* --------------------------------------------------------------------------
   3.1 Widget Text Classes
   -------------------------------------------------------------------------- */

/* Headlines (Section titles, usually centered) */
/* .widget-headline - No default style, used for semantic hooking */

/* Titles (Card/item titles) */
/* .widget-title - No default style, used for semantic hooking */

/* Subtitles */
/* .widget-subtitle - No default style, used for semantic hooking */

/* Body text / Description */
.widget-text,
.widget-description {
  color: var(--text-content);
}

/* Large text */
.widget-text-large {
  font-size: var(--font-size-lg);
}

/* Small text */
.widget-text-small {
  font-size: var(--font-size-sm);
}

/* Meta text */
.widget-meta {
  font-size: var(--font-size-sm);
  line-height: var(--line-height-normal);
  color: var(--text-muted);
}

/* Eyebrow text (Labels above headlines) */
.widget-eyebrow {
  display: block;
  font-size: var(--font-size-sm);
  font-weight: var(--typography-body_font_bold-weight, 700);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-muted);
  margin-block-end: var(--space-sm);
}

/* --------------------------------------------------------------------------
   3.2 Block Text Classes
   -------------------------------------------------------------------------- */

/* Base block text - resets and default styling */
.block-text {
  margin: 0;
  line-height: var(--line-height-relaxed);
  color: var(--text-content);
}

/* Size modifiers */
.block-text-xs {
  font-size: var(--font-size-xs);
}

.block-text-sm {
  font-size: var(--font-size-sm);
}

.block-text-base {
  font-size: var(--font-size-base);
}

.block-text-lg {
  font-size: var(--font-size-lg);
}

.block-text-xl {
  font-size: var(--font-size-xl);
}

.block-text-2xl {
  font-size: var(--font-size-2xl);
  line-height: var(--line-height-tight);
}

.block-text-3xl {
  font-size: var(--font-size-3xl);
  line-height: var(--line-height-tight);
}

.block-text-4xl {
  font-size: var(--font-size-4xl);
  line-height: var(--line-height-tight);
}

.block-text-5xl {
  font-size: var(--font-size-5xl);
  line-height: var(--line-height-tight);
}

/* Weight modifiers */
.block-text-normal {
  font-weight: var(--typography-body_font-weight, 400);
}

.block-text-medium {
  font-weight: var(--font-weight-medium);
}

.block-text-semibold {
  font-weight: var(--font-weight-semibold);
}

.block-text-heading-weight {
  font-weight: var(--typography-heading_font-weight, 700);
}

.block-text-body-weight {
  font-weight: var(--typography-body_font_weight, 400);
}

.block-text-body-bold {
  font-weight: var(--typography-body_font_bold-weight, 700);
}

/* Style modifiers */
.block-text-uppercase {
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.block-text-muted {
  color: var(--text-muted);
}

.block-text-heading {
  color: var(--text-heading);
}

.block-text-accent {
  color: var(--accent);
}

/* Rich text editor content */
.block-rte {
  & p {
    margin-block-end: var(--space-md);

    &:last-child {
      margin-block-end: 0;
    }
  }

  & a {
    color: var(--accent);
    text-decoration: none;
    transition: text-decoration var(--transition-speed-fast);

    &:hover {
      text-decoration: underline;
    }
  }
}

/* ==========================================================================
   4. LAYOUT SYSTEM
   ========================================================================== */

/* --------------------------------------------------------------------------
   4.1 Widget Container System
   -------------------------------------------------------------------------- */

/* Widget wrapper (handles background only, no spacing) */
.widget {
  position: relative;
  padding-inline: var(--section-padding-inline);
  background-color: var(--widget-bg-color, transparent);
  /* background-image is set inline on elements with .has-bg-image class */
  background-size: var(--widget-bg-size, cover);
  background-position: var(--widget-bg-position, center);
  background-repeat: var(--widget-bg-repeat, no-repeat);
  background-attachment: var(--widget-bg-attachment, scroll);

  /* Overlay pseudo-element */
  &.has-overlay::before {
    content: "";
    position: absolute;
    inset: 0;
    background-color: var(--widget-overlay-color, transparent);
    opacity: var(--widget-overlay-opacity, 0.5);
    z-index: 1;
    pointer-events: none;
  }
}

/* Widget inner container (handles spacing) */
.widget-container {
  position: relative;
  z-index: 2;
  max-width: var(--container-max-width);
  margin-inline: auto;
  /* Default: margin-based spacing (collapses) */
  margin-block: var(--section-padding-block);
}

/* Padded variant: for widgets with different background */
.widget-container-padded {
  margin-block: 0;
  padding-block: var(--section-padding-block);
}

/* --------------------------------------------------------------------------
   4.2 Widget Header & Content
   -------------------------------------------------------------------------- */

/* Widget header (centered section header) */
.widget-header {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  margin-block-end: var(--space-2xl);
  gap: var(--space-sm);

  & > * {
    margin-block: 0;
  }

  & .widget-description {
    max-width: 70rem; /* 700px */
    margin-inline: auto;
  }
}

/* Widget content (main content area) */
.widget-content {
  /* Intentionally minimal - widgets define their own content layout */
  display: block; /* Default */
}

/* Content width modifiers */
.widget-content-xs {
  max-width: var(--content-width-xs);
  margin-inline: auto;
}

.widget-content-sm {
  max-width: var(--content-width-sm);
  margin-inline: auto;
}

.widget-content-md {
  max-width: var(--content-width-md);
  margin-inline: auto;
}

.widget-content-lg {
  max-width: var(--content-width-lg);
  margin-inline: auto;
}

/* Content alignment modifiers */
.widget-content-align-center {
  text-align: center;

  & .widget-actions {
    justify-content: center;
  }
}

.widget-content-align-start {
  text-align: start;

  & .widget-actions {
    justify-content: flex-start;
  }
}

.widget-content-align-end {
  text-align: end;

  & .widget-actions {
    justify-content: flex-end;
  }
}

/* --------------------------------------------------------------------------
   4.3 Height Modifiers
   -------------------------------------------------------------------------- */

.widget-height-half,
.widget-height-two-thirds,
.widget-height-full {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.widget-height-half {
  min-height: 50vh;
}

.widget-height-two-thirds {
  min-height: 66vh;
}

.widget-height-full {
  min-height: 100vh;
  min-height: 100dvh; /* Mobile viewport fix */
}

/* --------------------------------------------------------------------------
   4.4 Grid System
   -------------------------------------------------------------------------- */

.widget-grid {
  display: grid;
  --grid-gap-auto: max(var(--space-xs), calc(var(--space-xl) - (var(--grid-cols-desktop, 3) - 2) * var(--space-xs)));
  gap: clamp(var(--space-xs), var(--grid-gap, var(--grid-gap-auto)), var(--space-xl));
  grid-template-columns: 1fr;

  @media (min-width: 750px) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  @media (min-width: 990px) {
    grid-template-columns: repeat(var(--grid-cols-desktop, 3), minmax(0, 1fr));
  }
}

.widget-grid-2 {
  --grid-cols-desktop: 2;
}

.widget-grid-3 {
  --grid-cols-desktop: 3;
}

.widget-grid-4 {
  --grid-cols-desktop: 4;
}

.widget-grid-5 {
  --grid-cols-desktop: 5;
}

.widget-grid-6 {
  --grid-cols-desktop: 6;
}

.widget-grid-7 {
  --grid-cols-desktop: 7;
}

.widget-grid-8 {
  --grid-cols-desktop: 8;
}

/* ==========================================================================
   5. COMPONENT UTILITIES
   ========================================================================== */

/* --------------------------------------------------------------------------
   5.1 Cards
   -------------------------------------------------------------------------- */

/* Base Card */
.widget-card {
  display: flex;
  flex-direction: column;
  background-color: var(--bg-primary);
  border: var(--border-width-thin) solid var(--border-color);
  padding: var(--space-lg);
  transition: border-color var(--transition-speed-normal);

  &:hover {
    border-color: var(--border-color);
  }

  @media (min-width: 750px) {
    padding: var(--space-xl);
  }

  @media (min-width: 990px) {
    padding: var(--space-2xl);
  }
}

/* Card variants */
.widget-card-flat {
  background-color: var(--bg-secondary);
}

/* Card Header */
.widget-card-header {
  margin-block-end: var(--space-lg);
}

/* Card Title */
.widget-card-title {
  font-size: var(--font-size-lg);
  line-height: var(--line-height-tight);
  color: var(--text-heading);

  @media (min-width: 990px) {
    font-size: var(--font-size-xl);
  }
}

/* Card Subtitle / Eyebrow */
.widget-card-subtitle {
  font-size: var(--font-size-xs);
  font-weight: var(--typography-body_font_bold-weight, 700);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-muted);
}

/* Card Description */
.widget-card-description {
  font-size: var(--font-size-sm);
  line-height: var(--line-height-relaxed);
  color: var(--text-content);
  margin-block-end: var(--space-md);
}

/* Card Content / Body */
.widget-card-content {
  font-size: var(--font-size-base);
  line-height: var(--line-height-relaxed);
  color: var(--text-content);
  flex: 1;
  display: flex;
  flex-direction: column;

  & > *:last-child {
    margin-block-end: 0;
  }
}

/* Card Footer */
.widget-card-footer {
  margin-block-start: auto;
  padding-block-start: var(--space-md);
  display: flex;
  align-items: center;
  gap: var(--space-md);
}

/* Card Image (Cover) */
.widget-card-image {
  width: 100%;
  height: auto;
  aspect-ratio: 16/9;
  object-fit: cover;
  border-radius: var(--border-radius-sm);
  margin-block-end: var(--space-lg);
}

/* Card Icon */
.widget-card-icon {
  width: var(--icon-size-lg);
  height: var(--icon-size-lg);
  margin-block-end: var(--space-md);
  color: var(--accent);
  stroke-width: 0.15rem;
}

/* Card Grid Container */
.widget-card-grid {
  display: grid;
  list-style: none;
  padding: 0;
  margin: 0;

  grid-template-columns: 1fr;

  @media (min-width: 750px) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  @media (min-width: 990px) {
    grid-template-columns: repeat(var(--grid-cols-desktop, 3), minmax(0, 1fr));
  }
}

/* --------------------------------------------------------------------------
   5.2 Buttons
   -------------------------------------------------------------------------- */

/* Base Button - Secondary style by default */
.widget-button {
  display: inline-flex;
  align-items: center;
  align-self: flex-start;
  gap: var(--space-sm);
  padding: 0.8rem 1.6rem;
  font-size: var(--font-size-sm);
  font-weight: var(--typography-body_font-weight, 400);
  font-family: inherit;
  background-color: transparent;
  color: var(--text-content);
  border: var(--border-width-medium) solid var(--accent);
  text-decoration: none;
  cursor: pointer;
  transition: all 0.3s;

  &:hover {
    background-color: var(--accent);
    color: var(--accent-text);
  }

  &:focus {
    outline: var(--border-width-medium) solid var(--accent);
    outline-offset: 0.2rem;
  }
}

/* Button Sizes */
.widget-button-medium {
  padding: 1.2rem 2.4rem;
  font-size: var(--font-size-base);
}

.widget-button-large {
  padding: 1.6rem 3.2rem;
  font-size: var(--font-size-lg);
}

.widget-button-xlarge {
  padding: 2rem 4.8rem;
  font-size: var(--font-size-xl);
}

.widget-button-full {
  display: flex;
  align-self: stretch;
  width: 100%;
  justify-content: center;
}

/* Primary Button - Filled with accent color */
.widget-button-primary {
  background-color: var(--accent);
  color: var(--accent-text);
  border-color: var(--accent);
}

/* Secondary Button - Outlined with accent color */
.widget-button-secondary {
  background-color: transparent;
  color: var(--text-content);
  border-color: var(--accent);

  &:hover {
    background-color: var(--accent);
    color: var(--accent-text);
  }
}

.widget-button-icon {
  width: 1.6rem;
  height: 1.6rem;
  stroke: currentColor;
  stroke-width: var(--border-width-medium);
}

/* Button Actions Container */
.widget-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-md);
}

/* --------------------------------------------------------------------------
   5.3 Forms
   -------------------------------------------------------------------------- */

.form-group {
  display: flex;
  flex-direction: column;
  gap: var(--space-xs);
}

.form-label {
  font-size: var(--font-size-sm);
  color: var(--text-content);
}

.form-input,
.form-textarea,
.form-select {
  width: 100%;
  padding: var(--space-sm) var(--space-md);
  font-size: var(--font-size-base);
  font-family: inherit;
  border: var(--border-width-thin) solid var(--border-color);
  background-color: var(--bg-primary);
  color: var(--text-content);
  transition: border-color 0.3s;

  &:focus {
    outline: none;
    border-color: var(--text-heading);
  }

  &::placeholder {
    color: var(--text-muted);
  }
}

.form-textarea {
  resize: vertical;
  min-height: 15rem;
}

.form-select {
  cursor: pointer;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23333' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right var(--space-md) center;
  padding-inline-end: var(--space-2xl);
}

.form-checkbox-group {
  display: flex;
  align-items: flex-start;
  gap: var(--space-sm);
}

.form-checkbox {
  width: 2rem;
  height: 2rem;
  margin: 0;
  cursor: pointer;
  accent-color: var(--text-heading);
  flex-shrink: 0;
}

.form-checkbox-label {
  font-size: var(--font-size-base);
  color: var(--text-content);
  cursor: pointer;
  line-height: var(--line-height-normal);
}

/* Legacy aliases for backwards compatibility */
.widget-label {
  display: block;
  font-weight: var(--typography-body_font_bold-weight, 700);
  margin-block-end: var(--space-xs);
}

.widget-input {
  width: 100%;
  padding: 1.2rem 1.6rem;
  font-size: var(--font-size-base);
  font-family: inherit;
  color: var(--text-content);
  background-color: var(--bg-primary);
  border: var(--border-width-thin) solid var(--border-color);
  transition: border-color 0.3s;

  &:hover {
    border-color: var(--border-color);
  }

  &:focus {
    outline: var(--border-width-medium) solid var(--border-color);
    outline-offset: 0.2rem;
    border-color: var(--border-color);
  }
}

/* --------------------------------------------------------------------------
   5.4 Icons
   -------------------------------------------------------------------------- */

.widget-icon {
  width: var(--icon-size-lg);
  height: var(--icon-size-lg);
  stroke: currentColor;
  stroke-width: 0.15rem; /* 1.5px */
}

.widget-icon-small {
  width: var(--icon-size-sm);
  height: var(--icon-size-sm);
  stroke-width: 0.2rem; /* 2px */
}

.widget-icon-large {
  width: var(--icon-size-xl);
  height: var(--icon-size-xl);
}

/* ==========================================================================
   6. BLOCK SYSTEM
   ========================================================================== */

/* --------------------------------------------------------------------------
   6.1 Block Item Background/Overlay
   Reusable background/overlay system for blocks within widgets.
   Uses same CSS variables as .widget: --widget-bg-color, --widget-overlay-color
   -------------------------------------------------------------------------- */

.block-item {
  position: relative;
  background-color: var(--widget-bg-color, transparent);
  background-size: var(--widget-bg-size, cover);
  background-position: var(--widget-bg-position, center);
  background-repeat: var(--widget-bg-repeat, no-repeat);

  /* Overlay pseudo-element (activated by .has-overlay class) */
  &.has-overlay::before {
    content: "";
    position: absolute;
    inset: 0;
    background-color: var(--widget-overlay-color, transparent);
    z-index: 1;
    pointer-events: none;
  }
}

/* ==========================================================================
   7. GLOBAL COMPONENTS
   ========================================================================== */

/* --------------------------------------------------------------------------
   7.1 Site Header
   -------------------------------------------------------------------------- */

.widget-site-header {
  /* Reset inherited .widget base styles */
  background-color: var(--widget-bg-color, transparent);
  background-image: none;

  position: relative;
  padding-block: var(--space-md);
  padding-inline: var(--space-md);
  border-block-end: var(--border-width-thin) solid var(--border-color);

  /* Sticky header styles */
  &.header-sticky {
    position: sticky;
    top: 0;
    z-index: 999;
    /* Use bg-primary from color scheme for proper background */
    background-color: var(--bg-primary);
    transition: box-shadow 0.2s ease-in-out;

    &.header-scrolled {
      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
    }
  }

  & .header-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
  }

  & .header-logo {
    display: block;
    text-decoration: none;
    font-size: var(--font-size-2xl);
    font-weight: var(--typography-body_font_bold-weight, 700);
    color: var(--text-heading);
    z-index: 1001;
  }

  & .header-branding {
    display: flex;
    align-items: center;
    gap: var(--space-lg);
  }

  & .header-contact {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    padding-inline-start: var(--space-lg);
    border-inline-start: var(--border-width-thin) solid var(--border-color);
  }

  & .header-contact-mobile {
    display: none;
    padding-inline-start: 0;
    border-inline-start: none;
  }

  & .header-contact-line {
    font-size: var(--font-size-xs);
    color: var(--text-muted);
    line-height: var(--line-height-normal);
    white-space: nowrap;
  }

  & .header-actions {
    display: flex;
    align-items: center;
    gap: var(--space-md);
    z-index: 1001;
  }

  & .menu-toggle {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 4.4rem;
    height: 4.4rem;
    padding: 0;
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--text-content);

    & .icon-menu,
    & .icon-close {
      width: 2.4rem;
      height: 2.4rem;
      display: block;
    }

    & .icon-close {
      display: none;
    }

    &[aria-expanded="true"] {
      & .icon-menu {
        display: none;
      }

      & .icon-close {
        display: block;
      }
    }
  }

  & .header-nav {
    position: fixed;
    inset-block-start: 0;
    inset-inline-end: -32rem;
    width: 32rem;
    max-width: 85vw;
    height: 100vh;
    background-color: var(--bg-primary);
    padding-block-start: var(--space-md);
    padding-inline: var(--space-lg);
    overflow-y: auto;
    transition:
      inset-inline-end 0.3s ease-in-out,
      box-shadow 0.3s ease-in-out;
    z-index: 1000;

    &.nav-open {
      inset-inline-end: 0;
      box-shadow: -8px 0 24px rgba(0, 0, 0, 0.15);
    }
  }

  & .nav-close {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-block-end: var(--space-xl);
    padding-block-end: var(--space-md);
    border-block-end: var(--border-width-thin) solid var(--border-color);

    & .nav-close-title {
      font-size: var(--font-size-lg);
      font-weight: var(--font-weight-semibold);
      color: var(--text-content);
    }

    & .nav-close-btn {
      display: flex;
      justify-content: center;
      align-items: center;
      width: 4rem;
      height: 4rem;
      padding: 0;
      background: transparent;
      border: none;
      cursor: pointer;
      color: var(--text-content);

      & svg {
        width: 2.4rem;
        height: 2.4rem;
      }
    }
  }

  & .nav-list {
    list-style: none;
    padding: 0;
    margin: 0;
  }

  & .nav-item {
    & > a,
    & > button:not(.submenu-toggle) {
      display: flex;
      justify-content: space-between;
      align-items: center;
      width: 100%;
      padding-block: 1.4rem;
      padding-inline: 0;
      text-decoration: none;
      color: var(--text-content);
      font-weight: var(--typography-body_font_weight, 400);
      font-size: var(--font-size-lg);
      background: transparent;
      border: none;
      text-align: start;
      cursor: pointer;
      transition: color 0.2s;

      &:hover {
        color: var(--text-muted);
      }
    }

    &.has-submenu {
      display: flex;
      flex-wrap: wrap;
      align-items: center;

      & > a {
        flex: 1;
        min-width: 0;
      }
    }

    & .submenu-toggle {
      display: flex;
      align-items: center;
      justify-content: center;
      width: 4.4rem;
      height: 4.4rem;
      padding: 0;
      flex-shrink: 0;
      background: transparent;
      border: none;
      border-inline-start: var(--border-width-thin) solid var(--border-color);
      cursor: pointer;
      color: var(--text-content);
      transition: background-color 0.2s;

      &:hover {
        background-color: var(--bg-secondary);
      }

      & svg {
        width: 2rem;
        height: 2rem;
        transition: transform 0.3s;
      }
    }

    &.submenu-open > .submenu-toggle svg {
      transform: rotate(90deg);
    }
  }

  & .nav-submenu {
    list-style: none;
    padding: 0;
    margin: 0;
    width: 100%;
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.3s ease-out;

    &.submenu-open {
      max-height: 1000px;
    }

    & .nav-item {
      padding-inline-start: var(--space-lg);

      & > a,
      & > button {
        font-size: var(--font-size-sm);
        font-weight: var(--typography-body_font-weight, 400);
        padding-block: 1.2rem;
      }
    }

    & .nav-submenu {
      & .nav-item {
        padding-inline-start: var(--space-lg);

        & > a,
        & > button {
          font-size: var(--font-size-sm);
        }
      }
    }
  }

  & .mobile-cta {
    margin-block-start: var(--space-xl);
    width: 100%;
    text-align: center;
  }

  & .desktop-cta {
    display: none;
  }

  /* Mobile contact details responsive */
  @media (max-width: 989px) {
    & .header-contact {
      display: none;
    }

    & .header-contact-mobile {
      display: flex;
      margin-block-start: var(--space-md);
      padding-block-start: var(--space-md);
      border-block-start: var(--border-width-thin) solid var(--border-color);
    }
  }

  /* Desktop styles */
  @media (min-width: 990px) {
    padding-inline: var(--space-xl);

    & .header-actions {
      flex: 1;
      justify-content: flex-end;
    }

    & .menu-toggle {
      display: none;
    }

    & .nav-close {
      display: none;
    }

    & .header-nav {
      position: static;
      width: auto;
      height: auto;
      display: flex;
      align-items: center;
      background-color: transparent;
      padding: 0;
      overflow: visible;
      transform: none;
      box-shadow: none;
    }

    & .nav-list {
      display: flex;
      gap: var(--space-xs);
      align-items: center;
    }

    & .nav-item {
      position: relative;

      & > a,
      & > button:not(.submenu-toggle) {
        padding-block: 1rem;
        padding-inline: var(--space-md);
        font-size: var(--font-size-sm);
        transition: background-color 0.2s;

        &:hover {
          background-color: var(--bg-secondary);
          color: var(--text-content);
        }
      }

      & .submenu-toggle {
        display: none;
      }

      &.has-submenu > a::after {
        content: "";
        display: inline-block;
        width: 1.4rem;
        height: 1.4rem;
        margin-inline-start: var(--space-xs);
        flex-shrink: 0;
        background-color: currentColor;
        mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6l6 -6'/%3E%3C/svg%3E");
        mask-repeat: no-repeat;
        mask-position: center;
        mask-size: contain;
        -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6l6 -6'/%3E%3C/svg%3E");
        -webkit-mask-repeat: no-repeat;
        -webkit-mask-position: center;
        -webkit-mask-size: contain;
      }

      &:hover > .nav-submenu,
      &:focus-within > .nav-submenu {
        opacity: 1;
        visibility: visible;
        transform: translateY(0);
      }
    }

    & .nav-submenu {
      position: absolute;
      inset-block-start: calc(100% - 0.4rem);
      inset-inline-start: 0;
      min-width: 22rem;
      background-color: var(--color-white);
      border: var(--border-width-thin) solid var(--border-color);
      max-height: none;
      opacity: 0;
      visibility: hidden;
      transform: translateY(-0.5rem);
      transition:
        opacity var(--transition-speed-fast) ease,
        visibility var(--transition-speed-fast) ease,
        transform var(--transition-speed-fast) ease;
      overflow: visible;
      padding-block: var(--space-xs);
      padding-inline: 0;

      & .nav-item {
        position: static;
        padding: 0;

        & > a,
        & > button:not(.submenu-toggle) {
          padding-block: 1.2rem;
          padding-inline: var(--space-md);
          font-size: var(--font-size-sm);
          transition: background-color 0.2s;

          &:hover {
            background-color: var(--bg-secondary);
          }
        }

        &.has-submenu {
          position: relative;
        }

        &.has-submenu > a::after {
          mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 6l6 6l-6 6'/%3E%3C/svg%3E");
          -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 6l6 6l-6 6'/%3E%3C/svg%3E");
        }
      }

      & .nav-submenu {
        position: absolute;
        inset-block-start: -0.8rem;
        inset-inline-start: calc(100% - 0.4rem);
        min-width: 22rem;
        background-color: var(--color-white);
        border: var(--border-width-thin) solid var(--border-color);
        padding-block: var(--space-xs);
        padding-inline: 0;
        max-height: none;
        opacity: 0;
        visibility: hidden;
        transform: translateX(-0.5rem);
        transition:
          opacity var(--transition-speed-fast) ease,
          visibility var(--transition-speed-fast) ease,
          transform var(--transition-speed-fast) ease;

        & .nav-item {
          padding: 0;
        }

        /* Flip submenu to left when it would overflow viewport */
        &.submenu-flip {
          inset-inline-start: auto;
          inset-inline-end: calc(100% - 0.4rem);
          transform: translateX(0.5rem);
        }
      }

      &:hover > .nav-submenu,
      &:focus-within > .nav-submenu {
        opacity: 1;
        visibility: visible;
        transform: translateX(0);
      }

      /* Flip chevron when submenu is flipped */
      &:has(> .nav-submenu.submenu-flip) > a::after {
        mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 6l-6 6l6 6'/%3E%3C/svg%3E");
        -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 6l-6 6l6 6'/%3E%3C/svg%3E");
      }
    }

    & .mobile-cta {
      display: none;
    }

    & .desktop-cta {
      display: inline-block;
    }

    & .header-contact-mobile {
      display: none;
    }
  }
}

/* --------------------------------------------------------------------------
   7.2 Site Footer
   -------------------------------------------------------------------------- */

.widget-footer {
  /* Reset inherited .widget base styles */
  background-color: var(--widget-bg-color, transparent);
  background-image: none;

  padding-block: var(--space-3xl);
  padding-inline: var(--space-xl);
  text-align: center;
  border-block-start: var(--border-width-thin) solid var(--border-color);

  & .footer-content {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-sm);
  }

  & .footer-logo {
    display: inline-block;
    height: auto;
  }

  & .footer-menu {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-lg);
    list-style: none;
    padding: 0;
    margin: 0;
  }

  & .footer-menu-link {
    color: var(--text-content);
    text-decoration: none;
    font-size: var(--font-size-sm);
    font-weight: var(--typography-body_font-weight, 400);
    transition: color var(--transition-speed-fast);

    &:hover {
      color: var(--accent);
    }
  }

  & .footer-social {
    display: flex;
    gap: var(--space-md);
    justify-content: center;
    flex-wrap: wrap;
  }

  & .social-link {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--text-content);
    transition: color var(--transition-speed-fast);
    width: 2.4rem;
    height: 2.4rem;

    &:hover {
      color: var(--accent);
    }

    & svg {
      width: 100%;
      height: 100%;
    }
  }

  & .footer-copyright {
    color: var(--text-muted);
    font-size: var(--font-size-xs);
    margin: 0;
  }
}

/* ==========================================================================
   8. UTILITY CLASSES
   ========================================================================== */

/* --------------------------------------------------------------------------
   8.1 Content Flow
   -------------------------------------------------------------------------- */

.content-flow > * + * {
  margin-block-start: var(--space-md);
}

.content-flow > .widget-actions:last-child {
  margin-block-start: var(--space-xl);
}

/* --------------------------------------------------------------------------
   8.2 Feature Lists
   Shared across widgets for consistent feature/benefit presentation
   -------------------------------------------------------------------------- */

.features-list {
  list-style: none;
  list-style-type: none;
  padding: 0;
  padding-inline-start: 0;
  margin-inline-start: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-xs);
}

.feature-item {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  padding: 0;
  width: 100%;
  color: var(--text-content);
  list-style: none;
}

.feature-icon {
  color: var(--text-content);
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}

.feature-icon-svg {
  width: 1em;
  height: 1em;
  display: block;
}

/* --------------------------------------------------------------------------
   8.3 Accessibility Helpers
   -------------------------------------------------------------------------- */

/* Visually hidden (for accessibility) */
.visually-hidden {
  position: absolute;
  width: 0.1rem;
  height: 0.1rem;
  padding: 0;
  margin: -0.1rem;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.skip-link:focus,
.skip-link:focus-visible {
  position: absolute;
  inset-block-start: var(--space-sm);
  inset-inline-start: var(--space-sm);
  width: auto;
  height: auto;
  margin: 0;
  padding: var(--space-sm) var(--space-md);
  background: var(--bg-primary);
  color: var(--text-heading);
  clip: auto;
  white-space: normal;
  z-index: 9999;
}

/* --------------------------------------------------------------------------
   8.4 Scroll Reveal Animations
   -------------------------------------------------------------------------- */

/* Base reveal class - hidden state */
.reveal {
  opacity: 0;
  transition:
    opacity 0.6s ease-out,
    transform 0.6s ease-out;
  transition-delay: calc(var(--reveal-delay, 0) * 0.1s);
}

/* Reveal variants - different starting transforms */
.reveal-up {
  transform: translateY(2rem);
}

.reveal-down {
  transform: translateY(-2rem);
}

.reveal-left {
  transform: translateX(2rem);
}

.reveal-right {
  transform: translateX(-2rem);
}

.reveal-scale {
  transform: scale(0.95);
}

.reveal-fade {
  /* No transform, just fade */
}

/* Revealed state - applied by JavaScript */
.reveal.revealed {
  opacity: 1;
  transform: none;
}

/* Respect reduced motion preference */
@media (prefers-reduced-motion: reduce) {
  .reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .reveal.revealed {
    opacity: 1;
    transform: none;
  }
}
