@layer tokens, product-theme;

@layer product-theme {
  [data-design-system='fluent-web'] {
    color-scheme: light;

    --ty-design-name: fluent-web;
    --ty-color-background: #ffffff;
    --ty-color-on-background: #242424;
    --ty-color-surface: #ffffff;
    --ty-color-surface-hover: #f5f5f5;
    --ty-color-surface-pressed: #e0e0e0;
    --ty-color-surface-elevated: #ffffff;
    --ty-color-text: #242424;
    --ty-color-text-muted: #616161;
    --ty-color-border: #d1d1d1;
    --ty-color-border-strong: #8a8886;
    --ty-color-accent: #0f6cbd;
    --ty-color-on-accent: #ffffff;
    --ty-color-accent-hover: #115ea3;
    --ty-color-accent-pressed: #0f548c;
    --ty-color-danger: #c50f1f;
    --ty-color-on-danger: #ffffff;
    --ty-color-disabled-surface: #f0f0f0;
    --ty-color-disabled-border: #e0e0e0;
    --ty-color-disabled-text: #bdbdbd;

    --ty-font-family:
      'Segoe UI', 'Segoe UI Web', system-ui, -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
    --ty-font-size-100: 0.75rem;
    --ty-font-size-200: 0.875rem;
    --ty-font-size-300: 1rem;
    --ty-font-size-400: 1.25rem;
    --ty-font-size-500: 1.75rem;
    --ty-font-weight-regular: 400;
    --ty-font-weight-medium: 500;
    --ty-font-weight-semibold: 600;
    --ty-font-weight-bold: 700;
    --ty-line-height-100: 1rem;
    --ty-line-height-200: 1.25rem;
    --ty-line-height-300: 1.375rem;
    --ty-line-height-400: 1.75rem;
    --ty-letter-spacing-label: 0;

    --ty-space-0: 0;
    --ty-space-1: 0.25rem;
    --ty-space-2: 0.5rem;
    --ty-space-3: 0.75rem;
    --ty-space-4: 1rem;
    --ty-space-5: 1.25rem;
    --ty-space-6: 1.5rem;
    --ty-space-8: 2rem;
    --ty-space-10: 2.5rem;

    --ty-radius-0: 0;
    --ty-radius-1: 0.125rem;
    --ty-radius-2: 0.25rem;
    --ty-radius-3: 0.375rem;
    --ty-radius-4: 0.5rem;
    --ty-radius-pill: 9999px;

    --ty-stroke-thin: 1px;
    --ty-stroke-thick: 2px;
    --ty-focus-width: 2px;
    --ty-focus-offset: 2px;
    --ty-focus-color: #0f6cbd;
    --ty-focus-inner-color: #ffffff;

    --ty-duration-fast: 100ms;
    --ty-duration-normal: 150ms;
    --ty-duration-slow: 250ms;
    --ty-easing-standard: cubic-bezier(0.33, 0, 0.67, 1);
    --ty-motion-feedback-duration: var(--ty-duration-fast);
    --ty-motion-content-duration: var(--ty-duration-normal);
    --ty-motion-easing: var(--ty-easing-standard);

    --ty-elevation-1: 0 2px 4px rgb(0 0 0 / 0.14), 0 0 2px rgb(0 0 0 / 0.12);
    --ty-elevation-2: 0 8px 16px rgb(0 0 0 / 0.14), 0 0 2px rgb(0 0 0 / 0.12);
    --ty-overlay-elevation: var(--ty-elevation-2);

    --ty-control-radius: var(--ty-radius-2);
    --ty-control-border-width: var(--ty-stroke-thin);
    --ty-control-font-size: var(--ty-font-size-200);
    --ty-control-padding-inline: var(--ty-space-3);
    --ty-control-padding-block: var(--ty-space-1);
    --ty-control-gap: var(--ty-space-2);
    --ty-control-min-block-size: 2rem;

    --ty-layout-page-gutter: clamp(1rem, 3vw, 2rem);
    --ty-layout-card-gap: var(--ty-space-4);
    --ty-layout-section-gap: var(--ty-space-6);
    --ty-layout-content-measure: 72rem;

    background: var(--ty-color-background);
    color: var(--ty-color-text);
    font-family: var(--ty-font-family);
  }

  [data-design-system='fluent-web'][data-color-scheme='dark'] {
    color-scheme: dark;
    --ty-color-background: #1b1a19;
    --ty-color-on-background: #ffffff;
    --ty-color-surface: #292827;
    --ty-color-surface-hover: #323130;
    --ty-color-surface-pressed: #3b3a39;
    --ty-color-surface-elevated: #323130;
    --ty-color-text: #ffffff;
    --ty-color-text-muted: #d2d0ce;
    --ty-color-border: #605e5c;
    --ty-color-border-strong: #8a8886;
    --ty-color-accent: #479ef5;
    --ty-color-on-accent: #000000;
    --ty-color-accent-hover: #62abf5;
    --ty-color-accent-pressed: #2886de;
    --ty-color-danger: #ff99a4;
    --ty-focus-inner-color: #000000;
  }

  [data-design-system='fluent-web'] ::selection {
    background: #cfe4fa;
    color: #242424;
  }

  @media (forced-colors: active) {
    [data-design-system='fluent-web'] {
      --ty-color-background: Canvas;
      --ty-color-surface: Canvas;
      --ty-color-surface-hover: Canvas;
      --ty-color-surface-pressed: Canvas;
      --ty-color-text: CanvasText;
      --ty-color-text-muted: CanvasText;
      --ty-color-border: ButtonBorder;
      --ty-color-border-strong: ButtonText;
      --ty-color-accent: Highlight;
      --ty-color-on-accent: HighlightText;
      --ty-color-danger: Mark;
      --ty-focus-color: Highlight;
      --ty-focus-inner-color: Canvas;
      background: Canvas;
    }
  }

  @media (prefers-reduced-motion: reduce) {
    [data-design-system='fluent-web'] {
      --ty-motion-feedback-duration: 0ms;
      --ty-motion-content-duration: 0ms;
    }
  }
}

