TP_JO2024/home/dist/component/tab/tab.main.css.map
2024-03-27 17:19:37 +01:00

1 line
No EOL
55 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["<no source>","%3Cinput%20css%20tQd_th%3E","file:///Users/ket/Documents/work/dsfr/src/component/tab/main.scss","file:///Users/ket/Documents/work/dsfr/src/component/link/style/tool/_build.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/typography/tool/_styles.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/display/tool/_display.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/action/tool/_link.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/action/tool/_hover.scss","file:///Users/ket/Documents/work/dsfr/src/component/link/style/tool/_size.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/spacing/tool/_position.scss","file:///Users/ket/Documents/work/dsfr/src/component/tab/style/module/_default.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/spacing/tool/_z-index.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/spacing/tool/_space.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/spacing/tool/_size.scss","file:///Users/ket/Documents/work/dsfr/module/color/mixin/_element.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/selector/tool/_pseudo.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/selector/tool/_pattern.scss","file:///Users/ket/Documents/work/dsfr/src/component/link/style/tool/_icon.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/typography/tool/_list.scss","file:///Users/ket/Documents/work/dsfr/src/component/tab/style/_scheme.scss","file:///Users/ket/Documents/work/dsfr/src/core/style/selector/tool/_block.scss","file:///Users/ket/Documents/work/dsfr/src/component/tab/style/module/_shadow.scss","file:///Users/ket/Documents/work/dsfr/src/component/tab/style/tool/_shadow.scss","file:///Users/ket/Documents/work/dsfr/module/disabled/mixin/_selector.scss","file:///Users/ket/Documents/work/dsfr/module/media-query/mixin/_respond-from.scss","file:///Users/ket/Documents/work/dsfr/module/shame/media-query/mixin/_order.scss"],"names":[],"mappings":"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","file":"tab.main.css","sourcesContent":[null,"@charset \"UTF-8\";\n/* ¯¯¯¯¯¯¯¯¯ *\\\n TAB\n\\* ˍˍˍˍˍˍˍˍˍ */\n@media (min-width: 36em) {\n /*! media sm */\n}\n@media (min-width: 48em) {\n /*! media md */\n}\n@media (min-width: 62em) {\n /*! media lg */\n}\n@media (min-width: 78em) {\n /*! media xl */\n}\n.fr-tabs__tab {\n --text-spacing: 0;\n --title-spacing: 0;\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n width: -moz-fit-content;\n width: fit-content;\n --underline-img: none;\n --hover-tint: var(--hover);\n}\n.fr-tabs__tab::before, .fr-tabs__tab::after {\n display: block;\n}\n\n.fr-tabs__tab {\n font-size: 1rem;\n line-height: 1.5rem;\n min-height: 2.5rem;\n padding: 0.5rem 1rem;\n}\n\n.fr-tabs__tab[class^=fr-icon-]:not([class*=fr-tabs__tab--icon-]), .fr-tabs__tab[class*=\" fr-icon-\"]:not([class*=fr-tabs__tab--icon-]), .fr-tabs__tab[class^=fr-fi-]:not([class*=fr-tabs__tab--icon-]), .fr-tabs__tab[class*=\" fr-fi-\"]:not([class*=fr-tabs__tab--icon-]) {\n overflow: hidden;\n white-space: nowrap;\n max-width: 2.5rem;\n max-height: 2.5rem;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.fr-tabs__tab[class^=fr-icon-]:not([class*=fr-tabs__tab--icon-])::before, .fr-tabs__tab[class*=\" fr-icon-\"]:not([class*=fr-tabs__tab--icon-])::before, .fr-tabs__tab[class^=fr-fi-]:not([class*=fr-tabs__tab--icon-])::before, .fr-tabs__tab[class*=\" fr-fi-\"]:not([class*=fr-tabs__tab--icon-])::before {\n --icon-size: 1rem;\n margin-left: 0;\n margin-right: 0.75rem;\n}\n\n.fr-tabs__tab--icon-left[class^=fr-icon-], .fr-tabs__tab--icon-left[class*=\" fr-icon-\"], .fr-tabs__tab--icon-left[class^=fr-fi-], .fr-tabs__tab--icon-left[class*=\" fr-fi-\"] {\n overflow: initial;\n max-width: 100%;\n max-height: none;\n}\n.fr-tabs__tab--icon-left[class^=fr-icon-]::before, .fr-tabs__tab--icon-left[class*=\" fr-icon-\"]::before, .fr-tabs__tab--icon-left[class^=fr-fi-]::before, .fr-tabs__tab--icon-left[class*=\" fr-fi-\"]::before {\n --icon-size: 1rem;\n margin-left: -0.125rem;\n margin-right: 0.5rem;\n}\n\n.fr-tabs {\n --tabs-height: auto;\n --ul-type: none;\n --ol-type: none;\n --ul-start: 0;\n --ol-start: 0;\n --xl-block: 0;\n --li-bottom: 0;\n --ol-content: none;\n --underline-img: none;\n position: relative;\n overflow: hidden;\n margin-left: 0;\n margin-right: 0;\n margin-top: -4px;\n padding-top: 4px;\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n flex-wrap: wrap;\n height: var(--tabs-height);\n /**\n * Animation de la hauteur du panel\n */\n transition: height 0.3s;\n /**\n * ul : element srollable des boutons\n */\n /**\n * Tab button\n */\n /**\n * Tab Panel\n */\n}\n.fr-tabs--viewport-width {\n margin-left: calc(50% - 50vw);\n margin-right: calc(50% - 50vw);\n}\n@media (min-width: 48em) {\n .fr-tabs--viewport-width {\n margin-left: 0;\n margin-right: 0;\n }\n}\n.fr-tabs::before {\n content: \"\";\n display: block;\n width: 100%;\n height: 100%;\n margin-top: -1px;\n order: 2;\n}\n.fr-tabs__list {\n display: flex;\n align-items: stretch;\n overflow-x: auto;\n width: 100%;\n min-height: 3rem;\n z-index: 1;\n order: 1;\n /**\n * overflow vertical de 4px pour le focus\n */\n margin: -4px 0 -4px;\n padding: 4px 0.75rem;\n}\n.fr-tabs__tab {\n position: relative;\n overflow: visible;\n font-weight: 700;\n z-index: 1;\n margin: 0 0.25rem;\n height: 100%;\n white-space: nowrap;\n background-size: 0 2px, 1px 0, 1px 0, 100% 1px;\n background-repeat: no-repeat, no-repeat, no-repeat, no-repeat;\n background-position: 0 0, 0 calc(100% - 1px), 100% calc(100% - 1px), 100% 100%;\n}\n.fr-tabs__tab[aria-selected=true] {\n background-size: 100% 2px, 1px calc(100% - 1px), 1px calc(100% - 1px), 0 1px;\n}\n.fr-tabs__panel {\n --underline-img: linear-gradient(0deg, currentColor, currentColor);\n --ul-type: disc;\n --ol-type: decimal;\n --ul-start: 1rem;\n --ol-start: 1.5rem;\n --xl-block: 0.5rem;\n --li-bottom: 0.25rem;\n --xl-base: 1em;\n --ol-content: counters(li-counter, \".\") \".  \";\n display: block;\n order: 3;\n position: relative;\n left: -100%;\n width: 100%;\n height: auto;\n padding: 1rem;\n margin-right: -100%;\n flex: 0 0 100%;\n transition: visibility 0.3s, transform 0.3s;\n /**\n * Les éléments non sélectionnés sont cachés et rendus innaccessibles au focus\n * Point d'attention : visibility hidden sur le panel et surcharge sur l'élément selected avec visibility visible créé des problèmes dans la gestion du focus en cas d'imbrication d'onglets\n *\n * tabs\n * └─ panel selected\n * └─ panel (visibility hidden, tabindex -1)\n * └─ tabs\n * └─ panel selected (visibility visible tabindex 0)\n * ↑ ce panel est accessible alors que caché par son panel parent\n * solution : visibility hidden seulement sur les éléments non sélectionnés\n **/\n}\n@media (min-width: 48em) {\n .fr-tabs__panel {\n padding: 2rem;\n }\n}\n.fr-tabs__panel:focus, .fr-tabs__panel:focus-visible {\n outline-offset: calc(-1rem + 2px);\n}\n@media (min-width: 48em) {\n .fr-tabs__panel:focus, .fr-tabs__panel:focus-visible {\n outline-offset: calc(-2rem + 2px);\n }\n}\n.fr-tabs__panel--direction-end {\n transform: translate(100%);\n}\n.fr-tabs__panel--direction-start {\n transform: translate(-100%);\n}\n.fr-tabs__panel:not(.fr-tabs__panel--selected) {\n visibility: hidden;\n}\n\n/*\n* Ombres ajoutées en Js si le contenu est plus grand que le conteneur\n*/\n.fr-tabs__shadow {\n --tabs-list-height: 3rem;\n /**\n * Modifier ombre à gauche\n **/\n /**\n * Modifier ombre à droite\n **/\n /**\n * Modifier combinaison ombre à gauche et ombre à droite\n **/\n}\n.fr-tabs__shadow::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 4px;\n right: 0;\n left: 0;\n z-index: 2;\n box-shadow: inset 0 0 0 0 rgba(22, 22, 22, 0), inset 0 0 0 0 rgba(22, 22, 22, 0);\n height: calc(var(--tabs-list-height)- 8px);\n opacity: 0.8;\n pointer-events: none;\n transition: box-shadow 0.3s;\n}\n.fr-tabs__shadow--left::before {\n box-shadow: inset 2rem 0 1.5rem -2rem #161616, inset 0 0 0 0 rgba(22, 22, 22, 0);\n}\n.fr-tabs__shadow--right::before {\n box-shadow: inset 0 0 0 0 rgba(22, 22, 22, 0), inset -2rem 0 1.5rem -2rem #161616;\n}\n.fr-tabs__shadow--left.fr-tabs__shadow--right::before {\n box-shadow: inset 2rem 0 1.5rem -2rem #161616, inset -2rem 0 1.5rem -2rem #161616;\n}\n\n:root[data-fr-theme=dark] .fr-tabs__shadow::before {\n opacity: 1;\n}\n\n.fr-tabs {\n box-shadow: inset 0 -1px 0 0 var(--border-default-grey);\n /**\n * Tab button\n */\n}\n.fr-tabs::before {\n box-shadow: inset 0 1px 0 0 var(--border-default-grey), inset 1px 0 0 0 var(--border-default-grey), inset -1px 0 0 0 var(--border-default-grey);\n}\n.fr-tabs__tab {\n background-image: linear-gradient(0deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(0deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(0deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(0deg, var(--border-default-grey), var(--border-default-grey));\n box-shadow: 0 2px 0 0 var(--background-default-grey);\n}\n.fr-tabs__tab:not([aria-selected=true]) {\n background-color: var(--background-action-low-blue-france);\n --idle: transparent;\n --hover: var(--background-action-low-blue-france-hover);\n --active: var(--background-action-low-blue-france-active);\n color: var(--text-action-high-grey);\n}\n.fr-tabs__tab[aria-selected=true]:not(:disabled) {\n background-image: linear-gradient(0deg, var(--border-active-blue-france), var(--border-active-blue-france)), linear-gradient(0deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(0deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(0deg, var(--border-default-grey), var(--border-default-grey));\n background-color: var(--background-default-grey);\n --idle: transparent;\n --hover: var(--background-default-grey-hover);\n --active: var(--background-default-grey-active);\n color: var(--text-active-blue-france);\n}\n.fr-tabs__tab:disabled {\n color: var(--text-disabled-grey);\n background-color: var(--background-disabled-grey);\n --idle: transparent;\n --hover: var(--background-disabled-grey-hover);\n --active: var(--background-disabled-grey-active);\n}","////\n/// Tab Main\n/// @group tab\n////\n\n/* ¯¯¯¯¯¯¯¯¯ *\\\n TAB\n\\* ˍˍˍˍˍˍˍˍˍ */\n\n@use 'module/path';\n@use 'module/shame/media-query';\n\n@include path.to-dist(2);\n@include media-query.order;\n\n@import 'index';\n@import 'style/module';\n@import 'style/scheme';\n\n@include _tab-scheme;\n","////\n/// Link Tool : build\n/// @group link\n////\n\n@mixin _link-class($base, $size: md, $place: null, $align-on-content: false, $append: '') {\n $selector: '';\n $base: '#{$base}';\n\n @if $size != md {\n $selector: '#{$base}--#{$size}';\n }\n\n @if $align-on-content {\n $selector: '#{$selector}#{$base}--align-on-content';\n }\n\n @if $place == only {\n @if $selector == '' {\n $selector: '#{$base}';\n }\n $selector: '#{$selector}:not([class*=\"#{str-slice($base, 2)}--icon-\"])';\n }\n @else if $place == left or $place == right {\n $selector: '#{$selector}#{$base}--icon-#{$place}';\n }\n\n @if $selector == '' {\n $selector: $base;\n }\n\n @if $append != '' {\n $selector: '#{$selector} #{$append}';\n }\n\n #{$selector} {\n @if $place != null {\n @include has-icon {\n @content;\n }\n }\n @else {\n @content;\n }\n }\n}\n\n@mixin _build-link-base {\n @include set-text-margin(0);\n @include set-title-margin(0);\n}\n\n@mixin _link-display($display) {\n @if $display == flex {\n @include display-flex(row, center, null, null, true);\n width: -moz-fit-content;\n width: fit-content;\n @include _pseudo(before after) {\n display: block;\n }\n }\n @else {\n display: inline;\n }\n}\n\n@mixin _build-link($settings) {\n $places: map_get($settings, places);\n $sizes: _link-sort-sizes(map_get($settings, sizes));\n $border-radius: map-get($settings, border-radius);\n $align-on-content: map-get($settings, align-on-content);\n $base: ns(map-get($settings, selector));\n $underline: map-get($settings, underline);\n $append: map-get($settings, append);\n\n #{$base} {\n @include _build-link-base;\n @include _link-display(map-get($settings, display));\n\n @if $underline != true {\n @include disable-underline;\n @include tint-enabled(true, null);\n }\n @content;\n }\n\n @if map_get($settings, no-modifier) != true {\n @each $size, $size-settings in $sizes {\n @include _link-class($base, $size, null, false, $append) {\n @include _build-link-size($size-settings, $border-radius);\n\n @if map_get($settings, blank) {\n @include target-blank(true) {\n @include _build-link-icon($size-settings, right, $size, false);\n }\n }\n }\n\n @if $align-on-content {\n @include _link-class($base, $size, null, true, $append) {\n @include _link-align-on-content($size, null, $size-settings);\n }\n }\n\n @if $places != null {\n @each $place in $places {\n @include _link-class($base, $size, $place, false, $append) {\n @include _build-link-icon($size-settings, $place, $size, true);\n }\n\n @if $align-on-content {\n @include _link-class($base, $size, $place, true, $append) {\n @include _link-align-on-content($size, $place, $size-settings);\n }\n }\n }\n\n @if index($places, only) == null {\n @include _link-class($base, $size, only, false, $append) {\n @include before(none);\n }\n }\n }\n }\n }\n}\n\n@mixin build-link() {\n @include _build-link($links-settings) {\n @content;\n }\n}\n","////\n/// Core Tool : Typography build\n/// @group core\n////\n\n@use 'module/spacing';\n\n@function get-text-style($font-size) {\n @return map-get($text-styles, $font-size);\n}\n\n@function get-title-style($font-size) {\n @return map-get($title-styles, $font-size);\n}\n\n@mixin _stylize($font-size, $styles, $prepend, $append) {\n $style: map-get($styles, $font-size);\n\n @if $prepend == null {\n $prepend: '';\n }\n\n @if $append == null {\n $append: '';\n }\n\n font-size: #{$prepend} spacing.space($font-size) #{$append};\n\n @if map-has-key($style, line-height) {\n line-height: #{$prepend} spacing.space(map-get($style, line-height)) #{$append};\n }\n}\n\n@mixin _responsive-styles($settings, $styles, $is-responsive, $prepend, $append) {\n $breakpoints: map-get($settings, breakpoints);\n\n @if map-has-key($settings, weight) {\n font-weight: #{$prepend} map-get($font-weight-scale, map-get($settings, weight)) #{$append};\n }\n\n @if $is-responsive {\n @each $breakpoint, $size in $breakpoints {\n @if $breakpoint == first {\n @include _stylize($size, $styles, $prepend, $append);\n }\n @else {\n @include respond-from($breakpoint) {\n @include _stylize($size, $styles, $prepend, $append);\n }\n }\n }\n }\n @else {\n @if map-has-key($breakpoints, md) {\n @include _stylize(map-get($breakpoints, md), $styles);\n }\n @else {\n @include _stylize(map-get($breakpoints, first), $styles);\n }\n }\n}\n\n@mixin _space-text($settings) {\n @include margin( var(#{'--' + map-get($settings, 'margin') + '-spacing'}) );\n}\n\n@mixin text-style($name, $with-spacing: false, $is-responsive: true, $prepend: null, $important: false) {\n $settings: map-get($text-settings, $name);\n @if $settings {\n $append: '';\n @if $important {\n $append: ' !important';\n }\n\n @include _responsive-styles($settings, $text-styles, $is-responsive, $prepend, $append);\n\n @if $with-spacing {\n @include _space-text($settings);\n }\n }\n}\n\n@mixin title-style($name, $with-spacing: false, $is-responsive: true, $prepend: null, $important: false) {\n $settings: map-get($title-settings, $name);\n @if $settings {\n $append: '';\n @if $important {\n $append: ' !important';\n }\n\n @include _responsive-styles($settings, $title-styles, $is-responsive, $prepend, $append);\n\n @if $with-spacing {\n @include _space-text($settings);\n }\n }\n}\n\n@mixin _set-typography-var($name, $value, $bp: null) {\n @if $bp != null {\n @include respond-from(#{$bp}) {\n --#{$name}-spacing: #{space($value)};\n }\n }\n @else {\n --#{$name}-spacing: #{space($value)};\n }\n}\n\n@mixin set-title-margin($margin, $bp:null) {\n @include _set-typography-var(title, $margin, $bp);\n}\n\n@mixin set-text-margin($margin, $bp:null) {\n @include _set-typography-var(text, $margin, $bp);\n}\n\n@mixin set-display-margin($margin, $bp:null) {\n @include _set-typography-var(display, $margin, $bp);\n}\n","////\n/// Core Tool : Display display\n/// @group core\n////\n\n@mixin display-flex($flex-direction: row, $align-items: null, $justify-content: null, $flex-wrap: null, $inline: false) {\n\n @if $inline == true {\n display: inline-flex;\n }\n @else {\n display: flex;\n }\n\n @if $flex-direction != null {\n flex-direction: #{$flex-direction};\n }\n\n @if $align-items != null {\n align-items: #{$align-items};\n }\n\n @if $justify-content != null {\n justify-content: #{$justify-content};\n }\n\n @if $flex-wrap != null {\n flex-wrap: #{$flex-wrap};\n }\n}\n","////\n/// Core Tool : Reset\n/// @group core\n////\n\n$underline-thickness: 0.0625em;\n\n@mixin a-reset ($minimal: false) {\n text-decoration: var(--text-decoration);\n @if not $minimal {\n color: inherit;\n }\n}\n\n@mixin init-underline() {\n --underline-max-width: 100%;\n --underline-hover-width: 0;\n --underline-idle-width: var(--underline-max-width);\n --underline-x: calc(var(--underline-max-width) * 0);\n --underline-thickness: #{$underline-thickness};\n}\n\n@mixin enable-underline() {\n --underline-img: linear-gradient(0deg, currentColor, currentColor);\n}\n\n@mixin enable-underline-legacy() {\n [href] {\n text-decoration: underline;\n }\n}\n\n@mixin disable-underline() {\n --underline-img: none;\n}\n\n@mixin disable-underline-legacy() {\n [href] {\n text-decoration: none;\n }\n}\n\n@mixin link-underline() {\n background-image: var(--underline-img), var(--underline-img);\n background-position: var(--underline-x) 100%, var(--underline-x) calc(100% - var(--underline-thickness));\n background-repeat: no-repeat, no-repeat;\n transition: background-size 0s;\n background-size: var(--underline-hover-width) calc(var(--underline-thickness) * 2), var(--underline-idle-width) var(--underline-thickness);\n}\n\n@mixin link-underline-hover-only() {\n --underline-idle-width: 0;\n}\n\n@mixin hover-underline () {\n &:hover,\n &:active {\n --underline-hover-width: var(--underline-max-width);\n }\n}\n\n@mixin external-link() {\n @include icon-style(after);\n @include icon-size(sm, after);\n @include icon-image(external-link-line, after);\n @include after(var(--external-link-content)) {\n @include margin-left(1v);\n }\n}\n\n@mixin enable-external() {\n --external-link-content: '';\n}\n\n@mixin disable-external() {\n --external-link-content: none;\n}\n\n@mixin target-blank ($unify: false) {\n @if $unify and & {\n &[target=\"_blank\"] {\n @content;\n }\n }\n @else {\n [target=\"_blank\"] {\n @content;\n }\n }\n}\n","////\n/// Core Tool : Action Hover\n/// @group core\n////\n\n@mixin hover-media-query () {\n @media (hover: hover) and (pointer: fine) {\n @content;\n }\n}\n\n@mixin hover-type-selector($elements, $type: all, $check-disabled: false) {\n $selectors: ();\n\n @each $element, $setting in $elements {\n $hover: map-get($setting, hover);\n $selector: map-get($setting, selector);\n @if $hover {\n @if $type == map-get($hover, type) or $type == all {\n $nested: $selector;\n @if $check-disabled {\n $nested: nest($selector, map-get($hover, selector));\n }\n $associated: $nested;\n @if & != null and '#{&}' != ':root' {\n $associated: selector-associate('#{&}', $nested);\n }\n $selectors: append($selectors, $associated, 'comma');\n }\n }\n }\n\n @at-root #{$selectors} {\n @content;\n }\n}\n\n@mixin hover-tint () {\n &:hover {\n background-color: var(--hover-tint);\n }\n\n &:active {\n background-color: var(--active-tint);\n }\n}\n\n@mixin enable-tint () {\n @include tint-enabled(true, true);\n}\n\n@mixin disable-tint() {\n @include tint-enabled(false, false);\n}\n\n@mixin tint-enabled ($hover: null, $active: null) {\n @if $hover {\n --hover-tint: var(--hover);\n }\n @else if $hover == false {\n --hover-tint: var(--idle);\n }\n\n @if $active {\n --active-tint: var(--active);\n }\n @else if $active == false {\n --active-tint: var(--idle);\n }\n}\n\n@mixin hover-brighten ($element, $img) {\n @at-root #{$element} {\n &:hover {\n #{$img} {\n --brightness: calc(100% + var(--brighten) * #{$hover-brighten});\n }\n }\n\n &:active {\n #{$img} {\n --brightness: calc(100% + var(--brighten) * #{$hover-brighten * 2});\n }\n }\n }\n}\n\n@mixin hover-brighten-filter () {\n filter: brightness(var(--brightness));\n}\n","////\n/// Link Tool : sizes\n/// @group link\n////\n\n@use \"sass:math\";\n@use 'module/spacing';\n\n@mixin _build-link-size($size-settings, $border-radius: false) {\n $font-size: map_get($size-settings, font-size);\n $style: get-text-style($font-size);\n $line-height: spacing.space(map_get($style, line-height));\n font-size: spacing.space($font-size);\n line-height: $line-height;\n\n $min-height: spacing.space(map_get($size-settings, min-height));\n @if $min-height > 0 {\n min-height: $min-height;\n }\n\n $max-icon-height: icon-size(md);\n\n @if map_has_key($size-settings, icon-only) {\n $max-icon-height: icon-size(map_get($size-settings, icon-only));\n }\n @else if map_has_key($size-settings, icon) {\n $max-icon-height: icon-size(map_get($size-settings, icon));\n }\n\n $space-y: math.max($line-height, $max-icon-height);\n $padding-x: spacing.space(map_get($size-settings, padding-x));\n $padding-y: math.max(($min-height - $space-y) * 0.5, 0);\n\n padding: #{$padding-y} #{$padding-x};\n\n @if $border-radius {\n border-radius: #{$min-height * 0.5};\n }\n}\n\n@function _link-icon-margin($size) {\n @return math.div(icon-size($size), 8);\n}\n\n@mixin _link-align-on-content($size, $place, $size-settings) {\n $padding-x: spacing.space(map_get($size-settings, padding-x));\n $icon-margin: _link-icon-margin(map_get($size-settings, icon));\n\n @if $place == null {\n margin-left: -($padding-x);\n margin-right: -($padding-x);\n }\n @else if $place == left {\n margin-left: -($padding-x - $icon-margin);\n margin-right: -($padding-x);\n }\n @else if $place == right {\n margin-left: -($padding-x);\n margin-right: -($padding-x - $icon-margin);\n }\n @else if $place == only {\n $icon-size: icon-size(map_get($size-settings, icon-only));\n $min-height: spacing.space(map_get($size-settings, min-height));\n $padding-x: ($min-height - $icon-size) * 0.5;\n\n margin-left: -($padding-x);\n margin-right: -($padding-x);\n }\n}\n","////\n/// Core Tool : Spacing position\n/// @group core\n////\n\n@use 'module/spacing';\n\n@mixin position($position, $top: null, $right: null, $bottom: null, $left: null, $width: null, $height: null) {\n position: #{$position};\n @if $top != null {\n top: #{space($top)};\n }\n @if $right != null {\n right: #{space($right)};\n }\n @if $bottom != null {\n bottom: #{space($bottom)};\n }\n @if $left != null {\n left: #{space($left)};\n }\n\n @include size($width, $height);\n\n @content;\n}\n\n@mixin relative($top: null, $right: null, $bottom: null, $left: null, $width: null, $height: null) {\n @include position(relative, $top, $right, $bottom, $left, $width, $height);\n}\n\n@mixin absolute($top: null, $right: null, $bottom: null, $left: null, $width: null, $height: null) {\n @include position(absolute, $top, $right, $bottom, $left, $width, $height);\n}\n\n@mixin fixed($top: null, $right: null, $bottom: null, $left: null, $width: null, $height: null) {\n @include position(fixed, $top, $right, $bottom, $left, $width, $height);\n}\n\n@mixin sticky($top: null, $right: null, $bottom: null, $left: null, $width: null, $height: null) {\n @include position(sticky, $top, $right, $bottom, $left, $width, $height);\n}\n\n@mixin top($top) {\n top: spacing.space($top);\n}\n\n@mixin right($top) {\n right: spacing.space($top);\n}\n\n@mixin bottom($top) {\n bottom: spacing.space($top);\n}\n\n@mixin left($top) {\n left: spacing.space($top);\n}\n","////\n/// Tab Module : default\n/// @group tab\n////\n\n@include build-tab();\n\n#{ns(tabs)} {\n --tabs-height: auto;\n @include disable-list-style;\n @include disable-underline;\n @include relative;\n overflow: hidden;\n @include margin-x(0);\n @include margin-top(-4px);\n @include padding-top(4px);\n @include display-flex(row, flex-start, null, wrap);\n @include height(var(--tabs-height));\n\n /**\n * Animation de la hauteur du panel\n */\n transition: height $tabs-transition-duration;\n\n // retire le padding du container en mobile\n &--viewport-width {\n @include margin-x(calc(50% - 50vw));\n @include margin-x(0, md);\n }\n\n @include before('', block) {\n @include size(100%, 100%);\n @include margin-top(-1px);\n order: 2;\n }\n\n /**\n * ul : element srollable des boutons\n */\n @include list {\n @include display-flex(null, stretch);\n overflow-x: auto;\n @include width(100%);\n @include min-height(12v);\n z-index: z-index(over);\n order: 1;\n\n /**\n * overflow vertical de 4px pour le focus\n */\n @include margin(-4px 0 -4px);\n @include padding(4px 3v);\n }\n\n /**\n * Tab button\n */\n &__tab {\n @include relative;\n overflow: visible;\n font-weight: font-weight(bold);\n @include z-index(over);\n @include margin(0 1v);\n @include height(100%);\n white-space: nowrap;\n background-size: 0 2px, 1px 0, 1px 0, 100% 1px;\n background-repeat: no-repeat, no-repeat, no-repeat, no-repeat;\n background-position: 0 0, 0 calc(100% - 1px), 100% calc(100% - 1px), 100% 100%;\n\n &[aria-selected='true'] {\n background-size: 100% 2px, 1px calc(100% - 1px), 1px calc(100% - 1px), 0 1px;\n }\n }\n\n /**\n * Tab Panel\n */\n &__panel {\n @include enable-underline;\n @include enable-list-style;\n display: block;\n order: 3;\n @include relative(null, null, null, -100%, 100%, auto);\n @include padding(4v);\n @include padding(8v, md);\n @include margin-right(-100%);\n flex: 0 0 100%;\n transition: visibility $tabs-transition-duration, transform $tabs-transition-duration;\n\n &:focus,\n &:focus-visible {\n outline-offset: calc(-1rem + 2px);\n @include respond-from(md) {\n outline-offset: calc(-2rem + 2px);\n }\n }\n\n &--direction-end {\n transform: translate(100%);\n }\n\n &--direction-start {\n transform: translate(-100%);\n }\n\n /**\n * Les éléments non sélectionnés sont cachés et rendus innaccessibles au focus\n * Point d'attention : visibility hidden sur le panel et surcharge sur l'élément selected avec visibility visible créé des problèmes dans la gestion du focus en cas d'imbrication d'onglets\n *\n * tabs\n * └─ panel selected\n * └─ panel (visibility hidden, tabindex -1)\n * └─ tabs\n * └─ panel selected (visibility visible tabindex 0)\n * ↑ ce panel est accessible alors que caché par son panel parent\n * solution : visibility hidden seulement sur les éléments non sélectionnés\n **/\n @at-root #{&}:not(&--selected) {\n visibility: hidden;\n }\n }\n}\n","////\n/// Core Tool : Spacing z-index\n/// @group core\n////\n\n/// Fonction de gestion des z-index\n/// @access public\n/// @param {String} $index-name - nom du calque de z-index\n@function z-index($index-name) {\n @return map-get($z-indexes, $index-name);\n}\n\n/// Mixin de gestion des z-index\n/// @access public\n/// @param {String} $index-name - nom du calque de z-index\n@mixin z-index($index-name) {\n z-index: z-index($index-name);\n}\n","////\n/// Core Tool : Spacing space\n/// @group core\n////\n\n@use 'module/spacing';\n\n/// Set space property\n///\n/// @param {String} $property ['margin'] - propriété à appliquer à l'espacement `['margin', 'padding']`\n/// @param {Number | list} $value [2] - valeur de l'espacement en v ou w. peut être une liste si la direction n'est pas renseignée\n/// @param {String} $direction - direction de l'espacement `['x', 'y', 'top', 'right', 'bottom', 'left']`\n///\n/// @example scss - Set margin-bottom to 24px\n/// .foo {\n/// @include _spacing('margin', 6v, 'bottom');\n/// }\n@mixin _spacing($property: margin, $value: 0, $direction: null) {\n $v: spacing.space($value);\n @if $direction != null {\n @if $direction == 'x' {\n #{$property}-left: $v;\n #{$property}-right: $v;\n }\n @else if $direction == 'y' {\n #{$property}-top: $v;\n #{$property}-bottom: $v;\n }\n @else {\n #{$property}-#{$direction}: $v;\n }\n }\n @else {\n #{$property}: $v;\n }\n}\n\n@mixin _spacing-from($property: margin, $value: 0, $direction: null, $from: null) {\n @include respond-from($from) {\n @include _spacing($property, $value, $direction);\n }\n}\n\n@mixin padding($values: 0 0 0 0, $from: null) {\n @include _spacing-from(padding, $values, null, $from);\n}\n\n@mixin padding-x($value: 0, $from: null) {\n @include _spacing-from(padding, $value, 'x', $from);\n}\n\n@mixin padding-y($value: 0, $from: null) {\n @include _spacing-from(padding, $value, 'y', $from);\n}\n\n@mixin padding-top($value: 0, $from: null) {\n @include _spacing-from(padding, $value, 'top', $from);\n}\n\n@mixin padding-right($value: 0, $from: null) {\n @include _spacing-from(padding, $value, 'right', $from);\n}\n\n@mixin padding-bottom($value: 0, $from: null) {\n @include _spacing-from(padding, $value, 'bottom', $from);\n}\n\n@mixin padding-left($value: 0, $from: null) {\n @include _spacing-from(padding, $value, 'left', $from);\n}\n\n@mixin margin($values: 0 0 0 0, $from: null) {\n @include _spacing-from(margin, $values, null, $from);\n}\n\n@mixin margin-x($value: 0, $from: null) {\n @include _spacing-from(margin, $value, 'x', $from);\n}\n\n@mixin margin-y($value: 0, $from: null) {\n @include _spacing-from(margin, $value, 'y', $from);\n}\n\n@mixin margin-top($value: 0, $from: null) {\n @include _spacing-from(margin, $value, 'top', $from);\n}\n\n@mixin margin-right($value: 0, $from: null) {\n @include _spacing-from(margin, $value, 'right', $from);\n}\n\n@mixin margin-bottom($value: 0, $from: null) {\n @include _spacing-from(margin, $value, 'bottom', $from);\n}\n\n@mixin margin-left($value: 0, $from: null) {\n @include _spacing-from(margin, $value, 'left', $from);\n}\n","////\n/// Core Tool : Spacing size\n/// @group core\n////\n\n@use '../../../../../module/spacing';\n\n@mixin width($width:null, $from: null) {\n @include respond-from($from) {\n @if $width != null {\n width: #{spacing.space($width)};\n }\n }\n}\n\n@mixin min-width($width:null, $from: null) {\n @include respond-from($from) {\n @if $width != null {\n min-width: #{spacing.space($width)};\n }\n }\n}\n\n@mixin max-width($width:null, $from: null) {\n @include respond-from($from) {\n @if $width != null {\n max-width: #{spacing.space($width)};\n }\n }\n}\n\n@mixin height($height:null, $from: null) {\n @include respond-from($from) {\n @if $height != null {\n height: #{spacing.space($height)};\n }\n }\n}\n\n@mixin min-height($height:null, $from: null) {\n @include respond-from($from) {\n @if $height != null {\n min-height: #{spacing.space($height)};\n }\n }\n}\n\n@mixin max-height($height:null, $from: null) {\n @include respond-from($from) {\n @if $height != null {\n max-height: #{spacing.space($height)};\n }\n }\n}\n\n@mixin size($width:null, $height:null, $from: null) {\n @include respond-from($from) {\n @if $width != null {\n width: #{spacing.space($width)};\n }\n @if $height != null {\n height: #{spacing.space($height)};\n }\n }\n}\n\n@mixin min-size($min-width:null, $min-height:null, $from: null) {\n @include respond-from($from) {\n @if $min-width != null {\n min-width: #{spacing.space($min-width)};\n }\n @if $min-height != null {\n min-height: #{spacing.space($min-height)};\n }\n }\n}\n\n@mixin max-size($max-width:null, $max-height:null, $from: null) {\n @include respond-from($from) {\n @if $max-width != null {\n max-width: #{spacing.space($max-width)};\n }\n @if $max-height != null {\n max-height: #{spacing.space($max-height)};\n }\n }\n}\n","@use 'sass:list';\n@use 'sass:map';\n@use 'module/legacy';\n@use 'module/media-query';\n@use 'module/spacing';\n@use 'module/specificity';\n@use 'module/string';\n@use 'module/utilities';\n@use '../variable/constant';\n@use '../function/box-shadow' as bs;\n@use '../function/colors';\n@use '../function/result';\n@use '../function/token';\n\n$COLOR: constant.$value;\n\n@mixin element($prop, $context, $tokens, $options: (), $value: $COLOR) {\n $legacy: map.get($options, legacy);\n $important: map.get($options, important);\n $hover: map.get($options, hover);\n $standalone: map.get($options, standalone);\n\n $legacy-target: null;\n @if $legacy == true {\n $legacy-target: ie11;\n }\n\n $tokens: token.normalise($tokens, $context);\n $type: decision;\n $options: (var: true);\n\n @if $legacy or $standalone {\n $type: hex;\n $option: (theme: light);\n }\n\n $colors: colors.from-list($tokens, $type, $options);\n $result: result.get($colors, $value);\n $result: specificity.important($result, $important);\n\n @include legacy.is($legacy-target) {\n #{$prop}: #{string.unstringify($result)};\n }\n\n @if ($hover == true or ($hover == inherit and $legacy == false)) and ($context == background and list.length($tokens) == 1) {\n\n $token: nth($tokens, 1);\n @if $legacy or $standalone {\n @include _apply-pseudos($token, false, true, $legacy-target, $prop, $value, $important);\n }\n @else {\n @if $prop == background-color {\n --idle: transparent; // #{$result};\n @include _apply-pseudos($token, true, false, null, $prop, $value, $important);\n }\n @else {\n @include _apply-pseudos($token, true, true, null, $prop, $value, $important);\n }\n }\n }\n}\n\n@mixin _apply-pseudos($token, $decision: true, $pseudo: false, $target: null, $prop: background-color, $value: constant.$value, $important: false) {\n @include legacy.is($target) {\n @include _apply-pseudo($token, hover, $decision, $pseudo, $prop, $value, $important);\n @include _apply-pseudo($token, active, $decision, $pseudo, $prop, $value, $important);\n }\n}\n\n@mixin _apply-pseudo($token, $type, $decision: true, $pseudo: false, $prop: background-color, $value: constant.$value, $important: false) {\n $nest: null;\n $p: --#{$type};\n @if $pseudo {\n $nest: '&:#{$type}';\n $p: $prop;\n }\n\n $t: hex;\n $options: (#{$type}: true);\n @if $decision {\n $t: decision;\n $options: (var: true, #{$type}: true);\n }\n\n $color: colors.from($token, $t, $options);\n $result: result.get($color, $value);\n $result: specificity.important($result, $important);\n\n @include utilities.nest($nest) {\n #{$p}: #{string.unstringify($result)};\n }\n}\n\n/// Ajout d'une couleur de background sur un élément\n/// @access public\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n@mixin background($tokens, $options:()) {\n @if not map.has-key($options, hover) {\n $options: map.merge($options, (hover: inherit));\n }\n @include element(background-color, background, $tokens, $options);\n}\n\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n/// - hover {boolean}: si true, surcharge la valeur de blend pour être héritée\n@mixin transparent-background($options) {\n $legacy: map.get($options, legacy);\n $important: map.get($options, important);\n $hover: map.get($options, hover);\n $tokens: token.normalise(default grey, background);\n $value: specificity.important(transparent, $important);\n\n @if $legacy {\n @include legacy.is(ie11) {\n background-color: transparent;\n\n @if $hover {\n &:hover {\n background-color: rgba(0, 0, 0, 0.05);\n }\n\n &:active {\n background-color: rgba(0, 0, 0, 0.1);\n }\n }\n }\n }\n @else {\n background-color: #{$value};\n @if $hover {\n --hover: inherit;\n --active: inherit;\n }\n }\n}\n\n/// Ajout d'une couleur de background sur un élément\n/// @access public\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n@mixin background-image($tokens, $options, $value: linear-gradient(0deg, $COLOR, $COLOR)) {\n $d: token.length($tokens);\n @if $d > 1 and $value == linear-gradient(0deg, $COLOR, $COLOR) {\n $transformed: ();\n @for $i from 1 through $d {\n $c: string.unquote('$color##{$i}');\n $transformed: list.append($transformed, linear-gradient(0deg, $c, $c), comma);\n }\n $value: $transformed;\n }\n @include element(background-image, background, $tokens, $options, $value);\n}\n\n/// Ajout d'une couleur de texte sur un élément\n/// @access public\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n@mixin text($tokens, $options) {\n @include element(color, text, $tokens, $options);\n}\n\n/// Ajout d'une couleur de texte sur un élément\n/// @access public\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n@mixin text-fill($tokens, $options) {\n @include element(-webkit-text-fill-color, text, $tokens, $options);\n}\n\n/// Ajout d'une couleur de fill sur un élément\n/// @access public\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n@mixin fill($tokens, $options) {\n @include element(fill, background , $tokens, $options);\n}\n\n/// Ajout d'une couleur de border sur un élément\n/// @access public\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n/// - side {String}: le côté affecté. valeurs: top, right, bottom, left\n/// @param {List} $value - définition des propriétés de border\n@mixin border($tokens, $options, $value:1px solid $COLOR) {\n $prop:border;\n @if map.has-key($options, side) {\n $prop:border-#{map.get($options, side)};\n }\n @include element($prop, border, $tokens, $options, $value);\n}\n\n@mixin no-border($options: ()) {\n $breakpoint: map.get($options, breakpoint);\n $legacy: map.get($options, legacy);\n @include media-query.respond-from($breakpoint) {\n @if $legacy {\n @include legacy.is(ie11) {\n border: 0;\n }\n }\n @else {\n border: 0;\n }\n }\n}\n\n/// Ajout d'une couleur d'outline sur un élément\n/// @access public\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n/// @param {List} $value - définition des propriétés d'outline\n@mixin outline($tokens, $options, $value:1px solid $COLOR) {\n @include element(outline, border, $tokens, $options, $value);\n}\n\n/// Ajout d'une couleur de box-shadow sur un élément\n/// @access public\n/// @param {list} $tokens - liste des tokens de décision\n/// @param {map} $options - map des options :\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - important {boolean}: si true, applique !important à la règle css\n/// @param {List} $value - définition des propriétés de box-shadow\n@mixin box-shadow($tokens, $options, $value: all-1-in) {\n $has-keys: true;\n $transformed: ();\n $d: token.length($tokens);\n $i: 1;\n @each $v in $value {\n @if bs.has($v) {\n $transformed: append($transformed, bs.get($v, $i), comma);\n @if $i < $d {\n $i: $i + 1;\n }\n }\n @else {\n $has-keys: false;\n }\n }\n @if $has-keys {\n $value: $transformed;\n }\n @include element(box-shadow, border, $tokens, $options, spacing.space($value));\n}\n\n/// Supprime la shadow-box sur l'élément\n/// @access public\n/// @param {string} $breakpoint - la shadow-box est retiré à partir d'un breakpoint si celui-ci est défini\n@mixin no-box-shadow($options) {\n $breakpoint: map.get($options, breakpoint);\n $legacy: map.get($options, legacy);\n @include media-query.respond-from($breakpoint) {\n @if $legacy {\n @include legacy.is(ie11) {\n box-shadow: none;\n }\n }\n @else {\n box-shadow: none;\n }\n }\n}\n","////\n/// Core Tool : Selector pseudo\n/// @group core\n////\n\n@mixin _pseudo($type:before, $content:null, $display:null) {\n @if $type != after and $type != before and $type != marker and $type != (before after) {\n @error '$type must be before or after element';\n }\n\n $selector: ();\n\n @each $pseudo in $type {\n $selector: append($selector, '&::#{$pseudo}', 'comma');\n }\n\n #{$selector} {\n\n @if $content != null {\n content: $content;\n }\n\n @if $display != null {\n display: #{$display};\n }\n\n @content;\n }\n}\n\n@mixin before($content: null, $display: null) {\n @include _pseudo(before, $content, $display) {\n @content;\n }\n}\n\n@mixin after($content: null, $display: null) {\n @include _pseudo(after, $content, $display) {\n @content;\n }\n}\n\n@mixin marker($content: null, $display: null) {\n @include _pseudo(marker, $content, $display) {\n @content;\n }\n}\n","////\n/// Core Tool : Selector pattern\n/// @group core\n////\n\n@mixin _class-pattern($selector, $unify: true) {\n @if & == null {\n @at-root #{$selector} {\n @content;\n }\n }\n @else if $unify {\n @at-root #{selector-unify(&, $selector)} {\n @content;\n }\n }\n @else {\n #{$selector} {\n @content;\n }\n }\n}\n\n@mixin class-contains($unify: true, $patterns...) {\n\n @if length($patterns) == 1 and length(nth($patterns, 1)) > 1 {\n $patterns: nth($patterns, 1);\n }\n\n $selectors: '';\n\n @each $pattern in $patterns {\n $selectors: '#{$selectors}[class*=\"#{$pattern}\"]';\n }\n\n @include _class-pattern($selectors, $unify) {\n @content;\n }\n}\n\n@mixin class-not-contains($unify: true, $patterns...) {\n\n @if length($patterns) == 1 and length(nth($patterns, 1)) > 1 {\n $patterns: nth($patterns, 1);\n }\n\n $selectors: '';\n @each $pattern in $patterns {\n $selectors: '#{$selectors}:not([class*=\"#{$pattern}\"])';\n }\n\n @include _class-pattern($selectors, $unify) {\n @content;\n }\n}\n\n@mixin class-start-with($start, $unify: true) {\n @include _class-pattern(class-start-with($start), $unify) {\n @content;\n }\n}\n\n@mixin class-not-start-with($start, $unify: true) {\n @include _class-pattern(class-not-start-with($start), $unify) {\n @content;\n }\n}\n\n@mixin class-end-with($end, $unify: true) {\n @include _class-pattern(class-end-with($end), $unify) {\n @content;\n }\n}\n\n@mixin class-not-end-with($end, $unify: true) {\n @include _class-pattern(class-not-end-with($end), $unify) {\n @content;\n }\n}\n\n@mixin class-is-ns($unify: true) {\n @include class-start-with(ns('', ''), $unify) {\n @content;\n }\n}\n\n@mixin class-is-not-ns($unify: true) {\n @include class-not-start-with(ns('', ''), $unify) {\n @content;\n }\n}\n","////\n/// Link Tool : icons\n/// @group link\n////\n\n@use 'module/spacing';\n\n@mixin _build-link-icon($size-settings, $place, $size:md, $override-icon: true) {\n\n $icon-size: icon-size(map_get($size-settings, icon));\n\n @if $place == only {\n $icon-size: icon-size(map_get($size-settings, icon-only));\n }\n\n $icon-margin: _link-icon-margin(map_get($size-settings, icon));\n $icon-margin-x: spacing.space(map_get($size-settings, icon-margin-x));\n\n @if $place == left {\n overflow: initial;\n max-width: 100%;\n max-height: none;\n @include before {\n --icon-size: #{$icon-size};\n margin-left: -($icon-margin);\n margin-right: $icon-margin-x;\n }\n }\n @else if $place == right {\n overflow: initial;\n max-width: 100%;\n max-height: none;\n @include icon-content(false, $override-icon) {\n --icon-size: #{$icon-size};\n margin-right: -($icon-margin);\n margin-left: $icon-margin-x;\n }\n }\n @else if $place == only {\n $min-height: spacing.space(map_get($size-settings, min-height));\n $padding-x: ($min-height - $icon-size) * 0.5;\n\n overflow: hidden;\n white-space: nowrap;\n max-width: $min-height;\n max-height: $min-height;\n padding-left: $padding-x;\n padding-right: $padding-x;\n\n @include before {\n --icon-size: #{$icon-size};\n margin-left: 0;\n margin-right: $padding-x;\n }\n }\n}\n","////\n/// Core Tool : Reset list\n/// @group core\n////\n\n@mixin enable-list-style() {\n $selector: null;\n\n @if & == null {\n $selector: ':root';\n }\n\n @include nest($selector) {\n --ul-type: disc;\n --ol-type: decimal;\n --ul-start: #{space(4v)};\n --ol-start: #{space(6v)};\n --xl-block: #{space(2v)};\n --li-bottom: #{space(1v)};\n --xl-base: 1em;\n --ol-content: counters(li-counter, \".\") \".\\00a0\\00a0\";\n }\n}\n\n@mixin disable-list-style() {\n --ul-type: none;\n --ol-type: none;\n --ul-start: 0;\n --ol-start: 0;\n --xl-block: 0;\n --li-bottom: 0;\n --ol-content: none;\n}\n\n@mixin enable-list-style-legacy($unify: false) {\n $ul: ul;\n $ol: ol;\n\n @if $unify {\n $ul: selector-associate('&', 'ul');\n $ol: selector-associate('&', 'ol');\n }\n\n @at-root {\n #{$ul} {\n list-style-type: disc;\n }\n\n #{$ol} {\n list-style-type: decimal;\n }\n\n #{$ul},\n #{$ol} {\n @include padding-left(4v);\n @include margin-y(2v);\n }\n }\n}\n\n@mixin disable-list-style-legacy($unify: false) {\n $ul: '#{&} ul';\n $ol: '#{&} ol';\n\n @if $unify {\n $ul: selector-associate('#{&}', 'ul');\n $ol: selector-associate('#{&}', 'ol');\n }\n\n @at-root {\n #{$ul} {\n list-style-type: none;\n }\n\n #{$ol} {\n list-style-type: none;\n }\n\n #{$ul},\n #{$ol} {\n @include padding-left(0);\n @include margin-y(0);\n }\n }\n}\n","////\n/// Tab Scheme\n/// @group tab\n////\n\n@use 'module/color';\n@use 'module/disabled';\n\n@mixin _tab-scheme($legacy: false) {\n #{ns(tabs)} {\n @include color.box-shadow(default grey, (legacy: $legacy), bottom-1-in);\n\n @include before {\n @include color.box-shadow(default grey, (legacy: $legacy), top-1-in left-1-in right-1-in);\n }\n\n /**\n * Tab button\n */\n &__tab {\n @include color.background-image((border default grey) (border default grey) (border default grey) (border default grey), (legacy: $legacy));\n @include color.box-shadow(background default grey, (legacy: $legacy), bottom-2-out);\n\n &:not([aria-selected=true]) {\n @include color.background(action-low blue-france, (legacy: $legacy));\n @include color.text(action-high grey, (legacy: $legacy));\n }\n\n &[aria-selected=true]:not(:disabled) {\n @include color.background-image((border active blue-france) (border default grey) (border default grey) (border default grey), (legacy: $legacy));\n @include color.background(default grey, (legacy: $legacy));\n @include color.text(active blue-france, (legacy: $legacy));\n }\n\n @include disabled.selector((), (legacy: $legacy, text: true, background: true));\n }\n }\n}\n","////\n/// Core Tool : Selector block\n/// @group core\n////\n\n@mixin title() {\n &__title {\n @content;\n }\n}\n\n@mixin body() {\n &__body {\n @content;\n }\n}\n\n@mixin list() {\n &__list {\n @content;\n }\n}\n\n@mixin list-item() {\n &__item {\n @content;\n }\n}\n","////\n/// Tab module : Shadow\n/// @group Tab\n////\n\n@use 'module/selector';\n\n/*\n* Ombres ajoutées en Js si le contenu est plus grand que le conteneur\n*/\n#{ns(tabs__shadow)} {\n --tabs-list-height: #{space(12v)};\n\n @include before('', block) {\n @include absolute(4px, 0, null, 0);\n @include z-index(above);\n @include _tabs-scroll-shadow(false, false);\n @include height(calc(var(--tabs-list-height) - 8px));\n opacity: 0.8;\n pointer-events: none;\n transition: box-shadow 0.3s;\n }\n\n /**\n * Modifier ombre à gauche\n **/\n &--left {\n @include before {\n @include _tabs-scroll-shadow(true, false); // @TODO: à implementer dans la mixin shadow\n }\n }\n\n /**\n * Modifier ombre à droite\n **/\n &--right {\n @include before {\n @include _tabs-scroll-shadow(false, true); // @TODO: à implementer dans la mixin shadow\n }\n }\n\n /**\n * Modifier combinaison ombre à gauche et ombre à droite\n **/\n &--left#{&}--right {\n @include before {\n @include _tabs-scroll-shadow(true, true); // @TODO: à implementer dans la mixin shadow\n }\n }\n}\n\n@include selector.theme(dark) {\n #{ns(tabs__shadow)} {\n @include before {\n opacity: 1;\n }\n }\n}\n","////\n/// Table Tool : shadow\n/// @group Table\n////\n\n@use 'module/spacing';\n@use 'module/color';\n\n@function _get-tabs-shadow($side, $active: true, $theme: light) {\n @if $active == false {\n @return inset 0 0 0 0 color.$black-a0;\n }\n\n $x: 8v;\n @if $side == right {\n $x: -8v;\n }\n\n @return spacing.space(inset #{$x} 0 6v -8v color.$black);\n}\n\n@mixin _tabs-scroll-shadow($left: false, $right: false) {\n box-shadow: _get-tabs-shadow(left, $left), _get-tabs-shadow(right, $right);\n}\n","@use 'sass:list';\n@use 'sass:map';\n@use 'colors';\n@use 'module/selector';\n\n/// Applique les couleurs disabled sur l'élément avec les sélecteurs appropriés\n/// @access public\n/// @param {map} map des options :\n/// - can-be-link {boolean}: ajoute le sélecteur de lien sans href.\n/// - legacy {boolean}: version pour navigateurs modernes ou anciens.\n/// - background {boolean}: true, applique le token background disabled sur la couleur de fond\n/// - text {boolean}: true, applique le token text disabled sur la couleur de texte\n/// - box-shadow {}: si true, applique le token border disabled sur l'élément avec la box-shadow par défaut (encadré de 1 px). si une valeur de box-shadow est fournie, applique cette valeur (voir get-box-shadow)\n@mixin selector($options: (), $colors: null) {\n $selectors: '&:disabled';\n @if map.get($options, can-be-link) {\n $selectors: list.append($selectors, selector.associate(&, 'a:not([href])'), comma);\n }\n\n @at-root #{$selectors} {\n @if $colors != null {\n @include colors.colors($colors);\n }\n @content;\n }\n}\n","@use '../variable/breakpoints';\n\n/// Set media query styles\n///\n/// @param {String} $media [md] - Layout size `['xs', 'sm', 'md', 'lg', 'xl']`\n///\n/// @example scss -\n/// .foo {\n/// @include respond-from(md) {\n/// }\n/// }\n@mixin respond-from($media) {\n $limits: map_get(breakpoints.$values, $media);\n\n @if $limits != null {\n @media (min-width: nth($limits, 1)) {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n","@use 'module/media-query/variable/breakpoints';\n@use 'module/media-query';\n\n@mixin order () {\n @each $bp, $limits in breakpoints.$values {\n @if $bp != xs {\n @include media-query.respond-from($bp) {\n /*! media #{$bp} */\n }\n }\n }\n}\n"]}