/**
 * ry-ui Structure CSS
 *
 * Pure layout and behavioral styles using data-ry-target selectors.
 * No colors, shadows, or decorative properties.
 * Works with any theme or no theme at all.
 *
 * Users can bring their own styling (e.g., Tailwind) - classes are optional.
 * JS queries use [data-ry-target], structure CSS uses [data-ry-target],
 * only theme CSS requires .ry-* classes.
 */

@layer ry-structure {

/* Enable native height: auto animation for all components */
:root {
  interpolate-size: allow-keywords;
}

/* ═══════════════════════════════════════════════════════════════
   SCROLL LOCK (for modals, drawers)
   ═══════════════════════════════════════════════════════════════ */

body {
  margin: 0;
  min-height: 100dvh;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

body[data-ry-scroll-lock] {
  overflow: hidden;
  padding-right: var(--ry-scrollbar-width, 0);
}

/* ═══════════════════════════════════════════════════════════════
   PREFLIGHT RESET (opt-in via data-ry-reset on body/html)
   Faithful equivalent of Tailwind Preflight.
   ═══════════════════════════════════════════════════════════════ */

/* Universal — :where() gives zero specificity so component styles always win */
:where([data-ry-reset]) *,
:where([data-ry-reset]) *::before,
:where([data-ry-reset]) *::after,
:where([data-ry-reset]) *::backdrop {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  border: 0 solid;
}

/* Root */
:where([data-ry-reset]) {
  line-height: 1.5;
  -webkit-text-size-adjust: 100%;
  tab-size: 4;
  -webkit-tap-highlight-color: transparent;
}

/* Typography */
:where([data-ry-reset]) :where(h1, h2, h3, h4, h5, h6) {
  font-size: inherit;
  font-weight: inherit;
}
:where([data-ry-reset]) :where(a) {
  color: inherit;
  text-decoration: inherit;
}
:where([data-ry-reset]) :where(b, strong) {
  font-weight: bolder;
}
:where([data-ry-reset]) :where(code, kbd, samp, pre) {
  font-size: 1em;
}
:where([data-ry-reset]) :where(small) {
  font-size: 80%;
}
:where([data-ry-reset]) :where(sub, sup) {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
:where([data-ry-reset]) :where(sub) { bottom: -0.25em; }
:where([data-ry-reset]) :where(sup) { top: -0.5em; }

/* Lists */
:where([data-ry-reset]) :where(ol, ul, menu) {
  list-style: none;
}

/* Table */
:where([data-ry-reset]) :where(table) {
  text-indent: 0;
  border-color: inherit;
  border-collapse: collapse;
}

/* HR */
:where([data-ry-reset]) :where(hr) {
  height: 0;
  color: inherit;
  border-top-width: 1px;
}

/* Media */
:where([data-ry-reset]) :where(img, svg, video, canvas, audio, iframe, embed, object) {
  display: block;
  vertical-align: middle;
}
:where([data-ry-reset]) :where(img, video) {
  max-width: 100%;
  height: auto;
}

/* Form controls */
:where([data-ry-reset]) :where(button, input, select, optgroup, textarea) {
  font: inherit;
  font-feature-settings: inherit;
  font-variation-settings: inherit;
  letter-spacing: inherit;
  color: inherit;
  border-radius: 0;
  background-color: transparent;
}
:where([data-ry-reset]) ::placeholder {
  opacity: 1;
}
@supports (color: color-mix(in oklab, currentcolor 50%, transparent)) {
  :where([data-ry-reset]) ::placeholder {
    color: color-mix(in oklab, currentcolor 50%, transparent);
  }
}
:where([data-ry-reset]) :where(textarea) {
  resize: vertical;
}
:where([data-ry-reset]) :where(button, input:where([type='button'], [type='reset'], [type='submit'])) {
  appearance: button;
}
:where([data-ry-reset]) ::-webkit-search-decoration {
  -webkit-appearance: none;
}
:where([data-ry-reset]) ::-webkit-inner-spin-button,
:where([data-ry-reset]) ::-webkit-outer-spin-button {
  height: auto;
}

/* Misc */
:where([data-ry-reset]) :where(summary) {
  display: list-item;
}
:where([data-ry-reset]) :where([hidden]:not([hidden='until-found'])) {
  display: none !important;
}

/* ═══════════════════════════════════════════════════════════════
   TRANSFORM WRAPPER (FOUC prevention)
   ═══════════════════════════════════════════════════════════════ */

ry,
ry-search-item,
ry-search-group {
  display: none;
}

/* ═══════════════════════════════════════════════════════════════
   BOX SIZING RESET
   ═══════════════════════════════════════════════════════════════ */

:where([data-ry-target],
  ry-page, ry-header, ry-main, ry-footer, ry-section, ry-aside,
  ry-grid, ry-stack, ry-cluster, ry-split, ry-center,
  ry-card, ry-accordion, ry-modal, ry-tabs, ry-dropdown,
  ry-button, ry-badge, ry-alert, ry-field, ry-nav, ry-logo, ry-actions,
  ry-accordion-item, ry-tab, ry-menu, ry-menu-item, ry-divider,
  ry-theme-toggle, ry-select, ry-switch, ry-tooltip, ry-drawer, ry-toast,
  ry-toggle-button, ry-knob, ry-slider, ry-number-select, ry-color-picker, ry-color-input,
  ry-gradient-picker, ry-tree, ry-tree-item,
  ry-tag, ry-tag-input, ry-hero, ry-stat, ry-feature, ry-feature-grid,
  ry-pricing, ry-pricing-card, ry-carousel, ry-combobox, ry-heading,
  ry-logo-bar) {
  box-sizing: border-box;
}

:where([data-ry-target],
  ry-page, ry-header, ry-main, ry-footer, ry-section,
  ry-card, ry-accordion, ry-modal, ry-tabs, ry-dropdown) * {
  box-sizing: inherit;
}

/* ═══════════════════════════════════════════════════════════════
   CUSTOM ELEMENT DISPLAY DEFAULTS
   ═══════════════════════════════════════════════════════════════ */

/* Block elements */
:is(ry-page, ry-header, ry-main, ry-footer, ry-section, ry-aside,
    ry-card, ry-accordion, ry-accordion-item, ry-tabs, ry-tab, ry-alert, ry-field,
    ry-tag-input, ry-carousel) {
  display: block;
}

/* Flex containers */
:is(ry-grid, ry-stack, ry-cluster, ry-split, ry-center, ry-nav, ry-actions) {
  display: flex;
}

/* Inline elements */
:is(ry-badge, ry-logo, ry-tag) {
  display: inline-flex;
}

/* Contents (wrapper doesn't affect layout) */
:is(ry-modal, ry-drawer) {
  display: contents;
}

/* Button-like elements */
:is(ry-button, ry-menu-item) {
  display: inline-flex;
}

/* Balanced text wrapping for headings in overlay/display components */
:is(ry-modal [data-ry-target="header"] h3,
    ry-card h3,
    ry-hero h1,
    ry-pricing-card h3,
    ry-heading [data-ry-target="title"]) {
  text-wrap: balance;
}

/* ═══════════════════════════════════════════════════════════════
   PAGE LAYOUT
   ═══════════════════════════════════════════════════════════════ */

ry-page {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  min-height: 100dvh;
  container-type: inline-size;
  scrollbar-gutter: stable;
  overflow-x: clip;
}

/* ═══════════════════════════════════════════════════════════════
   HEADER
   ═══════════════════════════════════════════════════════════════ */

ry-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ry-space-4, 1rem);
  padding: var(--ry-space-4, 1rem) var(--ry-space-6, 1.5rem);
}

ry-header[sticky] {
  position: sticky;
  top: 0;
  z-index: var(--ry-z-sticky, 1020);
}

/* ═══════════════════════════════════════════════════════════════
   MAIN
   ═══════════════════════════════════════════════════════════════ */

ry-main {
  flex: 1;
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
  container-type: inline-size;
  scrollbar-gutter: stable;
}

/* ═══════════════════════════════════════════════════════════════
   FOOTER
   ═══════════════════════════════════════════════════════════════ */

ry-footer {
  padding: var(--ry-space-6, 1.5rem);
  text-align: center;
}

/* Full footer with columns */
ry-footer[layout="columns"] {
  text-align: start;
  padding: var(--ry-space-12, 3rem) var(--ry-space-6, 1.5rem);
}

ry-footer[layout="columns"] > [data-ry-target="columns"],
ry-footer[layout="columns"] > .ry-footer__columns {
  display: grid;
  grid-template-columns: 1.5fr repeat(auto-fit, minmax(8rem, 1fr));
  gap: var(--ry-space-8, 2rem);
  padding-block-end: var(--ry-space-8, 2rem);
}

ry-footer[layout="columns"] > [data-ry-target="columns"] nav,
ry-footer[layout="columns"] > .ry-footer__columns nav {
  display: flex;
  flex-direction: column;
  gap: var(--ry-space-2, 0.5rem);
}

ry-footer[layout="columns"] > [data-ry-target="columns"] nav strong,
ry-footer[layout="columns"] > .ry-footer__columns nav strong {
  margin-block-end: var(--ry-space-2, 0.5rem);
}

ry-footer[layout="columns"] > [data-ry-target="bottom"],
ry-footer[layout="columns"] > .ry-footer__bottom {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--ry-space-4, 1rem);
  padding-block-start: var(--ry-space-6, 1.5rem);
  border-top: 1px solid currentColor;
  opacity: 0.5;
}

@media (max-width: 768px) {
  ry-footer[layout="columns"] > [data-ry-target="columns"],
  ry-footer[layout="columns"] > .ry-footer__columns {
    grid-template-columns: 1fr 1fr;
  }
}

/* ═══════════════════════════════════════════════════════════════
   SECTION
   ═══════════════════════════════════════════════════════════════ */

ry-section {
  margin-block-end: var(--ry-space-12, 3rem);
  container-type: inline-size;
}

ry-section:last-child {
  margin-block-end: 0;
}

ry-section[narrow] {
  max-inline-size: 48rem;
  margin-inline: auto;
}

/* Full-width breakout — bg goes edge-to-edge, content stays centered */
ry-section[full],
ry-section[inverted],
ry-footer,
ry-logo-bar {
  width: 100vw;
  margin-inline-start: calc(50% - 50vw);
  padding-inline: max(var(--ry-space-6, 1.5rem), calc(50vw - 50%));
}

