{"version":3,"file":"button.css.cjs","names":[],"sources":["../../../src/inputs/button/button.css?inline"],"sourcesContent":["@layer refine.base {\n  :host {\n    --_bg: var(--button-bg, var(--color-contrast-100));\n    --_color: var(--button-color, var(--color-contrast-900));\n    --_border-color: var(--button-border-color, var(--color-contrast-300));\n    --_radius: var(--button-radius, var(--rounded-lg));\n\n    display: inline-flex;\n    align-items: center;\n    justify-content: var(--button-justify, center);\n  }\n\n  /* Link mode: disable pointer interaction on the inner <a> while disabled/loading. */\n  :host([disabled]) a,\n  :host([loading]) a {\n    pointer-events: none;\n    cursor: not-allowed;\n  }\n\n  :host([loading]) a {\n    cursor: wait;\n  }\n\n  [part='button'] {\n    position: relative;\n    box-sizing: border-box;\n    display: flex;\n    gap: var(--_gap, var(--size-2));\n    align-items: center;\n    justify-content: var(--button-justify, center);\n    width: 100%;\n    min-width: 0;\n    height: var(--_height, var(--size-10));\n    min-height: var(--_touch-target);\n    padding: var(--_padding, var(--size-2) var(--size-4));\n    font-size: var(--_font-size, var(--text-sm));\n    font-weight: var(--font-medium);\n    line-height: var(--_line-height, var(--leading-normal));\n    color: var(--_color);\n    white-space: nowrap;\n    text-decoration: none;\n    cursor: pointer;\n    user-select: none;\n    background: var(--_bg);\n    border: var(--button-border, var(--border)) solid var(--_border-color);\n    border-block-start-width: var(--button-border-top, var(--button-border, var(--border)));\n    border-block-end-width: var(--button-border-bottom, var(--button-border, var(--border)));\n    border-inline-start-width: var(--button-border-start, var(--button-border, var(--border)));\n    border-inline-end-width: var(--button-border-end, var(--button-border, var(--border)));\n    border-radius: var(--_radius);\n    transition: var(\n      --_motion-transition,\n      background var(--transition-normal),\n      border-color var(--transition-normal),\n      box-shadow var(--transition-normal),\n      color var(--transition-normal),\n      transform 120ms var(--ease-spring)\n    );\n  }\n\n  [part='button']:focus-visible {\n    outline: none;\n  }\n\n  /* Keyframe must live in shadow DOM — @keyframes don't inherit across shadow roots */\n  @keyframes spin {\n    to {\n      transform: rotate(360deg);\n    }\n  }\n\n  .loader {\n    position: absolute;\n    width: 1em;\n    height: 1em;\n    border: var(--border-2) solid currentcolor;\n    border-inline-end-color: transparent;\n    border-radius: 50%;\n    animation: var(--_motion-animation, spin var(--transition-loader) infinite);\n  }\n\n  .content {\n    display: inline-flex;\n    align-items: center;\n    min-width: 0;\n    max-width: 100%;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    vertical-align: middle;\n    white-space: nowrap;\n  }\n\n  ::slotted([slot='prefix']),\n  ::slotted([slot='suffix']) {\n    display: inline-flex;\n    flex-shrink: 0;\n    align-items: center;\n    justify-content: center;\n  }\n\n  ::slotted(svg) {\n    flex-shrink: 0;\n    width: var(--_icon-size, var(--leading-6));\n    height: var(--_icon-size, var(--leading-6));\n  }\n}\n\n@layer refine.overrides {\n  :host([fullwidth]) {\n    display: flex;\n    width: 100%;\n  }\n\n  /* `[part='button']`'s own height otherwise comes from the fixed size-preset var\n     (`--_height`, default `--size-10`) — overriding just the host's own box height (e.g. via an\n     external `height: 100%` from a swipe-action panel container) stretches an invisible wrapper\n     without moving the visible button surface at all. Both declarations are needed. */\n  :host([fullheight]) {\n    display: flex;\n    height: 100%;\n  }\n\n  :host([fullheight]) [part='button'] {\n    height: 100%;\n  }\n\n  /* Icon-only always uses perfect circle */\n  :host([rounded][icon-only]) [part='button'] {\n    border-radius: 50%;\n  }\n\n  :host([loading]) .content {\n    visibility: hidden;\n  }\n}\n\n@layer refine.variants {\n  :host([icon-only]) [part='button'] {\n    aspect-ratio: 1;\n    padding: 0;\n  }\n\n  /* ── Per-variant token assignments ─────────────────────────────────────────\n     Each variant sets --_bg/--_color/--_border-color (consuming the public\n     --button-* tokens as overrides) plus optional --_hover-* / --_active-*\n     tokens for interactive states.\n     The shared :is(button, a):hover / :active rules below read these tokens.\n     ─────────────────────────────────────────────────────────────────────── */\n\n  /* Solid (Default) */\n  :host(:not([variant])),\n  :host([variant='solid']) {\n    --_bg: var(--button-bg, var(--_theme-base));\n    --_color: var(--button-color, var(--_theme-contrast));\n    --_border-color: var(--button-border-color, var(--_theme-base));\n    --_hover-bg: var(--_theme-focus);\n    --_active-bg: color-mix(in oklch, var(--_theme-focus) 85%, black);\n    --_active-color: var(--_theme-contrast);\n  }\n\n  /* Flat */\n  :host([variant='flat']) {\n    --_bg: var(--button-bg, color-mix(in oklch, var(--_theme-backdrop) 25%, var(--color-contrast-100)));\n    --_color: var(--button-color, var(--_theme-base));\n    --_border-color: var(--button-border-color, color-mix(in oklch, var(--_theme-focus) 20%, transparent));\n    --_hover-bg: var(--_theme-focus);\n    --_hover-color: var(--_theme-contrast);\n    --_active-bg: color-mix(in oklch, var(--_theme-focus) 85%, black);\n    --_active-color: var(--_theme-contrast);\n  }\n\n  :host([variant='flat']) [part='button'] {\n    box-shadow: var(--inset-shadow-2xs);\n  }\n\n  :host([variant='flat']) [part='button']:hover {\n    box-shadow: var(--inset-shadow-xs);\n  }\n\n  :host([variant='flat']) [part='button']:active {\n    box-shadow: var(--inset-shadow-sm);\n  }\n\n  /* Bordered */\n  :host([variant='bordered']) {\n    --_bg: var(--button-bg, var(--_theme-backdrop));\n    --_color: var(--button-color, var(--_theme-base));\n    --_border-color: var(--button-border-color, var(--_theme-border));\n    --_hover-bg: var(--_theme-focus);\n    --_hover-color: var(--_theme-contrast);\n    --_hover-border-color: var(--_theme-focus);\n    --_active-bg: color-mix(in oklch, var(--_theme-focus) 85%, black);\n    --_active-color: var(--_theme-contrast);\n  }\n\n  :host([variant='bordered']) [part='button'] {\n    box-shadow: var(--inset-shadow-xs);\n  }\n\n  :host([variant='bordered']) [part='button']:hover {\n    box-shadow: var(--inset-shadow-xs);\n  }\n\n  :host([variant='bordered']) [part='button']:active {\n    box-shadow: var(--inset-shadow-sm);\n  }\n\n  /* Outline */\n  :host([variant='outline']) {\n    --_bg: var(--button-bg, transparent);\n    --_color: var(--button-color, var(--_theme-base));\n    --_border-color: var(--button-border-color, var(--_theme-base));\n    --_hover-bg: var(--_theme-backdrop);\n    --_hover-border-color: var(--_theme-focus);\n    --_active-bg: color-mix(in oklch, var(--_theme-base) 85%, black);\n    --_active-color: var(--_theme-contrast);\n  }\n\n  /* Ghost */\n  :host([variant='ghost']) {\n    --_bg: var(--button-bg, transparent);\n    --_color: var(--button-color, var(--_theme-base));\n    --_border-color: var(--button-border-color, transparent);\n    --_hover-bg: var(--_theme-backdrop);\n    --_active-bg: color-mix(in oklch, var(--_theme-base) 85%, black);\n    --_active-color: var(--_theme-contrast);\n  }\n\n  :host([variant='ghost']) [part='button'] {\n    border-width: 0;\n  }\n\n  /* Text */\n  :host([variant='text']) {\n    --_bg: var(--button-bg, transparent);\n    --_color: var(--button-color, var(--_theme-base));\n    --_border-color: var(--button-border-color, transparent);\n    --_hover-color: var(--_theme-focus);\n    --_active-color: color-mix(in oklch, var(--_theme-focus) 85%, black);\n  }\n\n  :host([variant='text']) [part='button'] {\n    border-width: 0;\n  }\n\n  /* Frost — sets its own interactive tokens so the shared rules below apply uniformly */\n  :host([variant='frost']:not([color])) {\n    --_hover-bg: var(--button-frost-active-bg, color-mix(in oklch, var(--color-canvas) 70%, transparent));\n    --_hover-border-color: var(\n      --button-frost-active-border-color,\n      color-mix(in oklch, var(--_theme-focus) 40%, transparent)\n    );\n    --_active-bg: var(--button-frost-active-bg, color-mix(in oklch, var(--color-canvas) 70%, transparent));\n    --_active-border-color: var(\n      --button-frost-active-border-color,\n      color-mix(in oklch, var(--_theme-focus) 40%, transparent)\n    );\n  }\n\n  :host([variant='frost'][color]) {\n    --_hover-bg: var(--button-frost-active-bg, color-mix(in oklch, var(--_theme-backdrop) 50%, var(--_theme-base) 50%));\n    --_hover-border-color: var(\n      --button-frost-active-border-color,\n      color-mix(in oklch, var(--_theme-focus) 65%, transparent)\n    );\n    --_active-bg: var(\n      --button-frost-active-bg,\n      color-mix(in oklch, var(--_theme-backdrop) 50%, var(--_theme-base) 50%)\n    );\n    --_active-border-color: var(\n      --button-frost-active-border-color,\n      color-mix(in oklch, var(--_theme-focus) 65%, transparent)\n    );\n  }\n\n  /* ── Shared interactive states — all variants use --_* tokens set above ── */\n\n  [part='button']:hover {\n    color: var(--_hover-color, var(--_color));\n    background: var(--_hover-bg, var(--_bg));\n    border-color: var(--_hover-border-color, var(--_border-color));\n  }\n\n  [part='button']:active {\n    color: var(--_active-color, var(--_color));\n    background: var(--_active-bg, var(--_bg));\n    border-color: var(--_active-border-color, var(--_border-color));\n    box-shadow: var(--inset-shadow-2xs);\n  }\n}\n\n@layer refine.overrides {\n  /* Focus ring — keyboard navigation only; combines focus shadow + halo to avoid shadow pop */\n  [part='button']:focus-visible {\n    outline: none;\n    box-shadow: var(--_theme-shadow), var(--_theme-halo);\n  }\n\n  /* Hover depth — halo border effect matching ore-input focus style */\n  [part='button']:hover,\n  [part='button']:active {\n    border-color: var(--_hover-border-color, var(--_theme-focus));\n    box-shadow: var(--_theme-shadow), var(--_theme-halo);\n  }\n\n  /* Ghost + Text variants: no border/shadow decoration on hover */\n  :host([variant='ghost']) [part='button']:hover,\n  :host([variant='text']) [part='button']:hover {\n    border-color: transparent;\n    box-shadow: none;\n    transform: none;\n  }\n\n  /* ...nor on :active — stay borderless even though the shared rule above now\n     adds a halo to :active too (physical press transform below still applies,\n     this only cancels border-color/box-shadow). */\n  :host([variant='ghost']) [part='button']:active,\n  :host([variant='text']) [part='button']:active {\n    border-color: transparent;\n    box-shadow: none;\n  }\n\n  /* Physical press feedback */\n  [part='button']:active {\n    transform: translateY(1px);\n  }\n}\n"],"mappings":""}