/* FoxUI tokenlari — avtomatik yaratilgan (scripts/build.mjs). Qo'lda tahrirlamang. */
@layer fx.reset, fx.tokens, fx.base, fx.components, fx.utilities;

@property --fx-knob-pill { syntax: "<number>"; inherits: true; initial-value: 0; }
@property --fx-knob-density { syntax: "<number>"; inherits: true; initial-value: 1; }
@property --fx-knob-depth { syntax: "<number>"; inherits: true; initial-value: 1; }
@property --fx-knob-motion { syntax: "<number>"; inherits: true; initial-value: 1; }
@property --fx-knob-blur { syntax: "<number>"; inherits: true; initial-value: 1; }
@property --fx-knob-outline { syntax: "<number>"; inherits: true; initial-value: 1; }
@property --fx-knob-field-fill { syntax: "<number>"; inherits: true; initial-value: 0; }
@property --fx-knob-motion-press { syntax: "<number>"; inherits: true; initial-value: 1; }
@property --fx-knob-motion-lift { syntax: "<number>"; inherits: true; initial-value: 0; }
@property --fx-knob-motion-stagger { syntax: "<number>"; inherits: true; initial-value: 0; }
@property --fx-knob-motion-loop { syntax: "<number>"; inherits: true; initial-value: 1; }

@layer fx.tokens {
:root {
  --fx-color-gray-25: #FCFCFD;
  --fx-color-gray-50: #F9FAFB;
  --fx-color-gray-100: #F2F4F7;
  --fx-color-gray-200: #E4E7EC;
  --fx-color-gray-300: #D0D5DD;
  --fx-color-gray-400: #98A2B3;
  --fx-color-gray-500: #667085;
  --fx-color-gray-600: #475467;
  --fx-color-gray-700: #344054;
  --fx-color-gray-800: #1D2939;
  --fx-color-gray-900: #101828;
  --fx-color-gray-950: #0C111D;
  --fx-color-neutral-25: var(--fx-color-gray-25);
  --fx-color-neutral-50: var(--fx-color-gray-50);
  --fx-color-neutral-100: var(--fx-color-gray-100);
  --fx-color-neutral-200: var(--fx-color-gray-200);
  --fx-color-neutral-300: var(--fx-color-gray-300);
  --fx-color-neutral-400: var(--fx-color-gray-400);
  --fx-color-neutral-500: var(--fx-color-gray-500);
  --fx-color-neutral-600: var(--fx-color-gray-600);
  --fx-color-neutral-700: var(--fx-color-gray-700);
  --fx-color-neutral-800: var(--fx-color-gray-800);
  --fx-color-neutral-900: var(--fx-color-gray-900);
  --fx-color-neutral-950: var(--fx-color-gray-950);
  --fx-color-pastel-yellow: #F5D77E;
  --fx-color-pastel-pink: #F3BBD4;
  --fx-color-pastel-blue: #AECBF2;
  --fx-color-pastel-coral: #F4A688;
  --fx-color-pastel-green: #BEDDB2;
  --fx-color-pastel-purple: #CFC0F3;
  --fx-color-red-50: #FEF3F2;
  --fx-color-red-300: #FDA29B;
  --fx-color-red-600: #D92D20;
  --fx-color-red-700: #B42318;
  --fx-color-red-900: #7A271A;
  --fx-color-green-50: #ECFDF3;
  --fx-color-green-300: #75E0A7;
  --fx-color-green-600: #079455;
  --fx-color-green-700: #067647;
  --fx-color-green-900: #074D31;
  --fx-color-amber-50: #FFFAEB;
  --fx-color-amber-300: #FEC84B;
  --fx-color-amber-600: #DC6803;
  --fx-color-amber-700: #B54708;
  --fx-color-amber-900: #7A2E0E;
  --fx-color-white: #FFFFFF;
  --fx-color-black: #000000;
  --fx-color-brand-50: var(--fx-color-neutral-50);
  --fx-color-brand-100: var(--fx-color-neutral-100);
  --fx-color-brand-200: var(--fx-color-neutral-200);
  --fx-color-brand-300: var(--fx-color-neutral-300);
  --fx-color-brand-400: var(--fx-color-neutral-400);
  --fx-color-brand-500: var(--fx-color-neutral-500);
  --fx-color-brand-600: var(--fx-color-neutral-600);
  --fx-color-brand-700: var(--fx-color-neutral-700);
  --fx-color-brand-800: var(--fx-color-neutral-800);
  --fx-color-brand-900: var(--fx-color-neutral-900);
  --fx-color-brand-950: var(--fx-color-neutral-950);
  --fx-color-blue-50: #EFF8FF;
  --fx-color-blue-300: #84CAFF;
  --fx-color-blue-600: #1570EF;
  --fx-color-blue-700: #175CD3;
  --fx-color-blue-900: #194185;
  --fx-space-1: 4px;
  --fx-space-2: 8px;
  --fx-space-3: 12px;
  --fx-space-4: 16px;
  --fx-space-5: 20px;
  --fx-space-6: 24px;
  --fx-space-8: 32px;
  --fx-space-10: 40px;
  --fx-space-12: 48px;
  --fx-font-family-sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-family-display: var(--fx-font-family-sans);
  --fx-font-family-mono: ui-monospace, "SFMono-Regular", Consolas, monospace;
  --fx-font-family-numeric: var(--fx-font-family-display);
  --fx-font-size-xs: 12px;
  --fx-font-size-sm: 14px;
  --fx-font-size-md: 16px;
  --fx-font-size-lg: 18px;
  --fx-font-size-xl: 20px;
  --fx-font-size-display-sm: 30px;
  --fx-font-size-display-md: 36px;
  --fx-font-size-2xl: 24px;
  --fx-font-size-display-lg: 48px;
  --fx-font-size-display-xl: 60px;
  --fx-font-size-display-2xl: 72px;
  --fx-font-size-fluid-sm: clamp(var(--fx-font-size-xl), calc(1rem + 0.8vw), var(--fx-font-size-2xl));
  --fx-font-size-fluid-md: clamp(var(--fx-font-size-2xl), calc(1rem + 2vw), var(--fx-font-size-display-md));
  --fx-font-size-fluid-lg: clamp(var(--fx-font-size-display-sm), calc(1rem + 3.5vw), var(--fx-font-size-display-lg));
  --fx-font-size-fluid-xl: clamp(var(--fx-font-size-display-md), calc(1rem + 5vw), var(--fx-font-size-display-2xl));
  --fx-font-weight-regular: 400;
  --fx-font-weight-medium: 500;
  --fx-font-weight-semibold: 600;
  --fx-font-weight-bold: 700;
  --fx-font-adjust-sans: ex-height 0.52;
  --fx-font-adjust-display: var(--fx-font-adjust-sans);
  --fx-font-adjust-mono: ex-height 0.52;
  --fx-font-adjust-numeric: var(--fx-font-adjust-display);
  --fx-duration-fast: 120ms;
  --fx-duration-base: 200ms;
  --fx-duration-slow: 360ms;
  --fx-duration-pulse: 1600ms;
  --fx-duration-spin: 800ms;
  --fx-duration-instant: 60ms;
  --fx-duration-slower: 500ms;
  --fx-duration-stagger: 30ms;
  --fx-duration-shimmer: 1400ms;
  --fx-duration-indeterminate: 1600ms;
  --fx-duration-delay-tip: 400ms;
  --fx-ease-standard: cubic-bezier(0.2, 0, 0, 1);
  --fx-ease-emphasized: cubic-bezier(0.2, 0.7, 0.2, 1);
  --fx-ease-exit: cubic-bezier(0.4, 0, 1, 1);
  --fx-ease-enter: cubic-bezier(0, 0, 0.2, 1);
  --fx-ease-sheet: cubic-bezier(0.32, 0.72, 0, 1);
  --fx-ease-spring: linear(0, 0.044, 0.149, 0.283, 0.424, 0.558, 0.677, 0.776, 0.856, 0.917, 0.961, 0.992, 1.011, 1.022, 1.027, 1.028, 1.027, 1.023, 1.019, 1.015, 1.012, 1.008, 1.006, 1.004, 1);
  --fx-ease-bounce: linear(0, 0.064, 0.22, 0.42, 0.626, 0.812, 0.961, 1.067, 1.132, 1.16, 1.16, 1.141, 1.111, 1.077, 1.045, 1.017, 0.997, 0.983, 0.975, 0.973, 0.975, 0.979, 0.985, 0.99, 0.995, 0.999, 1.002, 1.004, 1.004, 1.004, 1.004, 1.003, 1);
  --fx-line-height-tight: 1.1;
  --fx-line-height-snug: 1.25;
  --fx-line-height-normal: 1.5;
  --fx-line-height-relaxed: 1.7;
  --fx-tracking-tight: -0.02em;
  --fx-tracking-snug: -0.01em;
  --fx-tracking-normal: 0em;
  --fx-tracking-wide: 0.02em;
  --fx-tracking-wider: 0.08em;
  --fx-z-base: 0;
  --fx-z-raised: 1;
  --fx-z-sticky: 100;
  --fx-z-dropdown: 200;
  --fx-z-overlay: 300;
  --fx-z-modal: 400;
  --fx-z-toast: 500;
  --fx-z-tip: 600;
  --fx-bp-compact: 0px;
  --fx-bp-medium: 600px;
  --fx-bp-expanded: 840px;
  --fx-bp-large: 1200px;
  --fx-bp-xl: 1600px;
  --fx-text-primary: var(--fx-color-neutral-900);
  --fx-text-secondary: var(--fx-color-neutral-600);
  --fx-text-tertiary: var(--fx-color-neutral-500);
  --fx-text-disabled: var(--fx-color-neutral-400);
  --fx-text-on-brand: var(--fx-color-white);
  --fx-text-error: var(--fx-color-red-600);
  --fx-text-on-category: var(--fx-color-neutral-900);
  --fx-text-brand: var(--fx-color-neutral-900);
  --fx-text-on-error: var(--fx-color-white);
  --fx-text-on-rail: var(--fx-color-neutral-300);
  --fx-text-on-rail-strong: var(--fx-color-neutral-25);
  --fx-text-on-rail-selected: var(--fx-color-neutral-950);
  --fx-text-on-rail-current: color-mix(in oklab, var(--fx-bg-rail-selected) 82%, var(--fx-text-on-rail-strong));
  --fx-text-on-static-light: var(--fx-color-neutral-900);
  --fx-bg-page: var(--fx-color-neutral-25);
  --fx-bg-surface: var(--fx-color-white);
  --fx-bg-subtle: var(--fx-color-neutral-50);
  --fx-bg-muted: var(--fx-color-neutral-100);
  --fx-bg-brand-solid: var(--fx-color-neutral-900);
  --fx-bg-brand-solid-hover: var(--fx-color-neutral-700);
  --fx-bg-error-subtle: var(--fx-color-red-50);
  --fx-bg-success-subtle: var(--fx-color-green-50);
  --fx-bg-warning-subtle: var(--fx-color-amber-50);
  --fx-bg-overlay: var(--fx-color-neutral-950);
  --fx-bg-category-yellow: var(--fx-color-pastel-yellow);
  --fx-bg-category-yellow-subtle: color-mix(in oklab, var(--fx-color-pastel-yellow) 20%, var(--fx-bg-page));
  --fx-bg-category-pink: var(--fx-color-pastel-pink);
  --fx-bg-category-pink-subtle: color-mix(in oklab, var(--fx-color-pastel-pink) 20%, var(--fx-bg-page));
  --fx-bg-category-blue: var(--fx-color-pastel-blue);
  --fx-bg-category-blue-subtle: color-mix(in oklab, var(--fx-color-pastel-blue) 20%, var(--fx-bg-page));
  --fx-bg-category-coral: var(--fx-color-pastel-coral);
  --fx-bg-category-coral-subtle: color-mix(in oklab, var(--fx-color-pastel-coral) 20%, var(--fx-bg-page));
  --fx-bg-category-green: var(--fx-color-pastel-green);
  --fx-bg-category-green-subtle: color-mix(in oklab, var(--fx-color-pastel-green) 20%, var(--fx-bg-page));
  --fx-bg-category-purple: var(--fx-color-pastel-purple);
  --fx-bg-category-purple-subtle: color-mix(in oklab, var(--fx-color-pastel-purple) 20%, var(--fx-bg-page));
  --fx-bg-brand-subtle: var(--fx-color-neutral-100);
  --fx-bg-error-solid: var(--fx-color-red-600);
  --fx-bg-info-subtle: var(--fx-color-blue-50);
  --fx-bg-rail: var(--fx-color-neutral-950);
  --fx-bg-rail-selected: var(--fx-color-neutral-25);
  --fx-bg-static-light: var(--fx-color-neutral-25);
  --fx-bg-surface-container-lowest: light-dark(var(--fx-bg-surface), var(--fx-bg-page));
  --fx-bg-surface-container-low: color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 2%);
  --fx-bg-surface-container: color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 4%);
  --fx-bg-surface-container-high: color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 7%);
  --fx-bg-surface-container-highest: color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 10%);
  --fx-selection-bg: color-mix(in oklab, var(--fx-bg-brand-solid) 24%, var(--fx-bg-surface));
  --fx-selection-text: var(--fx-text-primary);
  --fx-scrollbar-thumb: color-mix(in oklab, var(--fx-text-primary) 28%, transparent);
  --fx-scrollbar-thumb-hover: color-mix(in oklab, var(--fx-text-primary) 45%, transparent);
  --fx-scrollbar-track: transparent;
  --fx-fg-success: var(--fx-color-green-700);
  --fx-fg-warning: var(--fx-color-amber-700);
  --fx-fg-error: var(--fx-color-red-700);
  --fx-fg-info: var(--fx-color-blue-700);
  --fx-border-color-default: var(--fx-color-neutral-200);
  --fx-border-color-strong: var(--fx-color-neutral-300);
  --fx-border-color-focus: var(--fx-color-neutral-900);
  --fx-border-color-error: var(--fx-color-red-600);
  --fx-border-width-default: 1px;
  --fx-border-width-focus: 2px;
  --fx-shadow-color: var(--fx-color-neutral-900);
  --fx-knob-pill: 0;
  --fx-knob-density: 1;
  --fx-knob-depth: 1;
  --fx-knob-motion: 1;
  --fx-knob-blur: 1;
  --fx-knob-outline: 1;
  --fx-knob-field-fill: 0;
  --fx-knob-motion-press: 1;
  --fx-knob-motion-lift: 0;
  --fx-knob-motion-stagger: 0;
  --fx-knob-motion-loop: 1;
  --fx-radius-control: 8px;
  --fx-radius-nav: 6px;
  --fx-radius-field-multiline: 8px;
  --fx-radius-surface: 12px;
  --fx-radius-overlay: 16px;
  --fx-radius-badge: 6px;
  --fx-radius-circle: 50%;
  --fx-radius-checkbox-ratio: 0.25;
  --fx-radius-avatar-ratio: 0.28;
  --fx-radius-pill: 999px;
  --fx-size-control-sm: 36px;
  --fx-size-control-md: 44px;
  --fx-size-control-lg: 52px;
  --fx-size-checkbox: 20px;
  --fx-size-switch-track: 40px;
  --fx-size-min-target: 24px;
  --fx-size-touch-target: 44px;
  --fx-size-avatar-sm: 22px;
  --fx-size-avatar-md: 36px;
  --fx-size-avatar-lg: 56px;
  --fx-size-status-dot: 10px;
  --fx-size-status-dot-sm: 8px;
  --fx-size-icon-sm: 16px;
  --fx-size-icon-md: 20px;
  --fx-size-icon-lg: 24px;
  --fx-size-topbar: 60px;
  --fx-size-rail: 80px;
  --fx-nav-width: 256px;
  --fx-nav-width-collapsed: 60px;
  --fx-nav-item-height: 40px;
  --fx-nav-subitem-height: 34px;
  --fx-dialog-width: 480px;
  --fx-popover-width: 320px;
  --fx-toast-width: 520px;
  --fx-viz-ink: color-mix(in oklab, var(--fx-text-primary) 80%, var(--fx-bg-surface));
  --fx-viz-brand: var(--fx-color-neutral-500);
  --fx-viz-accent: var(--fx-color-pastel-yellow);
  --fx-viz-risk: var(--fx-bg-error-solid);
  --fx-viz-context: var(--fx-color-neutral-300);
  --fx-viz-grid: var(--fx-border-color-default);
  --fx-viz-track: color-mix(in oklab, var(--fx-text-primary) 10%, transparent);
  --fx-motion-shift-sm: var(--fx-space-1);
  --fx-motion-shift-md: var(--fx-space-2);
  --fx-motion-shift-lg: var(--fx-space-6);
  --fx-motion-scale-enter: 0.96;
  --fx-motion-scale-press: 0.97;
  --fx-motion-lift: -2px;
  --fx-type-display-lg-size: var(--fx-font-size-display-xl);
  --fx-type-display-lg-line-height: var(--fx-line-height-tight);
  --fx-type-display-lg-weight: var(--fx-font-weight-semibold);
  --fx-type-display-lg-tracking: var(--fx-tracking-tight);
  --fx-type-display-md-size: var(--fx-font-size-display-lg);
  --fx-type-display-md-line-height: var(--fx-line-height-tight);
  --fx-type-display-md-weight: var(--fx-font-weight-semibold);
  --fx-type-display-md-tracking: var(--fx-tracking-tight);
  --fx-type-display-sm-size: var(--fx-font-size-display-md);
  --fx-type-display-sm-line-height: var(--fx-line-height-tight);
  --fx-type-display-sm-weight: var(--fx-font-weight-semibold);
  --fx-type-display-sm-tracking: var(--fx-tracking-tight);
  --fx-type-headline-lg-size: var(--fx-font-size-display-sm);
  --fx-type-headline-lg-line-height: var(--fx-line-height-snug);
  --fx-type-headline-lg-weight: var(--fx-font-weight-semibold);
  --fx-type-headline-lg-tracking: var(--fx-tracking-snug);
  --fx-type-headline-md-size: var(--fx-font-size-2xl);
  --fx-type-headline-md-line-height: var(--fx-line-height-snug);
  --fx-type-headline-md-weight: var(--fx-font-weight-semibold);
  --fx-type-headline-md-tracking: var(--fx-tracking-snug);
  --fx-type-headline-sm-size: var(--fx-font-size-xl);
  --fx-type-headline-sm-line-height: var(--fx-line-height-snug);
  --fx-type-headline-sm-weight: var(--fx-font-weight-semibold);
  --fx-type-headline-sm-tracking: var(--fx-tracking-normal);
  --fx-type-title-lg-size: var(--fx-font-size-lg);
  --fx-type-title-lg-line-height: var(--fx-line-height-snug);
  --fx-type-title-lg-weight: var(--fx-font-weight-semibold);
  --fx-type-title-lg-tracking: var(--fx-tracking-normal);
  --fx-type-title-md-size: var(--fx-font-size-md);
  --fx-type-title-md-line-height: var(--fx-line-height-snug);
  --fx-type-title-md-weight: var(--fx-font-weight-semibold);
  --fx-type-title-md-tracking: var(--fx-tracking-normal);
  --fx-type-title-sm-size: var(--fx-font-size-sm);
  --fx-type-title-sm-line-height: var(--fx-line-height-snug);
  --fx-type-title-sm-weight: var(--fx-font-weight-semibold);
  --fx-type-title-sm-tracking: var(--fx-tracking-normal);
  --fx-type-body-lg-size: var(--fx-font-size-md);
  --fx-type-body-lg-line-height: var(--fx-line-height-normal);
  --fx-type-body-lg-weight: var(--fx-font-weight-regular);
  --fx-type-body-lg-tracking: var(--fx-tracking-normal);
  --fx-type-body-md-size: var(--fx-font-size-sm);
  --fx-type-body-md-line-height: var(--fx-line-height-normal);
  --fx-type-body-md-weight: var(--fx-font-weight-regular);
  --fx-type-body-md-tracking: var(--fx-tracking-normal);
  --fx-type-body-sm-size: var(--fx-font-size-xs);
  --fx-type-body-sm-line-height: var(--fx-line-height-normal);
  --fx-type-body-sm-weight: var(--fx-font-weight-regular);
  --fx-type-body-sm-tracking: var(--fx-tracking-normal);
  --fx-type-label-lg-size: var(--fx-font-size-sm);
  --fx-type-label-lg-line-height: var(--fx-line-height-snug);
  --fx-type-label-lg-weight: var(--fx-font-weight-medium);
  --fx-type-label-lg-tracking: var(--fx-tracking-normal);
  --fx-type-label-md-size: var(--fx-font-size-xs);
  --fx-type-label-md-line-height: var(--fx-line-height-snug);
  --fx-type-label-md-weight: var(--fx-font-weight-medium);
  --fx-type-label-md-tracking: var(--fx-tracking-wide);
  --fx-type-label-sm-size: var(--fx-font-size-xs);
  --fx-type-label-sm-line-height: var(--fx-line-height-snug);
  --fx-type-label-sm-weight: var(--fx-font-weight-medium);
  --fx-type-label-sm-tracking: var(--fx-tracking-wider);
  --fx-elevation-0: none;
  --fx-elevation-1: 0 1px calc(2px * var(--fx-knob-blur)) 0 color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 10%), transparent);
  --fx-elevation-2: 0 4px calc(8px * var(--fx-knob-blur)) -2px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 10%), transparent), 0 2px calc(4px * var(--fx-knob-blur)) -2px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 6%), transparent);
  --fx-elevation-3: 0 12px calc(16px * var(--fx-knob-blur)) -4px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 8%), transparent), 0 4px calc(6px * var(--fx-knob-blur)) -2px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 3%), transparent);
  --fx-elevation-4: 0 20px calc(24px * var(--fx-knob-blur)) -4px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 10%), transparent), 0 8px calc(8px * var(--fx-knob-blur)) -4px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 4%), transparent);
  --fx-elevation-5: 0 24px calc(48px * var(--fx-knob-blur)) -12px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 18%), transparent), 0 8px calc(16px * var(--fx-knob-blur)) -6px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 6%), transparent);
  --fx-elevation-tint-0: var(--fx-bg-surface);
  --fx-elevation-tint-1: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 3%));
  --fx-elevation-tint-2: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 5%));
  --fx-elevation-tint-3: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 8%));
  --fx-elevation-tint-4: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 11%));
  --fx-elevation-tint-5: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 14%));
}
[data-fx-scheme="light"] {
  --fx-text-primary: var(--fx-color-neutral-900);
  --fx-text-secondary: var(--fx-color-neutral-600);
  --fx-text-tertiary: var(--fx-color-neutral-500);
  --fx-text-disabled: var(--fx-color-neutral-400);
  --fx-text-on-brand: var(--fx-color-white);
  --fx-text-error: var(--fx-color-red-600);
  --fx-text-on-category: var(--fx-color-neutral-900);
  --fx-text-brand: var(--fx-color-neutral-900);
  --fx-text-on-error: var(--fx-color-white);
  --fx-bg-page: var(--fx-color-neutral-25);
  --fx-bg-surface: var(--fx-color-white);
  --fx-bg-subtle: var(--fx-color-neutral-50);
  --fx-bg-muted: var(--fx-color-neutral-100);
  --fx-bg-brand-solid: var(--fx-color-neutral-900);
  --fx-bg-brand-solid-hover: var(--fx-color-neutral-700);
  --fx-bg-error-subtle: var(--fx-color-red-50);
  --fx-bg-success-subtle: var(--fx-color-green-50);
  --fx-bg-warning-subtle: var(--fx-color-amber-50);
  --fx-bg-overlay: var(--fx-color-neutral-950);
  --fx-bg-category-yellow: var(--fx-color-pastel-yellow);
  --fx-bg-category-yellow-subtle: color-mix(in oklab, var(--fx-color-pastel-yellow) 20%, var(--fx-bg-page));
  --fx-bg-category-pink: var(--fx-color-pastel-pink);
  --fx-bg-category-pink-subtle: color-mix(in oklab, var(--fx-color-pastel-pink) 20%, var(--fx-bg-page));
  --fx-bg-category-blue: var(--fx-color-pastel-blue);
  --fx-bg-category-blue-subtle: color-mix(in oklab, var(--fx-color-pastel-blue) 20%, var(--fx-bg-page));
  --fx-bg-category-coral: var(--fx-color-pastel-coral);
  --fx-bg-category-coral-subtle: color-mix(in oklab, var(--fx-color-pastel-coral) 20%, var(--fx-bg-page));
  --fx-bg-category-green: var(--fx-color-pastel-green);
  --fx-bg-category-green-subtle: color-mix(in oklab, var(--fx-color-pastel-green) 20%, var(--fx-bg-page));
  --fx-bg-category-purple: var(--fx-color-pastel-purple);
  --fx-bg-category-purple-subtle: color-mix(in oklab, var(--fx-color-pastel-purple) 20%, var(--fx-bg-page));
  --fx-bg-brand-subtle: var(--fx-color-neutral-100);
  --fx-bg-error-solid: var(--fx-color-red-600);
  --fx-bg-info-subtle: var(--fx-color-blue-50);
  --fx-fg-success: var(--fx-color-green-700);
  --fx-fg-warning: var(--fx-color-amber-700);
  --fx-fg-error: var(--fx-color-red-700);
  --fx-fg-info: var(--fx-color-blue-700);
  --fx-border-color-default: var(--fx-color-neutral-200);
  --fx-border-color-strong: var(--fx-color-neutral-300);
  --fx-border-color-focus: var(--fx-color-neutral-900);
  --fx-border-color-error: var(--fx-color-red-600);
  --fx-shadow-color: var(--fx-color-neutral-900);
  --fx-viz-brand: var(--fx-color-neutral-500);
  --fx-viz-context: var(--fx-color-neutral-300);
  --fx-viz-accent: var(--fx-color-pastel-yellow);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-fx-scheme="light"]) {
    --fx-text-primary: var(--fx-color-neutral-50);
    --fx-text-secondary: var(--fx-color-neutral-300);
    --fx-text-tertiary: var(--fx-color-neutral-400);
    --fx-text-disabled: var(--fx-color-neutral-600);
    --fx-text-on-brand: var(--fx-color-neutral-900);
    --fx-text-error: var(--fx-color-red-300);
    --fx-text-on-category: var(--fx-color-neutral-50);
    --fx-text-brand: var(--fx-color-neutral-50);
    --fx-text-on-error: var(--fx-color-white);
    --fx-bg-page: var(--fx-color-neutral-950);
    --fx-bg-surface: var(--fx-color-neutral-900);
    --fx-bg-subtle: var(--fx-color-neutral-900);
    --fx-bg-muted: var(--fx-color-neutral-800);
    --fx-bg-brand-solid: var(--fx-color-neutral-50);
    --fx-bg-brand-solid-hover: var(--fx-color-neutral-200);
    --fx-bg-error-subtle: color-mix(in oklab, var(--fx-color-red-300) 16%, var(--fx-bg-surface));
    --fx-bg-success-subtle: color-mix(in oklab, var(--fx-color-green-300) 16%, var(--fx-bg-surface));
    --fx-bg-warning-subtle: color-mix(in oklab, var(--fx-color-amber-300) 16%, var(--fx-bg-surface));
    --fx-bg-overlay: var(--fx-color-black);
    --fx-bg-category-yellow: color-mix(in oklab, var(--fx-color-pastel-yellow) 45%, var(--fx-color-neutral-950));
    --fx-bg-category-yellow-subtle: color-mix(in oklab, var(--fx-color-pastel-yellow) 10%, var(--fx-bg-page));
    --fx-bg-category-pink: color-mix(in oklab, var(--fx-color-pastel-pink) 45%, var(--fx-color-neutral-950));
    --fx-bg-category-pink-subtle: color-mix(in oklab, var(--fx-color-pastel-pink) 10%, var(--fx-bg-page));
    --fx-bg-category-blue: color-mix(in oklab, var(--fx-color-pastel-blue) 45%, var(--fx-color-neutral-950));
    --fx-bg-category-blue-subtle: color-mix(in oklab, var(--fx-color-pastel-blue) 10%, var(--fx-bg-page));
    --fx-bg-category-coral: color-mix(in oklab, var(--fx-color-pastel-coral) 45%, var(--fx-color-neutral-950));
    --fx-bg-category-coral-subtle: color-mix(in oklab, var(--fx-color-pastel-coral) 10%, var(--fx-bg-page));
    --fx-bg-category-green: color-mix(in oklab, var(--fx-color-pastel-green) 45%, var(--fx-color-neutral-950));
    --fx-bg-category-green-subtle: color-mix(in oklab, var(--fx-color-pastel-green) 10%, var(--fx-bg-page));
    --fx-bg-category-purple: color-mix(in oklab, var(--fx-color-pastel-purple) 45%, var(--fx-color-neutral-950));
    --fx-bg-category-purple-subtle: color-mix(in oklab, var(--fx-color-pastel-purple) 10%, var(--fx-bg-page));
    --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
    --fx-bg-error-solid: var(--fx-color-red-600);
    --fx-bg-info-subtle: color-mix(in oklab, var(--fx-color-blue-300) 16%, var(--fx-bg-surface));
    --fx-fg-success: var(--fx-color-green-300);
    --fx-fg-warning: var(--fx-color-amber-300);
    --fx-fg-error: var(--fx-color-red-300);
    --fx-fg-info: var(--fx-color-blue-300);
    --fx-border-color-default: var(--fx-color-neutral-800);
    --fx-border-color-strong: var(--fx-color-neutral-700);
    --fx-border-color-focus: var(--fx-color-neutral-50);
    --fx-border-color-error: var(--fx-color-red-300);
    --fx-shadow-color: var(--fx-color-black);
    --fx-viz-brand: var(--fx-color-neutral-400);
    --fx-viz-context: var(--fx-color-neutral-600);
    --fx-viz-accent: var(--fx-color-pastel-yellow);
  }
}
[data-fx-scheme="dark"] {
  --fx-text-primary: var(--fx-color-neutral-50);
  --fx-text-secondary: var(--fx-color-neutral-300);
  --fx-text-tertiary: var(--fx-color-neutral-400);
  --fx-text-disabled: var(--fx-color-neutral-600);
  --fx-text-on-brand: var(--fx-color-neutral-900);
  --fx-text-error: var(--fx-color-red-300);
  --fx-text-on-category: var(--fx-color-neutral-50);
  --fx-text-brand: var(--fx-color-neutral-50);
  --fx-text-on-error: var(--fx-color-white);
  --fx-bg-page: var(--fx-color-neutral-950);
  --fx-bg-surface: var(--fx-color-neutral-900);
  --fx-bg-subtle: var(--fx-color-neutral-900);
  --fx-bg-muted: var(--fx-color-neutral-800);
  --fx-bg-brand-solid: var(--fx-color-neutral-50);
  --fx-bg-brand-solid-hover: var(--fx-color-neutral-200);
  --fx-bg-error-subtle: color-mix(in oklab, var(--fx-color-red-300) 16%, var(--fx-bg-surface));
  --fx-bg-success-subtle: color-mix(in oklab, var(--fx-color-green-300) 16%, var(--fx-bg-surface));
  --fx-bg-warning-subtle: color-mix(in oklab, var(--fx-color-amber-300) 16%, var(--fx-bg-surface));
  --fx-bg-overlay: var(--fx-color-black);
  --fx-bg-category-yellow: color-mix(in oklab, var(--fx-color-pastel-yellow) 45%, var(--fx-color-neutral-950));
  --fx-bg-category-yellow-subtle: color-mix(in oklab, var(--fx-color-pastel-yellow) 10%, var(--fx-bg-page));
  --fx-bg-category-pink: color-mix(in oklab, var(--fx-color-pastel-pink) 45%, var(--fx-color-neutral-950));
  --fx-bg-category-pink-subtle: color-mix(in oklab, var(--fx-color-pastel-pink) 10%, var(--fx-bg-page));
  --fx-bg-category-blue: color-mix(in oklab, var(--fx-color-pastel-blue) 45%, var(--fx-color-neutral-950));
  --fx-bg-category-blue-subtle: color-mix(in oklab, var(--fx-color-pastel-blue) 10%, var(--fx-bg-page));
  --fx-bg-category-coral: color-mix(in oklab, var(--fx-color-pastel-coral) 45%, var(--fx-color-neutral-950));
  --fx-bg-category-coral-subtle: color-mix(in oklab, var(--fx-color-pastel-coral) 10%, var(--fx-bg-page));
  --fx-bg-category-green: color-mix(in oklab, var(--fx-color-pastel-green) 45%, var(--fx-color-neutral-950));
  --fx-bg-category-green-subtle: color-mix(in oklab, var(--fx-color-pastel-green) 10%, var(--fx-bg-page));
  --fx-bg-category-purple: color-mix(in oklab, var(--fx-color-pastel-purple) 45%, var(--fx-color-neutral-950));
  --fx-bg-category-purple-subtle: color-mix(in oklab, var(--fx-color-pastel-purple) 10%, var(--fx-bg-page));
  --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
  --fx-bg-error-solid: var(--fx-color-red-600);
  --fx-bg-info-subtle: color-mix(in oklab, var(--fx-color-blue-300) 16%, var(--fx-bg-surface));
  --fx-fg-success: var(--fx-color-green-300);
  --fx-fg-warning: var(--fx-color-amber-300);
  --fx-fg-error: var(--fx-color-red-300);
  --fx-fg-info: var(--fx-color-blue-300);
  --fx-border-color-default: var(--fx-color-neutral-800);
  --fx-border-color-strong: var(--fx-color-neutral-700);
  --fx-border-color-focus: var(--fx-color-neutral-50);
  --fx-border-color-error: var(--fx-color-red-300);
  --fx-shadow-color: var(--fx-color-black);
  --fx-viz-brand: var(--fx-color-neutral-400);
  --fx-viz-context: var(--fx-color-neutral-600);
  --fx-viz-accent: var(--fx-color-pastel-yellow);
}
[data-fx-theme="graphite"] {
  --fx-color-neutral-25: var(--fx-color-gray-25);
  --fx-color-neutral-50: var(--fx-color-gray-50);
  --fx-color-neutral-100: var(--fx-color-gray-100);
  --fx-color-neutral-200: var(--fx-color-gray-200);
  --fx-color-neutral-300: var(--fx-color-gray-300);
  --fx-color-neutral-400: var(--fx-color-gray-400);
  --fx-color-neutral-500: var(--fx-color-gray-500);
  --fx-color-neutral-600: var(--fx-color-gray-600);
  --fx-color-neutral-700: var(--fx-color-gray-700);
  --fx-color-neutral-800: var(--fx-color-gray-800);
  --fx-color-neutral-900: var(--fx-color-gray-900);
  --fx-color-neutral-950: var(--fx-color-gray-950);
  --fx-color-brand-50: var(--fx-color-neutral-50);
  --fx-color-brand-100: var(--fx-color-neutral-100);
  --fx-color-brand-200: var(--fx-color-neutral-200);
  --fx-color-brand-300: var(--fx-color-neutral-300);
  --fx-color-brand-400: var(--fx-color-neutral-400);
  --fx-color-brand-500: var(--fx-color-neutral-500);
  --fx-color-brand-600: var(--fx-color-neutral-600);
  --fx-color-brand-700: var(--fx-color-neutral-700);
  --fx-color-brand-800: var(--fx-color-neutral-800);
  --fx-color-brand-900: var(--fx-color-neutral-900);
  --fx-color-brand-950: var(--fx-color-neutral-950);
  --fx-color-pastel-yellow: #F5D77E;
  --fx-color-pastel-pink: #F3BBD4;
  --fx-color-pastel-blue: #AECBF2;
  --fx-color-pastel-coral: #F4A688;
  --fx-color-pastel-green: #BEDDB2;
  --fx-color-pastel-purple: #CFC0F3;
  --fx-text-on-brand: var(--fx-color-white);
  --fx-text-brand: var(--fx-color-neutral-900);
  --fx-text-on-rail-selected: var(--fx-color-neutral-950);
  --fx-bg-brand-solid: var(--fx-color-neutral-900);
  --fx-bg-brand-solid-hover: var(--fx-color-neutral-700);
  --fx-bg-brand-subtle: var(--fx-color-neutral-100);
  --fx-bg-rail: var(--fx-color-neutral-950);
  --fx-bg-rail-selected: var(--fx-color-neutral-25);
  --fx-border-color-focus: var(--fx-color-neutral-900);
  --fx-viz-brand: var(--fx-color-neutral-500);
}
[data-fx-theme="amber"], [data-fx-theme="amber"] [data-fx-scheme="light"] {
  --fx-color-neutral-25: #FDFBF8;
  --fx-color-neutral-50: #F9F6F3;
  --fx-color-neutral-100: #F2F0ED;
  --fx-color-neutral-200: #E7E4E1;
  --fx-color-neutral-300: #D9D3CD;
  --fx-color-neutral-400: #A8A29C;
  --fx-color-neutral-500: #706B65;
  --fx-color-neutral-600: #58534D;
  --fx-color-neutral-700: #45403B;
  --fx-color-neutral-800: #2B2722;
  --fx-color-neutral-900: #1D1914;
  --fx-color-neutral-950: #15110C;
  --fx-color-brand-50: #FFF3E6;
  --fx-color-brand-100: #FFE5C8;
  --fx-color-brand-200: #F8CD9D;
  --fx-color-brand-300: #E8B273;
  --fx-color-brand-400: #D6933C;
  --fx-color-brand-500: #F59E0B;
  --fx-color-brand-600: #A06604;
  --fx-color-brand-700: #865400;
  --fx-color-brand-800: #6C4301;
  --fx-color-brand-900: #533200;
  --fx-color-brand-950: #382000;
  --fx-color-pastel-yellow: #FED2A0;
  --fx-color-pastel-pink: #FFBBD1;
  --fx-color-pastel-blue: #B3D4FE;
  --fx-color-pastel-coral: #FFC0A9;
  --fx-color-pastel-green: #BBDEA4;
  --fx-color-pastel-purple: #D9C6FF;
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-700);
  --fx-text-on-rail-selected: var(--fx-color-neutral-950);
  --fx-bg-brand-solid: var(--fx-color-brand-500);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-600);
  --fx-bg-brand-subtle: var(--fx-color-brand-50);
  --fx-bg-rail: color-mix(in oklab, var(--fx-color-brand-950) 70%, var(--fx-color-neutral-950));
  --fx-bg-rail-selected: var(--fx-color-brand-500);
  --fx-border-color-focus: var(--fx-color-brand-600);
  --fx-viz-brand: var(--fx-color-brand-700);
}
@media (prefers-color-scheme: dark) {
  [data-fx-theme="amber"]:not([data-fx-scheme="light"]) {
    --fx-text-on-brand: var(--fx-color-neutral-950);
    --fx-text-brand: var(--fx-color-brand-300);
    --fx-bg-brand-solid: var(--fx-color-brand-400);
    --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
    --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
    --fx-border-color-focus: var(--fx-color-brand-400);
    --fx-viz-brand: var(--fx-color-brand-400);
  }
}
[data-fx-theme="amber"][data-fx-scheme="dark"], [data-fx-theme="amber"] [data-fx-scheme="dark"] {
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-300);
  --fx-bg-brand-solid: var(--fx-color-brand-400);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
  --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
  --fx-border-color-focus: var(--fx-color-brand-400);
  --fx-viz-brand: var(--fx-color-brand-400);
}
[data-fx-theme="amethyst"], [data-fx-theme="amethyst"] [data-fx-scheme="light"] {
  --fx-color-neutral-25: #FBFAFE;
  --fx-color-neutral-50: #F7F6FA;
  --fx-color-neutral-100: #F0EFF3;
  --fx-color-neutral-200: #E4E4E8;
  --fx-color-neutral-300: #D4D3DB;
  --fx-color-neutral-400: #A3A2A9;
  --fx-color-neutral-500: #6C6B72;
  --fx-color-neutral-600: #54535A;
  --fx-color-neutral-700: #414047;
  --fx-color-neutral-800: #28272D;
  --fx-color-neutral-900: #19191E;
  --fx-color-neutral-950: #121116;
  --fx-color-brand-50: #F5F3FF;
  --fx-color-brand-100: #EAE6FF;
  --fx-color-brand-200: #D7CEFE;
  --fx-color-brand-300: #C0B0FF;
  --fx-color-brand-400: #A88DFE;
  --fx-color-brand-500: #9466FF;
  --fx-color-brand-600: #7C3AED;
  --fx-color-brand-700: #693DC2;
  --fx-color-brand-800: #54329B;
  --fx-color-brand-900: #402676;
  --fx-color-brand-950: #2A1A4E;
  --fx-color-pastel-yellow: #F5D983;
  --fx-color-pastel-pink: #FABBDE;
  --fx-color-pastel-blue: #B6D3FF;
  --fx-color-pastel-coral: #FEC0AD;
  --fx-color-pastel-green: #B4DFAA;
  --fx-color-pastel-purple: #D2C8FF;
  --fx-text-on-brand: var(--fx-color-white);
  --fx-text-brand: var(--fx-color-brand-700);
  --fx-text-on-rail-selected: var(--fx-color-neutral-950);
  --fx-bg-brand-solid: var(--fx-color-brand-600);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-700);
  --fx-bg-brand-subtle: var(--fx-color-brand-50);
  --fx-bg-rail: color-mix(in oklab, var(--fx-color-brand-950) 70%, var(--fx-color-neutral-950));
  --fx-bg-rail-selected: var(--fx-color-brand-500);
  --fx-border-color-focus: var(--fx-color-brand-600);
  --fx-viz-brand: var(--fx-color-brand-700);
}
@media (prefers-color-scheme: dark) {
  [data-fx-theme="amethyst"]:not([data-fx-scheme="light"]) {
    --fx-text-on-brand: var(--fx-color-neutral-950);
    --fx-text-brand: var(--fx-color-brand-300);
    --fx-bg-brand-solid: var(--fx-color-brand-400);
    --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
    --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
    --fx-border-color-focus: var(--fx-color-brand-400);
    --fx-viz-brand: var(--fx-color-brand-400);
  }
}
[data-fx-theme="amethyst"][data-fx-scheme="dark"], [data-fx-theme="amethyst"] [data-fx-scheme="dark"] {
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-300);
  --fx-bg-brand-solid: var(--fx-color-brand-400);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
  --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
  --fx-border-color-focus: var(--fx-color-brand-400);
  --fx-viz-brand: var(--fx-color-brand-400);
}
[data-fx-theme="emerald"], [data-fx-theme="emerald"] [data-fx-scheme="light"] {
  --fx-color-neutral-25: #F8FCFA;
  --fx-color-neutral-50: #F4F8F6;
  --fx-color-neutral-100: #EDF1EF;
  --fx-color-neutral-200: #E2E6E3;
  --fx-color-neutral-300: #CED7D2;
  --fx-color-neutral-400: #9DA5A1;
  --fx-color-neutral-500: #666E6A;
  --fx-color-neutral-600: #4F5652;
  --fx-color-neutral-700: #3C433F;
  --fx-color-neutral-800: #232926;
  --fx-color-neutral-900: #151B18;
  --fx-color-neutral-950: #0D1310;
  --fx-color-brand-50: #DFFEEE;
  --fx-color-brand-100: #CFF4E1;
  --fx-color-brand-200: #B2E3CB;
  --fx-color-brand-300: #8ECEAF;
  --fx-color-brand-400: #63B791;
  --fx-color-brand-500: #32A176;
  --fx-color-brand-600: #059669;
  --fx-color-brand-700: #107250;
  --fx-color-brand-800: #105B40;
  --fx-color-brand-900: #0F4530;
  --fx-color-brand-950: #0B2E20;
  --fx-color-pastel-yellow: #EDDC85;
  --fx-color-pastel-pink: #FDBBD9;
  --fx-color-pastel-blue: #B3D4FE;
  --fx-color-pastel-coral: #FEC0AD;
  --fx-color-pastel-green: #9DE3C1;
  --fx-color-pastel-purple: #D9C6FF;
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-700);
  --fx-text-on-rail-selected: var(--fx-color-neutral-950);
  --fx-bg-brand-solid: var(--fx-color-brand-600);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-700);
  --fx-bg-brand-subtle: var(--fx-color-brand-50);
  --fx-bg-rail: color-mix(in oklab, var(--fx-color-brand-950) 70%, var(--fx-color-neutral-950));
  --fx-bg-rail-selected: var(--fx-color-brand-500);
  --fx-border-color-focus: var(--fx-color-brand-600);
  --fx-viz-brand: var(--fx-color-brand-700);
}
@media (prefers-color-scheme: dark) {
  [data-fx-theme="emerald"]:not([data-fx-scheme="light"]) {
    --fx-text-on-brand: var(--fx-color-neutral-950);
    --fx-text-brand: var(--fx-color-brand-300);
    --fx-bg-brand-solid: var(--fx-color-brand-400);
    --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
    --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
    --fx-border-color-focus: var(--fx-color-brand-400);
    --fx-viz-brand: var(--fx-color-brand-400);
  }
}
[data-fx-theme="emerald"][data-fx-scheme="dark"], [data-fx-theme="emerald"] [data-fx-scheme="dark"] {
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-300);
  --fx-bg-brand-solid: var(--fx-color-brand-400);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
  --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
  --fx-border-color-focus: var(--fx-color-brand-400);
  --fx-viz-brand: var(--fx-color-brand-400);
}
[data-fx-theme="hilos"], [data-fx-theme="hilos"] [data-fx-scheme="light"] {
  --fx-color-neutral-25: #FAF8F4;
  --fx-color-neutral-50: #F4F1EC;
  --fx-color-neutral-100: #EFEAE3;
  --fx-color-neutral-200: #E9E4DC;
  --fx-color-neutral-300: #D9D4CC;
  --fx-color-neutral-400: #A6A099;
  --fx-color-neutral-500: #706B64;
  --fx-color-neutral-600: #57524C;
  --fx-color-neutral-700: #433F39;
  --fx-color-neutral-800: #2B2721;
  --fx-color-neutral-900: #1F1C18;
  --fx-color-neutral-950: #15130F;
  --fx-color-brand-50: var(--fx-color-neutral-50);
  --fx-color-brand-100: var(--fx-color-neutral-100);
  --fx-color-brand-200: var(--fx-color-neutral-200);
  --fx-color-brand-300: var(--fx-color-neutral-300);
  --fx-color-brand-400: var(--fx-color-neutral-400);
  --fx-color-brand-500: var(--fx-color-neutral-500);
  --fx-color-brand-600: var(--fx-color-neutral-600);
  --fx-color-brand-700: var(--fx-color-neutral-700);
  --fx-color-brand-800: var(--fx-color-neutral-800);
  --fx-color-brand-900: var(--fx-color-neutral-900);
  --fx-color-brand-950: var(--fx-color-neutral-950);
  --fx-text-on-brand: var(--fx-color-white);
  --fx-text-brand: var(--fx-color-neutral-900);
  --fx-bg-brand-solid: var(--fx-color-neutral-900);
  --fx-bg-brand-solid-hover: var(--fx-color-neutral-700);
  --fx-bg-brand-subtle: var(--fx-color-neutral-100);
  --fx-border-color-focus: var(--fx-color-neutral-900);
}
@media (prefers-color-scheme: dark) {
  [data-fx-theme="hilos"]:not([data-fx-scheme="light"]) {
    --fx-text-on-brand: var(--fx-color-neutral-900);
    --fx-text-brand: var(--fx-color-neutral-50);
    --fx-bg-brand-solid: var(--fx-color-neutral-50);
    --fx-bg-brand-solid-hover: var(--fx-color-neutral-200);
    --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
    --fx-border-color-focus: var(--fx-color-neutral-50);
  }
}
[data-fx-theme="hilos"][data-fx-scheme="dark"], [data-fx-theme="hilos"] [data-fx-scheme="dark"] {
  --fx-text-on-brand: var(--fx-color-neutral-900);
  --fx-text-brand: var(--fx-color-neutral-50);
  --fx-bg-brand-solid: var(--fx-color-neutral-50);
  --fx-bg-brand-solid-hover: var(--fx-color-neutral-200);
  --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
  --fx-border-color-focus: var(--fx-color-neutral-50);
}
[data-fx-theme="ocean"], [data-fx-theme="ocean"] [data-fx-scheme="light"] {
  --fx-color-neutral-25: #F9FBFF;
  --fx-color-neutral-50: #F5F7FA;
  --fx-color-neutral-100: #EEF0F4;
  --fx-color-neutral-200: #E3E5E8;
  --fx-color-neutral-300: #D0D4DC;
  --fx-color-neutral-400: #9FA3AA;
  --fx-color-neutral-500: #686C72;
  --fx-color-neutral-600: #51545A;
  --fx-color-neutral-700: #3E4147;
  --fx-color-neutral-800: #25282D;
  --fx-color-neutral-900: #171A1F;
  --fx-color-neutral-950: #0F1217;
  --fx-color-brand-50: #F0F5FF;
  --fx-color-brand-100: #DFEAFF;
  --fx-color-brand-200: #C1D7FF;
  --fx-color-brand-300: #9CBEFE;
  --fx-color-brand-400: #71A1FE;
  --fx-color-brand-500: #4783FF;
  --fx-color-brand-600: #2563EB;
  --fx-color-brand-700: #2858BF;
  --fx-color-brand-800: #204799;
  --fx-color-brand-900: #193674;
  --fx-color-brand-950: #10244D;
  --fx-color-pastel-yellow: #F5D983;
  --fx-color-pastel-pink: #F8BBE1;
  --fx-color-pastel-blue: #BAD2FE;
  --fx-color-pastel-coral: #FEC0AD;
  --fx-color-pastel-green: #B4DFAA;
  --fx-color-pastel-purple: #D5C7FE;
  --fx-text-on-brand: var(--fx-color-white);
  --fx-text-brand: var(--fx-color-brand-700);
  --fx-text-on-rail-selected: var(--fx-color-neutral-950);
  --fx-bg-brand-solid: var(--fx-color-brand-600);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-700);
  --fx-bg-brand-subtle: var(--fx-color-brand-50);
  --fx-bg-rail: color-mix(in oklab, var(--fx-color-brand-950) 70%, var(--fx-color-neutral-950));
  --fx-bg-rail-selected: var(--fx-color-brand-500);
  --fx-border-color-focus: var(--fx-color-brand-600);
  --fx-viz-brand: var(--fx-color-brand-700);
}
@media (prefers-color-scheme: dark) {
  [data-fx-theme="ocean"]:not([data-fx-scheme="light"]) {
    --fx-text-on-brand: var(--fx-color-neutral-950);
    --fx-text-brand: var(--fx-color-brand-300);
    --fx-bg-brand-solid: var(--fx-color-brand-400);
    --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
    --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
    --fx-border-color-focus: var(--fx-color-brand-400);
    --fx-viz-brand: var(--fx-color-brand-400);
  }
}
[data-fx-theme="ocean"][data-fx-scheme="dark"], [data-fx-theme="ocean"] [data-fx-scheme="dark"] {
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-300);
  --fx-bg-brand-solid: var(--fx-color-brand-400);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
  --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
  --fx-border-color-focus: var(--fx-color-brand-400);
  --fx-viz-brand: var(--fx-color-brand-400);
}
[data-fx-theme="rose"], [data-fx-theme="rose"] [data-fx-scheme="light"] {
  --fx-color-neutral-25: #FEFAFA;
  --fx-color-neutral-50: #FAF5F5;
  --fx-color-neutral-100: #F3EFEF;
  --fx-color-neutral-200: #E8E3E3;
  --fx-color-neutral-300: #DBD1D1;
  --fx-color-neutral-400: #AAA0A0;
  --fx-color-neutral-500: #726969;
  --fx-color-neutral-600: #5A5252;
  --fx-color-neutral-700: #473F3F;
  --fx-color-neutral-800: #2D2626;
  --fx-color-neutral-900: #1E1718;
  --fx-color-neutral-950: #161010;
  --fx-color-brand-50: #FEF2F2;
  --fx-color-brand-100: #FFE1E1;
  --fx-color-brand-200: #FFC5C6;
  --fx-color-brand-300: #FE9FA3;
  --fx-color-brand-400: #FC6E7A;
  --fx-color-brand-500: #ED415A;
  --fx-color-brand-600: #E11D48;
  --fx-color-brand-700: #AE1F39;
  --fx-color-brand-800: #8B1B2E;
  --fx-color-brand-900: #6A1623;
  --fx-color-brand-950: #471017;
  --fx-color-pastel-yellow: #FDD583;
  --fx-color-pastel-pink: #FEBAD6;
  --fx-color-pastel-blue: #B3D4FE;
  --fx-color-pastel-coral: #FFBEBF;
  --fx-color-pastel-green: #B4DFAA;
  --fx-color-pastel-purple: #E0C3FD;
  --fx-text-on-brand: var(--fx-color-white);
  --fx-text-brand: var(--fx-color-brand-700);
  --fx-text-on-rail-selected: var(--fx-color-neutral-950);
  --fx-bg-brand-solid: var(--fx-color-brand-600);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-700);
  --fx-bg-brand-subtle: var(--fx-color-brand-50);
  --fx-bg-rail: color-mix(in oklab, var(--fx-color-brand-950) 70%, var(--fx-color-neutral-950));
  --fx-bg-rail-selected: var(--fx-color-brand-500);
  --fx-border-color-focus: var(--fx-color-brand-600);
  --fx-viz-brand: var(--fx-color-brand-700);
}
@media (prefers-color-scheme: dark) {
  [data-fx-theme="rose"]:not([data-fx-scheme="light"]) {
    --fx-text-on-brand: var(--fx-color-neutral-950);
    --fx-text-brand: var(--fx-color-brand-300);
    --fx-bg-brand-solid: var(--fx-color-brand-400);
    --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
    --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
    --fx-border-color-focus: var(--fx-color-brand-400);
    --fx-viz-brand: var(--fx-color-brand-400);
  }
}
[data-fx-theme="rose"][data-fx-scheme="dark"], [data-fx-theme="rose"] [data-fx-scheme="dark"] {
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-300);
  --fx-bg-brand-solid: var(--fx-color-brand-400);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
  --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
  --fx-border-color-focus: var(--fx-color-brand-400);
  --fx-viz-brand: var(--fx-color-brand-400);
}
[data-fx-theme="sunset"], [data-fx-theme="sunset"] [data-fx-scheme="light"] {
  --fx-color-neutral-25: #FEFAF8;
  --fx-color-neutral-50: #FAF6F4;
  --fx-color-neutral-100: #F3EFED;
  --fx-color-neutral-200: #E8E3E2;
  --fx-color-neutral-300: #DBD2CF;
  --fx-color-neutral-400: #A9A19E;
  --fx-color-neutral-500: #726A67;
  --fx-color-neutral-600: #5A524F;
  --fx-color-neutral-700: #463F3D;
  --fx-color-neutral-800: #2D2624;
  --fx-color-neutral-900: #1E1816;
  --fx-color-neutral-950: #16100E;
  --fx-color-brand-50: #FEF2EE;
  --fx-color-brand-100: #FEE3D9;
  --fx-color-brand-200: #FEC8B3;
  --fx-color-brand-300: #FFA381;
  --fx-color-brand-400: #F07F53;
  --fx-color-brand-500: #EA580C;
  --fx-color-brand-600: #C34601;
  --fx-color-brand-700: #A23901;
  --fx-color-brand-800: #832D01;
  --fx-color-brand-900: #642305;
  --fx-color-brand-950: #421706;
  --fx-color-pastel-yellow: #FAD683;
  --fx-color-pastel-pink: #FFBAD4;
  --fx-color-pastel-blue: #B3D4FE;
  --fx-color-pastel-coral: #FFC0A9;
  --fx-color-pastel-green: #B4DFAA;
  --fx-color-pastel-purple: #D9C6FF;
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-700);
  --fx-text-on-rail-selected: var(--fx-color-neutral-950);
  --fx-bg-brand-solid: var(--fx-color-brand-500);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-600);
  --fx-bg-brand-subtle: var(--fx-color-brand-50);
  --fx-bg-rail: color-mix(in oklab, var(--fx-color-brand-950) 70%, var(--fx-color-neutral-950));
  --fx-bg-rail-selected: var(--fx-color-brand-500);
  --fx-border-color-focus: var(--fx-color-brand-500);
  --fx-viz-brand: var(--fx-color-brand-700);
}
@media (prefers-color-scheme: dark) {
  [data-fx-theme="sunset"]:not([data-fx-scheme="light"]) {
    --fx-text-on-brand: var(--fx-color-neutral-950);
    --fx-text-brand: var(--fx-color-brand-300);
    --fx-bg-brand-solid: var(--fx-color-brand-400);
    --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
    --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
    --fx-border-color-focus: var(--fx-color-brand-400);
    --fx-viz-brand: var(--fx-color-brand-400);
  }
}
[data-fx-theme="sunset"][data-fx-scheme="dark"], [data-fx-theme="sunset"] [data-fx-scheme="dark"] {
  --fx-text-on-brand: var(--fx-color-neutral-950);
  --fx-text-brand: var(--fx-color-brand-300);
  --fx-bg-brand-solid: var(--fx-color-brand-400);
  --fx-bg-brand-solid-hover: var(--fx-color-brand-300);
  --fx-bg-brand-subtle: color-mix(in oklab, var(--fx-bg-brand-solid) 20%, var(--fx-bg-surface));
  --fx-border-color-focus: var(--fx-color-brand-400);
  --fx-viz-brand: var(--fx-color-brand-400);
}
[data-fx-body="system"] {
  --fx-font-family-sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-adjust-sans: ex-height 0.52;
}
[data-fx-body="google-sans"] {
  --fx-font-family-sans: "Google Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-adjust-sans: ex-height 0.520;
}
[data-fx-body="inter"] {
  --fx-font-family-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-adjust-sans: ex-height 0.520;
}
[data-fx-body="onest"] {
  --fx-font-family-sans: "Onest", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-adjust-sans: ex-height 0.514;
}
[data-fx-body="public"] {
  --fx-font-family-sans: "Public Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-adjust-sans: ex-height 0.512;
}
[data-fx-body="source"] {
  --fx-font-family-sans: "Source Sans 3", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-adjust-sans: ex-height 0.520;
}
[data-fx-font="system"] {
  --fx-font-family-display: var(--fx-font-family-sans);
  --fx-font-family-mono: ui-monospace, "SFMono-Regular", Consolas, monospace;
  --fx-font-family-numeric: var(--fx-font-family-display);
  --fx-font-adjust-display: var(--fx-font-adjust-sans);
  --fx-font-adjust-mono: ex-height 0.52;
  --fx-font-adjust-numeric: var(--fx-font-adjust-display);
}
[data-fx-font="condensed"] {
  --fx-font-family-display: "Oswald", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-family-mono: "IBM Plex Mono", ui-monospace, monospace;
  --fx-font-family-numeric: var(--fx-font-family-display);
  --fx-font-adjust-display: ex-height 0.520;
  --fx-font-adjust-mono: ex-height 0.520;
  --fx-font-adjust-numeric: var(--fx-font-adjust-display);
}
[data-fx-font="editorial"] {
  --fx-font-family-display: "Lora", Georgia, "Times New Roman", serif;
  --fx-font-family-mono: "IBM Plex Mono", ui-monospace, monospace;
  --fx-font-family-numeric: var(--fx-font-family-mono);
  --fx-font-adjust-display: ex-height 0.506;
  --fx-font-adjust-mono: ex-height 0.520;
  --fx-font-adjust-numeric: var(--fx-font-adjust-mono);
}
[data-fx-font="friendly"] {
  --fx-font-family-display: "Quicksand", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-family-mono: "IBM Plex Mono", ui-monospace, monospace;
  --fx-font-family-numeric: var(--fx-font-family-display);
  --fx-font-adjust-display: ex-height 0.520;
  --fx-font-adjust-mono: ex-height 0.520;
  --fx-font-adjust-numeric: var(--fx-font-adjust-display);
}
[data-fx-font="grotesk"] {
  --fx-font-family-display: "Space Grotesk", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-family-mono: "IBM Plex Mono", ui-monospace, monospace;
  --fx-font-family-numeric: var(--fx-font-family-display);
  --fx-font-adjust-display: ex-height 0.471;
  --fx-font-adjust-mono: ex-height 0.520;
  --fx-font-adjust-numeric: var(--fx-font-adjust-display);
}
[data-fx-font="onest"] {
  --fx-font-family-display: "Onest", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-family-numeric: var(--fx-font-family-display);
  --fx-font-adjust-display: ex-height 0.514;
  --fx-font-adjust-numeric: var(--fx-font-adjust-display);
}
[data-fx-font="wide"] {
  --fx-font-family-display: "Unbounded", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fx-font-family-mono: "IBM Plex Mono", ui-monospace, monospace;
  --fx-font-family-numeric: var(--fx-font-family-display);
  --fx-font-adjust-display: ex-height 0.448;
  --fx-font-adjust-mono: ex-height 0.520;
  --fx-font-adjust-numeric: var(--fx-font-adjust-display);
}
[data-fx-personality="hard"] {
  --fx-knob-pill: 0;
  --fx-knob-depth: 1.2;
  --fx-knob-blur: 0.5;
  --fx-knob-motion: 0.85;
  --fx-knob-outline: 1;
  --fx-knob-field-fill: 0;
  --fx-radius-control: 4px;
  --fx-radius-nav: 4px;
  --fx-radius-field-multiline: 4px;
  --fx-radius-surface: 4px;
  --fx-radius-overlay: 8px;
  --fx-radius-badge: 4px;
  --fx-radius-checkbox-ratio: 0.15;
  --fx-size-control-sm: 28px;
  --fx-size-control-md: 32px;
  --fx-size-control-lg: 40px;
}
[data-fx-personality="medium"] {
  --fx-knob-pill: 0;
  --fx-knob-depth: 1;
  --fx-knob-blur: 1;
  --fx-knob-motion: 1;
  --fx-knob-outline: 1;
  --fx-knob-field-fill: 0;
  --fx-radius-control: 8px;
  --fx-radius-nav: 6px;
  --fx-radius-field-multiline: 8px;
  --fx-radius-surface: 12px;
  --fx-radius-overlay: 16px;
  --fx-radius-badge: 6px;
  --fx-radius-checkbox-ratio: 0.25;
  --fx-size-control-sm: 36px;
  --fx-size-control-md: 44px;
  --fx-size-control-lg: 52px;
}
[data-fx-personality="soft"] {
  --fx-knob-pill: 0;
  --fx-knob-depth: 0.9;
  --fx-knob-blur: 2;
  --fx-knob-motion: 1.15;
  --fx-knob-outline: 0;
  --fx-knob-field-fill: 1;
  --fx-radius-control: 12px;
  --fx-radius-nav: 8px;
  --fx-radius-field-multiline: 12px;
  --fx-radius-surface: 14px;
  --fx-radius-overlay: 14px;
  --fx-radius-badge: 999px;
  --fx-radius-checkbox-ratio: 0.34;
}
[data-fx-personality="round"] {
  --fx-knob-pill: 1;
  --fx-knob-depth: 0.9;
  --fx-knob-blur: 2;
  --fx-knob-motion: 1.15;
  --fx-knob-outline: 0;
  --fx-knob-field-fill: 1;
  --fx-radius-control: 12px;
  --fx-radius-nav: 8px;
  --fx-radius-field-multiline: 16px;
  --fx-radius-surface: 14px;
  --fx-radius-overlay: 14px;
  --fx-radius-badge: 999px;
  --fx-radius-checkbox-ratio: 0.34;
}
[data-fx-edge="line"], [data-fx-edge="line"] [data-fx-personality] {
  --fx-knob-outline: 1;
  --fx-knob-depth: 0;
  --fx-knob-field-fill: 0;
}
[data-fx-edge="shadow"], [data-fx-edge="shadow"] [data-fx-personality] {
  --fx-knob-outline: 0;
  --fx-knob-depth: 1;
  --fx-knob-field-fill: 1;
}
[data-fx-density="compact"] {
  --fx-knob-density: 0.82;
}
[data-fx-density="default"] {
  --fx-knob-density: 1;
}
[data-fx-density="comfortable"] {
  --fx-knob-density: 1.18;
}
[data-fx-motion="none"], [data-fx-motion="none"] [data-fx-personality] {
  --fx-knob-motion: 0;
  --fx-knob-motion-press: 0;
  --fx-knob-motion-loop: 0;
  --fx-motion-shift-sm: 0px;
  --fx-motion-shift-md: 0px;
  --fx-motion-shift-lg: 0px;
  --fx-motion-scale-enter: 1;
  --fx-motion-scale-press: 1;
}
[data-fx-motion="calm"] {
  --fx-knob-motion-press: 0;
  --fx-ease-spring: cubic-bezier(0.2, 0, 0, 1);
}
[data-fx-motion="expressive"] {
  --fx-knob-motion-lift: 1;
  --fx-knob-motion-stagger: 1;
}
:root, [data-fx-scheme], [data-fx-theme], [data-fx-body], [data-fx-font], [data-fx-personality], [data-fx-edge], [data-fx-density], [data-fx-motion] {
  --fx-control-h-sm: max(var(--fx-size-min-target), calc(var(--fx-size-control-sm) * var(--fx-knob-density)));
  --fx-control-h-md: max(var(--fx-size-min-target), calc(var(--fx-size-control-md) * var(--fx-knob-density)));
  --fx-control-h-lg: max(var(--fx-size-min-target), calc(var(--fx-size-control-lg) * var(--fx-knob-density)));
  --fx-shadow-sm: 0 1px calc(2px * var(--fx-knob-blur)) 0 color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 10%), transparent);
  --fx-shadow-md: 0 4px calc(8px * var(--fx-knob-blur)) -2px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 10%), transparent), 0 2px calc(4px * var(--fx-knob-blur)) -2px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 6%), transparent);
  --fx-shadow-lg: 0 12px calc(16px * var(--fx-knob-blur)) -4px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 8%), transparent), 0 4px calc(6px * var(--fx-knob-blur)) -2px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 3%), transparent), 0 24px calc(48px * var(--fx-knob-blur)) -12px color-mix(in oklab, var(--fx-shadow-color) calc(var(--fx-knob-depth) * 12%), transparent);
  --fx-border-color-surface: color-mix(in oklab, var(--fx-border-color-default) calc(var(--fx-knob-outline) * 100%), transparent);
  --fx-bg-field: color-mix(in oklab, var(--fx-bg-muted) calc(var(--fx-knob-field-fill) * 100%), var(--fx-bg-surface));
  --fx-border-color-field: color-mix(in oklab, var(--fx-border-color-default) calc((1 - var(--fx-knob-field-fill)) * 100%), transparent);
  --fx-motion-fast: calc(var(--fx-duration-fast) * var(--fx-knob-motion));
  --fx-motion-base: calc(var(--fx-duration-base) * var(--fx-knob-motion));
  --fx-motion-slow: calc(var(--fx-duration-slow) * var(--fx-knob-motion));
  --fx-motion-instant: calc(var(--fx-duration-instant) * var(--fx-knob-motion));
  --fx-motion-slower: calc(var(--fx-duration-slower) * var(--fx-knob-motion));
  --fx-motion-exit-fast: calc(var(--fx-duration-fast) * var(--fx-knob-motion) * 0.7);
  --fx-motion-exit-base: calc(var(--fx-duration-base) * var(--fx-knob-motion) * 0.7);
  --fx-motion-exit-slow: calc(var(--fx-duration-slow) * var(--fx-knob-motion) * 0.7);
  --fx-motion-press: calc(1 - (1 - var(--fx-motion-scale-press)) * var(--fx-knob-motion-press));
}
@media (pointer: coarse) {
  :root, [data-fx-scheme], [data-fx-theme], [data-fx-body], [data-fx-font], [data-fx-personality], [data-fx-edge], [data-fx-density], [data-fx-motion] {
    --fx-control-h-sm: max(var(--fx-size-touch-target), calc(var(--fx-size-control-sm) * var(--fx-knob-density)));
    --fx-control-h-md: max(var(--fx-size-touch-target), calc(var(--fx-size-control-md) * var(--fx-knob-density)));
  }
}
}


/* Asos: sahifa foni, matn, harakatni kamaytirish. Komponent emas — fx.base qatlami. */
@layer fx.base {
  :root {
    color-scheme: light;
    font-family: var(--fx-font-family-sans);
    font-size-adjust: var(--fx-font-adjust-sans); /* shrift almashganda oʻlcham saqlanadi (scripts/fonts.mjs) */
    color: var(--fx-text-primary);
    background: var(--fx-bg-page);
  }
  [data-fx-scheme="dark"] { color-scheme: dark; }
  @media (prefers-color-scheme: dark) {
    :root:not([data-fx-scheme="light"]) { color-scheme: dark; }
  }
  [data-fx-scheme] { color: var(--fx-text-primary); background: var(--fx-bg-page); }
  /* hidden doim yashiradi: komponentning oʻz display qiymati (flex, grid, inline-flex) uni bosib ketmasin.
     !important pastki qatlamda — har qanday komponent display’idan ustun (RedFox admin topdi, 17.10) */
  [hidden]:not([hidden="until-found"]) { display: none !important; }
  /* Matn belgilash va skroll rangi mavzudan (5-toʻlqin 4.22) */
  ::selection { background: var(--fx-selection-bg); color: var(--fx-selection-text); }
  :root { scrollbar-color: var(--fx-scrollbar-thumb) var(--fx-scrollbar-track); }
  /* Umumiy harakatlar — bir nechta komponent ishlatadi (avatar holati, tugma yuklanishi, spinner) */
  @keyframes fx-pulse { 50% { opacity: 0.35; } }
  @keyframes fx-spin { to { rotate: 1turn; } }
  @keyframes fx-fade-in { from { opacity: 0; } }
  /* WDS Harakat: prefers-reduced-motion doim hurmat qilinadi */
  @media (prefers-reduced-motion: reduce) {
    /* harakat yoʻq, maʼno bor: siljish 0, shkala 1, cheksiz animatsiya toʻxtaydi; rang va holat qoladi (WDS «Harakat») */
    :root, [data-fx-personality], [data-fx-motion] {
      --fx-knob-motion: 0; --fx-knob-motion-press: 0; --fx-knob-motion-lift: 0; --fx-knob-motion-stagger: 0; --fx-knob-motion-loop: 0;
      --fx-motion-shift-sm: 0px; --fx-motion-shift-md: 0px; --fx-motion-shift-lg: 0px; --fx-motion-scale-enter: 1;
    }
  }
}
/* Yordamchilar: ekranda koʻrinmaydi, ekran oʻquvchi oʻqiydi; «Asosiy qismga oʻtish» havolasi fokusda chiqadi */
@layer fx.utilities {
  .fx-sr-only:not(:focus-within, :focus) { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .fx-skip-link:not(:focus) { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .fx-skip-link:focus { position: fixed; inset-block-start: var(--fx-space-2); inset-inline-start: var(--fx-space-2); z-index: 10; padding: var(--fx-space-2) var(--fx-space-4); border-radius: var(--fx-radius-control); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
}

/* Harakat yordamchilari (fx.utilities): AI matn yaltirashi, qadamli kirish (expressive), yorqin chegara */
@layer fx.utilities {
  /* «Oʻylayapti…» — matn ustidan yorugʻlik oʻtadi */
  .fx-shimmer-text { background: linear-gradient(90deg, var(--fx-text-tertiary) 35%, var(--fx-text-primary) 50%, var(--fx-text-tertiary) 65%) 0 0 / 300% 100% text; color: transparent; animation: fx-shimmer-text var(--fx-duration-shimmer) linear infinite; }
  @keyframes fx-shimmer-text { from { background-position: 100% 0; } to { background-position: 0 0; } }
  @media (prefers-reduced-motion: reduce) { .fx-shimmer-text { animation: none; color: var(--fx-text-tertiary); background: none; } }
  /* Roʻyxat elementlari ketma-ket kiradi — faqat expressive (knob), 8 tagacha */
  [data-fx-stagger] > * { animation: fx-stagger-in calc(var(--fx-motion-base) * var(--fx-knob-motion-stagger)) var(--fx-ease-enter) both; }
  [data-fx-stagger] > :nth-child(2) { animation-delay: calc(var(--fx-duration-stagger) * 1 * var(--fx-knob-motion-stagger)); }
  [data-fx-stagger] > :nth-child(3) { animation-delay: calc(var(--fx-duration-stagger) * 2 * var(--fx-knob-motion-stagger)); }
  [data-fx-stagger] > :nth-child(4) { animation-delay: calc(var(--fx-duration-stagger) * 3 * var(--fx-knob-motion-stagger)); }
  [data-fx-stagger] > :nth-child(5) { animation-delay: calc(var(--fx-duration-stagger) * 4 * var(--fx-knob-motion-stagger)); }
  [data-fx-stagger] > :nth-child(6) { animation-delay: calc(var(--fx-duration-stagger) * 5 * var(--fx-knob-motion-stagger)); }
  [data-fx-stagger] > :nth-child(7) { animation-delay: calc(var(--fx-duration-stagger) * 6 * var(--fx-knob-motion-stagger)); }
  [data-fx-stagger] > :nth-child(n + 8) { animation-delay: calc(var(--fx-duration-stagger) * 7 * var(--fx-knob-motion-stagger)); }
  @keyframes fx-stagger-in { from { opacity: 0; translate: 0 var(--fx-motion-shift-md); } }
  /* Yorqin chegara (landing kartasi, AI javobi): aylanuvchi gradient — faqat expressive’da aylanadi */
  @property --fx-glow-angle { syntax: "<angle>"; inherits: false; initial-value: 0deg; }
  .fx-glow { border: var(--fx-border-width-default) solid transparent; background: linear-gradient(var(--fx-bg-surface), var(--fx-bg-surface)) padding-box, conic-gradient(from var(--fx-glow-angle), var(--fx-viz-brand), var(--fx-viz-accent), var(--fx-color-pastel-pink), var(--fx-viz-brand)) border-box; }
  [data-fx-motion="expressive"] .fx-glow { animation: fx-glow-spin calc(var(--fx-duration-shimmer) * 3) linear infinite; }
  @keyframes fx-glow-spin { to { --fx-glow-angle: 360deg; } }
  @media (prefers-reduced-motion: reduce) { .fx-glow { animation: none; } }
  /* Harakat oʻchirilgan (data-fx-motion="none"): cheksiz animatsiyalar toʻxtaydi */
  [data-fx-motion="none"] :is(*, *::before, *::after) { animation-iteration-count: 1 !important; }
}

/* accordion */
@layer fx.components {
  /* Akkordeon: native <details> (name — bittasi ochiq), strelka — chevron, yopiqda −90°, ochiqda 0°.
     Ochilish balandlik animatsiyasi ::details-content + interpolate-size qoʻllaydigan brauzerda. */
  .fx-accordion { display: grid; border-block: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-accordion__item + .fx-accordion__item { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-accordion__summary { display: flex; align-items: center; gap: var(--fx-space-3); min-block-size: var(--fx-control-h-md); padding-block: var(--fx-space-3); cursor: pointer; list-style: none; font-weight: var(--fx-font-weight-medium); color: var(--fx-text-primary); }
  .fx-accordion__summary::-webkit-details-marker { display: none; }
  .fx-accordion__summary::after { content: ""; flex: none; margin-inline-start: auto; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0.55; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; rotate: -90deg; transition: rotate var(--fx-motion-fast) var(--fx-ease-standard), opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-accordion__summary:hover::after { opacity: 0.9; }
  .fx-accordion__item[open] > .fx-accordion__summary::after { rotate: 0deg; }
  .fx-accordion__summary:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-accordion__body { padding-block-end: var(--fx-space-4); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); line-height: 1.6; }
  @supports (interpolate-size: allow-keywords) {
    .fx-accordion { interpolate-size: allow-keywords; }
    .fx-accordion__item::details-content { block-size: 0; overflow: clip; transition: block-size var(--fx-motion-base) var(--fx-ease-standard), content-visibility var(--fx-motion-base) allow-discrete; }
    .fx-accordion__item[open]::details-content { block-size: auto; }
  }
  /* ---- Kengaytma (2.143, 2.153, 2.154): sarlavha slotlari, chevron chapda, bordered/separated/flush, ichma-ich, print ---- */
  .fx-accordion__icon { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); color: var(--fx-text-tertiary); }
  .fx-accordion__meta { margin-inline-start: auto; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); }
  .fx-accordion__summary:has(> .fx-accordion__meta)::after { margin-inline-start: var(--fx-space-2); }
  .fx-accordion[data-chevron="start"] .fx-accordion__summary::after { order: -1; margin-inline-start: 0; }
  .fx-accordion[data-chevron="start"] .fx-accordion__meta { margin-inline-start: auto; }
  .fx-accordion[data-chevron="start"] .fx-accordion__body { padding-inline-start: calc(var(--fx-size-icon-sm) + var(--fx-space-3)); }
  .fx-accordion[data-variant="flush"] { border-block: 0; }
  .fx-accordion[data-variant="flush"] .fx-accordion__item + .fx-accordion__item { border-block-start: 0; }
  .fx-accordion[data-variant="bordered"] { border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); overflow: clip; }
  .fx-accordion[data-variant="separated"] { gap: var(--fx-space-2); border-block: 0; }
  .fx-accordion[data-variant="separated"] > .fx-accordion__item { border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); overflow: clip; }
  .fx-accordion:is([data-variant="bordered"], [data-variant="separated"]) :is(.fx-accordion__summary, .fx-accordion__body) { padding-inline: var(--fx-space-4); }
  .fx-accordion[data-focus="inset"] .fx-accordion__summary:focus-visible { outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-accordion__body > .fx-accordion { margin-block-start: var(--fx-space-2); border-block-end: 0; padding-inline-start: var(--fx-space-4); }
  /* Bosma: hammasi ochiq chiqadi */
  @media print { .fx-accordion__item::details-content { block-size: auto; content-visibility: visible; } .fx-accordion__summary::after { display: none; } }
  @media (forced-colors: active) { .fx-accordion__summary::after { background: ButtonText; opacity: 1; } }
}

/* alert */
@layer fx.components {
  /* Ogohlantirish / eslatma (WDS «Rang»: callout faqat semantik ohangda; toʻla tusli yuza, chiziqsiz, chap chiziqsiz, soyasiz;
     ixtiyoriy bitta havola). Belgi — holat shakli (doira, uchburchak, romb, «i»), rangning oʻzi yetmaydi. */
  .fx-alert {
    --_bg: var(--fx-bg-muted);
    --_fg: var(--fx-text-secondary);
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: start;
    gap: var(--fx-space-1) var(--fx-space-3);
    padding: var(--fx-space-4);
    border-radius: var(--fx-radius-surface);
    background: var(--_bg);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
    line-height: 1.5;
  }
  .fx-alert::before { content: ""; grid-row: span 2; margin-block-start: calc(var(--fx-space-1) * 0.75); inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border-radius: var(--fx-radius-badge); background: var(--_fg); }
  .fx-alert[data-tone="info"] { --_bg: var(--fx-bg-info-subtle); --_fg: var(--fx-fg-info); }
  .fx-alert[data-tone="info"]::before { border-radius: var(--fx-radius-circle); }
  .fx-alert[data-tone="success"] { --_bg: var(--fx-bg-success-subtle); --_fg: var(--fx-fg-success); }
  .fx-alert[data-tone="success"]::before { border-radius: var(--fx-radius-circle); }
  .fx-alert[data-tone="warning"] { --_bg: var(--fx-bg-warning-subtle); --_fg: var(--fx-fg-warning); }
  .fx-alert[data-tone="warning"]::before { clip-path: polygon(50% 0, 100% 100%, 0 100%); border-radius: 0; }
  .fx-alert[data-tone="error"] { --_bg: var(--fx-bg-error-subtle); --_fg: var(--fx-fg-error); }
  .fx-alert[data-tone="error"]::before { rotate: 45deg; scale: 0.85; border-radius: 0; }
  .fx-alert[data-tone="brand"] { --_bg: var(--fx-bg-brand-subtle); --_fg: var(--fx-text-brand); }
  .fx-alert__title { margin: 0; grid-column: 2; font-weight: var(--fx-font-weight-semibold); }
  .fx-alert__text { margin: 0; grid-column: 2; color: var(--fx-text-secondary); }
  .fx-alert__list { grid-column: 2; margin: var(--fx-space-1) 0 0; padding-inline-start: var(--fx-space-4); color: var(--fx-text-secondary); }
  .fx-alert__list a { color: inherit; text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); }
  .fx-alert__action { grid-column: 2; justify-self: start; margin-block-start: var(--fx-space-1); color: var(--_fg); font-weight: var(--fx-font-weight-semibold); text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); }
  .fx-alert__close { grid-column: 3; grid-row: 1; inline-size: var(--fx-size-min-target); block-size: var(--fx-size-min-target); margin: calc(var(--fx-space-1) * -1); padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: var(--fx-text-tertiary); font: inherit; font-size: var(--fx-font-size-lg); line-height: 1; cursor: pointer; }
  .fx-alert__close:hover { color: var(--fx-text-primary); }
  .fx-alert__close:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-alert[data-layout="compact"] { padding: var(--fx-space-2) var(--fx-space-3); align-items: center; }
  .fx-alert[data-layout="compact"]::before { grid-row: auto; margin: 0; }
  /* ---- Kengaytma (2.89): ikon slot — .fx-alert__icon boʻlsa shakl-belgi oʻrniga ikon chiqadi ---- */
  .fx-alert__icon { grid-row: span 2; flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); color: var(--_fg); }
  .fx-alert:has(> .fx-alert__icon)::before { content: none; }
  .fx-alert > .fx-alert__icon { margin-block-start: calc(var(--fx-space-1) / 2); }
  @media (forced-colors: active) { .fx-alert { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* anchor-heading */
@layer fx.components {
  /* Sarlavha havolasi (anchor link): sarlavha ustiga kelganda yoki fokusda «#» chiqadi — shu boʻlimga toʻgʻridan-toʻgʻri havola */
  .fx-anchor-heading { position: relative; scroll-margin-block-start: calc(var(--fx-size-topbar) + var(--fx-space-4)); }
  .fx-anchor-heading__link { margin-inline-start: var(--fx-space-2); border-radius: var(--fx-radius-badge); color: var(--fx-text-tertiary); font-weight: var(--fx-font-weight-regular); text-decoration: none; opacity: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-anchor-heading:hover .fx-anchor-heading__link, .fx-anchor-heading__link:focus-visible, .fx-anchor-heading:target .fx-anchor-heading__link { opacity: 1; }
  .fx-anchor-heading__link:hover { color: var(--fx-text-brand); }
  .fx-anchor-heading__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  @media (hover: none) { .fx-anchor-heading__link { opacity: 1; } }
}

/* apikeys */
@layer fx.components {
  /* API kalitlari boshqaruvi (4.188, naqsh): roʻyxat (nom, prefiks, ruxsat, yaratilgan, oxirgi ishlatilgan, muddat, amal),
     «Yangi kalit» dialogi va yaratilgandan keyin BIR MARTA koʻrsatiladigan kalit paneli (nusxalash + ogohlantirish).
     Bekor qilingan kalit — chizilgan prefiks + «Bekor qilingan» holati. Xulq: foxui.js → apikeys. */
  .fx-apikeys { display: grid; gap: var(--fx-space-4); color: var(--fx-text-primary); }
  .fx-apikeys__head { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-apikeys__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-apikeys__text { margin: var(--fx-space-1) 0 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  /* Bir martalik koʻrsatish paneli: ogohlantirish rangi + «!» + matn; kalit monospace, butun eniga, tanlash oson */
  .fx-apikeys__reveal { display: grid; gap: var(--fx-space-3); padding: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-fg-warning); border-radius: var(--fx-radius-surface); background: var(--fx-bg-warning-subtle); }
  .fx-apikeys__reveal[hidden] { display: none; }
  .fx-apikeys__reveal-title { margin: 0; font-weight: var(--fx-font-weight-semibold); }
  .fx-apikeys__reveal-title:focus { outline: none; }
  .fx-apikeys__warn { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); }
  .fx-apikeys__warn::before { content: "! "; color: var(--fx-fg-warning); font-weight: var(--fx-font-weight-semibold); }
  .fx-apikeys__secret { display: flex; align-items: center; gap: var(--fx-space-2); padding: var(--fx-space-2) var(--fx-space-2) var(--fx-space-2) var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); }
  .fx-apikeys__key { flex: 1; min-inline-size: 0; overflow-wrap: anywhere; font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); user-select: all; }
  .fx-apikeys__reveal-actions { display: flex; justify-content: flex-end; }
  .fx-apikeys__prefix { font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); color: var(--fx-text-secondary); white-space: nowrap; }
  .fx-apikeys__name { font-weight: var(--fx-font-weight-medium); }
  .fx-apikeys__muted { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); white-space: nowrap; font-variant-numeric: tabular-nums; }
  .fx-apikeys__row[data-state="expiring"] .fx-apikeys__expires { color: var(--fx-text-primary); }
  .fx-apikeys__row[data-state="expiring"] .fx-apikeys__expires::before { content: "! "; color: var(--fx-fg-warning); font-weight: var(--fx-font-weight-semibold); }
  .fx-apikeys__row[data-state="revoked"] > td { color: var(--fx-text-tertiary); }
  .fx-apikeys__row[data-state="revoked"] .fx-apikeys__prefix { text-decoration: line-through; }
  .fx-apikeys__row[data-state="new"] { animation: fx-fade-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-apikeys__row[data-state="new"] > td:first-child .fx-apikeys__name::after { content: " · yangi"; color: var(--fx-text-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); }
  .fx-apikeys__form { display: grid; gap: var(--fx-space-4); }
}

/* approval */
@layer fx.components {
  /* Tasdiqlash soʻrovi: agent amal qilishdan oldin ruxsat soʻraydi — savol, nima oʻzgaradi, Ruxsat / Rad etish / Har doim.
     Qaror (data-state="approved|denied") tugmalarni natija satriga almashtiradi (ikon + soʻz, role="status"). JS: behaviors/approval.js. */
  .fx-approval { display: grid; gap: var(--fx-space-3); padding: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-fg-warning); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); font-size: var(--fx-font-size-sm); }
  .fx-approval[data-state="approved"] { border-color: var(--fx-border-color-default); }
  .fx-approval[data-state="denied"] { border-color: var(--fx-border-color-default); }
  .fx-approval__head { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--fx-space-1) var(--fx-space-3); align-items: start; }
  .fx-approval__head > svg { grid-row: span 2; inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); fill: none; stroke: var(--fx-fg-warning); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
  .fx-approval__title { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-approval__text { margin: 0; color: var(--fx-text-secondary); line-height: 1.5; }
  .fx-approval__detail { margin: 0; padding: var(--fx-space-2) var(--fx-space-3); overflow-x: auto; border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); color: var(--fx-text-primary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }
  .fx-approval__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-approval[data-state="approved"] .fx-approval__actions, .fx-approval[data-state="denied"] .fx-approval__actions { display: none; }
  .fx-approval__result { display: flex; align-items: center; gap: var(--fx-space-2); margin: 0; font-weight: var(--fx-font-weight-medium); }
  .fx-approval__result:empty { display: none; }
  .fx-approval__result:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); border-radius: var(--fx-radius-badge); }
  .fx-approval__result::before { content: ""; flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); background: currentColor; mask: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M12 3a9 9 0 100 18 9 9 0 000-18zm-1.2 12.4l-3.3-3.3 1.1-1.1 2.2 2.2 4.6-4.6 1.1 1.1-5.7 5.7z'/%3E%3C/svg%3E"); }
  .fx-approval[data-state="approved"] .fx-approval__result { color: var(--fx-fg-success); }
  .fx-approval[data-state="denied"] .fx-approval__result { color: var(--fx-fg-error); }
  .fx-approval[data-state="denied"] .fx-approval__result::before { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M12 3a9 9 0 100 18 9 9 0 000-18zm-3.2 5.7l1.1-1.1L12 9.7l2.1-2.1 1.1 1.1-2.1 2.1 2.1 2.1-1.1 1.1-2.1-2.1-2.1 2.1-1.1-1.1 2.1-2.1z'/%3E%3C/svg%3E"); }
}

/* article */
@layer fx.components {
  /* Maqola sahifasi (4.178, naqsh): tepada ortga havola + toifa, sarlavha, lid, muallif qatori (avatar, ism, sana, oʻqish vaqti),
     muqova; ostida uch ustun — chapda ulashish tugmalari (yopishqoq), markazda matn (fx-prose), oʻngda mundarija (fx-toc,
     yopishqoq). Oxirida teglar, muallif kartasi va «Oʻxshash maqolalar» (fx-blog kartalari). Tepada ixtiyoriy oʻqish chizigʻi
     (fx-scroll-progress). Tor ekranda: mundarija matn tepasida yigʻiladigan <details>, ulashish — matn ostida qator. */
  .fx-article { display: grid; gap: var(--fx-space-8); }
  .fx-article__header { display: grid; justify-items: center; gap: var(--fx-space-4); max-inline-size: calc(var(--fx-dialog-width) * 1.7); margin-inline: auto; text-align: center; }
  .fx-article__kicker { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: var(--fx-space-2) var(--fx-space-4); margin: 0; font-size: var(--fx-font-size-sm); }
  .fx-article__back { color: var(--fx-text-secondary); text-decoration: none; }
  .fx-article__back::before { content: "← "; }
  .fx-article__back:hover { color: var(--fx-text-primary); }
  .fx-article__category { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); text-decoration: none; }
  .fx-article__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: clamp(var(--fx-font-size-display-sm), calc(var(--fx-font-size-display-sm) + 1.6vw), var(--fx-font-size-display-lg)); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.025em; text-wrap: balance; color: var(--fx-text-primary); }
  .fx-article__lead { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-lg); line-height: var(--fx-line-height-relaxed); text-wrap: pretty; }
  .fx-article__byline { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: var(--fx-space-3); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-article__byline > :is(time, span):not(.fx-avatar)::before { content: "·"; margin-inline-end: var(--fx-space-3); color: var(--fx-text-tertiary); }
  .fx-article__author { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); text-decoration: none; }
  .fx-article__cover { margin: 0; overflow: hidden; aspect-ratio: 21 / 9; border-radius: var(--fx-radius-surface); background: var(--fx-bg-muted); }
  .fx-article__cover > img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-article__cover[data-color="purple"] { background: var(--fx-bg-category-purple); }
  .fx-article__cover[data-color="blue"] { background: var(--fx-bg-category-blue); }
  .fx-article__cover[data-color="green"] { background: var(--fx-bg-category-green); }
  .fx-article__cover[data-color="yellow"] { background: var(--fx-bg-category-yellow); }
  .fx-article__caption { margin-block-start: calc(var(--fx-space-6) * -1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-align: center; }
  .fx-article__layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 68ch) minmax(0, 1fr); align-items: start; gap: var(--fx-space-8); }
  .fx-article__share { position: sticky; inset-block-start: calc(var(--fx-size-topbar) + var(--fx-space-6)); justify-self: end; display: grid; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-article__share-label { margin: 0 0 var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-article__share-btn {
    display: grid;
    place-items: center;
    inline-size: var(--fx-control-h-md);
    block-size: var(--fx-control-h-md);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    color: var(--fx-text-secondary);
    text-decoration: none;
    cursor: pointer;
    transition: color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-article__share-btn:hover { border-color: var(--fx-border-color-strong); color: var(--fx-text-primary); }
  .fx-article__share-btn:active { scale: var(--fx-motion-press); }
  .fx-article__share-btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-article__share-btn > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  /* havolani nusxalash (data-fx-copy): ✓ belgisi 2 soniya */
  .fx-article__share-btn > [data-fx-icon="check"], .fx-article__share-btn[data-state="copied"] > [data-fx-icon="copy"] { display: none; }
  .fx-article__share-btn[data-state="copied"] { border-color: var(--fx-fg-success); color: var(--fx-fg-success); }
  .fx-article__share-btn[data-state="copied"] > [data-fx-icon="check"] { display: block; }
  .fx-article__body { grid-column: 2; min-inline-size: 0; }
  .fx-article__body :is(h2, h3)[id] { scroll-margin-block-start: calc(var(--fx-size-topbar) + var(--fx-space-4)); }
  .fx-article__aside { position: sticky; inset-block-start: calc(var(--fx-size-topbar) + var(--fx-space-6)); min-inline-size: 0; }
  .fx-article__aside > summary { display: none; }
  .fx-article__tags { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-article__tags a { text-decoration: none; }
  .fx-article__footer { display: grid; gap: var(--fx-space-6); max-inline-size: 68ch; font-size: var(--fx-font-size-md); inline-size: 100%; margin-inline: auto; padding-block-start: var(--fx-space-6); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-article__bio { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--fx-space-1) var(--fx-space-4); padding: var(--fx-space-5); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); }
  .fx-article__bio > .fx-avatar { grid-row: span 3; }
  .fx-article__bio-name { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-article__bio-role { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); }
  .fx-article__bio-text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-article__related { display: grid; gap: var(--fx-space-6); padding-block-start: var(--fx-space-8); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-article__related-title { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); }
  @media (max-width: 64em) {
    .fx-article__layout { grid-template-columns: minmax(0, 1fr); max-inline-size: 68ch; margin-inline: auto; gap: var(--fx-space-6); }
    .fx-article__body { grid-column: auto; }
    .fx-article__aside { position: static; order: -1; padding: var(--fx-space-3) var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); }
    .fx-article__aside > summary { display: list-item; color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); cursor: pointer; }
    .fx-article__aside > summary:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-space-1); border-radius: var(--fx-radius-badge); }
    .fx-article__aside[open] > summary { margin-block-end: var(--fx-space-3); }
    .fx-article__aside .fx-toc__title { display: none; }
    .fx-article__share { position: static; order: 2; justify-self: start; display: flex; flex-wrap: wrap; align-items: center; }
    .fx-article__share-label { margin: 0 var(--fx-space-2) 0 0; }
  }
  @media print {
    .fx-article__share, .fx-article__aside, .fx-article__related { display: none; }
    .fx-article__layout { display: block; }
  }
}

/* assistant */
@layer fx.components {
  /* AI yordamchi widget’i («Guli saytda»): oʻng pastda dumaloq tugma (personaj sloti) → suhbat oynasi. Har sayt — sozlama (nom, rang,
     endpoint, til). Holatlar: idle · open · sending · error · handoff (menejerga — Telegram/telefon). Telefonda (< 640 px) — toʻliq ekran.
     Personaj: tinch holatda yengil «nafas», sahifada bir marta qoʻl silkitadi (data-mascot="wave"); harakat kamaytirilsa — yoʻq. */
  .fx-assistant { --_c: var(--fx-bg-brand-solid); --_edge: var(--fx-space-5); position: fixed; inset: auto max(var(--_edge), env(safe-area-inset-right, 0px)) max(var(--_edge), env(safe-area-inset-bottom, 0px)) auto; z-index: 50; display: grid; justify-items: end; gap: var(--fx-space-3); font-size: var(--fx-font-size-sm); color: var(--fx-text-primary); }
  /* och doira (data-color="light") — qora konturli personaj ikkala rejimda ham aniq koʻrinsin */
  .fx-assistant[data-color="light"] { --_c: var(--fx-bg-static-light); }
  .fx-assistant[data-color="light"] :is(.fx-assistant__launcher, .fx-assistant__avatar) { color: var(--fx-text-on-static-light); }
  .fx-assistant > .fx-assistant__mascot { display: none; } /* manba — JS nusxa oladi */
  .fx-assistant__launcher {
    position: relative; display: grid; place-items: center; inline-size: calc(var(--fx-space-12) + var(--fx-space-2)); block-size: calc(var(--fx-space-12) + var(--fx-space-2)); padding: 0; border: 0; border-radius: var(--fx-radius-circle);
    background: var(--_c); color: var(--_ink, var(--fx-text-on-category)); box-shadow: var(--fx-shadow-lg); cursor: pointer;
    transition: scale var(--fx-motion-instant) var(--fx-ease-standard), translate var(--fx-motion-base) var(--fx-ease-spring);
  }
  .fx-assistant__launcher:hover { translate: 0 calc(var(--fx-space-1) * -0.5); }
  .fx-assistant__launcher:active { scale: var(--fx-motion-press); }
  .fx-assistant__launcher:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-assistant__launcher > .fx-assistant__face { position: absolute; inset: var(--fx-space-1); inline-size: calc(100% - var(--fx-space-1) * 2); block-size: calc(100% - var(--fx-space-1) * 2); border-radius: var(--fx-radius-circle); object-fit: cover; }
  .fx-assistant__launcher > .fx-assistant__face:not(img, svg, canvas) { display: grid; place-items: center; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-assistant__icon { display: none; }
  .fx-assistant[data-state="open"] .fx-assistant__launcher > .fx-assistant__face, .fx-assistant[data-state="sending"] .fx-assistant__launcher > .fx-assistant__face { opacity: 0; }
  .fx-assistant:is([data-state="open"], [data-state="sending"]) .fx-assistant__icon { display: grid; }
  .fx-assistant__icon > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-assistant__glyph > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-assistant__badge { position: absolute; inset-block-start: 0; inset-inline-end: 0; min-inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); border-radius: var(--fx-radius-circle); background: var(--fx-bg-error-solid); color: var(--fx-text-on-error); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-size-icon-md); outline: var(--fx-border-width-focus) solid var(--fx-bg-page); }
  /* personaj harakati: tinch «nafas» (loop knob), bir martalik qoʻl silkitish; tab yashirinsa — pauza */
  .fx-assistant[data-mascot="idle"] .fx-assistant__launcher > .fx-assistant__face:not(svg, .fx-orb) { animation: fx-assistant-breath calc(var(--fx-duration-pulse) * 2.5) var(--fx-ease-standard) infinite; }
  .fx-assistant[data-mascot="wave"] .fx-assistant__launcher > .fx-assistant__face:not(svg, .fx-orb) { transform-origin: 70% 90%; animation: fx-assistant-wave calc(var(--fx-motion-slow) * 4) var(--fx-ease-standard) 1; }
  .fx-assistant[data-paused] .fx-assistant__launcher > .fx-assistant__face { animation-play-state: paused; }
  /* ichki SVG animatsiyalari ham: tab yashirin yoki oyna ochiq (tugmadagi personaj koʻrinmaydi) — pauza, CPU tejaladi */
  .fx-assistant:is([data-paused], [data-state="open"], [data-state="sending"]) .fx-assistant__launcher > .fx-assistant__face :is(*, *::before, *::after) { animation-play-state: paused !important; }
  .fx-assistant[data-paused] .fx-assistant__avatar :is(*, *::before, *::after) { animation-play-state: paused !important; }
  .fx-assistant[data-mascot="thinking"] .fx-assistant__launcher > .fx-assistant__face:not(svg, .fx-orb) { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-assistant[data-mascot="talking"] .fx-assistant__launcher > .fx-assistant__face:not(svg, .fx-orb) { animation: fx-assistant-breath var(--fx-motion-slow) var(--fx-ease-spring) 2; }
  /* jonli personaj (inline SVG) oʻzi harakatlanadi — tashqi tebranish ikkilanmasin; holatni .salom/.oylayapti/.gapiryapti/.uzatyapti sinflari beradi */
  .fx-assistant:is([data-mascot="idle"], [data-mascot="wave"], [data-mascot="thinking"], [data-mascot="talking"], [data-mascot="handoff"]) .fx-assistant__launcher > svg.fx-assistant__face { animation: none; }
  /* abstrakt shar (data-face="orb") — tugmani toʻliq egallaydi, rangi saytning brend rangi; harakatni sharning oʻzi beradi */
  .fx-assistant .fx-orb { --_o: var(--_c); }
  .fx-assistant__launcher > .fx-orb.fx-assistant__face { inset: 0; inline-size: 100%; block-size: 100%; }
  .fx-assistant__avatar > .fx-orb { inline-size: 100%; }
  /* holat nuqtasi: xato — qizil, menejerga oʻtkazildi — ogohlantirish */
  .fx-assistant[data-state="error"] .fx-assistant__who small::before { background: var(--fx-fg-error); }
  .fx-assistant[data-state="handoff"] .fx-assistant__who small::before { background: var(--fx-fg-warning); }
  @keyframes fx-assistant-breath { 50% { scale: 1.04; } }
  @keyframes fx-assistant-wave { 15%, 45% { rotate: -12deg; } 30%, 60% { rotate: 10deg; } 75% { rotate: 0deg; } }
  @media (prefers-reduced-motion: reduce) { .fx-assistant__launcher > .fx-assistant__face { animation: none !important; } }
  /* salom pufakchasi */
  .fx-assistant__greet { display: flex; align-items: center; gap: var(--fx-space-2); max-inline-size: calc(var(--fx-space-12) * 6); padding: var(--fx-space-3) var(--fx-space-2) var(--fx-space-3) var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); border-end-end-radius: var(--fx-radius-badge); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); cursor: pointer; animation: fx-stagger-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-assistant__x { display: grid; place-items: center; flex: none; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: none; color: var(--fx-text-tertiary); cursor: pointer; }
  .fx-assistant__x:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-assistant__x > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  /* panel */
  .fx-assistant__panel { display: grid; grid-template-rows: auto minmax(0, 1fr) auto auto auto; inline-size: min(calc(100vw - var(--_edge) * 2), calc(var(--fx-space-12) * 8)); block-size: min(calc(100dvh - var(--fx-space-12) * 3), calc(var(--fx-space-12) * 12)); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); overflow: hidden; transform-origin: bottom right; animation: fx-assistant-in var(--fx-motion-base) var(--fx-ease-enter); }
  @keyframes fx-assistant-in { from { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 var(--fx-motion-shift-md); } }
  .fx-assistant__head { display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-3) var(--fx-space-3) var(--fx-space-4); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-assistant__avatar { display: grid; place-items: center; flex: none; inline-size: var(--fx-size-avatar-md); block-size: var(--fx-size-avatar-md); border-radius: var(--fx-radius-circle); background: var(--_c); color: var(--_ink, var(--fx-text-on-category)); overflow: hidden; font-weight: var(--fx-font-weight-semibold); }
  .fx-assistant__avatar > :is(img, svg, canvas) { inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-assistant__who { display: grid; flex: 1; min-inline-size: 0; }
  .fx-assistant__who small { display: inline-flex; align-items: center; gap: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-assistant__who small::before { content: ""; inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border-radius: var(--fx-radius-circle); background: var(--fx-fg-success); }
  .fx-assistant__log { display: flex; flex-direction: column; gap: var(--fx-space-2); padding: var(--fx-space-4); overflow-y: auto; overscroll-behavior: contain; }
  .fx-assistant__msg { max-inline-size: 85%; padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-overlay); line-height: 1.5; overflow-wrap: anywhere; white-space: pre-wrap; animation: fx-stagger-in var(--fx-motion-fast) var(--fx-ease-enter); }
  .fx-assistant__msg[data-who="bot"] { align-self: start; border-end-start-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); }
  .fx-assistant__msg[data-who="user"] { align-self: end; border-end-end-radius: var(--fx-radius-badge); background: var(--fx-bg-brand-subtle); }
  .fx-assistant__handoff, .fx-assistant__error { display: grid; gap: var(--fx-space-2); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); }
  .fx-assistant__handoff > p { margin: 0; }
  .fx-assistant__error { color: var(--fx-fg-error); justify-items: start; }
  .fx-assistant__chips { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); padding: 0 var(--fx-space-4); }
  .fx-assistant__chips:not(:empty) { padding-block-end: var(--fx-space-3); }
  .fx-assistant__form { display: flex; align-items: end; gap: var(--fx-space-2); margin: 0; padding: var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-assistant__form textarea { flex: 1; min-block-size: var(--fx-control-h-md); max-block-size: calc(var(--fx-control-h-md) * 3); padding: var(--fx-space-2) var(--fx-space-3); box-sizing: border-box; border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-control); background: var(--fx-bg-field); color: inherit; font: inherit; resize: none; }
  .fx-assistant__form textarea:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: 0; }
  .fx-assistant__form button { display: grid; place-items: center; inline-size: var(--fx-control-h-md); block-size: var(--fx-control-h-md); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); cursor: pointer; }
  .fx-assistant__form button > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-assistant[data-state="sending"] .fx-assistant__form button { opacity: 0.5; pointer-events: none; }
  .fx-assistant__note { margin: 0; padding: 0 var(--fx-space-4) var(--fx-space-3); color: var(--fx-text-tertiary); font-size: calc(var(--fx-font-size-xs) * 0.92); text-align: center; }
  /* telefonda: toʻliq ekran varaq */
  @media (max-width: 640px) {
    .fx-assistant__panel { position: fixed; inset: 0; inline-size: auto; block-size: auto; border: 0; border-radius: 0; padding-block-end: env(safe-area-inset-bottom, 0px); }
    .fx-assistant:is([data-state="open"], [data-state="sending"]) .fx-assistant__launcher { display: none; }
  }
}

/* attachment */
@layer fx.components {
  /* Biriktirma: fayl/rasm kartochkasi — belgi yoki rasm, nom, hajm, olib tashlash ×, yuklanish chizigʻi. Composer ichida (chip) va xabar ichida (card).
     Holatlar: uploading · done · error (xato — soʻz bilan). JS: behaviors/attachment.js (× — olib tashlaydi, fokusni qoldiradi). */
  .fx-attachment { position: relative; display: inline-grid; grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas: "thumb name remove" "thumb meta remove"; align-items: center; column-gap: var(--fx-space-2); max-inline-size: calc(var(--fx-space-12) * 5); padding: var(--fx-space-1) var(--fx-space-1) var(--fx-space-1) var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); font-size: var(--fx-font-size-sm); overflow: hidden; }
  .fx-attachment__thumb { grid-area: thumb; display: grid; place-items: center; inline-size: var(--fx-control-h-md); block-size: var(--fx-control-h-md); overflow: hidden; border-radius: calc(var(--fx-radius-control) - var(--fx-space-1) / 2); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); object-fit: cover; }
  .fx-attachment__name { grid-area: name; overflow: hidden; color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); text-overflow: ellipsis; white-space: nowrap; }
  .fx-attachment__meta { grid-area: meta; overflow: hidden; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; text-overflow: ellipsis; white-space: nowrap; }
  .fx-attachment__remove { grid-area: remove; display: grid; place-items: center; inline-size: var(--fx-size-min-target); block-size: var(--fx-size-min-target); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: transparent; color: var(--fx-text-tertiary); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-attachment__remove:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-attachment__remove:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-attachment__remove > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
  .fx-attachment__progress { position: absolute; inset-inline: 0; inset-block-end: 0; display: none; inline-size: 100%; block-size: calc(var(--fx-space-1) / 2); appearance: none; border: 0; background: var(--fx-bg-muted); }
  .fx-attachment__progress::-webkit-progress-bar { background: var(--fx-bg-muted); }
  .fx-attachment__progress::-webkit-progress-value { background: var(--fx-bg-brand-solid); transition: inline-size var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-attachment__progress::-moz-progress-bar { background: var(--fx-bg-brand-solid); }
  .fx-attachment[data-state="uploading"] .fx-attachment__progress { display: block; }
  .fx-attachment[data-state="error"] { border-color: var(--fx-border-color-error); background: var(--fx-bg-error-subtle); }
  .fx-attachment[data-state="error"] .fx-attachment__thumb { background: var(--fx-bg-error-subtle); color: var(--fx-fg-error); }
  .fx-attachment[data-state="error"] .fx-attachment__meta { color: var(--fx-text-error); }
  .fx-attachment[data-state="error"] .fx-attachment__meta::before { content: "! "; font-weight: var(--fx-font-weight-semibold); }
  /* karta varianti (xabar ichida): katta, rasm ustun */
  .fx-attachment[data-variant="card"] { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "thumb thumb" "name remove" "meta remove"; row-gap: 0; padding: var(--fx-space-2); }
  .fx-attachment[data-variant="card"] .fx-attachment__thumb { inline-size: 100%; block-size: auto; aspect-ratio: 16 / 9; margin-block-end: var(--fx-space-2); }
}

/* audioplayer */
@layer fx.components {
  /* Audio pleyer (#120): ixcham — ijro tugmasi, sarlavha, toʻlqinsimon progress (bosib yoki ← → bilan suriladi), vaqt, tezlik (1× · 1,5× · 2×).
     Chiziqlar balandligi data-peaks (0–100 vergul bilan) yoki sarlavhadan hosil boʻladi; oʻtilgan qism toʻq rangda va balandroq. */
  .fx-audioplayer { --fx-audio-bars: 48; display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); color: var(--fx-text-primary); }
  .fx-audioplayer__play {
    flex: none; display: grid; place-items: center; inline-size: var(--fx-size-control-lg); block-size: var(--fx-size-control-lg); padding: 0;
    border: 0; border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); cursor: pointer;
    transition: background var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-audioplayer__play:hover { background: var(--fx-bg-brand-solid-hover); }
  .fx-audioplayer__play:active { scale: var(--fx-motion-press); }
  .fx-audioplayer__play:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-audioplayer__play::before { content: ""; inline-size: 45%; block-size: 45%; background: currentColor; mask: var(--_ic) center / contain no-repeat; }
  .fx-audioplayer__play[data-icon="play"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 4.5v15l12-7.5z' fill='black'/%3E%3C/svg%3E"); }
  .fx-audioplayer__play[data-icon="pause"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.5 4.5h4v15h-4zM13.5 4.5h4v15h-4z' fill='black'/%3E%3C/svg%3E"); }
  .fx-audioplayer__body { display: grid; gap: var(--fx-space-1); flex: 1; min-inline-size: 0; }
  .fx-audioplayer__meta { display: flex; align-items: baseline; gap: var(--fx-space-2); min-inline-size: 0; }
  .fx-audioplayer__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-audioplayer__sub { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-audioplayer__wave { display: flex; align-items: center; gap: calc(var(--fx-space-1) / 2); block-size: var(--fx-size-control-md); cursor: pointer; touch-action: none; border-radius: var(--fx-radius-nav); }
  .fx-audioplayer__wave:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-audioplayer__bar { flex: 1; min-inline-size: calc(var(--fx-space-1) / 2); block-size: calc(var(--_h) * 1%); border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); transition: background var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-audioplayer__bar[data-played] { background: var(--fx-bg-brand-solid); }
  .fx-audioplayer__time { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-audioplayer__speed {
    flex: none; min-inline-size: var(--fx-size-control-md); block-size: var(--fx-size-control-sm); padding-inline: var(--fx-space-2);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-secondary);
    font: inherit; font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; cursor: pointer;
  }
  .fx-audioplayer__speed:hover { background: var(--fx-bg-muted); }
  .fx-audioplayer__speed:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-audioplayer[data-size="sm"] { padding: var(--fx-space-2); gap: var(--fx-space-2); }
  .fx-audioplayer[data-size="sm"] .fx-audioplayer__play { inline-size: var(--fx-size-control-md); block-size: var(--fx-size-control-md); }
  .fx-audioplayer[data-size="sm"] .fx-audioplayer__wave { block-size: var(--fx-size-control-sm); }
}

/* auditlog */
@layer fx.components {
  /* Audit jurnali (4.191, naqsh): xavfsizlik va boshqaruv uchun «kim · nima · qachon · qayerdan» jadvali. Tepada sarlavha,
     saqlash muddati va «Eksport (CSV)»; filtr qatori (qidiruv, foydalanuvchi, amal turi, davr); jadval (fx-table asosida) kunlar
     boʻyicha guruhlangan (.fx-audit__day qatori). Har qator: vaqt, aktor (fx-persona yoki «Tizim»), amal (fe’l + obyekt),
     IP va joy, muhimlik (data-severity: info · warning · critical — chap chiziq + soʻz). Tafsilot — <details> ichida
     oʻzgarish farqi (.fx-auditlog__diff: oldin → keyin). Pastda «Koʻproq yuklash». Yozuvlar oʻzgarmaydi — tahrirlash tugmasi yoʻq. */
  .fx-auditlog { display: grid; gap: var(--fx-space-5); }
  .fx-auditlog__head { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: var(--fx-space-3) var(--fx-space-6); }
  .fx-auditlog__title { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); }
  .fx-auditlog__text { margin: var(--fx-space-1) 0 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-auditlog__filters { display: flex; flex-wrap: wrap; align-items: end; gap: var(--fx-space-3); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); }
  .fx-auditlog__filters > .fx-search { flex: 1 1 calc(var(--fx-space-12) * 5); }
  .fx-auditlog__filters > .fx-field { flex: 0 1 calc(var(--fx-space-12) * 3.5); }
  .fx-auditlog__table td { vertical-align: top; }
  .fx-auditlog__day > th { padding-block: var(--fx-space-3) var(--fx-space-2); background: var(--fx-bg-page); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); text-align: start; text-transform: uppercase; letter-spacing: 0.04em; }
  .fx-auditlog__time { color: var(--fx-text-secondary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-auditlog__row > td:first-child { border-inline-start: var(--fx-border-width-focus) solid transparent; }
  .fx-auditlog__row[data-severity="warning"] > td:first-child { border-inline-start-color: var(--fx-fg-warning); }
  .fx-auditlog__row[data-severity="critical"] > td:first-child { border-inline-start-color: var(--fx-fg-error); }
  .fx-auditlog__row[data-severity="critical"] { background: color-mix(in oklab, var(--fx-bg-error-subtle) 45%, transparent); }
  .fx-auditlog__system { display: inline-flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-auditlog__system::before { content: "⚙"; display: grid; place-items: center; inline-size: var(--fx-size-avatar-sm); block-size: var(--fx-size-avatar-sm); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  .fx-auditlog__action { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: calc(var(--fx-space-12) * 5); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); }
  .fx-auditlog__verb { font-weight: var(--fx-font-weight-semibold); }
  .fx-auditlog__object { color: var(--fx-text-brand); text-decoration: none; }
  .fx-auditlog__object:hover { text-decoration: underline; }
  .fx-auditlog__object:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-auditlog__severity { display: inline-flex; align-items: center; gap: var(--fx-space-1); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); white-space: nowrap; }
  .fx-auditlog__row[data-severity="warning"] .fx-auditlog__severity { color: var(--fx-text-primary); }
  .fx-auditlog__row[data-severity="warning"] .fx-auditlog__severity::before { content: "▲"; color: var(--fx-fg-warning); }
  .fx-auditlog__row[data-severity="critical"] .fx-auditlog__severity { color: var(--fx-text-error); }
  .fx-auditlog__row[data-severity="critical"] .fx-auditlog__severity::before { content: "■"; color: var(--fx-fg-error); }
  .fx-auditlog__where { display: grid; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); white-space: nowrap; }
  .fx-auditlog__where > code { color: var(--fx-text-primary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); }
  .fx-auditlog__details > summary { inline-size: fit-content; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); cursor: pointer; }
  .fx-auditlog__details > summary:hover { color: var(--fx-text-primary); }
  .fx-auditlog__details > summary:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-auditlog__diff { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--fx-space-1) var(--fx-space-3); margin: var(--fx-space-2) 0 0; padding: var(--fx-space-3); border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); font-size: var(--fx-font-size-xs); }
  .fx-auditlog__diff dt { color: var(--fx-text-secondary); }
  .fx-auditlog__diff dd { display: flex; flex-wrap: wrap; gap: var(--fx-space-1) var(--fx-space-2); margin: 0; font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); }
  .fx-auditlog__diff del { padding: 0 var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-error-subtle); color: var(--fx-text-primary); }
  .fx-auditlog__diff ins { padding: 0 var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-success-subtle); color: var(--fx-text-primary); text-decoration: none; }
  .fx-auditlog__diff del::before { content: "− "; }
  .fx-auditlog__diff ins::before { content: "+ "; }
  .fx-auditlog__more { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  @media (max-width: 48em) {
    .fx-auditlog__table .fx-auditlog__col-where { display: none; }
  }
}

/* auth */
@layer fx.components {
  /* Kirish / roʻyxatdan oʻtish sahifasi qolipi: sahifa markazida karta (default) yoki chapda forma + oʻngda brend paneli (split).
     "Havola yuborildi" holati (magic link) — .fx-auth__view[data-view="sent"]. Xulq — foxui.js (data-fx-auth). */
  .fx-auth { display: grid; place-items: center; min-block-size: 100dvh; padding: var(--fx-space-6); background: var(--fx-bg-page); color: var(--fx-text-primary); }
  .fx-auth__card { inline-size: min(100%, var(--fx-dialog-width)); display: grid; gap: var(--fx-space-6); padding: var(--fx-space-8); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-sm); }
  .fx-auth__brand { display: flex; align-items: center; gap: var(--fx-space-2); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); text-decoration: none; }
  .fx-auth__brand > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); color: var(--fx-text-brand); }
  .fx-auth__head { display: grid; gap: var(--fx-space-2); }
  .fx-auth__title { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); }
  .fx-auth__text { margin: 0; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-auth__form { display: grid; gap: var(--fx-space-4); }
  .fx-auth__social { display: grid; gap: var(--fx-space-2); }
  .fx-auth__or { display: flex; align-items: center; gap: var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-auth__or::before, .fx-auth__or::after { content: ""; flex: 1; block-size: var(--fx-border-width-default); background: var(--fx-border-color-default); }
  .fx-auth__foot { margin: 0; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); text-align: center; }
  .fx-auth__foot a { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-medium); }
  .fx-auth__legal { margin: 0; font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); text-align: center; }
  .fx-auth__view { display: grid; gap: var(--fx-space-6); }
  .fx-auth__view[hidden] { display: none; }
  /* «Havola yuborildi»: katta belgi, manzil, qayta yuborish */
  .fx-auth__view[data-view="sent"] { justify-items: center; text-align: center; }
  .fx-auth__art { display: grid; place-items: center; inline-size: calc(var(--fx-space-12) * 1.25); block-size: calc(var(--fx-space-12) * 1.25); border-radius: var(--fx-radius-surface); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-auth__art > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-auth__email { font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); overflow-wrap: anywhere; }
  /* Split: forma chapda, brend paneli oʻngda; tor ekranda panel yashirinadi */
  .fx-auth[data-variant="split"] { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); place-items: stretch; padding: 0; }
  .fx-auth[data-variant="split"] .fx-auth__main { display: grid; place-items: center; padding: var(--fx-space-6); }
  .fx-auth[data-variant="split"] .fx-auth__card { border: 0; background: transparent; box-shadow: none; padding: 0; }
  .fx-auth__aside { display: none; align-content: space-between; gap: var(--fx-space-8); padding: var(--fx-space-10); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-auth[data-variant="split"] .fx-auth__aside { display: grid; }
  .fx-auth__quote { margin: 0; font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-medium); line-height: 1.3; }
  .fx-auth__cite { margin: var(--fx-space-4) 0 0; font-size: var(--fx-font-size-sm); opacity: 0.85; }
  @media (max-width: 56em) { .fx-auth[data-variant="split"] { grid-template-columns: minmax(0, 1fr); } .fx-auth[data-variant="split"] .fx-auth__aside { display: none; } }
  @media (max-width: 30em) { .fx-auth__card { padding: var(--fx-space-5); } }

  /* ---- Bosqichlar (4.109): tasdiqlash kodi, parolni tiklash, yangi parol, tayyor. Joriy bosqich — ildizdagi data-step
     (xulq qoʻyadi; server ham shu bilan istalgan bosqichni ochadi). Boshqa koʻrinishlar yashiriladi. ---- */
  .fx-auth[data-step="form"] .fx-auth__view:not([data-view="form"]),
  .fx-auth[data-step="sent"] .fx-auth__view:not([data-view="sent"]),
  .fx-auth[data-step="verify"] .fx-auth__view:not([data-view="verify"]),
  .fx-auth[data-step="forgot"] .fx-auth__view:not([data-view="forgot"]),
  .fx-auth[data-step="reset"] .fx-auth__view:not([data-view="reset"]),
  .fx-auth[data-step="done"] .fx-auth__view:not([data-view="done"]) { display: none; }
  .fx-auth__view:is([data-view="verify"], [data-view="done"]) { justify-items: center; text-align: center; }
  .fx-auth__view[data-view="verify"] .fx-auth__form { justify-items: center; }
  .fx-auth__title:focus { outline: none; }
  /* Yorliq qatori: «Parol» chapda, «Parolni unutdingizmi?» oʻngda */
  .fx-auth__row { display: flex; align-items: baseline; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-auth__link { padding: 0; border: 0; background: none; color: var(--fx-text-brand); font: inherit; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); text-decoration: underline; text-underline-offset: var(--fx-space-1); cursor: pointer; }
  .fx-auth__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-auth__back { display: inline-flex; align-items: center; gap: var(--fx-space-1); justify-self: start; }
  .fx-auth__back::before { content: "←"; }
  /* Muvaffaqiyat belgisi: yashil fon + ✓ shakli (rang yolgʻiz emas) */
  .fx-auth__art[data-tone="success"] { background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); }
  .fx-auth__rules { display: grid; gap: var(--fx-space-1); margin: 0; padding: 0; list-style: none; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-auth__rules > li::before { content: "○ "; }
  .fx-auth__rules > li[data-ok] { color: var(--fx-fg-success); }
  .fx-auth__rules > li[data-ok]::before { content: "✓ "; }
}

/* avatar */
@layer fx.components {
  /* Kvadrat avatar + holat nuqtasi (FoxOS (avval Fox Workspace) hilos namunasidan, Ustoz tasdigʻi 16.10; WDS «Komponentlar» 08.10 doira qoidasi bekor). */
  .fx-avatar {
    --_s: var(--fx-size-avatar-md);
    --fx-avatar-ring: var(--fx-bg-surface); /* holat nuqtasi halqasi — avatar turgan yuza rangi (hook) */
    position: relative;
    flex: none;
    display: inline-grid;
    place-items: center;
    inline-size: var(--_s);
    block-size: var(--_s);
    border-radius: calc(var(--_s) * var(--fx-radius-avatar-ratio));
    background: var(--fx-bg-category-blue);
    color: var(--fx-text-on-category);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-semibold);
    line-height: 1;
    user-select: none;
  }
  .fx-avatar[data-size="sm"] { --_s: var(--fx-size-avatar-sm); font-size: calc(var(--fx-font-size-xs) * 0.75); }
  .fx-avatar[data-size="lg"] { --_s: var(--fx-size-avatar-lg); font-size: var(--fx-font-size-lg); }
  .fx-avatar > img { inline-size: 100%; block-size: 100%; object-fit: cover; border-radius: inherit; }
  .fx-avatar[data-color="yellow"] { background: var(--fx-bg-category-yellow); }
  .fx-avatar[data-color="pink"] { background: var(--fx-bg-category-pink); }
  .fx-avatar[data-color="blue"] { background: var(--fx-bg-category-blue); }
  .fx-avatar[data-color="coral"] { background: var(--fx-bg-category-coral); }
  .fx-avatar[data-color="green"] { background: var(--fx-bg-category-green); }
  .fx-avatar[data-color="purple"] { background: var(--fx-bg-category-purple); }
  /* Holat: active — puls, waiting — sariq, stopped — qizil, idle — xira */
  .fx-avatar[data-status]::after {
    content: "";
    position: absolute;
    inset-inline-end: calc(var(--fx-border-width-focus) * -1);
    inset-block-end: calc(var(--fx-border-width-focus) * -1);
    inline-size: var(--fx-size-status-dot);
    block-size: var(--fx-size-status-dot);
    box-sizing: border-box;
    border-radius: var(--fx-radius-circle);
    border: var(--fx-border-width-focus) solid var(--fx-avatar-ring);
    background: var(--fx-border-color-strong);
  }
  .fx-avatar[data-size="sm"][data-status]::after { inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); }
  .fx-avatar[data-status="active"]::after { background: var(--fx-fg-success); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-avatar[data-status="waiting"]::after { background: var(--fx-fg-warning); }
  .fx-avatar[data-status="stopped"]::after { background: var(--fx-fg-error); }
  @media (prefers-reduced-motion: reduce) { .fx-avatar[data-status]::after { animation: none; } }
  /* Guruh: bir-birining ustiga, kesim — avatar turgan yuza rangida; oxirida «+N» */
  .fx-avatar-group { display: inline-flex; align-items: center; }
  .fx-avatar-group > .fx-avatar { outline: var(--fx-border-width-focus) solid var(--fx-avatar-ring); }
  .fx-avatar-group > .fx-avatar + .fx-avatar { margin-inline-start: calc(var(--fx-space-2) * -1); }
  .fx-avatar[data-more] { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  /* ---- Kengaytma (2.45–2.53): xs/xl/2xl, guruh yoyilishi/toʻr/chegara, tugma-“+N”, surat zanjiri, belgi, tahrirlash ---- */
  .fx-avatar[data-size="xs"] { --_s: var(--fx-size-icon-sm); font-size: calc(var(--fx-font-size-xs) * 0.5); }
  .fx-avatar[data-size="xs"][data-status]::after { inline-size: calc(var(--fx-size-status-dot-sm) * 0.6); block-size: calc(var(--fx-size-status-dot-sm) * 0.6); border-width: calc(var(--fx-border-width-focus) / 2); }
  .fx-avatar[data-size="xl"] { --_s: calc(var(--fx-size-avatar-lg) * 1.5); font-size: var(--fx-font-size-xl); }
  .fx-avatar[data-size="2xl"] { --_s: calc(var(--fx-size-avatar-lg) * 2); font-size: var(--fx-font-size-display-sm); }
  :is(.fx-avatar[data-size="xl"], .fx-avatar[data-size="2xl"])[data-status]::after { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  /* Guruh: transition + hover’da yoyilish (data-spread), toʻr (data-layout="grid"), eng koʻp koʻrinadigan soni (data-max) */
  .fx-avatar-group > .fx-avatar + .fx-avatar { transition: margin var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-avatar-group[data-spread]:is(:hover, :focus-within) > .fx-avatar + .fx-avatar { margin-inline-start: var(--fx-space-1); }
  .fx-avatar-group[data-layout="grid"] { flex-wrap: wrap; gap: var(--fx-space-2); }
  .fx-avatar-group[data-layout="grid"] > .fx-avatar + .fx-avatar { margin-inline-start: 0; }
  .fx-avatar-group[data-layout="grid"] > .fx-avatar { outline: 0; }
  .fx-avatar-group[data-max="3"] > .fx-avatar:nth-child(n + 4):not([data-more]),
  .fx-avatar-group[data-max="4"] > .fx-avatar:nth-child(n + 5):not([data-more]),
  .fx-avatar-group[data-max="5"] > .fx-avatar:nth-child(n + 6):not([data-more]),
  .fx-avatar-group[data-max="6"] > .fx-avatar:nth-child(n + 7):not([data-more]) { display: none; }
  /* “+N” bosiladigan boʻlsa (popover ochadi): haqiqiy <button> */
  button.fx-avatar[data-more] { padding: 0; border: 0; font-family: inherit; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  button.fx-avatar[data-more]:hover { background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  button.fx-avatar[data-more]:active { scale: var(--fx-motion-press); }
  button.fx-avatar[data-more]:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* Surat zanjiri: img → initsial → ikon. Initsial/ikon (.fx-avatar__fallback) suratning orqasida; surat yuklanmasa (alt="") faqat u koʻrinadi */
  .fx-avatar:has(> .fx-avatar__fallback) > :is(img, .fx-avatar__fallback) { grid-area: 1 / 1; }
  .fx-avatar__fallback { display: grid; place-items: center; inline-size: 100%; block-size: 100%; }
  .fx-avatar__fallback > svg { inline-size: 55%; block-size: 55%; }
  /* Avatar ustidagi belgi (tasdiqlangan ✓, tashkilot logotipi): yuqori-oʻng burchak */
  .fx-avatar__badge { position: absolute; inset-block-start: calc(var(--fx-border-width-focus) * -1); inset-inline-end: calc(var(--fx-border-width-focus) * -1); display: grid; place-items: center; box-sizing: border-box; inline-size: max(var(--fx-size-status-dot), 38%); block-size: max(var(--fx-size-status-dot), 38%); border: var(--fx-border-width-focus) solid var(--fx-avatar-ring); border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); overflow: hidden; }
  .fx-avatar__badge > :is(svg, img) { inline-size: 70%; block-size: 70%; object-fit: cover; }
  /* Tahrirlanadigan: ustiga borganda “Rasmni oʻzgartirish” qoplamasi (tugma yoki label ichida) */
  .fx-avatar[data-editable] { cursor: pointer; overflow: hidden; }
  .fx-avatar__edit { position: absolute; inset: 0; display: grid; place-items: center; border-radius: inherit; background: color-mix(in oklab, var(--fx-text-primary) 55%, transparent); color: var(--fx-bg-surface); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); opacity: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-avatar__edit > svg { inline-size: 40%; block-size: 40%; }
  .fx-avatar[data-editable]:is(:hover, :focus-visible, :focus-within) > .fx-avatar__edit { opacity: 1; }
  .fx-avatar[data-editable]:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  @media (hover: none) { .fx-avatar[data-editable] > .fx-avatar__edit { opacity: 1; background: color-mix(in oklab, var(--fx-text-primary) 35%, transparent); } }
  /* Windows High Contrast (2.152) */
  @media (forced-colors: active) {
    .fx-avatar { border: var(--fx-border-width-default) solid ButtonText; forced-color-adjust: none; background: Canvas; color: CanvasText; }
    .fx-avatar[data-status]::after { background: Highlight; border-color: Canvas; }
    .fx-avatar__badge { background: Highlight; color: HighlightText; }
  }
}

/* back-link */
@layer fx.components {
  /* «Orqaga» havolasi (#89): chevron + qisqa matn, ota sahifaga */
  .fx-back-link { display: inline-flex; align-items: center; gap: var(--fx-space-1); border-radius: var(--fx-radius-badge); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); text-decoration: none; transition: color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-back-link::before { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M10 3 5 8l5 5' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: translate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-back-link:hover { color: var(--fx-text-primary); }
  .fx-back-link:hover::before { translate: calc(var(--fx-space-1) * -0.5) 0; }
  .fx-back-link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-back-link:dir(rtl)::before { scale: -1 1; }
}

/* backtotop */
@layer fx.components {
  /* Yuqoriga qaytish (4-toʻlqin 4.151; Ant FloatButton.BackTop, PrimeReact ScrollTop): uzun sahifada bir ekrandan koʻp aylantirilgach
     pastki burchakda chiqadi. Bosilsa sahifa boshiga (harakat kamaytirilsa — darhol) va fokus sahifa boshidagi nishonga oʻtadi.
     Yashirin holatda inert (Tab bilan kelinmaydi). data-progress — atrofida oʻqilgan qism halqasi. JS’siz — doim koʻrinadi (oddiy havola). */
  .fx-backtotop {
    --_s: var(--fx-control-h-lg);
    --_p: 0;
    position: fixed;
    inset-block-end: calc(var(--fx-space-6) + env(safe-area-inset-bottom, 0px));
    inset-inline-end: var(--fx-space-6);
    z-index: var(--fx-z-sticky);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--fx-space-2);
    min-inline-size: var(--_s);
    block-size: var(--_s);
    padding: 0;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-pill);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-elevation-3);
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    text-decoration: none;
    cursor: pointer;
    transition: opacity var(--fx-motion-base) var(--fx-ease-enter), translate var(--fx-motion-base) var(--fx-ease-enter), visibility var(--fx-motion-base) var(--fx-ease-enter), background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-backtotop:hover { background: var(--fx-bg-subtle); }
  .fx-backtotop:active { scale: var(--fx-motion-press); }
  .fx-backtotop:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-backtotop__icon { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: currentColor; }
  .fx-backtotop__label { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .fx-backtotop[data-variant="label"] { padding-inline: var(--fx-space-4) var(--fx-space-5); }
  .fx-backtotop[data-variant="label"] .fx-backtotop__label { position: static; inline-size: auto; block-size: auto; overflow: visible; clip-path: none; }
  /* Joylashuv */
  .fx-backtotop[data-position="start"] { inset-inline: var(--fx-space-6) auto; }
  .fx-backtotop[data-position="center"] { inset-inline: 50% auto; translate: -50% 0; }
  .fx-backtotop[data-position="inline"] { position: relative; inset: auto; z-index: auto; }
  /* Ichki aylanuvchi panel ichida (data-target bilan): panel pastida yopishib turadi */
  .fx-backtotop[data-position="sticky"] { position: sticky; inset: auto 0 var(--fx-space-4) auto; display: flex; inline-size: fit-content; margin-block-start: calc(var(--_s) * -1); margin-inline-start: auto; z-index: var(--fx-z-raised); }
  /* Yashirin (JS boshqaradi) — chiqishi tezroq */
  .fx-backtotop[data-state="hidden"] { opacity: 0; visibility: hidden; translate: 0 var(--fx-motion-shift-md); transition-duration: var(--fx-motion-exit-fast); transition-timing-function: var(--fx-ease-exit); }
  .fx-backtotop[data-position="center"][data-state="hidden"] { translate: -50% var(--fx-motion-shift-md); }
  /* Oʻqilgan qism halqasi (data-progress): --_p 0…100 ni xulq yozadi; shakl — toʻlib boruvchi yoy */
  .fx-backtotop[data-progress]::before {
    content: "";
    position: absolute;
    inset: calc(var(--fx-border-width-default) * -1);
    border-radius: inherit;
    background: conic-gradient(var(--fx-bg-brand-solid) calc(var(--_p) * 1%), transparent 0);
    mask: radial-gradient(farthest-side, transparent calc(100% - var(--fx-border-width-focus)), black calc(100% - var(--fx-border-width-focus) + var(--fx-border-width-default) / 2));
    pointer-events: none;
  }
  @media (forced-colors: active) { .fx-backtotop { border-color: ButtonText; } }
}

/* badge */
@layer fx.components {
  .fx-badge {
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-1);
    padding: var(--fx-space-1) var(--fx-space-2);
    border-radius: var(--fx-radius-badge);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-medium);
    line-height: 1;
    background: var(--fx-bg-muted);
    color: var(--fx-text-secondary);
    transition: border-radius var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-badge[data-tone="success"] { background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); }
  .fx-badge[data-tone="warning"] { background: var(--fx-bg-warning-subtle); color: var(--fx-fg-warning); }
  .fx-badge[data-tone="error"] { background: var(--fx-bg-error-subtle); color: var(--fx-fg-error); }
  .fx-badge[data-tone="info"] { background: var(--fx-bg-info-subtle); color: var(--fx-fg-info); }
  .fx-badge[data-tone="brand"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  /* Kategoriya rangi (teg: agentlik, boʻlim) — maʼno emas, ajratish uchun; matn doim asosiy rangda (kontrast qoʻriqchisi: text.primary / bg.category.*-subtle) */
  .fx-badge[data-color="yellow"] { background: var(--fx-bg-category-yellow-subtle); color: var(--fx-text-primary); }
  .fx-badge[data-color="pink"] { background: var(--fx-bg-category-pink-subtle); color: var(--fx-text-primary); }
  .fx-badge[data-color="blue"] { background: var(--fx-bg-category-blue-subtle); color: var(--fx-text-primary); }
  .fx-badge[data-color="coral"] { background: var(--fx-bg-category-coral-subtle); color: var(--fx-text-primary); }
  .fx-badge[data-color="green"] { background: var(--fx-bg-category-green-subtle); color: var(--fx-text-primary); }
  .fx-badge[data-color="purple"] { background: var(--fx-bg-category-purple-subtle); color: var(--fx-text-primary); }
  /* Nuqtali belgi: ohang rangidagi nuqta + soʻz */
  .fx-badge[data-marker="dot"]::before { content: ""; flex: none; inline-size: calc(var(--fx-size-status-dot) * 0.6); block-size: calc(var(--fx-size-status-dot) * 0.6); border-radius: var(--fx-radius-circle); background: currentColor; }
  /* Son: tab, filtr yonida — tabular raqam, markazda */
  .fx-badge[data-type="count"] { justify-content: center; min-inline-size: var(--fx-size-icon-md); font-variant-numeric: tabular-nums; }
  /* Oʻlcham va ikon */
  .fx-badge[data-size="sm"] { padding: calc(var(--fx-space-1) / 2) var(--fx-space-1); }
  .fx-badge[data-size="lg"] { padding: var(--fx-space-1) var(--fx-space-3); font-size: var(--fx-font-size-sm); }
  .fx-badge > svg { flex: none; inline-size: 1.2em; block-size: 1.2em; }
  /* Toʻla tusli (solid): tekis yuza, matn — sahifa foni rangida */
  .fx-badge[data-style="solid"] { background: var(--fx-text-primary); color: var(--fx-bg-surface); }
  .fx-badge[data-style="solid"][data-tone="brand"] { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-badge[data-style="solid"][data-tone="info"] { background: var(--fx-fg-info); color: var(--fx-bg-surface); }
  .fx-badge[data-style="solid"][data-tone="success"] { background: var(--fx-fg-success); color: var(--fx-bg-surface); }
  .fx-badge[data-style="solid"][data-tone="warning"] { background: var(--fx-fg-warning); color: var(--fx-bg-surface); }
  .fx-badge[data-style="solid"][data-tone="error"] { background: var(--fx-bg-error-solid); color: var(--fx-text-on-error); }
  /* Chiziqli (outline): foni yoʻq, chegara matn rangida; oʻlcham chegara hisobiga saqlanadi */
  .fx-badge[data-style="outline"] { background: transparent; border: var(--fx-border-width-default) solid color-mix(in oklab, currentColor 45%, transparent); padding: calc(var(--fx-space-1) - var(--fx-border-width-default)) calc(var(--fx-space-2) - var(--fx-border-width-default)); }
  .fx-badge[data-style="outline"][data-size="sm"] { padding: calc(var(--fx-space-1) / 2 - var(--fx-border-width-default)) calc(var(--fx-space-1) - var(--fx-border-width-default)); }
  .fx-badge[data-style="outline"][data-size="lg"] { padding: calc(var(--fx-space-1) - var(--fx-border-width-default)) calc(var(--fx-space-3) - var(--fx-border-width-default)); }
}

/* banner */
@layer fx.components {
  /* Banner — sahifa/sayt boʻylab eʼlon (#68): butun kenglik, shell tepasida. Holat — shakl (alert bilan bir xil) + matndagi soʻz.
     Yopiladigan boʻlsa, xulq (behaviors/banner.js) yopilganini eslab qoladi. */
  .fx-banner {
    --_bg: var(--fx-bg-muted);
    --_fg: var(--fx-text-secondary);
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--fx-space-1) var(--fx-space-3);
    padding: var(--fx-space-2) var(--fx-space-4);
    background: var(--_bg);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
    line-height: 1.5;
  }
  .fx-banner[hidden] { display: none; }
  .fx-banner[data-sticky] { position: sticky; inset-block-start: 0; z-index: 5; }
  .fx-banner::before { content: ""; flex: none; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border-radius: var(--fx-radius-badge); background: var(--_fg); }
  .fx-banner[data-tone="info"] { --_bg: var(--fx-bg-info-subtle); --_fg: var(--fx-fg-info); }
  .fx-banner[data-tone="info"]::before { border-radius: var(--fx-radius-circle); }
  .fx-banner[data-tone="warning"] { --_bg: var(--fx-bg-warning-subtle); --_fg: var(--fx-fg-warning); }
  .fx-banner[data-tone="warning"]::before { clip-path: polygon(50% 0, 100% 100%, 0 100%); border-radius: 0; }
  .fx-banner[data-tone="error"] { --_bg: var(--fx-bg-error-subtle); --_fg: var(--fx-fg-error); }
  .fx-banner[data-tone="error"]::before { rotate: 45deg; scale: 0.85; border-radius: 0; }
  .fx-banner[data-tone="brand"] { --_bg: var(--fx-bg-brand-solid); --_fg: var(--fx-text-on-brand); color: var(--fx-text-on-brand); }
  .fx-banner[data-tone="brand"]::before { border-radius: var(--fx-radius-circle); }
  .fx-banner__text { margin: 0; min-inline-size: 0; text-wrap: balance; }
  .fx-banner__action { color: inherit; font-weight: var(--fx-font-weight-semibold); text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); white-space: nowrap; }
  .fx-banner__action:focus-visible, .fx-banner__close:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-banner__close { flex: none; inline-size: var(--fx-size-min-target); block-size: var(--fx-size-min-target); margin-block: calc(var(--fx-space-2) * -1); margin-inline-start: auto; padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: inherit; font: inherit; font-size: var(--fx-font-size-lg); line-height: 1; cursor: pointer; opacity: 0.7; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-banner__close:hover { opacity: 1; }
  .fx-banner__close:active { scale: var(--fx-motion-press); }
}

/* barlist */
@layer fx.components {
  /* Ustunli roʻyxat (Tremor BarList): har satrda nom, ulush chizigʻi va qiymat — eng koʻp/kam toifalar (manbalar, shaharlar, mahsulotlar).
     Chiziq nom ortida (data-variant="fill", standart) yoki nom ostida ingichka (data-variant="track"). Qiymat doim matn bilan. */
  .fx-barlist { display: grid; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-barlist__item { --_c: var(--fx-viz-brand); --fx-barlist-value: 0%; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--fx-space-3); font-size: var(--fx-font-size-sm); }
  .fx-barlist__item[data-role="ink"] { --_c: var(--fx-viz-ink); }
  .fx-barlist__item[data-role="accent"] { --_c: var(--fx-viz-accent); }
  .fx-barlist__item[data-role="risk"] { --_c: var(--fx-viz-risk); }
  .fx-barlist__item[data-role="context"] { --_c: var(--fx-viz-context); }
  .fx-barlist__bar { position: relative; display: flex; align-items: center; min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); padding-inline: var(--fx-space-3); min-inline-size: 0; border-radius: var(--fx-radius-badge); isolation: isolate; }
  .fx-barlist__bar::before { content: ""; position: absolute; inset-block: 0; inset-inline-start: 0; z-index: -1; inline-size: clamp(0%, var(--fx-barlist-value), 100%); border-radius: inherit; background: color-mix(in oklab, var(--_c) 22%, var(--fx-bg-surface)); transition: inline-size var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-barlist__label { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--fx-text-primary); text-decoration: none; }
  a.fx-barlist__label:hover { text-decoration: underline; text-underline-offset: var(--fx-space-1); }
  a.fx-barlist__label:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); border-radius: var(--fx-radius-badge); }
  .fx-barlist__value { color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; text-align: end; white-space: nowrap; }
  /* Ingichka variant: chiziq nom ostida, toʻliq kenglikda */
  .fx-barlist[data-variant="track"] .fx-barlist__item { grid-template-columns: minmax(0, 1fr) auto; row-gap: var(--fx-space-1); }
  .fx-barlist[data-variant="track"] .fx-barlist__bar { display: contents; }
  .fx-barlist[data-variant="track"] .fx-barlist__bar::before { content: none; }
  .fx-barlist[data-variant="track"] .fx-barlist__item::after { content: ""; grid-column: 1 / -1; grid-row: 2; block-size: var(--fx-space-1); border-radius: var(--fx-space-1); background: linear-gradient(var(--_c), var(--_c)) 0 0 / clamp(0%, var(--fx-barlist-value), 100%) 100% no-repeat, var(--fx-viz-track); }
}

/* beam */
@layer fx.components {
  /* Bogʻlovchi nur (4.70): tugunlar (ikon/logo) orasida egri chiziq va uning ustidan yuguruvchi nur — integratsiya, maʼlumot oqimi sxemasi.
     Tugun — .fx-beam__node[data-node="nom"], bogʻlanishlar — ildizda data-links="sayt>crm, bot>crm, crm>1c" (`<` — teskari yoʻnalish).
     Chiziqlarni foxui.js (data-fx-beam) SVG’da chizadi va oʻlcham oʻzgarsa qayta hisoblaydi. Nur faqat koʻrinishda yuguradi;
     reduced-motion va data-fx-motion="calm|none" — nur yoʻq, chiziq oʻzi yoʻnalish strelkasi bilan qoladi. Sxema bezak emas: ildizda aria-label. */
  .fx-beam { position: relative; isolation: isolate; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; justify-items: center; gap: var(--fx-space-8); padding: var(--fx-space-6); }
  .fx-beam__col { display: grid; gap: var(--fx-space-6); justify-items: center; }
  .fx-beam__node {
    position: relative;
    z-index: 1;
    display: grid;
    place-items: center;
    inline-size: var(--fx-control-h-lg);
    block-size: var(--fx-control-h-lg);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-circle);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-semibold);
  }
  .fx-beam__node > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: currentColor; }
  .fx-beam__node[data-size="lg"] { inline-size: calc(var(--fx-control-h-lg) * 1.6); block-size: calc(var(--fx-control-h-lg) * 1.6); box-shadow: var(--fx-shadow-md); }
  .fx-beam__node[data-size="lg"] > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-beam__label { position: absolute; inset-block-start: 100%; margin-block-start: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); white-space: nowrap; }
  .fx-beam__svg { position: absolute; inset: 0; z-index: 0; inline-size: 100%; block-size: 100%; overflow: visible; pointer-events: none; }
  .fx-beam__track { fill: none; stroke: var(--fx-border-color-strong); stroke-width: 1.5; stroke-linecap: round; }
  .fx-beam__glow { fill: none; stroke: var(--fx-bg-brand-solid); stroke-width: 2.5; stroke-linecap: round; stroke-dasharray: 0.16 1; stroke-dashoffset: 0.16; animation: fx-beam-run calc(var(--fx-duration-pulse) * 2) var(--fx-ease-standard) infinite; animation-play-state: paused; }
  .fx-beam[data-inview] .fx-beam__glow { animation-play-state: running; }
  .fx-beam__glow[data-reverse] { animation-direction: reverse; }
  .fx-beam[data-tone="accent"] .fx-beam__glow { stroke: var(--fx-viz-accent); }
  .fx-beam__arrow { fill: var(--fx-border-color-strong); }
  @keyframes fx-beam-run { to { stroke-dashoffset: -1; } }
  .fx-beam[data-layout="row"] { grid-template-columns: none; grid-auto-flow: column; justify-content: space-between; }
  /* tinch rejimlar: nur yoʻq, chiziq toʻliq brend rangida (yoʻnalish strelka bilan) */
  :is([data-fx-motion="calm"], [data-fx-motion="none"]) .fx-beam__glow, .fx-beam:is([data-fx-motion="calm"], [data-fx-motion="none"]) .fx-beam__glow { animation: none; stroke-dasharray: none; stroke-dashoffset: 0; opacity: 0.5; }
  @media (prefers-reduced-motion: reduce) { .fx-beam__glow { animation: none; stroke-dasharray: none; stroke-dashoffset: 0; opacity: 0.5; } }
  @media (max-width: 40rem) { .fx-beam { gap: var(--fx-space-4); padding: var(--fx-space-3); } }
  @media (forced-colors: active) { .fx-beam__track, .fx-beam__glow { stroke: CanvasText; } .fx-beam__node { border-color: CanvasText; } }
}

/* bento */
@layer fx.components {
  /* Bento toʻr (4.72, #107): turli oʻlchamdagi kataklar (2×1, 1×2, 2×2) — xususiyatlar mozaikasi. Har katak: ixtiyoriy ikon,
     sarlavha, matn va chetigacha chiqadigan media (illyustratsiya, mini UI). Telefonda bitta ustun, kataklar ketma-ket.
     Effektlar bilan: konteynerga data-fx-effects, kataklarga data-fx="spotlight" — kursor ortidan nur. */
  .fx-bento {
    --_cols: 3;
    --_pad: var(--fx-space-6);
    display: grid;
    grid-template-columns: repeat(var(--_cols), minmax(0, 1fr));
    grid-auto-rows: minmax(calc(var(--fx-space-12) * 4.5), auto);
    grid-auto-flow: dense;
    gap: var(--fx-space-4);
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .fx-bento[data-cols="2"] { --_cols: 2; }
  .fx-bento[data-cols="4"] { --_cols: 4; }
  .fx-bento__item {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: var(--fx-space-2);
    min-inline-size: 0;
    padding: var(--_pad);
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
  }
  .fx-bento__item[data-span="2x1"] { grid-column: span 2; }
  .fx-bento__item[data-span="1x2"] { grid-row: span 2; }
  .fx-bento__item[data-span="2x2"] { grid-column: span 2; grid-row: span 2; }
  .fx-bento__item[data-span="3x1"] { grid-column: span 3; }
  .fx-bento__item[data-tone="brand"] { border-color: transparent; background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-bento__item[data-tone="brand"] .fx-bento__text { color: color-mix(in oklab, var(--fx-text-on-brand) 78%, transparent); }
  .fx-bento__item[data-tone="subtle"] { box-shadow: none; background: var(--fx-bg-subtle); }
  .fx-bento__icon {
    display: grid;
    place-items: center;
    inline-size: var(--fx-size-control-sm);
    block-size: var(--fx-size-control-sm);
    margin-block-end: var(--fx-space-2);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-brand-subtle);
    color: var(--fx-text-brand);
  }
  .fx-bento__icon > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-bento__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); text-wrap: balance; }
  .fx-bento__text { margin: 0; max-inline-size: 46ch; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-wrap: pretty; }
  /* media: pastda, katak chetigacha; data-media="top" — tepada */
  .fx-bento__media {
    position: relative;
    display: grid;
    place-items: center;
    flex: 1 1 auto;
    min-block-size: calc(var(--fx-space-12) * 2.5);
    margin: var(--fx-space-4) calc(var(--_pad) * -1) calc(var(--_pad) * -1);
    padding: var(--fx-space-4);
    overflow: hidden;
    isolation: isolate;
    transition: scale var(--fx-motion-slow) var(--fx-ease-emphasized);
  }
  .fx-bento__item[data-media="top"] .fx-bento__media { order: -1; margin: calc(var(--_pad) * -1) calc(var(--_pad) * -1) var(--fx-space-4); }
  .fx-bento__media > :is(img, video, svg) { inline-size: 100%; block-size: 100%; object-fit: cover; }
  /* bosiladigan katak: butun katak havola (sarlavhadagi .fx-bento__link), hover’da media biroz kattalashadi (expressive) */
  .fx-bento__link { color: inherit; text-decoration: none; }
  .fx-bento__link::after { content: ""; position: absolute; inset: 0; z-index: 1; border-radius: inherit; }
  .fx-bento__link:focus-visible { outline: none; }
  .fx-bento__item:has(.fx-bento__link:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-bento__item:has(.fx-bento__link):hover .fx-bento__media { scale: calc(1 + 0.03 * var(--fx-knob-motion-lift)); }
  @media (max-width: 64em) {
    .fx-bento[data-cols="4"] { --_cols: 2; }
    .fx-bento__item[data-span="3x1"] { grid-column: 1 / -1; }
  }
  @media (max-width: 44em) {
    .fx-bento { --_cols: 1; }
    .fx-bento[data-cols] { --_cols: 1; }
    .fx-bento__item:is([data-span="2x1"], [data-span="2x2"], [data-span="3x1"]) { grid-column: auto; }
    .fx-bento__item:is([data-span="1x2"], [data-span="2x2"]) { grid-row: auto; }
  }
  @media (forced-colors: active) { .fx-bento__item { border-color: CanvasText; } }
}

/* bg */
@layer fx.components {
  /* Naqshli fon (4.61): nuqta / katak / chiziq — faqat CSS gradient + mask, chetga qarab soʻnadi. Hero, boʻsh holat, CTA orqasi uchun.
     Ota blok ichida orqa qatlam: ota position: relative (yoki isolation) boʻlsa, .fx-bg butun maydonni egallaydi va bosilmaydi.
     data-fade — qayerga qarab soʻnadi (radial markaz, tepa, past, yoʻq); data-glow — tepadan yumshoq mavzu nuri (statik, harakatsiz).
     Rang — matn rangidan aralashma (yorugʻ va qorongʻida avtomatik). Hech qanday rasm fayli yoʻq. */
  .fx-bg {
    --_ink: color-mix(in oklab, var(--fx-text-primary) 14%, transparent);
    --_cell: var(--fx-space-6);
    --_dot: calc(var(--fx-border-width-default) * 1.2);
    --_line: var(--fx-border-width-default);
    --_mask: radial-gradient(ellipse 70% 65% at 50% 40%, black 20%, transparent 75%);
    position: absolute;
    inset: 0;
    z-index: -1;
    overflow: hidden;
    pointer-events: none;
    border-radius: inherit;
  }
  .fx-bg::before { content: ""; position: absolute; inset: 0; mask: var(--_mask); }
  .fx-bg[data-pattern="dots"]::before { background: radial-gradient(circle at center, var(--_ink) var(--_dot), transparent calc(var(--_dot) + var(--fx-border-width-default))) 0 0 / var(--_cell) var(--_cell); }
  .fx-bg[data-pattern="grid"] { --_ink: color-mix(in oklab, var(--fx-text-primary) 8%, transparent); }
  .fx-bg[data-pattern="grid"]::before {
    background:
      linear-gradient(to right, var(--_ink) var(--_line), transparent var(--_line)) 0 0 / var(--_cell) var(--_cell),
      linear-gradient(to bottom, var(--_ink) var(--_line), transparent var(--_line)) 0 0 / var(--_cell) var(--_cell);
  }
  .fx-bg[data-pattern="lines"]::before { background: repeating-linear-gradient(-45deg, var(--_ink) 0 var(--_line), transparent var(--_line) calc(var(--_cell) / 2)); }
  .fx-bg[data-size="sm"] { --_cell: var(--fx-space-4); }
  .fx-bg[data-size="lg"] { --_cell: var(--fx-space-12); }
  .fx-bg[data-fade="top"] { --_mask: linear-gradient(to bottom, black, transparent 85%); }
  .fx-bg[data-fade="bottom"] { --_mask: linear-gradient(to top, black, transparent 85%); }
  .fx-bg[data-fade="none"] { --_mask: linear-gradient(black, black); }
  .fx-bg[data-pattern][data-tone="strong"] { --_ink: color-mix(in oklab, var(--fx-text-primary) 24%, transparent); }
  .fx-bg[data-pattern][data-tone="brand"] { --_ink: color-mix(in oklab, var(--fx-bg-brand-solid) 30%, transparent); }
  /* yumshoq nur: tepada mavzu rangidagi ellips (Vercel/Linear hero), ostida naqsh */
  .fx-bg[data-glow]::after {
    content: "";
    position: absolute;
    inset: 0;
    background:
      radial-gradient(ellipse 60% 55% at 50% -5%, color-mix(in oklab, var(--fx-bg-brand-solid) 20%, transparent), transparent),
      radial-gradient(ellipse 40% 45% at 15% -5%, color-mix(in oklab, var(--fx-viz-accent) 18%, transparent), transparent),
      radial-gradient(ellipse 40% 45% at 85% -5%, color-mix(in oklab, var(--fx-bg-category-blue) 18%, transparent), transparent);
  }
  /* yorugʻ boʻlmagan (brend rangli) blok ichida — chiziqlar oq tusda */
  .fx-bg[data-pattern][data-on="brand"] { --_ink: color-mix(in oklab, var(--fx-text-on-brand) 18%, transparent); }
  @media (forced-colors: active) { .fx-bg { display: none; } }
}
@layer fx.components {
  /* ---- 5-toʻlqin: fon effektlari (4.62–4.69) ----
     data-texture="noise" — don (SVG feTurbulence, rasm faylisiz), istalgan naqsh yoki effekt bilan birga.
     data-fx="aurora | retro-grid | meteors | rays | flicker | ripple" — bitta harakatli effekt (::before qatlamini egallaydi, data-pattern bilan birga emas).
     Cheksiz harakat faqat koʻrinishda: foxui.js (data-fx-bg) ekranga kirganda data-inview qoʻyadi; JS yoʻq, reduced-motion,
     data-fx-motion="calm|none" — statik kadr. Ranglar faqat mavzu tokenlaridan (yorugʻ/qorongʻida avtomatik). */
  .fx-bg[data-texture="noise"] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .5 0 0 0 0 .5 0 0 0 0 .5 0 0 0 .13 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
    background-size: calc(var(--fx-space-12) * 4);
    opacity: 1;
  }
  .fx-bg[data-texture="noise"][data-tone="strong"] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .5 0 0 0 0 .5 0 0 0 0 .5 0 0 0 .26 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  }
  .fx-bg[data-fx] { --_dur: calc(var(--fx-duration-pulse) * 10); }
  .fx-bg[data-fx]::before, .fx-bg[data-fx]::after, .fx-bg__meteor { animation-play-state: paused; }
  .fx-bg[data-fx][data-inview]::before, .fx-bg[data-fx][data-inview]::after, .fx-bg[data-inview] .fx-bg__meteor { animation-play-state: running; }

  /* avrora (4.63): mavzu ranglaridan katta yumshoq dogʻlar sekin oqadi */
  .fx-bg[data-fx="aurora"]::before {
    inset: -25%;
    background:
      radial-gradient(40% 35% at 25% 30%, color-mix(in oklab, var(--fx-bg-brand-solid) 55%, transparent), transparent 70%),
      radial-gradient(35% 40% at 75% 25%, color-mix(in oklab, var(--fx-bg-category-blue) 60%, transparent), transparent 70%),
      radial-gradient(45% 35% at 60% 70%, color-mix(in oklab, var(--fx-bg-category-pink) 50%, transparent), transparent 70%),
      radial-gradient(30% 30% at 20% 75%, color-mix(in oklab, var(--fx-viz-accent) 55%, transparent), transparent 70%);
    filter: blur(var(--fx-space-12));
    opacity: 0.55;
    animation: fx-bg-aurora var(--_dur) var(--fx-ease-standard) infinite alternate;
  }
  @keyframes fx-bg-aurora {
    0% { transform: translate(0, 0) rotate(0deg) scale(1); }
    50% { transform: translate(6%, -4%) rotate(8deg) scale(1.08); }
    100% { transform: translate(-5%, 5%) rotate(-6deg) scale(1); }
  }

  /* retro perspektiv toʻr (4.64): ufqqa ketuvchi katak, ustidan tepaga soʻnadi */
  .fx-bg[data-fx="retro-grid"] { --_ink: color-mix(in oklab, var(--fx-text-primary) 15%, transparent); perspective: calc(var(--fx-space-12) * 5); mask: linear-gradient(to top, black 5%, transparent 65%); }
  .fx-bg[data-fx="retro-grid"]::before {
    inset: -100% -50% 0;
    transform-origin: 50% 100%;
    transform: rotateX(68deg);
    mask: none;
    background:
      linear-gradient(to right, var(--_ink) var(--_line), transparent var(--_line)) 0 0 / calc(var(--_cell) * 2) calc(var(--_cell) * 2),
      linear-gradient(to bottom, var(--_ink) var(--_line), transparent var(--_line)) 0 0 / calc(var(--_cell) * 2) calc(var(--_cell) * 2);
    animation: fx-bg-retro calc(var(--fx-duration-pulse) * 2) linear infinite;
  }
  .fx-bg[data-fx="retro-grid"][data-tone="brand"] { --_ink: color-mix(in oklab, var(--fx-bg-brand-solid) 45%, transparent); }
  @keyframes fx-bg-retro { to { background-position: 0 calc(var(--_cell) * 2), 0 calc(var(--_cell) * 2); } }

  /* meteorlar (4.65): diagonal uchuvchi ingichka chiziqlar; .fx-bg__meteor — JS data-count boʻyicha yaratadi yoki qoʻlda (8 tagacha joy tayyor) */
  .fx-bg[data-fx="meteors"]::before { background: radial-gradient(ellipse 80% 60% at 70% 0, color-mix(in oklab, var(--fx-text-primary) 6%, transparent), transparent); }
  .fx-bg__meteor {
    --_x: 50%;
    --_y: -10%;
    --_delay: 0s;
    position: absolute;
    inset-block-start: var(--_y);
    inset-inline-start: var(--_x);
    inline-size: calc(var(--fx-space-12) * 2.5);
    block-size: var(--fx-border-width-default);
    border-radius: var(--fx-radius-pill);
    background: linear-gradient(to right, transparent, color-mix(in oklab, var(--fx-text-primary) 55%, transparent));
    rotate: 135deg;
    transform-origin: 100% 50%;
    opacity: 0;
    animation: fx-bg-meteor calc(var(--fx-duration-pulse) * 3) linear infinite;
    animation-delay: var(--_delay);
  }
  .fx-bg__meteor::after { content: ""; position: absolute; inset-inline-end: 0; inset-block-start: 50%; inline-size: calc(var(--fx-border-width-focus) * 1.5); aspect-ratio: 1; translate: 25% -50%; border-radius: var(--fx-radius-circle); background: var(--fx-text-primary); }
  .fx-bg[data-tone="brand"] .fx-bg__meteor { background: linear-gradient(to right, transparent, var(--fx-bg-brand-solid)); }
  .fx-bg__meteor:nth-child(8n + 1) { --_x: 12%; --_y: -6%; --_delay: calc(var(--fx-duration-pulse) * 0); }
  .fx-bg__meteor:nth-child(8n + 2) { --_x: 34%; --_y: -12%; --_delay: calc(var(--fx-duration-pulse) * 1.1); }
  .fx-bg__meteor:nth-child(8n + 3) { --_x: 58%; --_y: -4%; --_delay: calc(var(--fx-duration-pulse) * 0.5); }
  .fx-bg__meteor:nth-child(8n + 4) { --_x: 80%; --_y: -10%; --_delay: calc(var(--fx-duration-pulse) * 1.8); }
  .fx-bg__meteor:nth-child(8n + 5) { --_x: 96%; --_y: 18%; --_delay: calc(var(--fx-duration-pulse) * 0.9); }
  .fx-bg__meteor:nth-child(8n + 6) { --_x: 104%; --_y: 42%; --_delay: calc(var(--fx-duration-pulse) * 2.3); }
  .fx-bg__meteor:nth-child(8n + 7) { --_x: 46%; --_y: -14%; --_delay: calc(var(--fx-duration-pulse) * 2.7); }
  .fx-bg__meteor:nth-child(8n + 8) { --_x: 70%; --_y: -8%; --_delay: calc(var(--fx-duration-pulse) * 1.4); }
  @keyframes fx-bg-meteor {
    0% { opacity: 0; translate: 0 0; }
    8% { opacity: 1; }
    70% { opacity: 1; }
    100% { opacity: 0; translate: calc(var(--fx-space-12) * -9) calc(var(--fx-space-12) * 9); }
  }

  /* nur tushishi (4.67): tepadan konus nur va ingichka nurlar, sekin chayqaladi */
  .fx-bg[data-fx="rays"]::before {
    inset: 0 -20%;
    transform-origin: 50% 0;
    background:
      conic-gradient(from 160deg at 50% -8%, transparent 0deg, color-mix(in oklab, var(--fx-bg-brand-solid) 30%, transparent) 20deg, transparent 40deg),
      repeating-conic-gradient(from 150deg at 50% -8%, transparent 0deg 3deg, color-mix(in oklab, var(--fx-text-primary) 7%, transparent) 4deg 5deg, transparent 6deg 9deg);
    mask: radial-gradient(ellipse 60% 90% at 50% 0, black 10%, transparent 80%);
    filter: blur(calc(var(--fx-space-1) * 1.5));
    animation: fx-bg-rays var(--_dur) var(--fx-ease-standard) infinite alternate;
  }
  @keyframes fx-bg-rays { 0% { rotate: -3deg; opacity: 0.8; } 100% { rotate: 3deg; opacity: 1; } }

  /* miltillovchi toʻr (4.68): kataklarni foxui.js canvas’da chizadi (tasodifiy yonadi, data-interactive — kursor yonidagilar ham) */
  .fx-bg__canvas { position: absolute; inset: 0; inline-size: 100%; block-size: 100%; mask: var(--_mask); }
  .fx-bg[data-fx="flicker"] { --_ink: var(--fx-text-primary); }
  .fx-bg[data-fx="flicker"][data-tone="brand"] { --_ink: var(--fx-bg-brand-solid); }

  /* halqa toʻlqinlari (4.69): markazdan konsentrik halqalar (ikon yoki raqam ortida) + tarqaluvchi bitta toʻlqin */
  .fx-bg[data-fx="ripple"]::before {
    background: repeating-radial-gradient(circle at 50% 50%, transparent 0 calc(var(--_cell) * 1.5 - var(--_line)), var(--_ink) calc(var(--_cell) * 1.5 - var(--_line)) calc(var(--_cell) * 1.5));
    mask: radial-gradient(circle at 50% 50%, black 15%, transparent 65%);
  }
  .fx-bg[data-fx="ripple"]::after {
    content: "";
    position: absolute;
    inset-block-start: 50%;
    inset-inline-start: 50%;
    inline-size: calc(var(--_cell) * 3);
    aspect-ratio: 1;
    translate: -50% -50%;
    border: var(--fx-border-width-focus) solid color-mix(in oklab, var(--fx-bg-brand-solid) 45%, transparent);
    border-radius: var(--fx-radius-circle);
    opacity: 0;
    animation: fx-bg-ripple calc(var(--fx-duration-pulse) * 2.5) var(--fx-ease-exit) infinite;
  }
  @keyframes fx-bg-ripple { 0% { scale: 0.4; opacity: 0.9; } 100% { scale: 5; opacity: 0; } }

  /* tinch rejimlar: harakat yoʻq — oʻrtacha holatdagi statik kadr */
  :is([data-fx-motion="calm"], [data-fx-motion="none"]) .fx-bg[data-fx]::before, :is([data-fx-motion="calm"], [data-fx-motion="none"]) .fx-bg[data-fx]::after,
  .fx-bg[data-fx]:is([data-fx-motion="calm"], [data-fx-motion="none"])::before, .fx-bg[data-fx]:is([data-fx-motion="calm"], [data-fx-motion="none"])::after { animation: none; }
  :is([data-fx-motion="calm"], [data-fx-motion="none"]) .fx-bg__meteor, .fx-bg:is([data-fx-motion="calm"], [data-fx-motion="none"]) .fx-bg__meteor { animation: none; opacity: 0.5; }
  .fx-bg[data-fx="ripple"]:is([data-fx-motion="calm"], [data-fx-motion="none"])::after, :is([data-fx-motion="calm"], [data-fx-motion="none"]) .fx-bg[data-fx="ripple"]::after { opacity: 0; }
  @media (prefers-reduced-motion: reduce) {
    .fx-bg[data-fx]::before, .fx-bg[data-fx]::after { animation: none; }
    .fx-bg__meteor { animation: none; opacity: 0.5; }
    .fx-bg[data-fx="ripple"]::after { opacity: 0; }
  }
}

/* billing */
@layer fx.components {
  /* Tarif va hisob-kitob sahifasi (4.187, naqsh): joriy reja (narx, keyingi toʻlov, amallar), foydalanish meter’lari,
     toʻlov usuli (karta — tur, oxirgi 4 raqam, muddat), hisob-fakturalar jadvali. Faqat CSS; ichida fx-meter, fx-table, fx-status. */
  .fx-billing { display: grid; gap: var(--fx-space-6); color: var(--fx-text-primary); }
  .fx-billing__section { display: grid; gap: var(--fx-space-3); }
  .fx-billing__title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-billing__desc { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-billing__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-space-12) * 6.5)), 1fr)); gap: var(--fx-space-4); align-items: start; }
  .fx-billing__panel { display: grid; gap: var(--fx-space-4); padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-billing__plan { border-color: var(--fx-border-color-strong); }
  .fx-billing__eyebrow { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); text-transform: uppercase; letter-spacing: 0.06em; }
  .fx-billing__name { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-billing__price { display: flex; align-items: baseline; gap: var(--fx-space-2); margin: 0; }
  .fx-billing__amount { font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; line-height: 1.1; }
  .fx-billing__period { color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-billing__meta { display: grid; gap: var(--fx-space-1); margin: 0; padding: 0; list-style: none; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-billing__meta b { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; }
  .fx-billing__actions { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); }
  .fx-billing__usage { display: grid; gap: var(--fx-space-4); }
  /* Toʻlov kartasi: tur yozuvi (rasm/logo emas — matn belgi), yashirilgan raqam, muddat; asosiy karta — «Asosiy» belgisi */
  .fx-billing__method { display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); }
  .fx-billing__method[data-state="expiring"] { border-color: var(--fx-fg-warning); }
  .fx-billing__brand { flex: none; display: grid; place-items: center; inline-size: calc(var(--fx-control-h-md) * 1.4); block-size: var(--fx-control-h-md); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); color: var(--fx-text-primary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.04em; }
  .fx-billing__card { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; flex: 1; }
  .fx-billing__number { font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; }
  .fx-billing__exp { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-billing__method[data-state="expiring"] .fx-billing__exp { color: var(--fx-text-primary); }
  .fx-billing__method[data-state="expiring"] .fx-billing__exp::before { content: "! "; color: var(--fx-fg-warning); font-weight: var(--fx-font-weight-semibold); }
  .fx-billing__add { justify-self: start; }
  .fx-billing__invoices td:last-child, .fx-billing__invoices th:last-child { text-align: end; }
}

/* bleed */
@layer fx.components {
  /* Bleed — manfiy chet primitivi (4-toʻlqin 4.19; Atlassian Bleed, Chakra Bleed). Ichki element ota konteyner ichki chetidan (padding)
     chiqib, toʻliq enni egallaydi: karta ichidagi jadval, rasm, ajratuvchi chiziq. Chet miqdori ota ichki chetiga (padding).teng boʻlishi kerak:
     .fx-card ichida oʻzi aniqlanadi (5, ixcham kartada 4/3), .fx-container ichida — konteyner chetiga teng; boshqa joyda data-space bilan. */
  .fx-bleed { --_bi: var(--fx-space-5); --_bb: var(--_bi); margin-inline: calc(var(--_bi) * -1); min-inline-size: 0; }
  /* Chet oʻlchami (ota ichki cheti) */
  .fx-bleed[data-space="3"] { --_bi: var(--fx-space-3); --_bb: var(--fx-space-3); }
  .fx-bleed[data-space="4"] { --_bi: var(--fx-space-4); --_bb: var(--fx-space-4); }
  .fx-bleed[data-space="6"] { --_bi: var(--fx-space-6); --_bb: var(--fx-space-6); }
  .fx-bleed[data-space="8"] { --_bi: var(--fx-space-8); --_bb: var(--fx-space-8); }
  /* Ota komponentdan avtomatik */
  .fx-card[data-density="compact"] > .fx-bleed:not([data-space]) { --_bi: var(--fx-space-4); --_bb: var(--fx-space-3); }
  .fx-container > .fx-bleed:not([data-space]) { --_bi: var(--fx-space-4); }
  @media (min-width: 48rem) { .fx-container:not([data-pad="none"]) > .fx-bleed:not([data-space]) { --_bi: var(--fx-space-6); } }
  /* Qaysi tomonga chiqadi */
  .fx-bleed[data-side="top"] { margin-block-start: calc(var(--_bb) * -1); overflow: clip; border-start-start-radius: calc(var(--fx-radius-surface) - var(--fx-border-width-default)); border-start-end-radius: calc(var(--fx-radius-surface) - var(--fx-border-width-default)); }
  .fx-bleed[data-side="bottom"] { margin-block-end: calc(var(--_bb) * -1); overflow: clip; border-end-start-radius: calc(var(--fx-radius-surface) - var(--fx-border-width-default)); border-end-end-radius: calc(var(--fx-radius-surface) - var(--fx-border-width-default)); }
  .fx-bleed[data-side="all"] { margin-block: calc(var(--_bb) * -1); overflow: clip; border-radius: calc(var(--fx-radius-surface) - var(--fx-border-width-default)); }
  .fx-bleed[data-side="start"] { margin-inline: calc(var(--_bi) * -1) 0; }
  .fx-bleed[data-side="end"] { margin-inline: 0 calc(var(--_bi) * -1); }
  /* Ekran enigacha (landing: konteyner ichidan toʻliq en banner yoki rasm) — gorizontal scroll chiqmasligi uchun ota overflow-x: clip */
  .fx-bleed[data-side="viewport"] { margin-inline: calc(50% - 50vw); }
  /* Ichidagi media toʻliq en; jadval chekka katagi ota chetiga tekislanadi */
  .fx-bleed > :is(img, video, svg, picture) { display: block; inline-size: 100%; block-size: auto; }
  .fx-bleed > .fx-table :is(th, td):first-child { padding-inline-start: var(--_bi); }
  .fx-bleed > .fx-table :is(th, td):last-child { padding-inline-end: var(--_bi); }
  .fx-bleed > .fx-divider, .fx-bleed > hr { margin-inline: 0; }
}

/* blog */
@layer fx.components {
  /* Blog roʻyxati (4.178, naqsh): sarlavha bloki, toifa filtri (fx-chip), ixtiyoriy «Tanlangan» katta maqola (.fx-blog__post
     [data-featured] — toʻrda ikki ustun egallaydi, rasm yonida), kartalar toʻri va sahifalash (fx-pagination).
     Karta: muqova (img yoki pastel fon), toifa, sarlavha (havola butun kartani bosiladigan qiladi), qisqa matn, muallif,
     sana va oʻqish vaqti. data-layout: grid (standart) · list (rasm chapda, matn oʻngda — arxiv sahifasi). */
  .fx-blog { display: grid; gap: var(--fx-space-8); }
  .fx-blog__head { display: grid; justify-items: center; gap: var(--fx-space-3); max-inline-size: calc(var(--fx-dialog-width) * 1.4); margin-inline: auto; text-align: center; }
  .fx-blog__eyebrow { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-blog__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.02em; text-wrap: balance; color: var(--fx-text-primary); }
  .fx-blog__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-blog__filters { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-blog__list { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, calc(var(--fx-space-12) * 7)), 1fr)); gap: var(--fx-space-10) var(--fx-space-6); margin: 0; padding: 0; list-style: none; }
  .fx-blog__post { position: relative; display: grid; grid-template-rows: auto 1fr; align-content: start; gap: var(--fx-space-4); min-inline-size: 0; }
  .fx-blog__post:has(.fx-blog__link:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-space-2); border-radius: var(--fx-radius-surface); }
  .fx-blog__cover { position: relative; aspect-ratio: 16 / 10; overflow: hidden; border-radius: var(--fx-radius-surface); background: var(--fx-bg-muted); }
  .fx-blog__cover > img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; transition: scale var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-blog__post:hover .fx-blog__cover > img { scale: 1.04; }
  .fx-blog__cover[data-color="yellow"] { background: var(--fx-bg-category-yellow); }
  .fx-blog__cover[data-color="pink"] { background: var(--fx-bg-category-pink); }
  .fx-blog__cover[data-color="blue"] { background: var(--fx-bg-category-blue); }
  .fx-blog__cover[data-color="coral"] { background: var(--fx-bg-category-coral); }
  .fx-blog__cover[data-color="green"] { background: var(--fx-bg-category-green); }
  .fx-blog__cover[data-color="purple"] { background: var(--fx-bg-category-purple); }
  .fx-blog__content { display: grid; align-content: start; gap: var(--fx-space-2); min-inline-size: 0; }
  .fx-blog__category { justify-self: start; position: relative; z-index: 1; margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); text-decoration: none; }
  .fx-blog__post-title { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-snug); text-wrap: balance; }
  .fx-blog__link { color: var(--fx-text-primary); text-decoration: none; outline: none; }
  .fx-blog__link::after { content: ""; position: absolute; inset: 0; }
  .fx-blog__post:hover .fx-blog__link { text-decoration: underline; text-decoration-thickness: from-font; text-underline-offset: 0.2em; }
  .fx-blog__excerpt { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
  .fx-blog__byline { display: flex; align-items: center; gap: var(--fx-space-3); margin-block-start: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-blog__author { display: grid; gap: 0; min-inline-size: 0; }
  .fx-blog__author > b { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-blog__author > span { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  /* Tanlangan maqola: ikki ustun, rasm yonida, kattaroq sarlavha */
  .fx-blog__post[data-featured] { grid-column: 1 / -1; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); grid-template-rows: none; align-items: center; gap: var(--fx-space-8); }
  .fx-blog__post[data-featured] .fx-blog__post-title { font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); letter-spacing: -0.02em; }
  .fx-blog__pager { display: flex; justify-content: center; padding-block-start: var(--fx-space-6); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  /* list: rasm chapda kichik, matn oʻngda */
  .fx-blog[data-layout="list"] .fx-blog__list { grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-6); }
  .fx-blog[data-layout="list"] .fx-blog__post:not([data-featured]) { grid-template-columns: minmax(0, calc(var(--fx-space-12) * 5)) minmax(0, 1fr); grid-template-rows: none; gap: var(--fx-space-6); padding-block-end: var(--fx-space-6); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  @media (max-width: 44em) {
    .fx-blog__post[data-featured], .fx-blog[data-layout="list"] .fx-blog__post:not([data-featured]) { grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-4); }
  }
}

/* board */
@layer fx.components {
  /* Doska (kanban; PDP .eco-board): holat ustunlari — sarlavha (holat, nom, son, WIP chegarasi), kartalar. Karta sudraladi
     (sichqoncha va klaviatura: Space — koʻtarish, ← → ↑ ↓ — surish, Space — qoʻyish, Esc — bekor). Yigʻilgan ustun — tor vertikal.
     Xulq — foxui.js (data-fx-board): WIP oshsa — ogohlantirish, «fx-board-move» hodisasi. */
  .fx-board { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(calc(var(--fx-space-12) * 5.5), 1fr); gap: var(--fx-space-4); overflow-x: auto; padding-block-end: var(--fx-space-2); align-items: start; }
  .fx-board__col { display: grid; gap: var(--fx-space-2); align-content: start; min-inline-size: 0; padding: var(--fx-space-2); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-board__col[data-drop] { background: var(--fx-bg-brand-subtle); outline: var(--fx-border-width-default) dashed var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-board__head { display: flex; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-control-h-sm); padding-inline: var(--fx-space-2); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-board__count { color: var(--fx-text-tertiary); font-weight: var(--fx-font-weight-regular); font-variant-numeric: tabular-nums; }
  .fx-board__col[data-over] .fx-board__count { padding: 0 var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-warning-subtle); color: var(--fx-fg-warning); font-weight: var(--fx-font-weight-semibold); }
  .fx-board__head > :last-child:not(:first-child):is(button, a) { margin-inline-start: auto; }
  .fx-board__list { display: grid; gap: var(--fx-space-2); min-block-size: var(--fx-space-12); margin: 0; padding: 0; list-style: none; }
  .fx-board__card {
    display: grid; gap: var(--fx-space-2); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-sm); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); cursor: grab;
    transition: box-shadow var(--fx-motion-fast) var(--fx-ease-standard), rotate var(--fx-motion-fast) var(--fx-ease-standard), opacity var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-board__card:hover { box-shadow: var(--fx-shadow-md); }
  .fx-board__card:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-board__card[data-lifted] { cursor: grabbing; box-shadow: var(--fx-shadow-lg); rotate: calc(1deg * var(--fx-knob-motion-press)); }
  .fx-board__card[data-ghost] { opacity: 0.4; }
  .fx-board__top { display: flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-board__top > :first-child { font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); }
  .fx-board__top > :last-child { margin-inline-start: auto; }
  .fx-board__title { display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 2; margin: 0; font-weight: var(--fx-font-weight-medium); line-height: 1.35; }
  .fx-board__foot { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-board__foot > .fx-avatar:last-child { margin-inline-start: auto; }
  .fx-board__add { justify-content: flex-start; color: var(--fx-text-tertiary); }
  /* yigʻilgan ustun: tor vertikal rels, nom aylantirilgan */
  .fx-board__col[data-collapsed] { inline-size: var(--fx-control-h-lg); grid-template-rows: auto; }
  .fx-board__col[data-collapsed] .fx-board__head { flex-direction: column; writing-mode: vertical-rl; min-block-size: calc(var(--fx-space-12) * 3); padding-block: var(--fx-space-2); }
  .fx-board__col[data-collapsed] .fx-board__list, .fx-board__col[data-collapsed] .fx-board__add { display: none; }
  .fx-board:has(.fx-board__col[data-collapsed]) { grid-auto-columns: auto; grid-template-columns: none; }
  .fx-board:has(.fx-board__col[data-collapsed]) > .fx-board__col:not([data-collapsed]) { inline-size: calc(var(--fx-space-12) * 5.5); }
}

/* breadcrumbs */
@layer fx.components {
  /* Yoʻl satri: ota boʻlimlar xira, oxirgisi (joriy sahifa) asosiy rangda; ajratgich — «/» */
  .fx-breadcrumbs { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; font-size: var(--fx-font-size-sm); color: var(--fx-text-tertiary); min-inline-size: 0; }
  .fx-breadcrumbs > li { display: inline-flex; align-items: center; gap: var(--fx-space-2); min-inline-size: 0; }
  .fx-breadcrumbs > li + li::before { content: "/"; color: var(--fx-border-color-strong); }
  .fx-breadcrumbs a { color: inherit; text-decoration: none; border-radius: var(--fx-radius-badge); }
  .fx-breadcrumbs a:hover { color: var(--fx-text-primary); }
  .fx-breadcrumbs a:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-breadcrumbs [aria-current="page"] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  /* Ortiqcha boʻlimlar «…» ostida (2.100) va ota boʻlim almashtirgichi (2.101): menyu — fx-menu, popovertarget bilan */
  .fx-breadcrumbs__more, .fx-breadcrumbs__switch { display: inline-flex; align-items: center; gap: var(--fx-space-1); padding: 0 var(--fx-space-1); border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: inherit; font: inherit; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-breadcrumbs__more:hover, .fx-breadcrumbs__switch:hover, .fx-breadcrumbs__more[aria-expanded="true"], .fx-breadcrumbs__switch[aria-expanded="true"] { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-breadcrumbs__more:focus-visible, .fx-breadcrumbs__switch:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-breadcrumbs__switch > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-breadcrumbs__switch[aria-current="page"], .fx-breadcrumbs__switch.is-current { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
}

/* bulkbar */
@layer fx.components {
  /* Suzuvchi ommaviy panel (PDP .eco-bulkbar): tanlov boʻlsa pastda markazda chiqadi — son, (summa), amallar, ×.
     Teskari yuza (qorongʻi), soya bilan. Xulq — foxui.js (data-fx-bulkbar="#roʻyxat"): belgilanganlarni sanaydi. */
  .fx-bulkbar {
    position: sticky; inset-block-end: var(--fx-space-4); z-index: 5; display: flex; align-items: center; gap: var(--fx-space-3);
    inline-size: max-content; max-inline-size: calc(100% - var(--fx-space-8)); margin-inline: auto; padding: var(--fx-space-2) var(--fx-space-2) var(--fx-space-2) var(--fx-space-4);
    border-radius: var(--fx-radius-overlay); background: var(--fx-text-primary); color: var(--fx-bg-page); box-shadow: var(--fx-shadow-lg); font-size: var(--fx-font-size-sm);
    transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete;
  }
  .fx-bulkbar[hidden] { opacity: 0; translate: 0 var(--fx-motion-shift-md); }
  @starting-style { .fx-bulkbar:not([hidden]) { opacity: 0; translate: 0 var(--fx-motion-shift-md); } }
  .fx-bulkbar__count { font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-bulkbar__sum { color: color-mix(in oklab, var(--fx-bg-page) 70%, transparent); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-bulkbar__sep { align-self: stretch; inline-size: var(--fx-border-width-default); background: color-mix(in oklab, var(--fx-bg-page) 25%, transparent); }
  .fx-bulkbar .fx-btn { --_fg: var(--fx-bg-page); border-color: transparent; background: transparent; color: var(--fx-bg-page); }
  .fx-bulkbar .fx-btn:hover { background: color-mix(in oklab, var(--fx-bg-page) 15%, transparent); }
  .fx-bulkbar .fx-btn > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: currentColor; }
}

/* burst */
@layer fx.components {
  /* «Yoqdi» portlashi va konfetti (4.40, Magic UI Confetti / Cool Mode; harakat.md H12–H13).
     data-fx-burst — tugma (yoki reactbar kabi guruh) yoqilganda (aria-pressed="true" boʻlganda) ikon atrofida 8 ta rangli nuqta
     tarqaladi, ikon 0 → 1,2 → 1 sakraydi. data-fx-burst="confetti" — bosilganda tugmadan konfetti otiladi (muvaffaqiyat: toʻlov,
     birinchi loyiha). Global: fxConfetti({ origin, count }). Ranglar — toifa ranglari. Hammasi bir martalik (cheksiz emas);
     harakat kamaytirilsa yoki data-fx-motion="none"/"calm" — portlash ham, konfetti ham yoʻq (holat aria-pressed’da qoladi). */
  [data-fx-burst] { position: relative; }
  .fx-burst {
    position: absolute;
    left: var(--_x, 50%);
    top: var(--_y, 50%);
    inline-size: 0;
    block-size: 0;
    pointer-events: none;
    z-index: 1;
  }
  .fx-burst__dot, .fx-burst__ring { position: absolute; inset-inline-start: 0; inset-block-start: 0; border-radius: var(--fx-radius-circle); }
  .fx-burst__ring {
    inline-size: calc(var(--fx-size-icon-md) * 2);
    block-size: calc(var(--fx-size-icon-md) * 2);
    translate: -50% -50%;
    border: var(--fx-border-width-focus) solid color-mix(in oklab, var(--fx-bg-category-pink) 78%, var(--fx-text-primary));
    animation: fx-burst-ring var(--fx-motion-slow) var(--fx-ease-enter) both;
  }
  .fx-burst__dot {
    --_c: var(--fx-bg-category-pink);
    inline-size: var(--fx-space-2);
    block-size: var(--fx-space-2);
    margin: calc(var(--fx-space-1) * -1);
    background: color-mix(in oklab, var(--_c) 78%, var(--fx-text-primary));
    animation: fx-burst-dot calc(var(--fx-motion-slower) * 1.2) var(--fx-ease-enter) both;
  }
  .fx-burst__dot:nth-child(4n + 2) { --_c: var(--fx-bg-category-yellow); }
  .fx-burst__dot:nth-child(4n + 3) { --_c: var(--fx-bg-category-blue); }
  .fx-burst__dot:nth-child(4n) { --_c: var(--fx-bg-category-purple); }
  @keyframes fx-burst-dot {
    0% { transform: rotate(var(--_a)) translateY(calc(var(--fx-size-icon-md) * -0.4)) scale(0.4); opacity: 0; }
    25% { transform: rotate(var(--_a)) translateY(calc(var(--fx-size-icon-md) * -1.1)) scale(1); opacity: 1; }
    100% { transform: rotate(var(--_a)) translateY(calc(var(--fx-size-icon-md) * -1.7)) scale(0); opacity: 0.6; }
  }
  @keyframes fx-burst-ring { from { scale: 0.2; opacity: 1; } to { scale: 1; opacity: 0; border-width: 0; } }
  /* ikon sakrashi (bounce egri) */
  [data-fx-burst][data-pop] :is(svg, .fx-burst__icon, .fx-reactbar__emoji) { animation: fx-burst-pop var(--fx-motion-slower) var(--fx-ease-bounce) both; }
  @keyframes fx-burst-pop { 0% { scale: 1; } 25% { scale: 0.7; } 100% { scale: 1; } }
  /* yoqilgan «yoqdi» tugmasi: ikon toʻldiriladi */
  .fx-burst__icon { display: inline-flex; color: var(--fx-text-secondary); transition: color var(--fx-motion-fast) var(--fx-ease-standard); }
  [aria-pressed="true"] > .fx-burst__icon { color: var(--fx-bg-category-pink); }
  [aria-pressed="true"] > .fx-burst__icon > svg { fill: currentColor; }
  [data-fx-burst="confetti"] { isolation: isolate; }

  /* Konfetti qatlami: ekran ustida, bosilmaydi, oʻzi oʻchadi */
  .fx-confetti { position: fixed; inset: 0; z-index: var(--fx-z-toast); overflow: hidden; pointer-events: none; }
  .fx-confetti__piece {
    --_c: var(--fx-bg-category-pink);
    position: absolute;
    left: var(--_ox);
    top: var(--_oy);
    inline-size: var(--fx-space-2);
    block-size: calc(var(--fx-space-1) * 1.5);
    border-radius: calc(var(--fx-radius-badge) / 2);
    background: var(--_c);
    opacity: 0;
    animation: fx-confetti-fly calc(var(--fx-motion-slower) * 3.2) var(--fx-ease-enter) var(--_delay, 0s) forwards;
  }
  .fx-confetti__piece:nth-child(6n + 1) { --_c: var(--fx-bg-category-yellow); }
  .fx-confetti__piece:nth-child(6n + 2) { --_c: var(--fx-bg-category-blue); }
  .fx-confetti__piece:nth-child(6n + 3) { --_c: var(--fx-bg-category-green); }
  .fx-confetti__piece:nth-child(6n + 4) { --_c: var(--fx-bg-category-purple); }
  .fx-confetti__piece:nth-child(6n + 5) { --_c: var(--fx-bg-brand-solid); }
  .fx-confetti__piece:nth-child(3n) { border-radius: var(--fx-radius-circle); inline-size: calc(var(--fx-space-1) * 1.5); }
  @keyframes fx-confetti-fly {
    0% { opacity: 1; translate: 0 0; rotate: 0deg; }
    35% { opacity: 1; translate: calc(var(--_dx) * 0.7) var(--_dy); animation-timing-function: var(--fx-ease-exit); }
    100% { opacity: 0; translate: var(--_dx) calc(var(--_dy) + 60vh); rotate: var(--_rot); }
  }
  @media (forced-colors: active) { .fx-burst, .fx-confetti { display: none; } }
}

/* button */
@layer fx.components {
  .fx-btn {
    --_h: var(--fx-control-h-md);
    --_fg: var(--fx-text-primary);
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--fx-space-2);
    block-size: var(--_h);
    padding-inline: var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-strong);
    /* FX-SHAPE-02: pill = balandlik / 2, komponent ichida hisoblanadi */
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    font: inherit;
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    line-height: 1;
    white-space: nowrap;
    text-decoration: none;
    cursor: pointer;
    background: var(--fx-bg-surface);
    color: var(--_fg);
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard),
      border-radius var(--fx-motion-base) var(--fx-ease-standard),
      block-size var(--fx-motion-base) var(--fx-ease-standard),
      scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-btn:hover { background: var(--fx-bg-subtle); }
  .fx-btn:active:not(:disabled, [aria-disabled="true"], [aria-busy="true"]) { scale: var(--fx-motion-press); }
  .fx-btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-btn > svg { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-btn[data-variant="primary"] { --_fg: var(--fx-text-on-brand); background: var(--fx-bg-brand-solid); border-color: transparent; }
  .fx-btn[data-variant="primary"]:hover { background: var(--fx-bg-brand-solid-hover); }
  .fx-btn[data-variant="ghost"] { background: transparent; border-color: transparent; }
  .fx-btn[data-variant="ghost"]:hover { background: var(--fx-bg-muted); }
  .fx-btn[data-variant="danger"] { --_fg: var(--fx-text-on-error); background: var(--fx-bg-error-solid); border-color: transparent; }
  .fx-btn[data-variant="danger"]:hover { background: color-mix(in oklab, var(--fx-bg-error-solid) 88%, var(--fx-text-primary)); }
  /* Havola koʻrinishidagi tugma: amal, lekin matn kabi (masalan, «Barchasini koʻrish») */
  .fx-btn[data-variant="link"] { --_h: auto; --_fg: var(--fx-text-brand); padding: 0; border-color: transparent; background: transparent; text-decoration: underline; text-decoration-color: transparent; text-underline-offset: var(--fx-space-1); }
  .fx-btn[data-variant="link"]:hover { background: transparent; text-decoration-color: currentColor; }
  .fx-btn[data-size="sm"] { --_h: var(--fx-control-h-sm); padding-inline: var(--fx-space-3); }
  .fx-btn[data-size="lg"] { --_h: var(--fx-control-h-lg); padding-inline: var(--fx-space-5); font-size: var(--fx-font-size-md); }
  /* Faqat ikonka: kvadrat (Aylana uslubida — doira); nomi aria-label’da */
  .fx-btn[data-shape="icon"] { inline-size: var(--_h); padding-inline: 0; }
  .fx-btn[data-width="full"] { inline-size: 100%; }
  /* Bosilgan holat (yoqish tugmasi): aria-pressed */
  .fx-btn[aria-pressed="true"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); border-color: transparent; }
  .fx-btn:disabled, .fx-btn[aria-disabled="true"] { --_fg: var(--fx-text-disabled); cursor: not-allowed; background: var(--fx-bg-muted); border-color: transparent; }
  /* Yuklanmoqda: matn joyida qoladi (tugma eni sakramaydi), ustida aylana; reduced-motion’da faqat pulsatsiya */
  .fx-btn[aria-busy="true"] { color: transparent; cursor: progress; }
  .fx-btn[aria-busy="true"]::after {
    content: "";
    position: absolute;
    inset: 0;
    margin: auto;
    inline-size: var(--fx-size-icon-sm);
    block-size: var(--fx-size-icon-sm);
    border: var(--fx-border-width-focus) solid var(--_fg);
    border-inline-end-color: transparent;
    border-radius: var(--fx-radius-circle);
    animation: fx-spin var(--fx-duration-spin) linear infinite;
  }
  @media (prefers-reduced-motion: reduce) {
    .fx-btn[aria-busy="true"]::after { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
    .fx-btn:active { scale: none; }
  }
  /* expressive: oxirgi ikonka (strelka) hover’da biroz oldinga turtiladi */
  .fx-btn > svg:last-child:not(:first-child) { transition: translate var(--fx-motion-fast) var(--fx-ease-spring); }
  .fx-btn:hover > svg:last-child:not(:first-child) { translate: calc(var(--fx-space-1) / 2 * var(--fx-knob-motion-lift)) 0; }

  /* --- Kengaytma (2.1–2.14) --- */
  /* xs / xl o‘lchamlar: jadval ichi va hero */
  .fx-btn[data-size="xs"] { --_h: var(--fx-size-min-target); padding-inline: var(--fx-space-2); font-size: var(--fx-font-size-xs); gap: var(--fx-space-1); }
  .fx-btn[data-size="xl"] { --_h: calc(var(--fx-control-h-lg) * 1.2); padding-inline: var(--fx-space-6); font-size: var(--fx-font-size-lg); }
  /* Tonal: brend rangining och foni (primary’dan yengil) */
  .fx-btn[data-variant="tonal"] { --_fg: var(--fx-text-brand); background: var(--fx-bg-brand-subtle); border-color: transparent; }
  .fx-btn[data-variant="tonal"]:hover { background: color-mix(in oklab, var(--fx-bg-brand-subtle) 85%, var(--fx-text-brand)); }
  /* Outline: brend chegarali, foni yo‘q */
  .fx-btn[data-variant="outline"] { --_fg: var(--fx-text-brand); background: transparent; border-color: currentColor; }
  .fx-btn[data-variant="outline"]:hover { background: var(--fx-bg-brand-subtle); }
  /* Danger-ghost / danger-outline: jadvaldagi «O‘chirish» — xavfli, lekin baqiroq emas */
  .fx-btn[data-variant="danger-ghost"] { --_fg: var(--fx-fg-error); background: transparent; border-color: transparent; }
  .fx-btn[data-variant="danger-ghost"]:hover { background: var(--fx-bg-error-subtle); }
  .fx-btn[data-variant="danger-outline"] { --_fg: var(--fx-fg-error); background: transparent; border-color: currentColor; }
  .fx-btn[data-variant="danger-outline"]:hover { background: var(--fx-bg-error-subtle); }
  .fx-btn:is([data-variant="tonal"], [data-variant="outline"], [data-variant="danger-ghost"], [data-variant="danger-outline"]):is(:disabled, [aria-disabled="true"]) { --_fg: var(--fx-text-disabled); background: var(--fx-bg-muted); border-color: transparent; }
  /* Menyu tugmasi: ▾ chevron, menyu ochiq bo‘lsa 180° buriladi */
  .fx-btn__chev { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-btn:hover > svg.fx-btn__chev:last-child:not(:first-child) { translate: none; }
  .fx-btn[aria-expanded="true"] .fx-btn__chev { rotate: 180deg; }
  /* Tugma ichidagi kbd / son: o‘ng chetda */
  .fx-btn > :is(.fx-kbd, .fx-badge) { margin-inline-end: calc(var(--fx-space-1) * -1); }
  .fx-btn > .fx-kbd { background: transparent; color: inherit; opacity: 0.8; }
  /* Ikon almashinuvi: aria-pressed=true bo‘lsa .fx-btn__on ko‘rinadi, .fx-btn__off yashiriladi */
  .fx-btn__on { display: none; }
  .fx-btn[aria-pressed="true"] > .fx-btn__on { display: inline-block; }
  .fx-btn[aria-pressed="true"] > .fx-btn__off { display: none; }
  /* Yuklanish, matn saqlanadi: spinner matn yonida (data-loading="text") */
  .fx-btn[aria-busy="true"][data-loading="text"] { color: var(--_fg); }
  .fx-btn[aria-busy="true"][data-loading="text"]::after { position: static; margin: 0; flex: none; order: -1; }
  /* Havola-tugma: o‘chirilgan bo‘lsa bosilmaydi */
  a.fx-btn[aria-disabled="true"] { pointer-events: none; }
  /* Fokus: ichki halqa (qirqiladigan konteyner, guruh ichida) */
  .fx-btn[data-focus="inset"]:focus-visible { outline-offset: calc(var(--fx-border-width-focus) * -1); }
  /* Kichik tugmada bosish maydoni kengayadi (WCAG 2.5.8): ko‘rinish o‘zgarmaydi */
  .fx-btn:is([data-size="xs"], [data-size="sm"], [data-shape="icon"])::before { content: ""; position: absolute; inset: calc(var(--fx-space-1) * -1); }

  /* Tugmalar guruhi (yopishgan): ichki burchaklar 0, chegaralar birlashadi. data-orientation="vertical", data-fill */
  .fx-btn-group { display: inline-flex; isolation: isolate; }
  .fx-btn-group > .fx-btn { border-radius: 0; }
  .fx-btn-group > .fx-btn:first-child { border-start-start-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control)); border-end-start-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control)); }
  .fx-btn-group > .fx-btn:last-child { border-start-end-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control)); border-end-end-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control)); }
  .fx-btn-group > .fx-btn + .fx-btn { margin-inline-start: calc(var(--fx-border-width-default) * -1); }
  .fx-btn-group > .fx-btn:is(:hover, :focus-visible, [aria-pressed="true"]) { z-index: 1; }
  /* Split: asosiy amal + ▾; bir xil to‘la rangli qismlar orasida ingichka ajratgich */
  .fx-btn-group > .fx-btn:is([data-variant="primary"], [data-variant="danger"]) + .fx-btn:is([data-variant="primary"], [data-variant="danger"]) { border-inline-start: var(--fx-border-width-default) solid color-mix(in oklab, var(--_fg) 35%, transparent); }
  .fx-btn-group > .fx-btn[data-shape="icon"] { inline-size: auto; padding-inline: var(--fx-space-2); }
  .fx-btn-group[data-orientation="vertical"] { flex-direction: column; }
  .fx-btn-group[data-orientation="vertical"] > .fx-btn:is(:first-child, :last-child) { border-radius: 0; }
  .fx-btn-group[data-orientation="vertical"] > .fx-btn:first-child { border-start-start-radius: var(--fx-radius-control); border-start-end-radius: var(--fx-radius-control); }
  .fx-btn-group[data-orientation="vertical"] > .fx-btn:last-child { border-end-start-radius: var(--fx-radius-control); border-end-end-radius: var(--fx-radius-control); }
  .fx-btn-group[data-orientation="vertical"] > .fx-btn + .fx-btn { margin-inline-start: 0; margin-block-start: calc(var(--fx-border-width-default) * -1); }
  .fx-btn-group[data-fill] { display: flex; }
  .fx-btn-group[data-fill] > .fx-btn { flex: 1; }

  /* Holatli tugma (4-toʻlqin 4.36): yuklanish (aria-busy) → data-state="success" ✓ yoki "error" ✕ → oʻzi asl koʻrinishga qaytadi
     (~1,6 s, --fx-duration-pulse — harakat emas, kutish vaqti). Belgi shakl bilan (✓/✕), rang qoʻshimcha; data-state-label — belgi yonidagi
     soʻz («Saqlandi»). Holatni ekran oʻquvchiga alohida aria-live bilan ayting; keyingi bosishdan oldin data-state’ni olib tashlang. */
  .fx-btn:is([data-state="success"], [data-state="error"]):not([aria-busy="true"]) { --_sbg: var(--fx-bg-success-subtle); --_sfg: var(--fx-fg-success); animation: fx-btn-state var(--fx-duration-pulse) linear both; }
  .fx-btn[data-state="error"]:not([aria-busy="true"]) { --_sbg: var(--fx-bg-error-subtle); --_sfg: var(--fx-fg-error); animation: fx-btn-state var(--fx-duration-pulse) linear both, fx-btn-shake var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-btn:is([data-state="success"], [data-state="error"]):not([aria-busy="true"])::after {
    content: "✓";
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--fx-space-1);
    color: var(--_sfg);
    font-weight: var(--fx-font-weight-semibold);
    pointer-events: none;
    animation: fx-btn-state-mark var(--fx-duration-pulse) var(--fx-ease-standard) both;
  }
  .fx-btn[data-state="error"]:not([aria-busy="true"])::after { content: "✕"; }
  .fx-btn[data-state="success"][data-state-label]:not([aria-busy="true"])::after { content: "✓ " attr(data-state-label); }
  .fx-btn[data-state="error"][data-state-label]:not([aria-busy="true"])::after { content: "✕ " attr(data-state-label); }
  @keyframes fx-btn-state { 0%, 85% { color: transparent; background-color: var(--_sbg); border-color: transparent; } }
  @keyframes fx-btn-state-mark { 0% { opacity: 0; scale: calc(1 - (1 - var(--fx-motion-scale-enter)) * 6); } 12%, 85% { opacity: 1; scale: 1; } 100% { opacity: 0; } }
  @keyframes fx-btn-shake { 25% { translate: calc(var(--fx-motion-shift-sm) * -1) 0; } 50% { translate: var(--fx-motion-shift-sm) 0; } 75% { translate: calc(var(--fx-motion-shift-sm) * -0.5) 0; } }
}

/* calendar */
@layer fx.components {
  /* Kalendar (#2): oy toʻri, kun tanlash yoki oraliq, oy/yil koʻrinishi. Hafta Dushanbadan. Xulq (foxui.js → calendar) hamma narsani chizadi;
     holatlar faqat rangda emas: tanlangan — toʻldirilgan, bugun — halqa, oʻchirilgan — chizilgan, oraliq — tasma. */
  .fx-calendar {
    --_cell: var(--fx-control-h-md);
    --_r: calc(var(--fx-knob-pill) * var(--_cell) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    display: inline-grid;
    inline-size: max-content;
    justify-self: start;
    gap: var(--fx-space-2);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
  }
  .fx-calendar[data-size="sm"] { --_cell: var(--fx-control-h-sm); font-size: var(--fx-font-size-xs); }
  .fx-calendar__head { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-2); }
  .fx-calendar__title { flex: 1; min-block-size: var(--fx-control-h-sm); padding-inline: var(--fx-space-3); border: 0; border-radius: var(--_r); background: transparent; color: inherit; font: inherit; font-weight: var(--fx-font-weight-semibold); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-calendar__title:hover:not(:disabled) { background: var(--fx-bg-muted); }
  .fx-calendar__title:disabled { cursor: default; }
  .fx-calendar__nav { flex: none; display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--_r); background: transparent; color: var(--fx-text-secondary); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-calendar__nav:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-calendar__nav > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-calendar__nav:active, .fx-calendar__title:active:not(:disabled) { scale: var(--fx-motion-press); }
  .fx-calendar :is(.fx-calendar__nav, .fx-calendar__title, .fx-calendar__day):focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-calendar__months { display: flex; gap: var(--fx-space-6); }
  .fx-calendar__grid { border-collapse: separate; border-spacing: 0; table-layout: fixed; }
  .fx-calendar__dow { block-size: var(--fx-control-h-sm); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); color: var(--fx-text-tertiary); text-align: center; }
  .fx-calendar__cell { inline-size: var(--_cell); block-size: var(--_cell); padding: 0; text-align: center; }
  .fx-calendar__day { box-sizing: border-box; display: grid; place-items: center; inline-size: 100%; block-size: 100%; padding: 0; border: 0; border-radius: var(--_r); background: transparent; color: var(--fx-text-primary); font: inherit; font-variant-numeric: tabular-nums; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard), border-radius var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-calendar__grid[data-kind] .fx-calendar__cell { inline-size: calc(var(--_cell) * 7 / 3); block-size: var(--_cell); }
  .fx-calendar__day:hover:not([data-selected]):not([aria-disabled="true"]) { background: var(--fx-bg-muted); }
  .fx-calendar__day:active:not([aria-disabled="true"]) { scale: var(--fx-motion-press); }
  .fx-calendar__day[data-outside] { color: var(--fx-text-tertiary); }
  /* Bugun — halqa (toʻldirilmagan, tanlangandan farqli) */
  .fx-calendar__day[data-today] { outline: var(--fx-border-width-focus) solid var(--fx-border-color-strong); outline-offset: calc(var(--fx-border-width-focus) * -1); font-weight: var(--fx-font-weight-semibold); }
  /* Tanlangan — toʻldirilgan */
  .fx-calendar__day[data-selected] { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-weight: var(--fx-font-weight-semibold); outline: 0; }
  /* Oʻchirilgan: chizilgan raqam, bosilmaydi (fokus oladi — aria-disabled) */
  .fx-calendar__day[aria-disabled="true"] { color: var(--fx-text-disabled); text-decoration: line-through; cursor: not-allowed; }
  /* Oraliq: tasma hujayra orqasida; boshi va oxiri — tanlangan tugma + yarim tasma */
  .fx-calendar__cell[data-in-range] { background: var(--fx-bg-brand-subtle); }
  .fx-calendar__cell[data-in-range] .fx-calendar__day { border-radius: 0; }
  .fx-calendar__cell[data-band="start"] { background: linear-gradient(to right, transparent 50%, var(--fx-bg-brand-subtle) 50%); }
  .fx-calendar__cell[data-band="end"] { background: linear-gradient(to left, transparent 50%, var(--fx-bg-brand-subtle) 50%); }
  .fx-calendar__cell[data-preview][data-range-end]:not([data-band]) { background: linear-gradient(to left, transparent 50%, var(--fx-bg-brand-subtle) 50%); }
  .fx-calendar__cell[data-preview][data-range-end] .fx-calendar__day:not([data-selected]) { outline: var(--fx-border-width-default) solid var(--fx-bg-brand-solid); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-calendar__cell[data-range-start]:has(~ [data-in-range], ~ [data-range-end]) .fx-calendar__day { border-start-end-radius: 0; border-end-end-radius: 0; }
  .fx-calendar__foot { display: flex; justify-content: space-between; gap: var(--fx-space-2); padding-block-start: var(--fx-space-2); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }

  /* ---- Bir nechta sana (4.99): har kun alohida belgilanadi/olinadi; tanlanganlar orasida kichik tirqish — bir-biriga qoʻshilib
     oraliqqa oʻxshab qolmasin. Pastda «N kun tanlandi» (soʻz bilan). ---- */
  .fx-calendar[data-mode="multiple"] .fx-calendar__cell { padding: calc(var(--fx-space-1) / 2); }
  .fx-calendar[data-mode="multiple"] .fx-calendar__foot { align-items: center; }
  .fx-calendar__count { margin-inline-end: auto; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  /* ---- Hafta raqamlari (4.98): chapda ISO hafta (th scope=row) — xira, kichik, ajratuvchi chiziq bilan; bosilmaydi ---- */
  .fx-calendar__wk { inline-size: calc(var(--_cell) * 0.75); padding: 0; border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); font-variant-numeric: tabular-nums; text-align: center; }
  .fx-calendar__grid .fx-calendar__wk + .fx-calendar__cell, .fx-calendar__grid .fx-calendar__wk + .fx-calendar__dow { padding-inline-start: var(--fx-space-1); }
  /* ---- Yil va oʻn yillik (4.100): data-mode="year" — yil toʻri asosiy koʻrinish; oʻn yilliklar katagi kengroq («1990–1999») ---- */
  .fx-calendar__grid[data-kind="decades"] .fx-calendar__day { font-size: var(--fx-font-size-xs); }
  .fx-calendar[data-mode="year"] .fx-calendar__grid[data-kind="years"] .fx-calendar__day { font-weight: var(--fx-font-weight-medium); }
}

/* callout */
@layer fx.components {
  /* Callout — matn ichidagi eslatma (#112): alert’dan yengil, yengil tus + chap chiziq. Soʻz (sarlavha) + shakl holatni beradi. */
  .fx-callout {
    --_c: var(--fx-text-secondary);
    margin-block: var(--fx-space-4);
    padding: var(--fx-space-3) var(--fx-space-4);
    border-inline-start: calc(var(--fx-border-width-focus) * 2) solid var(--_c);
    border-start-end-radius: var(--fx-radius-control);
    border-end-end-radius: var(--fx-radius-control);
    background: color-mix(in oklab, var(--_c) 8%, transparent);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
    line-height: 1.6;
  }
  .fx-callout[data-tone="tip"] { --_c: var(--fx-fg-success); }
  .fx-callout[data-tone="important"] { --_c: var(--fx-text-brand); }
  .fx-callout[data-tone="warning"] { --_c: var(--fx-fg-warning); }
  .fx-callout[data-tone="caution"] { --_c: var(--fx-fg-error); }
  .fx-callout__title { display: flex; align-items: center; gap: var(--fx-space-2); margin: 0 0 var(--fx-space-1); font-weight: var(--fx-font-weight-semibold); }
  .fx-callout__title::before { content: ""; flex: none; inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border-radius: var(--fx-radius-badge); background: var(--_c); }
  .fx-callout[data-tone="tip"] .fx-callout__title::before { border-radius: var(--fx-radius-circle); }
  .fx-callout[data-tone="important"] .fx-callout__title::before { rotate: 45deg; scale: 0.85; border-radius: 0; }
  .fx-callout[data-tone="warning"] .fx-callout__title::before { clip-path: polygon(50% 0, 100% 100%, 0 100%); border-radius: 0; }
  .fx-callout[data-tone="caution"] .fx-callout__title::before { clip-path: polygon(30% 0, 70% 0, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0 70%, 0 30%); border-radius: 0; }
  .fx-callout__body > :first-child { margin-block-start: 0; }
  .fx-callout__body > :last-child { margin-block-end: 0; }
}

/* canvas */
@layer fx.components {
  /* AI artefakt / kanvas paneli (4.203, Vercel AI Elements «Artifact», Claude Artifacts, ChatGPT Canvas): suhbat yonida AI yaratgan
     hujjat, kod yoki sahifa paneli. Sarlavha qatori: tur belgisi, nom va meta, versiyalar («‹ v2 / 3 ›»), Koʻrinish ↔ Kod yorliqlari,
     nusxalash, toʻliq ekran va yopish. Tana: har versiya .fx-canvas__version — ichida .fx-canvas__preview (natija) va .fx-canvas__code
     (manba); ildizdagi data-view qaysi biri koʻrinishini belgilaydi. data-state="streaming" — AI hali yozmoqda (yuguruvchi chiziq,
     «Yozilmoqda…»). data-expanded — toʻliq ekran. Suhbat bilan yonma-yon qoʻyish — fx-split yoki grid. Xulq: foxui.js → canvas. */
  .fx-canvas {
    position: relative;
    display: grid;
    grid-template-rows: auto minmax(0, 1fr);
    min-block-size: calc(var(--fx-space-12) * 10);
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-md);
    animation: fx-canvas-in var(--fx-motion-slow) var(--fx-ease-emphasized);
  }
  .fx-canvas[hidden] { display: none; }
  .fx-canvas[data-expanded] { position: fixed; inset: var(--fx-space-4); z-index: var(--fx-z-modal); box-shadow: var(--fx-shadow-lg); }
  .fx-canvas__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2) var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-2) var(--fx-space-2) var(--fx-space-4); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-subtle); }
  .fx-canvas__type { flex: none; display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); border-radius: var(--fx-radius-control); background: var(--fx-bg-category-purple); color: var(--fx-text-on-category); }
  .fx-canvas__type > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-canvas__heading { display: grid; flex: 1 1 calc(var(--fx-space-12) * 3); min-inline-size: 0; }
  .fx-canvas__title { margin: 0; overflow: hidden; color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); text-overflow: ellipsis; white-space: nowrap; }
  .fx-canvas__meta { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-canvas__versions { display: inline-flex; align-items: center; gap: calc(var(--fx-space-1) / 2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-canvas__tabs { display: inline-flex; padding: calc(var(--fx-space-1) / 2); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); }
  .fx-canvas__tab { min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); padding: 0 var(--fx-space-3); border: 0; border-radius: calc(var(--fx-radius-control) - var(--fx-space-1) / 2); background: none; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-canvas__tab[aria-selected="true"] { background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-sm); }
  .fx-canvas__tab:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-canvas__actions { display: inline-flex; gap: calc(var(--fx-space-1) / 2); }
  .fx-canvas__btn {
    position: relative;
    display: grid;
    place-items: center;
    inline-size: var(--fx-control-h-sm);
    block-size: var(--fx-control-h-sm);
    padding: 0;
    border: 0;
    border-radius: var(--fx-radius-control);
    background: none;
    color: var(--fx-text-secondary);
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-canvas__btn:hover:not(:disabled) { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-canvas__btn:active:not(:disabled) { scale: var(--fx-motion-press); }
  .fx-canvas__btn:disabled { color: var(--fx-text-disabled); cursor: default; }
  .fx-canvas__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-canvas__btn[aria-pressed="true"] { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-canvas__btn > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-canvas__btn[data-state="copied"] { color: var(--fx-fg-success); }
  .fx-canvas__btn[data-state="copied"]::after { content: "✓"; position: absolute; translate: var(--fx-space-2) calc(var(--fx-space-2) * -1); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); }
  .fx-canvas__body { position: relative; display: grid; min-block-size: 0; overflow: auto; }
  .fx-canvas__version { display: grid; min-block-size: 0; }
  .fx-canvas__version[hidden] { display: none; }
  .fx-canvas__preview { padding: var(--fx-space-6); color: var(--fx-text-primary); }
  .fx-canvas__code { margin: 0; padding: var(--fx-space-4); min-block-size: 100%; box-sizing: border-box; background: var(--fx-bg-subtle); color: var(--fx-text-primary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); line-height: var(--fx-line-height-relaxed); tab-size: 2; white-space: pre; overflow: auto; }
  .fx-canvas__code:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-canvas[data-view="preview"] .fx-canvas__code, .fx-canvas[data-view="code"] .fx-canvas__preview { display: none; }
  /* streaming: tepada yuguruvchi chiziq va «Yozilmoqda…» */
  .fx-canvas__status { display: none; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-canvas[data-state="streaming"] .fx-canvas__status { display: inline-flex; }
  .fx-canvas[data-state="streaming"] .fx-canvas__meta { display: none; }
  .fx-canvas[data-state="streaming"] .fx-canvas__head::after { content: ""; position: absolute; inset-inline: 0; inset-block-start: 0; block-size: var(--fx-border-width-focus); background: linear-gradient(90deg, transparent, var(--fx-bg-brand-solid), transparent) 0 0 / 40% 100% no-repeat; animation: fx-canvas-stream calc(var(--fx-duration-indeterminate) * max(var(--fx-knob-motion-loop), 0.001)) linear infinite; }
  @keyframes fx-canvas-in { from { opacity: 0; translate: var(--fx-motion-shift-lg) 0; } }
  @keyframes fx-canvas-stream { from { background-position: -40% 0; } to { background-position: 140% 0; } }
  @media (prefers-reduced-motion: reduce) { .fx-canvas[data-state="streaming"] .fx-canvas__head::after { animation: none; background: var(--fx-bg-brand-solid); opacity: 0.4; } }
}

/* captcha */
@layer fx.components {
  /* Captcha / «bot emasman» (4.110, #27): uchinchi tomon captcha’si (Turnstile, reCAPTCHA, hCaptcha, oʻz serveringiz) uchun bir xil ramka va holatlar —
     forma ichida begona koʻrinmasin. Belgi qutisi FoxUI’niki; haqiqiy vidjet .fx-captcha__slot’ga oʻrnatiladi (koʻrinmas rejimda — yashirin).
     Holatlar shakl + soʻz bilan: boʻsh quti · aylanuvchi halqa «Tekshirilmoqda…» · ✓ «Tasdiqlandi» · ! xato matni · ⟳ «Muddati tugadi». */
  .fx-captcha {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--fx-space-2) var(--fx-space-4);
    inline-size: min(100%, var(--fx-popover-width));
    padding: var(--fx-space-3) var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-subtle);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
  }
  .fx-captcha__check { display: inline-flex; align-items: center; gap: var(--fx-space-3); min-block-size: var(--fx-size-min-target); padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; }
  .fx-captcha__check:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-captcha__box {
    flex: none;
    display: grid;
    place-items: center;
    box-sizing: border-box;
    inline-size: var(--fx-size-control-sm);
    block-size: var(--fx-size-control-sm);
    border: var(--fx-border-width-focus) solid var(--fx-border-color-strong);
    border-radius: calc(var(--fx-size-control-sm) * var(--fx-radius-checkbox-ratio));
    background: var(--fx-bg-field);
    color: var(--fx-text-on-brand);
    font-weight: var(--fx-font-weight-bold);
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-captcha__check:hover .fx-captcha__box { border-color: var(--fx-text-secondary); }
  .fx-captcha__check:active .fx-captcha__box { scale: var(--fx-motion-press); }
  .fx-captcha__brand { display: grid; justify-items: end; gap: calc(var(--fx-space-1) / 2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-align: end; }
  .fx-captcha__brand a { color: inherit; }
  .fx-captcha__slot { grid-column: 1 / -1; }
  .fx-captcha__slot:empty { display: none; }
  .fx-captcha__msg { grid-column: 1 / -1; margin: 0; font-size: var(--fx-font-size-xs); color: var(--fx-text-secondary); }
  .fx-captcha__msg:empty { display: none; }
  /* Tekshirilmoqda: quti oʻrnida halqa */
  .fx-captcha[data-state="loading"] .fx-captcha__box { border-color: color-mix(in oklab, var(--fx-bg-brand-solid) 25%, transparent); border-block-start-color: var(--fx-bg-brand-solid); border-radius: var(--fx-radius-circle); background: transparent; animation: fx-spin var(--fx-duration-spin) linear infinite; }
  .fx-captcha[data-state="loading"] .fx-captcha__check { cursor: progress; }
  /* Tasdiqlandi: toʻldirilgan quti + ✓ */
  .fx-captcha[data-state="verified"] .fx-captcha__box { border-color: transparent; background: var(--fx-fg-success); }
  .fx-captcha[data-state="verified"] .fx-captcha__box::before { content: "✓"; }
  .fx-captcha[data-state="verified"] .fx-captcha__check { cursor: default; }
  /* Xato / muddati tugagan: chegara qizil, quti ichida belgi, pastda matn */
  .fx-captcha[data-state="error"] { border-color: var(--fx-border-color-error); }
  .fx-captcha[data-state="error"] .fx-captcha__box { border-color: var(--fx-border-color-error); color: var(--fx-text-error); }
  .fx-captcha[data-state="error"] .fx-captcha__box::before { content: "!"; }
  .fx-captcha[data-state="error"] .fx-captcha__msg { color: var(--fx-text-error); }
  .fx-captcha[data-state="expired"] .fx-captcha__box { color: var(--fx-text-secondary); }
  .fx-captcha[data-state="expired"] .fx-captcha__box::before { content: "⟳"; }
  /* Koʻrinmas rejim (Turnstile invisible): faqat brend qatori va xabar */
  .fx-captcha[data-mode="invisible"] { grid-template-columns: minmax(0, 1fr); background: transparent; border-style: dashed; }
  .fx-captcha[data-mode="invisible"] .fx-captcha__brand { justify-items: start; text-align: start; }
  .fx-captcha[data-size="compact"] { grid-template-columns: minmax(0, 1fr); inline-size: auto; justify-self: start; }
  .fx-captcha[data-size="compact"] .fx-captcha__brand { justify-items: start; text-align: start; }
  .fx-captcha[aria-disabled="true"] { opacity: 0.6; pointer-events: none; }
  @media (prefers-reduced-motion: reduce) { .fx-captcha[data-state="loading"] .fx-captcha__box { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
  @media (forced-colors: active) { .fx-captcha__box { border-color: ButtonText; } }
}

/* card */
@layer fx.components {
  .fx-card {
    display: grid;
    gap: var(--fx-space-4);
    padding: var(--fx-space-5);
    background: var(--fx-bg-surface);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    box-shadow: var(--fx-shadow-sm);
    transition: border-radius var(--fx-motion-base) var(--fx-ease-standard), box-shadow var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-card__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-card__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-card[data-variant="raised"] { box-shadow: var(--fx-shadow-md); }
  /* Bosiladigan karta: hover’da koʻtariladi (faqat expressive — knob), bosilganda botadi */
  :is(a.fx-card, .fx-card[data-interactive]) { transition: border-radius var(--fx-motion-base) var(--fx-ease-standard), box-shadow var(--fx-motion-base) var(--fx-ease-standard), translate var(--fx-motion-base) var(--fx-ease-enter), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  :is(a.fx-card, .fx-card[data-interactive]):hover { translate: 0 calc(var(--fx-motion-lift) * var(--fx-knob-motion-lift)); box-shadow: var(--fx-shadow-md); }
  :is(a.fx-card, .fx-card[data-interactive]):active { scale: calc(1 - (1 - var(--fx-motion-press)) / 3); }

  /* Anatomiya: sarlavha qatori, media, tana, amallar, pastki qator. Karta ichki oraliqni oʻzi beradi; media chetga yetadi. */
  .fx-card__header { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-card__heading { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; }
  .fx-card__heading > .fx-card__title { overflow-wrap: anywhere; }
  .fx-card__media { overflow: hidden; margin: calc(var(--fx-space-5) * -1) calc(var(--fx-space-5) * -1) 0; border-start-start-radius: inherit; border-start-end-radius: inherit; background: var(--fx-bg-muted); }
  .fx-card__media > :is(img, video, svg) { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-card__body { display: grid; gap: var(--fx-space-3); min-inline-size: 0; align-content: start; }
  .fx-card__footer { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); padding-block-start: var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-card__actions { display: flex; align-items: center; gap: var(--fx-space-2); flex-wrap: wrap; }
  /* Gorizontal: media chapda, tana oʻngda */
  @media (min-width: 40em) {
    .fx-card[data-layout="horizontal"] { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); align-items: stretch; }
    .fx-card[data-layout="horizontal"] > .fx-card__media { margin: calc(var(--fx-space-5) * -1) 0 calc(var(--fx-space-5) * -1) calc(var(--fx-space-5) * -1); border-radius: 0; border-start-start-radius: inherit; border-end-start-radius: inherit; }
  }
  /* Ixcham: oraliq kichik */
  .fx-card[data-density="compact"] { gap: var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); }
  .fx-card[data-density="compact"] > .fx-card__media { margin: calc(var(--fx-space-3) * -1) calc(var(--fx-space-4) * -1) 0; }
  .fx-card[data-density="compact"] .fx-card__title { font-size: var(--fx-font-size-md); }
  .fx-card[data-density="compact"] .fx-card__footer { padding-block-start: var(--fx-space-3); }
  /* Tanlanadigan: butun karta belgilash maydoni (yorliq), ichida .fx-check; tanlangan — qalin chegara + belgi koʻrinadi */
  .fx-card[data-selectable] { position: relative; cursor: pointer; }
  .fx-card[data-selectable] .fx-card__check { position: absolute; inset-block-start: var(--fx-space-3); inset-inline-end: var(--fx-space-3); z-index: 1; }
  .fx-card[data-selectable]:hover { border-color: var(--fx-border-color-strong); }
  .fx-card[data-selectable]:has(input:checked) { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); }
  .fx-card[data-selectable]:has(input:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-card[data-selectable]:has(input:disabled) { cursor: not-allowed; opacity: 0.6; }
  /* ---- Kengaytma (2.63–2.71): choʻzilgan havola, aria-pressed, variantlar, yigʻiladigan, yuklanish, jadval kartasi, well ---- */
  /* Butun karta bitta havola: sarlavhadagi .fx-card__link ::after bilan butun kartani qoplaydi; ichidagi tugma/havolalar ustida qoladi */
  .fx-card[data-stretched] { position: relative; transition: border-radius var(--fx-motion-base) var(--fx-ease-standard), box-shadow var(--fx-motion-base) var(--fx-ease-standard), translate var(--fx-motion-base) var(--fx-ease-enter), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-card__link { color: inherit; text-decoration: none; }
  .fx-card__link::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }
  .fx-card__link:focus-visible { outline: none; }
  .fx-card[data-stretched]:has(.fx-card__link:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-card[data-stretched]:hover { translate: 0 calc(var(--fx-motion-lift) * var(--fx-knob-motion-lift)); box-shadow: var(--fx-shadow-md); }
  .fx-card[data-stretched]:active { scale: calc(1 - (1 - var(--fx-motion-press)) / 3); }
  .fx-card[data-stretched] :is(button, a:not(.fx-card__link), input, select, label, summary) { position: relative; z-index: 1; }
  /* Tanlanadigan karta: aria-pressed (tugma/rolli karta), input oʻrniga */
  .fx-card[aria-pressed] { cursor: pointer; text-align: start; font: inherit; color: inherit; }
  .fx-card[aria-pressed]:hover { border-color: var(--fx-border-color-strong); }
  .fx-card[aria-pressed="true"] { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); }
  .fx-card[aria-pressed]:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-card[aria-pressed]:active { scale: calc(1 - (1 - var(--fx-motion-press)) / 3); }
  /* Variantlar: outline (faqat chiziq), filled (tekis fon), ghost (yuzasiz) */
  .fx-card[data-variant="outline"] { box-shadow: none; border-color: var(--fx-border-color-default); }
  .fx-card[data-variant="filled"] { box-shadow: none; border-color: transparent; background: var(--fx-bg-muted); }
  .fx-card[data-variant="ghost"] { box-shadow: none; border-color: transparent; background: transparent; }
  /* Yigʻiladigan karta: <details class="fx-card"> + <summary class="fx-card__summary"> */
  details.fx-card { align-content: start; }
  .fx-card__summary { display: flex; align-items: center; gap: var(--fx-space-3); cursor: pointer; list-style: none; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-card__summary::-webkit-details-marker { display: none; }
  .fx-card__summary::after { content: ""; flex: none; margin-inline-start: auto; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0.55; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; rotate: -90deg; transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  details.fx-card[open] > .fx-card__summary::after { rotate: 0deg; }
  .fx-card__summary:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  @supports (interpolate-size: allow-keywords) {
    details.fx-card { interpolate-size: allow-keywords; }
    details.fx-card::details-content { block-size: 0; overflow: clip; transition: block-size var(--fx-motion-base) var(--fx-ease-standard), content-visibility var(--fx-motion-base) allow-discrete; }
    details.fx-card[open]::details-content { block-size: auto; }
  }
  /* Yuklanish: yuqorida puls qiluvchi chiziq, ichidagi bosishlar toʻxtaydi */
  .fx-card[aria-busy="true"] { position: relative; cursor: progress; }
  .fx-card[aria-busy="true"]::after { content: ""; position: absolute; inset-block-start: 0; inset-inline: 0; block-size: var(--fx-border-width-focus); border-start-start-radius: inherit; border-start-end-radius: inherit; background: var(--fx-bg-brand-solid); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-card[aria-busy="true"] > :not(.fx-card__header) { pointer-events: none; }
  @media (prefers-reduced-motion: reduce) { .fx-card[aria-busy="true"]::after { animation: none; } }
  /* Jadval kartasi: boshi + jadval + pastki (sahifalash); chetlarigacha */
  .fx-card[data-flush] { gap: 0; padding: 0; overflow: clip; }
  .fx-card[data-flush] > :is(.fx-card__header, .fx-card__footer) { padding: var(--fx-space-4) var(--fx-space-5); }
  .fx-card[data-flush] > .fx-card__header { border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-card[data-flush] > .fx-card__footer { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-card[data-flush] > .fx-card__media { margin: 0; }
  /* Well (karta ichidagi ichki yuza): sarlavha ostidagi kod, xulosa, eslatma */
  .fx-card__well { padding: var(--fx-space-4); border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); }
  @media (forced-colors: active) { .fx-card { border-color: CanvasText; } .fx-card[aria-pressed="true"], .fx-card[data-selectable]:has(input:checked) { border-color: Highlight; outline: var(--fx-border-width-focus) solid Highlight; } }
}

/* cardstack */
@layer fx.components {
  /* Kartalar dastasi (4.80): ustma-ust kartalar, oldingisi toʻliq, orqadagilari biroz yuqorida va kichikroq koʻrinadi; avtomatik
     (data-autoplay, ms) yoki tugmalar/← → bilan almashadi — mijozlar fikri, yangiliklar. Chuqurlik — data-depth (foxui.js beradi;
     JS boʻlmasa birinchi karta oldinda, qolganlari nth-child bilan orqada). Orqadagi kartalar inert. Avtomatik almashish faqat koʻrinishda,
     hover/fokusda toʻxtaydi, reduced-motion’da oʻchadi (WCAG 2.2.2). */
  .fx-cardstack { display: grid; gap: var(--fx-space-4); justify-items: center; min-inline-size: 0; }
  .fx-cardstack__list { display: grid; inline-size: min(100%, calc(var(--fx-space-12) * 10)); margin: 0; padding: calc(var(--fx-space-6) + var(--fx-space-1)) 0 0; list-style: none; }
  .fx-cardstack__card {
    --_d: 3;
    grid-area: 1 / 1;
    display: grid;
    align-content: start;
    gap: var(--fx-space-3);
    padding: var(--fx-space-6);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-md);
    transform-origin: 50% 0;
    translate: 0 calc(var(--_d) * var(--fx-space-3) * -1);
    scale: calc(1 - var(--_d) * 0.05);
    opacity: calc(1 - var(--_d) * 0.22);
    z-index: calc(10 - var(--_d));
    transition: translate var(--fx-motion-slow) var(--fx-ease-emphasized), scale var(--fx-motion-slow) var(--fx-ease-emphasized), opacity var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-cardstack__card:nth-child(1) { --_d: 0; }
  .fx-cardstack__card:nth-child(2) { --_d: 1; }
  .fx-cardstack__card:nth-child(3) { --_d: 2; }
  .fx-cardstack__card[data-depth="0"] { --_d: 0; }
  .fx-cardstack__card[data-depth="1"] { --_d: 1; }
  .fx-cardstack__card[data-depth="2"] { --_d: 2; }
  .fx-cardstack__card[data-depth="3"] { --_d: 3; opacity: 0; }
  .fx-cardstack__card:not(:nth-child(-n + 3)):not([data-depth]) { opacity: 0; }
  .fx-cardstack__card[data-leaving] { translate: 0 calc(var(--fx-space-8)); opacity: 0; z-index: 11; transition-duration: var(--fx-motion-exit-base); }
  .fx-cardstack__quote { margin: 0; font-size: var(--fx-font-size-md); line-height: var(--fx-line-height-relaxed); }
  .fx-cardstack__author { display: flex; align-items: center; gap: var(--fx-space-3); font-size: var(--fx-font-size-sm); }
  .fx-cardstack__author small { display: block; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-cardstack__nav { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-cardstack__count { min-inline-size: calc(var(--fx-space-12) * 1.2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; text-align: center; }
  @media (forced-colors: active) { .fx-cardstack__card { border-color: CanvasText; } }
}

/* careers */
@layer fx.components {
  /* Karyera sahifasi (4.177, naqsh): sarlavha, nega biz (afzalliklar toʻri), boʻlim filtri (chip’lar — havola yoki
     aria-pressed tugma) va vakansiyalar roʻyxati: har qator — lavozim (havola butun qatorni bosiladigan qiladi), boʻlim,
     shahar, ish turi, maosh oraligʻi va «→». Ochiq vakansiya boʻlmasa — .fx-careers__empty (obuna taklifi bilan).
     Boʻlimlar boʻyicha guruh: .fx-careers__group + h3. data-variant: list (standart — chiziqli qatorlar) · cards. */
  .fx-careers { display: grid; gap: var(--fx-space-10); }
  .fx-careers__head { display: grid; justify-items: center; gap: var(--fx-space-3); max-inline-size: calc(var(--fx-dialog-width) * 1.4); margin-inline: auto; text-align: center; }
  .fx-careers__eyebrow { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-careers__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.02em; text-wrap: balance; color: var(--fx-text-primary); }
  .fx-careers__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-careers__perks { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-space-12) * 5)), 1fr)); gap: var(--fx-space-4); margin: 0; padding: 0; list-style: none; }
  .fx-careers__perk { display: grid; gap: var(--fx-space-1); padding: var(--fx-space-5); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-careers__perk > strong { color: var(--fx-text-primary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-careers__filters { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-careers__groups { display: grid; gap: var(--fx-space-8); inline-size: 100%; max-inline-size: calc(var(--fx-dialog-width) * 2); margin-inline: auto; }
  .fx-careers__group { display: grid; gap: var(--fx-space-2); }
  .fx-careers__group-title { display: flex; align-items: baseline; gap: var(--fx-space-2); margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-careers__group-count { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-regular); font-variant-numeric: tabular-nums; }
  .fx-careers__list { display: grid; margin: 0; padding: 0; list-style: none; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-careers__job {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--fx-space-1) var(--fx-space-6);
    padding: var(--fx-space-4) var(--fx-space-3);
    border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-careers__job:hover { background: var(--fx-bg-subtle); }
  .fx-careers__job:has(.fx-careers__link:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); border-radius: var(--fx-radius-control); }
  .fx-careers__job-title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  /* lavozim havolasi butun qatorni bosiladigan qiladi (::after qoplama) */
  .fx-careers__link { color: var(--fx-text-primary); text-decoration: none; outline: none; }
  .fx-careers__link::after { content: ""; position: absolute; inset: 0; }
  .fx-careers__meta { grid-column: 1; display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1) var(--fx-space-3); margin: 0; padding: 0; list-style: none; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-careers__meta > li + li::before { content: "·"; margin-inline-end: var(--fx-space-3); color: var(--fx-text-tertiary); }
  .fx-careers__salary { grid-column: 2; grid-row: 1 / span 2; display: flex; align-items: center; gap: var(--fx-space-3); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-careers__salary::after { content: "→"; color: var(--fx-text-tertiary); transition: translate var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-careers__job:hover .fx-careers__salary::after { translate: var(--fx-motion-shift-sm) 0; color: var(--fx-text-primary); }
  .fx-careers__job[data-new] .fx-careers__job-title::after { content: "Yangi"; margin-inline-start: var(--fx-space-2); padding: 0 var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); vertical-align: middle; }
  .fx-careers__empty { display: grid; justify-items: center; gap: var(--fx-space-3); padding: var(--fx-space-10) var(--fx-space-6); border: var(--fx-border-width-default) dashed var(--fx-border-color-strong); border-radius: var(--fx-radius-surface); text-align: center; }
  .fx-careers__empty[hidden] { display: none; }
  .fx-careers__empty > p { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-careers__empty > strong { font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }

  /* cards: har vakansiya alohida karta, toʻrda */
  .fx-careers[data-variant="cards"] .fx-careers__list { grid-template-columns: repeat(auto-fill, minmax(min(100%, calc(var(--fx-space-12) * 6)), 1fr)); gap: var(--fx-space-3); border: 0; }
  .fx-careers[data-variant="cards"] .fx-careers__job { grid-template-columns: minmax(0, 1fr); align-content: start; padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-careers[data-variant="cards"] .fx-careers__job:hover { border-color: var(--fx-border-color-strong); box-shadow: var(--fx-shadow-sm); }
  .fx-careers[data-variant="cards"] .fx-careers__salary { grid-column: 1; grid-row: auto; justify-content: space-between; margin-block-start: var(--fx-space-2); }
  @media (max-width: 40em) {
    .fx-careers__job { grid-template-columns: minmax(0, 1fr); }
    .fx-careers__salary { grid-column: 1; grid-row: auto; justify-content: space-between; }
  }
}

/* carousel */
@layer fx.components {
  /* Karusel (APG carousel): scroll-snap — barmoq bilan surish brauzerning oʻzida; tugmalar, nuqtalar (tab), avto-oʻynatish va pauza xulqda. */
  .fx-carousel { display: grid; gap: var(--fx-space-3); }
  .fx-carousel__viewport { position: relative; display: flex; overflow-x: auto; scroll-snap-type: x mandatory; overscroll-behavior-x: contain; scrollbar-width: none; border-radius: var(--fx-radius-surface); }
  .fx-carousel__viewport::-webkit-scrollbar { display: none; }
  @media (prefers-reduced-motion: no-preference) { .fx-carousel__viewport { scroll-behavior: smooth; } }
  .fx-carousel__viewport:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-carousel__slide { flex: 0 0 100%; min-inline-size: 0; scroll-snap-align: start; }
  .fx-carousel[data-peek] .fx-carousel__slide { flex-basis: 84%; padding-inline-end: var(--fx-space-3); }
  .fx-carousel__controls { display: flex; align-items: center; justify-content: center; gap: var(--fx-space-3); }
  .fx-carousel__btn { display: inline-grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-circle); background: var(--fx-bg-surface); color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-md); line-height: 1; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-carousel__btn:hover:not(:disabled) { background: var(--fx-bg-muted); }
  .fx-carousel__btn:active:not(:disabled) { scale: var(--fx-motion-press); }
  .fx-carousel__btn:disabled { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-carousel__btn:focus-visible, .fx-carousel__dot:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-carousel__dots { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-carousel__dot { position: relative; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); cursor: pointer; transition: inline-size var(--fx-motion-base) var(--fx-ease-emphasized), background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-carousel__dot::after { content: ""; position: absolute; inset: calc(var(--fx-space-2) * -1); }
  .fx-carousel__dot[aria-selected="true"] { inline-size: calc(var(--fx-size-status-dot) * 3); background: var(--fx-bg-brand-solid); }
  .fx-carousel__play { inline-size: auto; padding-inline: var(--fx-space-3); border-radius: var(--fx-radius-control); font-size: var(--fx-font-size-xs); }
  /* Kichik rasmlar navigatsiyasi (4.159): pastda gorizontal qator, joriysi qalin chegara + toʻliq yorqinlik (boshqalari xira) — tablist, ← → Home End */
  .fx-carousel__thumbs { display: flex; gap: var(--fx-space-2); overflow-x: auto; padding: var(--fx-space-1); scrollbar-width: none; }
  .fx-carousel__thumbs::-webkit-scrollbar { display: none; }
  .fx-carousel__thumb { position: relative; flex: 0 0 calc(var(--fx-control-h-lg) * 1.6); aspect-ratio: 4 / 3; padding: 0; border: 0; border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); overflow: hidden; cursor: pointer; opacity: 0.6; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-carousel__thumb > img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-carousel__thumb::after { content: ""; position: absolute; inset: 0; border: var(--fx-border-width-focus) solid transparent; border-radius: inherit; transition: border-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-carousel__thumb:hover { opacity: 0.85; }
  .fx-carousel__thumb[aria-selected="true"] { opacity: 1; }
  .fx-carousel__thumb[aria-selected="true"]::after { border-color: var(--fx-text-primary); }
  .fx-carousel__thumb:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* M3 turlari (4-toʻlqin 4.160): data-layout="multi" — bir vaqtda bir nechta slayd (katta + oʻrta + kichik), «hero» — bitta katta slayd va
     yonida tor koʻrinish, «full» — chetdan chetga (ekran eni). Chekkaga yaqinlashgan slayd «torayadi» — mazmuni koʻrinadigan qismga suriladi (scroll-driven: animation-timeline: view()),
     qoʻllanmasa yoki harakat kamaytirilsa — oddiy oʻlcham. Slaydlar orasida kichik oraliq, har biri oʻz yoyi bilan (M3 «item» shakli). */
  .fx-carousel:is([data-layout="multi"], [data-layout="hero"]) .fx-carousel__viewport { gap: var(--fx-space-2); border-radius: 0; }
  .fx-carousel:is([data-layout="multi"], [data-layout="hero"]) .fx-carousel__slide { overflow: clip; border-radius: var(--fx-radius-surface); }
  .fx-carousel[data-layout="multi"] .fx-carousel__slide { flex-basis: calc((100% - var(--fx-space-2) * 2) * 0.42); }
  .fx-carousel[data-layout="hero"] .fx-carousel__slide { flex-basis: calc(100% - var(--fx-space-2) - var(--fx-control-h-lg) * 1.4); }
  .fx-carousel:is([data-layout="multi"], [data-layout="hero"]) .fx-carousel__slide :is(.fx-image__frame, img) { border-radius: 0; }
  .fx-carousel[data-layout="full"] .fx-carousel__viewport { margin-inline: calc(50% - 50vw); border-radius: 0; }
  .fx-carousel[data-layout="full"] .fx-carousel__slide :is(.fx-image__frame, img) { border-radius: 0; }
  @supports (animation-timeline: view()) {
    @media (prefers-reduced-motion: no-preference) {
      .fx-carousel:is([data-layout="multi"], [data-layout="hero"]) .fx-carousel__slide > * { animation: fx-carousel-narrow linear both; animation-timeline: view(inline); animation-range: cover 0% cover 100%; }
      .fx-carousel:is([data-layout="multi"], [data-layout="hero"]):dir(rtl) .fx-carousel__slide > * { animation-name: fx-carousel-narrow-rtl; }
    }
  }
  /* Chekkada qisman koʻringan slayd mazmuni koʻrinadigan qismi markaziga suriladi (M3: mazmun «niqob» ichida markazda qoladi) —
     slayd tor koʻrinadi, lekin rasmning asosiy qismi baribir koʻrinadi; slaydlar orasidagi oraliq oʻzgarmaydi */
  @keyframes fx-carousel-narrow {
    0% { translate: -30% 0; }
    25%, 75% { translate: 0 0; }
    100% { translate: 30% 0; }
  }
  @keyframes fx-carousel-narrow-rtl {
    0% { translate: 30% 0; }
    25%, 75% { translate: 0 0; }
    100% { translate: -30% 0; }
  }
}

/* cascader */
@layer fx.components {
  /* Kaskad tanlov (#29): viloyat → tuman → mahalla kabi ichma-ich tanlov. Tugma bosilsa ustunlar ketma-ket ochiladi (menyu naqshi), oxirgi bandni tanlash yoʻlni yozadi. */
  .fx-cascader { position: relative; display: inline-block; inline-size: min(100%, var(--fx-popover-width)); }
  .fx-cascader__trigger {
    display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-2);
    inline-size: 100%; box-sizing: border-box; block-size: var(--fx-control-h-md); padding-inline: var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-control);
    background: var(--fx-bg-field); color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-md); text-align: start; cursor: pointer;
  }
  .fx-cascader__trigger:hover { background: color-mix(in oklab, var(--fx-text-primary) calc(var(--fx-knob-field-fill) * 6%), var(--fx-bg-field)); }
  .fx-cascader__trigger:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-cascader__value { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-cascader__value[data-empty] { color: var(--fx-text-tertiary); }
  .fx-cascader__trigger::after, .fx-cascader__item[aria-haspopup]::after {
    content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0.55;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
  }
  .fx-cascader__item[aria-haspopup]::after { rotate: -90deg; }
  .fx-cascader__trigger[aria-expanded="true"]::after { rotate: 180deg; }
  .fx-cascader__popup { position: absolute; inset-block-start: calc(100% + var(--fx-space-1)); inset-inline-start: 0; z-index: 20; }
  .fx-cascader__popup[hidden] { display: none; }
  .fx-cascader__list {
    display: grid; gap: calc(var(--fx-space-1) / 2); margin: 0; padding: var(--fx-space-1); list-style: none;
    inline-size: max-content; min-inline-size: calc(var(--fx-popover-width) * 0.6); box-sizing: border-box;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg);
  }
  .fx-cascader__list > li { position: relative; }
  .fx-cascader__list .fx-cascader__list { position: absolute; inset-block-start: calc(var(--fx-space-1) * -1 - var(--fx-border-width-default)); inset-inline-start: calc(100% + var(--fx-space-1)); display: none; }
  .fx-cascader__list > li[data-open] > .fx-cascader__list { display: grid; }
  .fx-cascader__item {
    display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); inline-size: 100%; box-sizing: border-box;
    min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); padding: 0 var(--fx-space-3); border: 0; border-radius: var(--fx-radius-nav);
    background: transparent; color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-sm); text-align: start; cursor: pointer;
  }
  .fx-cascader__item:hover, li[data-open] > .fx-cascader__item { background: var(--fx-bg-muted); }
  .fx-cascader__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-cascader__item[aria-checked="true"] { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-medium); }
  .fx-cascader[data-invalid] .fx-cascader__trigger { border-color: var(--fx-border-color-error); }
}

/* changelogfeed */
@layer fx.components {
  /* Changelog lentasi (4.179, naqsh): har mijoz saytiga «Nima yangi» sahifasi. Har yozuv — chapda versiya va sana
     (keng ekranda yopishqoq), oʻngda sarlavha, ixtiyoriy rasm va oʻzgarishlar roʻyxati. Har oʻzgarish turi soʻz + belgi bilan
     (faqat rang emas): data-type="new" (Yangi, +) · "improved" (Yaxshilandi, ↑) · "fixed" (Tuzatildi, ✓) · "breaking" (Muhim, !).
     Yozuvlar orasida vertikal chiziq va nuqta (vaqt oʻqi). Tepada obuna (RSS, Telegram) havolalari. data-density: comfortable · compact. */
  .fx-changelogfeed { display: grid; gap: var(--fx-space-8); }
  .fx-changelogfeed__head { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: var(--fx-space-4) var(--fx-space-8); padding-block-end: var(--fx-space-6); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-changelogfeed__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.02em; color: var(--fx-text-primary); }
  .fx-changelogfeed__text { margin: var(--fx-space-2) 0 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); }
  .fx-changelogfeed__subscribe { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); }
  .fx-changelogfeed__list { display: grid; margin: 0; padding: 0; list-style: none; }
  .fx-changelogfeed__entry { position: relative; display: grid; grid-template-columns: minmax(0, calc(var(--fx-space-12) * 3.5)) minmax(0, 1fr); gap: var(--fx-space-4) var(--fx-space-10); padding-block-end: var(--fx-space-12); }
  /* vaqt oʻqi: chiziq va nuqta ikki ustun orasida */
  .fx-changelogfeed__entry::before { content: ""; position: absolute; inset-block: var(--fx-space-3) 0; inset-inline-start: calc(var(--fx-space-12) * 3.5 + var(--fx-space-5)); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-changelogfeed__entry:last-child::before { display: none; }
  .fx-changelogfeed__entry::after { content: ""; position: absolute; inset-block-start: var(--fx-space-2); inset-inline-start: calc(var(--fx-space-12) * 3.5 + var(--fx-space-5) - var(--fx-space-1)); inline-size: var(--fx-space-2); block-size: var(--fx-space-2); border-radius: var(--fx-radius-circle); box-sizing: border-box; border: var(--fx-border-width-focus) solid var(--fx-border-color-strong); background: var(--fx-bg-surface); }
  .fx-changelogfeed__entry[data-latest]::after { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-solid); outline: var(--fx-border-width-focus) solid var(--fx-bg-brand-subtle); }
  .fx-changelogfeed__when { position: sticky; inset-block-start: calc(var(--fx-size-topbar) + var(--fx-space-6)); align-self: start; display: grid; gap: var(--fx-space-1); }
  .fx-changelogfeed__version { margin: 0; font-family: var(--fx-font-family-numeric); font-size-adjust: var(--fx-font-adjust-numeric); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; color: var(--fx-text-primary); }
  .fx-changelogfeed__date { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-changelogfeed__body { display: grid; align-content: start; gap: var(--fx-space-4); min-inline-size: 0; }
  .fx-changelogfeed__entry-title { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-snug); color: var(--fx-text-primary); scroll-margin-block-start: calc(var(--fx-size-topbar) + var(--fx-space-4)); }
  .fx-changelogfeed__entry-title > a { color: inherit; text-decoration: none; }
  .fx-changelogfeed__entry-title > a:hover { text-decoration: underline; text-underline-offset: 0.2em; }
  .fx-changelogfeed__entry-title > a:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-changelogfeed__summary { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-changelogfeed__media { margin: 0; overflow: hidden; aspect-ratio: 12 / 5; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); }
  .fx-changelogfeed__media > img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-changelogfeed__changes { display: grid; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-changelogfeed__change { display: grid; grid-template-columns: calc(var(--fx-space-12) * 2.2) minmax(0, 1fr); align-items: baseline; gap: var(--fx-space-3); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); line-height: var(--fx-line-height-normal); }
  .fx-changelogfeed__type { justify-self: start; display: inline-flex; align-items: center; gap: var(--fx-space-1); padding: 0 var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); white-space: nowrap; }
  .fx-changelogfeed__type::before { font-weight: var(--fx-font-weight-semibold); }
  .fx-changelogfeed__change[data-type="new"] .fx-changelogfeed__type { background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); }
  .fx-changelogfeed__change[data-type="new"] .fx-changelogfeed__type::before { content: "+"; }
  .fx-changelogfeed__change[data-type="improved"] .fx-changelogfeed__type { background: var(--fx-bg-info-subtle); color: var(--fx-fg-info); }
  .fx-changelogfeed__change[data-type="improved"] .fx-changelogfeed__type::before { content: "↑"; }
  .fx-changelogfeed__change[data-type="fixed"] .fx-changelogfeed__type { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  .fx-changelogfeed__change[data-type="fixed"] .fx-changelogfeed__type::before { content: "✓"; }
  .fx-changelogfeed__change[data-type="breaking"] .fx-changelogfeed__type { background: var(--fx-bg-warning-subtle); color: var(--fx-text-primary); outline: var(--fx-border-width-default) solid var(--fx-fg-warning); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-changelogfeed__change[data-type="breaking"] .fx-changelogfeed__type::before { content: "!"; color: var(--fx-fg-warning); }
  .fx-changelogfeed__change code { font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: 0.92em; padding: 0 var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-subtle); }
  .fx-changelogfeed__more { justify-self: center; }
  .fx-changelogfeed[data-density="compact"] .fx-changelogfeed__entry { padding-block-end: var(--fx-space-8); }
  .fx-changelogfeed[data-density="compact"] .fx-changelogfeed__media { display: none; }
  @media (max-width: 44em) {
    .fx-changelogfeed__entry { grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-3); padding-inline-start: var(--fx-space-6); }
    .fx-changelogfeed__entry::before { inset-inline-start: var(--fx-space-1); }
    .fx-changelogfeed__entry::after { inset-inline-start: 0; }
    .fx-changelogfeed__when { position: static; display: flex; align-items: baseline; gap: var(--fx-space-3); }
    .fx-changelogfeed__change { grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-1); }
  }
}

/* chart */
@layer fx.components {
  /* Grafik (WDS «Grafiklar»): rollar 60/30/10 — siyoh · brend · aksent; xavf — yagona qizil; kulrang — faqat toʻr va kontekst.
     Ustun ≤ 24 px, yoy faqat uchida; chiziq 2 px; nuqta 8 px + fon halqasi faqat oxirida va hover’da; hover’da qolgani 45 %.
     Kartada va grafikda soya yoʻq. Chizish — foxui.js (data-fx-chart), maʼlumot — ichidagi jadval. */
  .fx-chart { position: relative; display: grid; align-content: start; gap: var(--fx-space-3); margin: 0; min-inline-size: 0; color: var(--fx-text-primary); }
  .fx-chart > figcaption { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--fx-space-1) var(--fx-space-3); }
  .fx-chart__title { font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-chart__sub { flex-basis: 100%; order: 3; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-chart__toggle { margin-inline-start: auto; padding: var(--fx-space-1) var(--fx-space-2); border: 0; border-radius: var(--fx-radius-control); background: none; color: var(--fx-text-tertiary); font: inherit; font-size: var(--fx-font-size-xs); cursor: pointer; }
  .fx-chart__toggle:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-chart__toggle:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: 1px; }
  .fx-chart__plot { position: relative; min-inline-size: 0; }
  .fx-chart__plot > svg { display: block; inline-size: 100%; block-size: auto; overflow: visible; font-family: var(--fx-font-family-sans); font-size: calc(var(--fx-font-size-xs) * 0.92); font-variant-numeric: tabular-nums; }
  .fx-chart__plot > svg:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-space-1); border-radius: var(--fx-radius-control); }

  /* rollar */
  .fx-chart [data-role] { --_c: var(--fx-viz-brand); }
  .fx-chart [data-role="ink"] { --_c: var(--fx-viz-ink); }
  .fx-chart [data-role="accent"] { --_c: var(--fx-viz-accent); }
  .fx-chart [data-role="risk"] { --_c: var(--fx-viz-risk); }
  .fx-chart [data-role="context"] { --_c: var(--fx-viz-context); }
  .fx-chart__mark { fill: var(--_c); transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-chart__line { fill: none; stroke: var(--_c); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
  .fx-chart__line[data-dash] { stroke-width: 1.5; stroke-dasharray: 4 4; }
  .fx-chart__stop { stop-color: var(--_c); }
  .fx-chart__dot { fill: var(--_c); stroke: var(--fx-bg-surface); stroke-width: 2; opacity: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-chart__dot:is([data-last], [data-on]) { opacity: 1; }
  .fx-chart svg[data-active] .fx-chart__mark:not([data-on]) { opacity: 0.45; }
  .fx-chart__grid line { stroke: var(--fx-viz-grid); stroke-width: 1; }
  .fx-chart__grid line[data-zero] { stroke: var(--fx-border-color-strong); }
  .fx-chart__grid text, .fx-chart__cat { fill: var(--fx-text-tertiary); }
  .fx-chart__total { fill: var(--fx-text-primary); font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }

  /* kirish: ustun oʻsadi, chiziq chiziladi (harakat kamaytirilsa — yoʻq: --fx-motion-* = 0) */
  .fx-chart--enter .fx-chart__bar { animation: fx-chart-grow var(--fx-motion-slow) var(--fx-ease-emphasized) both; }
  .fx-chart--enter .fx-chart__line { stroke-dasharray: 1; animation: fx-chart-draw calc(var(--fx-motion-slow) * 2) var(--fx-ease-standard) both; }
  .fx-chart--enter .fx-chart__line[data-dash] { animation: none; stroke-dasharray: 4 4; }
  .fx-chart--enter :is(.fx-chart__area, .fx-chart__dot[data-last]) { animation: fx-fade-in var(--fx-motion-slow) var(--fx-ease-standard) both; }
  .fx-chart[data-type="hbar"] .fx-chart--enter .fx-chart__bar { animation-name: fx-chart-grow-x; }
  @keyframes fx-chart-grow { from { transform: scaleY(0); } }
  @keyframes fx-chart-grow-x { from { transform: scaleX(0); } }
  @keyframes fx-chart-draw { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }

  /* tooltip: avval qiymat (14/600), keyin nom (12) */
  .fx-chart__tip { position: absolute; z-index: 2; display: grid; gap: var(--fx-space-1); min-inline-size: max-content; padding: var(--fx-space-2) var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-md); pointer-events: none; }
  .fx-chart__tip-row { display: grid; grid-template-columns: auto 1fr; align-items: baseline; column-gap: var(--fx-space-2); }
  .fx-chart__tip-row::before { content: ""; grid-row: span 2; align-self: center; inline-size: var(--fx-space-2); block-size: var(--fx-space-2); border-radius: calc(var(--fx-radius-badge) / 3); background: var(--_c); }
  .fx-chart__tip-row b { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; }
  .fx-chart__tip-row span { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }

  /* legenda: 2+ seriyada */
  .fx-chart__legend { display: flex; flex-wrap: wrap; gap: var(--fx-space-1) var(--fx-space-4); margin: 0; padding: 0; list-style: none; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-chart__legend:empty { display: none; }
  .fx-chart__legend li { display: inline-flex; align-items: center; gap: var(--fx-space-2); }
  .fx-chart__legend li::before { content: ""; inline-size: var(--fx-space-2); block-size: var(--fx-space-2); border-radius: calc(var(--fx-radius-badge) / 3); background: var(--_c); }
  .fx-chart__legend b { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; }

  /* chiziqli oʻlchagich: nom → katta raqam → toʻliq endagi chiziq (halqa emas, WDS 11.10) */
  .fx-chart__gauges { display: grid; gap: var(--fx-space-4); }
  .fx-chart__gauge { display: grid; gap: var(--fx-space-1); }
  .fx-chart__gauge-name { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-chart__gauge-value { font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-variant-numeric: tabular-nums; line-height: 1.1; }
  .fx-chart__gauge-bar { position: relative; display: block; block-size: var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-viz-track); }
  .fx-chart__gauge-bar > i { display: block; block-size: 100%; border-radius: inherit; background: var(--_c); transition: inline-size var(--fx-motion-slow) var(--fx-ease-emphasized); }
  .fx-chart__gauge-bar > b { position: absolute; inset-block: calc(var(--fx-space-1) * -1); inline-size: 2px; translate: -1px 0; background: var(--fx-text-primary); }

  /* issiqlik xaritasi: bitta tus, 5 qadam, eng kichigi kulrang */
  .fx-chart__heat { display: grid; grid-template-columns: auto repeat(var(--_cols), minmax(var(--fx-space-8), 1fr)); gap: calc(var(--fx-space-1) / 2); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-chart__heat-h { padding: var(--fx-space-1) var(--fx-space-2); color: var(--fx-text-tertiary); white-space: nowrap; }
  .fx-chart__heat-col { text-align: center; }
  .fx-chart__heat-cell { display: grid; place-items: center; min-block-size: var(--fx-space-8); border-radius: calc(var(--fx-radius-badge) / 2); color: var(--fx-text-primary); }
  .fx-chart__heat-cell[data-step="0"] { background: var(--fx-viz-track); }
  .fx-chart__heat-cell[data-step="1"] { background: color-mix(in oklab, var(--fx-viz-brand) 25%, var(--fx-bg-surface)); }
  .fx-chart__heat-cell[data-step="2"] { background: color-mix(in oklab, var(--fx-viz-brand) 45%, var(--fx-bg-surface)); }
  .fx-chart__heat-cell[data-step="3"] { background: color-mix(in oklab, var(--fx-viz-brand) 70%, var(--fx-bg-surface)); color: var(--fx-text-on-brand); }
  .fx-chart__heat-cell[data-step="4"] { background: var(--fx-viz-brand); color: var(--fx-text-on-brand); }

  /* holatlar: boʻsh, yuklanish (aria-busy) */
  .fx-chart__empty { display: grid; place-items: center; min-block-size: calc(var(--fx-space-12) * 3); margin: 0; border: var(--fx-border-width-default) dashed var(--fx-border-color-default); border-radius: var(--fx-radius-control); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-chart[aria-busy="true"] .fx-chart__plot { min-block-size: calc(var(--fx-space-12) * 3); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); animation: fx-pulse calc(var(--fx-duration-pulse) * var(--fx-knob-motion)) ease-in-out infinite; }
  .fx-chart[aria-busy="true"] .fx-chart__plot > * { visibility: hidden; }
  .fx-chart[data-type="spark"] { gap: 0; }
}
@layer fx.components {
  /* tur boʻyicha joylashuv */
  .fx-chart:is([data-type="bar"], [data-type="hbar"], [data-type="line"]) .fx-chart__plot { min-block-size: calc(var(--fx-space-12) * 3); }
  .fx-chart[data-type="donut"] .fx-chart__plot { inline-size: min(100%, calc(var(--fx-space-12) * 5)); justify-self: center; }
  .fx-chart[data-type="share"] .fx-chart__legend { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-space-12) * 2), 1fr)); }
  .fx-chart:is([data-type="gauge"], [data-type="heatmap"]) .fx-chart__legend { display: none; }
  .fx-chart[data-type="heatmap"] .fx-chart__plot { overflow-x: auto; }
}
@layer fx.components {
  /* «Jadval» koʻrinishi */
  /* ekran oʻquvchi rejimida jadval kengligi sahifani kengaytirmasin (telefonda koʻp ustunli jadval) */
  .fx-chart__data.fx-sr-only { inline-size: 1px; table-layout: fixed; }
  .fx-chart__data { inline-size: 100%; border-collapse: collapse; font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-chart__data :is(th, td) { padding: var(--fx-space-2) var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); text-align: start; }
  .fx-chart__data td { text-align: end; }
  .fx-chart__data thead th { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
}
@layer fx.components {
  /* ---- 4-toʻlqin: maydon, voronka, maqsad chizigʻi va izoh, interaktiv legenda ---- */
  /* maydon (4.119): katta yuza — past toʻyinganlik; ustma-ust qatlamlar orasida sirt chizigʻi; ≤ 3 seriya, eng muhimi pastda */
  .fx-chart__band { fill: var(--_c); fill-opacity: 0.12; stroke: none; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-chart__band[data-stacked] { fill-opacity: 0.22; stroke: var(--fx-bg-surface); stroke-width: 1; }
  .fx-chart--enter .fx-chart__band { animation: fx-fade-in var(--fx-motion-slow) var(--fx-ease-standard) both; }
  .fx-chart:is([data-type="area"], [data-type="funnel"]) .fx-chart__plot { min-block-size: calc(var(--fx-space-12) * 3); }
  /* maqsad / chegara (4.125): yagona punktir turi; yorliq oʻng ustunda, siyohning ikkinchi darajasi */
  .fx-chart__ref line { stroke: var(--fx-text-secondary); stroke-width: 1; stroke-dasharray: 4 3; }
  .fx-chart__ref-label { fill: var(--fx-text-secondary); font-weight: var(--fx-font-weight-medium); }
  /* izoh: bitta callout, nuqtaga 1 px chiziq */
  .fx-chart__lead { stroke: var(--fx-text-tertiary); stroke-width: 1; }
  .fx-chart__note { fill: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  /* voronka (4.117): qiymat qalin, ulush xira; oʻtish foizi oraliqda, eng katta yoʻqotish — qizil + soʻz */
  .fx-chart__fval { fill: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-chart__fpct { fill: var(--fx-text-tertiary); font-weight: var(--fx-font-weight-regular); }
  .fx-chart__conv { fill: var(--fx-text-tertiary); }
  .fx-chart__conv[data-max] { fill: var(--fx-text-error); font-weight: var(--fx-font-weight-semibold); }
  .fx-chart[data-type="funnel"] .fx-chart--enter .fx-chart__bar { animation-name: fx-chart-grow-x; }
  /* interaktiv legenda (4.126): band — tugma, oʻchirilgani xira trek rangi va chizilgan matn */
  .fx-chart__legend-btn { display: inline-flex; align-items: center; min-block-size: var(--fx-size-min-target); margin-inline: calc(var(--fx-space-2) * -1); padding: 0 var(--fx-space-2); border: 0; border-radius: var(--fx-radius-badge); background: none; color: inherit; font: inherit; cursor: pointer; }
  .fx-chart__legend li:has(> .fx-chart__legend-btn) { gap: 0; }
  .fx-chart__legend li:has(> .fx-chart__legend-btn)::before { order: 0; margin-inline-end: var(--fx-space-1); }
  .fx-chart__legend li:has(> .fx-chart__legend-btn) { position: relative; padding-inline-start: 0; }
  .fx-chart__legend-btn:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-chart__legend-btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-chart__legend li[data-off] { color: var(--fx-text-tertiary); }
  .fx-chart__legend li[data-off]::before { background: var(--fx-viz-track); }
  .fx-chart__legend li[data-off] .fx-chart__legend-btn { text-decoration: line-through; }
}
@layer fx.components {
  /* ---- 5-toʻlqin: radar, nuqtali/pufakli, kombinatsiya, treemap, sharshara, sankey, bullet, zoom/brush ---- */
  .fx-chart:is([data-type="radar"], [data-type="scatter"], [data-type="combo"], [data-type="treemap"], [data-type="waterfall"], [data-type="sankey"]) .fx-chart__plot { min-block-size: calc(var(--fx-space-12) * 3); }
  .fx-chart[data-type="radar"] .fx-chart__plot { inline-size: min(100%, calc(var(--fx-space-12) * 11)); justify-self: center; }
  .fx-chart[data-type="bullet"] .fx-chart__plot { min-block-size: var(--fx-space-8); }
  .fx-chart__grid polygon { fill: none; stroke: var(--fx-viz-grid); stroke-width: 1; }
  .fx-chart__spoke { stroke: var(--fx-viz-grid); stroke-width: 1; }
  .fx-chart__axis-title { fill: var(--fx-text-tertiary); font-weight: var(--fx-font-weight-medium); }
  /* nuqtali / pufakli: koʻp nuqtada shaffoflik, ustma-ust tushganda sirt halqasi ajratadi; urgʻu — yonida nom */
  .fx-chart__pt { fill-opacity: 0.72; stroke: var(--fx-bg-surface); stroke-width: 1; }
  .fx-chart__pt[data-on] { fill-opacity: 1; stroke: var(--fx-text-primary); stroke-width: 2; }
  .fx-chart__pt-label { fill: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  /* treemap: katta yuzalar — pogʻonali past toʻyinganlik; toʻq katakda yorugʻ yozuv */
  .fx-chart__tile { stroke: none; }
  .fx-chart__tile[data-step="1"] { fill-opacity: 0.78; }
  .fx-chart__tile[data-step="2"] { fill-opacity: 0.56; }
  .fx-chart__tile[data-step="3"] { fill-opacity: 0.38; }
  .fx-chart__tile-label { fill: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); pointer-events: none; }
  .fx-chart__tile-label[data-on="dark"] { fill: var(--fx-bg-surface); }
  .fx-chart__tile-sub { font-weight: var(--fx-font-weight-regular); fill-opacity: 0.85; }
  /* sharshara: ustunlar orasida ingichka ulovchi chiziq; oʻzgarish yorligʻi belgisi bilan (+ / −) */
  .fx-chart__conn { stroke: var(--fx-text-tertiary); stroke-width: 1; }
  .fx-chart__wval { fill: var(--fx-text-secondary); font-weight: var(--fx-font-weight-medium); }
  /* sankey: oqim — yumshoq tasma; hover’da boshqalari xiralashadi */
  .fx-chart__link { fill: var(--_c); fill-opacity: 0.3; stroke: none; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), fill-opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-chart__link[data-on] { fill-opacity: 0.55; }
  .fx-chart svg[data-active] .fx-chart__link:not([data-on]) { opacity: 0.45; }
  .fx-chart__node { fill: var(--_c); }
  .fx-chart__node-label { fill: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); paint-order: stroke; stroke: var(--fx-bg-surface); stroke-width: 3px; stroke-linejoin: round; }
  .fx-chart--enter :is(.fx-chart__link, .fx-chart__pt, .fx-chart__tile) { animation: fx-fade-in var(--fx-motion-slow) var(--fx-ease-standard) both; }
  /* bullet: zonalar kulrang (toʻqi — past zona), fakt — ingichka ustun, reja — tik tayoqcha */
  .fx-chart__zone { fill: color-mix(in oklab, var(--fx-viz-context) 22%, var(--fx-bg-surface)); }
  .fx-chart__zone[data-step="0"] { fill: color-mix(in oklab, var(--fx-viz-context) 70%, var(--fx-bg-surface)); }
  .fx-chart__zone[data-step="1"] { fill: color-mix(in oklab, var(--fx-viz-context) 45%, var(--fx-bg-surface)); }
  .fx-chart__target { stroke: var(--fx-text-primary); stroke-width: 2.5; stroke-linecap: round; }
  .fx-chart[data-type="bullet"] .fx-chart--enter .fx-chart__bar { animation-name: fx-chart-grow-x; }
  /* zoom / brush: ostida mini-grafik, tanlangan oraliq oynasi va ikki tutqich (slider) */
  .fx-chart__brush { --_a: 0%; --_b: 100%; position: relative; block-size: var(--fx-space-10); margin-inline: var(--fx-space-3); touch-action: none; user-select: none; cursor: crosshair; }
  .fx-chart__brush-mini { display: block; inline-size: 100%; block-size: 100%; border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); }
  .fx-chart__brush-line { fill: none; stroke: var(--fx-viz-context); stroke-width: 1.5; vector-effect: non-scaling-stroke; }
  .fx-chart__brush-area { fill: var(--fx-viz-track); stroke: none; }
  .fx-chart__brush-win { position: absolute; inset-block: 0; left: var(--_a); inline-size: calc(var(--_b) - var(--_a)); border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-control); background: color-mix(in oklab, var(--fx-viz-brand) 14%, transparent); cursor: grab; }
  .fx-chart__brush-win:active { cursor: grabbing; }
  .fx-chart__brush-handle { position: absolute; inset-block: var(--fx-space-2); inline-size: var(--fx-space-2); translate: -50% 0; border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-badge); background: var(--fx-bg-surface); cursor: ew-resize; }
  .fx-chart__brush-handle::before { content: ""; position: absolute; inset: calc(var(--fx-space-2) * -1); }
  .fx-chart__brush-handle[data-edge="0"] { left: var(--_a); }
  .fx-chart__brush-handle[data-edge="1"] { left: var(--_b); }
  .fx-chart__brush-handle:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  @media (forced-colors: active) { .fx-chart__brush-win, .fx-chart__brush-handle { border-color: CanvasText; } .fx-chart__zone { fill: Canvas; stroke: GrayText; } .fx-chart__target { stroke: CanvasText; } }
}

/* chartcard */
@layer fx.components {
  /* Grafik kartasi: sarlavha + sarlavha ostidagi izoh + amallar (davr segmenti, ⋯), grafik, pastda legenda va manba. Karta aylanmaydi;
     ichidagi grafik oʻz joyini toʻldiradi. Grafikning oʻz figcaption’i ekran oʻquvchi uchun qoladi (fx-sr-only). */
  .fx-chartcard { display: grid; gap: var(--fx-space-4); min-inline-size: 0; padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); color: var(--fx-text-primary); }
  .fx-chartcard__head { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-chartcard__titles { display: grid; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-chartcard__title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); line-height: 1.3; }
  .fx-chartcard__sub { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-chartcard__actions { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-chartcard__body { min-inline-size: 0; }
  .fx-chartcard__foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-2) var(--fx-space-4); padding-block-start: var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-chartcard[data-variant="flat"] { padding: 0; border-color: transparent; background: transparent; }
  .fx-chartcard[data-state="loading"] .fx-chartcard__body { opacity: 0.4; }
  .fx-chartcard[data-state="empty"] .fx-chartcard__body { display: grid; place-items: center; min-block-size: calc(var(--fx-control-h-lg) * 3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
}

/* check */
@layer fx.components {
  .fx-check { --_k: 1; --_w: 1; position: relative; display: inline-flex; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-size-min-target); cursor: pointer; font-size: var(--fx-font-size-sm); }
  .fx-check > input { position: absolute; opacity: 0; inline-size: 1px; block-size: 1px; margin: 0; }
  .fx-check__box {
    --_s: calc(var(--fx-size-checkbox) * var(--_k));
    flex: none;
    display: grid;
    place-items: center;
    inline-size: var(--_s);
    block-size: var(--_s);
    box-sizing: border-box;
    border: var(--fx-border-width-default) solid var(--fx-border-color-strong);
    /* Checkbox yoyi o'lchamga nisbatan (WDS r111) — doira bo'lmaydi, radio bilan adashmasin */
    border-radius: calc(var(--_s) * var(--fx-radius-checkbox-ratio));
    background: var(--fx-bg-surface);
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-radius var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-check__box::after {
    content: "";
    inline-size: 60%;
    block-size: 60%;
    background: var(--fx-text-on-brand);
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2 6.5 5 9l5-6' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
    opacity: 0;
    clip-path: inset(0 100% 0 0);
    transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), clip-path var(--fx-motion-base) var(--fx-ease-enter), scale var(--fx-motion-base) var(--fx-ease-spring);
  }
  .fx-check > input:checked + .fx-check__box { background: var(--fx-bg-brand-solid); border-color: transparent; }
  .fx-check > input:checked + .fx-check__box::after { opacity: 1; clip-path: inset(0 0 0 0); }
  .fx-check:active > input:not(:disabled) + .fx-check__box { scale: var(--fx-motion-press); }
  .fx-check__box { transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-radius var(--fx-motion-base) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-check > input:focus-visible + .fx-check__box { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }

  /* Radio — istisno: doim doira, xarakter tugmasi tegmaydi */
  .fx-check[data-type="radio"] .fx-check__box { border-radius: var(--fx-radius-circle); }
  .fx-check[data-type="radio"] .fx-check__box::after { mask: none; border-radius: var(--fx-radius-circle); inline-size: 40%; block-size: 40%; clip-path: none; scale: 0; }
  .fx-check[data-type="radio"] > input:checked + .fx-check__box::after { scale: 1; }

  /* Switch — istisno: trek doim pill */
  .fx-check[data-type="switch"] .fx-check__box {
    inline-size: calc(var(--fx-size-switch-track) * var(--_k) * var(--_w));
    border-radius: var(--_s);
    place-items: center start;
    padding-inline: var(--fx-space-1);
    border-color: transparent;
    background: var(--fx-bg-muted);
  }
  .fx-check[data-type="switch"] .fx-check__box::after {
    mask: none;
    inline-size: calc(var(--_s) - var(--fx-space-2));
    block-size: calc(var(--_s) - var(--fx-space-2));
    border-radius: var(--fx-radius-circle);
    background: var(--fx-bg-surface);
    opacity: 1;
    clip-path: none;
    box-shadow: var(--fx-shadow-sm);
    transition: translate var(--fx-motion-slow) var(--fx-ease-spring), background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-check[data-type="switch"] > input:checked + .fx-check__box::after { translate: calc(var(--fx-size-switch-track) * var(--_k) * var(--_w) - var(--_s)) 0; background: var(--fx-text-on-brand); }

  /* Qisman tanlangan (bir qismi belgilangan guruh boshligʻi): input.indeterminate = true */
  .fx-check > input:indeterminate + .fx-check__box { background: var(--fx-bg-brand-solid); border-color: transparent; }
  .fx-check > input:indeterminate + .fx-check__box::after { opacity: 1; clip-path: none; block-size: var(--fx-border-width-focus); mask: none; border-radius: var(--fx-radius-circle); }
  .fx-check:not(:has(> input:disabled)):hover > .fx-check__box { border-color: var(--fx-text-tertiary); }
  .fx-check:has(> input:disabled) { cursor: not-allowed; color: var(--fx-text-disabled); }
  .fx-check > input:disabled + .fx-check__box { background: var(--fx-bg-muted); border-color: transparent; }

  /* Tanlov kartasi: katta bosish maydoni, belgilansa brend tusi va halqa */
  .fx-choice { display: flex; align-items: flex-start; gap: var(--fx-space-3); padding: var(--fx-space-4); border-radius: var(--fx-radius-surface); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); background: var(--fx-bg-surface); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-choice:hover { background: var(--fx-bg-subtle); }
  .fx-choice:has(input:checked) { background: var(--fx-bg-brand-subtle); border-color: var(--fx-border-color-focus); }
  .fx-choice:has(input:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-choice__body { display: grid; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-choice__title { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); }
  .fx-choice__text { font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }

  /* ---- Kengaytma (0.21): oʻlcham, yorliq tomoni, tavsif, switch ikon/yorliq/yuklanish, tanlov kartasi, hammasi-guruhi, shartli ochilish ---- */
  .fx-check[data-size="sm"] { --_k: 0.8; font-size: var(--fx-font-size-xs); }
  .fx-check[data-size="lg"] { --_k: 1.25; font-size: var(--fx-font-size-md); }
  /* Yorliq chapda, quti oʻngda (sozlamalar qatori) */
  .fx-check[data-label="start"] { display: flex; flex-direction: row-reverse; justify-content: space-between; inline-size: 100%; }
  /* Sarlavha + tavsif */
  .fx-check__body { display: grid; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-check__title { color: var(--fx-text-primary); }
  .fx-check__desc { font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-check:has(> .fx-check__body > .fx-check__desc) { align-items: flex-start; }
  .fx-check:has(> .fx-check__body > .fx-check__desc) > .fx-check__box { margin-block-start: calc(var(--fx-space-1) / 2); }
  /* Switch ichida belgi: ✕ / ✓ — rangdan tashqari shakl bilan ham farqlanadi */
  .fx-check[data-type="switch"][data-icons] .fx-check__box::after { content: "✕"; display: grid; place-items: center; font-size: var(--fx-font-size-xs); line-height: 1; color: var(--fx-text-tertiary); }
  .fx-check[data-type="switch"][data-icons] > input:checked + .fx-check__box::after { content: "✓"; color: var(--fx-bg-brand-solid); }
  /* Switch ichida soʻz: data-on / data-off (kalta: «Ha» / «Yoʻq»); trek kengayadi */
  .fx-check[data-type="switch"][data-labels] { --_w: 1.7; }
  .fx-check[data-type="switch"][data-labels] .fx-check__box { position: relative; }
  .fx-check[data-type="switch"][data-labels] .fx-check__box::before { content: attr(data-off); content: attr(data-off) / ""; position: absolute; inset-inline-end: var(--fx-space-2); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-secondary); line-height: 1; }
  .fx-check[data-type="switch"][data-labels] > input:checked + .fx-check__box::before { content: attr(data-on); content: attr(data-on) / ""; inset-inline-end: auto; inset-inline-start: var(--fx-space-2); color: var(--fx-text-on-brand); }
  /* Switch yuklanmoqda (server javobi kutilmoqda): input aria-busy="true" — tutqich aylanadi, bosish bloklanadi */
  .fx-check[data-type="switch"]:has(> input[aria-busy="true"]) { cursor: progress; pointer-events: none; }
  .fx-check[data-type="switch"] > input[aria-busy="true"] + .fx-check__box::after { box-sizing: border-box; background: transparent; box-shadow: none; border: var(--fx-border-width-focus) solid var(--fx-border-color-strong); border-block-start-color: transparent; animation: fx-spin var(--fx-duration-spin) linear infinite; }
  @media (prefers-reduced-motion: reduce) { .fx-check[data-type="switch"] > input[aria-busy="true"] + .fx-check__box::after { animation: none; } }

  /* Tanlov kartasi: rasm/ikon, narx, belgi oʻng chetda, nofaol va xato holati */
  .fx-choice__body { flex: 1; }
  .fx-choice__media { flex: none; display: grid; place-items: center; inline-size: var(--fx-size-control-md); block-size: var(--fx-size-control-md); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); color: var(--fx-text-secondary); overflow: hidden; }
  .fx-choice__media > :is(svg, img) { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-choice__media > img { inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-choice:has(input:checked) .fx-choice__media { background: var(--fx-bg-surface); color: var(--fx-text-brand); }
  .fx-choice__aside { flex: none; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; color: var(--fx-text-primary); }
  .fx-choice[data-indicator="end"] > .fx-check { order: 2; }
  .fx-choice[data-indicator="end"] > .fx-choice__aside { order: 1; }
  .fx-choice:has(input:disabled) { cursor: not-allowed; background: var(--fx-bg-muted); color: var(--fx-text-disabled); border-color: transparent; }
  .fx-choice:has(input:disabled) :is(.fx-choice__title, .fx-choice__text, .fx-choice__aside) { color: var(--fx-text-disabled); }
  .fx-choice:has(input:disabled):hover { background: var(--fx-bg-muted); }
  .fx-choice[data-invalid] { border-color: var(--fx-border-color-error); }
  .fx-choice:active:not(:has(input:disabled)) { scale: var(--fx-motion-press); }

  /* Guruh: «hammasi» + bandlar (gorizontal, toʻr). Boshliq input[data-all] xulq bilan holatni yigʻadi. */
  .fx-checkgroup { display: grid; gap: var(--fx-space-3); }
  .fx-checkgroup__items { display: grid; gap: var(--fx-space-2); }
  .fx-checkgroup__items[data-indent] { padding-inline-start: calc(var(--fx-size-checkbox) + var(--fx-space-2)); }
  .fx-checkgroup__items[data-layout="row"] { display: flex; flex-wrap: wrap; gap: var(--fx-space-2) var(--fx-space-6); }
  .fx-checkgroup__items[data-layout="grid"] { grid-template-columns: repeat(auto-fill, minmax(calc(var(--fx-space-12) * 3), 1fr)); gap: var(--fx-space-2) var(--fx-space-4); }
  .fx-checkgroup__count { font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); font-variant-numeric: tabular-nums; }

  /* Shartli ochilish: tanlanganda ichki maydon ochiladi (CSS :has); yopiqda fokusga tushmaydi */
  .fx-check__reveal { display: grid; grid-template-rows: 0fr; visibility: hidden; opacity: 0; margin-inline-start: calc(var(--fx-size-checkbox) + var(--fx-space-2)); transition: grid-template-rows var(--fx-motion-base) var(--fx-ease-standard), opacity var(--fx-motion-base) var(--fx-ease-standard), visibility var(--fx-motion-base); }
  .fx-check__reveal > * { min-block-size: 0; overflow: hidden; padding: var(--fx-space-1); }
  .fx-check:has(> input:checked) + .fx-check__reveal { grid-template-rows: 1fr; visibility: visible; opacity: 1; }

  /* Shkala (0–10, 1–5): radio tugmalar qatori, uchlarida izoh. Joriy qiymat toʻldiriladi. */
  .fx-scale { display: grid; gap: var(--fx-space-2); margin: 0; padding: 0; border: 0; min-inline-size: 0; }
  .fx-scale__row { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(var(--fx-size-min-target), 1fr); gap: var(--fx-space-1); }
  .fx-scale__item { position: relative; display: grid; }
  .fx-scale__item > input { position: absolute; opacity: 0; inline-size: 1px; block-size: 1px; margin: 0; }
  .fx-scale__item > span { display: grid; place-items: center; min-block-size: var(--fx-size-min-target); border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-control); background: var(--fx-bg-field); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; color: var(--fx-text-primary); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-scale__item:hover > span { border-color: var(--fx-border-color-strong); background: var(--fx-bg-subtle); }
  .fx-scale__item:active > input:not(:disabled) + span { scale: var(--fx-motion-press); }
  .fx-scale__item > input:checked + span { background: var(--fx-bg-brand-solid); border-color: transparent; color: var(--fx-text-on-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-scale__item > input:focus-visible + span { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-scale__item > input:disabled + span { background: var(--fx-bg-muted); color: var(--fx-text-disabled); border-color: transparent; cursor: not-allowed; }
  .fx-scale__ends { display: flex; justify-content: space-between; gap: var(--fx-space-3); font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }

  /* ---- Kengaytma (2.34, 2.152): radio/checkbox — tugma koʻrinishi (Radio.Button), forced-colors ---- */
  .fx-check[data-appearance="button"] { padding-inline: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-control); background: var(--fx-bg-field); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-check[data-appearance="button"] > .fx-check__box { display: none; }
  .fx-check[data-appearance="button"]:hover:not(:has(> input:disabled)) { border-color: var(--fx-border-color-strong); background: var(--fx-bg-subtle); }
  .fx-check[data-appearance="button"]:has(> input:checked) { border-color: var(--fx-border-color-focus); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-check[data-appearance="button"]:has(> input:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-check[data-appearance="button"]:has(> input:disabled) { background: var(--fx-bg-muted); border-color: transparent; }
  .fx-check[data-appearance="button"]:active:not(:has(> input:disabled)) { scale: var(--fx-motion-press); }
  .fx-check[data-appearance="button"]:has(> input:checked)::before { content: "✓"; font-weight: var(--fx-font-weight-semibold); }
  @media (forced-colors: active) {
    .fx-check__box { border-color: ButtonText; forced-color-adjust: none; background: Canvas; }
    .fx-check > input:checked + .fx-check__box, .fx-check > input:indeterminate + .fx-check__box { background: Highlight; border-color: Highlight; }
    .fx-check__box::after { background: HighlightText; }
    .fx-check[data-type="switch"] .fx-check__box { border-color: ButtonText; }
    .fx-check[data-type="switch"] .fx-check__box::after { background: ButtonText; }
    .fx-check[data-type="switch"] > input:checked + .fx-check__box::after { background: HighlightText; }
    .fx-choice { border-color: CanvasText; }
    .fx-choice:has(input:checked) { border-color: Highlight; outline: var(--fx-border-width-focus) solid Highlight; }
  }
}

/* checklist */
@layer fx.components {
  /* Boshlash roʻyxati (onboarding): karta — sarlavha, jarayon chizigʻi («2 / 5»), qadamlar. Joriy qadam kengayadi (izoh + amal),
     bajarilganlari ✓ bilan chizilgan. Xulq — foxui.js (data-fx-checklist). */
  .fx-checklist { display: grid; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); overflow: hidden; }
  .fx-checklist[hidden] { display: none; }
  .fx-checklist__head { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--fx-space-1) var(--fx-space-3); align-items: center; padding: var(--fx-space-4) var(--fx-space-5) var(--fx-space-3); }
  .fx-checklist__title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-checklist__sub { grid-column: 1; margin: 0; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-checklist__dismiss { grid-column: 2; grid-row: 1 / span 2; }
  .fx-checklist__bar { grid-column: 1 / -1; display: flex; align-items: center; gap: var(--fx-space-3); }
  .fx-checklist__track { --_val: 0; flex: 1; block-size: var(--fx-space-1); border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); overflow: hidden; }
  .fx-checklist__track::before { content: ""; display: block; inline-size: calc(var(--_val) * 1%); block-size: 100%; border-radius: inherit; background: var(--fx-bg-brand-solid); transition: inline-size var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-checklist__count { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-checklist__list { margin: 0; padding: 0; list-style: none; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-checklist__item { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--fx-space-1) var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-5); }
  .fx-checklist__item + .fx-checklist__item { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-checklist__box { grid-row: 1; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); box-sizing: border-box; padding: 0; border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-circle); background: transparent; color: var(--fx-text-on-brand); cursor: pointer; display: grid; place-items: center; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-checklist__box:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-checklist__box::after { content: ""; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5 6.5 11.5 12.5 4.5' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; opacity: 0; scale: 0.6; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring); }
  .fx-checklist__box[aria-checked="true"] { background: var(--fx-bg-brand-solid); border-color: transparent; }
  .fx-checklist__box[aria-checked="true"]::after { opacity: 1; scale: 1; }
  .fx-checklist__name { grid-row: 1; align-self: center; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); color: var(--fx-text-primary); }
  .fx-checklist__item[data-state="done"] .fx-checklist__name { color: var(--fx-text-tertiary); text-decoration: line-through; }
  .fx-checklist__more { grid-column: 2; display: none; gap: var(--fx-space-3); justify-items: start; }
  .fx-checklist__item[data-state="current"] .fx-checklist__more { display: grid; }
  .fx-checklist__text { margin: 0; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-checklist__item[data-state="current"] { background: var(--fx-bg-subtle); }
  .fx-checklist__done { display: none; padding: var(--fx-space-5); text-align: center; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-checklist[data-complete] .fx-checklist__done { display: block; }
}

/* checkout */
@layer fx.components {
  /* Toʻlov / checkout formasi (4.194, naqsh): chapda raqamlangan boʻlimlar (aloqa — fx-phone, yetkazib berish usuli va manzil,
     toʻlov usuli va karta — fx-mask), oʻngda yopishqoq buyurtma xulosasi (mahsulotlar, promo-kod — fx-coupon, jami, toʻlash tugmasi).
     Yuborilayotganda (data-state="submitting") forma oʻchadi, tugmada yuklanish. Tor ekranda xulosa tepaga chiqadi. Faqat CSS. */
  .fx-checkout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, calc(var(--fx-space-12) * 8)); gap: var(--fx-space-8); align-items: start; color: var(--fx-text-primary); }
  .fx-checkout__main { display: grid; gap: var(--fx-space-8); min-inline-size: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-checkout__section { display: grid; gap: var(--fx-space-4); margin: 0; padding: 0; border: 0; min-inline-size: 0; }
  .fx-checkout__title { display: flex; align-items: center; gap: var(--fx-space-3); margin: 0; padding: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-checkout__step { display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); border-radius: var(--fx-radius-circle); background: var(--fx-text-primary); color: var(--fx-bg-page); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-checkout__row { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-space-12) * 4)), 1fr)); gap: var(--fx-space-4); }
  .fx-checkout__options { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-space-12) * 4.5)), 1fr)); gap: var(--fx-space-3); }
  /* Usul kartasi: radio + nom + izoh + narx; tanlangani qalin chegara + ✓ (rang yolgʻiz emas) */
  .fx-checkout__option { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: var(--fx-space-1) var(--fx-space-3); align-items: start; padding: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); cursor: pointer; transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-checkout__option:hover { border-color: var(--fx-border-color-strong); }
  .fx-checkout__option:has(:checked) { border-color: var(--fx-text-primary); outline: var(--fx-border-width-default) solid var(--fx-text-primary); outline-offset: calc(var(--fx-border-width-default) * -2); }
  .fx-checkout__option:has(:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-checkout__option-name { font-weight: var(--fx-font-weight-medium); }
  .fx-checkout__option-desc { grid-column: 2 / -1; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-checkout__option-price { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; white-space: nowrap; }
  /* Karta maydonlari faqat «Bank kartasi» tanlanganda */
  .fx-checkout__card { display: grid; gap: var(--fx-space-4); padding: var(--fx-space-4); border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); }
  .fx-checkout__section:not(:has([data-pay="card"]:checked)) .fx-checkout__card { display: none; }
  /* Xulosa: yopishqoq */
  .fx-checkout__summary { position: sticky; inset-block-start: var(--fx-space-4); display: grid; gap: var(--fx-space-4); padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-checkout__summary-title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-checkout__items { display: grid; gap: var(--fx-space-3); margin: 0; padding: 0; list-style: none; }
  .fx-checkout__item { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: var(--fx-space-3); align-items: center; font-size: var(--fx-font-size-sm); }
  .fx-checkout__thumb { position: relative; display: grid; place-items: center; inline-size: var(--fx-control-h-lg); block-size: var(--fx-control-h-lg); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); color: var(--fx-text-tertiary); }
  .fx-checkout__thumb > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-checkout__qty { position: absolute; inset-block-start: calc(var(--fx-space-1) * -1.5); inset-inline-end: calc(var(--fx-space-1) * -1.5); display: grid; place-items: center; min-inline-size: var(--fx-space-5); block-size: var(--fx-space-5); padding-inline: var(--fx-space-1); box-sizing: border-box; border-radius: var(--fx-radius-circle); background: var(--fx-text-secondary); color: var(--fx-bg-page); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-checkout__name { display: grid; min-inline-size: 0; }
  .fx-checkout__meta { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-checkout__price { font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-checkout__totals { display: grid; gap: var(--fx-space-2); margin: 0; padding-block-start: var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); font-size: var(--fx-font-size-sm); }
  .fx-checkout__totals > div { display: flex; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-checkout__totals dt { color: var(--fx-text-secondary); }
  .fx-checkout__totals dd { margin: 0; font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-checkout__totals > [data-type="discount"] dd { color: var(--fx-fg-success); }
  .fx-checkout__totals > [data-type="total"] { padding-block-start: var(--fx-space-2); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-checkout__totals > [data-type="total"] dt { color: var(--fx-text-primary); }
  .fx-checkout__secure { display: flex; align-items: center; justify-content: center; gap: var(--fx-space-2); margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-align: center; }
  .fx-checkout__secure > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  /* Yuborilmoqda */
  .fx-checkout[data-state="submitting"] .fx-checkout__main { opacity: 0.55; pointer-events: none; }
  @media (max-width: 56em) { .fx-checkout { grid-template-columns: minmax(0, 1fr); } .fx-checkout__summary { position: static; order: -1; } }
}

/* checkpoint */
@layer fx.components {
  /* AI checkpoint (4.204, Vercel AI Elements «Checkpoint»; Cursor, Claude Code «rewind»): suhbat yoki agent lentasida ajratuvchi
     chiziq ustidagi belgi — shu nuqtadagi holat (fayllar, maʼlumot) saqlangan. Belgi: bayroq ikonasi, nom va vaqt, qisqa meta
     («3 fayl, 12 qator») va «Shu nuqtaga qaytish» tugmasi. Qaytarilganda data-state="restored": belgi brend rangida, undan keyingi
     yozuvlar [data-reverted] — xira, chizilgan chiziq bilan, bosilmaydi (inert); tugma «Qaytarishni bekor qilish». Xulq: foxui.js → checkpoint.
     data-variant: line (standart — toʻliq chiziq) · compact (faqat tabletka, chiziqsiz). */
  .fx-checkpoint { display: flex; align-items: center; gap: var(--fx-space-2); margin-block: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-checkpoint::before, .fx-checkpoint::after { content: ""; flex: 1 1 var(--fx-space-6); border-block-start: var(--fx-border-width-default) dashed var(--fx-border-color-default); }
  .fx-checkpoint__pill { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1) var(--fx-space-2); max-inline-size: 100%; padding: calc(var(--fx-space-1) / 2) calc(var(--fx-space-1) / 2) calc(var(--fx-space-1) / 2) var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-pill); background: var(--fx-bg-surface); transition: border-color var(--fx-motion-base) var(--fx-ease-standard), background-color var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-checkpoint__icon { display: inline-grid; color: var(--fx-text-secondary); }
  .fx-checkpoint__icon > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-checkpoint__label { color: var(--fx-text-secondary); font-weight: var(--fx-font-weight-medium); white-space: nowrap; }
  .fx-checkpoint__label > time { font-variant-numeric: tabular-nums; }
  .fx-checkpoint__meta { color: var(--fx-text-tertiary); white-space: nowrap; }
  .fx-checkpoint__restore {
    min-block-size: var(--fx-control-h-sm);
    padding: 0 var(--fx-space-3);
    border: 0;
    border-radius: var(--fx-radius-pill);
    background: var(--fx-bg-subtle);
    color: var(--fx-text-primary);
    font: inherit;
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-medium);
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-checkpoint__restore::before { content: "↶ "; }
  .fx-checkpoint__restore:hover { background: var(--fx-bg-muted); }
  .fx-checkpoint__restore:active { scale: var(--fx-motion-press); }
  .fx-checkpoint__restore:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  /* qaytarilgan */
  .fx-checkpoint[data-state="restored"]::before, .fx-checkpoint[data-state="restored"]::after { border-block-start-style: solid; border-block-start-color: var(--fx-bg-brand-solid); }
  .fx-checkpoint[data-state="restored"] .fx-checkpoint__pill { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); }
  .fx-checkpoint[data-state="restored"] :is(.fx-checkpoint__icon, .fx-checkpoint__label) { color: var(--fx-text-brand); }
  .fx-checkpoint[data-state="restored"] .fx-checkpoint__restore::before { content: "↷ "; }
  :where(.fx-checkpoint[data-state="restored"] ~ [data-reverted]) { opacity: 0.45; filter: grayscale(1); transition: opacity var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-checkpoint[data-state="restored"] ~ [data-reverted]:last-child::after { content: "Shu nuqtadan keyingi yozuvlar bekor qilindi"; display: block; margin-block-start: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-style: italic; }
  .fx-checkpoint[data-variant="compact"] { justify-content: center; }
  .fx-checkpoint[data-variant="compact"]::before, .fx-checkpoint[data-variant="compact"]::after { display: none; }
  @media (max-width: 30em) { .fx-checkpoint__meta { display: none; } }
}

/* chip */
@layer fx.components {
  /* Chip: filtr (bosiladi, aria-pressed) yoki teg (× bilan olib tashlanadi). Tanlangani — teskari: fon asosiy matn rangi,
     matn sahifa foni (WDS «Rang»: och tus tanlov uchun sezilmaydi). Ichidagi son — alohida xira belgi. */
  .fx-chip {
    --_h: calc(var(--fx-control-h-sm) - var(--fx-space-2));
    display: inline-flex;
    justify-self: start;
    align-items: center;
    gap: var(--fx-space-1);
    block-size: var(--_h);
    padding-inline: var(--fx-space-3);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-badge));
    background: var(--fx-bg-surface);
    color: var(--fx-text-secondary);
    font: inherit;
    font-size: var(--fx-font-size-sm);
    white-space: nowrap;
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-chip:hover { background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  .fx-chip:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-chip[aria-pressed="true"] { border-color: transparent; background: var(--fx-text-primary); color: var(--fx-bg-page); }
  .fx-chip__count { padding-inline: var(--fx-space-1); border-radius: var(--fx-radius-badge); background: color-mix(in oklab, currentColor 10%, transparent); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-chip__remove { display: inline-grid; place-items: center; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); margin-inline-end: calc(var(--fx-space-1) * -1); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: transparent; color: inherit; font: inherit; line-height: 1; cursor: pointer; opacity: 0.6; }
  .fx-chip__remove:hover { opacity: 1; background: color-mix(in oklab, currentColor 12%, transparent); }
  .fx-chip[data-type="tag"] { cursor: default; background: var(--fx-bg-muted); border-color: transparent; color: var(--fx-text-primary); }
  button.fx-chip:active:not(:disabled) { scale: var(--fx-motion-press); }
  /* ---- Kengaytma (2.57–2.60, 2.155): avatarli chip, filtr-dropdown chevron, assist/suggestion, chip guruhi, bosish maydoni ---- */
  .fx-chip { position: relative; }
  .fx-chip::before { content: ""; position: absolute; inset-inline: 0; inset-block: min(0px, calc((var(--_h) - var(--fx-size-min-target)) / 2)); }
  .fx-chip > .fx-avatar { --_s: calc(var(--_h) - var(--fx-space-1)); margin-inline-start: calc(var(--fx-space-3) * -0.5); font-size: calc(var(--fx-font-size-xs) * 0.55); }
  .fx-chip > .fx-avatar[data-status]::after { display: none; }
  .fx-chip > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  /* Filtr chip + dropdown (“Holat ▾”): aria-haspopup boʻlsa chevron, ochiqda 180° */
  .fx-chip[aria-haspopup]::after { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); margin-inline-end: calc(var(--fx-space-1) * -1); background: currentColor; opacity: 0.6; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-chip[aria-haspopup][aria-expanded="true"]::after { rotate: 180deg; }
  /* Assist (amalga yoʻnaltiradi, oldida ikon) va suggestion (tayyor taklif) turlari */
  .fx-chip[data-type="assist"] { background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  .fx-chip[data-type="assist"] > svg:first-child { color: var(--fx-text-brand); }
  .fx-chip[data-type="suggestion"]:not([aria-pressed="true"]) { border-color: transparent; background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-chip[data-type="suggestion"]:not([aria-pressed="true"]):hover { background: color-mix(in oklab, var(--fx-bg-brand-subtle) 85%, var(--fx-text-brand)); }
  /* Guruh: oʻrash (standart), bitta qatorda surish (scroll), eng koʻp koʻrinadigan son + “+N” chip (data-more) */
  .fx-chip-group { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); min-inline-size: 0; }
  .fx-chip-group[data-overflow="scroll"] { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; scroll-snap-type: x proximity; }
  .fx-chip-group[data-overflow="scroll"] > .fx-chip { flex: none; scroll-snap-align: start; }
  .fx-chip-group[data-max="3"] > .fx-chip:nth-child(n + 4):not([data-more]),
  .fx-chip-group[data-max="4"] > .fx-chip:nth-child(n + 5):not([data-more]),
  .fx-chip-group[data-max="5"] > .fx-chip:nth-child(n + 6):not([data-more]),
  .fx-chip-group[data-max="6"] > .fx-chip:nth-child(n + 7):not([data-more]) { display: none; }
  .fx-chip[data-more] { border-style: dashed; color: var(--fx-text-tertiary); }
  @media (forced-colors: active) {
    .fx-chip[aria-pressed="true"] { background: Highlight; color: HighlightText; forced-color-adjust: none; }
    .fx-chip[data-type="tag"] { border-color: ButtonText; }
  }
}

/* close */
@layer fx.components {
  /* Yopish tugmasi: hamma joyda bir xil ✕ (dialog, sheet, alert, chip). Ichi boʻsh boʻlsa — ✕ oʻzi chiziladi.
     Bosish maydoni ko‘rinishdan kattaroq (WCAG 2.5.8). Nomi aria-label’da. */
  .fx-close { --_s: var(--fx-control-h-sm); position: relative; display: inline-grid; place-items: center; flex: none; inline-size: var(--_s); block-size: var(--_s); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-tertiary); font: inherit; line-height: 1; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-close::after { content: ""; position: absolute; inset: calc(var(--fx-space-1) * -1); }
  .fx-close:empty::before { content: "✕"; font-size: var(--fx-font-size-sm); }
  .fx-close > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-close:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-close:active:not(:disabled) { scale: var(--fx-motion-press); }
  .fx-close:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-close:disabled { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-close[data-size="sm"] { --_s: var(--fx-size-min-target); }
  .fx-close[data-size="lg"] { --_s: var(--fx-control-h-md); }
  .fx-close[data-shape="round"] { border-radius: var(--fx-radius-circle); }
  @media (prefers-reduced-motion: reduce) { .fx-close:active { scale: none; } }
}

/* code */
@layer fx.components {
  /* Kod bloki: sarlavha (fayl nomi, til) + nusxa tugmasi + monospace tana. Uzun qator aylanadi (tabindex=0). */
  .fx-code { display: grid; min-inline-size: 0; overflow: hidden; border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); color: var(--fx-text-primary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); }
  .fx-code__header { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); padding: var(--fx-space-1) var(--fx-space-2) var(--fx-space-1) var(--fx-space-4); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-code__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-code__lang { color: var(--fx-text-tertiary); }
  .fx-code__pre { margin: 0; padding: var(--fx-space-4); overflow-x: auto; line-height: 1.6; tab-size: 2; }
  .fx-code__pre:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-code__pre > code { font: inherit; }
  /* Qatorlar: raqamli, ajratilgan, diff (+/−: belgi matnda, rang yolgʻiz emas) */
  .fx-code__line { display: block; }
  .fx-code[data-lines] .fx-code__pre { counter-reset: fx-line; }
  .fx-code[data-lines] .fx-code__line { counter-increment: fx-line; }
  .fx-code[data-lines] .fx-code__line::before { content: counter(fx-line); display: inline-block; inline-size: var(--fx-space-6); margin-inline-end: var(--fx-space-4); text-align: end; color: var(--fx-text-tertiary); font-variant-numeric: tabular-nums; user-select: none; }
  .fx-code__line[data-highlight] { margin-inline: calc(var(--fx-space-4) * -1); padding-inline: var(--fx-space-4); background: var(--fx-bg-brand-subtle); }
  .fx-code__line[data-diff] { position: relative; margin-inline: calc(var(--fx-space-4) * -1); padding-inline: var(--fx-space-6) var(--fx-space-4); }
  .fx-code__line[data-diff]::after { position: absolute; inset-inline-start: var(--fx-space-2); }
  .fx-code__line[data-diff="add"] { background: var(--fx-bg-success-subtle); }
  .fx-code__line[data-diff="del"] { background: var(--fx-bg-error-subtle); }
  .fx-code__line[data-diff="add"]::after { content: "+"; color: var(--fx-fg-success); }
  .fx-code__line[data-diff="del"]::after { content: "\2212"; color: var(--fx-fg-error); }
  /* Bir qatorli snippet: $ belgisi, nusxa tugmasi oʻngda */
  .fx-code[data-variant="snippet"] { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-2); padding-inline-end: var(--fx-space-2); }
  .fx-code[data-variant="snippet"] .fx-code__pre { flex: 1; min-inline-size: 0; padding-block: var(--fx-space-2); white-space: nowrap; }
  .fx-code[data-variant="snippet"] .fx-code__pre::before { content: "$"; margin-inline-end: var(--fx-space-2); color: var(--fx-text-tertiary); user-select: none; }
  /* Matn ichidagi kod */
  .fx-code-inline { padding: calc(var(--fx-space-1) / 2) var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: 0.9em; overflow-wrap: anywhere; }
}

/* codediff */
@layer fx.components {
  /* Ikki ustunli kod farqi (4.82): eski va yangi kod yonma-yon, qatorlar tekislangan; har yon — oʻz raqami va belgisi (− / +, rang yolgʻiz emas).
     Har qator — .fx-codediff__row: chapda eski (data-diff="del" yoki oddiy), oʻngda yangi (data-diff="add"); qoʻshilgan/oʻchirilgan qator
     qarshisida boʻsh katak (data-diff="empty"). Tor ekranda (konteyner < 40rem) — bir ustunli (oldin eski, keyin yangi qator). Faqat CSS. */
  .fx-codediff { container-type: inline-size; overflow: hidden; border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); }
  .fx-codediff__head { display: grid; grid-template-columns: 1fr 1fr; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-muted); font-family: var(--fx-font-family-sans); font-size-adjust: var(--fx-font-adjust-sans); }
  .fx-codediff__file { display: flex; align-items: center; gap: var(--fx-space-2); min-inline-size: 0; padding: var(--fx-space-2) var(--fx-space-4); overflow: hidden; color: var(--fx-text-secondary); text-overflow: ellipsis; white-space: nowrap; }
  .fx-codediff__file + .fx-codediff__file { border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-codediff__file b { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-codediff__body { overflow-x: auto; }
  .fx-codediff__row { display: grid; grid-template-columns: 1fr 1fr; min-inline-size: max-content; }
  .fx-codediff__cell { display: grid; grid-template-columns: calc(var(--fx-space-8) + var(--fx-space-2)) var(--fx-space-4) 1fr; align-items: baseline; min-inline-size: 0; padding-inline-end: var(--fx-space-4); line-height: 1.7; white-space: pre; }
  .fx-codediff__cell + .fx-codediff__cell { border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-codediff__cell::before { content: attr(data-n); padding-inline-end: var(--fx-space-2); color: var(--fx-text-tertiary); text-align: end; user-select: none; }
  .fx-codediff__cell::after { content: ""; grid-row: 1; grid-column: 2; text-align: center; user-select: none; }
  .fx-codediff__cell > code { grid-column: 3; font: inherit; }
  .fx-codediff__cell[data-diff="del"] { background: var(--fx-bg-error-subtle); }
  .fx-codediff__cell[data-diff="del"]::after { content: "\2212"; color: var(--fx-fg-error); }
  .fx-codediff__cell[data-diff="add"] { background: var(--fx-bg-success-subtle); }
  .fx-codediff__cell[data-diff="add"]::after { content: "+"; color: var(--fx-fg-success); }
  .fx-codediff__cell[data-diff="empty"] { background: repeating-linear-gradient(-45deg, transparent 0 var(--fx-space-1), var(--fx-bg-muted) var(--fx-space-1) var(--fx-space-2)); }
  .fx-codediff__cell mark { border-radius: calc(var(--fx-radius-badge) / 2); color: inherit; }
  .fx-codediff__cell[data-diff="del"] mark { background: color-mix(in oklab, var(--fx-fg-error) 28%, transparent); }
  .fx-codediff__cell[data-diff="add"] mark { background: color-mix(in oklab, var(--fx-fg-success) 28%, transparent); }
  .fx-codediff__fold { padding: var(--fx-space-1) var(--fx-space-4); background: var(--fx-bg-info-subtle); color: var(--fx-text-tertiary); font-family: var(--fx-font-family-sans); font-size-adjust: var(--fx-font-adjust-sans); }
  /* bir ustunli: tor joyda yoki data-view="unified" */
  @container (max-width: 40rem) {
    .fx-codediff__head { grid-template-columns: 1fr; }
    .fx-codediff__file + .fx-codediff__file { border-inline-start: 0; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
    .fx-codediff__row { grid-template-columns: 1fr; }
    .fx-codediff__cell + .fx-codediff__cell { border-inline-start: 0; }
    .fx-codediff__cell[data-diff="empty"], .fx-codediff__cell:not([data-diff]) + .fx-codediff__cell:not([data-diff]) { display: none; }
  }
  .fx-codediff[data-view="unified"] .fx-codediff__head, .fx-codediff[data-view="unified"] .fx-codediff__row { grid-template-columns: 1fr; }
  .fx-codediff[data-view="unified"] .fx-codediff__cell + .fx-codediff__cell { border-inline-start: 0; }
  .fx-codediff[data-view="unified"] :is(.fx-codediff__cell[data-diff="empty"], .fx-codediff__cell:not([data-diff]) + .fx-codediff__cell:not([data-diff])) { display: none; }
  @media (forced-colors: active) { .fx-codediff__cell[data-diff] { forced-color-adjust: none; } }
}

/* colorpicker */
@layer fx.components {
  /* Rang tanlagich (#18): toʻyinganlik/yorqinlik maydoni (klaviatura bilan), ton chizigʻi, HEX va RGB maydonlari, tayyor ranglar, pipetka (brauzer qoʻllasa).
     Maydon va chiziq ranglarini JS beradi (--fx-cp-hue, --fx-cp-rail, --fx-cp-color): foydalanuvchi tanlagan rang token emas, maʼlumot. */
  .fx-colorpicker { --fx-cp-hue: transparent; --fx-cp-rail: var(--fx-bg-muted); --fx-cp-color: var(--fx-bg-muted); --fx-cp-x: 0%; --fx-cp-y: 0%; display: grid; gap: var(--fx-space-3); inline-size: min(100%, var(--fx-popover-width)); }
  .fx-colorpicker__area {
    position: relative;
    block-size: calc(var(--fx-popover-width) * 0.5);
    border-radius: var(--fx-radius-control);
    background: linear-gradient(to top, black, transparent), linear-gradient(to right, white, transparent), var(--fx-cp-hue);
    cursor: crosshair;
    touch-action: none;
  }
  .fx-colorpicker__area:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-colorpicker__thumb {
    position: absolute;
    inset-inline-start: var(--fx-cp-x);
    inset-block-start: var(--fx-cp-y);
    inline-size: var(--fx-size-checkbox);
    block-size: var(--fx-size-checkbox);
    translate: -50% -50%;
    border: var(--fx-border-width-focus) solid var(--fx-bg-surface);
    border-radius: var(--fx-radius-circle);
    background: var(--fx-cp-color);
    box-shadow: var(--fx-shadow-md);
    pointer-events: none;
  }
  .fx-slider.fx-colorpicker__hue { --_t: var(--fx-space-3); }
  .fx-slider.fx-colorpicker__hue::-webkit-slider-runnable-track { background: var(--fx-cp-rail); }
  .fx-slider.fx-colorpicker__hue::-moz-range-track { background: var(--fx-cp-rail); }
  .fx-slider.fx-colorpicker__hue::-moz-range-progress { background: transparent; }
  .fx-colorpicker__row { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-colorpicker__preview { flex: none; inline-size: var(--fx-size-control-md); block-size: var(--fx-size-control-md); border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-control); background: var(--fx-cp-color); }
  .fx-colorpicker__hex { flex: 1; min-inline-size: 0; font-variant-numeric: tabular-nums; text-transform: uppercase; }
  .fx-colorpicker__pipette { flex: none; }
  .fx-colorpicker__pipette[hidden] { display: none; }
  .fx-colorpicker__rgb { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--fx-space-2); }
  .fx-colorpicker__rgb label { display: grid; gap: calc(var(--fx-space-1) / 2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-colorpicker__rgb input { min-inline-size: 0; font-variant-numeric: tabular-nums; }
  .fx-colorpicker__swatches { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); }
  .fx-colorpicker__swatch {
    inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); padding: 0;
    border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-control);
    background: var(--fx-sw); cursor: pointer;
    transition: scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-colorpicker__swatch { --fx-sw: var(--fx-bg-muted); }
  .fx-colorpicker__swatch:hover { scale: 1.1; }
  .fx-colorpicker__swatch:active { scale: var(--fx-motion-press); }
  .fx-colorpicker__swatch:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-colorpicker__swatch[aria-pressed="true"] { border-width: var(--fx-border-width-focus); border-color: var(--fx-text-primary); }
  .fx-colorpicker[data-size="sm"] { inline-size: min(100%, calc(var(--fx-popover-width) * 0.75)); }
  .fx-colorpicker[data-size="sm"] .fx-colorpicker__area { block-size: calc(var(--fx-popover-width) * 0.35); }
  /* ---- Alfa va gʻildirak (4.106): shaffoflik chizigʻi — shaxmat fon ustida rangsizdan rangga; gʻildirak — ton (burchak) × toʻyinganlik (radius),
     yorqinlik ostidagi chiziqda (qorongʻilik qatlami --fx-cp-dim). Shaxmat — token ranglardan (muted / surface). ---- */
  .fx-colorpicker { --fx-cp-solid: var(--fx-bg-muted); --fx-cp-wheel: var(--fx-bg-muted); --fx-cp-dim: 0; --_chk: repeating-conic-gradient(var(--fx-bg-muted) 0 25%, var(--fx-bg-surface) 0 50%) 0 0 / var(--fx-space-2) var(--fx-space-2); }
  .fx-slider.fx-colorpicker__alpha { --_t: var(--fx-space-3); }
  .fx-slider.fx-colorpicker__alpha::-webkit-slider-runnable-track { background: linear-gradient(to right, transparent, var(--fx-cp-solid)), var(--_chk); }
  .fx-slider.fx-colorpicker__alpha::-moz-range-track { background: linear-gradient(to right, transparent, var(--fx-cp-solid)), var(--_chk); }
  .fx-slider.fx-colorpicker__alpha::-moz-range-progress { background: transparent; }
  .fx-colorpicker[data-alpha] .fx-colorpicker__preview { background: linear-gradient(var(--fx-cp-color), var(--fx-cp-color)), var(--_chk); }
  .fx-colorpicker[data-shape="wheel"] .fx-colorpicker__area {
    justify-self: center;
    inline-size: calc(var(--fx-popover-width) * 0.75);
    block-size: auto;
    aspect-ratio: 1;
    border-radius: var(--fx-radius-circle);
    background:
      linear-gradient(color-mix(in oklab, var(--fx-color-black) calc(var(--fx-cp-dim) * 100%), transparent), color-mix(in oklab, var(--fx-color-black) calc(var(--fx-cp-dim) * 100%), transparent)),
      radial-gradient(closest-side, var(--fx-color-white), transparent),
      var(--fx-cp-wheel);
  }
  .fx-colorpicker[data-shape="wheel"] .fx-colorpicker__area:focus-visible { outline-offset: var(--fx-border-width-focus); }
  .fx-colorpicker[data-shape="wheel"] .fx-colorpicker__thumb { background: var(--fx-cp-solid); }
}

/* combobox */
@layer fx.components {
  /* Combobox: yozib qidiriladigan tanlov; roʻyxat maydon ostida (foxui.js — filtr, ↑ ↓, Enter, Esc).
     Koʻp tanlov (data-multiple): tanlanganlar maydon ichida chip (.fx-tags). Yuklanmoqda (data-loading): holat qatori + aylana. */
  .fx-combobox { position: relative; display: block; }
  .fx-combobox__popup { position: absolute; inset-inline: 0; inset-block-start: calc(100% + var(--fx-space-1)); z-index: 20; max-block-size: calc(var(--fx-control-h-sm) * 7); overflow: auto; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); }
  .fx-combobox__popup[hidden] { display: none; }
  .fx-combobox__status { display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-combobox__status[hidden] { display: none; }
  .fx-combobox[data-loading] .fx-listbox { opacity: 0.6; }
  .fx-combobox[data-multiple] .fx-tags__input { min-inline-size: calc(var(--fx-space-12) * 2); }
  .fx-combobox[data-multiple] .fx-chip .fx-avatar { margin-inline-start: calc(var(--fx-space-2) * -1); --_s: var(--fx-size-avatar-sm); }
}

/* command */
@layer fx.components {
  /* Buyruqlar oynasi (Ctrl/⌘+K): native <dialog> tepada, qidiruv + variantlar roʻyxati; xulq foxui.js (data-fx-command) */
  .fx-command { inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-dialog-width) * 1.25)); max-block-size: min(70dvh, calc(var(--fx-dialog-width) * 1.1)); margin: calc(var(--fx-space-12) * 2) auto auto; padding: 0; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-lg); overflow: hidden; }
  .fx-command[open] { display: flex; flex-direction: column; }
  /* Kirish va chiqish (WDS «Harakat»: har kirishning chiqishi bor; chiqish ~30 % tez) */
  .fx-command { opacity: 0; scale: var(--fx-motion-scale-enter); transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), scale var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete, overlay var(--fx-motion-exit-fast) allow-discrete; }
  .fx-command[open] { opacity: 1; scale: 1; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-command[open] { opacity: 0; scale: var(--fx-motion-scale-enter); } }

  .fx-command::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 30%, transparent); }
  .fx-command__input { flex: none; inline-size: 100%; block-size: var(--fx-control-h-lg); padding-inline: var(--fx-space-5); box-sizing: border-box; border: 0; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); background: transparent; color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-md); }
  .fx-command__input:focus { outline: none; }
  .fx-command__input::placeholder { color: var(--fx-text-tertiary); }
  .fx-command__foot { flex: none; display: flex; gap: var(--fx-space-4); padding: var(--fx-space-2) var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  /* Sahifalar yoʻli (2.133): kiritilgan sahifalar kichik belgilar bilan maydon tepasida */
  .fx-command__crumbs { flex: none; display: flex; flex-wrap: wrap; gap: var(--fx-space-1); padding: var(--fx-space-3) var(--fx-space-5) 0; }
  .fx-command__crumbs[hidden] { display: none; }
  .fx-command__crumb { padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-command__crumb + .fx-command__crumb::before { content: "› "; color: var(--fx-text-tertiary); }
  /* Sahifaga kiruvchi variant: oʻngda chevron */
  .fx-option[data-page]::after { content: "›"; margin-inline-start: auto; color: var(--fx-text-tertiary); }
  .fx-option__hint + .fx-option__hint { margin-inline-start: var(--fx-space-2); }
  .fx-listbox__group[hidden] { display: none; }
}

/* comments */
@layer fx.components {
  /* Izohlar ipi: avatar, muallif, vaqt, matn; amallar — javob, tahrirlash, hal qilish. Bir qavat ichma-ich (javoblar). Hal qilingan izoh xiralashadi va «Hal qilingan» belgisi chiqadi. */
  .fx-comments__list, .fx-comment__replies { display: grid; gap: var(--fx-space-4); margin: 0; padding: 0; list-style: none; }
  .fx-comment { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: var(--fx-space-3); align-items: start; }
  .fx-comment__main { display: grid; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-comment__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--fx-space-2); font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-comment__author { color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-comment__badge { display: inline-flex; align-items: center; gap: var(--fx-space-1); padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); font-weight: var(--fx-font-weight-semibold); }
  .fx-comment__badge::before { content: "✓"; }
  .fx-comment__badge[hidden] { display: none; }
  .fx-comment__body { color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); line-height: 1.6; overflow-wrap: anywhere; }
  .fx-comment__body > :first-child { margin-block-start: 0; }
  .fx-comment__body > :last-child { margin-block-end: 0; }
  .fx-comment__actions { display: flex; flex-wrap: wrap; gap: var(--fx-space-1); margin-inline-start: calc(var(--fx-space-2) * -1); }
  .fx-comment__action { min-block-size: var(--fx-space-6); padding: 0 var(--fx-space-2); border: 0; border-radius: var(--fx-radius-badge); background: none; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-comment__action:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-comment__action:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-comment__form { display: grid; gap: var(--fx-space-2); margin-block-start: var(--fx-space-1); }
  .fx-comment__form[hidden] { display: none; }
  .fx-comment__form-actions { display: flex; gap: var(--fx-space-2); }
  .fx-comment__replies { grid-column: 2; margin-block-start: var(--fx-space-3); padding-inline-start: var(--fx-space-4); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-comment__replies:empty { display: none; }
  .fx-comment[data-resolved] > .fx-comment__main > .fx-comment__body, .fx-comment[data-resolved] > .fx-avatar { opacity: 0.55; }
}

/* compare */
@layer fx.components {
  /* Oldin/keyin taqqoslash (4.77): ikki qatlam ustma-ust, ajratgichni sudrab solishtiriladi. Boshqaruv — haqiqiy
     <input type="range"> (butun maydon ustida, koʻrinmas): sichqoncha, barmoq va klaviatura (← → Home End PageUp/Down) tekin.
     foxui.js (data-fx-compare) qiymatni --fx-compare-pos ga yozadi; JS boʻlmasa — 50% da turadi. */
  .fx-compare {
    --fx-compare-pos: 50%;
    position: relative;
    display: grid;
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-muted);
    user-select: none;
    touch-action: pan-y;
  }
  .fx-compare__before, .fx-compare__after { grid-area: 1 / 1; min-inline-size: 0; }
  .fx-compare__before > :is(img, video), .fx-compare__after > :is(img, video) { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-compare__after { clip-path: inset(0 0 0 var(--fx-compare-pos)); }
  .fx-compare:dir(rtl) .fx-compare__after { clip-path: inset(0 var(--fx-compare-pos) 0 0); }
  /* yorliqlar: «Oldin» chap tepada, «Keyin» oʻng tepada */
  .fx-compare__label {
    position: absolute;
    inset-block-start: var(--fx-space-3);
    z-index: 2;
    padding: calc(var(--fx-space-1) / 2) var(--fx-space-2);
    border-radius: var(--fx-radius-badge);
    background: color-mix(in oklab, var(--fx-bg-surface) 85%, transparent);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-medium);
    backdrop-filter: blur(calc(var(--fx-space-2) * var(--fx-knob-blur)));
    pointer-events: none;
  }
  .fx-compare__label[data-side="before"] { inset-inline-start: var(--fx-space-3); }
  .fx-compare__label[data-side="after"] { inset-inline-end: var(--fx-space-3); }
  /* ajratgich chizigʻi va tutqich */
  .fx-compare__handle {
    position: absolute;
    inset-block: 0;
    inset-inline-start: var(--fx-compare-pos);
    z-index: 2;
    inline-size: var(--fx-border-width-focus);
    translate: -50% 0;
    background: var(--fx-bg-static-light);
    box-shadow: var(--fx-shadow-md);
    pointer-events: none;
  }
  .fx-compare:dir(rtl) .fx-compare__handle { translate: 50% 0; }
  .fx-compare__handle::after {
    content: "";
    position: absolute;
    inset-block-start: 50%;
    inset-inline-start: 50%;
    inline-size: var(--fx-size-control-md);
    block-size: var(--fx-size-control-md);
    translate: -50% -50%;
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-circle);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-md);
    transition: scale var(--fx-motion-fast) var(--fx-ease-standard);
  }
  /* tutqichdagi ← → belgisi (mask — rang mavzudan) */
  .fx-compare__handle::before {
    content: "";
    position: absolute;
    inset-block-start: 50%;
    inset-inline-start: 50%;
    z-index: 1;
    inline-size: var(--fx-size-icon-md);
    block-size: var(--fx-size-icon-md);
    translate: -50% -50%;
    background: var(--fx-text-secondary);
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 7l-5 5 5 5M15 7l5 5-5 5'/%3E%3C/svg%3E") center / contain no-repeat;
  }
  .fx-compare:hover .fx-compare__handle::after, .fx-compare:has(.fx-compare__range:active) .fx-compare__handle::after { scale: calc(1 + 0.08 * var(--fx-knob-motion)); }
  .fx-compare:has(.fx-compare__range:focus-visible) .fx-compare__handle::after { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* koʻrinmas boshqaruv: butun maydon */
  .fx-compare__range {
    position: absolute;
    inset: 0;
    z-index: 3;
    inline-size: 100%;
    block-size: 100%;
    margin: 0;
    opacity: 0;
    cursor: ew-resize;
    appearance: none;
  }
  .fx-compare[data-ratio="video"] { aspect-ratio: 16 / 9; }
  .fx-compare[data-ratio="square"] { aspect-ratio: 1; }
  @media (forced-colors: active) { .fx-compare__handle { background: CanvasText; } }
}

/* composer */
@layer fx.components {
  /* Yozish paneli (composer) — AI chat va messenjer uchun BITTA komponent. Qatorlar: kontekst (javob/tahrir) · biriktirmalar · asosiy qator
     (biriktirish · avto-oʻsuvchi maydon · emoji · mikrofon ↔ yuborish ↔ toʻxtatish) · pastki qator. Holatlar atributlarda:
     data-filled (JS, matn bor) · data-recording (JS) · data-streaming va data-locked (ilova qoʻyadi). JS: behaviors/composer.js. */
  .fx-composer {
    position: relative;
    display: grid;
    gap: var(--fx-space-2);
    padding: var(--fx-space-2);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-field);
    box-shadow: var(--fx-shadow-sm);
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-composer:focus-within { border-color: var(--fx-border-color-focus); outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-composer__row { display: flex; align-items: flex-end; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-composer__input {
    flex: 1;
    min-inline-size: 0;
    box-sizing: border-box;
    min-block-size: var(--fx-control-h-md);
    max-block-size: calc(var(--fx-space-12) * 3.5);
    margin: 0;
    padding: var(--fx-space-2);
    border: 0;
    background: transparent;
    color: var(--fx-text-primary);
    font: inherit;
    font-size: var(--fx-font-size-md);
    line-height: 1.5;
    resize: none;
    field-sizing: content;
    outline: none;
  }
  .fx-composer__input::placeholder { color: var(--fx-text-tertiary); }
  .fx-composer__btn, .fx-composer__send {
    flex: none;
    display: grid;
    place-items: center;
    inline-size: var(--fx-control-h-md);
    block-size: var(--fx-control-h-md);
    padding: 0;
    border: 0;
    border-radius: var(--fx-radius-control);
    background: transparent;
    color: var(--fx-text-secondary);
    font: inherit;
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-composer__btn:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-composer__btn:active, .fx-composer__send:active { scale: var(--fx-motion-press); }
  .fx-composer :is(.fx-composer__btn, .fx-composer__send, .fx-composer__ctx-close, .fx-composer__rec-cancel):focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-composer__btn:disabled, .fx-composer__send:disabled { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-composer__btn > svg, .fx-composer__ctx-close > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }

  /* Mikrofon ↔ yuborish ↔ toʻxtatish: bitta tugma, uch ikon ustma-ust; faol ikon sirpanib almashadi */
  .fx-composer__send > svg { grid-area: 1 / 1; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; opacity: 0; scale: 0.5; rotate: -60deg; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring), rotate var(--fx-motion-base) var(--fx-ease-spring); }
  .fx-composer__send > [data-fx-icon="stop"] { fill: currentColor; stroke: none; }
  .fx-composer__send > [data-fx-icon="mic"] { opacity: 1; scale: 1; rotate: 0deg; }
  .fx-composer:is([data-filled], [data-recording]) .fx-composer__send > [data-fx-icon="mic"] { opacity: 0; scale: 0.5; rotate: 60deg; }
  .fx-composer:is([data-filled], [data-recording]) .fx-composer__send > [data-fx-icon="send"] { opacity: 1; scale: 1; rotate: 0deg; }
  .fx-composer[data-streaming] .fx-composer__send > :is([data-fx-icon="mic"], [data-fx-icon="send"]) { opacity: 0; scale: 0.5; rotate: 60deg; }
  .fx-composer[data-streaming] .fx-composer__send > [data-fx-icon="stop"] { opacity: 1; scale: 1; rotate: 0deg; }
  .fx-composer:is([data-filled], [data-recording], [data-streaming]) .fx-composer__send { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-composer:is([data-filled], [data-recording], [data-streaming]) .fx-composer__send:hover { background: var(--fx-bg-brand-solid-hover); }
  .fx-composer:not(:is([data-filled], [data-recording], [data-streaming])) .fx-composer__send:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }

  /* Kontekst qatori: javob yoki tahrir (ikon · muallif · matn · ×) */
  .fx-composer__ctx { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--fx-space-2); padding: var(--fx-space-1) var(--fx-space-1) var(--fx-space-1) var(--fx-space-3); border-inline-start: calc(var(--fx-border-width-focus) * 1.25) solid var(--fx-text-brand); border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); animation: fx-composer-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-composer__ctx > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: var(--fx-text-brand); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
  .fx-composer__ctx[data-kind="reply"] > [data-fx-icon="edit"], .fx-composer__ctx[data-kind="edit"] > [data-fx-icon="reply"] { display: none; }
  .fx-composer__ctx-body { display: grid; min-inline-size: 0; font-size: var(--fx-font-size-xs); }
  .fx-composer__ctx-author { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-composer__ctx-text { overflow: hidden; color: var(--fx-text-secondary); text-overflow: ellipsis; white-space: nowrap; }
  .fx-composer__ctx-close { display: grid; place-items: center; inline-size: var(--fx-size-min-target); block-size: var(--fx-size-min-target); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: transparent; color: var(--fx-text-tertiary); cursor: pointer; }
  .fx-composer__ctx-close:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  @keyframes fx-composer-in { from { opacity: 0; translate: 0 var(--fx-motion-shift-sm); } }

  .fx-composer__attachments { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); padding-inline: var(--fx-space-1); }
  .fx-composer__attachments:not(:has(*)) { display: none; }
  .fx-composer__foot { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); padding-inline: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }

  /* @eslatma takliflari menyusi (combobox naqshi: textarea role=combobox boʻladi, ochiq paytida) */
  .fx-composer__mention { position: absolute; inset-inline: 0; inset-block-end: calc(100% + var(--fx-space-2)); z-index: 1; display: grid; max-block-size: calc(var(--fx-space-12) * 4); margin: 0; padding: var(--fx-space-1); overflow-y: auto; list-style: none; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); animation: fx-composer-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-composer__mention[hidden] { display: none; }
  .fx-composer__mention [role="option"] { display: flex; align-items: baseline; gap: var(--fx-space-2); padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-control); font-size: var(--fx-font-size-sm); cursor: pointer; }
  .fx-composer__mention [role="option"][hidden] { display: none; }
  .fx-composer__mention [role="option"]:hover { background: var(--fx-bg-muted); }
  .fx-composer__mention [role="option"][data-active] { background: var(--fx-bg-brand-subtle); }
  .fx-composer__mention-name { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  .fx-composer__mention-role { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }

  /* Ovoz yozish: brend nuqta pulsatsiyasi (qizil emas), taymer — mono */
  .fx-composer__rec { display: none; flex: 1; align-items: center; gap: var(--fx-space-3); min-inline-size: 0; padding-inline: var(--fx-space-2); }
  .fx-composer[data-recording] .fx-composer__rec { display: flex; }
  .fx-composer[data-recording] .fx-composer__row > :not(.fx-composer__rec, .fx-composer__send) { display: none; }
  .fx-composer__rec-dot { flex: none; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border-radius: var(--fx-radius-circle); background: var(--fx-text-brand); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-composer__rec-time { font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; color: var(--fx-text-primary); }
  .fx-composer__rec-label { flex: 1; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-composer__rec-cancel { padding: var(--fx-space-1) var(--fx-space-3); border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); cursor: pointer; }
  .fx-composer__rec-cancel:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  @media (prefers-reduced-motion: reduce) { .fx-composer__rec-dot { animation: none; } }

  /* Yozish bloklangan: qulf ikon + sabab (soʻz bilan) */
  .fx-composer__lock { display: none; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-composer__lock > svg { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
  .fx-composer[data-locked] { background: var(--fx-bg-muted); box-shadow: none; }
  .fx-composer[data-locked] .fx-composer__lock { display: flex; }
  .fx-composer[data-locked] > :not(.fx-composer__lock) { display: none; }

  /* Messenjer: toʻldirilgan quduq, chegara va soya yoʻq, yuborish — doira */
  .fx-composer[data-variant="messenger"] { gap: var(--fx-space-1); border-color: transparent; border-radius: var(--fx-radius-overlay); background: var(--fx-bg-muted); box-shadow: none; }
  .fx-composer[data-variant="messenger"] .fx-composer__send { border-radius: var(--fx-radius-circle); }
  .fx-composer[data-variant="messenger"] .fx-composer__input { font-size: var(--fx-font-size-sm); }
  .fx-composer[data-variant="messenger"] .fx-composer__ctx { background: var(--fx-bg-surface); }
}

/* consent */
@layer fx.components {
  /* Cookie roziligi (4.180, GOV.UK Cookie banner): pastki karta — qisqa tushuntirish + «Qabul qilish» / «Rad etish» / «Sozlash».
     «Sozlash» shu kartaning ichida toifalarni ochadi (zarur — doim yoqiq; statistika; marketing). Tanlovdan keyin — tasdiq xabari
     va «Yashirish». foxui.js (data-fx-consent="kalit") tanlovni localStorage’da saqlaydi va "fx-consent" hodisasini yuboradi;
     tanlov boʻlsa banner chiqmaydi. [data-consent-open="kalit"] tugmasi (masalan footer’da) sozlamalarni qayta ochadi. */
  .fx-consent {
    box-sizing: border-box;
    position: fixed;
    inset-block-end: var(--fx-space-4);
    inset-inline: var(--fx-space-4);
    z-index: 9;
    display: grid;
    gap: var(--fx-space-4);
    max-inline-size: calc(var(--fx-dialog-width) * 1.5);
    margin-inline: auto;
    padding: var(--fx-space-5);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-lg);
    transition: opacity var(--fx-motion-slow) var(--fx-ease-enter), translate var(--fx-motion-slow) var(--fx-ease-enter);
  }
  @starting-style { .fx-consent { opacity: 0; translate: 0 var(--fx-motion-shift-lg); } }
  .fx-consent[data-position="corner"] { inset-inline: auto var(--fx-space-4); max-inline-size: var(--fx-dialog-width); }
  .fx-consent[data-position="inline"] { position: relative; inset: auto; z-index: auto; max-inline-size: none; margin-inline: 0; }
  .fx-consent__main { display: grid; gap: var(--fx-space-4); }
  .fx-consent__head { display: flex; align-items: flex-start; gap: var(--fx-space-3); }
  .fx-consent__icon { flex: none; display: grid; place-items: center; inline-size: var(--fx-size-control-sm); block-size: var(--fx-size-control-sm); border-radius: var(--fx-radius-control); background: var(--fx-bg-category-yellow-subtle); color: var(--fx-text-primary); }
  .fx-consent__icon > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-consent__title { margin: 0 0 var(--fx-space-1); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-consent__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-wrap: pretty; }
  .fx-consent__text a { color: var(--fx-text-primary); }
  .fx-consent__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-consent__actions > [data-consent="settings"] { margin-inline-start: auto; }
  /* toifalar paneli */
  .fx-consent__prefs { display: grid; gap: var(--fx-space-1); margin: 0; padding: var(--fx-space-3) 0 0; border: 0; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-consent__pref { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--fx-space-4); padding-block: var(--fx-space-2); }
  .fx-consent__pref + .fx-consent__pref { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-consent__pref-title { display: block; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-consent__pref-text { display: block; margin-block-start: calc(var(--fx-space-1) / 2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  /* tanlovdan keyin: tasdiq xabari */
  .fx-consent__done { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-3); font-size: var(--fx-font-size-sm); }
  .fx-consent__done:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-space-1); border-radius: var(--fx-radius-badge); }
  .fx-consent__done-text { flex: 1 1 auto; margin: 0; }
  @media (max-width: 40em) {
    .fx-consent { inset-inline: var(--fx-space-2); inset-block-end: var(--fx-space-2); padding: var(--fx-space-4); }
    .fx-consent__actions > .fx-btn { flex: 1 1 auto; }
    .fx-consent__actions > [data-consent="settings"] { margin-inline-start: 0; flex-basis: 100%; }
  }
  @media (forced-colors: active) { .fx-consent { border-color: CanvasText; } }
}

/* contact */
@layer fx.components {
  /* Aloqa sahifasi / boʻlimi (4.177, naqsh): chapda sarlavha, aloqa kanallari (telefon, email, Telegram, manzil — har biri
     ikon + nom + qiymat + izoh) va ish vaqti; oʻngda forma (fx-field’lar) — yuborilgach .fx-contact__done koʻrinadi.
     Ostida ixtiyoriy filiallar qatori (.fx-contact__offices). data-layout: split (standart) · stack (forma markazda, kanallar ostida).
     Formaning ishlashi — ilovada (masalan POST /api/ariza); naqsh faqat tuzilma va holatlarni beradi. */
  .fx-contact { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); align-items: start; gap: var(--fx-space-10) var(--fx-space-12); }
  .fx-contact__info { display: grid; gap: var(--fx-space-6); }
  .fx-contact__head { display: grid; gap: var(--fx-space-3); }
  .fx-contact__eyebrow { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-contact__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.02em; text-wrap: balance; color: var(--fx-text-primary); }
  .fx-contact__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-contact__channels { display: grid; gap: var(--fx-space-5); margin: 0; padding: 0; list-style: none; }
  .fx-contact__channel { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: calc(var(--fx-space-1) / 2) var(--fx-space-4); }
  .fx-contact__icon {
    grid-row: span 3;
    display: grid;
    place-items: center;
    inline-size: var(--fx-control-h-lg);
    block-size: var(--fx-control-h-lg);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    color: var(--fx-text-brand);
    box-shadow: var(--fx-shadow-sm);
  }
  .fx-contact__icon > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-contact__name { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-contact__hint { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-contact__value { justify-self: start; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); text-decoration: none; overflow-wrap: anywhere; }
  .fx-contact__value:hover { text-decoration: underline; text-underline-offset: 0.2em; }
  .fx-contact__value:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-contact__hours { display: grid; grid-template-columns: auto auto; justify-content: start; gap: var(--fx-space-1) var(--fx-space-6); margin: 0; padding: var(--fx-space-4); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); font-size: var(--fx-font-size-sm); }
  .fx-contact__hours dt { color: var(--fx-text-secondary); }
  .fx-contact__hours dd { margin: 0; color: var(--fx-text-primary); font-variant-numeric: tabular-nums; }
  .fx-contact__form {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--fx-space-4);
    padding: var(--fx-space-6);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
  }
  .fx-contact__form > :is(.fx-contact__wide, fieldset, .fx-contact__actions, .fx-contact__done) { grid-column: 1 / -1; }
  .fx-contact__actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-contact__privacy { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-contact__privacy a { color: inherit; }
  /* yuborilgandan keyin: forma maydonlari oʻrnida rahmat xabari (fokus shu yerga oʻtadi) */
  .fx-contact__done { display: grid; justify-items: center; gap: var(--fx-space-2); padding: var(--fx-space-8) var(--fx-space-4); text-align: center; animation: fx-fade-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-contact__done[hidden] { display: none; }
  .fx-contact__done:focus { outline: none; }
  .fx-contact__done-mark { display: grid; place-items: center; inline-size: var(--fx-control-h-lg); block-size: var(--fx-control-h-lg); border-radius: var(--fx-radius-circle); background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); font-weight: var(--fx-font-weight-semibold); }
  .fx-contact__done-title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-contact__done-text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-contact__form[data-state="sent"] > :not(.fx-contact__done) { display: none; }
  /* filiallar: toʻliq kenglikdagi kartalar qatori */
  .fx-contact__offices { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-space-12) * 5)), 1fr)); gap: var(--fx-space-4); margin: 0; padding: var(--fx-space-6) 0 0; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); list-style: none; }
  .fx-contact__office { display: grid; gap: var(--fx-space-1); font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-contact__office > strong { color: var(--fx-text-primary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }

  .fx-contact[data-layout="stack"] { grid-template-columns: minmax(0, 1fr); max-inline-size: calc(var(--fx-dialog-width) * 1.6); margin-inline: auto; }
  .fx-contact[data-layout="stack"] .fx-contact__head { justify-items: center; text-align: center; }
  .fx-contact[data-layout="stack"] .fx-contact__channels { grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-space-12) * 4.5)), 1fr)); }
  .fx-contact[data-layout="stack"] .fx-contact__info { order: 2; }
  @media (max-width: 52em) {
    .fx-contact { grid-template-columns: minmax(0, 1fr); }
  }
  @media (max-width: 30em) {
    .fx-contact__form { grid-template-columns: minmax(0, 1fr); padding: var(--fx-space-4); }
  }
}

/* context-meter */
@layer fx.components {
  /* Kontekst sarfi oʻlchagichi: halqa + «48 %» matni. Qiymat: style="--fx-meter-value: 48%" va role="meter" aria-valuenow (ikkalasini ilova bir vaqtda yangilaydi).
     80 % dan — ogohlantirish (data-level="warn": brend → ogohlantirish rangi + soʻz), 95 % dan — toʻla (data-level="full": xato rangi + soʻz). */
  .fx-context-meter { --fx-meter-value: 0%; --_c: var(--fx-text-brand); display: inline-flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-context-meter[data-level="warn"] { --_c: var(--fx-fg-warning); }
  .fx-context-meter[data-level="full"] { --_c: var(--fx-fg-error); }
  .fx-context-meter__ring { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); border-radius: var(--fx-radius-circle); background: conic-gradient(var(--_c) clamp(0%, var(--fx-meter-value), 100%), var(--fx-bg-muted) 0); mask: radial-gradient(farthest-side, transparent calc(100% - var(--fx-border-width-focus) * 2), currentColor calc(100% - var(--fx-border-width-focus) * 2 + 0.5px)); transition: background var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-context-meter__value { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  .fx-context-meter__note { display: none; color: var(--_c); font-weight: var(--fx-font-weight-medium); }
  .fx-context-meter__note::before { content: "! "; }
  .fx-context-meter:is([data-level="warn"], [data-level="full"]) .fx-context-meter__note { display: inline; }
}

/* context */
@layer fx.components {
  /* Kontekst menyu: maydon (.fx-context) ustida oʻng tugma, uzoq bosish yoki Shift+F10 / ☰ tugmasi — .fx-menu kursor oʻrnida ochiladi.
     Menyuning oʻzi — oddiy fx-menu (data-context bilan). Xulq — foxui.js (data-fx-context="menyu-id"). */
  .fx-context { -webkit-touch-callout: none; }
  .fx-context:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-context[data-context-open] { background: var(--fx-bg-subtle); }
  .fx-menu[data-context] { position: fixed; inset: auto; margin: 0; position-area: none; position-try-fallbacks: none; transform-origin: top left; }
}

/* contextmenu */
@layer fx.components {
  /* Kontekst menyu (4.147): hududda oʻng tugma, uzoq bosish (telefon) yoki Shift+F10 / Menu tugmasi — kursor (yoki fokusdagi band) joyida
     fx-menu ochiladi. Menyu — oddiy fx-menu (klaviatura, Esc, tashqariga bosish — oʻsha yerda); bu komponent faqat ochish va joylashuvni beradi.
     Menyu ochilgan nishon (.fx-contextmenu__target) — belgilanadi (fon + chap chiziq), toki foydalanuvchi qaysi qatorga amal qilayotganini koʻrsin. */
  .fx-contextmenu { position: relative; -webkit-touch-callout: none; }
  .fx-contextmenu:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-surface); }
  .fx-contextmenu__target { position: relative; border-radius: var(--fx-radius-control); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-contextmenu__target:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-contextmenu__target[data-context-open] { background: var(--fx-bg-muted); }
  .fx-contextmenu__target[data-context-open]::before { content: ""; position: absolute; inset-block: var(--fx-space-1); inset-inline-start: 0; inline-size: var(--fx-border-width-focus); border-radius: var(--fx-border-width-focus); background: var(--fx-border-color-strong); }
  .fx-menu.fx-contextmenu__menu { position: fixed; inset: auto; inset-inline-start: var(--_x, 0); inset-block-start: var(--_y, 0); position-area: none; position-try-fallbacks: none; margin: 0; transform-origin: top left; }
  .fx-contextmenu__hint { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  @media (forced-colors: active) { .fx-contextmenu__target[data-context-open] { outline: var(--fx-border-width-focus) solid Highlight; } }
}

/* conversation */
@layer fx.components {
  /* Suhbat oqimi (AI chat va messenjer): xabarlar lentasi role="log", avto-pastga, «↓ Yangi xabar» tugmasi, pastda composer.
     Ustun kengligi 72ch (AI); data-variant="messenger" — toʻliq kenglik, pufakchalar oʻz oraligʻi bilan. JS: behaviors/conversation.js. */
  .fx-conversation { position: relative; display: grid; grid-template-rows: minmax(0, 1fr) auto; min-block-size: 0; block-size: 100%; }
  .fx-conversation__log {
    grid-area: 1 / 1;
    display: flex;
    flex-direction: column;
    gap: var(--fx-space-6);
    min-block-size: 0;
    padding-block: var(--fx-space-6);
    padding-inline: max(var(--fx-space-4), calc((100% - 72ch) / 2));
    overflow: hidden auto;
    overscroll-behavior: contain;
  }
  .fx-conversation__log:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-conversation__log > .fx-message { inline-size: 100%; max-inline-size: none; }
  .fx-conversation__log > .fx-message[data-role="user"] { max-inline-size: 72ch; }
  .fx-conversation[data-variant="messenger"] .fx-conversation__log { gap: 0; padding-inline: var(--fx-space-4); }
  .fx-conversation[data-variant="messenger"] .fx-conversation__log > .fx-message[data-variant="bubble"] { inline-size: auto; max-inline-size: min(78%, 64ch); }
  .fx-conversation__empty { display: grid; justify-items: center; gap: var(--fx-space-3); margin-block: auto; text-align: center; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-conversation__empty > h2 { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); }
  .fx-conversation__jump {
    grid-area: 1 / 1;
    z-index: 1;
    align-self: end;
    justify-self: center;
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-2);
    margin-block-end: var(--fx-space-3);
    padding: var(--fx-space-2) var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-circle);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-md);
    font: inherit;
    font-size: var(--fx-font-size-sm);
    cursor: pointer;
    animation: fx-conversation-jump var(--fx-motion-base) var(--fx-ease-enter);
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-conversation__jump:hover { background: var(--fx-bg-subtle); }
  .fx-conversation__jump:active { scale: var(--fx-motion-press); }
  .fx-conversation__jump:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-conversation__jump > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
  .fx-conversation__jump [data-count]:not(:empty) { min-inline-size: var(--fx-size-icon-md); padding-inline: var(--fx-space-1); border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; text-align: center; }
  @keyframes fx-conversation-jump { from { opacity: 0; translate: 0 var(--fx-motion-shift-sm); } }
  .fx-conversation__foot { grid-area: 2 / 1; padding: var(--fx-space-2) max(var(--fx-space-4), calc((100% - 72ch) / 2)) var(--fx-space-4); }
  .fx-conversation[data-variant="messenger"] .fx-conversation__foot { padding-inline: var(--fx-space-4); }
}

/* convo */
@layer fx.components {
  /* Suhbatlar roʻyxati (PDP Chat): avatar (onlayn nuqta) · nom · vaqt · oxirgi xabar · belgilar.
     Holatlar doim ikon yoki soʻz bilan ham: oʻqilmagan (nom qalin, vaqt brend, son), eslatma (@), qadalgan, ovozsiz (xira),
     qoralama («Qoralama:»), yozmoqda («yozmoqda…»), oʻqildi (✓✓), tanlangan (brend tusi). */
  .fx-convos { display: grid; margin: 0; padding: var(--fx-space-1); list-style: none; }
  .fx-convo {
    display: grid; grid-template-columns: auto minmax(0, 1fr) auto; grid-template-rows: auto auto; column-gap: var(--fx-space-3); row-gap: calc(var(--fx-space-1) / 2);
    align-items: center; padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-control); color: var(--fx-text-primary); text-decoration: none;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-convo:hover { background: var(--fx-bg-subtle); }
  .fx-convo:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-convo[aria-current] { background: var(--fx-bg-brand-subtle); }
  .fx-convo > .fx-avatar { grid-row: span 2; }
  .fx-convo__name { display: flex; align-items: center; gap: var(--fx-space-1); min-inline-size: 0; overflow: hidden; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); text-overflow: ellipsis; white-space: nowrap; }
  .fx-convo__name > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: var(--fx-text-tertiary); }
  .fx-convo__time { display: inline-flex; align-items: center; gap: calc(var(--fx-space-1) / 2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-convo__preview { min-inline-size: 0; overflow: hidden; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); text-overflow: ellipsis; white-space: nowrap; }
  .fx-convo__preview > b { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  .fx-convo__badges { display: flex; align-items: center; justify-content: end; gap: var(--fx-space-1); }
  .fx-convo__badges > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: var(--fx-text-tertiary); }
  .fx-convo__n { min-inline-size: var(--fx-size-icon-md); padding: 0 var(--fx-space-1); box-sizing: border-box; border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-size: calc(var(--fx-font-size-xs) * 0.92); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-size-icon-md); text-align: center; font-variant-numeric: tabular-nums; }
  .fx-convo__mention { display: grid; place-items: center; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); }
  /* holatlar */
  .fx-convo[data-unread] .fx-convo__name { font-weight: var(--fx-font-weight-semibold); }
  .fx-convo[data-unread] .fx-convo__time { color: var(--fx-text-brand); }
  .fx-convo[data-muted] .fx-convo__name { color: var(--fx-text-secondary); }
  .fx-convo[data-muted] .fx-convo__n { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  .fx-convo__draft { color: var(--fx-fg-error); }
  .fx-convo__typing { color: var(--fx-text-brand); }
  .fx-convo__tick { inline-size: var(--fx-size-icon-sm); block-size: calc(var(--fx-size-icon-sm) * 0.75); background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 12'%3E%3Cpath d='M1 6.5 4 9l6-6.5M7 8.5l.5.5 6-6.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-convo__tick[data-read] { color: var(--fx-text-brand); }
}

/* copy */
@layer fx.components {
  /* Nusxa tugmasi: nusxa ikoni → ✓ ga yumshoq almashadi (2 s), natija aria-live bilan e’lon qilinadi.
     JS: behaviors/copy.js — data-fx-copy + data-copy-target="#id" yoki data-copy="matn". */
  .fx-copy { position: relative; display: inline-grid; place-items: center; flex: none; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-secondary); font: inherit; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-copy:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-copy:active { scale: var(--fx-motion-press); }
  .fx-copy:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-copy > svg { grid-area: 1 / 1; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring); }
  .fx-copy > [data-fx-icon="check"] { opacity: 0; scale: 0.5; }
  .fx-copy[data-state="copied"] { color: var(--fx-fg-success); }
  .fx-copy[data-state="copied"] > [data-fx-icon="copy"] { opacity: 0; scale: 0.5; }
  .fx-copy[data-state="copied"] > [data-fx-icon="check"] { opacity: 1; scale: 1; }
  .fx-copy[data-state="error"] { color: var(--fx-fg-error); }
  .fx-copy__status { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  /* Matnli variant: yozuv ham almashadi */
  .fx-copy[data-variant="text"] { inline-size: auto; padding-inline: var(--fx-space-3); gap: var(--fx-space-2); grid-auto-flow: column; font-size: var(--fx-font-size-xs); }
}

/* count */
@layer fx.components {
  /* Son belgisi ikon yoki tugma ustida (oʻqilmagan xabarlar). Ota element position: relative boʻlishi kerak. */
  .fx-count {
    position: absolute;
    inset-block-start: calc(var(--fx-space-1) * -1);
    inset-inline-end: calc(var(--fx-space-1) * -1);
    min-inline-size: var(--fx-size-icon-md);
    block-size: var(--fx-size-icon-md);
    box-sizing: border-box;
    padding-inline: var(--fx-space-1);
    display: inline-grid;
    place-items: center;
    border-radius: var(--fx-radius-circle);
    border: var(--fx-border-width-focus) solid var(--fx-bg-surface);
    background: var(--fx-bg-error-solid);
    color: var(--fx-text-on-error);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-semibold);
    font-variant-numeric: tabular-nums;
    line-height: 1;
  }
  .fx-count[data-shape="dot"] { min-inline-size: 0; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); padding: 0; inset-block-start: 0; inset-inline-end: 0; }
  /* Son oʻzgarganda «sakraydi»: ilova data-bump atributini qoʻyib-oladi */
  .fx-count[data-bump] { animation: fx-count-bump var(--fx-motion-slow) var(--fx-ease-spring); }
  @keyframes fx-count-bump { 40% { scale: 1.25; } }
  /* ---- Kengaytma (2.61): oqim ichida (ota elementsiz) va ohanglar ---- */
  .fx-count[data-inline] { position: static; display: inline-grid; border-width: 0; vertical-align: middle; }
  .fx-count[data-tone="neutral"] { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  .fx-count[data-tone="brand"] { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-count[data-tone="success"] { background: var(--fx-fg-success); color: var(--fx-bg-surface); }
  @media (forced-colors: active) { .fx-count { border-color: ButtonText; background: Highlight; color: HighlightText; forced-color-adjust: none; } }
}

/* countdown */
@layer fx.components {
  /* Teskari sanoq (4.88): aksiya tugashi, OTP qayta yuborish, imtihon vaqti. Raqamlar tabular (sakramaydi), birlik soʻz bilan.
     Holatlar: oz qoldi (data-state="urgent") — qizil + «!» belgisi va «Oz qoldi» soʻzi; tugadi (data-state="ended") — chizilgan + matn.
     Ekran oʻquvchiga siyrak aytiladi (har daqiqa, oxirgi 10 soniyada bir marta, tugaganda) — xulq: foxui.js → countdown. */
  .fx-countdown { display: inline-grid; justify-items: start; gap: var(--fx-space-2); color: var(--fx-text-primary); }
  .fx-countdown__label { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-countdown__units { display: flex; align-items: flex-start; gap: var(--fx-space-2); }
  .fx-countdown__unit { display: grid; justify-items: center; gap: var(--fx-space-1); min-inline-size: calc(var(--fx-control-h-lg) * 1.1); padding: var(--fx-space-2) var(--fx-space-2) var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); }
  .fx-countdown__num { font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; line-height: 1.1; }
  .fx-countdown__name { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-countdown__sep { align-self: center; padding-block-end: var(--fx-space-4); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-countdown__done { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-countdown__done[hidden] { display: none; }
  /* Ixcham: bitta qator «02:15» — OTP qayta yuborish, tugma yonida */
  .fx-countdown[data-variant="inline"] { display: inline-flex; align-items: baseline; gap: var(--fx-space-1); }
  .fx-countdown[data-variant="inline"] .fx-countdown__units { gap: 0; }
  .fx-countdown[data-variant="inline"] .fx-countdown__unit { display: inline; min-inline-size: 0; padding: 0; border: 0; background: none; }
  .fx-countdown[data-variant="inline"] .fx-countdown__num { font-size: inherit; font-weight: var(--fx-font-weight-semibold); }
  .fx-countdown[data-variant="inline"] .fx-countdown__name { display: none; }
  .fx-countdown[data-variant="inline"] .fx-countdown__sep { padding: 0; font-size: inherit; }
  /* Banner ichida: yorqin fon ustida (aksiya) */
  .fx-countdown[data-variant="solid"] .fx-countdown__unit { border-color: transparent; background: var(--fx-text-primary); color: var(--fx-bg-page); }
  .fx-countdown[data-variant="solid"] .fx-countdown__name { color: inherit; opacity: 0.75; }
  .fx-countdown[data-size="sm"] .fx-countdown__unit { min-inline-size: var(--fx-control-h-lg); padding: var(--fx-space-1); }
  .fx-countdown[data-size="sm"] .fx-countdown__num { font-size: var(--fx-font-size-md); }
  /* Oz qoldi: rang + «!» + soʻz (label ichiga data-urgent-text) */
  .fx-countdown[data-state="urgent"] .fx-countdown__num { color: var(--fx-text-error); }
  .fx-countdown[data-state="urgent"] .fx-countdown__label::before { content: "! "; color: var(--fx-text-error); font-weight: var(--fx-font-weight-semibold); }
  .fx-countdown[data-state="urgent"] .fx-countdown__label::after { content: " — oz qoldi"; color: var(--fx-text-error); }
  .fx-countdown[data-state="urgent"][data-variant="solid"] .fx-countdown__unit { background: var(--fx-bg-error-solid); color: var(--fx-text-on-error); }
  .fx-countdown[data-state="urgent"][data-variant="solid"] .fx-countdown__num { color: inherit; }
  .fx-countdown[data-state="ended"] .fx-countdown__num { color: var(--fx-text-disabled); text-decoration: line-through; }
}

/* coupon */
@layer fx.components {
  /* Promo-kod / kupon (4.92): kod kiritish → «Qoʻllash» → qoʻllangan chip (kod + chegirma, × bilan olib tashlash) yoki xato matni.
     Holat ildizda: data-state="loading|applied|error". Xato rangdan tashqari «!» + matn; qoʻllangani ✓ + chegirma summasi. */
  .fx-coupon { display: grid; gap: var(--fx-space-2); }
  .fx-coupon__form { display: flex; gap: var(--fx-space-2); }
  .fx-coupon__input { flex: 1; min-inline-size: 0; text-transform: uppercase; letter-spacing: 0.04em; font-variant-numeric: tabular-nums; }
  .fx-coupon__input::placeholder { text-transform: none; letter-spacing: normal; }
  .fx-coupon[data-state="error"] .fx-coupon__input { border-color: var(--fx-border-color-error); animation: fx-shake var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-coupon__msg { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-coupon__msg:empty { display: none; }
  .fx-coupon[data-state="error"] .fx-coupon__msg { color: var(--fx-text-error); }
  .fx-coupon[data-state="error"] .fx-coupon__msg::before { content: "! "; font-weight: var(--fx-font-weight-semibold); }
  .fx-coupon[data-state="applied"] .fx-coupon__msg { color: var(--fx-fg-success); }
  .fx-coupon[data-state="applied"] .fx-coupon__form { display: none; }
  .fx-coupon__applied { display: none; align-items: center; justify-content: space-between; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-2) var(--fx-space-2) var(--fx-space-3); border: var(--fx-border-width-default) dashed var(--fx-fg-success); border-radius: var(--fx-radius-control); background: var(--fx-bg-success-subtle); font-size: var(--fx-font-size-sm); }
  .fx-coupon[data-state="applied"] .fx-coupon__applied { display: flex; }
  .fx-coupon__code { display: inline-flex; align-items: center; gap: var(--fx-space-2); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.04em; }
  .fx-coupon__code::before { content: "✓"; color: var(--fx-fg-success); font-family: var(--fx-font-family-sans); font-size-adjust: var(--fx-font-adjust-sans); }
  .fx-coupon__value { margin-inline-start: auto; color: var(--fx-fg-success); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-coupon__remove { display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-lg); line-height: 1; cursor: pointer; }
  .fx-coupon__remove:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-coupon__remove:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  /* Yigʻilgan: «Promo-kodingiz bormi?» havolasi bosilganda forma ochiladi (details) */
  .fx-coupon__toggle { color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); cursor: pointer; list-style: none; }
  .fx-coupon__toggle::-webkit-details-marker { display: none; }
  .fx-coupon__toggle:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  details.fx-coupon[open] > .fx-coupon__toggle { margin-block-end: var(--fx-space-1); }
}

/* cta */
@layer fx.components {
  /* CTA va obuna boʻlimi (4.174): sahifa oxiridagi chaqiriq — sarlavha, izoh, tugmalar yoki email obuna formasi.
     data-tone: brand (standart — brend rangli panel, ichida naqsh) yoki subtle (yengil fon). data-layout: center yoki split.
     Obuna formasi holatlari (data-state): loading (tugma aria-busy), success (forma oʻrniga rahmat xabari), error (xato matni). */
  .fx-cta {
    position: relative;
    isolation: isolate;
    display: grid;
    justify-items: center;
    gap: var(--fx-space-5);
    padding: var(--fx-space-12) var(--fx-space-6);
    overflow: clip;
    border-radius: calc(var(--fx-radius-overlay) * 1.5);
    background: var(--fx-bg-brand-solid);
    color: var(--fx-text-on-brand);
    text-align: center;
  }
  .fx-cta > .fx-bg { z-index: -1; }
  /* yorugʻ dogʻ — panelga hajm beradi */
  .fx-cta::before { content: ""; position: absolute; inset: -40% -10% auto; z-index: -1; block-size: 120%; background: radial-gradient(ellipse 50% 50% at 50% 30%, color-mix(in oklab, var(--fx-text-on-brand) 16%, transparent), transparent 70%); pointer-events: none; }
  .fx-cta__title { margin: 0; max-inline-size: 24ch; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1.12; letter-spacing: -0.02em; text-wrap: balance; }
  .fx-cta__text { margin: 0; max-inline-size: 56ch; color: color-mix(in oklab, currentColor 78%, transparent); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-cta__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-3); margin-block-start: var(--fx-space-2); }
  /* brend panel ustida tugmalar teskari rangda */
  .fx-cta:not([data-tone="subtle"]) .fx-btn[data-variant="primary"] { background: var(--fx-text-on-brand); color: var(--fx-bg-brand-solid); }
  .fx-cta:not([data-tone="subtle"]) .fx-btn:not([data-variant]) { border-color: color-mix(in oklab, var(--fx-text-on-brand) 35%, transparent); background: transparent; color: var(--fx-text-on-brand); }
  .fx-cta:not([data-tone="subtle"]) .fx-btn:not([data-variant]):hover { background: color-mix(in oklab, var(--fx-text-on-brand) 12%, transparent); }
  .fx-cta:not([data-tone="subtle"]) :is(.fx-btn, .fx-input):focus-visible { outline-color: var(--fx-text-on-brand); }
  .fx-cta[data-tone="subtle"] { border: var(--fx-border-width-default) solid var(--fx-border-color-surface); background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  .fx-cta[data-tone="subtle"]::before { background: radial-gradient(ellipse 50% 50% at 50% 30%, color-mix(in oklab, var(--fx-bg-brand-solid) 14%, transparent), transparent 70%); }
  /* obuna formasi */
  .fx-cta__form { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); inline-size: 100%; max-inline-size: calc(var(--fx-dialog-width) * 0.95); margin-block-start: var(--fx-space-2); }
  .fx-cta__form > .fx-input, .fx-cta__form > .fx-field { flex: 1 1 calc(var(--fx-popover-width) * 0.6); }
  .fx-cta:not([data-tone="subtle"]) .fx-cta__form .fx-input { border-color: transparent; background: var(--fx-bg-surface); color: var(--fx-text-primary); }
  .fx-cta__hint { margin: 0; color: color-mix(in oklab, currentColor 65%, transparent); font-size: var(--fx-font-size-xs); }
  .fx-cta__status { margin: 0; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-cta__status:empty { display: none; }
  .fx-cta[data-state="success"] .fx-cta__form, .fx-cta[data-state="success"] .fx-cta__hint { display: none; }
  .fx-cta[data-state="success"] .fx-cta__status::before { content: "✓ "; }
  .fx-cta[data-state="error"] .fx-cta__status::before { content: "✕ "; }
  .fx-cta[data-tone="subtle"][data-state="error"] .fx-cta__status { color: var(--fx-text-error); }
  .fx-cta[data-state="loading"] .fx-cta__form button { cursor: progress; }
  /* split: matn chapda, amallar oʻngda */
  .fx-cta[data-layout="split"] { grid-template-columns: minmax(0, 1fr) auto; justify-items: start; align-items: center; gap: var(--fx-space-3) var(--fx-space-10); padding: var(--fx-space-10); text-align: start; }
  .fx-cta[data-layout="split"] > :not(.fx-cta__actions, .fx-cta__form, .fx-bg) { grid-column: 1; }
  .fx-cta[data-layout="split"] > :is(.fx-cta__actions, .fx-cta__form) { grid-column: 2; grid-row: 1 / span 3; margin: 0; }
  .fx-cta[data-layout="split"] .fx-cta__form { inline-size: calc(var(--fx-dialog-width) * 0.85); flex-wrap: nowrap; }
  @media (max-width: 48em) {
    .fx-cta[data-layout="split"] .fx-cta__form { inline-size: 100%; flex-wrap: wrap; }
    .fx-cta { padding: var(--fx-space-10) var(--fx-space-5); }
    .fx-cta[data-layout="split"] { grid-template-columns: minmax(0, 1fr); padding: var(--fx-space-8) var(--fx-space-5); }
    .fx-cta[data-layout="split"] > :is(.fx-cta__actions, .fx-cta__form) { grid-column: 1; grid-row: auto; }
  }
  @media (forced-colors: active) { .fx-cta { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* currency */
@layer fx.components {
  /* Pul maydoni: minglar ajratilgan, tabular raqamlar, ixtiyoriy oʻngga tekislash; birlik («soʻm») input-group addon’ida. */
  :is(.fx-input, .fx-input-group__control)[data-fx-currency] { font-variant-numeric: tabular-nums; }
  :is(.fx-input, .fx-input-group__control)[data-fx-currency][data-align="end"] { text-align: end; }
}

/* cursor */
@layer fx.components {
  /* Maxsus kursor (4.59, Magic UI Pointer / Smooth Cursor, Aceternity Following Pointer): hudud (.fx-cursor) ichida kursorga
     belgi yoki yorliq (.fx-cursor__pointer) ergashadi — «Koʻrish →» pufagi, hamkasb ismi bilan strelka (Figma kabi), «Sudrang».
     Joy --fx-cursor-x/y (JS, behaviors/cursor.js), ergashish silliq (qisqa oʻtish). data-native="hide" — tizim kursori yashiriladi.
     Faqat sichqoncha: barmoq, klaviatura, harakat kamaytirilgan — belgi yoʻq, tizim kursori qoladi, kontent oʻzgarmaydi. */
  .fx-cursor { --fx-cursor-x: 0px; --fx-cursor-y: 0px; position: relative; }
  .fx-cursor[data-native="hide"][data-active] { cursor: none; }
  .fx-cursor[data-native="hide"][data-active] :is(a, button, [role="button"]) { cursor: none; }
  .fx-cursor__pointer {
    position: absolute;
    left: 0;
    top: 0;
    z-index: var(--fx-z-raised);
    display: inline-flex;
    align-items: start;
    gap: calc(var(--fx-space-1) / 2);
    translate: var(--fx-cursor-x) var(--fx-cursor-y);
    pointer-events: none;
    opacity: 0;
    scale: 0.6;
    transform-origin: 0 0;
    transition: translate var(--fx-motion-fast) var(--fx-ease-enter), opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring);
    will-change: translate;
  }
  .fx-cursor[data-active] > .fx-cursor__pointer { opacity: 1; scale: 1; }
  /* aniq ergashish (kechikishsiz) */
  .fx-cursor[data-follow="exact"] > .fx-cursor__pointer { transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring); }
  /* strelka (Figma uslubi) */
  .fx-cursor__arrow { flex: none; color: color-mix(in oklab, var(--_c, var(--fx-bg-brand-solid)) 75%, var(--fx-text-primary)); fill: currentColor; stroke: var(--fx-bg-surface); stroke-width: 1.5; inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); filter: drop-shadow(0 0 calc(var(--fx-space-1) / 2) color-mix(in oklab, var(--fx-text-primary) 25%, transparent)); }
  /* yorliq-pufak */
  .fx-cursor__label {
    margin-block-start: var(--fx-space-4);
    padding: var(--fx-space-1) var(--fx-space-3);
    border-radius: var(--fx-radius-pill);
    background: var(--_c, var(--fx-bg-brand-solid));
    color: var(--fx-text-on-brand);
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    white-space: nowrap;
    box-shadow: var(--fx-shadow-md);
  }
  .fx-cursor__pointer[data-color="pink"] { --_c: var(--fx-bg-category-pink); }
  .fx-cursor__pointer[data-color="blue"] { --_c: var(--fx-bg-category-blue); }
  .fx-cursor__pointer[data-color="green"] { --_c: var(--fx-bg-category-green); }
  .fx-cursor__pointer[data-color="purple"] { --_c: var(--fx-bg-category-purple); }
  .fx-cursor__pointer:is([data-color="pink"], [data-color="blue"], [data-color="green"], [data-color="purple"]) .fx-cursor__label { color: var(--fx-text-on-category); }
  /* faqat pufak (strelkasiz): kursor markazida, ustida bosilganda kichrayadi */
  .fx-cursor__pointer[data-variant="bubble"] { translate: calc(var(--fx-cursor-x) - 50%) calc(var(--fx-cursor-y) - 50%); }
  .fx-cursor__pointer[data-variant="bubble"] .fx-cursor__label { margin: 0; padding: var(--fx-space-2) var(--fx-space-4); }
  .fx-cursor[data-pressed] > .fx-cursor__pointer { scale: var(--fx-motion-press); }
  @media (forced-colors: active) { .fx-cursor__pointer { display: none; } .fx-cursor[data-native="hide"] { cursor: auto; } }
}

/* cursors */
@layer fx.components {
  /* Jonli hamkorlik kursorlari (4.205, naqsh — Figma, Liveblocks, Magic UI «Pointer»): umumiy ish maydonida boshqa
     foydalanuvchilarning kursori (strelka + ism yorligʻi), matndagi tanlovi (.fx-cursors__selection — fon + rangli karetka) va
     kursor-chat pufakchasi. Tepada kimlar borligi roʻyxati (.fx-cursors__people — avatarlar, ekran oʻquvchi uchun matn).
     Joylashuv: ilova --fx-cursors-x / --fx-cursors-y (% yoki px) ni yangilaydi — kursor silliq suriladi; data-state="idle" —
     uzoq qimirlamasa yorliq yashirinadi va kursor xiralashadi. Rang data-color (6 pastel) — ism yonida, faqat rang emas.
     Kursorlar bezak: aria-hidden; kim nima qilayotgani — .fx-cursors__people va jonli hudud orqali. */
  .fx-cursors { display: grid; gap: var(--fx-space-3); }
  .fx-cursors__bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-2) var(--fx-space-4); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-cursors__people { display: flex; align-items: center; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-cursors__people > li { display: inline-flex; }
  .fx-cursors__people .fx-avatar { outline: var(--fx-border-width-focus) solid var(--fx-bg-surface); }
  .fx-cursors__stage { position: relative; isolation: isolate; overflow: hidden; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-cursors__pointer {
    --fx-cursors-x: 0%;
    --fx-cursors-y: 0%;
    --_c: var(--fx-bg-category-blue);
    position: absolute;
    inset-inline-start: var(--fx-cursors-x);
    inset-block-start: var(--fx-cursors-y);
    z-index: var(--fx-z-raised);
    display: flex;
    align-items: flex-start;
    pointer-events: none;
    transition: inset-inline-start var(--fx-motion-base) var(--fx-ease-standard), inset-block-start var(--fx-motion-base) var(--fx-ease-standard), opacity var(--fx-motion-slow) var(--fx-ease-standard);
  }
  .fx-cursors__pointer > svg { flex: none; inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); fill: var(--_c); stroke: var(--fx-bg-surface); stroke-width: 1.5; filter: drop-shadow(0 var(--fx-border-width-default) var(--fx-border-width-focus) color-mix(in oklab, var(--fx-shadow-color) 40%, transparent)); }
  .fx-cursors__name {
    margin-block-start: var(--fx-space-4);
    margin-inline-start: calc(var(--fx-space-2) * -1);
    padding: calc(var(--fx-space-1) / 2) var(--fx-space-2);
    border-radius: var(--fx-radius-badge);
    border-start-start-radius: 0;
    background: var(--_c);
    color: var(--fx-text-on-category);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-semibold);
    white-space: nowrap;
    transition: opacity var(--fx-motion-base) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring);
    transform-origin: 0 0;
  }
  /* kursor-chat: ism ostida yozilayotgan qisqa xabar */
  .fx-cursors__chat { display: block; max-inline-size: calc(var(--fx-space-12) * 5); margin-block-start: calc(var(--fx-space-1) / 2); font-weight: var(--fx-font-weight-regular); white-space: normal; }
  .fx-cursors__pointer[data-state="idle"] { opacity: 0.5; }
  .fx-cursors__pointer[data-state="idle"] .fx-cursors__name { opacity: 0; scale: 0.8; }
  :is(.fx-cursors__pointer, .fx-cursors__selection)[data-color="yellow"] { --_c: var(--fx-bg-category-yellow); }
  :is(.fx-cursors__pointer, .fx-cursors__selection)[data-color="pink"] { --_c: var(--fx-bg-category-pink); }
  :is(.fx-cursors__pointer, .fx-cursors__selection)[data-color="blue"] { --_c: var(--fx-bg-category-blue); }
  :is(.fx-cursors__pointer, .fx-cursors__selection)[data-color="coral"] { --_c: var(--fx-bg-category-coral); }
  :is(.fx-cursors__pointer, .fx-cursors__selection)[data-color="green"] { --_c: var(--fx-bg-category-green); }
  :is(.fx-cursors__pointer, .fx-cursors__selection)[data-color="purple"] { --_c: var(--fx-bg-category-purple); }
  /* matndagi tanlov: yarim shaffof fon + oxirida karetka va kichik ism */
  .fx-cursors__selection { --_c: var(--fx-bg-category-blue); position: relative; border-radius: var(--fx-radius-badge); background: color-mix(in oklab, var(--_c) 45%, transparent); box-decoration-break: clone; -webkit-box-decoration-break: clone; }
  .fx-cursors__selection::after { content: ""; position: absolute; inset-block: calc(var(--fx-space-1) * -0.5); inset-inline-end: calc(var(--fx-border-width-focus) * -1); border-inline-end: var(--fx-border-width-focus) solid var(--_c); }
  .fx-cursors__selection[data-name]::before { content: attr(data-name); position: absolute; inset-block-end: 100%; inset-inline-end: calc(var(--fx-border-width-focus) * -1); padding: 0 var(--fx-space-1); border-radius: var(--fx-radius-badge) var(--fx-radius-badge) 0 var(--fx-radius-badge); background: var(--_c); color: var(--fx-text-on-category); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-normal); white-space: nowrap; }
  .fx-cursors__selection:not([data-name])::after { display: none; }
  @media (forced-colors: active) { .fx-cursors__pointer > svg { fill: CanvasText; } .fx-cursors__name { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* dashboard */
@layer fx.components {
  /* Dashboard qolipi (4.185, WDS «Dashboard», pdp-loyihalar §2.5): tepada sarlavha + davr tanlash + yangilangan vaqt, KPI qatori (≤ 4),
     grafik kartalar toʻri (12 ustun; karta eni data-span="4|6|8|12"), pastda soʻnggi faollik. Bir qatordagi kartalar boʻyi teng, karta ichida
     aylantirish yoʻq. Birinchi ekranda ≤ 7 karta, bitta hero raqam. Qolip faqat joylashuv — ichi fx-stat, fx-chartcard, fx-chart, fx-table, fx-timeline. */
  .fx-dashboard { container-type: inline-size; display: grid; gap: var(--fx-space-5); min-inline-size: 0; }
  .fx-dashboard__head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--fx-space-3) var(--fx-space-5); }
  .fx-dashboard__titles { display: grid; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-dashboard__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1.15; }
  .fx-dashboard__updated { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-dashboard__controls { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-dashboard__kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.7), 1fr)); gap: var(--fx-space-4); }
  .fx-dashboard__grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--fx-space-4); align-items: stretch; }
  .fx-dashboard__grid > * { grid-column: span 12; min-inline-size: 0; }
  .fx-dashboard__section-title { grid-column: 1 / -1; margin: var(--fx-space-2) 0 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  @container (min-width: 48rem) {
    .fx-dashboard__grid > [data-span="4"], .fx-dashboard__grid > [data-span="6"] { grid-column: span 6; }
    .fx-dashboard__grid > [data-span="8"] { grid-column: span 12; }
  }
  @container (min-width: 72rem) {
    .fx-dashboard__grid > [data-span="4"] { grid-column: span 4; }
    .fx-dashboard__grid > [data-span="8"] { grid-column: span 8; }
  }
  /* holat: maʼlumot yangilanmoqda — kontent xira, ustidan bosish mumkin emas */
  .fx-dashboard[aria-busy="true"] :is(.fx-dashboard__kpis, .fx-dashboard__grid) { opacity: 0.5; pointer-events: none; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
}

/* datagrid */
@layer fx.components {
  /* Ma'lumot to'ri (#35): APG grid — katakma-katak klaviatura, joyida tahrir, ustun kengligi, qotgan sarlavha va birinchi ustun, qator tanlash.
     Tuzilma div + role (jadval emas): qatorlar aria-rowindex bilan, shuning uchun virtualizatsiyaga tayyor (DOMda faqat ko'rinadigan qatorlar). */
  .fx-datagrid {
    --_row: var(--fx-control-h-md);
    --_w: 100%;
    --_pin1: 0px;
    position: relative;
    overflow: auto;
    --fx-datagrid-height: none;
    max-block-size: var(--fx-datagrid-height);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
    font-variant-numeric: tabular-nums;
  }
  .fx-datagrid__head, .fx-datagrid__body { inline-size: 100%; min-inline-size: var(--_w); }
  .fx-datagrid__head { position: sticky; inset-block-start: 0; z-index: 3; background: var(--fx-bg-surface); }
  .fx-datagrid__row { display: grid; grid-template-columns: var(--_cols); min-block-size: var(--_row); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-surface); }
  .fx-datagrid__body > .fx-datagrid__row:last-child { border-block-end: 0; }
  .fx-datagrid__cell { position: relative; display: flex; align-items: center; min-inline-size: 0; padding-inline: var(--fx-space-3); padding-block: var(--fx-space-1); background: inherit; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-datagrid[data-gridlines="both"] .fx-datagrid__cell:not(:last-child) { border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-datagrid__cell[data-type="num"] { justify-content: flex-end; text-align: end; }
  .fx-datagrid__cell[role="columnheader"] { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-datagrid__cell[data-sortable] { cursor: pointer; }
  .fx-datagrid__cell[data-sortable]::after { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); margin-inline-start: var(--fx-space-1); background: currentColor; opacity: 0.35; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5 6.5 8 3.5l3 3M5 9.5l3 3 3-3' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-datagrid__cell[aria-sort="ascending"], .fx-datagrid__cell[aria-sort="descending"] { color: var(--fx-text-primary); }
  .fx-datagrid__cell[aria-sort="ascending"]::after { opacity: 1; mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5 9.5l3-3 3 3' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-datagrid__cell[aria-sort="descending"]::after { opacity: 1; mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5 6.5l3 3 3-3' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-datagrid__cell:focus-visible, .fx-datagrid__cell:focus { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); z-index: 1; }
  .fx-datagrid__cell:focus:not(:focus-visible) { outline: 0; }
  .fx-datagrid__row:hover > .fx-datagrid__cell:not([role="columnheader"]) { background: var(--fx-bg-subtle); }
  .fx-datagrid__row[aria-selected="true"], .fx-datagrid__row[aria-selected="true"] > .fx-datagrid__cell { background: var(--fx-bg-brand-subtle); }
  .fx-datagrid__check { justify-content: center; padding-inline: 0; }
  .fx-datagrid__check .fx-check { pointer-events: none; }
  /* Tahrirlanadigan katak: nuqta chiziq ostida; tahrirda — maydon butun katakni egallaydi */
  .fx-datagrid__cell[data-editable] { cursor: text; }
  .fx-datagrid__cell[data-editable]:hover:not([data-editing]) { background: var(--fx-bg-muted); }
  .fx-datagrid__cell[data-editing] { padding: 0; overflow: visible; background: var(--fx-bg-field); outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-datagrid__input { box-sizing: border-box; inline-size: 100%; block-size: 100%; min-block-size: var(--_row); padding-inline: var(--fx-space-3); border: 0; background: transparent; color: inherit; font: inherit; outline: 0; }
  .fx-datagrid__input[data-type="num"] { text-align: end; }
  .fx-datagrid__cell[aria-invalid="true"] { border-block-end: var(--fx-border-width-focus) solid var(--fx-border-color-error); }
  /* Ustun kengligi: sarlavha chetidagi tutqich (sichqoncha) yoki Alt+←/→ (klaviatura) */
  .fx-datagrid__resize { position: absolute; inset-block: 0; inset-inline-end: 0; inline-size: var(--fx-space-2); cursor: col-resize; touch-action: none; }
  .fx-datagrid__resize::after { content: ""; position: absolute; inset-block: var(--fx-space-1); inset-inline-end: 0; inline-size: var(--fx-border-width-default); background: var(--fx-border-color-default); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-datagrid__resize:hover::after, .fx-datagrid[data-resizing] .fx-datagrid__resize[data-active]::after { background: var(--fx-bg-brand-solid); inline-size: var(--fx-border-width-focus); }
  .fx-datagrid[data-resizing] { cursor: col-resize; user-select: none; }
  /* Qotgan ustunlar (1 yoki 2): kenglik qiymatini xulq --_pin1 ga yozadi */
  .fx-datagrid[data-pin-first] .fx-datagrid__row > :nth-child(1) { position: sticky; inset-inline-start: 0; z-index: 2; }
  .fx-datagrid[data-pin-first="2"] .fx-datagrid__row > :nth-child(2) { position: sticky; inset-inline-start: var(--_pin1); z-index: 2; }
  .fx-datagrid[data-pin-first="1"] .fx-datagrid__row > :nth-child(1), .fx-datagrid[data-pin-first="2"] .fx-datagrid__row > :nth-child(2) { border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-strong); }
  .fx-datagrid__foot { padding: var(--fx-space-2) var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  /* Guruhlash va jami (4.130): guruh sarlavhasi — xira fon, burchak belgisi (yopiq ▸ / ochiq ▾ — shakl), nom · son; yigʻindi oʻz ustunida.
     «Jami» qatori — pastda, qalin, ustida kuchli chiziq. */
  .fx-datagrid__group > .fx-datagrid__cell, .fx-datagrid__group { background: var(--fx-bg-subtle); cursor: pointer; font-weight: var(--fx-font-weight-medium); }
  .fx-datagrid__group:hover > .fx-datagrid__cell { background: var(--fx-bg-muted); }
  .fx-datagrid__gcell { gap: var(--fx-space-2); }
  .fx-datagrid__gname { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; }
  .fx-datagrid__twisty { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-datagrid__group[aria-expanded="true"] .fx-datagrid__twisty { rotate: 90deg; }
  .fx-datagrid__group .fx-datagrid__cell[data-type="num"], .fx-datagrid__total .fx-datagrid__cell[data-type="num"] { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-datagrid__total { position: sticky; inset-block-end: 0; z-index: 2; border-block-start: var(--fx-border-width-focus) solid var(--fx-border-color-strong); }
  .fx-datagrid__total > .fx-datagrid__cell { background: var(--fx-bg-surface); font-weight: var(--fx-font-weight-semibold); }
  .fx-datagrid__body > .fx-datagrid__total:last-child { border-block-end: 0; }
  .fx-datagrid[data-group-by] .fx-datagrid__group ~ .fx-datagrid__row:not(.fx-datagrid__group, .fx-datagrid__total) > .fx-datagrid__cell:first-child { padding-inline-start: var(--fx-space-6); }
  /* ---- Ustunlar (4.131): sarlavhani sudrash — kursor, sudralayotgan ustun xira,
     tushadigan joy — brend tik chiziq. Ustunlar paneli: roʻyxat — koʻrinish belgisi, ↑ ↓, «Qotirish» (aria-pressed). ---- */
  .fx-datagrid[data-reorder] [data-draggable-col] { cursor: grab; touch-action: none; }
  .fx-datagrid[data-reordering] { cursor: grabbing; user-select: none; }
  .fx-datagrid__cell[data-dragging] { opacity: 0.5; }
  .fx-datagrid__cell[data-drop-col="before"] { border-inline-start: var(--fx-border-width-focus) solid var(--fx-bg-brand-solid); }
  .fx-datagrid__cell[data-drop-col="after"] { border-inline-end: var(--fx-border-width-focus) solid var(--fx-bg-brand-solid); }
  .fx-datagrid__columns { display: grid; gap: var(--fx-space-2); inline-size: min(100%, var(--fx-popover-width)); }
  .fx-datagrid__collist { display: grid; gap: calc(var(--fx-space-1) / 2); margin: 0; padding: 0; list-style: none; }
  .fx-datagrid__colitem { display: flex; align-items: center; gap: var(--fx-space-1); padding-inline: var(--fx-space-2); border-radius: var(--fx-radius-nav); }
  .fx-datagrid__colitem:hover { background: var(--fx-bg-subtle); }
  .fx-datagrid__colitem > .fx-check { flex: 1; min-inline-size: 0; }
  .fx-datagrid__colitem > .fx-btn[aria-pressed="true"] { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  /* ---- Katak oraligʻi (4.132): tanlangan kataklar — brend fon + ramka (rangdan tashqari: chegarali toʻrtburchak); pastda «N katak» ---- */
  .fx-datagrid__cell[data-in-range] { background: var(--fx-bg-brand-subtle); }
  .fx-datagrid__cell[data-in-range]:not(:focus-visible) { outline: var(--fx-border-width-default) solid var(--fx-bg-brand-solid); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-datagrid[data-ranging] { user-select: none; }
  /* ---- Master–detail (4.133): ochish katagi — burchak belgisi (yopiq ▸ / ochiq ▾), tafsilot qatori butun eni boʻylab, xira fon ---- */
  .fx-datagrid__expand { justify-content: center; padding-inline: 0; cursor: pointer; }
  .fx-datagrid__expand::before { content: ""; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-datagrid__expand[aria-expanded="true"]::before { rotate: 90deg; }
  .fx-datagrid__expand:hover { background: var(--fx-bg-muted); }
  .fx-datagrid__detail { background: var(--fx-bg-subtle); }
  .fx-datagrid__detail > .fx-datagrid__cell { grid-column: 1 / -1; display: block; padding: var(--fx-space-3) var(--fx-space-4) var(--fx-space-4) var(--fx-space-12); background: var(--fx-bg-subtle); white-space: normal; overflow: visible; }
  .fx-datagrid__row:has(+ .fx-datagrid__detail:not([hidden])) { border-block-end-style: dashed; }
}

/* dateinput */
@layer fx.components {
  /* Sana maydoni (#1): fx-input-group koʻrinishi ustiga raqamlar bir xil kenglikda; niqob va tekshiruv xulqda (foxui.js → dateinput) */
  .fx-dateinput .fx-input-group__control { font-variant-numeric: tabular-nums; }
  .fx-dateinput[data-width] { max-inline-size: 100%; }
  .fx-dateinput[data-width="sm"] { inline-size: 20ch; }
  .fx-dateinput[data-width="md"] { inline-size: 32ch; }
  .fx-dateinput__control { font-variant-numeric: tabular-nums; }
  /* Xato: chegara qizil + hint matni oʻzgaradi (rang yolgʻiz emas); aria-invalid ham qoʻyiladi */
  .fx-dateinput:has([aria-invalid="true"]) { border-color: var(--fx-border-color-error); }
}

/* datepicker */
@layer fx.components {
  /* Sana tanlagich (#3): fx-dateinput + kalendar tugmasi + popover ichida fx-calendar (xulq: foxui.js → datepicker) */
  .fx-datepicker { position: relative; display: block; }
  .fx-popover.fx-datepicker__pop { max-inline-size: calc(100vw - var(--fx-space-8)); padding: var(--fx-space-3); }
  /* Popover maydon chetidan ochiladi (tugma emas): har tanlagichning oʻz langari */
  @supports (anchor-name: --a) and (anchor-scope: --a) {
    .fx-datepicker { anchor-scope: --fx-dp; }
    .fx-datepicker .fx-dateinput { anchor-name: --fx-dp; }
    .fx-popover.fx-datepicker__pop { position-anchor: --fx-dp; position-area: block-end span-inline-end; }
  }

  /* ---- Tayyor sanalar va tabiiy til (4.101): popover ichida chapda «Bugun · Ertaga · Keyingi dushanba…» (oʻngida sana),
     maydonga «ertaga 15:00», «3 kundan keyin», «25-oktabr» yozilsa — ostida taxmin koʻrsatiladi, Enter/fokusdan chiqish qabul qiladi. ---- */
  .fx-datepicker__body { display: flex; flex-wrap: wrap; gap: var(--fx-space-4); }
  .fx-datepicker__presets { display: grid; align-content: start; gap: var(--fx-space-1); min-inline-size: calc(var(--fx-space-12) * 3.25); padding-inline-end: var(--fx-space-3); border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-datepicker__preset { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); min-block-size: var(--fx-control-h-sm); padding-inline: var(--fx-space-3); border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); text-align: start; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-datepicker__preset:hover:not(:disabled) { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-datepicker__preset:active:not(:disabled) { scale: var(--fx-motion-press); }
  .fx-datepicker__preset:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-datepicker__preset[aria-selected="true"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-datepicker__preset:disabled { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-datepicker__preset:disabled .fx-datepicker__preset-date { text-decoration: line-through; }
  .fx-datepicker__preset-date { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-datepicker__guess { margin: 0; min-block-size: 1lh; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-datepicker__guess[data-state="ok"]::before { content: "→ "; color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-datepicker__guess[data-state="error"] { color: var(--fx-text-error); }
  .fx-datepicker__guess[data-state="error"]::before { content: "! "; font-weight: var(--fx-font-weight-semibold); }
  .fx-datepicker__guess:empty { display: none; }
  @media (max-width: 40em) { .fx-datepicker__presets { grid-auto-flow: column; grid-auto-columns: max-content; overflow-x: auto; padding-inline-end: 0; border-inline-end: 0; min-inline-size: 0; inline-size: 100%; } }
}

/* daterange */
@layer fx.components {
  /* Sana oraligʻi (#4): bitta tugma-maydon; popover — chapda tayyor oraliqlar, oʻngda 2 oylik kalendar, pastda Bekor/Qoʻllash (xulq: foxui.js → daterange) */
  .fx-daterange { position: relative; display: block; }
  .fx-daterange__trigger { display: flex; align-items: center; gap: var(--fx-space-2); text-align: start; cursor: pointer; font-variant-numeric: tabular-nums; }
  .fx-input.fx-daterange__trigger:read-only:not(:disabled) { border-style: solid; background: var(--fx-bg-field); }
  .fx-daterange__trigger > svg { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); color: var(--fx-text-tertiary); }
  .fx-daterange__trigger[data-empty] .fx-daterange__text { color: var(--fx-text-tertiary); }
  .fx-daterange__text { flex: 1; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-popover.fx-daterange__pop { max-inline-size: calc(100vw - var(--fx-space-8)); padding: var(--fx-space-3); }
  .fx-daterange__pop:popover-open { display: grid; gap: var(--fx-space-3); }
  .fx-daterange__body { display: flex; flex-wrap: wrap; gap: var(--fx-space-4); }
  .fx-daterange__presets { display: grid; align-content: start; gap: var(--fx-space-1); min-inline-size: calc(var(--fx-space-12) * 3); padding-inline-end: var(--fx-space-3); border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-daterange__preset { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); min-block-size: var(--fx-control-h-sm); padding-inline: var(--fx-space-3); border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); text-align: start; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-daterange__preset:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-daterange__preset:active { scale: var(--fx-motion-press); }
  .fx-daterange__preset:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-daterange__preset[aria-selected="true"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-daterange__preset[aria-selected="true"]::after { content: "✓"; }
  @media (max-width: 40em) { .fx-daterange__presets { grid-auto-flow: column; grid-auto-columns: max-content; overflow-x: auto; padding-inline-end: 0; border-inline-end: 0; min-inline-size: 0; inline-size: 100%; } }
  @supports (anchor-name: --a) and (anchor-scope: --a) {
    .fx-daterange { anchor-scope: --fx-dr; }
    .fx-daterange__trigger { anchor-name: --fx-dr; }
    .fx-popover.fx-daterange__pop { position-anchor: --fx-dr; position-area: block-end span-inline-end; }
  }
  /* ---- Nisbiy oraliq va avto yangilash (4.102): roʻyxat boshida «Oxirgi 15 daqiqa…» guruhi (ajratuvchi chiziq bilan), maydon yonida
     «Yangilash» tanlovi; yoqilganda — miltillovchi nuqta + «Jonli · har 30 s» yozuvi (holat soʻz bilan). ---- */
  .fx-daterange__sep { display: block; block-size: var(--fx-border-width-default); margin-block: var(--fx-space-1); background: var(--fx-border-color-default); }
  .fx-daterange[data-refresh] { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-daterange[data-refresh] > .fx-daterange__trigger { flex: 1 1 calc(var(--fx-space-12) * 4); }
  .fx-daterange__refresh { display: inline-flex; align-items: center; gap: var(--fx-space-2); }
  .fx-daterange__refresh > .fx-select { inline-size: auto; }
  .fx-daterange__live { display: inline-flex; align-items: center; gap: var(--fx-space-1); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); white-space: nowrap; }
  .fx-daterange__live:empty { display: none; }
  .fx-daterange__live::before { content: ""; inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border-radius: var(--fx-radius-circle); background: var(--fx-fg-success); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
}

/* daystrip */
@layer fx.components {
  /* Kunlar tasmasi (4.104): gorizontal 7 kun + ‹ › hafta. Bron, jadval, yetkazib berish vaqti sahifalari tepasida. Xulq foxui.js → daystrip.
     Holatlar faqat rangda emas: tanlangan — toʻldirilgan, bugun — «Bugun» yozuvi va halqa, band kun — nuqta + koʻrinmas «bron bor»,
     yopiq kun — chizilgan raqam. */
  .fx-daystrip { display: grid; gap: var(--fx-space-2); inline-size: 100%; max-inline-size: calc(var(--fx-popover-width) * 1.75); color: var(--fx-text-primary); }
  .fx-daystrip__head { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-daystrip__title { flex: 1; margin: 0; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-daystrip__nav { display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-secondary); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-daystrip__nav:hover:not(:disabled) { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-daystrip__nav:active:not(:disabled) { scale: var(--fx-motion-press); }
  .fx-daystrip__nav:disabled { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-daystrip__nav > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-daystrip__days { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: var(--fx-space-1); }
  .fx-daystrip__day {
    position: relative;
    display: grid;
    justify-items: center;
    gap: calc(var(--fx-space-1) / 2);
    min-inline-size: 0;
    padding: var(--fx-space-2) var(--fx-space-1);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    font: inherit;
    font-variant-numeric: tabular-nums;
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-daystrip__day:hover:not([aria-checked="true"], [aria-disabled="true"]) { background: var(--fx-bg-muted); }
  .fx-daystrip__day:active:not([aria-disabled="true"]) { scale: var(--fx-motion-press); }
  .fx-daystrip__day:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-daystrip__dow { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-daystrip__num { font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); }
  .fx-daystrip__sub { min-block-size: 1lh; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-daystrip__day[data-today] { border-color: var(--fx-border-color-strong); border-width: var(--fx-border-width-focus); }
  .fx-daystrip__day[data-today] .fx-daystrip__sub { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-medium); }
  /* Band kun: pastda nuqta (+ koʻrinmas matn) */
  .fx-daystrip__day[data-mark]::after { content: ""; position: absolute; inset-block-start: var(--fx-space-1); inset-inline-end: var(--fx-space-1); inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border-radius: var(--fx-radius-circle); background: var(--fx-fg-warning); }
  .fx-daystrip__day[aria-checked="true"] { border-color: transparent; background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-daystrip__day[aria-checked="true"] :is(.fx-daystrip__dow, .fx-daystrip__sub) { color: var(--fx-text-on-brand); }
  .fx-daystrip__day[aria-checked="true"][data-mark]::after { background: var(--fx-text-on-brand); }
  .fx-daystrip__day[aria-disabled="true"] { background: transparent; color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-daystrip__day[aria-disabled="true"] .fx-daystrip__num { text-decoration: line-through; }
  .fx-daystrip[data-size="sm"] .fx-daystrip__day { padding-block: var(--fx-space-1); }
  .fx-daystrip[data-size="sm"] .fx-daystrip__num { font-size: var(--fx-font-size-md); }
  .fx-daystrip[data-size="sm"] .fx-daystrip__sub { display: none; }
  @media (forced-colors: active) { .fx-daystrip__day[aria-checked="true"] { forced-color-adjust: none; background: Highlight; color: HighlightText; } }
}

/* delta */
@layer fx.components {
  /* Oʻzgarish koʻrsatkichi: strelka + son + davr. Yoʻnalish (data-dir) va yaxshi/yomon (data-tone) alohida:
     xarajat kamayishi — pastga strelka, lekin yaxshi. Belgi (strelka shakli) + matn (haqiqiy minus U+2212) — rang yolgʻiz emas. */
  .fx-delta { display: inline-flex; align-items: center; gap: var(--fx-space-1); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; white-space: nowrap; color: var(--fx-text-secondary); }
  .fx-delta::before { content: ""; flex: none; inline-size: calc(var(--fx-size-status-dot) * 0.9); block-size: calc(var(--fx-size-status-dot) * 0.9); background: currentColor; clip-path: polygon(50% 0, 100% 100%, 0 100%); }
  .fx-delta[data-dir="down"]::before { rotate: 180deg; }
  .fx-delta[data-dir="flat"]::before { clip-path: polygon(0 40%, 100% 40%, 100% 60%, 0 60%); }
  .fx-delta[data-tone="good"] { color: var(--fx-fg-success); }
  .fx-delta[data-tone="bad"] { color: var(--fx-fg-error); }
  .fx-delta__period { font-weight: var(--fx-font-weight-regular); color: var(--fx-text-tertiary); }
}

/* dialog */
@layer fx.components {
  /* Native <dialog>: fokus tuzog'i, Esc va yuqori qatlam brauzerning o'zida */
  .fx-dialog {
    inline-size: min(100% - var(--fx-space-8), var(--fx-dialog-width));
    padding: var(--fx-space-6);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-lg);
  }
  .fx-dialog::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 50%, transparent); }
  .fx-dialog__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-dialog__body { margin-block: var(--fx-space-3) var(--fx-space-6); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-dialog__actions { display: flex; justify-content: flex-end; gap: var(--fx-space-3); }
  /* Kirish va chiqish (WDS «Harakat»: har kirishning chiqishi bor; chiqish ~30 % tez) */
  .fx-dialog { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 var(--fx-motion-shift-md); transition: opacity var(--fx-motion-exit-base) var(--fx-ease-exit), scale var(--fx-motion-exit-base) var(--fx-ease-exit), translate var(--fx-motion-exit-base) var(--fx-ease-exit), display var(--fx-motion-exit-base) allow-discrete, overlay var(--fx-motion-exit-base) allow-discrete; }
  .fx-dialog[open] { opacity: 1; scale: 1; translate: 0 0; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-emphasized); }
  @starting-style { .fx-dialog[open] { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 var(--fx-motion-shift-md); } }
  .fx-dialog::backdrop { opacity: 0; transition: opacity var(--fx-motion-exit-base) var(--fx-ease-exit), display var(--fx-motion-exit-base) allow-discrete, overlay var(--fx-motion-exit-base) allow-discrete; }
  .fx-dialog[open]::backdrop { opacity: 1; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-dialog[open]::backdrop { opacity: 0; } }
  /* Tasdiqlash dialogi (2.72): role="alertdialog" + closedby="none" (tashqariga bosish va Esc yopmaydi); fokus «Bekor qilish»da (autofocus).
     Xavf shakli sarlavha oldida (romb), rangning oʻzi yetmaydi. */
  .fx-dialog[data-variant="alert"] { inline-size: min(100% - var(--fx-space-8), calc(var(--fx-dialog-width) * 0.85)); }
  .fx-dialog[data-variant="alert"] .fx-dialog__title { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-dialog[data-variant="alert"] .fx-dialog__title::before { content: ""; flex: none; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); background: var(--fx-fg-error); rotate: 45deg; scale: 0.85; }
  /* «Yozib tasdiqlang» (2.73): maydon + izoh; tugma xulq (behaviors/dialog.js) bilan yoqiladi */
  .fx-dialog__confirm { display: grid; gap: var(--fx-space-2); margin-block-start: var(--fx-space-4); }
  .fx-dialog__confirm-label { color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); }
  .fx-dialog__confirm-label code { font-weight: var(--fx-font-weight-semibold); }
  /* Oʻlchamlar (2.74) va toʻliq ekran (#83, mobil) */
  .fx-dialog[data-size="sm"] { inline-size: min(100% - var(--fx-space-8), calc(var(--fx-dialog-width) * 0.75)); }
  .fx-dialog[data-size="lg"] { inline-size: min(100% - var(--fx-space-8), calc(var(--fx-dialog-width) * 1.5)); }
  .fx-dialog[data-size="full"] { inline-size: 100%; max-inline-size: none; block-size: 100%; max-block-size: none; border: 0; border-radius: 0; }
  /* Uzun mazmun: sarlavha va amallar yopishqoq, faqat tana aylanadi */
  .fx-dialog[data-scroll] { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; max-block-size: calc(100dvh - var(--fx-space-8)); }
  .fx-dialog[data-scroll] .fx-dialog__body { overflow: auto; margin-block-end: 0; padding-block: var(--fx-space-3); border-block: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-dialog[data-scroll] .fx-dialog__actions { padding-block-start: var(--fx-space-4); }
  /* Ustma-ust (4-toʻlqin 4.154, Vaul nested drawers): data-stack’li dialog ustida ikkinchisi ochilsa, pastdagisi kichrayib orqaga ketadi
     (data-behind="1|2" — xulq qoʻyadi), ustki dialog pardasi yengillashadi (ikki qavat qoraymaydi). Yopilganda joyiga qaytadi. */
  .fx-dialog[data-stack][open][data-behind] { scale: 0.94; translate: 0 calc(var(--fx-space-6) * -1); pointer-events: none; }
  .fx-dialog[data-stack][open][data-behind="2"] { scale: 0.88; translate: 0 calc(var(--fx-space-10) * -1.2); }
  .fx-dialog[data-stack][open][data-behind]::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: color-mix(in oklab, var(--fx-bg-overlay) 8%, transparent); pointer-events: none; }
  .fx-dialog[data-stack][data-behind] { overflow: hidden; }
  .fx-dialog[data-over]::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 18%, transparent); }
  /* Sudraladigan (4.154, Ant Modal draggable): sarlavha qatoridan sichqoncha/barmoq bilan, .fx-dialog__grip tugmasi fokusda — strelkalar.
     Joy --_dx / --_dy (xulq yozadi), ekrandan chiqmaydi; yopilganda markazga qaytadi. */
  .fx-dialog[data-draggable][open]:not([data-behind]) { translate: var(--_dx, 0px) var(--_dy, 0px); }
  .fx-dialog[data-draggable][data-dragging] { transition: none; user-select: none; }
  .fx-dialog[data-draggable] .fx-dialog__title { cursor: grab; touch-action: none; user-select: none; }
  .fx-dialog[data-draggable][data-dragging] .fx-dialog__title { cursor: grabbing; }
  .fx-dialog__head { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-dialog__head > .fx-dialog__title { flex: 1; min-inline-size: 0; }
  .fx-dialog__grip { display: inline-grid; place-items: center; flex: none; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); margin-inline-start: calc(var(--fx-space-2) * -1); padding: 0; border: 0; border-radius: var(--fx-radius-nav); background: transparent; color: var(--fx-text-tertiary); cursor: grab; touch-action: none; }
  .fx-dialog__grip:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-dialog__grip:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-dialog__grip > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: currentColor; }
}

/* divider */
@layer fx.components {
  /* Ajratgich: <hr> yoki role="separator". Boʻsh — oddiy chiziq; ichida soʻz boʻlsa — ikki yonida chiziq («yoki»). */
  .fx-divider { display: block; margin: 0; border: 0; background: var(--fx-border-color-default); block-size: var(--fx-border-width-default); inline-size: 100%; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-divider:not(:empty) { display: flex; align-items: center; gap: var(--fx-space-3); background: none; block-size: auto; }
  .fx-divider:not(:empty)::before, .fx-divider:not(:empty)::after { content: ""; flex: 1; block-size: var(--fx-border-width-default); background: var(--fx-border-color-default); }
  .fx-divider[data-align="start"]:not(:empty)::before { flex: 0 0 var(--fx-space-6); }
  .fx-divider[data-align="end"]:not(:empty)::after { flex: 0 0 var(--fx-space-6); }
  /* Qalin (boʻlim ajratgichi) */
  .fx-divider[data-strength="strong"] { background: var(--fx-border-color-strong); }
  .fx-divider[data-strength="strong"]:not(:empty)::before, .fx-divider[data-strength="strong"]:not(:empty)::after { background: var(--fx-border-color-strong); }
  /* Vertikal: qatordagi elementlar orasida, balandligi qoʻshnilarga teng */
  .fx-divider[data-orientation="vertical"] { display: inline-block; inline-size: var(--fx-border-width-default); block-size: auto; align-self: stretch; min-block-size: var(--fx-space-4); }
}

/* dl */
@layer fx.components {
  /* Taʼrif roʻyxati: nom — qiymat juftliklari (tafsilot varagʻi, profil). Qator (standart) yoki ustma-ust. */
  .fx-dl { display: grid; grid-template-columns: minmax(0, max-content) minmax(0, 1fr); gap: var(--fx-space-3) var(--fx-space-6); margin: 0; font-size: var(--fx-font-size-sm); }
  .fx-dl > dt { color: var(--fx-text-tertiary); }
  .fx-dl > dd { margin: 0; color: var(--fx-text-primary); overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
  .fx-dl[data-layout="stacked"] { grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-1); }
  .fx-dl[data-layout="stacked"] > dt { margin-block-start: var(--fx-space-3); font-size: var(--fx-font-size-xs); }
  .fx-dl[data-layout="stacked"] > dt:first-child { margin-block-start: 0; }
  /* Variantlar: chiziqli qatorlar, ixcham, ustunli guruhlar (<div> ichida dt+dd) */
  .fx-dl[data-variant="divided"] { gap: 0 var(--fx-space-6); }
  .fx-dl[data-variant="divided"] > dt, .fx-dl[data-variant="divided"] > dd { padding-block: var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-dl[data-variant="divided"] > :is(dt, dd):nth-child(-n + 2) { border-block-start: 0; }
  .fx-dl[data-layout="stacked"][data-variant="divided"] > :is(dt, dd):nth-child(2) { border-block-start: 0; }
  .fx-dl[data-density="compact"] { gap: var(--fx-space-1) var(--fx-space-4); font-size: var(--fx-font-size-xs); }
  .fx-dl[data-variant="divided"][data-density="compact"] > :is(dt, dd) { padding-block: var(--fx-space-2); }
  .fx-dl[data-layout="groups"] { grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.5), 1fr)); gap: var(--fx-space-4) var(--fx-space-6); }
  .fx-dl[data-layout="groups"] > div { display: grid; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-dl[data-layout="groups"] > div > dd { margin: 0; color: var(--fx-text-primary); }
  .fx-dl[data-layout="groups"] > div > dt { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  /* ---- Kengaytma (2.144): qiymat yonida amal/nusxalash, koʻp ustunli toʻr ---- */
  .fx-dl dd:has(> :is(.fx-dl__action, .fx-copy)) { display: flex; align-items: baseline; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-dl__action { flex: none; padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: none; color: var(--fx-text-brand); font: inherit; font-weight: var(--fx-font-weight-medium); text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); cursor: pointer; }
  .fx-dl__action:hover { text-decoration-color: transparent; }
  .fx-dl__action:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-dl[data-columns="2"] { grid-template-columns: repeat(2, minmax(0, max-content) minmax(0, 1fr)); }
  .fx-dl[data-columns="3"] { grid-template-columns: repeat(3, minmax(0, max-content) minmax(0, 1fr)); }
  @media (max-width: 40em) { .fx-dl:is([data-columns="2"], [data-columns="3"]) { grid-template-columns: minmax(0, max-content) minmax(0, 1fr); } }
}

/* dock */
@layer fx.components {
  /* Dock (4.76): ikonlar qatori (macOS kabi) — kursor ostidagi ikon kattalashadi, qoʻshnilari ozroq; klaviatura fokusida ham.
     Faqat CSS (:has bilan qoʻshnilar), JS yoʻq. Har tugmada koʻrinadigan yorliq (hover/fokusda tepada) va aria-label;
     joriy sahifa — aria-current="page" (pastda nuqta, rang yolgʻiz emas). Barmoqli qurilmada kattalashish yoʻq — oddiy tugmalar qatori. */
  .fx-dock {
    --_s: var(--fx-control-h-lg);
    display: inline-flex;
    align-items: flex-end;
    box-sizing: border-box;
    block-size: calc(var(--_s) + var(--fx-space-2) * 2 + var(--fx-border-width-default) * 2);
    gap: var(--fx-space-2);
    margin: 0;
    padding: var(--fx-space-2);
    list-style: none;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: color-mix(in oklab, var(--fx-bg-surface) 82%, transparent);
    backdrop-filter: blur(var(--fx-space-3)) saturate(1.4);
    box-shadow: var(--fx-shadow-lg);
  }
  .fx-dock > li:not(.fx-dock__sep) { display: contents; }
  .fx-dock__item {
    --_k: 1;
    position: relative;
    display: grid;
    place-items: center;
    inline-size: calc(var(--_s) * var(--_k));
    block-size: calc(var(--_s) * var(--_k));
    border-radius: calc(var(--fx-radius-surface) * var(--_k));
    background: var(--fx-bg-muted);
    color: var(--fx-text-primary);
    text-decoration: none;
    transition: inline-size var(--fx-motion-base) var(--fx-ease-spring), block-size var(--fx-motion-base) var(--fx-ease-spring), background var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-dock__item > svg { inline-size: calc(var(--fx-size-icon-lg) * var(--_k)); block-size: calc(var(--fx-size-icon-lg) * var(--_k)); fill: currentColor; transition: inherit; }
  .fx-dock__item[data-color="blue"] { background: var(--fx-bg-category-blue); color: var(--fx-text-on-category); }
  .fx-dock__item[data-color="green"] { background: var(--fx-bg-category-green); color: var(--fx-text-on-category); }
  .fx-dock__item[data-color="yellow"] { background: var(--fx-bg-category-yellow); color: var(--fx-text-on-category); }
  .fx-dock__item[data-color="pink"] { background: var(--fx-bg-category-pink); color: var(--fx-text-on-category); }
  .fx-dock__item[data-color="purple"] { background: var(--fx-bg-category-purple); color: var(--fx-text-on-category); }
  .fx-dock__item[data-color="brand"] { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-dock__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-dock__item:active { scale: var(--fx-motion-press); }
  .fx-dock__label {
    position: absolute;
    inset-block-end: calc(100% + var(--fx-space-2));
    inset-inline-start: 50%;
    translate: -50% var(--fx-motion-shift-sm);
    padding: var(--fx-space-1) var(--fx-space-2);
    border-radius: var(--fx-radius-badge);
    background: var(--fx-text-primary);
    color: var(--fx-bg-surface);
    font-size: var(--fx-font-size-xs);
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), translate var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-dock__item:is(:hover, :focus-visible) .fx-dock__label { opacity: 1; translate: -50% 0; }
  .fx-dock__item[aria-current="page"]::after { content: ""; position: absolute; inset-block-start: calc(100% + var(--fx-space-1)); inline-size: var(--fx-space-1); aspect-ratio: 1; border-radius: var(--fx-radius-circle); background: var(--fx-text-primary); }
  .fx-dock__sep { align-self: stretch; inline-size: var(--fx-border-width-default); margin-inline: var(--fx-space-1); background: var(--fx-border-color-default); }
  .fx-dock[data-size="sm"] { --_s: var(--fx-control-h-md); }
  /* kattalashish: kursor yoki fokus ostidagi 1.45, qoʻshnilari 1.2, ikkinchi qoʻshnilari 1.07 */
  @media (hover: hover) and (pointer: fine) {
    .fx-dock li:has(> .fx-dock__item:is(:hover, :focus-visible)) > .fx-dock__item, .fx-dock > .fx-dock__item:is(:hover, :focus-visible) { --_k: 1.45; }
    .fx-dock li:has(+ li > .fx-dock__item:is(:hover, :focus-visible)) > .fx-dock__item,
    .fx-dock li:has(> .fx-dock__item:is(:hover, :focus-visible)) + li > .fx-dock__item { --_k: 1.2; }
    .fx-dock li:has(+ li + li > .fx-dock__item:is(:hover, :focus-visible)) > .fx-dock__item,
    .fx-dock li:has(> .fx-dock__item:is(:hover, :focus-visible)) + li + li > .fx-dock__item { --_k: 1.07; }
  }
  /* telefon: kichikroq, sigʻmasa gorizontal aylanadi (hover yoʻq — yorliqlar kerak emas) */
  @media (max-width: 40rem) { .fx-dock { --_s: var(--fx-control-h-sm); max-inline-size: 100%; gap: var(--fx-space-1); overflow-x: auto; scrollbar-width: none; } .fx-dock__label { display: none; } }
  [data-fx-motion="none"] .fx-dock__item, .fx-dock[data-magnify="off"] .fx-dock__item { --_k: 1 !important; }
  @media (prefers-reduced-motion: reduce) { .fx-dock__item { --_k: 1 !important; } }
  @media (forced-colors: active) { .fx-dock { border-color: CanvasText; } .fx-dock__item { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* drag */
@layer fx.components {
  /* Prujinali sudrash (4.34, HIG / M3 Expressive / Vaul): element barmoq yoki sichqoncha bilan suriladi; qoʻyib yuborilganda
     tezligi bilan biroz davom etadi (inersiya) va prujina bilan joyiga qaytadi. data-release="dismiss" — yetarlicha uzoq yoki tez
     surilsa, element shu tomonga uchib ketadi va «fx-drag-dismiss» hodisasi chiqadi (swipe bilan yopish). data-axis — x | y | both.
     Xulq — behaviors/drag.js; siljish --fx-drag-x/--fx-drag-y orqali (translate). Harakat kamaytirilsa — inersiya va prujina yoʻq,
     element darhol qaytadi yoki yopiladi. Klaviatura: strelkalar (data-release="dismiss"da Delete) — pastda pasportda. */
  [data-fx-drag] {
    --fx-drag-x: 0px;
    --fx-drag-y: 0px;
    translate: var(--fx-drag-x) var(--fx-drag-y);
    touch-action: pan-y;
    user-select: none;
    -webkit-user-select: none;
    cursor: grab;
    transition: translate var(--fx-motion-slow) var(--fx-ease-bounce), opacity var(--fx-motion-base) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-standard), box-shadow var(--fx-motion-fast) var(--fx-ease-standard);
  }
  [data-fx-drag][data-axis="y"] { touch-action: pan-x; }
  [data-fx-drag][data-axis="both"] { touch-action: none; }
  [data-fx-drag]:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* sudralayotganda: barmoqqa yopishadi (oʻtishsiz), biroz koʻtariladi */
  [data-fx-drag][data-dragging] { cursor: grabbing; transition: scale var(--fx-motion-fast) var(--fx-ease-standard), box-shadow var(--fx-motion-fast) var(--fx-ease-standard); scale: calc(1 + (1 - var(--fx-motion-press)) / 1.5); box-shadow: var(--fx-shadow-lg); }
  /* inersiya: tezlik bilan davom etadi (sekinlashuvchi egri) */
  [data-fx-drag][data-phase="glide"] { transition: translate var(--fx-motion-base) var(--fx-ease-enter); }
  /* yopilish: tomonga uchadi va soʻnadi */
  [data-fx-drag][data-phase="dismiss"] { opacity: 0; transition: translate var(--fx-motion-base) var(--fx-ease-exit), opacity var(--fx-motion-base) var(--fx-ease-exit); pointer-events: none; }
  /* qarshilik: chegaradan oshganda element biroz xiralashadi — «qoʻyib yuborsangiz yopiladi» ishorasi */
  [data-fx-drag][data-release="dismiss"][data-armed] { opacity: 0.6; }
  [data-fx-drag][data-spring="soft"] { transition-timing-function: var(--fx-ease-spring); }
  /* toʻplam: swipe bilan yopiladigan bildirishnomalar roʻyxati */
  .fx-drag-stack { display: grid; gap: var(--fx-space-3); margin: 0; padding: 0; list-style: none; overflow-x: clip; }
  @media (forced-colors: active) { [data-fx-drag][data-dragging] { outline: var(--fx-border-width-focus) solid Highlight; } }
}

/* dropzone */
@layer fx.components {
  /* Fayl yuklash maydoni: <label> ichida yashirin input type="file" — bosilsa tanlash, sudrab tashlash ham ishlaydi.
     Ustiga fayl olib kelinganda (data-over) — brend tusi. */
  .fx-dropzone { display: grid; justify-items: center; gap: var(--fx-space-2); padding: var(--fx-space-8) var(--fx-space-6); border: var(--fx-border-width-focus) dashed var(--fx-border-color-strong); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-align: center; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-dropzone:hover, .fx-dropzone[data-over] { border-color: var(--fx-border-color-focus); background: var(--fx-bg-brand-subtle); }
  .fx-dropzone:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-dropzone > input[type="file"] { position: absolute; inline-size: 1px; block-size: 1px; opacity: 0; }
  .fx-dropzone__title { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-dropzone__hint { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-dropzone__files { color: var(--fx-text-primary); font-size: var(--fx-font-size-xs); }
  /* ---- Kengaytma (2.146): kompakt variant, fayl qatorlari (progress, xato, qayta urinish, preview), limit matni ---- */
  .fx-dropzone[data-variant="compact"] { grid-auto-flow: column; justify-content: start; justify-items: start; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); border-width: var(--fx-border-width-default); }
  .fx-dropzone__limit { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  /* Yuklanayotgan fayllar roʻyxati (dropzone yonida, label tashqarisida) */
  .fx-dropzone__list { display: grid; gap: var(--fx-space-2); margin: var(--fx-space-3) 0 0; padding: 0; list-style: none; }
  .fx-dropzone__file { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--fx-space-1) var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); font-size: var(--fx-font-size-sm); }
  .fx-dropzone__thumb { grid-row: 1 / span 2; inline-size: var(--fx-control-h-md); block-size: var(--fx-control-h-md); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); object-fit: cover; }
  .fx-dropzone__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  .fx-dropzone__meta { grid-column: 2; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-dropzone__file > :is(.fx-dropzone__retry, .fx-dropzone__remove) { grid-column: 3; grid-row: 1 / span 2; }
  .fx-dropzone__file > progress { grid-column: 2 / -1; inline-size: 100%; block-size: var(--fx-space-1); appearance: none; border: 0; border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); overflow: hidden; }
  .fx-dropzone__file > progress::-webkit-progress-bar { background: var(--fx-bg-muted); }
  .fx-dropzone__file > progress::-webkit-progress-value { background: var(--fx-bg-brand-solid); }
  .fx-dropzone__file > progress::-moz-progress-bar { background: var(--fx-bg-brand-solid); }
  .fx-dropzone__file[data-state="error"] { border-color: var(--fx-border-color-error); }
  .fx-dropzone__file[data-state="error"] .fx-dropzone__meta { color: var(--fx-text-error); }
  .fx-dropzone__file[data-state="error"] .fx-dropzone__meta::before { content: "! "; font-weight: var(--fx-font-weight-semibold); }
  .fx-dropzone__file[data-state="done"] .fx-dropzone__meta::before { content: "✓ "; color: var(--fx-fg-success); }
  .fx-dropzone__retry, .fx-dropzone__remove { padding: 0 var(--fx-space-1); border: 0; border-radius: var(--fx-radius-badge); background: none; color: var(--fx-text-brand); font: inherit; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); text-decoration: underline; cursor: pointer; }
  .fx-dropzone__remove { color: var(--fx-text-secondary); }
  .fx-dropzone__retry:focus-visible, .fx-dropzone__remove:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  @media (forced-colors: active) { .fx-dropzone { border-color: ButtonText; } .fx-dropzone[data-over] { border-color: Highlight; } }

  /* ---- Buferdan joylash va papka (4.105): «Ctrl+V» maslahati (kbd koʻrinishida) va «Papka tanlash» havolasi ---- */
  .fx-dropzone__paste { display: inline-flex; align-items: center; gap: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-dropzone__paste > kbd { padding: 0 var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-badge); background: var(--fx-bg-surface); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); color: var(--fx-text-secondary); }
  .fx-dropzone[data-paste]:not(:hover, :focus-within) .fx-dropzone__paste { opacity: 0.7; }
  .fx-dropzone__folder { padding: 0; border: 0; background: none; color: var(--fx-text-brand); font: inherit; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); text-decoration: underline; text-underline-offset: var(--fx-space-1); cursor: pointer; }
  .fx-dropzone__folder:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-dropzone[data-paste="page"] { position: relative; }
}

/* effects */
@layer fx.components {
  /* Effektlar qatlami (4-toʻlqin, 4.52 va 4.56): har qanday yuzaga (fx-card, bento katagi, narx kartasi) data-fx bilan qoʻshiladi.
     data-fx="spotlight" — kursorni kuzatuvchi nur: chegarada va fonda yumshoq radial yorugʻlik (Linear, Magic UI «Magic Card»).
     data-fx="beam" — chegara boʻylab aylanib yuruvchi nur («tavsiya», «yangi» urgʻusi; Ant 6 BorderBeam).
     Bir nechtasi birga: data-fx="spotlight beam". Kursor koordinatasi — foxui.js (data-fx-effects konteynerda): --fx-mx, --fx-my;
     guruhda kursor yaqinidagi qoʻshni kartalar chegarasi ham yonadi. JS boʻlmasa — oddiy yuza, hover’da markazdan nur.
     Cheksiz aylanish faqat koʻrinishda (JS data-paused qoʻyadi), reduced-motion, calm va none rejimlarda — statik. */
  @property --fx-spot { syntax: "<number>"; inherits: true; initial-value: 0; }
  @property --fx-spot-fill { syntax: "<number>"; inherits: true; initial-value: 0; }
  @property --fx-beam-angle { syntax: "<angle>"; inherits: false; initial-value: 0deg; }

  [data-fx~="spotlight"] {
    --fx-mx: 50%;
    --fx-my: 50%;
    --fx-spot: 0;
    --fx-spot-fill: 0;
    --_c: var(--fx-bg-brand-solid);
    --_bg: var(--fx-bg-surface);
    --_line: var(--fx-border-color-surface);
    --_r: calc(var(--fx-space-12) * 6);
    border: var(--fx-border-width-default) solid transparent;
    background:
      radial-gradient(circle var(--_r) at var(--fx-mx) var(--fx-my), color-mix(in oklab, var(--_c) calc(var(--fx-spot-fill) * 12%), transparent), transparent) padding-box,
      linear-gradient(var(--_bg), var(--_bg)) padding-box,
      radial-gradient(circle calc(var(--_r) * 0.75) at var(--fx-mx) var(--fx-my), color-mix(in oklab, var(--_c) calc(var(--fx-spot) * 85%), var(--_line)), var(--_line)) border-box;
    transition: --fx-spot var(--fx-motion-slow) var(--fx-ease-standard), --fx-spot-fill var(--fx-motion-base) var(--fx-ease-standard), translate var(--fx-motion-base) var(--fx-ease-enter), box-shadow var(--fx-motion-base) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  [data-fx~="spotlight"][data-lit] { --fx-spot: 1; }
  [data-fx~="spotlight"]:hover { --fx-spot-fill: 1; }
  /* rang: standart — brend; toifa ranglari bilan */
  [data-fx~="spotlight"][data-fx-color="blue"], [data-fx~="beam"][data-fx-color="blue"] { --_c: var(--fx-bg-category-blue); }
  [data-fx~="spotlight"][data-fx-color="purple"], [data-fx~="beam"][data-fx-color="purple"] { --_c: var(--fx-bg-category-purple); }
  [data-fx~="spotlight"][data-fx-color="pink"], [data-fx~="beam"][data-fx-color="pink"] { --_c: var(--fx-bg-category-pink); }
  [data-fx~="spotlight"][data-fx-color="green"], [data-fx~="beam"][data-fx-color="green"] { --_c: var(--fx-bg-category-green); }
  /* yuza rangi boshqacha boʻlsa (masalan bg-subtle ustida filled karta) */
  [data-fx~="spotlight"][data-variant="filled"] { --_bg: var(--fx-bg-muted); }

  /* Chegara nuri: ::after — chegara qalinligidagi halqa (mask bilan ichi kesiladi), ichida aylanuvchi konus */
  [data-fx~="beam"] { --_c: var(--fx-bg-brand-solid); --_w: calc(var(--fx-border-width-default) * 1.5); position: relative; }
  /* konteyner oʻz qatlamini yaratadi — tashqi nur (z-index: -1) karta ortida, lekin boʻlim fonidan oldinda chiziladi */
  [data-fx-effects] { isolation: isolate; }
  [data-fx~="beam"]::after {
    content: "";
    position: absolute;
    inset: calc(var(--fx-border-width-default) * -1);
    z-index: 1;
    padding: var(--_w);
    border-radius: inherit;
    background: conic-gradient(from var(--fx-beam-angle), transparent 0 62%, color-mix(in oklab, var(--_c) 40%, transparent) 76%, var(--_c) 88%, var(--fx-viz-accent) 94%, transparent 99%);
    mask: linear-gradient(black, black) content-box exclude, linear-gradient(black, black);
    pointer-events: none;
    animation: fx-beam-spin calc(var(--fx-duration-pulse) * 3.5) linear infinite;
  }
  /* yumshoq tashqi nur — beam bilan birga */
  [data-fx~="beam"][data-fx-glow]::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    border-radius: inherit;
    background: conic-gradient(from var(--fx-beam-angle), transparent 0 70%, color-mix(in oklab, var(--_c) 35%, transparent) 90%, transparent);
    filter: blur(var(--fx-space-4));
    animation: fx-beam-spin calc(var(--fx-duration-pulse) * 3.5) linear infinite;
  }
  [data-fx~="beam"][data-fx-speed="slow"]::after, [data-fx~="beam"][data-fx-speed="slow"][data-fx-glow]::before { animation-duration: calc(var(--fx-duration-pulse) * 6); }
  [data-fx~="beam"][data-fx-speed="fast"]::after, [data-fx~="beam"][data-fx-speed="fast"][data-fx-glow]::before { animation-duration: calc(var(--fx-duration-pulse) * 2); }
  @keyframes fx-beam-spin { to { --fx-beam-angle: 360deg; } }

  /* --- Yaltirash (4.54, Magic UI Glare Hover / Aceternity Glare Card): hover yoki klaviatura fokusida karta ustidan bitta diagonal
     nur chapdan oʻngga oʻtadi. Qaytishda nur darhol boshiga tushadi (keyingi hover yana chapdan). ::before ishlatadi —
     beam[data-fx-glow] bilan birga qoʻymang. Harakat kamaytirilsa nur koʻrinmaydi (oʻtish 0 — darhol chetga). */
  [data-fx~="glare"] { position: relative; isolation: isolate; }
  [data-fx~="glare"]::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    border-radius: inherit;
    background: linear-gradient(115deg, transparent 40%, color-mix(in oklab, var(--fx-bg-static-light) 50%, transparent) 50%, transparent 60%) 100% 0 / 300% 100% no-repeat;
    pointer-events: none;
  }
  [data-fx~="glare"]:is(:focus-visible, :focus-within)::before { background-position: 0 0; transition: background-position calc(var(--fx-motion-slower) * 1.6) var(--fx-ease-standard); }
  @media (hover: hover) and (pointer: fine) {
    [data-fx~="glare"]:hover::before { background-position: 0 0; transition: background-position calc(var(--fx-motion-slower) * 1.6) var(--fx-ease-standard); }
  }

  /* --- Yoʻnalishni sezuvchi hover (4.55, Aceternity Direction Aware Hover): qoplama (.fx-effects__overlay) kursor kirgan tomondan
     sirpanib chiqadi va chiqqan tomonga ketadi. Tomon — data-from (JS), koʻrinish — data-in. Klaviatura fokusida pastdan chiqadi;
     hover yoʻq qurilmada qoplama doim pastda gradient bilan koʻrinadi (matn yoʻqolmaydi). */
  [data-fx~="direction"] { position: relative; overflow: hidden; isolation: isolate; }
  .fx-effects__overlay {
    --_ox: 0%;
    --_oy: 100%;
    position: absolute;
    inset: 0;
    z-index: 1;
    display: grid;
    align-content: end;
    gap: var(--fx-space-1);
    padding: var(--fx-space-5);
    border-radius: inherit;
    background: linear-gradient(to top, color-mix(in oklab, var(--fx-bg-overlay) 85%, transparent), color-mix(in oklab, var(--fx-bg-overlay) 45%, transparent));
    color: var(--fx-bg-static-light);
    translate: var(--_ox) var(--_oy);
    transition: translate var(--fx-motion-slow) var(--fx-ease-emphasized);
  }
  [data-fx~="direction"][data-from="top"] .fx-effects__overlay { --_ox: 0%; --_oy: -100%; }
  [data-fx~="direction"][data-from="right"] .fx-effects__overlay { --_ox: 100%; --_oy: 0%; }
  [data-fx~="direction"][data-from="bottom"] .fx-effects__overlay { --_ox: 0%; --_oy: 100%; }
  [data-fx~="direction"][data-from="left"] .fx-effects__overlay { --_ox: -100%; --_oy: 0%; }
  [data-fx~="direction"][data-snap] .fx-effects__overlay { transition: none; }
  [data-fx~="direction"]:is([data-in], :focus-within) .fx-effects__overlay { translate: 0 0; }
  @media (hover: none) {
    .fx-effects__overlay { translate: 0 0; inset-block-start: auto; padding-block-start: var(--fx-space-10); background: linear-gradient(to top, color-mix(in oklab, var(--fx-bg-overlay) 80%, transparent), transparent); }
  }
  .fx-effects__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-effects__meta { margin: 0; font-size: var(--fx-font-size-sm); opacity: 0.85; }

  /* koʻrinmasa (IntersectionObserver) yoki tab yashirin — toʻxtaydi */
  [data-fx][data-paused]::after, [data-fx][data-paused]::before { animation-play-state: paused; }
  /* tinch rejimlar: aylanish yoʻq — nur yuqori burchakda statik turadi */
  [data-fx-motion="calm"] [data-fx~="beam"]::after, [data-fx-motion="none"] [data-fx~="beam"]::after,
  [data-fx-motion="calm"] [data-fx~="beam"]::before, [data-fx-motion="none"] [data-fx~="beam"]::before { animation: none; --fx-beam-angle: 300deg; }
  @media (prefers-reduced-motion: reduce) { [data-fx~="beam"]::after, [data-fx~="beam"]::before, [data-fx~="beam"][data-fx-glow]::before { animation: none; --fx-beam-angle: 300deg; } }
  @media (forced-colors: active) {
    [data-fx~="spotlight"] { border-color: CanvasText; background: Canvas; }
    [data-fx~="beam"]::after, [data-fx~="beam"]::before, [data-fx~="glare"]::before { display: none; }
    .fx-effects__overlay { translate: 0 0; background: Canvas; color: CanvasText; }
  }
}

/* elevation */
@layer fx.components {
  /* Elevation 0–5 (4-toʻlqin 4.7): soya + yuza tusi juftligi. Yorugʻda daraja soya bilan, qorongʻida (soya koʻrinmaydi) yuza tusi
     bilan ajraladi (--fx-elevation-tint-*). 0 tekis · 1 karta · 2 hover/sudrash · 3 popover/menyu · 4 dialog/varaq · 5 toast.
     data-hover="raise" — hover’da bir daraja koʻtariladi (expressive’da biroz yuqoriga ham siljiydi). */
  .fx-elevation {
    --_el: var(--fx-elevation-1);
    --_tint: var(--fx-elevation-tint-1);
    box-shadow: var(--_el);
    background-color: var(--_tint);
    transition: box-shadow var(--fx-motion-base) var(--fx-ease-standard), background-color var(--fx-motion-base) var(--fx-ease-standard), translate var(--fx-motion-base) var(--fx-ease-spring);
  }
  .fx-elevation[data-level="0"] { --_el: var(--fx-elevation-0); --_tint: var(--fx-elevation-tint-0); }
  .fx-elevation[data-level="2"] { --_el: var(--fx-elevation-2); --_tint: var(--fx-elevation-tint-2); }
  .fx-elevation[data-level="3"] { --_el: var(--fx-elevation-3); --_tint: var(--fx-elevation-tint-3); }
  .fx-elevation[data-level="4"] { --_el: var(--fx-elevation-4); --_tint: var(--fx-elevation-tint-4); }
  .fx-elevation[data-level="5"] { --_el: var(--fx-elevation-5); --_tint: var(--fx-elevation-tint-5); }
  .fx-elevation[data-hover="raise"]:is(:hover, :focus-within) { translate: 0 calc(var(--fx-motion-lift) * var(--fx-knob-motion-lift)); }
  .fx-elevation[data-hover="raise"]:is([data-level="0"]):is(:hover, :focus-within) { --_el: var(--fx-elevation-1); --_tint: var(--fx-elevation-tint-1); }
  .fx-elevation[data-hover="raise"]:not([data-level]):is(:hover, :focus-within),
  .fx-elevation[data-hover="raise"][data-level="1"]:is(:hover, :focus-within) { --_el: var(--fx-elevation-2); --_tint: var(--fx-elevation-tint-2); }
  .fx-elevation[data-hover="raise"][data-level="2"]:is(:hover, :focus-within) { --_el: var(--fx-elevation-3); --_tint: var(--fx-elevation-tint-3); }
  .fx-elevation[data-hover="raise"][data-level="3"]:is(:hover, :focus-within) { --_el: var(--fx-elevation-4); --_tint: var(--fx-elevation-tint-4); }
  /* Ichki sxema bloki (<section data-fx-scheme="dark">): yuza tusi shu blok ranglaridan qayta hisoblanadi */
  :where([data-fx-scheme], [data-fx-theme]) {
    --fx-elevation-tint-0: var(--fx-bg-surface);
    --fx-elevation-tint-1: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 3%));
    --fx-elevation-tint-2: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 5%));
    --fx-elevation-tint-3: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 8%));
    --fx-elevation-tint-4: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 11%));
    --fx-elevation-tint-5: light-dark(var(--fx-bg-surface), color-mix(in oklab, var(--fx-bg-surface), var(--fx-text-primary) 14%));
  }

  /* Shisha material (4.16): shaffof yuza + orqa fon xiralashuvi + nozik chegara — header, varaq, toast ustida.
     Qoʻllanmasa, shaffoflik kamaytirilsa yoki yuqori kontrastda — tekis yuza. */
  .fx-material {
    --_a: 72%;
    --_blur: var(--fx-space-5);
    background-color: color-mix(in oklab, var(--fx-bg-surface) var(--_a), transparent);
    -webkit-backdrop-filter: blur(var(--_blur)) saturate(1.6);
    backdrop-filter: blur(var(--_blur)) saturate(1.6);
    border: var(--fx-border-width-default) solid color-mix(in oklab, var(--fx-border-color-default) 60%, transparent);
  }
  .fx-material[data-material="thin"] { --_a: 55%; --_blur: var(--fx-space-2); }
  .fx-material[data-material="thick"] { --_a: 86%; --_blur: var(--fx-space-8); }
  .fx-material[data-edge="none"] { border-color: transparent; }
  @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    .fx-material { background-color: var(--fx-bg-surface); }
  }
  @media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
    .fx-material { background-color: var(--fx-bg-surface); -webkit-backdrop-filter: none; backdrop-filter: none; border-color: var(--fx-border-color-strong); }
  }
  [data-fx-contrast="more"] .fx-material, .fx-material[data-fx-contrast="more"] { background-color: var(--fx-bg-surface); -webkit-backdrop-filter: none; backdrop-filter: none; border-color: var(--fx-border-color-strong); }

  /* Ketma-ket va ikki qutbli viz palitralar (4.20): heatmap, xarita (choropleth), foiz oʻzgarishi. Rol ranglaridan yasaladi —
     mavzu almashsa palitra ham almashadi. seq 1…7 — kamdan koʻpga (brend); div 1…7 — xavf ← kontekst → oʻsish. */
  :root, [data-fx-theme], [data-fx-scheme] {
    --fx-viz-seq-1: color-mix(in oklab, var(--fx-viz-brand) 10%, var(--fx-bg-surface));
    --fx-viz-seq-2: color-mix(in oklab, var(--fx-viz-brand) 22%, var(--fx-bg-surface));
    --fx-viz-seq-3: color-mix(in oklab, var(--fx-viz-brand) 36%, var(--fx-bg-surface));
    --fx-viz-seq-4: color-mix(in oklab, var(--fx-viz-brand) 52%, var(--fx-bg-surface));
    --fx-viz-seq-5: color-mix(in oklab, var(--fx-viz-brand) 68%, var(--fx-bg-surface));
    --fx-viz-seq-6: color-mix(in oklab, var(--fx-viz-brand) 84%, var(--fx-bg-surface));
    --fx-viz-seq-7: var(--fx-viz-brand);
    --fx-viz-div-1: var(--fx-viz-risk);
    --fx-viz-div-2: color-mix(in oklab, var(--fx-viz-risk) 66%, var(--fx-bg-surface));
    --fx-viz-div-3: color-mix(in oklab, var(--fx-viz-risk) 33%, var(--fx-bg-surface));
    --fx-viz-div-4: color-mix(in oklab, var(--fx-viz-context) 45%, var(--fx-bg-surface));
    --fx-viz-div-5: color-mix(in oklab, var(--fx-viz-brand) 33%, var(--fx-bg-surface));
    --fx-viz-div-6: color-mix(in oklab, var(--fx-viz-brand) 66%, var(--fx-bg-surface));
    --fx-viz-div-7: var(--fx-viz-brand);
  }
  /* Shkala chizigʻi (legenda): <div class="fx-viz-scale" data-scale="seq"><i></i>×7</div> + chet yozuvlari */
  .fx-viz-scale { display: grid; grid-template-columns: auto repeat(7, minmax(var(--fx-space-4), 1fr)) auto; align-items: center; gap: calc(var(--fx-space-1) / 2); font-size: var(--fx-font-size-xs); color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; }
  .fx-viz-scale > i { block-size: var(--fx-space-3); background: var(--_c); }
  .fx-viz-scale > i:first-of-type { border-start-start-radius: var(--fx-radius-badge); border-end-start-radius: var(--fx-radius-badge); }
  .fx-viz-scale > i:last-of-type { border-start-end-radius: var(--fx-radius-badge); border-end-end-radius: var(--fx-radius-badge); }
  .fx-viz-scale__min { padding-inline-end: var(--fx-space-1); }
  .fx-viz-scale__max { padding-inline-start: var(--fx-space-1); }
  .fx-viz-scale > i:nth-of-type(1) { --_c: var(--fx-viz-seq-1); }
  .fx-viz-scale > i:nth-of-type(2) { --_c: var(--fx-viz-seq-2); }
  .fx-viz-scale > i:nth-of-type(3) { --_c: var(--fx-viz-seq-3); }
  .fx-viz-scale > i:nth-of-type(4) { --_c: var(--fx-viz-seq-4); }
  .fx-viz-scale > i:nth-of-type(5) { --_c: var(--fx-viz-seq-5); }
  .fx-viz-scale > i:nth-of-type(6) { --_c: var(--fx-viz-seq-6); }
  .fx-viz-scale > i:nth-of-type(7) { --_c: var(--fx-viz-seq-7); }
  .fx-viz-scale[data-scale="div"] > i:nth-of-type(1) { --_c: var(--fx-viz-div-1); }
  .fx-viz-scale[data-scale="div"] > i:nth-of-type(2) { --_c: var(--fx-viz-div-2); }
  .fx-viz-scale[data-scale="div"] > i:nth-of-type(3) { --_c: var(--fx-viz-div-3); }
  .fx-viz-scale[data-scale="div"] > i:nth-of-type(4) { --_c: var(--fx-viz-div-4); }
  .fx-viz-scale[data-scale="div"] > i:nth-of-type(5) { --_c: var(--fx-viz-div-5); }
  .fx-viz-scale[data-scale="div"] > i:nth-of-type(6) { --_c: var(--fx-viz-div-6); }
  .fx-viz-scale[data-scale="div"] > i:nth-of-type(7) { --_c: var(--fx-viz-div-7); }
  /* Katakni rang bilan boʻyash: <td data-viz-step="seq-4"> — rang yolgʻiz belgi emas, qiymat matni ham yoziladi */
  [data-viz-step] { background-color: var(--_c); }
  [data-viz-step="seq-1"] { --_c: var(--fx-viz-seq-1); }
  [data-viz-step="seq-2"] { --_c: var(--fx-viz-seq-2); }
  [data-viz-step="seq-3"] { --_c: var(--fx-viz-seq-3); }
  [data-viz-step="seq-4"] { --_c: var(--fx-viz-seq-4); }
  [data-viz-step="seq-5"] { --_c: var(--fx-viz-seq-5); }
  [data-viz-step="seq-6"] { --_c: var(--fx-viz-seq-6); }
  [data-viz-step="seq-7"] { --_c: var(--fx-viz-seq-7); }
  [data-viz-step="div-1"] { --_c: var(--fx-viz-div-1); }
  [data-viz-step="div-2"] { --_c: var(--fx-viz-div-2); }
  [data-viz-step="div-3"] { --_c: var(--fx-viz-div-3); }
  [data-viz-step="div-4"] { --_c: var(--fx-viz-div-4); }
  [data-viz-step="div-5"] { --_c: var(--fx-viz-div-5); }
  [data-viz-step="div-6"] { --_c: var(--fx-viz-div-6); }
  [data-viz-step="div-7"] { --_c: var(--fx-viz-div-7); }
  @media (forced-colors: active) {
    .fx-elevation, .fx-material { border: var(--fx-border-width-default) solid CanvasText; }
  }
}

/* email */
@layer fx.components {
  /* Email shablonlari (4.181, naqsh): pochta mijozlari (Gmail, Outlook, Apple Mail) uchun JADVALLI tuzilma —
     <table role="presentation"> ichma-ich, eni 600 px atrofida, bitta ustun, matn chapda. Bu yerda uslub FoxUI tokenlarida
     (hujjat saytida koʻrish va mavzu bilan almashish uchun); yuborishdan oldin build bosqichida tokenlar hisoblanib,
     uslublar inline qilinadi (masalan juice) — shuning uchun faqat oddiy xossalar: rang, fon, padding, chegara, shrift.
     Flex/grid, CSS oʻzgaruvchisi, psevdo-element mazmun tashuvchi sifatida ishlatilmaydi — inline qilinganda yoʻqoladi.
     Turlar: tasdiq kodi (.fx-email__code), parol tiklash (tugma + zaxira havola), hisob-faktura (.fx-email__items), xabarnoma.
     data-tone (kartaning tepa chizigʻi): brand (standart) · success · warning · error. */
  .fx-email { inline-size: 100%; margin: 0; padding: 0; background: var(--fx-bg-subtle); color: var(--fx-text-primary); font-family: var(--fx-font-family-sans); font-size: var(--fx-font-size-md); line-height: var(--fx-line-height-normal); border-collapse: collapse; }
  :where(.fx-email) td { padding: 0; vertical-align: top; }
  .fx-email__preheader { display: none; max-block-size: 0; overflow: hidden; opacity: 0; font-size: var(--fx-font-size-xs); }
  .fx-email__outer { padding: var(--fx-space-8) var(--fx-space-3); }
  .fx-email__container { inline-size: 100%; max-inline-size: calc(var(--fx-dialog-width) * 1.25); margin: 0 auto; border-collapse: separate; }
  .fx-email__header { padding: 0 var(--fx-space-2) var(--fx-space-5); }
  .fx-email__logo { color: var(--fx-text-primary); font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); text-decoration: none; }
  .fx-email__card { padding: var(--fx-space-8); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-block-start: var(--fx-space-1) solid var(--fx-bg-brand-solid); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-email[data-tone="success"] .fx-email__card { border-block-start-color: var(--fx-fg-success); }
  .fx-email[data-tone="warning"] .fx-email__card { border-block-start-color: var(--fx-fg-warning); }
  .fx-email[data-tone="error"] .fx-email__card { border-block-start-color: var(--fx-fg-error); }
  .fx-email__title { margin: 0 0 var(--fx-space-4); color: var(--fx-text-primary); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-snug); }
  .fx-email__text { margin: 0 0 var(--fx-space-4); color: var(--fx-text-primary); font-size: var(--fx-font-size-md); }
  .fx-email__muted { margin: 0 0 var(--fx-space-4); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  /* tugma: jadval katagi ichidagi havola — Outlook’da ham bosiladigan maydon */
  .fx-email__action { padding: var(--fx-space-2) 0 var(--fx-space-6); }
  .fx-email__button { display: inline-block; padding: var(--fx-space-3) var(--fx-space-6); border-radius: var(--fx-radius-control); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); text-decoration: none; }
  .fx-email__button:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-email__code { display: inline-block; margin: 0 0 var(--fx-space-5); padding: var(--fx-space-3) var(--fx-space-5); border: var(--fx-border-width-default) dashed var(--fx-border-color-strong); border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); color: var(--fx-text-primary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-2xl); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.3em; }
  .fx-email__link { color: var(--fx-text-brand); word-break: break-all; }
  .fx-email__divider { margin: var(--fx-space-6) 0; border: 0; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  /* hisob-faktura qatorlari */
  .fx-email__items { inline-size: 100%; margin: 0 0 var(--fx-space-5); border-collapse: collapse; font-size: var(--fx-font-size-sm); }
  .fx-email__items th { padding: var(--fx-space-2) 0; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-secondary); font-weight: var(--fx-font-weight-medium); text-align: start; }
  .fx-email__items td { padding: var(--fx-space-3) 0; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-email__items .fx-email__num { text-align: end; white-space: nowrap; font-variant-numeric: tabular-nums; }
  .fx-email__items .fx-email__total td { padding-block-start: var(--fx-space-4); border: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-email__meta { inline-size: 100%; margin: 0 0 var(--fx-space-5); border-collapse: collapse; font-size: var(--fx-font-size-sm); }
  .fx-email__meta td { padding: var(--fx-space-1) 0; }
  .fx-email__meta td:first-child { color: var(--fx-text-secondary); }
  .fx-email__notice { margin: 0 0 var(--fx-space-5); padding: var(--fx-space-3) var(--fx-space-4); border-inline-start: var(--fx-border-width-focus) solid var(--fx-border-color-strong); background: var(--fx-bg-subtle); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-email__footer { padding: var(--fx-space-5) var(--fx-space-2) 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); line-height: var(--fx-line-height-relaxed); }
  .fx-email__footer a { color: var(--fx-text-secondary); }
  @media (max-width: 36em) {
    .fx-email__outer { padding: var(--fx-space-4) 0; }
    .fx-email__card { padding: var(--fx-space-5); border-radius: 0; border-inline: 0; }
  }
}

/* emojipicker */
@layer fx.components {
  /* Emoji tanlagich (#149): qidiruv, toifa tablari, “Oxirgilar”, brauzerning oʻz emojilari (rasm yuklanmaydi). Roʻyxat JS bilan yaratiladi (data-fx-emojipicker). */
  .fx-emojipicker { display: grid; gap: var(--fx-space-2); inline-size: min(100%, var(--fx-popover-width)); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-md); }
  .fx-emojipicker__search { inline-size: 100%; }
  .fx-emojipicker__tabs { display: flex; gap: calc(var(--fx-space-1) / 2); padding-block-end: var(--fx-space-2); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-emojipicker__tab {
    position: relative; flex: 1; display: grid; place-items: center; block-size: var(--fx-size-control-md); padding: 0; border: 0; border-radius: var(--fx-radius-nav);
    background: transparent; font-size: var(--fx-font-size-lg); cursor: pointer; transition: background var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-emojipicker__tab:hover { background: var(--fx-bg-muted); }
  .fx-emojipicker__tab[aria-selected="true"] { background: var(--fx-bg-brand-subtle); }
  .fx-emojipicker__tab[aria-selected="true"]::after { content: ""; position: absolute; inset-inline: var(--fx-space-2); inset-block-end: calc(var(--fx-space-1) / 2); block-size: var(--fx-border-width-focus); border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); }
  .fx-emojipicker__tab:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-emojipicker__label { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-emojipicker__panel { display: grid; gap: var(--fx-space-2); align-content: start; block-size: calc(var(--fx-popover-width) * 0.8); overflow: auto; }
  .fx-emojipicker__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(--fx-size-control-md), 1fr)); gap: calc(var(--fx-space-1) / 2); }
  .fx-emojipicker__emoji {
    display: grid; place-items: center; block-size: var(--fx-size-control-md); padding: 0; border: 0; border-radius: var(--fx-radius-nav); background: transparent;
    font-size: var(--fx-font-size-xl); line-height: 1; cursor: pointer; transition: background var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-emojipicker__emoji:hover { background: var(--fx-bg-muted); }
  .fx-emojipicker__emoji:active { scale: var(--fx-motion-press); }
  .fx-emojipicker__emoji:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-emojipicker__empty { padding: var(--fx-space-6) var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); text-align: center; }
}

/* empty */
@layer fx.components {
  /* Boʻsh holat: belgi plitkasi, sarlavha, bitta qator izoh, amal. Yuklanish va xato holati ham shu qolipda (data-state). */
  .fx-empty { display: grid; justify-items: center; gap: var(--fx-space-3); padding: var(--fx-space-10) var(--fx-space-6); text-align: center; }
  .fx-empty__art { display: grid; place-items: center; inline-size: var(--fx-space-12); block-size: var(--fx-space-12); border-radius: var(--fx-radius-surface); background: var(--fx-bg-muted); color: var(--fx-text-tertiary); }
  .fx-empty__art > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-empty__title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); }
  .fx-empty__text { margin: 0; max-inline-size: 42ch; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-empty__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-2); margin-block-start: var(--fx-space-2); }
  .fx-empty[data-state="error"] .fx-empty__art { background: var(--fx-bg-error-subtle); color: var(--fx-fg-error); }
  .fx-empty[data-size="compact"] { padding: var(--fx-space-6) var(--fx-space-4); gap: var(--fx-space-2); }
  /* ---- Kengaytma (2.145): 4 tayyor holat, illyustratsiya slot oʻlchamlari, ikkinchi darajali havola ---- */
  .fx-empty[data-state="first"] .fx-empty__art { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-empty[data-state="forbidden"] .fx-empty__art { background: var(--fx-bg-warning-subtle); color: var(--fx-fg-warning); }
  .fx-empty[data-state="search"] .fx-empty__art { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  .fx-empty__art[data-size="sm"] { inline-size: var(--fx-space-8); block-size: var(--fx-space-8); }
  .fx-empty__art[data-size="lg"] { inline-size: calc(var(--fx-space-12) * 1.5); block-size: calc(var(--fx-space-12) * 1.5); }
  .fx-empty__art[data-size="lg"] > svg { inline-size: calc(var(--fx-size-icon-lg) * 1.5); block-size: calc(var(--fx-size-icon-lg) * 1.5); }
  /* Illustratsiya: fonsiz, kengroq slot */
  .fx-empty__art[data-size="illustration"] { inline-size: min(100%, calc(var(--fx-space-12) * 4)); block-size: auto; aspect-ratio: 4 / 3; background: transparent; }
  .fx-empty__art[data-size="illustration"] > :is(svg, img) { inline-size: 100%; block-size: 100%; object-fit: contain; }
  .fx-empty__link { color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); border-radius: var(--fx-radius-badge); }
  .fx-empty__link:hover { color: var(--fx-text-primary); }
  .fx-empty__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
}

/* error-summary */
@layer fx.components {
  /* Xatolar xulosasi: forma tepasida «Quyidagilarni tuzating» + har xatoga havola. Yuborishda fokus shu blokka ketadi (tabindex="-1"). */
  .fx-errors {
    display: grid;
    gap: var(--fx-space-2);
    padding: var(--fx-space-4);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-error-subtle);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
  }
  .fx-errors[hidden] { display: none; }
  .fx-errors:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* Belgi — shakl (romb) + sarlavha soʻzi; rangning oʻzi yetmaydi */
  .fx-errors__title { display: flex; align-items: center; gap: var(--fx-space-2); margin: 0; font-size: inherit; font-weight: var(--fx-font-weight-semibold); color: var(--fx-fg-error); }
  .fx-errors__title::before { content: ""; flex: none; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); background: currentColor; rotate: 45deg; scale: 0.85; }
  .fx-errors__list { display: grid; gap: var(--fx-space-1); margin: 0; padding: 0; padding-inline-start: var(--fx-space-5); }
  .fx-errors__list a { color: var(--fx-fg-error); font-weight: var(--fx-font-weight-medium); text-decoration: underline; text-underline-offset: var(--fx-space-1); border-radius: var(--fx-radius-control); }
  .fx-errors__list a:hover { text-decoration-thickness: var(--fx-border-width-focus); }
  .fx-errors__list a:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
}

/* errorpage */
@layer fx.components {
  /* Xato sahifalari toʻplami (4.183): toʻliq sahifa shabloni — tepada sarlavha (site-header yoki oddiy belgi), markazda ulkan kod
     (404 / 500 / 503) naqshli fon ustida, ostida fx-result (sarlavha, izoh, tugmalar), qidiruv va foydali havolalar kartalari,
     pastda ingichka footer. Holat soʻzlari va belgilari — fx-result’ning data-status variantlaridan (404, 403, 500, 503, offline). */
  .fx-errorpage { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; min-block-size: 100dvh; background: var(--fx-bg-page); color: var(--fx-text-primary); }
  .fx-errorpage[data-size="block"] { min-block-size: calc(var(--fx-space-12) * 14); overflow: hidden; border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-overlay); }
  .fx-errorpage__bar { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-4); padding: var(--fx-space-4) var(--fx-space-6); }
  .fx-errorpage__main { position: relative; isolation: isolate; display: grid; align-content: center; justify-items: center; gap: var(--fx-space-6); padding: var(--fx-space-10) var(--fx-space-6) var(--fx-space-12); overflow: hidden; }
  .fx-errorpage__main > .fx-bg { z-index: -1; }
  /* ulkan kod: tepadan pastga soʻnuvchi matn, ortidan nur */
  .fx-errorpage__code {
    margin: 0 0 calc(var(--fx-space-3) * -1);
    font-family: var(--fx-font-family-display);
    font-size-adjust: var(--fx-font-adjust-display);
    font-size: clamp(calc(var(--fx-font-size-display-md) * 2.5), 22vw, calc(var(--fx-font-size-display-md) * 5));
    font-weight: var(--fx-font-weight-semibold);
    font-variant-numeric: tabular-nums;
    line-height: 0.9;
    letter-spacing: -0.06em;
    background: linear-gradient(to bottom, var(--fx-text-primary) 10%, color-mix(in oklab, var(--fx-text-primary) 8%, transparent) 85%) text;
    color: transparent;
    user-select: none;
    animation: fx-errorpage-in calc(var(--fx-motion-slower) * 1.6) var(--fx-ease-emphasized) both;
  }
  .fx-errorpage[data-status="500"] .fx-errorpage__code { background-image: linear-gradient(to bottom, var(--fx-fg-error) 10%, color-mix(in oklab, var(--fx-fg-error) 6%, transparent) 85%); }
  .fx-errorpage[data-status="503"] .fx-errorpage__code { background-image: linear-gradient(to bottom, var(--fx-fg-warning) 10%, color-mix(in oklab, var(--fx-fg-warning) 6%, transparent) 85%); }
  .fx-errorpage__main > .fx-result { padding: 0; }
  .fx-errorpage__search { display: flex; gap: var(--fx-space-2); inline-size: 100%; max-inline-size: var(--fx-dialog-width); }
  .fx-errorpage__search > :first-child { flex: 1 1 auto; }
  .fx-errorpage__links { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-popover-width) * 0.62)), 1fr)); gap: var(--fx-space-3); inline-size: 100%; max-inline-size: calc(var(--fx-dialog-width) * 1.7); margin: 0; padding: 0; list-style: none; }
  .fx-errorpage__link {
    display: grid;
    gap: calc(var(--fx-space-1) / 2);
    block-size: 100%;
    box-sizing: border-box;
    padding: var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    color: inherit;
    text-align: start;
    text-decoration: none;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), translate var(--fx-motion-base) var(--fx-ease-enter), box-shadow var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-errorpage__link:hover { border-color: var(--fx-border-color-strong); box-shadow: var(--fx-shadow-sm); translate: 0 calc(var(--fx-motion-lift) * var(--fx-knob-motion-lift)); }
  .fx-errorpage__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-errorpage__link-title { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-errorpage__link-title::after { content: " →"; color: var(--fx-text-tertiary); }
  .fx-errorpage__link-text { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-errorpage__footer { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--fx-space-2) var(--fx-space-6); padding: var(--fx-space-4) var(--fx-space-6); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-errorpage__footer a { color: inherit; }
  @keyframes fx-errorpage-in { from { opacity: 0; translate: 0 var(--fx-motion-shift-lg); filter: blur(calc(var(--fx-space-2) * var(--fx-knob-motion))); } }
  @media (forced-colors: active) { .fx-errorpage__code { color: CanvasText; background: none; } }
}

/* fab */
@layer fx.components {
  /* FAB va speed dial (4.150, M3 «FAB», «FAB menu»): ekranning pastki burchagidagi bitta asosiy amal. Bosilsa 3–5 amal ustma-ust yoyiladi
     (har biri — ikon + yozuv, yozuv doim koʻrinadi), asosiy tugma ✕ ga aylanadi. Xulq (data-fx-fab): APG «Menu Button».
     Joylashuv: data-position="end" (standart, oʻng past), "start", "inline" (oqimda — hujjat va namuna uchun). */
  .fx-fab { --_s: calc(var(--fx-control-h-lg) + var(--fx-space-2)); position: fixed; z-index: 20; inset-block-end: calc(var(--fx-space-6) + env(safe-area-inset-bottom, 0px)); inset-inline-end: var(--fx-space-6); display: flex; flex-direction: column-reverse; align-items: flex-end; gap: var(--fx-space-3); }
  .fx-fab[data-position="start"] { inset-inline: var(--fx-space-6) auto; align-items: flex-start; }
  .fx-fab[data-position="inline"] { position: relative; inset: auto; z-index: auto; }
  .fx-fab__btn { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: var(--fx-space-2); min-inline-size: var(--_s); block-size: var(--_s); padding: 0 var(--fx-space-4); border: 0; border-radius: calc(var(--_s) * 0.3 * (1 - var(--fx-knob-pill)) + var(--_s) / 2 * var(--fx-knob-pill)); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); box-shadow: var(--fx-shadow-lg); font: inherit; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), box-shadow var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-fab__btn:hover { background: var(--fx-bg-brand-solid-hover); box-shadow: var(--fx-shadow-lg), var(--fx-shadow-md); }
  .fx-fab__btn:active { scale: var(--fx-motion-press); }
  .fx-fab__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-fab__btn > svg { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: currentColor; transition: rotate var(--fx-motion-base) var(--fx-ease-emphasized); }
  .fx-fab__btn[aria-expanded="true"] > svg { rotate: 45deg; }
  .fx-fab:not([data-extended]) .fx-fab__btn { padding: 0; }
  .fx-fab:not([data-extended]) .fx-fab__label { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .fx-fab[data-size="sm"] { --_s: var(--fx-control-h-md); }
  /* yoyiladigan amallar: pastdan yuqoriga, ketma-ket (--i) */
  .fx-fab__actions { display: flex; flex-direction: column-reverse; align-items: inherit; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-fab__actions[hidden] { display: none; }
  .fx-fab__action { display: inline-flex; align-items: center; gap: var(--fx-space-3); padding: 0 var(--fx-space-4) 0 var(--fx-space-3); block-size: var(--fx-control-h-md); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-circle); background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-md); font: inherit; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); white-space: nowrap; cursor: pointer; animation: fx-fab-in var(--fx-motion-base) var(--fx-ease-emphasized) both; animation-delay: calc(var(--i, 0) * var(--fx-duration-stagger) * var(--fx-knob-motion-stagger)); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-fab__action:hover { background: var(--fx-bg-subtle); }
  .fx-fab__action:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-fab__action > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: currentColor; color: var(--fx-text-secondary); }
  @keyframes fx-fab-in { from { opacity: 0; translate: 0 var(--fx-motion-shift-md); scale: 0.9; } }
  @media (forced-colors: active) { .fx-fab__btn, .fx-fab__action { border: var(--fx-border-width-default) solid ButtonText; } }
}

/* facets */
@layer fx.components {
  /* Faset filtr paneli (4.167): chap ustunda guruhlangan filtrlar — har guruh yigʻiladi (details), har variantda natijalar soni,
     uzun roʻyxatda «Yana N ta», guruh boʻyicha faol son va umumiy «Tozalash». Natija 0 boʻlgan variant xira (lekin tanlangan boʻlsa — yoʻq).
     Xulq (data-fx-facets): sanash, «Yana», tozalash, guruh ichida qidiruv, «fx-facets-change» {values}. */
  .fx-facets { display: grid; align-content: start; gap: var(--fx-space-1); min-inline-size: 0; inline-size: 100%; max-inline-size: calc(var(--fx-nav-width) * 1.1); font-size: var(--fx-font-size-sm); }
  .fx-facets__head { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-2); padding-block-end: var(--fx-space-2); }
  .fx-facets__title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-facets__clear { padding: var(--fx-space-1) var(--fx-space-2); border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-xs); text-decoration: underline; text-underline-offset: var(--fx-space-1); cursor: pointer; }
  .fx-facets__clear:hover { color: var(--fx-text-primary); }
  .fx-facets__clear[hidden] { display: none; }
  .fx-facets__clear:focus-visible, .fx-facets__more:focus-visible, .fx-facets__legend:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-facets__group { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-facets__legend { display: flex; align-items: center; gap: var(--fx-space-2); padding: var(--fx-space-3) 0; border-radius: var(--fx-radius-control); color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); list-style: none; cursor: pointer; }
  .fx-facets__legend::-webkit-details-marker { display: none; }
  .fx-facets__legend::after { content: ""; margin-inline-start: auto; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: var(--fx-text-tertiary); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-facets__group[open] > .fx-facets__legend::after { rotate: 180deg; }
  .fx-facets__badge { display: inline-grid; place-items: center; min-inline-size: var(--fx-size-icon-sm); padding-inline: var(--fx-space-1); box-sizing: border-box; border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-size: calc(var(--fx-font-size-xs) * 0.9); font-variant-numeric: tabular-nums; line-height: var(--fx-size-icon-sm); }
  .fx-facets__badge[hidden] { display: none; }
  .fx-facets__body { display: grid; gap: var(--fx-space-1); padding-block-end: var(--fx-space-3); }
  .fx-facets__search { margin-block-end: var(--fx-space-1); }
  .fx-facets__list { display: grid; gap: calc(var(--fx-space-1) / 2); margin: 0; padding: 0; list-style: none; }
  .fx-facets__list > li[hidden] { display: none; }
  .fx-facets__option { display: flex; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-size-min-target); padding-inline: var(--fx-space-1); border-radius: var(--fx-radius-control); cursor: pointer; }
  .fx-facets__option:hover { background: var(--fx-bg-subtle); }
  .fx-facets__option .fx-check { flex: none; }
  .fx-facets__label { flex: 1; min-inline-size: 0; overflow: hidden; color: var(--fx-text-primary); text-overflow: ellipsis; white-space: nowrap; }
  .fx-facets__count { flex: none; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-facets__option[data-empty]:not(:has(:checked)) { opacity: 0.5; }
  .fx-facets__option:has(:checked) .fx-facets__label { font-weight: var(--fx-font-weight-medium); }
  .fx-facets__more { justify-self: start; padding: var(--fx-space-1); border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: var(--fx-text-brand); font: inherit; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); cursor: pointer; }
  .fx-facets__more[hidden] { display: none; }
  .fx-facets__none { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-facets__none[hidden] { display: none; }
}

/* faq */
@layer fx.components {
  /* FAQ boʻlimi (4.173): accordion asosida savol-javoblar + «Javob topmadingizmi?» bloki.
     data-layout: stack (sarlavha tepada, markazda) yoki split (sarlavha chapda yopishqoq, savollar oʻngda).
     Qidiruv tizimlari uchun — FAQPage strukturaviy maʼlumoti (application/ld+json) shu boʻlim yonida. */
  .fx-faq { display: grid; gap: var(--fx-space-10); }
  .fx-faq__head { display: grid; justify-items: center; gap: var(--fx-space-3); max-inline-size: calc(var(--fx-dialog-width) * 1.4); margin-inline: auto; text-align: center; }
  .fx-faq__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1.15; letter-spacing: -0.02em; text-wrap: balance; }
  .fx-faq__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-faq__list { inline-size: 100%; max-inline-size: calc(var(--fx-dialog-width) * 1.7); margin-inline: auto; }
  .fx-faq__more {
    box-sizing: border-box;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--fx-space-4);
    inline-size: 100%;
    max-inline-size: calc(var(--fx-dialog-width) * 1.7);
    margin-inline: auto;
    padding: var(--fx-space-5) var(--fx-space-6);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-subtle);
  }
  .fx-faq__more-text { display: grid; gap: calc(var(--fx-space-1) / 2); margin: 0; font-size: var(--fx-font-size-sm); }
  .fx-faq__more-text > strong { font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-faq__more-text > span { color: var(--fx-text-secondary); }
  /* split: chapda sarlavha (scroll’da yopishadi), oʻngda savollar */
  .fx-faq[data-layout="split"] { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); align-items: start; gap: var(--fx-space-6) var(--fx-space-12); }
  .fx-faq[data-layout="split"] .fx-faq__head { position: sticky; inset-block-start: calc(var(--fx-size-topbar) + var(--fx-space-6)); justify-items: start; margin: 0; text-align: start; }
  .fx-faq[data-layout="split"] :is(.fx-faq__list, .fx-faq__more) { max-inline-size: none; margin: 0; }
  .fx-faq[data-layout="split"] .fx-faq__more { grid-column: 2; }
  @media (max-width: 48em) {
    .fx-faq[data-layout="split"] { grid-template-columns: minmax(0, 1fr); }
    .fx-faq[data-layout="split"] .fx-faq__head { position: static; }
    .fx-faq[data-layout="split"] .fx-faq__more { grid-column: auto; }
  }
}

/* featured */
@layer fx.components {
  /* Rangli plitkada ikon: boʻsh holat, xususiyat, dialog tepasi. Dekorativ (aria-hidden). */
  .fx-featured { --_s: var(--fx-control-h-md); flex: none; display: inline-grid; place-items: center; inline-size: var(--_s); block-size: var(--_s); box-sizing: border-box; border: var(--fx-border-width-default) solid transparent; border-radius: var(--fx-radius-control); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-featured > svg { inline-size: calc(var(--_s) / 2); block-size: calc(var(--_s) / 2); }
  .fx-featured[data-size="sm"] { --_s: var(--fx-control-h-sm); }
  .fx-featured[data-size="lg"] { --_s: var(--fx-control-h-lg); }
  .fx-featured[data-size="xl"] { --_s: calc(var(--fx-control-h-lg) * 1.4); }
  .fx-featured[data-shape="circle"] { border-radius: var(--fx-radius-circle); }
  .fx-featured[data-tone="neutral"] { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  .fx-featured[data-tone="success"] { background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); }
  .fx-featured[data-tone="warning"] { background: var(--fx-bg-warning-subtle); color: var(--fx-fg-warning); }
  .fx-featured[data-tone="error"] { background: var(--fx-bg-error-subtle); color: var(--fx-fg-error); }
  .fx-featured[data-tone="info"] { background: var(--fx-bg-info-subtle); color: var(--fx-fg-info); }
  /* Uslub: yorugʻ (standart), toʻq, chiziqli */
  .fx-featured[data-style="solid"] { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-featured[data-style="solid"][data-tone="error"] { background: var(--fx-bg-error-solid); color: var(--fx-text-on-error); }
  .fx-featured[data-style="solid"][data-tone="neutral"] { background: var(--fx-text-primary); color: var(--fx-bg-page); }
  .fx-featured[data-style="solid"][data-tone="success"] { background: var(--fx-fg-success); color: var(--fx-bg-surface); }
  .fx-featured[data-style="solid"][data-tone="warning"] { background: var(--fx-fg-warning); color: var(--fx-bg-surface); }
  .fx-featured[data-style="solid"][data-tone="info"] { background: var(--fx-fg-info); color: var(--fx-bg-surface); }
  .fx-featured[data-style="outline"] { background: var(--fx-bg-surface); border-color: currentColor; }
}

/* features */
@layer fx.components {
  /* Xususiyatlar boʻlimi (4.171): sarlavha bloki + ikonli toʻr (grid, cards) yoki almashinuvchi media–matn qatorlari (rows).
     Ikon foni — toifa ranglari (data-color). Telefonda bitta ustun. */
  .fx-features { display: grid; gap: var(--fx-space-12); }
  .fx-features__head { display: grid; justify-items: center; gap: var(--fx-space-3); max-inline-size: calc(var(--fx-dialog-width) * 1.5); margin-inline: auto; text-align: center; }
  .fx-features__eyebrow { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-features__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1.15; letter-spacing: -0.02em; text-wrap: balance; }
  .fx-features__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-features__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-popover-width) * 0.85)), 1fr)); gap: var(--fx-space-10) var(--fx-space-8); margin: 0; padding: 0; list-style: none; }
  .fx-features__item { display: grid; align-content: start; gap: var(--fx-space-2); }
  .fx-features__icon { display: grid; place-items: center; inline-size: var(--fx-size-control-md); block-size: var(--fx-size-control-md); margin-block-end: var(--fx-space-2); border-radius: var(--fx-radius-control); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-features__icon > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-features__icon[data-color="blue"] { background: var(--fx-bg-category-blue-subtle); color: var(--fx-text-primary); }
  .fx-features__icon[data-color="green"] { background: var(--fx-bg-category-green-subtle); color: var(--fx-text-primary); }
  .fx-features__icon[data-color="pink"] { background: var(--fx-bg-category-pink-subtle); color: var(--fx-text-primary); }
  .fx-features__icon[data-color="yellow"] { background: var(--fx-bg-category-yellow-subtle); color: var(--fx-text-primary); }
  .fx-features__icon[data-color="coral"] { background: var(--fx-bg-category-coral-subtle); color: var(--fx-text-primary); }
  .fx-features__icon[data-color="purple"] { background: var(--fx-bg-category-purple-subtle); color: var(--fx-text-primary); }
  .fx-features__name { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-features__desc { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); line-height: 1.6; text-wrap: pretty; }
  .fx-features__more { justify-self: start; margin-block-start: var(--fx-space-1); font-size: var(--fx-font-size-sm); }
  /* kartali toʻr */
  .fx-features[data-layout="cards"] .fx-features__grid { gap: var(--fx-space-4); }
  .fx-features[data-layout="cards"] .fx-features__item { padding: var(--fx-space-6); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-sm); }
  /* almashinuvchi qatorlar: matn | media, keyingisi media | matn */
  .fx-features__rows { display: grid; gap: calc(var(--fx-space-12) * 1.5); }
  .fx-features__row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: center; gap: var(--fx-space-12); }
  .fx-features__row:nth-child(even) > .fx-features__media { order: -1; }
  .fx-features__row > .fx-features__item { gap: var(--fx-space-3); }
  .fx-features__row .fx-features__name { font-size: var(--fx-font-size-xl); }
  .fx-features__row .fx-features__desc { font-size: var(--fx-font-size-md); }
  .fx-features__media { position: relative; display: grid; place-items: center; min-block-size: calc(var(--fx-space-12) * 6); padding: var(--fx-space-6); overflow: hidden; isolation: isolate; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-subtle); }
  .fx-features__media > :is(img, video) { inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-features__list { display: grid; gap: var(--fx-space-2); margin: var(--fx-space-2) 0 0; padding: 0; list-style: none; font-size: var(--fx-font-size-sm); }
  .fx-features__list > li { display: flex; gap: var(--fx-space-2); }
  .fx-features__list > li::before { content: ""; flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); background: var(--fx-fg-success); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='8' fill='black' opacity='.18'/%3E%3Cpath d='M6.5 10.2l2.4 2.4 4.6-5' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-features[data-align="start"] .fx-features__head { justify-items: start; margin-inline: 0; text-align: start; }
  @media (max-width: 48em) {
    .fx-features__row { grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-6); }
    .fx-features__row:nth-child(even) > .fx-features__media { order: 0; }
  }
}

/* file */
@layer fx.components {
  /* Fayl tugmasi (dropzone'siz): native input type="file" maydon shaklida — «Fayl tanlash» tugmasi + tanlangan fayl nomi brauzerdan. */
  .fx-file {
    --_h: var(--fx-control-h-md);
    box-sizing: border-box;
    inline-size: 100%;
    block-size: var(--_h);
    padding: 0 var(--fx-space-4) 0 0;
    font: inherit;
    font-size: var(--fx-font-size-sm);
    color: var(--fx-text-secondary);
    background: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    overflow: hidden;
    cursor: pointer;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-file::file-selector-button {
    block-size: 100%;
    margin-inline-end: var(--fx-space-3);
    padding-inline: var(--fx-space-4);
    border: 0;
    border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-field);
    background: var(--fx-bg-muted);
    color: var(--fx-text-primary);
    font: inherit;
    font-weight: var(--fx-font-weight-medium);
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-file:hover { border-color: var(--fx-border-color-strong); }
  .fx-file:hover::file-selector-button { background: var(--fx-bg-subtle); }
  .fx-file:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-file[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  .fx-file[data-size="lg"] { --_h: var(--fx-control-h-lg); }
  .fx-file:disabled { background: var(--fx-bg-muted); color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-file:disabled::file-selector-button { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-field[data-invalid] .fx-file { border-color: var(--fx-border-color-error); }
  /* Fayl turi belgisi (4.142): bukilgan burchakli varaq + pastda 3–4 harfli yorliq (matn — markupda, rang yolgʻiz belgi emas).
     Rang — toifa palitrasidan: pdf · coral, doc · blue, xls · green, ppt · pink, zip · yellow, img · purple; boshqalari — neytral. */
  .fx-file__icon { --_c: var(--fx-bg-muted); --_s: var(--fx-control-h-md); position: relative; display: inline-grid; align-items: end; justify-items: start; flex: none; inline-size: calc(var(--_s) * 0.8); block-size: var(--_s); box-sizing: border-box; padding: 0 0 calc(var(--_s) * 0.14); border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: calc(var(--fx-radius-badge) / 2); border-start-end-radius: calc(var(--_s) * 0.3); background: var(--fx-bg-surface); color: var(--fx-text-on-category); font-size: calc(var(--_s) * 0.22); font-weight: var(--fx-font-weight-semibold); line-height: 1.3; letter-spacing: 0.02em; text-transform: uppercase; font-variant-numeric: tabular-nums; }
  .fx-file__icon::before { content: ""; position: absolute; inset-block-start: calc(var(--fx-border-width-default) * -1); inset-inline-end: calc(var(--fx-border-width-default) * -1); inline-size: calc(var(--_s) * 0.3); block-size: calc(var(--_s) * 0.3); border-end-start-radius: calc(var(--fx-radius-badge) / 2); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-strong); background: var(--fx-bg-subtle); }
  .fx-file__icon > span { margin-inline-start: calc(var(--fx-border-width-default) * -1 - var(--_s) * 0.1); padding: 0 calc(var(--_s) * 0.08); border-radius: calc(var(--fx-radius-badge) / 3); background: var(--_c); }
  .fx-file__icon[data-type="pdf"] { --_c: var(--fx-bg-category-coral); }
  .fx-file__icon[data-type="doc"] { --_c: var(--fx-bg-category-blue); }
  .fx-file__icon[data-type="xls"] { --_c: var(--fx-bg-category-green); }
  .fx-file__icon[data-type="ppt"] { --_c: var(--fx-bg-category-pink); }
  .fx-file__icon[data-type="zip"] { --_c: var(--fx-bg-category-yellow); }
  .fx-file__icon[data-type="img"] { --_c: var(--fx-bg-category-purple); }
  .fx-file__icon[data-type="txt"] { --_c: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-file__icon[data-size="sm"] { --_s: var(--fx-control-h-sm); }
  .fx-file__icon[data-size="lg"] { --_s: var(--fx-control-h-lg); }
  /* fayl qatori: belgi + nom + hajm */
  .fx-file__item { display: flex; align-items: center; gap: var(--fx-space-3); min-inline-size: 0; font-size: var(--fx-font-size-sm); }
  .fx-file__meta { display: grid; min-inline-size: 0; }
  .fx-file__name { overflow: hidden; color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); text-overflow: ellipsis; white-space: nowrap; }
  .fx-file__size { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  @media (forced-colors: active) { .fx-file__icon > span { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* filterbar */
@layer fx.components {
  /* Filtr qatori (PDP .eco-listpage__bar): qidiruv + 2–3 faset chip + «Filtrlar» varaq tugmasi (faol soni bilan) + oʻng chetda koʻrinish menyusi;
     ostida — faol filtrlar teglari va «Hammasini tozalash». Xulq — foxui.js (data-fx-filterbar): tegni olib tashlash, tozalash, son. */
  .fx-filterbar { display: grid; gap: var(--fx-space-3); }
  .fx-filterbar__main { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-filterbar__search { flex: 1 1 calc(var(--fx-popover-width) * 0.7); min-inline-size: 0; }
  .fx-filterbar__facets { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-filterbar__end { display: flex; align-items: center; gap: var(--fx-space-2); margin-inline-start: auto; }
  .fx-filterbar__trigger { gap: var(--fx-space-2); }
  .fx-filterbar__trigger > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-filterbar__count { display: inline-grid; place-items: center; min-inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); padding-inline: var(--fx-space-1); box-sizing: border-box; border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; line-height: 1; }
  .fx-filterbar__count[hidden] { display: none; }
  /* Faol filtrlar */
  .fx-filterbar__tags { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-filterbar__tags[hidden] { display: none; }
  .fx-filterbar__tags-label { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-filterbar__clear { padding: var(--fx-space-1) var(--fx-space-2); border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); text-decoration: underline; text-underline-offset: var(--fx-space-1); cursor: pointer; }
  .fx-filterbar__clear:hover { color: var(--fx-text-primary); }
  .fx-filterbar__clear:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  /* Soʻrov quruvchi (4.168, data-builder): shart qatorlari (maydon · operator · qiymat · ✕) va guruhlar; guruh boshida VA/YOKI almashtirgich
     (radio guruhi), ichki guruh chap chiziq bilan surilgan. Pastda soʻrovning oʻqiladigan matni (.fx-filterbar__summary, aria-live). */
  .fx-filterbar[data-builder] { gap: var(--fx-space-3); }
  .fx-filterbar__group { display: grid; gap: var(--fx-space-2); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-filterbar__group .fx-filterbar__group { margin-inline-start: var(--fx-space-6); border-inline-start: var(--fx-border-width-focus) solid var(--fx-border-color-strong); background: var(--fx-bg-subtle); }
  .fx-filterbar__join { display: inline-flex; justify-self: start; padding: calc(var(--fx-space-1) / 2); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); }
  .fx-filterbar__join > button { min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); padding: 0 var(--fx-space-3); border: 0; border-radius: calc(var(--fx-radius-control) - var(--fx-space-1) / 2); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.04em; cursor: pointer; }
  .fx-filterbar__join > button[aria-checked="true"] { background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-sm); }
  .fx-filterbar__join > button:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-filterbar__rule { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) minmax(0, 1.4fr) auto; align-items: center; gap: var(--fx-space-2); }
  .fx-filterbar__rule::before { content: attr(data-join); position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
  .fx-filterbar__remove { display: inline-grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-tertiary); font: inherit; font-size: var(--fx-font-size-lg); cursor: pointer; }
  .fx-filterbar__remove:hover { background: var(--fx-bg-muted); color: var(--fx-text-error); }
  .fx-filterbar__remove:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-filterbar__add { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); }
  .fx-filterbar__summary { display: block; padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); overflow-wrap: anywhere; }
  .fx-filterbar__summary b { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  @media (max-width: 640px) { .fx-filterbar__rule { grid-template-columns: minmax(0, 1fr) auto; } .fx-filterbar__rule > :not(.fx-filterbar__remove) { grid-column: 1; } .fx-filterbar__remove { grid-column: 2; grid-row: 1; } }
}

/* flag */
@layer fx.components {
  /* Mamlakat bayroqlari (4.145): telefon kodi, til va valyuta tanlagichlari uchun sodda geometrik bayroqlar — faqat CSS gradientlar
     (rasm, inline SVG, emoji yoʻq: emoji bayroq Windows’da harf boʻlib chiqadi). Chizma 4:3 nisbatda; doira shaklida chetlari kesiladi.
     Ranglar — xom palitra (bayroq rangi mavzu bilan oʻzgarmaydi, maʼlumot). Bayroq bezak emas: role="img" + aria-label (mamlakat nomi). */
  .fx-flag {
    --_h: var(--fx-size-icon-md);
    --_r: var(--fx-color-red-600);
    --_w: var(--fx-color-white);
    --_b: var(--fx-color-blue-700);
    --_g: var(--fx-color-green-600);
    --_y: var(--fx-color-amber-300);
    --_k: var(--fx-color-black);
    --_c: color-mix(in oklab, var(--fx-color-blue-600) 65%, var(--fx-color-green-600));
    --_s: color-mix(in oklab, var(--fx-color-blue-300) 60%, var(--fx-color-blue-600));
    display: inline-block;
    flex: none;
    block-size: var(--_h);
    aspect-ratio: 4 / 3;
    border-radius: calc(var(--fx-radius-badge) / 2);
    background: var(--fx-bg-muted);
    outline: var(--fx-border-width-default) solid var(--fx-border-color-default);
    outline-offset: calc(var(--fx-border-width-default) * -1);
    background-repeat: no-repeat;
    vertical-align: middle;
    overflow: hidden;
  }
  .fx-flag[data-size="sm"] { --_h: var(--fx-size-icon-sm); }
  .fx-flag[data-size="lg"] { --_h: var(--fx-size-icon-lg); }
  .fx-flag[data-size="xl"] { --_h: var(--fx-space-12); border-radius: var(--fx-radius-badge); }
  /* Doira: avatar, til tanlagich — 4:3 chizma markazdan kesiladi */
  .fx-flag[data-shape="circle"] { aspect-ratio: 1; border-radius: var(--fx-radius-circle); background-size: 133.34% 100%; background-position: center; }

  /* Oʻzbekiston: koʻk-yashil / qizil hoshiya / oq / qizil hoshiya / yashil; chapda oq oy (12 yulduz — kichik oʻlchamda nuqta boʻladi, chizilmaydi) */
  .fx-flag[data-country="uz"] { background-image:
    radial-gradient(7.5% 10% at 17% 16.5%, var(--_c) 96%, transparent 100%),
    radial-gradient(8.5% 11.3% at 13.5% 16.5%, var(--_w) 96%, transparent 100%),
    radial-gradient(1.6% 2.1% at 32% 9%, var(--_w) 90%, transparent), radial-gradient(1.6% 2.1% at 38% 9%, var(--_w) 90%, transparent), radial-gradient(1.6% 2.1% at 44% 9%, var(--_w) 90%, transparent),
    radial-gradient(1.6% 2.1% at 35% 17%, var(--_w) 90%, transparent), radial-gradient(1.6% 2.1% at 41% 17%, var(--_w) 90%, transparent),
    linear-gradient(to bottom, var(--_c) 0 32%, var(--_r) 32% 34%, var(--_w) 34% 66%, var(--_r) 66% 68%, var(--_g) 68%); }
  /* Qozogʻiston: osmon rang, oʻrtada sariq quyosh va burgut (soddalashtirilgan — quyosh va nur halqasi), chap chetda naqsh tasmasi */
  .fx-flag[data-country="kz"] { background-image:
    radial-gradient(11% 14.7% at 52% 44%, var(--_y) 96%, transparent 100%),
    radial-gradient(16% 21.3% at 52% 44%, transparent 78%, var(--_y) 80% 90%, transparent 92%),
    linear-gradient(to right, transparent 0 6%, var(--_y) 6% 9%, transparent 9%),
    linear-gradient(var(--_s), var(--_s)); }
  /* Rossiya: oq / koʻk / qizil */
  .fx-flag[data-country="ru"] { background-image: linear-gradient(to bottom, var(--_w) 0 33.34%, var(--fx-color-blue-600) 33.34% 66.67%, var(--_r) 66.67%); }
  /* Turkiya: qizil, oq oy va yulduz (yulduz — nuqta) */
  .fx-flag[data-country="tr"] { background-image:
    radial-gradient(10% 13.3% at 41% 50%, var(--_r) 96%, transparent 100%),
    radial-gradient(12.5% 16.7% at 37% 50%, var(--_w) 96%, transparent 100%),
    radial-gradient(4% 5.3% at 57% 50%, var(--_w) 92%, transparent 100%),
    linear-gradient(var(--_r), var(--_r)); }
  /* AQSh: 13 qizil-oq yoʻl, chap tepada koʻk kanton (yulduzlar oʻrniga mayda nuqta toʻri) */
  .fx-flag[data-country="us"] {
    background-image:
      radial-gradient(circle, var(--_w) 0 28%, transparent 34%),
      linear-gradient(var(--fx-color-blue-900), var(--fx-color-blue-900)),
      repeating-linear-gradient(to bottom, var(--_r) 0 7.693%, var(--_w) 7.693% 15.386%);
    background-size: 8% 10.77%, 40% 53.85%, 100% 100%;
    background-position: 0 0, 0 0, 0 0;
    background-repeat: repeat, no-repeat, no-repeat;
  }
  .fx-flag[data-country="us"][data-shape="circle"] { background-size: 10.67% 10.77%, 53.34% 53.85%, 133.34% 100%; background-position: 0 0, 0 0, center; }
  /* BAA: chapda qizil tik tasma, yashil / oq / qora */
  .fx-flag[data-country="ae"] { background-image: linear-gradient(to right, var(--_r) 0 25%, transparent 25%), linear-gradient(to bottom, var(--_g) 0 33.34%, var(--_w) 33.34% 66.67%, var(--_k) 66.67%); }
  /* Xitoy: qizil, chap tepada katta va 4 ta kichik sariq yulduz (nuqta) */
  .fx-flag[data-country="cn"] { background-image:
    radial-gradient(7% 9.3% at 17% 25%, var(--_y) 92%, transparent 100%),
    radial-gradient(2.4% 3.2% at 33% 10%, var(--_y) 90%, transparent), radial-gradient(2.4% 3.2% at 40% 20%, var(--_y) 90%, transparent),
    radial-gradient(2.4% 3.2% at 40% 35%, var(--_y) 90%, transparent), radial-gradient(2.4% 3.2% at 33% 45%, var(--_y) 90%, transparent),
    linear-gradient(var(--_r), var(--_r)); }
  /* Koreya Respublikasi: oq, markazda qizil (tepada) / koʻk (pastda) doira, toʻrt burchakda qora trigramma (chiziqchalar) */
  .fx-flag[data-country="kr"] { background-image:
    radial-gradient(18% 24% at 50% 50%, transparent 96%, var(--_w) 100%),
    linear-gradient(to bottom, transparent 26%, var(--_r) 26% 50%, var(--fx-color-blue-700) 50% 74%, transparent 74%),
    linear-gradient(35deg, transparent 0 13%, var(--_k) 13% 19%, transparent 19% 81%, var(--_k) 81% 87%, transparent 87%),
    linear-gradient(-35deg, transparent 0 13%, var(--_k) 13% 19%, transparent 19% 81%, var(--_k) 81% 87%, transparent 87%),
    linear-gradient(var(--_w), var(--_w));
    background-size: 100% 100%, 36% 100%, 100% 100%, 100% 100%, 100% 100%; background-position: 0 0, 50% 0, 0 0, 0 0, 0 0; }
  .fx-flag[data-country="kr"][data-shape="circle"] { background-size: 133.34% 100%, 48% 100%, 133.34% 100%, 133.34% 100%, 133.34% 100%; background-position: center, 50% 0, center, center, center; }
  /* Tojikiston: qizil / oq / yashil, oʻrtada sariq toj (nuqta) */
  .fx-flag[data-country="tj"] { background-image: radial-gradient(6% 8% at 50% 50%, var(--_y) 92%, transparent 100%), linear-gradient(to bottom, var(--_r) 0 28.6%, var(--_w) 28.6% 71.4%, var(--_g) 71.4%); }
  /* Qirgʻiziston: qizil, oʻrtada sariq quyosh (nur halqasi bilan) */
  .fx-flag[data-country="kg"] { background-image:
    radial-gradient(9% 12% at 50% 50%, var(--_r) 60%, var(--_y) 64% 96%, transparent 100%),
    repeating-conic-gradient(from 0deg at 50% 50%, var(--_y) 0 5deg, transparent 5deg 9deg),
    linear-gradient(var(--_r), var(--_r));
    background-size: 100% 100%, 40% 53.3%, 100% 100%; background-position: 0 0, 50% 50%, 0 0; }
  /* Germaniya: qora / qizil / sariq */
  .fx-flag[data-country="de"] { background-image: linear-gradient(to bottom, var(--_k) 0 33.34%, var(--_r) 33.34% 66.67%, var(--fx-color-amber-300) 66.67%); }
  /* Yaponiya: oq, markazda qizil doira */
  .fx-flag[data-country="jp"] { background-image: radial-gradient(22.5% 30% at 50% 50%, var(--_r) 96%, transparent 100%), linear-gradient(var(--_w), var(--_w)); }

  /* Bayroq + matn (telefon kodi, til): .fx-flag-label */
  .fx-flag-label { display: inline-flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-flag-label__code { color: var(--fx-text-tertiary); }
  @media (forced-colors: active) { .fx-flag { forced-color-adjust: none; } }
}

/* floatwin */
@layer fx.components {
  /* Suzuvchi oyna (4-toʻlqin 4.152; Chakra Floating Panel, Mantine FloatingWindow, Ark): sahifa ustida qoladigan, modal boʻlmagan panel —
     video qoʻngʻiroq, AI yordamchi, kalkulyator, eslatma. Sarlavha qatoridan sudraladi (sichqoncha, barmoq yoki tutqich + strelkalar),
     pastki burchakdan oʻlchami oʻzgaradi, yigʻiladi (faqat sarlavha qoladi), yopiladi. Joyi --_x / --_y (xulq yozadi), ekrandan chiqmaydi. */
  .fx-floatwin {
    --_x: 0px;
    --_y: 0px;
    box-sizing: border-box;
    position: fixed;
    inset-block-end: var(--fx-space-6);
    inset-inline-end: var(--fx-space-6);
    z-index: var(--fx-z-overlay);
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto minmax(0, 1fr);
    inline-size: calc(var(--fx-popover-width) * 1.1);
    block-size: calc(var(--fx-popover-width) * 0.9);
    min-inline-size: calc(var(--fx-popover-width) * 0.7);
    min-block-size: calc(var(--fx-control-h-md) * 3);
    max-inline-size: calc(100vw - var(--fx-space-8));
    max-block-size: calc(100dvh - var(--fx-space-8));
    translate: var(--_x) var(--_y);
    overflow: hidden;
    resize: both;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-elevation-4);
    font-size: var(--fx-font-size-sm);
  }
  .fx-floatwin[hidden] { display: none; }
  .fx-floatwin[data-placement="start"] { inset-inline: var(--fx-space-6) auto; }
  .fx-floatwin[data-placement="top-end"] { inset-block: calc(var(--fx-size-topbar) + var(--fx-space-4)) auto; }
  .fx-floatwin[data-placement="inline"] { position: relative; inset: auto; z-index: auto; }
  .fx-floatwin[data-resize="none"] { resize: none; }
  /* Kirish (ochilganda) — chiqish yashirish bilan darhol */
  @starting-style { .fx-floatwin:not([hidden]) { opacity: 0; scale: var(--fx-motion-scale-enter); } }
  .fx-floatwin { transition: opacity var(--fx-motion-base) var(--fx-ease-enter), scale var(--fx-motion-base) var(--fx-ease-emphasized), block-size var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-floatwin[data-dragging] { transition: none; box-shadow: var(--fx-elevation-5); user-select: none; }
  .fx-floatwin:focus-within { border-color: var(--fx-border-color-default); }
  /* Sarlavha qatori — sudrash joyi */
  .fx-floatwin__bar { display: flex; align-items: center; gap: var(--fx-space-1); min-block-size: var(--fx-control-h-md); padding-inline: var(--fx-space-2) var(--fx-space-1); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-surface-container-low); cursor: grab; touch-action: none; user-select: none; }
  .fx-floatwin[data-dragging] .fx-floatwin__bar { cursor: grabbing; }
  .fx-floatwin__title { flex: 1; min-inline-size: 0; margin: 0; overflow: hidden; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); text-overflow: ellipsis; white-space: nowrap; }
  .fx-floatwin__grip, .fx-floatwin__btn { display: inline-grid; place-items: center; flex: none; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-nav); background: transparent; color: var(--fx-text-secondary); font: inherit; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-floatwin__grip { cursor: grab; }
  .fx-floatwin__grip:hover, .fx-floatwin__btn:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-floatwin__grip:focus-visible, .fx-floatwin__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-floatwin__grip > svg, .fx-floatwin__btn > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: currentColor; }
  .fx-floatwin__body { min-block-size: 0; overflow: auto; padding: var(--fx-space-4); }
  /* Yigʻilgan: faqat sarlavha qatori; oʻlcham oʻzgarmaydi */
  .fx-floatwin[data-collapsed] { block-size: auto !important; min-block-size: 0; resize: none; }
  .fx-floatwin[data-collapsed] .fx-floatwin__body { display: none; }
  .fx-floatwin[data-collapsed] .fx-floatwin__bar { border-block-end-color: transparent; }
  .fx-floatwin [data-floatwin="collapse"] > svg { transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-floatwin[data-collapsed] [data-floatwin="collapse"] > svg { rotate: 180deg; }
  @media (max-width: 640px) {
    .fx-floatwin:not([data-placement="inline"]) { inset-inline: var(--fx-space-3); inset-block-end: var(--fx-space-3); inline-size: auto; resize: none; }
  }
  @media (forced-colors: active) { .fx-floatwin { border-color: CanvasText; } }
}

/* flow */
@layer fx.components {
  /* Vazifa holati doirasi (PDP Task): backlog — punktir; qilinadi — chegara; jarayonda — 50 %; tekshiruvda — 75 %;
     bajarildi — toʻla brend doira + ✓; bekor — xira doira + ×. Rang yolgʻiz belgi emas — shakl ham oʻzgaradi. */
  .fx-flow { --_c: var(--fx-text-tertiary); --_p: 0%; position: relative; display: inline-block; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); box-sizing: border-box; border: calc(var(--fx-border-width-focus) * 0.75) solid var(--_c); border-radius: var(--fx-radius-circle); background: radial-gradient(closest-side, var(--fx-bg-surface) 0 52%, transparent 54%), conic-gradient(var(--_c) var(--_p), transparent 0); }
  .fx-flow[data-state="backlog"] { border-style: dashed; }
  .fx-flow[data-state="todo"] { --_c: var(--fx-text-secondary); }
  .fx-flow[data-state="progress"] { --_c: var(--fx-fg-warning); --_p: 50%; background: conic-gradient(var(--_c) var(--_p), transparent 0); background-clip: content-box; padding: calc(var(--fx-border-width-focus) * 0.5); }
  .fx-flow[data-state="review"] { --_c: var(--fx-fg-info); --_p: 75%; background: conic-gradient(var(--_c) var(--_p), transparent 0); background-clip: content-box; padding: calc(var(--fx-border-width-focus) * 0.5); }
  .fx-flow:is([data-state="done"], [data-state="cancelled"])::after { content: ""; position: absolute; inset: 10%; background: var(--fx-bg-surface); mask: center / contain no-repeat; }
  .fx-flow[data-state="done"] { --_c: var(--fx-bg-brand-solid); background: var(--_c); }
  .fx-flow[data-state="done"]::after { background: var(--fx-text-on-brand); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 6.2 5 8.5l4.5-5' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-flow[data-state="cancelled"] { --_c: var(--fx-text-tertiary); background: var(--_c); opacity: 0.6; }
  .fx-flow[data-state="cancelled"]::after { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3.5 3.5l5 5M8.5 3.5l-5 5' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E"); }
  .fx-flow[data-size="lg"] { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
}

/* focus */
@layer fx.components {
  /* Fokus halqasi oilasi (4-toʻlqin 4.10): tashqi (standart), ichki (qirqiladigan konteyner, jadval katagi) va ikki qavatli «halo» —
     rangli yoki qorongʻi fonda ham koʻrinadi (ichida yuza rangi, tashqarida fokus rangi). Token taklifi: --fx-focus-offset|inset|halo. */
  :root, [data-fx-scheme], [data-fx-theme] {
    --fx-focus-offset: var(--fx-border-width-focus);
    --fx-focus-inset: calc(var(--fx-border-width-focus) * -1);
    --fx-focus-halo: 0 0 0 var(--fx-border-width-focus) var(--fx-bg-surface);
  }
  /* Bitta element: class="fx-focus-ring" [data-ring] */
  .fx-focus-ring:focus-visible,
  .fx-focus-scope :focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-focus-offset); }
  .fx-focus-ring[data-ring="inset"]:focus-visible,
  .fx-focus-scope[data-ring="inset"] :focus-visible { outline-offset: var(--fx-focus-inset); }
  .fx-focus-ring[data-ring="halo"]:focus-visible,
  .fx-focus-scope[data-ring="halo"] :focus-visible { box-shadow: var(--fx-focus-halo); }
  /* Rangli fon ustida (brend banner, rels): halqa matn rangida — fon qanday boʻlmasin koʻrinadi */
  .fx-focus-ring[data-ring="contrast"]:focus-visible,
  .fx-focus-scope[data-ring="contrast"] :focus-visible { outline-color: currentColor; box-shadow: var(--fx-focus-halo); }

  /* Holat qatlami (4.17): interaktiv yuzada bitta ::after qoplama — hover 8 %, fokus 10 %, bosish 10 %, sudrash 16 % (M3).
     Rang — matn rangi (currentColor), shuning uchun har mavzu va har fonda oʻzi toʻgʻri tus oladi; rangni qoʻlda tanlash shart emas.
     Token taklifi: --fx-state-hover|focus|press|drag. */
  :root {
    --fx-state-hover: 8%;
    --fx-state-focus: 10%;
    --fx-state-press: 10%;
    --fx-state-drag: 16%;
  }
  .fx-state { position: relative; isolation: isolate; }
  .fx-state:not([aria-busy="true"])::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background: currentColor;
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-state:hover::after { opacity: var(--fx-state-hover); }
  .fx-state:focus-visible::after { opacity: var(--fx-state-focus); }
  .fx-state:active::after { opacity: var(--fx-state-press); }
  .fx-state:is([data-dragging], [aria-grabbed="true"])::after { opacity: var(--fx-state-drag); }
  .fx-state[data-state-layer="selected"]::after,
  .fx-state[aria-selected="true"]::after,
  .fx-state[aria-current]:not([aria-current="false"])::after { opacity: var(--fx-state-focus); }
  .fx-state:is(:disabled, [aria-disabled="true"])::after { opacity: 0; }
  .fx-state[data-state-layer="brand"]::after { background: var(--fx-text-brand); }
  @media (forced-colors: active) { .fx-state::after { display: none; } }

  /* Yuqori kontrast (4.15): prefers-contrast: more yoki data-fx-contrast="more" — chegaralar toʻqroq, xira matn toʻqlashadi,
     fokus halqasi qalinlashadi. data-fx-contrast="normal" — tizim sozlamasini bekor qiladi. Rang mavzudan (neytral shkala) olinadi. */
  [data-fx-contrast="more"] {
    --fx-text-secondary: light-dark(var(--fx-color-neutral-800), var(--fx-color-neutral-200));
    --fx-text-tertiary: light-dark(var(--fx-color-neutral-700), var(--fx-color-neutral-300));
    --fx-border-color-default: light-dark(var(--fx-color-neutral-500), var(--fx-color-neutral-500));
    --fx-border-color-strong: light-dark(var(--fx-color-neutral-700), var(--fx-color-neutral-300));
    --fx-border-color-surface: color-mix(in oklab, var(--fx-border-color-default) calc(max(var(--fx-knob-outline), 0.5) * 100%), transparent);
    --fx-border-color-field: var(--fx-border-color-strong);
    --fx-border-width-focus: calc(var(--fx-border-width-default) * 3);
  }
  @media (prefers-contrast: more) {
    :root:not([data-fx-contrast="normal"]) {
      --fx-text-secondary: light-dark(var(--fx-color-neutral-800), var(--fx-color-neutral-200));
      --fx-text-tertiary: light-dark(var(--fx-color-neutral-700), var(--fx-color-neutral-300));
      --fx-border-color-default: light-dark(var(--fx-color-neutral-500), var(--fx-color-neutral-500));
      --fx-border-color-strong: light-dark(var(--fx-color-neutral-700), var(--fx-color-neutral-300));
      --fx-border-color-surface: color-mix(in oklab, var(--fx-border-color-default) calc(max(var(--fx-knob-outline), 0.5) * 100%), transparent);
      --fx-border-color-field: var(--fx-border-color-strong);
      --fx-border-width-focus: calc(var(--fx-border-width-default) * 3);
    }
  }
  /* Holat faqat rangga tayanmasin: kontrast rejimida havolalar doim tagiga chiziladi */
  [data-fx-contrast="more"] :is(a, .fx-link):not(.fx-btn, [role="tab"], [role="menuitem"]) { text-decoration-line: underline; }
  @media (prefers-contrast: more) {
    :root:not([data-fx-contrast="normal"]) :is(a, .fx-link):not(.fx-btn, [role="tab"], [role="menuitem"]) { text-decoration-line: underline; }
  }
}

/* focuscards */
@layer fx.components {
  /* Fokusli kartalar (4.60, Aceternity «Focus Cards»): toʻrda bitta karta ustiga borilsa (yoki klaviatura fokusida) qolganlari
     xiralashadi va biroz kichrayadi — koʻz bitta kartaga tushadi. Sarlavha karta ostidan chiqadi; hover yoʻq qurilmada sarlavha doim koʻrinadi.
     Faqat CSS (:has). Harakat kamaytirilsa — xiralik qoladi (holat), oʻtish darhol. */
  .fx-focuscards {
    --_min: calc(var(--fx-space-12) * 5);
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_min)), 1fr));
    gap: var(--fx-space-4);
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .fx-focuscards[data-size="sm"] { --_min: calc(var(--fx-space-12) * 4); }
  .fx-focuscards[data-size="lg"] { --_min: calc(var(--fx-space-12) * 7); }
  .fx-focuscards__item {
    position: relative;
    display: block;
    overflow: hidden;
    aspect-ratio: 4 / 5;
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-muted);
    color: var(--fx-bg-static-light);
    text-decoration: none;
    transition: filter var(--fx-motion-slow) var(--fx-ease-standard), opacity var(--fx-motion-slow) var(--fx-ease-standard), scale var(--fx-motion-slow) var(--fx-ease-emphasized);
  }
  .fx-focuscards[data-ratio="wide"] .fx-focuscards__item { aspect-ratio: 4 / 3; }
  .fx-focuscards__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-focuscards__media { position: absolute; inset: 0; inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-focuscards__body {
    position: absolute;
    inset-inline: 0;
    inset-block-end: 0;
    display: grid;
    gap: calc(var(--fx-space-1) / 2);
    padding: var(--fx-space-10) var(--fx-space-4) var(--fx-space-4);
    background: linear-gradient(to top, color-mix(in oklab, var(--fx-bg-overlay) 72%, transparent), transparent);
    opacity: 0;
    translate: 0 var(--fx-motion-shift-md);
    transition: opacity var(--fx-motion-base) var(--fx-ease-standard), translate var(--fx-motion-slow) var(--fx-ease-emphasized);
  }
  .fx-focuscards__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); }
  .fx-focuscards__meta { margin: 0; font-size: var(--fx-font-size-sm); opacity: 0.85; }
  /* sarlavha: hover/fokusda; hover yoʻq qurilmada va data-caption="always" — doim */
  .fx-focuscards__item:is(:hover, :focus-visible, :focus-within) .fx-focuscards__body,
  .fx-focuscards[data-caption="always"] .fx-focuscards__body { opacity: 1; translate: 0 0; }
  @media (hover: none) { .fx-focuscards__body { opacity: 1; translate: 0 0; } }
  /* qolganlari xiralashadi: kursor (aniq koʻrsatkich) yoki klaviatura fokusi */
  @media (hover: hover) and (pointer: fine) {
    .fx-focuscards:has(.fx-focuscards__item:hover) .fx-focuscards__item:not(:hover) { filter: blur(var(--fx-space-1)); opacity: 0.6; scale: calc(var(--fx-motion-press) + (1 - var(--fx-motion-press)) / 3); }
  }
  .fx-focuscards:has(.fx-focuscards__item:focus-visible) .fx-focuscards__item:not(:focus-visible) { filter: blur(var(--fx-space-1)); opacity: 0.6; scale: calc(var(--fx-motion-press) + (1 - var(--fx-motion-press)) / 3); }
  @media (forced-colors: active) { .fx-focuscards__body { opacity: 1; translate: 0 0; background: Canvas; color: CanvasText; } }
}

/* format */
@layer fx.components {
  /* Formatlangan qiymat (4-toʻlqin 4.23): matnni xulq (data-fx-format → fxFormat) yozadi. Raqamlar jadval enida (tabular) —
     ustunda tekis turadi; birlik raqamdan uzilmaydi (nowrap). Sana va nisbiy vaqt — oddiy raqamlar, xira ohangda. */
  .fx-format { white-space: nowrap; }
  .fx-format:is([data-type="number"], [data-type="compact"], [data-type="currency"], [data-type="percent"], [data-type="bytes"], [data-type="unit"]),
  .fx-format:not([data-type]) { font-variant-numeric: tabular-nums; }
  .fx-format:is([data-type="date"], [data-type="time"], [data-type="datetime"]) { font-variant-numeric: tabular-nums; }
  .fx-format[data-type="relative"] { color: var(--fx-text-tertiary); }
  .fx-format[data-type="relative"][title] { text-decoration: underline dotted; text-decoration-color: var(--fx-border-color-strong); text-underline-offset: 0.2em; cursor: help; }
  /* Belgi bilan (+/−) — rang yolgʻiz emas, «+» va «−» belgisi baribir yoziladi */
  .fx-format[data-sign][data-trend="up"] { color: var(--fx-fg-success); }
  .fx-format[data-sign][data-trend="down"] { color: var(--fx-fg-error); }
  .fx-format[data-weight="bold"] { font-weight: var(--fx-font-weight-bold); }
}

/* gallery */
@layer fx.components {
  /* Rasmlar toʻri: standart — kenglikka qarab avto ustunlar; data-cols — qotirilgan; data-variant="mosaic" — birinchi rasm katta.
     Element — havola (katta rasmga) yoki tugma; lightbox bilan data-fx-lightbox-target orqali ulanadi. */
  .fx-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(calc(var(--fx-space-12) * 3), 1fr)); gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-gallery[data-cols="2"] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fx-gallery[data-cols="3"] { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .fx-gallery[data-cols="4"] { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .fx-gallery__item { position: relative; display: block; inline-size: 100%; aspect-ratio: 1 / 1; padding: 0; border: 0; overflow: hidden; border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); color: inherit; cursor: zoom-in; }
  .fx-gallery[data-ratio="4/3"] .fx-gallery__item { aspect-ratio: 4 / 3; }
  .fx-gallery[data-ratio="16/9"] .fx-gallery__item { aspect-ratio: 16 / 9; }
  .fx-gallery__item > img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; transition: scale var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-gallery__item:hover > img { scale: 1.04; }
  .fx-gallery__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-gallery[data-variant="mosaic"] > :first-child { grid-column: span 2; grid-row: span 2; }
  .fx-gallery[data-variant="mosaic"] > :first-child .fx-gallery__item { block-size: 100%; aspect-ratio: auto; }
  /* «+5» — qolgan rasmlar soni (son yozuvda, rangga tayanmaydi) */
  .fx-gallery__item[data-more]::after { content: "+" attr(data-more); position: absolute; inset: 0; display: grid; place-items: center; background: color-mix(in oklab, var(--fx-bg-overlay) 62%, transparent); color: var(--fx-text-on-brand); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); }
}

/* gantt */
@layer fx.components {
  /* Gantt / yo'l xaritasi (#146): chapda nomlar ustuni (qotadi), o'ngda kunlar o'qi — oy va kun (yoki hafta) sarlavhasi (qotadi), dam olish kunlari soyasi,
     «bugun» chizig'i, plashkalar (ichida bajarilgan ulush), bosqich (romb), guruh xulosasi, bog'liqlik o'qlari (SVG), kechikkan plashka (yozuvli bayroqcha).
     Sana — data-start/data-end (ISO, oxirgi kun ham kiradi); xulq joylashtiradi. Plashka — tugma: fokus va hover'da maslahat (tooltip). */
  .fx-gantt {
    --_day: var(--fx-space-8);
    --_names: calc(var(--fx-space-12) * 5);
    --_row: var(--fx-control-h-md);
    --_days: 28;
    --fx-gantt-height: none;
    position: relative;
    overflow: auto;
    max-block-size: var(--fx-gantt-height);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
  }
  .fx-gantt[data-scale="week"] { --_day: calc(var(--fx-space-1) * 3); }
  .fx-gantt__inner { position: relative; inline-size: calc(var(--_names) + var(--_days) * var(--_day)); min-inline-size: 100%; }
  .fx-gantt__head, .fx-gantt__row { display: grid; grid-template-columns: var(--_names) calc(var(--_days) * var(--_day)); }
  .fx-gantt__head { position: sticky; inset-block-start: 0; z-index: 5; background: var(--fx-bg-surface); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-gantt__corner, .fx-gantt__name { position: sticky; inset-inline-start: 0; z-index: 4; display: flex; align-items: center; gap: var(--fx-space-2); min-inline-size: 0; padding-inline: var(--fx-space-3); background: var(--fx-bg-surface); border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-gantt__corner { align-items: flex-end; padding-block: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-gantt__name { z-index: 3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-gantt__row { position: relative; z-index: 1; min-block-size: var(--_row); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-gantt__row:last-child { border-block-end: 0; }
  .fx-gantt__row[data-group] .fx-gantt__name { font-weight: var(--fx-font-weight-semibold); }
  .fx-gantt__row:not([data-group]) .fx-gantt__name { padding-inline-start: var(--fx-space-6); }
  .fx-gantt__count { margin-inline-start: auto; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); }
  /* Sarlavha: oy qatori + kun (yoki hafta) qatori */
  .fx-gantt__scale { display: grid; }
  .fx-gantt__months, .fx-gantt__days { display: grid; grid-template-columns: repeat(var(--_days), var(--_day)); }
  .fx-gantt__mo { padding: var(--fx-space-1) var(--fx-space-2); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); white-space: nowrap; overflow: hidden; }
  .fx-gantt__mo:first-child { border-inline-start: 0; }
  .fx-gantt__dy, .fx-gantt__wk { padding-block: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; text-align: center; white-space: nowrap; overflow: hidden; }
  .fx-gantt__wk { padding-inline: var(--fx-space-1); text-align: start; border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-gantt__dy[data-we] { color: var(--fx-text-disabled); }
  .fx-gantt__dy[data-today] { color: var(--fx-text-on-brand); background: var(--fx-bg-brand-solid); border-radius: var(--fx-radius-badge); font-weight: var(--fx-font-weight-semibold); }
  /* Orqa qatlam: dam olish kunlari va «bugun» chizig'i */
  .fx-gantt__bg { position: absolute; inset-block: 0; inset-inline-start: var(--_names); inline-size: calc(var(--_days) * var(--_day)); z-index: 0; pointer-events: none; }
  .fx-gantt__we { position: absolute; inset-block: 0; inset-inline-start: calc(var(--s) * var(--_day)); inline-size: calc(var(--l) * var(--_day)); background: var(--fx-bg-subtle); }
  .fx-gantt__today { position: absolute; inset-block: 0; inset-inline-start: calc((var(--s) + 0.5) * var(--_day)); inline-size: var(--fx-border-width-focus); translate: -50% 0; background: var(--fx-bg-error-solid); z-index: 2; }
  .fx-gantt__today::before { content: attr(data-label); position: absolute; inset-block-start: var(--fx-space-12); inset-inline-start: 50%; translate: -50% 0; padding: 0 var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-error-solid); color: var(--fx-text-on-error); font-size: var(--fx-font-size-xs); white-space: nowrap; }
  .fx-gantt__track { position: relative; min-inline-size: 0; }
  /* Plashka: ichida bajarilgan ulush (--p, %) */
  .fx-gantt__bar {
    --_c: var(--fx-viz-brand);
    position: absolute;
    inset-block: var(--fx-space-2);
    inset-inline-start: calc(var(--s) * var(--_day));
    inline-size: calc(var(--l) * var(--_day) - var(--fx-border-width-default));
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--_c);
    border-radius: var(--fx-radius-badge);
    background: color-mix(in oklab, var(--_c) 22%, var(--fx-bg-surface));
    cursor: pointer;
    transition: scale var(--fx-motion-instant) var(--fx-ease-standard), filter var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-gantt__bar:hover { filter: brightness(0.96); }
  .fx-gantt__bar:active { scale: var(--fx-motion-press); }
  .fx-gantt__fill { position: absolute; inset-block: 0; inset-inline-start: 0; inline-size: calc(var(--p, 0) * 1%); background: var(--_c); }
  .fx-gantt__bar[data-tone="blue"] { --_c: var(--fx-bg-category-blue); }
  .fx-gantt__bar[data-tone="green"] { --_c: var(--fx-bg-category-green); }
  .fx-gantt__bar[data-tone="coral"] { --_c: var(--fx-bg-category-coral); }
  .fx-gantt__bar[data-tone="purple"] { --_c: var(--fx-bg-category-purple); }
  .fx-gantt__bar[data-tone="yellow"] { --_c: var(--fx-bg-category-yellow); }
  /* Kechikkan: qalin xavf chegarasi + «Kechikdi» yozuvi (rangdan tashqari) */
  .fx-gantt__bar[data-late] { border: var(--fx-border-width-focus) solid var(--fx-border-color-error); }
  .fx-gantt__bar[data-late] .fx-gantt__fill { background: var(--fx-bg-error-solid); }
  .fx-gantt__flag { position: absolute; inset-block: var(--fx-space-2); inset-inline-start: calc((var(--s) + var(--l)) * var(--_day) + var(--fx-space-1)); display: flex; align-items: center; padding-inline: var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-error-subtle); color: var(--fx-text-error); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); white-space: nowrap; pointer-events: none; }
  /* Bosqich: romb; bajarilgani to'la, bajarilmagani — bo'sh */
  .fx-gantt__ms {
    position: absolute;
    inset-block-start: 50%;
    inset-inline-start: calc((var(--s) + 0.5) * var(--_day));
    box-sizing: border-box;
    inline-size: var(--fx-size-icon-sm);
    block-size: var(--fx-size-icon-sm);
    margin: 0;
    padding: 0;
    translate: -50% -50%;
    rotate: 45deg;
    border: var(--fx-border-width-focus) solid var(--fx-viz-brand);
    border-radius: var(--fx-radius-badge);
    background: var(--fx-bg-surface);
    cursor: pointer;
    transition: scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-gantt__ms[data-done] { background: var(--fx-viz-brand); }
  .fx-gantt__ms:active { scale: var(--fx-motion-press); }
  /* Guruh xulosasi: ingichka chiziq */
  .fx-gantt__sum { position: absolute; inset-block-start: 50%; inset-inline-start: calc(var(--s) * var(--_day)); inline-size: calc(var(--l) * var(--_day)); block-size: var(--fx-space-2); translate: 0 -50%; border-radius: var(--fx-radius-badge); background: var(--fx-viz-ink); }
  .fx-gantt :is(.fx-gantt__bar, .fx-gantt__ms):focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); z-index: 2; }
  /* Bog'liqlik o'qlari */
  .fx-gantt__dep { position: absolute; inset: 0; z-index: 2; inline-size: 100%; block-size: 100%; overflow: visible; color: var(--fx-text-tertiary); pointer-events: none; }
  .fx-gantt__dep path { fill: none; stroke: currentColor; stroke-width: var(--fx-border-width-default); }
  .fx-gantt__dep path[data-conflict] { stroke: var(--fx-border-color-error); stroke-dasharray: var(--fx-space-1); }
  .fx-gantt__dep marker path { fill: currentColor; stroke: none; }
  /* Maslahat */
  .fx-gantt__tip { position: absolute; z-index: 6; display: grid; gap: calc(var(--fx-space-1) / 2); max-inline-size: calc(var(--fx-space-12) * 5); padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-control); background: var(--fx-text-primary); color: var(--fx-bg-surface); box-shadow: var(--fx-shadow-md); font-size: var(--fx-font-size-xs); pointer-events: none; }
  .fx-gantt__tip[hidden] { display: none; }
  .fx-gantt__tip strong { font-weight: var(--fx-font-weight-semibold); }
}

/* globe */
@layer fx.components {
  /* Globus va nuqtali xarita (4.79): quruqlik nuqtalardan, shaharlar — marker, bogʻlanishlar — yoy (katta aylana boʻylab).
     Chizish — foxui.js (data-fx-globe) canvas’da; maʼlumot — ichidagi roʻyxat (.fx-globe__places, data-lat/data-lon/data-to) matn sifatida qoladi.
     data-view="map" — tekis nuqtali xarita (2:1, aylanmaydi). Ranglar: --_dot (quruqlik), --_mark (shahar), --_arc (yoy), --_rim (globus chegarasi). */
  .fx-globe {
    --_dot: color-mix(in oklab, var(--fx-text-primary) 55%, transparent);
    --_mark: var(--fx-bg-brand-solid);
    --_arc: var(--fx-bg-brand-solid);
    --_rim: var(--fx-border-color-default);
    display: grid;
    gap: var(--fx-space-3);
    margin: 0;
    min-inline-size: 0;
  }
  .fx-globe__stage { position: relative; inline-size: min(100%, calc(var(--fx-space-12) * 9)); aspect-ratio: 1; justify-self: center; cursor: grab; touch-action: none; }
  .fx-globe__stage:active { cursor: grabbing; }
  .fx-globe__canvas { display: block; inline-size: 100%; block-size: 100%; border-radius: var(--fx-radius-circle); }
  .fx-globe__canvas:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-space-1); }
  .fx-globe[data-view="map"] .fx-globe__stage { inline-size: 100%; aspect-ratio: 2 / 1; cursor: default; touch-action: auto; }
  .fx-globe[data-view="map"] .fx-globe__canvas { border-radius: var(--fx-radius-control); }
  .fx-globe[data-tone="accent"] { --_arc: var(--fx-viz-accent); }
  .fx-globe__places { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-1) var(--fx-space-4); margin: 0; padding: 0; list-style: none; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-globe__places li { display: inline-flex; align-items: center; gap: var(--fx-space-2); }
  .fx-globe__places li::before { content: ""; inline-size: var(--fx-space-2); aspect-ratio: 1; border-radius: var(--fx-radius-circle); background: var(--_mark); }
  .fx-globe[data-list="hidden"] .fx-globe__places { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .fx-globe > figcaption { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-align: center; }
  @media (forced-colors: active) { .fx-globe { --_dot: CanvasText; --_mark: Highlight; --_arc: Highlight; --_rim: CanvasText; } }
}

/* gradientpicker */
@layer fx.components {
  /* Gradient tanlagich (4.107): koʻrinish, toʻxtash nuqtalari (sudrash, ← →, Delete), tanlangan nuqta rangi va oʻrni, chiziqli/radial, burchak (knob).
     Foydalanuvchi tanlagan ranglar — maʼlumot, token emas: xulq --_g (gradient) va har nuqtaga --_c yozadi (colorpicker kabi). */
  .fx-gradientpicker { --_g: var(--fx-bg-muted); display: grid; gap: var(--fx-space-3); inline-size: min(100%, calc(var(--fx-popover-width) * 1.25)); }
  .fx-gradientpicker__preview { block-size: calc(var(--fx-space-12) * 2.5); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--_g); }
  /* Nuqtalar yoʻlagi: chiziqli koʻrinish (burchaksiz), ustida tutqichlar */
  .fx-gradientpicker__track { --_k: var(--fx-size-checkbox); position: relative; block-size: var(--fx-space-6); margin-inline: calc(var(--_k) / 2); border-radius: var(--fx-radius-badge); background: var(--_line, var(--fx-bg-muted)); cursor: copy; touch-action: none; }
  .fx-gradientpicker__stop {
    --_c: var(--fx-bg-muted);
    position: absolute;
    inset-block-start: 50%;
    inset-inline-start: calc(var(--_pos, 0) * 1%);
    inline-size: var(--_k);
    block-size: calc(var(--_k) * 1.4);
    translate: -50% -50%;
    padding: 0;
    border: var(--fx-border-width-focus) solid var(--fx-bg-surface);
    border-radius: var(--fx-radius-badge);
    background: var(--_c);
    box-shadow: var(--fx-shadow-md);
    cursor: grab;
    transition: scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-gradientpicker__stop:active { cursor: grabbing; scale: var(--fx-motion-press); }
  /* Tanlangan nuqta: qalin qora halqa + pastda uchburchak — rangdan qatʼi nazar koʻrinadi */
  .fx-gradientpicker__stop[aria-selected="true"] { outline: var(--fx-border-width-focus) solid var(--fx-text-primary); z-index: 1; }
  .fx-gradientpicker__stop[aria-selected="true"]::after { content: ""; position: absolute; inset-block-start: 100%; inset-inline-start: 50%; translate: -50% var(--fx-space-1); border: var(--fx-space-1) solid transparent; border-block-start-color: var(--fx-text-primary); }
  .fx-gradientpicker__stop:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-gradientpicker__row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-3); }
  .fx-gradientpicker__color { inline-size: var(--fx-control-h-md); block-size: var(--fx-control-h-md); padding: calc(var(--fx-space-1) / 2); border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-control); background: var(--fx-bg-field); cursor: pointer; }
  .fx-gradientpicker__color:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-gradientpicker__pos { inline-size: calc(var(--fx-space-12) * 1.75); }
  .fx-gradientpicker__label { display: grid; gap: calc(var(--fx-space-1) / 2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-gradientpicker__angle[hidden] { display: none; }
  .fx-gradientpicker__css { inline-size: 100%; font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); }
  .fx-gradientpicker__hint { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
}

/* gridlist */
@layer fx.components {
  /* Kartalar toʻri (4.138, GridList): fayl menejeri, galereya, shablonlar — kartalarni klaviatura bilan ← ↑ → ↓ yurish (joylashuv boʻyicha),
     tanlash (Boʻshliq, Shift+strelka, Ctrl+A) va karta amallari (Enter — amallarga kiradi, Esc — qaytadi). Bitta Tab bekati.
     Tanlangan karta: brend chegara + burchakdagi ✓ doira (rangdan tashqari shakl); fokus — alohida halqa. Xulq foxui.js → gridlist. */
  .fx-gridlist {
    --_min: calc(var(--fx-space-12) * 4);
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_min)), 1fr));
    gap: var(--fx-space-3);
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .fx-gridlist[data-size="sm"] { --_min: calc(var(--fx-space-12) * 3); gap: var(--fx-space-2); }
  .fx-gridlist[data-size="lg"] { --_min: calc(var(--fx-space-12) * 5.5); }
  .fx-gridlist__item {
    position: relative;
    display: grid;
    align-content: start;
    gap: var(--fx-space-2);
    min-inline-size: 0;
    padding: var(--fx-space-2);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    cursor: default;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), box-shadow var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-gridlist__item:hover { border-color: var(--fx-border-color-strong); box-shadow: var(--fx-shadow-sm); }
  .fx-gridlist__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-gridlist__item:active { scale: var(--fx-motion-press); }
  .fx-gridlist__item[aria-selected="true"] { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); }
  .fx-gridlist__item[aria-disabled="true"] { opacity: 0.55; cursor: not-allowed; }
  /* Tanlash belgisi: tanlash rejimida doim koʻrinadi (boʻsh doira), tanlanganda — toʻldirilgan ✓ */
  .fx-gridlist__check { position: absolute; inset-block-start: var(--fx-space-3); inset-inline-start: var(--fx-space-3); z-index: 1; display: grid; place-items: center; inline-size: var(--fx-size-checkbox); block-size: var(--fx-size-checkbox); box-sizing: border-box; border: var(--fx-border-width-focus) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-circle); background: var(--fx-bg-surface); color: var(--fx-text-on-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-bold); pointer-events: none; }
  .fx-gridlist__item[aria-selected="true"] .fx-gridlist__check { border-color: transparent; background: var(--fx-bg-brand-solid); }
  .fx-gridlist__item[aria-selected="true"] .fx-gridlist__check::before { content: "✓"; }
  .fx-gridlist[data-select="none"] .fx-gridlist__check { display: none; }
  .fx-gridlist__media { display: grid; place-items: center; aspect-ratio: 4 / 3; overflow: hidden; border-radius: calc(var(--fx-radius-surface) - var(--fx-space-1)); background: var(--fx-bg-muted); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.04em; text-transform: uppercase; }
  .fx-gridlist__media > img { inline-size: 100%; block-size: 100%; object-fit: cover; }
  .fx-gridlist__body { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; padding-inline: var(--fx-space-1); }
  .fx-gridlist__title { overflow: hidden; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); text-overflow: ellipsis; white-space: nowrap; }
  .fx-gridlist__meta { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-gridlist__actions { display: flex; gap: var(--fx-space-1); padding-inline: var(--fx-space-1); }
  .fx-gridlist__actions > :focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-gridlist__status { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-gridlist__status:empty { display: none; }
  @media (forced-colors: active) { .fx-gridlist__item[aria-selected="true"] { outline: var(--fx-border-width-focus) solid Highlight; } }
}

/* heading */
@layer fx.components {
  /* Sarlavha uslubi: vizual daraja (data-size) semantik tegdan (h1–h6) mustaqil: <h2 class="fx-heading" data-size="h4">. */
  .fx-heading { margin: 0; color: var(--fx-text-primary); font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); line-height: 1.25; text-wrap: balance; }
  .fx-heading[data-size="display"] { font-size: var(--fx-font-size-display-md); line-height: 1.1; }
  .fx-heading[data-size="h1"] { font-size: var(--fx-font-size-display-sm); line-height: 1.15; }
  .fx-heading[data-size="h2"] { font-size: var(--fx-font-size-xl); }
  .fx-heading[data-size="h3"] { font-size: var(--fx-font-size-lg); line-height: 1.3; }
  .fx-heading[data-size="h4"] { font-size: var(--fx-font-size-md); line-height: 1.4; }
  .fx-heading[data-tone="secondary"] { color: var(--fx-text-secondary); }
  .fx-heading[data-tone="brand"] { color: var(--fx-text-brand); }
  .fx-heading[data-weight="regular"] { font-weight: var(--fx-font-weight-regular); }
  .fx-heading[data-weight="medium"] { font-weight: var(--fx-font-weight-medium); }
  .fx-heading[data-truncate] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-wrap: nowrap; }
  .fx-heading[data-clamp] { display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; }
  .fx-heading[data-clamp="2"] { -webkit-line-clamp: 2; line-clamp: 2; }
  .fx-heading[data-clamp="3"] { -webkit-line-clamp: 3; line-clamp: 3; }
}

/* heatmap */
@layer fx.components {
  /* Faollik xaritasi (GitHub uslubi): har kun — bitta katak, ustunlar — haftalar (Dushanbadan), 5 daraja (0–4) viz-brand soyalari bilan.
     Daraja rangdan tashqari ham aytiladi: har katak aria-label + title («17-oktyabr: 5 ta faollik»), pastda Kam…Koʻp shkalasi. */
  .fx-heatmap { --_cell: var(--fx-space-3); --_gap: calc(var(--fx-space-1) / 2); display: grid; gap: var(--fx-space-2); inline-size: max-content; max-inline-size: 100%; overflow-x: auto; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-heatmap[data-size="sm"] { --_cell: var(--fx-space-2); }
  .fx-heatmap[data-size="lg"] { --_cell: var(--fx-space-4); }
  .fx-heatmap__plot { display: grid; grid-template-columns: auto 1fr; column-gap: var(--fx-space-2); row-gap: var(--_gap); align-items: start; }
  .fx-heatmap__months { display: grid; grid-auto-flow: column; grid-auto-columns: var(--_cell); column-gap: var(--_gap); block-size: calc(var(--fx-font-size-xs) * 1.5); }
  .fx-heatmap__months > span { grid-row: 1; white-space: nowrap; overflow: visible; color: var(--fx-text-tertiary); }
  .fx-heatmap__dows { display: grid; grid-template-rows: repeat(7, var(--_cell)); row-gap: var(--_gap); color: var(--fx-text-tertiary); line-height: var(--_cell); }
  .fx-heatmap__dows > span { block-size: var(--_cell); line-height: var(--_cell); font-size: calc(var(--fx-font-size-xs) * 0.85); white-space: nowrap; overflow: visible; }
  .fx-heatmap__grid { display: grid; grid-template-rows: repeat(7, var(--_cell)); grid-auto-flow: column; grid-auto-columns: var(--_cell); gap: var(--_gap); }
  .fx-heatmap__cell { display: block; box-sizing: border-box; inline-size: var(--_cell); block-size: var(--_cell); border-radius: calc(var(--fx-radius-badge) / 2); background: var(--fx-viz-track); }
  .fx-heatmap__cell[data-level="1"] { background: color-mix(in oklab, var(--fx-viz-brand) 25%, var(--fx-bg-surface)); }
  .fx-heatmap__cell[data-level="2"] { background: color-mix(in oklab, var(--fx-viz-brand) 50%, var(--fx-bg-surface)); }
  .fx-heatmap__cell[data-level="3"] { background: color-mix(in oklab, var(--fx-viz-brand) 75%, var(--fx-bg-surface)); }
  .fx-heatmap__cell[data-level="4"] { background: var(--fx-viz-brand); }
  .fx-heatmap__cell[data-empty] { visibility: hidden; }
  .fx-heatmap__cell:not([data-empty]):hover { outline: var(--fx-border-width-default) solid var(--fx-border-color-strong); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-heatmap__legend { display: flex; align-items: center; justify-content: flex-end; gap: var(--_gap); color: var(--fx-text-tertiary); }
  .fx-heatmap__legend > span:first-child { margin-inline-end: var(--fx-space-1); }
  .fx-heatmap__legend > span:last-child { margin-inline-start: var(--fx-space-1); }
}

/* helpful */
@layer fx.components {
  /* «Foydali boʻldimi?» vidjeti (4.199): hujjat, yordam maqolasi yoki AI javobi ostida. Savol + «Ha / Yoʻq» (aria-pressed, ikon + soʻz),
     tanlovdan keyin forma ochiladi: «Yoʻq» uchun sabab chip’lari (checkbox) va izoh, «Ha» uchun ixtiyoriy izoh; keyin rahmat holati.
     Xulq: foxui.js → helpful. data-variant: bar (standart — chiziq bilan ajratilgan qator) · card (oʻz yuzasi bilan) · inline (ixcham). */
  .fx-helpful { display: grid; gap: var(--fx-space-4); padding-block: var(--fx-space-5); border-block: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-primary); }
  .fx-helpful__ask { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-3) var(--fx-space-6); }
  .fx-helpful__ask[hidden] { display: none; }
  .fx-helpful__question { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-helpful__choices { display: flex; gap: var(--fx-space-2); }
  .fx-helpful__choice {
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-2);
    min-block-size: var(--fx-control-h-md);
    padding: 0 var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    font: inherit;
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-helpful__choice:hover { border-color: var(--fx-border-color-strong); background: var(--fx-bg-subtle); }
  .fx-helpful__choice:active { scale: var(--fx-motion-press); }
  .fx-helpful__choice:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-helpful__choice > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); transition: rotate var(--fx-motion-base) var(--fx-ease-spring), scale var(--fx-motion-base) var(--fx-ease-spring); }
  .fx-helpful__choice[aria-pressed="true"] { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-helpful__choice[aria-pressed="true"] > svg { scale: 1.15; rotate: -8deg; }
  .fx-helpful__form { display: grid; gap: var(--fx-space-4); padding: var(--fx-space-4); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); animation: fx-fade-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-helpful__form[hidden], .fx-helpful__form [hidden] { display: none; }
  .fx-helpful__form:focus { outline: none; }
  .fx-helpful__label { margin: 0; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-helpful__reasons { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); margin: 0; padding: 0; border: 0; }
  .fx-helpful__reasons > legend { margin-block-end: var(--fx-space-2); padding: 0; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  /* sabab — checkbox’li chip (shakl: belgilansa ✓ qoʻshiladi) */
  .fx-helpful__reason { position: relative; display: inline-flex; align-items: center; gap: var(--fx-space-1); min-block-size: var(--fx-control-h-sm); padding: 0 var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-pill); background: var(--fx-bg-surface); font-size: var(--fx-font-size-sm); cursor: pointer; transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-helpful__reason > input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
  .fx-helpful__reason:hover { border-color: var(--fx-border-color-strong); }
  .fx-helpful__reason:has(input:checked) { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-helpful__reason:has(input:checked)::before { content: "✓"; font-weight: var(--fx-font-weight-semibold); }
  .fx-helpful__reason:has(input:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-helpful__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-helpful__note { margin: 0 0 0 auto; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-helpful__thanks { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2) var(--fx-space-3); margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); animation: fx-fade-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-helpful__thanks[hidden] { display: none; }
  .fx-helpful__thanks:focus { outline: none; }
  .fx-helpful__thanks::before { content: "✓"; display: grid; place-items: center; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); border-radius: var(--fx-radius-circle); background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); font-weight: var(--fx-font-weight-semibold); }
  .fx-helpful__thanks > strong { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-helpful__again { padding: 0; border: 0; background: none; color: var(--fx-text-brand); font: inherit; font-size: var(--fx-font-size-sm); text-decoration: underline; text-underline-offset: 0.2em; cursor: pointer; }
  .fx-helpful__again:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-helpful[data-variant="card"] { padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-helpful[data-variant="card"] .fx-helpful__form { background: var(--fx-bg-subtle); }
  .fx-helpful[data-variant="inline"] { padding: 0; border: 0; gap: var(--fx-space-2); }
  .fx-helpful[data-variant="inline"] .fx-helpful__ask { justify-content: flex-start; gap: var(--fx-space-3); }
  .fx-helpful[data-variant="inline"] .fx-helpful__question { color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-regular); }
  .fx-helpful[data-variant="inline"] .fx-helpful__choice { min-block-size: var(--fx-control-h-sm); padding: 0 var(--fx-space-2); }
}

/* hero */
@layer fx.components {
  /* Hero boʻlimi (4.170): eyebrow (yangilik tabletkasi) + katta sarlavha + izoh + 2 tugma + ishonch qatori + media.
     data-layout: center (standart) yoki split (matn chapda, media oʻngda). Orqa fon — ichiga .fx-bg (naqsh + nur) qoʻyiladi.
     Kirish: bloklar pogʻonali koʻtariladi (bir marta); media scroll bilan «tikka turadi» (scroll-driven, qoʻllanmasa — tekis).
     Harakat kamaytirilsa — hammasi darhol, tekis. Sarlavha shrifti — display (shrift kutubxonasidan). */
  .fx-hero {
    --_title: clamp(var(--fx-font-size-display-sm), calc(var(--fx-font-size-display-sm) + 3.6vw), calc(var(--fx-font-size-display-md) * 1.9));
    position: relative;
    isolation: isolate;
    display: grid;
    gap: var(--fx-space-12);
    padding: calc(var(--fx-space-12) * 2) var(--fx-space-6) var(--fx-space-12);
    overflow: clip;
  }
  .fx-hero > .fx-bg { z-index: -1; }
  .fx-hero__content { display: grid; justify-items: center; gap: var(--fx-space-5); inline-size: 100%; max-inline-size: calc(var(--fx-dialog-width) * 1.8); margin-inline: auto; text-align: center; }
  .fx-hero__eyebrow { margin: 0; }
  .fx-hero__title {
    margin: 0;
    font-family: var(--fx-font-family-display);
    font-size-adjust: var(--fx-font-adjust-display);
    font-size: var(--_title);
    font-weight: var(--fx-font-weight-semibold);
    line-height: 1.04;
    letter-spacing: -0.035em;
    text-wrap: balance;
    color: var(--fx-text-primary);
  }
  /* urgʻu soʻz: mavzu ranglaridan gradient (statik) */
  .fx-hero__accent {
    background: linear-gradient(100deg, var(--fx-bg-brand-solid) 10%, color-mix(in oklab, var(--fx-bg-brand-solid) 55%, var(--fx-bg-category-pink)) 55%, color-mix(in oklab, var(--fx-bg-category-coral) 70%, var(--fx-bg-brand-solid)) 95%) text;
    color: transparent;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
  }
  .fx-hero__text { margin: 0; max-inline-size: 62ch; color: var(--fx-text-secondary); font-size: var(--fx-font-size-lg); line-height: 1.55; text-wrap: pretty; }
  .fx-hero__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-3); margin-block-start: var(--fx-space-2); }
  .fx-hero__note { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-1) var(--fx-space-4); margin: 0; padding: 0; list-style: none; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-hero__note > li { display: inline-flex; align-items: center; gap: var(--fx-space-1); }
  .fx-hero__note > li::before { content: ""; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: var(--fx-fg-success); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  /* media: katta skrinshot / jonli UI; ortida yumshoq nur, chetda nozik halqa */
  .fx-hero__media {
    box-sizing: border-box;
    position: relative;
    inline-size: 100%;
    max-inline-size: calc(var(--fx-dialog-width) * 2.5);
    margin-inline: auto;
    padding: var(--fx-space-2);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: calc(var(--fx-radius-overlay) + var(--fx-space-2));
    background: color-mix(in oklab, var(--fx-bg-surface) 60%, transparent);
    box-shadow: var(--fx-shadow-lg);
  }
  .fx-hero__media::before {
    content: "";
    position: absolute;
    inset: 8% 6% -4%;
    z-index: -1;
    border-radius: inherit;
    background: radial-gradient(ellipse at 50% 40%, color-mix(in oklab, var(--fx-bg-brand-solid) 45%, transparent), transparent 70%);
    filter: blur(var(--fx-space-12));
    opacity: 0.7;
  }
  .fx-hero__media > :is(img, video, .fx-hero__screen) { display: block; inline-size: 100%; border-radius: var(--fx-radius-overlay); overflow: hidden; }
  .fx-hero__screen { border: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-page); }
  /* split: matn chapda */
  .fx-hero[data-layout="split"] { grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); align-items: center; gap: var(--fx-space-12); padding-block: calc(var(--fx-space-12) * 1.5); }
  .fx-hero[data-layout="split"] .fx-hero__content { justify-items: start; max-inline-size: none; margin: 0; text-align: start; }
  .fx-hero[data-layout="split"] :is(.fx-hero__actions, .fx-hero__note) { justify-content: flex-start; }
  .fx-hero[data-layout="split"] { --_title: clamp(var(--fx-font-size-display-sm), calc(var(--fx-font-size-display-sm) + 2vw), calc(var(--fx-font-size-display-md) * 1.4)); }
  .fx-hero[data-size="compact"] { padding-block: var(--fx-space-12); --_title: clamp(var(--fx-font-size-xl), calc(var(--fx-font-size-xl) + 2.4vw), var(--fx-font-size-display-md)); }
  /* kirish: pogʻonali koʻtarilish (bir marta, knob bilan — reduced-motion’da 0) */
  .fx-hero__content > * { animation: fx-hero-in calc(var(--fx-motion-slower) * 1.4) var(--fx-ease-emphasized) both; }
  .fx-hero__content > :nth-child(2) { animation-delay: calc(var(--fx-duration-stagger) * 3 * var(--fx-knob-motion)); }
  .fx-hero__content > :nth-child(3) { animation-delay: calc(var(--fx-duration-stagger) * 6 * var(--fx-knob-motion)); }
  .fx-hero__content > :nth-child(4) { animation-delay: calc(var(--fx-duration-stagger) * 9 * var(--fx-knob-motion)); }
  .fx-hero__content > :nth-child(n + 5) { animation-delay: calc(var(--fx-duration-stagger) * 12 * var(--fx-knob-motion)); }
  .fx-hero__media { animation: fx-hero-in calc(var(--fx-motion-slower) * 2) var(--fx-ease-emphasized) calc(var(--fx-duration-stagger) * 14 * var(--fx-knob-motion)) both; }
  @keyframes fx-hero-in { from { opacity: 0; translate: 0 var(--fx-motion-shift-lg); filter: blur(calc(var(--fx-space-1) * var(--fx-knob-motion))); } }
  /* media scroll bilan tikka turadi (Aceternity «container scroll» gʻoyasi) — faqat qoʻllovchi brauzerda */
  @supports (animation-timeline: view()) {
    .fx-hero[data-tilt] .fx-hero__media { animation: fx-hero-tilt linear both; animation-timeline: view(); animation-range: entry 0% cover 45%; transform-origin: 50% 0; }
    @keyframes fx-hero-tilt { from { transform: perspective(calc(var(--fx-space-12) * 30)) rotateX(calc(16deg * var(--fx-knob-motion))) scale(calc(1 - 0.06 * var(--fx-knob-motion))); } }
  }
  @media (max-width: 56em) {
    .fx-hero { padding: var(--fx-space-12) var(--fx-space-4) var(--fx-space-8); gap: var(--fx-space-8); }
    .fx-hero[data-layout="split"] { grid-template-columns: minmax(0, 1fr); }
    .fx-hero__actions > .fx-btn { flex: 1 1 auto; }
  }
  @media (prefers-reduced-motion: reduce) { .fx-hero[data-tilt] .fx-hero__media { animation: none; } }
  @media (forced-colors: active) { .fx-hero__accent { color: CanvasText; background: none; } }
}

/* hovercard */
@layer fx.components {
  /* Hover karta (4.149): ism, havola yoki avatar ustida kechikish bilan chiqadigan profil/oldindan koʻrish kartasi. Native popover="manual";
     xulq (data-fx-hovercard="<id>" nishonda) — sichqoncha va fokusda ochadi, karta ustida turganda yopilmaydi, Esc yopadi.
     Muhim amal faqat shu kartada boʻlmaydi — u qoʻshimcha maʼlumot. */
  .fx-hovercard { position: fixed; inset: auto; inset-inline-start: var(--_x, 0); inset-block-start: var(--_y, 0); inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-popover-width) * 1.1)); margin: 0; padding: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-lg); font-size: var(--fx-font-size-sm); }
  .fx-hovercard { opacity: 0; translate: 0 calc(var(--fx-motion-shift-sm) * -1); transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete, overlay var(--fx-motion-exit-fast) allow-discrete; }
  .fx-hovercard:popover-open { display: grid; gap: var(--fx-space-3); opacity: 1; translate: 0 0; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-hovercard:popover-open { opacity: 0; translate: 0 calc(var(--fx-motion-shift-sm) * -1); } }
  .fx-hovercard[data-side="top"]:popover-open { transform-origin: bottom; }
  .fx-hovercard__head { display: flex; align-items: center; gap: var(--fx-space-3); min-inline-size: 0; }
  .fx-hovercard__title { margin: 0; overflow: hidden; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); text-overflow: ellipsis; white-space: nowrap; }
  .fx-hovercard__sub { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-hovercard__body { margin: 0; color: var(--fx-text-secondary); }
  .fx-hovercard__foot { display: flex; flex-wrap: wrap; gap: var(--fx-space-2) var(--fx-space-4); padding-block-start: var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  [data-fx-hovercard] { cursor: pointer; text-decoration-style: dotted; }
  [data-fx-hovercard][aria-expanded="true"] { text-decoration-style: solid; }
  @media (forced-colors: active) { .fx-hovercard { border-color: CanvasText; } }
}

/* icon */
@layer fx.components {
  /* Ikon oʻrami: <svg class="fx-icon"><use href="#id"/></svg>. Rangi matndan (currentColor); oʻlcham — token yoki matn balandligi (em). */
  .fx-icon { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: currentColor; color: inherit; vertical-align: middle; }
  .fx-icon[data-size="sm"] { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-icon[data-size="lg"] { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-icon[data-size="xl"] { inline-size: calc(var(--fx-size-icon-lg) * 1.5); block-size: calc(var(--fx-size-icon-lg) * 1.5); }
  .fx-icon[data-size="em"] { inline-size: 1.25em; block-size: 1.25em; }
  .fx-icon[data-tone="muted"] { color: var(--fx-text-tertiary); }
  .fx-icon[data-tone="secondary"] { color: var(--fx-text-secondary); }
  .fx-icon[data-tone="brand"] { color: var(--fx-text-brand); }
  .fx-icon[data-tone="info"] { color: var(--fx-fg-info); }
  .fx-icon[data-tone="success"] { color: var(--fx-fg-success); }
  .fx-icon[data-tone="warning"] { color: var(--fx-fg-warning); }
  .fx-icon[data-tone="error"] { color: var(--fx-fg-error); }
  /* Faol holat: kontur oʻrniga toʻldirilgan (sprite’da fill=currentColor boʻlsa ham ishlaydi) */
  .fx-icon[data-filled], .fx-icon.fx-on { fill: currentColor; }
  /* Optik sozlamalar (4-toʻlqin 4.21; M3 Symbols: weight / grade / fill, Fluent Regular / Filled). Hammasi ixtiyoriy — atributsiz ikon oʻzgarmaydi.
     1) Qalinlik — chiziqli (stroke) ikonlar uchun: data-weight light | regular | bold yoki oʻz qiymati --fx-icon-stroke bilan (data-weight="custom").
        Qiymat foizda — viewBox oʻlchamidan qatʼi nazar (24 yoki 256 tor) bir xil koʻrinadi; SVG’dagi stroke-width atributidan ustun.
        Ota blokka data-icon-weight qoʻyilsa — ichidagi hamma ikon (masalan, zich jadvalda ingichka).
     2) Grade — toʻldirilgan (fill, Phosphor) ikonlar uchun: data-grade="high" atrofiga ingichka chiziq qoʻshib qalinlashtiradi (qorongʻi fonda,
        kichik oʻlchamda «yupqa» koʻrinmasin); "low" — chekkasini yuza rangida yeydi (faqat yuza fonida).
     3) Juftlik — data-fill="auto": ichida .fx-icon__line (kontur) va .fx-icon__fill (toʻldirilgan, masalan «bell» / «bell-fill») <use>’lari.
        Tanlangan holatda (ota aria-pressed / aria-selected / aria-current / aria-checked yoki .fx-on) — toʻldirilgani; data-fill="on" — doim.
        Holat rangga emas, shaklga tayanadi. */
  .fx-icon[data-weight="light"], [data-icon-weight="light"] { --fx-icon-stroke: 5.2%; }
  .fx-icon[data-weight="regular"], [data-icon-weight="regular"] { --fx-icon-stroke: 7.3%; }
  .fx-icon[data-weight="bold"], [data-icon-weight="bold"] { --fx-icon-stroke: 10.4%; }
  .fx-icon[data-weight], [data-icon-weight] .fx-icon { stroke-width: var(--fx-icon-stroke, 7.3%); }
  .fx-icon[data-weight] :is(path, line, polyline, circle, rect, ellipse, polygon),
  [data-icon-weight] .fx-icon :is(path, line, polyline, circle, rect, ellipse, polygon) { stroke-width: var(--fx-icon-stroke, 7.3%); }
  .fx-icon[data-grade="high"] { stroke: currentColor; stroke-width: 2.5%; stroke-linejoin: round; }
  .fx-icon[data-grade="low"] { stroke: var(--fx-bg-surface); stroke-width: 2%; stroke-linejoin: round; }
  .fx-icon[data-fill="auto"] .fx-icon__fill, .fx-icon[data-fill="on"] .fx-icon__line { display: none; }
  .fx-icon[data-fill="on"] .fx-icon__fill,
  :is([aria-pressed="true"], [aria-selected="true"], [aria-current]:not([aria-current="false"]), [aria-checked="true"], .fx-on) .fx-icon[data-fill="auto"] .fx-icon__fill,
  .fx-icon[data-fill="auto"].fx-on .fx-icon__fill { display: inline; }
  :is([aria-pressed="true"], [aria-selected="true"], [aria-current]:not([aria-current="false"]), [aria-checked="true"], .fx-on) .fx-icon[data-fill="auto"] .fx-icon__line,
  .fx-icon[data-fill="auto"].fx-on .fx-icon__line { display: none; }
  @media (forced-colors: active) { .fx-icon[data-grade="low"] { stroke: none; } }
}

/* image */
@layer fx.components {
  /* Rasm: nisbat (CLS yoʻq), xira joy egasi (blur) va yuklanmasa zaxira holat; imzo (figcaption).
     Xulq (behaviors/image.js) ildizga data-state="loading|loaded|error" qoʻyadi; JS yoʻq boʻlsa rasm oddiy koʻrinadi.
     Xira joy: ildizda --fx-image-blur: url(kichik-rasm) — rasm yuklanguncha fon boʻlib turadi. */
  .fx-image { --fx-image-blur: none; display: grid; gap: var(--fx-space-2); margin: 0; }
  .fx-image__frame { position: relative; overflow: hidden; border-radius: var(--fx-radius-surface); background-color: var(--fx-bg-muted); background-image: var(--fx-image-blur); background-size: cover; background-position: center; }
  .fx-image__frame > img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; transition: filter var(--fx-motion-slow) var(--fx-ease-standard), scale var(--fx-motion-slow) var(--fx-ease-standard), opacity var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-image[data-ratio="1/1"] .fx-image__frame { aspect-ratio: 1 / 1; }
  .fx-image[data-ratio="4/3"] .fx-image__frame { aspect-ratio: 4 / 3; }
  .fx-image[data-ratio="3/2"] .fx-image__frame { aspect-ratio: 3 / 2; }
  .fx-image[data-ratio="16/9"] .fx-image__frame { aspect-ratio: 16 / 9; }
  .fx-image[data-ratio="3/4"] .fx-image__frame { aspect-ratio: 3 / 4; }
  .fx-image[data-ratio] .fx-image__frame > img { position: absolute; inset: 0; }
  .fx-image[data-fit="contain"] .fx-image__frame > img { object-fit: contain; }
  .fx-image[data-state="loading"] .fx-image__frame > img { opacity: 0; }
  .fx-image[data-placeholder="blur"][data-state="loading"] .fx-image__frame { filter: blur(calc(var(--fx-space-1) * 2)); scale: 1.04; }
  .fx-image[data-placeholder="blur"][data-state="loaded"] .fx-image__frame { transition: filter var(--fx-motion-slow) var(--fx-ease-standard), scale var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-image__fallback { display: none; position: absolute; inset: 0; place-content: center; justify-items: center; gap: var(--fx-space-2); padding: var(--fx-space-4); text-align: center; background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-image__fallback::before { content: ""; inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); background: currentColor; mask: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='4' width='18' height='16' rx='2' fill='none' stroke='black' stroke-width='1.6'/%3E%3Ccircle cx='9' cy='10' r='1.6' fill='black'/%3E%3Cpath d='M4 18l5-5 4 4 3-3 4 4' fill='none' stroke='black' stroke-width='1.6' stroke-linejoin='round'/%3E%3Cpath d='M3 3l18 18' stroke='black' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E"); }
  .fx-image[data-state="error"] .fx-image__fallback { display: grid; }
  .fx-image[data-state="error"] .fx-image__frame > img { visibility: hidden; }
  .fx-image__caption { color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); line-height: 1.5; }
}

/* imagecrop */
@layer fx.components {
  /* Rasm kesish (4.87): avatar yoki muqova uchun — rasm ramka ichida suriladi (sichqoncha, barmoq, strelkalar) va kattalashtiriladi
     (slider, gʻildirak, + −). Ramka tashqarisi qoraytiriladi; doira (avatar) yoki nisbat (1, 4/3, 16/9). Natija — canvas’dan Blob.
     Xulq: foxui.js → imagecrop. */
  .fx-imagecrop { --_ar: 1; --_pad: var(--fx-space-6); display: grid; gap: var(--fx-space-3); inline-size: min(100%, calc(var(--fx-space-12) * 8)); color: var(--fx-text-primary); }
  .fx-imagecrop[data-aspect="4/3"] { --_ar: 4 / 3; }
  .fx-imagecrop[data-aspect="16/9"] { --_ar: 16 / 9; --_pad: var(--fx-space-4); }
  .fx-imagecrop[data-aspect="3/4"] { --_ar: 3 / 4; }
  .fx-imagecrop__stage { position: relative; display: grid; padding: var(--_pad); overflow: hidden; border-radius: var(--fx-radius-surface); background: var(--fx-bg-muted); cursor: grab; touch-action: none; user-select: none; }
  .fx-imagecrop__stage:active { cursor: grabbing; }
  .fx-imagecrop__stage:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-imagecrop__img { position: absolute; inset-block-start: 0; inset-inline-start: 0; max-inline-size: none; transform-origin: 0 0; pointer-events: none; -webkit-user-drag: none; }
  /* Ramka: oʻz nisbatida, tashqarisi katta outline bilan qoraytiriladi (outline yoyni kuzatadi — doira ham) */
  .fx-imagecrop__frame { position: relative; z-index: 1; inline-size: 100%; aspect-ratio: var(--_ar); box-sizing: border-box; border: var(--fx-border-width-focus) solid var(--fx-bg-static-light); border-radius: var(--fx-radius-control); outline: 100vmax solid color-mix(in oklab, var(--fx-bg-overlay) 55%, transparent); pointer-events: none; }
  .fx-imagecrop[data-shape="circle"] .fx-imagecrop__frame { border-radius: var(--fx-radius-circle); }
  /* Uchdan bir chiziqlari (kompozitsiya) — faqat surish paytida */
  .fx-imagecrop__frame::before { content: ""; position: absolute; inset: 0; border-radius: inherit; background:
    linear-gradient(to right, transparent calc(100% / 3 - var(--fx-border-width-default) / 2), color-mix(in oklab, var(--fx-bg-static-light) 60%, transparent) 0 calc(100% / 3 + var(--fx-border-width-default) / 2), transparent 0 calc(200% / 3 - var(--fx-border-width-default) / 2), color-mix(in oklab, var(--fx-bg-static-light) 60%, transparent) 0 calc(200% / 3 + var(--fx-border-width-default) / 2), transparent 0),
    linear-gradient(to bottom, transparent calc(100% / 3 - var(--fx-border-width-default) / 2), color-mix(in oklab, var(--fx-bg-static-light) 60%, transparent) 0 calc(100% / 3 + var(--fx-border-width-default) / 2), transparent 0 calc(200% / 3 - var(--fx-border-width-default) / 2), color-mix(in oklab, var(--fx-bg-static-light) 60%, transparent) 0 calc(200% / 3 + var(--fx-border-width-default) / 2), transparent 0);
    opacity: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-imagecrop[data-dragging] .fx-imagecrop__frame::before { opacity: 1; }
  .fx-imagecrop__controls { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-imagecrop__controls > .fx-slider { flex: 1; }
  .fx-imagecrop__btn { flex: none; display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-lg); line-height: 1; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-imagecrop__btn:hover:not(:disabled) { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-imagecrop__btn:active:not(:disabled) { scale: var(--fx-motion-press); }
  .fx-imagecrop__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-imagecrop__btn:disabled { color: var(--fx-text-disabled); cursor: default; }
  .fx-imagecrop__btn > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-imagecrop__help { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-imagecrop__actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-2); }
  .fx-imagecrop__file { position: relative; }
  .fx-imagecrop__file > input { position: absolute; inline-size: 1px; block-size: 1px; opacity: 0; }
  .fx-imagecrop__file:has(:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-imagecrop__result { display: flex; align-items: center; gap: var(--fx-space-3); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-imagecrop__result[hidden] { display: none; }
  .fx-imagecrop__result > img { inline-size: var(--fx-size-avatar-lg); block-size: auto; aspect-ratio: var(--_ar); border-radius: var(--fx-radius-control); object-fit: cover; }
  .fx-imagecrop[data-shape="circle"] .fx-imagecrop__result > img { border-radius: var(--fx-radius-circle); }
  @media (forced-colors: active) { .fx-imagecrop__frame { border-color: Highlight; } }
}

/* import */
@layer fx.components {
  /* CSV import ustasi (4.193, naqsh): fx-wizard ustiga — 1) fayl (fx-dropzone, namuna fayl), 2) ustunlarni maydonlarga moslash
     (avtomatik taxmin, majburiy maydonlar holati), 3) tekshiruv (tayyor / xato / takror soni, xatolar jadvali) → import → natija.
     Xulq: foxui.js → import (+ wizard, dropzone). */
  .fx-import { max-inline-size: calc(var(--fx-dialog-width) * 2); }
  .fx-import__file { display: flex; align-items: center; gap: var(--fx-space-3); margin: 0; padding: var(--fx-space-3) var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); font-size: var(--fx-font-size-sm); }
  .fx-import__file[hidden] { display: none; }
  .fx-import__file::before { content: "✓"; color: var(--fx-fg-success); font-weight: var(--fx-font-weight-semibold); }
  .fx-import__file[data-state="error"]::before { content: "!"; color: var(--fx-text-error); }
  .fx-import__file[data-state="error"] { border-color: var(--fx-border-color-error); color: var(--fx-text-error); }
  .fx-import__hint { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-import__hint a, .fx-import__link { padding: 0; border: 0; background: none; color: var(--fx-text-brand); font: inherit; font-weight: var(--fx-font-weight-medium); text-decoration: underline; text-underline-offset: var(--fx-space-1); cursor: pointer; }
  .fx-import__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-import__map td, .fx-import__map th { vertical-align: middle; }
  .fx-import__sample { max-inline-size: calc(var(--fx-space-12) * 5); overflow: hidden; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-overflow: ellipsis; white-space: nowrap; }
  .fx-import__arrow { color: var(--fx-text-tertiary); text-align: center; }
  .fx-import__map tr[data-skip] th { color: var(--fx-text-tertiary); text-decoration: line-through; }
  .fx-import__required { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; font-size: var(--fx-font-size-xs); }
  .fx-import__required > li { display: inline-flex; align-items: center; gap: var(--fx-space-1); padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border: var(--fx-border-width-default) dashed var(--fx-border-color-strong); border-radius: var(--fx-radius-badge); color: var(--fx-text-secondary); }
  .fx-import__required > li::before { content: "○"; }
  .fx-import__required > li[data-ok] { border-style: solid; border-color: var(--fx-fg-success); color: var(--fx-text-primary); }
  .fx-import__required > li[data-ok]::before { content: "✓"; color: var(--fx-fg-success); }
  .fx-import__stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-space-12) * 2.5), 1fr)); gap: var(--fx-space-3); margin: 0; }
  .fx-import__stat { display: grid; gap: var(--fx-space-1); padding: var(--fx-space-3) var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); }
  .fx-import__stat > dt { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-import__stat > dd { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; }
  .fx-import__stat[data-tone="success"] > dt::before { content: "✓ "; color: var(--fx-fg-success); }
  .fx-import__stat[data-tone="error"] > dt::before { content: "! "; color: var(--fx-text-error); font-weight: var(--fx-font-weight-semibold); }
  .fx-import__stat[data-tone="warning"] > dt::before { content: "≈ "; color: var(--fx-fg-warning); font-weight: var(--fx-font-weight-semibold); }
  .fx-import__errors { max-block-size: calc(var(--fx-control-h-md) * 7); overflow: auto; }
  .fx-import__errors td[data-type="problem"] { color: var(--fx-text-error); }
  .fx-import__errors td[data-type="problem"]::before { content: "! "; font-weight: var(--fx-font-weight-semibold); }
  .fx-import__value { font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); }
  .fx-import__done { display: grid; justify-items: start; gap: var(--fx-space-3); }
  .fx-import__done[hidden] { display: none; }
  .fx-import__done-title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-import__done-title::before { content: "✓ "; color: var(--fx-fg-success); }
  .fx-import__done-title:focus { outline: none; }
  .fx-import[data-state="done"] :is(.fx-wizard__panel, .fx-wizard__footer) { display: none; }
}

/* inbox */
@layer fx.components {
  /* Kiruvchilar (inbox): kun boʻyicha guruhlangan qatorlar — oʻqilmagan nuqta, ijrochi, vaqt. Sichqoncha ustida yoki fokusda
     vaqt oʻrnini amallar (oʻqildi · keyinga · arxiv) egallaydi; sensorli qurilmada amallar doim koʻrinadi. Xulq — foxui.js (data-fx-inbox). */
  .fx-inbox { display: grid; gap: var(--fx-space-2); }
  .fx-inbox__group { display: grid; }
  .fx-inbox__day { margin: 0; padding: var(--fx-space-3) var(--fx-space-4) var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-inbox__list { display: grid; margin: 0; padding: 0; list-style: none; }
  .fx-inbox__item { position: relative; display: flex; align-items: flex-start; gap: var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); border-radius: var(--fx-radius-nav); }
  .fx-inbox__item + .fx-inbox__item { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-inbox__item:hover, .fx-inbox__item:focus-within { background: var(--fx-bg-subtle); }
  .fx-inbox__item[hidden], .fx-inbox__group[hidden], .fx-inbox__empty[hidden] { display: none; }
  /* Oʻqilmagan: nuqta + qalin ijrochi (rangga tayanmaydi — «Yangi» matni ham bor) */
  .fx-inbox__dot { flex: none; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); margin-block-start: var(--fx-space-2); border-radius: var(--fx-radius-circle); background: transparent; }
  .fx-inbox__item[data-unread] .fx-inbox__dot { background: var(--fx-bg-brand-solid); }
  .fx-inbox__body { display: grid; flex: 1; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; color: inherit; text-decoration: none; }
  .fx-inbox__body:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-inbox__text { font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-inbox__text strong { font-weight: var(--fx-font-weight-medium); color: var(--fx-text-primary); }
  .fx-inbox__item[data-unread] .fx-inbox__text strong { font-weight: var(--fx-font-weight-semibold); }
  .fx-inbox__sub { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-inbox__aside { position: relative; flex: none; display: grid; align-items: start; justify-items: end; min-inline-size: calc(var(--fx-control-h-sm) * 3); }
  .fx-inbox__time { grid-area: 1 / 1; padding-block-start: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-inbox__actions { grid-area: 1 / 1; display: flex; gap: calc(var(--fx-space-1) / 2); opacity: 0; pointer-events: none; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-inbox__item:is(:hover, :focus-within) .fx-inbox__time { opacity: 0; }
  .fx-inbox__item:is(:hover, :focus-within) .fx-inbox__actions { opacity: 1; pointer-events: auto; }
  @media (hover: none) { .fx-inbox__time { display: none; } .fx-inbox__actions { opacity: 1; pointer-events: auto; } }
  /* Oʻchish: qator yigʻilib yoʻqoladi (JS data-leaving qoʻyadi, keyin hidden) */
  .fx-inbox__item[data-leaving] { opacity: 0; translate: var(--fx-motion-shift-md) 0; transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit); }
  .fx-inbox__empty { padding: var(--fx-space-8) var(--fx-space-4); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); text-align: center; }
}

/* indicator */
@layer fx.components {
  /* Indikator: istalgan element (ikon, avatar, tugma) burchagiga nuqta yoki son. Ichida .fx-count yoki .fx-indicator__dot.
     Son ota elementning aria-label’ida aytiladi («Xabarlar, 3 ta yangi»). */
  .fx-indicator { position: relative; display: inline-flex; justify-self: start; vertical-align: middle; }
  .fx-indicator__dot { position: absolute; inset-block-start: 0; inset-inline-end: 0; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); box-sizing: border-box; border-radius: var(--fx-radius-circle); border: var(--fx-border-width-focus) solid var(--fx-bg-surface); background: var(--fx-bg-error-solid); translate: 25% -25%; }
  .fx-indicator[data-placement="top-start"] > :is(.fx-count, .fx-indicator__dot) { inset-inline-start: 0; inset-inline-end: auto; translate: -25% -25%; }
  .fx-indicator[data-placement="bottom-end"] > :is(.fx-count, .fx-indicator__dot) { inset-block-start: auto; inset-block-end: 0; translate: 25% 25%; }
  .fx-indicator[data-placement="bottom-start"] > :is(.fx-count, .fx-indicator__dot) { inset-block-start: auto; inset-block-end: 0; inset-inline-start: 0; inset-inline-end: auto; translate: -25% 25%; }
  .fx-indicator[data-tone="success"] > :is(.fx-count, .fx-indicator__dot) { background: var(--fx-fg-success); }
  .fx-indicator[data-tone="brand"] > :is(.fx-count, .fx-indicator__dot) { background: var(--fx-bg-brand-solid); }
  /* Jarayon: halqa kengayib oʻchadi (cheksiz animatsiya — reduced-motion’da oʻchadi) */
  .fx-indicator[data-processing] > .fx-indicator__dot::after { content: ""; position: absolute; inset: calc(var(--fx-border-width-focus) * -1); border-radius: inherit; background: inherit; animation: fx-indicator-ping var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  @keyframes fx-indicator-ping { from { opacity: 0.6; scale: 1; } to { opacity: 0; scale: 2.4; } }
  @media (prefers-reduced-motion: reduce) { .fx-indicator[data-processing] > .fx-indicator__dot::after { animation: none; } }
}

/* inline-edit */
@layer fx.components {
  /* Joyida tahrir: matn tugma koʻrinishida; bosilsa yoki Enter — maydonga aylanadi. Enter/fokus ketishi — saqlaydi, Esc — bekor qiladi (foxui.js). */
  .fx-inline-edit { display: inline-flex; align-items: center; max-inline-size: 100%; }
  .fx-inline-edit__view { display: inline-flex; inline-size: max-content; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-control-h-sm); max-inline-size: 100%; padding: 0 var(--fx-space-2); margin-inline: calc(var(--fx-space-2) * -1); border: var(--fx-border-width-default) solid transparent; border-radius: var(--fx-radius-control); background: transparent; color: inherit; font: inherit; text-align: start; cursor: text; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-inline-edit__view:hover { background: var(--fx-bg-subtle); border-color: var(--fx-border-color-default); }
  .fx-inline-edit__view:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-inline-edit__view::after { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: var(--fx-text-tertiary); opacity: 0; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M10.5 3.5l2 2M3 13l.5-2.5 7-7 2 2-7 7z' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-inline-edit__view:is(:hover, :focus-visible)::after { opacity: 1; }
  .fx-inline-edit__view[data-empty] { color: var(--fx-text-tertiary); }
  .fx-inline-edit__view[hidden], .fx-inline-edit__input[hidden] { display: none; }
  .fx-inline-edit__input { inline-size: auto; min-inline-size: calc(var(--fx-space-12) * 3); }
  .fx-inline-edit[data-saved] .fx-inline-edit__view { animation: fx-inline-saved var(--fx-motion-slower) var(--fx-ease-standard); }
  @keyframes fx-inline-saved { 0% { background: var(--fx-bg-brand-subtle); } 100% { background: transparent; } }
}

/* input */
@layer fx.components {
  .fx-field { display: grid; gap: var(--fx-space-2); }
  .fx-label { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); color: var(--fx-text-secondary); }
  .fx-hint { font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-field[data-invalid] .fx-hint { color: var(--fx-text-error); }
  .fx-input, .fx-textarea {
    --_h: var(--fx-control-h-md);
    inline-size: 100%;
    box-sizing: border-box;
    font: inherit;
    font-size: var(--fx-font-size-md);
    color: var(--fx-text-primary);
    background: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field); /* uslubga qarab: chegarali yoki toʻldirilgan (knob field-fill) */
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard),
      border-radius var(--fx-motion-base) var(--fx-ease-standard),
      block-size var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-input {
    block-size: var(--_h);
    padding-inline: var(--fx-space-4);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
  }
  /* Textarea hech qachon pill bo'lmaydi (WDS «Shakl va oraliq») */
  .fx-textarea { min-block-size: calc(var(--_h) * 2); padding: var(--fx-space-3) var(--fx-space-4); border-radius: var(--fx-radius-field-multiline); resize: vertical; }
  .fx-input::placeholder, .fx-textarea::placeholder { color: var(--fx-text-tertiary); }
  .fx-input:hover, .fx-textarea:hover { border-color: color-mix(in oklab, var(--fx-border-color-strong) calc((1 - var(--fx-knob-field-fill)) * 100%), transparent); background: color-mix(in oklab, var(--fx-text-primary) calc(var(--fx-knob-field-fill) * 6%), var(--fx-bg-field)); }
  .fx-input:focus-visible, .fx-textarea:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-field[data-invalid] .fx-input, .fx-field[data-invalid] .fx-textarea { border-color: var(--fx-border-color-error); }
  .fx-input[data-size="sm"] { --_h: var(--fx-control-h-sm); font-size: var(--fx-font-size-sm); }
  .fx-input:disabled, .fx-textarea:disabled { background: var(--fx-bg-muted); color: var(--fx-text-disabled); cursor: not-allowed; }
  /* Majburiy belgisi, faqat oʻqish, muvaffaqiyat izohi */
  .fx-label[data-required]::after { content: " *"; color: var(--fx-text-error); }
  .fx-input:read-only:not(:disabled), .fx-textarea:read-only:not(:disabled) { background: var(--fx-bg-subtle); border-style: dashed; }
  .fx-field[data-valid] .fx-hint { color: var(--fx-fg-success); }
  .fx-field:has(:is(input, select, textarea):disabled) .fx-label { color: var(--fx-text-disabled); }

  /* Input guruhi: maydon + oldi/orqa qism (birlik, ikon, tugma) — tashqi qobiq maydon koʻrinishida, ichki input chegarasiz */
  .fx-input-group {
    --_h: var(--fx-control-h-md);
    display: flex;
    align-items: center;
    block-size: var(--_h);
    box-sizing: border-box;
    inline-size: 100%;
    background: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    overflow: hidden;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-input-group:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-input-group__control { flex: 1; min-inline-size: 0; block-size: 100%; padding-inline: var(--fx-space-4); border: 0; background: transparent; color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-md); }
  .fx-input-group__control:focus { outline: none; }
  .fx-input-group__control::placeholder { color: var(--fx-text-tertiary); }
  .fx-input-group__addon { flex: none; display: inline-flex; align-items: center; gap: var(--fx-space-2); block-size: 100%; padding-inline: var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); white-space: nowrap; }
  .fx-input-group__addon:first-child { padding-inline-start: var(--fx-space-4); }
  .fx-input-group__addon:first-child + .fx-input-group__control { padding-inline-start: 0; }
  .fx-input-group__addon:last-child { padding-inline-end: var(--fx-space-4); }
  .fx-input-group__addon > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-input-group[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  .fx-field[data-invalid] .fx-input-group { border-color: var(--fx-border-color-error); }

  /* Guruh sarlavhasi bilan (checkbox/radio guruhi, manzil maydonlari) */
  .fx-fieldset { display: grid; gap: var(--fx-space-3); margin: 0; padding: 0; border: 0; min-inline-size: 0; }
  .fx-legend { padding: 0; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); }
  /* Xato: maydon bir marta yengil silkinadi (G1); harakat kamaytirilsa — yoʻq (siljish 0) */
  .fx-field[data-invalid] :is(.fx-input, .fx-textarea, .fx-input-group) { animation: fx-shake var(--fx-motion-slow) var(--fx-ease-standard); }
  @keyframes fx-shake { 20%, 60% { translate: calc(var(--fx-motion-shift-sm) * -1) 0; } 40%, 80% { translate: var(--fx-motion-shift-sm) 0; } }

  /* ---- Kengaytma (0.21): lg oʻlcham, eni, gorizontal forma, belgilar hisoblagichi, tozalash/koʻrsatish tugmalari, avto-oʻsish ---- */
  .fx-input[data-size="lg"], .fx-input-group[data-size="lg"] { --_h: var(--fx-control-h-lg); }
  .fx-input[data-size="lg"] { font-size: var(--fx-font-size-lg); }
  /* Maydon eni mazmun uzunligiga mos (pochta indeksi, kod) — «ch» birligida */
  .fx-input[data-width], .fx-input-group[data-width] { max-inline-size: 100%; }
  .fx-input[data-width="xs"], .fx-input-group[data-width="xs"] { inline-size: 10ch; }
  .fx-input[data-width="sm"], .fx-input-group[data-width="sm"] { inline-size: 20ch; }
  .fx-input[data-width="md"], .fx-input-group[data-width="md"] { inline-size: 32ch; }
  /* Gorizontal forma: yorliq chapda, maydon oʻngda; tor joyda yana ustma-ust */
  .fx-field[data-layout="inline"] { grid-template-columns: minmax(0, calc(var(--fx-space-12) * 3)) minmax(0, 1fr); align-items: center; column-gap: var(--fx-space-6); }
  .fx-field[data-layout="inline"] > :not(.fx-label) { grid-column: 2; }
  .fx-field[data-layout="inline"] > .fx-label { grid-column: 1; grid-row: 1; }
  @media (max-width: 40em) {
    .fx-field[data-layout="inline"] { grid-template-columns: minmax(0, 1fr); }
    .fx-field[data-layout="inline"] > :not(.fx-label), .fx-field[data-layout="inline"] > .fx-label { grid-column: 1; grid-row: auto; }
  }
  /* Izoh qatori: chapda hint, oʻngda belgilar hisoblagichi */
  .fx-field__foot { display: flex; justify-content: space-between; align-items: baseline; gap: var(--fx-space-3); }
  .fx-counter { flex: none; margin-inline-start: auto; font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); font-variant-numeric: tabular-nums; }
  .fx-counter[data-state="near"] { color: var(--fx-fg-warning); font-weight: var(--fx-font-weight-semibold); }
  .fx-counter[data-state="over"] { color: var(--fx-text-error); font-weight: var(--fx-font-weight-semibold); }
  .fx-counter[data-state="over"]::before { content: "! "; }
  /* Maydon ichidagi tugma: koʻrsatish (parol), tozalash (✕) — guruh chetida, kvadrat bosish maydoni */
  .fx-input-group__btn { flex: none; display: grid; place-items: center; box-sizing: border-box; aspect-ratio: 1; block-size: 100%; min-inline-size: var(--fx-size-min-target); max-block-size: var(--fx-size-min-target); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-tertiary); font: inherit; cursor: pointer; transition: color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-input-group__btn:hover { color: var(--fx-text-primary); background: var(--fx-bg-muted); }
  .fx-input-group__btn:active { scale: var(--fx-motion-press); }
  .fx-input-group__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-input-group__btn[aria-pressed="true"] { color: var(--fx-text-brand); }
  .fx-input-group__btn[hidden] { display: none; }
  .fx-input-group__btn > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  /* Eski brauzer (xulq yuklanmagan): bosh maydonda tozalash tugmasi koʻrinmaydi */
  .fx-input-group:has(.fx-input-group__control:placeholder-shown) > .fx-input-group__btn[data-clear] { display: none; }
  /* Caps Lock ogohlantirishi: belgi + soʻz (rangning oʻzi yetmaydi) */
  .fx-hint[data-caps]:not([hidden])::before { content: "⇪ "; }
  .fx-hint[data-caps] { color: var(--fx-fg-warning); }
  .fx-hint[data-caps][hidden] { display: none; }
  /* Parol kuchliligi: 4 boʻlakli chiziq + daraja soʻzi */
  .fx-strength { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) auto; align-items: center; gap: var(--fx-space-1) var(--fx-space-1); }
  .fx-strength__bar { grid-row: 1; block-size: var(--fx-space-1); border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); transition: background-color var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-strength__label { grid-column: 5; grid-row: 1; margin-inline-start: var(--fx-space-2); font-size: var(--fx-font-size-xs); color: var(--fx-text-secondary); }
  .fx-strength[data-level="1"] > .fx-strength__bar:nth-child(-n+1) { background: var(--fx-bg-error-solid); }
  .fx-strength[data-level="2"] > .fx-strength__bar:nth-child(-n+2) { background: var(--fx-fg-warning); }
  .fx-strength[data-level="3"] > .fx-strength__bar:nth-child(-n+3) { background: var(--fx-fg-info); }
  .fx-strength[data-level="4"] > .fx-strength__bar:nth-child(-n+4) { background: var(--fx-fg-success); }
  /* Textarea avto-oʻsishi: field-sizing (Chromium/Safari), qolganida xulq balandlikni moslaydi; data-rows — eng koʻp qator (3 / 5 / 8) */
  .fx-textarea[data-autosize] { field-sizing: content; resize: none; max-block-size: calc(var(--_h) * 2.5); overflow-y: auto; }
  .fx-textarea[data-autosize][data-rows="3"] { max-block-size: calc(var(--_h) * 1.5); }
  .fx-textarea[data-autosize][data-rows="8"] { max-block-size: calc(var(--_h) * 4); }
  /* Kod/JSON maydoni: monospace */
  .fx-textarea[data-code] { font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); tab-size: 2; white-space: pre; overflow-x: auto; }

  /* ---- Kengaytma (2.18–2.20, 2.24): holat ikoni, variantlar (filled/borderless/underlined), floating label, ichki tugma ---- */
  /* Maydon oxiridagi holat belgisi: yuklanmoqda / toʻgʻri (✓) / xato (!) — rangning oʻzi yetmaydi */
  .fx-input-group__status { flex: none; display: grid; place-items: center; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); margin-inline-end: var(--fx-space-3); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1; }
  .fx-input-group__status[data-state="valid"] { color: var(--fx-fg-success); }
  .fx-input-group__status[data-state="valid"]::before { content: "✓"; }
  .fx-input-group__status[data-state="invalid"] { color: var(--fx-text-error); }
  .fx-input-group__status[data-state="invalid"]::before { content: "!"; }
  .fx-input-group__status[data-state="loading"]::before { content: ""; box-sizing: border-box; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); border: var(--fx-border-width-focus) solid color-mix(in oklab, var(--fx-text-tertiary) 25%, transparent); border-block-start-color: var(--fx-text-tertiary); border-radius: var(--fx-radius-circle); animation: fx-spin var(--fx-duration-spin) linear infinite; }
  @media (prefers-reduced-motion: reduce) { .fx-input-group__status[data-state="loading"]::before { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
  /* Variantlar */
  .fx-input[data-variant="filled"], .fx-input-group[data-variant="filled"] { border-color: transparent; background: var(--fx-bg-muted); }
  .fx-input[data-variant="filled"]:hover { border-color: transparent; background: color-mix(in oklab, var(--fx-text-primary) 4%, var(--fx-bg-muted)); }
  .fx-input[data-variant="borderless"], .fx-input-group[data-variant="borderless"] { border-color: transparent; background: transparent; }
  .fx-input[data-variant="borderless"]:hover { border-color: transparent; background: var(--fx-bg-muted); }
  .fx-input[data-variant="underlined"], .fx-input-group[data-variant="underlined"] { border-color: transparent; border-block-end-color: var(--fx-border-color-strong); border-radius: 0; background: transparent; }
  .fx-input[data-variant="underlined"]:hover { border-color: transparent; border-block-end-color: var(--fx-text-primary); background: transparent; }
  .fx-input[data-variant="underlined"]:focus-visible, .fx-input-group[data-variant="underlined"]:focus-within { outline-offset: 0; border-radius: 0; }
  .fx-field[data-invalid] .fx-input:is([data-variant="filled"], [data-variant="borderless"], [data-variant="underlined"]) { border-color: transparent; border-block-end-color: var(--fx-border-color-error); }
  /* Floating label: yorliq maydon ichida, fokus/qiymatda tepaga chiqadi (maydonda placeholder=" " boʻlishi shart) */
  .fx-field[data-float] { position: relative; }
  .fx-field[data-float] > .fx-label { position: absolute; z-index: 1; inset-inline-start: var(--fx-space-4); inset-block-start: calc((var(--fx-control-h-md) + var(--fx-space-2)) / 2); translate: 0 -50%; max-inline-size: calc(100% - var(--fx-space-8)); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-regular); pointer-events: none; transition: inset-block-start var(--fx-motion-fast) var(--fx-ease-standard), translate var(--fx-motion-fast) var(--fx-ease-standard), font-size var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-field[data-float] > .fx-input { block-size: calc(var(--_h) + var(--fx-space-2)); padding-block: var(--fx-space-4) 0; }
  .fx-field[data-float] > .fx-input::placeholder { color: transparent; }
  .fx-field[data-float]:focus-within > .fx-label, .fx-field[data-float]:has(> .fx-input:not(:placeholder-shown)) > .fx-label { inset-block-start: var(--fx-space-2); translate: 0 0; font-size: var(--fx-font-size-xs); }
  .fx-field[data-float]:focus-within > .fx-label { color: var(--fx-text-brand); }
  .fx-field[data-float][data-invalid] > .fx-label { color: var(--fx-text-error); }
  /* Maydon ichidagi amal tugmasi (“Obuna boʻlish”): guruhning oxirida, maydondan bir oz kichik */
  .fx-input-group > .fx-btn { flex: none; align-self: center; block-size: calc(var(--_h) - var(--fx-space-3)); min-block-size: 0; margin-inline-end: var(--fx-space-1); }
  .fx-input-group > .fx-copy { margin-inline-end: var(--fx-space-1); }
  @media (forced-colors: active) { .fx-input, .fx-textarea, .fx-input-group { border-color: ButtonText; } .fx-input:focus-visible, .fx-input-group:focus-within { outline-color: Highlight; } }
}

/* integrations */
@layer fx.components {
  /* Integratsiyalar katalogi (4.189, naqsh): sarlavha + «N ta ulangan», qidiruv va toifa chip’lari (Hammasi, Ulanganlar, Toʻlov,
     Yetkazish, Xabar, Hisob…), kartalar toʻri: logo (harf + pastel fon yoki img), nom, qisqa izoh, holat (fx-status: nuqta + soʻz)
     va amallar («Ulash / Uzish / Qayta ulash» + «Sozlash»). data-state: connected · disconnected · pending · error.
     Xulq: foxui.js → integrations (filtr, qidiruv, ulash hodisasi, uzishda tasdiq). data-layout: grid (standart) · list. */
  .fx-integrations { display: grid; gap: var(--fx-space-6); }
  .fx-integrations__head { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: var(--fx-space-3) var(--fx-space-6); }
  .fx-integrations__title { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); }
  .fx-integrations__text { margin: var(--fx-space-1) 0 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-integrations__count { color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-integrations__toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-3); }
  .fx-integrations__toolbar > .fx-search { flex: 0 1 calc(var(--fx-space-12) * 6); }
  .fx-integrations__filters { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-integrations__list { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, calc(var(--fx-space-12) * 6.5)), 1fr)); gap: var(--fx-space-4); margin: 0; padding: 0; list-style: none; }
  .fx-integrations__item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-rows: auto 1fr auto;
    gap: var(--fx-space-3) var(--fx-space-4);
    padding: var(--fx-space-5);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), box-shadow var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-integrations__item[hidden] { display: none; }
  .fx-integrations__item:hover { border-color: var(--fx-border-color-strong); box-shadow: var(--fx-shadow-sm); }
  .fx-integrations__item[data-state="connected"] { border-color: color-mix(in oklab, var(--fx-fg-success) 35%, var(--fx-border-color-surface)); }
  .fx-integrations__item[data-state="error"] { border-color: var(--fx-border-color-error); }
  .fx-integrations__item[data-state="pending"] { opacity: 0.85; }
  .fx-integrations__item[data-state="disconnected"] .fx-integrations__logo { filter: saturate(0.6); }
  .fx-integrations__logo {
    display: grid;
    place-items: center;
    inline-size: var(--fx-size-avatar-lg);
    block-size: var(--fx-size-avatar-lg);
    overflow: hidden;
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-muted);
    color: var(--fx-text-on-category);
    font-size: var(--fx-font-size-lg);
    font-weight: var(--fx-font-weight-semibold);
  }
  .fx-integrations__logo > img { inline-size: 100%; block-size: 100%; object-fit: contain; }
  .fx-integrations__logo[data-color="yellow"] { background: var(--fx-bg-category-yellow); }
  .fx-integrations__logo[data-color="pink"] { background: var(--fx-bg-category-pink); }
  .fx-integrations__logo[data-color="blue"] { background: var(--fx-bg-category-blue); }
  .fx-integrations__logo[data-color="coral"] { background: var(--fx-bg-category-coral); }
  .fx-integrations__logo[data-color="green"] { background: var(--fx-bg-category-green); }
  .fx-integrations__logo[data-color="purple"] { background: var(--fx-bg-category-purple); }
  .fx-integrations__info { display: grid; align-content: center; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; }
  .fx-integrations__name { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-integrations__category { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-integrations__desc { grid-column: 1 / -1; margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-wrap: pretty; }
  .fx-integrations__footer { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-2); padding-block-start: var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-integrations__status { min-inline-size: 0; }
  .fx-integrations__actions { display: flex; gap: var(--fx-space-1); margin-inline-start: auto; }
  .fx-integrations__empty { display: grid; justify-items: center; gap: var(--fx-space-2); padding: var(--fx-space-10) var(--fx-space-6); border: var(--fx-border-width-default) dashed var(--fx-border-color-strong); border-radius: var(--fx-radius-surface); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-align: center; }
  .fx-integrations__empty[hidden] { display: none; }
  .fx-integrations__empty > strong { color: var(--fx-text-primary); font-size: var(--fx-font-size-md); }
  /* list: bir qatorda — logo, nom va izoh, holat, amal */
  .fx-integrations[data-layout="list"] .fx-integrations__list { grid-template-columns: minmax(0, 1fr); gap: 0; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); overflow: hidden; }
  .fx-integrations[data-layout="list"] .fx-integrations__item { grid-template-columns: auto minmax(0, 1fr) auto; grid-template-rows: auto; align-items: center; border: 0; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: 0; }
  .fx-integrations[data-layout="list"] .fx-integrations__item:hover { box-shadow: none; background: var(--fx-bg-subtle); }
  .fx-integrations[data-layout="list"] .fx-integrations__desc { display: none; }
  .fx-integrations[data-layout="list"] .fx-integrations__footer { grid-column: auto; padding: 0; border: 0; }
  @media (max-width: 40em) {
    .fx-integrations[data-layout="list"] .fx-integrations__item { grid-template-columns: auto minmax(0, 1fr); }
    .fx-integrations[data-layout="list"] .fx-integrations__footer { grid-column: 1 / -1; }
  }
}

/* interruption */
@layer fx.components {
  /* Interruption sahifasi (4.198, naqsh — GOV.UK «Interruption pages»): foydalanuvchi davom etishidan OLDIN bilishi shart boʻlgan
     bitta muhim xabar. Butun sahifa (yoki katta blok) rangli panel: sarlavha, qisqa matn yoki roʻyxat, ixtiyoriy «Tushundim»
     belgisi (required — forma oʻzi tekshiradi) va bitta asosiy harakat — «Davom etish» + ikkinchi darajali havola.
     data-tone: brand (standart) · warning (ehtiyot — chiziqli sariq fon) · neutral. data-size: page (standart, ekran balandligi) · block. */
  .fx-interruption { display: grid; place-items: center; min-block-size: 100dvh; padding: var(--fx-space-6); background: var(--fx-bg-page); }
  .fx-interruption[data-size="block"] { min-block-size: auto; padding: 0; }
  .fx-interruption__panel {
    display: grid;
    gap: var(--fx-space-5);
    inline-size: 100%;
    max-inline-size: calc(var(--fx-dialog-width) * 1.6);
    box-sizing: border-box;
    padding: var(--fx-space-12) var(--fx-space-10);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-brand-solid);
    color: var(--fx-text-on-brand);
    animation: fx-fade-in var(--fx-motion-slow) var(--fx-ease-enter);
  }
  .fx-interruption__eyebrow { margin: 0; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); opacity: 0.85; }
  .fx-interruption__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.02em; text-wrap: balance; }
  .fx-interruption__title:focus { outline: none; }
  .fx-interruption__body { display: grid; gap: var(--fx-space-3); font-size: var(--fx-font-size-lg); line-height: var(--fx-line-height-relaxed); }
  .fx-interruption__body > * { margin: 0; }
  .fx-interruption__body ul { display: grid; gap: var(--fx-space-2); padding-inline-start: var(--fx-space-6); }
  .fx-interruption__body strong { font-weight: var(--fx-font-weight-semibold); }
  .fx-interruption__ack { display: flex; align-items: flex-start; gap: var(--fx-space-3); padding: var(--fx-space-4); border-radius: var(--fx-radius-control); background: color-mix(in oklab, currentColor 10%, transparent); font-size: var(--fx-font-size-md); cursor: pointer; }
  .fx-interruption__ack > input { flex: none; inline-size: var(--fx-size-checkbox); block-size: var(--fx-size-checkbox); margin: calc(var(--fx-space-1) / 2) 0 0; accent-color: currentColor; }
  .fx-interruption__ack > input:focus-visible { outline: var(--fx-border-width-focus) solid currentColor; outline-offset: var(--fx-border-width-focus); }
  .fx-interruption__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-3) var(--fx-space-6); margin-block-start: var(--fx-space-2); }
  /* asosiy tugma — panel rangiga teskari (oq fon) */
  .fx-interruption__continue {
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-2);
    min-block-size: var(--fx-control-h-lg);
    padding: 0 var(--fx-space-6);
    border: 0;
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    font: inherit;
    font-size: var(--fx-font-size-md);
    font-weight: var(--fx-font-weight-semibold);
    text-decoration: none;
    cursor: pointer;
    transition: translate var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-interruption__continue::after { content: "→"; transition: translate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-interruption__continue:hover::after { translate: var(--fx-motion-shift-sm) 0; }
  .fx-interruption__continue:active { scale: var(--fx-motion-press); }
  .fx-interruption__continue:focus-visible { outline: var(--fx-border-width-focus) solid currentColor; outline-offset: var(--fx-border-width-focus); box-shadow: var(--fx-shadow-md); }
  .fx-interruption__secondary { color: inherit; font-size: var(--fx-font-size-md); text-underline-offset: 0.2em; }
  .fx-interruption__secondary:focus-visible { outline: var(--fx-border-width-focus) solid currentColor; outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  /* warning: sariq iliq fon, chap qalin chiziq, matn odatiy rangda */
  .fx-interruption[data-tone="warning"] .fx-interruption__panel { border-inline-start: var(--fx-space-2) solid var(--fx-fg-warning); background: var(--fx-bg-warning-subtle); color: var(--fx-text-primary); }
  .fx-interruption[data-tone="warning"] .fx-interruption__continue { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-interruption[data-tone="neutral"] .fx-interruption__panel { border: var(--fx-border-width-default) solid var(--fx-border-color-surface); background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-md); }
  .fx-interruption[data-tone="neutral"] .fx-interruption__continue { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  @media (max-width: 36em) {
    .fx-interruption { padding: var(--fx-space-3); }
    .fx-interruption__panel { padding: var(--fx-space-8) var(--fx-space-5); }
    .fx-interruption__continue { inline-size: 100%; justify-content: center; }
  }
  @media (forced-colors: active) { .fx-interruption__panel { border: var(--fx-border-width-focus) solid CanvasText; } }
}

/* jsonfield */
@layer fx.components {
  /* JSON maydoni (4.90): sozlama, webhook tanasi, API soʻrovi uchun. Chapda qator raqamlari, fokusdan chiqqanda formatlanadi (2 boʻshliq),
     xato boʻlsa — qator raqami yonida «!» belgisi, qator ajratiladi va pastda «3-qator, 5-ustun: …» matni (holat faqat rangda emas).
     Xulq foxui.js → jsonfield. Matn maydoni oddiy <textarea> — Tab fokusni olib ketadi (tuzoq yoʻq). */
  .fx-jsonfield { display: grid; gap: var(--fx-space-1); }
  .fx-jsonfield__box {
    --_lh: 1.6;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    max-block-size: calc(var(--fx-space-12) * 7);
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: var(--fx-radius-field-multiline);
    background: var(--fx-bg-field);
    font-family: var(--fx-font-family-mono);
    font-size-adjust: var(--fx-font-adjust-mono);
    font-size: var(--fx-font-size-sm);
    line-height: var(--_lh);
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-jsonfield__box:hover { border-color: var(--fx-border-color-strong); }
  .fx-jsonfield__box:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-jsonfield__gutter {
    margin: 0;
    padding: var(--fx-space-3) var(--fx-space-2) var(--fx-space-3) var(--fx-space-3);
    overflow: hidden;
    border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    background: var(--fx-bg-subtle);
    color: var(--fx-text-tertiary);
    list-style: none;
    text-align: end;
    font-variant-numeric: tabular-nums;
    user-select: none;
  }
  .fx-jsonfield__gutter > li { min-inline-size: 2ch; white-space: nowrap; }
  .fx-jsonfield__gutter > li[data-error] { color: var(--fx-text-error); font-weight: var(--fx-font-weight-semibold); }
  .fx-jsonfield__gutter > li[data-error]::before { content: "! "; }
  .fx-jsonfield__input {
    box-sizing: border-box;
    min-block-size: calc(var(--fx-space-12) * 3);
    margin: 0;
    padding: var(--fx-space-3);
    border: 0;
    background: transparent;
    color: var(--fx-text-primary);
    font: inherit;
    line-height: inherit;
    tab-size: 2;
    white-space: pre;
    overflow: auto;
    resize: vertical;
    outline: 0;
    field-sizing: content;
  }
  /* Xato qatori — orqa tasma (textarea ustida emas, ostida: --_line xulq yozadi) */
  .fx-jsonfield__input[aria-invalid="true"] {
    background: linear-gradient(to bottom, transparent calc(var(--fx-space-3) + var(--_line, 0) * 1lh), color-mix(in oklab, var(--fx-fg-error) 12%, transparent) 0 calc(var(--fx-space-3) + (var(--_line, 0) + 1) * 1lh), transparent 0) local;
  }
  .fx-jsonfield[data-invalid] .fx-jsonfield__box { border-color: var(--fx-border-color-error); }
  .fx-jsonfield__error { display: flex; gap: var(--fx-space-1); color: var(--fx-text-error); font-size: var(--fx-font-size-xs); }
  .fx-jsonfield__error:empty { display: none; }
  .fx-jsonfield__error:not(:empty)::before { content: "⚠"; }
  .fx-jsonfield__hint { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-jsonfield__ok { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-jsonfield[aria-disabled="true"] .fx-jsonfield__box { background: var(--fx-bg-muted); color: var(--fx-text-disabled); }
}

/* kbd */
@layer fx.components {
  /* Klaviatura tugmasi belgisi: mono, pastki qalin chiziq (tugma qopqogʻi) */
  .fx-kbd { display: inline-flex; align-items: center; justify-content: center; min-inline-size: var(--fx-size-icon-md); padding: 0 var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-block-end-width: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); background: var(--fx-bg-surface); color: var(--fx-text-secondary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); line-height: 1.6; white-space: nowrap; }
  /* ---- Kengaytma (2.147): kombinatsiya (⌘ + K), kichik oʻlcham ---- */
  .fx-kbd-combo { display: inline-flex; align-items: center; gap: calc(var(--fx-space-1) / 2); }
  .fx-kbd-combo__sep { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-kbd[data-size="sm"] { min-inline-size: var(--fx-size-icon-sm); font-size: calc(var(--fx-font-size-xs) * 0.85); line-height: 1.4; }
  @media (forced-colors: active) { .fx-kbd { border-color: ButtonText; } }
}

/* knob */
@layer fx.components {
  /* Burchak / knob tanlagich (4.89): dumaloq tutqich. data-type="value" (standart) — min…max 270° yoy boʻylab (ovoz, harorat, intensivlik),
     data-type="angle" — 0…359° toʻliq aylana (gradient yoʻnalishi, soya burchagi, kompas). Holat faqat rangda emas: oʻrtada raqam va birlik,
     tutqich nuqtasi aniq joyda. Xulq foxui.js → knob (APG slider: ← ↓ / → ↑, PgUp/PgDn, Home/End). --_p (0…1) va --_a (burchak) xulq yozadi. */
  .fx-knob {
    --_s: calc(var(--fx-space-12) * 2);
    --_ring: var(--fx-space-2);
    --_p: 0;
    --_a: 0deg;
    position: relative;
    display: inline-grid;
    place-items: center;
    inline-size: var(--_s);
    block-size: var(--_s);
    border-radius: var(--fx-radius-circle);
    color: var(--fx-text-primary);
    touch-action: none;
    cursor: grab;
    user-select: none;
  }
  .fx-knob[data-size="sm"] { --_s: calc(var(--fx-space-12) * 1.25); --_ring: var(--fx-space-1); }
  .fx-knob[data-size="lg"] { --_s: calc(var(--fx-space-12) * 3); --_ring: var(--fx-space-3); }
  .fx-knob:active { cursor: grabbing; }
  .fx-knob:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* Yoy: 270° (pastda 90° boʻsh joy); toʻlgan qism — brend */
  .fx-knob__track {
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background: conic-gradient(from 225deg, var(--fx-bg-brand-solid) 0 calc(var(--_p) * 270deg), var(--fx-bg-muted) 0 270deg, transparent 0);
    mask: radial-gradient(closest-side, transparent calc(100% - var(--_ring) - var(--fx-border-width-default)), black calc(100% - var(--_ring)));
    pointer-events: none;
  }
  .fx-knob[data-type="angle"] .fx-knob__track { background: var(--fx-bg-muted); }
  /* Ichki disk va tutqich nuqtasi (aylanadi) */
  .fx-knob__dial {
    position: absolute;
    inset: calc(var(--_ring) + var(--fx-space-1));
    border-radius: inherit;
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
    rotate: var(--_a);
    pointer-events: none;
    transition: rotate var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-knob__dial::after { content: ""; position: absolute; inset-block-start: var(--fx-space-1); inset-inline-start: 50%; inline-size: var(--fx-border-width-focus); block-size: calc(var(--_s) / 6); translate: -50% 0; border-radius: var(--fx-radius-pill); background: var(--fx-bg-brand-solid); }
  .fx-knob__value { position: relative; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; pointer-events: none; }
  .fx-knob[data-size="sm"] .fx-knob__value { font-size: var(--fx-font-size-xs); }
  .fx-knob[data-size="lg"] .fx-knob__value { font-size: var(--fx-font-size-xl); }
  .fx-knob[data-dragging] .fx-knob__dial { transition: none; }
  .fx-knob[aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; pointer-events: none; }
  /* Yorliq bilan: knob + nom ostida */
  .fx-knob-field { display: inline-grid; justify-items: center; gap: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  @media (forced-colors: active) { .fx-knob__track { background: ButtonText; } .fx-knob__dial::after { background: Highlight; } }
}

/* landmarks */
@layer fx.components {
  /* Hududlar navigatsiyasi (4-toʻlqin 4.24): F6 / Shift+F6 bilan header → nav → main → aside → footer. Hududning oʻzi fokus olganda —
     ichki halqa (hudud chetiga chiziladi, qoʻshni bloklarga chiqmaydi); pastda hudud nomi yorligʻi qisqa vaqt koʻrinadi. */
  .fx-landmarks [data-landmark-focus]:focus { outline: none; }
  .fx-landmarks [data-landmark-focus]:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-landmarks__hint {
    position: fixed;
    inset-block-end: var(--fx-space-6);
    inset-inline-start: 50%;
    z-index: var(--fx-z-tip);
    translate: -50% var(--fx-motion-shift-sm);
    padding: var(--fx-space-2) var(--fx-space-4);
    border-radius: var(--fx-radius-pill);
    background: var(--fx-text-primary);
    color: var(--fx-bg-page);
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    white-space: nowrap;
    pointer-events: none;
    opacity: 0;
    transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit);
  }
  .fx-landmarks__hint[data-show] { opacity: 1; translate: -50% 0; transition-duration: var(--fx-motion-fast); transition-timing-function: var(--fx-ease-enter); }
  .fx-landmarks__hint kbd { margin-inline-end: var(--fx-space-2); font: inherit; opacity: 0.7; }
}

/* layout */
@layer fx.components {
  /* Joylashuv primitivlari: oraliq — faqat space-token (data-gap), ichki mantiq o‘zgaruvchisi --_gap. */
  :is(.fx-stack, .fx-cluster, .fx-grid) { --_gap: var(--fx-space-4); gap: var(--_gap); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="0"] { --_gap: 0; }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="1"] { --_gap: var(--fx-space-1); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="2"] { --_gap: var(--fx-space-2); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="3"] { --_gap: var(--fx-space-3); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="4"] { --_gap: var(--fx-space-4); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="5"] { --_gap: var(--fx-space-5); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="6"] { --_gap: var(--fx-space-6); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="8"] { --_gap: var(--fx-space-8); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="10"] { --_gap: var(--fx-space-10); }
  :is(.fx-stack, .fx-cluster, .fx-grid)[data-gap="12"] { --_gap: var(--fx-space-12); }

  /* Stack: vertikal ustun */
  .fx-stack { display: flex; flex-direction: column; }
  .fx-stack[data-align="start"] { align-items: flex-start; }
  .fx-stack[data-align="center"] { align-items: center; }
  .fx-stack[data-align="end"] { align-items: flex-end; }
  .fx-stack[data-justify="between"] { justify-content: space-between; }

  /* Cluster: qatorga o‘raladigan gorizontal guruh (tugmalar, belgilar) */
  .fx-cluster { display: flex; flex-wrap: wrap; align-items: center; --_gap: var(--fx-space-3); }
  .fx-cluster[data-align="start"] { align-items: flex-start; }
  .fx-cluster[data-align="end"] { align-items: flex-end; }
  .fx-cluster[data-align="baseline"] { align-items: baseline; }
  .fx-cluster[data-justify="end"] { justify-content: flex-end; }
  .fx-cluster[data-justify="center"] { justify-content: center; }
  .fx-cluster[data-justify="between"] { justify-content: space-between; }
  .fx-cluster[data-wrap="nowrap"] { flex-wrap: nowrap; }
  .fx-cluster > .fx-spacer, .fx-spacer { flex: 1 1 auto; }

  /* Grid: ustun eniga qarab o‘zi moslashadi (auto-fit) yoki aniq ustun soni */
  .fx-grid { --_min: 16rem; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(var(--_min), 100%), 1fr)); }
  .fx-grid[data-min="sm"] { --_min: 10rem; }
  .fx-grid[data-min="md"] { --_min: 16rem; }
  .fx-grid[data-min="lg"] { --_min: 24rem; }
  .fx-grid[data-cols="2"] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fx-grid[data-cols="3"] { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .fx-grid[data-cols="4"] { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  @media (max-width: 40rem) { .fx-grid[data-cols] { grid-template-columns: minmax(0, 1fr); } }
  .fx-grid[data-align="start"] { align-items: start; }
  .fx-grid[data-align="center"] { align-items: center; }

  /* Container: markazlangan, eni cheklangan, yon chetlari bilan */
  .fx-container { inline-size: 100%; max-inline-size: 72rem; margin-inline: auto; padding-inline: var(--fx-space-4); }
  .fx-container[data-size="sm"] { max-inline-size: 40rem; }
  .fx-container[data-size="md"] { max-inline-size: 56rem; }
  .fx-container[data-size="lg"] { max-inline-size: 72rem; }
  .fx-container[data-size="xl"] { max-inline-size: 90rem; }
  .fx-container[data-size="full"] { max-inline-size: none; }
  .fx-container[data-pad="none"] { padding-inline: 0; }
  @media (min-width: 48rem) { .fx-container:not([data-pad="none"]) { padding-inline: var(--fx-space-6); } }

  /* Ratio: tomonlar nisbati qolipi (rasm, video, xarita) */
  .fx-ratio { aspect-ratio: 16 / 9; overflow: hidden; border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); }
  .fx-ratio[data-ratio="1-1"] { aspect-ratio: 1 / 1; }
  .fx-ratio[data-ratio="4-3"] { aspect-ratio: 4 / 3; }
  .fx-ratio[data-ratio="3-2"] { aspect-ratio: 3 / 2; }
  .fx-ratio[data-ratio="16-9"] { aspect-ratio: 16 / 9; }
  .fx-ratio[data-ratio="21-9"] { aspect-ratio: 21 / 9; }
  .fx-ratio > :is(img, video, iframe, svg) { inline-size: 100%; block-size: 100%; object-fit: cover; display: block; }
}

/* legal */
@layer fx.components {
  /* Huquqiy sahifa (4.177, naqsh): maxfiylik siyosati, foydalanish shartlari, ommaviy oferta, cookie siyosati.
     Tepada sarlavha + meta (kuchga kirgan sana, oxirgi yangilanish, versiya), ixtiyoriy «Namuna matn» ogohlantirishi
     (.fx-legal__sample — shablon yuristsiz ishlatilmasin), chapda yopishqoq mundarija (fx-toc), oʻngda raqamlangan boʻlimlar
     (CSS hisoblagich: 1., 1.1.) va har boʻlim boshida «Qisqacha» (oddiy tilda xulosa). Chop etishda mundarija yashirinadi. */
  .fx-legal { display: grid; grid-template-columns: minmax(0, calc(var(--fx-space-12) * 5)) minmax(0, 1fr); align-items: start; gap: var(--fx-space-8) var(--fx-space-12); counter-reset: fx-legal-s; }
  .fx-legal__head { grid-column: 1 / -1; display: grid; gap: var(--fx-space-3); padding-block-end: var(--fx-space-6); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-legal__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.02em; text-wrap: balance; color: var(--fx-text-primary); }
  .fx-legal__meta { display: flex; flex-wrap: wrap; gap: var(--fx-space-1) var(--fx-space-6); margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-legal__meta > div { display: flex; gap: var(--fx-space-1); }
  .fx-legal__meta dt { color: var(--fx-text-tertiary); }
  .fx-legal__meta dt::after { content: ":"; }
  .fx-legal__meta dd { margin: 0; color: var(--fx-text-primary); font-variant-numeric: tabular-nums; }
  /* «Namuna matn» — shablon ekanini aniq koʻrsatadi: chiziqli ramka + soʻz + belgi */
  .fx-legal__sample {
    display: flex;
    gap: var(--fx-space-3);
    align-items: flex-start;
    margin: 0;
    padding: var(--fx-space-3) var(--fx-space-4);
    border: var(--fx-border-width-default) dashed var(--fx-fg-warning);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-warning-subtle);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
  }
  .fx-legal__sample > strong { flex: none; padding: 0 var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-fg-warning); color: var(--fx-bg-surface); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); text-transform: uppercase; letter-spacing: 0.04em; line-height: var(--fx-line-height-normal); }
  .fx-legal__nav { position: sticky; inset-block-start: calc(var(--fx-size-topbar) + var(--fx-space-6)); max-block-size: calc(100dvh - var(--fx-size-topbar) - var(--fx-space-12)); overflow: auto; }
  .fx-legal__body { display: grid; gap: var(--fx-space-8); min-inline-size: 0; max-inline-size: 72ch; color: var(--fx-text-primary); font-size: var(--fx-font-size-md); line-height: var(--fx-line-height-relaxed); }
  .fx-legal__section { display: grid; gap: var(--fx-space-3); counter-increment: fx-legal-s; counter-reset: fx-legal-p; scroll-margin-block-start: calc(var(--fx-size-topbar) + var(--fx-space-4)); }
  .fx-legal__h { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-snug); }
  .fx-legal__h::before { content: counter(fx-legal-s) ". "; color: var(--fx-text-tertiary); font-variant-numeric: tabular-nums; }
  .fx-legal__summary { margin: 0; padding: var(--fx-space-3) var(--fx-space-4); border-inline-start: var(--fx-border-width-focus) solid var(--fx-border-color-strong); border-radius: 0 var(--fx-radius-control) var(--fx-radius-control) 0; background: var(--fx-bg-subtle); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-legal__summary::before { content: "Qisqacha: "; color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-legal__p { margin: 0; counter-increment: fx-legal-p; text-wrap: pretty; }
  .fx-legal__p::before { content: counter(fx-legal-s) "." counter(fx-legal-p) ". "; color: var(--fx-text-tertiary); font-variant-numeric: tabular-nums; }
  .fx-legal__body :is(ul, ol) { margin: 0; padding-inline-start: var(--fx-space-6); }
  .fx-legal__body a { color: var(--fx-text-brand); text-underline-offset: 0.2em; }
  .fx-legal__body a:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-legal__foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--fx-space-3); padding-block-start: var(--fx-space-6); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  @media (max-width: 52em) {
    .fx-legal { grid-template-columns: minmax(0, 1fr); }
    .fx-legal__nav { position: static; max-block-size: none; }
  }
  @media print {
    .fx-legal { display: block; }
    .fx-legal__nav { display: none; }
    .fx-legal__section { break-inside: avoid-page; margin-block-end: var(--fx-space-6); }
  }
}

/* legend */
@layer fx.components {
  /* Legenda (mustaqil, 60/30/10 rollari bilan): grafik, ulush chizigʻi va koʻp boʻlakli progress yonida. Rang yolgʻiz belgi emas —
     nom (va ixtiyoriy qiymat) doim yoziladi. Interaktiv boʻlsa element tugma (aria-pressed): oʻchirilgan seriya xira va chizilgan. */
  .fx-legend { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2) var(--fx-space-4); margin: 0; padding: 0; list-style: none; font-size: var(--fx-font-size-xs); color: var(--fx-text-secondary); }
  .fx-legend[data-direction="column"] { flex-direction: column; align-items: stretch; gap: var(--fx-space-2); }
  .fx-legend__item { display: inline-flex; align-items: center; gap: var(--fx-space-2); min-inline-size: 0; padding: 0; border: 0; background: transparent; color: inherit; font: inherit; }
  .fx-legend[data-direction="column"] .fx-legend__item { justify-content: space-between; }
  .fx-legend__swatch { --_c: var(--fx-viz-brand); flex: none; inline-size: var(--fx-space-3); block-size: var(--fx-space-3); border-radius: calc(var(--fx-space-1) / 2); background: var(--_c); }
  .fx-legend__swatch[data-role="ink"] { --_c: var(--fx-viz-ink); }
  .fx-legend__swatch[data-role="accent"] { --_c: var(--fx-viz-accent); }
  .fx-legend__swatch[data-role="risk"] { --_c: var(--fx-viz-risk); }
  .fx-legend__swatch[data-role="context"] { --_c: var(--fx-viz-context); }
  .fx-legend__swatch[data-shape="dot"] { border-radius: var(--fx-radius-circle); }
  .fx-legend__swatch[data-shape="line"] { block-size: var(--fx-border-width-focus); inline-size: var(--fx-space-4); border-radius: var(--fx-border-width-focus); }
  .fx-legend__label { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-legend__value { color: var(--fx-text-primary); font-variant-numeric: tabular-nums; font-weight: var(--fx-font-weight-medium); }
  button.fx-legend__item { padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); margin-inline: calc(var(--fx-space-2) * -1); border-radius: var(--fx-radius-badge); cursor: pointer; }
  button.fx-legend__item:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  button.fx-legend__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  button.fx-legend__item[aria-pressed="false"] { color: var(--fx-text-tertiary); text-decoration: line-through; }
  button.fx-legend__item[aria-pressed="false"] .fx-legend__swatch { background: var(--fx-viz-track); }
  /* Interaktiv (4.126): data-interactive + data-fx-legend — grafik seriyasini yashiradi (aria-controls → fx-chart data-hidden) */
  .fx-legend[data-interactive] { gap: var(--fx-space-1) var(--fx-space-3); }
  .fx-legend[data-interactive] button.fx-legend__item { min-block-size: var(--fx-size-min-target); margin-inline: 0; }
}

/* lens */
@layer fx.components {
  /* Linza (4.58, Magic UI / Aceternity Lens): rasm ustida kursor atrofidagi doira kattalashtirib koʻrsatiladi — mahsulot
     tafsiloti, xarita, chizma. Xulq — behaviors/lens.js: oyna (.fx-lens__glass) rasm nusxasini --fx-lens-zoom marta katta qilib,
     --fx-lens-x/y nuqtasi atrofida koʻrsatadi. Klaviatura: rasm konteyneri fokuslanadi, oyna markazda chiqadi, strelkalar suradi,
     +/− kattalashtiradi, Esc yopadi. Barmoqda — bosib ushlab surilsa ishlaydi. Harakat kamaytirilsa oyna kursorga silliq
     ergashmaydi (darhol). */
  .fx-lens {
    --fx-lens-x: 50%;
    --fx-lens-y: 50%;
    --fx-lens-zoom: 2;
    --_size: calc(var(--fx-space-12) * 3.5);
    position: relative;
    display: inline-block;
    max-inline-size: 100%;
    overflow: hidden;
    border-radius: var(--fx-radius-surface);
    cursor: zoom-in;
    touch-action: pan-y;
  }
  .fx-lens[data-size="sm"] { --_size: calc(var(--fx-space-12) * 2.5); }
  .fx-lens[data-size="lg"] { --_size: calc(var(--fx-space-12) * 5); }
  .fx-lens > img { display: block; max-inline-size: 100%; block-size: auto; }
  .fx-lens:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-lens__glass {
    position: absolute;
    left: var(--fx-lens-x);
    top: var(--fx-lens-y);
    inline-size: var(--_size);
    block-size: var(--_size);
    translate: -50% -50%;
    overflow: hidden;
    border: var(--fx-border-width-focus) solid var(--fx-bg-surface);
    border-radius: var(--fx-radius-circle);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-lg);
    pointer-events: none;
    opacity: 0;
    scale: var(--fx-motion-scale-enter);
    transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring);
  }
  .fx-lens[data-shape="square"] .fx-lens__glass { border-radius: var(--fx-radius-surface); }
  /* ichki nusxa: kattalashtirilgan rasm, oyna markaziga nuqtani keltiradi */
  .fx-lens__glass > img {
    position: absolute;
    left: 50%;
    top: 50%;
    inline-size: var(--_w);
    max-inline-size: none;
    block-size: var(--_h);
    transform-origin: 0 0;
    translate: calc(var(--_px) * var(--fx-lens-zoom) * -1) calc(var(--_py) * var(--fx-lens-zoom) * -1);
    scale: var(--fx-lens-zoom);
  }
  .fx-lens[data-active] { cursor: none; }
  .fx-lens[data-active] .fx-lens__glass { opacity: 1; scale: 1; }
  .fx-lens__hint { position: absolute; inset-block-end: var(--fx-space-3); inset-inline-end: var(--fx-space-3); padding: var(--fx-space-1) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: color-mix(in oklab, var(--fx-bg-overlay) 70%, transparent); color: var(--fx-bg-static-light); font-size: var(--fx-font-size-xs); pointer-events: none; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-lens[data-active] .fx-lens__hint { opacity: 0; }
  @media (forced-colors: active) { .fx-lens__glass { border-color: CanvasText; } }
}

/* lightbox */
@layer fx.components {
  /* Lightbox: toʻliq ekran <dialog> — katta rasm, yaqinlashtirish, oldingi/keyingi, sanagich, imzo.
     Ichki tuzilmani xulq (behaviors/lightbox.js) oʻzi quradi; rasmlar data-fx-lightbox-target="<dialog id>" bilan ulanadi. */
  .fx-lightbox { inline-size: 100%; max-inline-size: none; block-size: 100%; max-block-size: none; margin: 0; padding: 0; border: 0; background: color-mix(in oklab, var(--fx-bg-overlay) 94%, transparent); color: var(--fx-text-on-brand); opacity: 0; transition: opacity var(--fx-motion-exit-base) var(--fx-ease-exit), display var(--fx-motion-exit-base) allow-discrete, overlay var(--fx-motion-exit-base) allow-discrete; }
  .fx-lightbox[open] { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; opacity: 1; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-lightbox[open] { opacity: 0; } }
  .fx-lightbox::backdrop { background: transparent; }
  .fx-lightbox__bar { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); }
  .fx-lightbox__count { font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-lightbox__actions { display: flex; gap: var(--fx-space-2); }
  .fx-lightbox__stage { position: relative; display: grid; place-items: center; min-block-size: 0; overflow: hidden; touch-action: pan-y; }
  .fx-lightbox__img { max-inline-size: 100%; max-block-size: 100%; object-fit: contain; cursor: zoom-in; transition: scale var(--fx-motion-base) var(--fx-ease-emphasized); user-select: none; -webkit-user-drag: none; }
  .fx-lightbox[data-zoom] .fx-lightbox__img { scale: 2.2; cursor: zoom-out; }
  .fx-lightbox__caption { margin: 0; padding: var(--fx-space-3) var(--fx-space-4) var(--fx-space-4); text-align: center; font-size: var(--fx-font-size-sm); color: color-mix(in oklab, var(--fx-text-on-brand) 82%, transparent); }
  .fx-lightbox__btn { display: inline-grid; place-items: center; inline-size: var(--fx-control-h-md); block-size: var(--fx-control-h-md); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: color-mix(in oklab, var(--fx-text-on-brand) 14%, transparent); color: inherit; font: inherit; font-size: var(--fx-font-size-lg); line-height: 1; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-lightbox__btn:hover { background: color-mix(in oklab, var(--fx-text-on-brand) 26%, transparent); }
  .fx-lightbox__btn:active { scale: var(--fx-motion-press); }
  .fx-lightbox__btn[aria-pressed="true"] { background: var(--fx-bg-brand-solid); }
  .fx-lightbox__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-text-on-brand); outline-offset: var(--fx-border-width-focus); }
  .fx-lightbox__zoom, .fx-lightbox__close { flex: none; }
  .fx-lightbox__nav { position: absolute; inset-block-start: 50%; translate: 0 -50%; z-index: 1; }
  .fx-lightbox__nav[data-dir="prev"] { inset-inline-start: var(--fx-space-4); }
  .fx-lightbox__nav[data-dir="next"] { inset-inline-end: var(--fx-space-4); }
  .fx-lightbox[data-single] .fx-lightbox__nav { display: none; }
}

/* link */
@layer fx.components {
  /* Matn havolasi: brend rangida, tagi chizilgan; tashrif buyurilgani ajralmaydi (ilova ichida chalkashtiradi) */
  .fx-link {
    color: var(--fx-text-brand);
    font-weight: var(--fx-font-weight-medium);
    text-decoration: underline;
    text-decoration-thickness: var(--fx-border-width-default);
    text-underline-offset: calc(var(--fx-space-1) * 0.75);
    border-radius: var(--fx-radius-badge);
    transition: color var(--fx-motion-fast) var(--fx-ease-standard), text-decoration-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-link:hover { text-decoration-color: transparent; }
  .fx-link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-link[data-tone="muted"] { color: var(--fx-text-secondary); }
  /* expressive: tagidagi chiziq chapdan oʻsadi */
  [data-fx-motion="expressive"] .fx-link { text-decoration: none; background: linear-gradient(currentColor, currentColor) 0 100% / 0% var(--fx-border-width-default) no-repeat; transition: color var(--fx-motion-fast) var(--fx-ease-standard), background-size var(--fx-motion-base) var(--fx-ease-enter); }
  [data-fx-motion="expressive"] .fx-link:hover { background-size: 100% var(--fx-border-width-default); }
  /* 4.37 Chiziq chiziladi (opt-in, har qanday harakat rejimida): tinch holatda xira chiziq turadi (havola rangsiz ham ajraladi),
     hover/fokusda toʻliq chiziq boshidan oxiriga chiziladi, chiqishda oxiriga qarab yigʻiladi. Yoʻnalish mantiqiy — RTL’da oʻngdan.
     Ikki qavat: 1) oʻsuvchi chiziq, 2) xira asos. Faqat background-size oʻtadi (pozitsiya darhol almashadi — shu «yigʻilish»ni beradi). */
  .fx-link[data-underline="grow"] {
    --_line: var(--fx-border-width-default);
    text-decoration: none;
    background:
      linear-gradient(currentColor, currentColor) 100% 100% / 0% var(--_line) no-repeat,
      linear-gradient(color-mix(in oklab, currentColor 28%, transparent), color-mix(in oklab, currentColor 28%, transparent)) 0 100% / 100% var(--_line) no-repeat;
    padding-block-end: calc(var(--fx-space-1) / 4);
    box-decoration-break: clone;
    -webkit-box-decoration-break: clone;
    transition: color var(--fx-motion-fast) var(--fx-ease-standard), background-size var(--fx-motion-slow) var(--fx-ease-emphasized);
  }
  .fx-link[data-underline="grow"]:is(:hover, :focus-visible) { background-position: 0 100%, 0 100%; background-size: 100% var(--_line), 100% var(--_line); }
  .fx-link[data-underline="grow"]:dir(rtl) { background-position: 0 100%, 0 100%; }
  .fx-link[data-underline="grow"]:dir(rtl):is(:hover, :focus-visible) { background-position: 100% 100%, 0 100%; }
  .fx-link[data-underline="grow"][data-weight="bold"] { --_line: var(--fx-border-width-focus); }
  /* ---- Kengaytma (2.148, 2.153): tashqi havola ikoni, “Hammasi →” varianti, ixtiyoriy visited, bosmada manzil ---- */
  .fx-link[target="_blank"]::after, .fx-link[data-external]::after { content: ""; display: inline-block; inline-size: 0.85em; block-size: 0.85em; margin-inline-start: calc(var(--fx-space-1) / 2); vertical-align: -0.05em; background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 3H3v10h10v-3 M9 2.5h4.5V7 M13.5 2.5 7.5 8.5' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  /* Mustaqil “Hammasi →” havolasi: chiziqsiz, strelka hoverda siljiydi */
  .fx-link[data-variant="more"] { display: inline-flex; align-items: center; gap: var(--fx-space-1); text-decoration: none; }
  .fx-link[data-variant="more"]::after { content: "→"; transition: translate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-link[data-variant="more"]:dir(rtl)::after { content: "←"; }
  .fx-link[data-variant="more"]:hover { text-decoration: underline; text-decoration-color: currentColor; }
  .fx-link[data-variant="more"]:hover::after { translate: var(--fx-space-1) 0; }
  .fx-link[data-variant="more"]:dir(rtl):hover::after { translate: calc(var(--fx-space-1) * -1) 0; }
  /* Tashrif buyurilgan (faqat kontent/maqola matnida; ilova ichida yoqilmaydi) */
  .fx-link[data-visited]:visited { color: var(--fx-text-secondary); }
  @media print { .fx-link[href^="http"]:not([data-variant="more"])::after { content: " (" attr(href) ")"; display: inline; inline-size: auto; block-size: auto; background: none; mask: none; color: var(--fx-text-secondary); font-size: 0.85em; word-break: break-all; } }
  @media (forced-colors: active) { .fx-link { color: LinkText; } .fx-link[data-underline="grow"] { background: none; text-decoration: underline; } .fx-link:visited { color: VisitedText; } }
}

/* linkpreview */
@layer fx.components {
  /* Havola oldindan koʻrish (4.81): havola ustida (hover ~500 ms, fokus ~300 ms) sahifaning kichik rasmi, sarlavhasi va domeni chiqadi.
     Xulq — hover karta (data-fx-hovercard="<id>" havolada, karta popover="manual"): .fx-linkpreview faqat koʻrinishni beradi —
     shuning uchun bitta elementda ikkala klass: class="fx-hovercard fx-linkpreview". Rasmni oldindan tayyorlang (OG rasm) — brauzerda skrinshot olinmaydi. */
  .fx-linkpreview { inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-space-12) * 6.5)); padding: var(--fx-space-2); }
  .fx-linkpreview__shot { display: block; inline-size: 100%; block-size: auto; aspect-ratio: 1.91 / 1; object-fit: cover; border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); }
  .fx-linkpreview__body { display: grid; gap: var(--fx-space-1); padding: 0 var(--fx-space-2) var(--fx-space-1); }
  .fx-linkpreview__title { margin: 0; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-snug); }
  .fx-linkpreview__desc { display: -webkit-box; margin: 0; overflow: hidden; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .fx-linkpreview__domain { display: inline-flex; align-items: center; gap: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-linkpreview__domain > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: currentColor; }
  .fx-linkpreview[data-size="sm"] { inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-space-12) * 4.5)); }
  .fx-linkpreview[data-size="sm"] .fx-linkpreview__desc { display: none; }
}

/* list */
@layer fx.components {
  /* Roʻyxat qatorlari: chap — belgi/avatar, oʻrtada sarlavha va meta, oʻngda qiymat yoki amal; ajratgich chiziq.
     Butun qator havola boʻlishi mumkin (.fx-list__link). */
  .fx-list { display: grid; margin: 0; padding: 0; list-style: none; }
  .fx-list__item { display: flex; align-items: center; gap: var(--fx-space-3); min-block-size: calc(var(--fx-control-h-md) + var(--fx-space-3)); padding-block: var(--fx-space-2); }
  .fx-list__item + .fx-list__item { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-list__body { display: grid; gap: calc(var(--fx-space-1) / 2); flex: 1; min-inline-size: 0; }
  .fx-list__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); color: var(--fx-text-primary); }
  .fx-list__meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-list__end { flex: none; display: flex; align-items: center; gap: var(--fx-space-2); font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; }
  .fx-list__link { display: flex; align-items: center; gap: var(--fx-space-3); flex: 1; min-inline-size: 0; margin-inline: calc(var(--fx-space-2) * -1); padding: var(--fx-space-2); border-radius: var(--fx-radius-nav); color: inherit; text-decoration: none; }
  .fx-list__link:hover { background: var(--fx-bg-subtle); }
  .fx-list__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-list__item[aria-current="true"] .fx-list__title { color: var(--fx-text-brand); }
  /* Variantlar: belgilanadigan qator (.fx-check), amalli qator (__end ichida tugmalar), ixcham, kartali */
  .fx-list__check { flex: none; }
  .fx-list__item[data-selected] { background: var(--fx-bg-brand-subtle); }
  .fx-list__item[data-selected] .fx-list__title::after { content: " ✓"; }
  .fx-list__item:has(input:checked) { background: var(--fx-bg-brand-subtle); }
  .fx-list__item:has(input:checked) .fx-list__title::after { content: " ✓"; }
  .fx-list__end .fx-btn { opacity: 0.7; }
  .fx-list__item:is(:hover, :focus-within) .fx-list__end .fx-btn { opacity: 1; }
  .fx-list[data-density="compact"] > .fx-list__item { min-block-size: var(--fx-control-h-md); padding-block: var(--fx-space-1); }
  .fx-list[data-variant="card"] { padding-inline: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  /* ---- Kengaytma (2.142, 2.154): leading slot, ajratgichsiz variant, ichki (inset) fokus halqa ---- */
  .fx-list__lead { flex: none; display: grid; place-items: center; inline-size: var(--fx-control-h-sm); color: var(--fx-text-tertiary); }
  .fx-list__lead > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-list[data-divider="none"] > .fx-list__item + .fx-list__item { border-block-start: 0; }
  .fx-list[data-focus="inset"] .fx-list__link:focus-visible { outline-offset: calc(var(--fx-border-width-focus) * -1); }
  @media (forced-colors: active) { .fx-list__item[data-selected], .fx-list__item:has(input:checked) { outline: var(--fx-border-width-default) solid Highlight; } }
}

/* listbox */
@layer fx.components {
  /* Variantlar roʻyxati — combobox va buyruqlar oynasining umumiy qismi. Faol variant (klaviatura) — aria-selected yoki data-active. */
  .fx-listbox { display: grid; gap: calc(var(--fx-space-1) / 2); margin: 0; padding: var(--fx-space-1); list-style: none; overflow: auto; }
  .fx-listbox__group { padding: var(--fx-space-2) var(--fx-space-3) var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-option { display: flex; align-items: center; gap: var(--fx-space-3); min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); padding-inline: var(--fx-space-3); border-radius: var(--fx-radius-nav); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); text-decoration: none; cursor: pointer; }
  .fx-option > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); color: var(--fx-text-tertiary); }
  .fx-option__hint { margin-inline-start: auto; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-option__body { display: grid; min-inline-size: 0; }
  .fx-option__desc { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-option--lg { min-block-size: var(--fx-control-h-md); }
  /* Koʻp tanlov: tanlangan variantda ✓ (rangdan tashqari shakl belgisi) */
  [aria-multiselectable="true"] > .fx-option::after { content: ""; flex: none; margin-inline-start: auto; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  [aria-multiselectable="true"] > .fx-option[aria-selected="true"]::after { opacity: 1; }
  .fx-option[data-create] { color: var(--fx-text-brand); }
  .fx-option:hover, .fx-option[data-active] { background: var(--fx-bg-muted); }
  .fx-option[aria-selected="true"] { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-medium); }
  .fx-option[hidden] { display: none; }
  .fx-listbox__empty { padding: var(--fx-space-6) var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); text-align: center; }
}

/* listpage */
@layer fx.components {
  /* Roʻyxat sahifasi qolipi (PDP «Masdar» ro‘yxat sahifasi): sarlavha → xulosa tasmasi → saqlangan koʻrinishlar → filtr qatori →
     jadval → sahifalash; ommaviy panel (fx-bulkbar) jadval ostida suzadi. Komponentlarni tartibda joylaydi, oʻzi ranglamaydi. */
  .fx-listpage { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-4); align-content: start; min-inline-size: 0; }
  .fx-listpage__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-listpage__title { display: flex; align-items: baseline; gap: var(--fx-space-3); margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); line-height: 1.2; }
  .fx-listpage__n { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-regular); font-variant-numeric: tabular-nums; }
  .fx-listpage__actions { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-listpage__table { min-inline-size: 0; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); overflow: clip; }
  .fx-listpage__table .fx-table-scroll { max-block-size: calc(var(--fx-control-h-lg) * 12); }
  .fx-listpage__foot { padding-inline: var(--fx-space-1); }
  /* Telefonda jadval sigʻmasa — oʻz hududida aylanadi (WDS «Dashboard»), sahifa emas */
  @media (max-width: 40rem) { .fx-listpage__actions { inline-size: 100%; } }
}

/* loading */
@layer fx.components {
  /* Yuklanish qoplamasi (#70): blok ustida xira qatlam + aylana, kontent joyida qoladi. Ota aria-busy="true" boʻlsa koʻrinadi;
     ostidagi kontent bilan inert (kontent oʻramiga yozing) — fokus/bosish ketmasin. */
  .fx-loading { position: relative; }
  .fx-loading__overlay {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: none;
    place-content: center;
    justify-items: center;
    gap: var(--fx-space-2);
    background: color-mix(in oklab, var(--fx-bg-page) 70%, transparent);
    border-radius: inherit;
    color: var(--fx-text-secondary);
    font-size: var(--fx-font-size-sm);
    opacity: 0;
    transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete;
  }
  .fx-loading[aria-busy="true"] > .fx-loading__overlay { display: grid; opacity: 1; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-loading[aria-busy="true"] > .fx-loading__overlay { opacity: 0; } }
  .fx-loading[data-variant="blur"] > .fx-loading__overlay { backdrop-filter: blur(var(--fx-space-1)); }
  .fx-loading[data-scope="page"] > .fx-loading__overlay { position: fixed; z-index: 50; border-radius: 0; }
  .fx-loading__text { margin: 0; }
  .fx-loading[aria-busy="true"] > .fx-loading__content { user-select: none; }
}

/* logos */
@layer fx.components {
  /* Logolar bulutiga ishonch (4.175): «… jamoalar ishonadi» + mijoz logolari qatori. Logolar kulrang va xira,
     hover/fokusda asl rangiga qaytadi. data-layout: row (standart), grid (katakli, chegarali). Harakatli variant — .fx-marquee
     ichida (.fx-logos__list = .fx-marquee__track). Logo — SVG (currentColor) yoki rasm. */
  .fx-logos { display: grid; justify-items: center; gap: var(--fx-space-6); }
  .fx-logos__title { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); text-align: center; text-wrap: balance; }
  .fx-logos__list { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--fx-space-6) var(--fx-space-12); margin: 0; padding: 0; list-style: none; }
  .fx-marquee .fx-logos__list { flex-wrap: nowrap; }
  .fx-logos__item {
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-2);
    color: var(--fx-text-tertiary);
    font-size: var(--fx-font-size-lg);
    font-weight: var(--fx-font-weight-semibold);
    letter-spacing: -0.02em;
    white-space: nowrap;
    text-decoration: none;
    opacity: 0.8;
    filter: grayscale(1);
    transition: color var(--fx-motion-base) var(--fx-ease-standard), opacity var(--fx-motion-base) var(--fx-ease-standard), filter var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-logos__item > :is(svg, img) { flex: none; block-size: calc(var(--fx-size-icon-lg) * 1.2); inline-size: auto; }
  .fx-logos__item:is(:hover, :focus-visible) { color: var(--fx-text-primary); opacity: 1; filter: none; }
  a.fx-logos__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-space-1); border-radius: var(--fx-radius-badge); }
  /* katakli: chegarali toʻr, har katak markazda */
  .fx-logos[data-layout="grid"] .fx-logos__list {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.55), 1fr));
    gap: var(--fx-border-width-default);
    inline-size: 100%;
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-border-color-default);
  }
  .fx-logos[data-layout="grid"] .fx-logos__list > li { box-sizing: border-box; display: grid; place-items: center; text-align: center; min-block-size: calc(var(--fx-space-12) * 2); padding: var(--fx-space-4); background: var(--fx-bg-page); }
  .fx-logos[data-layout="grid"] .fx-logos__item { white-space: normal; }
  .fx-logos[data-tone="color"] .fx-logos__item { filter: none; opacity: 1; color: var(--fx-text-secondary); }
  @media (forced-colors: active) { .fx-logos__item { filter: none; opacity: 1; } }
}

/* magnet */
@layer fx.components {
  /* Magnit tugma (4.57, Aceternity Magnetic Button): kursor tugmaga yaqinlashganda tugma unga biroz tortiladi, ichidagi yozuv
     (.fx-magnet__label) yana biroz koʻproq — qatlamli «tirik» his. Siljish --fx-magnet-x/y (JS, behaviors/magnet.js) —
     maydon tugma atrofida (data-range, standart tugma oʻlchamining yarmi), kuch data-strength (standart 0,35), chegarasi —
     --fx-space-3 (tugma «qochib» ketmaydi). Kursor ketsa — prujina bilan joyiga qaytadi.
     Faqat sichqoncha; klaviatura, barmoq, harakat kamaytirilgan, calm va none — tugma joyida, odatdagidek ishlaydi. */
  [data-fx-magnet] {
    --fx-magnet-x: 0px;
    --fx-magnet-y: 0px;
    translate: var(--fx-magnet-x) var(--fx-magnet-y);
    transition: translate var(--fx-motion-slower) var(--fx-ease-bounce);
  }
  [data-fx-magnet][data-pulling] { transition: translate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-magnet__label { display: inline-flex; align-items: center; gap: inherit; translate: calc(var(--fx-magnet-x) * 0.4) calc(var(--fx-magnet-y) * 0.4); transition: inherit; }
  /* doira CTA: «Boshlash →» kabi katta yumaloq tugma (landing) */
  [data-fx-magnet][data-shape="orb"] { inline-size: calc(var(--fx-control-h-lg) * 2.25); block-size: calc(var(--fx-control-h-lg) * 2.25); border-radius: var(--fx-radius-circle); padding: 0; font-size: var(--fx-font-size-md); }
  @media (forced-colors: active) { [data-fx-magnet] { translate: none; } }
}

/* mapmarker */
@layer fx.components {
  /* Xarita markeri (4.206, Base Web «Map Marker», Aceternity «3D Pin»): xarita kutubxonasi (MapLibre, Leaflet, Yandex) ustiga
     HTML marker sifatida qoʻyiladigan tugma. data-type: pin (standart — tomchi shaklli, ichida ikon/harf, uchi nuqtaga tegadi) ·
     price (narx tabletkasi, pastida uchburchak — eʼlon/kvartira xaritasi) · dot (oddiy nuqta, «Siz shu yerdasiz» — data-pulse bilan) ·
     cluster (yaqin markerlar soni — doira, data-size sm/md/lg). Tanlangan — aria-pressed="true": kattaroq, brend rangida, oq halqa
     (shakl ham oʻzgaradi). Hover/fokusda nom yorligʻi (.fx-mapmarker__tip) chiqadi. Rang data-color (6 pastel). Namuna maydoni
     .fx-mapmarker__map — haqiqiy xaritasiz koʻrsatish uchun; joy --fx-mapmarker-x / --fx-mapmarker-y bilan. */
  .fx-mapmarker__map {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    min-block-size: calc(var(--fx-space-12) * 8);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background:
      linear-gradient(90deg, var(--fx-viz-grid) var(--fx-border-width-default), transparent 0) 0 0 / calc(var(--fx-space-12) * 1.5) 100%,
      linear-gradient(var(--fx-viz-grid) var(--fx-border-width-default), transparent 0) 0 0 / 100% calc(var(--fx-space-12) * 1.5),
      var(--fx-bg-subtle);
  }
  .fx-mapmarker {
    --fx-mapmarker-x: 50%;
    --fx-mapmarker-y: 50%;
    --_c: var(--fx-bg-surface);
    --_ink: var(--fx-text-primary);
    position: relative;
    display: inline-grid;
    place-items: center;
    padding: 0;
    border: 0;
    background: none;
    color: var(--_ink);
    font: inherit;
    cursor: pointer;
    translate: -50% -100%;
    transition: scale var(--fx-motion-fast) var(--fx-ease-spring), translate var(--fx-motion-base) var(--fx-ease-spring);
  }
  .fx-mapmarker__map > .fx-mapmarker { position: absolute; inset-inline-start: var(--fx-mapmarker-x); inset-block-start: var(--fx-mapmarker-y); }
  .fx-mapmarker:focus-visible { outline: none; }
  .fx-mapmarker:focus-visible .fx-mapmarker__body { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-mapmarker:hover, .fx-mapmarker:focus-visible { z-index: var(--fx-z-raised); }
  .fx-mapmarker:active { scale: var(--fx-motion-press); }
  /* pin: tomchi — doira, bir burchagi oʻtkir, 45° burilgan */
  .fx-mapmarker__body {
    display: grid;
    place-items: center;
    inline-size: var(--fx-control-h-md);
    block-size: var(--fx-control-h-md);
    border: var(--fx-border-width-focus) solid var(--fx-bg-surface);
    border-radius: var(--fx-radius-circle) var(--fx-radius-circle) var(--fx-radius-circle) 0;
    background: var(--_c);
    box-shadow: var(--fx-shadow-md);
    rotate: -45deg;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring);
  }
  .fx-mapmarker__body > * { rotate: 45deg; }
  .fx-mapmarker__body svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-mapmarker__glyph { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1; }
  .fx-mapmarker[data-color="yellow"] { --_c: var(--fx-bg-category-yellow); --_ink: var(--fx-text-on-category); }
  .fx-mapmarker[data-color="pink"] { --_c: var(--fx-bg-category-pink); --_ink: var(--fx-text-on-category); }
  .fx-mapmarker[data-color="blue"] { --_c: var(--fx-bg-category-blue); --_ink: var(--fx-text-on-category); }
  .fx-mapmarker[data-color="coral"] { --_c: var(--fx-bg-category-coral); --_ink: var(--fx-text-on-category); }
  .fx-mapmarker[data-color="green"] { --_c: var(--fx-bg-category-green); --_ink: var(--fx-text-on-category); }
  .fx-mapmarker[data-color="purple"] { --_c: var(--fx-bg-category-purple); --_ink: var(--fx-text-on-category); }
  /* tanlangan: brend, kattaroq, ichida oq halqa */
  .fx-mapmarker[aria-pressed="true"] { --_c: var(--fx-bg-brand-solid); --_ink: var(--fx-text-on-brand); z-index: var(--fx-z-raised); translate: -50% calc(-100% - var(--fx-space-1)); }
  .fx-mapmarker[aria-pressed="true"] .fx-mapmarker__body { scale: 1.25; }
  /* nom yorligʻi: hover, fokus va tanlanganda */
  .fx-mapmarker__tip {
    position: absolute;
    inset-block-end: calc(100% + var(--fx-space-2));
    inset-inline-start: 50%;
    translate: -50% var(--fx-motion-shift-sm);
    padding: var(--fx-space-1) var(--fx-space-2);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-md);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-medium);
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), translate var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-mapmarker:is(:hover, :focus-visible, [aria-pressed="true"]) .fx-mapmarker__tip { opacity: 1; translate: -50% 0; }
  .fx-mapmarker__tip > small { display: block; color: var(--fx-text-secondary); font-weight: var(--fx-font-weight-regular); }
  /* price: narx tabletkasi + uchburchak dumi */
  .fx-mapmarker[data-type="price"] .fx-mapmarker__body { inline-size: auto; block-size: auto; padding: var(--fx-space-1) var(--fx-space-2); border-width: var(--fx-border-width-default); border-color: var(--fx-border-color-surface); border-radius: var(--fx-radius-pill); rotate: none; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-mapmarker[data-type="price"] .fx-mapmarker__body > * { rotate: none; }
  .fx-mapmarker[data-type="price"]::after { content: ""; inline-size: var(--fx-space-2); block-size: var(--fx-space-2); margin-block-start: calc(var(--fx-space-1) * -1); background: var(--_c); clip-path: polygon(0 0, 100% 0, 50% 100%); }
  .fx-mapmarker[data-type="price"][aria-pressed="true"] .fx-mapmarker__body { scale: 1.1; border-color: var(--_c); }
  .fx-mapmarker[data-type="price"][data-seen] .fx-mapmarker__body { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  /* dot: «siz shu yerdasiz» — markazga tegadi */
  .fx-mapmarker[data-type="dot"] { translate: -50% -50%; }
  .fx-mapmarker[data-type="dot"] .fx-mapmarker__body { inline-size: var(--fx-space-4); block-size: var(--fx-space-4); border-radius: var(--fx-radius-circle); background: var(--fx-fg-info); rotate: none; }
  .fx-mapmarker[data-pulse]::before { content: ""; position: absolute; inset: calc(var(--fx-space-3) * -1); border-radius: var(--fx-radius-circle); background: color-mix(in oklab, var(--fx-fg-info) 25%, transparent); animation: fx-mapmarker-pulse calc(var(--fx-duration-pulse) * max(var(--fx-knob-motion-loop), 0.001)) var(--fx-ease-standard) infinite; }
  /* cluster: son, oʻlcham boʻyicha */
  .fx-mapmarker[data-type="cluster"] { translate: -50% -50%; }
  .fx-mapmarker[data-type="cluster"] .fx-mapmarker__body { inline-size: var(--fx-control-h-md); block-size: var(--fx-control-h-md); border-radius: var(--fx-radius-circle); rotate: none; background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); outline: var(--fx-space-1) solid color-mix(in oklab, var(--fx-bg-brand-solid) 25%, transparent); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; }
  .fx-mapmarker[data-type="cluster"] .fx-mapmarker__body > * { rotate: none; }
  .fx-mapmarker[data-type="cluster"][data-size="sm"] .fx-mapmarker__body { inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); font-size: var(--fx-font-size-xs); }
  .fx-mapmarker[data-type="cluster"][data-size="lg"] .fx-mapmarker__body { inline-size: var(--fx-control-h-lg); block-size: var(--fx-control-h-lg); outline-width: var(--fx-space-2); }
  .fx-mapmarker[data-type="cluster"]:hover .fx-mapmarker__body { scale: 1.08; }
  @keyframes fx-mapmarker-pulse { from { scale: 0.4; opacity: 1; } to { scale: 1.6; opacity: 0; } }
  @media (prefers-reduced-motion: reduce) { .fx-mapmarker[data-pulse]::before { animation: none; opacity: 0.6; } }
  @media (forced-colors: active) { .fx-mapmarker__body { border-color: CanvasText; forced-color-adjust: none; } .fx-mapmarker[aria-pressed="true"] .fx-mapmarker__body { background: Highlight; color: HighlightText; } }
}

/* markdown */
@layer fx.components {
  /* Markdown muharrir (4.91): yuqorida «Yozish / Koʻrish» tablari (fx-tabs) va formatlash paneli (fx-toolbar, APG toolbar),
     ostida textarea (@ bilan eslatish — fx-mention, rasm/faylni tashlash yoki joylash), «Koʻrish»da xavfsiz HTML (fx-prose).
     Pastda maslahat va fayl biriktirish. Xulq: foxui.js → markdown (+ tabs, toolbar, mention). */
  .fx-markdown { display: grid; border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-field-multiline); background: var(--fx-bg-field); color: var(--fx-text-primary); transition: border-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-markdown:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-markdown[data-over] { border-style: dashed; border-color: var(--fx-border-color-focus); background: var(--fx-bg-brand-subtle); }
  .fx-markdown__bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-2); padding: var(--fx-space-1) var(--fx-space-2); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-markdown__bar > .fx-tabs { overflow: visible; }
  .fx-markdown__tool { display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-markdown__tool > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-markdown__tool:hover:not(:disabled) { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-markdown__tool:active:not(:disabled) { scale: var(--fx-motion-press); }
  .fx-markdown__tool:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-markdown__tool:disabled { color: var(--fx-text-disabled); cursor: default; }
  .fx-markdown__panel { min-inline-size: 0; }
  .fx-markdown__panel[hidden] { display: none; }
  .fx-markdown__panel .fx-mention { display: block; }
  .fx-markdown__input { display: block; inline-size: 100%; min-block-size: calc(var(--fx-control-h-md) * 3.5); box-sizing: border-box; padding: var(--fx-space-3) var(--fx-space-4); border: 0; background: transparent; color: var(--fx-text-primary); font: inherit; font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); line-height: 1.6; resize: vertical; field-sizing: content; max-block-size: calc(var(--fx-control-h-md) * 12); }
  .fx-markdown__input:focus { outline: none; }
  .fx-markdown__input::placeholder { color: var(--fx-text-tertiary); font-family: var(--fx-font-family-sans); font-size-adjust: var(--fx-font-adjust-sans); }
  .fx-markdown__preview { min-block-size: calc(var(--fx-control-h-md) * 3.5); max-inline-size: none; padding: var(--fx-space-3) var(--fx-space-4); }
  .fx-markdown__preview > :first-child { margin-block-start: 0; }
  .fx-markdown__preview:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-markdown__empty { color: var(--fx-text-tertiary); font-style: italic; }
  .fx-markdown__mention { padding: 0 calc(var(--fx-space-1) / 2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-weight: var(--fx-font-weight-medium); }
  .fx-markdown__preview img { max-inline-size: 100%; border-radius: var(--fx-radius-control); }
  .fx-markdown__task { list-style: none; margin-inline-start: calc(var(--fx-space-5) * -1); }
  .fx-markdown__task::before { content: "☐ "; }
  .fx-markdown__task[data-done]::before { content: "☑ "; }
  .fx-markdown__task[data-done] { color: var(--fx-text-secondary); text-decoration: line-through; }
  .fx-markdown__foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-2); padding: var(--fx-space-2) var(--fx-space-3); border-block-start: var(--fx-border-width-default) dashed var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-markdown__attach { display: inline-flex; align-items: center; gap: var(--fx-space-1); color: var(--fx-text-secondary); cursor: pointer; }
  .fx-markdown__attach:hover { color: var(--fx-text-primary); }
  .fx-markdown__attach:has(:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-markdown__attach > input { position: absolute; inline-size: 1px; block-size: 1px; opacity: 0; }
  .fx-markdown__attach > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
}

/* marquee */
@layer fx.components {
  /* Yugurik qator (4.71, #108): logolar yoki fikrlar cheksiz suriladi. foxui.js (data-fx-marquee) tasma ichini bir marta nusxalaydi
     (nusxa aria-hidden + inert) va tezlikni kenglikdan hisoblaydi — tezlik har ekranda bir xil. Hover yoki fokusda pauza,
     ekrandan chiqsa toʻxtaydi. JS boʻlmasa, harakat kamaytirilsa yoki data-fx-motion="none" — oddiy gorizontal scroll (nusxasiz). */
  .fx-marquee {
    --_gap: var(--fx-space-8);
    --_dur: calc(var(--fx-duration-pulse) * 20);
    --_fade: calc(var(--fx-space-12) * 1.5);
    position: relative;
    display: flex;
    overflow-x: auto;
    scrollbar-width: none;
    mask: linear-gradient(to right, transparent, black var(--_fade), black calc(100% - var(--_fade)), transparent);
  }
  .fx-marquee::-webkit-scrollbar { display: none; }
  .fx-marquee__track {
    display: flex;
    flex: none;
    align-items: center;
    gap: var(--_gap);
    min-inline-size: max-content;
    margin: 0;
    padding: 0 var(--_gap) 0 0;
    list-style: none;
  }
  .fx-marquee__track > * { flex: none; }
  .fx-marquee[data-fx-ready~="marquee"] { overflow: hidden; }
  .fx-marquee[data-fx-ready~="marquee"] .fx-marquee__track { animation: fx-marquee-x var(--_dur) linear infinite; }
  .fx-marquee[data-direction="reverse"] .fx-marquee__track { animation-direction: reverse; }
  .fx-marquee:is(:hover, :focus-within, [data-paused], [data-stopped]) .fx-marquee__track { animation-play-state: paused; }
  .fx-marquee[data-pause="none"]:not([data-paused], [data-stopped]) .fx-marquee__track { animation-play-state: running; }
  .fx-marquee[data-gap="sm"] { --_gap: var(--fx-space-4); }
  .fx-marquee[data-gap="lg"] { --_gap: var(--fx-space-12); }
  @keyframes fx-marquee-x { to { translate: -100% 0; } }
  /* vertikal: fikrlar ustuni (balandlik ota yoki --fx-marquee-height bilan) */
  .fx-marquee[data-orientation="vertical"] {
    --fx-marquee-height: calc(var(--fx-space-12) * 10);
    flex-direction: column;
    block-size: var(--fx-marquee-height);
    overflow: hidden auto;
    mask: linear-gradient(to bottom, transparent, black var(--_fade), black calc(100% - var(--_fade)), transparent);
  }
  .fx-marquee[data-orientation="vertical"] .fx-marquee__track { flex-direction: column; align-items: stretch; min-inline-size: 0; padding: 0 0 var(--_gap); }
  .fx-marquee[data-orientation="vertical"][data-fx-ready~="marquee"] .fx-marquee__track { animation-name: fx-marquee-y; }
  @keyframes fx-marquee-y { to { translate: 0 -100%; } }
  /* RTL: tasma teskari tomonga */
  .fx-marquee:dir(rtl) .fx-marquee__track { animation-direction: reverse; }
  .fx-marquee[data-direction="reverse"]:dir(rtl) .fx-marquee__track { animation-direction: normal; }
  /* pauza tugmasi (ixtiyoriy, WCAG 2.2.2): qatordan tashqarida (mask uni soʻndirmasin), aria-controls = qator id */
  .fx-marquee__toggle[aria-pressed="true"] { color: var(--fx-text-primary); }
  /* harakatsiz: animatsiya yoʻq, nusxa yashirin, oddiy scroll */
  [data-fx-motion="none"] .fx-marquee .fx-marquee__track[data-clone] { display: none; }
  [data-fx-motion="none"] .fx-marquee[data-fx-ready~="marquee"] { overflow-x: auto; }
  [data-fx-motion="none"] .fx-marquee[data-fx-ready] .fx-marquee__track { animation: none; }
  @media (prefers-reduced-motion: reduce) {
    .fx-marquee[data-fx-ready~="marquee"] { overflow-x: auto; }
    .fx-marquee[data-orientation="vertical"][data-fx-ready~="marquee"] { overflow-y: auto; }
    .fx-marquee[data-fx-ready] .fx-marquee__track { animation: none; }
    .fx-marquee .fx-marquee__track[data-clone], .fx-marquee__toggle { display: none; }
  }
}

/* mask */
@layer fx.components {
  /* Maskali kiritish (telefon, karta): raqamlar tabular. Xulq foxui.js’da (data-fx-mask="+998 (##) ###-##-##"); toʻlgan boʻlsa input’da data-complete. */
  :is(.fx-input, .fx-input-group__control)[data-fx-mask] { font-variant-numeric: tabular-nums; }
}

/* masonry */
@layer fx.components {
  /* Masonry (4.73): balandligi har xil kartalar ustunlarga zich joylanadi. Brauzer CSS masonry’ni bilsa (grid-lanes yoki
     grid-template-rows: masonry) — qator tartibida; bilmasa — zaxira: CSS ustunlar (multi-column), tartib ustun boʻylab yuqoridan pastga.
     Ustun soni — kenglikka qarab avtomatik (eng tor ustun ~ 15rem), data-cols bilan yuqori chegara. JS yoʻq. */
  .fx-masonry {
    --_cols: 4;
    --_min: calc(var(--fx-space-12) * 5);
    --_gap: var(--fx-space-4);
    columns: var(--_cols) var(--_min);
    column-gap: var(--_gap);
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .fx-masonry > * { break-inside: avoid; margin-block: 0 var(--_gap); }
  .fx-masonry[data-cols="2"] { --_cols: 2; }
  .fx-masonry[data-cols="3"] { --_cols: 3; }
  .fx-masonry[data-cols="5"] { --_cols: 5; }
  .fx-masonry[data-gap="sm"] { --_gap: var(--fx-space-2); }
  .fx-masonry[data-gap="lg"] { --_gap: var(--fx-space-6); }
  .fx-masonry__item { display: block; overflow: hidden; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-masonry__item > img { display: block; inline-size: 100%; block-size: auto; }
  .fx-masonry__body { display: grid; gap: var(--fx-space-1); padding: var(--fx-space-3) var(--fx-space-4); font-size: var(--fx-font-size-sm); }
  .fx-masonry__meta { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  @supports (grid-template-rows: masonry) {
    .fx-masonry { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_min)), 1fr)); grid-template-rows: masonry; gap: var(--_gap); columns: auto; }
    .fx-masonry > * { margin: 0; }
  }
  @supports (display: grid-lanes) {
    .fx-masonry { display: grid-lanes; grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_min)), 1fr)); gap: var(--_gap); columns: auto; }
    .fx-masonry > * { margin: 0; }
  }
}

/* members */
@layer fx.components {
  /* Jamoa aʼzolari va takliflar (4.186, naqsh): tepada oʻrinlar hisobi, email bilan taklif formasi (rol tanlash bilan),
     ostida aʼzolar jadvali — rol, holat (Faol / Kutilmoqda — fx-status: nuqta + soʻz), oxirgi faollik, amallar.
     Kutilayotgan taklif — chiziq bilan ajratilgan qator va «Qayta yuborish / Bekor qilish». Xulq: foxui.js → members. */
  .fx-members { display: grid; gap: var(--fx-space-5); }
  .fx-members__head { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: var(--fx-space-3) var(--fx-space-6); }
  .fx-members__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); }
  .fx-members__text { margin: var(--fx-space-1) 0 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-members__seats { display: grid; gap: var(--fx-space-1); min-inline-size: calc(var(--fx-space-12) * 4); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-members__seats > b { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-members__invite { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, calc(var(--fx-space-12) * 3)) auto; align-items: end; gap: var(--fx-space-3); padding: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); }
  .fx-members__invite[data-full] { opacity: 0.6; }
  .fx-members__msg { grid-column: 1 / -1; margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-members__msg:empty { display: none; }
  .fx-members__msg[data-tone="error"] { color: var(--fx-text-error); }
  .fx-members__msg[data-tone="error"]::before { content: "! "; font-weight: var(--fx-font-weight-semibold); }
  .fx-members__msg[data-tone="success"]::before { content: "✓ "; color: var(--fx-fg-success); }
  .fx-members__table td { vertical-align: middle; }
  .fx-members__row[data-state="pending"] .fx-persona__name { color: var(--fx-text-secondary); font-style: italic; }
  .fx-members__row[data-state="pending"] > td:first-child { border-inline-start: var(--fx-border-width-focus) dashed var(--fx-border-color-strong); }
  .fx-members__row[data-state="removing"] { opacity: 0; transition: opacity var(--fx-motion-exit-base) var(--fx-ease-exit); }
  .fx-members__row:is([data-state="new"]) { animation: fx-fade-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-members__role { inline-size: auto; min-inline-size: calc(var(--fx-space-12) * 2.5); }
  .fx-members__owner { color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-members__actions { display: flex; justify-content: flex-end; gap: var(--fx-space-1); white-space: nowrap; }
  .fx-members__when { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; white-space: nowrap; }
  @media (max-width: 40em) {
    .fx-members__invite { grid-template-columns: minmax(0, 1fr); }
    .fx-members__table .fx-members__when { display: none; }
  }
}

/* mention */
@layer fx.components {
  /* Mention: matn maydonida «@» yozilsa roʻyxat ochiladi; ↑ ↓ Enter/Tab — tanlaydi, Esc — yopadi (foxui.js). Roʻyxat maydon ostida. */
  .fx-mention { position: relative; display: block; }
  .fx-mention__popup { position: absolute; inset-inline: 0; inset-block-start: calc(100% + var(--fx-space-1)); z-index: 20; max-block-size: calc(var(--fx-control-h-sm) * 6); overflow: auto; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); }
  .fx-mention__popup[hidden] { display: none; }
}

/* menu */
@layer fx.components {
  /* Menyu: native popover + anchor (popover kabi joylashadi), ichida bandlar; xulq — foxui.js (data-fx-menu) */
  .fx-menu {
    min-inline-size: calc(var(--fx-popover-width) * 0.6);
    max-inline-size: min(100vw - var(--fx-space-8), var(--fx-popover-width));
    margin: 0;
    padding: var(--fx-space-1);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-lg);
    font-size: var(--fx-font-size-sm);
    overflow: visible; /* ichki menyu chetga chiqadi */
  }
  .fx-menu:popover-open { display: grid; gap: var(--fx-space-1); }
  /* Kirish va chiqish (WDS «Harakat»: har kirishning chiqishi bor; chiqish ~30 % tez) */
  .fx-menu { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 calc(var(--fx-motion-shift-sm) * -1); transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), scale var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete, overlay var(--fx-motion-exit-fast) allow-discrete; }
  .fx-menu:popover-open { opacity: 1; scale: 1; translate: 0 0; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-menu:popover-open { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 calc(var(--fx-motion-shift-sm) * -1); } }
  .fx-menu { transform-origin: top left; }
  @supports (position-area: block-end) {
    .fx-menu { inset: auto; position-area: block-end span-inline-end; position-try-fallbacks: flip-block, flip-inline; margin-block: var(--fx-space-1); }
  }
  .fx-menu__item {
    display: flex;
    align-items: center;
    gap: var(--fx-space-2);
    min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1));
    padding-inline: var(--fx-space-3);
    border: 0;
    border-radius: var(--fx-radius-nav);
    background: transparent;
    color: inherit;
    font: inherit;
    text-align: start;
    text-decoration: none;
    cursor: pointer;
  }
  .fx-menu__item:hover, .fx-menu__item:focus-visible { background: var(--fx-bg-muted); outline: none; }
  .fx-menu__item > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); color: var(--fx-text-tertiary); }
  .fx-menu__item[data-tone="danger"] { color: var(--fx-text-error); }
  .fx-menu__item[aria-disabled="true"] { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-menu__item[aria-disabled="true"]:hover { background: transparent; }
  /* Belgilanadigan band: oʻngda belgi */
  .fx-menu__item[aria-checked]::after { content: ""; margin-inline-start: auto; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: var(--fx-text-brand); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5 6.5 11.5 12.5 4.5' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; opacity: 0; }
  .fx-menu__item[aria-checked="true"]::after { opacity: 1; }
  .fx-menu__kbd { margin-inline-start: auto; color: var(--fx-text-tertiary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); }
  .fx-menu__title { padding: var(--fx-space-2) var(--fx-space-3) var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-menu__sep { block-size: var(--fx-border-width-default); margin: var(--fx-space-1) calc(var(--fx-space-1) * -1); border: 0; background: var(--fx-border-color-default); }
  /* Ichki menyu (2.129): band + yoniga ochiladigan .fx-menu__sub; chevron — ::after */
  .fx-menu__subwrap { position: relative; display: grid; }
  .fx-menu__subwrap > .fx-menu__item[aria-haspopup="menu"]::after { content: ""; margin-inline-start: auto; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: var(--fx-text-tertiary); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 3.5 10.5 8 6 12.5' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-menu__subwrap > .fx-menu__item[aria-expanded="true"] { background: var(--fx-bg-muted); }
  .fx-menu__sub { position: absolute; inset-block-start: calc(var(--fx-space-1) * -2); inset-inline-start: calc(100% + var(--fx-space-1)); z-index: 1; display: grid; gap: var(--fx-space-1); min-inline-size: calc(var(--fx-popover-width) * 0.6); padding: var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); }
  .fx-menu__sub[hidden] { display: none; }
  .fx-menu__sub[data-flip] { inset-inline-start: auto; inset-inline-end: calc(100% + var(--fx-space-1)); }
  /* Menyu ichida qidiruv (2.131): tepada maydon, ostida chiziq; topilmasa — .fx-menu__empty */
  .fx-menu__search { box-sizing: border-box; inline-size: 100%; block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); padding-inline: var(--fx-space-3); border: 0; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: 0; background: transparent; color: inherit; font: inherit; }
  .fx-menu__search:focus { outline: none; border-block-end-color: var(--fx-border-color-focus); }
  .fx-menu__search::placeholder { color: var(--fx-text-tertiary); }
  .fx-menu__empty { padding: var(--fx-space-4) var(--fx-space-3); color: var(--fx-text-tertiary); text-align: center; }
  .fx-menu__empty[hidden], .fx-menu__item[hidden], .fx-menu__title[hidden], .fx-menu__sep[hidden], .fx-menu__subwrap[hidden] { display: none; }
}
@layer fx.components {
  /* Moslashuvchi overlay (4.26): data-fx-adaptive — telefonda (< 640 px) menyu pastki varaqqa aylanadi: toʻliq en, pastdan chiqadi, fon xiralashadi,
     tepada tutqich chizigʻi; kompyuterda — oddiy menyu. Barmoq uchun bandlar balandroq. Atribut faqat CSS — xulq oʻzgarmaydi. */
  @media (max-width: 640px) {
    .fx-menu[data-fx-adaptive] { position: fixed; inset: auto 0 0 0; box-sizing: border-box; inline-size: 100%; max-inline-size: 100%; min-inline-size: 0; max-block-size: 85dvh; margin: 0; padding-block-end: calc(var(--fx-space-4) + env(safe-area-inset-bottom, 0px)); border-radius: var(--fx-radius-overlay) var(--fx-radius-overlay) 0 0; overflow: auto; position-area: none; position-try-fallbacks: none; translate: 0 100%; scale: 1; transform-origin: bottom center; }
    .fx-menu[data-fx-adaptive]:popover-open { translate: 0 0; transition-timing-function: var(--fx-ease-sheet); transition-duration: var(--fx-motion-slow); }
    @starting-style { .fx-menu[data-fx-adaptive]:popover-open { translate: 0 100%; } }
    .fx-menu[data-fx-adaptive]::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 40%, transparent); }
    .fx-menu[data-fx-adaptive]::before { content: ""; display: block; inline-size: var(--fx-space-8); block-size: var(--fx-space-1); margin: 0 auto var(--fx-space-3); border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); position: static; rotate: none; border: 0; }
    .fx-menu[data-fx-adaptive] .fx-menu__item { min-block-size: var(--fx-size-touch-target); }
  }
}

/* menubar */
@layer fx.components {
  /* Menubar (4-toʻlqin 4.148, APG menubar; shadcn, Mantine, PrimeReact): «Fayl · Tahrir · Koʻrinish» qatori — tahrirlovchi, hisobot
     konstruktori kabi ilova uchun. Ochiluvchi menyu shu qator ostida (top-layer emas, z-dropdown); ichki menyu yon tomonga.
     Xulq (data-fx-menubar): ← → qator boʻylab, ↓ / Enter ochadi, ↑ oxirgi bandni ochadi, Esc yopadi, harf bilan qidirish. */
  .fx-menubar { position: relative; display: inline-block; max-inline-size: 100%; font-size: var(--fx-font-size-sm); color: var(--fx-text-primary); }
  .fx-menubar__bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1); margin: 0; padding: var(--fx-space-1); list-style: none; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); }
  .fx-menubar[data-variant="flat"] .fx-menubar__bar { padding: 0; border-color: transparent; background: transparent; }
  .fx-menubar__entry { position: relative; }
  .fx-menubar__trigger, .fx-menubar__item {
    display: flex;
    align-items: center;
    gap: var(--fx-space-2);
    inline-size: 100%;
    margin: 0;
    border: 0;
    border-radius: var(--fx-radius-nav);
    background: transparent;
    color: inherit;
    font: inherit;
    text-align: start;
    white-space: nowrap;
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-menubar__trigger { min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-2)); padding-inline: var(--fx-space-3); font-weight: var(--fx-font-weight-medium); }
  .fx-menubar__item { min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); padding-inline: var(--fx-space-3); }
  .fx-menubar__trigger:hover, .fx-menubar__item:hover, .fx-menubar__trigger[aria-expanded="true"], .fx-menubar__item[aria-expanded="true"] { background: var(--fx-bg-muted); }
  .fx-menubar__trigger:focus-visible, .fx-menubar__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-menubar__item[aria-disabled="true"] { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-menubar__item[aria-disabled="true"]:hover { background: transparent; }
  .fx-menubar__item[data-tone="danger"] { color: var(--fx-text-error); }
  /* Ochiluvchi menyu: faqat trigger aria-expanded="true" boʻlganda */
  .fx-menubar__menu {
    position: absolute;
    inset-block-start: calc(100% + var(--fx-space-1));
    inset-inline-start: 0;
    z-index: var(--fx-z-dropdown);
    display: none;
    gap: calc(var(--fx-space-1) / 2);
    min-inline-size: calc(var(--fx-popover-width) * 0.6);
    margin: 0;
    padding: var(--fx-space-1);
    list-style: none;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-elevation-3);
    opacity: 0;
    translate: 0 calc(var(--fx-motion-shift-sm) * -1);
    transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete;
  }
  [aria-expanded="true"] + .fx-menubar__menu { display: grid; opacity: 1; translate: 0 0; transition-duration: var(--fx-motion-fast); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { [aria-expanded="true"] + .fx-menubar__menu { opacity: 0; translate: 0 calc(var(--fx-motion-shift-sm) * -1); } }
  /* Ichki menyu — yon tomonga */
  .fx-menubar__menu .fx-menubar__menu { inset-block-start: calc(var(--fx-space-1) * -1); inset-inline-start: calc(100% + var(--fx-space-1)); translate: calc(var(--fx-motion-shift-sm) * -1) 0; }
  .fx-menubar__menu [aria-expanded="true"] + .fx-menubar__menu { translate: 0 0; }
  .fx-menubar__item[aria-haspopup]::after { content: ""; margin-inline-start: auto; inline-size: calc(var(--fx-space-2) - var(--fx-border-width-default)); block-size: calc(var(--fx-space-2) - var(--fx-border-width-default)); border-block-start: calc(var(--fx-border-width-default) * 1.5) solid currentColor; border-inline-end: calc(var(--fx-border-width-default) * 1.5) solid currentColor; rotate: 45deg; opacity: 0.6; }
  :dir(rtl) .fx-menubar__item[aria-haspopup]::after { rotate: -135deg; }
  /* Belgilanadigan band: belgi joyi doim band (matn sakramaydi); tanlangani — shakl (✓ yoki nuqta), rang emas */
  .fx-menubar__item:is([role="menuitemcheckbox"], [role="menuitemradio"])::before { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); text-align: center; }
  .fx-menubar__item[role="menuitemcheckbox"][aria-checked="true"]::before { content: "✓"; }
  .fx-menubar__item[role="menuitemradio"][aria-checked="true"]::before { content: "●"; font-size: 0.7em; }
  .fx-menubar__kbd { margin-inline-start: auto; padding-inline-start: var(--fx-space-6); color: var(--fx-text-tertiary); font: inherit; font-size: var(--fx-font-size-xs); }
  .fx-menubar__sep { block-size: var(--fx-border-width-default); margin: var(--fx-space-1) calc(var(--fx-space-1) * -1); background: var(--fx-border-color-default); }
  .fx-menubar__group { display: contents; }
  .fx-menubar__label { padding: var(--fx-space-1) var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  @media (forced-colors: active) { .fx-menubar__trigger[aria-expanded="true"] { outline: var(--fx-border-width-default) solid; } }
}

/* message */
@layer fx.components {
  /* Suhbat xabari (odam yoki AI agent): avatar, ism va vaqt, matn; foydalanuvchi xabari oʻngda brend tusida.
     «Yozmoqda» — uch nuqta, faqat shaffoflik (WDS «Harakat»). */
  .fx-message { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--fx-space-1) var(--fx-space-3); align-items: start; max-inline-size: 72ch; }
  .fx-message > .fx-avatar { grid-row: span 2; }
  .fx-message__meta { display: flex; align-items: baseline; gap: var(--fx-space-2); font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-message__name { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); font-size: var(--fx-font-size-sm); }
  .fx-message__body { color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); line-height: 1.6; overflow-wrap: anywhere; }
  .fx-message__body > :first-child { margin-block-start: 0; }
  .fx-message__body > :last-child { margin-block-end: 0; }
  .fx-message[data-role="user"] { grid-template-columns: minmax(0, 1fr); justify-items: end; margin-inline-start: auto; }
  .fx-message[data-role="user"] .fx-message__body { padding: var(--fx-space-3) var(--fx-space-4); border-radius: var(--fx-radius-surface); border-end-end-radius: var(--fx-radius-badge); background: var(--fx-bg-brand-subtle); }
  .fx-typing { display: inline-flex; gap: var(--fx-space-1); padding-block: var(--fx-space-2); }
  .fx-typing > i { inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border-radius: var(--fx-radius-circle); background: var(--fx-text-tertiary); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-typing > i:nth-child(2) { animation-delay: calc(var(--fx-duration-pulse) / 6); }
  .fx-typing > i:nth-child(3) { animation-delay: calc(var(--fx-duration-pulse) / 3); }
  @media (prefers-reduced-motion: reduce) { .fx-typing > i { animation: none; } }
  /* AI yorligʻi: kontent AI tomonidan yaratilgani — binafsha toifa tusi (Atlassian «discovery» kabi) */
  .fx-ai-label { display: inline-flex; align-items: center; gap: var(--fx-space-1); padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-category-purple-subtle); color: var(--fx-text-primary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); }
  .fx-ai-label::before { content: "✦"; color: var(--fx-text-brand); }

  /* ---------- Pufakcha varianti (messenjer; PDP Chat): data-variant="bubble" + data-dir="in|out" + data-group="first|mid|last" ----------
     Kiruvchi — neytral quduq, avatar faqat guruh oxirida; chiquvchi — mavzuning och brend tusi + siyoh matn (oq/yashil emas — kontrast).
     Guruhda yaqin burchaklar kichrayadi, oraliq 2 vs 12. Vaqt va yuborish belgisi pufakcha oxirida, matn oqimida. */
  .fx-message[data-variant="bubble"] { --_r: var(--fx-radius-overlay); --_rs: calc(var(--fx-radius-badge) / 1.5); grid-template-columns: var(--fx-size-avatar-md) minmax(0, max-content); column-gap: var(--fx-space-2); max-inline-size: min(78%, 64ch); margin-block-start: var(--fx-space-3); }
  .fx-message[data-variant="bubble"]:is([data-group="mid"], [data-group="last"]) { margin-block-start: calc(var(--fx-space-1) / 2); }
  .fx-message[data-variant="bubble"] > .fx-avatar { grid-row: 1 / span 3; align-self: end; }
  .fx-message[data-variant="bubble"]:is([data-group="first"], [data-group="mid"]) > .fx-avatar { visibility: hidden; }
  .fx-message[data-variant="bubble"] .fx-message__body { grid-column: 2; padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--_r); background: var(--fx-bg-muted); }
  .fx-message[data-variant="bubble"][data-dir="in"]:is([data-group="first"]) .fx-message__body { border-end-start-radius: var(--_rs); }
  .fx-message[data-variant="bubble"][data-dir="in"][data-group="mid"] .fx-message__body { border-start-start-radius: var(--_rs); border-end-start-radius: var(--_rs); }
  .fx-message[data-variant="bubble"][data-dir="in"][data-group="last"] .fx-message__body { border-start-start-radius: var(--_rs); }
  .fx-message[data-variant="bubble"] .fx-message__name { grid-column: 2; font-size: var(--fx-font-size-xs); }
  .fx-message[data-variant="bubble"][data-dir="out"] { grid-template-columns: minmax(0, max-content); justify-content: end; margin-inline-start: auto; }
  .fx-message[data-variant="bubble"][data-dir="out"] .fx-message__body { grid-column: 1; background: var(--fx-bg-brand-subtle); }
  .fx-message[data-variant="bubble"][data-dir="out"][data-group="first"] .fx-message__body { border-end-end-radius: var(--_rs); }
  .fx-message[data-variant="bubble"][data-dir="out"][data-group="mid"] .fx-message__body { border-start-end-radius: var(--_rs); border-end-end-radius: var(--_rs); }
  .fx-message[data-variant="bubble"][data-dir="out"][data-group="last"] .fx-message__body { border-start-end-radius: var(--_rs); }
  .fx-message__time { float: inline-end; display: inline-flex; align-items: center; gap: calc(var(--fx-space-1) / 2); margin: var(--fx-space-1) 0 0 var(--fx-space-3); color: var(--fx-text-tertiary); font-size: calc(var(--fx-font-size-xs) * 0.92); font-variant-numeric: tabular-nums; line-height: 1; }
  /* yuborish holati: soat → ✓ → ✓✓ → ✓✓ brend; xato — soʻz bilan */
  .fx-message__tick { inline-size: var(--fx-size-icon-sm); block-size: calc(var(--fx-size-icon-sm) * 0.75); background: currentColor; mask: center / contain no-repeat; }
  .fx-message__tick[data-s="sending"] { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 12'%3E%3Ccircle cx='8' cy='6' r='4.5' fill='none' stroke='black' stroke-width='1.3'/%3E%3Cpath d='M8 3.8V6l1.4 1' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round'/%3E%3C/svg%3E"); }
  .fx-message__tick[data-s="sent"] { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 12'%3E%3Cpath d='M3 6.5 6 9l6-6.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-message__tick:is([data-s="delivered"], [data-s="read"]) { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 12'%3E%3Cpath d='M1 6.5 4 9l6-6.5M7 8.5l.5.5 6-6.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-message__tick[data-s="read"] { color: var(--fx-text-brand); }
  .fx-message__error { display: flex; align-items: center; gap: var(--fx-space-2); grid-column: 1 / -1; justify-self: end; color: var(--fx-fg-error); font-size: var(--fx-font-size-xs); }
  /* iqtibos, yoʻnaltirilgan, oʻchirilgan, tahrirlangan */
  .fx-message__quote { display: grid; margin-block-end: var(--fx-space-1); padding: var(--fx-space-1) var(--fx-space-2); border-inline-start: calc(var(--fx-border-width-focus) * 1.25) solid var(--fx-text-brand); border-radius: var(--fx-radius-badge); background: color-mix(in oklab, var(--fx-bg-surface) 55%, transparent); font-size: var(--fx-font-size-xs); }
  .fx-message__quote > b { color: var(--fx-text-brand); }
  .fx-message__fwd { margin-block-end: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-style: italic; }
  .fx-message[data-deleted] .fx-message__body { color: var(--fx-text-tertiary); font-style: italic; }
  /* fayl, rasm, ovozli xabar */
  .fx-message__file { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; column-gap: var(--fx-space-3); padding: var(--fx-space-2); border-radius: var(--fx-radius-control); background: color-mix(in oklab, var(--fx-bg-surface) 60%, transparent); color: inherit; text-decoration: none; }
  .fx-message__file > :first-child { display: grid; place-items: center; inline-size: var(--fx-control-h-md); block-size: var(--fx-control-h-md); grid-row: span 2; border-radius: var(--fx-radius-control); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); }
  .fx-message__file small { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-message__media { display: block; inline-size: min(100%, calc(var(--fx-space-12) * 6)); aspect-ratio: 4 / 3; margin: calc(var(--fx-space-1) * -1) calc(var(--fx-space-2) * -1) var(--fx-space-1); border-radius: calc(var(--fx-radius-overlay) - var(--fx-space-1)); object-fit: cover; background: var(--fx-bg-subtle); }
  .fx-message__voice { display: flex; align-items: center; gap: var(--fx-space-2); min-inline-size: calc(var(--fx-space-12) * 4); }
  .fx-message__voice > button { display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); cursor: pointer; }
  .fx-message__voice > button > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: currentColor; }
  .fx-message__wave { flex: 1; block-size: var(--fx-space-6); background: repeating-linear-gradient(90deg, var(--fx-text-secondary) 0 2px, transparent 2px 5px); mask: linear-gradient(transparent 0 0) , url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 24' preserveAspectRatio='none'%3E%3Cpath d='M0 12h4V8h4v8h4V4h4v16h4V9h4v6h4V2h4v20h4V7h4v10h4V5h4v14h4V9h4v6h4V3h4v18h4V8h4v8h4V10h4v4h4V6h4v12h4V9h4v6h4' fill='black'/%3E%3C/svg%3E") center / 100% 100% no-repeat; mask-composite: add; opacity: 0.7; }
  /* reaksiyalar: pill (ikon + son), meniki — brend */
  .fx-reactions { display: flex; flex-wrap: wrap; gap: var(--fx-space-1); grid-column: 2; margin-block-start: var(--fx-space-1); }
  .fx-message[data-dir="out"] .fx-reactions { grid-column: 1; justify-content: end; }
  .fx-reaction { display: inline-flex; align-items: center; gap: var(--fx-space-1); min-block-size: var(--fx-space-6); padding: 0 var(--fx-space-2); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-circle); background: var(--fx-bg-surface); color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-reaction:active { scale: var(--fx-motion-press); }
  .fx-reaction[aria-pressed="true"] { border-color: var(--fx-border-color-focus); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  /* ajratgichlar: sana pill, tizim xabari, «Oʻqilmaganlar» chizigʻi */
  .fx-message-divider { display: flex; align-items: center; gap: var(--fx-space-3); margin-block: var(--fx-space-4); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-message-divider[data-type="date"] { justify-content: center; }
  .fx-message-divider[data-type="date"] > span { padding: var(--fx-space-1) var(--fx-space-3); border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-weight: var(--fx-font-weight-medium); }
  .fx-message-divider[data-type="system"] { justify-content: center; text-align: center; }
  .fx-message-divider[data-type="unread"] { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-message-divider[data-type="unread"]::before, .fx-message-divider[data-type="unread"]::after { content: ""; flex: 1; block-size: var(--fx-border-width-default); background: currentColor; opacity: 0.5; }

  /* ---- Kengaytma (2.149): ketma-ket xabar (avatarsiz), variantlar “2/3”, tahrirlash, xato+qayta urinish, matn ichida kod va jadval ---- */
  .fx-message:not([data-variant="bubble"])[data-group="cont"] { grid-template-columns: minmax(0, 1fr); padding-inline-start: calc(var(--fx-size-avatar-md) + var(--fx-space-3)); margin-block-start: calc(var(--fx-space-2) * -1); }
  .fx-message:not([data-variant="bubble"])[data-group="cont"] > :is(.fx-avatar, .fx-message__meta) { display: none; }
  .fx-message:not([data-variant="bubble"])[data-group="cont"][data-role="user"] { padding-inline-start: 0; }
  /* Variantlar: ‹ 2/3 › */
  .fx-message__variants { display: inline-flex; align-items: center; gap: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-message__variants > button { display: grid; place-items: center; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: none; color: inherit; font: inherit; cursor: pointer; }
  .fx-message__variants > button:hover:not(:disabled) { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-message__variants > button:disabled { opacity: 0.4; cursor: not-allowed; }
  .fx-message__variants > button:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  /* Tahrirlash rejimi (data-state="editing"): matn maydoniga aylanadi */
  .fx-message[data-state="editing"] .fx-message__body { min-inline-size: calc(var(--fx-space-12) * 5); padding: var(--fx-space-3) var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-focus); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-message[data-state="editing"] .fx-message__body:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  /* Xato + “Qayta urinish” */
  .fx-message[data-state="error"] .fx-message__body { border: var(--fx-border-width-default) solid var(--fx-border-color-error); border-radius: var(--fx-radius-surface); padding: var(--fx-space-2) var(--fx-space-3); }
  .fx-message__retry { padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: none; color: var(--fx-text-brand); font: inherit; font-weight: var(--fx-font-weight-medium); text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); cursor: pointer; }
  .fx-message__retry:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* Matn ichida kod bloki, inline kod va jadval */
  .fx-message__body :is(pre, code) { font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); }
  .fx-message__body code { padding: calc(var(--fx-space-1) / 2) var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); }
  .fx-message__body pre { margin: var(--fx-space-2) 0; padding: var(--fx-space-3) var(--fx-space-4); overflow-x: auto; border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); line-height: 1.5; tab-size: 2; }
  .fx-message__body pre code { padding: 0; background: none; }
  .fx-message__body table { display: block; max-inline-size: 100%; overflow-x: auto; margin: var(--fx-space-2) 0; border-collapse: collapse; font-size: var(--fx-font-size-xs); }
  .fx-message__body :is(th, td) { padding: var(--fx-space-1) var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); text-align: start; }
  .fx-message__body th { background: var(--fx-bg-subtle); font-weight: var(--fx-font-weight-semibold); }
  @media (forced-colors: active) { .fx-message[data-variant="bubble"] .fx-message__body { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* meter */
@layer fx.components {
  /* Oʻlchagich (WAI-ARIA APG «Meter»): ma'lum diapazondagi qiymat — sigʻim, ball, reyting. Progress’dan farqi: jarayon emas, holat;
     maqsad belgisi (--fx-meter-target) va zonalar (past/oʻrta/yuqori, data-zones). Yarim doira (spidometr) taqiqlangan — chiziqli.
     Qiymat: style="--fx-meter-value: 72%" (aria-valuenow bilan bir xil ulush). */
  .fx-meter { --fx-meter-value: 0%; --fx-meter-target: -1%; --fx-meter-low: 33%; --fx-meter-high: 66%; --_h: var(--fx-space-2); display: grid; gap: var(--fx-space-2); font-size: var(--fx-font-size-sm); }
  .fx-meter__head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-meter__label { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  .fx-meter__value { color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; }
  .fx-meter__track { position: relative; block-size: var(--_h); border-radius: calc(var(--_h) / 2); background: var(--fx-viz-track); }
  .fx-meter__fill { position: absolute; inset-block: 0; inset-inline-start: 0; inline-size: clamp(0%, var(--fx-meter-value), 100%); border-radius: inherit; background: var(--fx-viz-ink); transition: inline-size var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-meter[data-tone="success"] .fx-meter__fill { background: var(--fx-fg-success); }
  .fx-meter[data-tone="warning"] .fx-meter__fill { background: var(--fx-fg-warning); }
  .fx-meter[data-tone="error"] .fx-meter__fill { background: var(--fx-fg-error); }
  /* Maqsad belgisi: yupqa vertikal chiziq, trekdan chiqib turadi */
  .fx-meter__target { position: absolute; inset-block: calc(var(--fx-space-1) * -1); inset-inline-start: clamp(0%, var(--fx-meter-target), 100%); inline-size: var(--fx-border-width-focus); translate: -50% 0; border-radius: var(--fx-border-width-focus); background: var(--fx-text-primary); }
  /* Zonalar: trek orqasida past/oʻrta/yuqori boʻlak (yumshoq rang + chegarada chiziq) */
  .fx-meter[data-zones] .fx-meter__track { background: linear-gradient(90deg, var(--fx-bg-error-subtle) 0 var(--fx-meter-low), var(--fx-bg-warning-subtle) var(--fx-meter-low) var(--fx-meter-high), var(--fx-bg-success-subtle) var(--fx-meter-high) 100%); }
  .fx-meter[data-zones="reverse"] .fx-meter__track { background: linear-gradient(90deg, var(--fx-bg-success-subtle) 0 var(--fx-meter-low), var(--fx-bg-warning-subtle) var(--fx-meter-low) var(--fx-meter-high), var(--fx-bg-error-subtle) var(--fx-meter-high) 100%); }
  .fx-meter__scale { display: flex; justify-content: space-between; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-meter[data-size="sm"] { --_h: var(--fx-space-1); }
  .fx-meter[data-size="lg"] { --_h: var(--fx-space-3); }
}

@layer fx.components {
  /* Yarim doira oʻlchagich (4.115, data-shape="gauge"): bitta qiymat kartasi uchun (sigʻim, NPS, yuklanish). Dashboard grafigida
     chiziqli oʻlchagich afzal; gauge — faqat bitta yirik koʻrsatkich. Qiymat ham, maqsad ham foizda: conic-gradient yarim aylanaga
     (% / 2) aylantiradi. Raqam markazda, chetlarda min/max — rang yolgʻiz belgi emas. */
  .fx-meter[data-shape="gauge"] { --_t: calc(var(--fx-space-3) * 1.5); --_fill: var(--fx-viz-ink); justify-items: center; inline-size: 100%; max-inline-size: calc(var(--fx-control-h-lg) * 6); text-align: center; }
  .fx-meter[data-shape="gauge"] .fx-meter__track { inline-size: 100%; block-size: auto; aspect-ratio: 2 / 1; border-radius: 0; background: conic-gradient(from 270deg at 50% 100%, var(--_fill) 0 calc(clamp(0%, var(--fx-meter-value), 100%) / 2), var(--fx-viz-track) 0 50%, transparent 0); mask: radial-gradient(circle farthest-side at 50% 100%, transparent calc(100% - var(--_t)), white calc(100% - var(--_t) + 0.5px) calc(100% - 0.5px), transparent 100%); }
  .fx-meter[data-shape="gauge"][data-tone="success"] { --_fill: var(--fx-fg-success); }
  .fx-meter[data-shape="gauge"][data-tone="warning"] { --_fill: var(--fx-fg-warning); }
  .fx-meter[data-shape="gauge"][data-tone="error"] { --_fill: var(--fx-fg-error); }
  .fx-meter[data-shape="gauge"] .fx-meter__fill { display: none; }
  /* zonalar — trek ostida yumshoq yoylar, toʻldirish ustida */
  .fx-meter[data-shape="gauge"][data-zones] .fx-meter__track { background: conic-gradient(from 270deg at 50% 100%, var(--_fill) 0 calc(clamp(0%, var(--fx-meter-value), 100%) / 2), transparent 0), conic-gradient(from 270deg at 50% 100%, var(--fx-bg-error-subtle) 0 calc(var(--fx-meter-low) / 2), var(--fx-bg-warning-subtle) 0 calc(var(--fx-meter-high) / 2), var(--fx-bg-success-subtle) 0 50%, transparent 0); }
  .fx-meter[data-shape="gauge"][data-zones="reverse"] .fx-meter__track { background: conic-gradient(from 270deg at 50% 100%, var(--_fill) 0 calc(clamp(0%, var(--fx-meter-value), 100%) / 2), transparent 0), conic-gradient(from 270deg at 50% 100%, var(--fx-bg-success-subtle) 0 calc(var(--fx-meter-low) / 2), var(--fx-bg-warning-subtle) 0 calc(var(--fx-meter-high) / 2), var(--fx-bg-error-subtle) 0 50%, transparent 0); }
  /* maqsad — yoy ustidan chiqib turuvchi ingichka chiziq (trek maskasidan tashqarida) */
  .fx-meter[data-shape="gauge"] { position: relative; }
  .fx-meter[data-shape="gauge"] .fx-meter__track { position: relative; }
  .fx-meter[data-shape="gauge"] .fx-meter__target { position: absolute; inset: auto; inset-block-start: 0; inset-inline-start: 0; inline-size: 100%; aspect-ratio: 2 / 1; translate: none; border-radius: 0; background: conic-gradient(from 270deg at 50% 100%, transparent 0 calc(var(--fx-meter-target) / 2 - 0.4%), var(--fx-text-primary) 0 calc(var(--fx-meter-target) / 2 + 0.4%), transparent 0); mask: radial-gradient(circle farthest-side at 50% 100%, transparent calc(100% - var(--_t) - var(--fx-space-1)), white calc(100% - var(--_t) - var(--fx-space-1) + 0.5px) calc(100% - 0.5px), transparent 100%); pointer-events: none; }
  .fx-meter[data-shape="gauge"] .fx-meter__head { order: 2; flex-direction: column-reverse; align-items: center; gap: var(--fx-space-1); margin-block-start: calc(var(--fx-space-12) * -1); }
  .fx-meter[data-shape="gauge"] .fx-meter__value { color: var(--fx-text-primary); font-family: var(--fx-font-family-numeric); font-size-adjust: var(--fx-font-adjust-numeric); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-medium); line-height: 1; }
  .fx-meter[data-shape="gauge"] .fx-meter__label { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-meter[data-shape="gauge"] .fx-meter__scale { order: 3; inline-size: 100%; }
  .fx-meter[data-shape="gauge"] > .fx-meter__track { order: 1; }
  @media (forced-colors: active) { .fx-meter[data-shape="gauge"] .fx-meter__track { background: conic-gradient(from 270deg at 50% 100%, Highlight 0 calc(var(--fx-meter-value) / 2), GrayText 0 50%, transparent 0); forced-color-adjust: none; } }
}

/* minichat */
@layer fx.components {
  /* Pastga qadalgan yozish oynalari (4.201, naqsh — Gmail, SLDS «Docked composer»): ekranning pastki oʻng burchagida yonma-yon
     turadigan kichik oynalar — chat suhbati yoki yangi xat. Har oyna: sarlavha tugmasi (avatar/ikon, nom, oʻqilmagan soni) —
     bosilsa yigʻiladi/ochiladi; kattalashtirish va yopish tugmalari; tana — xabarlar yoki forma + ostida yozish qatori.
     data-state: open · minimized (faqat sarlavha) · expanded (kengroq va balandroq). Ochiq oynalar soni data-max bilan cheklanadi.
     Ildiz fixed, pastki chetga qadalgan; data-size="block" — hujjat namunasi uchun (oddiy oqimda). Xulq: foxui.js → minichat. */
  .fx-minichat {
    position: fixed;
    inset-block-end: 0;
    inset-inline-end: var(--fx-space-6);
    z-index: var(--fx-z-overlay);
    display: flex;
    flex-direction: row-reverse;
    align-items: flex-end;
    gap: var(--fx-space-3);
    max-inline-size: calc(100vw - var(--fx-space-6) * 2);
    pointer-events: none;
  }
  .fx-minichat[data-size="block"] { position: relative; inset: auto; z-index: auto; justify-content: flex-start; min-block-size: calc(var(--fx-space-12) * 10); max-inline-size: none; padding-inline-end: var(--fx-space-4); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-strong); }
  .fx-minichat__window {
    display: grid;
    grid-template-rows: auto minmax(0, 1fr);
    inline-size: calc(var(--fx-space-12) * 7.5);
    max-inline-size: 100%;
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-block-end: 0;
    border-start-start-radius: var(--fx-radius-overlay);
    border-start-end-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-lg);
    pointer-events: auto;
    animation: fx-minichat-in var(--fx-motion-base) var(--fx-ease-enter);
  }
  .fx-minichat__window[data-state="minimized"] { inline-size: calc(var(--fx-space-12) * 5.5); }
  .fx-minichat__window[data-state="expanded"] { inline-size: calc(var(--fx-space-12) * 11); }
  .fx-minichat__head { display: flex; align-items: center; gap: var(--fx-space-1); padding: var(--fx-space-1) var(--fx-space-1) var(--fx-space-1) 0; background: var(--fx-bg-subtle); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-minichat__window[data-state="minimized"] .fx-minichat__head { border-block-end: 0; }
  .fx-minichat__window[data-tone="brand"] .fx-minichat__head { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-minichat__toggle {
    display: flex;
    flex: 1 1 auto;
    align-items: center;
    gap: var(--fx-space-2);
    min-inline-size: 0;
    min-block-size: var(--fx-control-h-md);
    padding: 0 var(--fx-space-3);
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    text-align: start;
    cursor: pointer;
  }
  .fx-minichat__toggle:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); border-radius: var(--fx-radius-control); }
  .fx-minichat__title { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); text-overflow: ellipsis; white-space: nowrap; }
  .fx-minichat__sub { display: block; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); }
  .fx-minichat__window[data-tone="brand"] .fx-minichat__sub { color: inherit; opacity: 0.8; }
  .fx-minichat__unread { flex: none; min-inline-size: var(--fx-size-icon-md); padding: 0 var(--fx-space-1); border-radius: var(--fx-radius-pill); background: var(--fx-bg-error-solid); color: var(--fx-text-on-error); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); text-align: center; font-variant-numeric: tabular-nums; }
  .fx-minichat__window:not([data-state="minimized"]) .fx-minichat__unread { display: none; }
  .fx-minichat__action {
    flex: none;
    display: grid;
    place-items: center;
    inline-size: var(--fx-control-h-sm);
    block-size: var(--fx-control-h-sm);
    padding: 0;
    border: 0;
    border-radius: var(--fx-radius-control);
    background: none;
    color: inherit;
    opacity: 0.75;
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), opacity var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-minichat__action[hidden] { display: none; }
  .fx-minichat__action:hover { opacity: 1; background: color-mix(in oklab, currentColor 10%, transparent); }
  .fx-minichat__action:focus-visible { opacity: 1; outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-minichat__action > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-minichat__body { display: grid; grid-template-rows: minmax(0, 1fr) auto; block-size: calc(var(--fx-space-12) * 8); min-block-size: 0; }
  .fx-minichat__body[hidden] { display: none; }
  .fx-minichat__window[data-state="expanded"] .fx-minichat__body { block-size: min(calc(var(--fx-space-12) * 12), 80dvh); }
  .fx-minichat__log { display: grid; align-content: end; gap: var(--fx-space-2); padding: var(--fx-space-3); overflow-y: auto; overscroll-behavior: contain; }
  .fx-minichat__log:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-minichat__msg { justify-self: start; max-inline-size: 85%; margin: 0; padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-surface); border-end-start-radius: var(--fx-radius-badge); background: var(--fx-bg-subtle); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); }
  .fx-minichat__msg[data-from="me"] { justify-self: end; border-end-start-radius: var(--fx-radius-surface); border-end-end-radius: var(--fx-radius-badge); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-minichat__time { justify-self: center; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-minichat__fields { display: grid; align-content: start; padding: 0 var(--fx-space-3); overflow-y: auto; }
  .fx-minichat__fields > :is(label, .fx-minichat__line) { display: flex; align-items: center; gap: var(--fx-space-2); padding-block: var(--fx-space-2); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-minichat__fields input { flex: 1; min-inline-size: 0; border: 0; background: none; color: var(--fx-text-primary); font: inherit; outline: none; }
  .fx-minichat__fields textarea { min-block-size: calc(var(--fx-space-12) * 3); margin-block-start: var(--fx-space-2); padding: 0; border: 0; background: none; color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-sm); resize: none; outline: none; }
  .fx-minichat__fields > :focus-within { border-block-end-color: var(--fx-border-color-focus); }
  .fx-minichat__foot { display: flex; align-items: center; gap: var(--fx-space-2); padding: var(--fx-space-2); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-minichat__foot > .fx-input { flex: 1 1 auto; min-inline-size: 0; }
  @keyframes fx-minichat-in { from { opacity: 0; translate: 0 var(--fx-motion-shift-md); } }
  @media (max-width: 36em) {
    .fx-minichat { inset-inline: var(--fx-space-2); flex-wrap: wrap-reverse; max-inline-size: none; gap: var(--fx-space-1); }
    .fx-minichat__window:not([data-state="minimized"]) { inline-size: 100%; }
    .fx-minichat__window[data-state="minimized"] { flex: 1 1 0; inline-size: auto; min-inline-size: 0; }
  }
}

/* mockup */
@layer fx.components {
  /* Qurilma ramkasi (4.75): skrinshot yoki jonli HTML’ni brauzer (data-device="browser") yoki telefon (data-device="phone") ramkasida koʻrsatadi.
     Ramka — faqat CSS (rasm faylisiz), ranglar mavzudan; ichidagi .fx-mockup__screen istalgan kontentni oladi (img, video, FoxUI bloklari).
     Bezak ramka: muhim maʼlumot faqat skrinshotda boʻlmasin — rasmga alt yoki figcaption. */
  .fx-mockup { --_frame: var(--fx-bg-muted); --_edge: var(--fx-border-color-strong); display: grid; gap: var(--fx-space-2); margin: 0; min-inline-size: 0; }
  .fx-mockup__screen { position: relative; overflow: hidden; background: var(--fx-bg-page); }
  .fx-mockup__screen > :is(img, video) { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; object-position: top; }
  .fx-mockup > figcaption { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-align: center; }
  /* brauzer: yuqorida uchta nuqta va manzil qatori */
  .fx-mockup[data-device="browser"] .fx-mockup__frame { overflow: hidden; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); }
  .fx-mockup__bar { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--_frame); }
  .fx-mockup__dots { display: flex; gap: calc(var(--fx-space-1) * 1.5); }
  .fx-mockup__dots::before, .fx-mockup__dots::after, .fx-mockup__dots > i { content: ""; inline-size: var(--fx-space-3); aspect-ratio: 1; border-radius: var(--fx-radius-circle); background: color-mix(in oklab, var(--fx-text-primary) 18%, transparent); }
  .fx-mockup__dots::before { order: -1; }
  .fx-mockup__url { justify-self: center; inline-size: min(100%, calc(var(--fx-space-12) * 9)); overflow: hidden; padding: var(--fx-space-1) var(--fx-space-3); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); text-align: center; text-overflow: ellipsis; white-space: nowrap; }
  .fx-mockup__url::before { content: "\1F512\FE0E"; margin-inline-end: var(--fx-space-1); font-size: calc(var(--fx-font-size-xs) * 0.85); opacity: 0.6; }
  .fx-mockup[data-device="browser"] .fx-mockup__screen { aspect-ratio: var(--_ratio, 16 / 10); }
  .fx-mockup[data-device="browser"][data-ratio="auto"] .fx-mockup__screen { aspect-ratio: auto; }
  /* telefon: qalin yumaloq ramka, kesik (Dynamic Island), ekran 9:19.5 */
  .fx-mockup[data-device="phone"] { justify-items: center; }
  .fx-mockup[data-device="phone"] .fx-mockup__frame {
    position: relative;
    inline-size: min(100%, calc(var(--fx-space-12) * 6.5));
    padding: calc(var(--fx-space-1) * 2.5);
    border: var(--fx-border-width-focus) solid var(--_edge);
    border-radius: calc(var(--fx-radius-overlay) * 3.2);
    background: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-lg);
  }
  .fx-mockup[data-device="phone"] .fx-mockup__screen { aspect-ratio: 9 / 19.5; border-radius: calc(var(--fx-radius-overlay) * 2.6); }
  .fx-mockup[data-device="phone"] .fx-mockup__screen::before { content: ""; position: absolute; z-index: 2; inset-block-start: var(--fx-space-2); inset-inline-start: 50%; inline-size: 32%; block-size: var(--fx-space-6); translate: -50% 0; border-radius: var(--fx-radius-pill); background: var(--fx-text-primary); }
  .fx-mockup[data-device="phone"][data-notch="none"] .fx-mockup__screen::before { display: none; }
  .fx-mockup[data-device="phone"] .fx-mockup__bar { display: none; }
  .fx-mockup[data-shadow="none"] .fx-mockup__frame { box-shadow: none; }
  @media (forced-colors: active) { .fx-mockup__frame { border-color: CanvasText; } }
}

/* morph */
@layer fx.components {
  /* Shakl morfi (4.33, M3 Expressive «shape morph», button groups): tugma bosilganda va tanlanganda yoyi oʻzgaradi —
     yumaloq → kvadratroq (data-fx-morph) yoki aksincha (data-fx-morph="round"). Faqat border-radius prujina bilan oʻtadi,
     oʻlcham va joy oʻzgarmaydi. Tanlangan holat: aria-pressed / aria-checked / aria-selected yoki ichidagi radio/checkbox belgilangan.
     .fx-morph — tugma guruhi: data-variant="connected" — yopishgan guruh (ichki burchaklar kichik, tanlangan tugma butunlay yumaloqlanadi).
     Harakat kamaytirilsa — shakl darhol almashadi (maʼno qoladi: tanlangan tugma shakli va rangi boshqacha). */
  [data-fx-morph] {
    --_mh: var(--_h, var(--fx-control-h-md));
    --_round: calc(var(--_mh) / 2);
    --_square: calc(var(--fx-radius-control) * 1.25);
    --_r: var(--_round);
    --_r-on: var(--_square);
    border-radius: var(--_r);
    transition: border-radius var(--fx-motion-slow) var(--fx-ease-spring), background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  [data-fx-morph="round"] { --_r: var(--_square); --_r-on: var(--_round); }
  [data-fx-morph]:active:not(:disabled, [aria-disabled="true"]) { border-radius: var(--_r-on); transition-duration: var(--fx-motion-fast), var(--fx-motion-fast), var(--fx-motion-fast), var(--fx-motion-instant); }
  [data-fx-morph]:is([aria-pressed="true"], [aria-checked="true"], [aria-selected="true"], :has(> input:checked)) { border-radius: var(--_r-on); }
  /* radio/checkbox ichida: input koʻrinmaydi, fokus yorliqqa chiziladi */
  [data-fx-morph] > input { position: absolute; opacity: 0; pointer-events: none; }
  [data-fx-morph]:has(> input:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }

  /* Guruh */
  .fx-morph { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1); inline-size: fit-content; max-inline-size: 100%; }
  /* guruhda tonal tugmalar (M3): fon yumshoq, chegara yoʻq — shakl oʻzgarishi aniq koʻrinadi */
  .fx-morph > [data-fx-morph] { background: var(--fx-bg-muted); border-color: transparent; color: var(--fx-text-primary); }
  .fx-morph > [data-fx-morph]:hover { background: color-mix(in oklab, var(--fx-bg-muted) 80%, var(--fx-text-primary)); }
  .fx-morph > [data-fx-morph]:is([aria-pressed="true"], [aria-checked="true"], [aria-selected="true"], :has(> input:checked)) {
    background: var(--fx-bg-brand-solid);
    border-color: transparent;
    color: var(--fx-text-on-brand);
  }
  .fx-morph > [data-fx-morph]:is([aria-pressed="true"], [aria-checked="true"], [aria-selected="true"], :has(> input:checked)):hover { background: var(--fx-bg-brand-solid-hover); }
  /* yopishgan guruh: tashqi burchaklar yumaloq, ichkilari kichik; tanlangani — toʻliq yumaloq */
  .fx-morph[data-variant="connected"] { gap: calc(var(--fx-space-1) / 2); flex-wrap: nowrap; }
  .fx-morph[data-variant="connected"] > [data-fx-morph] { --_inner: calc(var(--fx-radius-control) / 2); border-radius: var(--_inner); }
  .fx-morph[data-variant="connected"] > [data-fx-morph]:first-child { border-start-start-radius: var(--_round); border-end-start-radius: var(--_round); }
  .fx-morph[data-variant="connected"] > [data-fx-morph]:last-child { border-start-end-radius: var(--_round); border-end-end-radius: var(--_round); }
  .fx-morph[data-variant="connected"] > [data-fx-morph]:active:not(:disabled) { border-radius: var(--_square); }
  .fx-morph[data-variant="connected"] > [data-fx-morph]:is([aria-pressed="true"], [aria-checked="true"], [aria-selected="true"], :has(> input:checked)) { border-radius: var(--_round); }
  @media (forced-colors: active) {
    .fx-morph > [data-fx-morph]:is([aria-pressed="true"], [aria-checked="true"], [aria-selected="true"], :has(> input:checked)) { background: Highlight; color: HighlightText; forced-color-adjust: none; }
  }
}

/* motion */
@layer fx.components {
  /* Harakat qatlami (4-toʻlqin 4.25, 4.31, 4.32, 4.35). Hamma davomiylik --fx-motion-* (knob bilan: reduced-motion va
     data-fx-motion="none"da 0), egri — --fx-ease-*. */

  /* --- Harakat sxemasi: fazoviy va effekt prujinalari (4.25, M3 Expressive) ---
     spatial — joy/oʻlcham/burilish uchun (biroz oshib ketadi), effects — rang/shaffoflik uchun (hech qachon oshib ketmaydi).
     Qiymat — transition/animation’ga tayyor «davomiylik egri» juftligi: transition: translate var(--fx-spring-spatial-default).
     calm’da fazoviy ham sakramaydi; expressive’da sekin prujina sakraydi. Token taklifi: --fx-spring-spatial-* / --fx-spring-effects-*. */
  :root, [data-fx-motion], [data-fx-personality], [data-fx-density] {
    --fx-spring-spatial-fast: var(--fx-motion-fast) var(--fx-ease-spring);
    --fx-spring-spatial-default: var(--fx-motion-slow) var(--fx-ease-spring);
    --fx-spring-spatial-slow: var(--fx-motion-slower) var(--fx-ease-spring);
    --fx-spring-effects-fast: var(--fx-motion-fast) var(--fx-ease-standard);
    --fx-spring-effects-default: var(--fx-motion-base) var(--fx-ease-standard);
    --fx-spring-effects-slow: var(--fx-motion-slow) var(--fx-ease-standard);
  }
  [data-fx-motion="calm"] {
    --fx-spring-spatial-fast: var(--fx-motion-fast) var(--fx-ease-emphasized);
    --fx-spring-spatial-default: var(--fx-motion-slow) var(--fx-ease-emphasized);
    --fx-spring-spatial-slow: var(--fx-motion-slower) var(--fx-ease-emphasized);
  }
  [data-fx-motion="expressive"] {
    --fx-spring-spatial-slow: var(--fx-motion-slower) var(--fx-ease-bounce);
  }
  /* Tayyor oʻtishlar: data-spring="spatial" — joy/oʻlcham, "effects" — rang/shaffoflik, "both" — ikkalasi */
  .fx-spring[data-spring="spatial"] { transition: translate var(--fx-spring-spatial-default), scale var(--fx-spring-spatial-default), rotate var(--fx-spring-spatial-default), inline-size var(--fx-spring-spatial-default), block-size var(--fx-spring-spatial-default); }
  .fx-spring, .fx-spring[data-spring="effects"] { transition: opacity var(--fx-spring-effects-default), color var(--fx-spring-effects-default), background-color var(--fx-spring-effects-default), border-color var(--fx-spring-effects-default); }
  .fx-spring[data-spring="both"] { transition: translate var(--fx-spring-spatial-default), scale var(--fx-spring-spatial-default), rotate var(--fx-spring-spatial-default), opacity var(--fx-spring-effects-default), color var(--fx-spring-effects-default), background-color var(--fx-spring-effects-default); }
  .fx-spring[data-speed="fast"] { --fx-spring-spatial-default: var(--fx-spring-spatial-fast); --fx-spring-effects-default: var(--fx-spring-effects-fast); }
  .fx-spring[data-speed="slow"] { --fx-spring-spatial-default: var(--fx-spring-spatial-slow); --fx-spring-effects-default: var(--fx-spring-effects-slow); }

  /* --- Scroll’ga bogʻliq kirish (4.31): blok koʻrinish maydoniga kirganda paydo boʻladi (animation-timeline: view()).
     Qoʻllanmasa, harakat kamaytirilsa yoki data-fx-motion="none" boʻlsa — darhol koʻrinadi (hech narsa yashirilmaydi). */
  @supports (animation-timeline: view()) {
    @media (prefers-reduced-motion: no-preference) {
      [data-fx-reveal] {
        animation: fx-reveal-up var(--fx-ease-enter) both;
        animation-duration: auto;
        animation-timeline: view();
        animation-range: entry 0% entry 70%;
      }
      [data-fx-reveal="fade"] { animation-name: fx-reveal-fade; }
      [data-fx-reveal="blur"] { animation-name: fx-reveal-blur; }
      [data-fx-reveal="scale"] { animation-name: fx-reveal-scale; }
      [data-fx-motion="none"] [data-fx-reveal], [data-fx-reveal][data-fx-motion="none"] { animation: none; }
    }
  }
  @keyframes fx-reveal-up { from { opacity: 0; translate: 0 var(--fx-motion-shift-lg); } }
  @keyframes fx-reveal-fade { from { opacity: 0; } }
  @keyframes fx-reveal-blur { from { opacity: 0; filter: blur(var(--fx-space-2)); translate: 0 var(--fx-motion-shift-md); } }
  @keyframes fx-reveal-scale { from { opacity: 0; scale: var(--fx-motion-scale-enter); } }

  /* --- Oʻqish progress chizigʻi (4.32): sahifa (yoki eng yaqin aylanuvchi blok) aylantirilgani sari toʻladi.
     scroll() timeline’siz brauzerda koʻrinmaydi (bezak — maʼno bermaydi, aria-hidden). */
  .fx-scroll-progress {
    position: fixed;
    inset-block-start: 0;
    inset-inline: 0;
    z-index: var(--fx-z-sticky);
    block-size: var(--fx-space-1);
    background: var(--fx-bg-brand-solid);
    transform-origin: 0 50%;
    scale: 0 1;
    pointer-events: none;
    display: none;
  }
  .fx-scroll-progress:dir(rtl) { transform-origin: 100% 50%; }
  .fx-scroll-progress[data-position="sticky"] { position: sticky; }
  .fx-scroll-progress[data-tone="accent"] { background: var(--fx-viz-accent); }
  .fx-scroll-progress[data-size="sm"] { block-size: calc(var(--fx-space-1) / 2); }
  @supports (animation-timeline: scroll()) {
    .fx-scroll-progress { display: block; animation: fx-scroll-progress linear both; animation-duration: auto; animation-timeline: scroll(root block); }
    .fx-scroll-progress[data-position="sticky"] { animation-timeline: scroll(nearest block); }
  }
  @keyframes fx-scroll-progress { to { scale: 1 1; } }

  /* --- Aylanuvchi raqam (4.35): qiymat oʻzgarganda raqamlar barabandek aylanadi. Xulq — behaviors/ticker.js (data-fx-ticker).
     JS boʻlmasa — oddiy matn. Har raqam ustuni — 0…9 lentasi, --_d — koʻrinadigan raqam. */
  .fx-ticker { display: inline-flex; align-items: baseline; font-variant-numeric: tabular-nums; line-height: var(--fx-line-height-tight); white-space: nowrap; }
  .fx-ticker__track { display: inline-flex; }
  .fx-ticker__digit { display: inline-block; block-size: 1lh; overflow: hidden; }
  .fx-ticker__reel { display: flex; flex-direction: column; translate: 0 calc(var(--_d, 0) * -10%); transition: translate calc(var(--fx-motion-slower) + var(--_i, 0) * var(--fx-duration-stagger) * var(--fx-knob-motion)) var(--fx-ease-emphasized); }
  [data-fx-motion="expressive"] .fx-ticker__reel { transition-timing-function: var(--fx-ease-spring); }
  .fx-ticker__reel > span { block-size: 1lh; text-align: center; }
  .fx-ticker__sym { display: inline-block; }
  .fx-ticker[data-tone="up"] { color: var(--fx-fg-success); }
  .fx-ticker[data-tone="down"] { color: var(--fx-fg-error); }
}

/* msgactions */
@layer fx.components {
  /* Xabar amallari paneli (javob ostida): nusxa · qayta · 👍/👎 · tahrir · tarmoq ‹ 2/3 ›. role="toolbar" (APG): Tab bilan bitta kirish,
     ichida ← → . data-reveal="hover" — desktop’da faqat xabar ustida/fokusda koʻrinadi (sensorli ekranda doim). JS: behaviors/msgactions.js. */
  .fx-msgactions { display: inline-flex; align-items: center; gap: calc(var(--fx-space-1) / 2); }
  .fx-msgactions__btn { position: relative; display: inline-grid; place-items: center; flex: none; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-tertiary); font: inherit; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-msgactions__btn:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-msgactions__btn:active { scale: var(--fx-motion-press); }
  .fx-msgactions__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-msgactions__btn:disabled { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-msgactions__btn > svg { grid-area: 1 / 1; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-base) var(--fx-ease-spring); }
  /* nusxa: ikon → ✓ (2 s) */
  .fx-msgactions__btn > [data-fx-icon="check"] { opacity: 0; scale: 0.5; }
  .fx-msgactions__btn[data-state="copied"] { color: var(--fx-fg-success); }
  .fx-msgactions__btn[data-state="copied"] > :not([data-fx-icon="check"]) { opacity: 0; scale: 0.5; }
  .fx-msgactions__btn[data-state="copied"] > [data-fx-icon="check"] { opacity: 1; scale: 1; }
  /* 👍/👎: bosilgan holat — brend + toʻldirilgan ikon (rang yolgʻiz emas: aria-pressed va shakl) */
  .fx-msgactions__btn[aria-pressed="true"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-msgactions__btn[aria-pressed="true"] > svg { fill: currentColor; fill-opacity: 0.25; }
  .fx-msgactions__branch { display: inline-flex; align-items: center; margin-inline-start: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-msgactions__sep { align-self: stretch; inline-size: var(--fx-border-width-default); margin-block: var(--fx-space-1); margin-inline: var(--fx-space-1); background: var(--fx-border-color-default); }
  .fx-msgactions__status { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  /* hoverda koʻrinadi; fokus yoki sensorli ekranda doim */
  .fx-msgactions[data-reveal="hover"] { opacity: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  :is(.fx-message, .fx-conversation__log > *):is(:hover, :focus-within) .fx-msgactions[data-reveal="hover"], .fx-msgactions[data-reveal="hover"]:focus-within { opacity: 1; }
  @media (hover: none) { .fx-msgactions[data-reveal="hover"] { opacity: 1; } }
}

/* multiselect */
@layer fx.components {
  /* Koʻp tanlov (WAI-ARIA APG «Combobox» + koʻp tanlovli listbox): tanlanganlar maydonda chip, ostida belgili roʻyxat.
     Xulq — foxui.js (data-fx-multiselect): yozib qidirish, ↑ ↓, Enter/Space belgilash, Backspace — oxirgi chipni olib tashlash, «+n», «Hammasi». */
  .fx-multiselect { position: relative; display: block; }
  .fx-multiselect__field {
    --_h: var(--fx-control-h-md);
    display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1);
    min-block-size: var(--_h); box-sizing: border-box; padding: calc(var(--fx-space-1) / 2) var(--fx-space-2) calc(var(--fx-space-1) / 2) var(--fx-space-3);
    background: var(--fx-bg-field); border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: var(--fx-radius-control); color: var(--fx-text-primary); cursor: text;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-multiselect__field:hover { border-color: var(--fx-border-color-strong); }
  .fx-multiselect__field:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-multiselect[data-invalid] .fx-multiselect__field { border-color: var(--fx-border-color-error); }
  .fx-multiselect__chips { display: contents; }
  .fx-multiselect__input { flex: 1 1 calc(var(--fx-popover-width) * 0.25); min-inline-size: 0; block-size: calc(var(--_h) - var(--fx-space-2)); border: 0; background: transparent; color: inherit; font: inherit; font-size: var(--fx-font-size-md); }
  .fx-multiselect__input:focus { outline: none; }
  .fx-multiselect__input::placeholder { color: var(--fx-text-tertiary); }
  .fx-multiselect__summary { flex: none; color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-multiselect__summary[hidden] { display: none; }
  .fx-multiselect__chev { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); color: var(--fx-text-tertiary); }
  .fx-multiselect__popup { position: absolute; inset-inline: 0; inset-block-start: calc(100% + var(--fx-space-1)); z-index: 20; display: grid; max-block-size: calc(var(--fx-control-h-sm) * 8); overflow: hidden; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); }
  .fx-multiselect__popup[hidden] { display: none; }
  .fx-multiselect__popup .fx-listbox { min-block-size: 0; }
  .fx-multiselect__foot { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-multiselect__all { padding: var(--fx-space-1) var(--fx-space-2); border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: var(--fx-text-brand); font: inherit; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); cursor: pointer; }
  .fx-multiselect__all:hover { background: var(--fx-bg-brand-subtle); }
  .fx-multiselect__all:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  /* Variant belgisi: roʻyxatda checkbox shakli (rang yolgʻiz belgi emas) */
  .fx-multiselect .fx-option::before { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); box-sizing: border-box; border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-badge); background: var(--fx-bg-surface); }
  .fx-multiselect .fx-option[aria-selected="true"]::before { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-solid) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 100% no-repeat; }
  .fx-multiselect .fx-option[aria-disabled="true"] { color: var(--fx-text-disabled); cursor: not-allowed; }
}

/* nav */
@layer fx.components {
  /* Yon menyu (WDS «Karkas va navigatsiya», S1): band 40, matn bitta qator «…», tanlangan — brend tusi + brend matni
     (chap chiziq va qora pill emas), guruh sarlavhasi katta harf, son — xira pill, ichki bandlar uzuq yoʻl chizigʻida,
     pastki bandlar tagda qotiriladi. Yigʻilgan holat (data-collapsed) — faqat ikonkalar, nom aria-label/title’da. */
  .fx-nav { display: flex; flex: 1 1 auto; flex-direction: column; gap: var(--fx-space-1); inline-size: var(--fx-nav-width); padding: var(--fx-space-3); box-sizing: border-box; }
  .fx-nav__group { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; }
  .fx-nav__group + .fx-nav__group { margin-block-start: var(--fx-space-4); }
  .fx-nav__title { padding: 0 var(--fx-space-3) var(--fx-space-1); color: var(--fx-text-tertiary); font-size: calc(var(--fx-font-size-xs) * 0.92); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.06em; text-transform: uppercase; }
  .fx-nav__item {
    --_h: var(--fx-nav-item-height);
    display: flex;
    align-items: center;
    gap: var(--fx-space-3);
    block-size: var(--_h);
    padding-inline: var(--fx-space-3);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-nav));
    color: var(--fx-text-secondary);
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    text-decoration: none;
    white-space: nowrap;
    min-inline-size: 0;
    overflow: hidden;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-radius var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-nav__item > svg { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  /* Uzun nom — bitta qator «…» (WDS r202) */
  .fx-nav__label { flex: 1; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; }
  .fx-nav__count { flex: none; min-inline-size: var(--fx-size-icon-md); padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; text-align: center; }
  .fx-nav__item:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-nav__item[aria-current="page"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-nav__item[aria-current="page"] .fx-nav__count { background: var(--fx-bg-surface); }
  .fx-nav__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-nav__item[target="_blank"] .fx-nav__label::after { content: " ↗"; color: var(--fx-text-tertiary); }
  /* Ichki bandlar: guruh ikonkasi markazidan tushgan uzuq yoʻl chizigʻi (matn rangining 20 %) */
  .fx-nav__subs { display: grid; min-inline-size: 0; gap: calc(var(--fx-space-1) / 2); margin-inline-start: calc(var(--fx-space-3) + var(--fx-size-icon-md) / 2); padding-inline-start: var(--fx-space-3); border-inline-start: var(--fx-border-width-default) dashed color-mix(in oklab, var(--fx-text-primary) 20%, transparent); }
  .fx-nav__subs .fx-nav__item { --_h: var(--fx-nav-subitem-height); color: color-mix(in oklab, var(--fx-text-primary) 60%, transparent); }
  .fx-nav__subs .fx-nav__item[aria-current="page"] { color: var(--fx-text-brand); }
  .fx-nav__foot { display: grid; gap: calc(var(--fx-space-1) / 2); margin-block-start: auto; padding-block-start: var(--fx-space-4); }
  /* Yigʻilgan: ikonkalar ustuni */
  .fx-nav[data-collapsed] { inline-size: var(--fx-nav-width-collapsed); padding-inline: var(--fx-space-2); }
  .fx-nav[data-collapsed] .fx-nav__item { justify-content: center; padding-inline: 0; }
  .fx-nav[data-collapsed] :is(.fx-nav__label, .fx-nav__title, .fx-nav__subs) { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
  .fx-nav[data-collapsed] .fx-nav__item { overflow: visible; }
  .fx-nav[data-collapsed] .fx-nav__count { position: absolute; translate: calc(var(--fx-space-3)) calc(var(--fx-space-3) * -1); min-inline-size: 0; inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); padding: 0; overflow: hidden; color: transparent; background: var(--fx-text-brand); }
  .fx-nav[data-collapsed] .fx-nav__item { position: relative; }
  /* ---- Kengaytma (2.137): sevimlilar guruhi, “Yangi” belgisi, ichidagi qidiruv ---- */
  .fx-nav__group[data-pinned] > .fx-nav__title::before { content: "★ "; letter-spacing: 0; }
  .fx-nav__new { flex: none; padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-size: calc(var(--fx-font-size-xs) * 0.85); font-weight: var(--fx-font-weight-semibold); line-height: 1.2; }
  .fx-nav__item[data-new]::after { content: ""; flex: none; inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); }
  .fx-nav__item:has(.fx-nav__count)[data-new]::after { display: none; }
  .fx-nav[data-collapsed] .fx-nav__new { display: none; }
  .fx-nav__search { margin-block-end: var(--fx-space-2); }
  .fx-nav[data-collapsed] .fx-nav__search { display: none; }
  @media (forced-colors: active) { .fx-nav__item[aria-current="page"] { background: Highlight; color: HighlightText; forced-color-adjust: none; } }
}

/* notifprefs */
@layer fx.components {
  /* Bildirishnoma sozlamalari matritsasi (4.190, naqsh): qatorlar — hodisalar (guruhlangan), ustunlar — kanallar (Email, Telegram,
     Ilova), har katakda checkbox; ustun sarlavhasida «hammasi», oxirgi ustunda qator «hammasi» (qisman — indeterminate «–»).
     Ulanmagan kanal — ustun oʻchiq va «Ulash» havolasi; majburiy xabar — belgilangan, oʻchiq va «majburiy» soʻzi. Xulq: foxui.js → notifprefs. */
  .fx-notifprefs { inline-size: 100%; border-collapse: separate; border-spacing: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); }
  .fx-notifprefs :is(th, td) { padding: var(--fx-space-3) var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); text-align: center; vertical-align: middle; }
  .fx-notifprefs :is(th, td):first-child { padding-inline-start: 0; text-align: start; }
  .fx-notifprefs thead th { position: sticky; inset-block-start: 0; z-index: 1; background: var(--fx-bg-page); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); white-space: nowrap; }
  .fx-notifprefs__channel { display: inline-grid; justify-items: center; gap: var(--fx-space-1); }
  .fx-notifprefs__channel .fx-check { gap: 0; }
  .fx-notifprefs__note { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); }
  .fx-notifprefs__note a { color: var(--fx-text-brand); }
  .fx-notifprefs__group > th { padding-block: var(--fx-space-5) var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); text-transform: uppercase; letter-spacing: 0.06em; }
  .fx-notifprefs tbody th[scope="row"] { font-weight: var(--fx-font-weight-regular); }
  .fx-notifprefs__event { display: block; font-weight: var(--fx-font-weight-medium); }
  .fx-notifprefs__desc { display: block; margin-block-start: calc(var(--fx-space-1) / 2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-notifprefs tbody tr:not(.fx-notifprefs__group):hover > * { background: var(--fx-bg-subtle); }
  .fx-notifprefs .fx-check { justify-content: center; }
  .fx-notifprefs__all { border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  /* Ulanmagan kanal ustuni */
  .fx-notifprefs [data-off] { color: var(--fx-text-disabled); }
  /* Majburiy: belgilangan + oʻchiq, ostida soʻz */
  .fx-notifprefs__lock { display: block; margin-block-start: calc(var(--fx-space-1) / 2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  @media (max-width: 40em) {
    .fx-notifprefs__desc { display: none; }
    .fx-notifprefs :is(th, td) { padding-inline: var(--fx-space-2); }
    .fx-notifprefs__all { display: none; }
  }
}

/* notify */
@layer fx.components {
  /* Bildirishnomalar markazi: qoʻngʻiroq tugmasi (son bilan) → panel; ichida tablar, «hammasini oʻqildi» va .fx-inbox.
     Xulq — foxui.js (data-fx-notify). Panel — native popover (fx-popover kabi joylashadi). */
  .fx-notify { display: inline-block; position: relative; }
  .fx-notify__trigger { position: relative; }
  .fx-notify__trigger .fx-count[hidden] { display: none; }
  .fx-notify__panel {
    inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-popover-width) * 1.4));
    max-block-size: min(80dvh, calc(var(--fx-dialog-width) * 1.2));
    margin: 0;
    padding: 0;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-lg);
    font-size: var(--fx-font-size-sm);
  }
  .fx-notify__panel:popover-open { display: flex; flex-direction: column; }
  /* Kirish va chiqish (WDS «Harakat»: har kirishning chiqishi bor; chiqish ~30 % tez) */
  .fx-notify__panel { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 calc(var(--fx-motion-shift-sm) * -1); transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), scale var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete, overlay var(--fx-motion-exit-fast) allow-discrete; }
  .fx-notify__panel:popover-open { opacity: 1; scale: 1; translate: 0 0; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-notify__panel:popover-open { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 calc(var(--fx-motion-shift-sm) * -1); } }
  .fx-notify__panel { transform-origin: top right; }
  @supports (position-area: block-end) {
    .fx-notify__panel { inset: auto; position-area: block-end span-inline-start; position-try-fallbacks: flip-block, flip-inline; margin-block: var(--fx-space-2); }
  }
  .fx-notify__head { flex: none; display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); padding: var(--fx-space-4) var(--fx-space-4) 0; }
  .fx-notify__title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-notify__tabs { flex: none; padding-inline: var(--fx-space-4); }
  .fx-notify__body { flex: 1; min-block-size: 0; overflow: auto; padding: var(--fx-space-2); }
  .fx-notify__foot { flex: none; padding: var(--fx-space-2) var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); text-align: center; }
}

/* number */
@layer fx.components {
  /* Son maydoni: − [qiymat] + ; input type="number" brauzer strelkalarisiz, tugmalar foxui.js orqali (stepDown/stepUp) */
  .fx-number { --_h: var(--fx-control-h-md); display: inline-flex; justify-self: start; align-items: center; block-size: var(--_h); box-sizing: border-box; border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control)); background: var(--fx-bg-field); overflow: hidden; }
  .fx-number:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-number__input { appearance: textfield; inline-size: calc(var(--fx-space-12) + var(--fx-space-4)); block-size: 100%; border: 0; background: transparent; color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-md); font-variant-numeric: tabular-nums; text-align: center; }
  .fx-number__input::-webkit-inner-spin-button, .fx-number__input::-webkit-outer-spin-button { appearance: none; margin: 0; }
  .fx-number__input:focus { outline: none; }
  .fx-number__step { display: grid; place-items: center; inline-size: var(--_h); block-size: 100%; padding: 0; border: 0; background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-lg); cursor: pointer; }
  .fx-number__step:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-number__step:disabled { color: var(--fx-text-disabled); cursor: not-allowed; background: transparent; }
  /* ---- Kengaytma (2.127): oʻlchamlar va old/orqa qoʻshimcha (valyuta, foiz, birlik) ---- */
  .fx-number[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  .fx-number[data-size="lg"] { --_h: var(--fx-control-h-lg); }
  .fx-number__affix { display: grid; place-items: center; padding-inline: var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); white-space: nowrap; user-select: none; }
  .fx-number__affix:first-child { padding-inline-end: 0; }
  .fx-number__affix:last-child { padding-inline-start: 0; }
  .fx-number:has(> .fx-number__affix) > .fx-number__input { text-align: start; }
  .fx-number[data-align="end"] .fx-number__input { text-align: end; }
  /* ---- Formatlash (4.96): matn maydoni + Intl.NumberFormat — minglik ajratgich, kasr vergul, foiz, qisqa koʻrinish (1,2 mln).
     Raqam oʻngga tekislanadi (ustunlarda solishtirish oson), maydon kengroq. ---- */
  .fx-number:is([data-format="number"], [data-format="percent"], [data-format="compact"]) > .fx-number__input { inline-size: calc(var(--fx-space-12) * 2.75); padding-inline: var(--fx-space-3); text-align: end; }
  .fx-number[data-format="percent"] > .fx-number__input { inline-size: calc(var(--fx-space-12) * 1.5); }
  .fx-number[data-format][data-width="full"] { display: flex; inline-size: 100%; }
  .fx-number[data-format][data-width="full"] > .fx-number__input { flex: 1; inline-size: auto; min-inline-size: 0; }
  .fx-number[data-format] > .fx-number__affix:not(:first-child) { padding-inline-start: 0; padding-inline-end: var(--fx-space-3); }
  /* ---- Sudrab qiymat (4.97): .fx-number__scrub — yorliq/belgi; chapga-oʻngga sudrash (kursor ↔). Sudrash paytida fon — holat; qiymat raqamda. ---- */
  .fx-number__scrub { display: grid; place-items: center; align-self: stretch; padding-inline: var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); white-space: nowrap; cursor: ew-resize; user-select: none; touch-action: none; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-number__scrub:first-child { padding-inline-end: var(--fx-space-1); }
  .fx-number__scrub:hover, .fx-number[data-scrubbing] .fx-number__scrub { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-number[data-scrubbing] { cursor: ew-resize; user-select: none; }
  .fx-number[data-scrub]:has(> .fx-number__scrub:first-child) > .fx-number__input { text-align: start; }
  .fx-number-row { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); }
  @media (forced-colors: active) { .fx-number { border-color: ButtonText; } }
}

/* offline */
@layer fx.components {
  /* Ulanish / oflayn banneri (4.163, #74): internet uzilganda pastda «Internet yoʻq — oʻzgarishlar qurilmada saqlanmoqda»,
     qaytganda qisqa «Qayta ulandi» (3 soniya). foxui.js (data-fx-offline) navigator.onLine va online/offline hodisalarini kuzatadi.
     Teskari rangli tabletka (snackbar) — sahifa ustida, bosishlarni toʻsmaydi. role="status" — ekran oʻquvchi xotirjam aytadi. */
  .fx-offline {
    box-sizing: border-box;
    position: fixed;
    inset-block-end: var(--fx-space-4);
    inset-inline: 0;
    z-index: 9;
    display: flex;
    align-items: center;
    gap: var(--fx-space-3);
    inline-size: max-content;
    max-inline-size: calc(100% - var(--fx-space-8));
    margin-inline: auto;
    padding: var(--fx-space-2) var(--fx-space-2) var(--fx-space-2) var(--fx-space-4);
    border-radius: calc(var(--fx-radius-overlay) * 3);
    background: var(--fx-text-primary);
    color: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-lg);
    font-size: var(--fx-font-size-sm);
    transition: opacity var(--fx-motion-base) var(--fx-ease-enter), translate var(--fx-motion-base) var(--fx-ease-enter);
  }
  @starting-style { .fx-offline { opacity: 0; translate: 0 var(--fx-motion-shift-md); } }
  .fx-offline:not(:has(.fx-offline__action)) { padding-inline-end: var(--fx-space-4); }
  .fx-offline__icon { flex: none; display: grid; place-items: center; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-offline__icon > svg { inline-size: 100%; block-size: 100%; }
  .fx-offline__text { margin: 0; min-inline-size: 0; }
  .fx-offline__action { flex: none; }
  .fx-offline__action.fx-btn { color: var(--fx-bg-surface); background: color-mix(in oklab, var(--fx-bg-surface) 14%, transparent); }
  .fx-offline__action.fx-btn:hover { background: color-mix(in oklab, var(--fx-bg-surface) 24%, transparent); }
  /* holat: belgi rangi + soʻz (rang yolgʻiz emas) */
  .fx-offline[data-state="offline"] .fx-offline__icon { color: var(--fx-color-pastel-yellow); }
  .fx-offline[data-state="online"] .fx-offline__icon { color: var(--fx-color-pastel-green); }
  .fx-offline[data-state="online"] .fx-offline__action { display: none; }
  .fx-offline[data-state="online"] .fx-offline__icon[data-for="offline"], .fx-offline[data-state="offline"] .fx-offline__icon[data-for="online"] { display: none; }
  .fx-offline[data-position="top"] { inset-block: var(--fx-space-4) auto; }
  .fx-offline[data-position="inline"] { position: relative; inset: auto; z-index: auto; margin-inline: 0; }
  @media (forced-colors: active) { .fx-offline { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* onboarding */
@layer fx.components {
  /* Onboarding oqimi (4.182): Xush kelibsiz → Profil → Jamoa taklifi → Tayyor. fx-wizard ustiga qurilgan naqsh:
     <form class="fx-wizard fx-onboarding" data-fx-wizard> — chapda brend, vertikal qadamlar va yordam; oʻngda joriy qadam paneli.
     Qadam almashganda panel yon tomondan suriladi (shared axis), oxirgi qadamda ✓ belgisi prujina bilan chiqadi.
     Qadamlar mantiqi, tekshiruv va fokus — wizard xulqi (foxui.js); bu fayl faqat kompozitsiya va libos. */
  .fx-onboarding.fx-wizard {
    display: grid;
    grid-template-columns: minmax(calc(var(--fx-popover-width) * 0.85), 1fr) minmax(0, 2fr);
    gap: 0;
    min-block-size: calc(var(--fx-space-12) * 11);
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-lg);
  }
  .fx-onboarding[data-layout="page"] { min-block-size: 100dvh; border: 0; border-radius: 0; box-shadow: none; }
  .fx-onboarding__aside {
    position: relative;
    isolation: isolate;
    display: flex;
    flex-direction: column;
    gap: var(--fx-space-8);
    padding: var(--fx-space-8);
    overflow: hidden;
    border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    background: var(--fx-bg-subtle);
  }
  .fx-onboarding__brand { display: flex; align-items: center; gap: var(--fx-space-2); margin: 0; font-weight: var(--fx-font-weight-semibold); }
  .fx-onboarding__brand > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); color: var(--fx-text-brand); }
  .fx-onboarding__aside > .fx-steps { flex: 1 1 auto; }
  .fx-onboarding__help { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-onboarding__main { display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: var(--fx-space-6); min-inline-size: 0; padding: var(--fx-space-10) var(--fx-space-10) var(--fx-space-6); }
  .fx-onboarding__main > .fx-wizard__panel { align-content: center; inline-size: 100%; max-inline-size: calc(var(--fx-dialog-width) * 1.15); }
  .fx-onboarding__main > .fx-wizard__panel:not([hidden]) { animation: fx-onboarding-in var(--fx-motion-slow) var(--fx-ease-enter) both; }
  .fx-onboarding .fx-wizard__title { font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-xl); letter-spacing: -0.01em; }
  .fx-onboarding__eyebrow { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.04em; text-transform: uppercase; }
  /* tanlov kartalari (radio) */
  .fx-onboarding__options { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.42), 1fr)); gap: var(--fx-space-3); margin: 0; padding: 0; border: 0; }
  .fx-onboarding__option {
    position: relative;
    display: grid;
    gap: var(--fx-space-1);
    padding: var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    cursor: pointer;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-onboarding__option:hover { border-color: var(--fx-border-color-strong); }
  .fx-onboarding__option:active { scale: var(--fx-motion-press); }
  .fx-onboarding__option > input { position: absolute; opacity: 0; pointer-events: none; }
  .fx-onboarding__option:has(input:checked) { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); }
  .fx-onboarding__option:has(input:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-onboarding__option-icon { display: grid; place-items: center; inline-size: var(--fx-size-control-sm); block-size: var(--fx-size-control-sm); margin-block-end: var(--fx-space-1); border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-onboarding__option-icon > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-onboarding__option-title { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-onboarding__option-text { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  /* yakun: ✓ belgisi prujina bilan, keyingi qadamlar roʻyxati */
  .fx-onboarding__art { display: grid; place-items: center; inline-size: var(--fx-size-avatar-lg); block-size: var(--fx-size-avatar-lg); border-radius: var(--fx-radius-circle); background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); }
  .fx-onboarding__art > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-wizard__panel:not([hidden]) > .fx-onboarding__art { animation: fx-onboarding-pop var(--fx-motion-slower) var(--fx-ease-bounce) both; }
  @keyframes fx-onboarding-in { from { opacity: 0; translate: var(--fx-motion-shift-lg) 0; } }
  @keyframes fx-onboarding-pop { from { scale: calc(1 - 0.6 * var(--fx-knob-motion)); opacity: 0; } }
  .fx-onboarding__main > .fx-wizard__footer { inline-size: 100%; max-inline-size: calc(var(--fx-dialog-width) * 1.15); }
  @media (max-width: 52em) {
    .fx-onboarding.fx-wizard { grid-template-columns: minmax(0, 1fr); }
    .fx-onboarding__aside { gap: var(--fx-space-4); padding: var(--fx-space-5); border-inline-end: 0; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
    .fx-onboarding__aside .fx-steps__desc, .fx-onboarding__help { display: none; }
    .fx-onboarding__main { padding: var(--fx-space-6) var(--fx-space-5) var(--fx-space-5); }
  }
}

/* orb */
@layer fx.components {
  /* Shar (orb) — AI yordamchining abstrakt «yuzi» (Siri sharidan ilhom, Ustoz 17.10): yuz, qoʻl, koʻz yoʻq — chizgi xatosi boʻlmaydi.
     Bitta rangdan (standart — brend; data-color — 6 toifa rangi; AI yordamchi ichida — saytning brend rangi) toʻq yadro + uchta suzuvchi rang toʻlqini + yaltiroq.
     Holatlar (data-state): idle — sekin nafas · thinking — toʻlqinlar tezlashib buraladi · talking — urib turadi · handoff — bir marta chaqnaydi.
     Faqat CSS, 0 bayt JS; oʻlcham konteyner birligida (cqi) — har oʻlchamda bir xil koʻrinadi. */
  .fx-orb {
    --_o: var(--fx-bg-brand-solid);
    --_t: 1;
    position: relative;
    display: inline-block;
    flex: none;
    inline-size: var(--fx-size-avatar-md);
    aspect-ratio: 1;
    container-type: inline-size;
    border-radius: var(--fx-radius-circle);
    overflow: hidden;
    isolation: isolate;
    /* toʻlqin ranglari brenddan: ton bir tomonga (−35°, −70°) aylantiriladi — iliq brendda yashil «kir» chiqmaydi, yorugʻlik va toʻyinganlik qotiriladi — brend och, toʻq yoki kulrang boʻlsa ham shar yorqin */
    --_w1: oklch(from var(--_o) 0.78 max(c, 0.2) h);
    --_w2: oklch(from var(--_o) 0.72 max(c, 0.24) calc(h - 35));
    --_w3: oklch(from var(--_o) 0.74 max(c, 0.22) calc(h - 70));
    --_k1: oklch(from var(--_o) 0.42 max(c, 0.16) calc(h - 35));
    --_k2: oklch(from var(--_o) 0.2 max(c, 0.1) calc(h - 50));
    background: radial-gradient(circle at 50% 50%, var(--_k1), var(--_k2) 78%);
    animation: fx-orb-breath calc(var(--fx-duration-pulse) * 2.5 * var(--_t)) var(--fx-ease-standard) infinite;
  }
  .fx-orb[data-color="coral"] { --_o: var(--fx-bg-category-coral); }
  .fx-orb[data-color="pink"] { --_o: var(--fx-bg-category-pink); }
  .fx-orb[data-color="blue"] { --_o: var(--fx-bg-category-blue); }
  .fx-orb[data-color="green"] { --_o: var(--fx-bg-category-green); }
  .fx-orb[data-color="yellow"] { --_o: var(--fx-bg-category-yellow); }
  .fx-orb[data-color="purple"] { --_o: var(--fx-bg-category-purple); }
  .fx-orb[data-size="sm"] { inline-size: var(--fx-size-avatar-sm); }
  .fx-orb[data-size="lg"] { inline-size: var(--fx-size-avatar-lg); }
  .fx-orb[data-size="xl"] { inline-size: calc(var(--fx-size-avatar-lg) * 2); }
  /* uchta rang toʻlqini — har biri oʻz tezligi va yoʻnalishida aylanadi */
  .fx-orb__wave { position: absolute; inset: -20%; border-radius: var(--fx-radius-circle); filter: blur(7cqi); mix-blend-mode: screen; animation: fx-orb-spin calc(var(--fx-duration-pulse) * 5 * var(--_t)) linear infinite; }
  .fx-orb__wave:nth-child(1) { background: radial-gradient(ellipse 60% 44% at 32% 36%, var(--_w1) 0 18%, transparent 62%); }
  .fx-orb__wave:nth-child(2) { background: radial-gradient(ellipse 46% 58% at 68% 56%, var(--_w2) 0 16%, transparent 62%); animation-duration: calc(var(--fx-duration-pulse) * 7 * var(--_t)); animation-direction: reverse; }
  .fx-orb__wave:nth-child(3) { background: radial-gradient(ellipse 54% 40% at 46% 74%, var(--_w3) 0 14%, transparent 60%); animation-duration: calc(var(--fx-duration-pulse) * 9 * var(--_t)); }
  /* ovoz toʻlqinlari (JS: data-fx-orb → canvas, Siri kabi lentalar) — gradient ustida, yaltiroq ostida */
  .fx-orb__lines { position: absolute; inset: 0; z-index: 1; inline-size: 100%; block-size: 100%; mix-blend-mode: screen; }
  .fx-orb::after { z-index: 2; }
  /* yaltiroq — shishasimon hajm */
  .fx-orb::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: radial-gradient(circle at 50% 50%, transparent 60%, color-mix(in oklab, var(--_w1) 30%, transparent) 70%, transparent 74%), radial-gradient(circle at 36% 28%, color-mix(in oklab, var(--fx-bg-static-light) 28%, transparent) 0 6%, transparent 26%); pointer-events: none; }
  /* holatlar */
  .fx-orb[data-state="thinking"] { --_t: 0.35; }
  .fx-orb[data-state="thinking"] .fx-orb__wave { scale: 0.8; transition: scale var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-orb[data-state="talking"] { --_t: 0.6; animation: fx-orb-talk calc(var(--fx-duration-pulse) / 4) var(--fx-ease-standard) 4; }
  .fx-orb[data-state="handoff"] { animation: fx-orb-flash var(--fx-duration-slower) var(--fx-ease-standard) 1; }
  @keyframes fx-orb-spin { to { rotate: 1turn; } }
  @keyframes fx-orb-breath { 50% { scale: 1.04; } }
  @keyframes fx-orb-talk { 50% { scale: 1.08; } }
  @keyframes fx-orb-flash { 40% { filter: brightness(1.6) saturate(1.3); scale: 1.08; } }
  @media (prefers-reduced-motion: reduce) { .fx-orb, .fx-orb__wave { animation: none; } }
  @media (forced-colors: active) { .fx-orb { background: CanvasText; } .fx-orb__wave, .fx-orb::after { display: none; } }
}

/* orbit */
@layer fx.components {
  /* Orbita (4.78): markaz (logo) atrofida 1–2 halqada aylanuvchi ikonlar — «qaysi xizmatlar bilan ishlaydi» koʻrsatish uchun.
     Faqat CSS: halqa aylanadi, ikon esa teskari aylanib tik turadi; joyi nth-child bilan (halqada 8 tagacha). Cheksiz aylanish faqat
     koʻrinishda (foxui.js data-fx-orbit → data-inview), hover/fokusda toʻxtaydi; reduced-motion va data-fx-motion="calm|none" — harakatsiz. */
  .fx-orbit {
    --_d: calc(var(--fx-space-12) * 7.5);
    --_dur: calc(var(--fx-duration-pulse) * 16);
    position: relative;
    display: grid;
    place-items: center;
    inline-size: min(100%, var(--_d));
    aspect-ratio: 1;
    margin-inline: auto;
  }
  .fx-orbit__center { position: relative; z-index: 1; display: grid; place-items: center; inline-size: 26%; aspect-ratio: 1; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-circle); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-md); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); text-align: center; }
  .fx-orbit__ring {
    --_n: 1;
    --_r: 0.5;
    position: absolute;
    inset: calc(50% - var(--_r) * 100%);
    margin: 0;
    padding: 0;
    list-style: none;
    border: var(--fx-border-width-default) dashed var(--fx-border-color-default);
    border-radius: var(--fx-radius-circle);
    animation: fx-orbit-spin var(--_dur) linear infinite;
    animation-play-state: paused;
  }
  .fx-orbit__ring[data-ring="inner"] { --_r: 0.31; --_dur: calc(var(--fx-duration-pulse) * 11); animation-direction: reverse; }
  .fx-orbit__ring[data-ring="outer"] { --_r: 0.46; }
  .fx-orbit__ring:has(> :nth-child(2):last-child) { --_n: 2; }
  .fx-orbit__ring:has(> :nth-child(3):last-child) { --_n: 3; }
  .fx-orbit__ring:has(> :nth-child(4):last-child) { --_n: 4; }
  .fx-orbit__ring:has(> :nth-child(5):last-child) { --_n: 5; }
  .fx-orbit__ring:has(> :nth-child(6):last-child) { --_n: 6; }
  .fx-orbit__ring:has(> :nth-child(7):last-child) { --_n: 7; }
  .fx-orbit__ring:has(> :nth-child(8):last-child) { --_n: 8; }
  .fx-orbit__item {
    --_i: 0;
    --_a: calc(360deg / var(--_n) * var(--_i) - 90deg);
    position: absolute;
    inset-block-start: 50%;
    inset-inline-start: 50%;
    inline-size: var(--fx-control-h-lg);
    aspect-ratio: 1;
    margin: calc(var(--fx-control-h-lg) / -2);
    transform: rotate(var(--_a)) translateX(calc(var(--_r) * 100cqi)) rotate(calc(var(--_a) * -1));
  }
  .fx-orbit__item:nth-child(2) { --_i: 1; } .fx-orbit__item:nth-child(3) { --_i: 2; } .fx-orbit__item:nth-child(4) { --_i: 3; }
  .fx-orbit__item:nth-child(5) { --_i: 4; } .fx-orbit__item:nth-child(6) { --_i: 5; } .fx-orbit__item:nth-child(7) { --_i: 6; } .fx-orbit__item:nth-child(8) { --_i: 7; }
  /* halqa radiusi — orbita enining ulushi (--_r), siljish container birligida (cqi) */
  .fx-orbit { container-type: inline-size; }
  .fx-orbit__icon {
    display: grid;
    place-items: center;
    inline-size: 100%;
    block-size: 100%;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-circle);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
    color: var(--fx-text-primary);
    animation: fx-orbit-spin var(--_dur) linear infinite reverse;
    animation-play-state: paused;
  }
  .fx-orbit__ring[data-ring="inner"] .fx-orbit__icon { animation-direction: normal; }
  .fx-orbit__icon > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: currentColor; }
  .fx-orbit__icon[data-color="blue"] { background: var(--fx-bg-category-blue); color: var(--fx-text-on-category); }
  .fx-orbit__icon[data-color="green"] { background: var(--fx-bg-category-green); color: var(--fx-text-on-category); }
  .fx-orbit__icon[data-color="pink"] { background: var(--fx-bg-category-pink); color: var(--fx-text-on-category); }
  .fx-orbit__icon[data-color="yellow"] { background: var(--fx-bg-category-yellow); color: var(--fx-text-on-category); }
  .fx-orbit__icon[data-color="purple"] { background: var(--fx-bg-category-purple); color: var(--fx-text-on-category); }
  .fx-orbit[data-inview] :is(.fx-orbit__ring, .fx-orbit__icon) { animation-play-state: running; }
  .fx-orbit[data-inview]:is(:hover, :focus-within) :is(.fx-orbit__ring, .fx-orbit__icon) { animation-play-state: paused; }
  .fx-orbit[data-speed="slow"] { --_dur: calc(var(--fx-duration-pulse) * 26); }
  .fx-orbit[data-size="sm"] { --_d: calc(var(--fx-space-12) * 5); }
  .fx-orbit[data-size="sm"] .fx-orbit__item { inline-size: var(--fx-control-h-md); margin: calc(var(--fx-control-h-md) / -2); }
  @keyframes fx-orbit-spin { to { rotate: 360deg; } }
  :is([data-fx-motion="calm"], [data-fx-motion="none"]) :is(.fx-orbit__ring, .fx-orbit__icon), .fx-orbit:is([data-fx-motion="calm"], [data-fx-motion="none"]) :is(.fx-orbit__ring, .fx-orbit__icon) { animation: none; }
  @media (prefers-reduced-motion: reduce) { :is(.fx-orbit__ring, .fx-orbit__icon) { animation: none; } }
  @media (forced-colors: active) { .fx-orbit__ring { border-color: GrayText; } .fx-orbit__icon, .fx-orbit__center { border-color: CanvasText; } }
}

/* orgchart */
@layer fx.components {
  /* Tashkiliy tuzilma (4.139): rahbar → boʻlimlar → xodimlar. Tepadan pastga daraxt, bogʻlovchi chiziqlar CSS’da (::before/::after).
     APG treeview: fokus tugunda (treeitem), halqa kartochkada; yigʻilgan tugun — «+N» tugmasi (soʻz/raqam bilan, faqat rang emas).
     Kenglik sigʻmasa — ildiz oʻzi gorizontal aylanadi. data-layout="list" — tor ekran uchun chekinishli roʻyxat. Xulq foxui.js → orgchart. */
  .fx-orgchart {
    --_line: var(--fx-border-width-default) solid var(--fx-border-color-strong);
    --_v: var(--fx-space-4);
    display: flex;
    justify-content: safe center;
    margin: 0;
    padding: var(--fx-space-2);
    overflow: auto;
    list-style: none;
    color: var(--fx-text-primary);
  }
  .fx-orgchart ul { margin: 0; padding: 0; list-style: none; }
  .fx-orgchart__node { position: relative; display: flex; flex-direction: column; align-items: center; outline: 0; }
  .fx-orgchart__card {
    position: relative;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: center;
    column-gap: var(--fx-space-2);
    inline-size: max-content;
    max-inline-size: calc(var(--fx-space-12) * 4.5);
    padding: var(--fx-space-2) var(--fx-space-3);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
    cursor: pointer;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), box-shadow var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-orgchart__card:hover { border-color: var(--fx-border-color-strong); box-shadow: var(--fx-shadow-md); }
  .fx-orgchart__node:focus-visible > .fx-orgchart__card { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-orgchart__node[aria-selected="true"] > .fx-orgchart__card { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); }
  .fx-orgchart__card > .fx-avatar { grid-row: span 2; }
  .fx-orgchart__name { overflow: hidden; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); text-overflow: ellipsis; white-space: nowrap; }
  .fx-orgchart__role { overflow: hidden; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-overflow: ellipsis; white-space: nowrap; }
  /* Boʻlim kartochkasi (odam emas) — xira fon, avatarsiz */
  .fx-orgchart__card[data-kind="unit"] { grid-template-columns: minmax(0, 1fr); background: var(--fx-bg-subtle); box-shadow: none; }
  /* Yigʻish tugmasi: kartochka ostida, chiziq ustida — «−» ochiq, «+N» yopiq */
  .fx-orgchart__toggle {
    position: absolute;
    inset-block-end: 0;
    inset-inline-start: 50%;
    translate: -50% 50%;
    z-index: 1;
    min-inline-size: var(--fx-size-checkbox);
    block-size: var(--fx-size-checkbox);
    padding: 0 var(--fx-space-1);
    border: var(--fx-border-width-default) solid var(--fx-border-color-strong);
    border-radius: var(--fx-radius-pill);
    background: var(--fx-bg-surface);
    color: var(--fx-text-secondary);
    font: inherit;
    font-size: var(--fx-font-size-xs);
    font-variant-numeric: tabular-nums;
    line-height: 1;
    cursor: pointer;
  }
  .fx-orgchart__toggle:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-orgchart__node[aria-expanded="false"] > .fx-orgchart__card .fx-orgchart__toggle { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  /* Bogʻlovchi chiziqlar */
  .fx-orgchart__group { position: relative; display: flex; padding-block-start: var(--_v); }
  .fx-orgchart__group::before { content: ""; position: absolute; inset-block-start: 0; inset-inline-start: 50%; block-size: var(--_v); border-inline-start: var(--_line); }
  .fx-orgchart__group > .fx-orgchart__node { padding: var(--_v) var(--fx-space-2) 0; }
  .fx-orgchart__group > .fx-orgchart__node::before, .fx-orgchart__group > .fx-orgchart__node::after { content: ""; position: absolute; inset-block-start: 0; inline-size: 50%; block-size: var(--_v); border-block-start: var(--_line); }
  .fx-orgchart__group > .fx-orgchart__node::before { inset-inline-end: 50%; }
  .fx-orgchart__group > .fx-orgchart__node::after { inset-inline-start: 50%; border-inline-start: var(--_line); }
  .fx-orgchart__group > .fx-orgchart__node:first-child::before, .fx-orgchart__group > .fx-orgchart__node:last-child::after { border-block-start: 0; }
  .fx-orgchart__group > .fx-orgchart__node:only-child::before { display: none; }
  .fx-orgchart__group > .fx-orgchart__node:last-child:not(:only-child)::before { border-inline-end: var(--_line); border-start-end-radius: var(--fx-radius-badge); }
  .fx-orgchart__group > .fx-orgchart__node:last-child:not(:only-child)::after { border-inline-start: 0; }
  .fx-orgchart__group > .fx-orgchart__node:first-child:not(:only-child)::after { border-start-start-radius: var(--fx-radius-badge); }
  .fx-orgchart__node[aria-expanded="false"] > .fx-orgchart__group { display: none; }
  /* Roʻyxat koʻrinishi (tor ekran): chekinish va chapdan chiziq */
  .fx-orgchart[data-layout="list"] { display: block; }
  .fx-orgchart[data-layout="list"] .fx-orgchart__node { align-items: stretch; }
  .fx-orgchart[data-layout="list"] .fx-orgchart__group { flex-direction: column; gap: var(--fx-space-2); margin-inline-start: var(--fx-space-6); padding-block-start: var(--fx-space-2); padding-inline-start: var(--fx-space-3); border-inline-start: var(--_line); }
  .fx-orgchart[data-layout="list"] .fx-orgchart__group::before, .fx-orgchart[data-layout="list"] .fx-orgchart__group > .fx-orgchart__node::before, .fx-orgchart[data-layout="list"] .fx-orgchart__group > .fx-orgchart__node::after { display: none; }
  .fx-orgchart[data-layout="list"] .fx-orgchart__group > .fx-orgchart__node { padding: 0; }
  .fx-orgchart[data-layout="list"] .fx-orgchart__toggle { inset-block-end: 50%; inset-inline: auto var(--fx-space-2); translate: 0 50%; }
  .fx-orgchart[data-layout="list"] .fx-orgchart__card { padding-inline-end: calc(var(--fx-space-8) + var(--fx-space-2)); }
  @media (forced-colors: active) { .fx-orgchart__node[aria-selected="true"] > .fx-orgchart__card { outline: var(--fx-border-width-focus) solid Highlight; } }
}

/* otp */
@layer fx.components {
  /* OTP / PIN kod: har belgi — alohida katak (input), orasida ixtiyoriy ajratgich. Holat: toʻldirilgan (data-filled), toʻliq, xato (silkinadi). */
  .fx-otp { --_h: var(--fx-control-h-md); display: grid; justify-items: start; gap: var(--fx-space-2); }
  .fx-otp[data-size="lg"] { --_h: var(--fx-control-h-lg); }
  .fx-otp__cells { display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-otp__cell {
    box-sizing: border-box;
    inline-size: var(--_h);
    block-size: var(--_h);
    padding: 0;
    font: inherit;
    font-size: var(--fx-font-size-lg);
    font-weight: var(--fx-font-weight-semibold);
    font-variant-numeric: tabular-nums;
    text-align: center;
    color: var(--fx-text-primary);
    background: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    caret-color: transparent;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-otp__cell:hover { border-color: var(--fx-border-color-strong); }
  .fx-otp__cell:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); background: var(--fx-bg-surface); }
  .fx-otp__cell[data-filled] { border-color: var(--fx-border-color-strong); }
  .fx-otp__cell:disabled { background: var(--fx-bg-muted); color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-otp[data-state="complete"] .fx-otp__cell { border-color: var(--fx-border-color-focus); }
  .fx-otp[data-state="error"] .fx-otp__cell { border-color: var(--fx-border-color-error); animation: fx-shake var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-otp__sep { flex: none; inline-size: var(--fx-space-3); block-size: var(--fx-border-width-focus); border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); }
  .fx-otp__msg { margin: 0; font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-otp[data-state="error"] .fx-otp__msg { color: var(--fx-text-error); }
  .fx-otp__resend { padding: 0; border: 0; background: none; font: inherit; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-brand); text-decoration: underline; text-underline-offset: var(--fx-space-1); cursor: pointer; font-variant-numeric: tabular-nums; }
  .fx-otp__resend:disabled { color: var(--fx-text-tertiary); text-decoration: none; cursor: default; font-weight: var(--fx-font-weight-regular); }
  .fx-otp__resend:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-control); }
}

/* overflow */
@layer fx.components {
  /* Joy tugasa qolganlar «+n» ga yigʻiladi (teglar, avatarlar, amallar). Xulq sigʻmaganini yashiradi (hidden), «+n» bosilsa hammasi ochiladi. */
  .fx-overflow { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); min-inline-size: 0; }
  .fx-overflow[data-fx-overflow]:not([data-expanded]) { flex-wrap: nowrap; overflow: hidden; }
  .fx-overflow > [hidden] { display: none; }
  .fx-overflow__more { flex: none; display: inline-flex; align-items: center; block-size: calc(var(--fx-control-h-sm) - var(--fx-space-2)); padding-inline: var(--fx-space-2); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-badge); background: var(--fx-bg-surface); color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; cursor: pointer; }
  .fx-overflow__more:hover { background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  .fx-overflow__more:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-overflow__more[hidden] { display: none; }
  .fx-overflow > :not(.fx-overflow__more) { flex: none; }
}

/* page-header */
@layer fx.components {
  /* Sahifa sarlavhasi (WDS «Dashboard»: yoʻl, nom + soni, neytral amallar, bitta asosiy tugma; sahifa amallari tepa panelda emas) */
  .fx-page-header { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--fx-space-3) var(--fx-space-6); margin-block-end: var(--fx-space-6); }
  .fx-page-header__main { display: grid; gap: var(--fx-space-2); flex: 1 1 auto; min-inline-size: 0; }
  .fx-page-header__title { display: flex; align-items: baseline; gap: var(--fx-space-3); margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1.15; text-wrap: balance; }
  .fx-page-header__count { color: var(--fx-text-tertiary); font-family: var(--fx-font-family-sans); font-size-adjust: var(--fx-font-adjust-sans); font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-regular); font-variant-numeric: tabular-nums; }
  .fx-page-header__text { margin: 0; max-inline-size: 70ch; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-page-header__actions { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); }
  /* Oʻrinlar (2.140): orqaga, meta qatori, ostida tablar, amallar ortiqchasi */
  .fx-page-header__back { flex: 0 0 100%; margin-block-end: calc(var(--fx-space-2) * -1); }
  .fx-page-header__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2) var(--fx-space-4); margin: 0; padding: 0; list-style: none; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-page-header__meta > li { display: inline-flex; align-items: center; gap: var(--fx-space-2); }
  .fx-page-header__meta > li + li::before { content: ""; inline-size: calc(var(--fx-space-1) / 2); block-size: calc(var(--fx-space-1) / 2); border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); }
  .fx-page-header__tabs { flex: 0 0 100%; margin-block-start: var(--fx-space-2); }
  .fx-page-header__actions { align-items: center; }
  .fx-page-header__more { margin-inline-start: auto; }
  /* Scrollda yigʻilish (4.155, M3 «Large top app bar»): data-collapse — sarlavha yopishqoq, sahifa aylantirilganda katta sarlavha kichik qatorga
     aylanadi, matn/meta yashirinadi, ostida chiziq paydo boʻladi. Faqat CSS (scroll-driven animation); qoʻllamaydigan brauzerda — oddiy yopishqoq sarlavha.
     Harakat kamaytirilsa — yigʻilgan holatga sakraydi emas, katta holat qoladi (animatsiya oʻchadi). */
  .fx-page-header[data-collapse] { position: sticky; inset-block-start: 0; z-index: 5; margin-block-end: var(--fx-space-4); padding-block: var(--fx-space-4) var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid transparent; background: var(--fx-bg-page); }
  .fx-page-header[data-collapse="surface"] { background: var(--fx-bg-surface); }
  @supports (animation-timeline: scroll()) {
    @media (prefers-reduced-motion: no-preference) {
      .fx-page-header[data-collapse] { animation: fx-ph-bar linear both; animation-timeline: scroll(nearest block); animation-range: 0 calc(var(--fx-space-12) * 2); }
      .fx-page-header[data-collapse] .fx-page-header__title { animation: fx-ph-title linear both; animation-timeline: scroll(nearest block); animation-range: 0 calc(var(--fx-space-12) * 2); transform-origin: left center; }
      .fx-page-header[data-collapse] :is(.fx-page-header__text, .fx-page-header__meta, .fx-page-header__back) { animation: fx-ph-hide linear both; animation-timeline: scroll(nearest block); animation-range: 0 var(--fx-space-12); }
    }
  }
  @keyframes fx-ph-bar { to { padding-block: var(--fx-space-2); border-block-end-color: var(--fx-border-color-default); } }
  @keyframes fx-ph-title { to { font-size: var(--fx-font-size-lg); } }
  @keyframes fx-ph-hide { to { opacity: 0; block-size: 0; margin: 0; overflow: hidden; visibility: hidden; } }
}

/* pager */
@layer fx.components {
  /* Oldingi / keyingi sahifa (#88): hujjat va maqola oxirida ikki katta havola */
  .fx-pager { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--fx-space-4); margin-block-start: var(--fx-space-10); }
  .fx-pager__link { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; padding: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); color: var(--fx-text-primary); text-decoration: none; transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-pager__link[rel="next"], .fx-pager__link[data-dir="next"] { grid-column: 2; text-align: end; }
  .fx-pager__link:hover { border-color: var(--fx-border-color-strong); background: var(--fx-bg-subtle); }
  .fx-pager__link:active { scale: var(--fx-motion-press); }
  .fx-pager__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-pager__label { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-pager__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-medium); }
  .fx-pager__link:hover .fx-pager__title { color: var(--fx-text-brand); }
  @media (max-width: 560px) {
    .fx-pager { grid-template-columns: minmax(0, 1fr); }
    .fx-pager__link[rel="next"], .fx-pager__link[data-dir="next"] { grid-column: 1; }
  }
}

/* pagination */
@layer fx.components {
  /* Sahifalash (WDS «Dashboard»: jami lenta + minimal sahifalash): «1–20 / 248» va oldingi/keyingi, kerak boʻlsa sahifa raqamlari */
  .fx-pagination { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-pagination__info { margin-inline-end: auto; font-variant-numeric: tabular-nums; }
  .fx-pagination__page {
    --_h: var(--fx-control-h-sm);
    display: inline-grid;
    place-items: center;
    min-inline-size: var(--_h);
    block-size: var(--_h);
    padding-inline: var(--fx-space-2);
    box-sizing: border-box;
    border: 0;
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    background: transparent;
    color: inherit;
    font: inherit;
    font-variant-numeric: tabular-nums;
    text-decoration: none;
    cursor: pointer;
  }
  .fx-pagination__page:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-pagination__page[aria-current="page"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-pagination__page[aria-disabled="true"] { color: var(--fx-text-disabled); pointer-events: none; }
  .fx-pagination__page:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-pagination__gap { padding-inline: var(--fx-space-1); color: var(--fx-text-tertiary); }
  /* Variantlar (2.99). Minimal: «1–20 / 248» va ‹ › — sahifa raqamlarisiz; tugmalar chegarali */
  .fx-pagination[data-variant="minimal"] .fx-pagination__page { border: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-surface); color: var(--fx-text-primary); }
  .fx-pagination[data-variant="minimal"] .fx-pagination__page:hover { background: var(--fx-bg-muted); }
  .fx-pagination[data-variant="minimal"] .fx-pagination__page[aria-disabled="true"] { border-color: var(--fx-border-color-default); background: transparent; color: var(--fx-text-disabled); }
  .fx-pagination__page > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  /* Sahifa hajmi: «Sahifada: [20 ▾]» — native select */
  .fx-pagination__size { display: inline-flex; align-items: center; gap: var(--fx-space-2); white-space: nowrap; }
  .fx-pagination__size .fx-select { inline-size: auto; }
  /* «Yana yuklash»: markazda tugma + qancha koʻrsatilgani va ingichka chiziq (kursor/cheksiz roʻyxat) */
  .fx-pagination[data-variant="more"] { flex-direction: column; justify-content: center; gap: var(--fx-space-3); text-align: center; }
  .fx-pagination[data-variant="more"] .fx-pagination__info { margin-inline: 0; }
  .fx-pagination__more { display: grid; justify-items: center; gap: var(--fx-space-2); inline-size: min(100%, calc(var(--fx-popover-width) * 0.8)); }
  .fx-pagination__more .fx-progress { inline-size: 100%; }
}

/* parallax */
@layer fx.components {
  /* Parallaks qatlamlar (4.38, Aceternity Parallax Scroll / Hero Parallax): har [data-fx-parallax] qatlam sahifa aylantirilganda
     oʻz tezligida siljiydi — JS’siz, scroll-driven animatsiya (animation-timeline: view()). Masofa --fx-motion-shift-lg’dan:
     harakat kamaytirilsa yoki data-fx-motion="none" boʻlsa siljish 0 — qatlamlar joyida turadi (kontent hech qachon yashirinmaydi).
     Qoʻllanmaydigan brauzerda — oddiy statik tartib. Qiymat — tezlik: slow (0,5) · (standart 1) · fast (2) · reverse (−1, teskari).
     data-axis="x" — gorizontal (Hero Parallax qatorlari: qoʻshni qatorlar teskari yoʻnalishda). .fx-parallax — kesuvchi konteyner. */
  .fx-parallax { position: relative; overflow: clip; }
  .fx-parallax__row { display: flex; gap: var(--fx-space-4); inline-size: max-content; }
  [data-fx-parallax] { --_depth: 1; --_dist: calc(var(--fx-motion-shift-lg) * 3); }
  [data-fx-parallax="slow"] { --_depth: 0.5; }
  [data-fx-parallax="fast"] { --_depth: 2; }
  [data-fx-parallax="reverse"] { --_depth: -1; }
  @supports (animation-timeline: view()) {
    @media (prefers-reduced-motion: no-preference) {
      [data-fx-parallax] {
        animation: fx-parallax-y linear both;
        animation-duration: auto;
        animation-timeline: view();
        animation-range: cover;
        will-change: translate;
      }
      [data-fx-parallax][data-axis="x"] { animation-name: fx-parallax-x; --_dist: calc(var(--fx-motion-shift-lg) * 8); }
      [data-fx-motion="none"] [data-fx-parallax], [data-fx-parallax][data-fx-motion="none"] { animation: none; }
    }
  }
  @keyframes fx-parallax-y { from { translate: 0 calc(var(--_dist) * var(--_depth)); } to { translate: 0 calc(var(--_dist) * var(--_depth) * -1); } }
  @keyframes fx-parallax-x { from { translate: calc(var(--_dist) * var(--_depth) * -1) 0; } to { translate: calc(var(--_dist) * var(--_depth)) 0; } }
}

/* particles */
@layer fx.components {
  /* Zarrachalar (4.66): ota blok ortidagi canvas qatlam — sekin suzuvchi nuqtalar, kursor yaqinida itariladi, data-links bilan yaqinlari
     ingichka chiziq bilan bogʻlanadi. Chizish — foxui.js (data-fx-particles): koʻrinmasa chizmaydi, DPR hisobga olinadi, rang CSS’dan (--_c).
     Ota blok position: relative (yoki isolation: isolate) boʻlsa, qatlam butun maydonni egallaydi va bosilmaydi. Harakat kamaytirilsa — statik kadr. */
  .fx-particles {
    --_c: color-mix(in oklab, var(--fx-text-primary) 45%, transparent);
    position: absolute;
    inset: 0;
    z-index: -1;
    overflow: hidden;
    pointer-events: none;
    border-radius: inherit;
    color: var(--_c);
  }
  .fx-particles__canvas { display: block; inline-size: 100%; block-size: 100%; }
  .fx-particles[data-tone="brand"] { --_c: var(--fx-bg-brand-solid); }
  .fx-particles[data-tone="strong"] { --_c: color-mix(in oklab, var(--fx-text-primary) 75%, transparent); }
  .fx-particles[data-on="brand"] { --_c: color-mix(in oklab, var(--fx-text-on-brand) 70%, transparent); }
  .fx-particles[data-fade] .fx-particles__canvas { mask: radial-gradient(ellipse 75% 70% at 50% 45%, black 30%, transparent 85%); }
  @media (forced-colors: active) { .fx-particles { display: none; } }
}

/* path */
@layer fx.components {
  /* Bosqich yoʻli (4.140, SLDS «Path»): CRM bitimi bosqichlari chevronlar qatorida. Holat shakl + soʻz bilan: oʻtgan — ✓ belgisi,
     joriy — toʻldirilgan va qalin (aria-current="step"), keyingi — xira, yoʻqotilgan — ✕. Koʻrilayotgan bosqich (aria-selected) — ichki halqa.
     Xulq (data-fx-path): APG «Tabs» — ← → Home End, «Bosqichni yakunlash» tugmasi. Telefonda faqat joriy bosqich nomi koʻrinadi. */
  .fx-path { display: flex; align-items: center; gap: var(--fx-space-3); min-inline-size: 0; }
  .fx-path__stages { display: flex; flex: 1 1 auto; min-inline-size: 0; margin: 0; padding: 0; list-style: none; }
  .fx-path__stage { --_bg: var(--fx-bg-muted); --_fg: var(--fx-text-secondary); --_tip: calc(var(--fx-control-h-sm) / 3); position: relative; display: inline-flex; flex: 1 1 0; align-items: center; justify-content: center; gap: var(--fx-space-1); min-inline-size: 0; block-size: var(--fx-control-h-sm); margin-inline-start: calc(var(--_tip) * -1 + var(--fx-space-1)); padding: 0 calc(var(--_tip) + var(--fx-space-2)); border: 0; background: var(--_bg); color: var(--_fg); font: inherit; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); white-space: nowrap; cursor: pointer; clip-path: polygon(0 0, calc(100% - var(--_tip)) 0, 100% 50%, calc(100% - var(--_tip)) 100%, 0 100%, var(--_tip) 50%); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-path__stage:first-child { margin-inline-start: 0; border-start-start-radius: var(--fx-radius-control); border-end-start-radius: var(--fx-radius-control); clip-path: polygon(0 0, calc(100% - var(--_tip)) 0, 100% 50%, calc(100% - var(--_tip)) 100%, 0 100%); }
  .fx-path__stage:last-child { border-start-end-radius: var(--fx-radius-control); border-end-end-radius: var(--fx-radius-control); clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%, var(--_tip) 50%); }
  .fx-path__stage:only-child { clip-path: none; }
  .fx-path__label { overflow: hidden; text-overflow: ellipsis; }
  .fx-path__stage:hover { --_bg: var(--fx-bg-subtle); --_fg: var(--fx-text-primary); }
  .fx-path__stage[data-state="done"] { --_bg: var(--fx-bg-brand-subtle); --_fg: var(--fx-text-brand); }
  .fx-path__stage[data-state="done"]::before, .fx-path__stage[data-state="lost"]::before { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-path__stage[aria-current="step"] { --_bg: var(--fx-bg-brand-solid); --_fg: var(--fx-text-on-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-path__stage[aria-current="step"]:hover { --_bg: var(--fx-bg-brand-solid-hover); }
  .fx-path__stage[data-state="lost"] { --_bg: var(--fx-bg-error-solid); --_fg: var(--fx-text-on-error); }
  .fx-path__stage[data-state="lost"]::before { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 4.5l7 7m0-7-7 7' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E"); }
  /* koʻrilayotgan (tanlangan) bosqich — ichki chiziq; fokus — tashqi halqa emas (clip-path kesadi), ichki outline */
  .fx-path__stage[aria-selected="true"]:not([aria-current="step"]) { --_fg: var(--fx-text-primary); }
  .fx-path__stage[aria-selected="true"]:not([aria-current="step"])::after { content: ""; position: absolute; inset-inline: calc(var(--_tip) + var(--fx-space-1)); inset-block-end: var(--fx-space-1); block-size: var(--fx-border-width-focus); border-radius: var(--fx-border-width-focus); background: currentColor; }
  .fx-path__stage:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -2.5); }
  .fx-path__stage:active { scale: var(--fx-motion-press); }
  .fx-path__action { flex: none; }
  .fx-path__status { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
  @media (max-width: 640px) {
    .fx-path { flex-wrap: wrap; }
    .fx-path__stage:not([aria-current="step"], [aria-selected="true"]) .fx-path__label { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
    .fx-path__stage:not([aria-current="step"], [aria-selected="true"]) { flex: 0 0 calc(var(--fx-control-h-sm) * 0.9); }
    .fx-path__action { flex: 1 1 100%; }
  }
  @media (forced-colors: active) { .fx-path__stage { border: var(--fx-border-width-default) solid CanvasText; clip-path: none; } .fx-path__stage[aria-current="step"] { forced-color-adjust: none; background: Highlight; color: HighlightText; } }
}

/* peek */
@layer fx.components {
  /* Ichkaridan koʻrish paneli (peek): roʻyxat ustidan oʻng chetdan chiqadi, roʻyxat joyida qoladi.
     Ota (.fx-peek) position: relative; panel — yon varaq kabi, lekin modal emas: roʻyxat bilan ishlashda davom etish mumkin.
     Tepada: oldingi/keyingi (J/K), hisoblagich, yopish. Xulq — foxui.js (data-fx-peek). */
  .fx-peek { position: relative; overflow: hidden; }
  .fx-peek__panel {
    position: absolute;
    inset-block: 0;
    inset-inline-end: 0;
    z-index: 1;
    display: flex;
    flex-direction: column;
    inline-size: min(100%, calc(var(--fx-dialog-width) * 0.9));
    border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-lg);
    visibility: hidden;
    translate: 100% 0;
    transition: translate var(--fx-motion-exit-slow) var(--fx-ease-exit), visibility var(--fx-motion-exit-slow) var(--fx-ease-exit);
  }
  .fx-peek__panel[data-open] { visibility: visible; translate: 0 0; transition: translate var(--fx-motion-slower) var(--fx-ease-sheet), visibility var(--fx-motion-instant) step-start; }
  @media (prefers-reduced-motion: reduce) { .fx-peek__panel { transition: none; } }
  .fx-peek__head { flex: none; display: flex; align-items: center; gap: var(--fx-space-1); padding: var(--fx-space-2) var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-peek__count { margin-inline: var(--fx-space-2) auto; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-peek__body { flex: 1; min-block-size: 0; overflow: auto; padding: var(--fx-space-5); }
  .fx-peek__item[hidden] { display: none; }
  .fx-peek__title { margin: 0 0 var(--fx-space-2); font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-peek__title:focus { outline: none; }
  .fx-peek__title:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* Ochiq paneldagi tanlangan qator */
  .fx-peek [data-peek-open][aria-current="true"] { background: var(--fx-bg-brand-subtle); }
}

/* persona */
@layer fx.components {
  /* Odam qatori: avatar + ism + ikkinchi qator (rol, holat, pochta) + ixtiyoriy oʻng amal. Ism — haqiqiy matn. */
  .fx-persona { display: flex; align-items: center; gap: var(--fx-space-3); min-inline-size: 0; }
  .fx-persona__text { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; flex: 1; }
  .fx-persona__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); color: var(--fx-text-primary); }
  .fx-persona__meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-persona__end { flex: none; display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-persona[data-size="sm"] { gap: var(--fx-space-2); }
  .fx-persona[data-size="sm"] .fx-persona__name { font-size: var(--fx-font-size-xs); }
  .fx-persona[data-size="lg"] { gap: var(--fx-space-4); }
  .fx-persona[data-size="lg"] .fx-persona__name { font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-persona[data-size="lg"] .fx-persona__meta { font-size: var(--fx-font-size-sm); }
  a.fx-persona { color: inherit; text-decoration: none; border-radius: var(--fx-radius-nav); }
  a.fx-persona:hover .fx-persona__name { text-decoration: underline; }
  a.fx-persona:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
}

/* phase */
@layer fx.components {
  /* Bosqich banneri (4.164, GOV.UK Phase banner): sayt tepasida «Beta — bu xizmat yangi, fikringizni yozing».
     «Build in public»: mahsulot hali qurilayotgani ochiq aytiladi va fikr bildirish havolasi doim koʻz oldida. Faqat CSS.
     data-phase: alpha (ilk sinov) · beta (standart) · preview (oldindan koʻrish). Yorliq + soʻz — rang yolgʻiz emas. */
  .fx-phase {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--fx-space-2) var(--fx-space-3);
    padding: var(--fx-space-2) var(--fx-space-6);
    border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    background: var(--fx-bg-subtle);
    color: var(--fx-text-secondary);
    font-size: var(--fx-font-size-sm);
  }
  .fx-phase__tag {
    flex: none;
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-1);
    padding: calc(var(--fx-space-1) / 2) var(--fx-space-2);
    border-radius: var(--fx-radius-badge);
    background: var(--fx-bg-brand-solid);
    color: var(--fx-text-on-brand);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-semibold);
    letter-spacing: 0.04em;
    text-transform: uppercase;
  }
  .fx-phase[data-phase="alpha"] .fx-phase__tag { background: var(--fx-bg-category-coral); color: var(--fx-text-on-category); }
  .fx-phase[data-phase="preview"] .fx-phase__tag { background: var(--fx-bg-category-blue); color: var(--fx-text-on-category); }
  .fx-phase__text { flex: 1 1 auto; min-inline-size: 0; margin: 0; }
  .fx-phase__text a { color: var(--fx-text-primary); text-underline-offset: 0.2em; }
  .fx-phase__text a:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); border-radius: var(--fx-radius-badge); }
  .fx-phase__meta { flex: none; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  /* markazda ixcham (landing hero ustida) */
  .fx-phase[data-variant="pill"] {
    display: inline-flex;
    padding: calc(var(--fx-space-1) / 2) var(--fx-space-3) calc(var(--fx-space-1) / 2) calc(var(--fx-space-1) / 2);
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: calc(var(--fx-radius-overlay) * 3);
    background: var(--fx-bg-surface);
  }
  .fx-phase[data-variant="pill"] .fx-phase__tag { border-radius: calc(var(--fx-radius-overlay) * 3); }
  @media (max-width: 40em) { .fx-phase { padding-inline: var(--fx-space-4); } .fx-phase__meta { display: none; } }
  @media (forced-colors: active) { .fx-phase__tag { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* phone */
@layer fx.components {
  /* Telefon maydoni (4.84): chapda mamlakat tugmasi (bayroq + kod), oʻngda raqam — mamlakat niqobi bilan. Standart — Oʻzbekiston +998.
     Formaga E.164 (+998901234567) yashirin input orqali ketadi. Mamlakat roʻyxati — popover ichida qidiruvli listbox (xulq chizadi). */
  .fx-phone {
    --_h: var(--fx-control-h-md);
    position: relative;
    display: flex;
    align-items: center;
    inline-size: 100%;
    block-size: var(--_h);
    box-sizing: border-box;
    background: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-phone:hover { border-color: color-mix(in oklab, var(--fx-border-color-strong) calc((1 - var(--fx-knob-field-fill)) * 100%), transparent); }
  .fx-phone:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-phone[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  .fx-phone[data-size="lg"] { --_h: var(--fx-control-h-lg); }
  .fx-phone__country {
    flex: none;
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-2);
    block-size: 100%;
    padding-inline: var(--fx-space-4) var(--fx-space-3);
    border: 0;
    border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-start-start-radius: inherit;
    border-end-start-radius: inherit;
    background: transparent;
    color: var(--fx-text-primary);
    font: inherit;
    font-size: var(--fx-font-size-sm);
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-phone__country:hover { background: var(--fx-bg-muted); }
  .fx-phone__country:active { scale: var(--fx-motion-press); }
  .fx-phone__country:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-phone__country > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); color: var(--fx-text-tertiary); transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-phone__country[aria-expanded="true"] > svg { rotate: 180deg; }
  .fx-phone__flag { font-size: var(--fx-font-size-lg); line-height: 1; }
  .fx-phone__code { color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; }
  .fx-phone__input {
    flex: 1;
    min-inline-size: 0;
    block-size: 100%;
    padding-inline: var(--fx-space-3) var(--fx-space-4);
    border: 0;
    background: transparent;
    color: var(--fx-text-primary);
    font: inherit;
    font-size: var(--fx-font-size-md);
    font-variant-numeric: tabular-nums;
  }
  .fx-phone__input:focus { outline: none; }
  .fx-phone__input::placeholder { color: var(--fx-text-tertiary); }
  .fx-phone__input:disabled { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-phone:has(.fx-phone__input:disabled) { background: var(--fx-bg-muted); }
  /* Toʻliq raqam — oʻngda ✓ (rang yolgʻiz emas); xato — .fx-field[data-invalid] bilan qizil chegara + izoh matni */
  .fx-phone[data-complete]::after { content: "✓"; flex: none; padding-inline-end: var(--fx-space-4); color: var(--fx-fg-success); font-weight: var(--fx-font-weight-semibold); }
  .fx-field[data-invalid] .fx-phone { border-color: var(--fx-border-color-error); }
  /* Mamlakatlar roʻyxati: qidiruv + listbox; maydon chetidan ochiladi */
  .fx-popover.fx-phone__pop { inline-size: calc(var(--fx-popover-width) * 0.9); padding: var(--fx-space-2); }
  .fx-phone__search { margin-block-end: var(--fx-space-1); }
  .fx-phone__list { max-block-size: calc(var(--fx-control-h-md) * 6.5); }
  .fx-phone__list .fx-option { font-variant-numeric: tabular-nums; }
  .fx-phone__list .fx-option[aria-selected="true"]::after { content: "✓"; margin-inline-start: var(--fx-space-2); }
  @supports (anchor-name: --a) and (anchor-scope: --a) {
    .fx-phone { anchor-scope: --fx-ph; anchor-name: --fx-ph; }
    .fx-popover.fx-phone__pop { position-anchor: --fx-ph; position-area: block-end span-inline-end; }
  }
  @media (forced-colors: active) { .fx-phone { border-color: ButtonText; } }
}

/* plan */
@layer fx.components {
  /* Reja / vazifalar navbati: sarlavha + progress «3/7», qadamlar ro'yxati. Holatlar: done (✓) · active (halqa pulsatsiyasi, aria-current="step") ·
     pending (boʻsh halqa) · skipped (chiziq + oʻtkazib yuborildi). Holat faqat rangda emas: shakl + yashirin soʻz. <details> boʻlsa — yigʻiladi. */
  .fx-plan { border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); font-size: var(--fx-font-size-sm); }
  .fx-plan__head { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--fx-space-1) var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); list-style: none; }
  details.fx-plan > .fx-plan__head { cursor: pointer; border-radius: inherit; user-select: none; }
  details.fx-plan > .fx-plan__head::-webkit-details-marker { display: none; }
  details.fx-plan > .fx-plan__head:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-plan__title { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-plan__count { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-plan__bar { grid-column: 1 / -1; appearance: none; inline-size: 100%; block-size: calc(var(--fx-space-1) * 1.5); border: 0; border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); overflow: hidden; }
  .fx-plan__bar::-webkit-progress-bar { background: var(--fx-bg-muted); }
  .fx-plan__bar::-webkit-progress-value { border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); transition: inline-size var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-plan__bar::-moz-progress-bar { border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); }
  .fx-plan__list { display: grid; gap: var(--fx-space-1); margin: 0; padding: 0 var(--fx-space-4) var(--fx-space-3); list-style: none; }
  .fx-plan__item { display: grid; grid-template-columns: var(--fx-size-icon-md) minmax(0, 1fr); align-items: start; gap: var(--fx-space-3); padding-block: var(--fx-space-1); color: var(--fx-text-primary); line-height: 1.5; }
  .fx-plan__item::before { content: ""; box-sizing: border-box; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); margin-block-start: calc(var(--fx-space-1) / 2); border: var(--fx-border-width-focus) solid var(--fx-text-tertiary); border-radius: var(--fx-radius-circle); }
  .fx-plan__item[data-state="active"]::before { border-color: var(--fx-text-brand); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-plan__item[data-state="done"] { color: var(--fx-text-secondary); }
  .fx-plan__item[data-state="done"]::before { border: 0; background: var(--fx-fg-success); mask: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M12 3a9 9 0 100 18 9 9 0 000-18zm-1.2 12.4l-3.3-3.3 1.1-1.1 2.2 2.2 4.6-4.6 1.1 1.1-5.7 5.7z'/%3E%3C/svg%3E"); }
  .fx-plan__item[data-state="skipped"] { color: var(--fx-text-tertiary); text-decoration: line-through; }
  .fx-plan__item[data-state="skipped"]::before { border-style: dashed; }
  .fx-plan__item[data-state="pending"] { color: var(--fx-text-secondary); }
  .fx-plan__item[data-state="active"] { font-weight: var(--fx-font-weight-medium); }
  .fx-plan__chev { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: var(--fx-text-tertiary); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  details.fx-plan[open] .fx-plan__chev { rotate: 90deg; }
  @media (prefers-reduced-motion: reduce) { .fx-plan__item[data-state="active"]::before { animation: none; } }
}

/* popover */
@layer fx.components {
  /* Native popover + anchor positioning: yuqori qatlam, Esc va tashqariga bosib yopish brauzerning oʻzida.
     Langar: tugmada popovertarget (yashirin langar) yoki style="anchor-name" + position-anchor. */
  .fx-popover {
    inline-size: max-content;
    max-inline-size: min(100vw - var(--fx-space-8), var(--fx-popover-width));
    margin: 0;
    padding: var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-lg);
    font-size: var(--fx-font-size-sm);
  }
  /* Kirish va chiqish (WDS «Harakat»: har kirishning chiqishi bor; chiqish ~30 % tez) */
  .fx-popover { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 calc(var(--fx-motion-shift-sm) * -1); transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), scale var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete, overlay var(--fx-motion-exit-fast) allow-discrete; }
  .fx-popover:popover-open { opacity: 1; scale: 1; translate: 0 0; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-popover:popover-open { opacity: 0; scale: var(--fx-motion-scale-enter); translate: 0 calc(var(--fx-motion-shift-sm) * -1); } }
  .fx-popover { transform-origin: top center; }
  @supports (position-area: block-end) {
    .fx-popover {
      inset: auto;
      position-area: block-end span-inline-end;
      position-try-fallbacks: flip-block, flip-inline;
      margin-block: var(--fx-space-2);
    }
  }
  /* Strelka (2.80): data-arrow — qatlam tugma ostida, strelka tepada; flip oʻchiriladi (strelka yoʻnalishi buzilmasin) */
  .fx-popover[data-arrow] { overflow: visible; }
  .fx-popover[data-arrow]::before {
    content: "";
    position: absolute;
    inset-block-start: calc(var(--fx-space-1) * -1.5);
    inset-inline-start: var(--fx-space-4);
    inline-size: var(--fx-space-3);
    block-size: var(--fx-space-3);
    background: inherit;
    border: inherit;
    border-block-end: 0;
    border-inline-end: 0;
    border-start-start-radius: calc(var(--fx-space-1) / 2);
    rotate: 45deg;
  }
  @supports (position-area: block-end) { .fx-popover[data-arrow] { position-try-fallbacks: none; margin-block: calc(var(--fx-space-2) + var(--fx-space-1)); } }
  /* Oʻlchamlar (sm/lg) va pastki amallar qatori; popconfirm (#69) — «Ha / Yoʻq» tugma yonida, modalsiz */
  .fx-popover[data-size="sm"] { max-inline-size: calc(var(--fx-popover-width) * 0.75); padding: var(--fx-space-3); }
  .fx-popover[data-size="lg"] { max-inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-popover-width) * 1.5)); padding: var(--fx-space-6); }
  .fx-popover__text { margin: 0; color: var(--fx-text-secondary); }
  .fx-popover__actions { display: flex; justify-content: flex-end; gap: var(--fx-space-2); margin-block-start: var(--fx-space-3); }
  .fx-popover__title { margin: 0 0 var(--fx-space-2); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  /* ---- Kengaytma (2.80): sarlavha/pastki qism chiziqlari ---- */
  .fx-popover__head { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); margin: calc(var(--fx-space-4) * -1) calc(var(--fx-space-4) * -1) var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-popover__head > .fx-popover__title { margin: 0; }
  .fx-popover__foot { margin: var(--fx-space-3) calc(var(--fx-space-4) * -1) calc(var(--fx-space-4) * -1); padding: var(--fx-space-3) var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  @media (forced-colors: active) { .fx-popover { border-color: CanvasText; } }
}
@layer fx.components {
  /* Moslashuvchi overlay (4.26): data-fx-adaptive — telefonda (< 640 px) popover pastki varaqqa aylanadi: toʻliq en, pastdan chiqadi, fon xiralashadi,
     tepada tutqich chizigʻi; kompyuterda — oddiy popover. Barmoq uchun bandlar balandroq. Atribut faqat CSS — xulq oʻzgarmaydi. */
  @media (max-width: 640px) {
    .fx-popover[data-fx-adaptive] { position: fixed; inset: auto 0 0 0; box-sizing: border-box; inline-size: 100%; max-inline-size: 100%; min-inline-size: 0; max-block-size: 85dvh; margin: 0; padding-block-end: calc(var(--fx-space-4) + env(safe-area-inset-bottom, 0px)); border-radius: var(--fx-radius-overlay) var(--fx-radius-overlay) 0 0; overflow: auto; position-area: none; position-try-fallbacks: none; translate: 0 100%; scale: 1; transform-origin: bottom center; }
    .fx-popover[data-fx-adaptive]:popover-open { translate: 0 0; transition-timing-function: var(--fx-ease-sheet); transition-duration: var(--fx-motion-slow); }
    @starting-style { .fx-popover[data-fx-adaptive]:popover-open { translate: 0 100%; } }
    .fx-popover[data-fx-adaptive]::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 40%, transparent); }
    .fx-popover[data-fx-adaptive]::before { content: ""; display: block; inline-size: var(--fx-space-8); block-size: var(--fx-space-1); margin: 0 auto var(--fx-space-3); border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); position: static; rotate: none; border: 0; }
  }
}

/* presence */
@layer fx.components {
  /* Hozir kim shu yerda (#150): ustma-ust avatarlar (hover/fokusda ism va holat sharhi), “N kishi koʻryapti”, yozish indikatori va jonli kursor yorligʻi.
     Rang — 6 toifa rangi (data-color), holat soʻz bilan ham yoziladi (aria-label va sharh). Maʼlumotni (WebSocket va h.k.) ilova yangilaydi. */
  .fx-presence { display: inline-flex; align-items: center; gap: var(--fx-space-3); }
  .fx-presence__list { display: flex; align-items: center; margin: 0; padding: 0; list-style: none; }
  .fx-presence__user { position: relative; display: inline-flex; border-radius: var(--fx-radius-nav); }
  .fx-presence__user + .fx-presence__user { margin-inline-start: calc(var(--fx-space-1) * -1); }
  .fx-presence__user > .fx-avatar { outline: var(--fx-border-width-focus) solid var(--fx-bg-surface); transition: translate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-presence__user:hover > .fx-avatar, .fx-presence__user:focus-visible > .fx-avatar { translate: 0 calc(var(--fx-space-1) * -1); }
  .fx-presence__user:hover, .fx-presence__user:focus-within { z-index: 2; }
  .fx-presence__user:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-presence__tip {
    position: absolute; inset-block-start: calc(100% + var(--fx-space-2)); inset-inline-start: 50%; z-index: 10;
    translate: -50% calc(var(--fx-motion-shift-sm) * -1); opacity: 0; pointer-events: none; inline-size: max-content; max-inline-size: calc(var(--fx-popover-width) * 0.75);
    padding: var(--fx-space-1) var(--fx-space-2); border-radius: var(--fx-radius-control); background: var(--fx-text-primary); color: var(--fx-bg-surface); font-size: var(--fx-font-size-xs);
    transition: opacity var(--fx-motion-fast) var(--fx-ease-exit), translate var(--fx-motion-fast) var(--fx-ease-exit);
  }
  .fx-presence__tip b { font-weight: var(--fx-font-weight-semibold); }
  .fx-presence__user:hover > .fx-presence__tip, .fx-presence__user:focus-visible > .fx-presence__tip { opacity: 1; translate: -50% 0; transition-timing-function: var(--fx-ease-enter); }
  .fx-presence__label { color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  /* Yozish indikatori: uch nuqta (harakatsizlikda ham koʻrinadi), matn bilan */
  .fx-presence__typing { display: flex; margin: var(--fx-space-2) 0 0; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-presence__dots { display: inline-flex; gap: calc(var(--fx-space-1) / 2); }
  .fx-presence__dots > i { inline-size: var(--fx-space-1); block-size: var(--fx-space-1); border-radius: var(--fx-radius-circle); background: currentColor; animation: fx-presence-dot var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-presence__dots > i:nth-child(2) { animation-delay: var(--fx-motion-fast); }
  .fx-presence__dots > i:nth-child(3) { animation-delay: var(--fx-motion-base); }
  @keyframes fx-presence-dot { 0%, 70%, 100% { translate: 0 0; opacity: 0.4; } 35% { translate: 0 calc(var(--fx-space-1) * -1); opacity: 1; } }
  @media (prefers-reduced-motion: reduce) { .fx-presence__dots > i { animation: none; opacity: 0.7; } }
  /* Jonli kursor: ota-ona position: relative; oʻrni --x / --y (inline style, foizda) */
  .fx-presence__cursor { --_c: var(--fx-bg-category-blue); position: absolute; inset-inline-start: var(--x, 0%); inset-block-start: var(--y, 0%); display: flex; align-items: flex-start; pointer-events: none; z-index: 5; transition: inset var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-presence__cursor::before {
    content: ""; flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); background: var(--_c);
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 3l15 8-6.5 1.8L9.5 19z' fill='black' stroke='black' stroke-width='1.5' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
  }
  .fx-presence__flag { margin-block-start: var(--fx-space-4); margin-inline-start: calc(var(--fx-space-2) * -1); padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-control); background: var(--_c); color: var(--fx-text-on-category); font-size: var(--fx-font-size-xs); white-space: nowrap; }
  .fx-presence__cursor[data-color="yellow"] { --_c: var(--fx-bg-category-yellow); }
  .fx-presence__cursor[data-color="pink"] { --_c: var(--fx-bg-category-pink); }
  .fx-presence__cursor[data-color="coral"] { --_c: var(--fx-bg-category-coral); }
  .fx-presence__cursor[data-color="green"] { --_c: var(--fx-bg-category-green); }
  .fx-presence__cursor[data-color="purple"] { --_c: var(--fx-bg-category-purple); }
}

/* pricing */
@layer fx.components {
  /* Narx jadvali (4.169, #56): sarlavha + oylik/yillik almashtirgich + tarif kartalari + izoh + taqqoslash jadvali.
     Almashtirgich — radio guruh (JS’siz): .fx-pricing:has(input[value="year"]:checked) narxlarni [data-period] boʻyicha almashtiradi,
     plita sirpanib oʻtadi. Tavsiya tarif — data-featured (brend chegarasi, «Eng ommabop» belgisi; data-fx="beam" bilan nur).
     Kalibr: kartalar bir xil balandlikda, CTA pastki chiziqda tekis; telefonda ustma-ust. */
  .fx-pricing { display: grid; gap: var(--fx-space-10); }
  .fx-pricing__head { display: grid; justify-items: center; gap: var(--fx-space-3); max-inline-size: calc(var(--fx-dialog-width) * 1.5); margin-inline: auto; text-align: center; }
  .fx-pricing__eyebrow { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-pricing__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1.15; letter-spacing: -0.02em; text-wrap: balance; }
  .fx-pricing__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  /* oylik / yillik almashtirgich: sirpanuvchi plita */
  .fx-pricing__toggle {
    position: relative;
    display: inline-grid;
    grid-auto-flow: column;
    grid-auto-columns: 1fr;
    margin: var(--fx-space-3) 0 0;
    padding: var(--fx-space-1);
    border: 0;
    border-radius: calc(var(--fx-radius-control) + var(--fx-space-1));
    background: var(--fx-bg-muted);
  }
  .fx-pricing__toggle::before {
    content: "";
    position: absolute;
    inset-block: var(--fx-space-1);
    inset-inline-start: var(--fx-space-1);
    inline-size: calc(50% - var(--fx-space-1));
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
    transition: translate var(--fx-motion-slow) var(--fx-ease-spring);
  }
  .fx-pricing__toggle:has(input[value="year"]:checked)::before { translate: 100% 0; }
  .fx-pricing__toggle:dir(rtl):has(input[value="year"]:checked)::before { translate: -100% 0; }
  .fx-pricing__period {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--fx-space-2);
    min-block-size: var(--fx-control-h-sm);
    padding-inline: var(--fx-space-4);
    border-radius: var(--fx-radius-control);
    color: var(--fx-text-secondary);
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    white-space: nowrap;
    cursor: pointer;
    transition: color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-pricing__period > input { position: absolute; opacity: 0; pointer-events: none; }
  .fx-pricing__period:has(input:checked) { color: var(--fx-text-primary); }
  .fx-pricing__period:has(input:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-pricing__save { padding: 0 var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); }
  /* tarif kartalari */
  .fx-pricing__plans { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-popover-width) * 0.92)), 1fr)); align-items: stretch; gap: var(--fx-space-4); margin: 0; padding: 0; list-style: none; }
  .fx-pricing__plan {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: var(--fx-space-5);
    padding: var(--fx-space-6);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
  }
  .fx-pricing__plan[data-featured] { border-color: color-mix(in oklab, var(--fx-bg-brand-solid) 55%, var(--fx-border-color-surface)); box-shadow: var(--fx-shadow-lg); }
  .fx-pricing__plan[data-featured]::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; background: radial-gradient(ellipse 80% 50% at 50% 0%, color-mix(in oklab, var(--fx-bg-brand-solid) 10%, transparent), transparent); }
  .fx-pricing__plan[data-featured] { isolation: isolate; background: var(--fx-bg-surface); }
  .fx-pricing__top { display: grid; gap: var(--fx-space-2); }
  .fx-pricing__name { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-2); margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-pricing__badge { padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); }
  .fx-pricing__desc { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-wrap: pretty; }
  .fx-pricing__price { display: grid; gap: var(--fx-space-1); margin: 0; min-block-size: calc(var(--fx-space-12) * 1.5); align-content: start; }
  .fx-pricing__price > [data-period] { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--fx-space-1) var(--fx-space-2); }
  .fx-pricing [data-period="year"] { display: none; }
  .fx-pricing:has(.fx-pricing__toggle input[value="year"]:checked) [data-period="year"] { display: flex; }
  .fx-pricing:has(.fx-pricing__toggle input[value="year"]:checked) [data-period="month"] { display: none; }
  .fx-pricing__amount { font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1.1; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }
  .fx-pricing__amount[data-soon] { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xl); }
  .fx-pricing__per { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-pricing__sub { flex-basis: 100%; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-pricing__cta { box-sizing: border-box; inline-size: 100%; }
  .fx-pricing__features { display: grid; gap: var(--fx-space-3); margin: 0; padding: var(--fx-space-5) 0 0; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); list-style: none; font-size: var(--fx-font-size-sm); }
  .fx-pricing__features > li { display: flex; gap: var(--fx-space-2); }
  .fx-pricing__features > li::before { content: ""; flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); background: var(--fx-text-brand); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M5 10.5l3.2 3.2L15 6.5' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-pricing__features > li[data-off] { color: var(--fx-text-tertiary); }
  .fx-pricing__features > li[data-off]::before { background: var(--fx-text-disabled); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M6 10h8' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-pricing__features-title { flex-basis: 100%; color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-pricing__features > li.fx-pricing__features-title::before { display: none; }
  /* shartlar izohi (litsenziya, lifetime yoʻq) */
  .fx-pricing__note { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-2) var(--fx-space-5); margin: 0; padding: 0; list-style: none; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-align: center; }
  .fx-pricing__note > li { display: inline-flex; align-items: center; gap: var(--fx-space-2); }
  .fx-pricing__note > li + li::before { content: ""; inline-size: var(--fx-space-1); block-size: var(--fx-space-1); border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); margin-inline-end: var(--fx-space-3); }
  /* taqqoslash jadvali (fx-table ustiga) */
  .fx-pricing__compare { inline-size: 100%; }
  .fx-pricing__compare :is(th, td):not(:first-child) { text-align: center; }
  .fx-pricing__compare thead th:not(:first-child) { font-size: var(--fx-font-size-sm); }
  .fx-pricing__yes { color: var(--fx-fg-success); font-weight: var(--fx-font-weight-semibold); }
  .fx-pricing__no { color: var(--fx-text-disabled); }
  @media (max-width: 40em) { .fx-pricing__toggle { box-sizing: border-box; inline-size: 100%; } }
  @media (forced-colors: active) { .fx-pricing__plan[data-featured] { border-color: Highlight; } .fx-pricing__toggle::before { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* print */
@layer fx.components {
  /* Bosma qatlami (4-toʻlqin 4.14; GOV.UK, Carbon, Primer). Ekranda .fx-print — oddiy hujjat oʻrami (hisob-faktura, dalolatnoma, hisobot).
     Chop etilganda (Ctrl+P) global: navigatsiya, tugmalar, toast, suzuvchi qatlamlar yashirinadi; karkas bitta ustunga yoyiladi;
     soyalar oʻchadi; jadval sarlavhasi har betda takrorlanadi; qator, rasm, karta betda boʻlinmaydi.
     Boshqaruv atributi data-print: hide (bosmada yoʻq) · only (faqat bosmada) · break-before / break-after (yangi bet) · avoid (boʻlinmasin)
     · urls (ichidagi tashqi havolalar manzili qavsda yoziladi). */
  .fx-print { display: grid; gap: var(--fx-space-5); max-inline-size: calc(var(--fx-popover-width) * 2.4); margin-inline: auto; padding: var(--fx-space-8); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); }
  .fx-print__head { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: var(--fx-space-4); padding-block-end: var(--fx-space-4); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-print__title { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-bold); }
  .fx-print__meta { margin: 0; color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; }
  .fx-print__foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--fx-space-3); padding-block-start: var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-print__actions { display: flex; justify-content: flex-end; gap: var(--fx-space-2); }
  /* Faqat bosmada koʻrinadigan qism (rekvizitlar, imzo joyi, sahifa manzili) — ekranda yashirin */
  [data-print="only"] { display: none; }

  @media print {
    /* Bet chegarasi — jismoniy oʻlchov (sm), ekran tokeni emas */
    @page { margin: 1.5cm; }
    :root { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
    body { background: none; }
    /* 1) Yashiriladiganlar: navigatsiya, amallar, ustki qatlamlar */
    [data-print="hide"],
    .fx-print__actions,
    .fx-shell__side, .fx-shell__top, .fx-shell__rail, .fx-shell__aside,
    .fx-site-header, .fx-site-footer, .fx-skip-link,
    .fx-toast, .fx-fab, .fx-backtotop, .fx-quickexit, .fx-floatwin, .fx-menubar, .fx-tour, .fx-tour__beacon,
    :is(main, .fx-print) .fx-btn:not([data-print="show"]) { display: none !important; }
    [data-print="only"] { display: revert; }
    /* 2) Karkas — bitta ustun, ish maydoni toʻliq en */
    .fx-shell, .fx-shell[data-variant] { display: block; min-block-size: 0; block-size: auto; overflow: visible; padding: 0; background: none; }
    .fx-shell__main { padding: 0; overflow: visible; border: 0; box-shadow: none; }
    /* 3) Yuzalar: soya va rangli fon oʻrniga ingichka chiziq (siyoh tejash) */
    .fx-print { max-inline-size: none; padding: 0; border: 0; border-radius: 0; }
    .fx-card, .fx-print, .fx-elevation, .fx-dialog { box-shadow: none !important; }
    /* 4) Sahifa sinishi */
    [data-print="break-before"] { break-before: page; }
    [data-print="break-after"] { break-after: page; }
    [data-print="avoid"], tr, img, svg, figure, .fx-card, .fx-stat, .fx-callout { break-inside: avoid; }
    h1, h2, h3, h4, .fx-print__title { break-after: avoid; }
    p { orphans: 3; widows: 3; }
    /* 5) Jadval: sarlavha va yakun har betda takrorlanadi */
    thead { display: table-header-group; }
    tfoot { display: table-footer-group; }
    /* 6) Havola manzili: .fx-prose va data-print="urls" ichida tashqi havola matnidan keyin */
    :is(.fx-prose, [data-print="urls"]) a[href^="http"]:not(.fx-btn)::after { content: " (" attr(href) ")"; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); word-break: break-all; }
  }
}

/* prio */
@layer fx.components {
  /* Ustuvorlik belgisi (PDP Task): 3 ta oʻsib boruvchi ustuncha — past 1, oʻrta 2, yuqori 3 toʻla; shoshilinch — 3 toʻla + xavf rangi;
     yoʻq — 3 xira. Belgi soʻzsiz boʻlmaydi: aria-label (yoki yonida matn). */
  .fx-prio { --_on: var(--fx-text-secondary); display: inline-grid; grid-template-columns: repeat(3, 1fr); align-items: end; gap: calc(var(--fx-space-1) / 2); inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); padding: calc(var(--fx-space-1) / 2); box-sizing: border-box; flex: none; }
  .fx-prio::before, .fx-prio::after, .fx-prio > i { content: ""; display: block; border-radius: calc(var(--fx-radius-badge) / 4); background: color-mix(in oklab, var(--_on) 25%, transparent); }
  .fx-prio::before { block-size: 40%; } .fx-prio > i { block-size: 70%; } .fx-prio::after { block-size: 100%; order: 3; }
  .fx-prio:is([data-level="1"], [data-level="2"], [data-level="3"], [data-level="urgent"])::before { background: var(--_on); }
  .fx-prio:is([data-level="2"], [data-level="3"], [data-level="urgent"]) > i { background: var(--_on); }
  .fx-prio:is([data-level="3"], [data-level="urgent"])::after { background: var(--_on); }
  .fx-prio[data-level="urgent"] { --_on: var(--fx-fg-error); }
  .fx-prio[data-level="0"] { opacity: 0.8; }
  .fx-prio[data-size="lg"] { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
}

/* progress */
@layer fx.components {
  /* Chiziqli progress (WDS «Grafiklar»: foiz — halqa emas, chiziqli oʻlchagich). Qiymat: style="--fx-progress-value: 40%". */
  .fx-progress {
    --fx-progress-value: 0%;
    --_fill: var(--fx-bg-brand-solid);
    --_gap: var(--fx-space-1);
    position: relative;
    display: block;
    --_h: var(--fx-space-2);
    block-size: var(--_h);
    border-radius: calc(var(--_h) / 2);
    background: var(--fx-bg-muted);
    overflow: hidden;
  }
  .fx-progress::before {
    content: "";
    display: block;
    inline-size: clamp(0%, var(--fx-progress-value), 100%);
    block-size: 100%;
    border-radius: inherit;
    background: var(--_fill);
    transition: inline-size var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-progress[data-tone="success"] { --_fill: var(--fx-fg-success); }
  .fx-progress[data-tone="warning"] { --_fill: var(--fx-fg-warning); }
  .fx-progress[data-tone="error"] { --_fill: var(--fx-fg-error); }
  .fx-progress[data-color="yellow"] { --_fill: var(--fx-bg-category-yellow); }
  .fx-progress[data-color="pink"] { --_fill: var(--fx-bg-category-pink); }
  .fx-progress[data-color="blue"] { --_fill: var(--fx-bg-category-blue); }
  .fx-progress[data-color="coral"] { --_fill: var(--fx-bg-category-coral); }
  .fx-progress[data-color="green"] { --_fill: var(--fx-bg-category-green); }
  .fx-progress[data-color="purple"] { --_fill: var(--fx-bg-category-purple); }
  /* Tugash nuqtasi (M3 stop indicator, FoxOS taklifi 18.10): aniq qiymatda trek toʻlgan qismdan boʻshliq bilan boshlanadi va oʻng uchida
     kichik nuqta — ish shu yerda tugaydi. 100 % da trek va nuqta yoʻqoladi. Koʻp boʻlakli va aylana — oʻz qoidasida. */
  .fx-progress[aria-valuenow]:not([data-variant="stacked"], [data-variant="wavy"], [data-shape]) { background: none; overflow: visible; }
  .fx-progress[aria-valuenow]:not([data-variant="stacked"], [data-variant="wavy"], [data-shape])::after {
    content: "";
    position: absolute;
    inset-block: 0;
    inset-inline-start: min(100%, calc(clamp(0%, var(--fx-progress-value), 100%) + var(--_gap)));
    inset-inline-end: 0;
    border-radius: inherit;
    background: radial-gradient(circle closest-side, var(--_fill) 50%, transparent calc(50% + 0.5px)) 100% 50% / var(--_h) var(--_h) no-repeat, var(--fx-bg-muted);
    transition: inset-inline-start var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-progress[aria-valuenow]:not([data-variant="stacked"], [data-variant="wavy"], [data-shape]):dir(rtl)::after { background-position: 0 50%, 0 0; }
  @media (forced-colors: active) { .fx-progress[aria-valuenow]:not([data-variant="stacked"], [data-variant="wavy"], [data-shape])::after { background: GrayText; } .fx-progress::before { background: Highlight; forced-color-adjust: none; } }
  /* Noaniq: aria-valuenow yoʻq — boʻlak trekda sirpanadi (M3); harakat kamaytirilsa — joyida pulsatsiya */
  .fx-progress:not([aria-valuenow])::before { inline-size: 40%; animation: fx-progress-run calc(var(--fx-duration-indeterminate) * max(var(--fx-knob-motion-loop), 0.001)) var(--fx-ease-standard) infinite; }
  @keyframes fx-progress-run { from { translate: -100% 0; } to { translate: 250% 0; } }
  @media (prefers-reduced-motion: reduce) { .fx-progress:not([aria-valuenow])::before { inline-size: 100%; translate: none; animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
  /* Oʻlchamlar (2.121) */
  .fx-progress[data-size="xs"] { --_h: calc(var(--fx-space-1) / 2 * 3); }
  .fx-progress[data-size="sm"] { --_h: var(--fx-space-1); }
  .fx-progress[data-size="lg"] { --_h: var(--fx-space-3); }
  /* Yorliq + qiymat qatori (2.118): chiziq ustida nom, oʻngda raqam, ostida izoh */
  .fx-progress-row { display: grid; gap: var(--fx-space-2); }
  .fx-progress-row__head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--fx-space-3); font-size: var(--fx-font-size-sm); }
  .fx-progress-row__label { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  .fx-progress-row__value { flex: none; color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; }
  .fx-progress-row__hint { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  /* Koʻp boʻlakli (2.119): umumiy sigʻimning boʻlaklari — har boʻlak oʻz ulushi (--fx-progress-value) va roli; ichma-ich chiziq sahifa rangida */
  .fx-progress[data-variant="stacked"] { display: flex; }
  .fx-progress[data-variant="stacked"]::before { display: none; }
  .fx-progress__seg { --_c: var(--fx-viz-brand); flex: 0 0 clamp(0%, var(--fx-progress-value), 100%); min-inline-size: 0; background: var(--_c); transition: flex-basis var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-progress__seg + .fx-progress__seg { border-inline-start: var(--fx-border-width-focus) solid var(--fx-bg-surface); }
  .fx-progress__seg[data-role="ink"] { --_c: var(--fx-viz-ink); }
  .fx-progress__seg[data-role="accent"] { --_c: var(--fx-viz-accent); }
  .fx-progress__seg[data-role="risk"] { --_c: var(--fx-viz-risk); }
  .fx-progress__seg[data-role="context"] { --_c: var(--fx-viz-context); }
}

@layer fx.components {
  /* Aylana (4.114): halqa + markazda foiz yoki ikon (.fx-progress__label). Aniq — --fx-progress-value, noaniq — aria-valuenow yoʻq (yoy aylanadi).
     Halqa ::before’da (mask faqat halqani kesadi, yorliq koʻrinib turadi). Dashboard grafigi emas — yuklash, kvota, profil toʻldirilishi uchun. */
  .fx-progress[data-shape="circle"] {
    --_d: var(--fx-control-h-lg);
    --_t: calc(var(--_d) / 10);
    --_fill: var(--fx-bg-brand-solid);
    position: relative;
    display: inline-grid;
    place-items: center;
    inline-size: var(--_d);
    block-size: var(--_d);
    border-radius: var(--fx-radius-circle);
    background: none;
    overflow: visible;
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-semibold);
    font-variant-numeric: tabular-nums;
  }
  .fx-progress[data-shape="circle"]::before {
    position: absolute;
    inset: 0;
    inline-size: auto;
    border-radius: inherit;
    background: conic-gradient(var(--_fill) clamp(0%, var(--fx-progress-value), 100%), var(--fx-bg-muted) 0);
    mask: radial-gradient(farthest-side, transparent calc(100% - var(--_t) - 0.5px), white calc(100% - var(--_t)));
    transition: none;
  }
  .fx-progress[data-shape="circle"][data-tone="success"] { --_fill: var(--fx-fg-success); }
  .fx-progress[data-shape="circle"][data-tone="warning"] { --_fill: var(--fx-fg-warning); }
  .fx-progress[data-shape="circle"][data-tone="error"] { --_fill: var(--fx-fg-error); }
  .fx-progress[data-shape="circle"][data-size="sm"] { --_d: var(--fx-control-h-sm); --_t: calc(var(--_d) / 8); font-size: calc(var(--fx-font-size-xs) * 0.85); }
  .fx-progress[data-shape="circle"][data-size="lg"] { --_d: calc(var(--fx-control-h-lg) * 2); --_t: calc(var(--_d) / 14); font-size: var(--fx-font-size-lg); }
  .fx-progress__label { position: relative; display: inline-flex; align-items: center; justify-content: center; line-height: 1; }
  .fx-progress__label > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: currentColor; }
  /* noaniq: chorak yoy aylanadi; harakat kamaytirilsa — butun halqa pulsatsiyada */
  .fx-progress[data-shape="circle"]:not([aria-valuenow])::before { inline-size: auto; translate: none; background: conic-gradient(var(--_fill) 0 28%, var(--fx-bg-muted) 0); animation: fx-spin calc(var(--fx-duration-spin) * max(var(--fx-knob-motion-loop), 0.001)) linear infinite; }
  @media (prefers-reduced-motion: reduce) { .fx-progress[data-shape="circle"]:not([aria-valuenow])::before { background: var(--fx-bg-muted); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
  @media (forced-colors: active) { .fx-progress[data-shape="circle"]::before { background: conic-gradient(Highlight clamp(0%, var(--fx-progress-value), 100%), GrayText 0); forced-color-adjust: none; } }
}

@layer fx.components {
  /* Toʻlqinli progress (4.42, M3 Expressive): toʻlgan qism — toʻlqinsimon chiziq, qolgan yoʻl — tekis trek, oraligʻida kichik boʻshliq.
     Toʻlqin — SVG niqob (rang mavzudan: fon rangi niqob orqali koʻrinadi). Aniq qiymatda toʻlqin statik (cheksiz harakat yoʻq);
     noaniq holatda toʻlqinli boʻlak trekda sirpanadi (oddiy progress bilan bir xil siyosat: loop knob, reduced-motion — pulsatsiya).
     100 % boʻlganda toʻlqin tinchlanadi — tekis chiziq (M3: ish tugadi). Aylana: halqaning oʻzi toʻlqinsimon. */
  .fx-progress[data-variant="wavy"] {
    --_h: var(--fx-space-3);
    --_stroke: calc(var(--_h) / 3);
    --_gap: var(--fx-space-1);
    position: relative;
    isolation: isolate;
    border-radius: 0;
    background: none;
  }
  .fx-progress[data-variant="wavy"]::before {
    border-radius: 0;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' preserveAspectRatio='none'%3E%3Cpath d='M0 6Q6 0 12 6T24 6' fill='none' stroke='black' stroke-width='4'/%3E%3C/svg%3E") 0 50% / calc(var(--_h) * 2.5) 100% repeat-x;
  }
  .fx-progress[data-variant="wavy"]:dir(rtl)::before { mask-position: 100% 50%; }
  /* tekis trek: toʻlgan qismdan keyin, boshi boʻshliq bilan */
  .fx-progress[data-variant="wavy"]::after {
    content: "";
    position: absolute;
    z-index: -1;
    inset-block: calc(50% - var(--_stroke) / 2);
    inset-inline-start: min(100%, calc(clamp(0%, var(--fx-progress-value), 100%) + var(--_gap)));
    inset-inline-end: 0;
    border-radius: var(--fx-radius-pill);
    background: var(--fx-bg-muted);
  }
  .fx-progress[data-variant="wavy"][aria-valuenow]::after { background: radial-gradient(circle closest-side, var(--_fill) 50%, transparent calc(50% + 0.5px)) 100% 50% / var(--_stroke) var(--_stroke) no-repeat, var(--fx-bg-muted); }
  .fx-progress[data-variant="wavy"][aria-valuenow]:dir(rtl)::after { background-position: 0 50%, 0 0; }
  .fx-progress[data-variant="wavy"][aria-valuenow="100"]::before { mask: linear-gradient(black, black) 0 50% / 100% var(--_stroke) no-repeat; border-radius: var(--fx-radius-pill); }
  .fx-progress[data-variant="wavy"]:not([aria-valuenow])::after { inset-inline-start: 0; }
  .fx-progress[data-variant="wavy"][data-size="sm"] { --_h: var(--fx-space-2); }
  .fx-progress[data-variant="wavy"][data-size="lg"] { --_h: var(--fx-space-4); }
  /* aylana: toʻlqinsimon halqa (konus — qiymat, qolgani — trek rangi) */
  .fx-progress[data-shape="circle"][data-variant="wavy"]::before {
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M50.0 7.5L51.9 6.2L53.9 5.4L55.9 5.3L57.8 5.9L59.5 7.2L61.0 8.9L62.4 10.7L63.8 12.2L65.3 13.1L67.0 13.5L69.0 13.5L71.2 13.2L73.5 13.1L75.7 13.3L77.5 14.2L78.8 15.7L79.6 17.7L80.1 19.9L80.4 22.2L80.8 24.1L81.7 25.7L83.0 26.9L84.7 27.9L86.8 28.8L88.9 29.8L90.6 31.1L91.7 32.7L92.1 34.7L91.8 36.8L91.1 39.0L90.2 41.1L89.6 43.0L89.6 44.8L90.1 46.5L91.2 48.2L92.5 50.0L93.8 51.9L94.6 53.9L94.7 55.9L94.1 57.8L92.8 59.5L91.1 61.0L89.3 62.4L87.8 63.8L86.9 65.3L86.5 67.0L86.5 69.0L86.8 71.2L86.9 73.5L86.7 75.7L85.8 77.5L84.3 78.8L82.3 79.6L80.1 80.1L77.8 80.4L75.9 80.8L74.3 81.7L73.1 83.0L72.1 84.7L71.2 86.8L70.2 88.9L68.9 90.6L67.3 91.7L65.3 92.1L63.2 91.8L61.0 91.1L58.9 90.2L57.0 89.6L55.2 89.6L53.5 90.1L51.8 91.2L50.0 92.5L48.1 93.8L46.1 94.6L44.1 94.7L42.2 94.1L40.5 92.8L39.0 91.1L37.6 89.3L36.2 87.8L34.7 86.9L33.0 86.5L31.0 86.5L28.7 86.8L26.5 86.9L24.3 86.7L22.5 85.8L21.2 84.3L20.4 82.3L19.9 80.1L19.6 77.8L19.2 75.9L18.3 74.3L17.0 73.1L15.3 72.1L13.2 71.3L11.1 70.2L9.4 68.9L8.3 67.3L7.9 65.3L8.2 63.2L8.9 61.0L9.8 58.9L10.4 57.0L10.4 55.2L9.9 53.5L8.8 51.8L7.5 50.0L6.2 48.1L5.4 46.1L5.3 44.1L5.9 42.2L7.2 40.5L8.9 39.0L10.7 37.6L12.2 36.2L13.1 34.7L13.5 33.0L13.5 31.0L13.2 28.8L13.1 26.5L13.3 24.3L14.2 22.5L15.7 21.2L17.7 20.4L19.9 19.9L22.2 19.6L24.1 19.2L25.7 18.3L26.9 17.0L27.9 15.3L28.8 13.2L29.8 11.1L31.1 9.4L32.7 8.3L34.7 7.9L36.8 8.2L39.0 8.9L41.1 9.8L43.0 10.4L44.8 10.4L46.5 9.9L48.2 8.8L50.0 7.5Z' fill='none' stroke='black' stroke-width='7' stroke-linejoin='round'/%3E%3C/svg%3E") center / 100% 100% no-repeat;
  }
  .fx-progress[data-shape="circle"][data-variant="wavy"]::after { display: none; }
  @media (forced-colors: active) { .fx-progress[data-variant="wavy"]::before { background: Highlight; forced-color-adjust: none; } .fx-progress[data-variant="wavy"]::after { background: GrayText; } }
}

/* prose */
@layer fx.components {
  /* Uzun matn (CMS/Markdown HTML): ichki teglarga oraliq va uslub beradi; oʻqish eni ~65 belgi. */
  .fx-prose { --_gap: var(--fx-space-4); max-inline-size: 65ch; color: var(--fx-text-primary); font-size: var(--fx-font-size-md); line-height: 1.7; overflow-wrap: break-word; }
  .fx-prose[data-size="sm"] { --_gap: var(--fx-space-3); font-size: var(--fx-font-size-sm); }
  .fx-prose[data-size="lg"] { --_gap: var(--fx-space-5); font-size: var(--fx-font-size-lg); }
  .fx-prose[data-width="full"] { max-inline-size: none; }
  .fx-prose > * { margin-block: 0; }
  .fx-prose > * + * { margin-block-start: var(--_gap); }
  .fx-prose :is(h1, h2, h3, h4) { font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-weight: var(--fx-font-weight-semibold); line-height: 1.25; text-wrap: balance; color: var(--fx-text-primary); }
  .fx-prose > :is(h1, h2, h3, h4) { margin-block-start: calc(var(--_gap) * 2); }
  .fx-prose > :is(h1, h2, h3, h4) + * { margin-block-start: var(--fx-space-2); }
  .fx-prose h1 { font-size: var(--fx-font-size-display-sm); }
  .fx-prose h2 { font-size: var(--fx-font-size-xl); }
  .fx-prose h3 { font-size: var(--fx-font-size-lg); }
  .fx-prose h4 { font-size: var(--fx-font-size-md); }
  .fx-prose a { color: var(--fx-text-brand); text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); }
  .fx-prose a:hover { text-decoration-color: transparent; }
  .fx-prose a:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-prose :is(ul, ol) { padding-inline-start: var(--fx-space-6); }
  .fx-prose li + li { margin-block-start: var(--fx-space-2); }
  .fx-prose li > :is(ul, ol) { margin-block-start: var(--fx-space-2); }
  .fx-prose li::marker { color: var(--fx-text-tertiary); }
  .fx-prose blockquote { margin-inline: 0; padding-inline-start: var(--fx-space-4); border-inline-start: var(--fx-border-width-focus) solid var(--fx-border-color-strong); color: var(--fx-text-secondary); }
  .fx-prose :not(pre) > code { padding: calc(var(--fx-space-1) / 2) var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: 0.9em; }
  .fx-prose pre { padding: var(--fx-space-4); border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); border: var(--fx-border-width-default) solid var(--fx-border-color-default); overflow-x: auto; font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); line-height: 1.6; }
  .fx-prose :is(kbd) { padding: 0 var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-badge); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: 0.85em; }
  .fx-prose hr { border: 0; block-size: var(--fx-border-width-default); background: var(--fx-border-color-default); margin-block: calc(var(--_gap) * 1.5); }
  .fx-prose :is(img, video, svg, figure) { max-inline-size: 100%; block-size: auto; }
  .fx-prose img { border-radius: var(--fx-radius-control); }
  .fx-prose figcaption { margin-block-start: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-prose table { inline-size: 100%; border-collapse: collapse; font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-prose :is(th, td) { padding: var(--fx-space-2) var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); text-align: start; }
  .fx-prose th { font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-secondary); border-block-end-color: var(--fx-border-color-strong); }
  .fx-prose strong { font-weight: var(--fx-font-weight-semibold); }
  .fx-prose mark { background: var(--fx-bg-warning-subtle); color: inherit; border-radius: var(--fx-radius-badge); }
}

/* qr */
@layer fx.components {
  /* QR kod (4.143): oʻz kodlovchisi (bayt, xato tuzatish M), SVG modullar. Kod doim yorugʻ fonda va qorongʻi modullarda (qorongʻi rejimda ham —
     skanerlar teskari rangni yomon oʻqiydi). Markazda ixtiyoriy logo (≤ 20 % en), holatlar: eskirgan (xira + «Yangilash»), yuklanmoqda. */
  .fx-qr { position: relative; display: inline-grid; justify-items: center; gap: var(--fx-space-2); margin: 0; inline-size: var(--fx-qr-size, calc(var(--fx-control-h-lg) * 4)); max-inline-size: 100%; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); text-align: center; }
  .fx-qr__code { position: relative; display: grid; place-items: center; inline-size: 100%; aspect-ratio: 1; box-sizing: border-box; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-static-light); overflow: hidden; }
  .fx-qr__code > svg { display: block; inline-size: 100%; block-size: 100%; transition: filter var(--fx-motion-base) var(--fx-ease-standard), opacity var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-qr__modules { fill: var(--fx-text-on-static-light); }
  .fx-qr__logo { position: absolute; display: grid; place-items: center; inline-size: 20%; aspect-ratio: 1; box-sizing: border-box; padding: calc(var(--fx-space-1) / 2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-static-light); color: var(--fx-text-on-static-light); }
  .fx-qr__logo > :is(svg, img) { display: block; inline-size: 100%; block-size: auto; aspect-ratio: 1; object-fit: contain; }
  .fx-qr__caption { max-inline-size: 100%; overflow-wrap: anywhere; }
  .fx-qr__overlay { position: absolute; inset: 0; display: none; place-content: center; justify-items: center; gap: var(--fx-space-2); padding: var(--fx-space-3); color: var(--fx-text-on-static-light); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-qr:is([data-state="expired"], [data-state="loading"], [data-state="error"]) .fx-qr__code > svg { filter: blur(var(--fx-space-1)); opacity: 0.25; }
  .fx-qr:is([data-state="expired"], [data-state="error"]) .fx-qr__overlay { display: grid; }
  .fx-qr[data-state="loading"] .fx-qr__code { background: var(--fx-bg-muted); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-qr[data-state="loading"] .fx-qr__logo { display: none; }
  @media (prefers-reduced-motion: reduce) { .fx-qr[data-state="loading"] .fx-qr__code { animation: none; } }
  .fx-qr[data-size="sm"] { --fx-qr-size: calc(var(--fx-control-h-lg) * 2.5); }
  .fx-qr[data-size="lg"] { --fx-qr-size: calc(var(--fx-control-h-lg) * 6); }
  @media (forced-colors: active) { .fx-qr__code { forced-color-adjust: none; } }
}

/* questionnaire */
@layer fx.components {
  /* AI savolnoma (4.202): agent foydalanuvchidan variantli savollarni bittadan soʻraydi — raqamli variantlar (1–9 tugmalari),
     «Boshqa» bilan erkin javob, koʻp tanlovli savol, «Oʻtkazib yuborish», jarayon («2 / 3»), oxirida javoblar xulosasi.
     Suhbat oqimi ichida karta koʻrinishida. Xulq: foxui.js → questionnaire. */
  .fx-questionnaire { display: grid; gap: var(--fx-space-4); max-inline-size: calc(var(--fx-dialog-width) * 1.2); padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); color: var(--fx-text-primary); }
  .fx-questionnaire__head { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-questionnaire__agent { display: inline-flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-questionnaire__progress { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-questionnaire__bar { display: flex; gap: var(--fx-space-1); }
  .fx-questionnaire__bar > i { flex: 1; block-size: var(--fx-space-1); border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); transition: background-color var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-questionnaire__bar > i[data-done] { background: var(--fx-bg-brand-solid); }
  .fx-questionnaire__bar > i[data-current] { background: color-mix(in oklab, var(--fx-bg-brand-solid) 45%, var(--fx-bg-muted)); }
  .fx-questionnaire__form { display: grid; gap: var(--fx-space-4); }
  .fx-questionnaire__step { display: grid; gap: var(--fx-space-3); margin: 0; padding: 0; border: 0; min-inline-size: 0; }
  .fx-questionnaire__step[hidden] { display: none; }
  .fx-questionnaire__step:not([hidden]) { animation: fx-fade-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-questionnaire__q { float: left; inline-size: 100%; padding: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-questionnaire__q + * { clear: left; }
  .fx-questionnaire__hint { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-questionnaire__options { display: grid; gap: var(--fx-space-2); }
  .fx-questionnaire__option { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 0 var(--fx-space-3); align-items: center; padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); cursor: pointer; transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-questionnaire__option > input[type="radio"], .fx-questionnaire__option > input[type="checkbox"] { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: inherit; }
  .fx-questionnaire__option:hover { border-color: var(--fx-border-color-strong); background: var(--fx-bg-subtle); }
  .fx-questionnaire__option:active { scale: var(--fx-motion-press); }
  .fx-questionnaire__option:has(> input:is([type="radio"], [type="checkbox"]):focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-questionnaire__option:has(> input:checked) { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-subtle); }
  /* Raqam belgisi: tanlanganda ✓ ga aylanadi (shakl) */
  .fx-questionnaire__key { display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-control); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; }
  .fx-questionnaire__option:has(> .fx-questionnaire__desc) .fx-questionnaire__key { grid-row: span 2; }
  .fx-questionnaire__option:has(> input[type="radio"]) .fx-questionnaire__key { border-radius: var(--fx-radius-circle); }
  .fx-questionnaire__option:has(> input:checked) .fx-questionnaire__key { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-solid); color: transparent; position: relative; }
  .fx-questionnaire__option:has(> input:checked) .fx-questionnaire__key::after { content: "✓"; position: absolute; color: var(--fx-text-on-brand); }
  .fx-questionnaire__label { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-questionnaire__desc { grid-column: 2; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-questionnaire__other { grid-column: 2; position: relative; z-index: 1; margin-block-start: var(--fx-space-2); }
  .fx-questionnaire__option:not(:has(> input:checked)) .fx-questionnaire__other { display: none; }
  .fx-questionnaire__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-questionnaire__actions > [data-q="skip"] { margin-inline-end: auto; }
  .fx-questionnaire__actions [hidden] { display: none; }
  .fx-questionnaire__kbd { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-questionnaire__summary { display: grid; gap: var(--fx-space-2); margin: 0; }
  .fx-questionnaire__summary[hidden] { display: none; }
  .fx-questionnaire__summary > dt { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-questionnaire__summary > dd { margin: 0 0 var(--fx-space-2); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-questionnaire__summary > dd[data-skipped] { color: var(--fx-text-tertiary); font-style: italic; font-weight: var(--fx-font-weight-regular); }
  .fx-questionnaire[data-state="done"] .fx-questionnaire__form { display: none; }
}

/* quickexit */
@layer fx.components {
  /* Tez chiqish (4-toʻlqin 4.165, GOV.UK «Exit this page»): xavfli vaziyatdagi foydalanuvchi (zoʻravonlik, ishonch telefoni, tibbiy maslahat)
     bir bosish yoki Shift’ni 3 marta bosish bilan sahifani darhol neytral saytga almashtiradi (location.replace — «Orqaga» qaytarmaydi).
     Bosilgan zahoti sahifa mazmuni yopiladi (parda) — sekin internetda ham mazmun koʻrinib qolmaydi. */
  .fx-quickexit { display: grid; justify-items: end; gap: var(--fx-space-1); font-size: var(--fx-font-size-sm); }
  .fx-quickexit[data-placement="sticky"] { position: sticky; inset-block-start: var(--fx-space-3); z-index: var(--fx-z-sticky); margin-inline-start: auto; inline-size: fit-content; }
  .fx-quickexit[data-placement="fixed"] { position: fixed; inset-block-start: var(--fx-space-3); inset-inline-end: var(--fx-space-3); z-index: var(--fx-z-toast); }
  .fx-quickexit[data-placement="inline"] { justify-items: start; }
  .fx-quickexit__btn {
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-2);
    min-block-size: var(--fx-control-h-md);
    padding-inline: var(--fx-space-4);
    border: 0;
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-error-solid);
    color: var(--fx-text-on-error);
    box-shadow: var(--fx-elevation-2);
    font: inherit;
    font-weight: var(--fx-font-weight-semibold);
    text-decoration: none;
    cursor: pointer;
    transition: scale var(--fx-motion-instant) var(--fx-ease-standard), box-shadow var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-quickexit__btn:hover { box-shadow: var(--fx-elevation-3); text-decoration: underline; }
  .fx-quickexit__btn:active { scale: var(--fx-motion-press); }
  .fx-quickexit__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-quickexit__btn > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: currentColor; }
  .fx-quickexit__hint { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-quickexit__hint kbd { font: inherit; font-weight: var(--fx-font-weight-semibold); }
  /* Shift hisoblagichi: 3 ta nuqta, bosilgani toʻladi (shakl ham: boʻsh halqa → toʻla doira) */
  .fx-quickexit__dots { display: inline-flex; gap: var(--fx-space-1); vertical-align: middle; margin-inline-start: var(--fx-space-1); }
  .fx-quickexit__dots > i { inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-circle); }
  .fx-quickexit__dots > i[data-on] { border-color: var(--fx-fg-error); background: var(--fx-fg-error); }
  .fx-quickexit__status { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  /* Chiqish pardasi — butun sahifani darhol yopadi */
  .fx-quickexit__overlay { position: fixed; inset: 0; z-index: var(--fx-z-tip); display: grid; place-items: center; background: var(--fx-bg-page); color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); }
  @media print { .fx-quickexit__overlay { display: none; } }
}

/* quote */
@layer fx.components {
  /* Iqtibos: <figure class="fx-quote"><blockquote>…</blockquote><figcaption>…</figcaption></figure> */
  .fx-quote { display: grid; gap: var(--fx-space-3); margin: 0; padding-inline-start: var(--fx-space-4); border-inline-start: var(--fx-border-width-focus) solid var(--fx-border-color-strong); }
  .fx-quote > blockquote { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-md); line-height: 1.6; text-wrap: pretty; }
  .fx-quote > figcaption { display: flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-quote cite { font-style: normal; font-weight: var(--fx-font-weight-medium); color: var(--fx-text-primary); }
  /* Katta (fikr/testimonial): chiziqsiz, yirik matn */
  .fx-quote[data-size="lg"] { padding-inline-start: 0; border-inline-start: 0; gap: var(--fx-space-4); }
  .fx-quote[data-size="lg"] > blockquote { font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-xl); line-height: 1.4; }
}

/* rail */
@layer fx.components {
  /* Rels (WDS «Karkas va navigatsiya», S3): chap chetda ingichka ustun — yuqorida belgi, papkalar (ikonka pill’da + yorliq
     11/14, ≤ 2 qator), pastda dumaloq tugmalar ustma-ust. Doim qorongʻi; tanlangan papka — pill (mavzu rangi), ikonka Fill.
     Telefonda (< 840 px) — pastki panel. */
  .fx-rail {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--fx-space-2);
    inline-size: var(--fx-size-rail);
    box-sizing: border-box;
    padding: var(--fx-space-4) 0 var(--fx-space-3);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-rail);
    color: var(--fx-text-on-rail);
    /* boʻlimlar koʻp, ekran past boʻlsa — rels ichida aylanadi (bandlar siqilmaydi, pastki tugma ustma-ust tushmaydi) */
    overflow-y: auto;
    overscroll-behavior: contain;
    scrollbar-width: none;
  }
  .fx-rail::-webkit-scrollbar { display: none; }
  .fx-rail > * { flex-shrink: 0; }
  .fx-rail__mark { display: grid; place-items: center; inline-size: var(--fx-size-avatar-lg); block-size: var(--fx-size-avatar-lg); margin-block-end: var(--fx-space-2); color: var(--fx-text-on-rail-strong); text-decoration: none; }
  /* belgi ortida yumshoq yorugʻlik «nafas oladi» (PDP); harakat kamaytirilsa — qimirlamaydi */
  .fx-rail__mark { position: relative; isolation: isolate; }
  .fx-rail__mark::before { content: ""; position: absolute; z-index: -1; inset: calc(var(--fx-space-1) * -1.5); border-radius: var(--fx-radius-circle); background: radial-gradient(closest-side, color-mix(in oklab, var(--fx-bg-rail-selected) 55%, transparent), transparent); filter: blur(var(--fx-space-3)); opacity: 0.95; animation: fx-rail-breathe calc(var(--fx-duration-pulse) * 3.75) var(--fx-ease-standard) infinite alternate; }
  @keyframes fx-rail-breathe { from { scale: 0.92; } to { scale: 1.08; } }
  @media (prefers-reduced-motion: reduce) { .fx-rail__mark::before { animation: none; } }
  .fx-rail__mark > svg { inline-size: calc(var(--fx-size-icon-lg) * 1.4); block-size: calc(var(--fx-size-icon-lg) * 1.4); }
  .fx-rail__item {
    display: grid;
    justify-items: center;
    gap: var(--fx-space-1);
    inline-size: calc(var(--fx-size-rail) - var(--fx-space-2));
    padding-block: calc(var(--fx-space-1) / 2) var(--fx-space-1);
    border-radius: var(--fx-radius-surface);
    color: inherit;
    font-size: calc(var(--fx-font-size-xs) * 0.92);
    font-weight: var(--fx-font-weight-medium);
    line-height: 1.27;
    text-align: center;
    text-decoration: none;
  }
  .fx-rail__label { display: -webkit-box; max-inline-size: 100%; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow-wrap: anywhere; }
  .fx-rail__icon { position: relative; display: grid; place-items: center; inline-size: calc(var(--fx-space-12) + var(--fx-space-1)); block-size: calc(var(--fx-space-8)); border-radius: calc(var(--fx-space-8) / 2); /* kapsula: yarim balandlik (50 % choʻzinchoqda ellips beradi) */ }
  .fx-rail__icon > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: currentColor; }
  .fx-rail__icon > svg + svg { display: none; }
  /* Material Design 3 «Navigation rail» xulqi (Ustoz 18.10):
     indikator (::before) — tanlanganda markazdan yonga ochiladi; holat qatlami (::after, joriy rang) — hover 8 %, fokus 10 %, bosish 10 %
     + markazdan toʻlqin (ripple); yozuv hoverda yorishadi, tanlangan — indikator rangida va qalin. */
  .fx-rail__item { transition: color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-rail__icon { isolation: isolate; }
  .fx-rail__icon > svg { position: relative; z-index: 1; }
  .fx-rail__icon::before, .fx-rail__icon::after { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; pointer-events: none; }
  .fx-rail__icon::before { background: var(--fx-bg-rail-selected); opacity: 0; scale: 0.4 1; transition: scale var(--fx-motion-slow) var(--fx-ease-emphasized), opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-rail__icon::after { background: radial-gradient(circle closest-side, currentColor 0 60%, transparent 100%) center / 0 0 no-repeat, color-mix(in oklab, currentColor 60%, transparent); opacity: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-rail__item:hover { color: var(--fx-text-on-rail-strong); }
  .fx-rail__item:hover .fx-rail__icon::after { opacity: 0.13; } /* 0.13 × 60 % ≈ 8 % */
  .fx-rail__item:focus-visible .fx-rail__icon::after { opacity: 0.17; } /* ≈ 10 % */
  .fx-rail__item:active .fx-rail__icon::after { opacity: 0.17; animation: fx-rail-ripple var(--fx-motion-slow) var(--fx-ease-standard); }
  @keyframes fx-rail-ripple { from { background-size: 0 0, auto; } to { background-size: 220% 220%, auto; } }
  .fx-rail__item[aria-current] { color: var(--fx-text-on-rail-current); font-weight: var(--fx-font-weight-semibold); }
  .fx-rail__item[aria-current] .fx-rail__icon { color: var(--fx-text-on-rail-selected); }
  .fx-rail__item[aria-current] .fx-rail__icon::before { opacity: 1; scale: 1; }
  @starting-style { .fx-rail__item[aria-current] .fx-rail__icon::before { opacity: 0; scale: 0.4 1; } }
  /* Tanlangan papka: ikkinchi (Fill) ikonka */
  .fx-rail__item[aria-current] .fx-rail__icon > svg:has(+ svg) { display: none; }
  .fx-rail__item[aria-current] .fx-rail__icon > svg + svg { display: block; }
  .fx-rail__item:focus-visible { outline: none; }
  .fx-rail__item:focus-visible .fx-rail__icon { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * 1.5); }
  /* son belgisi (PDP): oddiy bandda — tanlov rangi (bg.rail-selected), tanlangan bandda — oq, xira-shisha.
     Bola loyiha tanlov rangini bitta token bilan beradi: --fx-bg-rail-selected (yozuv, pill, son undan hosila). */
  .fx-rail__item[aria-current] .fx-rail__count { background: color-mix(in oklab, var(--fx-text-on-rail-strong) 86%, transparent); backdrop-filter: blur(6px) saturate(1.4); color: var(--fx-bg-rail); box-shadow: var(--fx-shadow-sm); }
  .fx-rail__item[aria-disabled="true"] { opacity: 0.5; pointer-events: none; }
  .fx-rail__count { z-index: 2; position: absolute; inset-block-start: calc(var(--fx-space-1) * -1); inset-inline-end: 0; min-inline-size: var(--fx-size-icon-sm); padding-inline: var(--fx-space-1); box-sizing: border-box; border-radius: var(--fx-radius-circle); background: var(--fx-bg-rail-selected); color: var(--fx-text-on-rail-selected); font-size: calc(var(--fx-font-size-xs) * 0.85); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-size-icon-sm); font-variant-numeric: tabular-nums; }
  .fx-rail__sep { flex: none; inline-size: var(--fx-space-6); block-size: var(--fx-border-width-default); margin-block: var(--fx-space-1); background: color-mix(in oklab, var(--fx-text-on-rail) 25%, transparent); }
  /* Pastdagi dumaloq tugmalar — ustma-ust (WDS r210) */
  .fx-rail__foot { display: grid; justify-items: center; gap: var(--fx-space-2); margin-block-start: auto; padding-block-start: var(--fx-space-2); }
  .fx-rail__btn { display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: color-mix(in oklab, var(--fx-text-on-rail-strong) 10%, transparent); color: var(--fx-text-on-rail-strong); cursor: pointer; text-decoration: none; }
  .fx-rail__btn:hover { background: color-mix(in oklab, var(--fx-text-on-rail-strong) 18%, transparent); }
  .fx-rail__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-text-on-rail-strong); outline-offset: var(--fx-border-width-focus); }
  .fx-rail__btn[aria-current] { background: var(--fx-bg-rail-selected); color: var(--fx-text-on-rail-selected); } /* tanlangan dumaloq tugma (masalan, ochiq «Sozlamalar») */
  .fx-rail__btn > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: currentColor; }
  @media (max-width: 840px) {
    .fx-rail { border-radius: 0; }
    /* bandlar koʻp boʻlsa — ekrandan oshmaydi, panel ichida yonga suriladi (sahifa siljimaydi) */
    .fx-rail { flex-direction: row; justify-content: space-around; box-sizing: border-box; inline-size: 100%; max-inline-size: 100vw; padding: var(--fx-space-1) var(--fx-space-2) calc(var(--fx-space-1) + env(safe-area-inset-bottom, 0px)); overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x proximity; scrollbar-width: none; }
    .fx-rail::-webkit-scrollbar { display: none; }
    .fx-rail :is(.fx-rail__mark, .fx-rail__sep, .fx-rail__foot) { display: none; }
    .fx-rail__item { inline-size: auto; flex: 1 0 auto; min-inline-size: calc(var(--fx-space-12) + var(--fx-space-4)); scroll-snap-align: start; }
  }
  /* ---- Kengaytma (2.138): hover/fokusdagi izoh (data-tip), bildirishnoma nuqtasi (data-dot) ---- */
  .fx-rail :is(.fx-rail__item, .fx-rail__btn, .fx-rail__mark)[data-tip] { position: relative; }
  .fx-rail :is(.fx-rail__item, .fx-rail__btn, .fx-rail__mark)[data-tip]::after { content: attr(data-tip); position: absolute; inset-inline-start: calc(100% + var(--fx-space-2)); inset-block-start: 50%; translate: 0 -50%; z-index: 2; padding: var(--fx-space-1) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-text-primary); color: var(--fx-bg-surface); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); white-space: nowrap; pointer-events: none; opacity: 0; visibility: hidden; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), visibility var(--fx-motion-fast); }
  .fx-rail :is(.fx-rail__item, .fx-rail__btn, .fx-rail__mark)[data-tip]:is(:hover, :focus-visible)::after { opacity: 1; visibility: visible; transition-delay: var(--fx-duration-delay-tip); }
  /* bildirishnoma nuqtasi — band elementida (ikonkaning ::before/::after qatlamlari indikator va holatga band) */
  .fx-rail__item[data-dot] { position: relative; }
  .fx-rail__item[data-dot]::before { content: ""; position: absolute; z-index: 2; inset-block-start: calc(var(--fx-space-1) / 2); inset-inline-start: calc(50% + (var(--fx-space-12) + var(--fx-space-1)) / 2 - var(--fx-space-3) - var(--fx-size-status-dot-sm)); box-sizing: border-box; inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border: var(--fx-border-width-focus) solid var(--fx-bg-rail); border-radius: var(--fx-radius-circle); background: var(--fx-bg-error-solid); }
  @media (max-width: 840px) { .fx-rail :is(.fx-rail__item, .fx-rail__btn, .fx-rail__mark)[data-tip]::after { display: none; } }
  @media (forced-colors: active) { .fx-rail__item[aria-current] .fx-rail__icon { background: Highlight; color: HighlightText; forced-color-adjust: none; } .fx-rail__icon::before, .fx-rail__icon::after { display: none; } }
}

/* rating */
@layer fx.components {
  /* Reyting: yulduzlar (maska, currentColor emas — brend rangi). Toʻlgan qism kengligi = qiymat (--fx-rating-value, 0…1; foxui.js).
     Oʻzgaruvchan: slider (← → Home End), bosish; yarim qadam — data-step="0.5". Faqat oʻqish: data-readonly (rasm + matnli baho). */
  .fx-rating { --_s: var(--fx-size-icon-lg); --fx-rating-value: 0; position: relative; display: inline-block; inline-size: calc(var(--_s) * var(--_n, 5)); block-size: var(--_s); border-radius: var(--fx-radius-badge); cursor: pointer; vertical-align: middle; }
  .fx-rating[data-readonly] { cursor: default; }
  .fx-rating[data-size="sm"] { --_s: var(--fx-size-icon-md); }
  .fx-rating[data-size="lg"] { --_s: calc(var(--fx-size-icon-lg) * 1.5); }
  .fx-rating__stars, .fx-rating__fill { position: absolute; inset-block: 0; inset-inline-start: 0; background: var(--fx-bg-muted); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 3.2l2.6 5.6 6.1.7-4.5 4.2 1.2 6.1L12 16.7 6.6 19.8l1.2-6.1L3.3 9.5l6.1-.7z' fill='black' stroke='black' stroke-width='1.2' stroke-linejoin='round'/%3E%3C/svg%3E") 0 0 / var(--_s) var(--_s) repeat-x; pointer-events: none; }
  .fx-rating__stars { inline-size: 100%; }
  .fx-rating__fill { inline-size: calc(var(--fx-rating-value) * 100%); background: var(--fx-fg-warning); transition: inline-size var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-rating:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-rating[data-hover] .fx-rating__fill { transition: none; }
  .fx-rating[aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; }
  .fx-rating-text { margin-inline-start: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; vertical-align: middle; }
  /* ---- Yurak va emoji (4.108): data-shape="heart" — yulduz oʻrniga yurak (yoqtirish, sevimli); data-shape="emoji" — kayfiyat bahosi: 5 ta yuz
     (jahldor → xursand), toʻldirilmaydi — bittasi tanlanadi: tanlangan yuz kattaroq va rangli, qolganlari xira; nomi yonida soʻz bilan. ---- */
  .fx-rating[data-shape="heart"] :is(.fx-rating__stars, .fx-rating__fill) { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 20.3l-1.3-1.2C5.9 14.8 3 12.1 3 8.8 3 6.1 5.1 4 7.7 4c1.6 0 3.2.8 4.3 2 1.1-1.2 2.7-2 4.3-2C18.9 4 21 6.1 21 8.8c0 3.3-2.9 6-7.7 10.3z'/%3E%3C/svg%3E"); }
  .fx-rating[data-shape="heart"] .fx-rating__fill { background: var(--fx-fg-error); }
  .fx-rating[data-shape="emoji"] { --_s: calc(var(--fx-size-icon-lg) * 1.5); display: inline-flex; inline-size: auto; block-size: auto; gap: var(--fx-space-1); }
  .fx-rating[data-shape="emoji"] :is(.fx-rating__stars, .fx-rating__fill) { display: none; }
  .fx-rating__face { inline-size: var(--_s); block-size: var(--_s); background: var(--fx-text-tertiary); mask: var(--_m) center / contain no-repeat; opacity: 0.55; pointer-events: none; transition: scale var(--fx-motion-fast) var(--fx-ease-spring), opacity var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-rating__face[data-v="1"] { --_m: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke='black' stroke-width='1.8'/%3E%3Ccircle cx='8.8' cy='10' r='1.3'/%3E%3Ccircle cx='15.2' cy='10' r='1.3'/%3E%3Cpath d='M8 17.2q4-3.6 8 0' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3Cpath d='M7 7.5l3 1.2M17 7.5l-3 1.2' stroke='black' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E"); --_c: var(--fx-fg-error); }
  .fx-rating__face[data-v="2"] { --_m: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke='black' stroke-width='1.8'/%3E%3Ccircle cx='8.8' cy='10' r='1.3'/%3E%3Ccircle cx='15.2' cy='10' r='1.3'/%3E%3Cpath d='M8.5 16.5q3.5-2.2 7 0' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E"); --_c: var(--fx-fg-warning); }
  .fx-rating__face[data-v="3"] { --_m: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke='black' stroke-width='1.8'/%3E%3Ccircle cx='8.8' cy='10' r='1.3'/%3E%3Ccircle cx='15.2' cy='10' r='1.3'/%3E%3Cpath d='M8.5 15.5h7' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E"); --_c: var(--fx-text-secondary); }
  .fx-rating__face[data-v="4"] { --_m: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke='black' stroke-width='1.8'/%3E%3Ccircle cx='8.8' cy='10' r='1.3'/%3E%3Ccircle cx='15.2' cy='10' r='1.3'/%3E%3Cpath d='M8.5 14.5q3.5 2.6 7 0' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E"); --_c: var(--fx-fg-success); }
  .fx-rating__face[data-v="5"] { --_m: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke='black' stroke-width='1.8'/%3E%3Ccircle cx='8.8' cy='10' r='1.3'/%3E%3Ccircle cx='15.2' cy='10' r='1.3'/%3E%3Cpath d='M7.8 13.5q4.2 5 8.4 0z' stroke='black' stroke-width='1.6' stroke-linejoin='round'/%3E%3C/svg%3E"); --_c: var(--fx-fg-success); }
  .fx-rating__face[data-hover] { opacity: 0.9; background: var(--_c); }
  .fx-rating__face[data-on] { opacity: 1; background: var(--_c); scale: 1.18; }
  .fx-rating[data-shape="emoji"][data-size="sm"] { --_s: var(--fx-size-icon-lg); }
  .fx-rating__word { min-inline-size: 9ch; }
}

/* reactbar */
@layer fx.components {
  /* Reaksiyalar paneli: emoji + son tugmalari; bosilgani (aria-pressed) brend tusi va qalin chegara bilan. Xabarlardagi .fx-reaction koʻrinishi, lekin mustaqil (izoh, post, hujjat uchun). */
  .fx-reactbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1); }
  .fx-reactbar__item { display: inline-flex; align-items: center; gap: var(--fx-space-1); min-block-size: var(--fx-space-6); padding: 0 var(--fx-space-2); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-circle); background: var(--fx-bg-surface); color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-reactbar__item:hover { background: var(--fx-bg-muted); }
  .fx-reactbar__item:active { scale: var(--fx-motion-press); }
  .fx-reactbar__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-reactbar__item[aria-pressed="true"] { border-color: var(--fx-border-color-focus); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-reactbar__emoji { font-size: var(--fx-font-size-sm); line-height: 1; }
  .fx-reactbar__count { min-inline-size: 1ch; }
  .fx-reactbar[data-size="lg"] .fx-reactbar__item { min-block-size: var(--fx-control-h-sm); padding: 0 var(--fx-space-3); font-size: var(--fx-font-size-sm); }
}

/* reasoning */
@layer fx.components {
  /* Fikrlash (chain of thought): <details> — «12 soniya oʻyladi ▸». Oʻylash paytida (data-state="thinking") ochiq, sarlavha shimmer
     (JS .fx-shimmer-text qoʻshadi), tugagach oʻzi yopiladi (foydalanuvchi ochgan boʻlsa — yopilmaydi). JS: behaviors/reasoning.js. */
  .fx-reasoning { font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-reasoning > summary { display: inline-flex; align-items: center; gap: var(--fx-space-2); margin-inline-start: calc(var(--fx-space-2) * -1); padding: var(--fx-space-1) var(--fx-space-2); border-radius: var(--fx-radius-control); list-style: none; color: var(--fx-text-tertiary); cursor: pointer; user-select: none; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-reasoning > summary::-webkit-details-marker { display: none; }
  .fx-reasoning > summary:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-reasoning > summary:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-reasoning > summary > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
  .fx-reasoning[data-state="thinking"] > summary > svg:first-child { stroke: var(--fx-text-brand); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-reasoning__label { font-weight: var(--fx-font-weight-medium); }
  .fx-reasoning__chev { transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-reasoning[open] .fx-reasoning__chev { rotate: 90deg; }
  .fx-reasoning__body { margin-block-start: var(--fx-space-1); padding-inline-start: var(--fx-space-4); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); line-height: 1.6; animation: fx-fade-in var(--fx-motion-base) var(--fx-ease-enter); }
  .fx-reasoning__body > :first-child { margin-block-start: 0; }
  .fx-reasoning__body > :last-child { margin-block-end: 0; }
  @media (prefers-reduced-motion: reduce) { .fx-reasoning[data-state="thinking"] > summary > svg:first-child { animation: none; } }
}

/* recordpage */
@layer fx.components {
  /* Yozuv sahifasi (4.184, SLDS «Record home»): bitta yozuv (bitim, mijoz) — tepada sarlavha (belgi, nom, turi, amallar), asosiy maydonlar
     tasmasi (highlights), bosqich yoʻli; pastda ikki ustun: chapda tablar (tafsilot, bogʻliq roʻyxatlar), oʻngda faoliyat va izohlar.
     Qolip faqat joylashuv — ichi mavjud komponentlar (fx-path, fx-tabs, fx-dl, fx-timeline, fx-comments). Tor ekranda bitta ustun. */
  .fx-recordpage { container-type: inline-size; display: grid; gap: var(--fx-space-4); min-inline-size: 0; }
  .fx-recordpage__head { display: grid; gap: var(--fx-space-4); padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-recordpage__top { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-3) var(--fx-space-4); }
  .fx-recordpage__icon { flex: none; }
  .fx-recordpage__titles { display: grid; gap: calc(var(--fx-space-1) / 2); flex: 1 1 auto; min-inline-size: 0; }
  .fx-recordpage__type { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-recordpage__title { margin: 0; overflow: hidden; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; }
  .fx-recordpage__actions { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); }
  /* asosiy maydonlar tasmasi: 4–6 ta «yorliq / qiymat», ajratgich bilan */
  .fx-recordpage__highlights { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.45), 1fr)); gap: var(--fx-space-3) var(--fx-space-5); margin: 0; padding-block-start: var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-recordpage__highlights > div { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; }
  .fx-recordpage__highlights dt { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-recordpage__highlights dd { margin: 0; overflow: hidden; color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; text-overflow: ellipsis; white-space: nowrap; }
  .fx-recordpage__body { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-4); align-items: start; }
  .fx-recordpage__main, .fx-recordpage__side { display: grid; gap: var(--fx-space-4); min-inline-size: 0; }
  .fx-recordpage__panel { display: grid; gap: var(--fx-space-3); padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-recordpage__panel-title { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-2); margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  @container (min-width: 56rem) {
    .fx-recordpage__body { grid-template-columns: minmax(0, 2fr) minmax(calc(var(--fx-popover-width) * 1.1), 1fr); }
    .fx-recordpage__side { position: sticky; inset-block-start: var(--fx-space-4); }
  }
  .fx-recordpage[data-layout="wide"] .fx-recordpage__body { grid-template-columns: minmax(0, 1fr); }
}

/* reltime */
@layer fx.components {
  /* Nisbiy vaqt (#8): <time datetime> — «5 daqiqa oldin»; hoverda/fokusda toʻliq sana (title). Chiziqli ostchiziq — «bosib/ushlab koʻring» belgisi (xulq: foxui.js → reltime) */
  .fx-reltime { color: inherit; font-variant-numeric: tabular-nums; text-decoration: underline dotted; text-decoration-color: var(--fx-border-color-strong); text-underline-offset: var(--fx-space-1); cursor: help; }
  .fx-reltime[data-format="absolute"] { text-decoration: none; cursor: inherit; }
  .fx-reltime[data-tone="muted"] { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  /* ---- Vaqt zonalari kartasi (4.146): hover/fokusda — nisbiy vaqt + jadval: zona · aniq sana-vaqt · UTC siljishi (raqamlar tabular).
     Karta popover="manual" (yuqori qatlam), oʻrnini xulq beradi; display faqat :popover-open ichida. ---- */
  .fx-reltime[data-card] { cursor: help; }
  .fx-reltime[data-card]:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); border-radius: var(--fx-radius-badge); }
  .fx-reltime__card { position: fixed; inset: auto; margin: 0; padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-lg); font-size: var(--fx-font-size-xs); opacity: 0; transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete, overlay var(--fx-motion-exit-fast) allow-discrete; }
  .fx-reltime__card:popover-open { display: grid; gap: var(--fx-space-2); opacity: 1; transition-duration: var(--fx-motion-fast); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-reltime__card:popover-open { opacity: 0; } }
  .fx-reltime__rel { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-reltime__grid { display: grid; grid-template-columns: auto auto auto; column-gap: var(--fx-space-3); row-gap: var(--fx-space-1); }
  .fx-reltime__zone { color: var(--fx-text-tertiary); }
  .fx-reltime__at { font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-reltime__off { color: var(--fx-text-tertiary); font-variant-numeric: tabular-nums; text-align: end; white-space: nowrap; }
}

/* responsive */
@layer fx.components {
  /* Moslashuv qatlami (4-toʻlqin 4.11–4.13, 4.18). Breakpoint qiymatlari — --fx-bp-* tokenlari (oyna sinflari, M3):
     compact < 600 ≤ medium < 840 ≤ expanded < 1200 ≤ large < 1600 ≤ xl. @media/@container ichida var() ishlamaydi —
     raqamlar shu tokenlardan koʻchirilgan (tokenni oʻzgartirsangiz, shu faylni ham yangilang). */

  /* --- Container queries (4.11): komponent oyna eniga emas, oʻz joyining eniga qarab qayta tuziladi ---
     Yoqish: oʻrovchiga class="fx-cq" yoki komponentning oʻziga data-cq (u holda ichki qismlari komponent eniga qaraydi; ildizning oʻz paddingi faqat oʻrovchi .fx-cq bilan oʻzgaradi).
     Opt-in: inline-size containment shrink-to-fit joyda (inline-flex) elementni torayitirib yuborishi mumkin. */
  .fx-cq, :is(.fx-card, .fx-stat, .fx-list, .fx-settings, .fx-chartcard)[data-cq] { container-type: inline-size; }
  .fx-cq[data-cq-name="main"] { container-name: fx-main; }

  /* Karta: tor joyda (< 20rem) sarlavha va amallar ustma-ust, gorizontal karta vertikalga qaytadi; keng joyda (≥ 36rem) rasm yonida */
  @container (max-width: 20rem) {
    .fx-card__header { flex-direction: column; align-items: stretch; }
    .fx-card__footer { flex-direction: column; align-items: stretch; }
    .fx-card__actions > .fx-btn { flex: 1; }
  }
  @container (max-width: 30rem) {
    .fx-card[data-layout="horizontal"] > * { grid-column: 1 / -1; }
    .fx-card[data-layout="horizontal"] > .fx-card__media { margin: calc(var(--fx-space-5) * -1) calc(var(--fx-space-5) * -1) 0; border-radius: 0; border-start-start-radius: inherit; border-start-end-radius: inherit; }
  }

  /* Koʻrsatkich: tor plitkada raqam kichrayadi, grafik raqam ostiga tushadi */
  @container (max-width: 12rem) {
    .fx-stat { padding: var(--fx-space-3) var(--fx-space-4); }
    .fx-stat__value { font-size: var(--fx-font-size-xl); }
    .fx-stat__row { flex-direction: column; align-items: stretch; }
  }
  @container (min-width: 24rem) {
    .fx-stat__value { font-size: var(--fx-font-size-display-md); }
  }

  /* Roʻyxat: tor joyda oʻng qism (sana, summa) sarlavha ostiga tushadi */
  @container (max-width: 22rem) {
    .fx-list__item { flex-wrap: wrap; }
    .fx-list__end { flex-basis: 100%; padding-inline-start: calc(var(--fx-control-h-sm) + var(--fx-space-3)); }
    .fx-list__item:not(:has(.fx-list__lead)) > .fx-list__end { padding-inline-start: 0; }
  }

  /* Sozlamalar: panel ichida (dialog, yon varaq) tor boʻlsa menyu tepaga, qatorlar ustma-ust */
  @container (max-width: 44rem) {
    .fx-settings__nav { position: static; display: flex; overflow-x: auto; scrollbar-width: none; }
    .fx-settings__link { flex: none; }
    .fx-settings__main { max-inline-size: none; }
    .fx-settings > :is(.fx-settings__nav, .fx-settings__main) { grid-column: 1 / -1; }
  }
  @container (max-width: 32rem) {
    .fx-settings__row { flex-direction: column; align-items: stretch; gap: var(--fx-space-3); }
  }

  /* Grafik kartasi: tor joyda sarlavha va amallar ustma-ust */
  @container (max-width: 20rem) {
    .fx-chartcard { padding: var(--fx-space-4); }
    .fx-chartcard__head { flex-direction: column; align-items: stretch; }
    .fx-chartcard__actions { justify-content: flex-start; }
  }

  /* --- Breakpoint koʻrinish yordamchilari (4.12): data-hide-below / data-hide-above / data-show-only --- */
  @media (max-width: 599.98px) { [data-hide-below="medium"], [data-hide-below="expanded"], [data-hide-below="large"], [data-hide-below="xl"] { display: none !important; } }
  @media (min-width: 600px) and (max-width: 839.98px) { [data-hide-below="expanded"], [data-hide-below="large"], [data-hide-below="xl"] { display: none !important; } }
  @media (min-width: 840px) and (max-width: 1199.98px) { [data-hide-below="large"], [data-hide-below="xl"] { display: none !important; } }
  @media (min-width: 1200px) and (max-width: 1599.98px) { [data-hide-below="xl"] { display: none !important; } }
  @media (min-width: 600px) { [data-hide-above="compact"] { display: none !important; } }
  @media (min-width: 840px) { [data-hide-above="medium"] { display: none !important; } }
  @media (min-width: 1200px) { [data-hide-above="expanded"] { display: none !important; } }
  @media (min-width: 1600px) { [data-hide-above="large"] { display: none !important; } }

  /* --- 12 ustunli toʻr (4.18): compact — 4 ustun, medium — 8, expanded+ — 12 (M3 layout). Gutter: 16 → 24.
     Bola: data-span (expanded+), data-span-md (medium), data-span-sm (compact); berilmasa — toʻliq en. data-offset — chapdan surish (expanded+). */
  .fx-grid[data-cols="12"] { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .fx-grid[data-cols="12"]:not([data-gap]) { --_gap: var(--fx-space-4); }
  .fx-grid[data-cols="12"] > * { grid-column: 1 / -1; }
  .fx-grid[data-cols="12"] > [data-span-sm="1"] { grid-column: auto / span 1; }
  .fx-grid[data-cols="12"] > [data-span-sm="2"] { grid-column: auto / span 2; }
  .fx-grid[data-cols="12"] > [data-span-sm="3"] { grid-column: auto / span 3; }
  .fx-grid[data-cols="12"] > [data-span-sm="4"] { grid-column: auto / span 4; }
  @media (min-width: 600px) {
    .fx-grid[data-cols="12"] { grid-template-columns: repeat(8, minmax(0, 1fr)); }
    .fx-grid[data-cols="12"]:not([data-gap]) { --_gap: var(--fx-space-6); }
    .fx-grid[data-cols="12"] > * { grid-column: 1 / -1; }
    .fx-grid[data-cols="12"] > [data-span-md="1"] { grid-column: auto / span 1; }
    .fx-grid[data-cols="12"] > [data-span-md="2"] { grid-column: auto / span 2; }
    .fx-grid[data-cols="12"] > [data-span-md="3"] { grid-column: auto / span 3; }
    .fx-grid[data-cols="12"] > [data-span-md="4"] { grid-column: auto / span 4; }
    .fx-grid[data-cols="12"] > [data-span-md="5"] { grid-column: auto / span 5; }
    .fx-grid[data-cols="12"] > [data-span-md="6"] { grid-column: auto / span 6; }
    .fx-grid[data-cols="12"] > [data-span-md="7"] { grid-column: auto / span 7; }
    .fx-grid[data-cols="12"] > [data-span-md="8"] { grid-column: auto / span 8; }
  }
  @media (min-width: 840px) {
    .fx-grid[data-cols="12"] { grid-template-columns: repeat(12, minmax(0, 1fr)); }
    .fx-grid[data-cols="12"] > [data-span="1"] { grid-column: auto / span 1; }
    .fx-grid[data-cols="12"] > [data-span="2"] { grid-column: auto / span 2; }
    .fx-grid[data-cols="12"] > [data-span="3"] { grid-column: auto / span 3; }
    .fx-grid[data-cols="12"] > [data-span="4"] { grid-column: auto / span 4; }
    .fx-grid[data-cols="12"] > [data-span="5"] { grid-column: auto / span 5; }
    .fx-grid[data-cols="12"] > [data-span="6"] { grid-column: auto / span 6; }
    .fx-grid[data-cols="12"] > [data-span="7"] { grid-column: auto / span 7; }
    .fx-grid[data-cols="12"] > [data-span="8"] { grid-column: auto / span 8; }
    .fx-grid[data-cols="12"] > [data-span="9"] { grid-column: auto / span 9; }
    .fx-grid[data-cols="12"] > [data-span="10"] { grid-column: auto / span 10; }
    .fx-grid[data-cols="12"] > [data-span="11"] { grid-column: auto / span 11; }
    .fx-grid[data-cols="12"] > [data-span="12"] { grid-column: auto / span 12; }
    .fx-grid[data-cols="12"] > [data-offset="1"] { grid-column-start: 2; }
    .fx-grid[data-cols="12"] > [data-offset="2"] { grid-column-start: 3; }
    .fx-grid[data-cols="12"] > [data-offset="3"] { grid-column-start: 4; }
    .fx-grid[data-cols="12"] > [data-offset="4"] { grid-column-start: 5; }
    .fx-grid[data-cols="12"] > [data-offset="5"] { grid-column-start: 6; }
    .fx-grid[data-cols="12"] > [data-offset="6"] { grid-column-start: 7; }
    .fx-grid[data-cols="12"] > [data-offset="7"] { grid-column-start: 8; }
    .fx-grid[data-cols="12"] > [data-offset="8"] { grid-column-start: 9; }
    .fx-grid[data-cols="12"] > [data-offset="9"] { grid-column-start: 10; }
    .fx-grid[data-cols="12"] > [data-offset="10"] { grid-column-start: 11; }
    .fx-grid[data-cols="12"] > [data-offset="11"] { grid-column-start: 12; }
  }

  /* --- RTL (4.13): yoʻnalishli ikonlar (strelka, «orqaga», «keyingi») oʻngdan-chapga yozuvda koʻzgulanadi.
     Belgilash: <svg data-fx-flip-rtl>. Soat, play, logotip, raqam — koʻzgulanmaydi. Boshqa joyda faqat mantiqiy xususiyatlar
     (margin-inline, inset-inline-start, border-start-start-radius …). */
  [data-fx-flip-rtl]:dir(rtl) { scale: -1 1; }
  /* Yoʻnalishga qarab siljish (drawer, slide): --fx-dir = 1 (ltr) yoki -1 (rtl) — translate(calc(… * var(--fx-dir))) */
  :root, [dir] { --fx-dir: 1; }
  :dir(rtl) { --fx-dir: -1; }
}

/* result */
@layer fx.components {
  /* Natija sahifasi (#47): muvaffaqiyat / xato / 404 / 403 — butun sahifa yoki katta blok. Belgi shakli + soʻz + keyingi qadam.
     «Boʻsh holat» (fx-empty)dan farqi: kattaroq, status kodi bor, odatda bitta sahifaning oʻzi. */
  .fx-result { display: grid; justify-items: center; gap: var(--fx-space-3); padding: var(--fx-space-12) var(--fx-space-6); text-align: center; }
  .fx-result__art { display: grid; place-items: center; inline-size: calc(var(--fx-space-12) * 1.5); block-size: calc(var(--fx-space-12) * 1.5); border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1; }
  .fx-result__art > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-result__code { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-display-md); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; line-height: 1; }
  .fx-result__title { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); text-wrap: balance; }
  .fx-result__text { margin: 0; max-inline-size: 48ch; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-result__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--fx-space-2); margin-block-start: var(--fx-space-3); }
  .fx-result[data-status="success"] .fx-result__art { background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); }
  .fx-result[data-status="error"] .fx-result__art { background: var(--fx-bg-error-subtle); color: var(--fx-fg-error); border-radius: var(--fx-radius-surface); }
  .fx-result[data-status="warning"] .fx-result__art { background: var(--fx-bg-warning-subtle); color: var(--fx-fg-warning); border-radius: var(--fx-radius-surface); }
  .fx-result[data-status="info"] .fx-result__art { background: var(--fx-bg-info-subtle); color: var(--fx-fg-info); }
  .fx-result[data-status="404"] .fx-result__art, .fx-result[data-status="403"] .fx-result__art { display: none; }
  /* 4-toʻlqin (4.162): server xatosi, texnik ishlar, internet yoʻq — kod + belgi + aniq keyingi qadam */
  .fx-result[data-status="500"] .fx-result__art, .fx-result[data-status="503"] .fx-result__art, .fx-result[data-status="offline"] .fx-result__art { border-radius: var(--fx-radius-surface); }
  .fx-result[data-status="500"] .fx-result__art { background: var(--fx-bg-error-subtle); color: var(--fx-fg-error); }
  .fx-result[data-status="503"] .fx-result__art { background: var(--fx-bg-warning-subtle); color: var(--fx-fg-warning); }
  .fx-result[data-status="offline"] .fx-result__art { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  .fx-result:is([data-status="500"], [data-status="503"]) .fx-result__code { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); letter-spacing: 0.08em; }
  /* qoʻshimcha maʼlumot: soʻrov raqami (500), taxminiy tugash vaqti (503), oxirgi saqlash (offline) */
  .fx-result__meta { display: inline-flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--fx-space-1) var(--fx-space-2); margin: 0; padding: var(--fx-space-1) var(--fx-space-3); border-radius: var(--fx-radius-badge); background: var(--fx-bg-subtle); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-result__meta > code { color: var(--fx-text-secondary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); }
  .fx-result[data-size="compact"] { padding: var(--fx-space-8) var(--fx-space-4); gap: var(--fx-space-2); }
  .fx-result[data-size="compact"] .fx-result__art { inline-size: var(--fx-space-12); block-size: var(--fx-space-12); font-size: var(--fx-font-size-lg); }
}

/* review */
@layer fx.components {
  /* «Javoblarni tekshiring» (4.195, naqsh — GOV.UK «Check answers»): yuborishdan oldin xulosa — boʻlimlar boʻyicha kalit/qiymat
     qatorlari, har qatorda «Oʻzgartirish» havolasi (sr-only bilan qaysi javob ekani), toʻldirilmagan majburiy javob — «!» + «Kiritilmagan»
     + «Kiritish». Oxirida tasdiq (deklaratsiya) va yuborish. Tor ekranda qator ustma-ust. Faqat CSS. */
  .fx-review { display: grid; gap: var(--fx-space-8); max-inline-size: calc(var(--fx-dialog-width) * 1.8); color: var(--fx-text-primary); }
  .fx-review__title { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); }
  .fx-review__section { display: grid; gap: var(--fx-space-2); }
  .fx-review__head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-review__heading { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-review__list { margin: 0; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-review__row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.6fr) auto; gap: var(--fx-space-1) var(--fx-space-4); align-items: baseline; padding-block: var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); font-size: var(--fx-font-size-sm); }
  .fx-review__key { margin: 0; color: var(--fx-text-secondary); font-weight: var(--fx-font-weight-medium); }
  .fx-review__value { margin: 0; overflow-wrap: anywhere; white-space: pre-line; }
  .fx-review__value > ul { margin: 0; padding-inline-start: var(--fx-space-4); }
  .fx-review__action { margin: 0; justify-self: end; }
  .fx-review :is(.fx-review__action, .fx-review__head) a { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-medium); text-underline-offset: var(--fx-space-1); }
  .fx-review :is(.fx-review__action, .fx-review__head) a:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-review__row[data-state="missing"] .fx-review__value { color: var(--fx-text-error); }
  .fx-review__row[data-state="missing"] .fx-review__value::before { content: "! "; font-weight: var(--fx-font-weight-semibold); }
  .fx-review__row[data-state="missing"] { position: relative; }
  .fx-review__row[data-state="missing"]::before { content: ""; position: absolute; inset-block: var(--fx-space-2); inset-inline-start: calc(var(--fx-space-3) * -1); inline-size: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); background: var(--fx-border-color-error); }
  .fx-review__confirm { display: grid; gap: var(--fx-space-4); padding-block-start: var(--fx-space-2); }
  .fx-review__confirm-title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-review__note { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-review__actions { display: flex; flex-wrap: wrap; gap: var(--fx-space-3); }
  @media (max-width: 40em) {
    .fx-review__row { grid-template-columns: minmax(0, 1fr) auto; }
    .fx-review__key { grid-column: 1 / -1; }
  }
}

/* richtext */
@layer fx.components {
  /* Boy matn tahrirlagichi (#22): asboblar paneli (`toolbar` bilan) + contenteditable maydon. Qalin, qiya, tagiga chiziq, roʻyxatlar, sarlavha, havola;
     holat aria-pressed bilan (rangdan tashqari — fon va qalin shakl). Joylashtirilgan matn oddiy matnga aylanadi. */
  .fx-richtext { display: grid; border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-surface); background: var(--fx-bg-field); overflow: hidden; }
  .fx-richtext:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-richtext__bar { border: 0; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: 0; background: var(--fx-bg-subtle); }
  .fx-richtext__bar .fx-btn { min-inline-size: var(--fx-control-h-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-richtext__bar .fx-btn[aria-pressed="true"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-richtext__bar [data-cmd="italic"] { font-style: italic; }
  .fx-richtext__bar [data-cmd="underline"] { text-decoration: underline; }
  .fx-richtext__bar [data-cmd="strikeThrough"] { text-decoration: line-through; }
  .fx-richtext__body { min-block-size: calc(var(--fx-control-h-lg) * 3); padding: var(--fx-space-4); color: var(--fx-text-primary); font-size: var(--fx-font-size-md); line-height: 1.6; outline: none; overflow-wrap: anywhere; }
  .fx-richtext__body:empty::before { content: attr(data-placeholder); color: var(--fx-text-tertiary); pointer-events: none; }
  .fx-richtext__body > :first-child { margin-block-start: 0; }
  .fx-richtext__body > :last-child { margin-block-end: 0; }
  .fx-richtext__body h2 { font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); margin-block: var(--fx-space-3) var(--fx-space-2); }
  .fx-richtext__body p { margin-block: 0 var(--fx-space-2); }
  .fx-richtext__body ul, .fx-richtext__body ol { margin-block: 0 var(--fx-space-2); padding-inline-start: var(--fx-space-6); }
  .fx-richtext__body a { color: var(--fx-text-brand); text-decoration: underline; }
  .fx-richtext__foot { display: flex; justify-content: space-between; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-richtext[data-disabled] { opacity: 0.5; pointer-events: none; }
}

/* rings */
@layer fx.components {
  /* Konsentrik halqalar (4.116): 2–3 maqsad bitta ichma-ich halqada (Apple Activity kabi) — har halqa bitta koʻrsatkichning bajarilishi.
     Qiymat — style="--fx-rings-value: 72%" har .fx-rings__ring’da; tashqi halqa — birinchisi. Raqam va nom legendada doim matn bilan
     (rang yolgʻiz emas). Ranglar — grafik rollari (data-role: brand · ink · accent · risk · context). Halqa faqat CSS (conic-gradient + mask).
     WDS: foiz uchun odatda chiziqli oʻlchagich; halqani faqat 2–3 maqsadni bir qarashda koʻrsatish uchun ishlating. */
  @property --fx-rings-value { syntax: "<percentage>"; inherits: false; initial-value: 0%; }
  .fx-rings { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-4) var(--fx-space-6); margin: 0; }
  .fx-rings__plot { --_d: calc(var(--fx-space-12) * 3.5); --_t: calc(var(--_d) / 11); --_g: calc(var(--_t) / 3.5); position: relative; display: grid; flex: none; inline-size: var(--_d); aspect-ratio: 1; }
  .fx-rings__ring {
    --fx-rings-value: 0%;
    --_c: var(--fx-viz-brand);
    --_k: 0;
    grid-area: 1 / 1;
    margin: calc(var(--_k) * (var(--_t) + var(--_g)));
    border-radius: var(--fx-radius-circle);
    background: conic-gradient(var(--_c) clamp(0%, var(--fx-rings-value), 100%), color-mix(in oklab, var(--_c) 16%, transparent) 0);
    mask: radial-gradient(farthest-side, transparent calc(100% - var(--_t) - 0.5px), black calc(100% - var(--_t)));
    transition: --fx-rings-value var(--fx-motion-slower) var(--fx-ease-emphasized);
  }
  .fx-rings__ring:nth-child(2) { --_k: 1; }
  .fx-rings__ring:nth-child(3) { --_k: 2; }
  .fx-rings__ring:nth-child(4) { --_k: 3; }
  .fx-rings__ring[data-role="ink"] { --_c: var(--fx-viz-ink); }
  .fx-rings__ring[data-role="accent"] { --_c: var(--fx-viz-accent); }
  .fx-rings__ring[data-role="risk"] { --_c: var(--fx-viz-risk); }
  .fx-rings__ring[data-role="context"] { --_c: var(--fx-viz-context); }
  .fx-rings__center { grid-area: 1 / 1; place-self: center; display: grid; justify-items: center; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; line-height: 1.1; }
  .fx-rings__center small { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); }
  .fx-rings__legend { display: grid; gap: var(--fx-space-3); min-inline-size: 0; margin: 0; padding: 0; list-style: none; font-size: var(--fx-font-size-sm); }
  .fx-rings__legend li { --_c: var(--fx-viz-brand); display: grid; grid-template-columns: auto 1fr; column-gap: var(--fx-space-2); align-items: baseline; }
  .fx-rings__legend li::before { content: ""; grid-row: span 2; align-self: center; inline-size: var(--fx-space-3); aspect-ratio: 1; border: calc(var(--fx-space-1) * 0.75) solid var(--_c); border-radius: var(--fx-radius-circle); }
  .fx-rings__legend li[data-role="ink"] { --_c: var(--fx-viz-ink); }
  .fx-rings__legend li[data-role="accent"] { --_c: var(--fx-viz-accent); }
  .fx-rings__legend li[data-role="risk"] { --_c: var(--fx-viz-risk); }
  .fx-rings__legend li[data-role="context"] { --_c: var(--fx-viz-context); }
  .fx-rings__name { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-rings__value { font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-rings__value small { color: var(--fx-text-tertiary); font-weight: var(--fx-font-weight-regular); }
  .fx-rings[data-size="sm"] .fx-rings__plot { --_d: calc(var(--fx-space-12) * 2); --_t: calc(var(--_d) / 9); }
  .fx-rings[data-size="sm"] .fx-rings__center { font-size: var(--fx-font-size-xs); }
  .fx-rings[data-size="sm"] .fx-rings__center small { display: none; }
  .fx-rings[data-size="lg"] .fx-rings__plot { --_d: calc(var(--fx-space-12) * 5); }
  .fx-rings[data-layout="stack"] { flex-direction: column; align-items: center; }
  @media (forced-colors: active) { .fx-rings__ring { background: conic-gradient(Highlight clamp(0%, var(--fx-rings-value), 100%), GrayText 0); forced-color-adjust: none; } }
}

/* ripple */
@layer fx.components {
  /* Ripple (4.27, M3 / HeroUI): bosilgan nuqtadan tarqaluvchi toʻlqin. Bezak harakati — faqat expressive rejimda
     (data-fx-motion="expressive" ota yoki elementning oʻzida); data-fx-ripple="always" — har qanday rejimda (calm/none’dan tashqari).
     Klaviaturada (Enter/Space) toʻlqin markazdan chiqadi. Xulq — behaviors/ripple.js; JS yoʻq yoki harakat kamaytirilgan — toʻlqin yoʻq,
     tugma odatdagidek ishlaydi. Rang — matn rangi (currentColor), shuning uchun har variant va mavzuda oʻzi toʻgʻri tus oladi. */
  [data-fx-ripple], [data-fx-ripple="always"], [data-fx-ripple="soft"] { position: relative; overflow: hidden; isolation: isolate; }
  .fx-ripple__wave {
    position: absolute;
    left: var(--_x);
    top: var(--_y);
    z-index: -1;
    inline-size: var(--_d);
    block-size: var(--_d);
    translate: -50% -50%;
    border-radius: var(--fx-radius-circle);
    background: radial-gradient(closest-side, color-mix(in oklab, currentColor 26%, transparent) 70%, color-mix(in oklab, currentColor 10%, transparent));
    pointer-events: none;
    scale: 0;
    animation: fx-ripple-grow var(--fx-motion-slower) var(--fx-ease-enter) forwards;
  }
  .fx-ripple__wave[data-out] { animation: fx-ripple-grow var(--fx-motion-slower) var(--fx-ease-enter) forwards, fx-ripple-fade var(--fx-motion-slow) var(--fx-ease-exit) forwards; }
  [data-fx-ripple="soft"] > .fx-ripple__wave { background: radial-gradient(closest-side, color-mix(in oklab, currentColor 14%, transparent) 70%, transparent); }
  @keyframes fx-ripple-grow { from { scale: 0; } to { scale: 1; } }
  @keyframes fx-ripple-fade { to { opacity: 0; } }
  @media (forced-colors: active) { .fx-ripple__wave { display: none; } }
}

/* row */
@layer fx.components {
  /* Ish qatori (PDP Task roʻyxati): boshida ustuvorlik — hover/fokus’da oʻrnida checkbox (bitta katak, ikki rol); bitta tanlansa —
     hamma qatorda checkbox. ID (mono) · holat · sarlavha · yorliqlar · oxirida muddat va bajaruvchi. Guruh — fx-rows__group (details). */
  .fx-rows { display: grid; margin: 0; padding: 0; list-style: none; }
  .fx-row {
    display: grid; grid-template-columns: auto auto auto minmax(0, 1fr) auto; align-items: center; gap: var(--fx-space-3);
    min-block-size: calc(var(--fx-control-h-md) + var(--fx-space-1)); padding-inline: var(--fx-space-3);
    border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); text-decoration: none;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-row:hover, .fx-row:focus-within { background: var(--fx-bg-subtle); }
  .fx-row[aria-current], .fx-row:has(.fx-row__sel input:checked) { background: var(--fx-bg-brand-subtle); }
  .fx-row__lead { display: grid; place-items: center; inline-size: var(--fx-size-icon-md); }
  .fx-row__lead > * { grid-area: 1 / 1; }
  .fx-row__sel { opacity: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-row:is(:hover, :focus-within) .fx-row__sel, .fx-rows:has(.fx-row__sel input:checked) .fx-row__sel { opacity: 1; }
  .fx-row:is(:hover, :focus-within) .fx-row__lead > .fx-prio, .fx-rows:has(.fx-row__sel input:checked) .fx-row__lead > .fx-prio { opacity: 0; }
  .fx-row__id { color: var(--fx-text-tertiary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); white-space: nowrap; }
  .fx-row__title { overflow: hidden; color: inherit; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; }
  .fx-row__title:hover { text-decoration: underline; }
  .fx-row__title::after { content: ""; position: absolute; inset: 0; } /* butun qator bosiladi */
  .fx-row { position: relative; }
  .fx-row :is(.fx-row__sel, .fx-row__end a, .fx-row__end button) { position: relative; z-index: 1; }
  .fx-row__end { display: flex; align-items: center; gap: var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); white-space: nowrap; }
  .fx-row__end > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: currentColor; }
  .fx-row__due { display: inline-flex; align-items: center; gap: var(--fx-space-1); }
  .fx-row__due > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: currentColor; }
  .fx-row__due[data-tone="late"] { color: var(--fx-fg-error); font-weight: var(--fx-font-weight-medium); }
  .fx-row__due[data-tone="soon"] { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  .fx-row[data-state="done"] .fx-row__title, .fx-row[data-state="cancelled"] .fx-row__title { color: var(--fx-text-tertiary); }
  .fx-row[data-state="cancelled"] .fx-row__title { text-decoration: line-through; }
  /* guruh: yigʻiladigan sarlavha (nom, son, +) */
  .fx-rows__group > summary { display: flex; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-control-h-sm); padding-inline: var(--fx-space-3); background: var(--fx-bg-subtle); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); list-style: none; cursor: pointer; }
  .fx-rows__group > summary::-webkit-details-marker { display: none; }
  .fx-rows__group > summary::before { content: ""; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-rows__group[open] > summary::before { rotate: 90deg; }
  .fx-rows__count { color: var(--fx-text-tertiary); font-weight: var(--fx-font-weight-regular); }
  @media (max-width: 640px) { .fx-row { grid-template-columns: auto auto minmax(0, 1fr) auto; } .fx-row__id { display: none; } }
}

/* savebar */
@layer fx.components {
  /* Saqlanmagan oʻzgarishlar paneli (4.113): forma oʻzgarsa pastda «Saqlash / Bekor qilish» paneli chiqadi, oʻzgargan maydon yorligʻi
     yonida «oʻzgardi» belgisi, sahifadan ketishda brauzer ogohlantiradi. Xulq: formada data-fx-savebar (foxui.js → savebar). */
  .fx-savebar {
    position: sticky;
    z-index: 30;
    inset-block-end: var(--fx-space-4);
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--fx-space-3) var(--fx-space-4);
    margin-block-start: var(--fx-space-4);
    padding: var(--fx-space-3) var(--fx-space-3) var(--fx-space-3) var(--fx-space-5);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-text-primary);
    color: var(--fx-bg-page);
    box-shadow: var(--fx-shadow-lg);
    font-size: var(--fx-font-size-sm);
    opacity: 0;
    translate: 0 var(--fx-motion-shift-lg);
    visibility: hidden;
    transition: opacity var(--fx-motion-exit-base) var(--fx-ease-exit), translate var(--fx-motion-exit-base) var(--fx-ease-exit), visibility var(--fx-motion-exit-base) allow-discrete;
  }
  .fx-savebar[data-open] { opacity: 1; translate: 0 0; visibility: visible; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-emphasized); }
  .fx-savebar[data-position="fixed"] { position: fixed; inset-inline: var(--fx-space-4); inset-block-end: var(--fx-space-4); margin: 0 auto; max-inline-size: calc(var(--fx-dialog-width) * 1.6); }
  .fx-savebar[data-position="top"] { position: fixed; inset-block: 0 auto; inset-inline: 0; margin: 0; border-radius: 0; translate: 0 calc(var(--fx-motion-shift-lg) * -1); }
  .fx-savebar[data-position="top"][data-open] { translate: 0 0; }
  .fx-savebar__text { display: inline-flex; align-items: center; gap: var(--fx-space-2); font-weight: var(--fx-font-weight-medium); }
  /* Ogohlantirish belgisi — romb (shakl), rang yolgʻiz emas */
  .fx-savebar__text::before { content: ""; flex: none; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); background: var(--fx-fg-warning); rotate: 45deg; }
  .fx-savebar__count { font-variant-numeric: tabular-nums; opacity: 0.75; font-weight: var(--fx-font-weight-regular); }
  .fx-savebar__actions { display: flex; gap: var(--fx-space-2); margin-inline-start: auto; }
  .fx-savebar .fx-btn[data-variant="ghost"] { color: inherit; }
  .fx-savebar .fx-btn[data-variant="ghost"]:hover { background: color-mix(in oklab, currentColor 14%, transparent); }
  .fx-savebar .fx-btn[data-variant="primary"] { background: var(--fx-bg-page); color: var(--fx-text-primary); }
  .fx-savebar :focus-visible { outline-color: var(--fx-bg-page); }
  /* Saqlandi: qisqa tasdiq holati */
  .fx-savebar[data-state="saved"] .fx-savebar__text::before { content: "✓"; inline-size: auto; block-size: auto; background: none; rotate: none; color: var(--fx-fg-success); }
  /* Oʻzgargan maydon: yorliq oldida nuqta (shakl; ::after band — majburiy «*» u yerda), panel matnida soni soʻz bilan */
  [data-fx-savebar] .fx-field[data-changed] .fx-label::before,
  [data-fx-savebar] .fx-settings__row[data-changed] .fx-settings__name::before { content: "● "; color: var(--fx-text-brand); font-size: var(--fx-font-size-xs); }
  @media (max-width: 30em) { .fx-savebar { padding-inline-start: var(--fx-space-4); } .fx-savebar__actions { inline-size: 100%; } .fx-savebar__actions > .fx-btn { flex: 1; } }
}

/* schedule */
@layer fx.components {
  /* Kalendar ko'rinishlari (#145): oy (hodisa chiplari va «+N»), hafta va kun (soatlar to'ri, «hozir» chizig'i, kun bo'yi qatori).
     Hodisa — tugma (nomi + vaqti matnda; rang faqat toifa belgisi). Tanlash kalendari (.fx-calendar) bilan adashtirmang — u sana tanlaydi, bu hodisalarni ko'rsatadi. */
  .fx-schedule {
    --fx-schedule-start: 8;   /* birinchi ko'rinadigan soat */
    --fx-schedule-hours: 10;  /* nechta soat ko'rinadi */
    --fx-schedule-days: 7;
    --_hour: var(--fx-space-12);
    --_gut: var(--fx-space-12);
    display: grid;
    min-inline-size: 0;
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
    overflow: auto;
  }
  .fx-schedule[data-view="day"] { --fx-schedule-days: 1; }
  .fx-schedule[data-view="month"] { --fx-schedule-days: 7; }
  .fx-schedule__head, .fx-schedule__allday, .fx-schedule__body { display: grid; grid-template-columns: var(--_gut) repeat(var(--fx-schedule-days), minmax(0, 1fr)); min-inline-size: calc(var(--_gut) + var(--fx-schedule-days) * var(--fx-space-12) * 2); }
  .fx-schedule[data-view="month"] .fx-schedule__head { grid-template-columns: repeat(7, minmax(0, 1fr)); min-inline-size: calc(var(--fx-space-12) * 11); }
  .fx-schedule__head { border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  /* Kun sarlavhasi: hafta kuni + raqam; bugun — to'ldirilgan raqam (rangdan tashqari shakl) */
  .fx-schedule__dh, .fx-schedule__dow { display: flex; align-items: center; justify-content: center; gap: var(--fx-space-2); padding-block: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-schedule__dnum { display: grid; place-items: center; min-inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); padding-inline: var(--fx-space-1); border-radius: var(--fx-radius-circle); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; }
  .fx-schedule__dh[data-today] .fx-schedule__dnum { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  /* Kun bo'yi qatori */
  .fx-schedule__allday { border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-schedule__label { display: flex; align-items: center; justify-content: flex-end; padding-inline: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-align: end; }
  .fx-schedule__cell { display: grid; align-content: start; gap: var(--fx-space-1); min-inline-size: 0; padding: var(--fx-space-1); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  /* Hodisa chipi (oy va kun bo'yi): toifa rangi — chap chiziq, matn har doim bor */
  .fx-schedule__chip, .fx-schedule__ev {
    --_c: var(--fx-bg-brand-solid);
    --_bg: var(--fx-bg-brand-subtle);
    box-sizing: border-box;
    display: block;
    min-inline-size: 0;
    margin: 0;
    padding: var(--fx-space-1) var(--fx-space-2);
    border: 0;
    border-inline-start: var(--fx-space-1) solid var(--_c);
    border-radius: var(--fx-radius-badge);
    background: var(--_bg);
    color: var(--fx-text-primary);
    font: inherit;
    font-size: var(--fx-font-size-xs);
    text-align: start;
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-schedule__chip { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-schedule__chip:hover, .fx-schedule__ev:hover { background: color-mix(in oklab, var(--_bg) 85%, var(--_c)); }
  .fx-schedule__chip:active, .fx-schedule__ev:active { scale: var(--fx-motion-press); }
  .fx-schedule :is(.fx-schedule__chip, .fx-schedule__ev, .fx-schedule__more):focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  :is(.fx-schedule__chip, .fx-schedule__ev)[data-tone="blue"] { --_c: var(--fx-bg-category-blue); --_bg: var(--fx-bg-category-blue-subtle); }
  :is(.fx-schedule__chip, .fx-schedule__ev)[data-tone="green"] { --_c: var(--fx-bg-category-green); --_bg: var(--fx-bg-category-green-subtle); }
  :is(.fx-schedule__chip, .fx-schedule__ev)[data-tone="coral"] { --_c: var(--fx-bg-category-coral); --_bg: var(--fx-bg-category-coral-subtle); }
  :is(.fx-schedule__chip, .fx-schedule__ev)[data-tone="purple"] { --_c: var(--fx-bg-category-purple); --_bg: var(--fx-bg-category-purple-subtle); }
  :is(.fx-schedule__chip, .fx-schedule__ev)[data-tone="yellow"] { --_c: var(--fx-bg-category-yellow); --_bg: var(--fx-bg-category-yellow-subtle); }
  :is(.fx-schedule__chip, .fx-schedule__ev)[data-tone="pink"] { --_c: var(--fx-bg-category-pink); --_bg: var(--fx-bg-category-pink-subtle); }
  /* Soatlar to'ri (hafta/kun) */
  .fx-schedule__body { position: relative; block-size: calc(var(--fx-schedule-hours) * var(--_hour)); }
  .fx-schedule__hours { display: grid; grid-auto-rows: var(--_hour); }
  .fx-schedule__hours > * { padding: var(--fx-space-1) var(--fx-space-2) 0 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; text-align: end; }
  .fx-schedule__col {
    position: relative;
    min-inline-size: 0;
    border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default);
    background: repeating-linear-gradient(to bottom, var(--fx-border-color-default) 0, var(--fx-border-color-default) var(--fx-border-width-default), transparent var(--fx-border-width-default), transparent var(--_hour));
  }
  .fx-schedule__col[data-today] { background-color: var(--fx-bg-subtle); }
  .fx-schedule__ev {
    position: absolute;
    inset-block-start: calc((var(--from) - var(--fx-schedule-start)) * var(--_hour));
    block-size: calc(var(--span, 1) * var(--_hour) - var(--fx-border-width-default) * 2);
    inset-inline-start: calc(100% * var(--col, 0) / var(--cols, 1));
    inline-size: calc(100% / var(--cols, 1) - var(--fx-border-width-default));
    overflow: hidden;
  }
  .fx-schedule__time { display: block; color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; }
  .fx-schedule__title { display: block; font-weight: var(--fx-font-weight-medium); overflow: hidden; text-overflow: ellipsis; }
  /* «Hozir» chizig'i: chiziq + vaqt yozuvi (rangdan tashqari — yozuv) */
  .fx-schedule__now { position: absolute; z-index: 2; inset-inline: 0; inset-block-start: calc((var(--from) - var(--fx-schedule-start)) * var(--_hour)); block-size: var(--fx-border-width-focus); background: var(--fx-bg-error-solid); pointer-events: none; }
  .fx-schedule__now > span { position: absolute; inset-block-start: 50%; inset-inline-start: 0; translate: 0 -50%; padding: 0 var(--fx-space-1); border-radius: var(--fx-radius-badge); background: var(--fx-bg-error-solid); color: var(--fx-text-on-error); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; line-height: 1.4; }
  /* Oy */
  .fx-schedule__month { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); min-inline-size: calc(var(--fx-space-12) * 11); }
  .fx-schedule__day { display: grid; align-content: start; gap: var(--fx-space-1); min-inline-size: 0; min-block-size: calc(var(--fx-space-12) * 2); padding: var(--fx-space-1); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-schedule__day:nth-child(7n + 1) { border-inline-start: 0; }
  .fx-schedule__day:nth-child(-n + 7) { border-block-start: 0; }
  .fx-schedule__day .fx-schedule__num { justify-self: start; display: grid; place-items: center; min-inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); padding-inline: var(--fx-space-1); border-radius: var(--fx-radius-circle); font-variant-numeric: tabular-nums; font-weight: var(--fx-font-weight-medium); }
  .fx-schedule__day[data-outside] { background: var(--fx-bg-subtle); color: var(--fx-text-tertiary); }
  .fx-schedule__day[data-today] .fx-schedule__num { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-schedule__more { justify-self: start; padding: 0 var(--fx-space-1); border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); cursor: pointer; }
  .fx-schedule__more:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
}

/* scrollarea */
@layer fx.components {
  /* Aylanuvchi maydon: kontent davom etayotgan chetda yumshoq soʻnish (fade) — "yana bor" ishorasi. Balandlik/kenglikni chegaralang (max-block-size).
     Xulq data-fade-start / data-fade-end qoʻyadi; ingichka aylantirish chizigʻi; klaviatura bilan aylantirish uchun tabindex=0. */
  .fx-scrollarea { --_fs: 0%; --_fe: 0%; --_fade: calc(var(--fx-space-8) + var(--fx-space-2)); overflow: auto; scrollbar-width: thin; overscroll-behavior: contain; mask-image: linear-gradient(to bottom, transparent 0, black var(--_fs), black calc(100% - var(--_fe)), transparent 100%); }
  .fx-scrollarea[data-axis="x"] { overflow-y: hidden; mask-image: linear-gradient(to right, transparent 0, black var(--_fs), black calc(100% - var(--_fe)), transparent 100%); }
  .fx-scrollarea[data-fade-start] { --_fs: var(--_fade); }
  .fx-scrollarea[data-fade-end] { --_fe: var(--_fade); }
  .fx-scrollarea:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* Progressiv xiralik (4-toʻlqin 4.41, data-edge="blur"): chetda soʻnish oʻrniga kontent xiralashib ostidan oʻtadi (HIG) —
     yopishqoq ::before/::after qatlamlari backdrop-filter bilan, blur chetdan ichkariga kamayadi (mask). Faqat vertikal maydonda;
     backdrop-filter boʻlmasa yoki shaffoflik kamaytirilsa — oddiy soʻnish qoladi. */
  @supports (backdrop-filter: blur(1px)) {
    @media not (prefers-reduced-transparency: reduce) {
      .fx-scrollarea[data-edge="blur"]:not([data-axis="x"]) { mask-image: none; }
      .fx-scrollarea[data-edge="blur"]:not([data-axis="x"])::before,
      .fx-scrollarea[data-edge="blur"]:not([data-axis="x"])::after {
        content: "";
        display: block;
        position: sticky;
        z-index: var(--fx-z-raised);
        block-size: var(--_fade);
        pointer-events: none;
        backdrop-filter: blur(var(--fx-space-1));
        opacity: 0;
        transition: opacity var(--fx-motion-fast) var(--fx-ease-standard);
      }
      .fx-scrollarea[data-edge="blur"]:not([data-axis="x"])::before { inset-block-start: 0; margin-block-end: calc(var(--_fade) * -1); mask-image: linear-gradient(to bottom, black 20%, transparent); }
      .fx-scrollarea[data-edge="blur"]:not([data-axis="x"])::after { inset-block-end: 0; margin-block-start: calc(var(--_fade) * -1); mask-image: linear-gradient(to top, black 20%, transparent); }
      .fx-scrollarea[data-edge="blur"][data-fade-start]::before,
      .fx-scrollarea[data-edge="blur"][data-fade-end]::after { opacity: 1; }
    }
  }
}

/* scrollstory */
@layer fx.components {
  /* Yopishqoq scroll hikoyasi (4.39, Aceternity Sticky Scroll Reveal): chapda matn qadamlari oddiy oqimda, oʻngda media
     yopishib turadi va qaysi qadam koʻrinish markazida boʻlsa, unga mos panel almashadi (blur-fade). Faol qadam toʻq,
     qolganlari xira; chetda progress chizigʻi. Xulq — behaviors/scrollstory.js (IntersectionObserver, scroll hodisasisiz).
     JS boʻlmasa — birinchi panel koʻrinadi, matn toʻliq. Tor konteynerda (telefon) media tepada yopishadi, qadamlar ostida.
     Harakat kamaytirilsa — panel darhol almashadi. */
  .fx-scrollstory {
    --_top: var(--fx-space-12);
    container-type: inline-size;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-space-12) * 7)), 1fr));
    gap: var(--fx-space-10);
    align-items: start;
  }
  .fx-scrollstory__steps { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; border-inline-start: var(--fx-border-width-focus) solid var(--fx-border-color-default); }
  .fx-scrollstory__step {
    position: relative;
    display: grid;
    gap: var(--fx-space-2);
    align-content: center;
    min-block-size: 70vh;
    padding-block: var(--fx-space-6);
    padding-inline-start: var(--fx-space-6);
    color: var(--fx-text-tertiary);
    transition: color var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-scrollstory__step:first-child { min-block-size: 50vh; align-content: start; }
  .fx-scrollstory__step:last-child { min-block-size: 50vh; }
  /* faol qadam: chap chiziqda brend boʻlagi + toʻq matn */
  .fx-scrollstory__step::before {
    content: "";
    position: absolute;
    inset-block: 0;
    inset-inline-start: calc(var(--fx-border-width-focus) * -1);
    inline-size: var(--fx-border-width-focus);
    background: var(--fx-bg-brand-solid);
    transform-origin: top;
    scale: 1 0;
    transition: scale var(--fx-motion-slow) var(--fx-ease-emphasized);
  }
  .fx-scrollstory__step[data-active] { color: var(--fx-text-secondary); }
  .fx-scrollstory__step[data-active]::before { scale: 1 1; }
  .fx-scrollstory__step[data-active] .fx-scrollstory__title { color: var(--fx-text-primary); }
  .fx-scrollstory__kicker { margin: 0; font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.06em; text-transform: uppercase; color: var(--fx-text-brand); }
  .fx-scrollstory__title { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); color: inherit; transition: color var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-scrollstory__text { margin: 0; max-inline-size: 38ch; }

  /* media: yopishadi, panellar ustma-ust */
  .fx-scrollstory__media {
    position: sticky;
    inset-block-start: var(--_top);
    display: grid;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-subtle);
    box-shadow: var(--fx-shadow-md);
  }
  .fx-scrollstory__panel {
    grid-area: 1 / 1;
    min-inline-size: 0;
    opacity: 0;
    scale: calc(1 + (1 - var(--fx-motion-scale-enter)) / 2);
    filter: blur(calc(var(--fx-space-2) * var(--fx-knob-motion)));
    visibility: hidden;
    transition: opacity var(--fx-motion-slow) var(--fx-ease-standard), scale var(--fx-motion-slow) var(--fx-ease-emphasized), filter var(--fx-motion-slow) var(--fx-ease-standard), visibility var(--fx-motion-slow) var(--fx-ease-standard);
  }
  .fx-scrollstory__panel[data-active],
  .fx-scrollstory:not([data-fx-ready~="scrollstory"]) .fx-scrollstory__panel:first-child {
    opacity: 1;
    scale: 1;
    filter: none;
    visibility: visible;
  }
  /* tor joyda: media tepada yopishadi, qadamlar ostida */
  @container (inline-size < 42rem) {
    .fx-scrollstory__media { grid-row: 1; inset-block-start: var(--fx-space-4); aspect-ratio: 16 / 9; z-index: 1; }
    .fx-scrollstory__step { min-block-size: 45vh; }
  }
  .fx-scrollstory[data-media="start"] > .fx-scrollstory__media { order: -1; }
  @media (forced-colors: active) { .fx-scrollstory__step[data-active]::before { background: Highlight; } }
}

/* search */
@layer fx.components {
  /* Qidiruv: ikon + maydon + ixtiyoriy tugmalar maslahati (⌘K); role="search" ichida */
  .fx-search {
    --_h: var(--fx-control-h-md);
    display: flex;
    align-items: center;
    gap: var(--fx-space-2);
    inline-size: 100%;
    block-size: var(--_h);
    box-sizing: border-box;
    padding-inline: var(--fx-space-4) var(--fx-space-2);
    background: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    color: var(--fx-text-tertiary);
  }
  .fx-search:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); background: var(--fx-bg-surface); }
  .fx-search > svg { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-search__input { flex: 1; min-inline-size: 0; block-size: 100%; border: 0; background: transparent; color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-md); }
  .fx-search__input:focus { outline: none; }
  .fx-search__input::placeholder { color: var(--fx-text-tertiary); }
  .fx-search__input::-webkit-search-cancel-button { appearance: none; }
  .fx-search__kbd { flex: none; padding: var(--fx-space-1) var(--fx-space-2); border-radius: var(--fx-radius-badge); border: var(--fx-border-width-default) solid var(--fx-border-color-default); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-search:focus-within .fx-search__kbd { display: none; }
  .fx-search[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  /* ---- Kengaytma (2.136): yuklanish spinneri, qamrov (scope) select ---- */
  .fx-search[aria-busy="true"]::after { content: ""; flex: none; box-sizing: border-box; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); margin-inline-end: var(--fx-space-2); border: var(--fx-border-width-focus) solid color-mix(in oklab, currentColor 20%, transparent); border-block-start-color: currentColor; border-radius: var(--fx-radius-circle); animation: fx-spin var(--fx-duration-spin) linear infinite; }
  .fx-search[aria-busy="true"] .fx-search__kbd { display: none; }
  @media (prefers-reduced-motion: reduce) { .fx-search[aria-busy="true"]::after { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
  .fx-search__scope { flex: none; appearance: none; align-self: stretch; padding-inline: var(--fx-space-2) var(--fx-space-3); border: 0; border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: 0; background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); cursor: pointer; }
  .fx-search__scope:hover { color: var(--fx-text-primary); }
  .fx-search__scope:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  @media (forced-colors: active) { .fx-search { border-color: ButtonText; } }

  /* ---- Doira tanlagichi (4.111, HIG scope bar): maydon ostida «Hammasi · Mijozlar · Bitimlar» — native radio, strelkalar bilan
     yuriladi; tanlangan — toʻldirilgan + qalin, son — yonida. ---- */
  .fx-search__scopes { display: flex; flex-wrap: wrap; gap: var(--fx-space-1); margin: var(--fx-space-2) 0 0; padding: 0; border: 0; min-inline-size: 0; }
  .fx-search__scopes-item { position: relative; display: inline-flex; align-items: center; gap: var(--fx-space-1); min-block-size: var(--fx-control-h-sm); padding-inline: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: calc(var(--fx-control-h-sm) / 2); background: var(--fx-bg-surface); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-search__scopes-item > input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: inherit; }
  .fx-search__scopes-item:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-search__scopes-item:active { scale: var(--fx-motion-press); }
  .fx-search__scopes-item:has(:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-search__scopes-item:has(:checked) { border-color: var(--fx-text-primary); background: var(--fx-text-primary); color: var(--fx-bg-page); font-weight: var(--fx-font-weight-semibold); }
  .fx-search__scopes-count { color: inherit; opacity: 0.7; font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  /* ---- Mobil toʻliq ekran (4.111, M3 search view): data-mode="fullscreen" — fokusda (xulq data-open qoʻyadi) tor ekranda maydon
     tepaga yopishadi, ostidagi panel (.fx-search__panel: oxirgi qidiruvlar, natijalar) butun ekranni egallaydi; «←» va Esc yopadi.
     Keng ekranda panel oddiy oqimda, maydon ostida. ---- */
  .fx-search__back { display: none; flex: none; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); margin-inline-start: calc(var(--fx-space-2) * -1); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: transparent; color: var(--fx-text-primary); cursor: pointer; }
  .fx-search__back > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-search__back:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-search__panel { display: grid; gap: var(--fx-space-1); margin-block-start: var(--fx-space-2); padding: var(--fx-space-2); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-search__panel[hidden] { display: none; }
  .fx-search__panel-title { margin: 0; padding: var(--fx-space-2) var(--fx-space-3) var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  @media (max-width: 40em) {
    .fx-search[data-mode="fullscreen"][data-open] { position: fixed; z-index: 60; inset-block-start: 0; inset-inline: 0; block-size: var(--fx-size-topbar); padding-inline: var(--fx-space-4); border: 0; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: 0; background: var(--fx-bg-surface); }
    .fx-search[data-mode="fullscreen"][data-open] > svg { display: none; }
    .fx-search[data-mode="fullscreen"][data-open] .fx-search__back { display: grid; }
    .fx-search[data-mode="fullscreen"][data-open] ~ .fx-search__panel { position: fixed; z-index: 59; inset: var(--fx-size-topbar) 0 0; margin: 0; border: 0; border-radius: 0; align-content: start; overflow-y: auto; overscroll-behavior: contain; animation: fx-fade-in var(--fx-motion-base) var(--fx-ease-enter); }
  }
}

/* searchresults */
@layer fx.components {
  /* Qidiruv natijalari sahifasi (4.196, naqsh): tepada katta qidiruv maydoni (soʻrov bilan), xulosa («48 ta natija»),
     «Balki … demoqchimisiz?» taklifi, qamrov yorliqlari (Hammasi · Komponentlar · Hujjatlar · Blog — soni bilan) va saralash.
     Chapda fx-facets, oʻngda natijalar: yoʻl (breadcrumb), sarlavha havolasi, parcha — mos soʻzlar <mark> bilan ajratilgan,
     meta (tur, sana). Natija yoʻq boʻlsa — .fx-searchresults__none: nima qilish mumkinligi roʻyxati va mashhur sahifalar.
     Pastda fx-pagination. Tor ekranda faset paneli natijalar tepasiga tushadi. */
  .fx-searchresults { display: grid; grid-template-columns: minmax(0, calc(var(--fx-space-12) * 5.5)) minmax(0, 1fr); align-items: start; gap: var(--fx-space-6) var(--fx-space-10); }
  .fx-searchresults__top { grid-column: 1 / -1; display: grid; gap: var(--fx-space-3); }
  .fx-searchresults__form { display: flex; gap: var(--fx-space-2); max-inline-size: calc(var(--fx-dialog-width) * 1.6); }
  .fx-searchresults__form > .fx-search { flex: 1 1 auto; }
  .fx-searchresults__summary { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-searchresults__summary > b { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-searchresults__suggest { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-searchresults__suggest a { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); font-style: italic; }
  .fx-searchresults__bar { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-searchresults__scopes { display: flex; flex-wrap: wrap; gap: var(--fx-space-1); margin: 0; padding: 0; list-style: none; }
  .fx-searchresults__scope {
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-2);
    min-block-size: var(--fx-size-min-target);
    padding: var(--fx-space-2) var(--fx-space-3);
    border-block-end: var(--fx-border-width-focus) solid transparent;
    margin-block-end: calc(var(--fx-border-width-default) * -1);
    color: var(--fx-text-secondary);
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    text-decoration: none;
    transition: color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-searchresults__scope:hover { color: var(--fx-text-primary); }
  .fx-searchresults__scope[aria-current] { border-block-end-color: var(--fx-bg-brand-solid); color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-searchresults__scope:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); border-radius: var(--fx-radius-control); }
  .fx-searchresults__scope > span { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); font-variant-numeric: tabular-nums; }
  .fx-searchresults__sort { display: flex; align-items: center; gap: var(--fx-space-2); padding-block: var(--fx-space-1); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-searchresults__main { display: grid; gap: var(--fx-space-6); min-inline-size: 0; }
  .fx-searchresults__list { display: grid; gap: var(--fx-space-6); margin: 0; padding: 0; list-style: none; }
  .fx-searchresults__item { display: grid; gap: var(--fx-space-1); max-inline-size: 72ch; }
  .fx-searchresults__path { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1); margin: 0; padding: 0; list-style: none; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-searchresults__path > li + li::before { content: "›"; margin-inline-end: var(--fx-space-1); }
  .fx-searchresults__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-snug); }
  .fx-searchresults__link { color: var(--fx-text-brand); text-decoration: none; }
  .fx-searchresults__link:hover { text-decoration: underline; text-underline-offset: 0.2em; }
  .fx-searchresults__link:visited { color: color-mix(in oklab, var(--fx-text-brand) 70%, var(--fx-text-secondary)); }
  .fx-searchresults__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-searchresults__snippet { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); line-height: var(--fx-line-height-relaxed); }
  /* moslik: fon + qalinlik (faqat rang emas) */
  .fx-searchresults :is(.fx-searchresults__snippet, .fx-searchresults__title) mark { padding: 0 calc(var(--fx-space-1) / 2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-warning-subtle); color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-searchresults__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1) var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-searchresults__item[data-type="best"] { padding: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-sm); }
  .fx-searchresults__none { display: grid; gap: var(--fx-space-4); padding: var(--fx-space-8); border: var(--fx-border-width-default) dashed var(--fx-border-color-strong); border-radius: var(--fx-radius-surface); }
  .fx-searchresults__none[hidden] { display: none; }
  .fx-searchresults__none-title { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-searchresults__none ul { display: grid; gap: var(--fx-space-1); margin: 0; padding-inline-start: var(--fx-space-5); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-searchresults__popular { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  @media (max-width: 52em) {
    .fx-searchresults { grid-template-columns: minmax(0, 1fr); }
  }
}

/* section-head */
@layer fx.components {
  /* Boʻlim sarlavhasi: sahifa ichidagi boʻlim — sarlavha, izoh, oʻngda amallar, ixtiyoriy pastki chiziq.
     Sarlavha darajasini (h2/h3) mazmun belgilaydi, koʻrinish emas. */
  .fx-section-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--fx-space-4); flex-wrap: wrap; }
  .fx-section-head__text { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; flex: 1 1 auto; }
  .fx-section-head__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); }
  .fx-section-head__desc { margin: 0; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-section-head__actions { flex: none; display: flex; align-items: center; gap: var(--fx-space-2); flex-wrap: wrap; }
  .fx-section-head[data-divider] { padding-block-end: var(--fx-space-4); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-section-head[data-size="sm"] .fx-section-head__title { font-size: var(--fx-font-size-md); }
}

/* segment */
@layer fx.components {
  /* Segment (bir nechtadan bittasi): tugmalar guruhi, tanlangani aria-pressed (yoki havola boʻlsa aria-current). Haqiqiy tablar — fx-tabs. tashqi qobiq va ichki pill — ichma-ich yoy formulasi: ichki = tashqi − ichki chet */
  .fx-segment {
    --_pad: var(--fx-space-1);
    --_h: var(--fx-control-h-md);
    --_inner-h: calc(var(--_h) - var(--_pad) * 2);
    display: inline-flex;
    gap: var(--fx-space-1);
    padding: var(--_pad);
    background: var(--fx-bg-muted);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    transition: border-radius var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-segment__item {
    display: inline-grid;
    place-items: center;
    text-decoration: none;
    white-space: nowrap;
    block-size: var(--_inner-h);
    padding-inline: var(--fx-space-4);
    border: 0;
    font: inherit;
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    color: var(--fx-text-secondary);
    background: transparent;
    cursor: pointer;
    border-radius: calc(var(--fx-knob-pill) * var(--_inner-h) / 2 + (1 - var(--fx-knob-pill)) * max(0px, var(--fx-radius-control) - var(--_pad)));
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-radius var(--fx-motion-base) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-segment[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  .fx-segment__item:hover { color: var(--fx-text-primary); }
  .fx-segment__item:is([aria-pressed="true"], [aria-current="page"]) { background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-sm); }
  .fx-segment__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-segment__item:active { scale: var(--fx-motion-press); }
  /* Tanlov «thumb»i sirpanadi (anchor positioning; qoʻllanmasa — tanlangan bandning oʻz foni) */
  @supports (anchor-name: --a) and (anchor-scope: --a) {
    .fx-segment { position: relative; isolation: isolate; anchor-scope: --fx-seg; }
    .fx-segment__item:is([aria-pressed="true"], [aria-current="page"]) { anchor-name: --fx-seg; background: transparent; box-shadow: none; }
    .fx-segment:has(:is([aria-pressed="true"], [aria-current="page"]))::before {
      content: ""; position: absolute; z-index: -1; position-anchor: --fx-seg;
      inset: anchor(top) anchor(right) anchor(bottom) anchor(left);
      border-radius: calc(var(--fx-knob-pill) * var(--_inner-h) / 2 + (1 - var(--fx-knob-pill)) * max(0px, var(--fx-radius-control) - var(--_pad)));
      background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-sm);
      transition: inset var(--fx-motion-slow) var(--fx-ease-spring);
    }
  }
  /* ---- Kengaytma (2.97, 2.155): fill (toʻliq en), ikon-only, multi (toggle guruhi), kichik oʻlchamda bosish maydoni ---- */
  .fx-segment[data-fill] { display: flex; inline-size: 100%; }
  .fx-segment[data-fill] > .fx-segment__item { flex: 1 1 0; }
  .fx-segment[data-icon-only] > .fx-segment__item { aspect-ratio: 1; padding-inline: 0; }
  .fx-segment__item > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-segment__item { position: relative; }
  .fx-segment[data-size="sm"] > .fx-segment__item::before { content: ""; position: absolute; inset-inline: 0; inset-block: calc((var(--_inner-h) - var(--fx-size-min-target)) / 2); }
  /* Multi: har band mustaqil (aria-pressed), sirpanuvchi thumb oʻrniga har tanlangan bandning oʻz foni */
  .fx-segment[data-multi]:has(.fx-segment__item)::before { display: none; }
  .fx-segment[data-multi] .fx-segment__item:is([aria-pressed="true"], [aria-current="page"]) { anchor-name: none; background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-sm); }
  @media (forced-colors: active) { .fx-segment__item:is([aria-pressed="true"], [aria-current="page"]) { background: Highlight; color: HighlightText; forced-color-adjust: none; } .fx-segment { border: var(--fx-border-width-default) solid ButtonText; } }
}

/* select */
@layer fx.components {
  /* Native <select> — maydon bilan bir xil shakl (yoy, balandlik, toʻldirilgan/chegarali); oʻngda strelka (mask, currentColor) */
  .fx-select {
    --_h: var(--fx-control-h-md);
    appearance: none;
    inline-size: 100%;
    block-size: var(--_h);
    box-sizing: border-box;
    padding-inline: var(--fx-space-4) calc(var(--fx-space-4) + var(--fx-size-icon-sm) + var(--fx-space-2));
    font: inherit;
    font-size: var(--fx-font-size-md);
    color: var(--fx-text-primary);
    background-color: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    cursor: pointer;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-select-wrap { position: relative; display: block; }
  .fx-select-wrap::after {
    content: "";
    position: absolute;
    inset-block: 0;
    inset-inline-end: var(--fx-space-4);
    margin-block: auto;
    inline-size: var(--fx-size-icon-sm);
    block-size: var(--fx-size-icon-sm);
    background: var(--fx-text-tertiary);
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
    pointer-events: none;
  }
  .fx-select:hover { border-color: color-mix(in oklab, var(--fx-border-color-strong) calc((1 - var(--fx-knob-field-fill)) * 100%), transparent); }
  .fx-select:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-select:has(option[value=""]:checked) { color: var(--fx-text-tertiary); }
  .fx-select:disabled { background-color: var(--fx-bg-muted); color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-select[data-size="sm"] { --_h: var(--fx-control-h-sm); font-size: var(--fx-font-size-sm); }
  .fx-field[data-invalid] .fx-select { border-color: var(--fx-border-color-error); }
  /* ---- Kengaytma (2.37, 2.38): guruh sarlavhalari (optgroup), boy opsiyalar (appearance: base-select, Chromium) ---- */
  .fx-select optgroup { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); }
  .fx-select optgroup > option { color: var(--fx-text-primary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-regular); }
  /* Boy select: <select class="fx-select" data-rich><button><selectedcontent></selectedcontent></button> <option>…ikon/avatar + matn + tavsif…</option></select>. Boshqa brauzerda oddiy select. */
  @supports (appearance: base-select) {
    .fx-select[data-rich], .fx-select[data-rich]::picker(select) { appearance: base-select; }
    .fx-select[data-rich] { padding-inline: var(--fx-space-2); }
    .fx-select[data-rich] > button { display: flex; align-items: center; inline-size: 100%; padding-inline: var(--fx-space-2); border: 0; background: none; color: inherit; font: inherit; cursor: pointer; }
    .fx-select[data-rich]::picker-icon { content: ""; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: var(--fx-text-tertiary); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
    .fx-select[data-rich]:open::picker-icon { rotate: 180deg; }
    .fx-select[data-rich]::picker(select) { margin-block: var(--fx-space-1); padding: var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); }
    .fx-select[data-rich] option { display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-nav); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); cursor: pointer; }
    .fx-select[data-rich] option:is(:hover, :focus-visible) { background: var(--fx-bg-muted); outline: none; }
    .fx-select[data-rich] option:checked { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
    .fx-select[data-rich] option::checkmark { order: 1; margin-inline-start: auto; }
    .fx-select[data-rich] option small { display: block; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
    .fx-select[data-rich] :is(.fx-avatar, svg) { flex: none; }
  }
  @media (forced-colors: active) { .fx-select { border-color: ButtonText; } }
}
@layer fx.components {
  /* Moslashuvchi overlay (4.26): data-fx-adaptive + data-rich — telefonda (< 640 px) boy roʻyxat (::picker) pastki varaqqa aylanadi.
     Oddiy <select> telefonda baribir tizimning oʻz tanlagichini ochadi. */
  @supports (appearance: base-select) {
    @media (max-width: 640px) {
      .fx-select[data-rich][data-fx-adaptive]::picker(select) { position: fixed; inset: auto 0 0 0; box-sizing: border-box; inline-size: 100%; max-block-size: 70dvh; margin: 0; padding-block-end: calc(var(--fx-space-4) + env(safe-area-inset-bottom, 0px)); border-radius: var(--fx-radius-overlay) var(--fx-radius-overlay) 0 0; position-area: none; position-try-fallbacks: none; }
      .fx-select[data-rich][data-fx-adaptive] option { min-block-size: var(--fx-size-touch-target); }
    }
  }
}

/* sessionwarn */
@layer fx.components {
  /* Sessiya tugashi ogohlantirishi (4.197, naqsh — GOV.UK/HMRC «Timeout warning»): fx-dialog ustida modal alertdialog.
     2 daqiqa qolganda ochiladi: soat belgisi, sarlavha, katta teskari sanoq (mono, joy sakramaydi), qolgan vaqt chizigʻi
     (--fx-sessionwarn-left, JS yangilaydi) va ikki tugma — «Davom etish» (asosiy, autofocus; Esc ham shu) va «Chiqish».
     30 soniyadan kam qolganda data-state="urgent" — sanoq va chiziq xato rangida (soʻz va raqam baribir bor).
     Tugagach .fx-sessionwarn__expired (qayta kirish havolasi). Ildizning display’iga tegilmaydi — <dialog> oʻzi boshqaradi. */
  .fx-sessionwarn { --fx-sessionwarn-left: 100%; text-align: center; }
  .fx-sessionwarn__main, .fx-sessionwarn__expired { display: grid; justify-items: center; gap: var(--fx-space-3); }
  .fx-sessionwarn__main[hidden], .fx-sessionwarn__expired[hidden] { display: none; }
  .fx-sessionwarn__expired:focus { outline: none; }
  .fx-sessionwarn__icon { display: grid; place-items: center; inline-size: calc(var(--fx-control-h-lg) * 1.2); block-size: calc(var(--fx-control-h-lg) * 1.2); border-radius: var(--fx-radius-circle); background: var(--fx-bg-warning-subtle); color: var(--fx-fg-warning); }
  .fx-sessionwarn__icon > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-sessionwarn__expired .fx-sessionwarn__icon { background: var(--fx-bg-muted); color: var(--fx-text-secondary); }
  .fx-sessionwarn__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-wrap: pretty; }
  .fx-sessionwarn__time {
    display: block;
    margin-block: var(--fx-space-1);
    color: var(--fx-text-primary);
    font-family: var(--fx-font-family-mono);
    font-size-adjust: var(--fx-font-adjust-mono);
    font-size: var(--fx-font-size-display-md);
    font-weight: var(--fx-font-weight-semibold);
    font-variant-numeric: tabular-nums;
    line-height: var(--fx-line-height-tight);
    transition: color var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-sessionwarn__bar { inline-size: 100%; block-size: var(--fx-space-1); overflow: hidden; border-radius: var(--fx-radius-pill); background: var(--fx-bg-muted); }
  .fx-sessionwarn__bar::before { content: ""; display: block; inline-size: var(--fx-sessionwarn-left); block-size: 100%; border-radius: inherit; background: var(--fx-fg-warning); transition: inline-size var(--fx-motion-slower) linear, background-color var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-sessionwarn[data-state="urgent"] .fx-sessionwarn__time { color: var(--fx-text-error); }
  .fx-sessionwarn[data-state="urgent"] .fx-sessionwarn__bar::before { background: var(--fx-fg-error); }
  .fx-sessionwarn .fx-dialog__actions { justify-content: center; inline-size: 100%; margin-block-start: var(--fx-space-3); }
  @media (max-width: 30em) {
    .fx-sessionwarn .fx-dialog__actions { flex-direction: column-reverse; }
    .fx-sessionwarn .fx-dialog__actions > .fx-btn { inline-size: 100%; }
  }
}

/* settings */
@layer fx.components {
  /* Sozlamalar sahifasi qolipi: chapda boʻlimlar menyusi, oʻngda boʻlimlar — har biri sarlavha + izoh + qatorlar (yorliq chapda, boshqaruv oʻngda).
     Pastda saqlash paneli. Faqat CSS; ichiga fx-input, fx-switch, fx-select va boshqalar qoʻyiladi. */
  .fx-settings { display: grid; grid-template-columns: calc(var(--fx-nav-width) * 0.9) minmax(0, 1fr); gap: var(--fx-space-8); align-items: start; }
  .fx-settings__nav { position: sticky; inset-block-start: var(--fx-space-6); display: grid; gap: calc(var(--fx-space-1) / 2); }
  .fx-settings__link { display: flex; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-nav-item-height); padding-inline: var(--fx-space-3); border-radius: var(--fx-radius-nav); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); text-decoration: none; }
  .fx-settings__link:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-settings__link[aria-current] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-settings__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-settings__main { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-8); min-inline-size: 0; max-inline-size: calc(var(--fx-dialog-width) * 1.5); }
  .fx-settings__section { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-1); scroll-margin-block-start: var(--fx-space-6); }
  .fx-settings__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); }
  .fx-settings__desc { margin: 0; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-settings__card { display: grid; grid-template-columns: minmax(0, 1fr); margin-block-start: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-settings__row { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-6); padding: var(--fx-space-4) var(--fx-space-5); }
  .fx-settings__row + .fx-settings__row { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-settings__label { display: grid; gap: calc(var(--fx-space-1) / 2); min-inline-size: 0; }
  .fx-settings__name { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); color: var(--fx-text-primary); }
  .fx-settings__hint { font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-settings__control { flex: none; display: flex; align-items: center; gap: var(--fx-space-2); }
  .fx-settings__row[data-stack] { flex-direction: column; align-items: stretch; gap: var(--fx-space-3); }
  .fx-settings__section[data-tone="danger"] .fx-settings__card { border-color: var(--fx-border-color-error); }
  .fx-settings__section[data-tone="danger"] .fx-settings__title { color: var(--fx-text-error); }
  .fx-settings__foot { position: sticky; inset-block-end: 0; display: flex; align-items: center; justify-content: flex-end; gap: var(--fx-space-3); padding: var(--fx-space-4) var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-md); }
  .fx-settings__foot-note { margin-inline-end: auto; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  @media (max-width: 48em) {
    .fx-settings { grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-5); }
    .fx-settings__nav { position: static; display: flex; overflow-x: auto; scrollbar-width: none; }
    .fx-settings__link { flex: none; }
    .fx-settings__row { flex-direction: column; align-items: stretch; gap: var(--fx-space-3); }
  }
}

/* share */
@layer fx.components {
  /* Ulashish: havola + nusxalash, ruxsat berilgan odamlar (rol tanlovi), umumiy kirish darajasi. Odatda .fx-dialog ichida. */
  .fx-share { display: grid; gap: var(--fx-space-4); }
  .fx-share__link { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--fx-space-2); }
  .fx-share__url { min-inline-size: 0; }
  .fx-share__copy { white-space: nowrap; }
  .fx-share__status { min-block-size: 1lh; margin: calc(var(--fx-space-2) * -1) 0 0; color: var(--fx-fg-success); font-size: var(--fx-font-size-xs); }
  .fx-share__people { display: grid; gap: var(--fx-space-3); margin: 0; padding: 0; list-style: none; }
  .fx-share__person { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--fx-space-3); }
  .fx-share__who { display: grid; min-inline-size: 0; font-size: var(--fx-font-size-sm); }
  .fx-share__who > b { font-weight: var(--fx-font-weight-semibold); }
  .fx-share__who > small { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-share__role { inline-size: auto; }
  .fx-share__owner { padding-inline: var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-share__access { display: grid; gap: var(--fx-space-2); padding-block-start: var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-share__access > label { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-share__hint { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
}

/* sheet */
@layer fx.components {
  /* Yon varaq (drawer): native <dialog> — fokus tuzogʻi, Esc, yuqori qatlam brauzerda. Oʻngdan yoki pastdan. */
  .fx-sheet {
    --_w: min(100vw, calc(var(--fx-dialog-width) * 0.9));
    position: fixed;
    inset: 0 0 0 auto;
    inline-size: var(--_w);
    max-inline-size: 100vw;
    block-size: 100dvh;
    max-block-size: 100dvh;
    margin: 0;
    padding: 0;
    border: 0;
    border-start-start-radius: var(--fx-radius-overlay);
    border-end-start-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-lg);
  }
  .fx-sheet[open] { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; }
  /* Kirish va chiqish (WDS «Harakat»: har kirishning chiqishi bor; chiqish ~30 % tez) */
  .fx-sheet { translate: 100% 0; transition: translate var(--fx-motion-exit-slow) var(--fx-ease-exit), display var(--fx-motion-exit-slow) allow-discrete, overlay var(--fx-motion-exit-slow) allow-discrete; }
  .fx-sheet[open] { translate: 0 0; transition-duration: var(--fx-motion-slower); transition-timing-function: var(--fx-ease-sheet); }
  @starting-style { .fx-sheet[open] { translate: 100% 0; } }
  .fx-sheet::backdrop { opacity: 0; transition: opacity var(--fx-motion-exit-slow) var(--fx-ease-exit), display var(--fx-motion-exit-slow) allow-discrete, overlay var(--fx-motion-exit-slow) allow-discrete; }
  .fx-sheet[open]::backdrop { opacity: 1; transition-duration: var(--fx-motion-slower); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-sheet[open]::backdrop { opacity: 0; } }

  .fx-sheet::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 40%, transparent); }
  .fx-sheet__head { display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-5) var(--fx-space-6); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-sheet__title { margin: 0; margin-inline-end: auto; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-sheet__body { overflow: auto; padding: var(--fx-space-6); }
  .fx-sheet__foot { display: flex; justify-content: flex-end; gap: var(--fx-space-3); padding: var(--fx-space-4) var(--fx-space-6); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-sheet[data-side="bottom"] { inset: auto 0 0; inline-size: 100vw; block-size: auto; max-block-size: 85dvh; border-radius: var(--fx-radius-overlay) var(--fx-radius-overlay) 0 0; }
  .fx-sheet[data-side="bottom"]:not([open]) { translate: 0 100%; }
  @starting-style { .fx-sheet[data-side="bottom"][open] { translate: 0 100%; } }
  /* harakat kamaytirilsa — siljimaydi, darhol */
  @media (prefers-reduced-motion: reduce) { .fx-sheet:not([open]), .fx-sheet[data-side="bottom"]:not([open]) { translate: 0 0; } @starting-style { .fx-sheet[open], .fx-sheet[data-side="bottom"][open] { translate: 0 0; } } }
  /* ---- Kengaytma (2.76, 2.77, 2.78): start (chap) tomon, enlar, RTL, modalsiz “push” rejimi, grip ---- */
  .fx-sheet[data-size="sm"] { --_w: min(100vw, calc(var(--fx-dialog-width) * 0.7)); }
  .fx-sheet[data-size="lg"] { --_w: min(100vw, calc(var(--fx-dialog-width) * 1.4)); }
  .fx-sheet[data-size="xl"] { --_w: min(100vw, calc(var(--fx-dialog-width) * 2)); }
  .fx-sheet[data-size="full"] { --_w: 100vw; border-radius: 0; }
  /* Chap tomon: start (LTR) yoki standart (RTL) — yoy burchaklari oʻng tomonda */
  .fx-sheet[data-side="start"]:dir(ltr), .fx-sheet:not([data-side="start"], [data-side="bottom"]):dir(rtl) { inset: 0 auto 0 0; border-top-left-radius: 0; border-bottom-left-radius: 0; border-top-right-radius: var(--fx-radius-overlay); border-bottom-right-radius: var(--fx-radius-overlay); }
  .fx-sheet[data-side="start"]:dir(ltr):not([open]), .fx-sheet:not([data-side="start"], [data-side="bottom"]):dir(rtl):not([open]) { translate: -100% 0; }
  @starting-style { .fx-sheet[data-side="start"]:dir(ltr)[open], .fx-sheet:not([data-side="start"], [data-side="bottom"]):dir(rtl)[open] { translate: -100% 0; } }
  @media (prefers-reduced-motion: reduce) {
    .fx-sheet[data-side="start"]:dir(ltr):not([open]), .fx-sheet:not([data-side="start"], [data-side="bottom"]):dir(rtl):not([open]) { translate: 0 0; }
    @starting-style { .fx-sheet[data-side="start"]:dir(ltr)[open], .fx-sheet:not([data-side="start"], [data-side="bottom"]):dir(rtl)[open] { translate: 0 0; } }
  }
  /* Modalsiz (push): <dialog>.show() — oqimda turadi, kontent siqiladi (flex ota ichida, yonma-yon) */
  .fx-sheet[data-mode="push"] { position: static; flex: none; inline-size: var(--_w); block-size: auto; max-block-size: none; align-self: stretch; translate: none; border-radius: 0; border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); box-shadow: none; transition: none; }
  .fx-sheet[data-mode="push"]:not([open]) { translate: none; }
  .fx-sheet[data-mode="push"]::backdrop { display: none; }
  /* Pastki varaq: sudrab yopish uchun tutqich (JS bilan ulanadi; koʻrinish shu) */
  .fx-sheet__grip { justify-self: center; inline-size: var(--fx-space-8); block-size: var(--fx-space-1); margin-block: var(--fx-space-2) 0; border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); }
  .fx-sheet[data-side="bottom"] > .fx-sheet__grip { grid-row: 1; }
  @media (forced-colors: active) { .fx-sheet { border: var(--fx-border-width-default) solid CanvasText; } }
  /* Toʻxtash nuqtalari (4.153): pastki varaq data-detents bilan yarim (data-detent="half") va toʻliq ("full") balandlikda toʻxtaydi.
     Tutqich — tugma (button.fx-sheet__grip): sudrash, ↑ ↓ yoki bosish bilan almashtiriladi; pastga sudrab tashlansa yopiladi (xulq — data-fx-sheet). */
  .fx-sheet[data-side="bottom"][data-detents] { block-size: 92dvh; max-block-size: 92dvh; grid-template-rows: auto auto minmax(0, 1fr) auto; transition-property: translate, block-size, display, overlay; }
  .fx-sheet[data-side="bottom"][data-detents][data-detent="half"] { block-size: 50dvh; }
  .fx-sheet[data-side="bottom"][data-detents][data-detent="full"] { block-size: 92dvh; }
  .fx-sheet[data-side="bottom"][data-detents][data-dragging] { transition: none; user-select: none; }
  button.fx-sheet__grip { position: relative; padding: 0; border: 0; cursor: grab; touch-action: none; }
  button.fx-sheet__grip::after { content: ""; position: absolute; inset: calc(var(--fx-space-3) * -1) calc(var(--fx-space-6) * -1); }
  button.fx-sheet__grip:hover { background: var(--fx-text-tertiary); }
  button.fx-sheet__grip:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-space-1); }
  .fx-sheet[data-dragging] button.fx-sheet__grip { cursor: grabbing; }
  .fx-sheet[data-side="bottom"][data-detents] > .fx-sheet__head { touch-action: none; }
}

/* shell */
@layer fx.components {
  /* Ilova karkasi (WDS «Karkas va navigatsiya»): chapda yon menyu (256, yigʻilganda 60), tepada panel (60), ish maydoni.
     Yon ustun kartasiz — sahifa fonida. < 840 px: menyu chapdan chiqadigan varaq (native popover — Esc, tashqariga bosish).
     Xulq — foxui.js (data-fx-shell): yigʻish tugmasi va Ctrl/⌘+B, tanlov eslab qolinadi. */
  .fx-shell {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-rows: var(--fx-size-topbar) minmax(0, 1fr);
    grid-template-areas: "side top" "side main";
    min-block-size: 100dvh;
    background: var(--fx-bg-page);
    color: var(--fx-text-primary);
  }
  .fx-shell__side {
    grid-area: side;
    position: sticky;
    inset: 0 auto auto 0;
    display: flex;
    flex-direction: column;
    block-size: 100dvh;
    margin: 0;
    padding: 0;
    overflow: auto;
    border: 0;
    border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    background: var(--fx-bg-page);
    color: inherit;
  }
  .fx-shell__brand { display: flex; align-items: center; gap: var(--fx-space-2); flex: none; block-size: var(--fx-size-topbar); padding-inline: var(--fx-space-5); font-weight: var(--fx-font-weight-semibold); white-space: nowrap; overflow: hidden; }
  .fx-shell__brand > svg, .fx-shell__brand > img { flex: none; inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-shell[data-collapsed] .fx-shell__brand { justify-content: center; padding-inline: 0; }
  .fx-shell[data-collapsed] .fx-shell__brand-name { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
  .fx-shell__top { grid-area: top; position: sticky; inset-block-start: 0; z-index: 2; display: flex; align-items: center; gap: var(--fx-space-3); padding-inline: var(--fx-space-6); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-page); }
  .fx-shell__main { grid-area: main; min-inline-size: 0; padding: var(--fx-space-8) var(--fx-space-6); }
  .fx-shell__spacer { flex: 1; }
  /* Rels varianti (S3): rels | panel (yashiriladi) | ish maydoni; panel yigʻilganda yoʻqoladi, rels qoladi */
  .fx-shell[data-variant="rail"] { grid-template-columns: auto auto minmax(0, 1fr); grid-template-areas: "rail side top" "rail side main"; }
  .fx-shell__rail { grid-area: rail; position: sticky; inset-block-start: 0; display: grid; block-size: 100dvh; box-sizing: border-box; padding: var(--fx-space-2) 0 var(--fx-space-2) var(--fx-space-2); z-index: 3; }
  .fx-shell[data-variant="rail"][data-collapsed] .fx-shell__side { display: none; }
  /* Oʻng yordamchi panel (2.139): tafsilot, izoh, faollik — ish maydoni yonida; [hidden] bilan yopiladi (data-fx-shell-aside-toggle) */
  .fx-shell__aside { grid-area: aside; position: sticky; inset-block-start: var(--fx-size-topbar); align-self: start; block-size: calc(100dvh - var(--fx-size-topbar)); inline-size: var(--fx-popover-width); overflow: auto; padding: var(--fx-space-5); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-page); }
  .fx-shell__aside[hidden] { display: none; }
  .fx-shell:has(> .fx-shell__aside:not([hidden])) { grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas: "side top top" "side main aside"; }
  .fx-shell[data-variant="rail"]:has(> .fx-shell__aside:not([hidden])) { grid-template-columns: auto auto minmax(0, 1fr) auto; grid-template-areas: "rail side top top" "rail side main aside"; }
  /* Suzuvchi (4-toʻlqin 4.157, shadcn Sidebar variant="floating"): yon menyu sahifa chetidan ajralgan karta — yoyi, chegarasi va yengil soyasi bor.
     Ichki (variant="inset"): yon menyu sahifa fonida, tepa panel va ish maydoni bitta yumaloq yuza (karta) ichida — ish maydoni oʻzi aylanadi.
     Ikkalasi ham yigʻish (data-collapsed) va torda varaq rejimi bilan ishlaydi. WDS «yon menyu sahifa fonida» qoidasidan ongli istisno — brend saytda. */
  .fx-shell[data-variant="floating"] .fx-shell__side {
    inset-block-start: var(--fx-space-2);
    block-size: calc(100dvh - var(--fx-space-2) * 2);
    margin: var(--fx-space-2);
    margin-inline-end: 0;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface-container-low);
    box-shadow: var(--fx-elevation-1);
  }
  .fx-shell[data-variant="floating"] .fx-shell__top { border-block-end-color: transparent; }
  .fx-shell[data-variant="inset"] { block-size: 100dvh; min-block-size: 0; overflow: hidden; padding-block: var(--fx-space-2); padding-inline-end: var(--fx-space-2); box-sizing: border-box; background: var(--fx-bg-surface-container); }
  .fx-shell[data-variant="inset"] .fx-shell__side { position: static; block-size: auto; border-inline-end: 0; background: transparent; }
  .fx-shell[data-variant="inset"] .fx-shell__top { position: static; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-block-end-color: var(--fx-border-color-default); border-start-start-radius: var(--fx-radius-surface); border-start-end-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-shell[data-variant="inset"] .fx-shell__main { overflow: auto; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-block-start: 0; border-end-start-radius: var(--fx-radius-surface); border-end-end-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-shell[data-variant="inset"]:has(> .fx-shell__aside:not([hidden])) .fx-shell__main { border-end-end-radius: 0; }
  .fx-shell[data-variant="inset"] .fx-shell__aside { position: static; block-size: auto; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-block-start: 0; border-end-end-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  @media (max-width: 840px) {
    .fx-shell { grid-template-columns: minmax(0, 1fr); grid-template-areas: "top" "main"; }
    .fx-shell[data-variant="rail"] { grid-template-columns: minmax(0, 1fr); grid-template-areas: "top" "main" "rail"; grid-template-rows: var(--fx-size-topbar) minmax(0, 1fr) auto; }
    .fx-shell__rail { position: sticky; inset-block: auto 0; block-size: auto; padding: 0; }
    .fx-shell__side { position: fixed; inset: 0 auto 0 0; block-size: 100dvh; max-block-size: 100dvh; box-shadow: var(--fx-shadow-lg); }
    .fx-shell__side:not(:popover-open) { display: none; }
    .fx-shell__side::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 40%, transparent); }
    .fx-shell:has(> .fx-shell__aside:not([hidden])), .fx-shell[data-variant="rail"]:has(> .fx-shell__aside:not([hidden])) { grid-template-columns: minmax(0, 1fr); grid-template-areas: "top" "main"; }
    .fx-shell__aside { position: fixed; inset: 0 0 0 auto; z-index: 4; inline-size: min(100vw - var(--fx-space-8), var(--fx-popover-width)); block-size: 100dvh; box-shadow: var(--fx-shadow-lg); }
    .fx-shell__top { padding-inline: var(--fx-space-4); }
    .fx-shell__main { padding: var(--fx-space-6) var(--fx-space-4); }
    .fx-shell[data-variant="floating"] .fx-shell__side { inset: var(--fx-space-2) auto var(--fx-space-2) var(--fx-space-2); margin: 0; block-size: auto; max-block-size: none; }
    .fx-shell[data-variant="inset"] { block-size: auto; min-block-size: 100dvh; overflow: visible; padding: 0; background: var(--fx-bg-page); }
    .fx-shell[data-variant="inset"] .fx-shell__side { position: fixed; block-size: 100dvh; background: var(--fx-bg-page); }
    .fx-shell[data-variant="inset"] .fx-shell__top { position: sticky; border-inline: 0; border-block-start: 0; border-radius: 0; }
    .fx-shell[data-variant="inset"] .fx-shell__main { overflow: visible; border: 0; border-radius: 0; }
  }
}

/* shortcuts */
@layer fx.components {
  /* Klaviatura yorliqlari oynasi («?» bosilganda): native <dialog>, qidiruv va guruhlangan yorliqlar roʻyxati (amal — tugmalar).
     Xulq — foxui.js (data-fx-shortcuts): «?» ochadi (yozish maydonida emas), qidiruv filtrlaydi. */
  .fx-shortcuts { inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-dialog-width) * 1.5)); max-block-size: min(80dvh, calc(var(--fx-dialog-width) * 1.3)); margin: auto; padding: 0; border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-lg); overflow: hidden; }
  .fx-shortcuts[open] { display: flex; flex-direction: column; }
  .fx-shortcuts { opacity: 0; scale: var(--fx-motion-scale-enter); transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), scale var(--fx-motion-exit-fast) var(--fx-ease-exit), display var(--fx-motion-exit-fast) allow-discrete, overlay var(--fx-motion-exit-fast) allow-discrete; }
  .fx-shortcuts[open] { opacity: 1; scale: 1; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-shortcuts[open] { opacity: 0; scale: var(--fx-motion-scale-enter); } }
  .fx-shortcuts::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 40%, transparent); }
  .fx-shortcuts__head { flex: none; display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-4) var(--fx-space-5); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-shortcuts__title { margin: 0; margin-inline-end: auto; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-shortcuts__search { box-sizing: border-box; inline-size: 40%; block-size: var(--fx-control-h-sm); padding-inline: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-control); background: var(--fx-bg-field); color: inherit; font: inherit; font-size: var(--fx-font-size-sm); }
  .fx-shortcuts__search:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-shortcuts__body { flex: 1; min-block-size: 0; overflow: auto; display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.85), 1fr)); gap: var(--fx-space-6) var(--fx-space-8); padding: var(--fx-space-5); align-content: start; }
  .fx-shortcuts__group { display: grid; gap: var(--fx-space-1); align-content: start; margin: 0; }
  .fx-shortcuts__group[hidden], .fx-shortcuts__row[hidden], .fx-shortcuts__empty[hidden] { display: none; }
  .fx-shortcuts__group-title { margin: 0 0 var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-shortcuts__row { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-4); min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); font-size: var(--fx-font-size-sm); }
  .fx-shortcuts__row + .fx-shortcuts__row { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-shortcuts__label { margin: 0; color: var(--fx-text-secondary); }
  .fx-shortcuts__keys { margin: 0; flex: none; display: flex; align-items: center; gap: calc(var(--fx-space-1) / 2); }
  .fx-shortcuts__then { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-shortcuts__empty { grid-column: 1 / -1; padding: var(--fx-space-6); color: var(--fx-text-tertiary); text-align: center; }
}

/* signature */
@layer fx.components {
  /* Imzo maydoni (4.86): canvas’da qoʻl (sichqoncha, barmoq, stilus) bilan imzo, «Tozalash» va «Orqaga»; klaviatura muqobili —
     «Yozib kiritish»: ism yoziladi va imzo shriftida chiziladi. Qiymat yashirin inputda SVG (yoki data-format="png" — PNG data URL).
     Holat faqat rangda emas: boʻsh — tagidagi «Shu yerga imzo qoʻying» matni, qoʻyilgan — matn yoʻqoladi va pastda «Imzo qoʻyildi ✓». */
  .fx-signature { display: grid; gap: var(--fx-space-2); inline-size: 100%; max-inline-size: calc(var(--fx-popover-width) * 1.5); }
  .fx-signature__pad {
    position: relative;
    block-size: calc(var(--fx-space-12) * 3);
    border: var(--fx-border-width-default) dashed var(--fx-border-color-strong);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-field);
    color: var(--fx-text-primary);
    touch-action: none;
    cursor: crosshair;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-signature__pad:hover { border-color: var(--fx-text-tertiary); }
  .fx-signature__canvas { position: absolute; inset: 0; inline-size: 100%; block-size: 100%; border-radius: inherit; }
  .fx-signature__canvas:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  /* Imzo chizigʻi va «×» belgisi — qogʻozdagi kabi */
  .fx-signature__line { position: absolute; inset-inline: var(--fx-space-6); inset-block-end: var(--fx-space-8); display: flex; align-items: end; gap: var(--fx-space-2); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-strong); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); pointer-events: none; }
  .fx-signature__hint { position: absolute; inset: 0; display: grid; place-items: center; padding-block-end: var(--fx-space-6); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); pointer-events: none; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-signature[data-state="signed"] .fx-signature__hint { opacity: 0; }
  .fx-signature__bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-signature__status { margin-inline-end: auto; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-signature[data-state="signed"] .fx-signature__status { color: var(--fx-fg-success); }
  .fx-signature__typed { font-style: italic; font-size: var(--fx-font-size-lg); }
  .fx-signature__typed[hidden] { display: none; }
  .fx-signature[data-mode="type"] .fx-signature__pad { cursor: default; }
  /* Xato: majburiy imzo qoʻyilmagan — qizil chegara + matn */
  .fx-signature[data-invalid] .fx-signature__pad { border-style: solid; border-color: var(--fx-border-color-error); }
  .fx-signature[data-invalid] .fx-signature__status { color: var(--fx-text-error); }
  .fx-signature[aria-disabled="true"] { opacity: 0.6; pointer-events: none; }
  @media (forced-colors: active) { .fx-signature__pad { border-color: ButtonText; } }
}

/* site-drawer */
@layer fx.components {
  /* Telefon menyusi (#86): burger bosilsa chapdan chiqadigan modal varaq (<dialog>), ichida ochiladigan guruhlar (details).
     Esc va fonga bosish — yopadi; havola bosilsa ham yopiladi (foxui.js, data-fx-sitedrawer). */
  .fx-site-drawer {
    inline-size: min(100vw - var(--fx-space-8), var(--fx-popover-width));
    max-inline-size: none; block-size: 100dvh; max-block-size: 100dvh;
    margin: 0 auto 0 0; padding: 0; overflow: auto;
    border: 0; border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    background: var(--fx-bg-page); color: var(--fx-text-primary); box-shadow: var(--fx-shadow-lg);
  }
  .fx-site-drawer:not([open]) { display: none; }
  .fx-site-drawer[open] { display: flex; flex-direction: column; }
  .fx-site-drawer::backdrop { background: color-mix(in oklab, var(--fx-bg-overlay) 40%, transparent); }
  .fx-site-drawer { translate: calc(var(--fx-motion-shift-lg) * -1) 0; opacity: 0; transition: translate var(--fx-motion-exit-base) var(--fx-ease-exit), opacity var(--fx-motion-exit-base) var(--fx-ease-exit), display var(--fx-motion-exit-base) allow-discrete, overlay var(--fx-motion-exit-base) allow-discrete; }
  .fx-site-drawer[open] { translate: 0 0; opacity: 1; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-site-drawer[open] { translate: calc(var(--fx-motion-shift-lg) * -1) 0; opacity: 0; } }
  .fx-site-drawer__head { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); flex: none; min-block-size: var(--fx-size-topbar); padding-inline: var(--fx-space-4); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); font-weight: var(--fx-font-weight-semibold); }
  .fx-site-drawer__body { display: grid; align-content: start; gap: var(--fx-space-1); flex: 1 1 auto; padding: var(--fx-space-3); }
  .fx-site-drawer__link, .fx-site-drawer__group > summary {
    display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-2);
    min-block-size: var(--fx-size-control-lg); padding-inline: var(--fx-space-3);
    border-radius: var(--fx-radius-nav); color: var(--fx-text-primary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-medium); text-decoration: none; list-style: none; cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-site-drawer__group > summary::-webkit-details-marker { display: none; }
  .fx-site-drawer__link:hover, .fx-site-drawer__group > summary:hover { background: var(--fx-bg-muted); }
  .fx-site-drawer__link[aria-current="page"] { background: var(--fx-bg-subtle); }
  .fx-site-drawer :is(.fx-site-drawer__link, .fx-site-drawer__group > summary):focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-site-drawer__group > summary::after { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: var(--fx-text-tertiary); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m4 6 4 4 4-4' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-site-drawer__group[open] > summary::after { rotate: 180deg; }
  .fx-site-drawer__sub { display: grid; gap: var(--fx-space-1); padding-inline-start: var(--fx-space-4); }
  .fx-site-drawer__sub .fx-site-drawer__link { min-block-size: var(--fx-size-control-md); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-site-drawer__foot { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); flex: none; padding: var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-site-drawer__foot > .fx-btn { flex: 1 1 auto; }
}

/* site-footer */
@layer fx.components {
  /* Sayt pastki qismi (#97): chapda tavsif, oʻngda havola ustunlari, ostida huquqiy qator + til va mavzu oʻrinlari */
  .fx-site-footer { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-page); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-site-footer__top { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 2fr); gap: var(--fx-space-10); padding: var(--fx-space-10) var(--fx-space-6); }
  .fx-site-footer__about { display: grid; align-content: start; gap: var(--fx-space-3); }
  .fx-site-footer__brand { display: inline-flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); text-decoration: none; }
  .fx-site-footer__brand > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-site-footer__text { margin: 0; max-inline-size: 40ch; }
  .fx-site-footer__social { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); }
  .fx-site-footer__cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.45), 1fr)); gap: var(--fx-space-8) var(--fx-space-6); }
  .fx-site-footer__title { margin: 0 0 var(--fx-space-3); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-site-footer__links { display: grid; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-site-footer__links a { color: inherit; text-decoration: none; border-radius: var(--fx-radius-badge); transition: color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-site-footer__links a:hover { color: var(--fx-text-primary); text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); }
  .fx-site-footer a:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-site-footer__bottom { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--fx-space-3) var(--fx-space-6); padding: var(--fx-space-4) var(--fx-space-6); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-site-footer__legal { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1) var(--fx-space-4); margin: 0; }
  .fx-site-footer__legal a { color: inherit; }
  .fx-site-footer__slots { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-3); }
  @media (max-width: 840px) {
    .fx-site-footer__top { grid-template-columns: minmax(0, 1fr); gap: var(--fx-space-8); padding-inline: var(--fx-space-4); }
    .fx-site-footer__bottom { padding-inline: var(--fx-space-4); }
  }
}

/* site-header */
@layer fx.components {
  /* Sayt sarlavhasi (#85): yopishqoq panel — belgi, asosiy menyu, mega menyu paneli, amallar, telefonda burger.
     Mega panel — .fx-site-header__item ichida, hidden bilan yopiq; ochish/yopish va klaviatura foxui.js’da (data-fx-siteheader). */
  .fx-site-header { position: sticky; inset-block-start: 0; z-index: 5; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); background: var(--fx-bg-page); color: var(--fx-text-primary); }
  .fx-site-header__bar { display: flex; align-items: center; gap: var(--fx-space-6); min-block-size: var(--fx-size-topbar); padding-inline: var(--fx-space-6); }
  .fx-site-header__brand { display: inline-flex; align-items: center; gap: var(--fx-space-2); flex: none; color: inherit; font-weight: var(--fx-font-weight-semibold); text-decoration: none; border-radius: var(--fx-radius-badge); }
  .fx-site-header__brand > svg, .fx-site-header__brand > img { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); }
  .fx-site-header__nav { flex: 1 1 auto; min-inline-size: 0; }
  .fx-site-header__list { display: flex; align-items: center; gap: var(--fx-space-1); margin: 0; padding: 0; list-style: none; }
  .fx-site-header__link, .fx-site-header__trigger {
    display: inline-flex; align-items: center; gap: var(--fx-space-1);
    min-block-size: var(--fx-control-h-md); padding-inline: var(--fx-space-3);
    border: 0; border-radius: var(--fx-radius-nav); background: transparent;
    color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); text-decoration: none; white-space: nowrap; cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-site-header__link:hover, .fx-site-header__trigger:hover, .fx-site-header__trigger[aria-expanded="true"] { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-site-header__link[aria-current="page"] { color: var(--fx-text-primary); background: var(--fx-bg-subtle); }
  .fx-site-header :is(.fx-site-header__link, .fx-site-header__trigger, .fx-site-header__brand, .fx-site-header__mega-link):focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-site-header__trigger > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-site-header__trigger[aria-expanded="true"] > svg { rotate: 180deg; }
  .fx-site-header__actions { display: flex; align-items: center; gap: var(--fx-space-2); flex: none; margin-inline-start: auto; }
  .fx-site-header__burger { display: none; margin-inline-start: auto; }
  /* Mega panel: sarlavha ostida butun eni, ustunlar + ixtiyoriy tavsiya bloki */
  .fx-site-header__mega {
    position: absolute; inset: 100% 0 auto 0;
    display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--fx-space-8);
    padding: var(--fx-space-6);
    border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
    background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg);
    transition: opacity var(--fx-motion-base) var(--fx-ease-enter), translate var(--fx-motion-base) var(--fx-ease-enter);
  }
  .fx-site-header__mega[hidden] { display: none; }
  .fx-site-header__mega:not([hidden]) { opacity: 1; translate: 0 0; }
  @starting-style { .fx-site-header__mega:not([hidden]) { opacity: 0; translate: 0 calc(var(--fx-motion-shift-sm) * -1); } }
  .fx-site-header__cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.7), 1fr)); gap: var(--fx-space-6); }
  .fx-site-header__col { display: grid; align-content: start; gap: var(--fx-space-1); }
  .fx-site-header__col-title { margin: 0 0 var(--fx-space-2); padding-inline: var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-site-header__mega-link { display: grid; gap: calc(var(--fx-space-1) / 2); padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-nav); color: inherit; text-decoration: none; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-site-header__mega-link:hover { background: var(--fx-bg-muted); }
  .fx-site-header__mega-link > strong { font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-site-header__mega-link > span { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-site-header__feature { display: grid; align-content: start; gap: var(--fx-space-2); inline-size: var(--fx-popover-width); padding: var(--fx-space-5); border-radius: var(--fx-radius-surface); background: var(--fx-bg-subtle); font-size: var(--fx-font-size-sm); }
  /* ---- 4-toʻlqin (4.156): scroll xulqi — data-scroll="hide|shrink|float"; foxui.js data-scrolled va data-hidden qoʻyadi ---- */
  .fx-site-header[data-scroll] { transition: padding var(--fx-motion-slower) var(--fx-ease-emphasized), translate var(--fx-motion-slow) var(--fx-ease-emphasized), background-color var(--fx-motion-base) var(--fx-ease-standard), border-color var(--fx-motion-base) var(--fx-ease-standard), box-shadow var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-site-header[data-scroll] .fx-site-header__bar { transition: min-block-size var(--fx-motion-slow) var(--fx-ease-emphasized), max-inline-size var(--fx-motion-slower) var(--fx-ease-emphasized), margin var(--fx-motion-slower) var(--fx-ease-emphasized), padding var(--fx-motion-slower) var(--fx-ease-emphasized), border-radius var(--fx-motion-slower) var(--fx-ease-emphasized), background-color var(--fx-motion-base) var(--fx-ease-standard), box-shadow var(--fx-motion-base) var(--fx-ease-standard); }
  /* hide: pastga scroll’da yuqoriga yashirinadi, tepaga qaytganda chiqadi (fokus yoki ochiq mega panel boʻlsa yashirinmaydi) */
  .fx-site-header[data-scroll="hide"][data-hidden] { translate: 0 -100%; }
  /* shrink: past balandlik, shishasimon fon va soya */
  .fx-site-header[data-scroll="shrink"][data-scrolled] { border-color: transparent; background: color-mix(in oklab, var(--fx-bg-page) 78%, transparent); box-shadow: var(--fx-shadow-sm); backdrop-filter: saturate(1.4) blur(calc(var(--fx-space-3) * var(--fx-knob-blur))); }
  .fx-site-header[data-scroll="shrink"][data-scrolled] .fx-site-header__bar { min-block-size: calc(var(--fx-size-topbar) * 0.8); }
  /* float: yuqorida oddiy panel; scroll’da markazdagi suzuvchi tabletkaga aylanadi */
  .fx-site-header[data-scroll="float"] .fx-site-header__bar { max-inline-size: 100%; margin-inline: auto; }
  .fx-site-header[data-scroll="float"] { padding-inline: 0; }
  .fx-site-header[data-scroll="float"][data-scrolled] { padding: var(--fx-space-3) var(--fx-space-4) 0; border-color: transparent; background: transparent; pointer-events: none; }
  .fx-site-header[data-scroll="float"][data-scrolled] .fx-site-header__bar {
    position: relative;
    pointer-events: auto;
    max-inline-size: calc(var(--fx-dialog-width) * 2);
    min-block-size: calc(var(--fx-size-topbar) * 0.8);
    padding-inline: var(--fx-space-4) var(--fx-space-2);
    border-radius: calc(var(--fx-radius-overlay) * 3);
    background: color-mix(in oklab, var(--fx-bg-surface) 82%, transparent);
    box-shadow: var(--fx-shadow-lg);
    outline: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    backdrop-filter: saturate(1.4) blur(calc(var(--fx-space-3) * var(--fx-knob-blur)));
  }
  .fx-site-header[data-scroll="float"][data-scrolled] .fx-site-header__mega { inset-block-start: calc(100% + var(--fx-space-2)); inset-inline: 0; border-radius: var(--fx-radius-overlay); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); }
  @media (max-width: 840px) {
    .fx-site-header__bar { padding-inline: var(--fx-space-4); gap: var(--fx-space-3); }
    .fx-site-header__nav, .fx-site-header__actions { display: none; }
    .fx-site-header__burger { display: inline-flex; }
  }
}

/* skeleton */
@layer fx.components {
  /* Skelet: maʼlumot joyini oldindan koʻrsatadi; harakat — faqat shaffoflik pulsatsiyasi (WDS «Harakat»), siljish yoʻq */
  .fx-skeleton { display: block; block-size: var(--fx-font-size-sm); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-skeleton[data-shape="title"] { block-size: var(--fx-font-size-xl); inline-size: 60%; }
  .fx-skeleton[data-shape="circle"] { inline-size: var(--fx-size-avatar-md); block-size: var(--fx-size-avatar-md); border-radius: var(--fx-radius-circle); }
  .fx-skeleton[data-shape="block"] { block-size: calc(var(--fx-space-12) * 2); border-radius: var(--fx-radius-surface); }
  @media (prefers-reduced-motion: reduce) { .fx-skeleton { animation: none; } }
  /* Yaltirash varianti: yorugʻlik chizigʻi oʻtadi (shadcn, Vercel); harakat kamaytirilsa — tekis */
  .fx-skeleton[data-anim="shimmer"] { animation: fx-skeleton-shimmer var(--fx-duration-shimmer) linear infinite; background: linear-gradient(90deg, var(--fx-bg-muted) 30%, color-mix(in oklab, var(--fx-bg-muted) 40%, var(--fx-bg-surface)) 50%, var(--fx-bg-muted) 70%) 0 0 / 300% 100%; }
  @keyframes fx-skeleton-shimmer { from { background-position: 100% 0; } to { background-position: 0 0; } }
  @media (prefers-reduced-motion: reduce) { .fx-skeleton[data-anim="shimmer"] { animation: none; } }
  /* ---- Kengaytma (2.123): shakllar va kompozit namunalar (paragraf, avatar+qatorlar, jadval qatori, karta) ---- */
  .fx-skeleton[data-shape="square"] { inline-size: var(--fx-size-avatar-md); block-size: var(--fx-size-avatar-md); border-radius: calc(var(--fx-size-avatar-md) * var(--fx-radius-avatar-ratio)); }
  .fx-skeleton[data-shape="image"] { aspect-ratio: 16 / 9; block-size: auto; border-radius: var(--fx-radius-surface); }
  .fx-skeleton[data-shape="button"] { inline-size: calc(var(--fx-space-12) * 2); block-size: var(--fx-control-h-md); border-radius: var(--fx-radius-control); }
  /* Paragraf: n qator, oxirgisi qisqa */
  .fx-skeleton-group { display: grid; gap: var(--fx-space-2); min-inline-size: 0; }
  .fx-skeleton-group > .fx-skeleton:last-child:not(:only-child) { inline-size: 65%; }
  /* Avatar + qatorlar */
  .fx-skeleton-row { display: flex; align-items: center; gap: var(--fx-space-3); }
  .fx-skeleton-row > .fx-skeleton-group { flex: 1; }
  /* Jadval qatori: data-cols ustun soni */
  .fx-skeleton-row[data-type="table"] { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--fx-space-4); padding-block: var(--fx-space-3); border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-skeleton-row[data-type="table"][data-cols="3"] { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .fx-skeleton-row[data-type="table"][data-cols="5"] { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  .fx-skeleton-row[data-type="table"][data-cols="6"] { grid-template-columns: repeat(6, minmax(0, 1fr)); }
  /* Karta: rasm + sarlavha + paragraf */
  .fx-skeleton-card { display: grid; gap: var(--fx-space-3); padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  @media (forced-colors: active) { .fx-skeleton { background: GrayText; forced-color-adjust: none; } }
}

/* slider */
@layer fx.components {
  /* Slider: native range, oʻz koʻrinishi (WDS: brauzer koʻrinishi va accent-color ishlatilmaydi). Toʻlgan qism —
     --fx-slider-value (foxui.js qiymatga qarab yangilaydi; JS’siz — trek bir xil rangda). */
  .fx-slider {
    --fx-slider-value: 50%;
    --_t: var(--fx-space-1);
    --_k: var(--fx-size-checkbox);
    appearance: none;
    inline-size: 100%;
    block-size: var(--fx-size-min-target);
    margin: 0;
    background: transparent;
    cursor: pointer;
  }
  .fx-slider::-webkit-slider-runnable-track { block-size: var(--_t); border-radius: var(--_t); background: linear-gradient(to right, var(--fx-bg-brand-solid) var(--fx-slider-value), var(--fx-bg-muted) var(--fx-slider-value)); }
  .fx-slider::-moz-range-track { block-size: var(--_t); border-radius: var(--_t); background: var(--fx-bg-muted); }
  .fx-slider::-moz-range-progress { block-size: var(--_t); border-radius: var(--_t); background: var(--fx-bg-brand-solid); }
  .fx-slider::-webkit-slider-thumb { appearance: none; inline-size: var(--_k); block-size: var(--_k); margin-block-start: calc((var(--_t) - var(--_k)) / 2); border: var(--fx-border-width-focus) solid var(--fx-bg-brand-solid); border-radius: var(--fx-radius-circle); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-sm); }
  .fx-slider::-moz-range-thumb { inline-size: var(--_k); block-size: var(--_k); box-sizing: border-box; border: var(--fx-border-width-focus) solid var(--fx-bg-brand-solid); border-radius: var(--fx-radius-circle); background: var(--fx-bg-surface); }
  .fx-slider:focus-visible { outline: none; }
  .fx-slider:focus-visible::-webkit-slider-thumb { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-slider:focus-visible::-moz-range-thumb { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-slider:disabled { cursor: not-allowed; opacity: 0.5; }

  /* ---- Diapazon (ikki tutqich), belgilar (marks), qiymat pufagi ---- Ildiz .fx-slider-range, ichida 1–2 ta input.fx-slider;
     toʻlgan qism --fx-range-lo / --fx-range-hi (0…1, foxui.js). Inputlar ustma-ust, faqat tutqichlar sichqonchani oladi. */
  .fx-slider-range { --_k: var(--fx-size-checkbox); --_t: var(--fx-space-1); position: relative; block-size: var(--fx-size-min-target); inline-size: 100%; --fx-range-lo: 0; --fx-range-hi: 0.5; }
  .fx-slider-range:has(.fx-slider-range__marks) { margin-block-end: var(--fx-space-8); }
  .fx-slider-range:has(.fx-slider-range__bubble) { margin-block-start: var(--fx-space-8); }
  .fx-slider-range__rail { position: absolute; inset-inline: 0; inset-block-start: 50%; block-size: var(--_t); translate: 0 -50%; border-radius: var(--_t); background: var(--fx-bg-muted); pointer-events: none; }
  .fx-slider-range__fill { position: absolute; inset-block: 0; inset-inline-start: calc(var(--fx-range-lo) * (100% - var(--_k)) + var(--_k) / 2); inset-inline-end: calc((1 - var(--fx-range-hi)) * (100% - var(--_k)) + var(--_k) / 2); border-radius: var(--_t); background: var(--fx-bg-brand-solid); }
  .fx-slider-range .fx-slider { position: absolute; inset: 0; pointer-events: none; z-index: 1; }
  .fx-slider-range .fx-slider[data-top] { z-index: 2; }
  .fx-slider-range .fx-slider::-webkit-slider-runnable-track { background: transparent; }
  .fx-slider-range .fx-slider::-moz-range-track, .fx-slider-range .fx-slider::-moz-range-progress { background: transparent; }
  .fx-slider-range .fx-slider::-webkit-slider-thumb { pointer-events: auto; cursor: grab; }
  .fx-slider-range .fx-slider::-moz-range-thumb { pointer-events: auto; cursor: grab; }
  .fx-slider-range .fx-slider:active::-webkit-slider-thumb { cursor: grabbing; scale: var(--fx-motion-scale-press); }
  /* Belgilar: har bandda ingichka chiziq + yorliq (boʻsh band — faqat chiziq) */
  .fx-slider-range__marks { position: absolute; inset-inline: 0; inset-block-start: calc(50% + var(--_k) / 2 + var(--fx-space-1)); margin: 0; padding: 0; list-style: none; pointer-events: none; }
  .fx-slider-range__marks > li { position: absolute; inset-inline-start: calc(var(--p, 0) * (100% - var(--_k)) + var(--_k) / 2); translate: -50% 0; display: grid; justify-items: center; gap: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-slider-range__marks > li::before { content: ""; inline-size: var(--fx-border-width-default); block-size: var(--fx-space-2); background: var(--fx-border-color-strong); }
  .fx-slider-range__marks > li[data-in]::before { background: var(--fx-bg-brand-solid); }
  /* Qiymat pufagi: tutqich ustida (WDS Grafiklar: tooltip kabi — raqam tabular) */
  .fx-slider-range__bubble { position: absolute; inset-block-end: calc(50% + var(--_k) / 2 + var(--fx-space-1)); inset-inline-start: calc(var(--p, 0) * (100% - var(--_k)) + var(--_k) / 2); translate: -50% 0; padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-text-primary); color: var(--fx-bg-page); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; white-space: nowrap; pointer-events: none; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-slider-range[data-bubble="focus"] .fx-slider-range__bubble { opacity: 0; }
  .fx-slider-range[data-bubble="focus"]:is(:hover, :focus-within) .fx-slider-range__bubble { opacity: 1; }
  .fx-slider-range[data-bubble="always"] .fx-slider-range__bubble { opacity: 1; }
  .fx-slider-range[data-disabled] { opacity: 0.5; }

  /* ---- Vertikal (4.93): ovoz, ekvalayzer, xarita zoom — native range writing-mode bilan tik; ↑ oshiradi. Toʻlgan qism pastdan. ---- */
  .fx-slider[data-orientation="vertical"] { writing-mode: vertical-lr; direction: rtl; inline-size: calc(var(--fx-space-12) * 3); block-size: var(--fx-size-min-target); } /* tik yozuvda inline — balandlik */
  .fx-slider[data-orientation="vertical"]::-webkit-slider-runnable-track { background: linear-gradient(to top, var(--fx-bg-brand-solid) var(--fx-slider-value), var(--fx-bg-muted) var(--fx-slider-value)); }
  .fx-slider-stack { display: inline-flex; align-items: end; gap: var(--fx-space-4); }
  .fx-slider-stack__item { display: grid; justify-items: center; gap: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-slider-stack__item > output { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  /* ---- Gistogramma (4.95): narx filtri ostida taqsimot ustunchalari; tanlangan oraliqdagisi brend tusida (bezak — aria-hidden,
     qiymat tutqichlarning aria-valuetext’ida). Ustunchalar foxui.js → slider chizadi: data-histogram="3,8,12,…". ---- */
  .fx-slider-range[data-histogram] { margin-block-start: calc(var(--fx-space-12) + var(--fx-space-2)); }
  .fx-slider-range__histogram { position: absolute; inset-inline: calc(var(--_k) / 2); inset-block-end: calc(50% + var(--_t)); block-size: var(--fx-space-12); display: flex; align-items: flex-end; gap: calc(var(--fx-space-1) / 2); pointer-events: none; }
  .fx-slider-range__histogram > i { flex: 1; block-size: calc(var(--h, 0) * 100%); min-block-size: calc(var(--fx-space-1) / 2); border-start-start-radius: var(--fx-radius-badge); border-start-end-radius: var(--fx-radius-badge); background: var(--fx-viz-track); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-slider-range__histogram > i[data-in] { background: var(--fx-viz-brand); }
  /* ---- Markazdan (4.94): manfiy ↔ musbat sozlama (yorqinlik ±, balans, chegirma/ustama) — toʻldirish noldan qiymatgacha.
     --fx-slider-lo / --fx-slider-hi (foiz) xulq yozadi; nol joyida ingichka belgi. Qiymat soʻzda ishora bilan: «+20», «−15». ---- */
  .fx-slider[data-origin="center"] { --fx-slider-lo: 50%; --fx-slider-hi: 50%; --fx-slider-zero: 50%; }
  .fx-slider[data-origin="center"]::-webkit-slider-runnable-track { background:
    linear-gradient(to right, transparent calc(var(--fx-slider-zero) - var(--fx-border-width-default)), var(--fx-border-color-strong) 0 calc(var(--fx-slider-zero) + var(--fx-border-width-default)), transparent 0),
    linear-gradient(to right, var(--fx-bg-muted) var(--fx-slider-lo), var(--fx-bg-brand-solid) var(--fx-slider-lo) var(--fx-slider-hi), var(--fx-bg-muted) var(--fx-slider-hi)); }
  .fx-slider[data-origin="center"]::-moz-range-track { background: linear-gradient(to right, var(--fx-bg-muted) var(--fx-slider-lo), var(--fx-bg-brand-solid) var(--fx-slider-lo) var(--fx-slider-hi), var(--fx-bg-muted) var(--fx-slider-hi)); }
  .fx-slider[data-origin="center"]::-moz-range-progress { background: transparent; }
  .fx-slider-center { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--fx-space-3); }
  .fx-slider-center > output { min-inline-size: 4ch; color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; text-align: end; }
  .fx-slider-center__scale { grid-column: 1; display: flex; justify-content: space-between; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
}

/* sortable */
@layer fx.components {
  /* Tartiblanadigan roʻyxat: ushlagich (⠿) tugmasi — sichqoncha bilan sudrash yoki klaviatura: Space oladi, ↑ ↓ siljitadi, Space qoʻyadi, Esc bekor qiladi. Holat aria-live bilan eʼlon qilinadi. */
  .fx-sortable { position: relative; display: grid; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-sortable__item { display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); transition: box-shadow var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-sortable__label { flex: 1; min-inline-size: 0; }
  .fx-sortable__handle { display: inline-grid; place-items: center; flex: none; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: none; color: var(--fx-text-tertiary); font: inherit; font-size: var(--fx-font-size-lg); line-height: 1; cursor: grab; touch-action: none; }
  .fx-sortable__handle:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-sortable__handle:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-sortable__handle[aria-pressed="true"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); cursor: grabbing; }
  /* ushlangan: koʻtarilgan soya + brend chegara (rangdan tashqari — soya shakli) */
  .fx-sortable__item[data-grabbed] { border-color: var(--fx-border-color-focus); box-shadow: var(--fx-shadow-md); }
  .fx-sortable__live { position: absolute; inline-size: 0; block-size: 0; overflow: hidden; clip-path: inset(50%); }
}

/* sources */
@layer fx.components {
  /* Manbalar va iqtibos: matn ichida [1] pill (hover/fokusda manba kartasi) va oxirida yigʻiladigan manbalar roʻyxati.
     Karta — pill bilan aria-describedby bogʻlangan oddiy matn, shuning uchun klaviatura va ekran oʻqigichga ochiq. */
  .fx-cite { position: relative; display: inline-block; vertical-align: baseline; }
  .fx-cite__pill { display: inline-flex; align-items: center; justify-content: center; min-inline-size: 1.5em; padding-inline: var(--fx-space-1); border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; line-height: 1.5; text-decoration: none; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-cite__pill:hover, .fx-cite:focus-within .fx-cite__pill { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-cite__pill:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-cite__card { position: absolute; inset-block-start: 100%; inset-inline-start: 0; z-index: 2; display: grid; gap: var(--fx-space-1); inline-size: max-content; max-inline-size: calc(var(--fx-space-12) * 6); margin-block-start: var(--fx-space-2); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); line-height: 1.4; opacity: 0; visibility: hidden; translate: 0 calc(var(--fx-motion-shift-sm) * -1); transition: opacity var(--fx-motion-exit-fast) var(--fx-ease-exit), translate var(--fx-motion-exit-fast) var(--fx-ease-exit), visibility var(--fx-motion-exit-fast) allow-discrete; }
  .fx-cite__card::before { content: ""; position: absolute; inset-inline: 0; inset-block-end: 100%; block-size: var(--fx-space-2); }
  .fx-cite:is(:hover, :focus-within) .fx-cite__card { opacity: 1; visibility: visible; translate: 0 0; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  .fx-cite__site { display: flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-cite__fav, .fx-sources__fav { flex: none; display: inline-grid; place-items: center; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); line-height: 1; }
  .fx-cite__title { font-weight: var(--fx-font-weight-medium); }
  .fx-cite__snippet { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }

  .fx-sources { font-size: var(--fx-font-size-sm); }
  .fx-sources > summary { display: inline-flex; align-items: center; gap: var(--fx-space-2); padding: var(--fx-space-1) var(--fx-space-3) var(--fx-space-1) var(--fx-space-2); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-circle); list-style: none; color: var(--fx-text-secondary); cursor: pointer; user-select: none; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-sources > summary::-webkit-details-marker { display: none; }
  .fx-sources > summary:hover { background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  .fx-sources > summary:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-sources__stack { display: inline-flex; }
  .fx-sources__stack > .fx-sources__fav + .fx-sources__fav { margin-inline-start: calc(var(--fx-space-1) * -1); }
  .fx-sources__stack > .fx-sources__fav { border: var(--fx-border-width-focus) solid var(--fx-bg-surface); box-sizing: content-box; }
  .fx-sources__chev { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-sources[open] .fx-sources__chev { rotate: 90deg; }
  .fx-sources__list { display: grid; gap: var(--fx-space-1); margin: var(--fx-space-2) 0 0; padding: 0; list-style: none; }
  .fx-sources__item { display: grid; grid-template-columns: var(--fx-size-icon-md) minmax(0, 1fr) auto; align-items: baseline; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-control); }
  .fx-sources__item:target { background: var(--fx-bg-brand-subtle); }
  .fx-sources__num { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-sources__item > a { overflow: hidden; color: var(--fx-text-primary); text-overflow: ellipsis; white-space: nowrap; }
  .fx-sources__domain { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  @media (prefers-reduced-motion: reduce) { .fx-cite__card { translate: 0 0; } }
}

/* spinner */
@layer fx.components {
  /* Neytral aylana (brend belgisi emas) — matn rangida; reduced-motion’da faqat pulsatsiya */
  .fx-spinner {
    --_s: var(--fx-size-icon-md);
    display: inline-block;
    flex: none;
    inline-size: var(--_s);
    block-size: var(--_s);
    box-sizing: border-box;
    border: var(--fx-border-width-focus) solid color-mix(in oklab, currentColor 20%, transparent);
    border-block-start-color: currentColor;
    border-radius: var(--fx-radius-circle);
    color: var(--fx-text-secondary);
    animation: fx-spin var(--fx-duration-spin) linear infinite;
  }
  .fx-spinner[data-size="sm"] { --_s: var(--fx-size-icon-sm); }
  .fx-spinner[data-size="lg"] { --_s: var(--fx-size-avatar-md); }
  @media (prefers-reduced-motion: reduce) { .fx-spinner { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
  /* ---- Kengaytma (2.122): nuqtali variant, matn bilan inline ---- */
  .fx-spinner[data-variant="dots"] { --_d: calc(var(--_s) / 3); --_on: radial-gradient(circle closest-side, currentColor 92%, transparent); --_off: radial-gradient(circle closest-side, color-mix(in oklab, currentColor 25%, transparent) 92%, transparent); inline-size: calc(var(--_d) * 3); block-size: var(--_d); border: 0; border-radius: 0; background: var(--_on) 0 50% / 33.34% 100% no-repeat, var(--_off) 50% 50% / 33.34% 100% no-repeat, var(--_off) 100% 50% / 33.34% 100% no-repeat; animation: fx-spinner-dots var(--fx-duration-pulse) steps(1, end) infinite; }
  @keyframes fx-spinner-dots {
    33% { background: var(--_off) 0 50% / 33.34% 100% no-repeat, var(--_on) 50% 50% / 33.34% 100% no-repeat, var(--_off) 100% 50% / 33.34% 100% no-repeat; }
    66% { background: var(--_off) 0 50% / 33.34% 100% no-repeat, var(--_off) 50% 50% / 33.34% 100% no-repeat, var(--_on) 100% 50% / 33.34% 100% no-repeat; }
  }
  @media (prefers-reduced-motion: reduce) { .fx-spinner[data-variant="dots"] { animation: none; } }
  .fx-spinner-text { display: inline-flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  @media (forced-colors: active) { .fx-spinner { border-color: GrayText; border-block-start-color: ButtonText; } .fx-spinner[data-variant="dots"] { --_on: radial-gradient(circle closest-side, ButtonText 92%, transparent); --_off: radial-gradient(circle closest-side, GrayText 92%, transparent); } }
}

@layer fx.components {
  /* Shakl morfli yuklanish belgisi (4.43, M3 Expressive «Loading indicator»): bitta shakl navbat bilan boshqasiga oqib oʻtadi
     (yumshoq portlash → 9 tishli pechenye → beshburchak → kapsula → quyosh → toʻrt bargli) va aylanadi. Hamma shakl bir xil
     40 nuqtali poligon — shuning uchun clip-path silliq interpolyatsiya qiladi. Har bosqich prujina egri chizigʻida (biroz «sakraydi»).
     data-contained — yumshoq doira fon ichida (M3 contained). Harakat kamaytirilsa yoki none — shakl joyida turadi (aylanmaydi). */
  .fx-spinner[data-variant="morph"] {
    --_s: var(--fx-size-icon-lg);
    border: 0;
    border-radius: 0;
    background: currentColor;
    color: var(--fx-text-brand);
    clip-path: polygon(50.0% 0.0%, 57.2% 4.7%, 62.9% 10.3%, 70.8% 9.1%, 79.4% 9.5%, 82.4% 17.6%, 83.8% 25.5%, 90.9% 29.2%, 97.6% 34.5%, 95.3% 42.8%, 91.7% 50.0%, 95.3% 57.2%, 97.6% 65.5%, 90.9% 70.8%, 83.8% 74.5%, 82.4% 82.4%, 79.4% 90.5%, 70.8% 90.9%, 62.9% 89.7%, 57.2% 95.3%, 50.0% 100.0%, 42.8% 95.3%, 37.1% 89.7%, 29.2% 90.9%, 20.6% 90.5%, 17.6% 82.4%, 16.2% 74.5%, 9.1% 70.8%, 2.4% 65.5%, 4.7% 57.2%, 8.3% 50.0%, 4.7% 42.8%, 2.4% 34.5%, 9.1% 29.2%, 16.2% 25.5%, 17.6% 17.6%, 20.6% 9.5%, 29.2% 9.1%, 37.1% 10.3%, 42.8% 4.7%);
    animation: fx-spinner-morph calc(var(--fx-duration-spin) * 6) var(--fx-ease-spring) infinite;
  }
  .fx-spinner[data-variant="morph"][data-size="sm"] { --_s: var(--fx-size-icon-md); }
  .fx-spinner[data-variant="morph"][data-size="lg"] { --_s: var(--fx-size-avatar-lg); }
  .fx-spinner-shell { display: inline-grid; place-items: center; inline-size: calc(var(--_s, var(--fx-size-icon-lg)) * 1.6); block-size: calc(var(--_s, var(--fx-size-icon-lg)) * 1.6); border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-subtle); }
  .fx-spinner-shell:has(> .fx-spinner[data-size="lg"]) { --_s: var(--fx-size-avatar-lg); }
  .fx-spinner-shell:has(> .fx-spinner[data-size="sm"]) { --_s: var(--fx-size-icon-md); }
  .fx-spinner-shell > .fx-spinner[data-variant="morph"] { inline-size: var(--_s); block-size: var(--_s); }
  @keyframes fx-spinner-morph {
    0% { clip-path: polygon(50.0% 0.0%, 57.2% 4.7%, 62.9% 10.3%, 70.8% 9.1%, 79.4% 9.5%, 82.4% 17.6%, 83.8% 25.5%, 90.9% 29.2%, 97.6% 34.5%, 95.3% 42.8%, 91.7% 50.0%, 95.3% 57.2%, 97.6% 65.5%, 90.9% 70.8%, 83.8% 74.5%, 82.4% 82.4%, 79.4% 90.5%, 70.8% 90.9%, 62.9% 89.7%, 57.2% 95.3%, 50.0% 100.0%, 42.8% 95.3%, 37.1% 89.7%, 29.2% 90.9%, 20.6% 90.5%, 17.6% 82.4%, 16.2% 74.5%, 9.1% 70.8%, 2.4% 65.5%, 4.7% 57.2%, 8.3% 50.0%, 4.7% 42.8%, 2.4% 34.5%, 9.1% 29.2%, 16.2% 25.5%, 17.6% 17.6%, 20.6% 9.5%, 29.2% 9.1%, 37.1% 10.3%, 42.8% 4.7%); rotate: 0deg; }
    16.67% { clip-path: polygon(50.0% 0.0%, 57.1% 5.1%, 62.2% 12.4%, 69.2% 12.4%, 78.8% 10.4%, 84.2% 15.8%, 83.6% 25.6%, 85.5% 31.9%, 94.0% 35.7%, 99.3% 42.2%, 94.6% 50.0%, 88.9% 56.2%, 90.9% 63.3%, 94.0% 72.4%, 88.7% 78.1%, 78.9% 78.9%, 73.7% 82.6%, 71.4% 91.9%, 65.4% 97.3%, 56.9% 93.3%, 50.0% 89.3%, 43.1% 93.3%, 34.6% 97.3%, 28.6% 91.9%, 26.3% 82.6%, 21.1% 78.9%, 11.3% 78.1%, 6.0% 72.4%, 9.1% 63.3%, 11.1% 56.2%, 5.4% 50.0%, 0.7% 42.2%, 6.0% 35.7%, 14.5% 31.9%, 16.4% 25.6%, 15.8% 15.8%, 21.2% 10.4%, 30.8% 12.4%, 37.8% 12.4%, 42.9% 5.1%); rotate: 180deg; }
    33.33% { clip-path: polygon(50.0% 0.0%, 57.5% 2.4%, 63.6% 8.3%, 67.9% 14.8%, 72.2% 19.5%, 77.9% 22.1%, 85.5% 24.2%, 92.9% 28.1%, 97.6% 34.5%, 97.6% 42.5%, 93.9% 50.0%, 89.0% 56.2%, 85.9% 61.7%, 85.2% 67.9%, 85.5% 75.8%, 84.1% 84.1%, 79.4% 90.5%, 71.9% 92.9%, 63.6% 91.7%, 56.2% 89.0%, 50.0% 87.7%, 43.8% 89.0%, 36.4% 91.7%, 28.1% 92.9%, 20.6% 90.5%, 15.9% 84.1%, 14.5% 75.8%, 14.8% 67.9%, 14.1% 61.7%, 11.0% 56.2%, 6.1% 50.0%, 2.4% 42.5%, 2.4% 34.5%, 7.1% 28.1%, 14.5% 24.2%, 22.1% 22.1%, 27.8% 19.5%, 32.1% 14.8%, 36.4% 8.3%, 42.5% 2.4%); rotate: 360deg; }
    50% { clip-path: polygon(50.0% 19.0%, 54.9% 19.1%, 59.9% 19.6%, 65.1% 20.4%, 70.5% 21.7%, 76.3% 23.7%, 82.5% 26.4%, 88.6% 30.3%, 94.3% 35.6%, 98.4% 42.3%, 100.0% 50.0%, 98.4% 57.7%, 94.3% 64.4%, 88.6% 69.7%, 82.5% 73.6%, 76.3% 76.3%, 70.5% 78.3%, 65.1% 79.6%, 59.9% 80.4%, 54.9% 80.9%, 50.0% 81.0%, 45.1% 80.9%, 40.1% 80.4%, 34.9% 79.6%, 29.5% 78.3%, 23.7% 76.3%, 17.5% 73.6%, 11.4% 69.7%, 5.7% 64.4%, 1.6% 57.7%, 0.0% 50.0%, 1.6% 42.3%, 5.7% 35.6%, 11.4% 30.3%, 17.5% 26.4%, 23.7% 23.7%, 29.5% 21.7%, 34.9% 20.4%, 40.1% 19.6%, 45.1% 19.1%); rotate: 540deg; }
    66.67% { clip-path: polygon(50.0% 0.0%, 57.4% 3.1%, 63.4% 8.8%, 69.7% 11.4%, 77.9% 11.6%, 85.4% 14.6%, 88.4% 22.1%, 88.6% 30.3%, 91.2% 36.6%, 96.9% 42.6%, 100.0% 50.0%, 96.9% 57.4%, 91.2% 63.4%, 88.6% 69.7%, 88.4% 77.9%, 85.4% 85.4%, 77.9% 88.4%, 69.7% 88.6%, 63.4% 91.2%, 57.4% 96.9%, 50.0% 100.0%, 42.6% 96.9%, 36.6% 91.2%, 30.3% 88.6%, 22.1% 88.4%, 14.6% 85.4%, 11.6% 77.9%, 11.4% 69.7%, 8.8% 63.4%, 3.1% 57.4%, 0.0% 50.0%, 3.1% 42.6%, 8.8% 36.6%, 11.4% 30.3%, 11.6% 22.1%, 14.6% 14.6%, 22.1% 11.6%, 30.3% 11.4%, 36.6% 8.8%, 42.6% 3.1%); rotate: 720deg; }
    83.33% { clip-path: polygon(50.0% 0.0%, 57.6% 1.9%, 64.0% 7.0%, 68.6% 13.5%, 72.1% 19.6%, 75.6% 24.4%, 80.4% 27.9%, 86.5% 31.4%, 93.0% 36.0%, 98.1% 42.4%, 100.0% 50.0%, 98.1% 57.6%, 93.0% 64.0%, 86.5% 68.6%, 80.4% 72.1%, 75.6% 75.6%, 72.1% 80.4%, 68.6% 86.5%, 64.0% 93.0%, 57.6% 98.1%, 50.0% 100.0%, 42.4% 98.1%, 36.0% 93.0%, 31.4% 86.5%, 27.9% 80.4%, 24.4% 75.6%, 19.6% 72.1%, 13.5% 68.6%, 7.0% 64.0%, 1.9% 57.6%, 0.0% 50.0%, 1.9% 42.4%, 7.0% 36.0%, 13.5% 31.4%, 19.6% 27.9%, 24.4% 24.4%, 27.9% 19.6%, 31.4% 13.5%, 36.0% 7.0%, 42.4% 1.9%); rotate: 900deg; }
    100% { clip-path: polygon(50.0% 0.0%, 57.2% 4.7%, 62.9% 10.3%, 70.8% 9.1%, 79.4% 9.5%, 82.4% 17.6%, 83.8% 25.5%, 90.9% 29.2%, 97.6% 34.5%, 95.3% 42.8%, 91.7% 50.0%, 95.3% 57.2%, 97.6% 65.5%, 90.9% 70.8%, 83.8% 74.5%, 82.4% 82.4%, 79.4% 90.5%, 70.8% 90.9%, 62.9% 89.7%, 57.2% 95.3%, 50.0% 100.0%, 42.8% 95.3%, 37.1% 89.7%, 29.2% 90.9%, 20.6% 90.5%, 17.6% 82.4%, 16.2% 74.5%, 9.1% 70.8%, 2.4% 65.5%, 4.7% 57.2%, 8.3% 50.0%, 4.7% 42.8%, 2.4% 34.5%, 9.1% 29.2%, 16.2% 25.5%, 17.6% 17.6%, 20.6% 9.5%, 29.2% 9.1%, 37.1% 10.3%, 42.8% 4.7%); rotate: 1080deg; }
  }
  @media (prefers-reduced-motion: reduce) { .fx-spinner[data-variant="morph"] { animation: none; } }
  [data-fx-motion="none"] .fx-spinner[data-variant="morph"] { animation: none; }
  @media (forced-colors: active) { .fx-spinner[data-variant="morph"] { background: ButtonText; forced-color-adjust: none; } }
}

/* splash */
@layer fx.components {
  /* Splash ekran (4.200, HIG «Launch screen»): PWA yoki ilova birinchi yuklanayotganda — markazda belgi (logo) va nom,
     ostida yuklanish chizigʻi (aria-valuenow boʻlsa — aniq, boʻlmasa — noaniq yuguruvchi) va holat matni, pastda versiya.
     Ilova tayyor boʻlgach data-state="done" qoʻyadi — ekran yumshoq soʻnadi va bosilmaydigan boʻladi (keyin DOMdan olib tashlash mumkin).
     Belgining «nafas olishi» — cheksiz harakat, faqat --fx-knob-motion-loop bilan; harakat kamaytirilsa toʻxtaydi.
     data-size: screen (standart — butun ekran, fixed) · block (hujjat namunasi uchun). data-tone: page (standart) · brand. */
  .fx-splash {
    --fx-splash-value: 0%;
    position: fixed;
    inset: 0;
    z-index: var(--fx-z-toast);
    display: grid;
    grid-template-rows: 1fr auto;
    place-items: center;
    padding: var(--fx-space-8) var(--fx-space-6);
    background: var(--fx-bg-page);
    color: var(--fx-text-primary);
    transition: opacity var(--fx-motion-slow) var(--fx-ease-exit), visibility var(--fx-motion-slow) allow-discrete;
  }
  .fx-splash[data-size="block"] { position: relative; inset: auto; z-index: auto; min-block-size: calc(var(--fx-space-12) * 9); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-overlay); overflow: hidden; }
  .fx-splash[data-state="done"] { opacity: 0; visibility: hidden; pointer-events: none; }
  .fx-splash__center { display: grid; justify-items: center; gap: var(--fx-space-4); text-align: center; }
  .fx-splash__mark {
    display: grid;
    place-items: center;
    inline-size: calc(var(--fx-space-12) * 2);
    block-size: calc(var(--fx-space-12) * 2);
    border-radius: calc(var(--fx-radius-overlay) * 1.5);
    background: var(--fx-bg-brand-solid);
    color: var(--fx-text-on-brand);
    font-family: var(--fx-font-family-display);
    font-size-adjust: var(--fx-font-adjust-display);
    font-size: var(--fx-font-size-display-sm);
    font-weight: var(--fx-font-weight-semibold);
    box-shadow: var(--fx-shadow-lg);
    animation: fx-splash-in var(--fx-motion-slower) var(--fx-ease-emphasized) both, fx-splash-breathe calc(var(--fx-duration-pulse) * 1.5 * max(var(--fx-knob-motion-loop), 0.001)) var(--fx-ease-standard) var(--fx-motion-slower) infinite;
  }
  .fx-splash__mark > :is(svg, img) { inline-size: 55%; block-size: 55%; }
  .fx-splash__name { margin: 0; font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-semibold); letter-spacing: -0.01em; animation: fx-splash-in var(--fx-motion-slower) var(--fx-ease-emphasized) var(--fx-duration-stagger) both; }
  .fx-splash__progress { position: relative; inline-size: calc(var(--fx-space-12) * 3.5); block-size: calc(var(--fx-space-1) * 0.75); margin-block-start: var(--fx-space-4); overflow: hidden; border-radius: var(--fx-radius-pill); background: var(--fx-bg-muted); }
  .fx-splash__progress::before { content: ""; position: absolute; inset-block: 0; inset-inline-start: 0; inline-size: var(--fx-splash-value); border-radius: inherit; background: var(--fx-bg-brand-solid); transition: inline-size var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-splash__progress:not([aria-valuenow])::before { inline-size: 35%; animation: fx-splash-run calc(var(--fx-duration-indeterminate) * max(var(--fx-knob-motion-loop), 0.001)) var(--fx-ease-standard) infinite; }
  .fx-splash__status { min-block-size: 1lh; margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-splash__foot { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-splash[data-tone="brand"] { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-splash[data-tone="brand"] .fx-splash__mark { background: var(--fx-bg-surface); color: var(--fx-text-primary); }
  .fx-splash[data-tone="brand"] :is(.fx-splash__status, .fx-splash__foot) { color: inherit; opacity: 0.75; }
  .fx-splash[data-tone="brand"] .fx-splash__progress { background: color-mix(in oklab, currentColor 25%, transparent); }
  .fx-splash[data-tone="brand"] .fx-splash__progress::before { background: currentColor; }
  @keyframes fx-splash-in { from { opacity: 0; scale: var(--fx-motion-scale-enter); } }
  @keyframes fx-splash-breathe { 50% { scale: 1.04; } }
  @keyframes fx-splash-run { from { translate: -100% 0; } to { translate: 300% 0; } }
  @media (prefers-reduced-motion: reduce) {
    .fx-splash__mark { animation: none; }
    .fx-splash__progress:not([aria-valuenow])::before { animation: none; inline-size: 100%; opacity: 0.4; }
  }
}

/* split */
@layer fx.components {
  /* Boʻlinadigan panellar (split view): ikki panel oʻrtasida tortiladigan ajratgich (WAI-ARIA «Window Splitter»).
     Birinchi panel eni foizda — aria-valuenow (xulq --_val’ga yozadi). data-orientation="vertical" — ustma-ust. */
  .fx-split { --_val: 50; display: grid; grid-template-columns: calc(var(--_val) * 1%) auto minmax(0, 1fr); min-block-size: 0; }
  .fx-split[data-orientation="vertical"] { grid-template-columns: minmax(0, 1fr); grid-template-rows: calc(var(--_val) * 1%) auto minmax(0, 1fr); }
  .fx-split__pane { min-inline-size: 0; min-block-size: 0; overflow: auto; }
  .fx-split__pane[hidden] { display: none; }
  .fx-split__handle { position: relative; inline-size: var(--fx-border-width-default); background: var(--fx-border-color-default); cursor: col-resize; touch-action: none; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-split[data-orientation="vertical"] > .fx-split__handle { inline-size: auto; block-size: var(--fx-border-width-default); cursor: row-resize; }
  /* Tutqich yuzasi koʻrinadigan chiziqdan kengroq (sensorli qurilma uchun) */
  .fx-split__handle::before { content: ""; position: absolute; inset-block: 0; inset-inline: calc(var(--fx-space-2) * -1); }
  .fx-split[data-orientation="vertical"] > .fx-split__handle::before { inset-block: calc(var(--fx-space-2) * -1); inset-inline: 0; }
  .fx-split__handle:hover, .fx-split[data-dragging] > .fx-split__handle { background: var(--fx-bg-brand-solid); }
  .fx-split__handle:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); background: var(--fx-bg-brand-solid); }
  /* Ushlash joyi (grip): oʻrtada kichik kapsula */
  .fx-split__handle::after { content: ""; position: absolute; inset-block-start: 50%; inset-inline-start: 50%; translate: -50% -50%; inline-size: var(--fx-space-1); block-size: var(--fx-space-6); border-radius: var(--fx-radius-circle); background: inherit; border: var(--fx-border-width-focus) solid var(--fx-bg-page); }
  .fx-split[data-orientation="vertical"] > .fx-split__handle::after { inline-size: var(--fx-space-6); block-size: var(--fx-space-1); }
  .fx-split[data-dragging] { user-select: none; }
  .fx-split[data-dragging] .fx-split__pane { pointer-events: none; }
  .fx-split[data-collapsed] > .fx-split__pane:first-child { overflow: hidden; }
}

/* stat */
@layer fx.components {
  /* Koʻrsatkich plitkasi: yorliq + katta raqam + izoh. Neytral yoki rangli (toifa rangi) — hilos namunasi, Ustoz tasdigʻi 16.10. */
  .fx-stat {
    display: grid;
    align-content: start;
    gap: var(--fx-space-2);
    padding: var(--fx-space-4) var(--fx-space-5) var(--fx-space-5);
    min-inline-size: 0;
    border-radius: var(--fx-radius-surface);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    text-decoration: none;
    transition: box-shadow var(--fx-motion-fast) var(--fx-ease-standard), border-radius var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-stat__label { display: flex; justify-content: space-between; align-items: center; gap: var(--fx-space-2); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); color: var(--fx-text-secondary); }
  .fx-stat__value { margin-block-start: var(--fx-space-2); font-family: var(--fx-font-family-numeric); font-size-adjust: var(--fx-font-adjust-numeric); font-size: var(--fx-font-size-display-md); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; line-height: 1; }
  .fx-stat__hint { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-stat[data-tone="warning"] .fx-stat__value { color: var(--fx-fg-warning); }
  .fx-stat[data-tone="error"] .fx-stat__value { color: var(--fx-fg-error); }
  a.fx-stat:hover { box-shadow: var(--fx-shadow-md); }
  a.fx-stat:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  /* Rangli plitka: toifa rangi, chiziqsiz; yorliq va izoh — ustidagi matnning xira varianti */
  .fx-stat[data-color] { border-color: transparent; color: var(--fx-text-on-category); }
  .fx-stat[data-color] .fx-stat__label { color: color-mix(in oklab, var(--fx-text-on-category) 80%, transparent); }
  .fx-stat[data-color] .fx-stat__hint { color: color-mix(in oklab, var(--fx-text-on-category) 70%, transparent); }
  .fx-stat[data-color="yellow"] { background: var(--fx-bg-category-yellow); }
  .fx-stat[data-color="pink"] { background: var(--fx-bg-category-pink); }
  .fx-stat[data-color="blue"] { background: var(--fx-bg-category-blue); }
  .fx-stat[data-color="coral"] { background: var(--fx-bg-category-coral); }
  .fx-stat[data-color="green"] { background: var(--fx-bg-category-green); }
  .fx-stat[data-color="purple"] { background: var(--fx-bg-category-purple); }
  a.fx-stat { transition: box-shadow var(--fx-motion-fast) var(--fx-ease-standard), border-radius var(--fx-motion-base) var(--fx-ease-standard), translate var(--fx-motion-base) var(--fx-ease-enter); }
  a.fx-stat:hover { translate: 0 calc(var(--fx-motion-lift) * var(--fx-knob-motion-lift)); }
  /* KPI: yorliq, katta raqam, oʻzgarish (.fx-delta), pastki izoh, mini grafik oʻrni (.fx-stat__viz — ichiga fx-chart type="spark") */
  .fx-stat__row { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--fx-space-3); min-inline-size: 0; }
  .fx-stat__delta { display: flex; align-items: center; gap: var(--fx-space-2); flex-wrap: wrap; }
  .fx-stat__viz { flex: 0 1 40%; min-inline-size: 0; max-block-size: var(--fx-control-h-lg); }
  .fx-stat__foot { padding-block-start: var(--fx-space-2); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); }
  .fx-stat[data-size="hero"] .fx-stat__value { font-size: calc(var(--fx-font-size-display-md) * 1.5); }
  .fx-stat[data-size="compact"] { padding: var(--fx-space-3) var(--fx-space-4); gap: var(--fx-space-1); }
  .fx-stat[data-size="compact"] .fx-stat__value { font-size: var(--fx-font-size-xl); margin-block-start: 0; }
  .fx-stat-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--fx-popover-width) * 0.75), 1fr)); gap: var(--fx-space-4); }
  /* ---- Kengaytma (2.128): solishtirish davri, yuklanish holati, ijobiy ohang ---- */
  .fx-stat[data-tone="success"] .fx-stat__value { color: var(--fx-fg-success); }
  .fx-stat__period { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  /* Yuklanmoqda (aria-busy): matnlar skelet chiziqqa aylanadi, mini grafik yashirinadi */
  .fx-stat[aria-busy="true"] :is(.fx-stat__label, .fx-stat__value, .fx-stat__hint, .fx-stat__period) { border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); color: transparent; user-select: none; animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-stat[aria-busy="true"] .fx-stat__value { inline-size: 55%; }
  .fx-stat[aria-busy="true"] .fx-stat__viz { visibility: hidden; }
  @media (prefers-reduced-motion: reduce) { .fx-stat[aria-busy="true"] :is(.fx-stat__label, .fx-stat__value, .fx-stat__hint, .fx-stat__period) { animation: none; } }
  @media (forced-colors: active) { .fx-stat { border-color: CanvasText; } }
  /* Tanlanadigan plitkalar (4.128): .fx-stat-row[data-selectable] (role=tablist), plitka — button.fx-stat[role=tab].
     Tanlangani: tepada 3 qalinlikdagi brend chizigʻi (shakl) + kuchli chegara + aria-selected; rang yolgʻiz belgi emas. */
  .fx-stat-row[data-selectable] { gap: var(--fx-space-3); }
  button.fx-stat { position: relative; inline-size: 100%; margin: 0; font: inherit; text-align: start; cursor: pointer; overflow: hidden; }
  button.fx-stat::before { content: ""; position: absolute; inset-block-start: 0; inset-inline: 0; block-size: calc(var(--fx-border-width-focus) * 1.5); background: var(--fx-bg-brand-solid); scale: 1 0; transform-origin: top; transition: scale var(--fx-motion-base) var(--fx-ease-emphasized); }
  button.fx-stat:hover { background: var(--fx-bg-subtle); }
  button.fx-stat:active { scale: var(--fx-motion-press); }
  button.fx-stat:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-stat[aria-selected="true"] { border-color: var(--fx-border-color-strong); background: var(--fx-bg-surface); }
  .fx-stat[aria-selected="true"]::before { scale: 1 1; }
  .fx-stat[aria-selected="true"] .fx-stat__label { color: var(--fx-text-primary); }
  @media (forced-colors: active) { .fx-stat[aria-selected="true"] { border: var(--fx-border-width-focus) solid Highlight; } .fx-stat[aria-selected="true"]::before { background: Highlight; } }
}

/* stats */
@layer fx.components {
  /* Raqamlar boʻlimi (4.176, naqsh): landing’dagi 3–4 katta raqam + izoh. Sarlavha bloki ixtiyoriy.
     Raqam — fx-ticker (data-fx-ticker) bilan: koʻrinish maydoniga kirganda barabandek aylanib chiqadi; JS boʻlmasa — matn oʻzi.
     data-layout: row (standart — bir qatorda, ustunlar teng) · split (sarlavha chapda, raqamlar oʻngda 2×2).
     data-variant: plain (standart) · divided (ustunlar orasida chiziq) · cards (har raqam kartada).
     Raqam va birligi (+, %, mln) alohida: birlik kichikroq va ikkinchi darajali rangda — raqam oʻqilishi oson. */
  .fx-stats { display: grid; gap: var(--fx-space-10); container-type: inline-size; }
  .fx-stats__head { display: grid; justify-items: center; gap: var(--fx-space-3); max-inline-size: calc(var(--fx-dialog-width) * 1.4); margin-inline: auto; text-align: center; }
  .fx-stats__eyebrow { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-stats__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.02em; text-wrap: balance; color: var(--fx-text-primary); }
  .fx-stats__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-stats__list { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--fx-space-12) * 4)), 1fr)); gap: var(--fx-space-8) var(--fx-space-6); margin: 0; padding: 0; }
  .fx-stats__item { display: grid; align-content: start; gap: var(--fx-space-2); min-inline-size: 0; margin: 0; text-align: center; }
  /* dl tartibi: <dt> (izoh) vizual pastda, <dd> (raqam) tepada — ekran oʻquvchi «izoh: raqam» deb oʻqiydi */
  .fx-stats__label { order: 2; margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-stats__value {
    order: 1;
    display: inline-flex;
    align-items: baseline;
    justify-content: center;
    gap: calc(var(--fx-space-1) / 2);
    margin: 0;
    font-family: var(--fx-font-family-numeric);
    font-size-adjust: var(--fx-font-adjust-numeric);
    font-size: clamp(var(--fx-font-size-display-sm), calc(var(--fx-font-size-display-sm) + 2vw), var(--fx-font-size-display-lg));
    font-weight: var(--fx-font-weight-semibold);
    font-variant-numeric: tabular-nums;
    line-height: var(--fx-line-height-tight);
    letter-spacing: -0.03em;
    color: var(--fx-text-primary);
  }
  .fx-stats__unit { color: var(--fx-text-brand); font-size: 0.6em; letter-spacing: 0; }
  .fx-stats__note { order: 3; margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-wrap: pretty; }
  .fx-stats__foot { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); text-align: center; }

  /* divided: ustunlar orasida ingichka chiziq (tor ekranda — tepada) */
  .fx-stats[data-variant="divided"] .fx-stats__list { gap: 0; }
  .fx-stats[data-variant="divided"] .fx-stats__item { padding: var(--fx-space-4) var(--fx-space-6); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-stats[data-variant="divided"] .fx-stats__item:first-child { border-inline-start: 0; }
  /* cards: har raqam alohida yuzada */
  .fx-stats[data-variant="cards"] .fx-stats__list { gap: var(--fx-space-4); }
  .fx-stats[data-variant="cards"] .fx-stats__item { padding: var(--fx-space-6); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); text-align: start; }
  .fx-stats[data-variant="cards"] .fx-stats__value { justify-content: flex-start; }

  /* split: sarlavha chapda, raqamlar oʻngda 2 ustun */
  .fx-stats[data-layout="split"] { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); align-items: center; gap: var(--fx-space-8) var(--fx-space-12); }
  .fx-stats[data-layout="split"] .fx-stats__head { justify-items: start; margin: 0; text-align: start; }
  .fx-stats[data-layout="split"] .fx-stats__list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fx-stats[data-layout="split"] .fx-stats__item { text-align: start; }
  .fx-stats[data-layout="split"] .fx-stats__value { justify-content: flex-start; }
  .fx-stats[data-layout="split"] .fx-stats__foot { grid-column: 1 / -1; text-align: start; }

  @media (max-width: 48em) {
    .fx-stats[data-layout="split"] { grid-template-columns: minmax(0, 1fr); }
  }
  @container (max-width: 40em) {
    .fx-stats[data-variant="divided"] .fx-stats__item { border-inline-start: 0; border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
    .fx-stats[data-variant="divided"] .fx-stats__item:first-child { border-block-start: 0; }
  }
}

/* statstrip */
@layer fx.components {
  /* Xulosa tasmasi (PDP .eco-listpage__stat): roʻyxat sarlavhasi ostida joriy filtr boʻyicha 3–4 raqam (jami, muddati oʻtgan, tanlangan…)
     va ixtiyoriy «eskirish» chizigʻi (fx-progress stacked). Plitka emas — chegarasiz, ajratgich bilan bir qator. */
  .fx-statstrip { display: flex; flex-wrap: wrap; align-items: stretch; gap: var(--fx-space-3) var(--fx-space-8); margin: 0; padding-block: var(--fx-space-4); border-block: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-statstrip__item { display: grid; align-content: start; gap: var(--fx-space-1); min-inline-size: 0; margin: 0; }
  .fx-statstrip__label { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-statstrip__value { margin: 0; font-family: var(--fx-font-family-numeric); font-size-adjust: var(--fx-font-adjust-numeric); font-size: var(--fx-font-size-xl); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; line-height: 1.1; color: var(--fx-text-primary); }
  .fx-statstrip__item[data-tone="error"] .fx-statstrip__value { color: var(--fx-fg-error); }
  .fx-statstrip__item[data-tone="warning"] .fx-statstrip__value { color: var(--fx-fg-warning); }
  .fx-statstrip__hint { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-statstrip__aging { flex: 1 1 calc(var(--fx-popover-width) * 0.7); display: grid; align-content: start; gap: var(--fx-space-2); min-inline-size: 0; }
}

/* status */
@layer fx.components {
  /* Holat — shakl + soʻz (WDS «Komponentlar»: rangning oʻzi yetmaydi): bajarildi — doira, ogohlantirish — uchburchak,
     xato — romb, kutilmoqda — halqa, neytral — kvadrat. Jadval katagi va zich roʻyxat uchun. */
  .fx-status { display: inline-flex; align-items: center; gap: var(--fx-space-2); font-size: var(--fx-font-size-sm); color: var(--fx-text-primary); white-space: nowrap; }
  .fx-status::before { content: ""; flex: none; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border-radius: var(--fx-radius-badge); background: var(--fx-text-tertiary); }
  .fx-status[data-tone="success"]::before { border-radius: var(--fx-radius-circle); background: var(--fx-fg-success); }
  .fx-status[data-tone="warning"]::before { clip-path: polygon(50% 0, 100% 100%, 0 100%); border-radius: 0; background: var(--fx-fg-warning); }
  .fx-status[data-tone="error"]::before { inline-size: calc(var(--fx-size-status-dot) * 0.85); block-size: calc(var(--fx-size-status-dot) * 0.85); rotate: 45deg; border-radius: 0; background: var(--fx-fg-error); }
  .fx-status[data-tone="pending"]::before { box-sizing: border-box; border-radius: var(--fx-radius-circle); background: transparent; border: var(--fx-border-width-focus) solid var(--fx-text-tertiary); }
  .fx-status[data-tone="neutral"] { color: var(--fx-text-secondary); }
  /* ---- Kengaytma (2.62): “jonli” puls, kutilmoqda — aylanuvchi halqa, oʻlchamlar ---- */
  .fx-status[data-pulse]::before { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-status[data-tone="pending"][data-pulse]::before { border-block-start-color: transparent; animation: fx-spin var(--fx-duration-spin) linear infinite; }
  @media (prefers-reduced-motion: reduce) { .fx-status[data-pulse]::before { animation: none; } }
  .fx-status[data-size="sm"] { gap: var(--fx-space-1); font-size: var(--fx-font-size-xs); }
  .fx-status[data-size="lg"] { font-size: var(--fx-font-size-md); }
  @media (forced-colors: active) { .fx-status::before { forced-color-adjust: none; background: CanvasText; } .fx-status[data-tone="pending"]::before { background: transparent; border-color: CanvasText; } }
}

/* steps */
@layer fx.components {
  /* Qadamlar: jarayon bosqichlari (roʻyxatdan oʻtish, toʻlov). Bajarilgan — brend, joriy — halqa va qalin, keyingilar — xira. */
  .fx-steps { display: flex; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; counter-reset: fx-step; }
  .fx-steps__item { display: flex; align-items: center; gap: var(--fx-space-2); flex: 1; min-inline-size: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); counter-increment: fx-step; }
  .fx-steps__item::before { content: counter(fx-step); display: grid; place-items: center; flex: none; inline-size: var(--fx-size-checkbox); block-size: var(--fx-size-checkbox); box-sizing: border-box; border: var(--fx-border-width-focus) solid var(--fx-border-color-strong); border-radius: var(--fx-radius-circle); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; }
  .fx-steps__item:not(:last-child)::after { content: ""; flex: 1; min-inline-size: var(--fx-space-4); block-size: var(--fx-border-width-focus); border-radius: var(--fx-border-width-focus); background: var(--fx-border-color-default); }
  .fx-steps__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-steps__item[data-state="done"] { color: var(--fx-text-secondary); }
  .fx-steps__item[data-state="done"]::before { content: "✓"; border-color: transparent; background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-steps__item[data-state="done"]::after { background: var(--fx-bg-brand-solid); }
  .fx-steps__item[aria-current="step"] { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-steps__item[aria-current="step"]::before { border-color: var(--fx-bg-brand-solid); color: var(--fx-text-brand); }
  /* Xato qadam (koʻp bosqichli formada tekshiruvdan oʻtmagan): belgi «!» + xato rangi */
  .fx-steps__item[data-state="error"] { color: var(--fx-text-error); }
  .fx-steps__item[data-state="error"]::before { content: "!"; border-color: var(--fx-border-color-error); color: var(--fx-text-error); }
  /* ---- Kengaytma (2.98): vertikal, tavsif qatori, bosiladigan qadamlar, nuqtali koʻrinish ---- */
  .fx-steps__text { display: grid; min-inline-size: 0; }
  .fx-steps__desc { overflow: hidden; text-overflow: ellipsis; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); }
  .fx-steps__item > :is(a, button) { display: inline-flex; padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: none; color: inherit; font: inherit; text-decoration: none; cursor: pointer; min-inline-size: 0; }
  .fx-steps__item > :is(a, button):hover { color: var(--fx-text-primary); text-decoration: underline; text-underline-offset: calc(var(--fx-space-1) * 0.75); }
  .fx-steps__item > :is(a, button):focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-steps__item > :is(a, button)[aria-disabled="true"], .fx-steps__item > button:disabled { cursor: not-allowed; pointer-events: none; opacity: 0.6; }
  /* Vertikal: belgi tepada, chiziq uning ostida, matn oʻngda */
  .fx-steps[data-orientation="vertical"] { flex-direction: column; gap: 0; }
  .fx-steps[data-orientation="vertical"] .fx-steps__item { display: grid; grid-template-columns: auto minmax(0, 1fr); flex: none; align-items: start; column-gap: var(--fx-space-3); }
  .fx-steps[data-orientation="vertical"] .fx-steps__item::before { grid-column: 1; grid-row: 1; }
  .fx-steps[data-orientation="vertical"] .fx-steps__item > :not(a, button) { grid-column: 2; grid-row: 1 / span 2; }
  .fx-steps[data-orientation="vertical"] .fx-steps__item > :is(a, button) { grid-column: 2; grid-row: 1 / span 2; justify-self: start; }
  .fx-steps[data-orientation="vertical"] .fx-steps__item:not(:last-child)::after { grid-column: 1; grid-row: 2; justify-self: center; inline-size: var(--fx-border-width-focus); min-inline-size: 0; block-size: auto; min-block-size: var(--fx-space-6); margin-block: var(--fx-space-1); }
  .fx-steps[data-orientation="vertical"] .fx-steps__item:last-child { padding-block-end: 0; }
  /* Nuqtali koʻrinish: raqamsiz, kichik doira */
  .fx-steps[data-style="dot"] .fx-steps__item::before { content: ""; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border: 0; background: var(--fx-border-color-strong); }
  .fx-steps[data-style="dot"] .fx-steps__item[data-state="done"]::before { content: ""; background: var(--fx-bg-brand-solid); }
  .fx-steps[data-style="dot"] .fx-steps__item[aria-current="step"]::before { background: var(--fx-bg-brand-solid); outline: var(--fx-space-1) solid var(--fx-bg-brand-subtle); }
  .fx-steps[data-style="dot"] .fx-steps__item[data-state="error"]::before { content: ""; background: var(--fx-fg-error); rotate: 45deg; border-radius: 0; }
  @media (forced-colors: active) { .fx-steps__item::before { forced-color-adjust: none; border-color: ButtonText; } .fx-steps__item[data-state="done"]::before, .fx-steps[data-style="dot"] .fx-steps__item::before { background: Highlight; color: HighlightText; } .fx-steps__item::after { background: ButtonText; } }
  /* ---- Bosiladigan navigatsiya (4.141): data-clickable — oʻtilgan qadamlar tugma (xulq foxui.js → steps); erishilmagan qadam aria-disabled
     (xira, bosilmaydi). Bajarilgan doiracha hover’da toʻqroq — bosish mumkinligi belgisi; joriy qadam tugmasida chiziq yoʻq. ---- */
  .fx-steps[data-clickable] .fx-steps__item > button { gap: var(--fx-space-2); align-items: center; }
  .fx-steps[data-clickable] .fx-steps__item:has(> button:not([aria-disabled="true"]):hover)::before { border-color: var(--fx-text-primary); }
  .fx-steps[data-clickable] .fx-steps__item[data-state="done"]:has(> button:hover)::before { background: var(--fx-bg-brand-solid-hover); }
  .fx-steps[data-clickable] .fx-steps__item > button[aria-current="step"]:hover { text-decoration: none; cursor: default; }
}

/* suggestions */
@layer fx.components {
  /* Takliflar: bosh chatda yoki javobdan keyin tayyor savollar. Bosilsa matn composer’ga yoziladi (data-target) yoki fx-suggest hodisasi
     chiqadi. Joylashuv: wrap (standart) · scroll (bir qator, gorizontal) · stack (kartalar ustun). JS: behaviors/suggestions.js. */
  .fx-suggestions { display: flex; flex-wrap: wrap; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; }
  .fx-suggestions[data-layout="scroll"] { flex-wrap: nowrap; padding-block: var(--fx-space-1); overflow-x: auto; scrollbar-width: none; }
  .fx-suggestions[data-layout="stack"] { display: grid; }
  .fx-suggestions__item { display: inline-flex; align-items: center; gap: var(--fx-space-2); flex: none; min-block-size: var(--fx-control-h-sm); padding: var(--fx-space-1) var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: calc(var(--fx-knob-pill) * var(--fx-control-h-sm) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control)); background: var(--fx-bg-surface); color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); text-align: start; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-suggestions__item:hover { border-color: var(--fx-border-color-strong); background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  .fx-suggestions__item:active { scale: var(--fx-motion-press); }
  .fx-suggestions__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-suggestions__item > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: var(--fx-text-brand); stroke-width: 2; stroke-linejoin: round; }
  .fx-suggestions[data-layout="stack"] .fx-suggestions__item { border-radius: var(--fx-radius-overlay); padding: var(--fx-space-3) var(--fx-space-4); }
  .fx-suggestions[data-stagger] .fx-suggestions__item { animation: fx-stagger-in var(--fx-motion-slow) var(--fx-ease-enter) backwards; }
  .fx-suggestions[data-stagger] .fx-suggestions__item:nth-child(2) { animation-delay: var(--fx-duration-stagger); }
  .fx-suggestions[data-stagger] .fx-suggestions__item:nth-child(3) { animation-delay: calc(var(--fx-duration-stagger) * 2); }
  .fx-suggestions[data-stagger] .fx-suggestions__item:nth-child(4) { animation-delay: calc(var(--fx-duration-stagger) * 3); }
}

/* swatch */
@layer fx.components {
  /* Rang tanlagich: native radio (bitta) yoki checkbox (bir nechta) — JS’siz. Rang — --fx-swatch (token: var(--fx-bg-category-*) yoki mijoz tokeni);
     tanlangani ✓ belgisi va halqa bilan (rang yolgʻiz belgi emas). */
  .fx-swatches { --_s: var(--fx-size-control-md); display: flex; flex-wrap: wrap; gap: var(--fx-space-2); margin: 0; padding: 0; border: 0; min-inline-size: 0; }
  .fx-swatches[data-size="sm"] { --_s: var(--fx-size-control-sm); }
  .fx-swatches[data-size="lg"] { --_s: var(--fx-size-control-lg); }
  .fx-swatch { --fx-swatch: var(--fx-bg-muted); position: relative; display: inline-grid; place-items: center; inline-size: var(--_s); block-size: var(--_s); border-radius: calc(var(--_s) * var(--fx-radius-avatar-ratio)); background: var(--fx-swatch); cursor: pointer; transition: scale var(--fx-motion-instant) var(--fx-ease-standard), box-shadow var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-swatch[data-shape="circle"] { border-radius: var(--fx-radius-circle); }
  .fx-swatch > input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: inherit; }
  .fx-swatch::before { content: ""; position: absolute; inset: calc(var(--fx-border-width-focus) * -2); border: var(--fx-border-width-focus) solid transparent; border-radius: inherit; transition: border-color var(--fx-motion-fast) var(--fx-ease-standard); pointer-events: none; }
  .fx-swatch::after { content: ""; inline-size: 50%; block-size: 50%; background: var(--fx-text-on-category); opacity: 0; scale: 0.6; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-spring); pointer-events: none; }
  .fx-swatch:has(> input:checked)::before { border-color: var(--fx-text-primary); }
  .fx-swatch:has(> input:checked)::after { opacity: 1; scale: 1; }
  .fx-swatch:hover { scale: 1.06; }
  .fx-swatch:active { scale: var(--fx-motion-press); }
  .fx-swatch:has(> input:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * 3); }
  .fx-swatch:has(> input:disabled) { opacity: 0.4; cursor: not-allowed; }
}

/* switcher */
@layer fx.components {
  /* Almashtirgich (Workspace / brend / korxona): yon panel tepasida, brend oʻrnida turadigan tugma — belgi, nom, ikkinchi
     qator va chevron; bosilsa fx-menu ochiladi (menuitemradio, tanlangani ✓). Shakli PDP .eco-switcher’dan, oʻlchamlari
     FoxUI kalibridan (yoy — nav, belgi — avatar-md). Xulq — foxui.js (data-fx-switcher): tanlov tugmaga koʻchadi. */
  .fx-switcher {
    display: flex;
    align-items: center;
    gap: var(--fx-space-2);
    box-sizing: border-box;
    inline-size: 100%;
    min-block-size: calc(var(--fx-space-12) + var(--fx-space-1));
    margin: 0;
    padding: calc(var(--fx-space-1) * 1.5) var(--fx-space-2);
    border: 0;
    border-radius: var(--fx-radius-nav);
    background: none;
    color: inherit;
    font: inherit;
    text-align: start;
    white-space: nowrap;
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-switcher:active:not(:disabled) { scale: calc(1 - (1 - var(--fx-motion-press)) / 2); }
  .fx-switcher:hover, .fx-switcher[aria-expanded="true"] { background: var(--fx-bg-muted); }
  .fx-switcher:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-switcher:disabled { opacity: 0.5; cursor: not-allowed; }
  .fx-switcher__logo {
    display: grid; place-items: center; flex: none;
    inline-size: var(--fx-size-avatar-md); block-size: var(--fx-size-avatar-md);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand);
    font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold);
  }
  .fx-switcher__logo[data-size="sm"] { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); border-radius: var(--fx-radius-control); font-size: var(--fx-font-size-xs); }
  .fx-switcher__logo:is([data-color="yellow"], [data-color="pink"], [data-color="blue"], [data-color="coral"], [data-color="green"], [data-color="purple"]) { color: var(--fx-text-on-category); }
  .fx-switcher__logo[data-color="yellow"] { background: var(--fx-bg-category-yellow); }
  .fx-switcher__logo[data-color="pink"] { background: var(--fx-bg-category-pink); }
  .fx-switcher__logo[data-color="blue"] { background: var(--fx-bg-category-blue); }
  .fx-switcher__logo[data-color="coral"] { background: var(--fx-bg-category-coral); }
  .fx-switcher__logo[data-color="green"] { background: var(--fx-bg-category-green); }
  .fx-switcher__logo[data-color="purple"] { background: var(--fx-bg-category-purple); }
  .fx-switcher__logo > :is(svg, img) { inline-size: 56%; block-size: 56%; object-fit: contain; }
  /* belgi hover’da 72° aylanadi (PDP); harakat kamaytirilsa — yoʻq */
  .fx-switcher__logo > svg { transform-box: fill-box; transform-origin: center; transition: rotate calc(var(--fx-motion-slow) * 2.4) var(--fx-ease-emphasized); }
  .fx-switcher:is(:hover, :focus-visible) .fx-switcher__logo > svg { rotate: 72deg; }
  @media (prefers-reduced-motion: reduce) { .fx-switcher:is(:hover, :focus-visible) .fx-switcher__logo > svg { rotate: none; } }
  .fx-switcher__label { display: grid; flex: 1; min-inline-size: 0; }
  .fx-switcher__name { overflow: hidden; text-overflow: ellipsis; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); line-height: 1.2; }
  .fx-switcher__sub { overflow: hidden; text-overflow: ellipsis; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); line-height: 1.2; }
  .fx-switcher__chev { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); color: var(--fx-text-tertiary); }
  /* menyu bandidagi kichik belgi */
  .fx-menu__item > .fx-switcher__logo { margin-inline-end: var(--fx-space-1); }
  /* yigʻilgan yon menyu: faqat belgi */
  :is(.fx-shell[data-collapsed], .fx-nav[data-collapsed]) .fx-switcher { justify-content: center; padding-inline: 0; }
  :is(.fx-shell[data-collapsed], .fx-nav[data-collapsed]) .fx-switcher :is(.fx-switcher__label, .fx-switcher__chev) { display: none; }
  /* ---- Kengaytma (2.135): “+ Yangi workspace” belgisi va menyu ichidagi qidiruv maydoni ---- */
  .fx-switcher__logo[data-add] { border: var(--fx-border-width-default) dashed var(--fx-border-color-strong); background: transparent; color: var(--fx-text-tertiary); }
  .fx-switcher__search { display: block; box-sizing: border-box; inline-size: calc(100% - var(--fx-space-4)); block-size: var(--fx-control-h-sm); margin: var(--fx-space-2); padding-inline: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-field); border-radius: var(--fx-radius-control); background: var(--fx-bg-field); color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-sm); }
  .fx-switcher__search::placeholder { color: var(--fx-text-tertiary); }
  .fx-switcher__search:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
}

/* table */
@layer fx.components {
  /* Maʼlumot jadvali (WDS «Dashboard»: oʻz hududida aylanadi, sarlavha qotadi, holat/pul/sana — nowrap, oxirgi qatorda chiziq yoʻq) */
  .fx-table-scroll { overflow: auto; max-inline-size: 100%; }
  .fx-table {
    --_py: calc(var(--fx-space-3) * var(--fx-knob-density));
    --fx-table-surface: var(--fx-bg-surface); /* jadval turgan yuza (hook): sahifa ustida boʻlsa var(--fx-bg-page) */
    inline-size: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-size: var(--fx-font-size-sm);
    font-variant-numeric: tabular-nums;
    color: var(--fx-text-primary);
  }
  .fx-table th, .fx-table td {
    padding: var(--_py) var(--fx-space-3);
    text-align: start;
    vertical-align: middle;
    border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default);
  }
  .fx-table thead th {
    position: sticky;
    inset-block-start: 0;
    z-index: 1;
    background: var(--fx-table-surface);
    color: var(--fx-text-tertiary);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-medium);
    white-space: nowrap;
  }
  .fx-table tbody tr:last-child > * { border-block-end: 0; }
  .fx-table tbody tr:hover > * { background: var(--fx-bg-subtle); }
  .fx-table tfoot td, .fx-table tfoot th { border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-strong); border-block-end: 0; font-weight: var(--fx-font-weight-semibold); }
  /* Ustun turlari: raqam/pul — oʻngda; holat, sana, kod — bir qatorda */
  .fx-table [data-type="num"] { text-align: end; white-space: nowrap; }
  .fx-table [data-type="nowrap"] { white-space: nowrap; }
  .fx-table[data-size="sm"] { --_py: calc(var(--fx-space-2) * var(--fx-knob-density)); }
  .fx-table caption { padding-block-end: var(--fx-space-3); text-align: start; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  /* Saralash: sarlavhadagi tugma, holat — th[aria-sort]; belgi — strelka (faol ustunda toʻq) */
  .fx-table__sort { display: inline-flex; align-items: center; gap: var(--fx-space-1); margin: 0; padding: 0; border: 0; background: none; color: inherit; font: inherit; cursor: pointer; }
  .fx-table__sort::after { content: ""; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0.35; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5 6.5 8 3.5l3 3M5 9.5l3 3 3-3' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-table__sort:hover { color: var(--fx-text-primary); }
  .fx-table__sort:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  .fx-table th[aria-sort="ascending"], .fx-table th[aria-sort="descending"] { color: var(--fx-text-primary); }
  .fx-table th[aria-sort="ascending"] .fx-table__sort::after { opacity: 1; mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5 9.5l3-3 3 3' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-table th[aria-sort="descending"] .fx-table__sort::after { opacity: 1; mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5 6.5l3 3 3-3' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-table [data-type="num"] .fx-table__sort { flex-direction: row-reverse; }
  /* Qator tanlash: belgi ustuni tor; tanlangan va havola orqali kelingan (:target) qator — brend tusi (WDS «Rang») */
  .fx-table__check { inline-size: var(--fx-size-checkbox); padding-inline-end: 0; }
  .fx-table tbody tr:has(.fx-table__check input:checked) > *, .fx-table tbody tr[aria-selected="true"] > *, .fx-table tbody tr:target > * { background: var(--fx-bg-brand-subtle); }
  /* Ommaviy amallar paneli: tanlov boʻlsa koʻrinadi — soni + amallar */
  .fx-table-bulk { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-control); background: var(--fx-text-primary); color: var(--fx-bg-page); font-size: var(--fx-font-size-sm); }
  .fx-table-bulk[hidden] { display: none; }
  .fx-table-bulk__count { margin-inline-end: auto; font-weight: var(--fx-font-weight-semibold); font-variant-numeric: tabular-nums; }
  /* Zichlik (2.105): ixcham · standart · keng — qator balandligi bitta oʻzgaruvchi; ustuvor — foydalanuvchi tanlovi (data-density) */
  .fx-table[data-density="compact"] { --_py: calc(var(--fx-space-1) * var(--fx-knob-density)); }
  .fx-table[data-density="comfortable"] { --_py: calc(var(--fx-space-4) * var(--fx-knob-density)); }
  /* Zebra va chegarali (2.112) */
  .fx-table[data-zebra] tbody tr:nth-child(even) > * { background: var(--fx-bg-subtle); }
  .fx-table[data-bordered] th, .fx-table[data-bordered] td { border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-table[data-bordered] th:last-child, .fx-table[data-bordered] td:last-child { border-inline-end: 0; }
  /* Qotgan birinchi ustun (2.109): gorizontal aylantirilganda nom koʻrinib turadi; fon shaffof emas */
  .fx-table[data-pin-first] :is(th, td):first-child { position: sticky; inset-inline-start: 0; z-index: 1; background: var(--fx-table-surface); border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-table[data-pin-first] thead th:first-child { z-index: 2; }
  .fx-table[data-pin-first] tbody tr:hover > :first-child { background: var(--fx-bg-subtle); }
  .fx-table[data-pin-first] tbody tr:has(.fx-table__check input:checked) > :first-child, .fx-table[data-pin-first] tbody tr[aria-selected="true"] > :first-child { background: var(--fx-bg-brand-subtle); }
  /* Jami qatori qotadi (2.108): uzun roʻyxatda pastda doim koʻrinadi */
  .fx-table[data-sticky-foot] tfoot :is(td, th) { position: sticky; inset-block-end: 0; z-index: 1; background: var(--fx-table-surface); }
  .fx-table tfoot [data-type="num"] { font-variant-numeric: tabular-nums; }
  /* Kengaytiriladigan qator (2.106): chevron tugma + tafsilot qatori */
  .fx-table__expand { display: inline-grid; place-items: center; inline-size: var(--fx-size-min-target); block-size: var(--fx-size-min-target); margin: calc(var(--fx-space-2) * -1) 0; padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: var(--fx-text-tertiary); cursor: pointer; }
  .fx-table__expand:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-table__expand:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-table__expand > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-table__expand[aria-expanded="true"] > svg { rotate: 90deg; }
  .fx-table__detail[hidden] { display: none; }
  .fx-table__detail > td { padding-block: var(--fx-space-4); background: var(--fx-bg-subtle); color: var(--fx-text-secondary); }
  .fx-table tbody tr:hover + .fx-table__detail > *, .fx-table tbody tr:has(+ .fx-table__detail:not([hidden])):hover > * { background: var(--fx-bg-subtle); }
  /* Qatordagi amallar (2.110): tepada yashirin, qator ustiga kelganda yoki fokusda chiqadi; sensorli qurilmada doim koʻrinadi */
  .fx-table__actions { inline-size: 1%; white-space: nowrap; text-align: end; }
  .fx-table__actions > * { opacity: 0; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-table tbody tr:hover .fx-table__actions > *, .fx-table tbody tr:focus-within .fx-table__actions > *, .fx-table__actions:has([aria-expanded="true"]) > * { opacity: 1; }
  @media (hover: none) { .fx-table__actions > * { opacity: 1; } }
  /* Skelet qatorlar (2.114): yuklanayotganda jadval balandligi sakramaydi; hover/tanlov yoʻq */
  .fx-table tbody tr.fx-table__skeleton > * { background: transparent; }
  .fx-table__skeleton .fx-skeleton { inline-size: 80%; }
  .fx-table__skeleton:nth-child(3n+1) .fx-skeleton { inline-size: 55%; }
  .fx-table__skeleton:nth-child(3n+2) .fx-skeleton { inline-size: 70%; }
  /* Ustun ko'rinishi va zichlik menyusi ichidagi ro'yxat */
  .fx-table-opts { display: grid; gap: var(--fx-space-1); margin: 0; padding: 0; border: 0; }
  .fx-table-opts legend { padding: 0 0 var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  /* Telefonda kartalar (4.134): data-stack="sm" (< 640) yoki "md" (< 840) — har qator karta, katak «yorliq : qiymat» (data-label;
     boʻlmasa table.js thead’dan toʻldiradi). Birinchi katak — karta sarlavhasi; sarlavha qatori ekran oʻquvchida qoladi. */
  .fx-table[data-stack] td::before { content: none; }
  @media (max-width: 640px) { .fx-table[data-stack="sm"] :is(thead) { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); } .fx-table[data-stack="sm"], .fx-table[data-stack="sm"] :is(tbody, tr, td, th) { display: block; } .fx-table[data-stack="sm"] tbody tr { display: grid; gap: var(--fx-space-2); margin-block-end: var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); background: var(--fx-table-surface); } .fx-table[data-stack="sm"] tbody :is(td, th) { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); align-items: baseline; gap: var(--fx-space-3); padding: 0; border: 0; text-align: start; white-space: normal; } .fx-table[data-stack="sm"] tbody :is(td, th)[data-label]::before { content: attr(data-label); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); } .fx-table[data-stack="sm"] tbody :is(td, th):first-child:not(.fx-table__check) { grid-template-columns: 1fr; font-weight: var(--fx-font-weight-semibold); } .fx-table[data-stack="sm"] tbody :is(td, th):first-child:not(.fx-table__check)::before { content: none; } .fx-table[data-stack="sm"] tbody td[data-type="num"] { text-align: start; } .fx-table[data-stack="sm"] .fx-table__check { position: absolute; inset-block-start: var(--fx-space-3); inset-inline-end: var(--fx-space-3); } .fx-table[data-stack="sm"] tbody tr { position: relative; } }
  @media (max-width: 840px) { .fx-table[data-stack="md"] :is(thead) { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); } .fx-table[data-stack="md"], .fx-table[data-stack="md"] :is(tbody, tr, td, th) { display: block; } .fx-table[data-stack="md"] tbody tr { display: grid; gap: var(--fx-space-2); margin-block-end: var(--fx-space-3); padding: var(--fx-space-3) var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); background: var(--fx-table-surface); } .fx-table[data-stack="md"] tbody :is(td, th) { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); align-items: baseline; gap: var(--fx-space-3); padding: 0; border: 0; text-align: start; white-space: normal; } .fx-table[data-stack="md"] tbody :is(td, th)[data-label]::before { content: attr(data-label); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); } .fx-table[data-stack="md"] tbody :is(td, th):first-child:not(.fx-table__check) { grid-template-columns: 1fr; font-weight: var(--fx-font-weight-semibold); } .fx-table[data-stack="md"] tbody :is(td, th):first-child:not(.fx-table__check)::before { content: none; } .fx-table[data-stack="md"] tbody td[data-type="num"] { text-align: start; } .fx-table[data-stack="md"] .fx-table__check { position: absolute; inset-block-start: var(--fx-space-3); inset-inline-end: var(--fx-space-3); } .fx-table[data-stack="md"] tbody tr { position: relative; } }
  /* ---- Ustun enini oʻzgartirish (4.135): data-resizable — sarlavha oʻng chetida tutqich (datagrid’dagi kabi), fokuslanadi (← →). ---- */
  .fx-table[data-resizable] thead th { position: sticky; }
  .fx-table__resize { position: absolute; inset-block: 0; inset-inline-end: 0; inline-size: var(--fx-space-2); cursor: col-resize; touch-action: none; z-index: 1; }
  .fx-table__resize::after { content: ""; position: absolute; inset-block: var(--fx-space-2); inset-inline-end: 0; inline-size: var(--fx-border-width-default); background: var(--fx-border-color-default); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-table__resize:hover::after, .fx-table__resize:focus-visible::after, .fx-table__resize[data-active]::after { inline-size: var(--fx-border-width-focus); background: var(--fx-bg-brand-solid); }
  .fx-table__resize:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-table[data-resizing] { cursor: col-resize; user-select: none; }
  .fx-table[data-resizable] :is(th, td) { box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; }
}

/* tabs */
@layer fx.components {
  /* Tablar (WAI-ARIA APG «Tabs»): tagi chizilgan (WDS «Dashboard»: underline tablar, oraliq 24), har tabning paneli.
     Klaviatura — foxui.js (data-fx-tabs): ← → Home End, avtomatik faollashtirish. */
  .fx-tabs { display: flex; gap: var(--fx-space-6); overflow-x: auto; scrollbar-width: none; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-tabs__tab {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: var(--fx-space-2);
    flex: none;
    padding-block: var(--fx-space-3);
    border: 0;
    background: transparent;
    color: var(--fx-text-secondary);
    font: inherit;
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    white-space: nowrap;
    text-decoration: none;
    cursor: pointer;
  }
  .fx-tabs__tab::after { content: ""; position: absolute; inset: auto 0 calc(var(--fx-border-width-default) * -1); block-size: var(--fx-border-width-focus); border-radius: var(--fx-border-width-focus); background: transparent; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-tabs__tab:hover { color: var(--fx-text-primary); }
  .fx-tabs__tab[aria-selected="true"] { color: var(--fx-text-primary); }
  .fx-tabs__tab[aria-selected="true"]::after { background: var(--fx-bg-brand-solid); }
  .fx-tabs__tab:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); border-radius: var(--fx-radius-badge); }
  .fx-tabs__panel { padding-block: var(--fx-space-5); }
  .fx-tabs__panel:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  /* Koʻrsatkich tanlangan tabga sirpanadi (anchor positioning; qoʻllanmasa — har tabning oʻz chizigʻi qoladi) */
  @supports (anchor-name: --a) and (anchor-scope: --a) {
    .fx-tabs { position: relative; anchor-scope: --fx-tab; }
    .fx-tabs__tab[aria-selected="true"] { anchor-name: --fx-tab; }
    .fx-tabs__tab[aria-selected="true"]::after { background: transparent; }
    .fx-tabs:has([aria-selected="true"])::after {
      content: ""; position: absolute; position-anchor: --fx-tab;
      inset-inline: anchor(left) anchor(right); inset-block: auto 0;
      block-size: var(--fx-border-width-focus); border-radius: var(--fx-border-width-focus); background: var(--fx-bg-brand-solid);
      transition: inset-inline var(--fx-motion-slow) var(--fx-ease-spring);
    }
  }
  /* Variantlar (2.90–2.96): pill, enclosed, vertical; ikonli tab; yopiladigan tab; siljitish tugmalari */
  .fx-tabs__icon { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-tabs[data-variant="pill"] { gap: var(--fx-space-1); border-block-end: 0; }
  .fx-tabs[data-variant="pill"] .fx-tabs__tab { padding-inline: var(--fx-space-3); border-radius: var(--fx-radius-nav); transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-tabs[data-variant="pill"] .fx-tabs__tab::after, .fx-tabs[data-variant="enclosed"] .fx-tabs__tab::after { content: none; }
  .fx-tabs[data-variant="pill"]:has([aria-selected="true"])::after, .fx-tabs[data-variant="enclosed"]:has([aria-selected="true"])::after, .fx-tabs[data-orientation="vertical"][data-variant="pill"]:has([aria-selected="true"])::after { content: none; }
  .fx-tabs[data-variant="pill"] .fx-tabs__tab:hover { background: var(--fx-bg-subtle); }
  .fx-tabs[data-variant="pill"] .fx-tabs__tab[aria-selected="true"] { background: var(--fx-bg-muted); }
  .fx-tabs[data-variant="pill"] .fx-tabs__tab:focus-visible, .fx-tabs[data-variant="enclosed"] .fx-tabs__tab:focus-visible { outline-offset: 0; }
  .fx-tabs[data-variant="enclosed"] { gap: var(--fx-space-1); }
  .fx-tabs[data-variant="enclosed"] .fx-tabs__tab { padding-inline: var(--fx-space-4); border: var(--fx-border-width-default) solid transparent; border-block-end: 0; border-start-start-radius: var(--fx-radius-nav); border-start-end-radius: var(--fx-radius-nav); }
  .fx-tabs[data-variant="enclosed"] .fx-tabs__tab[aria-selected="true"] { background: var(--fx-bg-surface); border-color: var(--fx-border-color-default); margin-block-end: calc(var(--fx-border-width-default) * -1); padding-block-end: calc(var(--fx-space-3) + var(--fx-border-width-default)); }
  /* Tik (2.92): chapda ustun, belgi chiziq tabning yon tomonida */
  .fx-tabs[data-orientation="vertical"] { flex-direction: column; gap: var(--fx-space-1); overflow-x: visible; overflow-y: auto; border-block-end: 0; border-inline-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-tabs[data-orientation="vertical"] .fx-tabs__tab { padding-block: var(--fx-space-2); padding-inline: var(--fx-space-4); justify-content: flex-start; }
  .fx-tabs[data-orientation="vertical"] .fx-tabs__tab::after { inset: 0 calc(var(--fx-border-width-default) * -1) 0 auto; inline-size: var(--fx-border-width-focus); block-size: auto; }
  @supports (anchor-name: --a) and (anchor-scope: --a) {
    .fx-tabs[data-orientation="vertical"]:has([aria-selected="true"])::after { inset-inline: auto 0; inset-block: anchor(top) anchor(bottom); inline-size: var(--fx-border-width-focus); block-size: auto; transition: inset-block var(--fx-motion-slow) var(--fx-ease-spring); }
  }
  .fx-tabs[data-orientation="vertical"][data-variant="pill"] { border-inline-end: 0; }
  .fx-tabs[data-orientation="vertical"][data-variant="pill"] .fx-tabs__tab { padding-inline: var(--fx-space-3); }
  /* Yopiladigan tab (2.96): tab + yopish tugmasi bitta qobiqda (tugma ichida tugma boʻlmasin) */
  .fx-tabs__item { display: inline-flex; align-items: center; flex: none; gap: var(--fx-space-1); }
  .fx-tabs__close { display: inline-grid; place-items: center; flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); padding: 0; border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: var(--fx-text-tertiary); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-tabs__close:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-tabs__close:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-tabs__close > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  /* Siljitish tugmalari (2.95): tablar sigʻmasa chetlarda tugma chiqadi (foxui.js koʻrsatadi/yashiradi) */
  .fx-tabs__wrap { display: flex; align-items: stretch; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-tabs__wrap > .fx-tabs { flex: 1 1 auto; min-inline-size: 0; scroll-behavior: smooth; }
  .fx-tabs__scroll { display: inline-grid; place-items: center; flex: none; align-self: center; inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); padding: 0; border: 0; border-radius: var(--fx-radius-nav); background: transparent; color: var(--fx-text-secondary); cursor: pointer; }
  .fx-tabs__scroll:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-tabs__scroll:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-tabs__scroll[hidden] { display: none; }
  .fx-tabs__scroll > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-tabs__scroll[data-dir="prev"] > svg { scale: -1 1; }
}

/* tags */
@layer fx.components {
  /* Teg kiritish: maydon ichida chiplar + yozish joyi. Enter yoki vergul — teg qoʻshadi, boʻsh joyda Backspace — oxirgisini olib tashlaydi,
     joylangan matn vergul/qatordan boʻlinadi (foxui.js). Maydon koʻrinishi input bilan bir xil (toʻldirilgan/chegarali). */
  .fx-tags {
    --_h: var(--fx-control-h-md);
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--fx-space-1);
    box-sizing: border-box;
    inline-size: 100%;
    min-block-size: var(--_h);
    padding: calc(var(--fx-space-1) + var(--fx-space-1) / 2) var(--fx-space-3);
    background: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    cursor: text;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-tags:hover { border-color: color-mix(in oklab, var(--fx-border-color-strong) calc((1 - var(--fx-knob-field-fill)) * 100%), transparent); }
  .fx-tags:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-tags > .fx-chip { justify-self: auto; }
  .fx-tags__input { flex: 1; min-inline-size: calc(var(--fx-space-12) * 2); block-size: calc(var(--_h) - var(--fx-space-4)); padding: 0 var(--fx-space-1); border: 0; background: transparent; color: var(--fx-text-primary); font: inherit; font-size: var(--fx-font-size-md); }
  .fx-tags__input:focus { outline: none; }
  .fx-tags__input::placeholder { color: var(--fx-text-tertiary); }
  .fx-tags[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  .fx-tags[data-full] .fx-tags__input { display: none; }
  .fx-tags[data-disabled] { background: var(--fx-bg-muted); cursor: not-allowed; }
  .fx-field[data-invalid] .fx-tags { border-color: var(--fx-border-color-error); }
}

/* team */
@layer fx.components {
  /* Jamoa sahifasi / boʻlimi (4.177, naqsh): sarlavha bloki + aʼzolar toʻri (rasm yoki bosh harflar, ism, lavozim, qisqa bio,
     ijtimoiy havolalar) + oxirida «Bizga qoʻshiling» kartasi (karyera sahifasiga). Rasm yoʻq boʻlsa — .fx-team__photo ichida
     bosh harflar pastel fonda (data-color). data-layout: grid (standart — katta kartalar) · compact (kichik doira, koʻp odam). */
  .fx-team { display: grid; gap: var(--fx-space-10); }
  .fx-team__head { display: grid; justify-items: center; gap: var(--fx-space-3); max-inline-size: calc(var(--fx-dialog-width) * 1.4); margin-inline: auto; text-align: center; }
  .fx-team__eyebrow { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-semibold); }
  .fx-team__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: var(--fx-line-height-tight); letter-spacing: -0.02em; text-wrap: balance; color: var(--fx-text-primary); }
  .fx-team__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); text-wrap: pretty; }
  .fx-team__list { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, calc(var(--fx-space-12) * 5)), 1fr)); gap: var(--fx-space-8) var(--fx-space-6); margin: 0; padding: 0; list-style: none; }
  .fx-team__member { display: grid; align-content: start; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-team__photo {
    display: grid;
    place-items: center;
    aspect-ratio: 4 / 5;
    margin-block-end: var(--fx-space-3);
    overflow: hidden;
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-muted);
    color: var(--fx-text-on-category);
    font-family: var(--fx-font-family-display);
    font-size-adjust: var(--fx-font-adjust-display);
    font-size: var(--fx-font-size-display-md);
    font-weight: var(--fx-font-weight-semibold);
  }
  .fx-team__photo > img { inline-size: 100%; block-size: 100%; object-fit: cover; filter: grayscale(0.2); transition: filter var(--fx-motion-base) var(--fx-ease-standard), scale var(--fx-motion-slow) var(--fx-ease-standard); }
  .fx-team__member:hover .fx-team__photo > img { filter: none; scale: 1.03; }
  .fx-team__photo[data-color="yellow"] { background: var(--fx-bg-category-yellow); }
  .fx-team__photo[data-color="pink"] { background: var(--fx-bg-category-pink); }
  .fx-team__photo[data-color="blue"] { background: var(--fx-bg-category-blue); }
  .fx-team__photo[data-color="coral"] { background: var(--fx-bg-category-coral); }
  .fx-team__photo[data-color="green"] { background: var(--fx-bg-category-green); }
  .fx-team__photo[data-color="purple"] { background: var(--fx-bg-category-purple); }
  .fx-team__name { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); }
  .fx-team__role { margin: 0; color: var(--fx-text-brand); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-team__bio { margin: var(--fx-space-1) 0 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-wrap: pretty; }
  .fx-team__links { display: flex; flex-wrap: wrap; gap: var(--fx-space-1); margin: var(--fx-space-2) 0 0; padding: 0; list-style: none; }
  .fx-team__link {
    display: inline-grid;
    place-items: center;
    min-inline-size: var(--fx-size-min-target);
    min-block-size: var(--fx-size-min-target);
    padding: 0 var(--fx-space-2);
    border-radius: var(--fx-radius-control);
    color: var(--fx-text-tertiary);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-medium);
    text-decoration: none;
    transition: color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-team__link:hover { background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  .fx-team__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-team__link > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  /* «Bizga qoʻshiling» — chiziqli boʻsh karta, toʻrning oxirida */
  .fx-team__join {
    display: grid;
    align-content: center;
    justify-items: start;
    gap: var(--fx-space-3);
    padding: var(--fx-space-6);
    border: var(--fx-border-width-default) dashed var(--fx-border-color-strong);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-subtle);
  }
  .fx-team__join-title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); }
  .fx-team__join-text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }

  /* compact: doira rasm, markazda, koʻproq ustun */
  .fx-team[data-layout="compact"] .fx-team__list { grid-template-columns: repeat(auto-fill, minmax(min(100%, calc(var(--fx-space-12) * 3.5)), 1fr)); gap: var(--fx-space-6) var(--fx-space-4); }
  .fx-team[data-layout="compact"] .fx-team__member { justify-items: center; text-align: center; }
  .fx-team[data-layout="compact"] .fx-team__photo { inline-size: calc(var(--fx-space-12) * 2); aspect-ratio: 1; border-radius: var(--fx-radius-circle); font-size: var(--fx-font-size-xl); }
  .fx-team[data-layout="compact"] .fx-team__name { font-size: var(--fx-font-size-md); }
  .fx-team[data-layout="compact"] .fx-team__links { justify-content: center; }
  .fx-team[data-layout="compact"] .fx-team__join { justify-items: center; text-align: center; }
}

/* terminal */
@layer fx.components {
  /* Terminal oynasi (4.74): npm/CLI buyruqlarini koʻrsatish — oyna sarlavhasi (uchta nuqta + nom), buyruq va natija qatorlari.
     foxui.js (data-fx-terminal) koʻrinishga kirganda buyruqlarni harfma-harf «yozadi» (clip-path + steps — matn DOM’da toʻliq,
     ekran oʻquvchi va nusxalash buzilmaydi), natija qatorlari ketma-ket chiqadi. Harakat kamaytirilsa — hammasi darhol.
     Rang: doim qorongʻi yuza (terminal oʻxshashligi), matn — mono shrift; ildizga data-fx-scheme="dark" qoʻyilsa ichidagi tugmalar ham qorongʻi tokenlarni oladi. */
  .fx-terminal {
    --_bg: color-mix(in oklab, var(--fx-color-neutral-950) 96%, var(--fx-bg-brand-solid));
    --_fg: var(--fx-color-neutral-100);
    --_dim: var(--fx-color-neutral-400);
    display: grid;
    overflow: hidden;
    border: var(--fx-border-width-default) solid color-mix(in oklab, var(--fx-color-neutral-100) 12%, transparent);
    border-radius: var(--fx-radius-surface);
    background: var(--_bg);
    color: var(--_fg);
    box-shadow: var(--fx-shadow-lg);
    color-scheme: dark;
  }
  .fx-terminal__bar {
    display: flex;
    align-items: center;
    gap: var(--fx-space-2);
    padding: var(--fx-space-3) var(--fx-space-4);
    border-block-end: var(--fx-border-width-default) solid color-mix(in oklab, var(--fx-color-neutral-100) 8%, transparent);
  }
  .fx-terminal__dots { display: flex; gap: calc(var(--fx-space-1) * 1.5); }
  .fx-terminal__dots > i { inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border-radius: var(--fx-radius-circle); background: color-mix(in oklab, var(--fx-color-neutral-100) 22%, transparent); }
  .fx-terminal[data-dots="color"] .fx-terminal__dots > i:nth-child(1) { background: var(--fx-color-pastel-coral); }
  .fx-terminal[data-dots="color"] .fx-terminal__dots > i:nth-child(2) { background: var(--fx-color-pastel-yellow); }
  .fx-terminal[data-dots="color"] .fx-terminal__dots > i:nth-child(3) { background: var(--fx-color-pastel-green); }
  .fx-terminal__title { flex: 1; margin: 0; color: var(--_dim); font-size: var(--fx-font-size-xs); text-align: center; }
  .fx-terminal__body {
    display: grid;
    align-content: start;
    gap: calc(var(--fx-space-1) * 1.5);
    margin: 0;
    padding: var(--fx-space-4) var(--fx-space-5) var(--fx-space-5);
    overflow-x: auto;
    font-family: var(--fx-font-family-mono);
    font-size-adjust: var(--fx-font-adjust-mono);
    font-size: var(--fx-font-size-sm);
    line-height: 1.6;
  }
  .fx-terminal__line { display: block; min-inline-size: max-content; white-space: pre; }
  .fx-terminal__line[data-kind="cmd"]::before { content: "$ "; color: var(--fx-color-pastel-green); }
  .fx-terminal__line[data-kind="out"] { color: var(--_dim); }
  .fx-terminal__line[data-kind="ok"] { color: var(--fx-color-pastel-green); }
  .fx-terminal__line[data-kind="ok"]::before { content: "✓ "; }
  .fx-terminal__line[data-kind="err"] { color: var(--fx-color-pastel-coral); }
  .fx-terminal__line[data-kind="err"]::before { content: "✕ "; }
  .fx-terminal__line[data-kind="info"] { color: var(--fx-color-pastel-blue); }
  /* yozish animatsiyasi — JS --_n (harflar soni), --_t (davomiylik), --_d (kechikish) beradi */
  .fx-terminal[data-armed]:not([data-in]) .fx-terminal__line { opacity: 0; }
  .fx-terminal[data-in] .fx-terminal__line { animation: fx-terminal-show var(--fx-motion-fast) var(--fx-ease-enter) var(--_d, 0s) both; }
  .fx-terminal[data-in] .fx-terminal__line[data-kind="cmd"] { animation: fx-terminal-type var(--_t, 0s) steps(var(--_n, 1)) var(--_d, 0s) both; }
  .fx-terminal__caret { display: inline-block; inline-size: 0.6em; block-size: 1.15em; vertical-align: text-bottom; margin-inline-start: calc(var(--fx-space-1) / 2); background: var(--_fg); opacity: 0.75; animation: fx-terminal-blink var(--fx-duration-pulse) steps(1) infinite; }
  .fx-terminal__prompt { display: block; }
  .fx-terminal__prompt::before { content: "$ "; color: var(--fx-color-pastel-green); }
  .fx-terminal[data-armed]:not([data-done]) .fx-terminal__prompt { visibility: hidden; }
  .fx-terminal[data-paused] .fx-terminal__caret { animation-play-state: paused; }
  @keyframes fx-terminal-type { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
  @keyframes fx-terminal-show { from { opacity: 0; translate: 0 var(--fx-motion-shift-sm); } }
  @keyframes fx-terminal-blink { 50% { opacity: 0; } }
  [data-fx-motion="none"] .fx-terminal__caret { animation: none; }
  @media (prefers-reduced-motion: reduce) { .fx-terminal__caret { animation: none; } }
  @media (forced-colors: active) { .fx-terminal { border-color: CanvasText; } }
}

/* testimonials */
@layer fx.components {
  /* Mijozlar fikri (4.172): sarlavha + iqtibos kartalari (matn, ixtiyoriy yulduzlar, avatar, ism, lavozim).
     data-layout: grid (standart — ustunlar, balandlik har xil, zich), featured (bitta katta iqtibos markazda).
     Marquee bilan: kartalar .fx-marquee__track ichida — eni qotiriladi. */
  .fx-testimonials { display: grid; gap: var(--fx-space-10); }
  .fx-testimonials__head { display: grid; justify-items: center; gap: var(--fx-space-3); max-inline-size: calc(var(--fx-dialog-width) * 1.5); margin-inline: auto; text-align: center; }
  .fx-testimonials__title { margin: 0; font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-display-sm); font-weight: var(--fx-font-weight-semibold); line-height: 1.15; letter-spacing: -0.02em; text-wrap: balance; }
  .fx-testimonials__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-md); }
  .fx-testimonials__grid { columns: 3 calc(var(--fx-popover-width) * 0.85); column-gap: var(--fx-space-4); margin: 0; padding: 0; list-style: none; }
  .fx-testimonials__grid > li { break-inside: avoid; margin-block-end: var(--fx-space-4); }
  .fx-testimonials__item {
    display: grid;
    gap: var(--fx-space-4);
    margin: 0;
    padding: var(--fx-space-6);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-surface);
    box-shadow: var(--fx-shadow-sm);
  }
  .fx-testimonials__rating { display: flex; gap: calc(var(--fx-space-1) / 2); color: var(--fx-color-pastel-yellow); font-size: var(--fx-font-size-md); line-height: 1; letter-spacing: 0.08em; }
  .fx-testimonials__quote { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-md); line-height: 1.6; text-wrap: pretty; }
  .fx-testimonials__quote > p { margin: 0; }
  .fx-testimonials__quote mark { padding-inline: calc(var(--fx-space-1) / 2); border-radius: var(--fx-radius-badge); background: color-mix(in oklab, var(--fx-viz-accent) 55%, transparent); color: inherit; }
  .fx-testimonials__author { display: flex; align-items: center; gap: var(--fx-space-3); min-inline-size: 0; }
  .fx-testimonials__name { display: block; font-size: var(--fx-font-size-sm); font-style: normal; font-weight: var(--fx-font-weight-semibold); }
  .fx-testimonials__role { display: block; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  /* bitta katta iqtibos */
  .fx-testimonials[data-layout="featured"] .fx-testimonials__item { justify-items: center; max-inline-size: calc(var(--fx-dialog-width) * 1.7); margin-inline: auto; padding: var(--fx-space-10) var(--fx-space-8); border: 0; background: transparent; box-shadow: none; text-align: center; }
  .fx-testimonials[data-layout="featured"] .fx-testimonials__quote { font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); font-size: var(--fx-font-size-xl); line-height: 1.45; letter-spacing: -0.01em; text-wrap: balance; }
  .fx-testimonials[data-layout="featured"] .fx-testimonials__quote::before { content: "“"; display: block; color: var(--fx-text-brand); font-size: var(--fx-font-size-display-md); line-height: 0.7; }
  .fx-testimonials[data-layout="featured"] .fx-testimonials__author { flex-direction: column; gap: var(--fx-space-2); }
  /* marquee ichida — eni qotiriladi */
  .fx-marquee .fx-testimonials__item { inline-size: calc(var(--fx-popover-width) * 1.05); white-space: normal; }
  .fx-marquee[data-orientation="vertical"] .fx-testimonials__item { inline-size: auto; }
  @media (forced-colors: active) { .fx-testimonials__item { border-color: CanvasText; } }
}

/* text */
@layer fx.components {
  /* Matn uslubi: oʻlcham, ohang, vazn, qisqartirish. Vizual daraja ≠ semantik teg. */
  .fx-text { margin: 0; font-size: var(--fx-font-size-md); line-height: 1.5; color: var(--fx-text-primary); }
  .fx-text[data-size="lg"] { font-size: var(--fx-font-size-lg); line-height: 1.5; }
  .fx-text[data-size="sm"] { font-size: var(--fx-font-size-sm); }
  .fx-text[data-size="caption"] { font-size: var(--fx-font-size-xs); line-height: 1.4; }
  .fx-text[data-tone="secondary"], .fx-muted { color: var(--fx-text-secondary); }
  .fx-text[data-tone="tertiary"] { color: var(--fx-text-tertiary); }
  .fx-text[data-tone="brand"] { color: var(--fx-text-brand); }
  .fx-text[data-tone="info"] { color: var(--fx-fg-info); }
  .fx-text[data-tone="success"] { color: var(--fx-fg-success); }
  .fx-text[data-tone="warning"] { color: var(--fx-fg-warning); }
  .fx-text[data-tone="error"] { color: var(--fx-fg-error); }
  .fx-text[data-weight="regular"] { font-weight: var(--fx-font-weight-regular); }
  .fx-text[data-weight="medium"] { font-weight: var(--fx-font-weight-medium); }
  .fx-text[data-weight="semibold"] { font-weight: var(--fx-font-weight-semibold); }
  .fx-text[data-numeric] { font-variant-numeric: tabular-nums; }
  .fx-text[data-wrap="balance"] { text-wrap: balance; }
  .fx-text[data-wrap="pretty"] { text-wrap: pretty; }
  /* Bir qatorga qisqartirish yoki N qatordan keyin «…» */
  .fx-text[data-truncate] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-text[data-clamp] { display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; }
  .fx-text[data-clamp="2"] { -webkit-line-clamp: 2; line-clamp: 2; }
  .fx-text[data-clamp="3"] { -webkit-line-clamp: 3; line-clamp: 3; }
  .fx-text[data-clamp="4"] { -webkit-line-clamp: 4; line-clamp: 4; }
  /* Yordamchi: ikkinchi darajali matn va yuqori yorliq */
  .fx-muted { font-size: var(--fx-font-size-sm); }
  .fx-eyebrow { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); letter-spacing: 0.06em; text-transform: uppercase; }
}

/* textfx */
@layer fx.components {
  /* Matn effektlari (4.44, 4.45, 4.46, 4.48; 5-toʻlqin: 4.47 shine, 4.49 gradient, 4.50 scramble, 4.51 morph) — sarlavha va hero uchun; xulq foxui.js (data-fx-textfx).
     type — harfma-harf yoziladi, kursor miltillaydi · rotate — bitta soʻz navbat bilan almashadi · split — soʻzlar (yoki harflar)
     pogʻonali blur-fade bilan chiqadi · mark — soʻz ostiga marker chiziladi. Ekran oʻquvchi toʻliq matnni darhol oladi.
     JS boʻlmasa yoki harakat kamaytirilsa — oddiy, toʻliq koʻrinadigan matn (hech qachon yashirin qolmaydi). */
  .fx-textfx { --_mark: color-mix(in oklab, var(--fx-viz-accent) 75%, transparent); }

  /* type: yozilgan qism + miltillovchi kursor */
  .fx-textfx[data-effect="type"] { white-space: pre-wrap; }
  .fx-textfx__live { white-space: pre-wrap; }
  .fx-textfx__caret {
    display: inline-block;
    inline-size: calc(var(--fx-border-width-focus) * 1.5);
    block-size: 1em;
    margin-inline-start: calc(var(--fx-space-1) / 2);
    vertical-align: -0.12em;
    border-radius: var(--fx-radius-badge);
    background: currentColor;
    animation: fx-textfx-blink var(--fx-duration-pulse) steps(1) infinite;
  }
  .fx-textfx[data-typing] .fx-textfx__caret { animation: none; }
  @keyframes fx-textfx-blink { 50% { opacity: 0; } }

  /* rotate: soʻzlar bir katakda ustma-ust (eng uzun soʻz eni — sakrash yoʻq); faol soʻz pastdan chiqadi, eskisi tepaga ketadi */
  .fx-textfx[data-effect="rotate"] { display: inline-grid; vertical-align: bottom; color: var(--fx-text-brand); }
  .fx-textfx[data-effect="rotate"] > .fx-textfx__word { grid-area: 1 / 1; white-space: nowrap; }
  .fx-textfx[data-effect="rotate"][data-fx-ready~="textfx"] > .fx-textfx__word {
    opacity: 0;
    translate: 0 0.45em;
    filter: blur(calc(var(--fx-space-1) * var(--fx-knob-motion)));
    transition: opacity var(--fx-motion-slow) var(--fx-ease-emphasized), translate var(--fx-motion-slow) var(--fx-ease-emphasized), filter var(--fx-motion-slow) var(--fx-ease-emphasized);
  }
  .fx-textfx[data-effect="rotate"][data-fx-ready~="textfx"] > .fx-textfx__word[data-was] { translate: 0 -0.45em; transition-timing-function: var(--fx-ease-exit); transition-duration: var(--fx-motion-exit-base); }
  .fx-textfx[data-effect="rotate"][data-fx-ready~="textfx"] > .fx-textfx__word[data-active] { opacity: 1; translate: 0 0; filter: none; }
  .fx-textfx[data-effect="rotate"]:not([data-fx-ready~="textfx"]) > .fx-textfx__word:not(:first-child) { visibility: hidden; }
  .fx-textfx[data-tone="inherit"] { color: inherit; }

  /* split: JS har soʻzni (yoki harfni) .fx-textfx__part ga oʻraydi va --_i tartibini beradi; koʻrinishga kirganda data-in */
  .fx-textfx__part { display: inline-block; white-space: pre; }
  .fx-textfx[data-effect="split"][data-armed]:not([data-in]) .fx-textfx__part { opacity: 0; }
  .fx-textfx[data-effect="split"][data-in] .fx-textfx__part {
    animation: fx-textfx-rise calc(var(--fx-motion-slower) * 1.2) var(--fx-ease-emphasized) both;
    animation-delay: calc(var(--fx-duration-stagger) * 2.5 * var(--_i, 0) * var(--fx-knob-motion));
  }
  .fx-textfx[data-effect="split"][data-by="char"][data-in] .fx-textfx__part { animation-delay: calc(var(--fx-duration-stagger) * 0.8 * var(--_i, 0) * var(--fx-knob-motion)); }
  @keyframes fx-textfx-rise { from { opacity: 0; translate: 0 0.35em; filter: blur(calc(var(--fx-space-2) * var(--fx-knob-motion))); } }

  /* mark: marker foni chapdan oʻngga chiziladi (koʻrinishga kirganda); data-variant="underline" — pastki uchdan bir qismi */
  .fx-textfx[data-effect="mark"] {
    padding-inline: calc(var(--fx-space-1) / 2);
    margin-inline: calc(var(--fx-space-1) / -2);
    border-radius: var(--fx-radius-badge);
    color: inherit;
    background: linear-gradient(var(--_mark), var(--_mark)) 0 100% / 100% 100% no-repeat;
    box-decoration-break: clone;
    -webkit-box-decoration-break: clone;
    transition: background-size calc(var(--fx-motion-slower) * 1.6) var(--fx-ease-emphasized);
  }
  .fx-textfx[data-effect="mark"][data-variant="underline"] { background-size: 100% 0.38em; }
  .fx-textfx[data-effect="mark"][data-armed]:not([data-in]) { background-size: 0% 100%; }
  .fx-textfx[data-effect="mark"][data-variant="underline"][data-armed]:not([data-in]) { background-size: 0% 0.38em; }
  .fx-textfx[data-effect="mark"][data-color="pink"] { --_mark: color-mix(in oklab, var(--fx-bg-category-pink) 80%, transparent); }
  .fx-textfx[data-effect="mark"][data-color="blue"] { --_mark: color-mix(in oklab, var(--fx-bg-category-blue) 80%, transparent); }
  .fx-textfx[data-effect="mark"][data-color="green"] { --_mark: color-mix(in oklab, var(--fx-bg-category-green) 80%, transparent); }

  /* --- 4.47 shine: matn ustidan nur oʻtadi (thinking shimmer’ning umumiy shakli). Asos — ikkilamchi matn rangi, nur — asosiy rang.
     Cheksiz — faqat JS ulanganda va koʻrinishda (data-paused); JS’siz, reduced-motion va none’da — oddiy asos rangli matn. */
  .fx-textfx[data-effect="shine"] {
    --_base: var(--fx-text-secondary);
    --_hi: var(--fx-text-primary);
    color: var(--_base);
  }
  .fx-textfx[data-effect="shine"][data-tone="brand"] { --_base: color-mix(in oklab, var(--fx-text-brand) 65%, var(--fx-bg-surface)); --_hi: var(--fx-text-brand); }
  .fx-textfx[data-effect="shine"][data-fx-ready~="textfx"]:not([data-still]) {
    color: transparent;
    background: linear-gradient(100deg, var(--_base) 42%, var(--_hi) 50%, var(--_base) 58%) 100% 0 / 300% 100% no-repeat;
    -webkit-background-clip: text;
    background-clip: text;
    animation: fx-textfx-shine calc(var(--fx-duration-shimmer) * 1.8) var(--fx-ease-standard) infinite;
  }
  @keyframes fx-textfx-shine { from { background-position: 100% 0; } to { background-position: 0 0; } }

  /* --- 4.49 gradient: mavzu ranglaridan gradient bilan boʻyalgan matn (brend matn rangi toifa ranglari bilan aralashtiriladi — kontrast saqlanadi).
     data-flow — gradient sekin oqadi (faqat JS bilan, koʻrinishda). data-color="warm" — iliq ranglar. */
  .fx-textfx[data-effect="gradient"] {
    --_g1: var(--fx-text-brand);
    --_g2: color-mix(in oklab, var(--fx-text-brand) 55%, var(--fx-bg-category-pink));
    --_g3: color-mix(in oklab, var(--fx-text-brand) 55%, var(--fx-bg-category-blue));
    color: transparent;
    background: linear-gradient(90deg, var(--_g1), var(--_g2), var(--_g3), var(--_g1)) 0 0 / 300% 100%;
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
  }
  .fx-textfx[data-effect="gradient"][data-color="warm"] {
    --_g1: color-mix(in oklab, var(--fx-text-brand) 60%, var(--fx-bg-category-coral));
    --_g2: color-mix(in oklab, var(--fx-text-brand) 55%, var(--fx-bg-category-yellow));
    --_g3: color-mix(in oklab, var(--fx-text-brand) 55%, var(--fx-bg-category-pink));
  }
  .fx-textfx[data-effect="gradient"][data-flow][data-fx-ready~="textfx"]:not([data-still]) { animation: fx-textfx-flow calc(var(--fx-duration-shimmer) * 5) var(--fx-ease-standard) infinite alternate; }
  @keyframes fx-textfx-flow { to { background-position: 100% 0; } }
  .fx-textfx:is([data-effect="shine"], [data-effect="gradient"])[data-paused] { animation-play-state: paused; }

  /* --- 4.50 scramble: harflar tasodifiy belgilardan asl matnga «yechiladi». Arvoh nusxa (koʻrinmas) eni ushlab turadi — matn
     sakramaydi; ekran oʻquvchi asl matnni .fx-sr-only’dan oladi. */
  .fx-textfx__scramble { display: inline-grid; }
  .fx-textfx__scramble > * { grid-area: 1 / 1; white-space: pre; }
  .fx-textfx__ghost { visibility: hidden; }
  .fx-textfx[data-effect="scramble"] { font-variant-numeric: tabular-nums; }
  .fx-textfx[data-effect="scramble"][data-mono] { font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); }
  .fx-textfx[data-effect="scramble"][data-scrambling] .fx-textfx__live { color: var(--fx-text-brand); }

  /* --- 4.51 morph: bir soʻz ikkinchisiga blur orqali eriydi (siljishsiz, ustma-ust). Eng uzun soʻz eni saqlanadi. */
  .fx-textfx[data-effect="morph"] { display: inline-grid; vertical-align: bottom; }
  .fx-textfx[data-effect="morph"] > .fx-textfx__word { grid-area: 1 / 1; white-space: nowrap; justify-self: start; }
  .fx-textfx[data-effect="morph"][data-align="center"] > .fx-textfx__word { justify-self: center; }
  .fx-textfx[data-effect="morph"][data-fx-ready~="textfx"] > .fx-textfx__word {
    opacity: 0;
    filter: blur(calc(var(--fx-space-2) * var(--fx-knob-motion)));
    scale: calc(1 - (1 - var(--fx-motion-scale-enter)) * var(--fx-knob-motion));
    transition: opacity calc(var(--fx-motion-slower) * 1.4) var(--fx-ease-standard), filter calc(var(--fx-motion-slower) * 1.4) var(--fx-ease-standard), scale calc(var(--fx-motion-slower) * 1.4) var(--fx-ease-emphasized);
  }
  .fx-textfx[data-effect="morph"][data-fx-ready~="textfx"] > .fx-textfx__word[data-active] { opacity: 1; filter: none; scale: 1; }
  .fx-textfx[data-effect="morph"]:not([data-fx-ready~="textfx"]) > .fx-textfx__word:not(:first-child) { visibility: hidden; }

  [data-fx-motion="none"] .fx-textfx__caret { animation: none; }
  @media (prefers-reduced-motion: reduce) { .fx-textfx__caret { animation: none; } }
  @media (forced-colors: active) {
    .fx-textfx[data-effect="mark"] { background: Mark; color: MarkText; }
    .fx-textfx:is([data-effect="shine"], [data-effect="gradient"]) { background: none; color: CanvasText; animation: none; }
  }
}

/* theme-switcher */
@layer fx.components {
  /* Mavzu almashtirgich (#154): Yorugʻ / Qorongʻi / Tizim — fx-segment ustiga qurilgan (qobiq va tanlov sirpanishi shundan).
     Ikonli ixcham koʻrinish: [data-variant="icon"] — yorliq faqat ekran oʻquvchi uchun. Xulq — foxui.js (data-fx-themeswitch). */
  .fx-theme-switcher__icon { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-theme-switcher[data-variant="icon"] .fx-segment__item { padding-inline: var(--fx-space-2); }
  .fx-theme-switcher[data-variant="icon"] .fx-theme-switcher__label { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  /* Aylana ochilish (4-toʻlqin 4.30, data-reveal="circle"): yangi mavzu bosilgan tugmadan aylana boʻlib yoyiladi
     (View Transitions + clip-path, xulq — themeswitch). Qoʻllanmasa yoki harakat kamaytirilsa — darhol almashadi. */
  html:root[data-fx-vt-reveal]::view-transition-old(root),
  html:root[data-fx-vt-reveal]::view-transition-new(root) { animation: none; mix-blend-mode: normal; }
  html:root[data-fx-vt-reveal]::view-transition-new(root) { z-index: var(--fx-z-raised); }
}

/* thinking */
@layer fx.components {
  /* «Oʻylayapti…» — uchqun ikon + shimmer matn (.fx-shimmer-text); oqim matni oxirida miltillovchi kursor ▍.
     Kursor harakati reduced-motion’da oʻchadi (kursor oʻzi koʻrinib turadi). */
  .fx-thinking { display: inline-flex; align-items: center; gap: var(--fx-space-2); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); }
  .fx-thinking > svg { flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: none; stroke: var(--fx-text-brand); stroke-width: 2; stroke-linejoin: round; animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-thinking__caret { display: inline-block; inline-size: var(--fx-space-2); block-size: 1.1em; margin-inline-start: var(--fx-space-1); vertical-align: text-bottom; background: var(--fx-text-brand); animation: fx-caret-blink var(--fx-duration-pulse) steps(1, end) infinite; }
  @keyframes fx-caret-blink { 50% { opacity: 0; } }
  @media (prefers-reduced-motion: reduce) { .fx-thinking > svg, .fx-thinking__caret { animation: none; } }
}

/* tilt */
@layer fx.components {
  /* 3D egilish karta (4.53, Aceternity 3D Card Effect / Comet Card): kursor qaysi tomonda boʻlsa, karta perspektivada oʻsha tomonga
     egiladi; ichidagi [data-depth] qismlar oldinga chiqadi (qatlamli chuqurlik). data-fx-tilt="glare" — egilish bilan birga
     kursor ortidan yumshoq yaltirash. Burchak --fx-tilt-x/--fx-tilt-y (JS, behaviors/tilt.js), chiqishda prujina bilan tekislanadi.
     Faqat aniq koʻrsatkichda (sichqoncha) — barmoq va klaviaturada karta tekis turadi, hech narsa yoʻqolmaydi.
     Harakat kamaytirilsa, calm yoki none rejimda egilmaydi. */
  [data-fx-tilt] {
    --fx-tilt-x: 0deg;
    --fx-tilt-y: 0deg;
    --fx-tilt-gx: 50%;
    --fx-tilt-gy: 50%;
    --_lift: 0;
    --_persp: calc(var(--fx-space-12) * 20);
    transform: perspective(var(--_persp)) rotateX(var(--fx-tilt-x)) rotateY(var(--fx-tilt-y));
    transform-style: preserve-3d;
    transition: transform var(--fx-motion-slower) var(--fx-ease-spring), box-shadow var(--fx-motion-base) var(--fx-ease-standard);
    will-change: transform;
  }
  [data-fx-tilt][data-tilting] { --_lift: 1; transition: transform var(--fx-motion-fast) var(--fx-ease-standard), box-shadow var(--fx-motion-base) var(--fx-ease-standard); box-shadow: var(--fx-shadow-lg); }
  /* chuqurlik: qism oldinga chiqadi (faqat egilayotganda) */
  [data-fx-tilt] [data-depth] { transform: translateZ(calc(var(--fx-space-4) * var(--_lift))); transition: transform var(--fx-motion-slow) var(--fx-ease-spring); }
  [data-fx-tilt] [data-depth="2"] { transform: translateZ(calc(var(--fx-space-8) * var(--_lift))); }
  [data-fx-tilt] [data-depth="3"] { transform: translateZ(calc(var(--fx-space-12) * var(--_lift))); }
  /* yaltirash: kursor ortidan yumshoq nur (faqat glare) */
  [data-fx-tilt="glare"] { position: relative; isolation: isolate; }
  [data-fx-tilt="glare"]::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    border-radius: inherit;
    background: radial-gradient(circle at var(--fx-tilt-gx) var(--fx-tilt-gy), color-mix(in oklab, var(--fx-bg-static-light) 55%, transparent), transparent 60%);
    mix-blend-mode: soft-light;
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--fx-motion-base) var(--fx-ease-standard);
  }
  [data-fx-tilt="glare"][data-tilting]::after { opacity: 1; }
  @media (forced-colors: active) { [data-fx-tilt] { transform: none; } [data-fx-tilt="glare"]::after { display: none; } }
}

/* timefield */
@layer fx.components {
  /* Vaqt maydoni (#5, 24 soat): soat : daqiqa segmentlari, har biri spinbutton (xulq: foxui.js → timefield) */
  .fx-timefield {
    --_h: var(--fx-control-h-md);
    display: inline-flex;
    justify-self: start;
    align-items: center;
    gap: var(--fx-space-1);
    box-sizing: border-box;
    block-size: var(--_h);
    padding-inline: var(--fx-space-3);
    background: var(--fx-bg-field);
    border: var(--fx-border-width-default) solid var(--fx-border-color-field);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-md);
    font-variant-numeric: tabular-nums;
    transition: border-color var(--fx-motion-fast) var(--fx-ease-standard), border-radius var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-timefield:hover { border-color: var(--fx-border-color-strong); }
  .fx-timefield:focus-within { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-timefield[data-size="sm"] { --_h: var(--fx-control-h-sm); font-size: var(--fx-font-size-sm); }
  .fx-timefield__seg { box-sizing: content-box; inline-size: 2ch; padding: calc(var(--fx-space-1) / 2) var(--fx-space-1); border: 0; border-radius: var(--fx-radius-badge); background: transparent; color: inherit; font: inherit; text-align: center; caret-color: transparent; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-timefield__seg::placeholder { color: var(--fx-text-tertiary); }
  .fx-timefield__seg:focus { outline: none; background: var(--fx-bg-brand-subtle); }
  .fx-timefield__sep { color: var(--fx-text-tertiary); }
  .fx-field[data-invalid] .fx-timefield { border-color: var(--fx-border-color-error); }
  .fx-timefield[aria-disabled="true"] { background: var(--fx-bg-muted); color: var(--fx-text-disabled); pointer-events: none; }
  /* ---- Siferblat va roʻyxat (4.103): maydon oxirida soat tugmasi → popover. Roʻyxat — 15 daqiqalik qadamlar (kompyuter),
     siferblat — soat (tashqi 12/1…11, ichki 00/13…23) keyin daqiqa (telefon). Tanlangan — toʻldirilgan doira + strelka (rangdan tashqari shakl). ---- */
  .fx-timefield__toggle { display: grid; place-items: center; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); margin-inline: auto calc(var(--fx-space-2) * -1); padding: 0; border: 0; border-radius: var(--fx-radius-control); background: transparent; color: var(--fx-text-tertiary); cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-timefield__toggle:hover, .fx-timefield__toggle[aria-expanded="true"] { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-timefield__toggle:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-timefield__toggle > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-timefield:has(.fx-timefield__toggle) { gap: var(--fx-space-1); }
  .fx-popover.fx-timefield__panel { padding: var(--fx-space-2); }
  .fx-timefield__panel[data-variant="list"] { max-block-size: calc(var(--fx-space-12) * 5); overflow: auto; inline-size: calc(var(--fx-space-12) * 2.5); outline: 0; }
  .fx-timefield__panel[data-variant="list"]:popover-open { display: grid; gap: calc(var(--fx-space-1) / 2); }
  .fx-timefield__opt { padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-nav); font-variant-numeric: tabular-nums; cursor: pointer; }
  .fx-timefield__opt:hover { background: var(--fx-bg-subtle); }
  .fx-timefield__opt[data-active] { background: var(--fx-bg-muted); outline: var(--fx-border-width-default) solid var(--fx-border-color-strong); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-timefield__opt[aria-selected="true"] { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-timefield__opt[aria-selected="true"]::after { content: " ✓"; }
  /* Siferblat */
  .fx-timefield__panel[data-variant="dial"]:popover-open { display: grid; justify-items: center; gap: var(--fx-space-3); padding: var(--fx-space-4); }
  .fx-timefield__readout { display: flex; align-items: center; gap: var(--fx-space-1); font-size: var(--fx-font-size-display-sm); font-variant-numeric: tabular-nums; }
  .fx-timefield__unit { padding: 0 var(--fx-space-2); border: 0; border-radius: var(--fx-radius-control); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font: inherit; cursor: pointer; }
  .fx-timefield__unit[aria-pressed="true"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-primary); font-weight: var(--fx-font-weight-semibold); }
  .fx-timefield__unit:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-timefield__face { --_d: calc(var(--fx-space-12) * 5); --_r: calc(var(--_d) / 2 - var(--fx-space-5)); --_ri: calc(var(--_r) - var(--fx-space-8)); position: relative; inline-size: var(--_d); block-size: var(--_d); border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); }
  .fx-timefield__face::after { content: ""; position: absolute; inset-block-start: 50%; inset-inline-start: 50%; inline-size: var(--fx-space-2); block-size: var(--fx-space-2); translate: -50% -50%; border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); }
  .fx-timefield__num {
    --_a: calc(var(--_i, 0) * 30deg);
    --_rr: var(--_r);
    position: absolute;
    inset-block-start: 50%;
    inset-inline-start: 50%;
    display: grid;
    place-items: center;
    inline-size: var(--fx-size-control-sm);
    block-size: var(--fx-size-control-sm);
    padding: 0;
    border: 0;
    border-radius: var(--fx-radius-circle);
    background: transparent;
    color: var(--fx-text-primary);
    font: inherit;
    font-size: var(--fx-font-size-sm);
    font-variant-numeric: tabular-nums;
    translate: calc(-50% + sin(var(--_a)) * var(--_rr)) calc(-50% - cos(var(--_a)) * var(--_rr));
    cursor: pointer;
    z-index: 1;
  }
  .fx-timefield__num[data-inner] { --_rr: var(--_ri); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-timefield__num:hover { background: var(--fx-bg-subtle); }
  .fx-timefield__num[aria-checked="true"] { background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); font-weight: var(--fx-font-weight-semibold); }
  .fx-timefield__num:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-timefield__hand { --_rr: var(--_r); position: absolute; inset-block-end: 50%; inset-inline-start: calc(50% - var(--fx-border-width-focus) / 2); inline-size: var(--fx-border-width-focus); block-size: var(--_rr); transform-origin: 50% 100%; rotate: calc(var(--_i, 0) * 30deg); background: var(--fx-bg-brand-solid); pointer-events: none; transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-timefield__hand[data-inner] { --_rr: var(--_ri); }
}

/* timeline */
@layer fx.components {
  /* Faoliyat lentasi: vertikal chiziq, belgi (nuqta, ikon yoki avatar), kim/nima, vaqt, ilova. <ol> */
  .fx-timeline { --_m: var(--fx-size-icon-lg); display: grid; margin: 0; padding: 0; list-style: none; font-size: var(--fx-font-size-sm); }
  .fx-timeline__item { position: relative; display: grid; grid-template-columns: var(--_m) minmax(0, 1fr); column-gap: var(--fx-space-3); padding-block-end: var(--fx-space-5); }
  .fx-timeline__item:last-child { padding-block-end: 0; }
  .fx-timeline__item:not(:last-child)::before { content: ""; position: absolute; inset-block: var(--_m) 0; inset-inline-start: calc(var(--_m) / 2); inline-size: var(--fx-border-width-default); translate: -50% 0; background: var(--fx-border-color-default); }
  .fx-timeline__marker { position: relative; z-index: 1; display: grid; place-items: center; inline-size: var(--_m); block-size: var(--_m); color: var(--fx-text-tertiary); }
  .fx-timeline__marker:empty::before { content: ""; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); box-sizing: border-box; border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); }
  .fx-timeline__marker > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); padding: var(--fx-space-1); box-sizing: content-box; border-radius: var(--fx-radius-circle); background: var(--fx-bg-muted); }
  .fx-timeline__marker > .fx-avatar { --fx-avatar-ring: var(--fx-bg-surface); --_s: var(--_m); }
  .fx-timeline__content { display: grid; gap: var(--fx-space-1); min-inline-size: 0; padding-block-start: calc((var(--_m) - var(--fx-font-size-sm) * 1.5) / 2); }
  .fx-timeline__title { margin: 0; color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); overflow-wrap: anywhere; }
  .fx-timeline__text { margin: 0; color: var(--fx-text-secondary); }
  .fx-timeline__time { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-timeline__extra { margin-block-start: var(--fx-space-2); padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-control); background: var(--fx-bg-subtle); color: var(--fx-text-secondary); }
  /* Guruh sarlavhasi: Bugun / Kecha */
  .fx-timeline__group { padding-block: var(--fx-space-3); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-tertiary); }
  /* Holatlar: shakl + soʻz (title ichida) */
  .fx-timeline__item[data-state="pending"] .fx-timeline__marker:empty::before { background: transparent; border: var(--fx-border-width-focus) dashed var(--fx-text-secondary); box-shadow: none; animation: fx-timeline-spin var(--fx-duration-spin) linear infinite; }
  .fx-timeline__item[data-state="error"] .fx-timeline__marker:empty::before { border-radius: 0; rotate: 45deg; background: var(--fx-fg-error); }
  .fx-timeline__item[data-state="error"] .fx-timeline__title { color: var(--fx-text-error); }
  .fx-timeline__item[data-state="done"] .fx-timeline__marker:empty::before { background: var(--fx-fg-success); }
  @keyframes fx-timeline-spin { to { rotate: 360deg; } }
  @media (prefers-reduced-motion: reduce) { .fx-timeline__item[data-state="pending"] .fx-timeline__marker:empty::before { animation: none; } }
  .fx-timeline[data-density="compact"] { --_m: var(--fx-size-icon-md); font-size: var(--fx-font-size-xs); }
  .fx-timeline[data-density="compact"] .fx-timeline__item { padding-block-end: var(--fx-space-3); }
}

/* timeslots */
@layer fx.components {
  /* Vaqt slotlari toʻri (4.85): bron/uchrashuv uchun boʻsh vaqtlar — tugmasimon radio. Native radio: ← → ↑ ↓ guruh ichida yuradi,
     band (disabled) slot oʻtkazib yuboriladi. Holatlar faqat rangda emas: tanlangan — toʻldirilgan + ✓, band — chizilgan + «band» soʻzi,
     oz qolgan — «2 joy» yozuvi. Kalendar (fx-calendar) bilan yonma-yon ishlatiladi. */
  .fx-timeslots { --_cols: 4; --_h: var(--fx-control-h-md); display: grid; gap: var(--fx-space-4); min-inline-size: 0; margin: 0; padding: 0; border: 0; color: var(--fx-text-primary); }
  .fx-timeslots[data-columns="3"] { --_cols: 3; }
  .fx-timeslots[data-columns="6"] { --_cols: 6; }
  .fx-timeslots[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  .fx-timeslots__head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--fx-space-1) var(--fx-space-3); }
  .fx-timeslots__title { float: left; padding: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-timeslots__title + * { clear: left; }
  .fx-timeslots__meta { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-timeslots__group { display: grid; gap: var(--fx-space-2); }
  .fx-timeslots__label { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-timeslots__grid { display: grid; grid-template-columns: repeat(var(--_cols), minmax(0, 1fr)); gap: var(--fx-space-2); }
  .fx-timeslots[data-layout="list"] .fx-timeslots__grid { grid-template-columns: minmax(0, 1fr); max-block-size: calc(var(--_h) * 7 + var(--fx-space-2) * 6); overflow-y: auto; padding-inline-end: var(--fx-space-1); }
  .fx-timeslots__slot {
    position: relative;
    display: grid;
    place-content: center;
    justify-items: center;
    min-block-size: var(--_h);
    box-sizing: border-box;
    padding-inline: var(--fx-space-2);
    border: var(--fx-border-width-default) solid var(--fx-border-color-strong);
    border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control));
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-medium);
    font-variant-numeric: tabular-nums;
    line-height: 1.15;
    cursor: pointer;
    transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), border-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-timeslots__slot > input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: inherit; }
  .fx-timeslots__slot:hover:not(:has(:disabled, :checked)) { border-color: var(--fx-border-color-focus); background: var(--fx-bg-brand-subtle); }
  .fx-timeslots__slot:active:not(:has(:disabled)) { scale: var(--fx-motion-press); }
  .fx-timeslots__slot:has(:focus-visible) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-timeslots__slot:has(:checked) { border-color: var(--fx-bg-brand-solid); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  .fx-timeslots__slot:has(:checked) > span:first-of-type::before { content: "✓ "; }
  .fx-timeslots__slot:has(:disabled) { border-style: dashed; border-color: var(--fx-border-color-default); background: transparent; color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-timeslots__slot:has(:disabled) > span:first-of-type { text-decoration: line-through; }
  .fx-timeslots__note { font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); color: var(--fx-text-tertiary); }
  .fx-timeslots__slot:has(:checked) .fx-timeslots__note { color: inherit; }
  .fx-timeslots__slot[data-few] .fx-timeslots__note { color: var(--fx-text-error); }
  .fx-timeslots[data-layout="list"] .fx-timeslots__slot { grid-auto-flow: column; justify-content: space-between; padding-inline: var(--fx-space-4); }
  .fx-timeslots__empty { margin: 0; padding: var(--fx-space-6) var(--fx-space-4); border: var(--fx-border-width-default) dashed var(--fx-border-color-default); border-radius: var(--fx-radius-surface); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); text-align: center; }
  .fx-timeslots__foot { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-3); padding-block-start: var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  @media (max-width: 30em) { .fx-timeslots:not([data-layout="list"]) { --_cols: 3; } }
  @media (forced-colors: active) { .fx-timeslots__slot:has(:checked) { outline: var(--fx-border-width-focus) solid Highlight; } }
}

/* tip */
@layer fx.components {
  /* Tooltip: ikon-tugma yoki qisqartma uchun qisqa nom. JS’siz — oʻram ustiga borilganda yoki fokusda chiqadi.
     Teskari yuza (toast kabi). Oʻchiq tugmaga tooltip qoʻyilmaydi (fokus olmaydi). */
  .fx-tip { position: relative; display: inline-flex; }
  .fx-tip__bubble {
    position: absolute;
    inset-block-end: calc(100% + var(--fx-space-2));
    inset-inline-start: 50%;
    translate: -50% var(--fx-motion-shift-sm);
    z-index: 10;
    inline-size: max-content;
    max-inline-size: calc(var(--fx-popover-width) * 0.75);
    padding: var(--fx-space-1) var(--fx-space-2);
    border-radius: var(--fx-radius-badge);
    background: var(--fx-text-primary);
    color: var(--fx-bg-page);
    font-size: var(--fx-font-size-xs);
    line-height: 1.4;
    pointer-events: none;
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), visibility var(--fx-motion-fast) var(--fx-ease-standard), translate var(--fx-motion-fast) var(--fx-ease-enter);
  }
  .fx-tip:hover > .fx-tip__bubble, .fx-tip:focus-within > .fx-tip__bubble { opacity: 1; visibility: visible; transition-delay: var(--fx-duration-delay-tip); translate: -50% 0; }
  .fx-tip[data-placement="bottom"] > .fx-tip__bubble { inset-block: calc(100% + var(--fx-space-2)) auto; }
  /* Joylashuv (2.81): top (andoza) · bottom · start/end (inline tomon) · left/right (jismoniy). Yon tomonlarda vertikal markaz. */
  .fx-tip[data-placement="start"] > .fx-tip__bubble, .fx-tip[data-placement="end"] > .fx-tip__bubble,
  .fx-tip[data-placement="left"] > .fx-tip__bubble, .fx-tip[data-placement="right"] > .fx-tip__bubble { inset-block: 50% auto; translate: 0 -50%; }
  .fx-tip[data-placement="start"] > .fx-tip__bubble { inset-inline: auto calc(100% + var(--fx-space-2)); }
  .fx-tip[data-placement="end"] > .fx-tip__bubble { inset-inline: calc(100% + var(--fx-space-2)) auto; }
  .fx-tip[data-placement="left"] > .fx-tip__bubble { inset-inline: auto; right: calc(100% + var(--fx-space-2)); }
  .fx-tip[data-placement="right"] > .fx-tip__bubble { inset-inline: auto; left: calc(100% + var(--fx-space-2)); }
  .fx-tip[data-placement="start"]:hover > .fx-tip__bubble, .fx-tip[data-placement="start"]:focus-within > .fx-tip__bubble,
  .fx-tip[data-placement="end"]:hover > .fx-tip__bubble, .fx-tip[data-placement="end"]:focus-within > .fx-tip__bubble,
  .fx-tip[data-placement="left"]:hover > .fx-tip__bubble, .fx-tip[data-placement="left"]:focus-within > .fx-tip__bubble,
  .fx-tip[data-placement="right"]:hover > .fx-tip__bubble, .fx-tip[data-placement="right"]:focus-within > .fx-tip__bubble { translate: 0 -50%; }
  /* Ichida tugma yorligʻi (Gs): <kbd class="fx-kbd"> */
  .fx-tip__bubble kbd { margin-inline-start: var(--fx-space-2); opacity: 0.8; font: inherit; }
  @media (hover: none) { .fx-tip:hover > .fx-tip__bubble { opacity: 0; visibility: hidden; } }
  /* Tooltip guruhi (4-toʻlqin 4.166): .fx-tip-group[data-fx-tip] — bir tooltip ochilgach («isigan» guruh, data-warm) qoʻshnisi kechikishsiz
     chiqadi, oldingisi darhol yopiladi (ikkitasi birga koʻrinmaydi). Guruhdan chiqilgach ~300 ms dan keyin yana odatdagi kechikish. */
  .fx-tip-group { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1); }
  .fx-tip-group[data-warm] .fx-tip > .fx-tip__bubble { transition-duration: initial; }
  .fx-tip-group[data-warm] .fx-tip:is(:hover, :focus-within) > .fx-tip__bubble { transition-delay: initial; }
  /* Esc bilan yopilgan (WCAG 1.4.13): sichqoncha yoki fokus ketguncha qaytib chiqmaydi */
  .fx-tip[data-dismissed]:is(:hover, :focus-within) > .fx-tip__bubble { opacity: 0; visibility: hidden; transition-delay: initial; }
}

/* toast */
@layer fx.components {
  /* Toast — teskari yuza (Light — qora, Dark — oq), pastda markazda, faqat soʻnadi (WDS r94, «Harakat»).
     popover="manual" — yuqori qatlam; koʻrsatish/yashirish: el.showPopover() / el.hidePopover(). */
  .fx-toast {
    position: fixed;
    inset: auto 0 var(--fx-space-6);
    inline-size: max-content;
    max-inline-size: min(100vw - var(--fx-space-8), var(--fx-toast-width));
    margin: 0 auto;
    align-items: center;
    gap: var(--fx-space-3);
    padding: var(--fx-space-3) var(--fx-space-4);
    border: 0;
    border-radius: var(--fx-radius-control);
    background: var(--fx-text-primary);
    color: var(--fx-bg-page);
    box-shadow: var(--fx-shadow-lg);
    font-size: var(--fx-font-size-sm);
    line-height: 1.4;
  }
  /* display faqat ochiq holatda: aks holda UA'ning [popover]:not(:popover-open) { display: none } qoidasi bosilib, yopiq toast ko'rinib qoladi */
  .fx-toast:popover-open { display: flex; }
  /* Kirish va chiqish (WDS «Harakat»: toast faqat soʻnadi (r94); chiqish ~30 % tez) */
  .fx-toast { opacity: 0; transition: opacity var(--fx-motion-exit-base) var(--fx-ease-exit), display var(--fx-motion-exit-base) allow-discrete, overlay var(--fx-motion-exit-base) allow-discrete; }
  .fx-toast:popover-open { opacity: 1; transition-duration: var(--fx-motion-base); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-toast:popover-open { opacity: 0; } }

  /* Holat: shakl + soʻz (WDS «Komponentlar») — oldida rangli nuqta, matnda soʻz */
  .fx-toast[data-tone]::before { content: ""; flex: none; inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); border-radius: var(--fx-radius-circle); background: currentColor; }
  .fx-toast[data-tone="success"]::before { background: var(--fx-fg-success); }
  .fx-toast[data-tone="warning"]::before { background: var(--fx-fg-warning); }
  .fx-toast[data-tone="error"]::before { background: var(--fx-fg-error); }
  .fx-toast__action { margin-inline-start: var(--fx-space-2); padding: 0; border: 0; background: none; color: inherit; font: inherit; font-weight: var(--fx-font-weight-semibold); text-decoration: underline; cursor: pointer; }

  /* Yuklanmoqda (promise, 2.83): oldida aylana — shakl; holat soʻz bilan ham aytiladi */
  .fx-toast[data-tone="loading"]::before { content: ""; flex: none; box-sizing: border-box; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); border: var(--fx-border-width-focus) solid color-mix(in oklab, currentColor 25%, transparent); border-block-start-color: currentColor; border-radius: var(--fx-radius-circle); background: none; animation: fx-spin var(--fx-duration-spin) linear infinite; }
  @media (prefers-reduced-motion: reduce) { .fx-toast[data-tone="loading"]::before { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
  .fx-toast__text { min-inline-size: 0; }

  /* Toaster (2.82–2.86) — toast hududi: behaviors/toaster.js va window.fxToast(). Andoza — bitta toast (yangisi eskisini almashtiradi);
     ustma-ust yigʻish (data-stack), taymer chizigʻi (data-timer), siljitib yopish (data-swipe) — ixtiyoriy. Hover/fokusda taymer toʻxtaydi. */
  .fx-toaster {
    --_dir: -1;
    position: fixed;
    inset: auto;
    inset-block-end: var(--fx-space-6);
    inset-inline: 0;
    inline-size: min(100vw - var(--fx-space-8), var(--fx-toast-width));
    margin: 0 auto;
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    overflow: visible;
  }
  .fx-toaster:popover-open { display: grid; gap: var(--fx-space-2); }
  .fx-toaster[data-placement="top"], .fx-toaster[data-placement="top-end"] { --_dir: 1; inset-block: var(--fx-space-6) auto; }
  .fx-toaster[data-placement="bottom-end"], .fx-toaster[data-placement="top-end"] { inset-inline: auto var(--fx-space-6); margin: 0; }
  .fx-toaster > .fx-toast { position: relative; inset: auto; display: flex; inline-size: auto; max-inline-size: none; margin: 0; overflow: hidden; order: calc(var(--_i, 0) * var(--_dir)); touch-action: pan-y; }
  .fx-toaster > .fx-toast { opacity: 1; translate: var(--_dx, 0) 0; transition: opacity var(--fx-motion-exit-base) var(--fx-ease-exit), translate var(--fx-motion-exit-base) var(--fx-ease-exit), scale var(--fx-motion-exit-base) var(--fx-ease-exit); }
  @starting-style { .fx-toaster > .fx-toast { opacity: 0; translate: 0 calc(var(--fx-motion-shift-md) * var(--_dir) * -1); } }
  .fx-toaster > .fx-toast[data-state="leaving"] { opacity: 0; }
  .fx-toaster > .fx-toast[data-dragging] { transition: none; cursor: grabbing; user-select: none; }
  .fx-toast__text { flex: 1; }
  .fx-toast__action:focus-visible { outline: var(--fx-border-width-focus) solid currentColor; outline-offset: var(--fx-space-1); }
  /* Taymer chizigʻi */
  .fx-toast__timer { position: absolute; inset: auto 0 0; block-size: calc(var(--fx-border-width-focus) / 2); background: currentColor; opacity: 0.35; transform-origin: left center; animation: fx-toast-timer var(--_ms, 5s) linear forwards; }
  .fx-toast[data-paused] .fx-toast__timer { animation-play-state: paused; }
  @keyframes fx-toast-timer { from { scale: 1 1; } to { scale: 0 1; } }
  /* Ustma-ust yigʻish (2.82): hover/fokusda yoyiladi */
  .fx-toaster[data-stack]:not(:hover, :focus-within) { grid-template-rows: 1fr; }
  .fx-toaster[data-stack]:not(:hover, :focus-within) > .fx-toast { grid-area: 1 / 1; align-self: end; z-index: calc(100 - var(--_i, 0)); scale: calc(1 - var(--_i, 0) * 0.05); translate: var(--_dx, 0) calc(var(--_i, 0) * var(--_dir) * var(--fx-space-2)); }
  .fx-toaster[data-stack][data-placement^="top"]:not(:hover, :focus-within) > .fx-toast { align-self: start; }
  .fx-toaster[data-stack]:not(:hover, :focus-within) > .fx-toast:nth-child(n + 4) { opacity: 0; pointer-events: none; }
}

/* toc */
@layer fx.components {
  /* Sahifa mundarijasi (#87): chap chiziq, hozir koʻrinayotgan boʻlim belgilanadi (scroll-spy — foxui.js, data-fx-toc) */
  .fx-toc { position: sticky; inset-block-start: calc(var(--fx-size-topbar) + var(--fx-space-4)); display: grid; gap: var(--fx-space-2); max-block-size: calc(100dvh - var(--fx-size-topbar) - var(--fx-space-8)); overflow: auto; font-size: var(--fx-font-size-sm); }
  .fx-toc__title { margin: 0; color: var(--fx-text-primary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); }
  .fx-toc__list { display: grid; margin: 0; padding: 0; list-style: none; border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-toc__link { position: relative; display: block; padding: var(--fx-space-1) var(--fx-space-3); color: var(--fx-text-secondary); text-decoration: none; border-radius: var(--fx-radius-badge); transition: color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-toc__link[data-depth="3"] { padding-inline-start: var(--fx-space-6); }
  .fx-toc__link:hover { color: var(--fx-text-primary); }
  .fx-toc__link::before { content: ""; position: absolute; inset-block: 0; inset-inline-start: calc(var(--fx-border-width-focus) * -1); inline-size: var(--fx-border-width-focus); border-radius: var(--fx-border-width-focus); background: transparent; transition: background-color var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-toc__link[aria-current="location"] { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-medium); }
  .fx-toc__link[aria-current="location"]::before { background: var(--fx-bg-brand-solid); }
  .fx-toc__link:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
}

/* togglegroup */
@layer fx.components {
  /* Toggle guruhi: yonma-yon ikonka/matn tugmalari, bittasi (single) yoki bir nechtasi (multi) bosilgan (aria-pressed; foxui.js).
     Native variant: ichida label > input[type=radio|checkbox] — JS’siz. Tanlangan — toʻldirilgan fon (rangdan tashqari ham farq: fon + chiziq). */
  .fx-togglegroup { --_h: var(--fx-control-h-md); display: inline-flex; border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: calc(var(--fx-knob-pill) * var(--_h) / 2 + (1 - var(--fx-knob-pill)) * var(--fx-radius-control)); background: var(--fx-bg-surface); overflow: hidden; }
  .fx-togglegroup__item { position: relative; display: inline-grid; place-items: center; grid-auto-flow: column; gap: var(--fx-space-2); block-size: calc(var(--_h) - var(--fx-border-width-default) * 2); min-inline-size: calc(var(--_h) - var(--fx-border-width-default) * 2); padding-inline: var(--fx-space-3); margin: 0; border: 0; background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); white-space: nowrap; cursor: pointer; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard), color var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard); }
  .fx-togglegroup__item + .fx-togglegroup__item { border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-togglegroup__item > svg { inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-togglegroup__item > input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer; }
  .fx-togglegroup__item:hover { background: var(--fx-bg-subtle); color: var(--fx-text-primary); }
  .fx-togglegroup__item:is([aria-pressed="true"], :has(> input:checked)) { background: var(--fx-text-primary); color: var(--fx-bg-page); }
  .fx-togglegroup__item:active { scale: var(--fx-motion-press); }
  .fx-togglegroup__item:is(:focus-visible, :has(> input:focus-visible)) { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); z-index: 1; }
  .fx-togglegroup__item:is(:disabled, :has(> input:disabled)) { color: var(--fx-text-disabled); cursor: not-allowed; }
  .fx-togglegroup[data-size="sm"] { --_h: var(--fx-control-h-sm); }
  .fx-togglegroup[data-size="lg"] { --_h: var(--fx-control-h-lg); }
  .fx-togglegroup[data-fill] { display: flex; }
  .fx-togglegroup[data-fill] > .fx-togglegroup__item { flex: 1; }
}

/* toggletip */
@layer fx.components {
  /* Toggletip (#78) — ⓘ tugma BOSILGANDA kichik izoh (hover emas): native popover + anchor, ichida havola boʻlishi mumkin.
     Izoh qatlami — .fx-popover (strelkali), bu yerda faqat tugma va qatlam oʻlchami. */
  .fx-toggletip { display: inline-flex; vertical-align: middle; }
  .fx-toggletip__btn {
    display: inline-grid;
    place-items: center;
    inline-size: var(--fx-size-min-target);
    block-size: var(--fx-size-min-target);
    padding: 0;
    border: 0;
    border-radius: var(--fx-radius-circle);
    background: transparent;
    color: var(--fx-text-tertiary);
    font: inherit;
    cursor: pointer;
    transition: color var(--fx-motion-fast) var(--fx-ease-standard), background-color var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-toggletip__btn::before {
    content: "i";
    display: grid;
    place-items: center;
    box-sizing: border-box;
    inline-size: var(--fx-size-icon-md);
    block-size: var(--fx-size-icon-md);
    border: var(--fx-border-width-default) solid currentColor;
    border-radius: var(--fx-radius-circle);
    font-size: var(--fx-font-size-xs);
    font-weight: var(--fx-font-weight-semibold);
    font-style: italic;
    line-height: 1;
  }
  .fx-toggletip[data-kind="help"] > .fx-toggletip__btn::before { content: "?"; font-style: normal; }
  .fx-toggletip__btn:hover, .fx-toggletip__btn[aria-expanded="true"] { color: var(--fx-text-primary); background: var(--fx-bg-muted); }
  .fx-toggletip__btn:active { scale: var(--fx-motion-press); }
  .fx-toggletip__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-toggletip__content { max-inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-popover-width) * 0.85)); padding: var(--fx-space-3) var(--fx-space-4); line-height: 1.5; }
  .fx-toggletip__content a { color: var(--fx-text-brand); }
}

/* toolbar */
@layer fx.components {
  /* Asboblar paneli (WAI-ARIA APG «Toolbar»): bir qatorda amallar guruhi; butun panel — bitta Tab nuqtasi, ichida ← → Home End (foxui.js, data-fx-toolbar).
     Guruhlar ajratgich bilan; ichidagi tugmalar — fx-btn (ghost), toggle uchun aria-pressed. */
  .fx-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-1); padding: var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-toolbar[data-variant="flat"] { padding: 0; border-color: transparent; background: transparent; }
  .fx-toolbar__group { display: flex; align-items: center; gap: calc(var(--fx-space-1) / 2); }
  .fx-toolbar__sep { align-self: stretch; inline-size: var(--fx-border-width-default); margin-block: var(--fx-space-1); background: var(--fx-border-color-default); }
  .fx-toolbar__spacer { flex: 1; }
  .fx-toolbar .fx-btn[aria-pressed="true"] { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-toolbar[aria-orientation="vertical"] { flex-direction: column; align-items: stretch; inline-size: max-content; }
  .fx-toolbar[aria-orientation="vertical"] .fx-toolbar__group { flex-direction: column; align-items: stretch; }
  .fx-toolbar[aria-orientation="vertical"] .fx-toolbar__sep { align-self: auto; inline-size: auto; block-size: var(--fx-border-width-default); margin-block: 0; margin-inline: var(--fx-space-1); }
  /* Suzuvchi (4.158, M3 Expressive «Floating toolbar»): aylantiriladigan hudud pastida yopishqoq kapsula, soyali — kontekst amallari.
     Tanlov paneli (bubble, Notion/Tiptap): matn tanlanganda tanlov ustida chiqadi (xulq: data-for="<maydon id>"), Alt+F10 — panelga fokus. */
  .fx-toolbar[data-variant="floating"] { position: sticky; inset-block-end: var(--fx-space-4); z-index: 4; inline-size: max-content; max-inline-size: calc(100% - var(--fx-space-8)); margin-inline: auto; padding: var(--fx-space-1) var(--fx-space-2); border-radius: var(--fx-radius-circle); box-shadow: var(--fx-shadow-lg); }
  .fx-toolbar[data-variant="floating"] .fx-btn { border-radius: var(--fx-radius-circle); }
  .fx-toolbar[data-variant="bubble"] { position: fixed; z-index: 30; inset-inline-start: var(--_x, 0); inset-block-start: var(--_y, 0); flex-wrap: nowrap; padding: calc(var(--fx-space-1) / 2); border-color: transparent; background: var(--fx-text-primary); color: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg); animation: fx-toolbar-pop var(--fx-motion-fast) var(--fx-ease-enter); }
  .fx-toolbar[data-variant="bubble"][hidden] { display: none; }
  .fx-toolbar[data-variant="bubble"] .fx-btn { color: inherit; }
  .fx-toolbar[data-variant="bubble"] .fx-btn:hover, .fx-toolbar[data-variant="bubble"] .fx-btn[aria-pressed="true"] { background: color-mix(in oklab, var(--fx-bg-surface) 18%, transparent); color: var(--fx-bg-surface); }
  .fx-toolbar[data-variant="bubble"] .fx-toolbar__sep { background: color-mix(in oklab, var(--fx-bg-surface) 25%, transparent); }
  @keyframes fx-toolbar-pop { from { opacity: 0; translate: 0 var(--fx-motion-shift-sm); } }
  @media (forced-colors: active) { .fx-toolbar[data-variant="bubble"] { border: var(--fx-border-width-default) solid CanvasText; } }
}

/* toolcall */
@layer fx.components {
  /* Vosita chaqiruvi kartasi (tool call): <details> — sarlavhada ikon, nom (mono), vaqt, holat (shakl + soʻz), ochilsa kirish va natija.
     Holatlar: pending · running · waiting (ruxsat kutmoqda) · done · error. Ichiga .fx-approval qoʻyish mumkin. */
  .fx-toolcall { border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); font-size: var(--fx-font-size-sm); }
  .fx-toolcall[data-state="waiting"] { border-color: var(--fx-fg-warning); }
  .fx-toolcall[data-state="error"] { border-color: var(--fx-border-color-error); }
  .fx-toolcall > summary { display: flex; align-items: center; gap: var(--fx-space-3); padding: var(--fx-space-2) var(--fx-space-3); border-radius: inherit; list-style: none; cursor: pointer; user-select: none; }
  .fx-toolcall > summary::-webkit-details-marker { display: none; }
  .fx-toolcall > summary:hover { background: var(--fx-bg-subtle); }
  .fx-toolcall > summary:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-toolcall > summary > svg { flex: none; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); fill: none; stroke: var(--fx-text-secondary); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
  .fx-toolcall__name { flex: 1; min-inline-size: 0; overflow: hidden; color: var(--fx-text-primary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-sm); text-overflow: ellipsis; white-space: nowrap; }
  .fx-toolcall__time { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-toolcall__chev { transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-toolcall[open] .fx-toolcall__chev { rotate: 90deg; }
  .fx-toolcall__status { display: inline-flex; align-items: center; gap: var(--fx-space-1); padding: var(--fx-space-1) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); line-height: 1; white-space: nowrap; }
  .fx-toolcall__status::before { content: ""; flex: none; box-sizing: border-box; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border-radius: var(--fx-radius-circle); background: currentColor; }
  .fx-toolcall[data-state="pending"] .fx-toolcall__status::before { background: transparent; border: var(--fx-border-width-default) dashed currentColor; }
  .fx-toolcall[data-state="running"] .fx-toolcall__status { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-toolcall[data-state="running"] .fx-toolcall__status::before { background: transparent; border: var(--fx-border-width-focus) solid currentColor; animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-toolcall[data-state="waiting"] .fx-toolcall__status { background: var(--fx-bg-warning-subtle); color: var(--fx-fg-warning); }
  .fx-toolcall[data-state="waiting"] .fx-toolcall__status::before { border-radius: var(--fx-radius-badge); background: transparent; border: var(--fx-border-width-focus) solid currentColor; }
  .fx-toolcall[data-state="done"] .fx-toolcall__status { background: var(--fx-bg-success-subtle); color: var(--fx-fg-success); }
  .fx-toolcall[data-state="done"] .fx-toolcall__status::before { border-radius: 0; background: currentColor; mask: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 8.5l3.2 3L13 4.5' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-toolcall[data-state="error"] .fx-toolcall__status { background: var(--fx-bg-error-subtle); color: var(--fx-fg-error); }
  .fx-toolcall[data-state="error"] .fx-toolcall__status::before { rotate: 45deg; scale: 0.85; border-radius: 0; }
  .fx-toolcall__body { display: grid; gap: var(--fx-space-3); padding: var(--fx-space-3); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-toolcall__section { display: grid; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-toolcall__label { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); }
  .fx-toolcall__body pre { margin: 0; padding: var(--fx-space-2) var(--fx-space-3); overflow-x: auto; border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); color: var(--fx-text-primary); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }
  .fx-toolcall__error { margin: 0; color: var(--fx-text-error); }
  @media (prefers-reduced-motion: reduce) { .fx-toolcall[data-state="running"] .fx-toolcall__status::before { animation: none; } }
}

/* toploader */
@layer fx.components {
  /* Sahifa yuklanish chizigʻi (#71): eng tepada ingichka chiziq. Aniqlanmagan — yurib oʻtadi; aniq — <progress>ga oʻxshash qiymat. */
  .fx-toploader { position: fixed; inset: 0 0 auto; z-index: 60; block-size: calc(var(--fx-border-width-focus) * 1.5); overflow: hidden; pointer-events: none; }
  .fx-toploader[hidden] { display: none; }
  .fx-toploader__bar { display: block; block-size: 100%; inline-size: var(--_value, 40%); background: var(--fx-bg-brand-solid); transition: inline-size var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-toploader:not([data-state="determinate"]) .fx-toploader__bar { inline-size: 40%; animation: fx-toploader var(--fx-duration-indeterminate) var(--fx-ease-standard) infinite; }
  @keyframes fx-toploader { from { translate: -100% 0; } to { translate: 250% 0; } }
  @media (prefers-reduced-motion: reduce) { .fx-toploader:not([data-state="determinate"]) .fx-toploader__bar { inline-size: 100%; animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
}

/* tour */
@layer fx.components {
  /* Tanishuv turi (product tour / coachmarks, #80): sahifa xira boʻladi, nishon element yorugʻ "teshik"da qoladi,
     yonida qadamlar kartasi (oldingi · keyingi · oʻtkazib yuborish). Esc yopadi. JS (data-fx-tour) joyni hisoblaydi. */
  .fx-tour { --fx-tour-x: 50%; --fx-tour-y: 50%; --fx-tour-w: 0px; --fx-tour-h: 0px; --fx-tour-cx: 50%; --fx-tour-cy: 50%; position: fixed; inset: 0; z-index: 1000; }
  .fx-tour[hidden] { display: none; }
  /* Teshik: ulkan outline — xira parda; outline radiusga ergashadi */
  .fx-tour__spot {
    position: fixed;
    inset-block-start: var(--fx-tour-y, 50%);
    inset-inline-start: var(--fx-tour-x, 50%);
    inline-size: var(--fx-tour-w, 0);
    block-size: var(--fx-tour-h, 0);
    border-radius: var(--fx-radius-control);
    outline: 300vmax solid color-mix(in oklab, var(--fx-bg-overlay) 55%, transparent);
    pointer-events: none;
    transition: inset var(--fx-motion-base) var(--fx-ease-standard), inline-size var(--fx-motion-base) var(--fx-ease-standard), block-size var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-tour__spot::after { content: ""; position: absolute; inset: calc(var(--fx-border-width-focus) * -1); border: var(--fx-border-width-focus) solid var(--fx-border-color-focus); border-radius: inherit; }
  .fx-tour__card {
    position: fixed;
    inset-block-start: var(--fx-tour-cy, 50%);
    inset-inline-start: var(--fx-tour-cx, 50%);
    inline-size: min(100vw - var(--fx-space-8), var(--fx-popover-width));
    box-sizing: border-box;
    display: grid;
    gap: var(--fx-space-2);
    padding: var(--fx-space-4);
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-overlay);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    box-shadow: var(--fx-shadow-lg);
    font-size: var(--fx-font-size-sm);
    transition: inset var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-tour__card:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); }
  .fx-tour__count { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
  .fx-tour__title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-tour__text { margin: 0; color: var(--fx-text-secondary); }
  .fx-tour__actions { display: flex; align-items: center; gap: var(--fx-space-2); margin-block-start: var(--fx-space-2); }
  .fx-tour__skip { margin-inline-end: auto; }
  /* Qadam maʼlumoti manbasi — koʻrinmaydi */
  .fx-tour__steps { display: none; }
  /* Nuqtalar: joriy qadam choʻzilgan (shakl farqi, rang yolgʻiz belgi emas) */
  .fx-tour__dots { display: flex; gap: var(--fx-space-1); }
  .fx-tour__dot { inline-size: var(--fx-space-2); block-size: var(--fx-space-2); border-radius: var(--fx-radius-circle); background: var(--fx-border-color-strong); transition: inline-size var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-tour__dot[aria-current="step"] { inline-size: var(--fx-space-5); background: var(--fx-bg-brand-solid); }
  .fx-tour[data-snap] .fx-tour__spot, .fx-tour[data-snap] .fx-tour__card { transition: none; }
  .fx-tour[data-centered] .fx-tour__spot { inline-size: 0; block-size: 0; }
  /* Puls nuqta — beacon (4-toʻlqin 4.161; Gestalt Pulsar, Atlassian Spotlight): yangi funksiya yonida pulslovchi halqa; bosilsa tur
     (data-fx-tour-start, data-tour-step — qaysi qadamdan) boshlanadi va nuqta «koʻrildi» boʻladi (puls toʻxtaydi, data-seen).
     Harakat kamaytirilsa — puls yoʻq, qoʻzgʻalmas halqa qoladi (shakl baribir koʻrinadi). */
  .fx-tour__beacon { position: relative; display: inline-grid; place-items: center; flex: none; inline-size: var(--fx-control-h-sm); block-size: var(--fx-control-h-sm); padding: 0; border: 0; border-radius: var(--fx-radius-circle); background: transparent; vertical-align: middle; cursor: pointer; }
  .fx-tour__beacon::before { content: ""; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border-radius: var(--fx-radius-circle); background: var(--fx-bg-brand-solid); outline: var(--fx-border-width-focus) solid var(--fx-bg-surface); }
  .fx-tour__beacon::after { content: ""; position: absolute; inset: calc(50% - var(--fx-size-status-dot) / 2); border: var(--fx-border-width-focus) solid var(--fx-bg-brand-solid); border-radius: var(--fx-radius-circle); pointer-events: none; animation: fx-tour-pulse calc(var(--fx-duration-pulse) * max(var(--fx-knob-motion-loop), 0.001)) var(--fx-ease-exit) infinite; }
  .fx-tour__beacon:hover::before { scale: 1.25; }
  .fx-tour__beacon:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-tour__beacon[data-placement="corner"] { position: absolute; inset-block-start: calc(var(--fx-control-h-sm) / -2); inset-inline-end: calc(var(--fx-control-h-sm) / -2); z-index: var(--fx-z-raised); }
  .fx-tour__beacon[data-seen]::after { animation: none; opacity: 0; }
  .fx-tour__beacon[data-seen]::before { background: var(--fx-border-color-strong); }
  @keyframes fx-tour-pulse { 0% { scale: 1; opacity: 0.9; } 80%, 100% { scale: 3.2; opacity: 0; } }
  @media (prefers-reduced-motion: reduce) { .fx-tour__beacon:not([data-seen])::after { animation: none; scale: 2; opacity: 0.5; } }
}

/* trace */
@layer fx.components {
  /* Agent izi: qadamlar ketma-ket, chapda holat belgisi (shakl), oʻngda vaqt; tafsilot ochiladi (details).
     Joriy qadam — halqa pulsatsiyasi; reduced-motion’da harakatsiz. */
  .fx-trace { display: grid; margin: 0; padding: 0; list-style: none; }
  .fx-trace__step { position: relative; display: grid; grid-template-columns: var(--fx-size-icon-md) minmax(0, 1fr) auto; gap: 0 var(--fx-space-3); padding-block: var(--fx-space-2); font-size: var(--fx-font-size-sm); }
  .fx-trace__step:not(:last-child)::after { content: ""; position: absolute; inset-inline-start: calc(var(--fx-size-icon-md) / 2); inset-block: calc(var(--fx-space-2) + var(--fx-size-icon-md)) 0; inline-size: var(--fx-border-width-default); background: var(--fx-border-color-default); }
  .fx-trace__step::before { content: ""; grid-row: 1; align-self: center; justify-self: center; inline-size: var(--fx-size-status-dot); block-size: var(--fx-size-status-dot); border-radius: var(--fx-radius-circle); background: var(--fx-fg-success); }
  .fx-trace__step[data-state="running"]::before { box-sizing: border-box; background: transparent; border: var(--fx-border-width-focus) solid var(--fx-text-brand); animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; }
  .fx-trace__step[data-state="waiting"]::before { box-sizing: border-box; background: transparent; border: var(--fx-border-width-focus) solid var(--fx-text-tertiary); }
  .fx-trace__step[data-state="error"]::before { rotate: 45deg; border-radius: 0; scale: 0.85; background: var(--fx-fg-error); }
  .fx-trace__title { color: var(--fx-text-primary); }
  .fx-trace__step[data-state="waiting"] .fx-trace__title { color: var(--fx-text-tertiary); }
  .fx-trace__time { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-trace__detail { grid-column: 2 / -1; margin-block-start: var(--fx-space-1); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-trace__detail > summary { cursor: pointer; color: var(--fx-text-tertiary); }
  .fx-trace__detail pre { margin: var(--fx-space-2) 0 0; padding: var(--fx-space-2) var(--fx-space-3); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); font-family: var(--fx-font-family-mono); font-size-adjust: var(--fx-font-adjust-mono); font-size: var(--fx-font-size-xs); white-space: pre-wrap; }
  @media (prefers-reduced-motion: reduce) { .fx-trace__step[data-state="running"]::before { animation: none; } }
  /* ---- Kengaytma (2.150): ichma-ich qadamlar, kirish/chiqish, yigʻilgan xulosa “7 qadam · 12 s” ---- */
  .fx-trace__step > .fx-trace { grid-column: 2 / -1; margin-block-start: var(--fx-space-1); padding-inline-start: var(--fx-space-3); border-inline-start: var(--fx-border-width-default) dashed var(--fx-border-color-default); }
  .fx-trace__step > .fx-trace .fx-trace__step::before { inline-size: var(--fx-size-status-dot-sm); block-size: var(--fx-size-status-dot-sm); }
  .fx-trace__io { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--fx-space-1) var(--fx-space-3); margin: var(--fx-space-2) 0 0; }
  .fx-trace__io > dt { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); text-transform: uppercase; letter-spacing: 0.06em; }
  .fx-trace__io > dd { min-inline-size: 0; margin: 0; }
  .fx-trace__io pre { margin: 0; }
  .fx-trace__step[data-state="skipped"] .fx-trace__title { color: var(--fx-text-tertiary); text-decoration: line-through; }
  .fx-trace__step[data-state="skipped"]::before { box-sizing: border-box; background: transparent; border: var(--fx-border-width-default) dashed var(--fx-text-tertiary); }
  /* Yigʻiladigan guruh: <details class="fx-trace-group"> */
  .fx-trace-group__summary { display: flex; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-control-h-sm); cursor: pointer; list-style: none; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); font-variant-numeric: tabular-nums; }
  .fx-trace-group__summary::-webkit-details-marker { display: none; }
  .fx-trace-group__summary::before { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0.55; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; rotate: -90deg; transition: rotate var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-trace-group[open] > .fx-trace-group__summary::before { rotate: 0deg; }
  .fx-trace-group__summary:hover { color: var(--fx-text-primary); }
  .fx-trace-group__summary:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); border-radius: var(--fx-radius-badge); }
  @media (forced-colors: active) { .fx-trace__step::before { forced-color-adjust: none; background: CanvasText; } .fx-trace__step:not(:last-child)::after { background: ButtonText; } }
}

/* tracker */
@layer fx.components {
  /* Tracker / uptime chiziqchalari (4.129): har kun — bitta tor ustun. Holat shakl bilan ham farqlanadi:
     ok — toʻliq yaxlit, warn — oʻrtasida kesik (ikki boʻlak), down — qisqa + qiya chiziqli, none — xira trek. Tafsilot — hover/fokus’da.
     Xulq (data-fx-tracker): roving tabindex, ← → Home End, maslahat role=tooltip. */
  .fx-tracker { display: grid; gap: var(--fx-space-2); min-inline-size: 0; font-size: var(--fx-font-size-sm); }
  .fx-tracker__head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--fx-space-3); }
  .fx-tracker__title { color: var(--fx-text-primary); font-weight: var(--fx-font-weight-medium); }
  .fx-tracker__summary { color: var(--fx-text-secondary); font-variant-numeric: tabular-nums; }
  .fx-tracker__bars { position: relative; display: flex; align-items: flex-end; gap: calc(var(--fx-space-1) / 2); block-size: var(--fx-control-h-sm); margin: 0; padding: 0; list-style: none; }
  .fx-tracker__bar { --_c: var(--fx-fg-success); flex: 1 1 0; min-inline-size: calc(var(--fx-space-1) / 2); block-size: 100%; border-radius: calc(var(--fx-radius-badge) / 4); background: var(--_c); cursor: default; transition: opacity var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-standard); transform-origin: bottom; }
  .fx-tracker__bar[data-status="warn"] { --_c: var(--fx-fg-warning); background: linear-gradient(var(--_c) 0 42%, transparent 42% 58%, var(--_c) 58%); }
  .fx-tracker__bar[data-status="down"] { --_c: var(--fx-fg-error); block-size: 70%; background: repeating-linear-gradient(135deg, var(--_c) 0 3px, color-mix(in oklab, var(--_c) 55%, transparent) 3px 5px); }
  .fx-tracker__bar[data-status="none"] { --_c: var(--fx-viz-track); block-size: 40%; }
  .fx-tracker__bars:has(.fx-tracker__bar:is(:hover, :focus-visible)) .fx-tracker__bar:not(:hover, :focus-visible) { opacity: 0.55; }
  .fx-tracker__bar:is(:hover, :focus-visible) { scale: 1 1.08; }
  .fx-tracker__bar:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-tracker__axis { display: flex; justify-content: space-between; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-tracker__tip { position: absolute; z-index: 2; inset-block-end: calc(100% + var(--fx-space-2)); inline-size: max-content; max-inline-size: calc(var(--fx-popover-width) * 0.8); padding: var(--fx-space-2) var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-control); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-md); color: var(--fx-text-primary); font-size: var(--fx-font-size-xs); pointer-events: none; }
  .fx-tracker__tip[hidden] { display: none; }
  /* kalit — har holat shakli va soʻzi */
  .fx-tracker__legend { display: flex; flex-wrap: wrap; gap: var(--fx-space-1) var(--fx-space-4); margin: 0; padding: 0; list-style: none; color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); }
  .fx-tracker__legend > li { display: inline-flex; align-items: center; gap: var(--fx-space-2); }
  .fx-tracker__legend .fx-tracker__bar { flex: none; inline-size: var(--fx-space-2); block-size: var(--fx-space-3); }
  .fx-tracker[data-size="sm"] .fx-tracker__bars { block-size: var(--fx-space-6); }
  @media (forced-colors: active) { .fx-tracker__bar { forced-color-adjust: none; background: CanvasText; } .fx-tracker__bar[data-status="none"] { background: GrayText; } }
}

/* transfer */
@layer fx.components {
  /* Ikki roʻyxat oʻtkazgich (#31): “Mavjud” va “Tanlangan”, oʻrtada koʻchirish tugmalari; har panelda hammasini belgilash, qidiruv va sanagich. */
  .fx-transfer { display: grid; grid-template-columns: 1fr auto 1fr; align-items: stretch; gap: var(--fx-space-3); }
  .fx-transfer__pane { display: grid; grid-template-rows: auto auto 1fr; gap: var(--fx-space-2); min-inline-size: 0; padding: var(--fx-space-3); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-transfer__head { display: flex; align-items: center; justify-content: space-between; gap: var(--fx-space-2); font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); }
  .fx-transfer__count { color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-regular); }
  .fx-transfer__list { display: grid; align-content: start; gap: calc(var(--fx-space-1) / 2); margin: 0; padding: 0; list-style: none; block-size: calc(var(--fx-control-h-lg) * 4); overflow: auto; }
  .fx-transfer__list > li[hidden] { display: none; }
  .fx-transfer__item { display: flex; align-items: center; padding-inline: var(--fx-space-2); border-radius: var(--fx-radius-nav); }
  .fx-transfer__item:hover { background: var(--fx-bg-muted); }
  .fx-transfer__item:has(input:checked) { background: var(--fx-bg-brand-subtle); }
  .fx-transfer__item .fx-check { inline-size: 100%; }
  .fx-transfer__empty { padding: var(--fx-space-6) var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); text-align: center; }
  .fx-transfer__empty[hidden] { display: none; }
  .fx-transfer__actions { display: flex; flex-direction: column; justify-content: center; gap: var(--fx-space-2); }
  .fx-transfer__actions .fx-btn { font-size: var(--fx-font-size-md); }
  .fx-transfer__actions .fx-btn:disabled { opacity: 0.4; }
  @media (max-width: 40rem) {
    .fx-transfer { grid-template-columns: 1fr; }
    .fx-transfer__actions { flex-direction: row; justify-content: center; }
    .fx-transfer__actions .fx-btn { rotate: 90deg; }
  }
}

/* tree */
@layer fx.components {
  /* Daraxt (papkalar, boʻlimlar): ichma-ich <details>; chapda yoʻl chizigʻi, chevron (yopiqda −90°), joriy band — brend tusi */
  .fx-tree, .fx-tree ul { display: grid; gap: calc(var(--fx-space-1) / 2); margin: 0; padding: 0; list-style: none; }
  .fx-tree ul { margin-inline-start: calc(var(--fx-space-2) + var(--fx-size-icon-sm) / 2); padding-inline-start: var(--fx-space-2); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-tree__item { display: flex; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-nav-subitem-height); padding-inline: var(--fx-space-2); border-radius: var(--fx-radius-nav); color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); text-decoration: none; cursor: pointer; list-style: none; }
  .fx-tree__item::-webkit-details-marker { display: none; }
  .fx-tree__item:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-tree__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-tree__item[aria-current="page"] { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  summary.fx-tree__item::before { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0.55; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; rotate: -90deg; transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  details[open] > summary.fx-tree__item::before { rotate: 0deg; }
  a.fx-tree__item { padding-inline-start: calc(var(--fx-space-2) + var(--fx-size-icon-sm) + var(--fx-space-2)); }
  /* ---- Kengaytma (2.141, 2.157): checkbox, lazy yuklanish, fayl turi ikoni, ochilish animatsiyasi ---- */
  .fx-tree__item > .fx-check { flex: none; min-block-size: 0; }
  .fx-tree__item[aria-busy="true"]::after { content: ""; flex: none; box-sizing: border-box; margin-inline-start: auto; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); border: var(--fx-border-width-focus) solid color-mix(in oklab, currentColor 20%, transparent); border-block-start-color: currentColor; border-radius: var(--fx-radius-circle); animation: fx-spin var(--fx-duration-spin) linear infinite; }
  @media (prefers-reduced-motion: reduce) { .fx-tree__item[aria-busy="true"]::after { animation: fx-pulse var(--fx-duration-pulse) var(--fx-ease-standard) infinite; } }
  /* Barg ikoni: data-kind="file | image | code | folder" */
  a.fx-tree__item[data-kind] { padding-inline-start: var(--fx-space-2); }
  a.fx-tree__item[data-kind]::before { content: ""; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0.55; mask: var(--_ic) center / contain no-repeat; }
  a.fx-tree__item[data-kind="file"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 1.75h5l3 3v9.5H4z M9 1.75v3h3' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  a.fx-tree__item[data-kind="image"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M2 3h12v10H2z M2 11l4-4 3 3 2-2 3 3' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  a.fx-tree__item[data-kind="code"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5.5 4.5 2 8l3.5 3.5 M10.5 4.5 14 8l-3.5 3.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  a.fx-tree__item[data-kind="folder"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M2 3.5h4.2l1.4 1.5H14v7.5H2z' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  @supports (interpolate-size: allow-keywords) {
    .fx-tree { interpolate-size: allow-keywords; }
    .fx-tree details::details-content { block-size: 0; overflow: clip; transition: block-size var(--fx-motion-base) var(--fx-ease-standard), content-visibility var(--fx-motion-base) allow-discrete; }
    .fx-tree details[open]::details-content { block-size: auto; }
  }
  @media (forced-colors: active) { .fx-tree__item[aria-current="page"] { background: Highlight; color: HighlightText; forced-color-adjust: none; } }
  /* ---- Sudrab koʻchirish va qayta nomlash (4.136): sudralayotgan band xira; papka ustida — ramka va fon («ichiga»), fayl ustida — pastki
     chiziq («keyin»); Ctrl+X bilan olingan band — uzuq ramka. Qayta nomlash — band ichida maydon. Xulq foxui.js → tree. ---- */
  .fx-tree__item[draggable="true"] { cursor: grab; }
  .fx-tree__item[data-dragging] { opacity: 0.45; }
  .fx-tree__item[data-drop="into"] { background: var(--fx-bg-brand-subtle); outline: var(--fx-border-width-focus) solid var(--fx-bg-brand-solid); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-tree__item[data-drop="after"] { box-shadow: none; border-block-end: var(--fx-border-width-focus) solid var(--fx-bg-brand-solid); border-end-start-radius: 0; border-end-end-radius: 0; }
  .fx-tree__item[data-cut] { outline: var(--fx-border-width-default) dashed var(--fx-border-color-strong); outline-offset: calc(var(--fx-border-width-default) * -1); color: var(--fx-text-tertiary); }
  .fx-tree__rename { flex: 1; min-inline-size: 0; block-size: calc(var(--fx-nav-subitem-height) - var(--fx-space-1)); padding: 0 var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-focus); border-radius: var(--fx-radius-badge); background: var(--fx-bg-field); color: var(--fx-text-primary); font: inherit; outline: 0; }
  .fx-tree__rename[aria-invalid="true"] { border-color: var(--fx-border-color-error); }
  .fx-tree__item[data-renaming] { background: var(--fx-bg-muted); }
  .fx-tree details[data-instant]::details-content { transition: none; } /* koʻchirilgan band darhol fokus olsin */
}

/* treegrid */
@layer fx.components {
  /* Daraxt jadvali (#36): iyerarxik qatorlar + ustunlar (APG treegrid). Qator/katak/sarlavha uslubi Ma'lumot to'ridan (.fx-datagrid) olinadi:
     <div class="fx-datagrid fx-treegrid" role="treegrid">. Bu yerda — faqat daraja (chekinish), ochish belgisi va guruh qatori. */
  .fx-treegrid__name { gap: var(--fx-space-1); padding-inline-start: calc(var(--fx-space-3) + var(--_lvl, 0) * var(--fx-space-5)); }
  .fx-treegrid__toggle { flex: none; display: grid; place-items: center; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); border-radius: var(--fx-radius-badge); color: var(--fx-text-tertiary); cursor: pointer; }
  .fx-treegrid__toggle:empty { cursor: default; }
  .fx-treegrid__toggle::before { content: ""; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 3.5 10.5 8 6 12.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-treegrid__toggle[data-leaf]::before { display: none; }
  [aria-expanded="true"] > .fx-treegrid__name .fx-treegrid__toggle::before { rotate: 90deg; }
  .fx-treegrid__toggle:hover { background: var(--fx-bg-muted); color: var(--fx-text-primary); }
  .fx-treegrid__label { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; }
  /* Guruh qatori (ota) — qalin nom va ustunlar xulosasi */
  .fx-datagrid__row[aria-expanded] > .fx-treegrid__name .fx-treegrid__label { font-weight: var(--fx-font-weight-semibold); }
  .fx-treegrid__count { flex: none; margin-inline-start: var(--fx-space-1); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); }
}

/* treeselect */
@layer fx.components {
  /* Daraxtli tanlov (#30): combobox + daraxt qatlami. Yozilsa daraxt filtrlanadi (mos tugunlar va ularning ota-onalari), ← → tugunni yopadi/ochadi.
     Fokus maydonda qoladi (aria-activedescendant). Papka ham tanlanishi mumkin (data-leaf-only — faqat barglar). */
  .fx-treeselect { position: relative; display: inline-block; inline-size: min(100%, var(--fx-popover-width)); }
  .fx-treeselect__popup {
    position: absolute; inset-block-start: calc(100% + var(--fx-space-1)); inset-inline: 0; z-index: 20; max-block-size: calc(var(--fx-popover-width) * 0.9); overflow: auto;
    padding: var(--fx-space-1); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-overlay); background: var(--fx-bg-surface); box-shadow: var(--fx-shadow-lg);
  }
  .fx-treeselect__popup[hidden] { display: none; }
  .fx-treeselect__tree, .fx-treeselect__tree ul { display: grid; gap: calc(var(--fx-space-1) / 2); margin: 0; padding: 0; list-style: none; }
  .fx-treeselect__tree ul { margin-inline-start: var(--fx-space-4); padding-inline-start: var(--fx-space-1); border-inline-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-treeselect__node[aria-expanded="false"] > ul, .fx-treeselect__node[hidden] { display: none; }
  .fx-treeselect__row { display: flex; align-items: center; gap: var(--fx-space-1); min-block-size: calc(var(--fx-control-h-sm) - var(--fx-space-1)); padding-inline: var(--fx-space-1); border-radius: var(--fx-radius-nav); color: var(--fx-text-primary); font-size: var(--fx-font-size-sm); cursor: pointer; }
  .fx-treeselect__row:hover, .fx-treeselect__node[data-active] > .fx-treeselect__row { background: var(--fx-bg-muted); }
  .fx-treeselect__node[data-active] > .fx-treeselect__row { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-treeselect__node[aria-selected="true"] > .fx-treeselect__row { color: var(--fx-text-brand); font-weight: var(--fx-font-weight-medium); }
  .fx-treeselect__node[aria-selected="true"] > .fx-treeselect__row::after {
    content: ""; margin-inline-start: auto; flex: none; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
  }
  .fx-treeselect__twisty { flex: none; display: grid; place-items: center; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); }
  .fx-treeselect__node[aria-expanded] > .fx-treeselect__row > .fx-treeselect__twisty::before {
    content: ""; inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); background: currentColor; opacity: 0.55; rotate: -90deg; transition: rotate var(--fx-motion-fast) var(--fx-ease-standard);
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
  }
  .fx-treeselect__node[aria-expanded="true"] > .fx-treeselect__row > .fx-treeselect__twisty::before { rotate: 0deg; }
  .fx-treeselect__empty { padding: var(--fx-space-6) var(--fx-space-3); color: var(--fx-text-tertiary); font-size: var(--fx-font-size-sm); text-align: center; }
}

/* truncate */
@layer fx.components {
  /* Qisqartirish: 1–n qatordan keyin «…»; kesilgan boʻlsa to‘liq matn title’da (xulq qoʻyadi) va «Koʻproq» tugmasi chiqadi.
     Fayl yoʻli uchun oʻrtadan kesish: __start (kesiladi) + __end (doim koʻrinadi). */
  .fx-truncate { display: grid; gap: var(--fx-space-1); justify-items: start; min-inline-size: 0; }
  .fx-truncate__text { --_n: 1; min-inline-size: 0; max-inline-size: 100%; margin: 0; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: var(--_n); line-clamp: var(--_n); overflow: hidden; overflow-wrap: anywhere; }
  .fx-truncate[data-lines="2"] > .fx-truncate__text { --_n: 2; }
  .fx-truncate[data-lines="3"] > .fx-truncate__text { --_n: 3; }
  .fx-truncate[data-lines="4"] > .fx-truncate__text { --_n: 4; }
  .fx-truncate[data-expanded] > .fx-truncate__text { display: block; -webkit-line-clamp: unset; line-clamp: unset; }
  .fx-truncate__toggle { padding: 0; border: 0; background: none; color: var(--fx-text-brand); font: inherit; font-size: var(--fx-font-size-sm); cursor: pointer; border-radius: var(--fx-radius-badge); }
  .fx-truncate__toggle:hover { text-decoration: underline; }
  .fx-truncate__toggle:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-truncate:not([data-overflow]) > .fx-truncate__toggle { display: none; }
  /* Oʻrtadan kesish */
  .fx-truncate[data-mode="middle"] { display: flex; justify-items: normal; align-items: baseline; gap: 0; max-inline-size: 100%; }
  .fx-truncate__start { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-inline-size: 0; }
  .fx-truncate__end { flex: none; white-space: nowrap; }
}

/* type */
@layer fx.components {
  /* Tipografiya rol shkalasi (4-toʻlqin 4.1–4.5): rol × lg/md/sm — oʻlcham, qator balandligi, vazn va harf oraligʻi bitta
     tokendan keladi (--fx-type-<rol>-*). Vizual rol semantik tegdan mustaqil: <h2 class="fx-type" data-role="headline-sm">.
     Standart rol — body-md. data-fluid="on" — display/headline ekran eniga silliq moslashadi (clamp, breakpoint sakrashisiz). */
  .fx-type {
    --_size: var(--fx-type-body-md-size);
    --_lh: var(--fx-type-body-md-line-height);
    --_w: var(--fx-type-body-md-weight);
    --_tr: var(--fx-type-body-md-tracking);
    margin: 0;
    font-size: var(--_size);
    line-height: var(--_lh);
    font-weight: var(--_w);
    letter-spacing: var(--_tr);
    text-wrap: pretty;
  }
  .fx-type[data-role="display-lg"] { --_size: var(--fx-type-display-lg-size); --_lh: var(--fx-type-display-lg-line-height); --_w: var(--fx-type-display-lg-weight); --_tr: var(--fx-type-display-lg-tracking); }
  .fx-type[data-role="display-md"] { --_size: var(--fx-type-display-md-size); --_lh: var(--fx-type-display-md-line-height); --_w: var(--fx-type-display-md-weight); --_tr: var(--fx-type-display-md-tracking); }
  .fx-type[data-role="display-sm"] { --_size: var(--fx-type-display-sm-size); --_lh: var(--fx-type-display-sm-line-height); --_w: var(--fx-type-display-sm-weight); --_tr: var(--fx-type-display-sm-tracking); }
  .fx-type[data-role="headline-lg"] { --_size: var(--fx-type-headline-lg-size); --_lh: var(--fx-type-headline-lg-line-height); --_w: var(--fx-type-headline-lg-weight); --_tr: var(--fx-type-headline-lg-tracking); }
  .fx-type[data-role="headline-md"] { --_size: var(--fx-type-headline-md-size); --_lh: var(--fx-type-headline-md-line-height); --_w: var(--fx-type-headline-md-weight); --_tr: var(--fx-type-headline-md-tracking); }
  .fx-type[data-role="headline-sm"] { --_size: var(--fx-type-headline-sm-size); --_lh: var(--fx-type-headline-sm-line-height); --_w: var(--fx-type-headline-sm-weight); --_tr: var(--fx-type-headline-sm-tracking); }
  .fx-type[data-role="title-lg"] { --_size: var(--fx-type-title-lg-size); --_lh: var(--fx-type-title-lg-line-height); --_w: var(--fx-type-title-lg-weight); --_tr: var(--fx-type-title-lg-tracking); }
  .fx-type[data-role="title-md"] { --_size: var(--fx-type-title-md-size); --_lh: var(--fx-type-title-md-line-height); --_w: var(--fx-type-title-md-weight); --_tr: var(--fx-type-title-md-tracking); }
  .fx-type[data-role="title-sm"] { --_size: var(--fx-type-title-sm-size); --_lh: var(--fx-type-title-sm-line-height); --_w: var(--fx-type-title-sm-weight); --_tr: var(--fx-type-title-sm-tracking); }
  .fx-type[data-role="body-lg"] { --_size: var(--fx-type-body-lg-size); --_lh: var(--fx-type-body-lg-line-height); --_w: var(--fx-type-body-lg-weight); --_tr: var(--fx-type-body-lg-tracking); }
  .fx-type[data-role="body-md"] { --_size: var(--fx-type-body-md-size); --_lh: var(--fx-type-body-md-line-height); --_w: var(--fx-type-body-md-weight); --_tr: var(--fx-type-body-md-tracking); }
  .fx-type[data-role="body-sm"] { --_size: var(--fx-type-body-sm-size); --_lh: var(--fx-type-body-sm-line-height); --_w: var(--fx-type-body-sm-weight); --_tr: var(--fx-type-body-sm-tracking); }
  .fx-type[data-role="label-lg"] { --_size: var(--fx-type-label-lg-size); --_lh: var(--fx-type-label-lg-line-height); --_w: var(--fx-type-label-lg-weight); --_tr: var(--fx-type-label-lg-tracking); }
  .fx-type[data-role="label-md"] { --_size: var(--fx-type-label-md-size); --_lh: var(--fx-type-label-md-line-height); --_w: var(--fx-type-label-md-weight); --_tr: var(--fx-type-label-md-tracking); }
  .fx-type[data-role="label-sm"] { --_size: var(--fx-type-label-sm-size); --_lh: var(--fx-type-label-sm-line-height); --_w: var(--fx-type-label-sm-weight); --_tr: var(--fx-type-label-sm-tracking); }

  /* Display va headline — sarlavha shrifti (data-fx-font); oʻlcham moslashuvi bilan birga (shrift almashsa sigʻadi) */
  .fx-type:is([data-role^="display"], [data-role^="headline"]) { font-family: var(--fx-font-family-display); font-size-adjust: var(--fx-font-adjust-display); text-wrap: balance; }
  /* Fluid: hero va sahifa sarlavhasi ekran eniga silliq moslashadi */
  .fx-type[data-fluid="on"]:is([data-role="display-lg"]) { --_size: var(--fx-font-size-fluid-xl); }
  .fx-type[data-fluid="on"]:is([data-role="display-md"]) { --_size: var(--fx-font-size-fluid-lg); }
  .fx-type[data-fluid="on"]:is([data-role="display-sm"], [data-role="headline-lg"]) { --_size: var(--fx-font-size-fluid-md); }
  .fx-type[data-fluid="on"]:is([data-role="headline-md"], [data-role="headline-sm"]) { --_size: var(--fx-font-size-fluid-sm); }
  /* Eyebrow: kichik KATTA HARFLI yorliq sarlavha ustida (label-sm + wider tracking) */
  .fx-type[data-case="upper"] { text-transform: uppercase; }
  /* Ohang */
  .fx-type[data-tone="secondary"] { color: var(--fx-text-secondary); }
  .fx-type[data-tone="tertiary"] { color: var(--fx-text-tertiary); }
  .fx-type[data-tone="brand"] { color: var(--fx-text-brand); }
  /* Rolni buzmasdan qator balandligi / harf oraligʻini almashtirish */
  .fx-type[data-leading="tight"] { --_lh: var(--fx-line-height-tight); }
  .fx-type[data-leading="snug"] { --_lh: var(--fx-line-height-snug); }
  .fx-type[data-leading="normal"] { --_lh: var(--fx-line-height-normal); }
  .fx-type[data-leading="relaxed"] { --_lh: var(--fx-line-height-relaxed); }
  .fx-type[data-tracking="tight"] { --_tr: var(--fx-tracking-tight); }
  .fx-type[data-tracking="normal"] { --_tr: var(--fx-tracking-normal); }
  .fx-type[data-tracking="wide"] { --_tr: var(--fx-tracking-wide); }
  .fx-type[data-tracking="wider"] { --_tr: var(--fx-tracking-wider); }
  /* KPI raqami: teng enli raqamlar, raqam shrifti */
  .fx-type[data-numeric] { font-family: var(--fx-font-family-numeric); font-size-adjust: var(--fx-font-adjust-numeric); font-variant-numeric: tabular-nums; }
}

/* upsell */
@layer fx.components {
  /* Upsell / qulflangan funksiya (4.192, naqsh): «Pro» belgisi (qulf shakli + soʻz), yangilash taklifi banneri, foyda roʻyxatli karta,
     qulflangan koʻrinish (ostida xiralashgan namuna — inert, ustida qulf + taklif). Popover ichida ham ishlaydi. Faqat CSS. */
  .fx-upsell { display: grid; gap: var(--fx-space-3); color: var(--fx-text-primary); }
  .fx-upsell__badge { display: inline-flex; align-items: center; gap: calc(var(--fx-space-1) / 2 * 3); padding: calc(var(--fx-space-1) / 2) var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-semibold); line-height: 1.3; white-space: nowrap; vertical-align: middle; justify-self: start; }
  .fx-upsell__badge > svg, .fx-upsell__lock > svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); }
  .fx-upsell__title { margin: 0; font-size: var(--fx-font-size-md); font-weight: var(--fx-font-weight-semibold); }
  .fx-upsell__text { margin: 0; color: var(--fx-text-secondary); font-size: var(--fx-font-size-sm); }
  .fx-upsell__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--fx-space-2); }
  .fx-upsell__price { color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-upsell__list { display: grid; gap: var(--fx-space-2); margin: 0; padding: 0; list-style: none; font-size: var(--fx-font-size-sm); }
  .fx-upsell__list > li { display: flex; gap: var(--fx-space-2); }
  .fx-upsell__list > li::before { content: "✓"; flex: none; color: var(--fx-text-brand); font-weight: var(--fx-font-weight-semibold); }
  /* Banner: chapda qulf belgisi, oʻrtada matn, oʻngda tugma */
  .fx-upsell[data-variant="banner"] { grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--fx-space-3) var(--fx-space-4); padding: var(--fx-space-4); border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); background: linear-gradient(to right, var(--fx-bg-brand-subtle), var(--fx-bg-surface)); }
  .fx-upsell[data-variant="banner"] .fx-upsell__body { display: grid; gap: var(--fx-space-1); min-inline-size: 0; }
  .fx-upsell__lock { display: grid; place-items: center; inline-size: var(--fx-control-h-md); block-size: var(--fx-control-h-md); border-radius: var(--fx-radius-control); background: var(--fx-bg-brand-solid); color: var(--fx-text-on-brand); }
  /* Karta: popover yoki yon panel uchun — sarlavha, foyda roʻyxati, narx, tugma */
  .fx-upsell[data-variant="card"] { gap: var(--fx-space-4); max-inline-size: var(--fx-popover-width); padding: var(--fx-space-5); border: var(--fx-border-width-default) solid var(--fx-border-color-surface); border-radius: var(--fx-radius-surface); background: var(--fx-bg-surface); }
  .fx-popover > .fx-upsell[data-variant="card"] { padding: 0; border: 0; background: none; }
  /* Qulflangan: namuna xiralashtirilgan va inert, ustida markazda qulf + taklif */
  .fx-upsell[data-variant="locked"] { display: grid; gap: 0; overflow: hidden; border: var(--fx-border-width-default) solid var(--fx-border-color-default); border-radius: var(--fx-radius-surface); }
  .fx-upsell[data-variant="locked"] > * { grid-area: 1 / 1; }
  .fx-upsell__preview { filter: blur(calc(var(--fx-space-1) * 0.75)) grayscale(0.4); opacity: 0.55; pointer-events: none; user-select: none; }
  .fx-upsell__overlay { display: grid; place-content: center; justify-items: center; gap: var(--fx-space-3); padding: var(--fx-space-6); background: color-mix(in oklab, var(--fx-bg-surface) 55%, transparent); text-align: center; }
  .fx-upsell__overlay .fx-upsell__text { max-inline-size: 36ch; }
  .fx-upsell[data-variant="locked"] .fx-upsell__lock { inline-size: var(--fx-control-h-lg); block-size: var(--fx-control-h-lg); border-radius: var(--fx-radius-circle); }
  /* Qulflangan menyu/band: matn + belgi, bosilsa popover (taklif) ochiladi */
  .fx-upsell__item { display: inline-flex; align-items: center; gap: var(--fx-space-2); }
  .fx-upsell__item[aria-disabled="true"] { color: var(--fx-text-secondary); }
  @media (max-width: 40em) { .fx-upsell[data-variant="banner"] { grid-template-columns: auto minmax(0, 1fr); } .fx-upsell[data-variant="banner"] > .fx-upsell__actions { grid-column: 1 / -1; } }
}

/* videodialog */
@layer fx.components {
  /* Video dialog (4.83): muqova rasm + oʻynatish tugmasi; bosilsa video modal oynada (native <dialog>) ochiladi, yopilsa toʻxtaydi.
     Ochish — commandfor/command="show-modal" (yoki foxui.js zaxirasi), video manbasi faqat ochilganda yuklanadi (iframe data-src yoki
     <video preload="none">) — sahifa yengil qoladi. Esc, fon yoki «Yopish» bilan yopiladi; fokus muqovaga qaytadi. */
  .fx-videodialog { display: block; min-inline-size: 0; }
  .fx-videodialog__cover {
    position: relative;
    display: grid;
    inline-size: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
    border: var(--fx-border-width-default) solid var(--fx-border-color-surface);
    border-radius: var(--fx-radius-surface);
    background: var(--fx-bg-muted);
    color: var(--fx-text-on-brand);
    cursor: pointer;
    box-shadow: var(--fx-shadow-md);
  }
  .fx-videodialog__cover > img { grid-area: 1 / 1; display: block; inline-size: 100%; block-size: auto; aspect-ratio: 16 / 9; object-fit: cover; transition: scale var(--fx-motion-slow) var(--fx-ease-standard), filter var(--fx-motion-base) var(--fx-ease-standard); }
  .fx-videodialog__cover:hover > img { scale: 1.03; filter: brightness(0.92); }
  .fx-videodialog__cover:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-videodialog__play {
    grid-area: 1 / 1;
    place-self: center;
    display: grid;
    place-items: center;
    inline-size: calc(var(--fx-control-h-lg) * 1.75);
    aspect-ratio: 1;
    border-radius: var(--fx-radius-circle);
    background: color-mix(in oklab, var(--fx-bg-brand-solid) 88%, transparent);
    box-shadow: var(--fx-shadow-lg);
    transition: scale var(--fx-motion-base) var(--fx-ease-spring);
  }
  .fx-videodialog__play::before { content: ""; position: absolute; inset: calc(var(--fx-space-2) * -1); border-radius: inherit; background: color-mix(in oklab, var(--fx-bg-brand-solid) 25%, transparent); z-index: -1; }
  .fx-videodialog__play { position: relative; isolation: isolate; }
  .fx-videodialog__play > svg { inline-size: var(--fx-size-icon-lg); block-size: var(--fx-size-icon-lg); margin-inline-start: calc(var(--fx-space-1) / 2); fill: currentColor; }
  .fx-videodialog__cover:hover .fx-videodialog__play { scale: 1.08; }
  .fx-videodialog__cover:active .fx-videodialog__play { scale: var(--fx-motion-press); }
  .fx-videodialog__caption { grid-area: 1 / 1; align-self: end; justify-self: start; margin: var(--fx-space-3); padding: var(--fx-space-1) var(--fx-space-3); border-radius: var(--fx-radius-pill); background: color-mix(in oklab, var(--fx-bg-surface) 88%, transparent); color: var(--fx-text-primary); font-size: var(--fx-font-size-xs); font-weight: var(--fx-font-weight-medium); font-variant-numeric: tabular-nums; }
  .fx-videodialog__dialog {
    inline-size: min(100vw - var(--fx-space-8), calc(var(--fx-space-12) * 20));
    max-inline-size: none;
    margin: auto;
    padding: 0;
    overflow: visible;
    border: 0;
    border-radius: var(--fx-radius-overlay);
    background: transparent;
    opacity: 0;
    scale: var(--fx-motion-scale-enter);
    transition: opacity var(--fx-motion-exit-base) var(--fx-ease-exit), scale var(--fx-motion-exit-base) var(--fx-ease-exit), display var(--fx-motion-exit-base) allow-discrete, overlay var(--fx-motion-exit-base) allow-discrete;
  }
  .fx-videodialog__dialog[open] { opacity: 1; scale: 1; transition-duration: var(--fx-motion-slow); transition-timing-function: var(--fx-ease-enter); }
  @starting-style { .fx-videodialog__dialog[open] { opacity: 0; scale: var(--fx-motion-scale-enter); } }
  .fx-videodialog__dialog::backdrop { background: color-mix(in oklab, var(--fx-color-black) 78%, transparent); backdrop-filter: blur(var(--fx-space-1)); }
  .fx-videodialog__frame { position: relative; overflow: hidden; aspect-ratio: 16 / 9; border-radius: var(--fx-radius-overlay); background: var(--fx-color-black); }
  .fx-videodialog__frame > :is(iframe, video) { display: block; inline-size: 100%; block-size: 100%; border: 0; }
  .fx-videodialog__close { position: absolute; inset-block-end: calc(100% + var(--fx-space-2)); inset-inline-end: 0; margin: 0; }
  .fx-videodialog__close > button { display: inline-flex; align-items: center; gap: var(--fx-space-2); min-block-size: var(--fx-size-min-target); padding: 0 var(--fx-space-3); border: 0; border-radius: var(--fx-radius-pill); background: color-mix(in oklab, var(--fx-color-white) 16%, transparent); color: var(--fx-color-white); font: inherit; font-size: var(--fx-font-size-sm); cursor: pointer; }
  .fx-videodialog__close > button:hover { background: color-mix(in oklab, var(--fx-color-white) 26%, transparent); }
  .fx-videodialog__close > button:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-color-white); }
  .fx-videodialog__close svg { inline-size: var(--fx-size-icon-sm); block-size: var(--fx-size-icon-sm); fill: currentColor; }
  .fx-videodialog[data-ratio="9/16"] :is(.fx-videodialog__cover > img, .fx-videodialog__frame) { aspect-ratio: 9 / 16; }
  .fx-videodialog[data-ratio="9/16"] .fx-videodialog__dialog { inline-size: min(100vw - var(--fx-space-8), calc((100dvh - var(--fx-space-12) * 2) * 9 / 16)); }
  @media (forced-colors: active) { .fx-videodialog__play { border: var(--fx-border-width-focus) solid ButtonText; } }
}

/* videoplayer */
@layer fx.components {
  /* Video pleyer (#119): <video> ustida oʻz boshqaruvi — ijro/pauza, progress, vaqt, ovoz, taglavha (CC), toʻliq ekran, klaviatura.
     Boshqaruv JS bilan yaratiladi (data-fx-videoplayer); ijro paytida 2,5 soniyadan keyin yashirinadi, fokus yoki harakat qaytaradi. */
  .fx-videoplayer { position: relative; overflow: hidden; border-radius: var(--fx-radius-surface); background: var(--fx-bg-overlay); color: var(--fx-text-on-brand); }
  .fx-videoplayer:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-videoplayer__video { display: block; inline-size: 100%; block-size: auto; max-block-size: 100%; background: var(--fx-bg-overlay); }
  .fx-videoplayer:fullscreen { border-radius: 0; }
  .fx-videoplayer:fullscreen .fx-videoplayer__video { block-size: 100%; object-fit: contain; }
  .fx-videoplayer__big {
    position: absolute; inset: 0; margin: auto; inline-size: var(--fx-size-control-lg); block-size: var(--fx-size-control-lg); padding: 0;
    border: 0; border-radius: var(--fx-radius-circle); background: color-mix(in oklab, var(--fx-bg-overlay) 70%, transparent); color: var(--fx-text-on-brand); cursor: pointer;
    transition: opacity var(--fx-motion-base) var(--fx-ease-standard), scale var(--fx-motion-fast) var(--fx-ease-standard);
  }
  .fx-videoplayer__big::before { content: ""; display: block; inline-size: 50%; block-size: 50%; margin: auto; background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 4.5v15l12-7.5z' fill='black'/%3E%3C/svg%3E") center / contain no-repeat; }
  .fx-videoplayer__big:hover { scale: 1.06; }
  .fx-videoplayer__big:active { scale: var(--fx-motion-press); }
  .fx-videoplayer__big:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
  .fx-videoplayer[data-playing] .fx-videoplayer__big { opacity: 0; pointer-events: none; }
  .fx-videoplayer__bar {
    position: absolute; inset-inline: 0; inset-block-end: 0; display: grid; gap: calc(var(--fx-space-1) / 2); padding: var(--fx-space-6) var(--fx-space-3) var(--fx-space-2);
    background: linear-gradient(to top, color-mix(in oklab, var(--fx-bg-overlay) 85%, transparent), transparent);
    transition: opacity var(--fx-motion-base) var(--fx-ease-standard), translate var(--fx-motion-base) var(--fx-ease-standard);
  }
  .fx-videoplayer[data-idle] .fx-videoplayer__bar { opacity: 0; translate: 0 var(--fx-motion-shift-sm); pointer-events: none; }
  .fx-videoplayer[data-idle] { cursor: none; }
  .fx-videoplayer__seek { --fx-slider-value: 0%; block-size: var(--fx-space-5); }
  .fx-videoplayer__row { display: flex; align-items: center; gap: var(--fx-space-1); }
  .fx-videoplayer__btn {
    display: grid; place-items: center; flex: none; inline-size: var(--fx-size-control-md); block-size: var(--fx-size-control-md); padding: 0;
    border: 0; border-radius: var(--fx-radius-control); background: transparent; color: inherit; cursor: pointer;
    transition: background var(--fx-motion-fast) var(--fx-ease-standard), scale var(--fx-motion-instant) var(--fx-ease-standard);
  }
  .fx-videoplayer__btn:hover { background: color-mix(in oklab, var(--fx-text-on-brand) 18%, transparent); }
  .fx-videoplayer__btn:active { scale: var(--fx-motion-press); }
  .fx-videoplayer__btn:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); }
  .fx-videoplayer__btn[hidden] { display: none; }
  .fx-videoplayer__btn::before { content: ""; inline-size: var(--fx-size-icon-md); block-size: var(--fx-size-icon-md); background: currentColor; mask: var(--_ic) center / contain no-repeat; }
  .fx-videoplayer__btn[data-icon="play"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 4.5v15l12-7.5z' fill='black'/%3E%3C/svg%3E"); }
  .fx-videoplayer__btn[data-icon="pause"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.5 4.5h4v15h-4zM13.5 4.5h4v15h-4z' fill='black'/%3E%3C/svg%3E"); }
  .fx-videoplayer__btn[data-icon="volume"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 9.5v5h3.5L12 18.5v-13L7.5 9.5z' fill='black'/%3E%3Cpath d='M15.5 9a4 4 0 010 6M18 6.5a8 8 0 010 11' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E"); }
  .fx-videoplayer__btn[data-icon="mute"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 9.5v5h3.5L12 18.5v-13L7.5 9.5z' fill='black'/%3E%3Cpath d='M16 9.5l5 5M21 9.5l-5 5' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E"); }
  .fx-videoplayer__btn[data-icon="cc"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='5' width='18' height='14' rx='3' fill='none' stroke='black' stroke-width='2'/%3E%3Cpath d='M10 10.2a2.2 2.2 0 100 3.6M17 10.2a2.2 2.2 0 100 3.6' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E"); }
  .fx-videoplayer__btn[data-icon="fs"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .fx-videoplayer__btn[data-icon="fsx"] { --_ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 4v5H4M15 4v5h5M9 20v-5H4M15 20v-5h5' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  /* CC yoniq — tagiga chiziq (rangdan tashqari belgi) */
  .fx-videoplayer__btn { position: relative; }
  .fx-videoplayer__btn[aria-pressed="true"] { background: color-mix(in oklab, var(--fx-text-on-brand) 24%, transparent); }
  .fx-videoplayer__btn[aria-pressed="true"]::after { content: ""; position: absolute; inset-inline: var(--fx-space-2); inset-block-end: calc(var(--fx-space-1) / 2); block-size: var(--fx-border-width-focus); border-radius: var(--fx-radius-circle); background: currentColor; }
  .fx-videoplayer .fx-slider::-webkit-slider-runnable-track { background: linear-gradient(to right, var(--fx-text-on-brand) var(--fx-slider-value), color-mix(in oklab, var(--fx-text-on-brand) 30%, transparent) var(--fx-slider-value)); }
  .fx-videoplayer .fx-slider::-moz-range-track { background: color-mix(in oklab, var(--fx-text-on-brand) 30%, transparent); }
  .fx-videoplayer .fx-slider::-moz-range-progress { background: var(--fx-text-on-brand); }
  .fx-videoplayer__vol { inline-size: calc(var(--fx-size-control-lg) * 1.4); --fx-slider-value: 100%; }
  .fx-videoplayer__time { margin-inline-start: var(--fx-space-2); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .fx-videoplayer__spacer { flex: 1; }
  .fx-videoplayer video::cue { font-size: var(--fx-font-size-md); }
}

/* views */
@layer fx.components {
  /* Saqlangan koʻrinishlar (PDP .eco-listpage__views): roʻyxat sahifasi tepasida «Hammasi 248 · Muddati oʻtgan 12 · Mening 31» — bosilsa filtr almashadi.
     Tab emas (panel yoʻq, bitta jadval): tugmalar guruhi, tanlangani aria-pressed. Son — alohida xira belgi. */
  .fx-views { display: flex; align-items: center; gap: var(--fx-space-5); overflow-x: auto; scrollbar-width: none; border-block-end: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-views__item { position: relative; display: inline-flex; align-items: center; gap: var(--fx-space-2); flex: none; padding-block: var(--fx-space-3); border: 0; background: transparent; color: var(--fx-text-secondary); font: inherit; font-size: var(--fx-font-size-sm); font-weight: var(--fx-font-weight-medium); white-space: nowrap; cursor: pointer; }
  .fx-views__item::after { content: ""; position: absolute; inset: auto 0 calc(var(--fx-border-width-default) * -1); block-size: var(--fx-border-width-focus); border-radius: var(--fx-border-width-focus); background: transparent; transition: background-color var(--fx-motion-fast) var(--fx-ease-standard); }
  .fx-views__item:hover { color: var(--fx-text-primary); }
  .fx-views__item[aria-pressed="true"] { color: var(--fx-text-primary); }
  .fx-views__item[aria-pressed="true"]::after { background: var(--fx-bg-brand-solid); }
  .fx-views__item:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: calc(var(--fx-border-width-focus) * -1); border-radius: var(--fx-radius-badge); }
  .fx-views__count { padding-inline: var(--fx-space-2); border-radius: var(--fx-radius-badge); background: var(--fx-bg-muted); color: var(--fx-text-secondary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-views__item[aria-pressed="true"] .fx-views__count { background: var(--fx-bg-brand-subtle); color: var(--fx-text-brand); }
  .fx-views__count[data-tone="error"] { background: var(--fx-bg-error-subtle); color: var(--fx-fg-error); }
  .fx-views__add { margin-inline-start: auto; color: var(--fx-text-tertiary); }
}

/* virtuallist */
@layer fx.components {
  /* Virtual roʻyxat (4.137): minglab band (mijozlar, mahsulotlar, shaharlar) — DOMda faqat koʻrinadigan qatorlar (+ zaxira) chiziladi.
     APG listbox (aria-activedescendant): fokus roʻyxatda, faol band ramka + fon, tanlangan — ✓ va qalin (rangdan tashqari).
     Har bandda aria-setsize / aria-posinset — ekran oʻquvchi «4 521 / 10 000» deb aytadi. Balandlik: --fx-virtuallist-height. */
  .fx-virtuallist {
    --fx-virtuallist-height: calc(var(--fx-space-12) * 6);
    --_row: var(--fx-control-h-md);
    position: relative;
    display: block;
    max-block-size: var(--fx-virtuallist-height);
    overflow: auto;
    overscroll-behavior: contain;
    border: var(--fx-border-width-default) solid var(--fx-border-color-default);
    border-radius: var(--fx-radius-control);
    background: var(--fx-bg-surface);
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
    contain: strict;
    block-size: var(--fx-virtuallist-height);
  }
  .fx-virtuallist:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-default); }
  .fx-virtuallist__space { position: relative; inline-size: 100%; }
  .fx-virtuallist__window { position: absolute; inset-inline: 0; inset-block-start: 0; translate: 0 var(--_y, 0); padding-inline: var(--fx-space-1); }
  .fx-virtuallist__item {
    display: flex;
    align-items: center;
    gap: var(--fx-space-3);
    box-sizing: border-box;
    block-size: var(--_row);
    padding-inline: var(--fx-space-3);
    border-radius: var(--fx-radius-nav);
    cursor: pointer;
    white-space: nowrap;
  }
  .fx-virtuallist__item:hover { background: var(--fx-bg-subtle); }
  .fx-virtuallist__item[data-active] { background: var(--fx-bg-muted); box-shadow: none; outline: var(--fx-border-width-default) solid var(--fx-border-color-strong); outline-offset: calc(var(--fx-border-width-default) * -1); }
  .fx-virtuallist:not(:focus-visible) .fx-virtuallist__item[data-active] { outline: 0; }
  .fx-virtuallist__item[aria-selected="true"] { font-weight: var(--fx-font-weight-semibold); }
  .fx-virtuallist__item[aria-selected="true"]::after { content: "✓"; margin-inline-start: auto; color: var(--fx-text-brand); }
  .fx-virtuallist__label { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; }
  .fx-virtuallist__meta { margin-inline-start: auto; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  .fx-virtuallist__item:has(.fx-virtuallist__meta)[aria-selected="true"]::after { margin-inline-start: 0; }
  .fx-virtuallist[data-size="sm"] { --_row: var(--fx-control-h-sm); }
  .fx-virtuallist__count { margin: 0; color: var(--fx-text-tertiary); font-size: var(--fx-font-size-xs); font-variant-numeric: tabular-nums; }
  @media (forced-colors: active) { .fx-virtuallist__item[data-active] { outline-color: Highlight; } }
}

/* vt */
@layer fx.components {
  /* View Transitions presetlari (4-toʻlqin 4.28–4.29). <html data-fx-vt="fade|axis|slide"> + behaviors/vt.js.
     fade — oʻchib-yonish (M3 fade-through), axis — gorizontal oʻq boʻyicha qisqa siljish (M3 shared axis X), slide — butun en
     boʻyicha surilish (mobil stek). "back" turida yoʻnalish teskari; RTL’da koʻzgulanadi. Harakat kamaytirilsa — oʻtish yoʻq. */
  :root { --_vt-dir: 1; }
  :root:dir(rtl) { --_vt-dir: -1; }
  :root:active-view-transition-type(back) { --_vt-dir: -1; }
  :root:dir(rtl):active-view-transition-type(back) { --_vt-dir: 1; }

  @media (prefers-reduced-motion: no-preference) {
    :root[data-fx-vt]::view-transition-group(root) { animation-duration: var(--fx-motion-slow); animation-timing-function: var(--fx-ease-emphasized); }
    /* fade-through: eski tez soʻnadi, yangi biroz kechikib kattalashib chiqadi */
    :root[data-fx-vt="fade"]::view-transition-old(root) { animation: fx-vt-fade-out var(--fx-motion-exit-base) var(--fx-ease-exit) both; }
    :root[data-fx-vt="fade"]::view-transition-new(root) { animation: fx-vt-fade-in var(--fx-motion-slow) var(--fx-ease-enter) var(--fx-motion-exit-fast) both; }
    /* shared axis X */
    :root[data-fx-vt="axis"]::view-transition-old(root) { animation: fx-vt-axis-out var(--fx-motion-exit-slow) var(--fx-ease-exit) both; }
    :root[data-fx-vt="axis"]::view-transition-new(root) { animation: fx-vt-axis-in var(--fx-motion-slow) var(--fx-ease-emphasized) both; }
    /* slide: yangi sahifa yon tomondan surilib keladi, eskisi biroz orqaga ketadi */
    :root[data-fx-vt="slide"]::view-transition-old(root) { animation: fx-vt-slide-out var(--fx-motion-slower) var(--fx-ease-sheet) both; }
    :root[data-fx-vt="slide"]::view-transition-new(root) { animation: fx-vt-slide-in var(--fx-motion-slower) var(--fx-ease-sheet) both; }
    /* Umumiy element (container transform): karta → panel/sahifa. Nom — data-vt-name yoki fxMorph() */
    ::view-transition-group(*.fx-morph) { animation-duration: var(--fx-motion-slower); animation-timing-function: var(--fx-ease-emphasized); }
    ::view-transition-old(*.fx-morph), ::view-transition-new(*.fx-morph) { block-size: 100%; overflow: clip; }
    ::view-transition-old(*.fx-morph) { animation: fx-vt-fade-out var(--fx-motion-exit-base) var(--fx-ease-exit) both; }
    ::view-transition-new(*.fx-morph) { animation: fx-vt-fade-in-plain var(--fx-motion-slow) var(--fx-ease-enter) var(--fx-motion-exit-fast) both; }
  }
  /* Harakat oʻchirilgan: hech qanday oʻtish animatsiyasi */
  @media (prefers-reduced-motion: reduce) {
    ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
  }
  :root[data-fx-motion="none"]::view-transition-group(*),
  :root[data-fx-motion="none"]::view-transition-old(*),
  :root[data-fx-motion="none"]::view-transition-new(*) { animation: none !important; }

  @keyframes fx-vt-fade-out { to { opacity: 0; } }
  @keyframes fx-vt-fade-in { from { opacity: 0; scale: var(--fx-motion-scale-enter); } }
  @keyframes fx-vt-fade-in-plain { from { opacity: 0; } }
  @keyframes fx-vt-axis-out { to { opacity: 0; translate: calc(var(--fx-motion-shift-lg) * -1 * var(--_vt-dir)) 0; } }
  @keyframes fx-vt-axis-in { from { opacity: 0; translate: calc(var(--fx-motion-shift-lg) * var(--_vt-dir)) 0; } }
  @keyframes fx-vt-slide-out { to { opacity: 0.6; translate: calc(-25% * var(--_vt-dir)) 0; } }
  @keyframes fx-vt-slide-in { from { translate: calc(100% * var(--_vt-dir)) 0; } }

  /* Yordamchi: bu element oʻtishda alohida «qatlam» boʻlmasin (masalan, yopishqoq header har sahifada joyida tursin) */
  .fx-vt-static { view-transition-name: fx-static; }
  ::view-transition-group(fx-static) { animation: none; }
}

/* watermark */
@layer fx.components {
  /* Suv belgisi (4.144, #49): maxfiy hujjat, skrinshot qilinadigan hisobot yoki demo ustida takrorlanuvchi xira yozuv (kim, qachon).
     Qatlam bezak — aria-hidden, sichqonchani oʻtkazadi (matnni belgilash, bosish ishlaydi). Matnni foxui.js → watermark toʻrga yoyadi;
     qatlam oʻchirib tashlansa qayta qoʻyiladi (DevTools’da bir bosishda yoʻqolmasin). Bosmada ham chiqadi. */
  .fx-watermark { position: relative; isolation: isolate; }
  .fx-watermark__layer {
    --_gap: var(--fx-space-12);
    position: absolute;
    inset: 0;
    z-index: 1;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(calc(var(--fx-space-12) * 5), 1fr));
    align-content: start;
    gap: var(--_gap);
    padding: var(--fx-space-6);
    overflow: hidden;
    color: var(--fx-text-primary);
    font-size: var(--fx-font-size-sm);
    font-weight: var(--fx-font-weight-semibold);
    line-height: 1.3;
    text-align: center;
    white-space: nowrap;
    opacity: 0.09;
    pointer-events: none;
    user-select: none;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }
  .fx-watermark__layer > span { rotate: -22deg; }
  .fx-watermark__layer > span:nth-child(even) { translate: 0 calc(var(--_gap) / 2); }
  .fx-watermark[data-density="high"] .fx-watermark__layer { --_gap: var(--fx-space-6); grid-template-columns: repeat(auto-fill, minmax(calc(var(--fx-space-12) * 3.5), 1fr)); font-size: var(--fx-font-size-xs); }
  .fx-watermark[data-density="low"] .fx-watermark__layer { --_gap: calc(var(--fx-space-12) * 2); }
  /* Ostida: matn yozuv ustida (oʻqish oson), yozuv faqat boʻsh joyda koʻrinadi — fon shaffof boʻlishi kerak */
  .fx-watermark[data-layer="under"] .fx-watermark__layer { z-index: -1; }
  .fx-watermark[data-tone="danger"] .fx-watermark__layer { color: var(--fx-text-error); opacity: 0.12; }
  @media (forced-colors: active) { .fx-watermark__layer { color: GrayText; } }
}

/* wizard */
@layer fx.components {
  /* Koʻp bosqichli forma: yuqorida Qadamlar, ostida joriy panel, pastda Orqaga/Keyingi. Oxirgi panel — javoblar xulosasi. */
  .fx-wizard { display: grid; gap: var(--fx-space-6); }
  .fx-wizard__panel { display: grid; gap: var(--fx-space-4); align-content: start; }
  .fx-wizard__panel[hidden] { display: none; }
  .fx-wizard__title { margin: 0; font-size: var(--fx-font-size-lg); font-weight: var(--fx-font-weight-semibold); color: var(--fx-text-primary); }
  .fx-wizard__title:focus { outline: none; }
  .fx-wizard__text { margin: 0; font-size: var(--fx-font-size-sm); color: var(--fx-text-secondary); }
  .fx-wizard__footer { display: flex; align-items: center; justify-content: flex-end; gap: var(--fx-space-3); padding-block-start: var(--fx-space-4); border-block-start: var(--fx-border-width-default) solid var(--fx-border-color-default); }
  .fx-wizard__footer > [data-wizard="prev"] { margin-inline-end: auto; }
  .fx-wizard__footer [hidden] { display: none; }
  .fx-wizard__status { margin-inline-end: auto; font-size: var(--fx-font-size-xs); color: var(--fx-text-tertiary); font-variant-numeric: tabular-nums; }
  .fx-wizard__review > dd { display: flex; align-items: baseline; justify-content: space-between; gap: var(--fx-space-4); }
  .fx-wizard__edit { flex: none; padding: 0; border: 0; background: none; font: inherit; color: var(--fx-text-brand); text-decoration: underline; text-underline-offset: var(--fx-space-1); cursor: pointer; border-radius: var(--fx-radius-control); }
  .fx-wizard__edit:focus-visible { outline: var(--fx-border-width-focus) solid var(--fx-border-color-focus); outline-offset: var(--fx-border-width-focus); }
}