ry-section[inverted] {
  padding-block: var(--ry-space-12, 3rem);
}

ry-section[pad-bottom="lg"] {
  padding-bottom: var(--ry-space-20, 5rem);
}

/* ═══════════════════════════════════════════════════════════════
   LOGO BAR
   ═══════════════════════════════════════════════════════════════ */

ry-logo-bar {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: var(--ry-space-8, 2rem);
  padding-block: var(--ry-space-8, 2rem);
  text-align: center;
}

ry-logo-bar > p {
  width: 100%;
  margin: 0;
}

ry-logo-bar > :not(p) {
  display: inline-flex;
  align-items: center;
}

/* Scroll layout — horizontal scroll, no wrap */
ry-logo-bar[layout="scroll"] {
  flex-wrap: nowrap;
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}

ry-logo-bar[layout="scroll"]::-webkit-scrollbar {
  display: none;
}

ry-logo-bar[layout="scroll"] > :not(p) {
  flex-shrink: 0;
}

/* Marquee layout — infinite auto-scroll */
ry-logo-bar[layout="marquee"] {
  flex-wrap: nowrap;
  overflow: hidden;
}

ry-logo-bar[layout="marquee"] [data-ry-target="track"] {
  display: flex;
  align-items: center;
  gap: var(--ry-space-8, 2rem);
  width: max-content;
  animation: ry-marquee var(--ry-logo-bar-speed, 30s) linear infinite;
}

ry-logo-bar[layout="marquee"] [data-ry-target="track"] > * {
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
}

ry-logo-bar[layout="marquee"]:hover [data-ry-target="track"] {
  animation-play-state: paused;
}

@keyframes ry-marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-25%); }
}

/* Size variants */
ry-logo-bar[size="sm"] {
  padding: var(--ry-space-4, 1rem) var(--ry-space-4, 1rem);
  gap: var(--ry-space-4, 1rem);
}

ry-logo-bar[size="lg"] {
  padding: var(--ry-space-12, 3rem) var(--ry-space-6, 1.5rem);
  gap: var(--ry-space-6, 1.5rem);
}

/* Logo items */
ry-logo-bar img {
  height: var(--ry-logo-bar-height, 2rem);
  width: auto;
  object-fit: contain;
}

ry-logo-bar span {
  white-space: nowrap;
}

/* ═══════════════════════════════════════════════════════════════
   GRID
   ═══════════════════════════════════════════════════════════════ */

ry-grid {
  display: grid;
  gap: var(--ry-space-4, 1rem);
}

ry-grid[cols="1"] { grid-template-columns: 1fr; }
ry-grid[cols="2"] { grid-template-columns: repeat(2, 1fr); }
ry-grid[cols="3"] { grid-template-columns: repeat(3, 1fr); }
ry-grid[cols="4"] { grid-template-columns: repeat(4, 1fr); }
ry-grid[cols="5"] { grid-template-columns: repeat(5, 1fr); }
ry-grid[cols="6"] { grid-template-columns: repeat(6, 1fr); }

/* Auto-fit mode: fluid columns based on min-width */
ry-grid[cols="auto-fit"] {
  grid-template-columns: repeat(auto-fit, minmax(var(--ry-grid-min, 280px), 1fr));
}

ry-grid[cols="auto-fill"] {
  grid-template-columns: repeat(auto-fill, minmax(var(--ry-grid-min, 280px), 1fr));
}

ry-grid[overlap] {
  position: relative;
  z-index: 1;
  margin-top: calc(-1 * var(--ry-space-12, 3rem));
  padding-inline: var(--ry-space-6, 1.5rem);
}

/* Default responsive behavior */
@container (max-width: 640px) {
  :is(ry-grid[cols="2"], ry-grid[cols="3"], ry-grid[cols="4"],
      ry-grid[cols="5"], ry-grid[cols="6"]) {
    grid-template-columns: 1fr;
  }
}

@container (min-width: 641px) and (max-width: 1024px) {
  :is(ry-grid[cols="3"], ry-grid[cols="4"],
      ry-grid[cols="5"], ry-grid[cols="6"]) {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Per-breakpoint column overrides: cols-sm, cols-md, cols-lg */
@container (max-width: 640px) {
  ry-grid[cols-sm="1"] { grid-template-columns: 1fr; }
  ry-grid[cols-sm="2"] { grid-template-columns: repeat(2, 1fr); }
  ry-grid[cols-sm="3"] { grid-template-columns: repeat(3, 1fr); }
}

@container (min-width: 641px) and (max-width: 1024px) {
  ry-grid[cols-md="1"] { grid-template-columns: 1fr; }
  ry-grid[cols-md="2"] { grid-template-columns: repeat(2, 1fr); }
  ry-grid[cols-md="3"] { grid-template-columns: repeat(3, 1fr); }
  ry-grid[cols-md="4"] { grid-template-columns: repeat(4, 1fr); }
}

@container (min-width: 1025px) {
  ry-grid[cols-lg="2"] { grid-template-columns: repeat(2, 1fr); }
  ry-grid[cols-lg="3"] { grid-template-columns: repeat(3, 1fr); }
  ry-grid[cols-lg="4"] { grid-template-columns: repeat(4, 1fr); }
  ry-grid[cols-lg="5"] { grid-template-columns: repeat(5, 1fr); }
  ry-grid[cols-lg="6"] { grid-template-columns: repeat(6, 1fr); }
}

/* ═══════════════════════════════════════════════════════════════
   STACK (vertical)
   ═══════════════════════════════════════════════════════════════ */

ry-stack {
  display: flex;
  flex-direction: column;
  gap: var(--ry-space-4, 1rem);
}

ry-stack[gap="sm"] { gap: var(--ry-space-2, 0.5rem); }
ry-stack[gap="md"] { gap: var(--ry-space-4, 1rem); }
ry-stack[gap="lg"] { gap: var(--ry-space-6, 1.5rem); }
ry-stack[gap="xl"] { gap: var(--ry-space-8, 2rem); }

/* ═══════════════════════════════════════════════════════════════
   CLUSTER (horizontal, wraps)
   ═══════════════════════════════════════════════════════════════ */

ry-cluster {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ry-space-3, 0.75rem);
}

ry-cluster[gap="sm"] { gap: var(--ry-space-2, 0.5rem); }
ry-cluster[gap="md"] { gap: var(--ry-space-3, 0.75rem); }
ry-cluster[gap="lg"] { gap: var(--ry-space-4, 1rem); }

/* ═══════════════════════════════════════════════════════════════
   SPLIT (two columns)
   ═══════════════════════════════════════════════════════════════ */

ry-split {
  display: flex;
  gap: var(--ry-space-6, 1.5rem);
}

ry-split > :first-child {
  flex: 1;
}

ry-split > :last-child {
  flex-shrink: 0;
  width: var(--ry-split-width, 300px);
  min-width: var(--ry-split-min-width, 0);
}

/* Resize handle */
ry-split [data-ry-target="handle"] {
  flex-shrink: 0;
  width: 8px;
  margin-inline: -4px;
  cursor: col-resize;
  position: relative;
  z-index: 1;
  touch-action: none;
}

/* Larger hit area via pseudo-element */
ry-split [data-ry-target="handle"]::before {
  content: '';
  position: absolute;
  inset-block: 0;
  inset-inline: -4px;
}

/* Visible drag indicator */
ry-split [data-ry-target="handle"]::after {
  content: '';
  position: absolute;
  inset-block-start: 50%;
  inset-inline-start: 50%;
  width: 4px;
  height: 32px;
  transform: translate(-50%, -50%);
  border-radius: 2px;
  opacity: 0;
  transition: opacity var(--ry-duration-fast, 100ms);
}

ry-split [data-ry-target="handle"]:hover::after,
ry-split[data-ry-resizing] [data-ry-target="handle"]::after {
  opacity: 1;
}

@container (max-width: 768px) {
  ry-split {
    flex-direction: column;
  }
  ry-split > :last-child {
    width: 100%;
  }
  ry-split [data-ry-target="handle"] {
    display: none;
  }
}

/* ═══════════════════════════════════════════════════════════════
   CENTER
   ═══════════════════════════════════════════════════════════════ */

ry-center {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
}

/* ═══════════════════════════════════════════════════════════════
   NAV
   ═══════════════════════════════════════════════════════════════ */

ry-nav {
  display: flex;
  align-items: center;
  gap: var(--ry-space-1, 0.25rem);
}

ry-nav a {
  text-decoration: none;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  white-space: nowrap;
}

/* ═══════════════════════════════════════════════════════════════
   LOGO
   ═══════════════════════════════════════════════════════════════ */

ry-logo {
  display: inline-flex;
  align-items: center;
}

/* ═══════════════════════════════════════════════════════════════
   ACTIONS
   ═══════════════════════════════════════════════════════════════ */

ry-actions {
  display: flex;
  align-items: center;
  gap: var(--ry-space-2, 0.5rem);
  margin-inline-start: auto;
}

/* ═══════════════════════════════════════════════════════════════
   DIVIDER
   ═══════════════════════════════════════════════════════════════ */

ry-divider {
  display: block;
  height: 1px;
  margin-block: var(--ry-space-4, 1rem);
  margin-inline: 0;
}

ry-divider[vertical] {
  width: 1px;
  height: auto;
  align-self: stretch;
  margin-block: 0;
  margin-inline: var(--ry-space-4, 1rem);
}

/* ═══════════════════════════════════════════════════════════════
   BUTTONS
   ═══════════════════════════════════════════════════════════════ */

ry-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ry-space-2, 0.5rem);
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-4, 1rem);
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
}

ry-button[disabled] {
  cursor: not-allowed;
  pointer-events: none;
}

/* Button sizes */
ry-button[size="sm"] {
  padding: var(--ry-space-1, 0.25rem) var(--ry-space-3, 0.75rem);
}

ry-button[size="lg"] {
  padding: var(--ry-space-3, 0.75rem) var(--ry-space-6, 1.5rem);
}

/* Icon-only button */
ry-button[icon]:empty {
  padding: var(--ry-space-2, 0.5rem);
}

ry-button[icon][size="sm"]:empty {
  padding: var(--ry-space-1, 0.25rem);
}

