{"version":3,"sourceRoot":"","sources":["../src/css/flex-utils.scss","../src/themes/ionic.mixins.scss"],"names":[],"mappings":"AA0BM,yBACE,oCADF,uBACE,kCADF,0BACE,gCADF,2BACE,uCADF,0BACE,sCADF,2BACE,iCCsIJ,yBDvIE,4BACE,oCADF,0BACE,kCADF,6BACE,gCADF,8BACE,uCADF,6BACE,sCADF,8BACE,kCCsIJ,yBDvIE,4BACE,oCADF,0BACE,kCADF,6BACE,gCADF,8BACE,uCADF,6BACE,sCADF,8BACE,kCCsIJ,yBDvIE,4BACE,oCADF,0BACE,kCADF,6BACE,gCADF,8BACE,uCADF,6BACE,sCADF,8BACE,kCCsIJ,0BDvIE,4BACE,oCADF,0BACE,kCADF,6BACE,gCADF,8BACE,uCADF,6BACE,sCADF,8BACE,kCAqBF,uBACE,6BADF,qBACE,2BADF,wBACE,8BADF,yBACE,+BADF,0BACE,gCCgHJ,yBDjHE,0BACE,6BADF,wBACE,2BADF,2BACE,8BADF,4BACE,+BADF,6BACE,iCCgHJ,yBDjHE,0BACE,6BADF,wBACE,2BADF,2BACE,8BADF,4BACE,+BADF,6BACE,iCCgHJ,yBDjHE,0BACE,6BADF,wBACE,2BADF,2BACE,8BADF,4BACE,+BADF,6BACE,iCCgHJ,0BDjHE,0BACE,6BADF,wBACE,2BADF,2BACE,8BADF,4BACE,+BADF,6BACE,iCAsBF,sBACE,4BADF,oBACE,0BADF,uBACE,6BADF,wBACE,8BADF,yBACE,+BADF,qBACE,2BCyFJ,yBD1FE,yBACE,4BADF,uBACE,0BADF,0BACE,6BADF,2BACE,8BADF,4BACE,+BADF,wBACE,4BCyFJ,yBD1FE,yBACE,4BADF,uBACE,0BADF,0BACE,6BADF,2BACE,8BADF,4BACE,+BADF,wBACE,4BCyFJ,yBD1FE,yBACE,4BADF,uBACE,0BADF,0BACE,6BADF,2BACE,8BADF,4BACE,+BADF,wBACE,4BCyFJ,0BD1FE,yBACE,4BADF,uBACE,0BADF,0BACE,6BADF,2BACE,8BADF,4BACE,+BADF,wBACE,4BAsBF,2BACE,sCADF,yBACE,oCADF,4BACE,kCADF,6BACE,yCADF,4BACE,wCADF,4BACE,wCCkEJ,yBDnEE,8BACE,sCADF,4BACE,oCADF,+BACE,kCADF,gCACE,yCADF,+BACE,wCADF,+BACE,yCCkEJ,yBDnEE,8BACE,sCADF,4BACE,oCADF,+BACE,kCADF,gCACE,yCADF,+BACE,wCADF,+BACE,yCCkEJ,yBDnEE,8BACE,sCADF,4BACE,oCADF,+BACE,kCADF,gCACE,yCADF,+BACE,wCADF,+BACE,yCCkEJ,0BDnEE,8BACE,sCADF,4BACE,oCADF,+BACE,kCADF,gCACE,yCADF,+BACE,wCADF,+BACE,yCAoBF,cACE,8BADF,sBACE,sCADF,iBACE,iCADF,yBACE,yCC6CJ,yBD9CE,iBACE,8BADF,yBACE,sCADF,oBACE,iCADF,4BACE,0CC6CJ,yBD9CE,iBACE,8BADF,yBACE,sCADF,oBACE,iCADF,4BACE,0CC6CJ,yBD9CE,iBACE,8BADF,yBACE,sCADF,oBACE,iCADF,4BACE,0CC6CJ,0BD9CE,iBACE,8BADF,yBACE,sCADF,oBACE,iCADF,4BACE,0CAmBN,UACE,0BADF,YACE,4BADF,kBACE,kCAQE,eACE,0BADF,iBACE,4BADF,uBACE,kCCgBJ,yBDjBE,kBACE,0BADF,oBACE,4BADF,0BACE,mCCgBJ,yBDjBE,kBACE,0BADF,oBACE,4BADF,0BACE,mCCgBJ,yBDjBE,kBACE,0BADF,oBACE,4BADF,0BACE,mCCgBJ,0BDjBE,kBACE,0BADF,oBACE,4BADF,0BACE,mCAoBF,YACE,kBADF,eACE,qBADF,kBACE,wBADF,eACE,qBCLJ,yBDIE,eACE,kBADF,kBACE,qBADF,qBACE,wBADF,kBACE,sBCLJ,yBDIE,eACE,kBADF,kBACE,qBADF,qBACE,wBADF,kBACE,sBCLJ,yBDIE,eACE,kBADF,kBACE,qBADF,qBACE,wBADF,kBACE,sBCLJ,0BDIE,eACE,kBADF,kBACE,qBADF,qBACE,wBADF,kBACE,sBAYJ,iBACE,uBAGF,iBACE,uBAGF,mBACE,yBAGF,mBACE,yBC9BF,yBDiBA,oBACE,uBAGF,oBACE,uBAGF,sBACE,yBAGF,sBACE,0BC9BF,yBDiBA,oBACE,uBAGF,oBACE,uBAGF,sBACE,yBAGF,sBACE,0BC9BF,yBDiBA,oBACE,uBAGF,oBACE,uBAGF,sBACE,yBAGF,sBACE,0BC9BF,0BDiBA,oBACE,uBAGF,oBACE,uBAGF,sBACE,yBAGF,sBACE,0BAWF,qCAGE,saAGF,oCC/CA,yBDyCA,wCAGE,6cAGF,wCC/CA,yBDyCA,wCAGE,6cAGF,wCC/CA,yBDyCA,wCAGE,6cAGF,wCC/CA,0BDyCA,wCAGE,6cAGF","file":"flex-utils.css","sourcesContent":["@import \"../themes/ionic.globals\";\n@import \"../themes/ionic.mixins\";\n\n// Flex Utilities\n// ------------------------------------------------------------------\n// Provides utility classes to control flexbox layout, alignment,\n// and sizing of elements. Includes responsive variants for managing\n// flex direction, alignment, justification, wrapping, growth,\n// shrinking, and ordering at different breakpoints.\n\n// Align Content\n// ------------------------------------------------------------------\n\n$align-content-values: (\n  start: flex-start,\n  end: flex-end,\n  center: center,\n  between: space-between,\n  around: space-around,\n  stretch: stretch\n);\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    @each $key, $value in $align-content-values {\n      .ion-align-content#{$infix}-#{$key} {\n        align-content: #{$value} !important;\n      }\n    }\n  }\n}\n\n// Align Items\n// ------------------------------------------------------------------\n\n$align-items-values: (\n  start,\n  end,\n  center,\n  stretch,\n  baseline\n);\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    @each $value in $align-items-values {\n      .ion-align-items#{$infix}-#{$value} {\n        align-items: #{$value} !important;\n      }\n    }\n  }\n}\n\n// Align Self\n// ------------------------------------------------------------------\n\n$align-self-values: (\n  start,\n  end,\n  center,\n  stretch,\n  baseline,\n  auto\n);\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    @each $value in $align-self-values {\n      .ion-align-self#{$infix}-#{$value} {\n        align-self: #{$value} !important;\n      }\n    }\n  }\n}\n\n// Justify Content\n// ------------------------------------------------------------------\n\n$justify-content-values: (\n  start: flex-start,\n  end: flex-end,\n  center: center,\n  between: space-between,\n  around: space-around,\n  evenly: space-evenly\n);\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    @each $key, $value in $justify-content-values {\n      .ion-justify-content#{$infix}-#{$key} {\n        justify-content: #{$value} !important;\n      }\n    }\n  }\n}\n\n// Flex Direction\n// ------------------------------------------------------------------\n\n$flex-direction-values: (\n  row,\n  row-reverse,\n  column,\n  column-reverse\n);\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    @each $value in $flex-direction-values {\n      .ion-flex#{$infix}-#{$value} {\n        flex-direction: #{$value} !important;\n      }\n    }\n  }\n}\n\n// Flex Wrap\n// ------------------------------------------------------------------\n\n$flex-wrap-values: (\n  wrap,\n  nowrap,\n  wrap-reverse\n);\n\n@each $value in $flex-wrap-values {\n  // TODO(FW-6697): remove ion-wrap, ion-nowrap, ion-wrap-reverse\n  // in favor of the new ion-flex-wrap, ion-flex-nowrap, and\n  // ion-flex-wrap-reverse classes\n  .ion-#{$value} {\n    flex-wrap: #{$value} !important;\n  }\n}\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    @each $value in $flex-wrap-values {\n      .ion-flex#{$infix}-#{$value} {\n        flex-wrap: #{$value} !important;\n      }\n    }\n  }\n}\n\n// Flex Fill\n// ------------------------------------------------------------------\n\n$flex-fill-values: (\n  1,\n  auto,\n  initial,\n  none\n);\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    @each $value in $flex-fill-values {\n      .ion-flex#{$infix}-#{$value} {\n        flex: #{$value} !important;\n      }\n    }\n  }\n}\n\n// Flex Grow and Shrink\n// ------------------------------------------------------------------\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    .ion-flex#{$infix}-grow-0 {\n      flex-grow: 0 !important;\n    }\n\n    .ion-flex#{$infix}-grow-1 {\n      flex-grow: 1 !important;\n    }\n\n    .ion-flex#{$infix}-shrink-0 {\n      flex-shrink: 0 !important;\n    }\n\n    .ion-flex#{$infix}-shrink-1 {\n      flex-shrink: 1 !important;\n    }\n  }\n}\n\n// Flex Order\n// ------------------------------------------------------------------\n\n@each $breakpoint in map-keys($screen-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $screen-breakpoints);\n  @include media-breakpoint-up($breakpoint, $screen-breakpoints) {\n    .ion-order#{$infix}-first { order: -1 !important; }\n\n    @for $i from 0 through 12 {\n      .ion-order#{$infix}-#{$i} { order: #{$i} !important; }\n    }\n\n    .ion-order#{$infix}-last { order: 13 !important; }\n  }\n}\n","\n/**\n * A heuristic that applies CSS to tablet\n * viewports.\n *\n * Usage:\n * @include tablet-viewport() {\n *   :host {\n *     background-color: green;\n *   }\n * }\n */\n@mixin tablet-viewport() {\n  @media screen and (min-width: 768px) {\n    @content;\n  }\n}\n\n/**\n * A heuristic that applies CSS to mobile\n * viewports (i.e. phones, not tablets).\n *\n * Usage:\n * @include mobile-viewport() {\n *   :host {\n *     background-color: blue;\n *   }\n * }\n */\n@mixin mobile-viewport() {\n  @media screen and (max-width: 767px) {\n    @content;\n  }\n}\n\n@mixin input-cover() {\n  @include position(0, null, null, 0);\n  @include margin(0);\n\n  position: absolute;\n\n  width: 100%;\n  height: 100%;\n\n  border: 0;\n  background: transparent;\n  cursor: pointer;\n\n  appearance: none;\n  outline: none;\n\n  &::-moz-focus-inner {\n    border: 0;\n  }\n}\n\n@mixin visually-hidden() {\n  position: absolute;\n\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  width: 100%;\n  height: 100%;\n\n  margin: 0;\n  padding: 0;\n\n  border: 0;\n  outline: 0;\n  clip: rect(0 0 0 0);\n\n  opacity: 0;\n  overflow: hidden;\n\n  -webkit-appearance: none;\n  -moz-appearance: none;\n}\n\n@mixin text-inherit() {\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n  font-weight: inherit;\n  letter-spacing: inherit;\n  text-decoration: inherit;\n  text-indent: inherit;\n  text-overflow: inherit;\n  text-transform: inherit;\n  text-align: inherit;\n  white-space: inherit;\n  color: inherit;\n}\n\n@mixin button-state() {\n  @include position(0, 0, 0, 0);\n\n  position: absolute;\n\n  content: \"\";\n\n  opacity: 0;\n}\n\n// Font smoothing\n// --------------------------------------------------\n\n@mixin font-smoothing() {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n}\n\n// Get the key from a map based on the index\n@function index-to-key($map, $index) {\n  $keys: map-keys($map);\n\n  @return nth($keys, $index);\n}\n\n\n// Breakpoint Mixins\n// ---------------------------------------------------------------------------------\n\n// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n//    (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$screen-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// ---------------------------------------------------------------------------------\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n//    >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    576px\n@function breakpoint-min($name, $breakpoints: $screen-breakpoints) {\n  $min: map-get($breakpoints, $name);\n\n  @return if($name != index-to-key($breakpoints, 1), $min, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n//    >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    \"\"  (Returns a blank string)\n//    >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $screen-breakpoints) {\n  @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $screen-breakpoints) {\n  $min: breakpoint-min($name, $breakpoints);\n  @if $min {\n    @media (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n//    >> breakpoint-next(sm)\n//    md\n//    >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    md\n//    >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n//    md\n@function breakpoint-next($name, $breakpoints: $screen-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n  $n: index($breakpoint-names, $name);\n  @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Maximum breakpoint width. Null for the smallest (first) breakpoint.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n//\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\t// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\t// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n//    >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    767.98px\n@function breakpoint-max($name, $breakpoints: $screen-breakpoints) {\n  $max: map-get($breakpoints, $name);\n  @return if($max and $max > 0, $max - .02, null);\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $screen-breakpoints) {\n  $max: breakpoint-max($name, $breakpoints);\n  @if $max {\n    @media (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n\n// Text Direction - ltr / rtl\n//\n// CSS defaults to use the ltr css, and adds [dir=rtl] selectors\n// to override ltr defaults.\n// ----------------------------------------------------------\n\n@mixin multi-dir() {\n  @content;\n\n  // $root: #{&};\n  // @at-root [dir] {\n  //   #{$root} {\n  //     @content;\n  //   }\n  // }\n}\n\n@mixin rtl() {\n  $root: #{&};\n\n  $rootSplit: str-split($root, \",\");\n  $selectors: #{add-root-selector($root, \"[dir=rtl]\")};\n  $selectorsSplit: str-split($selectors, \",\");\n\n  $hostContextSelectors: ();\n  $restSelectors: ();\n  $dirSelectors: ();\n\n  // Selectors must be split into individual selectors in case the browser\n  // doesn't support a specific selector.\n  // For example, Firefox and Safari doesn't support `:host-context()`.\n  // If an invalid selector is used, then the entire group of selectors\n  // will be ignored.\n  // @link https://www.w3.org/TR/selectors-3/#grouping\n  @each $selector in $selectorsSplit {\n    // Group the selectors back into a single selector to optimize the output.\n    @if str-index($selector, \":host-context\") {\n      $hostContextSelectors: append($hostContextSelectors, $selector, comma);\n    } @else {\n      // Group the selectors back into a single selector to optimize the output.\n      $restSelectors: append($restSelectors, $selector, comma);\n    }\n  }\n\n  // Supported by Chrome.\n  @if length($hostContextSelectors) > 0 {\n    @at-root #{$hostContextSelectors} {\n      @content;\n    }\n  }\n\n  // Supported by all browsers.\n  @if length($restSelectors) > 0 {\n    @at-root #{$restSelectors} {\n      @content;\n    }\n  }\n\n  // If browser can support `:dir()`, then add the `:dir()` selectors.\n  @supports selector(:dir(rtl)) {\n    // Adding :dir() in case the browser doesn't support `:host-context()` and does support `:dir()`.\n    // `:host-context()` is added:\n    // - through the `add-root-selector()` function.\n    // - first so that it takes precedence over `:dir()`.\n    // For example,\n    // - Firefox doesn't support `:host-context()`, but does support `:dir()`.\n    // - Safari doesn't support `:host-context()`, but Safari 16.4+ supports `:dir()`\n    // @link https://webkit.org/blog/13966/webkit-features-in-safari-16-4/\n    // -- However, there is a Webkit bug on v16 that prevents `:dir()` from working when\n    // -- the app direction is changed dynamically. v17+ works fine.\n    // -- @link https://bugs.webkit.org/show_bug.cgi?id=257133\n\n    // Supported by Firefox.\n    @at-root #{add-root-selector($root, \":dir(rtl)\", false)} {\n      @content;\n    }\n  }\n}\n\n@mixin ltr() {\n  @content;\n}\n\n\n// SVG Background Image Mixin\n// @param {string} $svg\n// ----------------------------------------------------------\n@mixin svg-background-image($svg, $flip-rtl: false) {\n  $url: url-encode($svg);\n  $viewBox: str-split(str-extract($svg, \"viewBox='\", \"'\"), \" \");\n\n  @if $flip-rtl != true or $viewBox == null {\n    @include multi-dir() {\n      background-image: url(\"data:image/svg+xml;charset=utf-8,#{$url}\");\n    }\n  } @else {\n    $transform: \"transform='translate(#{nth($viewBox, 3)}, 0) scale(-1, 1)'\";\n    $flipped-url: $svg;\n    $flipped-url: str-replace($flipped-url, \"<path\", \"<path #{$transform}\");\n    $flipped-url: str-replace($flipped-url, \"<line\", \"<line #{$transform}\");\n    $flipped-url: str-replace($flipped-url, \"<polygon\", \"<polygon #{$transform}\");\n    $flipped-url: url-encode($flipped-url);\n\n    @include ltr () {\n      background-image: url(\"data:image/svg+xml;charset=utf-8,#{$url}\");\n    }\n    @include rtl() {\n      background-image: url(\"data:image/svg+xml;charset=utf-8,#{$flipped-url}\");\n    }\n  }\n}\n\n// Add property horizontal\n// @param {string} $start\n// @param {string} $end\n// ----------------------------------------------------------\n@mixin property-horizontal($prop, $start, $end: $start) {\n  @if $start == 0 and $end == 0 {\n    #{$prop}-left: $start;\n    #{$prop}-right: $end;\n\n  } @else {\n    -webkit-#{$prop}-start: $start;\n    #{$prop}-inline-start: $start;\n    -webkit-#{$prop}-end: $end;\n    #{$prop}-inline-end: $end;\n  }\n}\n\n// Add property for all directions\n// @param {string} $prop\n// @param {string} $top\n// @param {string} $end\n// @param {string} $bottom\n// @param {string} $start\n// @param {boolean} $content include content or use default\n// ----------------------------------------------------------\n@mixin property($prop, $top, $end: $top, $bottom: $top, $start: $end) {\n  @include property-horizontal($prop, $start, $end);\n  #{$prop}-top: $top;\n  #{$prop}-bottom: $bottom;\n}\n\n// Add padding horizontal\n// @param {string} $start\n// @param {string} $end\n// ----------------------------------------------------------\n@mixin padding-horizontal($start, $end: $start) {\n  @include property-horizontal(padding, $start, $end);\n}\n\n// Add padding for all directions\n// @param {string} $top\n// @param {string} $end\n// @param {string} $bottom\n// @param {string} $start\n// ----------------------------------------------------------\n@mixin padding($top, $end: $top, $bottom: $top, $start: $end) {\n  @include property(padding, $top, $end, $bottom, $start);\n}\n\n// Add margin horizontal\n// @param {string} $start\n// @param {string} $end\n// ----------------------------------------------------------\n@mixin margin-horizontal($start, $end: $start) {\n  @include property-horizontal(margin, $start, $end);\n}\n\n// Add margin for all directions\n// @param {string} $top\n// @param {string} $end\n// @param {string} $bottom\n// @param {string} $start\n// ----------------------------------------------------------\n@mixin margin($top, $end: $top, $bottom: $top, $start: $end) {\n  @include property(margin, $top, $end, $bottom, $start);\n}\n\n// Add position horizontal\n// @param {string} $start - amount to position start\n// @param {string} $end - amount to left: 0; end\n// ----------------------------------------------------------\n@mixin position-horizontal($start: null, $end: null) {\n  @if $start == $end {\n    @include multi-dir() {\n      left: $start;\n      right: $end;\n    }\n  } @else {\n    @at-root {\n      & {\n        inset-inline-start: $start;\n        inset-inline-end: $end;\n      }\n    }\n  }\n}\n\n// Add position for all directions\n// @param {string} $top\n// @param {string} $end\n// @param {string} $bottom\n// @param {string} $start\n// ----------------------------------------------------------\n@mixin position($top: null, $end: null, $bottom: null, $start: null) {\n  @include position-horizontal($start, $end);\n  top: $top;\n  bottom: $bottom;\n}\n\n// Add border for all directions\n// @param {string} $top\n// @param {string} $end\n// @param {string} $bottom\n// @param {string} $start\n// ----------------------------------------------------------\n@mixin border($top, $end: $top, $bottom: $top, $start: $end) {\n  @include property(border, $top, $end, $bottom, $start);\n}\n\n// Add border radius for all directions\n// @param {string} $top-start\n// @param {string} $top-end\n// @param {string} $bottom-end\n// @param {string} $bottom-start\n// ----------------------------------------------------------\n@mixin border-radius($top-start, $top-end: $top-start, $bottom-end: $top-start, $bottom-start: $top-end) {\n  @if $top-start == $top-end and $top-start == $bottom-end and $top-start == $bottom-start {\n    border-radius: $top-start;\n  } @else {\n    border-start-start-radius: $top-start;\n    border-start-end-radius: $top-end;\n    border-end-end-radius: $bottom-end;\n    border-end-start-radius: $bottom-start;\n  }\n}\n\n// Add direction for all directions\n// @param {string} $dir - Direction on LTR\n@mixin direction($dir) {\n  $other-dir: null;\n\n  @if $dir == ltr {\n    $other-dir: rtl;\n  } @else {\n    $other-dir: ltr;\n  }\n\n  @include ltr() {\n    direction: $dir;\n  }\n  @include rtl() {\n    direction: $other-dir;\n  }\n}\n\n// Add float for all directions\n// @param {string} $side\n// @param {string} $decorator - !important\n@mixin float($side, $decorator: null) {\n  @if $side == start {\n    @include ltr() {\n      float: left $decorator;\n    }\n    @include rtl() {\n      float: right $decorator;\n    }\n  } @else if $side == end {\n    @include ltr() {\n      float: right $decorator;\n    }\n    @include rtl() {\n      float: left $decorator;\n    }\n  } @else {\n    @include multi-dir() {\n      float: $side $decorator;\n    }\n  }\n}\n\n@mixin background-position($horizontal, $horizontal-amount: null, $vertical: null, $vertical-amount: null) {\n  @if $horizontal == start or $horizontal == end {\n    $horizontal-ltr: null;\n    $horizontal-rtl: null;\n    @if $horizontal == start {\n      $horizontal-ltr: left;\n      $horizontal-rtl: right;\n    } @else {\n      $horizontal-ltr: right;\n      $horizontal-rtl: left;\n    }\n\n    @include ltr() {\n      background-position: $horizontal-ltr $horizontal-amount $vertical $vertical-amount;\n    }\n    @include rtl() {\n      background-position: $horizontal-rtl $horizontal-amount $vertical $vertical-amount;\n    }\n  } @else {\n    @include multi-dir() {\n      background-position: $horizontal $horizontal-amount $vertical $vertical-amount;\n    }\n  }\n}\n\n@mixin transform-origin($x-axis, $y-axis: null) {\n  @if $x-axis == start {\n    @include ltr() {\n      transform-origin: left $y-axis;\n    }\n    @include rtl() {\n      transform-origin: right $y-axis;\n    }\n  } @else if $x-axis == end {\n    @include ltr() {\n      transform-origin: right $y-axis;\n    }\n    @include rtl() {\n      transform-origin: left $y-axis;\n    }\n  } @else if $x-axis == left or $x-axis == right {\n    @include multi-dir() {\n      transform-origin: $x-axis $y-axis;\n    }\n  } @else {\n    @include ltr() {\n      transform-origin: $x-axis $y-axis;\n    }\n    @include rtl() {\n      transform-origin: calc(100% - #{$x-axis}) $y-axis;\n    }\n  }\n}\n\n// Add transform for all directions\n// @param {string} $transforms - comma separated list of transforms\n@mixin transform($transforms...) {\n  $extra: null;\n\n  $x: null;\n  $ltr-translate: null;\n  $rtl-translate: null;\n\n  @each $transform in $transforms {\n    @if (str-index($transform, translate3d)) {\n      $transform: str-replace($transform, 'translate3d(');\n      $transform: str-replace($transform, ')');\n\n      $coordinates: str-split($transform, ',');\n\n      $x: nth($coordinates, 1);\n      $y: nth($coordinates, 2);\n      $z: nth($coordinates, 3);\n\n      $ltr-translate: translate3d($x, $y, $z);\n      $rtl-translate: translate3d(calc(-1 * #{$x}), $y, $z);\n    } @else {\n      @if $extra == null {\n        $extra: $transform;\n      } @else {\n        $extra: $extra $transform;\n      }\n    }\n  }\n\n  @if $x == '0' or $x == null {\n    @include multi-dir() {\n      transform: $ltr-translate $extra;\n    }\n  } @else {\n    @include ltr() {\n      transform: $ltr-translate $extra;\n    }\n\n    @include rtl() {\n      transform: $rtl-translate $extra;\n    }\n  }\n}\n"]}