@layer product-components;

@layer product-components {
  [data-design-system='fluent-web'] tyui-button {
    --ty-button-radius: var(--ty-control-radius);
    --ty-button-min-block-size: var(--ty-control-min-block-size);
    --ty-button-padding-inline: var(--ty-space-3);
    --ty-button-padding-block: var(--ty-space-1);
    --ty-button-gap: var(--ty-space-2);
    --ty-button-font-size: var(--ty-font-size-200);
    --ty-button-font-weight: var(--ty-font-weight-semibold);
    --ty-button-line-height: var(--ty-line-height-200);
    --ty-button-border-width: var(--ty-stroke-thin);
  }

  [data-design-system='fluent-web'] tyui-button[size='small'] {
    --ty-button-min-block-size: 1.5rem;
    --ty-button-padding-inline: var(--ty-space-2);
    --ty-button-font-size: var(--ty-font-size-100);
    --ty-button-line-height: var(--ty-line-height-100);
  }

  [data-design-system='fluent-web'] tyui-button[size='large'] {
    --ty-button-min-block-size: 2.5rem;
    --ty-button-padding-inline: var(--ty-space-4);
    --ty-button-font-size: var(--ty-font-size-300);
    --ty-button-line-height: var(--ty-line-height-300);
  }

  [data-design-system='fluent-web'] tyui-button[appearance='primary'] {
    --ty-button-background: var(--ty-color-accent);
    --ty-button-background-hover: var(--ty-color-accent-hover);
    --ty-button-background-active: var(--ty-color-accent-pressed);
    --ty-button-foreground: var(--ty-color-on-accent);
    --ty-button-border-color: transparent;
    --ty-button-border-color-hover: transparent;
  }

  [data-design-system='fluent-web'] tyui-button[appearance='default'],
  [data-design-system='fluent-web'] tyui-button[appearance='secondary'] {
    --ty-button-background: var(--ty-color-surface);
    --ty-button-background-hover: var(--ty-color-surface-hover);
    --ty-button-background-active: var(--ty-color-surface-pressed);
    --ty-button-foreground: var(--ty-color-text);
    --ty-button-border-color: var(--ty-color-border);
    --ty-button-border-color-hover: var(--ty-color-border-strong);
  }

  [data-design-system='fluent-web'] tyui-button[appearance='outline'] {
    --ty-button-background: transparent;
    --ty-button-background-hover: var(--ty-color-surface-hover);
    --ty-button-background-active: var(--ty-color-surface-pressed);
    --ty-button-foreground: var(--ty-color-text);
    --ty-button-border-color: var(--ty-color-border);
    --ty-button-border-color-hover: var(--ty-color-border-strong);
  }

  [data-design-system='fluent-web'] tyui-button[appearance='subtle'] {
    --ty-button-background: transparent;
    --ty-button-background-hover: var(--ty-color-surface-hover);
    --ty-button-background-active: var(--ty-color-surface-pressed);
    --ty-button-foreground: var(--ty-color-text);
    --ty-button-border-color: transparent;
    --ty-button-border-color-hover: transparent;
  }

  [data-design-system='fluent-web'] tyui-button[appearance='transparent'] {
    --ty-button-background: transparent;
    --ty-button-background-hover: transparent;
    --ty-button-background-active: var(--ty-color-surface-pressed);
    --ty-button-foreground: var(--ty-color-text-muted);
    --ty-button-foreground-hover: var(--ty-color-text);
    --ty-button-border-color: transparent;
    --ty-button-border-color-hover: transparent;
  }

  [data-design-system='fluent-web'] tyui-button[shape='rounded'] {
    --ty-button-radius: var(--ty-radius-2);
  }

  [data-design-system='fluent-web'] tyui-button[shape='circular'] {
    --ty-button-radius: var(--ty-radius-pill);
  }

  [data-design-system='fluent-web'] tyui-button[shape='square'] {
    --ty-button-radius: var(--ty-radius-0);
  }

  [data-design-system='fluent-web'] tyui-input {
    --ty-input-background: var(--ty-color-surface);
    --ty-input-background-filled-darker: var(--ty-color-surface-hover);
    --ty-input-background-filled-lighter: var(--ty-color-surface);
    --ty-input-foreground: var(--ty-color-text);
    --ty-input-placeholder-color: var(--ty-color-text-muted);
    --ty-input-border-color: var(--ty-color-border);
    --ty-input-border-color-strong: var(--ty-color-border-strong);
    --ty-input-invalid-border-color: var(--ty-color-danger);
    --ty-input-focus-indicator-color: var(--ty-color-accent);
    --ty-input-radius: var(--ty-control-radius);
    --ty-input-min-block-size: var(--ty-control-min-block-size);
    --ty-input-padding-inline: var(--ty-space-3);
    --ty-input-padding-block: var(--ty-space-1);
    --ty-input-gap: var(--ty-space-2);
    --ty-input-font-size: var(--ty-font-size-200);
  }

  [data-design-system='fluent-web'] tyui-input[size='small'] {
    --ty-input-min-block-size: 1.5rem;
    --ty-input-padding-inline: var(--ty-space-2);
    --ty-input-font-size: var(--ty-font-size-100);
  }

  [data-design-system='fluent-web'] tyui-input[size='large'] {
    --ty-input-min-block-size: 2.5rem;
    --ty-input-padding-inline: var(--ty-space-4);
    --ty-input-font-size: var(--ty-font-size-300);
  }

  [data-design-system='fluent-web'] tyui-input::part(control) {
    background:
      linear-gradient(var(--ty-input-focus-indicator-color), var(--ty-input-focus-indicator-color))
        bottom center / 0 2px no-repeat,
      var(--ty-input-background);
    transition:
      background-size var(--ty-motion-feedback-duration, 120ms) var(--ty-motion-easing, ease),
      background-color var(--ty-motion-feedback-duration, 120ms) var(--ty-motion-easing, ease),
      border-color var(--ty-motion-feedback-duration, 120ms) var(--ty-motion-easing, ease),
      box-shadow var(--ty-motion-feedback-duration, 120ms) var(--ty-motion-easing, ease);
  }

  [data-design-system='fluent-web'] tyui-input:focus-within::part(control) {
    background-size:
      100% 2px,
      auto;
    border-block-end-color: var(--ty-input-focus-indicator-color);
    outline: 0;
    box-shadow: none;
  }

  @media (prefers-reduced-motion: reduce) {
    [data-design-system='fluent-web'] tyui-input::part(control) {
      transition-duration: 0ms;
    }
  }

  @media (forced-colors: active) {
    [data-design-system='fluent-web'] tyui-input::part(control) {
      background:
        linear-gradient(Highlight, Highlight) bottom center / 0 2px no-repeat,
        Field;
    }

    [data-design-system='fluent-web'] tyui-input:focus-within::part(control) {
      background-size:
        100% 2px,
        auto;
      border-block-end-color: Highlight;
    }
  }

  [data-design-system='fluent-web'] tyui-input.ty-fluent-input-underline {
    --ty-input-radius: var(--ty-radius-0);
    --ty-input-background: transparent;
  }

  [data-design-system='fluent-web'] tyui-input.ty-fluent-input-underline::part(control) {
    border-block-start-color: transparent;
    border-inline-color: transparent;
    border-radius: 0;
  }

  [data-design-system='fluent-web'] tyui-input.ty-fluent-input-underline:hover::part(control) {
    border-block-end-color: var(--ty-color-border-strong);
  }

  [data-design-system='fluent-web'] tyui-checkbox {
    --ty-checkbox-foreground: var(--ty-color-text);
    --ty-checkbox-font-size: var(--ty-font-size-200);
    --ty-checkbox-line-height: var(--ty-line-height-200);
    --ty-checkbox-size: 1rem;
    --ty-checkbox-radius: var(--ty-radius-1);
    --ty-checkbox-gap: var(--ty-space-2);
    --ty-checkbox-border-color: var(--ty-color-border-strong);
    --ty-checkbox-border-color-hover: var(--ty-color-accent);
    --ty-checkbox-background: var(--ty-color-surface);
    --ty-checkbox-checked-background: var(--ty-color-accent);
    --ty-checkbox-checked-background-hover: var(--ty-color-accent-hover);
    --ty-checkbox-checked-background-active: var(--ty-color-accent-pressed);
    --ty-checkbox-checked-foreground: var(--ty-color-on-accent);
    --ty-checkbox-indeterminate-foreground: var(--ty-color-accent);
    --ty-checkbox-indeterminate-border-color: var(--ty-color-accent);
  }

  [data-design-system='fluent-web'] tyui-radio,
  [data-design-system='fluent-web'] tyui-radio-group {
    --ty-radio-foreground: var(--ty-color-text);
    --ty-radio-font-size: var(--ty-font-size-200);
    --ty-radio-line-height: var(--ty-line-height-200);
    --ty-radio-size: 1rem;
    --ty-radio-dot-size: 0.5rem;
    --ty-radio-gap: var(--ty-space-2);
    --ty-radio-border-color: var(--ty-color-border-strong);
    --ty-radio-checked-color: var(--ty-color-accent);
    --ty-radio-group-foreground: var(--ty-color-text);
    --ty-radio-group-label-color: var(--ty-color-text);
    --ty-radio-group-gap: var(--ty-space-2);
    --ty-radio-group-inline-gap: var(--ty-space-4);
  }

  [data-design-system='fluent-web'] .ty-fluent-panel {
    box-sizing: border-box;
    color: var(--ty-color-text);
    background: var(--ty-color-surface);
    border: var(--ty-stroke-thin) solid var(--ty-color-border);
    border-radius: var(--ty-radius-3);
    box-shadow: none;
  }

  [data-design-system='fluent-web'] .ty-fluent-panel[data-elevation='raised'] {
    box-shadow: var(--ty-elevation-1);
  }

  [data-design-system='fluent-web'] .ty-fluent-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: var(--ty-space-2);
    align-items: center;
  }

  [data-design-system='fluent-web'] .ty-fluent-form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
    gap: var(--ty-space-4);
  }

  [data-design-system='fluent-web'] .ty-fluent-caption {
    color: var(--ty-color-text-muted);
    font-size: var(--ty-font-size-100);
    line-height: var(--ty-line-height-100);
  }

  [data-design-system='fluent-web'] .ty-fluent-title {
    color: var(--ty-color-text);
    font-size: var(--ty-font-size-400);
    font-weight: var(--ty-font-weight-semibold);
    line-height: var(--ty-line-height-400);
  }
}