/* Link variant — inline text link style */
ry-button[variant="link"] {
  background: none;
  border: none;
  padding: 0;
  display: inline;
  cursor: pointer;
}

/* ═══════════════════════════════════════════════════════════════
   TOGGLE BUTTON
   ═══════════════════════════════════════════════════════════════ */

ry-toggle-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ry-space-2, 0.5rem);
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-4, 1rem);
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
}

ry-toggle-button[disabled] {
  cursor: not-allowed;
  pointer-events: none;
}

/* Toggle button sizes */
ry-toggle-button[size="sm"] {
  padding: var(--ry-space-1, 0.25rem) var(--ry-space-3, 0.75rem);
}

ry-toggle-button[size="lg"] {
  padding: var(--ry-space-3, 0.75rem) var(--ry-space-6, 1.5rem);
}

/* Icon-only toggle button */
ry-toggle-button[icon]:empty {
  padding: var(--ry-space-2, 0.5rem);
}

ry-toggle-button[icon][size="sm"]:empty {
  padding: var(--ry-space-1, 0.25rem);
}

ry-toggle-button[icon][size="lg"]:empty {
  padding: var(--ry-space-3, 0.75rem);
}

/* Block toggle button (card-style, full width) */
ry-toggle-button[block] {
  display: block;
  width: 100%;
  text-align: start;
  padding: var(--ry-space-4, 1rem);
}

/* ═══════════════════════════════════════════════════════════════
   KNOB
   ═══════════════════════════════════════════════════════════════ */

ry-knob {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: var(--ry-space-1, 0.25rem);
  user-select: none;
  outline: none;
}

ry-knob[disabled] {
  pointer-events: none;
}

ry-knob [data-ry-target="ring"] {
  --knob-size: 64px;
  --knob-rotation: -135deg;
  --knob-percent: 0;

  position: relative;
  width: var(--knob-size);
  height: var(--knob-size);
  cursor: grab;
}

ry-knob [data-ry-target="ring"].ry-knob__ring--dragging {
  cursor: grabbing;
}

ry-knob [data-ry-target="cap"] {
  position: absolute;
  inset: 0;
  transform: rotate(var(--knob-rotation));
}

ry-knob [data-ry-target="indicator"] {
  position: absolute;
  width: 3px;
  height: 10px;
  top: 6px;
  left: 50%;
  margin-left: -1.5px;
}

ry-knob [data-ry-target="display"] {
  display: block;
  min-width: 3em;
  text-align: center;
}

ry-knob [data-ry-target="label"] {
  display: block;
  text-align: center;
}

/* Sizes */
ry-knob[size="sm"] [data-ry-target="ring"] { --knob-size: 48px; }
ry-knob[size="lg"] [data-ry-target="ring"] { --knob-size: 80px; }

/* ═══════════════════════════════════════════════════════════════
   NUMBER SELECT
   ═══════════════════════════════════════════════════════════════ */

ry-number-select {
  display: inline-flex;
  align-items: center;
  gap: 0;
  user-select: none;
  touch-action: none;
}

ry-number-select[disabled] {
  pointer-events: none;
}

ry-number-select :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 36px;
  padding: 0;
  flex-shrink: 0;
  cursor: pointer;
}

ry-number-select :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
  width: 16px;
  height: 16px;
}

ry-number-select [data-ry-target="display"] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 48px;
  height: 36px;
  padding: 0 var(--ry-space-2, 0.5rem);
  position: relative;
  cursor: ew-resize;
  outline: none;
}

:is(ry-number-select[drag="y"],
    ry-number-select[arrows="stacked"]:not([drag]),
    ry-number-select[arrows="stacked-end"]:not([drag]),
    ry-number-select[arrows="stacked-start"]:not([drag])) [data-ry-target="display"] {
  cursor: ns-resize;
}

ry-number-select[drag="none"] [data-ry-target="display"] {
  cursor: default;
}

ry-number-select[data-dragging] {
  cursor: ew-resize;
}

:is(ry-number-select[drag="y"],
    ry-number-select[arrows="stacked"]:not([drag]),
    ry-number-select[arrows="stacked-end"]:not([drag]),
    ry-number-select[arrows="stacked-start"]:not([drag]))[data-dragging] {
  cursor: ns-resize;
}

ry-number-select [data-ry-target="value"] {
  display: inline-block;
  min-width: 2em;
  text-align: center;
  transition: transform 60ms ease-out;
}

ry-number-select :is([data-ry-target="prefix"], [data-ry-target="suffix"]) {
  flex-shrink: 0;
  pointer-events: none;
}

ry-number-select [data-ry-target="input"] {
  display: none;
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  text-align: center;
  padding: 0 var(--ry-space-1, 0.25rem);
  outline: none;
}

ry-number-select [data-ry-target="label"] {
  display: block;
  text-align: center;
  margin-inline-end: var(--ry-space-2, 0.5rem);
  order: -1;
}

/* Stacked layout (buttons above/below) */
ry-number-select[arrows="stacked"] {
  flex-direction: column;
  align-items: stretch;
}

ry-number-select[arrows="stacked"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
  width: auto;
  height: 24px;
}

ry-number-select[arrows="stacked"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
  width: 14px;
  height: 14px;
}

/* Stacked-end / stacked-start (buttons grouped beside display) */
ry-number-select [data-ry-target="btn-group"] {
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
}

:is(ry-number-select[arrows="stacked-end"], ry-number-select[arrows="stacked-start"]) :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
  width: 28px;
  height: 18px;
}

:is(ry-number-select[arrows="stacked-end"], ry-number-select[arrows="stacked-start"]) :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
  width: 12px;
  height: 12px;
}

/* Sizes */
ry-number-select[size="xs"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 20px; height: 22px; }
ry-number-select[size="xs"] [data-ry-target="display"] { min-width: 28px; height: 22px; padding: 0 var(--ry-space-1, 0.25rem); }
ry-number-select[size="xs"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg { width: 12px; height: 12px; }

ry-number-select[size="sm"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 24px; height: 28px; }
ry-number-select[size="sm"] [data-ry-target="display"] { min-width: 36px; height: 28px; }

ry-number-select[size="lg"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 40px; height: 44px; }
ry-number-select[size="lg"] [data-ry-target="display"] { min-width: 60px; height: 44px; }

/* ═══════════════════════════════════════════════════════════════
   SLIDER
   ═══════════════════════════════════════════════════════════════ */

ry-slider {
  display: block;
  position: relative;
  padding: var(--ry-space-4, 1rem) 0;
  touch-action: none;
  user-select: none;
}

ry-slider[disabled] {
  pointer-events: none;
}

ry-slider [data-ry-target="track"] {
  position: relative;
  height: var(--ry-slider-track, 14px);
  cursor: pointer;
}

ry-slider [data-ry-target="fill"] {
  position: absolute;
  height: 100%;
}

ry-slider [data-ry-target^="thumb"] {
  position: absolute;
  width: var(--ry-slider-thumb, 32px);
  height: var(--ry-slider-thumb, 32px);
  top: 50%;
  transform: translate(-50%, -50%);
  cursor: grab;
}

ry-slider [data-ry-target^="thumb"]:active {
  cursor: grabbing;
}

ry-slider [data-ry-target="labels"] {
  display: flex;
  justify-content: space-between;
  margin-block-start: var(--ry-space-2, 0.5rem);
  pointer-events: none;
}

ry-slider [data-ry-target^="tooltip"] {
  position: absolute;
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%);
  white-space: nowrap;
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
  pointer-events: none;
}

:is(ry-slider [data-ry-target^="thumb"]:hover,
    ry-slider [data-ry-target^="thumb"]:focus,
    ry-slider[data-dragging]) [data-ry-target^="tooltip"] {
  opacity: 1;
  visibility: visible;
}

@starting-style {
  :is(ry-slider [data-ry-target^="thumb"]:hover,
      ry-slider [data-ry-target^="thumb"]:focus,
      ry-slider[data-dragging]) [data-ry-target^="tooltip"] {
    opacity: 0;
  }
}

/* Vertical */
ry-slider[vertical] {
  display: inline-flex;
  width: auto;
  height: 200px;
  padding: 0 var(--ry-space-4, 1rem);
}

ry-slider[vertical] [data-ry-target="track"] {
  width: var(--ry-slider-track, 14px);
  height: 100%;
}

ry-slider[vertical] [data-ry-target="fill"] {
  width: 100%;
  height: auto;
  bottom: 0;
  left: 0;
}

ry-slider[vertical] [data-ry-target^="thumb"] {
  left: 50%;
  top: auto;
  transform: translate(-50%, 50%);
}

ry-slider[vertical] [data-ry-target="labels"] {
  flex-direction: column-reverse;
  justify-content: space-between;
  height: 100%;
  margin-block-start: 0;
  margin-inline-start: var(--ry-space-2, 0.5rem);
}

/* Sizes */
ry-slider[size="sm"] { --ry-slider-track: 10px; --ry-slider-thumb: 24px; }
ry-slider[size="lg"] { --ry-slider-track: 18px; --ry-slider-thumb: 40px; }

/* ═══════════════════════════════════════════════════════════════
   CARDS
   ═══════════════════════════════════════════════════════════════ */

ry-card {
  display: block;
  padding: var(--ry-space-6, 1.5rem);
  container-type: inline-size;
}

:is(a, [interactive]):is(ry-card) {
  cursor: pointer;
  transition: transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
}

:is(a, [interactive]):is(ry-card):hover {
  transform: translateY(-1px);
}

:is(a, [interactive]):is(ry-card):active {
  transform: translateY(0);
}

ry-card h3 {
  margin: 0 0 var(--ry-space-2, 0.5rem) 0;
}

ry-card p {
  margin: 0 0 var(--ry-space-4, 1rem) 0;
}

ry-card p:last-child {
  margin-bottom: 0;
}

ry-card > img:first-child {
  display: block;
  width: 100%;
  margin-bottom: var(--ry-space-4, 1rem);
}

/* ═══════════════════════════════════════════════════════════════
   BADGES
   ═══════════════════════════════════════════════════════════════ */

ry-badge {
  display: inline-flex;
  align-items: center;
  padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
  line-height: 1;
}

/* ═══════════════════════════════════════════════════════════════
   ALERTS
   ═══════════════════════════════════════════════════════════════ */

ry-alert {
  display: flex;
  gap: var(--ry-space-3, 0.75rem);
  padding: var(--ry-space-4, 1rem);
}

.ry-alert__title {
  margin: 0 0 var(--ry-space-1, 0.25rem) 0;
}

ry-alert p,
ry-alert [data-ry-target="content"] {
  margin: 0;
}

/* ═══════════════════════════════════════════════════════════════
   FORM ELEMENTS
   ═══════════════════════════════════════════════════════════════ */

ry-field :is(input, textarea, select) {
  display: block;
  width: 100%;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
}

ry-field :is(input, textarea):disabled {
  cursor: not-allowed;
}

ry-field :is(label, [data-ry-target="label"]) {
  display: block;
  margin-block-end: var(--ry-space-2, 0.5rem);
}

ry-field {
  display: block;
  margin-block-end: var(--ry-space-4, 1rem);
}

ry-field [data-ry-target="error"]:empty,
ry-field [data-ry-target="hint"]:empty {
  display: none;
}

ry-field [data-ry-target="error"]:not(:empty) ~ [data-ry-target="hint"] {
  display: none;
}

ry-field :is([data-ry-target="error"], [data-ry-target="hint"]) {
  margin-block-start: var(--ry-space-1, 0.25rem);
}

/* ═══════════════════════════════════════════════════════════════
   ACCORDION
   ═══════════════════════════════════════════════════════════════ */

ry-accordion {
  overflow: hidden;
}

ry-accordion [data-ry-target="trigger"] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  padding: var(--ry-space-4, 1rem) var(--ry-space-6, 1.5rem);
  text-align: start;
  border: none;
  cursor: pointer;
}

ry-accordion [data-ry-target="icon"] {
  flex-shrink: 0;
  transition: transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
}

ry-accordion [data-ry-target="item"][data-ry-state="open"] [data-ry-target="icon"] {
  transform: rotate(180deg);
}

ry-accordion [data-ry-target="panel"] {
  overflow: hidden;
}

ry-accordion [data-ry-target="item"][data-ry-state="closed"] [data-ry-target="panel"] {
  display: none;
}

ry-accordion [data-ry-target="panel"] > * {
  padding: var(--ry-space-4, 1rem) var(--ry-space-6, 1.5rem);
}

/* ═══════════════════════════════════════════════════════════════
   TABS
   ═══════════════════════════════════════════════════════════════ */

ry-tabs {
  display: block;
}

ry-tabs [data-ry-target="list"] {
  display: flex;
  gap: var(--ry-space-1, 0.25rem);
  margin-block-end: var(--ry-space-4, 1rem);
}

ry-tabs [data-ry-target="trigger"] {
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-4, 1rem);
  border: none;
  border-block-end: 2px solid transparent;
  margin-block-end: -1px;
  cursor: pointer;
}

ry-tabs [data-ry-target="panel"],
ry-tab {
  display: none;
}

:is(ry-tabs [data-ry-target="panel"][data-ry-state="active"],
    ry-tab[active],
    ry-tab[data-ry-state="active"]) {
  display: block;
}

ry-tabs:not(:defined) ry-tab:first-of-type {
  display: block;
}

/* ═══════════════════════════════════════════════════════════════
   MODAL
   ═══════════════════════════════════════════════════════════════ */

ry-modal {
  display: contents;
}

ry-modal [data-ry-target="backdrop"] {
  position: fixed;
  inset: 0;
  z-index: var(--ry-z-modal-backdrop, 1040);
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
              visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-modal[data-ry-state="open"] [data-ry-target="backdrop"] {
  opacity: 1;
  visibility: visible;
}

@starting-style {
  ry-modal[data-ry-state="open"] [data-ry-target="backdrop"] {
    opacity: 0;
  }
}

ry-modal [data-ry-target="dialog"] {
  position: fixed;
  top: 50%;
  left: 50%;
  z-index: var(--ry-z-modal, 1050);
  width: 100%;
  max-width: 32rem;
  max-height: calc(100vh - var(--ry-space-8, 2rem));
  overflow: auto;
  overscroll-behavior: contain;
  opacity: 0;
  visibility: hidden;
  transform: translate(-50%, -50%) scale(0.95);
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
              visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
              transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-modal[data-ry-state="open"] [data-ry-target="dialog"] {
  opacity: 1;
  visibility: visible;
  transform: translate(-50%, -50%) scale(1);
}

@starting-style {
  ry-modal[data-ry-state="open"] [data-ry-target="dialog"] {
    opacity: 0;
    transform: translate(-50%, -50%) scale(0.95);
  }
}

ry-modal [data-ry-target="header"] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--ry-space-4, 1rem) var(--ry-space-6, 1.5rem);
}

ry-modal [data-ry-target="header"] h3 {
  margin: 0;
}

ry-modal [data-ry-target="close"] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-modal [data-ry-target="body"] {
  padding: var(--ry-space-6, 1.5rem);
}

ry-modal [data-ry-target="footer"] {
  display: flex;
  justify-content: flex-end;
  gap: var(--ry-space-3, 0.75rem);
  padding: var(--ry-space-4, 1rem) var(--ry-space-6, 1.5rem);
}

/* ═══════════════════════════════════════════════════════════════
   DROPDOWN
   ═══════════════════════════════════════════════════════════════ */

ry-dropdown {
  position: relative;
  display: inline-block;
}

ry-dropdown :is([data-ry-target="menu"], ry-menu) {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: var(--ry-z-dropdown, 1000);
  min-width: 12rem;
  margin-block-start: var(--ry-space-1, 0.25rem);
  padding: var(--ry-space-1, 0.25rem);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-0.5rem);
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-dropdown[data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

@starting-style {
  ry-dropdown[data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
    opacity: 0;
    transform: translateY(-0.5rem);
  }
}

ry-dropdown[data-ry-position="top"] :is([data-ry-target="menu"], ry-menu) {
  top: auto;
  bottom: 100%;
  margin-block-start: 0;
  margin-block-end: var(--ry-space-1, 0.25rem);
  transform: translateY(0.5rem);
}

ry-dropdown[data-ry-position="top"][data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
  transform: translateY(0);
}

ry-menu-item {
  display: block;
  width: 100%;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  text-align: start;
  text-decoration: none;
  border: none;
  cursor: pointer;
}

/* ═══════════════════════════════════════════════════════════════
   SWITCH
   ═══════════════════════════════════════════════════════════════ */

ry-switch {
  display: inline-flex;
  align-items: center;
  gap: var(--ry-space-3, 0.75rem);
  cursor: pointer;
  user-select: none;
}

ry-switch[disabled] {
  cursor: not-allowed;
}

ry-switch [data-ry-target="track"] {
  position: relative;
  display: inline-flex;
  width: 2.75rem;
  height: 1.5rem;
  flex-shrink: 0;
}

ry-switch [data-ry-target="thumb"] {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 1.125rem;
  height: 1.125rem;
  transition: transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
}

ry-switch[checked] [data-ry-target="thumb"] {
  transform: translateX(1.25rem);
}

ry-switch [data-ry-target="input"] {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}

ry-switch:focus-visible {
  outline: none;
}

/* ═══════════════════════════════════════════════════════════════
   TOOLTIP
   ═══════════════════════════════════════════════════════════════ */

ry-tooltip {
  position: relative;
  display: inline-block;
}

ry-tooltip [data-ry-target="content"] {
  position: absolute;
  z-index: var(--ry-z-tooltip, 1070);
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  white-space: nowrap;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-tooltip[data-ry-state="open"] [data-ry-target="content"] {
  opacity: 1;
  visibility: visible;
}

@starting-style {
  ry-tooltip[data-ry-state="open"] [data-ry-target="content"] {
    opacity: 0;
  }
}

/* Tooltip positioning - CSS handles all layout, no JS needed */
ry-tooltip[data-ry-position="top"] [data-ry-target="content"] {
  bottom: 100%;
  left: 50%;
  transform: translateX(-50%);
  margin-bottom: var(--ry-space-2, 0.5rem);
}

ry-tooltip[data-ry-position="bottom"] [data-ry-target="content"] {
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  margin-top: var(--ry-space-2, 0.5rem);
}

ry-tooltip[data-ry-position="left"] [data-ry-target="content"] {
  right: 100%;
  top: 50%;
  transform: translateY(-50%);
  margin-right: var(--ry-space-2, 0.5rem);
}

ry-tooltip[data-ry-position="right"] [data-ry-target="content"] {
  left: 100%;
  top: 50%;
  transform: translateY(-50%);
  margin-left: var(--ry-space-2, 0.5rem);
}

/* ═══════════════════════════════════════════════════════════════
   DRAWER
   ═══════════════════════════════════════════════════════════════ */

ry-drawer {
  display: contents;
}

ry-drawer [data-ry-target="backdrop"] {
  position: fixed;
  inset: 0;
  z-index: var(--ry-z-modal-backdrop, 1040);
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
              visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-drawer[data-ry-state="open"] [data-ry-target="backdrop"] {
  opacity: 1;
  visibility: visible;
}

@starting-style {
  ry-drawer[data-ry-state="open"] [data-ry-target="backdrop"] {
    opacity: 0;
  }
}

ry-drawer [data-ry-target="panel"] {
  position: fixed;
  z-index: var(--ry-z-modal, 1050);
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
              visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
              transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-drawer[data-ry-state="open"] [data-ry-target="panel"] {
  opacity: 1;
  visibility: visible;
}

@starting-style {
  ry-drawer[data-ry-state="open"] [data-ry-target="panel"] {
    opacity: 0;
  }
}

/* Left drawer */
ry-drawer [data-ry-target="panel"][data-ry-side="left"] {
  top: 0;
  left: 0;
  bottom: 0;
  width: 20rem;
  max-width: 100%;
  transform: translateX(-100%);
}

ry-drawer[data-ry-state="open"] [data-ry-target="panel"][data-ry-side="left"] {
  transform: translateX(0);
}

/* Right drawer */
ry-drawer [data-ry-target="panel"][data-ry-side="right"] {
  top: 0;
  right: 0;
  bottom: 0;
  width: 20rem;
  max-width: 100%;
  transform: translateX(100%);
}

ry-drawer[data-ry-state="open"] [data-ry-target="panel"][data-ry-side="right"] {
  transform: translateX(0);
}

/* Top drawer */
ry-drawer [data-ry-target="panel"][data-ry-side="top"] {
  top: 0;
  left: 0;
  right: 0;
  height: auto;
  max-height: 80vh;
  transform: translateY(-100%);
}

ry-drawer[data-ry-state="open"] [data-ry-target="panel"][data-ry-side="top"] {
  transform: translateY(0);
}

/* Bottom drawer */
ry-drawer [data-ry-target="panel"][data-ry-side="bottom"] {
  bottom: 0;
  left: 0;
  right: 0;
  height: auto;
  max-height: 80vh;
  transform: translateY(100%);
}

ry-drawer[data-ry-state="open"] [data-ry-target="panel"][data-ry-side="bottom"] {
  transform: translateY(0);
}

ry-drawer [data-ry-target="close"] {
  position: absolute;
  top: var(--ry-space-4, 1rem);
  right: var(--ry-space-4, 1rem);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-drawer [data-ry-target="content"] {
  padding: var(--ry-space-6, 1.5rem);
  padding-top: var(--ry-space-12, 3rem);
  overflow-y: auto;
  overscroll-behavior: contain;
  height: 100%;
}

/* ═══════════════════════════════════════════════════════════════
   TOAST
   ═══════════════════════════════════════════════════════════════ */

[data-ry-target="toast-container"] {
  position: fixed;
  top: var(--ry-space-4, 1rem);
  right: var(--ry-space-4, 1rem);
  z-index: var(--ry-z-toast, 1080);
  display: flex;
  flex-direction: column;
  gap: var(--ry-space-3, 0.75rem);
  max-width: 24rem;
  pointer-events: none;
}

ry-toast {
  display: flex;
  align-items: flex-start;
  gap: var(--ry-space-3, 0.75rem);
  padding: var(--ry-space-4, 1rem);
  pointer-events: auto;
  opacity: 0;
  transform: translateX(1rem);
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
              transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-toast[data-ry-state="visible"] {
  opacity: 1;
  transform: translateX(0);
}

@starting-style {
  ry-toast[data-ry-state="visible"] {
    opacity: 0;
    transform: translateX(1rem);
  }
}

ry-toast[data-ry-state="hiding"] {
  opacity: 0;
  transform: translateX(1rem);
}

ry-toast [data-ry-target="icon"] {
  flex-shrink: 0;
  width: 1.25rem;
  height: 1.25rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

ry-toast [data-ry-target="content"] {
  flex: 1;
}

ry-toast [data-ry-target="close"] {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1.5rem;
  height: 1.5rem;
  padding: 0;
  margin: calc(var(--ry-space-1, 0.25rem) * -1);
  border: none;
  cursor: pointer;
}

/* ═══════════════════════════════════════════════════════════════
   SELECT
   ═══════════════════════════════════════════════════════════════ */

ry-select {
  position: relative;
  display: inline-block;
  min-width: 12rem;
}

ry-select[disabled] {
  cursor: not-allowed;
}

ry-select [data-ry-target="trigger"] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ry-space-2, 0.5rem);
  width: 100%;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  cursor: pointer;
}

ry-select [data-ry-target="value"] {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

ry-select [data-ry-target="arrow"] {
  flex-shrink: 0;
  transition: transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
}

ry-select[data-ry-state="open"] [data-ry-target="arrow"] {
  transform: rotate(180deg);
}

ry-select [data-ry-target="dropdown"] {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  z-index: var(--ry-z-dropdown, 1000);
  margin-block-start: var(--ry-space-1, 0.25rem);
  padding: var(--ry-space-1, 0.25rem);
  max-height: 15rem;
  overflow-y: auto;
  overscroll-behavior: contain;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-0.5rem);
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-select[data-ry-state="open"] [data-ry-target="dropdown"] {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

@starting-style {
  ry-select[data-ry-state="open"] [data-ry-target="dropdown"] {
    opacity: 0;
    transform: translateY(-0.5rem);
  }
}

ry-select[data-ry-position="top"] [data-ry-target="dropdown"] {
  top: auto;
  bottom: 100%;
  margin-block-start: 0;
  margin-block-end: var(--ry-space-1, 0.25rem);
  transform: translateY(0.5rem);
}

ry-select[data-ry-position="top"][data-ry-state="open"] [data-ry-target="dropdown"] {
  transform: translateY(0);
}

ry-select [data-ry-target="option"] {
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  cursor: pointer;
}

ry-select [data-ry-target="option"][data-disabled] {
  cursor: not-allowed;
}

ry-select [data-ry-target="native"] {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}

ry-option {
  display: none;
}

/* Multi-select trigger */
ry-select[multiple] [data-ry-target="trigger"] {
  flex-wrap: wrap;
  gap: var(--ry-space-1, 0.25rem);
  min-height: 2.5rem;
}

ry-select[multiple] [data-ry-target="tags"] {
  display: flex;
  flex-wrap: wrap;
  flex: 1 1 0%;
  gap: var(--ry-space-1, 0.25rem);
  align-items: center;
}

ry-select[multiple] [data-ry-target="clear"] {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 1.25rem;
  height: 1.25rem;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-select[multiple] [data-ry-target="clear"] svg {
  width: 14px;
  height: 14px;
}

ry-select [data-ry-target="check"] {
  display: inline-flex;
  align-items: center;
  width: 1rem;
  height: 1rem;
  flex-shrink: 0;
  opacity: 0;
}

ry-select [data-ry-target="check"] svg {
  width: 14px;
  height: 14px;
}

ry-select [data-ry-target="option"][aria-selected="true"] [data-ry-target="check"] {
  opacity: 1;
}

ry-select[multiple] [data-ry-target="option"] {
  display: flex;
  align-items: center;
  gap: var(--ry-space-2, 0.5rem);
}

/* ═══════════════════════════════════════════════════════════════
   KEYFRAMES (structural animations)
   ═══════════════════════════════════════════════════════════════ */

@keyframes ry-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes ry-fade-out {
  from { opacity: 1; }
  to { opacity: 0; }
}

@keyframes ry-slide-up {
  from { transform: translateY(1rem); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

@keyframes ry-slide-down {
  from { transform: translateY(-1rem); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

@keyframes ry-scale-in {
  from { transform: scale(0.95); opacity: 0; }
  to { transform: scale(1); opacity: 1; }
}

/* ═══════════════════════════════════════════════════════════════
   CODE
   ═══════════════════════════════════════════════════════════════ */

ry-code {
  display: block;
  overflow: hidden;
  margin-block-end: var(--ry-space-4, 1rem);
}

ry-code [data-ry-target="header"] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-4, 1rem);
}

ry-code [data-ry-target="title"] {
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

ry-code [data-ry-target="copy"] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1.75rem;
  height: 1.75rem;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-code [data-ry-target="copy"] svg {
  width: 16px;
  height: 16px;
}

ry-code [data-ry-target="content"] {
  overflow: auto;
  padding: 0 var(--ry-space-4, 1rem) var(--ry-space-4, 1rem);
}

ry-code [data-ry-target="pre"] {
  margin: 0;
  overflow: visible;
}

ry-code [data-ry-target="code"] {
  display: block;
  white-space: pre;
  tab-size: 2;
}

ry-code .ry-code__line {
  display: flex;
}

ry-code .ry-code__line-number {
  flex-shrink: 0;
  width: 2rem;
  text-align: end;
  padding-inline-end: var(--ry-space-2, 0.5rem);
  user-select: none;
}

ry-code .ry-code__line-content {
  flex: 1;
  min-width: 0;
  padding-inline-start: var(--ry-space-2, 0.5rem);
}

ry-code .ry-code__color-preview {
  display: inline-block;
  width: 0.625rem;
  height: 0.625rem;
  margin-inline-end: var(--ry-space-1, 0.25rem);
  vertical-align: middle;
}

/* ═══════════════════════════════════════════════════════════════
   EXAMPLE
   ═══════════════════════════════════════════════════════════════ */

ry-example {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--ry-space-4, 1rem);
  align-items: start;
}

ry-example [data-ry-target="code"] {
  min-width: 0;
}

ry-example [data-ry-target="preview"] {
  min-width: 0;
  padding: var(--ry-space-4, 1rem);
}

@container (max-width: 768px) {
  ry-example {
    grid-template-columns: 1fr;
  }
}

ry-example[data-stacked] {
  grid-template-columns: 1fr;
}

.ry-example__usage {
  grid-column: 1 / -1;
  padding-block-end: 3rem;
}

.ry-example__usage-toggle {
  display: flex;
  align-items: center;
  gap: var(--ry-space-2, 0.5rem);
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  width: 100%;
  cursor: pointer;
}

.ry-example__usage-toggle ry-icon {
  transition: transform var(--ry-duration-fast, 150ms) ease;
}

.ry-example__usage-toggle[aria-expanded="true"] ry-icon {
  transform: rotate(180deg);
}

.ry-example__usage-panel {
  margin-block-start: var(--ry-space-2, 0.5rem);
}

.ry-example__usage-panel[hidden] {
  display: none;
}

/* ═══════════════════════════════════════════════════════════════
   ICON
   ═══════════════════════════════════════════════════════════════ */

ry-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  vertical-align: middle;
  flex-shrink: 0;
}

ry-icon svg {
  display: block;
}

/* ═══════════════════════════════════════════════════════════════
   CHECKBOX
   ═══════════════════════════════════════════════════════════════ */

input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.125rem;
  height: 1.125rem;
  flex-shrink: 0;
  cursor: pointer;
  vertical-align: middle;
}

input[type="checkbox"]:disabled {
  cursor: not-allowed;
}

input[type="checkbox"]::after {
  content: '';
  display: block;
  width: 0.375rem;
  height: 0.625rem;
  opacity: 0;
  transform: rotate(45deg) scale(0.8);
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
}

input[type="checkbox"]:checked::after {
  opacity: 1;
  transform: rotate(45deg) scale(1);
}

/* ═══════════════════════════════════════════════════════════════
   RADIO
   ═══════════════════════════════════════════════════════════════ */

input[type="radio"] {
  appearance: none;
  -webkit-appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.125rem;
  height: 1.125rem;
  flex-shrink: 0;
  cursor: pointer;
  vertical-align: middle;
}

input[type="radio"]:disabled {
  cursor: not-allowed;
}

input[type="radio"]::after {
  content: '';
  display: block;
  width: 0.5rem;
  height: 0.5rem;
  opacity: 0;
  transform: scale(0);
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
}

input[type="radio"]:checked::after {
  opacity: 1;
  transform: scale(1);
}

/* ═══════════════════════════════════════════════════════════════
   TABLE
   ═══════════════════════════════════════════════════════════════ */

table {
  width: 100%;
  border-collapse: collapse;
  text-align: start;
}

th, td {
  padding: var(--ry-space-3, 0.75rem) var(--ry-space-4, 1rem);
  vertical-align: top;
}

th {
  text-align: start;
}

/* ═══════════════════════════════════════════════════════════════
   COLOR PICKER
   ═══════════════════════════════════════════════════════════════ */

ry-color-picker {
  position: relative;
  display: inline-block;
  user-select: none;
}

ry-color-picker[disabled] {
  pointer-events: none;
}

/* Trigger button (dropdown mode) */
ry-color-picker [data-ry-target="trigger"] {
  display: block;
  width: var(--ry-color-picker-trigger-size, 32px);
  height: var(--ry-color-picker-trigger-size, 32px);
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-color-picker [data-ry-target="trigger-color"] {
  display: block;
  width: 100%;
  height: 100%;
}

/* Panel */
ry-color-picker [data-ry-target="panel"] {
  width: var(--ry-color-picker-width, 240px);
}

/* Dropdown mode: panel is absolutely positioned */
ry-color-picker:not([inline]) [data-ry-target="panel"] {
  position: absolute;
  left: 0;
  z-index: var(--ry-z-dropdown, 1000);
  opacity: 0;
  visibility: hidden;
}

/* Position below trigger */
ry-color-picker[data-ry-position="bottom"] [data-ry-target="panel"] {
  top: 100%;
  margin-top: var(--ry-space-1, 0.25rem);
  transform: translateY(-0.5rem);
}

/* Position above trigger */
ry-color-picker[data-ry-position="top"] [data-ry-target="panel"] {
  bottom: 100%;
  top: auto;
  margin-bottom: var(--ry-space-1, 0.25rem);
  transform: translateY(0.5rem);
}

/* Open state - only animate when position is set */
ry-color-picker[data-ry-state="open"][data-ry-position] [data-ry-target="panel"] {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
}

/* Inline mode: panel always visible */
ry-color-picker[inline] [data-ry-target="panel"] {
  position: static;
  opacity: 1;
  visibility: visible;
  transform: none;
}

/* Grid (saturation/brightness) */
ry-color-picker [data-ry-target="grid"] {
  position: relative;
  width: 100%;
  height: var(--ry-color-picker-grid-height, 160px);
  cursor: crosshair;
  touch-action: none;
}

ry-color-picker [data-ry-target="grid-handle"] {
  position: absolute;
  width: var(--ry-color-picker-handle-size, 16px);
  height: var(--ry-color-picker-handle-size, 16px);
  transform: translate(-50%, -50%);
  cursor: grab;
}

ry-color-picker [data-ry-target="grid-handle"]:active {
  cursor: grabbing;
}

/* Controls row (sliders + preview) */
ry-color-picker [data-ry-target="controls"] {
  display: flex;
  gap: var(--ry-space-3, 0.75rem);
  padding: var(--ry-space-3, 0.75rem);
}

ry-color-picker [data-ry-target="sliders"] {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: var(--ry-space-2, 0.5rem);
  justify-content: center;
}

/* Sliders (hue, alpha) */
ry-color-picker .ry-color-picker__slider {
  position: relative;
  height: var(--ry-color-picker-slider-height, 12px);
  cursor: pointer;
  touch-action: none;
}

ry-color-picker .ry-color-picker__slider-handle {
  position: absolute;
  top: 50%;
  width: var(--ry-color-picker-slider-handle, 16px);
  height: var(--ry-color-picker-slider-handle, 16px);
  transform: translate(-50%, -50%);
  cursor: grab;
}

ry-color-picker .ry-color-picker__slider-handle:active {
  cursor: grabbing;
}

/* Preview swatch */
ry-color-picker [data-ry-target="preview"] {
  position: relative;
  width: var(--ry-color-picker-preview-size, 40px);
  height: var(--ry-color-picker-preview-size, 40px);
  flex-shrink: 0;
}

ry-color-picker [data-ry-target="preview-color"] {
  position: absolute;
  inset: 0;
}

/* Input row */
ry-color-picker [data-ry-target="input-row"] {
  display: flex;
  gap: var(--ry-space-2, 0.5rem);
  padding: 0 var(--ry-space-3, 0.75rem) var(--ry-space-3, 0.75rem);
}

ry-color-picker [data-ry-target="input"] {
  flex: 1;
  min-width: 0;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
}

ry-color-picker [data-ry-target="format-toggle"] {
  flex-shrink: 0;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  border: none;
  cursor: pointer;
}

/* Swatches */
ry-color-picker [data-ry-target="swatches"] {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ry-space-1, 0.25rem);
  padding: 0 var(--ry-space-3, 0.75rem) var(--ry-space-3, 0.75rem);
}

ry-color-picker .ry-color-picker__swatch {
  width: var(--ry-color-picker-swatch-size, 20px);
  height: var(--ry-color-picker-swatch-size, 20px);
  padding: 0;
  border: none;
  cursor: pointer;
}

/* ═══════════════════════════════════════════════════════════════
   COLOR INPUT
   ═══════════════════════════════════════════════════════════════ */

ry-color-input {
  position: relative;
  display: inline-block;
}

ry-color-input[disabled] {
  pointer-events: none;
}

ry-color-input [data-ry-target="trigger"] {
  display: flex;
  align-items: stretch;
}

ry-color-input [data-ry-target="swatch"] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--ry-color-input-swatch-width, 40px);
  flex-shrink: 0;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-color-input [data-ry-target="swatch-color"] {
  display: block;
  width: 100%;
  height: 100%;
}

ry-color-input [data-ry-target="input"] {
  flex: 1;
  min-width: 0;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
}

/* Panel (dropdown) */
ry-color-input [data-ry-target="panel"] {
  position: absolute;
  left: 0;
  z-index: var(--ry-z-dropdown, 1000);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

/* Position below trigger */
ry-color-input[data-ry-position="bottom"] [data-ry-target="panel"] {
  top: 100%;
  margin-top: var(--ry-space-1, 0.25rem);
  transform: translateY(-0.5rem);
}

/* Position above trigger */
ry-color-input[data-ry-position="top"] [data-ry-target="panel"] {
  bottom: 100%;
  top: auto;
  margin-bottom: var(--ry-space-1, 0.25rem);
  transform: translateY(0.5rem);
}

/* Open state */
ry-color-input[data-ry-state="open"][data-ry-position] [data-ry-target="panel"] {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(0);
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
}

/* Hide the embedded picker's panel border since we provide our own */
ry-color-input ry-color-picker[inline] [data-ry-target="panel"] {
  border: none;
  box-shadow: none;
}

/* ═══════════════════════════════════════════════════════════════
   GRADIENT PICKER
   ═══════════════════════════════════════════════════════════════ */

ry-gradient-picker {
  display: block;
  width: var(--ry-color-picker-width, 240px);
}

ry-gradient-picker[disabled] {
  pointer-events: none;
}

/* Controls row */
ry-gradient-picker [data-ry-target="controls"] {
  display: flex;
  align-items: center;
  gap: var(--ry-space-3, 0.75rem);
  padding: var(--ry-space-3, 0.75rem);
}

ry-gradient-picker [data-ry-target="type-toggle"] {
  display: flex;
  gap: var(--ry-space-1, 0.25rem);
}

ry-gradient-picker [data-ry-target="type-toggle"] button {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-gradient-picker [data-ry-target="type-toggle"] button svg {
  width: 16px;
  height: 16px;
}

/* Angle control — visible when linear (default) */
ry-gradient-picker [data-ry-target="angle-control"] {
  display: flex;
  align-items: center;
  gap: var(--ry-space-1, 0.25rem);
  margin-inline-start: auto;
}

ry-gradient-picker [data-ry-target="angle-control"] ry-number-select {
  min-width: 0;
}

/* Shape control — hidden by default */
ry-gradient-picker [data-ry-target="shape-control"] {
  display: none;
  gap: var(--ry-space-1, 0.25rem);
  margin-inline-start: auto;
}

ry-gradient-picker [data-ry-target="shape-control"] button {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-gradient-picker [data-ry-target="shape-control"] button svg {
  width: 16px;
  height: 16px;
}

/* When radial: hide angle, show shape */
ry-gradient-picker[data-ry-type="radial"] [data-ry-target="angle-control"] {
  display: none;
}

ry-gradient-picker[data-ry-type="radial"] [data-ry-target="shape-control"] {
  display: flex;
}

/* When solid: hide bar, angle, shape */
ry-gradient-picker[data-ry-type="solid"] :is([data-ry-target="bar-container"], [data-ry-target="angle-control"], [data-ry-target="shape-control"]) {
  display: none;
}

/* Gradient bar */
ry-gradient-picker [data-ry-target="bar-container"] {
  position: relative;
  margin: 0 10px;
  padding: var(--ry-space-4, 1rem) 0;
}

ry-gradient-picker [data-ry-target="bar"] {
  position: relative;
  height: var(--ry-gradient-picker-bar-height, 24px);
  cursor: pointer;
  touch-action: none;
}

/* Stop handle */
ry-gradient-picker [data-ry-target="stop"] {
  position: absolute;
  top: 50%;
  width: var(--ry-gradient-picker-stop-size, 16px);
  height: var(--ry-gradient-picker-stop-size, 16px);
  transform: translate(-50%, -50%);
  cursor: grab;
  z-index: 1;
}

ry-gradient-picker [data-ry-target="stop"]:active {
  cursor: grabbing;
}

ry-gradient-picker [data-ry-target="stop"][data-selected] {
  z-index: 2;
  width: calc(var(--ry-gradient-picker-stop-size, 16px) + 4px);
  height: calc(var(--ry-gradient-picker-stop-size, 16px) + 4px);
}

/* Inline color picker — remove extra border */
ry-gradient-picker ry-color-picker[inline] [data-ry-target="panel"] {
  border: none;
  box-shadow: none;
}

/* CSS output */
ry-gradient-picker [data-ry-target="output-row"] {
  display: flex;
  align-items: center;
  gap: var(--ry-space-1, 0.25rem);
  padding: 0 var(--ry-space-3, 0.75rem) var(--ry-space-3, 0.75rem);
}

ry-gradient-picker [data-ry-target="output"] {
  flex: 1;
  min-width: 0;
  padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
  border: none;
}

ry-gradient-picker [data-ry-target="copy-btn"] {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 28px;
  height: 28px;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-gradient-picker [data-ry-target="copy-btn"] svg {
  width: 14px;
  height: 14px;
}

/* ═══════════════════════════════════════════════════════════════
   TREE
   ═══════════════════════════════════════════════════════════════ */

ry-tree {
  display: block;
}

ry-tree-item {
  display: none;
}

:is(.ry-tree__root, .ry-tree__children) {
  list-style: none;
  padding: 0;
  margin: 0;
}

.ry-tree__children {
  margin-inline-start: 11px;
  padding-inline-start: 11px;
  overflow: hidden;
}

.ry-tree__item {
  position: relative;
  margin-block-start: var(--ry-space-1, 0.25rem);
}

/* Horizontal connector lines for nested items */
.ry-tree__children .ry-tree__item::before {
  content: "";
  position: absolute;
  inset-inline-start: -11px;
  top: 14px;
  width: 11px;
  height: 1px;
}

:is(.ry-tree__label, .ry-tree__file) {
  display: flex;
  align-items: center;
  gap: var(--ry-space-2, 0.5rem);
  padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
  height: 28px;
  cursor: pointer;
  user-select: none;
  text-decoration: none;
}

/* Hidden checkbox — the CSS engine for expand/collapse */
/* Compound selector to override global input[type="checkbox"] styles */
input[type="checkbox"].ry-tree__toggle {
  display: none;
  appearance: auto;
  width: 0;
  height: 0;
  margin: 0;
  padding: 0;
  border: none;
}

/* Folder icon swap */
.ry-tree__icon-open {
  display: none;
}
.ry-tree__icon-closed {
  display: flex;
}

.ry-tree__toggle:checked ~ .ry-tree__label .ry-tree__icon-open {
  display: flex;
}
.ry-tree__toggle:checked ~ .ry-tree__label .ry-tree__icon-closed {
  display: none;
}

/* Grid animation for expand/collapse */
.ry-tree__children-wrapper {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows var(--ry-tree-duration, 150ms) var(--ry-ease, ease);
}

ry-tree[no-animate] .ry-tree__children-wrapper {
  transition-duration: 0ms;
}

.ry-tree__toggle:checked ~ .ry-tree__children-wrapper {
  grid-template-rows: 1fr;
}

.ry-tree__icon {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
}

/* ── Drag and Drop ── */

.ry-tree__ghost {
  position: fixed;
  pointer-events: none;
  user-select: none;
  z-index: var(--ry-z-toast, 1080);
  transform: rotate(-2deg);
}

.ry-tree__item[data-ry-dragging] {
  opacity: 0.4;
}

.ry-tree__item--collapsed {
  height: 4px;
  overflow: hidden;
  pointer-events: none;
}

.ry-tree__item:is([data-ry-drop-target="before"], [data-ry-drop-target="after"])::after {
  content: '';
  position: absolute;
  inset-inline: 0;
  height: 2px;
  pointer-events: none;
}

.ry-tree__item[data-ry-drop-target="before"]::after {
  top: -1px;
}

.ry-tree__item[data-ry-drop-target="after"]::after {
  bottom: -1px;
}

/* ═══════════════════════════════════════════════════════════════
   TAG
   ═══════════════════════════════════════════════════════════════ */

ry-tag {
  display: inline-flex;
  align-items: center;
  gap: var(--ry-space-1, 0.25rem);
  padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
  max-width: 100%;
  line-height: 1;
}

ry-tag[disabled] {
  pointer-events: none;
}

ry-tag [data-ry-target="label"] {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

ry-tag [data-ry-target="remove"] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 1rem;
  height: 1rem;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-tag [data-ry-target="remove"] svg {
  width: 12px;
  height: 12px;
}

/* Size variants */
ry-tag[size="sm"] {
  padding: 2px var(--ry-space-1, 0.25rem);
}

ry-tag[size="sm"] [data-ry-target="remove"] {
  width: 0.75rem;
  height: 0.75rem;
}

ry-tag[size="sm"] [data-ry-target="remove"] svg {
  width: 10px;
  height: 10px;
}

ry-tag[size="lg"] {
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
}

/* ═══════════════════════════════════════════════════════════════
   TAG INPUT
   ═══════════════════════════════════════════════════════════════ */

ry-tag-input {
  display: block;
}

ry-tag-input [data-ry-target="container"] {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ry-space-1, 0.25rem);
  padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
  min-height: 2.5rem;
  cursor: text;
}

ry-tag-input [data-ry-target="input"] {
  flex: 1;
  min-width: 60px;
  padding: var(--ry-space-1, 0.25rem) 0;
  border: none;
  outline: none;
}

ry-tag-input[disabled] [data-ry-target="container"] {
  cursor: not-allowed;
}

/* ═══════════════════════════════════════════════════════════════
   DEVICE FRAME (CSS-only phone mockup)
   ═══════════════════════════════════════════════════════════════ */

.ry-phone {
  position: relative;
  display: inline-block;
  padding: 0.75rem;
  border-radius: 2.5rem;
  border: 3px solid currentColor;
  overflow: hidden;
  max-width: 20rem;
}

.ry-phone::before {
  content: '';
  position: absolute;
  top: 0.75rem;
  left: 50%;
  transform: translateX(-50%);
  width: 5rem;
  height: 1.5rem;
  border-radius: 0 0 1rem 1rem;
  background: currentColor;
  z-index: 1;
}

.ry-phone img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 1.75rem;
}

/* ═══════════════════════════════════════════════════════════════
   HERO
   ═══════════════════════════════════════════════════════════════ */

ry-hero {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: var(--ry-space-16, 4rem) var(--ry-space-6, 1.5rem);
  max-width: 48rem;
  margin-inline: auto;
  text-align: center;
}

ry-hero[align="left"] {
  align-items: flex-start;
  text-align: start;
}

ry-hero > * + * {
  margin-block-start: var(--ry-space-4, 1rem);
}

ry-hero > h1 {
  margin: 0;
}

ry-hero > p {
  margin: 0;
  margin-block-start: var(--ry-space-4, 1rem);
}

/* Size variants */
ry-hero[size="sm"] {
  padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
}

ry-hero[size="lg"] {
  padding: var(--ry-space-20, 5rem) var(--ry-space-6, 1.5rem);
}

ry-hero[size="full"] {
  min-height: 100vh;
  min-height: 100dvh;
  justify-content: center;
}

ry-hero[full-bleed] {
  max-width: none;
}

/* Split layout: text + media side by side */
ry-hero[layout="split"] {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: center;
  text-align: start;
  gap: 0;
  max-width: none;
  padding: 0;
  overflow: hidden;
}

ry-hero[layout="split"] > *:first-child {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--ry-space-4, 1rem);
  padding: var(--ry-space-12, 3rem) var(--ry-space-12, 3rem) var(--ry-space-12, 3rem) clamp(var(--ry-space-6, 1.5rem), 8vw, 10rem);
}

ry-hero[layout="split"] > *:first-child > * + * {
  margin-block-start: 0;
}

ry-hero[layout="split"] > *:last-child {
  align-self: stretch;
  position: relative;
  overflow: hidden;
}

ry-hero[layout="split"] > *:last-child img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

/* Full viewport height for split */
ry-hero[layout="split"][size="full"] {
  min-height: 100vh;
  min-height: 100dvh;
}

/* Flip: image left, text right */
ry-hero[layout="split"][reverse] {
  direction: rtl;
}

ry-hero[layout="split"][reverse] > * {
  direction: ltr;
}

ry-hero[layout="split"][reverse] > *:first-child {
  padding-inline: var(--ry-space-12, 3rem) clamp(var(--ry-space-6, 1.5rem), 8vw, 10rem);
}

@media (max-width: 768px) {
  ry-hero[layout="split"] {
    grid-template-columns: 1fr;
  }

  ry-hero[layout="split"] > *:first-child {
    padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
  }

  ry-hero[layout="split"][reverse] > *:first-child {
    padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
  }

  ry-hero[layout="split"] > *:last-child {
    max-height: 20rem;
  }

  ry-hero[layout="split"][size="full"] {
    min-height: auto;
  }
}

/* ═══════════════════════════════════════════════════════════════
   STAT
   ═══════════════════════════════════════════════════════════════ */

ry-stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: var(--ry-space-1, 0.25rem);
}

ry-stat[align="left"] {
  align-items: flex-start;
  text-align: start;
}

ry-stat [data-ry-target="value"] {
  display: flex;
  align-items: center;
  gap: var(--ry-space-2, 0.5rem);
}

ry-stat [data-ry-target="trend"] svg {
  width: 20px;
  height: 20px;
}

/* Size variants */
ry-stat[size="sm"] [data-ry-target="trend"] svg {
  width: 16px;
  height: 16px;
}

/* ═══════════════════════════════════════════════════════════════
   FEATURE + FEATURE GRID
   ═══════════════════════════════════════════════════════════════ */

ry-feature-grid {
  display: grid;
  gap: var(--ry-space-6, 1.5rem);
}

ry-feature-grid[cols="2"] { grid-template-columns: repeat(2, 1fr); }
ry-feature-grid[cols="3"] { grid-template-columns: repeat(3, 1fr); }
ry-feature-grid[cols="4"] { grid-template-columns: repeat(4, 1fr); }

@container (max-width: 640px) {
  :is(ry-feature-grid[cols="2"], ry-feature-grid[cols="3"], ry-feature-grid[cols="4"]) {
    grid-template-columns: 1fr;
  }
}

@container (min-width: 641px) and (max-width: 1024px) {
  :is(ry-feature-grid[cols="3"], ry-feature-grid[cols="4"]) {
    grid-template-columns: repeat(2, 1fr);
  }
}

ry-feature {
  display: flex;
  flex-direction: column;
  gap: var(--ry-space-3, 0.75rem);
}

ry-feature[align="center"] {
  align-items: center;
  text-align: center;
}

ry-feature [data-ry-target="icon"] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  flex-shrink: 0;
}

ry-feature [data-ry-target="icon"] svg {
  width: 24px;
  height: 24px;
}

ry-feature h3 {
  margin: 0;
}

ry-feature p {
  margin: 0;
}

/* ═══════════════════════════════════════════════════════════════
   PRICING + PRICING CARD
   ═══════════════════════════════════════════════════════════════ */

ry-pricing {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--ry-space-6, 1.5rem);
  align-items: stretch;
}

@container (max-width: 640px) {
  ry-pricing {
    flex-direction: column;
    align-items: center;
  }
}

ry-pricing-card {
  display: flex;
  flex-direction: column;
  padding: var(--ry-space-8, 2rem);
  width: 100%;
  max-width: 20rem;
}

ry-pricing-card[featured] {
  transform: scale(1.05);
  z-index: 1;
}

ry-pricing-card h3 {
  margin: 0 0 var(--ry-space-2, 0.5rem) 0;
}

.ry-pricing-card__price {
  margin-block-end: var(--ry-space-6, 1.5rem);
}

.ry-pricing-card__price span {
  display: inline;
}

ry-pricing-card ul {
  list-style: none;
  padding: 0;
  margin: 0 0 var(--ry-space-6, 1.5rem) 0;
  flex: 1;
}

ry-pricing-card ul li {
  padding: var(--ry-space-2, 0.5rem) 0;
}

ry-pricing-card :is(ry-button, .ry-btn) {
  margin-block-start: auto;
  width: 100%;
}

/* ═══════════════════════════════════════════════════════════════
   CAROUSEL
   ═══════════════════════════════════════════════════════════════ */

ry-carousel {
  display: block;
  position: relative;
  overflow: hidden;
  outline: none;
}

ry-carousel [data-ry-target="viewport"] {
  overflow: hidden;
  touch-action: pan-y;
}

ry-carousel [data-ry-target="track"] {
  display: flex;
  transition: transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
}

ry-carousel [data-ry-target="slide"] {
  flex: 0 0 100%;
  min-width: 0;
}

ry-carousel :is([data-ry-target="prev"], [data-ry-target="next"]) {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2.5rem;
  height: 2.5rem;
  padding: 0;
  border: none;
  cursor: pointer;
}

ry-carousel [data-ry-target="prev"] {
  left: var(--ry-space-3, 0.75rem);
}

ry-carousel [data-ry-target="next"] {
  right: var(--ry-space-3, 0.75rem);
}

ry-carousel :is([data-ry-target="prev"], [data-ry-target="next"]) svg {
  width: 20px;
  height: 20px;
}

ry-carousel [data-ry-target="dots"] {
  display: flex;
  justify-content: center;
  gap: var(--ry-space-2, 0.5rem);
  padding: var(--ry-space-3, 0.75rem) 0;
}

ry-carousel [data-ry-target="dot"] {
  width: 0.5rem;
  height: 0.5rem;
  padding: 0;
  border: none;
  cursor: pointer;
}

/* ═══════════════════════════════════════════════════════════════
   COMBOBOX
   ═══════════════════════════════════════════════════════════════ */

ry-combobox {
  position: relative;
  display: inline-block;
  min-width: 12rem;
}

ry-combobox[disabled] {
  cursor: not-allowed;
}

ry-combobox [data-ry-target="input-wrapper"] {
  display: flex;
  align-items: center;
  gap: var(--ry-space-2, 0.5rem);
  width: 100%;
}

ry-combobox [data-ry-target="input"] {
  flex: 1;
  width: 100%;
  min-width: 0;
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  border: none;
  outline: none;
  background: transparent;
}

ry-combobox [data-ry-target="arrow"] {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-inline-end: var(--ry-space-2, 0.5rem);
  cursor: pointer;
  transition: transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
}

ry-combobox[data-ry-state="open"] [data-ry-target="arrow"] {
  transform: rotate(180deg);
}

ry-combobox [data-ry-target="dropdown"] {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  z-index: var(--ry-z-dropdown, 1000);
  margin-block-start: var(--ry-space-1, 0.25rem);
  padding: var(--ry-space-1, 0.25rem);
  max-height: 15rem;
  overflow-y: auto;
  overscroll-behavior: contain;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-0.5rem);
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
              transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
  transition-behavior: allow-discrete;
}

ry-combobox[data-ry-state="open"] [data-ry-target="dropdown"] {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

@starting-style {
  ry-combobox[data-ry-state="open"] [data-ry-target="dropdown"] {
    opacity: 0;
    transform: translateY(-0.5rem);
  }
}

ry-combobox[data-ry-position="top"] [data-ry-target="dropdown"] {
  top: auto;
  bottom: 100%;
  margin-block-start: 0;
  margin-block-end: var(--ry-space-1, 0.25rem);
  transform: translateY(0.5rem);
}

ry-combobox[data-ry-position="top"][data-ry-state="open"] [data-ry-target="dropdown"] {
  transform: translateY(0);
}

ry-combobox [data-ry-target="option"] {
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
  cursor: pointer;
}

ry-combobox [data-ry-target="option"][hidden] {
  display: none;
}

ry-combobox [data-ry-target="option"][data-disabled] {
  cursor: not-allowed;
}

ry-combobox [data-ry-target="empty"] {
  padding: var(--ry-space-3, 0.75rem);
  text-align: center;
}

ry-combobox [data-ry-target="empty"][hidden] {
  display: none;
}

ry-combobox [data-ry-target="native"] {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}

/* ═══════════════════════════════════════════════════════════════
   TESTIMONIAL
   ═══════════════════════════════════════════════════════════════ */

ry-testimonial {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: var(--ry-space-3, 0.75rem);
  padding: var(--ry-space-6, 1.5rem);
}

ry-testimonial [data-ry-target="avatar"] {
  width: 4rem;
  height: 4rem;
  border-radius: 9999px;
  overflow: hidden;
  flex-shrink: 0;
}

ry-testimonial [data-ry-target="avatar"] img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

ry-testimonial [data-ry-target="quote"] {
  margin: 0;
  max-inline-size: 36rem;
}

ry-testimonial [data-ry-target="stars"] {
  display: flex;
  gap: var(--ry-space-1, 0.25rem);
}

ry-testimonial [data-ry-target="stars"] svg {
  width: 16px;
  height: 16px;
}

ry-testimonial [data-ry-target="attribution"] {
  display: flex;
  flex-direction: column;
  gap: var(--ry-space-1, 0.25rem);
}

/* ═══════════════════════════════════════════════════════════════
   THEME PANEL
   ═══════════════════════════════════════════════════════════════ */

ry-theme-panel {
  position: fixed;
  inset-block-end: var(--ry-space-4, 1rem);
  inset-inline-end: var(--ry-space-4, 1rem);
  z-index: var(--ry-z-fixed, 1000);
}

ry-theme-panel [data-ry-target="panel"] {
  display: flex;
  flex-direction: column;
  gap: var(--ry-space-2, 0.5rem);
  padding: var(--ry-space-3, 0.75rem);
}

ry-theme-panel [data-ry-target="theme-row"],
ry-theme-panel [data-ry-target="mode-row"] {
  display: flex;
  align-items: center;
  gap: var(--ry-space-3, 0.75rem);
}

ry-theme-panel [data-ry-target="theme-options"],
ry-theme-panel [data-ry-target="mode-options"] {
  display: flex;
  gap: var(--ry-space-1, 0.25rem);
}

ry-theme-panel [data-ry-target="label"] {
  min-inline-size: 3rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

ry-theme-panel [data-ry-target="theme-btn"],
ry-theme-panel [data-ry-target="mode-btn"] {
  padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
  font: inherit;
  font-size: 0.6875rem;
  cursor: pointer;
  border: none;
  background: none;
  line-height: 1;
}

/* ═══════════════════════════════════════════════════════════════
   HEADING
   ═══════════════════════════════════════════════════════════════ */

ry-heading {
  display: flex;
  flex-direction: column;
  gap: var(--ry-space-2, 0.5rem);
}

ry-heading[align="center"] {
  text-align: center;
}

ry-heading[align="right"] {
  text-align: end;
}

/* Balanced text wrapping for heading titles */
ry-heading [data-ry-target="title"] {
  text-wrap: balance;
  margin: 0;
}

ry-heading [data-ry-target="sub"] {
  margin: 0;
}

/* Divider variant: adds a bottom border */
ry-heading[divider] {
  padding-block-end: var(--ry-space-4, 1rem);
}

/* ═══════════════════════════════════════════════════════════════
   SEARCH LIST
   ═══════════════════════════════════════════════════════════════ */

ry-search-list {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  min-height: 0;
}

ry-search-list [data-ry-target="search"] {
  flex-shrink: 0;
  padding: var(--ry-space-2) var(--ry-space-3);
  position: sticky;
  top: 0;
  z-index: 1;
}

ry-search-list [data-ry-target="input"] {
  width: 100%;
  padding: var(--ry-space-2) var(--ry-space-3);
  border: none;
  background: transparent;
  font: inherit;
  outline: none;
}

ry-search-list [data-ry-target="list"] {
  flex: 1;
  overflow-y: auto;
  min-height: 0;
  padding: var(--ry-space-1) var(--ry-space-2);
}

ry-search-list [data-ry-target="item"] {
  display: flex;
  align-items: center;
  padding: var(--ry-space-1) var(--ry-space-3);
  cursor: pointer;
  user-select: none;
}

ry-search-list [data-ry-target="item"][hidden] {
  display: none;
}

ry-search-list [data-ry-target="group-header"] {
  padding: var(--ry-space-2) var(--ry-space-3);
  padding-top: var(--ry-space-4);
  font-size: 0.6875rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  pointer-events: none;
  user-select: none;
}

ry-search-list [data-ry-target="group"][hidden] {
  display: none;
}

ry-search-list [data-ry-target="empty"] {
  padding: var(--ry-space-6) var(--ry-space-3);
  text-align: center;
}

ry-search-list [data-ry-target="empty"][hidden] {
  display: none;
}

/* ═══════════════════════════════════════════════════════════════
   UTILITIES
   ═══════════════════════════════════════════════════════════════ */

.ry-avatar {
  display: block;
  width: 4rem;
  height: 4rem;
  margin-bottom: var(--ry-space-4, 1rem);
}

.ry-avatar[data-size="lg"] {
  width: 6rem;
  height: 6rem;
}

} /* @layer ry-structure */
